Загрузка...

We add an additional block with topics from the "Offtopic" section to the main page.

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

  1. Yowori
    Yowori Topic starter Oct 10, 2024 Эльфографика грядёт ~ https://lolz.live/threads/7861550/ 15,574 Jun 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
     
  2. planetus
    planetus Oct 10, 2024 guest, от 300₽ делаю ПО — lolz.live/threads/7606404/ 323 Sep 3, 2022
    о, я есть в списке :interesting:
     
    1. View previous comments (9)
  3. Roninom
    Roninom Oct 10, 2024 Купите мне уник пж я поменяю ник на насосал на уник :roflanPlz: 577 Mar 15, 2024
    Спасибо, теперь не нужно смотреть другие темы кроме оффтопикв
     
  4. СенкоСан
    СенкоСан Oct 10, 2024 Лучшие, антиабуз домены - lolz.live/threads/111111
     
    1. Yowori Topic starter
    2. СенкоСан
    3. View the next comments (1)
  5. ЯБылНоКем
    ЯБылНоКем Oct 10, 2024 готовьте трон для короля:smile_beach:
    интересное конечно дизайнерское решение
     
  6. WTF
    WTF Oct 10, 2024 Статус 7074 Jun 6, 2021
    Измени на
    Code

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

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

    [IMG]
     
Loading...
Top