[b.hatena]ID コール先表示 Fork

  • /*
     * @title [b.hatena]ID コール先表示
     * @description ID コールされた人のコメントをコールの近くにくっつけます。メタブの場合は一段下も見ます。
     * @include http://b.hatena.ne.jp/entry/*
     * @license MIT License
     * @javascript_url
     */
    
    (() => {
    
    const c = {};
    const h = 'http://';
    const b = h + 'b.hatena.ne.jp/entry/';
    const q = document.querySelector('html');
    const e = q.getAttribute('data-entry-eid');
    const u = q.getAttribute('data-entry-url');
    const a = document.evaluate('//a[contains(.,"id:") and @rel="nofollow"]', document.querySelector('#bookmarks'), null, 7, null);
    const o = Promise.resolve(0);
    const r = p => p.json();
    const g = async (e, n, l) => {
    
    	const v = `${h}b.hatena.ne.jp/api/oembed?url=http%3A%2F%2Fb%2Ehatena%2Ene%2Ejp%2Fentry%2F${e}%2Fcomment%2F${n}&format=json`;
    
    	if (!c[v]) c[v] = await fetch(v).then(r).then(j => {
    
    		const d = document.createElement('div');
    		if (j) d.innerHTML = j.html;
    		return(Promise.resolve(d));
    
    	 }, j => Promise.resolve(document.createComment('')));
    
    	l.parentNode.parentNode.parentNode.appendChild(c[v].cloneNode(true));
    	return(o);
    
    };
    
    ((u.indexOf(b) === 0 && !/http:\/\/b\.hatena\.ne\.jp\/entry\/\d+\//.test(u))
     ? fetch(`${b}json/?url=${encodeURIComponent(u.split(b).join(h))}`)
      .then(r).then(j => Promise.resolve(j.eid), j => o) : o).then(async f => {
    
    	for (let i = 0; i < a.snapshotLength; i++) {
    
    		const l = a.snapshotItem(i);
    		if (!l.href.match(/^(?:http:\/\/b\.hatena\.ne\.jp\/|\/)(.+)\/$/)) continue;
    		const n = RegExp.$1;
    
    		await g(e, n, l);
    		if (f) await g(f, n, l);
    
    	}
    
    	// j.html についてくるスクリプトが読み込まれてなかった
    	const s = document.createElement('script');
    	s.src = 'https://b.st-hatena.com/js/comment-widget.js';
    	document.body.appendChild(s);
    
     });
    
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。