[ARCHIWUM]ObrazekZeSchowka 2022

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

  1. // ==UserScript==
  2. // @name [ARCHIWUM]ObrazekZeSchowka 2022
  3. // @description Wklej obrazek ze schowka, w pole tekstowe wpisu lub komentarza - skrypt sam go doda, jako załączony obrazek.
  4. // @version 2.1.0
  5. // @author look997
  6. // @include https://wykop.pl/*
  7. // @homepageURL https://wykop.pl/ludzie/addons/look997/
  8. // @namespace https://www.wykop.pl/ludzie/addons/look997/
  9. // @grant none
  10. // @require
  11. // @run-at document-end
  12. // @resource metadata https://greasyfork.org/scripts/445949-obrazekzeschowka-2022/code/ObrazekZeSchowka%202022.user.js
  13. // @icon https://raw.githubusercontent.com/look997/host/main/ObrazekZeSchowka.svg
  14. // @icon64 https://raw.githubusercontent.com/look997/host/main/ObrazekZeSchowka.svg
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19.  
  20.  
  21. // Nasłuchuj zdarzenia wklejenia
  22. window.addEventListener("paste", async function (event) {
  23. const text = await getClipboardText();
  24. if (text) {
  25. console.log("W schowku jest tekst jo");
  26. return;
  27. }
  28.  
  29. const image = await getClipboardImage();
  30. if (image) {
  31. console.log("Jest obrazek w schowku");
  32. KliknijAparat();
  33. }
  34. });
  35.  
  36. function KliknijAparat() {
  37. const textarea = document.querySelector('textarea:focus');
  38. const aparatElements = document.querySelectorAll('[title="Zdjęcie lub film"]');
  39. let nearestElement = null;
  40. let closestDistance = Number.MAX_VALUE;
  41.  
  42. aparatElements.forEach((aparatElement) => {
  43. aparatElement.addEventListener('click', () => {
  44. nearestElement = aparatElement;
  45. console.log('Kliknięto w element:', nearestElement);
  46. });
  47.  
  48. const distance = calculateDistance(textarea, aparatElement);
  49. if (distance < closestDistance) {
  50. nearestElement = aparatElement;
  51. closestDistance = distance;
  52. }
  53. });
  54.  
  55. if (nearestElement) {
  56. console.log('Znaleziono aparat jo, Znaleziono najbliższy element:', nearestElement);
  57. nearestElement.click();
  58. SprawdzCzyOknoWyskoczylo();
  59. } else {
  60. console.log("Nie znaleziono aparatu jo");
  61. }
  62. }
  63.  
  64. function calculateDistance(element1, element2) {
  65. const rect1 = element1.getBoundingClientRect();
  66. const rect2 = element2.getBoundingClientRect();
  67. const dx = rect1.left - rect2.left;
  68. const dy = rect1.top - rect2.top;
  69. return Math.sqrt(dx * dx + dy * dy);
  70. }
  71.  
  72. function SprawdzCzyOknoWyskoczylo() {
  73. const modalElement = document.querySelector("section.modal[data-v-9de074aa]");
  74. if (modalElement) {
  75. console.log("Okno Wyszkoczyło JO i istnieje");
  76. var targetSelector = 'button[data-v-50f00d5d].target';
  77. triggerDropEvent(targetSelector);
  78. zamknijOkno();
  79. }
  80.  
  81. const startTime = Date.now();
  82. const interval = setInterval(function () {
  83. const currentModalElement = document.querySelector("section.modal[data-v-9de074aa]");
  84. if (currentModalElement) {
  85. console.log("Okno Wyskoczyło JO dzieki nasłuchiwaniu");
  86. var targetSelector = 'button[data-v-50f00d5d].target';
  87. triggerDropEvent(targetSelector);
  88. zamknijOkno();
  89. clearInterval(interval);
  90. } else if (Date.now() - startTime >= 3000) {
  91. console.log("Okno Nie Wyskoczyło JO Info od nasłuchiwania");
  92. clearInterval(interval);
  93. return;
  94. }
  95. }, 100);
  96. }
  97.  
  98. function getClipboardText() {
  99. return navigator.clipboard.readText();
  100. }
  101.  
  102. function getClipboardImage() {
  103. return new Promise(function (resolve) {
  104. navigator.clipboard
  105. .read()
  106. .then(function (clipboardItems) {
  107. for (const clipboardItem of clipboardItems) {
  108. for (const type of clipboardItem.types) {
  109. if (type.startsWith("image/")) {
  110. resolve(true); // Zwraca true, jeśli w schowku jest obrazek
  111. return;
  112. }
  113. }
  114. }
  115. resolve(false); // Zwraca false, jeśli w schowku nie ma obrazka
  116. })
  117. .catch(function (error) {
  118. console.error("Błąd podczas odczytu schowka:", error);
  119. resolve(false); // Zwraca false w przypadku błędu odczytu schowka
  120. });
  121. });
  122. }
  123.  
  124.  
  125. function triggerDropEvent(targetSelector) {
  126. const targetElement = document.querySelector(targetSelector);
  127. if (!targetElement) {
  128. console.log("Nie znaleziono elementu docelowego");
  129. return;
  130. }
  131.  
  132. navigator.clipboard.read().then((items) => {
  133. for (const item of items) {
  134. for (const type of item.types) {
  135. if (type === 'image/png') {
  136. item.getType(type).then((blob) => {
  137. const file = new File([blob], 'image.png', { type: 'image/png' });
  138. const dataTransfer = new DataTransfer();
  139. dataTransfer.items.add(file);
  140. const dropEvent = new DragEvent('drop', {
  141. dataTransfer: dataTransfer,
  142. bubbles: true,
  143. cancelable: true,
  144. });
  145. targetElement.dispatchEvent(dropEvent);
  146. }).catch((error) => {
  147. console.log("Błąd pobierania obrazka ze schowka", error);
  148. });
  149. return;
  150. }
  151. }
  152. }
  153. console.log("Nie znaleziono obrazka w schowku");
  154. }).catch((error) => {
  155. console.log("Błąd odczytu schowka", error);
  156. });
  157. }
  158.  
  159. function zamknijOkno() {
  160. const closeButton = document.querySelector('div.v--modal-box.v--modal section.modal.entryPhoto header button');
  161. if (closeButton) {
  162. closeButton.click();
  163. console.log("Okno zostało zamknięte.");
  164. } else {
  165. console.log("Nie znaleziono przycisku zamknięcia.");
  166. }
  167. }
  168.  
  169. })();