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