Skip to content

Instantly share code, notes, and snippets.

@dobroneko
Created July 1, 2016 18:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dobroneko/0693840834f36ce6f6146fec05a8efbe to your computer and use it in GitHub Desktop.
Save dobroneko/0693840834f36ce6f6146fec05a8efbe to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Dobro & Avatar!
// @namespace dobroavatar
// @version 1.0
// @description Скрипт для скрытия сообщений, без файлов.
// @author neko
// @match http://dobrochan.com/*
// @grant none
// ==/UserScript==
/** Cкрипт для скрытия сообщений, без файлов.
* @name dobroavatar
* @description
* {number} sec - Кол-во секунд, перезагрузка.
* {Array} threads - Массив состоящий из строк. ID нитей, в которых работает
* скрипт.
* {undefined} timerId - Пустая переменная, для таймера.
* {string} id - CSS-селектор, для метода querySelectorAll.
* {Object} thread - Коллекция элементов нити.
* {number} tdLen - Длинна коллекции thread.
* {undefined} point - Пустая переменная, для индекса threads, соответствующая
* нити, в которой находится клиент.
* @description
* Определение местонахождения клиента, нахождение всех элементов, при
* соответствии с id в массиве.
* Проверка на существование id, для начала работы.
* Вызов функции conceal, скрывающая все посты, без файлов.
* Запуск таймера. В каждом проходе функции t, проверяется, увеличилась ли
* коллекция элементов (появились новые сообщения) или нет. Если нет, ничего не
* происходит и таймер начинает новый цикл, а если есть, обновляется коллекция
* thread, запускается функция conceal, скрывающая новые посты, если в них нет
* файлов. tdLen, обновляет длину коллекции, запускается следующий цикл
* таймера.
*/
(function() {
"use strict";
var sec = 5, // Секунд до перезагрузки.
threads = ["thread_99999", "thread_96669"], // Номер треда, через запятую добавлять ещё.
timerId,
id = detector(),
thread = document.querySelectorAll(id),
tdLen = thread.length,
point;
if (id) {
conceal();
timerId = setTimeout(function t() {
if (document.getElementById(threads[point]).children.length !==
tdLen) {
thread = document.querySelectorAll( detector() );
conceal();
tdLen = document.getElementById(threads[point]).children.length;
}
timerId = setTimeout(t, sec * 1000);
}, sec * 1000);
}
/** Определение нити, формирование CSS-селектора, для поиска.
* @function detector
* @param {Array} threads - Массив, с id нитей.
* @return {string} id - CSS-селектор, для поиска.
* @return {number} point - Элемент массива, соответствующий данной нити.
* @description
* {undefined} i - Пустая, для присваивания длинны массива. Кол-во итераций
* цикла.
* {string} here - Возвращает id нити, в которой находится клиент.
* {undefined} id - Пустая. Для результата.
* @description
* Перебор каждого элемента массива и сравниванием, с текущим id. При нахождении
* совпадений, формирование CSS-селектора и сохранение индекса элемента.
*/
function detector() {
var i,
here = document.querySelector("div.thread").id,
id;
for (i = threads.length - 1; i >= 0; i--) {
if (threads[i] === here) {
id = "div#" + threads[i] + " > table.replypost.post";
point = i;
}
}
return id;
}
/** Скрытие сообщений, без файлов.
* @function conceal.
* @param {Object} thread - коллекция элементов, данной нити.
* @description
* {undefined} i - Пустая, для длинны коллекции. Кол-во итераций цикла.
* @descriotion
* Перебор каждого элемента коллекции. Проверка, на отсутствие класса, который
* находится у элементов, носящими файлы. При отсутствии, изменяется свойства
* элемента, свойство hidden, с false, на true.
*/
function conceal() {
var i;
for (i = thread.length - 1; i >= 0; i--) {
if (!thread[i].querySelector("[class=\"file\"]")) {
thread[i].hidden = true;
}
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment