-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.user.js
74 lines (69 loc) · 2.18 KB
/
script.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// ==UserScript==
// @name PastePonyville
// @namespace ponyville-script
// @grant none
// @version 1.0
// @author Hu
// @description Allow pasting images to ponyville quickreply
// @include https://ponyville.us/*
// @updateURL https://github.com/JacobSvenningsen/ponyville-script/raw/main/script.user.js
// @downloadURL https://github.com/JacobSvenningsen/ponyville-script/raw/main/script.user.js
// ==/UserScript==
let qr = document.getElementById("quick-reply");
if (qr)
{
let commentField = document.getElementById("body");
let browseInputElement = qr.getElementsByTagName("input").file;
let browseRow = browseInputElement.parentElement.parentElement;
commentField.onpaste = async function (event)
{
// use event.originalEvent.clipboard for newer chrome versions
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
// find pasted image among pasted items
var imageAsBase64 = null;
var blob = null;
for (var i = 0; i < items.length; i++) {
if (items[i].type.indexOf("image") === 0) {
blob = items[i].getAsFile();
imageAsBase64 = await GetBase64FromBlob(blob);
break;
}
}
// load image if there is a pasted image
if (imageAsBase64 !== null) {
AppendImageElement(imageAsBase64, browseRow);
const dataTransfer = new DataTransfer();
dataTransfer.items.add(blob);
browseInputElement.files = dataTransfer.files;
}
}
}
function GetBase64FromBlob(blob)
{
return new Promise((resolve, _) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.readAsDataURL(blob);
});
}
function AppendImageElement(imageAsBase64, sipling)
{
let imageElement = document.getElementById("qr-image-preview-element");
if (imageElement)
{
imageElement.src = imageAsBase64;
}
else
{
let tr = document.createElement("tr");
let td = document.createElement("td");
td.colSpan = 2;
td.classList.add("image-preview");
let img = document.createElement("img");
img.src = imageAsBase64;
img.id = "qr-image-preview-element";
td.append(img);
tr.append(td);
sipling.after(tr);
}
}