diff --git a/CHANGELOG.md b/CHANGELOG.md index 09ad139a3..550c7340a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's wor The links to individual versions below are to copies of the script with the update URL removed. If you want automatic updates, install the script from the links on the [main page](https://github.com/ccd0/4chan-x). +### v1.10.6 + +**v1.10.6.0** *(2015-03-22)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.6.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.6.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.10.5.3. +- Add workaround for pasting images to the Quick Reply in Firefox. + ### v1.10.5 **v1.10.5.3** *(2015-03-21)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.5.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.5.3/builds/4chan-X-noupdate.crx "Chromium version")] diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx index 61eb3f918..c8607a3bd 100644 Binary files a/builds/4chan-X-beta.crx and b/builds/4chan-X-beta.crx differ diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js index b4c518c21..8e7e1ef13 100644 --- a/builds/4chan-X-beta.meta.js +++ b/builds/4chan-X-beta.meta.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan X beta -// @version 1.10.5.3 +// @version 1.10.6.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js index 5a4952f20..387c56d05 100644 --- a/builds/4chan-X-beta.user.js +++ b/builds/4chan-X-beta.user.js @@ -1,7 +1,7 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X beta -// @version 1.10.5.3 +// @version 1.10.6.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -395,7 +395,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.5.3', + VERSION: '1.10.6.0', NAMESPACE: '4chan X.', NAME: '4chan X', FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions', @@ -7199,9 +7199,36 @@ QR.handleFiles(files); return $.addClass(QR.nodes.el, 'dump'); }, - handleUrl: function() { + pasteFF: function() { + var arr, blob, bstr, i, images, img, k, len1, m, pasteArea, q, ref, src; + pasteArea = QR.nodes.pasteArea; + if (!pasteArea.childNodes.length) { + return; + } + images = $$('img', pasteArea); + $.rmAll(pasteArea); + for (k = 0, len1 = images.length; k < len1; k++) { + img = images[k]; + src = img.src; + if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { + bstr = atob(m[3]); + arr = new Uint8Array(bstr.length); + for (i = q = 0, ref = bstr.length; 0 <= ref ? q < ref : q > ref; i = 0 <= ref ? ++q : --q) { + 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); + } + } + }, + handleUrl: function(urlDefault) { var url; - url = prompt('Enter a URL:'); + url = prompt('Enter a URL:', urlDefault); if (url === null) { return; } @@ -7284,7 +7311,7 @@ var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, setNode; QR.nodes = nodes = { el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { - innerHTML: "
" + innerHTML: " " }) }; setNode = function(name, query) { @@ -7297,6 +7324,7 @@ 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]'); @@ -7376,7 +7404,9 @@ $.on(nodes.dumpButton, 'click', function() { return nodes.el.classList.toggle('dump'); }); - $.on(nodes.urlButton, 'click', QR.handleUrl); + $.on(nodes.urlButton, 'click', function() { + return QR.handleUrl(''); + }); $.on(nodes.addPost, 'click', function() { return new QR.post(true); }); @@ -7392,6 +7422,12 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); + if (typeof chrome === "undefined" || chrome === null) { + nodes.pasteArea.hidden = false; + new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { + childList: true + }); + } items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; i = 0; save = function() { @@ -18290,9 +18326,9 @@ " flex: none;\n" + " margin: 0;\n" + " margin-right: 3px;\n" + -" font: 13px sans-serif;\n" + "}\n" + "#qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label,\n" + +".has-file #paste-area,\n" + ".has-file #url-button,\n" + "#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" + " display: none;\n" + @@ -18300,9 +18336,15 @@ "#qr-file-spoiler {\n" + " margin: 0;\n" + "}\n" + -"#url-button, #custom-cooldown-button, #dump-button {\n" + +"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" + " opacity: 0.6;\n" + "}\n" + +"#paste-area {\n" + +" font-size: 0;\n" + +"}\n" + +"#paste-area:focus {\n" + +" opacity: 1;\n" + +"}\n" + "#custom-cooldown-button.disabled {\n" + " opacity: 0.27;\n" + "}\n" + diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx index 4048dd59c..bb9bdf174 100644 Binary files a/builds/4chan-X-noupdate.crx and b/builds/4chan-X-noupdate.crx differ diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js index 4764c6e3f..5e17b727d 100644 --- a/builds/4chan-X-noupdate.user.js +++ b/builds/4chan-X-noupdate.user.js @@ -1,7 +1,7 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X -// @version 1.10.5.3 +// @version 1.10.6.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -394,7 +394,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.5.3', + VERSION: '1.10.6.0', NAMESPACE: '4chan X.', NAME: '4chan X', FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions', @@ -7198,9 +7198,36 @@ QR.handleFiles(files); return $.addClass(QR.nodes.el, 'dump'); }, - handleUrl: function() { + pasteFF: function() { + var arr, blob, bstr, i, images, img, k, len1, m, pasteArea, q, ref, src; + pasteArea = QR.nodes.pasteArea; + if (!pasteArea.childNodes.length) { + return; + } + images = $$('img', pasteArea); + $.rmAll(pasteArea); + for (k = 0, len1 = images.length; k < len1; k++) { + img = images[k]; + src = img.src; + if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { + bstr = atob(m[3]); + arr = new Uint8Array(bstr.length); + for (i = q = 0, ref = bstr.length; 0 <= ref ? q < ref : q > ref; i = 0 <= ref ? ++q : --q) { + 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); + } + } + }, + handleUrl: function(urlDefault) { var url; - url = prompt('Enter a URL:'); + url = prompt('Enter a URL:', urlDefault); if (url === null) { return; } @@ -7283,7 +7310,7 @@ var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, setNode; QR.nodes = nodes = { el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { - innerHTML: " " + innerHTML: " " }) }; setNode = function(name, query) { @@ -7296,6 +7323,7 @@ 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]'); @@ -7375,7 +7403,9 @@ $.on(nodes.dumpButton, 'click', function() { return nodes.el.classList.toggle('dump'); }); - $.on(nodes.urlButton, 'click', QR.handleUrl); + $.on(nodes.urlButton, 'click', function() { + return QR.handleUrl(''); + }); $.on(nodes.addPost, 'click', function() { return new QR.post(true); }); @@ -7391,6 +7421,12 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); + if (typeof chrome === "undefined" || chrome === null) { + nodes.pasteArea.hidden = false; + new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { + childList: true + }); + } items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; i = 0; save = function() { @@ -18289,9 +18325,9 @@ " flex: none;\n" + " margin: 0;\n" + " margin-right: 3px;\n" + -" font: 13px sans-serif;\n" + "}\n" + "#qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label,\n" + +".has-file #paste-area,\n" + ".has-file #url-button,\n" + "#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" + " display: none;\n" + @@ -18299,9 +18335,15 @@ "#qr-file-spoiler {\n" + " margin: 0;\n" + "}\n" + -"#url-button, #custom-cooldown-button, #dump-button {\n" + +"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" + " opacity: 0.6;\n" + "}\n" + +"#paste-area {\n" + +" font-size: 0;\n" + +"}\n" + +"#paste-area:focus {\n" + +" opacity: 1;\n" + +"}\n" + "#custom-cooldown-button.disabled {\n" + " opacity: 0.27;\n" + "}\n" + diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx index 448c28edd..60f24ee05 100644 Binary files a/builds/4chan-X.crx and b/builds/4chan-X.crx differ diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js index 5c395b89b..16f380587 100644 --- a/builds/4chan-X.meta.js +++ b/builds/4chan-X.meta.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan X -// @version 1.10.5.3 +// @version 1.10.6.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 35379394e..fabbb6383 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -1,7 +1,7 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X -// @version 1.10.5.3 +// @version 1.10.6.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -395,7 +395,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.5.3', + VERSION: '1.10.6.0', NAMESPACE: '4chan X.', NAME: '4chan X', FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions', @@ -7199,9 +7199,36 @@ QR.handleFiles(files); return $.addClass(QR.nodes.el, 'dump'); }, - handleUrl: function() { + pasteFF: function() { + var arr, blob, bstr, i, images, img, k, len1, m, pasteArea, q, ref, src; + pasteArea = QR.nodes.pasteArea; + if (!pasteArea.childNodes.length) { + return; + } + images = $$('img', pasteArea); + $.rmAll(pasteArea); + for (k = 0, len1 = images.length; k < len1; k++) { + img = images[k]; + src = img.src; + if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { + bstr = atob(m[3]); + arr = new Uint8Array(bstr.length); + for (i = q = 0, ref = bstr.length; 0 <= ref ? q < ref : q > ref; i = 0 <= ref ? ++q : --q) { + 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); + } + } + }, + handleUrl: function(urlDefault) { var url; - url = prompt('Enter a URL:'); + url = prompt('Enter a URL:', urlDefault); if (url === null) { return; } @@ -7284,7 +7311,7 @@ var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, setNode; QR.nodes = nodes = { el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { - innerHTML: " " + innerHTML: " " }) }; setNode = function(name, query) { @@ -7297,6 +7324,7 @@ 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]'); @@ -7376,7 +7404,9 @@ $.on(nodes.dumpButton, 'click', function() { return nodes.el.classList.toggle('dump'); }); - $.on(nodes.urlButton, 'click', QR.handleUrl); + $.on(nodes.urlButton, 'click', function() { + return QR.handleUrl(''); + }); $.on(nodes.addPost, 'click', function() { return new QR.post(true); }); @@ -7392,6 +7422,12 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); + if (typeof chrome === "undefined" || chrome === null) { + nodes.pasteArea.hidden = false; + new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { + childList: true + }); + } items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; i = 0; save = function() { @@ -18290,9 +18326,9 @@ " flex: none;\n" + " margin: 0;\n" + " margin-right: 3px;\n" + -" font: 13px sans-serif;\n" + "}\n" + "#qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label,\n" + +".has-file #paste-area,\n" + ".has-file #url-button,\n" + "#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" + " display: none;\n" + @@ -18300,9 +18336,15 @@ "#qr-file-spoiler {\n" + " margin: 0;\n" + "}\n" + -"#url-button, #custom-cooldown-button, #dump-button {\n" + +"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" + " opacity: 0.6;\n" + "}\n" + +"#paste-area {\n" + +" font-size: 0;\n" + +"}\n" + +"#paste-area:focus {\n" + +" opacity: 1;\n" + +"}\n" + "#custom-cooldown-button.disabled {\n" + " opacity: 0.27;\n" + "}\n" + diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip index 4829b7424..6c79a2401 100644 Binary files a/builds/4chan-X.zip and b/builds/4chan-X.zip differ diff --git a/builds/updates-beta.xml b/builds/updates-beta.xml index 3decaf019..750414ebe 100644 --- a/builds/updates-beta.xml +++ b/builds/updates-beta.xml @@ -1,7 +1,7 @@