Загрузка...

We add an additional block with topics from a specific section to the main page.

Thread in Extentions created by Yowori Oct 10, 2024. 744 views

  1. Yowori
    Yowori Topic starter Oct 10, 2024 Эльфографика грядёт ~ https://lolz.live/threads/7861550/ 15,574 Jun 3, 2019
    Данный скрипт добавляет дополнительный блок с темами с указанного раздела на главную страницу.
    Скрипт подойдет кураторам, а также людям которые например сидят в оффтопике)
    Доработка и глобализация моего прошлого скрипта - https://zelenka.guru/threads/7715978/.

    [IMG]
    https://greasyfork.org/ru/scripts/512147-add-additional-discussion-list-on-main-page
    или
    JS

    // ==UserScript==
    // @name Add additional discussion list on main page.
    // @namespace [URL]http://tampermonkey.net/[/URL]
    // @version 1.0
    // @description Добавляет дополнительный блок с темами из определенного раздела на главную страницу.
    // @author Yowori
    // @match [URL]https://lolz.live/*[/URL]
    // @match [URL]https://zelenka.guru/*[/URL]
    // @match [URL]https://lolz.guru/*[/URL]
    // @icon [IMG] https://i.imgur.com/xnJeB3f.png[/IMG]
    // @grant none
    // @run-at document-end
    // @license MIT
    // ==/UserScript==

    (function() {
    'use strict';

    let savedNodeId = localStorage.getItem('customDiscussionNodeId');
    const defaultNodeId = savedNodeId ? parseInt(savedNodeId) : 8;
    let nodeId = isNaN(defaultNodeId) ? 8 : defaultNodeId;

    const isHidden = localStorage.getItem('customDiscussionIsHidden') === 'true';

    const hostname = window.location.hostname;
    let baseURL = '';

    if (hostname === 'lolz.live') {
    baseURL = 'https://lolz.live';
    } else if (hostname === 'zelenka.guru') {
    baseURL = 'https://zelenka.guru';
    } else if (hostname === 'lolz.guru') {
    baseURL = 'https://lolz.guru';
    } else {
    console.error('Неизвестный домен:', hostname);
    return;
    }

    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;
    flex-wrap: nowrap;
    position: relative;
    }

    body.index .discussionList {
    max-width: 520px;
    flex: 0 0 400px;
    transition: max-width 0.3s ease; /* Добавлено плавное изменение */
    }

    .customDiscussionList {
    max-height: 1040px;
    max-width: 400px;
    flex: 0 0 400px;
    height: auto;
    overflow: hidden;
    position: relative;
    transition: max-width 0.3s ease, display 0.3s ease; /* Добавлено плавное изменение */
    }

    .customDiscussionList .loading,
    .customDiscussionList .error {
    text-align: center;
    font-size: 16px;
    color: #555;
    }

    .customDiscussionList .ForumViewMoreButton {
    display: none;
    }

    .customDiscussionList .discussionListItems {
    display: flex;
    flex-direction: column;
    gap: 10px;
    }

    .toggleButton {
    padding: 5px 10px;
    cursor: pointer;
    background-color: transparent;
    color: white;
    border: none;
    border-radius: 4px;
    font-size: 14px;
    margin-left: 10px;
    margin-top: 10px;
    }

    .showButton {
    display: none;
    cursor: pointer;
    background-color: transparent;
    color: white;
    border: none;
    border-radius: 4px;
    font-size: 14px;
    padding: 5px 10px;
    }

    @media (max-width: 900px) {
    .customDiscussionContainer {
    flex-direction: column;
    align-items: center;
    }

    body.index .discussionList,
    .customDiscussionList {
    flex: 0 0 90%;
    max-width: 90%;
    }
    }
    `);

    function createHideButtons(discussionList) {
    const hideButton = document.createElement('button');
    hideButton.textContent = 'Скрыть';
    hideButton.className = 'toggleButton hideButton';
    hideButton.style.float = 'right';
    hideButton.style.marginTop = '10px';
    hideButton.addEventListener('click', () => {
    hideDiscussionList();
    });

    const nodeIdButton = document.createElement('button');
    nodeIdButton.textContent = 'Раздел';
    nodeIdButton.className = 'toggleButton nodeIdButton';
    nodeIdButton.style.float = 'right';
    nodeIdButton.style.marginTop = '10px';
    nodeIdButton.style.marginRight = '10px';
    nodeIdButton.addEventListener('click', () => {
    const newNodeId = prompt('Введите ID раздела:', nodeId);
    if (newNodeId !== null) {
    const parsedNodeId = parseInt(newNodeId);
    if (!isNaN(parsedNodeId)) {
    nodeId = parsedNodeId;
    localStorage.setItem('customDiscussionNodeId', nodeId);
    const container = discussionList.querySelector('.discussionListItems');
    loadDiscussionList(nodeId, container, true);
    } else {
    alert('Некорректный ID.');
    }
    }
    });

    const aboveThreadList = discussionList.querySelector('.aboveThreadList');
    if (aboveThreadList) {
    aboveThreadList.style.position = 'relative';
    aboveThreadList.appendChild(nodeIdButton);
    aboveThreadList.appendChild(hideButton);
    }
    }

    function createShowButton() {
    const showButton = document.createElement('button');
    showButton.textContent = 'Показать';
    showButton.className = 'showButton';
    showButton.style.position = 'absolute';
    showButton.style.top = '10px';
    showButton.style.right = '10px';
    showButton.addEventListener('click', () => {
    showDiscussionList();
    });

    const mainDiscussionList = document.querySelector('body.index .discussionList');
    if (mainDiscussionList) {
    mainDiscussionList.style.position = 'relative';
    mainDiscussionList.appendChild(showButton);
    }
    }

    function hideDiscussionList() {
    const customList = document.querySelector('.customDiscussionList');
    if (customList) {
    customList.style.display = 'none';
    localStorage.setItem('customDiscussionIsHidden', 'true');
    }

    const mainDiscussionList = document.querySelector('body.index .discussionList');
    if (mainDiscussionList) {
    mainDiscussionList.style.maxWidth = 'none';
    }

    const showButton = document.querySelector('.showButton');
    const hideButton = document.querySelector('.hideButton');
    if (showButton) {
    showButton.style.display = 'block';
    }
    if (hideButton) {
    hideButton.style.display = 'none';
    }
    }

    function showDiscussionList() {
    const customList = document.querySelector('.customDiscussionList');
    if (customList) {
    customList.style.display = 'block';
    localStorage.setItem('customDiscussionIsHidden', 'false');
    }

    const mainDiscussionList = document.querySelector('body.index .discussionList');
    if (mainDiscussionList) {
    mainDiscussionList.style.maxWidth = '520px';
    }

    const showButton = document.querySelector('.showButton');
    const hideButton = document.querySelector('.hideButton');
    if (showButton) {
    showButton.style.display = 'none';
    }
    if (hideButton) {
    hideButton.style.display = 'block';
    }
    }

    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.nextSibling);
    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="${baseURL}/forums/${nodeId}/" method="post" class="DiscussionListOptions">
    <input type="hidden" name="node_id" value="${nodeId}">

    <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_${nodeId}">
    <div class="loading">Загрузка...</div>
    </div>
    `;

    container.appendChild(newDiscussionList);
    loadDiscussionList(nodeId, newDiscussionList.querySelector(`#discussionListItems_${nodeId}`), true);
    addFilterHandlers(newDiscussionList);
    createHideButtons(newDiscussionList);

    createShowButton();

    const updateButton = document.querySelector('.UpdateFeedButton');
    if (updateButton) {
    updateButton.addEventListener('click', () => {
    const mainDiscussionListItems = document.querySelector('body.index .discussionList .discussionListItems');
    loadDiscussionList(1, mainDiscussionListItems, false);
    loadDiscussionList(nodeId, newDiscussionList.querySelector(`#discussionListItems_${nodeId}`), true);
    });
    }

    if (isHidden) {
    hideDiscussionList();
    } else {
    const mainDiscussionList = document.querySelector('body.index .discussionList');
    if (mainDiscussionList) {
    mainDiscussionList.style.maxWidth = '520px';
    }
    }
    }

    function loadDiscussionList(nodeId, container, limit = false) {
    let method = 'GET';
    let url = `${baseURL}/forums/${nodeId}/`;
    let params = null;

    if (nodeId === 835) {
    method = 'POST';
    url = `${baseURL}/forums/${nodeId}/`;
    params = new URLSearchParams();
    params.append('node_id', `${nodeId}`);
    params.append('title', '');
    params.append('_xfToken', '2312422,1728548767,49aac0543425624fb3896cd9087e7579a503d4c1');
    }

    const xhr = new XMLHttpRequest();
    xhr.open(method, url, true);
    if (method === 'POST') {
    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;
    }
    }
    };
    if (method === 'POST' && params) {
    xhr.send(params.toString());
    } else {
    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') || nodeId;

    loadFilteredDiscussionList(nodeId, params, discussionList.querySelector('.discussionListItems'), true);
    });
    }

    function loadFilteredDiscussionList(nodeId, params, container, limit = false) {
    const xhr = new XMLHttpRequest();
    xhr.open('POST', `${baseURL}/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 {
    container.innerHTML = '<div class="error">Не удалось загрузить темы.</div>';
    }
    } else {
    container.innerHTML = '<div class="error">Ошибка загрузки.</div>';
    }
    }
    };
    xhr.send(params.toString());
    }

    function init() {
    createNewDiscussionList();
    }

    window.addEventListener('load', function() {
    init();
    });

    })();
    P.S Я не профессиональный кодер, так что не бейте если считаете это говнокодом ;3
     
    1. View previous comments (19)
    2. Yowori Topic starter
      vvv, шизики какие-то ну честно)
    3. vvv
      Yowori, ну бля бывает для просмотра,крутые айди часто прочекивают
    4. View the next comments (2)
  2. WhatACat
    WhatACat Oct 10, 2024 https://lolz.live/account/upgrades покупайте уники, ау, автобай 17,504 Dec 16, 2023
    Для людей с СДВГ самое то, рекомендую :smile_beach:
     
    1. Yowori Topic starter
  3. Bismuth
    Bismuth Oct 10, 2024 9681 Dec 22, 2019
    Топовый скрипт, юзал ещё на бета тесте
    Ждём когда в чексбокс сделают
     
    1. Yowori Topic starter
      Bismuth, что за чекбокс?
    2. Yowori Topic starter
      uncpfurry, есть в скрипте это
      [IMG]
      [IMG]
  4. Toquio
    Toquio Oct 10, 2024 If you can quote the rules, then you can obey them
    [IMG]

    Может я чего то не понимаю? Зачем карусель придумывать
     
    1. Yowori Topic starter
      Toquio, тяжелый люкс
  5. God_likeGL
    God_likeGL Layer 1 Oct 10, 2024 Сyицид — это не выход, это наш святой обряд. :duck_knife2: 31,078 Oct 30, 2018
     
  6. sadness
    лишняя залупня на экране.
    минимализм наше все :2011_like:
     
    1. View previous comments (1)
    2. Yowori Topic starter
      sadness, не устанавливай расширение, в чем проблема?
    3. sadness
      Yowori, просто мнение свое высказал.
      для этого вроде и существуют сообщения под темой.
    4. Yowori Topic starter
  7. Весть
    Весть Oct 10, 2024 Моментальная покупка TRX - https://lolz.live/threads/8610296/ 9551 Aug 8, 2019
    1. Yowori Topic starter
      Весть, не удобно каждый раз заходит в другой раздел и смотреть темы
  8. Muha_Nelli
    заебись, теперь у меня будет отдельный раздел с любимой порнухой из слив фото
     
  9. c0d
    c0d Oct 10, 2024 Смотрит тему Как увеличить член, Только что 208 Jan 4, 2019
    а кто советовал сделать чекбокс так и не указал)
     
    1. Yowori Topic starter
      c0d, ну я сделал не чекбоксом и это было в прошлой теме
    2. c0d
      Yowori, а как ты оформил?
    3. Yowori Topic starter
  10. God_likeGL
    God_likeGL Layer 1 Oct 11, 2024 Сyицид — это не выход, это наш святой обряд. :duck_knife2: 31,078 Oct 30, 2018
     
    1. Yowori Topic starter
      God_likeGL, для старого стиля скрипт разрабатывался
    2. God_likeGL Layer 1
    3. WTF
      God_likeGL, новый стиль [IMG], а не дополнение :ok_lol:
  11. БИЛЛИНОГАМИ
    БИЛЛИНОГАМИ Oct 11, 2024 Банки|Турция|Верификации|Биржи - lzt.lol/TUR :zerotwo:
    Ого, неплохой скрипт, подойдёт многим юзерам форума.
     
    1. God_likeGL Layer 1
Loading...
Top