diff --git a/CHANGELOG.md b/CHANGELOG.md index ebb8d41a6..70d981116 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ The links to individual versions below are to copies of the script with the upda ### v1.10.8 +**v1.10.8.10** *(2015-04-13)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.8.10/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.8.10/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix unwanted focusing on the submit button if you focus on the comment field too soon after entering the captcha. + **v1.10.8.9** *(2015-04-13)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.8.9/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.8.9/builds/4chan-X-noupdate.crx "Chromium version")] - (fgts) Remove /fit/ from fgts archive. diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 188cf337b..ba1d5a8c3 100755 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -1,4 +1,6 @@ +path = require 'path' crx = require 'crx' +JSZip = require 'jszip' module.exports = (grunt) -> grunt.util.linefeed = '\n' @@ -234,25 +236,6 @@ module.exports = (grunt) -> ] tasks: 'build' - crx: - prod: - src: 'testbuilds/crx<%= pkg.meta.suffix[pkg.channel] %>/' - dest: 'testbuilds/<%= pkg.name %><%= pkg.meta.suffix[pkg.channel] %>.crx' - privateKey: '../<%= pkg.name %>-keys/<%= pkg.name %>.pem' - - compress: - crx: - options: - archive: 'testbuilds/<%= pkg.name %><%= pkg.meta.suffix[pkg.channel] %>.crx.zip' - level: 9 - pretty: true - expand: true - flatten: true - src: 'testbuilds/crx<%= pkg.meta.suffix[pkg.channel] %>/*' - dest: '/' - date: '<%= pkg.meta.date %>' - mode: parseInt('644', 8) - clean: builds: 'builds' testbuilds: 'testbuilds' @@ -335,7 +318,7 @@ module.exports = (grunt) -> grunt.registerTask 'build-crx-channel', [ 'concat:crx' 'copy:crx' - 'compress:crx' + 'zip-crx' ] grunt.registerTask 'build-crx', [ @@ -354,6 +337,17 @@ module.exports = (grunt) -> 'clean:tmpcrx' ] + grunt.registerTask 'zip-crx', 'Pack CRX contents in ZIP file', -> + pkg = grunt.config 'pkg' + zip = new JSZip() + for file in grunt.file.expand "testbuilds/crx#{pkg.meta.suffix[pkg.channel]}/*" + zip.file path.basename(file), grunt.file.read(file, {encoding: null}), {date: new Date(pkg.meta.date)} + output = zip.generate + type: 'nodebuffer' + compression: 'DEFLATE' + compressionOptions: {level: 9} + grunt.file.write "testbuilds/#{pkg.name}#{pkg.meta.suffix[pkg.channel]}.crx.zip", output + grunt.registerTask 'sign-channel', 'Sign CRX package', (channel) -> done = @async() pkg = grunt.config 'pkg' diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx index 755e3ff6f..0aa8adce8 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 d51d96bc2..ae8e67bf0 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.8.9 +// @version 1.10.8.10 // @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 c78dc1b86..ec3a6db7e 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.8.9 +// @version 1.10.8.10 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -396,7 +396,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.8.9', + VERSION: '1.10.8.10', NAMESPACE: '4chan X.', boards: {} }; @@ -8132,7 +8132,7 @@ } }, save: function(pasted) { - var base1; + var base1, focus, ref, ref1; $.forceSync('captchas'); this.captchas.push({ response: $('textarea', this.nodes.container).value, @@ -8148,6 +8148,7 @@ } this.reload(); } else { + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; if (pasted) { this.destroy(); } else { @@ -8155,7 +8156,9 @@ base1.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); } } - QR.nodes.status.focus(); + if (focus) { + QR.nodes.status.focus(); + } } if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { return QR.submit(); diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx index 47840c735..72343fe48 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 d2066020b..688559074 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.8.9 +// @version 1.10.8.10 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -395,7 +395,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.8.9', + VERSION: '1.10.8.10', NAMESPACE: '4chan X.', boards: {} }; @@ -8131,7 +8131,7 @@ } }, save: function(pasted) { - var base1; + var base1, focus, ref, ref1; $.forceSync('captchas'); this.captchas.push({ response: $('textarea', this.nodes.container).value, @@ -8147,6 +8147,7 @@ } this.reload(); } else { + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; if (pasted) { this.destroy(); } else { @@ -8154,7 +8155,9 @@ base1.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); } } - QR.nodes.status.focus(); + if (focus) { + QR.nodes.status.focus(); + } } if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { return QR.submit(); diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx index 2bd888c58..2f7f5e1ce 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 6f9db5ad5..20a800ebf 100644 --- a/builds/4chan-X.meta.js +++ b/builds/4chan-X.meta.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan X -// @version 1.10.8.9 +// @version 1.10.8.10 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index ac91991ec..9f6db8a86 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.8.9 +// @version 1.10.8.10 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -396,7 +396,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.8.9', + VERSION: '1.10.8.10', NAMESPACE: '4chan X.', boards: {} }; @@ -8132,7 +8132,7 @@ } }, save: function(pasted) { - var base1; + var base1, focus, ref, ref1; $.forceSync('captchas'); this.captchas.push({ response: $('textarea', this.nodes.container).value, @@ -8148,6 +8148,7 @@ } this.reload(); } else { + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; if (pasted) { this.destroy(); } else { @@ -8155,7 +8156,9 @@ base1.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); } } - QR.nodes.status.focus(); + if (focus) { + QR.nodes.status.focus(); + } } if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { return QR.submit(); diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip index f3ffaec7d..128e0a82e 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 a39527fa2..e5b8161a7 100644 --- a/builds/updates-beta.xml +++ b/builds/updates-beta.xml @@ -1,7 +1,7 @@ - + diff --git a/builds/updates.xml b/builds/updates.xml index a97440e34..709f70a64 100644 --- a/builds/updates.xml +++ b/builds/updates.xml @@ -1,7 +1,7 @@ - + diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 46cc83a2c..686d074f5 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -465,198 +465,6 @@ } } }, - "grunt-contrib-compress": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-0.13.0.tgz", - "dependencies": { - "archiver": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.13.1.tgz", - "dependencies": { - "async": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz" - }, - "buffer-crc32": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.5.tgz" - }, - "glob": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz", - "dependencies": { - "inflight": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "once": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - } - } - }, - "lazystream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz" - }, - "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" - }, - "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - }, - "tar-stream": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.1.2.tgz", - "dependencies": { - "bl": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz" - }, - "end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "dependencies": { - "once": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - } - } - }, - "xtend": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" - } - } - }, - "zip-stream": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.5.0.tgz", - "dependencies": { - "compress-commons": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.2.0.tgz", - "dependencies": { - "crc32-stream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.1.tgz" - }, - "node-int64": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.3.3.tgz" - } - } - } - } - } - } - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "dependencies": { - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz" - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz" - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" - } - } - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" - } - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz" - } - } - }, - "prettysize": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-0.0.3.tgz" - } - } - }, "grunt-contrib-concat": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", @@ -1081,6 +889,16 @@ } } }, + "jszip": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz", + "dependencies": { + "pako": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.6.tgz" + } + } + }, "load-grunt-tasks": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.1.0.tgz", diff --git a/package.json b/package.json index f63b265c9..bd924b3a7 100755 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "description": "Cross-browser userscript for maximum lurking on 4chan.", "meta": { "name": "4chan X", - "version": "1.10.8.9", - "date": "2015-04-13T15:07:30.185Z", + "version": "1.10.8.10", + "date": "2015-04-14T03:57:38.704Z", "repo": "https://github.com/ccd0/4chan-x/", "page": "https://github.com/ccd0/4chan-x", "downloads": "https://ccd0.github.io/4chan-x/builds/", @@ -49,7 +49,6 @@ "grunt-concurrent": "^1.0.0", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-coffee": "^0.13.0", - "grunt-contrib-compress": "^0.13.0", "grunt-contrib-concat": "^0.5.1", "grunt-contrib-copy": "^0.8.0", "grunt-contrib-jshint": "^0.11.1", @@ -57,6 +56,7 @@ "grunt-markdown": "^0.7.0", "grunt-shell": "^1.1.2", "grunt-webstore-upload": "^0.8.2", + "jszip": "^2.5.0", "load-grunt-tasks": "^3.1.0", "npm-shrinkwrap": "^5.3.0" }, diff --git a/src/Posting/Captcha.v2.coffee b/src/Posting/Captcha.v2.coffee index 1aad5b1d7..f090df6bc 100644 --- a/src/Posting/Captcha.v2.coffee +++ b/src/Posting/Captcha.v2.coffee @@ -155,11 +155,12 @@ Captcha.v2 = QR.nodes.status.focus() @reload() else + focus = d.activeElement?.nodeName is 'IFRAME' and d.activeElement.src?[...38] is 'https://www.google.com/recaptcha/api2/' if pasted @destroy() else @timeouts.destroy ?= setTimeout @destroy.bind(@), 3 * $.SECOND - QR.nodes.status.focus() + QR.nodes.status.focus() if focus QR.submit() if Conf['Post on Captcha Completion'] and !QR.cooldown.auto