Readouble Laravel Index

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

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         Readouble Laravel Index
// @namespace    https://greatest.deepsurf.us/ja/scripts/374649-readouble-laravel-index
// @version      0.2
// @description  ReadDoubleのLaravel日本語ドキュメントに公式英語ドキュメントのような見出しリンクを追加する
// @author       tobigumo
// @match        https://readouble.com/laravel/*.*/*/*.html
// @grant        none
// ==/UserScript==

(function() {
  'use strict';

  const index = document.createElement('ul');

  const content_container = document.getElementById('contentContainer');
  const headers = content_container.querySelectorAll('a[name] + h2,a[name] + h3');
  const anchors = content_container.querySelectorAll('a[name]');

  headers.forEach( function (value, i) {

    if(value.tagName === 'H2') {
      const ul = document.createElement('ul');
      const li = document.createElement('li');
      const a = document.createElement('a');

      a.innerHTML = value.textContent;
      a.href = '#' + anchors[i].name;

      li.appendChild(a);
      index.appendChild(li);
    }

    if(value.tagName === 'H3') {
      const li = document.createElement('li');
      const a = document.createElement('a');

      a.innerHTML = value.textContent;
      a.href = '#' + anchors[i].name;

      li.appendChild(a);

      const last_li = index.lastElementChild;
      const last_element = last_li.lastElementChild;
      if (last_element.tagName === 'UL') {
        last_element.appendChild(li);
      }
      else {
        const ul = document.createElement('ul');
        ul.appendChild(li);
        last_li.appendChild(ul);
      }
    }

  });

  content_container.insertBefore(index, content_container.firstChild);

})();