Greasy Fork is available in English.

Paste functionality

Paste images on a thread directly from clipboard

  1. // ==UserScript==
  2. // @name Paste functionality
  3. // @namespace http://tripchan.org
  4. // @version 0.1
  5. // @description Paste images on a thread directly from clipboard
  6. // @author yuifag
  7. // @match https://tripchan.org/att/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. const dataURItoBlob = (dataURI) => {
  12. const binary = atob(dataURI.split(',')[1]);
  13. const array = [];
  14. for(let i = 0; i < binary.length; i++) {
  15. array.push(binary.charCodeAt(i));
  16. }
  17. return new Blob([new Uint8Array(array)], {type: "image/png"});
  18. }
  19.  
  20. const sendImage = (oRequestData) => {
  21. const uploadFormData = new FormData();
  22. uploadFormData.append("op", oRequestData.op);
  23. uploadFormData.append("image", oRequestData.blob, "clipboard.png");
  24. const url = `https://tripchan.org/upload/?id=${oRequestData.id}`;
  25. const xhr = new XMLHttpRequest;
  26. xhr.open("POST", url);
  27. xhr.send(uploadFormData);
  28. }
  29.  
  30. document.addEventListener("paste", (event) => {
  31. if (!document.querySelector(".mine")){
  32. document.querySelector("aside.act > a").click();
  33. }
  34. const file = (event.clipboardData.items[0].getAsFile() || event.clipboardData.files[0]);
  35. if (file){
  36. const reader = new FileReader();
  37. reader.onload = (event) => {
  38. const oRequest = {};
  39. oRequest.blob = dataURItoBlob(event.target.result);
  40. oRequest.op = window.location.pathname.replace(/[^0-9.]/g, "");
  41. oRequest.id = window.CONN_ID;
  42. sendImage(oRequest);
  43. };
  44. reader.readAsDataURL(file);
  45. }
  46. });