您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет дополнительный блок с темами с раздела "Оффтоп".
当前为
// ==UserScript== // @name Add "Offtopic" discussion list on main page. // @namespace http://tampermonkey.net/ // @version 1.0 // @description Добавляет дополнительный блок с темами с раздела "Оффтоп". // @author Yowori // @match https://lolz.live/* // @match https://zelenka.guru/* // @match https://lolz.guru/* // @icon https://i.imgur.com/xnJeB3f.png // @grant none // @run-at document-end // @license MIT // ==/UserScript== (function() { 'use strict'; function addGlobalStyle(css) { const head = document.getElementsByTagName('head')[0]; if (!head) { return; } const style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } addGlobalStyle(` .customDiscussionContainer { display: flex; gap: 20px; box-sizing: border-box; max-width: 1200px; margin: 0 auto; flex-wrap: nowrap; } body.index .discussionList { max-width: 520px; flex: 0 0 400px; } .customDiscussionList { max-height: 1040px; max-width: 400px; flex: 0 0 400px; height: auto; overflow: hidden; } .customDiscussionList .loading, .customDiscussionList .error { text-align: center; padding: 20px; font-size: 16px; color: #555; } .customDiscussionList .ForumViewMoreButton { display: none; } .customDiscussionList .discussionListItems { display: flex; flex-direction: column; gap: 10px; } @media (max-width: 900px) { .customDiscussionContainer { flex-direction: column; align-items: center; } body.index .discussionList, .customDiscussionList { flex: 0 0 90%; max-width: 90%; } } `); function createNewDiscussionList() { let container = document.querySelector('.customDiscussionContainer'); if (!container) { container = document.createElement('div'); container.className = 'customDiscussionContainer'; const existingDiscussionList = document.querySelector('body.index .discussionList'); if (existingDiscussionList) { existingDiscussionList.parentNode.insertBefore(container, existingDiscussionList); container.appendChild(existingDiscussionList); } else { const bodyIndex = document.querySelector('body.index'); if (bodyIndex) { bodyIndex.appendChild(container); } } } const newDiscussionList = document.createElement('div'); newDiscussionList.className = 'discussionList customDiscussionList'; newDiscussionList.innerHTML = ` <div class="aboveThreadList"> <form action="https://zelenka.guru/forums/8/" method="post" class="DiscussionListOptions"> <input type="hidden" name="node_id" value="8"> <div class="_universalSearchForm universalSearchForm"> <input name="title" value="" class="SearchInputQuery _universalSearchInput universalSearchInput textCtrl" placeholder="Поиск тем" autocomplete="off"> <i class="inputRelativeIcon fas fa-times" style="display: none;"></i> </div> <input type="hidden" name="_xfToken" value="2312422,1728548767,49aac0543425624fb3896cd9087e7579a503d4c1"> </form> </div> <div class="discussionListItems" id="discussionListItems_8"> <div class="loading">Загрузка...</div> </div> `; container.appendChild(newDiscussionList); loadDiscussionList(8, newDiscussionList.querySelector('#discussionListItems_8'), true); addFilterHandlers(newDiscussionList); const updateButton = document.querySelector('.UpdateFeedButton'); if (updateButton) { updateButton.addEventListener('click', () => { const mainDiscussionList = document.querySelector('body.index .discussionList .discussionListItems'); loadDiscussionList(1, mainDiscussionList, false); // Замените 1 на нужный nodeId для основного списка loadDiscussionList(8, newDiscussionList.querySelector('#discussionListItems_8'), true); }); } } function loadDiscussionList(nodeId, container, limit = false) { const xhr = new XMLHttpRequest(); xhr.open('GET', `https://zelenka.guru/forums/${nodeId}/`, true); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { const parser = new DOMParser(); const doc = parser.parseFromString(xhr.responseText, 'text/html'); const discussionItems = doc.querySelector('.discussionListItems'); if (discussionItems) { let itemsHTML = discussionItems.innerHTML; if (limit) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = itemsHTML; const topics = tempDiv.querySelectorAll('.discussionListItem'); let limitedHTML = ''; for (let i = 0; i < Math.min(10, topics.length); i++) { limitedHTML += topics[i].outerHTML; } itemsHTML = limitedHTML; } container.innerHTML = itemsHTML; } else { return; } } else { return; } } }; xhr.send(); } function addFilterHandlers(discussionList) { const form = discussionList.querySelector('.DiscussionListOptions'); if (!form) return; form.addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(form); const params = new URLSearchParams(); for (const pair of formData.entries()) { params.append(pair[0], pair[1]); } const nodeId = formData.get('node_id') || 8; loadFilteredDiscussionList(nodeId, params, discussionList.querySelector('.discussionListItems'), true); }); } function loadFilteredDiscussionList(nodeId, params, container, limit = false) { const xhr = new XMLHttpRequest(); xhr.open('POST', `https://zelenka.guru/forums/${nodeId}/`, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { const parser = new DOMParser(); const doc = parser.parseFromString(xhr.responseText, 'text/html'); const discussionItems = doc.querySelector('.discussionListItems'); if (discussionItems) { let itemsHTML = discussionItems.innerHTML; if (limit) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = itemsHTML; const topics = tempDiv.querySelectorAll('.discussionListItem'); let limitedHTML = ''; for (let i = 0; i < Math.min(10, topics.length); i++) { limitedHTML += topics[i].outerHTML; } itemsHTML = limitedHTML; } container.innerHTML = itemsHTML; } else { return; } } else { return; } } }; xhr.send(params.toString()); } function init() { createNewDiscussionList(); } window.addEventListener('load', function() { init(); }); })();