Почему-то вариант sdio у меня не заработал, да и сам стиль меня смущал.
Так что я несколько переписал его, выкладываю тут под GPL. Может кому пригодится.
// ==UserScript==
// @name LOR black and VIP list
// @description Remove messages of blacklisted users and color for VIP.
// @include http://www.linux.org.ru/*view-message.jsp?*
// ==/UserScript==
// License: GPL
// Inspired by sdio
var vips = [ "sdio", "ivlad", "Zulu", "Teak", "JB", "Shaman007" ];
var ignore = [ "Irsi", "R00T", "Ty3uK", "ugoday", "aspell" ];
// ------------------
function process (elem) {
var vip_regex = new RegExp ("^("+vips.join("|")+") .*");
var ign_regex = new RegExp ("^("+ignore.join("|")+") .*");
cont = get_last(elem, "i", "").textContent;
if (cont.match(vip_regex)) {
var grandparent = elem.parentNode.parentNode.parentNode.parentNode;
grandparent.style.border="3px dotted #00A800";
}
if (cont.match(ign_regex)) {
elem.textContent = "Hidden: "+cont;
}
}
function get_all (a_parent, a_tag, a_class) {
var q = a_parent.getElementsByTagName (a_tag);
var res = new Array;
for (var i = 0; q[i]; i++) {
if (q[i].className == a_class) {
res.push(q[i]);
}
}
return res;
}
function get_first (a_parent, a_tag, a_class) {
return get_all(a_parent, a_tag, a_class).shift();
}
Блин, а где последние две строчки? 8((((
Репост:
// ==UserScript==
// @name LOR black and VIP list
// @description Remove messages of blacklisted users and color for VIP.
// @include http://www.linux.org.ru/*view-message.jsp?*
// ==/UserScript==
// License: GPL
// Inspired by sdio
var vips = [ "sdio", "ivlad", "Zulu", "Teak", "JB", "Shaman007" ];
var ignore = [ "Irsi", "R00T", "Ty3uK", "ugoday", "aspell" ];
// ------------------
function process (elem) {
var vip_regex = new RegExp ("^("+vips.join("|")+") .*");
var ign_regex = new RegExp ("^("+ignore.join("|")+") .*");
cont = get_last(elem, "i", "").textContent;
if (cont.match(vip_regex)) {
var grandparent = elem.parentNode.parentNode.parentNode.parentNode;
grandparent.style.border="3px dotted #00A800";
}
if (cont.match(ign_regex)) {
elem.textContent = "Hidden: "+cont;
}
}
function get_all (a_parent, a_tag, a_class) {
var q = a_parent.getElementsByTagName (a_tag);
var res = new Array;
for (var i = 0; q[i]; i++) {
if (q[i].className == a_class) {
res.push(q[i]);
}
}
return res;
}
function get_first (a_parent, a_tag, a_class) {
return get_all(a_parent, a_tag, a_class).shift();
}
function get_last (a_parent, a_tag, a_class) {
return get_all(a_parent, a_tag, a_class).pop();
}
var cmt = get_first (document, "div", "comment");
get_all (cmt, "div", "msg").forEach (process);
Я тоже не знаю 8((( Пришлось мозилловскую доку читать.
PS. В финальной версии особо спецэффектов нет, но по ходу я пробовал разное; так вот, оказывается javascript анонимные функции умеет! Фигасе, интересно как у него с лямбда-исчислением?
Товарищ Луговский в своей единственной доступной миру статье вообще рекомендует его как один из языков, наиболее подходящих для метапрограммирования. :) А анонимные функции там вроде есть, да.
// ==UserScript==
// @name ShareReactor sort table by year
// @include http://www.sharereactor.ru/cgi-bin/mzgenre.cgi?*
// ==/UserScript==
// Сортировка таблицы по году ("фильмы" -> "по жанру")
// License: GPL
// written by Zulu
function get_all (a_parent, a_tag, a_class) {
var q = a_parent.getElementsByTagName (a_tag);
var res = new Array;
for (var i = 0; q[i]; i++) {
if (q[i].className == a_class) {
res.push(q[i]);
}
}
return res;
}
// written by Zulu
function get_first (a_parent, a_tag, a_class) {
return get_all(a_parent, a_tag, a_class).shift();
}
// written by sdio
function sortYear(a,b){
var aa = a.getElementsByTagName("td").item(1).textContent;
var bb = b.getElementsByTagName("td").item(1).textContent;
if (aa > bb) {
return -1;
}
if (aa == bb) {
return 0;
}
if (aa < bb) {
return 1;
}
}
var cmt = get_first (document, "table", "XPtable");
var lines = get_all(cmt, "tr", "historytext").sort(sortYear);
var tbody = get_first(cmt, "tbody", "");
for (var i=0; i<lines.length; i++){
tbody.appendChild(lines[i]);
}