Readouble Laravel Index

ReadDoubleのLaravel日本語ドキュメントに公式英語ドキュメントのような見出しリンクを追加する

  1. // ==UserScript==
  2. // @name Readouble Laravel Index
  3. // @namespace https://greatest.deepsurf.us/ja/scripts/374649-readouble-laravel-index
  4. // @version 0.2
  5. // @description ReadDoubleのLaravel日本語ドキュメントに公式英語ドキュメントのような見出しリンクを追加する
  6. // @author tobigumo
  7. // @match https://readouble.com/laravel/*.*/*/*.html
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. const index = document.createElement('ul');
  15.  
  16. const content_container = document.getElementById('contentContainer');
  17. const headers = content_container.querySelectorAll('a[name] + h2,a[name] + h3');
  18. const anchors = content_container.querySelectorAll('a[name]');
  19.  
  20. headers.forEach( function (value, i) {
  21.  
  22. if(value.tagName === 'H2') {
  23. const ul = document.createElement('ul');
  24. const li = document.createElement('li');
  25. const a = document.createElement('a');
  26.  
  27. a.innerHTML = value.textContent;
  28. a.href = '#' + anchors[i].name;
  29.  
  30. li.appendChild(a);
  31. index.appendChild(li);
  32. }
  33.  
  34. if(value.tagName === 'H3') {
  35. const li = document.createElement('li');
  36. const a = document.createElement('a');
  37.  
  38. a.innerHTML = value.textContent;
  39. a.href = '#' + anchors[i].name;
  40.  
  41. li.appendChild(a);
  42.  
  43. const last_li = index.lastElementChild;
  44. const last_element = last_li.lastElementChild;
  45. if (last_element.tagName === 'UL') {
  46. last_element.appendChild(li);
  47. }
  48. else {
  49. const ul = document.createElement('ul');
  50. ul.appendChild(li);
  51. last_li.appendChild(ul);
  52. }
  53. }
  54.  
  55. });
  56.  
  57. content_container.insertBefore(index, content_container.firstChild);
  58.  
  59. })();