[★+] Fork

  • /*
     * @title [★+]
     * @description Hatena Star on the whole world
     * @include http://*
     * @include https://*
     * @contributor a-kuma3 http://let.hatelabo.jp/a-kuma3/let/hLHWypmkorgp
     * @license MIT License http://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // e.g.
    // http://d.hatena.com/
    // https://example.com/
    
    (() => {
        if (document.querySelector([
            'script[src*="//s.hatena.ne.jp/js/HatenaStar.js"]',
            'script[src*="//s.hatena.com/js/HatenaStar.js"]',
        ])) {
            // TBD re-append add container
            return;
        }
    
        const wall = document.head || document.body;// || document.documentElement;
        wall.appendChild(Object.assign(document.createElement('script'), {
            type: 'text/javascript',
            src: 'https://s.hatena.ne.jp/js/HatenaStar.js',
            onload: () => {
                // TBD other element
                const sol = document.body.querySelector([
                    Array.from(Array(6).keys(), n => 'h' + (n + 1))
                ]);
    
                // fallback to mobile c.f.
                // http://let.hatelabo.jp/noromanba/let/gYC-xcvQ3PTQew
                // http://ptech.g.hatena.ne.jp/noromanba/20170210/1486677295
                if (!sol) {
                    // https://gist.github.com/noromanba/d730ccf3ae5e6916cd60
                    // https://gist.github.com/noromanba/3705f2e9ebb8538328b2f3f9a6f1a9b3
                    const canonical = () => {
                        return (document.querySelector('head meta[property="og:url"][content]') || {}).content ||
                            (document.querySelector('head link[rel="canonical"][href]') || {}).href ||
                            location.href;
                    };
                    const canon = canonical();
    
                    window.open('https://s.hatena.ne.jp/mobile/entry?uri=' + encodeURIComponent(canon));
                    return;
                }
    
                const Hatena = window.Hatena;
    
                Hatena.Star.SiteConfig = {
                    entryNodes: {}
                };
    
                Hatena.Star.SiteConfig.entryNodes[sol.tagName] = {
                    uri: 'document.location',
                    title: 'document.title',
                    container: 'parent',
                };
    
                Hatena.Star.EntryLoader();
            },
        }));
    })();
    
    // alt c.f.
    // http://let.hatelabo.jp/yuta25/let/hJmdxKny-Mt7
    // http://let.hatelabo.jp/yuta25/let/hLHVyMC71a1v
    // https://github.com/wakaba/chrome-hatena-star-everywhere
    //  https://chrome.google.com/webstore/detail/hatena-star-everywhere/nbjckkhoenllbokoppppjagcckgaaaab
    // http://let.hatelabo.jp/noromanba/let/gYC-xcvQ3PTQew
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。