Skip to content

Commit 226718c

Browse files
authored
Merge pull request #1249 from hackmdio/feature/details-container
Support "spoiler" container syntax
2 parents 75513fa + 6f7de25 commit 226718c

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

public/js/extra.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,12 @@ export function finishView (view) {
539539
} catch (err) {
540540
console.warn(err)
541541
}
542+
543+
// register details toggle for scrollmap recalulation
544+
view.find('details.raw').removeClass('raw').each(function (key, val) {
545+
$(val).on('toggle', window.viewAjaxCallback)
546+
})
547+
542548
// render title
543549
document.title = renderTitle(view)
544550
}
@@ -993,6 +999,22 @@ md.use(markdownitContainer, 'success', { render: renderContainer })
993999
md.use(markdownitContainer, 'info', { render: renderContainer })
9941000
md.use(markdownitContainer, 'warning', { render: renderContainer })
9951001
md.use(markdownitContainer, 'danger', { render: renderContainer })
1002+
md.use(markdownitContainer, 'spoiler', {
1003+
validate: function (params) {
1004+
return params.trim().match(/^spoiler\s+(.*)$/)
1005+
},
1006+
render: function (tokens, idx) {
1007+
var m = tokens[idx].info.trim().match(/^spoiler\s+(.*)$/)
1008+
1009+
if (tokens[idx].nesting === 1) {
1010+
// opening tag
1011+
return '<details><summary>' + md.utils.escapeHtml(m[1]) + '</summary>\n'
1012+
} else {
1013+
// closing tag
1014+
return '</details>\n'
1015+
}
1016+
}
1017+
})
9961018

9971019
let defaultImageRender = md.renderer.rules.image
9981020
md.renderer.rules.image = function (tokens, idx, options, env, self) {

public/js/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ var updateViewDebounce = 100
9595
var cursorMenuThrottle = 50
9696
var cursorActivityDebounce = 50
9797
var cursorAnimatePeriod = 100
98-
var supportContainers = ['success', 'info', 'warning', 'danger']
98+
var supportContainers = ['success', 'info', 'warning', 'danger', 'spoiler']
9999
var supportCodeModes = ['javascript', 'typescript', 'jsx', 'htmlmixed', 'htmlembedded', 'css', 'xml', 'clike', 'clojure', 'ruby', 'python', 'shell', 'php', 'sql', 'haskell', 'coffeescript', 'yaml', 'pug', 'lua', 'cmake', 'nginx', 'perl', 'sass', 'r', 'dockerfile', 'tiddlywiki', 'mediawiki', 'go', 'gherkin'].concat(hljs.listLanguages())
100100
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid', 'abc']
101101
var supportHeaders = [

public/js/lib/syncscroll.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,25 @@ md.use(markdownitContainer, 'success', { render: renderContainer })
110110
md.use(markdownitContainer, 'info', { render: renderContainer })
111111
md.use(markdownitContainer, 'warning', { render: renderContainer })
112112
md.use(markdownitContainer, 'danger', { render: renderContainer })
113+
md.use(markdownitContainer, 'spoiler', {
114+
validate: function (params) {
115+
return params.trim().match(/^spoiler\s+(.*)$/)
116+
},
117+
render: function (tokens, idx) {
118+
var m = tokens[idx].info.trim().match(/^spoiler\s+(.*)$/)
119+
120+
if (tokens[idx].nesting === 1) {
121+
const startline = tokens[idx].map[0] + 1
122+
const endline = tokens[idx].map[1]
123+
124+
// opening tag
125+
return `<details class="part raw" data-startline="${startline}" data-endline="${endline}"><summary>` + md.utils.escapeHtml(m[1]) + '</summary>\n'
126+
} else {
127+
// closing tag
128+
return '</details>\n'
129+
}
130+
}
131+
})
113132

114133
window.preventSyncScrollToEdit = false
115134
window.preventSyncScrollToView = false

0 commit comments

Comments
 (0)