title attr shrinker Fork

  • /*
     * @title title attr shrinker
     * @description shrink too long title attribute
     * @include http://example.com/DIY
     * @license MIT License http://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // UserScript
    // https://gist.github.com/noromanba/f71a9da49f2e44b5c9fc0645f15c05f3
    
    // via
    // http://let.hatelabo.jp/a-kuma3/let/hJmeyNv-p802
    //  http://q.hatena.ne.jp/1487159409
    //  http://q.hatena.ne.jp/images/question/1487159/1487159409.jpg
    
    // hatenanews on http://www.hatena.ne.jp/ has been fixed
    
    (() => {
      'use strict';
    
      Array.from(document.body.querySelectorAll([
        // write <a> selector(s) as you like
      ]), (link, idx) => {
        if (!link.href) return;
    
        const shrink = () => {
          const xhr = new XMLHttpRequest();
    
          xhr.open('GET', link.href);
          xhr.timeout = 3000;
          xhr.responseType = 'document';
    
          xhr.addEventListener('load', () => {
            if (xhr.readyState !== xhr.DONE || xhr.status !== 200) return;
    
            const ctx = xhr.response.document;
    
            const title = (ctx.querySelector([
              'head title'
            ]) || {}).textContent || '';
            const descr = (ctx.querySelector([
              'head meta[property="og:description"][content]',
              'head meta[name="twitter:description"][content]',
            ]) || {}).content || '';
    
            const shrinked = title + '\n' + descr;
            link.title = shrinked;
          });
    
          xhr.send();
        };
    
        const INTERVAL = 500;
        setTimeout(shrink, INTERVAL * idx);
      });
    
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。