Comparing version 1.1.0 to 1.2.0
@@ -169,3 +169,7 @@ /*! | ||
var defaults = { | ||
anchorType: '' | ||
anchorType: '', | ||
anchorLink: false, | ||
anchorLinkSymbol: '#', | ||
anchorLinkBefore: true, | ||
anchorLinkClassName: '' | ||
}; | ||
@@ -185,3 +189,3 @@ | ||
// mokuji start | ||
var mokuji = this.start(element, options); | ||
var mokuji = this.render(element, options); | ||
@@ -192,4 +196,4 @@ return mokuji; | ||
_createClass(init, [{ | ||
key: 'start', | ||
value: function start(element, options) { | ||
key: 'render', | ||
value: function render(element, options) { | ||
// generate mokuji list | ||
@@ -202,4 +206,6 @@ var mokuji = this.generateMokuji(element, options); | ||
// remove duplicates by adding suffix | ||
this.removeDuplicateIds(mokuji); | ||
// setup anchor link | ||
if (options.anchorLink) { | ||
this.renderAnchorLink(mokuji, options); | ||
} | ||
@@ -248,2 +254,5 @@ return mokuji; | ||
// remove duplicates by adding suffix | ||
this.removeDuplicateIds(ol); | ||
return ol; | ||
@@ -277,2 +286,32 @@ } | ||
}, { | ||
key: 'renderAnchorLink', | ||
value: function renderAnchorLink(mokuji, options) { | ||
if (!mokuji) { | ||
return; | ||
} | ||
var lists = mokuji.getElementsByTagName('a'); | ||
var a = document.createElement('a'); | ||
a.classList.add(options.anchorLinkClassName); | ||
for (var i = 0; i < lists.length; i++) { | ||
var hash = lists[i].hash; | ||
var headings = document.querySelector('[id="' + hash.replace('#', '') + '"]'); | ||
// create anchor | ||
var anchor = a.cloneNode(false); | ||
anchor.setAttribute('href', hash); | ||
anchor.textContent = options.anchorLinkSymbol; | ||
// insert anchor into headings | ||
if (options.anchorLinkBefore) { | ||
// before | ||
headings.insertBefore(anchor, headings.firstChild); | ||
} else { | ||
// after | ||
headings.appendChild(anchor); | ||
} | ||
} | ||
} | ||
}, { | ||
key: 'replaceSpace2Underscore', | ||
@@ -325,3 +364,3 @@ value: function replaceSpace2Underscore(text) { | ||
var id = heading.id + '-' + count; | ||
var heading_id = heading.id + '-' + count; | ||
@@ -339,3 +378,3 @@ // search duplicate list | ||
// update hash | ||
list.href = '#' + id; | ||
list.href = '#' + heading_id; | ||
break; | ||
@@ -361,3 +400,3 @@ } | ||
heading.id = id; | ||
heading.id = heading_id; | ||
count++; | ||
@@ -364,0 +403,0 @@ } |
@@ -7,2 +7,2 @@ /*! | ||
*/ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Mokuji=t():e.Mokuji=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,r){"use strict";e.exports=function(e,t){var r,n={};for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}},function(e,t,r){"use strict";e.exports=function(e,t){for(;e;){if(e===t)return!0;e=e.parentNode}return!1}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.init=undefined;var i=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),a=r(0),u=n(a),c=r(1),l=n(c),f={anchorType:""};t.init=function(){function e(t,r){if(o(this,e),t){r=(0,u["default"])(f,r);return this.start(t,r)}}return i(e,[{key:"start",value:function(e,t){var r=this.generateMokuji(e,t);if(r)return this.removeDuplicateIds(r),r}},{key:"generateMokuji",value:function(e,t){for(var r=this.createHeadingWalker(e),n=null,o=1,i=document.createElement("ol"),a=document.createElement("li"),u=document.createElement("a");n=r.nextNode();){var c=n.tagName.match(/\d/g).join("");if(o<c){var f=document.createElement("ol");i.lastChild.appendChild(f),i=f}else if(o>c)for(var d=0;d<o-c;d++)(0,l["default"])(i,i.parentNode)&&(i=i.parentNode.parentNode);n.id=this.setAnchor(n.id,n.textContent,t.anchorType),i.appendChild(this.buildList(n,u.cloneNode(!1),a.cloneNode(!1))),o=c}return i=this.reverseMokuji(i)}},{key:"createHeadingWalker",value:function(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,function(e){return/^H[1-6]$/.test(e.tagName)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},!1)}},{key:"setAnchor",value:function(e,t,r){var n=e||this.replaceSpace2Underscore(t);return n=n.replace(/\&+/g,""),n=n.replace(/\&+/g,""),"wikipedia"===r&&(n=encodeURIComponent(n),n=n.replace(/\%+/g,".")),n}},{key:"replaceSpace2Underscore",value:function(e){return String(e).replace(/\s+/g,"_")}},{key:"buildList",value:function(e,t,r){return t.href="#"+e.id,t.textContent=e.textContent,r.appendChild(t),r}},{key:"reverseMokuji",value:function(e){for(;e.parentNode;)e=e.parentNode;return e}},{key:"removeDuplicateIds",value:function(e){for(var t=e.getElementsByTagName("a"),r=0;r<t.length;r++){var n=t[r].innerText,o=t[r].hash,i=document.querySelectorAll('[id="'+n+'"]');if(1!==i.length){var a=0,u=!0,c=!1,l=undefined;try{for(var f,d=i[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var p=f.value,n=p.id+"-"+a,s=!0,y=!1,h=undefined;try{for(var v,m=t[Symbol.iterator]();!(s=(v=m.next()).done);s=!0){var b=v.value;if(b.hash===o){b.href="#"+n;break}}}catch(e){y=!0,h=e}finally{try{!s&&m["return"]&&m["return"]()}finally{if(y)throw h}}p.id=n,a++}}catch(e){c=!0,l=e}finally{try{!u&&d["return"]&&d["return"]()}finally{if(c)throw l}}}}}}]),e}()}])}); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Mokuji=t():e.Mokuji=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,n){"use strict";e.exports=function(e,t){var n,r={};for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n]);return r}},function(e,t,n){"use strict";e.exports=function(e,t){for(;e;){if(e===t)return!0;e=e.parentNode}return!1}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.init=undefined;var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),u=r(i),c=n(1),l=r(c),f={anchorType:"",anchorLink:!1,anchorLinkSymbol:"#",anchorLinkBefore:!0,anchorLinkClassName:""};t.init=function(){function e(t,n){if(o(this,e),t){n=(0,u["default"])(f,n);return this.render(t,n)}}return a(e,[{key:"render",value:function(e,t){var n=this.generateMokuji(e,t);if(n)return t.anchorLink&&this.renderAnchorLink(n,t),n}},{key:"generateMokuji",value:function(e,t){for(var n=this.createHeadingWalker(e),r=null,o=1,a=document.createElement("ol"),i=document.createElement("li"),u=document.createElement("a");r=n.nextNode();){var c=r.tagName.match(/\d/g).join("");if(o<c){var f=document.createElement("ol");a.lastChild.appendChild(f),a=f}else if(o>c)for(var d=0;d<o-c;d++)(0,l["default"])(a,a.parentNode)&&(a=a.parentNode.parentNode);r.id=this.setAnchor(r.id,r.textContent,t.anchorType),a.appendChild(this.buildList(r,u.cloneNode(!1),i.cloneNode(!1))),o=c}return a=this.reverseMokuji(a),this.removeDuplicateIds(a),a}},{key:"createHeadingWalker",value:function(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,function(e){return/^H[1-6]$/.test(e.tagName)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},!1)}},{key:"setAnchor",value:function(e,t,n){var r=e||this.replaceSpace2Underscore(t);return r=r.replace(/\&+/g,""),r=r.replace(/\&+/g,""),"wikipedia"===n&&(r=encodeURIComponent(r),r=r.replace(/\%+/g,".")),r}},{key:"renderAnchorLink",value:function(e,t){if(e){var n=e.getElementsByTagName("a"),r=document.createElement("a");r.classList.add(t.anchorLinkClassName);for(var o=0;o<n.length;o++){var a=n[o].hash,i=document.querySelector('[id="'+a.replace("#","")+'"]'),u=r.cloneNode(!1);u.setAttribute("href",a),u.textContent=t.anchorLinkSymbol,t.anchorLinkBefore?i.insertBefore(u,i.firstChild):i.appendChild(u)}}}},{key:"replaceSpace2Underscore",value:function(e){return String(e).replace(/\s+/g,"_")}},{key:"buildList",value:function(e,t,n){return t.href="#"+e.id,t.textContent=e.textContent,n.appendChild(t),n}},{key:"reverseMokuji",value:function(e){for(;e.parentNode;)e=e.parentNode;return e}},{key:"removeDuplicateIds",value:function(e){for(var t=e.getElementsByTagName("a"),n=0;n<t.length;n++){var r=t[n].innerText,o=t[n].hash,a=document.querySelectorAll('[id="'+r+'"]');if(1!==a.length){var i=0,u=!0,c=!1,l=undefined;try{for(var f,d=a[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var s=f.value,p=s.id+"-"+i,h=!0,y=!1,v=undefined;try{for(var m,k=t[Symbol.iterator]();!(h=(m=k.next()).done);h=!0){var b=m.value;if(b.hash===o){b.href="#"+p;break}}}catch(e){y=!0,v=e}finally{try{!h&&k["return"]&&k["return"]()}finally{if(y)throw v}}s.id=p,i++}}catch(e){c=!0,l=e}finally{try{!u&&d["return"]&&d["return"]()}finally{if(c)throw l}}}}}}]),e}()}])}); |
@@ -25,3 +25,7 @@ 'use strict'; | ||
var defaults = { | ||
anchorType: '' | ||
anchorType: '', | ||
anchorLink: false, | ||
anchorLinkSymbol: '#', | ||
anchorLinkBefore: true, | ||
anchorLinkClassName: '' | ||
}; | ||
@@ -41,3 +45,3 @@ | ||
// mokuji start | ||
var mokuji = this.start(element, options); | ||
var mokuji = this.render(element, options); | ||
@@ -48,4 +52,4 @@ return mokuji; | ||
_createClass(init, [{ | ||
key: 'start', | ||
value: function start(element, options) { | ||
key: 'render', | ||
value: function render(element, options) { | ||
// generate mokuji list | ||
@@ -58,4 +62,6 @@ var mokuji = this.generateMokuji(element, options); | ||
// remove duplicates by adding suffix | ||
this.removeDuplicateIds(mokuji); | ||
// setup anchor link | ||
if (options.anchorLink) { | ||
this.renderAnchorLink(mokuji, options); | ||
} | ||
@@ -104,2 +110,5 @@ return mokuji; | ||
// remove duplicates by adding suffix | ||
this.removeDuplicateIds(ol); | ||
return ol; | ||
@@ -133,2 +142,32 @@ } | ||
}, { | ||
key: 'renderAnchorLink', | ||
value: function renderAnchorLink(mokuji, options) { | ||
if (!mokuji) { | ||
return; | ||
} | ||
var lists = mokuji.getElementsByTagName('a'); | ||
var a = document.createElement('a'); | ||
a.classList.add(options.anchorLinkClassName); | ||
for (var i = 0; i < lists.length; i++) { | ||
var hash = lists[i].hash; | ||
var headings = document.querySelector('[id="' + hash.replace('#', '') + '"]'); | ||
// create anchor | ||
var anchor = a.cloneNode(false); | ||
anchor.setAttribute('href', hash); | ||
anchor.textContent = options.anchorLinkSymbol; | ||
// insert anchor into headings | ||
if (options.anchorLinkBefore) { | ||
// before | ||
headings.insertBefore(anchor, headings.firstChild); | ||
} else { | ||
// after | ||
headings.appendChild(anchor); | ||
} | ||
} | ||
} | ||
}, { | ||
key: 'replaceSpace2Underscore', | ||
@@ -181,3 +220,3 @@ value: function replaceSpace2Underscore(text) { | ||
var id = heading.id + '-' + count; | ||
var heading_id = heading.id + '-' + count; | ||
@@ -195,3 +234,3 @@ // search duplicate list | ||
// update hash | ||
list.href = '#' + id; | ||
list.href = '#' + heading_id; | ||
break; | ||
@@ -217,3 +256,3 @@ } | ||
heading.id = id; | ||
heading.id = heading_id; | ||
count++; | ||
@@ -220,0 +259,0 @@ } |
{ | ||
"name": "mokuji.js", | ||
"version": "1.1.0", | ||
"description": "Library Description", | ||
"version": "1.2.0", | ||
"description": "A table of content JavaScript Library", | ||
"main": "lib/index.js", | ||
@@ -18,3 +18,8 @@ "scripts": { | ||
}, | ||
"keywords": [], | ||
"keywords": [ | ||
"table of content", | ||
"toc", | ||
"contents", | ||
"index" | ||
], | ||
"author": "hiro", | ||
@@ -21,0 +26,0 @@ "license": "MIT", |
@@ -6,4 +6,10 @@ mokuji.js | ||
generate "table of contents". | ||
A table of content JavaScript Library. | ||
## Installation | ||
```bash | ||
npm install --save mokuji.js | ||
``` | ||
## Usage | ||
@@ -21,15 +27,46 @@ | ||
### options | ||
## Options | ||
``` | ||
{ | ||
anchorType: 'wikipedia' | ||
anchorType: '', | ||
anchorLink: false, | ||
anchorLinkSymbol: '#', | ||
anchorLinkBefore: true, | ||
anchorLinkClassName: '', | ||
} | ||
``` | ||
### `anchorType` | ||
## Installation | ||
(default: `''`) | ||
```bash | ||
npm install --save mokuji.js | ||
``` | ||
`wikipedia`: Like Wikipedia's anchor, multibyte characters are replaced by escape sequences. | ||
`こんにちは` → `.E3.81.93.E3.82.93.E3.81.AB.E3.81.A1.E3.81.AF` | ||
### `anchorLink` | ||
(default: `false`) | ||
enable/disable the anchor link in the headings | ||
### `anchorLinkSymbol` | ||
(default: `'#'`) | ||
set the anchor link symbol | ||
### `anchorLinkBefore` | ||
(default: `true`) | ||
set position (before/after) the anchor link in headings. | ||
### `anchorLinkClassName` | ||
(default: `''`) | ||
set anchor link class name. |
Sorry, the diff of this file is not supported yet
29952
658
71