From f067d990c6ab6995a2033d88f5459dee7bb5c9bc Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Tue, 7 Jan 2014 13:37:14 -0700 Subject: [PATCH 1/4] Start work on more or less JSONing everything Obviously to start, I want to make adding and removing callbacks simpler, because I'm going to need to be disabling and enabling features on the fly quite a lot, I'm guessing. --- builds/4chan-X.user.js | 108 +++++++++++++++++--------------- builds/crx/script.js | 108 +++++++++++++++++--------------- src/General/Main.coffee | 32 ++-------- src/General/lib/callbacks.class | 20 ++++++ src/General/lib/classes.coffee | 1 + src/General/lib/post.class | 2 +- src/General/lib/thread.class | 2 +- 7 files changed, 147 insertions(+), 126 deletions(-) create mode 100644 src/General/lib/callbacks.class diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 748348b7d..2ad2d02a4 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -104,7 +104,7 @@ 'use strict'; (function() { - var $, $$, Anonymize, ArchiveLink, AutoGIF, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DeleteLink, Dice, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Gallery, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Index, InfiniScroll, Keybinds, Linkify, Main, Menu, Nav, Notice, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + var $, $$, Anonymize, ArchiveLink, AutoGIF, Banner, Board, Build, Callbacks, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DeleteLink, Dice, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Gallery, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Index, InfiniScroll, Keybinds, Linkify, Main, Menu, Nav, Notice, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __slice = [].slice, __hasProp = {}.hasOwnProperty, @@ -807,6 +807,56 @@ return __slice.call(root.querySelectorAll(selector)); }; + Callbacks = (function() { + function Callbacks() {} + + Callbacks.prototype.push = function(_arg) { + var cb, name; + name = _arg.name, cb = _arg.cb; + return this.name = cb; + }; + + Callbacks.prototype.clean = function() { + var name; + for (name in this) { + if (this.hasOwnProperty(name)) { + this.rm(name); + } + } + }; + + Callbacks.prototype.rm = function(name) { + return delete this.name; + }; + + Callbacks.prototype.execute = function(target) { + var cb, err, errors, name; + for (name in this) { + cb = this[name]; + if (this.hasOwnProperty(name)) { + try { + cb.call(target); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: ['"', name, '" crashed on node No.', node, ' (', node.board, ').'].join(''), + error: err + }); + } + } + } + if (errors) { + return Main.handleErrors(errors); + } + }; + + return Callbacks; + + })(); + Board = (function() { Board.prototype.toString = function() { return this.ID; @@ -824,7 +874,7 @@ })(); Thread = (function() { - Thread.callbacks = []; + Thread.callbacks = new Callbacks(); Thread.prototype.toString = function() { return this.ID; @@ -898,7 +948,7 @@ })(); Post = (function() { - Post.callbacks = []; + Post.callbacks = new Callbacks(); Post.prototype.toString = function() { return this.ID; @@ -12514,38 +12564,17 @@ break; } try { - localStorage.getItem('4chan-settings'); + return localStorage.getItem('4chan-settings'); } catch (_error) { err = _error; - new Notice('warning', 'Cookies need to be enabled on 4chan for 4chan X to operate properly.', 30); + return new Notice('warning', 'Cookies need to be enabled on 4chan for 4chan X to operate properly.', 30); } - return $.event('4chanXInitFinished'); }, callbackNodes: function(klass, nodes) { - var callback, err, errors, i, len, node, _i, _len, _ref; + var len, node; len = nodes.length; - _ref = klass.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - i = 0; - while (i < len) { - node = nodes[i++]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } - } - if (errors) { - return Main.handleErrors(errors); + while (node = nodes[i++]) { + klass.callback.execute(node); } }, callbackNodesDB: function(klass, nodes, cb) { @@ -12553,27 +12582,8 @@ queue = []; errors = null; func = function(node) { - var callback, err, _i, _len, _ref; - _ref = klass.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } + klass.callback.execute(node); if (!queue.length) { - if (errors) { - Main.handleErrors(errors); - } if (cb) { return cb(); } diff --git a/builds/crx/script.js b/builds/crx/script.js index 4f5048c1f..a6551d072 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -82,7 +82,7 @@ 'use strict'; (function() { - var $, $$, Anonymize, ArchiveLink, AutoGIF, Banner, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DeleteLink, Dice, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Gallery, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Index, InfiniScroll, Keybinds, Linkify, Main, Menu, Nav, Notice, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + var $, $$, Anonymize, ArchiveLink, AutoGIF, Banner, Board, Build, Callbacks, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DeleteLink, Dice, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Gallery, Get, Header, IDColor, ImageExpand, ImageHover, ImageLoader, Index, InfiniScroll, Keybinds, Linkify, Main, Menu, Nav, Notice, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __slice = [].slice, __hasProp = {}.hasOwnProperty, @@ -812,6 +812,56 @@ return __slice.call(root.querySelectorAll(selector)); }; + Callbacks = (function() { + function Callbacks() {} + + Callbacks.prototype.push = function(_arg) { + var cb, name; + name = _arg.name, cb = _arg.cb; + return this.name = cb; + }; + + Callbacks.prototype.clean = function() { + var name; + for (name in this) { + if (this.hasOwnProperty(name)) { + this.rm(name); + } + } + }; + + Callbacks.prototype.rm = function(name) { + return delete this.name; + }; + + Callbacks.prototype.execute = function(target) { + var cb, err, errors, name; + for (name in this) { + cb = this[name]; + if (this.hasOwnProperty(name)) { + try { + cb.call(target); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: ['"', name, '" crashed on node No.', node, ' (', node.board, ').'].join(''), + error: err + }); + } + } + } + if (errors) { + return Main.handleErrors(errors); + } + }; + + return Callbacks; + + })(); + Board = (function() { Board.prototype.toString = function() { return this.ID; @@ -829,7 +879,7 @@ })(); Thread = (function() { - Thread.callbacks = []; + Thread.callbacks = new Callbacks(); Thread.prototype.toString = function() { return this.ID; @@ -903,7 +953,7 @@ })(); Post = (function() { - Post.callbacks = []; + Post.callbacks = new Callbacks(); Post.prototype.toString = function() { return this.ID; @@ -12488,38 +12538,17 @@ return; } try { - localStorage.getItem('4chan-settings'); + return localStorage.getItem('4chan-settings'); } catch (_error) { err = _error; - new Notice('warning', 'Cookies need to be enabled on 4chan for 4chan X to operate properly.', 30); + return new Notice('warning', 'Cookies need to be enabled on 4chan for 4chan X to operate properly.', 30); } - return $.event('4chanXInitFinished'); }, callbackNodes: function(klass, nodes) { - var callback, err, errors, i, len, node, _i, _len, _ref; + var len, node; len = nodes.length; - _ref = klass.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - i = 0; - while (i < len) { - node = nodes[i++]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } - } - if (errors) { - return Main.handleErrors(errors); + while (node = nodes[i++]) { + klass.callback.execute(node); } }, callbackNodesDB: function(klass, nodes, cb) { @@ -12527,27 +12556,8 @@ queue = []; errors = null; func = function(node) { - var callback, err, _i, _len, _ref; - _ref = klass.callbacks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - callback = _ref[_i]; - try { - callback.cb.call(node); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "\"" + callback.name + "\" crashed on " + klass.name + " No." + node + " (/" + node.board + "/).", - error: err - }); - } - } + klass.callback.execute(node); if (!queue.length) { - if (errors) { - Main.handleErrors(errors); - } if (cb) { return cb(); } diff --git a/src/General/Main.coffee b/src/General/Main.coffee index 9d02d5f5d..3148ef4a7 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -228,45 +228,25 @@ Main = catch err new Notice 'warning', 'Cookies need to be enabled on 4chan for <%= meta.name %> to operate properly.', 30 - $.event '4chanXInitFinished' - callbackNodes: (klass, nodes) -> # get the nodes' length only once len = nodes.length - for callback in klass.callbacks - # c.profile callback.name - i = 0 - while i < len - node = nodes[i++] - try - callback.cb.call node - catch err - errors = [] unless errors - errors.push - message: "\"#{callback.name}\" crashed on #{klass.name} No.#{node} (/#{node.board}/)." - error: err - # c.profileEnd callback.name - Main.handleErrors errors if errors + while node = nodes[i++] + klass.callback.execute node + return callbackNodesDB: (klass, nodes, cb) -> queue = [] errors = null func = (node) -> - for callback in klass.callbacks - try - callback.cb.call node - catch err - errors = [] unless errors - errors.push - message: "\"#{callback.name}\" crashed on #{klass.name} No.#{node} (/#{node.board}/)." - error: err + klass.callback.execute node + # finish unless queue.length - Main.handleErrors errors if errors cb() if cb - softTask = -> + softTask = -> node = queue.shift() func node return unless queue.length diff --git a/src/General/lib/callbacks.class b/src/General/lib/callbacks.class new file mode 100644 index 000000000..ef425fce5 --- /dev/null +++ b/src/General/lib/callbacks.class @@ -0,0 +1,20 @@ +class Callbacks + push: ({name, cb}) -> @name = cb + + clean: -> + @rm name for name of @ when @hasOwnProperty name + return + + rm: (name) -> delete @name + + execute: (target) -> + for name, cb of @ when @hasOwnProperty name + try + cb.call target + catch err + errors = [] unless errors + errors.push + message: ['"', name, '" crashed on node No.', node, ' (', node.board, ').'].join('') + error: err + + Main.handleErrors errors if errors diff --git a/src/General/lib/classes.coffee b/src/General/lib/classes.coffee index 63c33645e..5654ff914 100755 --- a/src/General/lib/classes.coffee +++ b/src/General/lib/classes.coffee @@ -1,3 +1,4 @@ +<%= grunt.file.read('src/General/lib/callbacks.class') %> <%= grunt.file.read('src/General/lib/board.class') %> <%= grunt.file.read('src/General/lib/thread.class') %> <%= grunt.file.read('src/General/lib/post.class') %> diff --git a/src/General/lib/post.class b/src/General/lib/post.class index 81ac63acc..0943e520a 100755 --- a/src/General/lib/post.class +++ b/src/General/lib/post.class @@ -1,5 +1,5 @@ class Post - @callbacks = [] + @callbacks = new Callbacks() toString: -> @ID constructor: (root, @thread, @board, that={}) -> diff --git a/src/General/lib/thread.class b/src/General/lib/thread.class index 5b14e135d..f05bfeebf 100755 --- a/src/General/lib/thread.class +++ b/src/General/lib/thread.class @@ -1,5 +1,5 @@ class Thread - @callbacks = [] + @callbacks = new Callbacks() toString: -> @ID constructor: (@ID, @board) -> From 31e409f36147d857b8c5bca0fe76f38fe2950f1e Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Tue, 7 Jan 2014 14:18:22 -0700 Subject: [PATCH 2/4] I get asked a lot, "do you even test your code?" No. No, the answer is no. --- builds/4chan-X.user.js | 46 ++++++++++++--------------------- builds/crx/script.js | 46 ++++++++++++--------------------- src/General/Main.coffee | 32 +++++++---------------- src/General/lib/callbacks.class | 10 +++---- 4 files changed, 49 insertions(+), 85 deletions(-) diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 2ad2d02a4..073057b82 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -813,7 +813,7 @@ Callbacks.prototype.push = function(_arg) { var cb, name; name = _arg.name, cb = _arg.cb; - return this.name = cb; + return this[name] = cb; }; Callbacks.prototype.clean = function() { @@ -826,16 +826,15 @@ }; Callbacks.prototype.rm = function(name) { - return delete this.name; + return delete this[name]; }; - Callbacks.prototype.execute = function(target) { - var cb, err, errors, name; + Callbacks.prototype.execute = function(node) { + var err, errors, name; for (name in this) { - cb = this[name]; if (this.hasOwnProperty(name)) { try { - cb.call(target); + this[name].call(node); } catch (_error) { err = _error; if (!errors) { @@ -12571,43 +12570,32 @@ } }, callbackNodes: function(klass, nodes) { - var len, node; - len = nodes.length; + var cb, i, node; + i = 0; + cb = klass.callbacks; while (node = nodes[i++]) { - klass.callback.execute(node); + cb.execute(node); } }, callbackNodesDB: function(klass, nodes, cb) { - var errors, func, i, len, node, queue, softTask; - queue = []; + var callbacks, errors, len, softTask; errors = null; - func = function(node) { - klass.callback.execute(node); - if (!queue.length) { - if (cb) { - return cb(); - } - } - }; + len = 0; + callbacks = klass.callbacks; softTask = function() { var node; - node = queue.shift(); - func(node); - if (!queue.length) { - return; + node = nodes.shift(); + callbacks.execute(node); + if (!--len && cb) { + return cb(); } - if (!(queue.length % 7)) { + if (!(len % 7)) { return setTimeout(softTask, 0); } else { return softTask(); } }; len = nodes.length; - i = 0; - while (i < len) { - node = nodes[i++]; - queue.push(node); - } return softTask(); }, addCallback: function(e) { diff --git a/builds/crx/script.js b/builds/crx/script.js index a6551d072..4fb51c702 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -818,7 +818,7 @@ Callbacks.prototype.push = function(_arg) { var cb, name; name = _arg.name, cb = _arg.cb; - return this.name = cb; + return this[name] = cb; }; Callbacks.prototype.clean = function() { @@ -831,16 +831,15 @@ }; Callbacks.prototype.rm = function(name) { - return delete this.name; + return delete this[name]; }; - Callbacks.prototype.execute = function(target) { - var cb, err, errors, name; + Callbacks.prototype.execute = function(node) { + var err, errors, name; for (name in this) { - cb = this[name]; if (this.hasOwnProperty(name)) { try { - cb.call(target); + this[name].call(node); } catch (_error) { err = _error; if (!errors) { @@ -12545,43 +12544,32 @@ } }, callbackNodes: function(klass, nodes) { - var len, node; - len = nodes.length; + var cb, i, node; + i = 0; + cb = klass.callbacks; while (node = nodes[i++]) { - klass.callback.execute(node); + cb.execute(node); } }, callbackNodesDB: function(klass, nodes, cb) { - var errors, func, i, len, node, queue, softTask; - queue = []; + var callbacks, errors, len, softTask; errors = null; - func = function(node) { - klass.callback.execute(node); - if (!queue.length) { - if (cb) { - return cb(); - } - } - }; + len = 0; + callbacks = klass.callbacks; softTask = function() { var node; - node = queue.shift(); - func(node); - if (!queue.length) { - return; + node = nodes.shift(); + callbacks.execute(node); + if (!--len && cb) { + return cb(); } - if (!(queue.length % 7)) { + if (!(len % 7)) { return setTimeout(softTask, 0); } else { return softTask(); } }; len = nodes.length; - i = 0; - while (i < len) { - node = nodes[i++]; - queue.push(node); - } return softTask(); }, addCallback: function(e) { diff --git a/src/General/Main.coffee b/src/General/Main.coffee index 3148ef4a7..fcf36a7f7 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -229,40 +229,28 @@ Main = new Notice 'warning', 'Cookies need to be enabled on 4chan for <%= meta.name %> to operate properly.', 30 callbackNodes: (klass, nodes) -> - # get the nodes' length only once - len = nodes.length + i = 0 + cb = klass.callbacks while node = nodes[i++] - klass.callback.execute node + cb.execute node return callbackNodesDB: (klass, nodes, cb) -> - queue = [] errors = null + len = 0 - func = (node) -> - klass.callback.execute node - - # finish - unless queue.length - cb() if cb + {callbacks} = klass softTask = -> - node = queue.shift() - func node - return unless queue.length - unless queue.length % 7 + node = nodes.shift() + callbacks.execute node + return cb() if not --len and cb + unless len % 7 setTimeout softTask, 0 else softTask() - # get the nodes' length only once - len = nodes.length - i = 0 - - while i < len - node = nodes[i++] - queue.push node - + len = nodes.length softTask() addCallback: (e) -> diff --git a/src/General/lib/callbacks.class b/src/General/lib/callbacks.class index ef425fce5..7a832f43c 100644 --- a/src/General/lib/callbacks.class +++ b/src/General/lib/callbacks.class @@ -1,16 +1,16 @@ class Callbacks - push: ({name, cb}) -> @name = cb + push: ({name, cb}) -> @[name] = cb clean: -> @rm name for name of @ when @hasOwnProperty name return - rm: (name) -> delete @name + rm: (name) -> delete @[name] - execute: (target) -> - for name, cb of @ when @hasOwnProperty name + execute: (node) -> + for name of @ when @hasOwnProperty name try - cb.call target + @[name].call node catch err errors = [] unless errors errors.push From 073887e5157b36a1e41dab8f798d6218b155b87b Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Tue, 7 Jan 2014 14:23:27 -0700 Subject: [PATCH 3/4] It occurs to me that Array.shift() is probably slow. --- builds/4chan-X.user.js | 9 +++++---- builds/crx/script.js | 9 +++++---- src/General/Main.coffee | 7 ++++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 073057b82..97eab729e 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -12578,18 +12578,19 @@ } }, callbackNodesDB: function(klass, nodes, cb) { - var callbacks, errors, len, softTask; + var callbacks, errors, i, len, softTask; errors = null; len = 0; + i = 0; callbacks = klass.callbacks; softTask = function() { var node; - node = nodes.shift(); + node = nodes[i++]; callbacks.execute(node); - if (!--len && cb) { + if (len === i && cb) { return cb(); } - if (!(len % 7)) { + if (!(i % 7)) { return setTimeout(softTask, 0); } else { return softTask(); diff --git a/builds/crx/script.js b/builds/crx/script.js index 4fb51c702..17c2ed399 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -12552,18 +12552,19 @@ } }, callbackNodesDB: function(klass, nodes, cb) { - var callbacks, errors, len, softTask; + var callbacks, errors, i, len, softTask; errors = null; len = 0; + i = 0; callbacks = klass.callbacks; softTask = function() { var node; - node = nodes.shift(); + node = nodes[i++]; callbacks.execute(node); - if (!--len && cb) { + if (len === i && cb) { return cb(); } - if (!(len % 7)) { + if (!(i % 7)) { return setTimeout(softTask, 0); } else { return softTask(); diff --git a/src/General/Main.coffee b/src/General/Main.coffee index fcf36a7f7..57bafeeb6 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -238,14 +238,15 @@ Main = callbackNodesDB: (klass, nodes, cb) -> errors = null len = 0 + i = 0 {callbacks} = klass softTask = -> - node = nodes.shift() + node = nodes[i++] callbacks.execute node - return cb() if not --len and cb - unless len % 7 + return cb() if len is i and cb + unless i % 7 setTimeout softTask, 0 else softTask() From ba7769329eb212540d092c9c3b9d00ad69394669 Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Tue, 7 Jan 2014 14:27:36 -0700 Subject: [PATCH 4/4] Eh, spacing --- src/General/Main.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/General/Main.coffee b/src/General/Main.coffee index 57bafeeb6..64d9e5fab 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -238,7 +238,7 @@ Main = callbackNodesDB: (klass, nodes, cb) -> errors = null len = 0 - i = 0 + i = 0 {callbacks} = klass