diff options
-rw-r--r-- | public/js/extra.js | 34 | ||||
-rw-r--r-- | public/js/index.js | 5 | ||||
-rw-r--r-- | public/js/pretty.js | 1 | ||||
-rwxr-xr-x | public/vendor/md-toc.js | 11 |
4 files changed, 48 insertions, 3 deletions
diff --git a/public/js/extra.js b/public/js/extra.js index ef1f7e35..12342f09 100644 --- a/public/js/extra.js +++ b/public/js/extra.js @@ -341,6 +341,7 @@ function generateToc(id) { 'level': 3, 'top': -1, 'class': 'toc', + 'ulClass': 'nav', 'targetId': id }); if (target.text() == 'undefined') @@ -460,6 +461,26 @@ function deduplicatedHeaderId(view) { } } +function renderTOC(view) { + var tocs = view.find('.toc').toArray(); + for (var i = 0; i < tocs.length; i++) { + var toc = $(tocs[i]); + var id = 'toc' + i; + toc.attr('id', id); + var target = $('#' + id); + target.html(''); + new Toc('doc', { + 'level': 3, + 'top': -1, + 'class': 'toc', + 'targetId': id + }); + if (target.text() == 'undefined') + target.html(''); + target.replaceWith(target.html()); + } +} + function scrollToHash() { var hash = location.hash; location.hash = ""; @@ -623,7 +644,18 @@ var mathjaxPlugin = new Plugin( return '<span class="mathjax raw">' + match[0] + '</span>'; } ); +//TOC +var tocPlugin = new Plugin( + // regexp to match + /^\[TOC\]$/, + + // this function will be called when something matches + function (match, utils) { + return '<div class="toc"></div>'; + } +); md.use(youtubePlugin); md.use(vimeoPlugin); md.use(gistPlugin); -md.use(mathjaxPlugin);
\ No newline at end of file +md.use(mathjaxPlugin); +md.use(tocPlugin);
\ No newline at end of file diff --git a/public/js/index.js b/public/js/index.js index 046c5407..03f5e587 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -86,6 +86,10 @@ var supportReferrals = [ { text: '![image text](url "title")', search: '![]()' + }, + { + text: '[TOC]', + search: '[]' } ]; var supportExternals = [ @@ -1876,6 +1880,7 @@ function updateViewInner() { finishView(ui.area.view); autoLinkify(ui.area.view); deduplicatedHeaderId(ui.area.view); + renderTOC(ui.area.view); generateToc('toc'); generateToc('toc-affix'); generateScrollspy(); diff --git a/public/js/pretty.js b/public/js/pretty.js index ad5655d6..ff393cac 100644 --- a/public/js/pretty.js +++ b/public/js/pretty.js @@ -6,6 +6,7 @@ $(document.body).show(); finishView(markdown); autoLinkify(markdown); deduplicatedHeaderId(markdown); +renderTOC(markdown); generateToc('toc'); generateToc('toc-affix'); smoothHashScroll(); diff --git a/public/vendor/md-toc.js b/public/vendor/md-toc.js index e46afad9..abdd9f56 100755 --- a/public/vendor/md-toc.js +++ b/public/vendor/md-toc.js @@ -10,6 +10,7 @@ this.options = options || {}; this.tocLevel = parseInt(options.level) || 0; this.tocClass = options['class'] || 'toc'; + this.ulClass = options['ulClass']; this.tocTop = parseInt(options.top) || 0; this.elChilds = this.el.children; if (!this.elChilds.length) return; @@ -80,7 +81,10 @@ this._tempLists.length = this._tempLists.length - y; } else { this._tempLists.push(this._elTitleElement); - this.tocContent += '<ul class="nav">'; + if (this.ulClass) + this.tocContent += '<ul class="' + this.ulClass + '">'; + else + this.tocContent += '<ul>'; } } else { this.tocContent += '</li>'; @@ -93,7 +97,10 @@ } } } - this.tocContent = '<ul class="nav">' + this.tocContent + '</ul>'; + if (this.ulClass) + this.tocContent = '<ul class="' + this.ulClass + '">' + this.tocContent + '</ul>'; + else + this.tocContent = '<ul>' + this.tocContent + '</ul>'; }; Toc.prototype._showToc = function () { |