diff --git a/src/General/css/style.css b/src/General/css/style.css index 3ab40b799..8806af8a5 100755 --- a/src/General/css/style.css +++ b/src/General/css/style.css @@ -1332,9 +1332,9 @@ input#qr-filename { flex: none; margin: 0; margin-right: 3px; - font: 13px sans-serif; } #qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label, +.has-file #paste-area, .has-file #url-button, #file-n-submit:not(.custom-cooldown) #custom-cooldown-button { display: none; @@ -1342,9 +1342,15 @@ input#qr-filename { #qr-file-spoiler { margin: 0; } -#url-button, #custom-cooldown-button, #dump-button { +#paste-area, #url-button, #custom-cooldown-button, #dump-button { opacity: 0.6; } +#paste-area { + font-size: 0; +} +#paste-area:focus { + opacity: 1; +} #custom-cooldown-button.disabled { opacity: 0.27; } diff --git a/src/General/html/Features/QuickReply.html b/src/General/html/Features/QuickReply.html index 54cfa32f3..823a99d9b 100755 --- a/src/General/html/Features/QuickReply.html +++ b/src/General/html/Features/QuickReply.html @@ -31,6 +31,7 @@ + diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index 57e65e0a0..4997c4fd9 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -317,13 +317,32 @@ QR = QR.handleFiles files $.addClass QR.nodes.el, 'dump' - handleUrl: -> - url = prompt 'Enter a URL:' + pasteFF: -> + {pasteArea} = QR.nodes + return unless pasteArea.childNodes.length + images = $$ 'img', pasteArea + $.rmAll pasteArea + for img in images + {src} = img + if m = src.match /data:(image\/(\w+));base64,(.+)/ + bstr = atob m[3] + arr = new Uint8Array(bstr.length) + for i in [0...bstr.length] + arr[i] = bstr.charCodeAt(i) + blob = new Blob [arr], {type: m[1]} + blob.name = "image.#{m[2]}" + QR.handleFiles [blob] + else if /^https?:\/\//.test src + QR.handleUrl src + return + + handleUrl: (urlDefault) -> + url = prompt 'Enter a URL:', urlDefault return if url is null QR.nodes.fileButton.focus() CrossOrigin.file url, (blob) -> if blob - QR.handleFiles([blob]) + QR.handleFiles [blob] else QR.error "Can't load image." @@ -389,6 +408,7 @@ QR = setNode 'close', '.close' setNode 'form', 'form' setNode 'dumpButton', '#dump-button' + setNode 'pasteArea', '#paste-area' setNode 'urlButton', '#url-button' setNode 'name', '[data-name=name]' setNode 'email', '[data-name=email]' @@ -474,7 +494,7 @@ QR = $.on nodes.autohide, 'change', QR.toggleHide $.on nodes.close, 'click', QR.close $.on nodes.dumpButton, 'click', -> nodes.el.classList.toggle 'dump' - $.on nodes.urlButton, 'click', QR.handleUrl + $.on nodes.urlButton, 'click', -> QR.handleUrl '' $.on nodes.addPost, 'click', -> new QR.post true $.on nodes.form, 'submit', QR.submit $.on nodes.fileRM, 'click', -> QR.selected.rmFile() @@ -487,6 +507,10 @@ QR = # We don't receive blur events from captcha iframe. $.on d, 'click', QR.focus + unless chrome? + nodes.pasteArea.hidden = false + new MutationObserver(QR.pasteFF).observe nodes.pasteArea, {childList: true} + # save selected post's data items = ['thread', 'name', 'email', 'sub', 'com', 'filename'] i = 0