LOLZ_Fast_Delete_el9in

LOLZ Fast Delete

اعتبارا من 24-09-2023. شاهد أحدث إصدار.

// ==UserScript==
// @name         LOLZ_Fast_Delete_el9in
// @namespace    LOLZ_Fast_Delete_el9in
// @version      0.1
// @description  LOLZ Fast Delete
// @author       el9in
// @match        https://zelenka.guru/?tab=mythreads*
// @match        https://lolz.guru/?tab=mythreads*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=zelenka.guru
// @grant        none
// @license      el9in
// ==/UserScript==

(function() {
    'use strict';
    const inputElement = document.querySelector('input[type="hidden"][name="_xfToken"]');
    const xfTokenValue = inputElement.value;

    const checker = {};
    const times = 2;

    function check(threadId) {
      if(!checker[threadId]) {
        checker[threadId] = 1;
        return false;
      }

      checker[threadId] ++;

      if(checker[threadId] >= times) return true;
    }

    function init() {
      if(xfTokenValue) {
        const elements_threads = document.querySelectorAll('[id*="thread-"]');
        elements_threads.forEach(function(element) {
          const idValue = element.getAttribute('id');

          const parts = idValue.split('thread-');
          if (parts.length > 1) {
            const thread_id = parts[1];
            const Tooltip = element.querySelector('a.StarContent.threadControl.far.fa-star.Tooltip');
            if(Tooltip) {
              const copyElement = Tooltip.cloneNode(true);
              copyElement.classList.remove('fa-star');
              copyElement.classList.add('fa-trash');
              copyElement.removeAttribute('href');
              Tooltip.parentNode.insertBefore(copyElement, Tooltip);
              copyElement.addEventListener('click', function(event) {
                event.preventDefault();

                if(!check(thread_id)) {
                  XenForo.alert('Нажмите ещё раз для удаления темы.', "Предупреждение", 2000);
                  return;
                }

                var formData = new FormData();
                formData.append('reason', '');
                formData.append('hard_delete', '0');
                formData.append('_xfConfirm', '1');
                formData.append('_xfToken', xfTokenValue);
                formData.append('_xfRequestUri', `/threads/${thread_id}/`);
                formData.append('_xfNoRedirect', '1');
                formData.append('_xfToken', xfTokenValue);
                formData.append('_xfResponseType', 'json');

                fetch(`https://zelenka.guru/threads/${thread_id}/delete`, {
                  "body": formData,
                  "method": "POST",
                  "mode": "cors",
                  "credentials": "include"
                });

                element.remove();
              });
            }
          }
        });
      }
    }

    async function ones(element) {
      if(xfTokenValue) {
        try {
          const idValue = element.getAttribute('id');
          if(idValue) {
            const parts = idValue.split('thread-');
            if (parts.length > 1) {
              const thread_id = parts[1];

              const Tooltip = element.querySelector('a.StarContent.threadControl.far.fa-star.Tooltip');
              if(Tooltip) {
                const copyElement = Tooltip.cloneNode(true);
                copyElement.classList.remove('fa-star');
                copyElement.classList.add('fa-trash');
                copyElement.removeAttribute('href');
                Tooltip.parentNode.insertBefore(copyElement, Tooltip);
                copyElement.addEventListener('click', function(event) {
                  if(!check(thread_id)) {
                    XenForo.alert('Нажмите ещё раз для удаления темы.', "Предупреждение", 2000);
                    return;
                  }

                  event.preventDefault();

                  var formData = new FormData();
                  formData.append('reason', '');
                  formData.append('hard_delete', '0');
                  formData.append('_xfConfirm', '1');
                  formData.append('_xfToken', xfTokenValue);
                  formData.append('_xfRequestUri', `/threads/${thread_id}/`);
                  formData.append('_xfNoRedirect', '1');
                  formData.append('_xfToken', xfTokenValue);
                  formData.append('_xfResponseType', 'json');

                  fetch(`https://zelenka.guru/threads/${thread_id}/delete`, {
                    "body": formData,
                    "method": "POST",
                    "mode": "cors",
                    "credentials": "include"
                  });

                  element.remove();
                });
              }
            }
          }
        } catch(error) {};
      }
    }

    const observer = new MutationObserver((mutationsList, observer) => {
      for (const mutation of mutationsList) {
        if (mutation.type === 'childList') {
          mutation.addedNodes.forEach(addedNode => {
            if (addedNode.nodeType === Node.ELEMENT_NODE) {
              ones(addedNode);
            }
          });
        }
      }
    });

    const config = { childList: true, subtree: true };
    observer.observe(document.body, config);

    init();
})();