Добавляет метки (You) к ответам на ваши посты на имиджбордах (по имени и\или трипкоду)
- // ==UserScript==// @name (You)// @description Добавляет метки (You) к ответам на ваши посты на имиджбордах (по имени и\или трипкоду)// @include *// @version 0.1.0// @grant GM_getValue// @grant GM_setValue// @require http://code.jquery.com/jquery-1.11.1.min.js// @run-at document-end// @namespace https://github.com/VVatashi// ==/UserScript==const configLocalStorageKey = 'you-config';let config = {name: "Name",trip: "!Trip"};function loadConfig() {config = JSON.parse(GM_getValue(configLocalStorageKey, JSON.stringify(config)));}function saveConfig() {GM_setValue(configLocalStorageKey, JSON.stringify(config));}const configFormClass = 'you-config-form';const configFormTextClass = 'you-config-form-text';const myPostClass = 'you-post-my';const replyPostClass = 'you-post-reply';const replyLinkClass = 'you-post-reply-link';function createStyle() {let css = document.createElement("style");css.type = "text/css";css.innerHTML = `.${myPostClass} {box-shadow: 6px 0 2px -2px rgba(97,107,134,.8), -6px 0 2px -2px rgba(97,107,134,.8);}.${replyPostClass} {box-shadow: 6px 0 2px -2px rgba(97,134,107,.8), -6px 0 2px -2px rgba(97,134,107,.8);}.${replyLinkClass}:after {content: " (You)";}.${configFormClass} {position: absolute;background-color: white;box-shadow: 0px 2px 6px 0px rgba(97,107,134,.8);padding: 12px 16px;z-index: 1;}.${configFormTextClass} {color: black;}`;document.head.appendChild(css);}function createConfigForm() {const configNameFieldClass = 'you-config-name';const configTripFieldClass = 'you-config-trip';const configToogleButtonClass = 'you-config-toogle';const configSaveButtonClass = 'you-config-save';let parent = $('.adminbar, #adminbar, .boardlist, .menu, .board-list').first();parent.after(`[ <a class="${configToogleButtonClass}">(You) config</a> ]<br /><form class="${configFormClass}"><table><tr><td class="${configFormTextClass}">Name:</td><td><input type="text" class="${configNameFieldClass}" value="${config.name}" /></td></tr><tr><td class="${configFormTextClass}">Trip:</td><td><input type="text" class="${configTripFieldClass}" value="${config.trip}" /></td></tr><tr><td><button class="${configSaveButtonClass}">Save</button></td><td></td></tr></table></form>`);$('.' + configToogleButtonClass).click(function () {$('.' + configFormClass).toggle();});$('.' + configSaveButtonClass).click(function () {config.name = $('.' + configNameFieldClass).val();config.trip = $('.' + configTripFieldClass).val();saveConfig();});$('.' + configFormClass).hide();}const domains = ['2ch.hk','dobrochan.com','iichan.hk','syn-ch.com','2-ch.su','nowere.net','410chan.org','kurisa.ch','chuck.dfwk.ru','owlchan.ru','haibane.ru','volgach.ru','hohoemy.exach.com','zerochan.ru','haruhichan.ovh','chaos.cyberpunk.us','02ch.in','ozuchan.ru','dvach.hut2.ru','2watch.su'];function checkDomain() {for (let i = 0; i < domains.length; i++) {if (window.location.hostname.indexOf(domains[i]) != -1)return true;}return false;}const postSelector = 'td.reply[id], div.reply[id], td.post[id], div.post[id], div.thread_OP[id], div.thread_reply[id]';const postBodySelector = 'blockquote, .body, .postbody, .post_body';const nameSelector = '.postername, .name, .commentpostername, .poster-name';const tripSelector = '.postertrip, .trip, .tripcode';const processedClass = 'you-processed';const processedSelector = '.' + processedClass;function main() {let posts = $(postSelector);let myPosts = posts.filter(function (index, element) {let name = $(element).find(nameSelector).text();let trip = $(element).find(tripSelector).text();return name.indexOf(config.name) != -1 && trip.indexOf(config.trip) != -1;});let newPosts = posts.not(processedSelector);let myNewPosts = myPosts.not(processedSelector);myNewPosts.addClass(myPostClass);let myPostsIds = $.map(myPosts, function (element, index) {return $(element).attr('id').match(/\d+/)[0];});let replies = newPosts.filter(function (index, element) {let replyBodyText = $(element).find(postBodySelector).text();for (let i = 0; i < myPostsIds.length; i++) {if (replyBodyText.indexOf('>>' + myPostsIds[i]) != -1)return true;}return false;});replies.addClass(replyPostClass);replies.find(postBodySelector).find('a').each(function (index, element) {let linkText = $(element).text();for (let i = 0; i < myPostsIds.length; i++) {if (linkText == '>>' + myPostsIds[i]) {$(element).addClass(replyLinkClass);return;}}});newPosts.addClass(processedClass);myNewPosts.addClass(processedClass);}$(document).ready(function () {if (!checkDomain()) return;loadConfig();createStyle();createConfigForm();main();setInterval(main, 10000);});