diff --git a/CHANGELOG.md b/CHANGELOG.md index 34a55c3f..431f8214 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixed +- Refresh Markdown preview on updating configuration (for VSCode >= 1.34) ([#20](https://github.com/marp-team/marp-vscode/pull/20)) - Use Marp Core options when rendering by Marp ([#21](https://github.com/marp-team/marp-vscode/pull/21)) ## v0.1.0 - 2019-03-22 diff --git a/src/__mocks__/vscode.ts b/src/__mocks__/vscode.ts index 9f433711..1b528d3e 100644 --- a/src/__mocks__/vscode.ts +++ b/src/__mocks__/vscode.ts @@ -1,3 +1,4 @@ export const workspace = { getConfiguration: jest.fn(() => new Map()), + onDidChangeConfiguration: jest.fn(), } diff --git a/src/extension.test.ts b/src/extension.test.ts index 548f90f7..4301a36f 100644 --- a/src/extension.test.ts +++ b/src/extension.test.ts @@ -32,8 +32,18 @@ beforeEach(() => mockWorkspaceConfig()) afterEach(() => jest.restoreAllMocks()) describe('#activate', () => { - it('contains #extendMarkdownIt', () => - expect(activate()).toEqual(expect.objectContaining({ extendMarkdownIt }))) + const extContext: any = { subscriptions: { push: jest.fn() } } + + it('contains #extendMarkdownIt', () => { + expect(activate(extContext)).toEqual( + expect.objectContaining({ extendMarkdownIt }) + ) + }) + + it('starts tracking to change of configurations', () => { + const onDidChgConf = workspace.onDidChangeConfiguration as jest.Mock + expect(onDidChgConf).toBeCalledWith(expect.any(Function)) + }) }) describe('#extendMarkdownIt', () => { diff --git a/src/extension.ts b/src/extension.ts index 2a698a15..308502d1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,10 +1,11 @@ import { Marp } from '@marp-team/marp-core' -import { workspace } from 'vscode' +import { ExtensionContext, commands, workspace } from 'vscode' const frontMatterRegex = /^-{3,}\s*([^]*?)^\s*-{3}/m const marpDirectiveRegex = /^marp\s*:\s*true\s*$/m const marpConfiguration = () => workspace.getConfiguration('markdown.marp') const marpVscode = Symbol('marp-vscode') +const shouldRefreshConfs = ['markdown.marp.enableHtml', 'window.zoomLevel'] const detectMarpFromFrontMatter = (markdown: string): boolean => { const m = markdown.match(frontMatterRegex) @@ -51,4 +52,14 @@ export function extendMarkdownIt(md: any) { return md } -export const activate = () => ({ extendMarkdownIt }) +export const activate = ({ subscriptions }: ExtensionContext) => { + subscriptions.push( + workspace.onDidChangeConfiguration(e => { + if (shouldRefreshConfs.some(c => e.affectsConfiguration(c))) { + commands.executeCommand('markdown.preview.refresh') + } + }) + ) + + return { extendMarkdownIt } +}