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); })();