From 20f573c477ff16fb22780fff71a136f43e73498f Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Mon, 27 Aug 2018 10:06:20 +0200 Subject: [PATCH 1/4] - hide front-matter in preview - skip front-matter when looking for note's title --- browser/lib/findNoteTitle.js | 10 ++++++++++ browser/lib/markdown.js | 1 + package.json | 1 + yarn.lock | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/browser/lib/findNoteTitle.js b/browser/lib/findNoteTitle.js index 81c9400f..25417d53 100644 --- a/browser/lib/findNoteTitle.js +++ b/browser/lib/findNoteTitle.js @@ -1,8 +1,18 @@ +const frontMatterRegex = /^\-{3,}/ + export function findNoteTitle (value) { const splitted = value.split('\n') let title = null let isInsideCodeBlock = false + if (frontMatterRegex.exec(splitted[0])) { + let index = 0 + while (++index < splitted.length && !frontMatterRegex.exec(splitted[index])) { + } + + splitted.splice(0, index + 1) + } + splitted.some((line, index) => { const trimmedLine = line.trim() const trimmedNextLine = splitted[index + 1] === undefined ? '' : splitted[index + 1].trim() diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 49fd2f86..aeebc7ac 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -149,6 +149,7 @@ class Markdown { }) this.md.use(require('markdown-it-kbd')) this.md.use(require('markdown-it-admonition')) + this.md.use(require('markdown-it-front-matter'), fm => {}) const deflate = require('markdown-it-plantuml/lib/deflate') this.md.use(require('markdown-it-plantuml'), '', { diff --git a/package.json b/package.json index e9949adf..04e3f7c6 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "markdown-it-admonition": "^1.0.4", "markdown-it-emoji": "^1.1.1", "markdown-it-footnote": "^3.0.0", + "markdown-it-front-matter": "^0.1.2", "markdown-it-imsize": "^2.0.1", "markdown-it-kbd": "^1.1.1", "markdown-it-multimd-table": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 4ecfa51b..a4f682be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5735,6 +5735,10 @@ markdown-it-footnote@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.1.tgz#7f3730747cacc86e2fe0bf8a17a710f34791517a" +markdown-it-front-matter@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/markdown-it-front-matter/-/markdown-it-front-matter-0.1.2.tgz#e50bf56e77e6a4f5ac4ffa894d4d45ccd9896b20" + markdown-it-imsize@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz#cca0427905d05338a247cb9ca9d968c5cddd5170" From 7c0c81207bf0b93d16bd47bf4eb0f326f093a522 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Fri, 31 Aug 2018 10:27:02 +0200 Subject: [PATCH 2/4] add test --- tests/lib/find-title-test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/lib/find-title-test.js b/tests/lib/find-title-test.js index 2c91a3dc..f587804c 100644 --- a/tests/lib/find-title-test.js +++ b/tests/lib/find-title-test.js @@ -14,7 +14,8 @@ test('findNoteTitle#find should return a correct title (string)', t => { ['hoge\n====\nfuga', 'hoge'], ['====', '===='], ['```\n# hoge\n```', '```'], - ['hoge', 'hoge'] + ['hoge', 'hoge'], + ['---\nlayout: test\n---\n # hoge', '# hoge'] ] testCases.forEach(testCase => { From 90f791de1bf852060aa3d31eeadab210c18ccf70 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sat, 8 Sep 2018 10:43:02 +0200 Subject: [PATCH 3/4] front-matter must be delimited by `---` --- browser/lib/findNoteTitle.js | 6 ++---- browser/lib/markdown-it-frontmatter.js | 21 +++++++++++++++++++++ browser/lib/markdown.js | 2 +- package.json | 1 - yarn.lock | 4 ---- 5 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 browser/lib/markdown-it-frontmatter.js diff --git a/browser/lib/findNoteTitle.js b/browser/lib/findNoteTitle.js index 25417d53..9dea7b1e 100644 --- a/browser/lib/findNoteTitle.js +++ b/browser/lib/findNoteTitle.js @@ -1,13 +1,11 @@ -const frontMatterRegex = /^\-{3,}/ - export function findNoteTitle (value) { const splitted = value.split('\n') let title = null let isInsideCodeBlock = false - if (frontMatterRegex.exec(splitted[0])) { + if (splitted[0] === '---') { let index = 0 - while (++index < splitted.length && !frontMatterRegex.exec(splitted[index])) { + while (++index < splitted.length && splitted[index] !== '---') { } splitted.splice(0, index + 1) diff --git a/browser/lib/markdown-it-frontmatter.js b/browser/lib/markdown-it-frontmatter.js new file mode 100644 index 00000000..051b0bba --- /dev/null +++ b/browser/lib/markdown-it-frontmatter.js @@ -0,0 +1,21 @@ +'use strict' + +module.exports = function frontMatterPlugin (md) { + function frontmatter (state, startLine, endLine, silent) { + if (startLine !== 0 || state.src.substr(startLine, state.eMarks[0]) !== '---') { + return false + } + + let line = 0 + while (++line < state.lineMax && state.src.substring(state.bMarks[line], state.eMarks[line]) !== '---') { + } + + state.line = line + 1 + + return true + } + + md.block.ruler.before('table', 'frontmatter', frontmatter, { + alt: [ 'paragraph', 'reference', 'blockquote', 'list' ] + }) +} diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index aeebc7ac..ba57ec6b 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -149,7 +149,7 @@ class Markdown { }) this.md.use(require('markdown-it-kbd')) this.md.use(require('markdown-it-admonition')) - this.md.use(require('markdown-it-front-matter'), fm => {}) + this.md.use(require('./markdown-it-frontmatter')) const deflate = require('markdown-it-plantuml/lib/deflate') this.md.use(require('markdown-it-plantuml'), '', { diff --git a/package.json b/package.json index 699db82b..c9e22164 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,6 @@ "markdown-it-admonition": "^1.0.4", "markdown-it-emoji": "^1.1.1", "markdown-it-footnote": "^3.0.0", - "markdown-it-front-matter": "^0.1.2", "markdown-it-imsize": "^2.0.1", "markdown-it-kbd": "^1.1.1", "markdown-it-multimd-table": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index a4f682be..4ecfa51b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5735,10 +5735,6 @@ markdown-it-footnote@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.1.tgz#7f3730747cacc86e2fe0bf8a17a710f34791517a" -markdown-it-front-matter@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/markdown-it-front-matter/-/markdown-it-front-matter-0.1.2.tgz#e50bf56e77e6a4f5ac4ffa894d4d45ccd9896b20" - markdown-it-imsize@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/markdown-it-imsize/-/markdown-it-imsize-2.0.1.tgz#cca0427905d05338a247cb9ca9d968c5cddd5170" From f9d5c86245525bee18f5f3c66878fe0a835ec9d0 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sun, 9 Sep 2018 11:24:54 +0200 Subject: [PATCH 4/4] display invalid front-matter --- browser/lib/findNoteTitle.js | 11 +++++++---- browser/lib/markdown-it-frontmatter.js | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/browser/lib/findNoteTitle.js b/browser/lib/findNoteTitle.js index 9dea7b1e..b954f172 100644 --- a/browser/lib/findNoteTitle.js +++ b/browser/lib/findNoteTitle.js @@ -4,11 +4,14 @@ export function findNoteTitle (value) { let isInsideCodeBlock = false if (splitted[0] === '---') { - let index = 0 - while (++index < splitted.length && splitted[index] !== '---') { - } + let line = 0 + while (++line < splitted.length) { + if (splitted[line] === '---') { + splitted.splice(0, line + 1) - splitted.splice(0, index + 1) + break + } + } } splitted.some((line, index) => { diff --git a/browser/lib/markdown-it-frontmatter.js b/browser/lib/markdown-it-frontmatter.js index 051b0bba..66d8ce89 100644 --- a/browser/lib/markdown-it-frontmatter.js +++ b/browser/lib/markdown-it-frontmatter.js @@ -7,12 +7,15 @@ module.exports = function frontMatterPlugin (md) { } let line = 0 - while (++line < state.lineMax && state.src.substring(state.bMarks[line], state.eMarks[line]) !== '---') { + while (++line < state.lineMax) { + if (state.src.substring(state.bMarks[line], state.eMarks[line]) === '---') { + state.line = line + 1 + + return true + } } - state.line = line + 1 - - return true + return false } md.block.ruler.before('table', 'frontmatter', frontmatter, {