+#link

  • /*
     * @title +#link
     * @description append Fragment Identifier links
     * @include http://*
     * @include https://*
     * @contributor wakabatan   http://let.hatelabo.jp/wakabatan/let/hJmcxuC90NBX
     * @license     MIT License https://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // keeping styles and strict ver
    // http://let.hatelabo.jp/noromanba/let/hLHXwv6M9ohw
    
    // e.g.
    // https://www.sunday-webry.com/events/free/
    (() => {
      'use strict';
    
      {
        const wall = document.head || document.body || document.documentElement;
    
        wall.append(Object.assign(document.createElement('style'), {
          charset: 'utf-8',
          // TODO fix glitching e.g. in MDN
          // TBD omit class-name
          textContent: [
            '.___id_anchor {' +
            'display: inline',
            'width: auto',
            'height: auto',
            'margin: 0',
            'border: none',
            'padding: 0',
            'background-color: #ffa',
            'color: black',
            'font-size: 16px',
            'font-weight: normal',
            'font-family: monospace',
            'line-height: 1.0',
            'text-decoration: underline',
            '}',
          ].join('!important;'),
        }));
      }
    
      document.body.querySelectorAll([
        '[id]',
        'a[name]',
      ]).forEach(node => {
        // legacy fallback
        const id = node.id || node.name;
        const anchor = Object.assign(document.createElement('a'), {
          href: '#' + encodeURIComponent(id),
          // TBD omit class-name
          className: '___id_anchor',
          textContent: '#' + id,
        });
    
        // TODO un-nest
        // https://www.w3.org/1999/xhtml/
        if (node.namespaceURI === 'http://www.w3.org/1999/xhtml') {
          // https://developer.mozilla.org/en-US/docs/Web/API/Node/localName
          // https://developer.mozilla.org/en-US/docs/Web/API/Element/localName
          const name = node.localName;
          anchor.title = name;
    
          if (name.match(/^(?:h[1-6]|td|th|li|dt|dd|html)$/)) {
            node.firstChild.before(anchor);
            return;
          }
        } else {
          anchor.title = '{' + node.namespaceURI + '}' + name;
        }
        node.before(anchor);
      });
    })();
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2018/07/14 06:04:10 - 2018-07-14
  2. 2018/06/29 04:50:05 - 2018-06-29
  3. 2018/06/29 04:49:55 - 2018-06-29