TOC

    @@ -1,20 +1,23 @@ /* * @title TOC - * @description ページ内の見出しから目次を生成(右上)。AutoPagerize対応。最近のブラウザでないと動きません。 + * @description Create Table of contents with AutoPagerize, AutoPatchWork, AutoPager (Forked) * @include http://* - * @license MIT License - * @require + * @license MIT License http://www.opensource.org/licenses/mit-license + * @require */ +// Fork of http://let.hatelabo.jp/rikuba/let/gYC-yqG0xYLkFw (function () { init(document); - [].forEach(frames, function (frame) { - try { init(frame.document); } catch (e) {} + Array.prototype.forEach.call(frames, function (frame) { + try { + init(frame.document); + } catch (e) {} }); function init(doc) { - var container, style; - if (container = doc.getElementById('bookmarklet_TOC')) { + var container; + if ((container = doc.getElementById('bookmarklet_TOC'))) { container.parentNode.removeChild(container); return; } @@ -22,10 +25,11 @@ container.id = 'bookmarklet_TOC'; container.appendChild(createTOC(doc)); doc.body.appendChild(container); - style = doc.createElement('style'); + + var style = doc.createElement('style'); style.type = 'text/css'; style.textContent = [ - '#bookmarklet_TOC { background: rgba(0,0,0,0.9); color: #fff;', + '#bookmarklet_TOC { background: rgba(0, 0, 0, 0.9); color: #fff;', 'text-align: left; font: 90%/1.5 sans-serif;', 'width: 30px; height: 30px; z-index: 256;', 'max-width: 600px; max-height: 600px; overflow-y: auto;', @@ -38,41 +42,45 @@ '#bookmarklet_TOC ol ol { margin-left: 1.5em; }', '#bookmarklet_TOC:hover ol { display: block; }', '#bookmarklet_TOC span:hover { cursor: pointer; ', - 'text-decoration: underline; }'].join('\n'); + 'text-decoration: underline; }' + ].join('\n'); doc.querySelector('head').appendChild(style); + doc.addEventListener('AutoPagerize_DOMNodeInserted', function (e) { container.appendChild(createTOC(e.target)); }, false); + doc.addEventListener('AutoPatchWork.DOMNodeInserted', function (e) { + container.appendChild(createTOC(e.target)); + }, false); + doc.addEventListener('AutoPagerAfterInsert', function (e) { + container.appendChild(createTOC(e.target)); + }, false); } function createTOC(root) { var doc = root.ownerDocument || root; var r = l = doc.createElement('ol'); - var c = [,0,0,0,0,0,0]; + var c = [, 0, 0, 0, 0, 0, 0]; var ln = 1; - [].forEach.call( - root.querySelectorAll('h1,h2,h3,h4,h5,h6'), - function (h) { - var n = h.nodeName[1]; - var d = ln - n; - if (ln < n) - while (d++) - l = (l.hasChildNodes() - ? l.lastChild - : l.appendChild(doc.createElement('li')) - ).appendChild(doc.createElement('ol')); - else if (n < ln) - while (d--) - l = l.parentNode.parentNode; - var s = l.appendChild(doc.createElement('li')) - .appendChild(doc.createElement('span')); - s.appendChild(doc.createTextNode(h.textContent || '')); - s.addEventListener('click', function () { - h.scrollIntoView(); - }, false); - ln = n; + Array.prototype.forEach.call(root.querySelectorAll('h1, h2, h3, h4, h5, h6'), function (h) { + var n = h.nodeName[1]; + var d = ln - n; + if (ln < n) { + while (d++) { + l = (l.hasChildNodes() ? l.lastChild : l.appendChild(doc.createElement('li'))).appendChild(doc.createElement('ol')); + } + } else if (n < ln) { + while (d--) { + l = l.parentNode.parentNode; + } } - ); + var s = l.appendChild(doc.createElement('li')).appendChild(doc.createElement('span')); + s.appendChild(doc.createTextNode(h.textContent || '')); + s.addEventListener('click', function () { + h.scrollIntoView(); + }, false); + ln = n; + }); return r; } })();
  • /*
     * @title TOC
     * @description Create Table of contents with AutoPagerize, AutoPatchWork, AutoPager (Forked)
     * @include http://*
     * @license MIT License http://www.opensource.org/licenses/mit-license
     * @require
     */
    
    // Fork of http://let.hatelabo.jp/rikuba/let/gYC-yqG0xYLkFw
    (function () {
      init(document);
      Array.prototype.forEach.call(frames, function (frame) {
        try {
          init(frame.document);
        } catch (e) {}
      });
    
      function init(doc) {
        var container;
        if ((container = doc.getElementById('bookmarklet_TOC'))) {
          container.parentNode.removeChild(container);
          return;
        }
        container = doc.createElement('div');
        container.id = 'bookmarklet_TOC';
        container.appendChild(createTOC(doc));
        doc.body.appendChild(container);
    
        var style = doc.createElement('style');
        style.type = 'text/css';
        style.textContent = [
          '#bookmarklet_TOC { background: rgba(0, 0, 0, 0.9); color: #fff;',
          'text-align: left; font: 90%/1.5 sans-serif;',
          'width: 30px; height: 30px; z-index: 256;',
          'max-width: 600px; max-height: 600px; overflow-y: auto;',
          'position: fixed; top: 0; right: 0; margin: 0; padding: 0;',
          '-moz-border-radius: 0 0 0 8px; border-radius: 0 0 0 8px; }',
          '#bookmarklet_TOC:hover { width: auto; height: auto;',
          'padding: 1ex 1em; }',
          '#bookmarklet_TOC ol { list-style: none; display: none;',
          'margin: 0; padding: 0; }',
          '#bookmarklet_TOC ol ol { margin-left: 1.5em; }',
          '#bookmarklet_TOC:hover ol { display: block; }',
          '#bookmarklet_TOC span:hover { cursor: pointer; ',
          'text-decoration: underline; }'
        ].join('\n');
        doc.querySelector('head').appendChild(style);
    
        doc.addEventListener('AutoPagerize_DOMNodeInserted', function (e) {
          container.appendChild(createTOC(e.target));
        }, false);
        doc.addEventListener('AutoPatchWork.DOMNodeInserted', function (e) {
          container.appendChild(createTOC(e.target));
        }, false);
        doc.addEventListener('AutoPagerAfterInsert', function (e) {
          container.appendChild(createTOC(e.target));
        }, false);
      }
    
      function createTOC(root) {
        var doc = root.ownerDocument || root;
        var r = l = doc.createElement('ol');
        var c = [, 0, 0, 0, 0, 0, 0];
        var ln = 1;
        Array.prototype.forEach.call(root.querySelectorAll('h1, h2, h3, h4, h5, h6'), function (h) {
          var n = h.nodeName[1];
          var d = ln - n;
          if (ln < n) {
            while (d++) {
              l = (l.hasChildNodes() ? l.lastChild : l.appendChild(doc.createElement('li'))).appendChild(doc.createElement('ol'));
            }
          } else if (n < ln) {
            while (d--) {
              l = l.parentNode.parentNode;
            }
          }
          var s = l.appendChild(doc.createElement('li')).appendChild(doc.createElement('span'));
          s.appendChild(doc.createTextNode(h.textContent || ''));
          s.addEventListener('click', function () {
            h.scrollIntoView();
          }, false);
          ln = n;
        });
        return r;
      }
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2015/06/22 03:16:18 - 2015-06-22
  2. 2012/06/17 03:06:24 - 2012-06-17
  3. 2012/06/17 02:50:37 - 2012-06-17
  4. 2012/06/16 22:58:28 - 2012-06-16
  5. 2012/06/16 22:56:36 - 2012-06-16