Хочу поделиться следующей версией скрипта. Версия сырая, время от времени появляются глюки, не знаю почему. Чего-то я замучился уже искать. Просто перезагружайте страницу в этом случае.
Новое:
1) Этот скрипт хранит список игнорируемых в кукис, так, что каждый раз сам скрипт править не нужно.
2) Добавляет на страницу редактор списка игнорируемых, и кнопку, чтобы одним щелчком мыши можно было вводить в игнор, или выпускать оттуда.
3) По просьбе data man добавляет фильтр ников, чтобы отображались сообщения только от перечисленных ников.
Более подробно:
1) Вверху странички там где надписи:
"Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки"
, теперь они выглядят так:
"Ignore Editor |Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки"
То есть добавился "Ignore Editor". Если кликнуть на него то появится окно, в которое можно через пробел или запятую вписать все игнорируемые ники. После этого надо нажать Окей, и со страницы сразу же скроются все введённые туда, и появятся те, кого из игнора выпустили.
2) Там где над каждым сообщением строчка:
"Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору"
теперь будет строка:
"Ignore | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору"
То есть добавился линк Ignore. Если он красный, значит юзер в игноре, если обычного цвета, то нет. Если на Ignore кликнуть, то возникнет вопрос добавлять ли юзера в игнор, или вывести ли его оттуда, если он уже там. После нажатия кнопки Окей, все сообщения этого юзера сразу же или появятся или скроются со страницы, в зависимости от того введён он в игнор или выведен оттуда.
3) Вверху страницы также теперь появится окошко "Nick search". Если вписать туда через пробел все нужные ники и нажать на кнопку справа, то все сообщения не от этих ников сразу скроются. Если очистить окошко, и ещё раз нажать на кнопку, то всё вернётся как и было раньше.
Ещё раз повторяю, что скрипт сырой, и для самых смелых тестеров. Просто самому мне как-то более удобно с ним, а глюки не слишком мешают.
Скрипт:
[more=код скрипта ( версия 2.0 )]
Код:
// ==UserScript==
// @name IgnoreList for RuBoard
// @version 2.0 (20Jan10 07:53:53)
// @include http://forum.ru-board.com/*
// ==/UserScript==
(function() {
var IgnName = 'Ignore';
var Delim1 = ',';
var IgnCnt = -1;
var SrchInPth = 'topic.cgi';
var IgnM = new Array();
var IgnS = '';
function main(IgnS, AddLinks, Reverse) {
function HideText(NickName, TrTag) {
DivTag = TrTag.getElementsByTagName('div');
if ((DivTag.length > 0) && (DivTag[0].id.indexOf('Ignor') == 0)) {
} else {
IgnCnt = IgnCnt +1;
IgnM[IgnCnt] = TrTag.innerHTML;
TrTag.innerHTML = '<div ID=Ignor' +IgnCnt
+'><font class=tit> User <b>' +NickName +'</b> ignored. '
+'<a Name=' +IgnCnt +' ID=AIgnor' +IgnCnt
+' href=javascript:UnIgn("Ignor' +IgnCnt
+'")><u>Show message</u></a></font></div>';
document.getElementById('AIgnor' +IgnCnt).addEventListener("click",
function() {UnIgn(this.name)}, false);
}
}
var Ign = IgnS.split(Delim1);
var TrT = document.getElementsByTagName('tr');
for (var i = 0; i < TrT.length ; i++) {
var Btag = TrT[i].getElementsByTagName('b');
if (Btag.length == 0) continue;
if (AddLinks == 1) {
var TdTag = TrT[i].getElementsByTagName('td');
if (TdTag.length >= 3) {
if (TdTag[2].className=="tpc") {
TdTag[2].innerHTML = ''
+'<a class="tpc" title="Add or remove ' +"'" +Btag[0].innerHTML
+"'" +' from Ignore-List" name="' +Btag[0].innerHTML +'"'
+' ID=IgnorLink' +i
+' href=javascript:AddDelIgn("IgnorLink' +i +'")>Ignore'
+'</a> | '
+TdTag[2].innerHTML;
document.getElementById('IgnorLink' +i).addEventListener("click",
function() {AddDelIgn(this.id)}, false);
}
}
}
if (Reverse) {
var HrT = TrT[i].getElementsByTagName('hr');
if (HrT.length <= 1) continue;
var Find1 = 0;
var k1 = 0;
for (var j = 0; j < Ign.length; j++) {
if (Btag[0].innerHTML != Ign[j]) {
Find1 = 1;
break;
}
}
if (Find1 == 1) {HideText(Btag[0].innerHTML, TrT[i])}
} else {
for (var j = 0; j < Ign.length; j++) {
if (Btag[0].innerHTML == Ign[j]) {
HideText(Ign[j], TrT[i]);
break;
}
}
}
}
if (Reverse) {
for (var i = IgnCnt; i >= 0; i--){
var DivTag1 = document.getElementById('Ignor' +i);
if (DivTag1 == null) continue;
var BTag2 = DivTag1.getElementsByTagName('b');
if (BTag2.length <= 0) continue;
for (var j = 0; j < Ign.length; j++) {
if (BTag2[0].innerHTML == Ign[j]) {UnIgn(i)}
}
}
} else {
for (var i = IgnCnt; i >= 0; i--){
var DivTag1 = document.getElementById('Ignor' +i);
if (DivTag1 == null) continue;
var BTag2 = DivTag1.getElementsByTagName('b');
if (BTag2.length <= 0) continue;
var Find1 = 0;
for (var j = 0; j < Ign.length; j++) {
if (BTag2[0].innerHTML == Ign[j]) {
Find1 = 1;
break;
}
}
if (Find1==0) {UnIgn(i)}
}
}
IgnLinkColor();
}
if (document.location.pathname.indexOf(SrchInPth) > -1) {
main(getCookie(IgnName), 1, false);
}
function IgnLinkColor(){
var TrT = document.getElementsByTagName('tr');
var Ing2 = getCookie(IgnName);
for (var i = 0; i < TrT.length ; i++) {
var ATag = document.getElementById('IgnorLink' +i);
if (ATag==null) continue;
if (IsTextInStr(ATag.name, Ing2, Delim1)) {
ATag.innerHTML = '<font Color=#FF0000>Ignore</font>'
} else {
ATag.innerHTML = 'Ignore'
}
}
}
function UnIgn(IgnCnt){
var PrTag1 = document.getElementById('Ignor' +IgnCnt).parentNode;
PrTag1.innerHTML = IgnM[IgnCnt];
IgnLinkColor();
var Tgs1 = PrTag1.getElementsByTagName('a');
for (var i = 0; i < Tgs1.length ; i++) {
if (Tgs1[i].id.indexOf('IgnorLink') == 0) {
Tgs1[i].addEventListener("click", function() {AddDelIgn(this.id)}, false);
break;
}
}
}
function EditIgn() {
var s = getCookie(IgnName);
if (s==null) {s='';}
s = prompt('Ignore editor. Put enimies here. Example: Freak Troll', s.replace(/^,/g,""));
if(s!=null){
setCookie(IgnName,s.replace(/\./g,",").replace(/[, ]+/g,",").replace(/^,/g,""),"")
main(getCookie(IgnName), 0);
}
};
if (document.location.pathname.indexOf(SrchInPth) > -1) {
var Td2T = document.getElementsByTagName('td');
for (var i = 0; i < Td2T.length ; i++) {
if ((Td2T[i].className=="dats") && (Td2T[i].align=="right")){
Td2T[i].innerHTML = ''
+'<div Title="Example: ' +"'" +'MyNick, Friend, Etc'
+"'" +'. Empty line - reset">Nick search '
+'<input Type=text ID=NickEdit '
+' onkeydown="javascript:if(event.keyCode==13)'
+'document.getElementById(' +"'NickBtn'" +').click();"'
+'>'
+'<button Type=button Name=NickBtn ID=NickBtn OnClick=javascript:NickSrch()>></button></div>'
+' <a ID=IgnEditor title="Ignore List editor" '
+'href=javascript:EditIgn()>Ignore Editor</a> | '
+Td2T[i].innerHTML;
document.getElementById('IgnEditor').addEventListener("click",
function() {EditIgn()}, false);
document.getElementById('NickBtn').addEventListener("click",
function() {NickSrch()}, false);
break;
}
}
}
function NickSrch() {
var s = document.getElementById('NickEdit').value;
if (s==null) {
main(getCookie(IgnName), 0)
} else {
s = s.replace(/\./g,",").replace(/[, ]+/g,",").replace(/^,/g,"");
if (s=='') {
main(getCookie(IgnName), 0);
} else {
main(s, 0, true);
}
}
};
function IsTextInStr(Name, List, Delimetr) {
if (List==undefined) {return false} else {
var s = List.split(Delimetr);
var Find1 = 0;
for (var j = s.length -1; j >= 0; j--) {
if (s[j] == Name) {
s.splice(j, 1);
Find1 = 1;
break;
}
}
return Find1==1 ? true : false;
}
}
function AddDelIgn(IgnTagName){
var aTag = document.getElementById(IgnTagName);
var sName1 = aTag.name;
var s1 = getCookie(IgnName);
if (IsTextInStr(sName1, s1, Delim1)) {
if (confirm('(-) Remove "' +sName1 + '" from Ignore?')) {
var sl1 = s1.split(Delim1);
var Find1 = 0;
for (var j = sl1.length -1; j >= 0; j--) {
if (sl1[j] == sName1) {
sl1.splice(j, 1);
Find1 = 1;
}
}
if (Find1==1) {
s1 = sl1.join(Delim1);
setCookie(IgnName, s1, "");
main(s1, 0);
}
}
} else {
if (confirm('(+) Add "' +sName1 + '" to Ignore?')) {
s1 = s1 +Delim1 +sName1;
setCookie(IgnName, s1, "");
main(s1, 0);
}
}
}
function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
))
return matches ? decodeURIComponent(matches[1]) : undefined
}
function setCookie(name, value, props) {
props = props || {}
var exp = props.expires
if (typeof exp == "number" && exp) {
var d = new Date()
d.setTime(d.getTime() + exp*1000)
exp = props.expires = d
}
if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }
value = encodeURIComponent(value)
var updatedCookie = name + "=" + value
for(var propName in props){
updatedCookie += "; " + propName
var propValue = props[propName]
if(propValue !== true){ updatedCookie += "=" + propValue }
}
document.cookie = updatedCookie
}
function deleteCookie(name) {setCookie(name, null, { expires: -1 })}
})();
Новое:
1) Этот скрипт хранит список игнорируемых в кукис, так, что каждый раз сам скрипт править не нужно.
2) Добавляет на страницу редактор списка игнорируемых, и кнопку, чтобы одним щелчком мыши можно было вводить в игнор, или выпускать оттуда.
3) По просьбе data man добавляет фильтр ников, чтобы отображались сообщения только от перечисленных ников.
Более подробно:
1) Вверху странички там где надписи:
"Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки"
, теперь они выглядят так:
"Ignore Editor |Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки"
То есть добавился "Ignore Editor". Если кликнуть на него то появится окно, в которое можно через пробел или запятую вписать все игнорируемые ники. После этого надо нажать Окей, и со страницы сразу же скроются все введённые туда, и появятся те, кого из игнора выпустили.
2) Там где над каждым сообщением строчка:
"Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору"
теперь будет строка:
"Ignore | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору"
То есть добавился линк Ignore. Если он красный, значит юзер в игноре, если обычного цвета, то нет. Если на Ignore кликнуть, то возникнет вопрос добавлять ли юзера в игнор, или вывести ли его оттуда, если он уже там. После нажатия кнопки Окей, все сообщения этого юзера сразу же или появятся или скроются со страницы, в зависимости от того введён он в игнор или выведен оттуда.
3) Вверху страницы также теперь появится окошко "Nick search". Если вписать туда через пробел все нужные ники и нажать на кнопку справа, то все сообщения не от этих ников сразу скроются. Если очистить окошко, и ещё раз нажать на кнопку, то всё вернётся как и было раньше.
Ещё раз повторяю, что скрипт сырой, и для самых смелых тестеров. Просто самому мне как-то более удобно с ним, а глюки не слишком мешают.
Скрипт:
[more=код скрипта ( версия 2.0 )]
Код:
// ==UserScript==
// @name IgnoreList for RuBoard
// @version 2.0 (20Jan10 07:53:53)
// @include http://forum.ru-board.com/*
// ==/UserScript==
(function() {
var IgnName = 'Ignore';
var Delim1 = ',';
var IgnCnt = -1;
var SrchInPth = 'topic.cgi';
var IgnM = new Array();
var IgnS = '';
function main(IgnS, AddLinks, Reverse) {
function HideText(NickName, TrTag) {
DivTag = TrTag.getElementsByTagName('div');
if ((DivTag.length > 0) && (DivTag[0].id.indexOf('Ignor') == 0)) {
} else {
IgnCnt = IgnCnt +1;
IgnM[IgnCnt] = TrTag.innerHTML;
TrTag.innerHTML = '<div ID=Ignor' +IgnCnt
+'><font class=tit> User <b>' +NickName +'</b> ignored. '
+'<a Name=' +IgnCnt +' ID=AIgnor' +IgnCnt
+' href=javascript:UnIgn("Ignor' +IgnCnt
+'")><u>Show message</u></a></font></div>';
document.getElementById('AIgnor' +IgnCnt).addEventListener("click",
function() {UnIgn(this.name)}, false);
}
}
var Ign = IgnS.split(Delim1);
var TrT = document.getElementsByTagName('tr');
for (var i = 0; i < TrT.length ; i++) {
var Btag = TrT[i].getElementsByTagName('b');
if (Btag.length == 0) continue;
if (AddLinks == 1) {
var TdTag = TrT[i].getElementsByTagName('td');
if (TdTag.length >= 3) {
if (TdTag[2].className=="tpc") {
TdTag[2].innerHTML = ''
+'<a class="tpc" title="Add or remove ' +"'" +Btag[0].innerHTML
+"'" +' from Ignore-List" name="' +Btag[0].innerHTML +'"'
+' ID=IgnorLink' +i
+' href=javascript:AddDelIgn("IgnorLink' +i +'")>Ignore'
+'</a> | '
+TdTag[2].innerHTML;
document.getElementById('IgnorLink' +i).addEventListener("click",
function() {AddDelIgn(this.id)}, false);
}
}
}
if (Reverse) {
var HrT = TrT[i].getElementsByTagName('hr');
if (HrT.length <= 1) continue;
var Find1 = 0;
var k1 = 0;
for (var j = 0; j < Ign.length; j++) {
if (Btag[0].innerHTML != Ign[j]) {
Find1 = 1;
break;
}
}
if (Find1 == 1) {HideText(Btag[0].innerHTML, TrT[i])}
} else {
for (var j = 0; j < Ign.length; j++) {
if (Btag[0].innerHTML == Ign[j]) {
HideText(Ign[j], TrT[i]);
break;
}
}
}
}
if (Reverse) {
for (var i = IgnCnt; i >= 0; i--){
var DivTag1 = document.getElementById('Ignor' +i);
if (DivTag1 == null) continue;
var BTag2 = DivTag1.getElementsByTagName('b');
if (BTag2.length <= 0) continue;
for (var j = 0; j < Ign.length; j++) {
if (BTag2[0].innerHTML == Ign[j]) {UnIgn(i)}
}
}
} else {
for (var i = IgnCnt; i >= 0; i--){
var DivTag1 = document.getElementById('Ignor' +i);
if (DivTag1 == null) continue;
var BTag2 = DivTag1.getElementsByTagName('b');
if (BTag2.length <= 0) continue;
var Find1 = 0;
for (var j = 0; j < Ign.length; j++) {
if (BTag2[0].innerHTML == Ign[j]) {
Find1 = 1;
break;
}
}
if (Find1==0) {UnIgn(i)}
}
}
IgnLinkColor();
}
if (document.location.pathname.indexOf(SrchInPth) > -1) {
main(getCookie(IgnName), 1, false);
}
function IgnLinkColor(){
var TrT = document.getElementsByTagName('tr');
var Ing2 = getCookie(IgnName);
for (var i = 0; i < TrT.length ; i++) {
var ATag = document.getElementById('IgnorLink' +i);
if (ATag==null) continue;
if (IsTextInStr(ATag.name, Ing2, Delim1)) {
ATag.innerHTML = '<font Color=#FF0000>Ignore</font>'
} else {
ATag.innerHTML = 'Ignore'
}
}
}
function UnIgn(IgnCnt){
var PrTag1 = document.getElementById('Ignor' +IgnCnt).parentNode;
PrTag1.innerHTML = IgnM[IgnCnt];
IgnLinkColor();
var Tgs1 = PrTag1.getElementsByTagName('a');
for (var i = 0; i < Tgs1.length ; i++) {
if (Tgs1[i].id.indexOf('IgnorLink') == 0) {
Tgs1[i].addEventListener("click", function() {AddDelIgn(this.id)}, false);
break;
}
}
}
function EditIgn() {
var s = getCookie(IgnName);
if (s==null) {s='';}
s = prompt('Ignore editor. Put enimies here. Example: Freak Troll', s.replace(/^,/g,""));
if(s!=null){
setCookie(IgnName,s.replace(/\./g,",").replace(/[, ]+/g,",").replace(/^,/g,""),"")
main(getCookie(IgnName), 0);
}
};
if (document.location.pathname.indexOf(SrchInPth) > -1) {
var Td2T = document.getElementsByTagName('td');
for (var i = 0; i < Td2T.length ; i++) {
if ((Td2T[i].className=="dats") && (Td2T[i].align=="right")){
Td2T[i].innerHTML = ''
+'<div Title="Example: ' +"'" +'MyNick, Friend, Etc'
+"'" +'. Empty line - reset">Nick search '
+'<input Type=text ID=NickEdit '
+' onkeydown="javascript:if(event.keyCode==13)'
+'document.getElementById(' +"'NickBtn'" +').click();"'
+'>'
+'<button Type=button Name=NickBtn ID=NickBtn OnClick=javascript:NickSrch()>></button></div>'
+' <a ID=IgnEditor title="Ignore List editor" '
+'href=javascript:EditIgn()>Ignore Editor</a> | '
+Td2T[i].innerHTML;
document.getElementById('IgnEditor').addEventListener("click",
function() {EditIgn()}, false);
document.getElementById('NickBtn').addEventListener("click",
function() {NickSrch()}, false);
break;
}
}
}
function NickSrch() {
var s = document.getElementById('NickEdit').value;
if (s==null) {
main(getCookie(IgnName), 0)
} else {
s = s.replace(/\./g,",").replace(/[, ]+/g,",").replace(/^,/g,"");
if (s=='') {
main(getCookie(IgnName), 0);
} else {
main(s, 0, true);
}
}
};
function IsTextInStr(Name, List, Delimetr) {
if (List==undefined) {return false} else {
var s = List.split(Delimetr);
var Find1 = 0;
for (var j = s.length -1; j >= 0; j--) {
if (s[j] == Name) {
s.splice(j, 1);
Find1 = 1;
break;
}
}
return Find1==1 ? true : false;
}
}
function AddDelIgn(IgnTagName){
var aTag = document.getElementById(IgnTagName);
var sName1 = aTag.name;
var s1 = getCookie(IgnName);
if (IsTextInStr(sName1, s1, Delim1)) {
if (confirm('(-) Remove "' +sName1 + '" from Ignore?')) {
var sl1 = s1.split(Delim1);
var Find1 = 0;
for (var j = sl1.length -1; j >= 0; j--) {
if (sl1[j] == sName1) {
sl1.splice(j, 1);
Find1 = 1;
}
}
if (Find1==1) {
s1 = sl1.join(Delim1);
setCookie(IgnName, s1, "");
main(s1, 0);
}
}
} else {
if (confirm('(+) Add "' +sName1 + '" to Ignore?')) {
s1 = s1 +Delim1 +sName1;
setCookie(IgnName, s1, "");
main(s1, 0);
}
}
}
function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
))
return matches ? decodeURIComponent(matches[1]) : undefined
}
function setCookie(name, value, props) {
props = props || {}
var exp = props.expires
if (typeof exp == "number" && exp) {
var d = new Date()
d.setTime(d.getTime() + exp*1000)
exp = props.expires = d
}
if(exp && exp.toUTCString) { props.expires = exp.toUTCString() }
value = encodeURIComponent(value)
var updatedCookie = name + "=" + value
for(var propName in props){
updatedCookie += "; " + propName
var propValue = props[propName]
if(propValue !== true){ updatedCookie += "=" + propValue }
}
document.cookie = updatedCookie
}
function deleteCookie(name) {setCookie(name, null, { expires: -1 })}
})();