continue_readingとSITEINFOの連携
continue_readingはTwitterでうまく継ぎ足しができない。
PagerizationみたいにSITEINFOがある場合はSITEINFOを使い、ない場合は自動推測にしたいのでGreasemonkeyスクリプトを書いた。
ただ、continue_readingがmicroformatsのpageElement部分しか見ないので、結局Twitterでは崩れてしまう。
本体を弄らなければこれはどうしようもない。
Twitterでは駄目だが、他のいくつかのサイトでうまく動くようになる。
下のGreasemonkeyスクリプトは、continue_readingより先に実行する。
// ==UserScript== // @name AutoPagerizeMicroformats // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // ==/UserScript== (function() { if (window.self != window.top) return; const SITEINFO_IMPORT_URL = 'http://wedata.net/databases/AutoPagerize/items.json'; function getCache(fn) { var cache = eval(GM_getValue('cache', '[]')); if (cache.length) fn(cache); else GM_xmlhttpRequest({ method: 'get', url: SITEINFO_IMPORT_URL, onload: function({ responseText: v }) { GM_setValue('cache', v); fn(eval(v)); } }); } function cacheCallback(siteinfo) { for each(var { data: i } in siteinfo) if (new RegExp(i.url).test(location.href) && document.evaluate(i.nextLink, document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue && document.evaluate(i.pageElement, document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue) return i; } function addMicroformats(doc, info) { doc.evaluate(info.nextLink, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.rel += ' next'; var pageElements = doc.evaluate(info.pageElement, doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < pageElements.snapshotLength; i++) pageElements.snapshotItem(i).className += ' autopagerize_page_element'; if (info.insertBefore) doc.evaluate(info.insertBefore, doc, null, XPathResult.FIRST_ORDEERD_NODE_TYPE, null).singleNodeValue.className += ' autopagerize_insert_before'; }; function hookAutoPagerize(info) { if ('AutoPagerize' in window) window.AutoPagerize.addDocumentFilter(function(doc) { addMicroformats(doc, info) }); } getCache(function(siteinfo) { var info = cacheCallback(siteinfo); if (info) { addMicroformats(document, info); setTimeout(hookAutoPagerize, 0, info); } }); })();