[ARCHIWUM]ObrazekZeSchowka 2022

Wklej obrazek ze schowka, w pole tekstowe wpisu lub komentarza - skrypt sam go doda, jako załączony obrazek.

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==UserScript==
// @name        [ARCHIWUM]ObrazekZeSchowka 2022
// @description	Wklej obrazek ze schowka, w pole tekstowe wpisu lub komentarza - skrypt sam go doda, jako załączony obrazek.
// @version     2.1.0
// @author      look997
// @include     https://wykop.pl/*
// @homepageURL https://wykop.pl/ludzie/addons/look997/
// @namespace   https://www.wykop.pl/ludzie/addons/look997/
// @grant       none
// @require
// @run-at      document-end
// @resource    metadata https://greasyfork.org/scripts/445949-obrazekzeschowka-2022/code/ObrazekZeSchowka%202022.user.js
// @icon        https://raw.githubusercontent.com/look997/host/main/ObrazekZeSchowka.svg
// @icon64      https://raw.githubusercontent.com/look997/host/main/ObrazekZeSchowka.svg
// ==/UserScript==

(function() {
'use strict';


// Nasłuchuj zdarzenia wklejenia
window.addEventListener("paste", async function (event) {
  const text = await getClipboardText();
  if (text) {
    console.log("W schowku jest tekst jo");
    return;
  }

  const image = await getClipboardImage();
  if (image) {
    console.log("Jest obrazek w schowku");
    KliknijAparat();
  }
});

function KliknijAparat() {
  const textarea = document.querySelector('textarea:focus');
  const aparatElements = document.querySelectorAll('[title="Zdjęcie lub film"]');
  
  let nearestElement = null;
  let closestDistance = Number.MAX_VALUE;

  aparatElements.forEach((aparatElement) => {
    aparatElement.addEventListener('click', () => {
      nearestElement = aparatElement;
      console.log('Kliknięto w element:', nearestElement);
    });

    const distance = calculateDistance(textarea, aparatElement);
    if (distance < closestDistance) {
      nearestElement = aparatElement;
      closestDistance = distance;
    }
  });

  if (nearestElement) {
    console.log('Znaleziono aparat jo, Znaleziono najbliższy element:', nearestElement);
    nearestElement.click();
    SprawdzCzyOknoWyskoczylo();
  } else {
    console.log("Nie znaleziono aparatu jo");
  }
}

function calculateDistance(element1, element2) {
  const rect1 = element1.getBoundingClientRect();
  const rect2 = element2.getBoundingClientRect();
  const dx = rect1.left - rect2.left;
  const dy = rect1.top - rect2.top;
  return Math.sqrt(dx * dx + dy * dy);
}

function SprawdzCzyOknoWyskoczylo() {
  const modalElement = document.querySelector("section.modal[data-v-9de074aa]");
  if (modalElement) {
    console.log("Okno Wyszkoczyło JO i istnieje");
    var targetSelector = 'button[data-v-50f00d5d].target';
    triggerDropEvent(targetSelector);
    zamknijOkno();
  }

  const startTime = Date.now();
  const interval = setInterval(function () {
    const currentModalElement = document.querySelector("section.modal[data-v-9de074aa]");
    if (currentModalElement) {
      console.log("Okno Wyskoczyło JO dzieki nasłuchiwaniu");
      var targetSelector = 'button[data-v-50f00d5d].target';
      triggerDropEvent(targetSelector);
      zamknijOkno();
      clearInterval(interval);
    } else if (Date.now() - startTime >= 3000) {
      console.log("Okno Nie Wyskoczyło JO Info od nasłuchiwania");
      clearInterval(interval);
      return;
    }
  }, 100);
}

function getClipboardText() {
  return navigator.clipboard.readText();
}

function getClipboardImage() {
  return new Promise(function (resolve) {
    navigator.clipboard
      .read()
      .then(function (clipboardItems) {
        for (const clipboardItem of clipboardItems) {
          for (const type of clipboardItem.types) {
            if (type.startsWith("image/")) {
              resolve(true); // Zwraca true, jeśli w schowku jest obrazek
              return;
            }
          }
        }
        resolve(false); // Zwraca false, jeśli w schowku nie ma obrazka
      })
      .catch(function (error) {
        console.error("Błąd podczas odczytu schowka:", error);
        resolve(false); // Zwraca false w przypadku błędu odczytu schowka
      });
  });
}


function triggerDropEvent(targetSelector) {
  const targetElement = document.querySelector(targetSelector);
  if (!targetElement) {
    console.log("Nie znaleziono elementu docelowego");
    return;
  }

  navigator.clipboard.read().then((items) => {
    for (const item of items) {
      for (const type of item.types) {
        if (type === 'image/png') {
          item.getType(type).then((blob) => {
            const file = new File([blob], 'image.png', { type: 'image/png' });
            const dataTransfer = new DataTransfer();
            dataTransfer.items.add(file);
            const dropEvent = new DragEvent('drop', {
              dataTransfer: dataTransfer,
              bubbles: true,
              cancelable: true,
            });
            targetElement.dispatchEvent(dropEvent);
          }).catch((error) => {
            console.log("Błąd pobierania obrazka ze schowka", error);
          });
          return;
        }
      }
    }
    console.log("Nie znaleziono obrazka w schowku");
  }).catch((error) => {
    console.log("Błąd odczytu schowka", error);
  });
}

function zamknijOkno() {
  const closeButton = document.querySelector('div.v--modal-box.v--modal section.modal.entryPhoto header button');
  if (closeButton) {
    closeButton.click();
    console.log("Okno zostało zamknięte.");
  } else {
    console.log("Nie znaleziono przycisku zamknięcia.");
  }
}

})();