From 10c9811fc534a2738c19d8f74a447ed500b730a2 Mon Sep 17 00:00:00 2001 From: Wu Cheng-Han Date: Thu, 2 Jul 2015 00:10:20 +0800 Subject: Jump to 0.3.1 --- public/vendor/md-toc.js | 121 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100755 public/vendor/md-toc.js (limited to 'public/vendor/md-toc.js') diff --git a/public/vendor/md-toc.js b/public/vendor/md-toc.js new file mode 100755 index 00000000..e46afad9 --- /dev/null +++ b/public/vendor/md-toc.js @@ -0,0 +1,121 @@ +/** + * md-toc.js v1.0.2 + * https://github.com/yijian166/md-toc.js + */ + +(function (window) { + function Toc(id, options) { + this.el = document.getElementById(id); + if (!this.el) return; + this.options = options || {}; + this.tocLevel = parseInt(options.level) || 0; + this.tocClass = options['class'] || 'toc'; + this.tocTop = parseInt(options.top) || 0; + this.elChilds = this.el.children; + if (!this.elChilds.length) return; + this._init(); + } + + Toc.prototype._init = function () { + this._collectTitleElements(); + this._createTocContent(); + this._showToc(); + }; + + Toc.prototype._collectTitleElements = function () { + this._elTitlesNames = [], + this.elTitleElements = []; + for (var i = 1; i < 7; i++) { + if (this.el.getElementsByTagName('h' + i).length) { + this._elTitlesNames.push('h' + i); + } + } + + this._elTitlesNames.length = this._elTitlesNames.length > this.tocLevel ? this.tocLevel : this._elTitlesNames.length; + + for (var j = 0; j < this.elChilds.length; j++) { + this._elChildName = this.elChilds[j].tagName.toLowerCase(); + if (this._elTitlesNames.toString().match(this._elChildName)) { + this.elTitleElements.push(this.elChilds[j]); + } + } + }; + + Toc.prototype._createTocContent = function () { + this._elTitleElementsLen = this.elTitleElements.length; + if (!this._elTitleElementsLen) return; + this.tocContent = ''; + this._tempLists = []; + + var url = location.origin + location.pathname; + for (var i = 0; i < this._elTitleElementsLen; i++) { + var j = i + 1; + this._elTitleElement = this.elTitleElements[i]; + this._elTitleElementName = this._elTitleElement.tagName; + this._elTitleElementText = 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; + } + + this.tocContent += '
  • ' + this._elTitleElementText + ''; + + if (j != this._elTitleElementsLen) { + this._elNextTitleElementName = this.elTitleElements[j].tagName; + if (this._elTitleElementName != this._elNextTitleElementName) { + var checkColse = false, + 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); + this.tocContent += ''); + } else { + this.tocContent += ''; + } + } + } + this.tocContent = ''; + }; + + Toc.prototype._showToc = function () { + this.toc = document.createElement('div'); + this.toc.innerHTML = this.tocContent; + this.toc.setAttribute('class', this.tocClass); + if (!this.options.targetId) { + this.el.appendChild(this.toc); + } else { + document.getElementById(this.options.targetId).appendChild(this.toc); + } + var self = this; + if (this.tocTop > -1) { + window.onscroll = function () { + var t = document.documentElement.scrollTop || document.body.scrollTop; + if (t < self.tocTop) { + self.toc.setAttribute('style', 'position:absolute;top:' + self.tocTop + 'px;'); + } else { + self.toc.setAttribute('style', 'position:fixed;top:10px;'); + } + } + } + }; + window.Toc = Toc; +})(window); \ No newline at end of file -- cgit v1.2.3