您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Игнор для форумов на IPB 1.3
// ==UserScript== // @name Yarportal Ignore 2 // @namespace http://yarportal.ru // @description Игнор для форумов на IPB 1.3 // @include http://yarportal.ru/* // @include http://www.yarportal.ru/* // @version 2.2.150622 // @grant none // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js // ==/UserScript== // что за страничка? Для списка тем и треда — разные обработчики var curPageName = window.location.pathname.toString(); // инициализируем список игнора из локального хранилища // localStorage.clear(); var ignoreList = localStorage.ignoreList ? JSON.parse(localStorage.ignoreList) : {}; var ypignoreFlags = localStorage.ypignoreFlags ? JSON.parse(localStorage.ypignoreFlags) : {}; if (ypignoreFlags.ShowNames === undefined) ypignoreFlags.ShowNames = true; if (ypignoreFlags.HideQuotes === undefined) ypignoreFlags.HideQuotes = true; // alert (JSON.stringify(ignoreList)); // alert (JSON.stringify(ypignoreFlags)); // чистим список. Если все флаги стоят false, то незачем их хранить. Только место занимают. for (var k in ignoreList) { if (!ignoreList[k].hidePost && !ignoreList[k].hideQuote && !ignoreList[k].hideThread ) delete ignoreList[k]; } localStorage.ignoreList = JSON.stringify(ignoreList); // работаем со списком тем или списком активных тем if (~curPageName.indexOf('forum') || ~window.location.search.toString().indexOf('act=Search&CODE=getactive')) { // Сначала вставляем внизу DIV в который мы потом будем запихивать имена игнорируемых. Если таковые будут var afterID = ~curPageName.indexOf('forum') ? "div.darkrow2:last" : "div.titlemedium:last"; if (ypignoreFlags.ShowNames) $(afterID).after('<div class="row2" id="ignoreNamesHere" style="padding:4px" align="left"><strong>В игноре темы от: </strong> </div>'); // список тем, перебираем имена авторов var authList = {}; var authors = $('div.tableborder > table > tbody > tr > td.row2 > a[href*="showuser"]'); authors.each(function () { // вылущиваем имя и ID var authorName = $(this).text(); authorName = spcharReplace(authorName); var authorID = $(this).attr('href'); var authorID = authorID.substring(authorID.indexOf('=') + 1); //собираем найденные уникальные пары ID:имя authList[authorID] = authorName; // и присваиваем строкам ID их авторов, чтоб потом проще прятать $(this).closest('tr').addClass(authorID); // за никами вставляем ссылку-кнопку, инициирующую удаление $(this).after(' <strong><a class="ignoreAdd" id="' + authorID + '" href="#" style="text-decoration: none" title="Игнорировать все темы этого пользователя">[-]</a></strong>'); }); //Прячем темы, если есть что. Чтобы два раза не вставать выводим список игнора внизу //Выводим только тех кого реально прятали на этой странице, так проще если список игнора большой for (var k in ignoreList) { if (ignoreList[k].hideThread) { var hidelen = $('.' + k).length; $('.' + k).hide(); if (hidelen > 0 && ypignoreFlags.ShowNames) putName(k, 'Перестать игнорировать темы пользователя'); } } } // закончили со списком тем // Работаем с сообщениями if (~curPageName.indexOf('topic')) { // Сначала вставляем внизу DIV в который мы потом будем запихивать имена игнорируемых, если таковые будут if (ypignoreFlags.ShowNames) $("div.activeuserstrip:last").after('<div class="row2" id="ignoreNamesHere" style="padding:4px" align="left"><strong>В игноре посты от: </strong> </div>'); // список постов, перебираем имена авторов var authList = {}; var authors = $('div.tableborder > table'); // > td.row4 > a[href*="javascript:ins"] authors.each(function () { // вылущиваем имя и ID var authorName = $(this).find('span.normalname > a').filter(':first').text(); // имя может быть пустым, если пост от удаленного пользователя, такие пропускаем if (authorName) { authorName = spcharReplace(authorName); var authorID = $(this).find('tr > td > span.postdetails > a').filter(':first').attr('href'); var authorID = authorID.substring(authorID.indexOf('=') + 1); authList[authorID] = authorName; // и присваиваем целым таблицам ID их авторов, чтоб потом проще прятать $(this).addClass(authorID); // туда где жалоба вставляем ссылку на игнорирование пользователя $(this).find('td.row4 > div > a').filter(':first').before(' <strong><a class="ignoreAdd" id="' + authorID + '" href="#" style="text-decoration: none" title="Игнорировать все сообщения этого пользователя">[В игнор]</a></strong> '); } }); var authors = $('div.tableborder > table'); //прячем посты, если есть что, и чтобы два раза не вставать выводим список игнора вконце //Выводим только тех кого реально прятали на этой странице, так проще если список игнора большой for (var k in ignoreList) { if (ignoreList[k].hidePost) { var check = $('.' + k).length; $('.' + k).hide(); if (check > 0 && ypignoreFlags.ShowNames) putName(k, 'Перестать игнорировать сообщения пользователя'); if (ypignoreFlags.HideQuotes) { var hideUser = ignoreList[k].Name; var hideUserN = '(' + hideUser + ' @'; var hideUserM = '[QUOTE=' + hideUser + ','; hideUserN = hideUserN.replace(/\ /g, ' '); hideUserM = hideUserM.replace(/\ /g, ' '); authors.each(function() { var post = $(this); var check = checkEquals(post.find('b'), hideUser); check = check + checkContains(post.find('td'), hideUserN); check = check + checkContains(post.find('td'), hideUserM); if (check > 0) post.hide(); }); } } } } // закончили с сообщениями // здесь обрабатывается страница настроек if (~curPageName.indexOf('index') && ~window.location.search.toString().indexOf('act=Msg&CODE=02')) { //вставляем новую плашку куда мы будем выводить список игнорируемых var txt = ''; var txt2 = ''; if (ypignoreFlags.ShowNames) txt = ' checked="checked" '; if (ypignoreFlags.HideQuotes) txt2 = ' checked="checked" '; $("div.pformstrip:last").after('<br><div class="row2" id="ignoreNamesHere" style="padding:4px" align="left"><strong> В игноре темы и/или посты от: </strong></div><div class="row2" style="padding:4px" align="left"> <b>Выводить список игнорируемых в списке тем/сообщений: <input type="checkbox" class="ShowNames" ' + txt + ' /></b></div><div class="row2" style="padding:4px" align="left"> <b>Прятать цитаты: <input type="checkbox" class="HideQuotes" ' + txt2 + ' /></b></div>'); for (var k in ignoreList) { var txt = "Игнорируются "; var appx = ''; if (ignoreList[k].hidePost) { txt = txt + "сообщения"; appx = " и "; } if (ignoreList[k].hideThread) txt = txt + appx + "темы"; putName(k, txt + ". Удалить из списка."); } } //обработчик изменения чекбоксов $('input.ShowNames').on("click", function () { if (ypignoreFlags.ShowNames) { ypignoreFlags.ShowNames = false; } else ypignoreFlags.ShowNames = true; localStorage.ypignoreFlags = JSON.stringify(ypignoreFlags); }); $('input.HideQuotes').on("click", function () { if (ypignoreFlags.HideQuotes) { ypignoreFlags.HideQuotes = false; } else ypignoreFlags.HideQuotes = true; localStorage.ypignoreFlags = JSON.stringify(ypignoreFlags); }); // обработчик нажатия на [-] $('a.ignoreAdd').click(function () { var authorID = $(this).attr('id'); $('.' + authorID).hide(); // если в списке игнора не было раньше такого ID, то создаём; if (ignoreList[authorID] === undefined) { ignoreList[authorID] = {}; ignoreList[authorID]['Name'] = authList[authorID]; ignoreList[authorID]['hidePost'] = false; ignoreList[authorID]['hideQuote'] = false; ignoreList[authorID]['hideThread'] = false; } if (~curPageName.indexOf('forum') || ~window.location.search.toString().indexOf('act=Search&CODE=getactive')) { ignoreList[authorID].hideThread = true; } else { ignoreList[authorID].hidePost = true; ignoreList[authorID].hideQuote = true; } localStorage.ignoreList = JSON.stringify(ignoreList); putName(authorID, 'Перестать игнорировать темы пользователя'); return (false); }); // обработчик нажатия на имя в списке игнора $("body").on('click', '.ignoreRemove', function (){ var authorID = $(this).attr('id'); if (~curPageName.indexOf('forum') || ~window.location.search.toString().indexOf('act=Search&CODE=getactive')) { $('.' + authorID).show(); ignoreList[authorID].hideThread = false; } else if (~curPageName.indexOf('topic')) { $('.' + authorID).show(); ignoreList[authorID].hidePost = false; ignoreList[authorID].hideQuote = false; } else { delete ignoreList[authorID]; } localStorage.ignoreList = JSON.stringify(ignoreList); $(this).remove(); return (false); }); // функция вывода имен игнорируемых со ссылками function putName(authorID, text) { $("div.row2#ignoreNamesHere").append('<a href="#" class="ignoreRemove" id="' + authorID +'" title="' + text + '" style="text-decoration: none">'+ ignoreList[authorID].Name + ' :</a> '); } // поиск неполного совпадения внутри элементов, потребуется если надо найти в цитатах function checkContains(elem, text) { var result = 0; elem.each(function () { if (~this.innerHTML.indexOf(text)) result++; }); return result; } // поиск полного совпадения внутри элементов, потребуется если надо найти в обращениях к юзеру function checkEquals(elem, text) { var result = 0; elem.each(function () { var i = $(this).html(); if (i == text) result++; }); return result; } // заменяем всякие разные символы на спецполседовательности function spcharReplace (text) { text = text.replace(/&/g, '&'); text = text.replace(/\s/ig, ' '); text = text.replace(/</g, '<'); text = text.replace(/>/g, '>'); text = text.replace(/"/g, '"') return (text); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址