NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Joyreactor Add Image From Clipboard
// @namespace http://tampermonkey.net/
// @version 0.2.1
// @description Позволяет вставить из буфера обмена/перетащить из проводника картинку в поле ввода комментария
// @author Gertykhon
// @include *reactor.cc*
// @include *joyreactor.cc*
// @include *jr-proxy.com*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
/*
* Leoric(@joyreactor.cc)
*
* v0.2
* добавлено перетаскивание файлов изображений из проводника
*/
function start() {
for (var elem of document.getElementsByClassName('toggleComments')) {
elem.onclick = function (btnComClick) {
setTimeout(function () {
var ufoot = btnComClick.target.parentNode.parentNode.parentNode;
addImgPaste(ufoot);
addRespImgPaste(ufoot);
}, 1000);
};
}
addRespImgPaste(document);
addImgPaste(document);
}
function addRespImgPaste(parent) {
for (var elem of parent.querySelectorAll('a[class="response"]')) {
elem.onclick = function (btnRespClick) {
setTimeout(function () {
var respDiv = btnRespClick.target.parentNode.parentNode.nextElementSibling;
if (respDiv.getElementsByTagName('img')[0]) {
respDiv.getElementsByTagName('img')[0].remove();
respDiv.querySelector('form[class="post_comment_form"]').querySelector('span').innerHTML +=
'<input type="file" accept="image/*" name="comment_picture" class="comment_picture" value="" style="display:none">';
}
addImgPaste(respDiv);
}, 1000);
};
}
}
//добавляем полю ввода комента обработчики вставки и перетаскивания
function addImgPaste(parent) {
try {
var form = parent.querySelector('form[class="post_comment_form"]');
if (form === null) return;
var txt = form.querySelector('textarea[class="comment_text"]');
txt.ondrop = function (event) {
dropAndPasteHandler(event);
};
txt.ondragover = function (event) {
event.preventDefault();
};
txt.onpaste = function (event) {
dropAndPasteHandler(event);
};
}
catch (err) {
console.log(err);
}
}
function dropAndPasteHandler(event) {
var imageBlob, items;
//достаем картинку
try {
if (event.type == 'drop') {
event.preventDefault();
items = event.dataTransfer.items;
}
else if (event.type == 'paste') {
items = event.clipboardData.items;
}
}
catch (err) {
console.log(err);
}
if (items) {
for (var i = 0; i < items.length; i++) {
if (items[i].type.indexOf("image") != -1) imageBlob = items[i].getAsFile();
}
}
else {
return;
}
if (!imageBlob) return;
//добавляем предпросмотр
var form = event.target.parentNode;
var img = form.getElementsByTagName('img')[0];
if (img === undefined) {
img = document.createElement('img');
img.title = 'Preview';
img.width = 100;
form.appendChild(img);
}
var URLObj = window.URL || window.webkitURL;
img.src = URLObj.createObjectURL(imageBlob);
//заменяем стандартную отправку формы своей
try {
form.getElementsByClassName('comment_picture')[0].remove();
}
catch (err) {}
form.onsubmit = function (submit) {
submit.stopPropagation();
submit.preventDefault();
uploadForm(submit.target, imageBlob);
return false;
};
}
//отправка комента
function uploadForm(form, blob) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/post_comment/create', true);
var formData = new FormData(form);
formData.append('comment_picture', blob, 'image.jpg');
xhr.onload = function (e) {
//кусок скрипта с сайта, обновляющий коменты
var f = $(form).closest(".ufoot").find(
".post_comment_list"),
g = $(form).closest(".postContainer").attr("id").substr(13);
$.ajax({
url: "/post/comments/" + g,
cache: !1,
success: function (a) {
f.html(a).show("fast").trigger("DOMUpdate");
window["commentTime" + g] = Math.round((new Date).getTime() / 1E3);
}
})
};
xhr.send(formData);
}
start();
document.body.addEventListener('DOMSubtreeModified', function () {
start();
}, false);
})();