LDR Ad-Entry Blocker

By kuy Last update Apr 30, 2009 — Installed 3,910 times. Daily Installs: 5, 4, 8, 6, 10, 8, 6, 6, 6, 12, 7, 5, 11, 7, 6, 16, 3, 7, 5, 4, 4, 4, 7, 3, 9, 5, 5, 8, 8, 6, 5, 7

There are 2 previous versions of this script.

// ==UserScript==
// @name           LDR Ad-Entry Blocker
// @namespace      http://endflow.net/
// @description    Block advertisement entries such as "AD: ...", "PR: ..." on LDR and fLDR.
// @include        http://reader.livedoor.com/reader/*
// @include        http://fastladder.com/reader/*
// @version        0.1.6
// ==/UserScript==
// @author         Yuki KODAMA {twitter: kuy, skype: netkuy}
// @history        [2007-11-05] 0.1.0 first version
//                 [2007-11-20] 0.1.1 cleaned
//                 [2007-12-07] 0.1.2 added option: skip ad-entry
//                 [2008-02-01] 0.1.3 supported Opera
//                 [2008-06-19] 0.1.4 supported fLDR
//                 [2009-04-20] 0.1.5 fixed to skip consecutive blocked entries
//                 [2009-04-30] 0.1.6 bugfixed: avoid infinite-loop

(function(){
/////////////// configurations ////////////////
var cfg = {
    // judgement patterns of entry title
    patterns: [/^[\s【]*(AD|PR|AD|PR)[\s】]*[::]/i],
    // advertisement entries style (apply this style to title link <a>)
    style: {
        color: '#aaa',
        fontSize: '12px'
    },
    // apply interval
    interval: 1000,
    // skip ad-entry
    skip: true
}
///////////////////////////////////////////////
var w = this.unsafeWindow || window;
w.addEventListener('load', function(){with(w){
    register_hook('AFTER_PRINTFEED', function() {
        var hist = [];
        var isComp = function(){
            var len = hist.length;
            if(len < 3) return false;
            return hist[len-1] == hist[len-2] && hist[len-2] == hist[len-3];
        }
        var blocker = function(){
            var titles = $x('//h2[@class="item_title"]/a');
            hist.push(titles.length);
            for(var i = 0; i < titles.length; i++){
                var title = titles[i];
                for(var j = 0; j < cfg.patterns.length; j++){
                    if((new RegExp(cfg.patterns[j])).test(title.innerHTML)){
                        setStyle(title, cfg.style);
                        addClass(title.parentNode, 'laeb_blocked');
                        var childs = title.parentNode.parentNode.parentNode.childNodes;
                        for(var k = 0; k < childs.length; k++){
                            if(childs[k].nodeType !== 1 || hasClass(childs[k], 'item_header')) continue;
                            DOM.hide(childs[k]);
                        }
                        break;
                    }
                }
            }
            isComp() || setTimeout(blocker, cfg.interval);
        }
        setTimeout(blocker, cfg.interval);
    });
    if(cfg.skip){
        var isFirstOrLast = function(){
            var pos = get_active_item() + 1;
            return (pos == 0) || (pos == get_active_feed().items.length);
        }
        var j_func = Keybind._keyfunc['j'];
        Keybind.add('j|enter', function(){
            do{
                j_func();
            }while(!isFirstOrLast() && hasClass(get_active_item(true).element, 'laeb_blocked'));
        });
        var k_func = Keybind._keyfunc['k'];
        Keybind.add('k|shift+enter', function(){
            do{
                k_func();
            }while(!isFirstOrLast() && hasClass(get_active_item(true).element, 'laeb_blocked'));
        });
    }
}}, false);
function $x(x,c){c=c||document;var res=document.evaluate(x,c,null,4,null);
for(var i,nodes=[];i=res.iterateNext();nodes.push(i));return nodes}
})();