Advertisement
Guest User

Untitled

a guest
Feb 13th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. (function(l, l2, s) {
  2.  
  3. l2 = l2 || 6;
  4.  
  5. NodeList.prototype.forEach = [].forEach;
  6. NodeList.prototype.slice = [].slice;
  7.  
  8. var toc = document.createElement('div');
  9. var headerLevel = l || 2;
  10. var tocStyle = s || 'ul';
  11. var headers = document
  12. .querySelector('article')
  13. .querySelectorAll('h1 h2 h3 h4 h5 h6'.split(' ').slice(headerLevel - 1).join())
  14.  
  15. function buildList(header) {
  16. var li = document.createElement('li');
  17. var a = document.createElement('a');
  18. var a_ = header.querySelector('a');
  19. a.href = a_.href;
  20. a.innerHTML = header.innerText;
  21. li.appendChild(a);
  22. return li;
  23. }
  24.  
  25. (function buildTocTree(tree, headers, level) {
  26. var i, m,
  27. indices = [],
  28. hx = 'H' + level,
  29. n = headers.length,
  30. ul = document.createElement(tocStyle);
  31.  
  32. if(!n || level > l2) return;
  33. tree.appendChild(ul);
  34.  
  35. function set(start, end) {
  36. var li = buildList(headers[start]);
  37. ul.appendChild(li);
  38. buildTocTree(li, headers.slice(start + 1, end), level + 1);
  39. }
  40.  
  41. for(i = 0; i < n; ++i) if(headers[i].tagName === hx) indices.push(i);
  42. for(i = 0, m = indices.length - 1; i < m; ++i) set(indices[i], indices[i + 1]);
  43. if(indices.length) set(indices[m], n);
  44. })(toc, headers, headerLevel);
  45. console.log(toc.innerHTML);
  46. })(2, 6, 'ul');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement