Ru-Board.club
← Вернуться в раздел «Помощь по Ru.Board»

» Ru-Board Helper Игнор-лист и другие полезные фичи

Автор: Ke
Дата сообщения: 20.01.2010 07:04
Хочу поделиться следующей версией скрипта. Версия сырая, время от времени появляются глюки, не знаю почему. Чего-то я замучился уже искать. Просто перезагружайте страницу в этом случае.

Новое:

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>&nbsp;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()>&gt;</button></div>'
+'&nbsp;<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 })}
})();
Автор: data man
Дата сообщения: 20.01.2010 17:56
Ke

Цитата:
Хочу поделиться следующей версией скрипта.

Идея отличная, но у меня на Хроме не работает.
Ни добавлением в Personalized Web, ни установкой как отдельного скрипта.
Не могу разобраться в чем дело.

LEX1
Можете помочь ?
Автор: Ke
Дата сообщения: 21.01.2010 10:28
data man

Цитата:
Идея отличная, но у меня на Хроме не работает.
Ни добавлением в Personalized Web, ни установкой как отдельного скрипта.
Не могу разобраться в чем дело.


Поставил Хром, немного поразбирался, добавил проверок на ошибки. Вроде бы немного работает. Хотя ... Не уверен. Как-то всё странно в этом Хроме. Меню нету, поразило обилие баннеров и красных строк текста вверху страницы, которые непонятно как убрать. У меня это в FireFox всё вырезается.

Перед установкой скрипта надо деинсталировать предыдущую версию скрипта. Потом в адресной строке ввести имя скрипта, потом нажать Continue и Install и перезагрузить страничку. Вроде так.

Новое в этой версии скрипта

Добавил список друзей. Полный аналог списка игнорирования. Вверху надпись "Friends Editor", возле каждого ника "Friends". Те, кто занесены в этот список помечаются зелёным цветом, или любым другим который указан в строке:

Код: var FriendsColor = '#cfffcf';
Автор: data man
Дата сообщения: 21.01.2010 17:44
Ke

Класс ! Нет предела совершенству ?
Теперь всё работает, так и не понял в чём была проблема.

Пара предложений:
1. После поиска ников, скрытые отображать примерно как "User <ник> hidden"
2. Рядом с кнопками "Ignore", "Friend" добавить кнопку "Find & Show".

Добавлено:
IMHO, это уже не "IgnoreList for RuBoard", а "Ru-Board Helper"
Автор: C0USIN
Дата сообщения: 22.01.2010 14:31

Цитата:
"User <ник> hidden"

Я бы слово User вообще убрал и выровнял все влево, чтобы ник рисовался на своем положенном месте. А всю строчку лучше выделить каким-то цветом.
Автор: vv07
Дата сообщения: 22.01.2010 15:22
Не получаеться почему то,установить последний скрипт.Открываю через меню,открыть файл.Открываеться просто страница со скриптом.Поможите плиз.
FF 3.5.7
Автор: Ke
Дата сообщения: 22.01.2010 15:26
У кого Опера, потестируйте тоже, кто-нибудь, пожалуйста?


data man

Цитата:
Класс ! Нет предела совершенству ?
Теперь всё работает, так и не понял в чём была проблема.


В том, что FireFox интерпретирует несуществующий объект как пустую строку, а Chrome как ошибку и останавливает исполнение скрипта. У FireFox'а подход правильнее.

data man

Цитата:
Пара предложений:
1. После поиска ников, скрытые отображать примерно как "User <ник> hidden"


C0USIN

Цитата:
Я бы слово User вообще убрал и выровнял все влево, чтобы ник рисовался на своем положенном месте. А всю строчку лучше выделить каким-то цветом.


Отредактируйте эту строку:

Код: +'><font class=tit>&nbsp;User <b>' +NickName +'</b> ignored. '
Автор: vv07
Дата сообщения: 22.01.2010 15:54
Ke
Вы у мну уже зеленький стали Действительно, имя неверное было.Спасибо.Вы ценный кадр для руборда.Вот бы есчо и для игнорируемых цвет ввести.Ядовито желтый, али бардово кровянной какой нить

Добавлено:
Блин,теперь новая проблема.При попытке редактирования из обезьяны,вылащзить такое окно
Автор: data man
Дата сообщения: 22.01.2010 16:22
Ke

Цитата:
У кого Опера, потестируйте тоже, кто-нибудь, пожалуйста?

А я и на Опере 10.50 тестирую. Всё нормально.

Цитата:
А что при клике на неё должно происходить?

То же самое, что и при вводе в "Nick search", просто если открыта длинная страница, не очень удобно идти наверх, вводить ник, потом опять прокручивать вниз.


Цитата:
Отредактируйте эту строку:
Код: +'><font class=tit>&nbsp;User <b>' +NickName +'</b> ignored. '  

Да, спасибо, это я уже исправил.

Ещё такая идея - вместо "Друг" сделать группы пользователей с возможностью изменять цвета для каждой группы либо в скрипте, что проще, либо в диалоге.

Ну и по-мелочи - в описании темы "требуется Personalized Web" можно и убрать.
А шапка к Пасхе будет включена ?
Автор: Ke
Дата сообщения: 23.01.2010 05:42
vv07

Цитата:
Вы у мну уже зеленький стали Действительно, имя неверное было.Спасибо.Вы ценный кадр для руборда.


Спасибо.


Цитата:
Блин,теперь новая проблема.При попытке редактирования из обезьяны,вылащзить такое окно



Но ведь скрипт 58952.user.js - это скрипт Antigame. Вот его страничка: http://userscripts.org/scripts/show/58952 а вот сам скрипт: http://userscripts.org/scripts/source/58952.user.js


Цитата:
Вот бы есчо и для игнорируемых цвет ввести.Ядовито желтый, али бардово кровянной какой нить


Но их же сообщений не видно.
А у тех, чьи сообщения открыли через "Show message" слово Ignore становится красным.


data man

Цитата:
То же самое, что и при вводе в "Nick search", просто если открыта длинная страница, не очень удобно идти наверх, вводить ник, потом опять прокручивать вниз.


Попробую сделать.


Цитата:
Ещё такая идея - вместо "Друг" сделать группы пользователей с возможностью изменять цвета для каждой группы либо в скрипте, что проще, либо в диалоге.


"Если у общества нет цветовой дифференциации штанов, значит у общества нет цели !" © Кин-Дза-Дза

Можно поподробнее? Как именно?

В США, кстати, хотят отказаться от этой шкалы с цветами соответствующими уровням тревоги, потому, что люди путаются какой цвет чего значит.


Цитата:
А шапка к Пасхе будет включена ?


Я против. Когда код начинают редактировать все подряд, то очень скоро он начинает глючить, кроме того начинаются войны правок, как в Википедии.

Поэтому на sourceforge.net скачивать код могут все, но редактировать - только те, кто в группе разработчиков. В то же время тем, кто скачал, никто не мешает делать свои версии кода.
Автор: vv07
Дата сообщения: 23.01.2010 09:10

Цитата:
это скрипт Antigame

Та не,я просто использовал его для вашего скрипта.Точно такая же ошибка вылазит и на Ignor.user Тады напишите плиз,правильное название вашего скрипта,вместе с расширением.Или просто выложите готовый скрипт куда нить.Я полный профан во всех этих скриптовых делах.
Автор: data man
Дата сообщения: 23.01.2010 11:39
Ke

Насчет цветов.

Цитата:
Можно поподробнее? Как именно?

Возможные применения:
1. Вы сделали "Друзей" для того, чтобы отмечать тех, кто когда-то помог.
Возможен же и другой вариант - когда с кем-то поцапались, к примеру, но игнор для него - слишком суровая мера.
2. Группа тех, кого уже нет в живых.

Ну в общем, думаю, если будут группы, каждый найдет им своё применение.

Ну и для общего стиля (у себя я так и сделал), заменить
"Ignore Editor | Friends Editor | Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки" на
"Ignore Editor • Friends Editor • Выход • Профиль • Личный Ящик • Подписка • Настройки • Закладки"
Автор: Runtime_err0r
Дата сообщения: 23.01.2010 12:02
Вообще-то можно сделать индивидуальную систему статусов, чтобы вместо "Newbie", "Junior Member", "Member" и т.д. были надписи "Друг", "Тролль", "ЧМО" и т.д. як на скриншоте



А вообще хорошо бы интегрировать всё это в движок форума, жаль только - жить в эту пору прекрасную уж не придется - ни мне, ни тебе
Автор: C0USIN
Дата сообщения: 23.01.2010 14:19
Ke
Как выровнять эту строчку по левому краю? В центре они смотрятся мусором мельтешат перед глазами.

И еще, почему то у меня в Опере не сохраняется список игнориуемых. После перезагрузки браузера опять все видны (((
Автор: Ke
Дата сообщения: 25.01.2010 16:53
Следующая версия. Сделал кнопку Find возле ника. При клике на неё показываются сообщения только от этого юзера. При повторном клике - открываются обратно все.

Добавил то, что давно хотел. Чтобы несколько страниц со списками тем можно было открывать на одной странице. Правда это не работает в Хроме. Не знаю почему, может только у меня не работает? Внизу страницы со списком тем, например вот этой ( http://forum.ru-board.com/forum.cgi?forum=13 ), добавляется надпись "Additional forums:" и кнопка Edit. Если на неё нажать и через запятую ввести номера форумов которые нужно догрузить, например 72,73,75 то они догрузятся и будут видны прямо на этой же странице. Таким образом не надо открывать по десять страниц форума, а всё можно загрузить всё нужное на одну.

Номера форумов видны в строке адреса. Например на на странице ( http://forum.ru-board.com/forum.cgi?forum=13 ), цифра 13 - это номер форума.

[more=Код скрипта ( версия 2.2 )]
Код: // ==UserScript==
// @name Ignore for Ru-Board
// @version 2.2 (25Jan10 17:18:11)
// @include http://forum.ru-board.com/*
// ==/UserScript==

(function() {

var IgnName = 'Ignore';
var FrndsName = 'Friends';
var Delim1 = ',';
var IgnCnt = -1;
var SrchInPth = 'topic.cgi';
var SrchForum = 'forum.cgi';
var FrmsName = 'Forums';
var IgnM = new Array();
var UseNickSearch = true; // false;
var LastNickFind = '';
var UseFriends = true; // false;
var FriendsColor = '#cfffcf';
var TblText1s = '<table align="center" bgcolor="#999999" border="0" cellpadding="3" cellspacing="1" width="95%">';
var TblText1e = '</table>';
var AddForumS = 'AddForum';
var IsAddForums = true; // false;
var FrmLoadListS = '';
var FrmLoaded = '';
var CookDate1 = new Date("1 May 2100 11:00");

function main(IgnS, AddLinks, Reverse, FriendsList) {

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>&nbsp;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);
}
}

if (IgnS == undefined) {IgnS = ''}
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") {
var s2 = ''
+'<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> | ';
if (UseFriends) {
s2 = s2
+'<a class="tpc" title="Add or remove ' +"'" +Btag[0].innerHTML
+"'" +' in Friends List" name="' +Btag[0].innerHTML +'"'
+' ID=FriendsLink' +i
+' href=javascript:AddDelFrnd("FriendsLink' +i +'")>Friend'
+'</a> | ';
}
if (UseNickSearch) {
s2 = s2
+'<a class="tpc" title="Find and show messages from '
+"'" +Btag[0].innerHTML
+"'" +'" name="' +Btag[0].innerHTML +'"'
+' ID=ANickSrch' +i
+' href=javascript:NickSrch("' +Btag[0].innerHTML +'")'
+'>Find</a>'
+' | ';
}
TdTag[2].innerHTML = ''
+s2
+TdTag[2].innerHTML;
document.getElementById('IgnorLink' +i).addEventListener("click",
function() {AddDelIgn(this.id)}, false);
if (UseFriends) {
document.getElementById('FriendsLink' +i).addEventListener("click",
function() {AddDelFrnd(this.id)}, false);
}
if (UseNickSearch) {
document.getElementById('ANickSrch' +i).addEventListener("click",
function() {NickSrch(this.name)}, 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 (UseFriends) {SetFriendsColor(getCookie(FrndsName));}
}
if (document.location.pathname.indexOf(SrchInPth) > -1) {
main(getCookie(IgnName), 1, false);
}
function SetFriendsColor(FriendsList) {
if ((FriendsList != undefined) && (UseFriends)) {
var TrT = document.getElementsByTagName('tr');
var Frnd = FriendsList.split(Delim1);
for (var i = 0; i < TrT.length ; i++) {
var Btag = TrT[i].getElementsByTagName('b');
if (Btag.length == 0) continue;
var TdTag = TrT[i].getElementsByTagName('td');
if (TdTag.length >= 3) {
if (TdTag[2].className=="tpc") {
if ((FriendsList != undefined) && (UseFriends)) {
var Find2 = false;
for (var j = 0; j < Frnd.length ; j++) {
if (Btag[0].innerHTML == Frnd[j]) {
Find2 = true;
break;
}
}
if (Find2) {
TdTag[1].bgColor = FriendsColor;
} else {
TdTag[1].bgColor = TdTag[2].bgColor;
}
}
}
}
}
}
}
function IgnLinkColor(){
var TrT = document.getElementsByTagName('tr');
var Ign2 = getCookie(IgnName);
if (Ign2 == undefined) {Ign2 = ''}
for (var i = 0; i < TrT.length ; i++) {
var ATag = document.getElementById('IgnorLink' +i);
if (ATag==null) continue;
if (IsTextInStr(ATag.name, Ign2, 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();
if (UseFriends) {SetFriendsColor(getCookie(FrndsName));}
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;
}
}
if (UseFriends) {
for (var i = 0; i < Tgs1.length ; i++) {
if (Tgs1[i].id.indexOf('FriendsLink') == 0) {
Tgs1[i].addEventListener("click", function() {AddDelFrnd(this.id)}, false);
break;
}
}
}
if (UseNickSearch) {
for (var i = 0; i < Tgs1.length ; i++) {
if (Tgs1[i].id.indexOf('ANickSrch') == 0) {
Tgs1[i].addEventListener("click", function() {NickSrch(this.name)}, false);
break;
}
}
}
}
function EditIgn() {
var s = getCookie(IgnName);
if (s == undefined) {s = ''}
if (s==null) {s='';}
s = prompt('Ignore editor. Put enimies here. Example: Freak, Troll', s.replace(/^,/g,""));
if(s!=null){
setCookie(IgnName,PrsUsersList(s),{expires:CookDate1});
main(getCookie(IgnName), 0);
}
};
function EditFrnds() {
var s = getCookie(FrndsName);
if (s == undefined) {s = ''}
if (s==null) {s='';}
s = prompt('Ignore editor. Put friends here. Example: Me, Mine, Myself', s.replace(/^,/g,""));
if(s!=null){
setCookie(FrndsName,PrsUsersList(s),{expires:CookDate1});
SetFriendsColor(getCookie(FrndsName));
}
};
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")){
var s1 = '';
if (UseNickSearch) {
s1 = ''
+'<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()>&gt;</button></div>'
;
}
s1 = s1 +''
+'&nbsp;<a ID=IgnEditor title="Ignore List editor" '
+'href=javascript:EditIgn()>Ignore Editor</a> &#149; '
if (UseFriends) {
s1 = s1 +''
+'<a ID=IgnFriends title="Friends List editor" '
+'href=javascript:EditFrnds()>Friends Editor</a> &#149; '
}
Td2T[i].innerHTML = s1 +Td2T[i].innerHTML;
document.getElementById('IgnEditor').addEventListener("click",
function() {EditIgn()}, false);
if (UseNickSearch) {
document.getElementById('NickBtn').addEventListener("click",
function() {NickSrch()}, false);
}
if (UseFriends) {
document.getElementById('IgnFriends').addEventListener("click",
function() {EditFrnds()}, false);
}
break;
}
}
}
function NickSrch(aNames) {
if (aNames == undefined) {
var s = PrsUsersList(document.getElementById('NickEdit').value);
} else {
if (LastNickFind == aNames) {
var s = '';
} else {
var s = aNames;
}
}
LastNickFind = s;
if (s==null) {
main(getCookie(IgnName), 0)
} else {
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 (s1 == undefined) {s1 = ''}
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,{expires:CookDate1});
main(s1, 0);
}
}
} else {
if (confirm('(+) Add "' +sName1 + '" to Ignore?')) {
s1 = s1 +Delim1 +sName1;
setCookie(IgnName, s1,{expires:CookDate1});
main(s1, 0);
}
}
}
function AddDelFrnd(FrndTagName){
var aTag = document.getElementById(FrndTagName);
var sName1 = aTag.name;
var s1 = getCookie(FrndsName);
if (s1 == undefined) {s1 = ''}
if (IsTextInStr(sName1, s1, Delim1)) {
if (confirm('(-) Remove "' +sName1 + '" from Friends?')) {
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(FrndsName, s1,{expires:CookDate1});
if (UseFriends) {SetFriendsColor(getCookie(FrndsName));}
}
}
} else {
if (confirm('(+) Add "' +sName1 + '" to Friends?')) {
s1 = s1 +Delim1 +sName1;
setCookie(FrndsName, s1,{expires:CookDate1});
if (UseFriends) {SetFriendsColor(getCookie(FrndsName));}
}
}
}
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 })}
String.prototype.get = function(p){
return (match = this.match(new RegExp("[?|&]?" + p + "=([^&]*)"))) ? match[1] : false;}
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling); }
function PrsUsersList(aUserNicks) {
var s = aUserNicks.replace(/,+/g,",");
s = s.replace(/\s+/g," ");
s = s.replace(/[, ]$/g,"").replace(/^,/g,"");
s = s.replace(/,\s/g,",");
return s;
}
var isPAdding = false;
var CurFLoad = -1;
var CurForumNbm = window.location.search.get('forum');
if (IsAddForums) {
if ( (document.location.pathname.indexOf(SrchForum) > -1)
) {
var TrTag3 = document.getElementsByClassName('tit')
DTag1 = document.createElement("div");
DTag1.id = 'Div100';
var LoadList2 = getCookie(FrmsName +CurForumNbm);
if (LoadList2 == undefined) {LoadList2 = ''}
var FrmLoadList = PrsUsersList(LoadList2).split(Delim1);
DTag1.innerHTML = ''
+'<center>'
+'<div id="vote_status1"><br></div>'
+'Additional forums: <font id=FForums>' +LoadList2 +'</font>'
+' &nbsp; <input id=btnv1 value="Edit"'
+' onclick="EdFrmsLst()" type="button" />'
+'&nbsp; <font id="vote_status2">Place for server' +"'" +'s answer</font>'
+'</center>';
insertAfter(TrTag3[TrTag3.length -1].parentNode.parentNode.parentNode.parentNode, DTag1, TrTag3[TrTag3.length -1].parentNode.parentNode.parentNode);
document.getElementById('btnv1').addEventListener("click",
function() {EdFrmsLst()}, false);
}
}
function EdFrmsLst() {
var s = getCookie(FrmsName +CurForumNbm);
if (s == undefined) {s = ''}
if (s==null) {s='';}
s = prompt('Additional loader editor. Put forum number' +"-" +'s here Example: 13, 72, 75', s.replace(/^,/g,""));
if(s!=null){
FrmLoadListS = PrsUsersList(s);
setCookie(FrmsName +CurForumNbm, FrmLoadListS,{expires:CookDate1});
var FrmLoadList = PrsUsersList(FrmLoadListS).split(Delim1);
document.getElementById('FForums').innerHTML = s;
var FrmLoadedList = PrsUsersList(FrmLoaded).split(Delim1);
for (var j = 0; j < FrmLoadedList.length; j++) {
if (FrmLoadedList[j] == '') continue;
var Find1 = false;
for (var i = 0; i < FrmLoadList.length; i++) {
if (FrmLoadedList[j] == FrmLoadList[i]) {
Find1 = true;
break;
}
}
var FrTag1 = document.getElementById(AddForumS +FrmLoadedList[j]);
if (FrTag1 == null) continue;
if (Find1) {
FrTag1.style.display = "inline";
} else {
FrTag1.style.display = "none";
}
}
AddPage1();
}
}
function AddPage1() {
if (CurFLoad != -1) {return false}

var statusElem1 = document.getElementById('vote_status1')
var statusElem2 = document.getElementById('vote_status2')
Find1 = 0;
s = getCookie(FrmsName +CurForumNbm);
if (s == undefined) {s = ''}
var FrmLoadList = PrsUsersList(s).split(Delim1);
for (var j = 0; j < FrmLoadList.length; j++) {
if (FrmLoadList[j] == '') continue;
var tmp3 = document.getElementById(AddForumS +FrmLoadList[j]);
if (tmp3 == null) {
CurFLoad = FrmLoadList[j];
Find1 = 1;
break;
}
}
if (Find1 == 1) {
var req = getXmlHttp()
req.onreadystatechange = function() {
if (req.readyState == 4) {
statusElem2.innerHTML = req.statusText
+' Forum:' +CurFLoad;
if(req.status == 200) {
if (document.getElementById(AddForumS +CurFLoad) != null) {
CurFLoad = -1;
return false;
}
var temp = document.createElement('div');
temp.innerHTML = req.responseText;
var TdTags1 = temp.getElementsByClassName("tit");
var NodeNew1 = document.createElement('div');
NodeNew1.id = AddForumS +CurFLoad;
FrmLoaded = FrmLoaded +',' +CurFLoad;
if (TdTags1.length >= 2) {
var TblTag1 = TdTags1[0].parentNode.parentNode.parentNode;
var TblTag2 = TdTags1[1].parentNode.parentNode.parentNode;
var TblTag3 = TdTags1[TdTags1.length-1].parentNode.parentNode.parentNode;
s1 = '' +'<br>'
+TblText1s +TblTag1.innerHTML +TblText1e
+TblText1s +TblTag2.innerHTML +TblText1e
+TblText1s +TblTag3.innerHTML +TblText1e ;
NodeNew1.innerHTML = s1;
} else {
NodeNew1.innerHTML = '' +'<br>' +
'Error! Forum ' +CurFLoad +' is empty';
}
statusElem1.parentNode.insertBefore(NodeNew1, statusElem1);
var tmp3 = document.getElementById(AddForumS +CurFLoad);
CurFLoad = -1;
AddPage1();
} else {
var NodeNew1 = document.createElement('div');
NodeNew1.id = AddForumS +CurFLoad;
NodeNew1.innerHTML = '' +'<br>' +
'Error! No response from Forum ' +CurFLoad +'.';
statusElem1.parentNode.insertBefore(NodeNew1, statusElem1);
var tmp3 = document.getElementById(AddForumS +CurFLoad);
CurFLoad = -1;
AddPage1();
}
}
}
req.open('GET', '/forum.cgi?forum=' +CurFLoad, true);
req.send(null);
statusElem2.innerHTML = 'Loading'
+' forum:' +CurFLoad;
} else {
statusElem2.innerHTML = 'All pages loaded.';
}
}

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
xmlhttp.overrideMimeType('text/html');
}
return xmlhttp;
}

if (IsAddForums) {AddPage1()};
})();
Автор: vv07
Дата сообщения: 25.01.2010 17:15
Ke
Странно,Установил последний ваш скрипт и все пропало вообще.То есть не работает почему то.
Автор: C0USIN
Дата сообщения: 25.01.2010 17:17
Ke


Цитата:
Если интегрировать, то уже ничего нельзя будет изменить или это будет слишком сложно. Кроме того, вдруг кому-нибудь не понравится? Система плагинов по-моему лучший вариант.

Не лучший. Сначала все грузится и показывается а потом уже вызывается скрипт. Этот процесс отнимает время.
Вот если бы движок форума проставлял ID для каждой строки в таблице - можно было бы обойтись стандартным AdBlock и неугодные бы скрывались через CSS сразу в процессе загрузки.


Цитата:
Какую именно строку?

User ... ignored. Show message
эту строку имел в виду.
Автор: Runtime_err0r
Дата сообщения: 25.01.2010 17:25
Ke

Цитата:
Ну, а как конкретно это сделать то?

В Proxomitron'е - легко, в твоём скрипте - не знаю


Цитата:
Пятнадцать кнопок под все статусы? Сколько их должно быть? Какие именно? Кому какой цвет?

Я думаю, что те, кому это нужно, должны сами переделать скрипт под себя, создав нужное количество групп, пытаться сделать универсальный скрипт, который бы всех устраивал, не имеет смысла.


Цитата:
Как хранить в кукис?

Кстати, я считаю, что идея хранить настройки в кукисах - не самая удачная, периодически будут вылезать геморрои типа этого:


Цитата:

Цитата: почему то у меня в Опере не сохраняется список игнориуемых. После перезагрузки браузера опять все видны (((

Скорее всего это связано с тем, что Опера уничтожает кукис после перезагрузки.
Автор: carbonsky
Дата сообщения: 25.01.2010 18:32
Прошу хакерского прощения за ламерский вопрос, но я так и не понял куда этот скрипт засовывать? Стоит огненный лис 3.5.5 А на работе эксплорер, под ьнего ничего такого не написано? Устанавливать проксимотроны нету прав
Автор: Runtime_err0r
Дата сообщения: 25.01.2010 20:13
carbonsky

Цитата:
Устанавливать проксимотроны нету прав

Чё-то не верится... На него прав-то никаких не нужно, можно скачать zip-архив и распаковать его в какую-нибудь папку http://www.proxomitron.ru/download.htm
Автор: carbonsky
Дата сообщения: 25.01.2010 20:23
Runtime_err0r
Интересно. Я привык, что не могу установить ничего вообще. А тут достаточно просто распаковать? Попробую. Пара деятелей уже успела надоесть.
Автор: Ke
Дата сообщения: 26.01.2010 07:17
vv07

Цитата:
Странно,Установил последний ваш скрипт и все пропало вообще.То есть не работает почему то.


Вот, выложил скрипт по этой ссылке: http://ifolder.ru/16110036


C0USIN

Цитата:
User ... ignored. Show message
эту строку имел в виду.


Сделать эту строчку:

Код: +'><font class=tit>&nbsp;User <b>' +NickName +'</b> ignored. '
Автор: C0USIN
Дата сообщения: 26.01.2010 09:04

Цитата:
Сделать эту строчку:

Код: [no]+'><font class=tit>&nbsp;User <b>' +NickName +'</b> ignored. ' [/no]

такой:

Код: [no]'><font class=tit><b>' +NickName +'</b> ignored. ' [/no]
Автор: Ke
Дата сообщения: 26.01.2010 09:58
C0USIN

Цитата:
Все равно по центру. Или это только у меня так?


У меня всё слева.
Можно попробовать такую строчку:


Код: +' Align=left><font class=tit>&nbsp;User <b>' +NickName +'</b> ignored. '
Автор: vv07
Дата сообщения: 26.01.2010 10:00
Хм у меня тоже,все слева.
Автор: Ke
Дата сообщения: 26.01.2010 10:07
vv07

Цитата:
Хм у меня тоже,все слева.


Со строчкой тоже слева?
Автор: C0USIN
Дата сообщения: 26.01.2010 11:01
Ke
Спасибо. Помогло выравнивание.

Теперь глаз просит вернуть обрамление у таблицы.
Автор: data man
Дата сообщения: 26.01.2010 11:47
Ke

Цитата:
С Find - действительно удобно стало.

Да, спасибо.
Вот если бы при клике на "Find" ещё и другие сообщения не раскрывались, было бы вообще супер.
То есть будет возможность показывать сообщения от нескольких человек, скрывая остальные.
Автор: carbonsky
Дата сообщения: 26.01.2010 22:22
Большое спасибо автору. Все отлично работает, а улучшение внешнего вида мне лично не критично. Еще раз спасибо.
Автор: bredonosec
Дата сообщения: 27.01.2010 11:05
Ke
как-то странно, открывает в виде текста файл. я что-то не то делаю?
попутно, теперь заранее преднастраивать файл перед его использованием (вписывая туда ники) не нужно?

Страницы: 12345678910111213141516171819

Предыдущая тема: Варезник - иногда/совсем немодерируемый форум?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.