diff --git a/public/css/extra.css b/public/css/extra.css index 1b132901..3954c046 100644 --- a/public/css/extra.css +++ b/public/css/extra.css @@ -93,6 +93,10 @@ color: #777; } +.toc .invisable-node { + list-style-type: none; +} + .ui-toc { position: fixed; bottom: 20px; diff --git a/public/vendor/md-toc.js b/public/vendor/md-toc.js index 3457d465..876978f7 100644 --- a/public/vendor/md-toc.js +++ b/public/vendor/md-toc.js @@ -28,7 +28,7 @@ Toc.prototype._collectTitleElements = function () { this._elTitlesNames = [] this.elTitleElements = [] - for (var i = 1; i < 7; i++) { + for (var i = 1; i < 6; i++) { if (this.el.getElementsByTagName('h' + i).length) { this._elTitlesNames.push('h' + i) } @@ -44,59 +44,79 @@ } } - Toc.prototype._createTocContent = function () { - this._elTitleElementsLen = this.elTitleElements.length - if (!this._elTitleElementsLen) return - this.tocContent = '' - this._tempLists = [] + Toc.prototype._createTocContent = function recursiveToc(level = 0, titleElements = [], titleNames = [], ulClass = undefined) { + // Inititalize our elements from the toc object + // which is only available on level 0 + if (level === 0) { + titleElements = this.elTitleElements + titleNames = this._elTitlesNames + ulClass = this.ulClass + } + // No need to do anything for an empty ToC + if (!titleElements.length) return - for (var i = 0; i < this._elTitleElementsLen; i++) { - var j = i + 1 - this._elTitleElement = this.elTitleElements[i] - this._elTitleElementName = this._elTitleElement.tagName - this._elTitleElementTitle = this._elTitleElement.textContent.replace(/"/g, '"') - this._elTitleElementText = (typeof this.process === 'function' ? this.process(this._elTitleElement) : this._elTitleElement.innerHTML).replace(/<(?:.|\n)*?>/gm, '') - var id = this._elTitleElement.getAttribute('id') - if (!id) { - this._elTitleElement.setAttribute('id', 'tip' + i) - id = '#tip' + i - } else { - id = '#' + id - } + var content = '' + this._elTitleElementText + '' + for (var element; element = titleElements.shift();) { + var elementTag = element.tagName.toLowerCase() - if (j !== this._elTitleElementsLen) { - this._elNextTitleElementName = this.elTitleElements[j].tagName - if (this._elTitleElementName !== this._elNextTitleElementName) { - var checkColse = false - var y = 1 - for (var t = this._tempLists.length - 1; t >= 0; t--) { - if (this._tempLists[t].tagName === this._elNextTitleElementName) { - checkColse = true - break - } - y++ - } - if (checkColse) { - this.tocContent += new Array(y + 1).join('') - this._tempLists.length = this._tempLists.length - y - } else { - this._tempLists.push(this._elTitleElement) - if (this.ulClass) { this.tocContent += '\n' + + // Set ToC content of the level 0 everything else pass things to the upper level! + if (level === 0) { + this.tocContent = content + } else { + return content + } } Toc.prototype._showToc = function () {