AutoPagerize 対応の filter 管理GM
いちいち個別の filter スクリプトに AutoPagerize 対応入れるのもなんかなと思ったから、ちょっと書いてみた。
こういうの userscripts.org に上げた方がいいのかな?
// ==UserScript== // @name Filterize // @namespace http://d.hatena.ne.jp/send/ // @description apply filter on any site. // @include * // ==/UserScript== (function () { var FilterContainer = function() { this.__container = {}; this.addFilter = function(name,func) { this.__container[name] = func; return this; } this.batch = function(nodes) { for each (var node in nodes) for each (var filter in this.__container) filter(node); } }; if(window.Filterize == undefined) window.Filterize = { onAutoPagerized : new FilterContainer(), onLoaded : new FilterContainer(), }; // for AutoPagerize if(window.AutoPagerize != undefined) window.AutoPagerize.addFilter(function (context){ return Filterize.onAutoPagerized.batch.call(Filterize.onAutoPagerized, context); }); // for loaded // XXX: 調査してないけど、0 sec でも setTimeoutしたらうまく行った window.Filterize.timer = setTimeout(function() { for each(var filter in window.Filterize) if(filter.batch) filter.batch([document]); clearTimeout(window.Filterize.timer); },0); })();
AutoPagarize 対応が要らない場合のスクリプト例
twitter の status 入力エリアを大きくする。
// ==UserScript== // @name AdjustStatusForTwitter // @namespace http://d.hatena.ne.jp/send/ // @description adjust status text area for Filterize // @include http://twitter.com/home // @include http://twitter.com/replies // @include http://twitter.com/account/archive // ==/UserScript== if(window.Filterize != undefined) Filterize.onLoaded.addFilter('adjustTextArea', function (context) { var textarea = context.getElementById('status'); if (textarea) textarea.style['height'] = '3.5em'; });
AutoPagerize 対応がいる場合のスクリプト例
twitter が 半角文字とかで、デザイン崩れるのを矯正する。
// ==UserScript== // @name StatusBreakerForTwitter // @namespace http://d.hatena.ne.jp/send/ // @description apply status break on twitter // @include http://twitter.com/* // ==/UserScript== /** * Original Script: * url breaker+ * http://piro.sakura.ne.jp/latest/2005/06/url_breaker_plus.user.js * XXX: とりあえずUTF-8 */ if(window.Filterize != undefined) Filterize.onAutoPagerized.addFilter('applyWordBreak', function (context){ var path = '//td[@class="content"]/span[@class="entry-title entry-content"]//child::text()'; var elems = document.evaluate(path, context, null,7 ,null ); var regex = /([@!-%'-/:=\\?@\\[-`\\{-~\w]|&[\w]{1,6};)/; var range = document.createRange(); var wbr = document.createElement('wbr'); var last; var elem; var started; for(var e = 0 ; e < elems.snapshotLength; e++) { elem = elems.snapshotItem(e); range.selectNode(elem); while(elem && (last = range.toString().search(regex)) !== -1) { range.setStart(elem, last + RegExp.$1.length); range.insertNode(wbr.cloneNode(true)); elem = elem.nextSibling.nextSibling; range.selectNode(elem); } } range.detach(); });