Greasy Fork is available in English.

fast report button main page 2024 v2.0 rtx ti pro max limited edition

Крутое расширение

// ==UserScript==
// @name         fast report button main page 2024 v2.0 rtx ti pro max limited edition
// @namespace    22222
// @version      0.3
// @description  Крутое расширение
// @author       llimonix x Jack
// @match        https://zelenka.guru/*
// @match        https://lolz.live/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=lolz.guru
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    const buttons = {
        "Флуд / Оффтоп / Спам / Бесполезная тема": { name: '1.1' },
        "Создание темы не в соответствующем разделе": { name: '2.12' },
        "Неправильное оформление темы": { name: '3.2' },
    };
    const _xfToken = XenForo._csrfToken;

    async function postData(url = '', formData) {
        return await fetch(
            url, { method: 'POST', body: formData }
        ).then(response => {
            if (response.status === 200) {
                return response.json();
            } else {
                return { "error": "[CRITICAL] Не удалось отправить запрос!" };
            }
        }).catch(error => {
            return { "error": "[CRITICAL] Ошибка соединения!" };
        });
    }

    XenForo.addButtonToThreadCounters = function(thread) {
        if (!$('.discussionListMainPage').length) return;

        let threadCounters = (thread[0] || thread)?.querySelector('.threadCounters') || thread.querySelector('.threadCounters');

        if (threadCounters.querySelector(".custom-button")) return;

        for (let key in buttons) {
            let name = buttons[key].name;
            let span = document.createElement('a');
            span.innerText = name;
            span.className = "custom-button counter";
            span.setAttribute('style', `
                font-weight: bold;
                padding: 3px 15px;
                background: #218e5d;
                border-radius: 20px;
                cursor: pointer;
                display: flex;
                align-items: center;
                transition: background 0.3s ease; /* Анимация перехода цвета */
            `);

            span.onmouseover = function() {
                span.style.background = '#1a724b';
            };

            span.onmouseout = function() {
                span.style.background = '#218e5d';
            };

            span.onclick = async function() {
                let likeLink = threadCounters.querySelector('.LikeLink');
                let commentLink = threadCounters.querySelector('.MainPageReply');
                let postId = likeLink ? likeLink.href.match(/posts\/(\d+)/)[1] : null;
                let threadId = commentLink ? commentLink.href.match(/threads\/(\d+)/)[1] : null;

                if (postId) {
                    let formData = new FormData();
                    formData.append("message", key);
                    formData.append("is_common_reason", 1);
                    formData.append("_xfToken", _xfToken);
                    formData.append("_xfNoRedirect", 1);
                    formData.append("_xfNoRedirect", 1);
                    formData.append("_xfResponseType", "json");
                    formData.append("_xfRequestUri", `/threads/${threadId}/`);
                    const response = await postData('posts/' + postId + '/report', formData);

                    if (response.error) {
                        const errorMessage = Array.isArray(response.error) ? response.error[0] : response.error;
                        XenForo.alert(errorMessage, '', 5000);
                    } else {
                        XenForo.alert('Жалоба отправлена', '', 5000);
                    }
                }
            };

            threadCounters.appendChild(span);
        }
    }

    XenForo.register('.discussionListItem--Wrapper', 'XenForo.addButtonToThreadCounters');

    $('.discussionListMainPage .discussionListItem').each(function() {
        XenForo.addButtonToThreadCounters(this);
    });
})();