Yet Another 勝手にスター

    @@ -6,93 +6,93 @@ * @license MIT License * @javascript_url */ -// inspired by -// http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c -// http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD +// inspired by +// http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c +// http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD (() => { - const d_ = document; + const d_ = document; - function put_star_container(e) { - if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) { - d_.head.appendChild(Object.assign(d_.createElement("script"), { - type: "text/javascript", - src: "//s.hatena.ne.jp/js/HatenaStar.js", - onload: () => put_star_container(e), - })); - return; - } - - function insert_entry_node_next(e) { - return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling); - } - - let p = { - node: e, - uri: d_.location.href, - title: d_.title, - } - - let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]"); - if (link) { - p.uri = link.href; - p.title = link.textContent.trim(); - p.node = insert_entry_node_next(link); - /* - TODO: invisible a - e.g. - <div> - <div>visible</div> click ! - <div style="display: none;"> - invisible - <a href="...">... - </div> - */ - } - - // img にも appendChild できちゃうんだねえ - if (e.tagName == "IMG") { - p.node = insert_entry_node_next(e); - } - - // hr にも appendChild できちゃうけど、childNode は見える - // 他にも駄目なタグありそう - - console.log(p); - - let c = Hatena.Star.EntryLoader; - c.loadEntries = function(p) { - return [ new Hatena.Star.Entry({ - entryNode: p.node, - uri: p.uri, - title: p.title, - comment_container: p.node.appendChild(c.createCommentContainer()), - star_container: p.node.appendChild(c.createStarContainer()), - }) ]; - }; - c.loadNewEntries(p); - delete c.loadEntries; - - } - - function once_handler(e) { - e.stopPropagation(); - e.preventDefault(); - - put_star_container(e.target); - - d_.removeEventListener('click', once_handler); - d_.removeEventListener('touchstart', once_handler); - /* - http://h.hatena.ne.jp/unarist/228182015329663515 - https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters - - addEventListener(..., ..., { once: true }) - - click と touchstart が一回ずつ使えちゃうか - */ - } - d_.addEventListener('click', once_handler); - d_.addEventListener('touchstart', once_handler); + function put_star_container(e) { + if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) { + d_.head.appendChild(Object.assign(d_.createElement("script"), { + type: "text/javascript", + src: "//s.hatena.ne.jp/js/HatenaStar.js", + onload: () => put_star_container(e), + })); + return; + } + + function insert_entry_node_next(e) { + return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling); + } + + let p = { + node: e, + uri: d_.location.href, + title: d_.title, + } + + let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]"); + if (link) { + p.uri = link.href; + p.title = link.textContent.trim(); + p.node = insert_entry_node_next(link); + /* + TODO: invisible a + e.g. + <div> + <div>visible</div> click ! + <div style="display: none;"> + invisible + <a href="...">... + </div> + */ + } + + // img にも appendChild できちゃうんだねえ + if (e.tagName == "IMG") { + p.node = insert_entry_node_next(e); + } + + // hr にも appendChild できちゃうけど、childNode は見える + // 他にも駄目なタグありそう + + console.log(p); + + let c = Hatena.Star.EntryLoader; + c.loadEntries = function(p) { + return [ new Hatena.Star.Entry({ + entryNode: p.node, + uri: p.uri, + title: p.title, + comment_container: p.node.appendChild(c.createCommentContainer()), + star_container: p.node.appendChild(c.createStarContainer()), + }) ]; + }; + c.loadNewEntries(p); + delete c.loadEntries; + + } + + function once_handler(e) { + e.stopPropagation(); + e.preventDefault(); + + put_star_container(e.target); + + d_.removeEventListener('click', once_handler); + d_.removeEventListener('touchstart', once_handler); + /* + http://h.hatena.ne.jp/unarist/228182015329663515 + https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters + + addEventListener(..., ..., { once: true }) + + click と touchstart が一回ずつ使えちゃうか + */ + } + d_.addEventListener('click', once_handler); + d_.addEventListener('touchstart', once_handler); })();
  • /*
     * @title Yet Another 勝手にスター
     * @description クリックしたところに、勝手に はてなスターを置きます(一回だけ)
     * @include http://*
     * @include https://*
     * @license MIT License
     * @javascript_url
     */
    //  inspired by 
    //      http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c
    //      http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD
    
    (() => {
        const d_ = document;
    
        function put_star_container(e) {
            if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) {
                d_.head.appendChild(Object.assign(d_.createElement("script"), {
                    type: "text/javascript",
                    src: "//s.hatena.ne.jp/js/HatenaStar.js",
                    onload: () => put_star_container(e),
                }));
                return;
            }
    
            function insert_entry_node_next(e) {
                return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling);
            }
    
            let p = {
                node: e,
                uri: d_.location.href,
                title: d_.title,
            }
    
            let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]");
            if (link) {
                p.uri = link.href;
                p.title = link.textContent.trim();
                p.node = insert_entry_node_next(link);
                /*
                    TODO: invisible a
                    e.g.
                    <div>
                        <div>visible</div>      click !
                        <div style="display: none;">
                            invisible
                            <a href="...">...
                        </div>
                */
            }
    
            // img にも appendChild できちゃうんだねえ
            if (e.tagName == "IMG") {
                p.node = insert_entry_node_next(e);
            }
    
            // hr にも appendChild できちゃうけど、childNode は見える
            // 他にも駄目なタグありそう
    
            console.log(p);
    
            let c = Hatena.Star.EntryLoader;
            c.loadEntries = function(p) {
                return [ new Hatena.Star.Entry({
                    entryNode: p.node,
                    uri: p.uri,
                    title: p.title,
                    comment_container: p.node.appendChild(c.createCommentContainer()),
                    star_container: p.node.appendChild(c.createStarContainer()),
                }) ];
            };
            c.loadNewEntries(p);
            delete c.loadEntries;
    
        }
    
        function once_handler(e) {
            e.stopPropagation();
            e.preventDefault();
    
            put_star_container(e.target);
    
            d_.removeEventListener('click', once_handler);
            d_.removeEventListener('touchstart', once_handler);
            /*
                http://h.hatena.ne.jp/unarist/228182015329663515
                https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters
    
                addEventListener(..., ..., { once: true })
    
                click と touchstart が一回ずつ使えちゃうか
            */
        }
        d_.addEventListener('click', once_handler);
        d_.addEventListener('touchstart', once_handler);
    
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/02/21 19:36:31 - 2017-02-21
  2. 2017/02/20 14:10:07 - 2017-02-20
  3. 2017/02/20 14:08:30 - 2017-02-20
  4. 2017/02/18 23:20:21 - 2017-02-18