hup.user.js: hozzászólások és blokkok szűrése

Kicsit módosítottam a régi hup.user.js szkriptet, és most már eltünteti a felesleges blokkokat az oldal széléről.

A fájl elején felsoroltam ezeket az oldal forrásából kiszedve, és a blokkok azonosítója már e lista alapján generálódik....

A hup.user.js letöltése.

A linken az egyes blokk azonosítók mellett szerepel az, hogy melyik blokk (mi van a blokk címében), itt lentebb viszont
ezt inkább kihagytam.

Tartalma numen kiegészítésével:


// ==UserScript==
// @name     HUP
// @namespace http://hup.hu/
// @description HUP Comment Ignore Script
// @include  http://hup.hu/*
// @include  http://*.hup.hu/*
// ==/UserScript==

kiemelt_szerzok     = [ 'szerzo1', 'szerzo2', 'stb.' ];
eltuntetett_szerzok = [ 'szerzo1', 'szerzo2', 'stb.' ];
torolt_szerzok      = [ 'szerzo1', 'szerzo2', 'stb.' ];
feeds = new Array(50, 51, 44, 54, 53, 40, 4, 46, 19, 47, 48, 41, 52);
blocks = new Array(13, 5, 30, 4, 31, 6, 15, 32, 25);
named_blocks = new Array('tagadelic-1', 'tagadelic-2', 'user-2', 'user-3');
eltuntetett_divek = new Array();

for (idx in feeds) {
        eltuntetett_divek.push('block-aggregator-feed-' + feeds[idx]);
}
for (idx in blocks) {
        eltuntetett_divek.push('block-block-' + blocks[idx]);
}
for (idx in named_blocks) {
        eltuntetett_divek.push('block-' + named_blocks[idx]);
}

kiemeles_minta   = '<div style="background-color: #E77471;"                >$1</div>';
eltuntetes_minta = '<div style="background-color: #f6f6eb; color: #f6f6eb;">$1</div>';
torles_minta     = '<div style="background-color: #E77471;"                >(torolve)</div>';

reg_szerzo = new RegExp( '<a href="/user/\\d+"[^>]+>([^<]+)</a>' );
reg_szoveg = new RegExp( '<div class="content">([\\s\\S]*?)</div>', 'm' );
reg_uj     = new RegExp( '<div class="comment comment-new">[\\s\\S]*<a id="new"></a>', 'm' );

c = document.body.innerHTML.split( /(<!-- (?:start|end) main content -->)/im );
b = c[2].split( /(<a id="comment-\d+"><\/a>)/im );

for( uj=0, i=2; i<b.length; i+=2 ){ if( b[i].search( reg_uj )>=0 ){ uj++; } }

if (uj > 0)
  s = c[0].replace('>HupWiki</a></li>', '>HupWiki</a></li><li class="menu-1-6-101">'+
  '<a href="#new" title="els\u0151 \u00FAj" class="menu-1-6-101">els\u0151 \u00FAj</a></li>'    )+c[1]+b[0];
else
  s = c[0]+c[1]+b[0];

for( id=0, i=2; i<b.length; i+=2 ){
  if( b[i].search( reg_uj )>=0 ){
    b[i] = b[i].replace( reg_uj, '<div class="comment comment-new"><a id="new'+((id>0)?id:'')+'"></a>' );

    b[i] = b[i].replace( '<span class="new">\u00FAj\u0026nbsp;</span>',
                         '<span class="new">\u00FAj\u0026nbsp;'+
                         ' <a href="#new'+ (id+1)           +'">(\u25BC'+(uj-id-1)+')</a>'+
                         ' <a href="#new'+ (id>1?id-1:'')   +'">(\u25B2'+(   id  )+')</a>'+
                         ' <a href="/tracker">(\u25C4)</a>\u0026nbsp;</span>' );
    id++;
  }

  var szerzo = b[i].split( reg_szerzo );

  var minta = kiemelt_szerzok    .indexOf(szerzo[1])>=0 ? kiemeles_minta:
              eltuntetett_szerzok.indexOf(szerzo[1])>=0 ? eltuntetes_minta:
              torolt_szerzok     .indexOf(szerzo[1])>=0 ? torles_minta:
              null; 

  s += b[i-1] + (minta? b[i].replace( reg_szoveg, minta ): b[i]);
}

document.body.innerHTML = s+c[3]+c[4];

function getDiv( id ) 
{
    div = 0;
    if (document.all) { div = document.all[id];} 
    else { div= document.getElementById(id);}

    if (div)
        return div.style;
    else
       return 0; 
}

for (div in eltuntetett_divek) {
        dv = getDiv(eltuntetett_divek[div]);
        if (dv) {
        	dv.display = "none";
        }
}

space_re = new RegExp('^ +| +$');
for (link in document.links) {
    link.href = link.href.replace(spaces_re, '');
}

Update: a linkek elején/végén lévő szóközöket kiveszi a szkript, így nem lesznek "...hup.hu/ /node/..." alakú linkek, hanem csak a helyes "...hup.hu/node/...". Karácsonyi ujjgyakorlatképpen :) Biztosan van ezekre jobb megoldás is, nem vagyok egy javascript guru, ennyire futja.

Hm, miért megy az a rész, hogy


space_re = new RegExp('^ +| +$')$

dollár jellel a végén a pontosvessző helyett? Ezt is javítottam, viszont meglepő.

Hozzászólások

Hm. A document.all melyik böngészőnek kell? Szerintem a elgtöbb már ismeri a getElementById-t, és amelyik nem, annak az userscript is jó eséllyel tárgytalan ;)
továbbá javasolom ehelyett:


        	dv.visibility = "hidden";
                dv.height = 0;
                dv.margin = 0;
                dv.padding = 0;

ezt:


        	dv.display = "none";
—-—-—
int getRandomNumber() {
	return 4;//szabályos kockadobással választva.
}		//garantáltan véletlenszerű. xkcd

hogy kell hasznalni a hup.user.js-t?

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta

Hm, ezt elfelejtettem, köszi :)

Greasemonkey nevű add-on tudja használni, innen lehet telepíteni:
https://addons.mozilla.org/en-US/firefox/addon/748

Amúgy az elején a blokkok listája úgy jött össze, hogy az oldal forrása alapján igyekeztem csoportosítani az egyes blokk típusokat.

egy bug-ra szaladtam: a nyitooldalon levo cikkek hivatkozasaba (pl. 'kik a hup olvasoi') tesz egy space-t a
"http://hup.hu/" utan, pl. http://hup.hu/%20/cikkek/20091214/kik_a_hup_olvasoi_segits_es_nyerj%20.

Az a pikans egyebkent, hogy a linkben valoban van egy space a hivatkozasban az elejen ill. a vegen, pl.
href=" /cikkek/..../ ". Azonban az FF 3.5.6 a hup.user.js nelkul kepes kezelni a problemat, de a hup.user.js-sel egyutt bezavar a space.

SPAMtelenül - MX spamszűrő szolgáltatás, ahogyan még sosem próbálta