Загрузка...

Добавляем дополнительный блок с темами с раздела "Оффтоп" на главную страницу.

Тема в разделе Дополнения создана пользователем Yowori 10 окт 2024. 617 просмотров

  1. Yowori
    Yowori Автор темы 10 окт 2024 Эльфографика грядёт ~ https://lolz.live/threads/7861550/ 15 574 3 июн 2019
    Данное расширение добавляет дополнительный блок с темами с раздела "Оффтоп" на главную страницу.
    Лично для меня удобнее 2 блока, вместо того чтобы темы с оффтопика мешались с другими темами в общем списке.

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

    // ==UserScript==
    // @name Add "Offtopic" discussion list on main page.
    // @namespace [URL]http://tampermonkey.net/[/URL]
    // @version 1.1
    // @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';

    const nodeId = 8; // Раздел для отображения

    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;
    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="${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);

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

    // Функция для загрузки списка обсуждений
    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 {
    container.innerHTML = '<div class="error">Не удалось загрузить темы.</div>';
    }
    } else {
    container.innerHTML = '<div class="error">Ошибка загрузки.</div>';
    }
    }
    };
    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') || 835;

    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
     
    10 окт 2024 Изменено
  2. planetus
    planetus 10 окт 2024 гость, от 300₽ делаю ПО — lolz.live/threads/7606404/ 326 3 сен 2022
    о, я есть в списке :interesting:
     
    1. Посмотреть предыдущие комментарии (9)
    2. Yowori Автор темы
  3. Roninom
    Roninom 10 окт 2024 Купите мне уник пж я поменяю ник на насосал на уник :roflanPlz: 577 15 мар 2024
    Спасибо, теперь не нужно смотреть другие темы кроме оффтопикв
     
  4. СенкоСан
    СенкоСан 10 окт 2024 Лучшие, антиабуз домены - lolz.live/threads/111111
     
    1. Yowori Автор темы
    2. СенкоСан
    3. Yowori Автор темы
  5. ЯБылНоКем
    ЯБылНоКем 10 окт 2024 готовьте трон для короля:smile_beach:
    интересное конечно дизайнерское решение
     
  6. WTF
    WTF 10 окт 2024 Статус 7074 6 июн 2021
    Измени на
    Код

    // @match https://lolz.live/*
    // @match https://zelenka.guru/*
    // @match https://lolz.guru/*
    А то не воркает
     
    10 окт 2024 Изменено
    1. Yowori Автор темы
      WTF, оно и так работает, но добавил на всякий случай, спасибо!)
    2. WTF
      Yowori, до этого почему-то не по показывало. Годное дополнение
      10 окт 2024 Изменено
  7. c0d
    c0d 10 окт 2024 Смотрит тему Как увеличить член, Только что 208 4 янв 2019
    через нейронки допили, что бы его можно было скрывать не выключая расширение
    --- Сообщение объединено с предыдущим 10 окт 2024
    или же просто чекбокс сделай
     
    1. Yowori Автор темы
      c0d, о замучу
  8. uncpfurry
    uncpfurry 10 окт 2024 Стим аккаунты тут - lolz.live/threads/7680775
    ЙООООО ВОТ ЭТО ИМБА СПАСИБО
     
    1. Yowori Автор темы
  9. kusyaka
    kusyaka 10 окт 2024 гость визитор visitor v1s1t0r в4з4т0р [] v1s170r Bu3uTOP 13 731 25 апр 2022
    пушка брат спасибо
     
  10. Папаня
    Папаня 10 окт 2024 :roflanebalo: 17 022 27 дек 2020
    ВОт это реально имба, лайк за такое
     
  11. WhatACat
    WhatACat 10 окт 2024 https://lolz.live/account/upgrades покупайте уники, ау, автобай 17 504 16 дек 2023
    Для оффтоперов самое то, но у истинных оффтопик в закладках и стоит вместо главной страницы :smile_beach:
     
  12. Sakura
    Sakura 10 окт 2024 Купить домен анонимно - t.me/FastDomainBot
    Можно сделать так, чтобы с любым разделом это было возможно
     
    1. Yowori Автор темы
      Sakura, ну кстате как вариант, будет полезно так же для кураторов
    2. Bismuth
      Sakura, все умное до меня придумали
  13. Bismuth
    Bismuth 10 окт 2024 9681 22 дек 2019
    А можно как то чтобы не оффтопик был а какой то другой раздел?
     
    1. Yowori Автор темы
      Bismuth, 131 строчка
      loadDiscussionList(8, newDiscussionList.querySelector('#discussionListItems_8'), true);
      вместо 8, номер раздела своего
    2. Sakura
      Yowori, надо это в саму тему пихнуть
  14. Yowori
    Yowori Автор темы 10 окт 2024 Эльфографика грядёт ~ https://lolz.live/threads/7861550/ 15 574 3 июн 2019
    Немношко изменил скрипт.

    - Можно изменить раздел для отображения, указав его ID.
    [IMG][IMG]
    - Запрос GET теперь отправляется в зависимости от вашего основного домена (Из-за того что по умолчанию стояло zelenka,guru, у некоторых не прогружался список тем с раздела, спасибки Bismuth).

    [IMG]
     
    10 окт 2024 Изменено
Загрузка...
Top