メタスター

    @@ -1,6 +1,6 @@ /* - * @title show star quote (style 直でいけた報告) - * @description 取り急ぎご報告まで。 + * @title メタスター + * @description スターに引用スターを付けたり付けられなかったりします。 * @include * * @license MIT License * @javascript_url @@ -10,33 +10,57 @@ https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style$compare?locale=en-US&to=1140743&from=1133865 https://drafts.csswg.org/cssom/#cssstylerule 去年の 11月頃に仕様書通りになったのかな + +s.hatena.ne.jp/userID/stars#somethingfragment につけようとしたらスターが奈落に呑まれた +blog.hatena.ne.jp/userID/ も奈落に呑まれる +b.hatena.ne.jp/userID/ はうまくいった +let.hatelabo.jp/userID/ はうまくいった +あとは未確認 */ // http://h.hatena.ne.jp/noromanba/4623536828018945911 (() => { - let d_ = document - var show_star_quote = () => { - let entries = Hatena.Star.EntryLoader.entries - entries.forEach((e, i) => { - e.stars.forEach((s) => { - if (s.quote) { - if (s.anchor.parentNode.className == "a-kuma3-star-quote-wrapper") { - return - } - let wrap = Object.assign(d_.createElement("span"), { - style: 'border: silver 1px solid; margin-left: 0.5ex; margin-right: 0.7ex;' - }) - s.anchor.parentNode.insertBefore(wrap, s.anchor) - wrap.appendChild(s.anchor) - let quote = Object.assign(d_.createElement("span"), { - innerHTML: s.quote, - style: 'font-weight: normal; font-size: medium; color: black; padding-left: 2px;' - }); - wrap.appendChild(quote) - } - }) - }) - } - show_star_quote() + const d_ = document; + const c = Hatena.Star.EntryLoader; + const entries = c.entries; + const jsonurl = '//s.hatena.ne.jp/entries.json?'; + let j = jsonurl; + //Hatena.Star.SiteConfig.entryNodes['span.hatenalet-expanded-quote'] = { uri: 'a', title: 'q', container: 'q' }; + + entries.forEach(e => e.stars.forEach(s => { + + if (!s.quote || s.anchor.parentNode.className == 'hatenalet-expanded-quote') return; + + const wrap = Object.assign(d_.createElement('span'), { + className: 'hatenalet-expanded-quote', + style: 'border: silver 1px solid; margin-left: 0.5ex; margin-right: 0.7ex;' + }); + + s.anchor.parentNode.insertBefore(wrap, s.anchor).appendChild(s.anchor); + s.anchor.href += '#' + e.uri.replace(/[^\w\-\.:]/g, '_'); + + const q = wrap.appendChild(Object.assign(d_.createElement('q'), { + innerHTML: s.quote, + style: 'font-weight: normal; font-size: medium; color: black; padding-left: 2px;' + })); + + const entry = new Hatena.Star.Entry({ entryNode: wrap, uri: s.anchor.href, title: s.quote }); + entry.comment_container = q.appendChild(c.createCommentContainer()); + entry.star_container = q.appendChild(c.createStarContainer()); + entry.showButtons(); + entries.push(entry); + + if (j.length > Ten.JSONP.MaxBytes) { + new Ten.JSONP(j, c, 'receiveStarEntries'); + j = jsonurl; + } + + j += `uri=${encodeURIComponent(entry.uri)}&`; + + })); + + if (!Hatena.Visitor) j += 'timestamp=1'; + new Ten.JSONP(j, c, 'receiveStarEntries'); + })();
  • /*
     * @title メタスター
     * @description スターに引用スターを付けたり付けられなかったりします。
     * @include *
     * @license MIT License
     * @javascript_url
     */
    
    /*
    https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style$compare?locale=en-US&to=1140743&from=1133865
    https://drafts.csswg.org/cssom/#cssstylerule
    去年の 11月頃に仕様書通りになったのかな
    
    s.hatena.ne.jp/userID/stars#somethingfragment につけようとしたらスターが奈落に呑まれた
    blog.hatena.ne.jp/userID/ も奈落に呑まれる
    b.hatena.ne.jp/userID/ はうまくいった
    let.hatelabo.jp/userID/ はうまくいった
    あとは未確認
    */
    
    // http://h.hatena.ne.jp/noromanba/4623536828018945911
    (() => {
    
    	const d_ = document;
    	const c = Hatena.Star.EntryLoader;
    	const entries = c.entries;
    	const jsonurl = '//s.hatena.ne.jp/entries.json?';
    	let j = jsonurl;
    	//Hatena.Star.SiteConfig.entryNodes['span.hatenalet-expanded-quote'] = { uri: 'a', title: 'q', container: 'q' };
    
    	entries.forEach(e => e.stars.forEach(s => {
    
    		if (!s.quote || s.anchor.parentNode.className == 'hatenalet-expanded-quote') return;
    
    		const wrap = Object.assign(d_.createElement('span'), {
    			className: 'hatenalet-expanded-quote',
    			style: 'border: silver 1px solid; margin-left: 0.5ex; margin-right: 0.7ex;'
    		});
    
    		s.anchor.parentNode.insertBefore(wrap, s.anchor).appendChild(s.anchor);
    		s.anchor.href += '#' + e.uri.replace(/[^\w\-\.:]/g, '_');
    
    		const q = wrap.appendChild(Object.assign(d_.createElement('q'), {
    			innerHTML: s.quote,
    			style: 'font-weight: normal; font-size: medium; color: black; padding-left: 2px;'
    		}));
    		
    		const entry = new Hatena.Star.Entry({ entryNode: wrap, uri: s.anchor.href, title: s.quote });
    		entry.comment_container = q.appendChild(c.createCommentContainer());
    		entry.star_container = q.appendChild(c.createStarContainer());
    		entry.showButtons();
    		entries.push(entry);
    
    		if (j.length > Ten.JSONP.MaxBytes) {
    			new Ten.JSONP(j, c, 'receiveStarEntries');
    			j = jsonurl;
    		}
    
    		j += `uri=${encodeURIComponent(entry.uri)}&`;
    
    	}));
    
    	if (!Hatena.Visitor) j += 'timestamp=1';
    	new Ten.JSONP(j, c, 'receiveStarEntries');
    
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/02/16 17:09:02 - 2017-02-16
  2. 2017/02/16 13:26:52 - 2017-02-16
  3. 2017/02/16 13:26:07 - 2017-02-16