您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to minimize thread forums
- // ==UserScript==
- // @name Xenforo minimize threads
- // @version 1
- // @grant Uvigz
- // @description Adds a button to minimize thread forums
- // @match *://forums.spacebattles.com/forums/*/page*
- // @match *://forums.spacebattles.com/forums/*/?*
- // @match *://forums.spacebattles.com/forums/*/
- // @match *://forums.sufficientvelocity.com/forums/*/page*
- // @match *://forums.sufficientvelocity.com/forums/*/?*
- // @match *://forums.sufficientvelocity.com/forums/*/
- // @namespace https://greasyfork.org/users/42312
- // ==/UserScript==
- // if container's elements should be hidden.
- var hidden = function(el, className) {
- console.log('hidden');
- // prepare button
- var button;
- // then for every children
- [...el.children].forEach(element => {
- // check if its title
- if (element.classList.contains('structItem-cell--main')) {
- // if yes should leave title alone and deal with button, check all of its children
- [...element.children].forEach(element2 => {
- // check if its hide button
- if (element2.classList.contains('hide-container')) {
- // if yes, save its reference.
- button = element2;
- }
- // check if its title
- else if (element2.classList.contains('structItem-title')){
- // if its title, then add code for better design
- element2.style.display = 'inline-block';
- } else {
- // if no, then hide it
- element2.style.display = 'none';
- }
- });
- // then deal with button
- console.log(el, element)
- dealWithButtom('unhide', unhide, el, element, className, button);
- } else {
- console.log(element);
- // if no, then hide it
- element.style.display = 'none';
- }
- });
- }
- // if you want to hide element
- var hide = function(el, className) {
- // do all the thinks as if element was hidden
- hidden(el, className);
- // then add elements key to hidden elements list
- hiddenList.push(className);
- // and then store the list in local storage
- localStorage.setItem(hostname + "hiddenList", JSON.stringify(hiddenList));
- }
- // if you want to unhide element
- var unhide = function(el, className) {
- // do all the thinks as if element was unhidden
- unhidden(el, className);
- // then remnove elements key from hidden elements array
- // (this actually creanes new filtered array without
- // elements key, then overwrites the array, but practically,
- // it should be the same as deleting elements key from array
- // but it's easier to read)
- hiddenList = hiddenList.filter(e => e !== className)
- // and then store the list in local storage
- localStorage.setItem(hostname + "hiddenList", JSON.stringify(hiddenList));
- }
- // if container's elements should be unhidden.
- var unhidden = function(el, className) {
- console.log('unhidden');
- // prepare button
- var button;
- // then for every children
- [...el.children].forEach(element => {
- // check if its title
- if (element.classList.contains('structItem-cell--main')) {
- // if yes should leave title alone and deal with button, check all of its children
- [...element.children].forEach(element2 => {
- // check if its hide button
- if (element2.classList.contains('hide-container')) {
- // if yes, save its reference.
- button = element2;
- }
- // check if its title
- else if (element2.classList.contains('structItem-title')){
- // if its title, then add code for better design
- element2.style.display = 'initial';
- } else {
- // if no, then hide it
- element2.style.display = 'initial';
- }
- });
- // then deal with button
- console.log(el, element)
- dealWithButtom('hide', hide, el, element, className, button);
- } else {
- console.log(element);
- // if no, then hide it
- element.style.display = 'table-cell';
- }
- });
- }
- dealWithButtom = function(text, functionReference, el, container, className, button) {
- if (!button) {
- button = document.createElement ('div');
- button.className = 'hide-container button--cta button';
- button.innerHTML = text;
- button.onclick = () => {functionReference(el, className)};
- // and add it to container
- container.appendChild(button);
- } else {
- // if there was, edit it in place
- button.innerHTML =text;
- button.onclick = () => {functionReference(el, className)};
- }
- }
- // on page load: get hidden elements list from local storage,
- // or if there's nothing in localstorage, create new array
- var hostname = window.location.hostname;
- var hiddenList = JSON.parse(localStorage.getItem(hostname + 'hiddenList')) || [];
- // select all threads
- document.querySelectorAll(".structItem--thread.js-inlineModContainer").forEach(el =>{
- // get threads class key
- var className = el.className.match(/js-threadListItem-\d+/);
- if(className){
- className = className[0];
- }
- // then check if it should be hidden
- if (hiddenList.filter(e => e === className).length > 0){
- // if yes, hide it
- hidden(el, className);
- } else {
- // if no, then create hide button
- unhidden(el, className);
- };
- });
- var style = document.createElement('style');
- style.innerHTML = `
- .hide-container {
- float: right;
- }
- `;
- document.head.appendChild(style);