Arlolra has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/202294

Change subject: [jscs] Enforce requireSpaceAfterBinaryOperators
......................................................................

[jscs] Enforce requireSpaceAfterBinaryOperators

 * This was auto-corrected with jscs -x .

Change-Id: Idee8a562ae2c29cc5c661532b016220be3c107aa
---
M .jscsrc
M api/routes.js
M api/server.js
M api/utils.js
M lib/LogData.js
M lib/XMLSerializer.js
M lib/dom.computeDSR.js
M lib/dom.handlePres.js
M lib/dom.linter.js
M lib/dom.t.TableFixups.js
M lib/dom.wrapTemplates.js
M lib/ext.Cite.js
M lib/ext.core.AttributeExpander.js
M lib/ext.core.LinkHandler.js
M lib/ext.core.ListHandler.js
M lib/ext.core.NoIncludeOnly.js
M lib/ext.core.ParagraphWrapper.js
M lib/ext.core.ParserFunctions.js
M lib/ext.core.PreHandler.js
M lib/ext.core.QuoteTransformer.js
M lib/ext.core.Sanitizer.js
M lib/ext.core.TokenStreamPatcher.js
M lib/ext.util.TokenCollector.js
M lib/jsutils.js
M lib/mediawiki.ApiRequest.js
M lib/mediawiki.DOMPostProcessor.js
M lib/mediawiki.DOMUtils.js
M lib/mediawiki.TokenTransformManager.js
M lib/mediawiki.Util.js
M lib/mediawiki.WikiConfig.js
M lib/mediawiki.WikitextSerializer.js
M lib/mediawiki.parser.defines.js
M lib/mediawiki.parser.environment.js
M lib/mediawiki.parser.js
M lib/mediawiki.tokenizer.utils.js
M lib/mediawiki.wikitext.constants.js
M lib/pegTokenizer.pegjs.txt
M lib/wts.ConstrainedText.js
M lib/wts.LinkHandler.js
M lib/wts.SerializerState.js
M lib/wts.TagHandlers.js
M lib/wts.escapeWikitext.js
M lib/wts.separators.js
M tests/client/client.js
M tests/fetch-parserTests.txt.js
M tests/mocha/api.js
M tests/mocha/parse.js
M tests/parserTests.js
M tests/server/diff.js
M tests/server/render.helpers.js
M tests/server/server.js
M tests/server/static/js/commitList.js
M tests/sync-parserTests.js
53 files changed, 246 insertions(+), 247 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/94/202294/1

diff --git a/.jscsrc b/.jscsrc
index d2c9feb..3d1609f 100644
--- a/.jscsrc
+++ b/.jscsrc
@@ -9,7 +9,6 @@
        "requireCamelCaseOrUpperCaseIdentifiers": null,
        "requireCapitalizedComments": null,
        "requireSpaceAfterLineComment": null,
-       "requireSpaceAfterBinaryOperators": null,
        "requireTrailingComma": null,
        "validateIndentation": null,
        "validateQuoteMarks": null,
diff --git a/api/routes.js b/api/routes.js
index 5be5670..135e5c4 100644
--- a/api/routes.js
+++ b/api/routes.js
@@ -600,7 +600,7 @@
                }).then(function( v ) {
                        return Promise.promisify(
                                child_process.execFile, ['stdout', 'stderr'], 
child_process
-                       )( 'git', ['rev-parse','HEAD'], {
+                       )( 'git', ['rev-parse', 'HEAD'], {
                                cwd: path.join(__dirname, '..')
                        }).then(function( out ) {
                                v.sha = out.stdout.slice(0, -1);
diff --git a/api/server.js b/api/server.js
index e91ae6c..75dc6d7 100755
--- a/api/server.js
+++ b/api/server.js
@@ -187,9 +187,9 @@
                setInterval(function() {
                        var heapUsage = process.memoryUsage();
                        parsoidConfig.performanceTimer.timing('heap.rss', '', 
heapUsage.rss);
-                       parsoidConfig.performanceTimer.timing('heap.total','', 
heapUsage.heapTotal);
+                       parsoidConfig.performanceTimer.timing('heap.total', '', 
heapUsage.heapTotal);
                        parsoidConfig.performanceTimer.timing('heap.used', '', 
heapUsage.heapUsed);
-               },  1000 *60 * 5);
+               },  1000 * 60 * 5);
        }
 
        var app = new ParsoidService( parsoidConfig, logger );
diff --git a/api/utils.js b/api/utils.js
index d46a737..d3254d5 100644
--- a/api/utils.js
+++ b/api/utils.js
@@ -98,8 +98,8 @@
 };
 
 apiUtils.htmlSpecialChars = function( s ) {
-       return s.replace(/&/g,'&')
-               .replace(/</g,'&lt;')
-               .replace(/"/g,'&quot;')
-               .replace(/'/g,'&#039;');
+       return s.replace(/&/g, '&amp;')
+               .replace(/</g, '&lt;')
+               .replace(/"/g, '&quot;')
+               .replace(/'/g, '&#039;');
 };
diff --git a/lib/LogData.js b/lib/LogData.js
index c7c087c..80dc403 100644
--- a/lib/LogData.js
+++ b/lib/LogData.js
@@ -151,7 +151,7 @@
                        f.code = o.code;
                }
                return f;
-       } else if (typeof (o) ==='function') {
+       } else if (typeof (o) === 'function') {
                return self._flatten(o());
        } else if (typeof (o) === 'object' && o.hasOwnProperty('msg')) {
                return o;
diff --git a/lib/XMLSerializer.js b/lib/XMLSerializer.js
index faa08ee..8551529 100644
--- a/lib/XMLSerializer.js
+++ b/lib/XMLSerializer.js
@@ -88,7 +88,7 @@
                        var nodeName = node.tagName.toLowerCase(),
                                localName = node.localName;
                        cb('<' + localName);
-                       for (var i =0;i <len;i++) {
+                       for (var i = 0;i < len;i++) {
                                var attr = attrs.item(i),
                                        singleQuotes, doubleQuotes,
                                        useSingleQuotes = false;
diff --git a/lib/dom.computeDSR.js b/lib/dom.computeDSR.js
index d88cef7..00adb52 100644
--- a/lib/dom.computeDSR.js
+++ b/lib/dom.computeDSR.js
@@ -209,7 +209,7 @@
                cs = ce,
                rtTestMode = env.conf.parsoid.rtTestMode;
 
-       for (var i = numChildren -1; i >= 0; i--) {
+       for (var i = numChildren - 1; i >= 0; i--) {
                var isMarkerTag = false,
                        origCE = ce,
                        child = children[i],
@@ -464,7 +464,7 @@
                                }
                                env.log("trace/dsr", function() {
                                        var str = "     UPDATING " + 
child.nodeName +
-                                               " with [" + cs + "," + ce + "]; 
typeof: " +cTypeOf;
+                                               " with [" + cs + "," + ce + "]; 
typeof: " + cTypeOf;
                                        // Set up 'dbsrc' so we can debug this
                                        dp.dbsrc = env.page.src.substring(cs, 
ce);
                                        return str;
@@ -560,7 +560,7 @@
        // Detect errors
        if (s !== null && s !== undefined && cs !== s && 
!acceptableInconsistency(opts, node, cs, s)) {
                env.log("warning/dsr/inconsistent", "DSR inconsistency: cs/s 
mismatch for node:",
-                       node.nodeName, "s:",s,"; cs:",cs);
+                       node.nodeName, "s:", s, "; cs:", cs);
        }
 
        trace("END: ", node.nodeName, ", returning: ", cs, ", ", e);
diff --git a/lib/dom.handlePres.js b/lib/dom.handlePres.js
index 2912262..8c4a845 100644
--- a/lib/dom.handlePres.js
+++ b/lib/dom.handlePres.js
@@ -16,10 +16,10 @@
        for (var i = 0, n = children.length; i < n; i++) {
                var c = children[i];
                if (DU.isText(c)) {
-                       c.data = fixedIndentPreText(c.data, isLastChild && i 
=== n -1);
+                       c.data = fixedIndentPreText(c.data, isLastChild && i 
=== n - 1);
                } else {
                        // recurse
-                       reinsertLeadingSpace(c, isLastChild && i === n -1);
+                       reinsertLeadingSpace(c, isLastChild && i === n - 1);
                }
        }
 }
diff --git a/lib/dom.linter.js b/lib/dom.linter.js
index cf19330..baa63d1 100644
--- a/lib/dom.linter.js
+++ b/lib/dom.linter.js
@@ -94,13 +94,13 @@
                DU.hasLiteralHTMLMarker(dp) &&
                dsr) ) {
 
-               if (dp.autoInsertedEnd === true && (tmpl || dsr[2] >0) ) {
+               if (dp.autoInsertedEnd === true && (tmpl || dsr[2] > 0) ) {
                        lintObj = { src: env.page.src, dsr: dsr,
                                                tip: 'Add End Tag to Fix this', 
inTransclusion: inTransclusion};
                        env.log('lint/missing-end-tag', lintObj);
                }
 
-               if (dp.autoInsertedStart === true && (tmpl ||  dsr[3] >0) ) {
+               if (dp.autoInsertedStart === true && (tmpl ||  dsr[3] > 0) ) {
                        lintObj = { src: env.page.src, dsr: dsr,
                                                tip: 'Add Start Tag to Fix 
this', inTransclusion: inTransclusion};
                        env.log('lint/missing-start-tag', lintObj);
@@ -124,7 +124,7 @@
        if (DU.hasNodeName(c, "table")) {
                var fc = c.firstChild;
                while (fc) {
-                       if (DU.hasNodeName(fc,"tbody")) {
+                       if (DU.hasNodeName(fc, "tbody")) {
                                var trfc = fc.firstChild;
                                while (trfc) {
                                        if (DU.hasNodeName(trfc, "tr")) {
@@ -176,7 +176,7 @@
 
        var dsr, inTransclusion = false;
        var fosteredSRC = c.innerHTML;
-       while (nextSibling && !DU.hasNodeName(nextSibling,'table')) {
+       while (nextSibling && !DU.hasNodeName(nextSibling, 'table')) {
                fosteredSRC += nextSibling.innerHTML;
                if ( nextSibling === tmpl.last ) {
                        tmpl.done = true;
diff --git a/lib/dom.t.TableFixups.js b/lib/dom.t.TableFixups.js
index 18cd9ba..b7eb914 100644
--- a/lib/dom.t.TableFixups.js
+++ b/lib/dom.t.TableFixups.js
@@ -374,7 +374,7 @@
                                var match1 = 
child.textContent.match(/^(.*?[^|])?\|\|([^|].*)?$/);
                                var match2 = 
child.textContent.match(/^(.*?[^!])?\!\!([^!].*)?$/);
                                if (match1 && match2) {
-                                       match = (match1[1] ||'').length < 
(match2[1] ||'').length ? match1 : match2;
+                                       match = (match1[1] || '').length < 
(match2[1] || '').length ? match1 : match2;
                                } else {
                                        match = match1 || match2;
                                }
diff --git a/lib/dom.wrapTemplates.js b/lib/dom.wrapTemplates.js
index 48e6f75..78f91c7 100644
--- a/lib/dom.wrapTemplates.js
+++ b/lib/dom.wrapTemplates.js
@@ -299,7 +299,7 @@
                        dsr = dp.dsr;
 
                if (tplArray.length > 0) {
-                       var prevTplInfo = tplArray[tplArray.length -1];
+                       var prevTplInfo = tplArray[tplArray.length - 1];
                        if (prevTplInfo.dsr[1] < dsr[0]) {
                                tplArray.push({ wt: 
env.page.src.substring(prevTplInfo.dsr[1], dsr[0]) });
                        }
@@ -692,7 +692,7 @@
                        }
 
                        // Add any trailing wikitext
-                       var lastTplInfo = tplArray[tplArray.length -1];
+                       var lastTplInfo = tplArray[tplArray.length - 1];
                        if (lastTplInfo.dsr[1] < dp1.dsr[1]) {
                                tplArray.push({ wt: 
env.page.src.substring(lastTplInfo.dsr[1], dp1.dsr[1]) });
                        }
@@ -867,7 +867,7 @@
                                                if ( aboutRef && aboutRef.start 
) {
                                                        
tplRanges.push(getDOMRange( env, doc, aboutRef.start, elem, tableNode ));
                                                } else {
-                                                       
env.log("warning/template",'found foster-parented end marker followed',
+                                                       
env.log("warning/template", 'found foster-parented end marker followed',
                                                                        'by 
table, but no start marker!');
                                                }
                                        } else if ( aboutRef ) {
diff --git a/lib/ext.Cite.js b/lib/ext.Cite.js
index 6ca6998..2cf17db 100644
--- a/lib/ext.Cite.js
+++ b/lib/ext.Cite.js
@@ -48,7 +48,7 @@
                opts.pipelineOpts = Util.extendProps({}, opts.pipelineOpts, { 
wrapTemplates: true });
 
                var tsr = extToken.dataAttribs.tsr;
-               opts.srcOffsets = [ tsr[0] +tagWidths[0] +leadingWS.length, 
tsr[1] -tagWidths[1] ];
+               opts.srcOffsets = [ tsr[0] + tagWidths[0] + leadingWS.length, 
tsr[1] - tagWidths[1] ];
 
                // Process ref content
                Util.processContentInPipeline(manager.env, manager.frame, 
content, opts);
@@ -158,7 +158,7 @@
        // It also considers entities equal to their encoding (i.e. '&' === 
'&amp;')
        // and then substitutes % with .
        var v = entities.decodeHTML(val).replace(/\s/g, '_');
-       return encodeURIComponent(v).replace(/%/g,".");
+       return encodeURIComponent(v).replace(/%/g, ".");
 }
 
 RefGroup.prototype.renderLine = function(refsList, ref) {
@@ -251,7 +251,7 @@
                // Notes (references) whose ref doesn't have a name are 
'cite_note-' + index
                // Notes whose ref has a name are 'cite_note-' + name + '-' + 
index
                var n = this.index,
-                       refKey = (1 +n) + '',
+                       refKey = (1 + n) + '',
                        refIdBase = 'cite_ref-' + (refName ? refName + '_' + 
refKey : refKey),
                        noteId = 'cite_note-' + (refName ? refName + '-' + 
refKey : refKey);
 
diff --git a/lib/ext.core.AttributeExpander.js 
b/lib/ext.core.AttributeExpander.js
index 1703941..2693197 100644
--- a/lib/ext.core.AttributeExpander.js
+++ b/lib/ext.core.AttributeExpander.js
@@ -332,7 +332,7 @@
                                                        expandedK = kvs[0].k;
                                                        reparsedKV = true;
                                                        if (!newAttrs) {
-                                                               newAttrs = i 
=== 0 ? [] : expandedAttrs.slice(0, i -1);
+                                                               newAttrs = i 
=== 0 ? [] : expandedAttrs.slice(0, i - 1);
                                                        }
                                                        newAttrs = 
newAttrs.concat(kvs);
                                                }
@@ -427,7 +427,7 @@
                                // Rebuild flattened k-v pairs.
                                var expandedAttrs = [];
                                for (var i = 0; i < eVals.length; i += 2) {
-                                       expandedAttrs.push([eVals[i], eVals[i 
+1]]);
+                                       expandedAttrs.push([eVals[i], eVals[i + 
1]]);
                                }
 
                                // Mark token as having expanded attrs.
diff --git a/lib/ext.core.LinkHandler.js b/lib/ext.core.LinkHandler.js
index 4943e5d..7ed80d5 100644
--- a/lib/ext.core.LinkHandler.js
+++ b/lib/ext.core.LinkHandler.js
@@ -209,7 +209,7 @@
                        // adjust TSR of the DOM-fragment by 2 each on both end.
                        var tsr = token.dataAttribs && token.dataAttribs.tsr;
                        if (tsr && typeof (tsr[0]) === 'number' && typeof 
(tsr[1]) === 'number') {
-                               tsr = [tsr[0] +2, tsr[1] -2];
+                               tsr = [tsr[0] + 2, tsr[1] - 2];
                        } else {
                                tsr = null;
                        }
@@ -358,8 +358,8 @@
                        toks = toks.filter(function(token) { return token !== 
''; });
                        toks = toks.map(function(token, i) {
                                if (token.constructor === TagTk && token.name 
=== 'a') {
-                                       if (toks[i +1] && toks[i 
+1].constructor === EndTagTk &&
-                                               toks[i +1].name === 'a') {
+                                       if (toks[i + 1] && toks[i + 
1].constructor === EndTagTk &&
+                                               toks[i + 1].name === 'a') {
                                                // autonumbered links in the 
stream get rendered
                                                // as an <a> tag with no 
content -- but these ought
                                                // to be treated as plaintext 
since we don't allow
@@ -383,7 +383,7 @@
                if (buildDOMFragment) {
                        // content = [part 0, .. part l-1]
                        // offsets = [start(part-0), end(part l-1)]
-                       var offsets = dataAttribs.tsr ? 
[content[0].srcOffsets[0], content[l -1].srcOffsets[1]] : null;
+                       var offsets = dataAttribs.tsr ? 
[content[0].srcOffsets[0], content[l - 1].srcOffsets[1]] : null;
                        content = [ Util.getDOMFragmentToken(out, offsets, 
{noPWrapping: true, noPre: true, token: token}) ];
                } else {
                        content = out;
diff --git a/lib/ext.core.ListHandler.js b/lib/ext.core.ListHandler.js
index 248aceb..e4838a0 100644
--- a/lib/ext.core.ListHandler.js
+++ b/lib/ext.core.ListHandler.js
@@ -245,7 +245,7 @@
 };
 
 ListHandler.prototype.isDtDd = function(a, b) {
-       var ab = [a,b].sort();
+       var ab = [a, b].sort();
        return (ab[0] === ':' && ab[1] === ';');
 };
 
@@ -391,13 +391,13 @@
                        if ( i === prefixLen ) {
                                this.env.log("trace/list", 
this.manager.pipelineId,
                                        "    -> increased nesting: first");
-                               listDP     = makeDP(0,0);
-                               listItemDP = makeDP(0,i +1);
+                               listDP     = makeDP(0, 0);
+                               listItemDP = makeDP(0, i + 1);
                        } else {
                                this.env.log("trace/list", 
this.manager.pipelineId,
                                        "    -> increased nesting: 2nd and 
higher");
-                               listDP     = makeDP(i,i);
-                               listItemDP = makeDP(i,i +1);
+                               listDP     = makeDP(i, i);
+                               listItemDP = makeDP(i, i + 1);
                        }
 
                        tokens = tokens.concat( this.pushList(
diff --git a/lib/ext.core.NoIncludeOnly.js b/lib/ext.core.NoIncludeOnly.js
index 682daa0..e2e9e18 100644
--- a/lib/ext.core.NoIncludeOnly.js
+++ b/lib/ext.core.NoIncludeOnly.js
@@ -233,7 +233,7 @@
                        // stripped token (above) got the entire tsr value, we 
are artificially
                        // setting the tsr on this node to zero-width to ensure 
that
                        // DSR computation comes out correct.
-                       var tsr = (end.dataAttribs || {tsr: [null,null]}).tsr;
+                       var tsr = (end.dataAttribs || {tsr: [null, null]}).tsr;
                        tokens.push(buildMetaToken(manager, name, true, 
[tsr[1], tsr[1]], ''));
                }
        }
diff --git a/lib/ext.core.ParagraphWrapper.js b/lib/ext.core.ParagraphWrapper.js
index 804be66..be93823 100644
--- a/lib/ext.core.ParagraphWrapper.js
+++ b/lib/ext.core.ParagraphWrapper.js
@@ -91,14 +91,14 @@
        var newRes = null;
        for (var i = 0, n = res.length; i < n; i++) {
                var t = res[i];
-               if (i +2 < n && t.constructor === TagTk && t.name === 'p' && 
!t.isHTMLTag() &&
-                       Consts.HTML.FormattingTags.has((res[i +1].name || 
'').toUpperCase()) &&
-                       res[i +2].constructor === EndTagTk && res[i +2].name 
=== 'p' && !res[i +2].isHTMLTag()) {
+               if (i + 2 < n && t.constructor === TagTk && t.name === 'p' && 
!t.isHTMLTag() &&
+                       Consts.HTML.FormattingTags.has((res[i + 1].name || 
'').toUpperCase()) &&
+                       res[i + 2].constructor === EndTagTk && res[i + 2].name 
=== 'p' && !res[i + 2].isHTMLTag()) {
                        // Init newRes
                        if (newRes === null) {
                                newRes = i === 0 ? [] : res.slice(0, i);
                        }
-                       newRes.push(res[i +1]);
+                       newRes.push(res[i + 1]);
                        i += 2;
                } else if (newRes !== null) {
                        newRes.push(t);
@@ -223,7 +223,7 @@
                                break;
                        }
                }
-               out.splice( i +1, 0, new EndTagTk('p') );
+               out.splice( i + 1, 0, new EndTagTk('p') );
                this.hasOpenPTag = false;
        }
 };
@@ -252,7 +252,7 @@
                                // here will eliminate useless array copying. 
Not sure if this
                                // optimization is worth this check.
                                if (!t.name || 
!Consts.HTML.FormattingTags.has(t.name.toUpperCase())
-                                       || !(i +1 < n && 
Util.isBlockToken(toks[i +1]))) {
+                                       || !(i + 1 < n && 
Util.isBlockToken(toks[i + 1]))) {
                                        newToks.push(new TagTk('p'));
                                        this.hasOpenPTag = true;
                                }
diff --git a/lib/ext.core.ParserFunctions.js b/lib/ext.core.ParserFunctions.js
index 2a08cde..f08d1be 100644
--- a/lib/ext.core.ParserFunctions.js
+++ b/lib/ext.core.ParserFunctions.js
@@ -190,7 +190,7 @@
                                        cb: function( i, val ) {
                                                setImmediate(
                                                        
self._switchLookupFallback.bind( self, frame,
-                                                               kvs.slice(i 
+1), key, dict, cb, val )
+                                                               kvs.slice(i + 
1), key, dict, cb, val )
                                                );
                                        }.bind( self, i ),
                                        asyncCB: cb
@@ -452,16 +452,16 @@
 
 
 // TODO: These are just quick wrappers for now, optimize!
-[['year','Y'], ['month','m'], ['monthname','F'], ['monthabbrev','M'],
- ['week', 'W'], ['day','j'], ['day2','d'], ['dow', 'w'], ['dayname','l'],
- ['time','H:i'], ['hour','H'], ['week','W'],
+[['year', 'Y'], ['month', 'm'], ['monthname', 'F'], ['monthabbrev', 'M'],
+ ['week', 'W'], ['day', 'j'], ['day2', 'd'], ['dow', 'w'], ['dayname', 'l'],
+ ['time', 'H:i'], ['hour', 'H'], ['week', 'W'],
  ['timestamp', 'YmdHis']].forEach(function(a) {
         var name = a[0], format = a[1];
-        ParserFunctions.prototype['pf_current' +name] =
+        ParserFunctions.prototype['pf_current' + name] =
                 function( token, frame, cb, args ) {
                         cb( this._pf_time_tokens( format, [], {} ) );
                 };
-        ParserFunctions.prototype['pf_local' +name] =
+        ParserFunctions.prototype['pf_local' + name] =
                 function( token, frame, cb, args ) {
                         cb( this._pf_timel_tokens( format, [], {} ) );
                 };
@@ -528,11 +528,11 @@
        var offset = date.getTimezoneOffset();
        // XXX: parse forcetime and change date
        // when testing, look aside to other date?
-       if (typeof (env.conf.wiki.fakeTimestamp) ==='number') {
+       if (typeof (env.conf.wiki.fakeTimestamp) === 'number') {
                // php time stamps are in seconds; js timestamps are in 
milliseconds
                date.setTime(env.conf.wiki.fakeTimestamp * 1000);
        }
-       if (typeof (env.conf.wiki.timezoneOffset) ==='number') {
+       if (typeof (env.conf.wiki.timezoneOffset) === 'number') {
                // this is the wiki's $wgLocaltimezone (if set)
                offset = env.conf.wiki.timezoneOffset;
        }
@@ -565,7 +565,7 @@
        return this.format('D, d M Y H:i:s O');
 };
 ParsoidDate.prototype.getTimezoneOffset = function() {
-       return (this._date.getTime() - this._localdate.getTime()) /(60 *1000);
+       return (this._date.getTime() - this._localdate.getTime()) / (60 * 1000);
 };
 var getJan1 = function(d) {
        d = new Date(d.getTime());
@@ -591,8 +591,8 @@
        return Math.ceil((this._localdate.valueOf() - start.valueOf()) / 
86400000);
 };
 // proxy certain methods of _date into ParsoidDate.
-['getUTCHours','getUTCMinutes','getUTCSeconds',
- 'getTime','valueOf'].forEach(function(f) {
+['getUTCHours', 'getUTCMinutes', 'getUTCSeconds',
+ 'getTime', 'valueOf'].forEach(function(f) {
        ParsoidDate.prototype[f] = function() {
                var d = this._date;
                return d[f].apply(d, arguments);
@@ -640,7 +640,7 @@
     M: function() { return 
ParsoidDate.replaceChars.shortMonths[this.getMonth()]; },
     n: function() { return this.getMonth() + 1; },
     t: function() {
-               return new Date(this.getFullYear(), this.getMonth() +1, 
0).getDate();
+               return new Date(this.getFullYear(), this.getMonth() + 1, 
0).getDate();
        },
     // Year
     L: function() {
@@ -701,7 +701,7 @@
                        args,
                        function( item, cb ) {
                                // SSS FIXME: By binding null to cb's first 
arg, we are swallowing all errors!
-                               var resCB = 
Util.buildAsyncOutputBufferCB(cb.bind(this,null));
+                               var resCB = 
Util.buildAsyncOutputBufferCB(cb.bind(this, null));
                                self.expandKV(item, resCB, '', 
'text/x-mediawiki/expanded', false);
                        },
                        function( err, expandedArgs ) {
@@ -849,7 +849,7 @@
        ] } );
 };
 ParserFunctions.prototype.pf_servername = function( token, frame, cb, args ) {
-       cb( { tokens: [this.env.conf.wiki.server.replace(/^https?:\/\//,'')] } 
);
+       cb( { tokens: [this.env.conf.wiki.server.replace(/^https?:\/\//, '')] } 
);
 };
 ParserFunctions.prototype.pf_talkpagename = function( token, frame, cb, args ) 
{
        cb( { tokens: [this.env.page.name.replace(/^[^:]:/, 'Talk:' ) || ''] } 
);
diff --git a/lib/ext.core.PreHandler.js b/lib/ext.core.PreHandler.js
index 7e519b7..4585c51 100644
--- a/lib/ext.core.PreHandler.js
+++ b/lib/ext.core.PreHandler.js
@@ -211,7 +211,7 @@
        if (this.tokens.length > 0) {
                var da = null;
                if (this.preTSR !== -1) {
-                       da = { tsr: [this.preTSR, this.preTSR +1] };
+                       da = { tsr: [this.preTSR, this.preTSR + 1] };
                }
                ret = [ new TagTk('pre', [], da) ].concat( this.tokens );
                ret.push(new EndTagTk('pre'));
diff --git a/lib/ext.core.QuoteTransformer.js b/lib/ext.core.QuoteTransformer.js
index e17c880..6a78939 100644
--- a/lib/ext.core.QuoteTransformer.js
+++ b/lib/ext.core.QuoteTransformer.js
@@ -75,7 +75,7 @@
                this.currentChunk.push( prevToken ? prevToken : '' );
        }
 
-       if (qlen ===2 || qlen ===3 || qlen ===5) {
+       if (qlen === 2 || qlen === 3 || qlen === 5) {
                        this._startNewChunk();
                        this.currentChunk.push( token );
                        this._startNewChunk();
@@ -106,10 +106,10 @@
        // count number of bold and italics
        var numbold = 0, numitalics = 0;
        for (i = 1; i < this.chunks.length; i += 2) {
-               console.assert(this.chunks[i].length ===1); // quote token
+               console.assert(this.chunks[i].length === 1); // quote token
                qlen = this.chunks[i][0].value.length;
-               if (qlen ===2 || qlen ===5) { numitalics++; }
-               if (qlen ===3 || qlen ===5) { numbold++; }
+               if (qlen === 2 || qlen === 5) { numitalics++; }
+               if (qlen === 3 || qlen === 5) { numbold++; }
        }
 
        // balance out tokens, convert placeholders into tags
@@ -123,7 +123,7 @@
                        // find the first previous token which is text
                        // (this is an approximation, since the wikitext 
algorithm looks
                        // at the raw unparsed source here)
-                       var prevChunk = this.chunks[i -1], ctxPrevToken = '';
+                       var prevChunk = this.chunks[i - 1], ctxPrevToken = '';
                        for (var j = prevChunk.length - 1;
                                 ctxPrevToken.length < 2 && j >= 0;
                                 j--) {
@@ -194,14 +194,14 @@
 // italic tags. In the process, one quote needs to be converted back to text.
 QuoteTransformer.prototype.convertBold = function( i ) {
        // this should be a bold tag.
-       console.assert(i > 0 && this.chunks[i].length ===1 &&
+       console.assert(i > 0 && this.chunks[i].length === 1 &&
                                   this.chunks[i][0].value.length === 3);
        // we're going to convert it to a single plain text ' plus an italic tag
-       this.chunks[i -1].push( "'" );
+       this.chunks[i - 1].push( "'" );
        var oldbold = this.chunks[i][0];
        var tsr = oldbold.dataAttribs ? oldbold.dataAttribs.tsr : null;
        if ( tsr ) {
-               tsr = [ tsr[0] +1, tsr[1] ];
+               tsr = [ tsr[0] + 1, tsr[1] ];
        }
        var newbold = new SelfclosingTagTk( 'mw-quote', [], { tsr: tsr });
        newbold.value = "''"; // italic!
@@ -307,9 +307,9 @@
        // make tsr
        var tsr = oldtag.dataAttribs ? oldtag.dataAttribs.tsr : null;
        var startpos = tsr ? tsr[0] : null, endpos = tsr ? tsr[1] : null;
-       for (var i =0; i <tags.length; i++) {
+       for (var i = 0; i < tags.length; i++) {
                if (tsr) {
-                       if ( i ===0 && ignoreBogusTwo ) {
+                       if ( i === 0 && ignoreBogusTwo ) {
                                
this.last[tags[i].name].dataAttribs.autoInsertedEnd = true;
                        } else if ( i === 2 && ignoreBogusTwo ) {
                                tags[i].dataAttribs.autoInsertedStart = true;
diff --git a/lib/ext.core.Sanitizer.js b/lib/ext.core.Sanitizer.js
index 8efc2bb..80478d8 100644
--- a/lib/ext.core.Sanitizer.js
+++ b/lib/ext.core.Sanitizer.js
@@ -698,7 +698,7 @@
        // XXX: validate token type according to whitelist and convert non-ok 
ones
        // back to text.
 
-       var i,l,k,v,kv;
+       var i, l, k, v, kv;
        var attribs = token.attribs;
        var noEndTagSet = this.constants.noEndTagSet;
 
diff --git a/lib/ext.core.TokenStreamPatcher.js 
b/lib/ext.core.TokenStreamPatcher.js
index 6237e05..4a0fa08 100644
--- a/lib/ext.core.TokenStreamPatcher.js
+++ b/lib/ext.core.TokenStreamPatcher.js
@@ -58,7 +58,7 @@
 };
 
 TokenStreamPatcher.prototype.onNewline = function(token) {
-       this.srcOffset = (token.dataAttribs.tsr || [null,null])[1];
+       this.srcOffset = (token.dataAttribs.tsr || [null, null])[1];
        this.sol = true;
        return {tokens: [token]};
 };
@@ -161,12 +161,12 @@
                case CommentTk: {
                        // Comments don't change SOL state
                        // Update srcOffset
-                       this.srcOffset = (token.dataAttribs.tsr || 
[null,null])[1];
+                       this.srcOffset = (token.dataAttribs.tsr || [null, 
null])[1];
                        break;
                }
                case SelfclosingTagTk: {
                        if (token.name === "meta" && token.dataAttribs.stx !== 
"html") {
-                               this.srcOffset = (token.dataAttribs.tsr || 
[null,null])[1];
+                               this.srcOffset = (token.dataAttribs.tsr || 
[null, null])[1];
                        } else {
                                this.clearSOL();
                        }
diff --git a/lib/ext.util.TokenCollector.js b/lib/ext.util.TokenCollector.js
index 3306186..d9699dd 100644
--- a/lib/ext.util.TokenCollector.js
+++ b/lib/ext.util.TokenCollector.js
@@ -67,9 +67,9 @@
                if (this.scopeStack.length === 0) {
                        // Set up transforms
                        this.manager.env.dp( 'starting collection on ', token );
-                       this.manager.addTransform( this._onAnyToken.bind ( this 
),"TokenCollector:_onAnyToken",
+                       this.manager.addTransform( this._onAnyToken.bind ( this 
), "TokenCollector:_onAnyToken",
                                        this.rank + this._anyDelta, 'any' );
-                       this.manager.addTransform( this._onDelimiterToken.bind( 
this ),"TokenCollector:_onDelimiterToken:end",
+                       this.manager.addTransform( this._onDelimiterToken.bind( 
this ), "TokenCollector:_onDelimiterToken:end",
                                        this.rank, 'end' );
                }
 
@@ -144,7 +144,7 @@
  */
 TokenCollector.prototype._onAnyToken = function( token, frame, cb ) {
        // Simply collect anything ordinary in between
-       this.scopeStack[this.scopeStack.length -1].push( token );
+       this.scopeStack[this.scopeStack.length - 1].push( token );
        return { };
 };
 
diff --git a/lib/jsutils.js b/lib/jsutils.js
index 5aaf6d5..a5dde51 100644
--- a/lib/jsutils.js
+++ b/lib/jsutils.js
@@ -75,8 +75,8 @@
        // an object, with a `flags` property (as shown in the example above).
        rejoin: function() {
                var regexps = Array.prototype.slice.call(arguments);
-               var last = regexps[regexps.length -1], flags;
-               if (typeof (last) ==='object') {
+               var last = regexps[regexps.length - 1], flags;
+               if (typeof (last) === 'object') {
                        if (last instanceof RegExp) {
                                flags = /\/([gimy]*)$/.exec(last.toString())[1];
                        } else {
@@ -161,7 +161,7 @@
        //
        mkPromised: function( callback, names ) {
                var res, rej;
-               var p = new Promise(function( _res, _rej ) { res =_res; rej 
=_rej; });
+               var p = new Promise(function( _res, _rej ) { res = _res; rej = 
_rej; });
                var f = function( e, v ) {
                        if ( e ) {
                                rej( e );
diff --git a/lib/mediawiki.ApiRequest.js b/lib/mediawiki.ApiRequest.js
index 6d14a16..95aced9 100644
--- a/lib/mediawiki.ApiRequest.js
+++ b/lib/mediawiki.ApiRequest.js
@@ -468,8 +468,8 @@
        // Ditto for page properties (like DISPLAYTITLE and DEFAULTSORT)
        if (Array.isArray(data.expandtemplates.properties)) {
                data.expandtemplates.properties.forEach(function(prop) {
-                       if (prop.name ==='displaytitle' || prop.name 
==='defaultsort') {
-                               src += '\n{{' +prop.name.toUpperCase() +':' + 
prop['*'] + '}}';
+                       if (prop.name === 'displaytitle' || prop.name === 
'defaultsort') {
+                               src += '\n{{' + prop.name.toUpperCase() + ':' + 
prop['*'] + '}}';
                        }
                });
        }
diff --git a/lib/mediawiki.DOMPostProcessor.js 
b/lib/mediawiki.DOMPostProcessor.js
index c09f289..4ce9d52 100644
--- a/lib/mediawiki.DOMPostProcessor.js
+++ b/lib/mediawiki.DOMPostProcessor.js
@@ -279,7 +279,7 @@
        var mwrPrefix = url.resolve('http://',
                                    env.conf.wiki.baseURI + 'Special:Redirect/' 
);
        document.documentElement.setAttribute('prefix', prefixes.join(' '));
-       document.head.setAttribute('prefix', 'mwr: ' +mwrPrefix);
+       document.head.setAttribute('prefix', 'mwr: ' + mwrPrefix);
 
        // add <head> content based on page meta data:
 
@@ -307,7 +307,7 @@
                Object.keys( mdm ).forEach(function( k ) {
                        // evaluate a function, or perform sprintf-style 
formatting, or
                        // use string directly, depending on value in 
metadataMap
-                       var v = ( typeof (mdm[k]) ==='function' ) ? mdm[k]( m ) 
:
+                       var v = ( typeof (mdm[k]) === 'function' ) ? mdm[k]( m 
) :
                                mdm[k].indexOf('%') >= 0 ? util.format( mdm[k], 
m.get(f) ) :
                                mdm[k];
                        attrs[k] = v;
diff --git a/lib/mediawiki.DOMUtils.js b/lib/mediawiki.DOMUtils.js
index eb265ea..bf1786a 100644
--- a/lib/mediawiki.DOMUtils.js
+++ b/lib/mediawiki.DOMUtils.js
@@ -54,7 +54,7 @@
        },
 
        debugOut: function(node) {
-               return JSON.stringify(node.outerHTML || node.nodeValue || 
'').substr(0,40);
+               return JSON.stringify(node.outerHTML || node.nodeValue || 
'').substr(0, 40);
        },
 
        /**
@@ -807,9 +807,9 @@
                                // We dont want the trailing newline of the 
last child of the pre
                                // to contribute a pre-correction since it 
doesn't add new content
                                // in the pre-node after the text
-                               numNLs = (textNode.nodeValue.match(/\n./g) 
||[]).length;
+                               numNLs = (textNode.nodeValue.match(/\n./g) || 
[]).length;
                        } else {
-                               numNLs = (textNode.nodeValue.match(/\n/g) 
||[]).length;
+                               numNLs = (textNode.nodeValue.match(/\n/g) || 
[]).length;
                        }
                        return numNLs;
                } else {
@@ -1874,7 +1874,7 @@
                var tokenTsr = opts.tsr || (token.dataAttribs ? 
token.dataAttribs.tsr : null);
                if (tokenTsr) {
                        firstWrapperToken.dataAttribs.tsr = tokenTsr;
-                       var endTsr = [tokenTsr[1],tokenTsr[1]];
+                       var endTsr = [tokenTsr[1], tokenTsr[1]];
                        for (var i = 1; i < toks.length; i++) {
                                toks[i].dataAttribs.tsr = endTsr;
                        }
@@ -2145,7 +2145,7 @@
                // that the string "-->" never shows up.  (See above.)
                return trueValue
                        .replace(/--(&(amp;)*gt;|>)/g, function(s) {
-                               return s ==='-->' ? '--&gt;' : '--&amp;' 
+s.slice(3);
+                               return s === '-->' ? '--&gt;' : '--&amp;' + 
s.slice(3);
                        });
        },
 
@@ -2184,7 +2184,7 @@
                        innerXML: false
                };
        }
-       if (doc.nodeName ==='#document') {
+       if (doc.nodeName === '#document') {
                html = XMLSerializer.serializeToString(doc.documentElement, 
options);
        } else {
                html = XMLSerializer.serializeToString(doc, options);
@@ -2290,11 +2290,11 @@
                // reassemble text nodes split by a comment or span, if 
necessary
                node.normalize();
                // now recurse.
-               if (node.nodeName ==='PRE') {
+               if (node.nodeName === 'PRE') {
                        // hack, since PHP adds a newline before </pre>
                        stripLeadingWS = false;
                        stripTrailingWS = true;
-               } else if (node.nodeName ==='SPAN' &&
+               } else if (node.nodeName === 'SPAN' &&
                                   /^mw[:]/.test(node.getAttribute('typeof') || 
'')) {
                        // SPAN is transparent; pass the strip parameters down 
to kids
                        /* jshint noempty: false */
diff --git a/lib/mediawiki.TokenTransformManager.js 
b/lib/mediawiki.TokenTransformManager.js
index ba01329..adab017 100644
--- a/lib/mediawiki.TokenTransformManager.js
+++ b/lib/mediawiki.TokenTransformManager.js
@@ -608,7 +608,7 @@
                                        if ( resTokens.length === 1 ) {
                                                var soleToken = resTokens[0];
                                                if ( soleToken === undefined ) {
-                                                       this.env.log("error", 
'transformer',transformer.rank,
+                                                       this.env.log("error", 
'transformer', transformer.rank,
                                                                        
'returned undefined token!');
                                                        resTokens.shift();
                                                        break;
@@ -1170,7 +1170,7 @@
        if (this.siblingChunks.length) {
                for (var i = 0, len = this.siblingChunks.length; i < len; i++) {
                        this._callParentCB({tokens: this.siblingChunks[i],
-                               async: (i < len -1)? true : async});
+                               async: (i < len - 1)? true : async});
                }
                this.siblingChunks = [];
        } else {
diff --git a/lib/mediawiki.Util.js b/lib/mediawiki.Util.js
index 760efb3..40e7490 100644
--- a/lib/mediawiki.Util.js
+++ b/lib/mediawiki.Util.js
@@ -196,7 +196,7 @@
                        obj.usePHPPreProcessor = obj.fetchTemplates && 
Util.booleanOption( opts.usephppreprocessor );
                }
                if (opts.maxDepth !== undefined) {
-                       obj.maxDepth = typeof (opts.maxdepth) ==='number' ? 
opts.maxdepth : obj.maxDepth;
+                       obj.maxDepth = typeof (opts.maxdepth) === 'number' ? 
opts.maxdepth : obj.maxDepth;
                }
                if (opts.dp !== undefined) {
                        obj.storeDataParsoid = Util.booleanOption( opts.dp );
@@ -365,7 +365,7 @@
         */
        extendProps: function() {
                function internalExtend(target, obj) {
-                       var allKeys = 
[].concat(Object.keys(target),Object.keys(obj));
+                       var allKeys = [].concat(Object.keys(target), 
Object.keys(obj));
                        for (var i = 0, numKeys = allKeys.length; i < numKeys; 
i++) {
                                var k = allKeys[i];
                                if (target[k] === undefined || target[k] === 
null) {
@@ -493,12 +493,12 @@
                        tsr = tsr0;
 
                // Add one NlTk between each pair, hence toks.length-1
-               for (var i = 0, n = toks.length -1; i < n; i++) {
+               for (var i = 0, n = toks.length - 1; i < n; i++) {
                        ret.push(toks[i]);
                        var nlTk = new pd.NlTk();
                        if (tsr !== undefined) {
                                tsr += toks[i].length;
-                               nlTk.dataAttribs = { tsr: [tsr, tsr +1] };
+                               nlTk.dataAttribs = { tsr: [tsr, tsr + 1] };
                        }
                        ret.push(nlTk);
                }
@@ -925,7 +925,7 @@
                // Strip 'end' token
                if ( tokens.length && tokens.last().constructor === pd.EOFTk ) {
                        var rank = tokens.rank;
-                       tokens = tokens.slice(0,-1);
+                       tokens = tokens.slice(0, -1);
                        tokens.rank = rank;
                }
 
diff --git a/lib/mediawiki.WikiConfig.js b/lib/mediawiki.WikiConfig.js
index 397679e..e63ba1b 100644
--- a/lib/mediawiki.WikiConfig.js
+++ b/lib/mediawiki.WikiConfig.js
@@ -179,7 +179,7 @@
                        var matches = s.match(regExp);
                        if (matches) {
                                var groups = matches.slice(1);
-                               for (var i =0; i <groups.length; i++) {
+                               for (var i = 0; i < groups.length; i++) {
                                        if (groups[i] !== undefined) {
                                                // The interwiki prefix: 'en', 
'de' etc
                                                var key = keys[i];
@@ -535,7 +535,7 @@
                }
                first = false;
                aliases = this._interpolatedMagicWordAliases[option];
-               if (aliases === undefined) { aliases = ['UNKNOWN_' +option]; }
+               if (aliases === undefined) { aliases = ['UNKNOWN_' + option]; }
                regexString += aliases.join( '|' )
                        .replace( /((?:^|\|)(?:[^\$]|\$[^1])*)($|\|)/g, 
'$1$$1$2' )
                        .replace( /\$1/g, '(.*)' );
@@ -613,7 +613,7 @@
                var matches = s.match(regExp);
                if (matches) {
                        var groups = matches.slice(1);
-                       for (var i =0; i <groups.length; i++) {
+                       for (var i = 0; i < groups.length; i++) {
                                if (groups[i] !== undefined) {
                                        return [
                                                // The key: 'PMID', 'RFC' etc
diff --git a/lib/mediawiki.WikitextSerializer.js 
b/lib/mediawiki.WikitextSerializer.js
index 4e6e150..c9c2b49 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -138,7 +138,7 @@
 WSP._serializeHTMLTag = function( state, node, wrapperUnmodified ) {
        if (wrapperUnmodified) {
                var dsr = DU.getDataParsoid( node ).dsr;
-               return state.getOrigSrc(dsr[0], dsr[0] +dsr[2]);
+               return state.getOrigSrc(dsr[0], dsr[0] + dsr[2]);
        }
 
        var token = DU.mkTagTk(node);
@@ -169,7 +169,7 @@
 WSP._serializeHTMLEndTag = function( state, node, wrapperUnmodified ) {
        if (wrapperUnmodified) {
                var dsr = DU.getDataParsoid( node ).dsr;
-               return state.getOrigSrc(dsr[1] -dsr[3], dsr[1]);
+               return state.getOrigSrc(dsr[1] - dsr[3], dsr[1]);
        }
 
        var token = DU.mkEndTagTk(node);
@@ -591,14 +591,14 @@
                                                href = 
firstA.getAttribute('href');
                                                ref = 
node.ownerDocument.querySelector(href);
                                                if (ref) {
-                                                       extraDebug += ' [own 
doc: ' +ref.outerHTML +']';
+                                                       extraDebug += ' [own 
doc: ' + ref.outerHTML + ']';
                                                }
                                                ref = 
state.env.page.dom.ownerDocument.querySelector(href);
                                                if (ref) {
-                                                       extraDebug += ' [main 
doc: ' +ref.outerHTML +']';
+                                                       extraDebug += ' [main 
doc: ' + ref.outerHTML + ']';
                                                }
                                                if (!extraDebug) {
-                                                       extraDebug = ' 
[reference ' +href +' not found]';
+                                                       extraDebug = ' 
[reference ' + href + ' not found]';
                                                }
                                        }
                                        // Bail out of here since we cannot 
meaningfully recover
@@ -1228,7 +1228,7 @@
        var out = pieces[0];
        for (var i = 1; i < pieces.length; i += 4) {
                out += pieces[i];
-               var nowiki = pieces[i +1], rest = pieces[i +2];
+               var nowiki = pieces[i + 1], rest = pieces[i + 2];
                // Ignore comments
                var htmlTags = rest.match(/<[^!][^<>]*>/g) || [];
 
@@ -1257,7 +1257,7 @@
                if ( !reqd ) {
                        nowiki = nowiki.replace(/^<nowiki>(\s+)<\/nowiki>/, 
'$1');
                }
-               out = out + nowiki + rest + pieces[i +3];
+               out = out + nowiki + rest + pieces[i + 3];
        }
        return out;
 }
@@ -1294,40 +1294,40 @@
                var stack = [], quotesOnStack = 0;
                var n = p.length;
                var nowiki = false, ref = false, tag, selfClose;
-               for (var j =1; j <n; j +=2) {
+               for (var j = 1; j < n; j += 2) {
                        // For HTML tags, pull out just the tag name for 
clearer code below.
                        tag = (/^<(\/?\w+)/.exec(p[j]) || '' )[1] || p[j];
                        selfClose = false;
                        if (/\/>$/.test(p[j])) { tag += '/'; selfClose = true; }
                        // Ignore <ref>..</ref> sections
-                       if (tag ==='ref') { ref = true; continue; }
+                       if (tag === 'ref') { ref = true; continue; }
                        if (ref) {
-                               if (tag ==='/ref') { ref = false; }
+                               if (tag === '/ref') { ref = false; }
                                continue;
                        }
 
                        // Ignore <nowiki>..</nowiki> sections
-                       if (tag ==='nowiki') { nowiki = true; continue; }
+                       if (tag === 'nowiki') { nowiki = true; continue; }
                        if (nowiki) {
-                               if (tag ==='/nowiki') { nowiki = false; }
+                               if (tag === '/nowiki') { nowiki = false; }
                                continue;
                        }
 
-                       if (tag ===']]') {
-                               if (stack.pop() !=='[[') { return line; }
-                       } else if (tag ==='}}') {
-                               if (stack.pop() !=='{{') { return line; }
-                       } else if (tag[0] ==='/') { // closing html tag
+                       if (tag === ']]') {
+                               if (stack.pop() !== '[[') { return line; }
+                       } else if (tag === '}}') {
+                               if (stack.pop() !== '{{') { return line; }
+                       } else if (tag[0] === '/') { // closing html tag
                                // match html/ext tags
                                var opentag = stack.pop();
-                               if (tag !== ('/' +opentag)) {
+                               if (tag !== ('/' + opentag)) {
                                        return line;
                                }
-                       } else if (tag ==='nowiki/') {
+                       } else if (tag === 'nowiki/') {
                                // We only want to process:
                                // - trailing single quotes (bar')
                                // - or single quotes by themselves without a 
preceding '' sequence
-                               if (/'$/.test(p[j -1]) && !(p[j -1] ==="'" && 
/''$/.test(p[j -2])) &&
+                               if (/'$/.test(p[j - 1]) && !(p[j - 1] === "'" 
&& /''$/.test(p[j - 2])) &&
                                        // Consider <b>foo<i>bar'</i>baz</b> or 
<b>foo'<i>bar'</i>baz</b>.
                                        // The <nowiki/> before the <i> or </i> 
cannot be stripped
                                        // if the <i> is embedded inside 
another quote.
@@ -1335,11 +1335,11 @@
                                        // The only strippable scenario with a 
single quote elt on stack
                                        // is: ''bar'<nowiki/>''
                                        //   -> ["", "''", "bar'", "<nowiki/>", 
"", "''"]
-                                       || (quotesOnStack ===1
-                                               && j +2 < n
-                                               && p[j +1] ===""
-                                               && p[j +2][0] ==="'"
-                                               && p[j +2] 
===stack[stack.length -1])
+                                       || (quotesOnStack === 1
+                                               && j + 2 < n
+                                               && p[j + 1] === ""
+                                               && p[j + 2][0] === "'"
+                                               && p[j + 2] === 
stack[stack.length - 1])
                                        )) {
                                        nowiki_index = j;
                                }
@@ -1350,12 +1350,12 @@
                                //   mediawiki.wikitext.constants.js, <br> is 
the most common
                                //   culprit. )
                                continue;
-                       } else if (tag[0] ==="'" && stack[stack.length -1] 
===tag) {
+                       } else if (tag[0] === "'" && stack[stack.length - 1] 
=== tag) {
                                stack.pop();
                                quotesOnStack--;
                        } else {
                                stack.push(tag);
-                               if (tag[0] ==="'") { quotesOnStack++; }
+                               if (tag[0] === "'") { quotesOnStack++; }
                        }
                }
 
@@ -1407,7 +1407,7 @@
                        var accum = function(chunk) { out += chunk; };
                        state.emitSepAndOutput(chunk, node, accum, "OUT:");
                        state.atStartOfOutput = false;
-                       if (atEOF ==='EOF') {
+                       if (atEOF === 'EOF') {
                                state.flushLine(accum);
                        }
                };
diff --git a/lib/mediawiki.parser.defines.js b/lib/mediawiki.parser.defines.js
index 1e0919e..1e1dc9e 100644
--- a/lib/mediawiki.parser.defines.js
+++ b/lib/mediawiki.parser.defines.js
@@ -129,7 +129,7 @@
        setAttribute: function( name, value ) {
                requireUtil();
                // First look for the attribute and change the last match if 
found.
-               for ( var i = this.attribs.length -1; i >= 0; i-- ) {
+               for ( var i = this.attribs.length - 1; i >= 0; i-- ) {
                        var kv = this.attribs[i],
                                k = kv.k;
                        if ( k.constructor === String && k.toLowerCase() === 
name ) {
diff --git a/lib/mediawiki.parser.environment.js 
b/lib/mediawiki.parser.environment.js
index 25c8a74..c51447c 100644
--- a/lib/mediawiki.parser.environment.js
+++ b/lib/mediawiki.parser.environment.js
@@ -148,7 +148,7 @@
  * @param {String or Object} page source or metadata
  */
 MWParserEnvironment.prototype.setPageSrcInfo = function( src_or_metadata ) {
-       if (typeof (src_or_metadata) ==='string' || src_or_metadata ===null) {
+       if (typeof (src_or_metadata) === 'string' || src_or_metadata === null) {
                this.page.meta = { revision: {} };
                this.page.src = src_or_metadata || '';
                return;
@@ -291,7 +291,7 @@
        }
 
        if (!prefix) {
-               this.log("error","No prefix provided!");
+               this.log("error", "No prefix provided!");
                cb(new Error("Wiki prefix not provided"));
                return;
        }
diff --git a/lib/mediawiki.parser.js b/lib/mediawiki.parser.js
index dfbd600..07877d9 100644
--- a/lib/mediawiki.parser.js
+++ b/lib/mediawiki.parser.js
@@ -258,7 +258,7 @@
 
                // connect with previous stage
                if ( i ) {
-                       stage.addListenersOn( stages[i -1] );
+                       stage.addListenersOn( stages[i - 1] );
                }
                stages.push( stage );
        }
@@ -291,9 +291,9 @@
                cacheKey += '::attrExpansion';
        }
        if ( options.extTag ) {
-               cacheKey += '::' +options.extTag;
+               cacheKey += '::' + options.extTag;
                if ( options.extTagId ) {
-                       cacheKey += '::' +options.extTagId;
+                       cacheKey += '::' + options.extTagId;
                }
        }
        return cacheKey;
diff --git a/lib/mediawiki.tokenizer.utils.js b/lib/mediawiki.tokenizer.utils.js
index 97a5480..233b85f 100644
--- a/lib/mediawiki.tokenizer.utils.js
+++ b/lib/mediawiki.tokenizer.utils.js
@@ -193,7 +193,7 @@
                                                stops.onStack('table') && (
                                                        counters.tableCellArg 
|| (
                                                                pos < 
input.length - 1
-                                                               && 
/[}|]/.test(input[pos +1])
+                                                               && 
/[}|]/.test(input[pos + 1])
                                                        )
                                                )
                                        );
@@ -248,7 +248,7 @@
                                // So, the /^\n/ part of the regexp is already 
satisfied.
                                // Look for /\s*[!|]/ below.
                                var i, n = input.length;
-                               for (i = pos +1; i < n; i++) {
+                               for (i = pos + 1; i < n; i++) {
                                        var d = input[i];
                                        if (/[!|]/.test(d)) {
                                                return true;
diff --git a/lib/mediawiki.wikitext.constants.js 
b/lib/mediawiki.wikitext.constants.js
index 897e44b..0a8f9ba 100644
--- a/lib/mediawiki.wikitext.constants.js
+++ b/lib/mediawiki.wikitext.constants.js
@@ -249,34 +249,34 @@
        // Known wikitext tag widths -- these are known statically
        // but other widths are computed or updated based on actual wikitext 
usage
        WT_TagWidths: JSUtils.mapObject({
-               "BODY": [0,0],
-               "HTML": [0,0],
-               "HEAD": [0,0],
-               "P": [0,0],
-               "META": [0,0],
-               "TBODY": [0,0],
-               "PRE": [1,0],
-               "OL": [0,0],
-               "UL": [0,0],
-               "DL": [0,0],
-               "LI": [1,0],
-               "DT": [1,0],
-               "DD": [1,0],
-               "H1": [1,1],
-               "H2": [2,2],
-               "H3": [3,3],
-               "H4": [4,4],
-               "H5": [5,5],
-               "H6": [6,6],
-               "HR": [4,0],
-               "TABLE": [2,2],
-               "TR": [null,0],
-               "TD": [null,0],
-               "TH": [null,0],
-               "B": [3,3],
-               "I": [2,2],
-               "BR": [0,0],
-               "FIGURE": [2,2]
+               "BODY": [0, 0],
+               "HTML": [0, 0],
+               "HEAD": [0, 0],
+               "P": [0, 0],
+               "META": [0, 0],
+               "TBODY": [0, 0],
+               "PRE": [1, 0],
+               "OL": [0, 0],
+               "UL": [0, 0],
+               "DL": [0, 0],
+               "LI": [1, 0],
+               "DT": [1, 0],
+               "DD": [1, 0],
+               "H1": [1, 1],
+               "H2": [2, 2],
+               "H3": [3, 3],
+               "H4": [4, 4],
+               "H5": [5, 5],
+               "H6": [6, 6],
+               "HR": [4, 0],
+               "TABLE": [2, 2],
+               "TR": [null, 0],
+               "TD": [null, 0],
+               "TH": [null, 0],
+               "B": [3, 3],
+               "I": [2, 2],
+               "BR": [0, 0],
+               "FIGURE": [2, 2]
        }),
 
        // HTML tags whose wikitext equivalents are zero-width.
diff --git a/lib/pegTokenizer.pegjs.txt b/lib/pegTokenizer.pegjs.txt
index 64e4b28..d4373cd 100644
--- a/lib/pegTokenizer.pegjs.txt
+++ b/lib/pegTokenizer.pegjs.txt
@@ -88,7 +88,7 @@
     if (c) { rw += c[0] + c[1].join(''); }
     // Build a redirect token
     var redirect = new SelfclosingTagTk('mw:redirect',
-            [Util.lookupKV(link.attribs,'href')],
+            [Util.lookupKV(link.attribs, 'href')],
             {
                 src: rw,
                 tsr: [peg$reportedPos, peg$currPos],
@@ -693,7 +693,7 @@
     target:template_param_value
     params:(nl_comment_space* "|"
                 r:( p0:({return peg$currPos;}) v:nl_comment_space* p:({return 
peg$currPos;}) &"|"
-                    { return new KV( '', tu.flattenIfArray(v), [p0,p0,p0,p]); 
} // empty argument
+                    { return new KV( '', tu.flattenIfArray(v), [p0, p0, p0, 
p]); } // empty argument
                     / template_param
                   ) { return r; }
             )*
@@ -1958,7 +1958,7 @@
     return [
         new TagTk('span', [new KV('typeof', 'mw:Entity')], { src: m, 
srcContent: cc, tsr: [peg$reportedPos, peg$reportedPos] } ),
         cc,
-        new EndTagTk('span', [], { tsr: [peg$currPos,peg$currPos] })
+        new EndTagTk('span', [], { tsr: [peg$currPos, peg$currPos] })
     ];
 }
 
diff --git a/lib/wts.ConstrainedText.js b/lib/wts.ConstrainedText.js
index 9cdefb0..ffc1171 100644
--- a/lib/wts.ConstrainedText.js
+++ b/lib/wts.ConstrainedText.js
@@ -138,7 +138,7 @@
                if (!ct) { continue; }
                if (!Array.isArray(ct)) { ct = [ct]; }
                // tag these chunks as coming from selser
-               ct.forEach(function(t) { t.selser =true; });
+               ct.forEach(function(t) { t.selser = true; });
                return ct;
        }
        // ConstrainedText._fromSelSer should handle everything which reaches it
@@ -233,8 +233,8 @@
  */
 var RegExpConstrainedText = function RegExpConstrainedText( args ) {
        RegExpConstrainedText.super_.call(this, args);
-       this.prefix = args.prefix !==undefined ? args.prefix : '<nowiki/>';
-       this.suffix = args.suffix !==undefined ? args.suffix : '<nowiki/>';
+       this.prefix = args.prefix !== undefined ? args.prefix : '<nowiki/>';
+       this.suffix = args.suffix !== undefined ? args.suffix : '<nowiki/>';
        // functions which return true if escape prefix/suffix need to be added
        this.prefixMatcher = args.goodPrefix ? matcher(args.goodPrefix, true) :
                args.badPrefix ? matcher(args.badPrefix, false) : false;
@@ -308,15 +308,15 @@
 
 // build regexps representing the trailing context for an autourl link
 // This regexp comes from the PHP parser's EXT_LINK_URL_CLASS regexp.
-var EXT_LINK_URL_CLASS = 
/[^\[\]<>"\x00-\x20\x7F\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/.source.slice(1,-1);
+var EXT_LINK_URL_CLASS = 
/[^\[\]<>"\x00-\x20\x7F\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/.source.slice(1,
 -1);
 // This set of trailing punctuation comes from Parser.php::makeFreeExternalLink
-var TRAILING_PUNCT = /[,;\\.:!?]/.source.slice(1,-1);
+var TRAILING_PUNCT = /[,;\\.:!?]/.source.slice(1, -1);
 var NOT_LTGT = /(?!&(lt|gt);)/.source;
 
-var AUTOURL_BAD_PAREN = new RegExp("^" +NOT_LTGT +"[" + TRAILING_PUNCT + "]*[" 
+ EXT_LINK_URL_CLASS + TRAILING_PUNCT + "]");
+var AUTOURL_BAD_PAREN = new RegExp("^" + NOT_LTGT + "[" + TRAILING_PUNCT + 
"]*[" + EXT_LINK_URL_CLASS + TRAILING_PUNCT + "]");
 // if the URL has an doesn't have an open paren in it, TRAILING PUNCT will
 // include ')' as well.
-var AUTOURL_BAD_NOPAREN = new RegExp("^" +NOT_LTGT +"[" + TRAILING_PUNCT + 
"\\)]*[" + EXT_LINK_URL_CLASS + TRAILING_PUNCT + "\\)]");
+var AUTOURL_BAD_NOPAREN = new RegExp("^" + NOT_LTGT + "[" + TRAILING_PUNCT + 
"\\)]*[" + EXT_LINK_URL_CLASS + TRAILING_PUNCT + "\\)]");
 
 var AutoURLLinkText = function AutoURLLinkText(url, node) {
        AutoURLLinkText.super_.call(this, {
@@ -329,8 +329,8 @@
 };
 inherits(AutoURLLinkText, RegExpConstrainedText);
 AutoURLLinkText._fromSelSer = function(text, node, dataParsoid, env) {
-       if ((node.tagName ==='A' && dataParsoid.stx === 'url') ||
-               (node.tagName ==='IMG' && dataParsoid.type ==='extlink')) {
+       if ((node.tagName === 'A' && dataParsoid.stx === 'url') ||
+               (node.tagName === 'IMG' && dataParsoid.type === 'extlink')) {
                return new AutoURLLinkText(text, node);
        }
 };
diff --git a/lib/wts.LinkHandler.js b/lib/wts.LinkHandler.js
index 73d8bc9..80c821e 100644
--- a/lib/wts.LinkHandler.js
+++ b/lib/wts.LinkHandler.js
@@ -55,7 +55,7 @@
                                bases.push(interwikiInfo.url);
                        }
                });
-               for (i =0; i <bases.length; i++) {
+               for (i = 0; i < bases.length; i++) {
                        // evaluate the url relative to this base
                        nhref = url.resolve(bases[i], href);
                        // can this match the pattern?
@@ -199,7 +199,7 @@
                                        
(wiki.interwikiMap.get(normalizeIWP(interWikiMatch[0])) || {}).url
                                        )) {
                                // Reuse old prefix capitalization
-                               if 
(Util.decodeEntities(target.value.substr(oldPrefix[1].length +1)) !== 
interWikiMatch[1]) {
+                               if 
(Util.decodeEntities(target.value.substr(oldPrefix[1].length + 1)) !== 
interWikiMatch[1]) {
                                        // Modified, update target.value.
                                        target.value = localPrefix + 
oldPrefix[1] + ':' + interWikiMatch[1];
                                }
@@ -646,7 +646,7 @@
        } else {
                var safeAttr = new Set(["href", "rel", "class", "title"]);
                var isComplexLink = function( attributes ) {
-                       for ( var i =0; i < attributes.length; i++ ) {
+                       for ( var i = 0; i < attributes.length; i++ ) {
                                var attr = attributes.item(i);
                                // XXX: Don't drop rel and class in every case 
once a tags are
                                // actually supported in the MW default config?
@@ -924,7 +924,7 @@
                },
                getLastOpt = function(key) {
                        var o = outerDP.optList || [], i;
-                       for (i =o.length -1; i >=0; i--) {
+                       for (i = o.length - 1; i >= 0; i--) {
                                if (o[i].ck === key) {
                                        return o[i];
                                }
@@ -963,16 +963,16 @@
                } else {
                        var bbox = null;
                        // Serialize to a square bounding box
-                       if (ww.value !==null && ww.value !=='' && ww.value 
!==undefined) {
+                       if (ww.value !== null && ww.value !== '' && ww.value 
!== undefined) {
                                bbox = +ww.value;
                        }
-                       if (wh.value !==null && wh.value !=='' && wh.value 
!==undefined) {
+                       if (wh.value !== null && wh.value !== '' && wh.value 
!== undefined) {
                                var height = +wh.value;
                                if (bbox === null || height > bbox) {
                                        bbox = height;
                                }
                        }
-                       if (bbox !==null) {
+                       if (bbox !== null) {
                                nopts.push( {
                                        ck: 'width',
                                        // MediaWiki interprets 100px as a 
width restriction only, so
@@ -1061,7 +1061,7 @@
                nopts = nopts.filter(function(no) { return no.ck !== 'bogus'; 
});
                // empty captions should get filtered out in this case, too 
(bug 62264)
                nopts = nopts.filter(function(no) {
-                       return !(no.ck === 'caption' && no.ak ==='');
+                       return !(no.ck === 'caption' && no.ak === '');
                });
        }
 
diff --git a/lib/wts.SerializerState.js b/lib/wts.SerializerState.js
index d246439..eb08788 100644
--- a/lib/wts.SerializerState.js
+++ b/lib/wts.SerializerState.js
@@ -346,7 +346,7 @@
                                                (/^[\|!]/.test(match[2]) && 
this.wikiTableNesting > 0) ||
                                                // indent-pres are suppressed 
inside <blockquote>
                                                (/^ [^\s]/.test(match[2]) && 
!DU.hasAncestorOfName(node, "BLOCKQUOTE"))) {
-                                               res = 
ConstrainedText.cast((match[1] ||"") + "<nowiki>" + match[2][0] + "</nowiki>" + 
match[2].substring(1), node);
+                                               res = 
ConstrainedText.cast((match[1] || "") + "<nowiki>" + match[2][0] + "</nowiki>" 
+ match[2].substring(1), node);
                                        }
                                }
                        }
diff --git a/lib/wts.TagHandlers.js b/lib/wts.TagHandlers.js
index 107e283..06186be 100644
--- a/lib/wts.TagHandlers.js
+++ b/lib/wts.TagHandlers.js
@@ -488,7 +488,7 @@
 function serializeTableTag( symbol, endSymbol, state, node, wrapperUnmodified 
) {
        if (wrapperUnmodified) {
                var dsr = DU.getDataParsoid( node ).dsr;
-               return state.getOrigSrc(dsr[0], dsr[0] +dsr[2]);
+               return state.getOrigSrc(dsr[0], dsr[0] + dsr[2]);
        } else {
                return serializeTableElement(symbol, endSymbol, state, node);
        }
diff --git a/lib/wts.escapeWikitext.js b/lib/wts.escapeWikitext.js
index 601b40a..6c5c39f 100644
--- a/lib/wts.escapeWikitext.js
+++ b/lib/wts.escapeWikitext.js
@@ -42,7 +42,7 @@
                        line = text;
                }
                return line[0] === '=' &&
-                       text && text.length > 0 && text[text.length -1] === '=';
+                       text && text.length > 0 && text[text.length - 1] === 
'=';
        } else {
                return false;
        }
@@ -200,7 +200,7 @@
                        text.match(/^[\-+]/) &&
                        opts.node && DU.pathToAncestor(opts.node, 
tdNode).every(function(n) {
                                return this.isFirstContentNode(n) &&
-                                       (n ===opts.node || 
DU.isZeroWidthWikitextElt(n));
+                                       (n === opts.node || 
DU.isZeroWidthWikitextElt(n));
                        }, this)
                ));
 };
@@ -410,8 +410,8 @@
                                buf += str;
 
                                if (close) {
-                                       if ((i < numToks -1 && tokens[i 
+1].constructor === String && tokens[i +1].length >= maxExcessWrapLength) ||
-                                               (i === numToks -2 && tokens[i 
+1].constructor === String)) {
+                                       if ((i < numToks - 1 && tokens[i + 
1].constructor === String && tokens[i + 1].length >= maxExcessWrapLength) ||
+                                               (i === numToks - 2 && tokens[i 
+ 1].constructor === String)) {
                                                buf += "</nowiki>";
                                                inNowiki = false;
                                        }
diff --git a/lib/wts.separators.js b/lib/wts.separators.js
index eb22ee1..b3a019a 100644
--- a/lib/wts.separators.js
+++ b/lib/wts.separators.js
@@ -661,7 +661,7 @@
                                        sep = src.substring(dsrA[1], dsrB[1] - 
dsrB[3]);
                                }
                        } else {
-                               this.env.log("warning","dsr backwards: should 
not happen!");
+                               this.env.log("warning", "dsr backwards: should 
not happen!");
                        }
 
                        if (state.sep.lastSourceSep) {
@@ -681,7 +681,7 @@
        // 1. Verify that the separator is really one (has to be whitespace and 
comments)
        // 2. If the separator is being emitted before a node that emits 
sol-transparent WT,
        //    go through makeSeparator to verify indent-pre constraints are met.
-       var sepConstraints = state.sep.constraints || {a: {},b: {}, max: 0};
+       var sepConstraints = state.sep.constraints || {a: {}, b: {}, max: 0};
        if (sep === undefined ||
                !WTSUtils.isValidSep(sep) ||
                (state.sep.src && state.sep.src !== sep)) {
diff --git a/tests/client/client.js b/tests/client/client.js
index 95c5b4b..db6e3c3 100755
--- a/tests/client/client.js
+++ b/tests/client/client.js
@@ -218,7 +218,7 @@
                        break;
                }
                default: {
-                       console.assert(false, 'Bad callback argument: ' +which);
+                       console.assert(false, 'Bad callback argument: ' + 
which);
                }
        }
 };
diff --git a/tests/fetch-parserTests.txt.js b/tests/fetch-parserTests.txt.js
index d6320b6..dd792db 100755
--- a/tests/fetch-parserTests.txt.js
+++ b/tests/fetch-parserTests.txt.js
@@ -29,7 +29,7 @@
        host: downloadUrl.host,
        path: 
'/history/mediawiki%2Fcore.git/HEAD/tests%2Fparser%2FparserTests.txt'
 };
-var target_name = __dirname +"/parserTests.txt";
+var target_name = __dirname + "/parserTests.txt";
 
 var computeSHA1 = function(target_name) {
        var existsSync = fs.existsSync || path.existsSync; // node 0.6 compat
@@ -119,9 +119,9 @@
                var contents = fs.
                        readFileSync(__filename, 'utf8').
                        replace(/^var expectedSHA1 = "[0-9a-f]*";/m,
-                                       "var expectedSHA1 = \"" +fileHash 
+"\";").
+                                       "var expectedSHA1 = \"" + fileHash + 
"\";").
                        replace(/^var latestCommit = "[0-9a-f]*";/m,
-                                       "var latestCommit = \"" +gitCommit 
+"\";");
+                                       "var latestCommit = \"" + gitCommit + 
"\";");
                fs.writeFileSync(__filename, contents, 'utf8');
                console.log('Updated fetch-parserTests.txt.js');
        };
diff --git a/tests/mocha/api.js b/tests/mocha/api.js
index a886c74..67b352f 100644
--- a/tests/mocha/api.js
+++ b/tests/mocha/api.js
@@ -138,7 +138,7 @@
                                                        body: {
                                                                "counter": 14,
                                                                "ids": {
-                                                                       "mwAA": 
{"dsr": [0,592,0,0]},"mwAQ": {"dsr": [0,59,0,0]},"mwAg": {"stx": "html","dsr": 
[0,59,8,9]},"mwAw": {"dsr": [61,171,0,0]},"mwBA": {"targetOff": 
114,"contentOffsets": [114,126],"dsr": [73,127,41,1]},"mwBQ": {"dsr": 
[173,194,2,2]},"mwBg": {"dsr": [195,592,0,0]},"mwBw": {"dsr": 
[195,300,1,0]},"mwCA": {"targetOff": 272,"contentOffsets": [272,299],"dsr": 
[197,300,75,1]},"mwCQ": {"dsr": [301,373,1,0]},"mwCg": {"targetOff": 
359,"contentOffsets": [359,372],"dsr": [303,373,56,1]},"mwCw": {"dsr": 
[374,472,1,0]},"mwDA": {"targetOff": 441,"contentOffsets": [441,471],"dsr": 
[376,472,65,1]},"mwDQ": {"dsr": [473,592,1,0]},"mwDg": {"targetOff": 
555,"contentOffsets": [555,591],"dsr": [475,592,80,1] }
+                                                                       "mwAA": 
{"dsr": [0, 592, 0, 0]}, "mwAQ": {"dsr": [0, 59, 0, 0]}, "mwAg": {"stx": 
"html", "dsr": [0, 59, 8, 9]}, "mwAw": {"dsr": [61, 171, 0, 0]}, "mwBA": 
{"targetOff": 114, "contentOffsets": [114, 126], "dsr": [73, 127, 41, 1]}, 
"mwBQ": {"dsr": [173, 194, 2, 2]}, "mwBg": {"dsr": [195, 592, 0, 0]}, "mwBw": 
{"dsr": [195, 300, 1, 0]}, "mwCA": {"targetOff": 272, "contentOffsets": [272, 
299], "dsr": [197, 300, 75, 1]}, "mwCQ": {"dsr": [301, 373, 1, 0]}, "mwCg": 
{"targetOff": 359, "contentOffsets": [359, 372], "dsr": [303, 373, 56, 1]}, 
"mwCw": {"dsr": [374, 472, 1, 0]}, "mwDA": {"targetOff": 441, "contentOffsets": 
[441, 471], "dsr": [376, 472, 65, 1]}, "mwDQ": {"dsr": [473, 592, 1, 0]}, 
"mwDg": {"targetOff": 555, "contentOffsets": [555, 591], "dsr": [475, 592, 80, 
1] }
                                                                }
                                                        }
                                                }
@@ -174,7 +174,7 @@
                                                        body: {
                                                                "counter": 14,
                                                                "ids": {
-                                                                       "mwAA": 
{"dsr": [0,592,0,0]},"mwAQ": {"dsr": [0,59,0,0]},"mwAg": {"stx": "html","dsr": 
[0,59,8,9]},"mwAw": {"dsr": [61,171,0,0]},"mwBA": {"targetOff": 
114,"contentOffsets": [114,126],"dsr": [73,127,41,1]},"mwBQ": {"dsr": 
[173,194,2,2]},"mwBg": {"dsr": [195,592,0,0]},"mwBw": {"dsr": 
[195,300,1,0]},"mwCA": {"targetOff": 272,"contentOffsets": [272,299],"dsr": 
[197,300,75,1]},"mwCQ": {"dsr": [301,373,1,0]},"mwCg": {"targetOff": 
359,"contentOffsets": [359,372],"dsr": [303,373,56,1]},"mwCw": {"dsr": 
[374,472,1,0]},"mwDA": {"targetOff": 441,"contentOffsets": [441,471],"dsr": 
[376,472,65,1]},"mwDQ": {"dsr": [473,592,1,0]},"mwDg": {"targetOff": 
555,"contentOffsets": [555,591],"dsr": [475,592,80,1] }
+                                                                       "mwAA": 
{"dsr": [0, 592, 0, 0]}, "mwAQ": {"dsr": [0, 59, 0, 0]}, "mwAg": {"stx": 
"html", "dsr": [0, 59, 8, 9]}, "mwAw": {"dsr": [61, 171, 0, 0]}, "mwBA": 
{"targetOff": 114, "contentOffsets": [114, 126], "dsr": [73, 127, 41, 1]}, 
"mwBQ": {"dsr": [173, 194, 2, 2]}, "mwBg": {"dsr": [195, 592, 0, 0]}, "mwBw": 
{"dsr": [195, 300, 1, 0]}, "mwCA": {"targetOff": 272, "contentOffsets": [272, 
299], "dsr": [197, 300, 75, 1]}, "mwCQ": {"dsr": [301, 373, 1, 0]}, "mwCg": 
{"targetOff": 359, "contentOffsets": [359, 372], "dsr": [303, 373, 56, 1]}, 
"mwCw": {"dsr": [374, 472, 1, 0]}, "mwDA": {"targetOff": 441, "contentOffsets": 
[441, 471], "dsr": [376, 472, 65, 1]}, "mwDQ": {"dsr": [473, 592, 1, 0]}, 
"mwDg": {"targetOff": 555, "contentOffsets": [555, 591], "dsr": [475, 592, 80, 
1] }
                                                                }
                                                        }
                                                }
@@ -417,7 +417,7 @@
                                                        body: {
                                                                "counter": 14,
                                                                "ids": {
-                                                                       "mwAA": 
{"dsr": [0,592,0,0]},"mwAQ": {"dsr": [0,59,0,0]},"mwAg": {"stx": "html","dsr": 
[0,59,8,9]},"mwAw": {"dsr": [61,171,0,0]},"mwBA": {"targetOff": 
114,"contentOffsets": [114,126],"dsr": [73,127,41,1]},"mwBQ": {"dsr": 
[173,194,2,2]},"mwBg": {"dsr": [195,592,0,0]},"mwBw": {"dsr": 
[195,300,1,0]},"mwCA": {"targetOff": 272,"contentOffsets": [272,299],"dsr": 
[197,300,75,1]},"mwCQ": {"dsr": [301,373,1,0]},"mwCg": {"targetOff": 
359,"contentOffsets": [359,372],"dsr": [303,373,56,1]},"mwCw": {"dsr": 
[374,472,1,0]},"mwDA": {"targetOff": 441,"contentOffsets": [441,471],"dsr": 
[376,472,65,1]},"mwDQ": {"dsr": [473,592,1,0]},"mwDg": {"targetOff": 
555,"contentOffsets": [555,591],"dsr": [475,592,80,1] }
+                                                                       "mwAA": 
{"dsr": [0, 592, 0, 0]}, "mwAQ": {"dsr": [0, 59, 0, 0]}, "mwAg": {"stx": 
"html", "dsr": [0, 59, 8, 9]}, "mwAw": {"dsr": [61, 171, 0, 0]}, "mwBA": 
{"targetOff": 114, "contentOffsets": [114, 126], "dsr": [73, 127, 41, 1]}, 
"mwBQ": {"dsr": [173, 194, 2, 2]}, "mwBg": {"dsr": [195, 592, 0, 0]}, "mwBw": 
{"dsr": [195, 300, 1, 0]}, "mwCA": {"targetOff": 272, "contentOffsets": [272, 
299], "dsr": [197, 300, 75, 1]}, "mwCQ": {"dsr": [301, 373, 1, 0]}, "mwCg": 
{"targetOff": 359, "contentOffsets": [359, 372], "dsr": [303, 373, 56, 1]}, 
"mwCw": {"dsr": [374, 472, 1, 0]}, "mwDA": {"targetOff": 441, "contentOffsets": 
[441, 471], "dsr": [376, 472, 65, 1]}, "mwDQ": {"dsr": [473, 592, 1, 0]}, 
"mwDg": {"targetOff": 555, "contentOffsets": [555, 591], "dsr": [475, 592, 80, 
1] }
                                                                }
                                                        }
                                                }
diff --git a/tests/mocha/parse.js b/tests/mocha/parse.js
index 2651681..e373ff9 100644
--- a/tests/mocha/parse.js
+++ b/tests/mocha/parse.js
@@ -85,38 +85,38 @@
                });
 
                ['no subpages', 'subpages'].forEach(function(desc, subpages) {
-                       describe('should handle page titles with embedded ? (' 
+desc +')', function() {
+                       describe('should handle page titles with embedded ? (' 
+ desc + ')', function() {
                                var linktests = [{
                                        wikitext: '[[Foo?/Bar]]',
                                        href: 
'//en.wikipedia.org/wiki/Foo%3F/Bar',
                                        linktext: 'Foo?/Bar'
-                               },{
+                               }, {
                                        wikitext: '[[File:Foo.jpg]]',
                                        href: 
'//en.wikipedia.org/wiki/File:Foo.jpg',
                                        resource: 
'//en.wikipedia.org/wiki/File:Foo.jpg'
-                               },{
+                               }, {
                                        wikitext: '[[../]]',
                                        linktext: 'A/B?',
                                        href: '//en.wikipedia.org/wiki/A/B%3F',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        wikitext: '[[../../]]',
                                        linktext: 'A',
                                        href: '//en.wikipedia.org/wiki/A',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        // See 
https://gerrit.wikimedia.org/r/173431
                                        wikitext: '[[../..//]]',
                                        linktext: 'A',
                                        href: '//en.wikipedia.org/wiki/A',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        wikitext: '[[/Child]]',
                                        linktext: '/Child',
                                        href: subpages ?
                                                
'//en.wikipedia.org/wiki/A/B%3F/C/Child' :
                                                '//en.wikipedia.org/wiki//Child'
-                               },{
+                               }, {
                                        wikitext: '[[/Child/]]',
                                        linktext: subpages ? 'Child' : 
'/Child/',
                                        href: subpages ?
@@ -124,7 +124,7 @@
                                                
'//en.wikipedia.org/wiki/A/B%3F/C/Child' :
                                                // trailing slash here, when 
there's no subpage support
                                                
'//en.wikipedia.org/wiki//Child/'
-                               },{
+                               }, {
                                        // See 
https://gerrit.wikimedia.org/r/173431
                                        wikitext: '[[/Child//]]',
                                        linktext: subpages ? 'Child' : 
'/Child//',
@@ -133,30 +133,30 @@
                                                
'//en.wikipedia.org/wiki/A/B%3F/C/Child' :
                                                // trailing slash here, when 
there's no subpage support
                                                
'//en.wikipedia.org/wiki//Child//'
-                               },{
+                               }, {
                                        wikitext: '[[../Sibling]]',
                                        linktext: 'A/B?/Sibling',
                                        href: 
'//en.wikipedia.org/wiki/A/B%3F/Sibling',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        wikitext: '[[../Sibling/]]',
                                        linktext: 'Sibling',
                                        // note: no trailing slash
                                        href: 
'//en.wikipedia.org/wiki/A/B%3F/Sibling',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        // See 
https://gerrit.wikimedia.org/r/173431
                                        wikitext: '[[../Sibling//]]',
                                        linktext: 'Sibling',
                                        // note: no trailing slash
                                        href: 
'//en.wikipedia.org/wiki/A/B%3F/Sibling',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        wikitext: '[[../../New/Cousin]]',
                                        linktext: 'A/New/Cousin',
                                        href: 
'//en.wikipedia.org/wiki/A/New/Cousin',
                                        subpageOnly: true
-                               },{
+                               }, {
                                        // up too far
                                        wikitext: '[[../../../]]',
                                        notALink: true
@@ -236,7 +236,7 @@
                                // now check the <meta> elements
                                els = doc.querySelectorAll('META[property]');
                                var o = {}, prop;
-                               for (var i =0; i <els.length; i++) {
+                               for (var i = 0; i < els.length; i++) {
                                        prop = els[i].getAttribute('property');
                                        o.should.not.have.property(prop);
                                        o[prop] = 
els[i].getAttribute('content');
diff --git a/tests/parserTests.js b/tests/parserTests.js
index 6007abc..bc5c5bc 100755
--- a/tests/parserTests.js
+++ b/tests/parserTests.js
@@ -128,8 +128,8 @@
                return JSON.stringify(v);
        };
        return Object.keys(iopts).map(function(k) {
-               if (iopts[k] ==='') { return k; }
-               return k +'=' +ppValue(iopts[k]);
+               if (iopts[k] === '') { return k; }
+               return k + '=' + ppValue(iopts[k]);
        }).join(' ');
 };
 
@@ -266,7 +266,7 @@
                        'default': false,
                        'boolean': true
                }
-       },{
+       }, {
                // override defaults for standard options
                fetchTemplates: false,
                usephppreprocessor: false,
@@ -302,7 +302,7 @@
  */
 ParserTests.prototype.getTests = function( argv ) {
        // double check that test file is up-to-date with upstream
-       var fetcher = require(__dirname +"/fetch-parserTests.txt.js");
+       var fetcher = require(__dirname + "/fetch-parserTests.txt.js");
        if (!fetcher.isUpToDate()) {
                parserTestsUpToDate = false;
                console.warn("warning", "ParserTests.txt not up-to-date with 
upstream.");
@@ -741,7 +741,7 @@
                                if ( nodeIsUneditable(child) || random() < 0.5 
) {
                                        changeType = genChangesInternal(
                                                // ensure the subtree has a seed
-                                               { seed: '' +random.uint32() },
+                                               { seed: '' + random.uint32() },
                                                child );
                                } else {
                                        if ( !child.setAttribute ) {
@@ -839,7 +839,7 @@
        changes.forEach(function(change) {
                if (err) { return; }
                if (change.length < 2) {
-                       err = new Error('bad change: ' +change);
+                       err = new Error('bad change: ' + change);
                        return;
                }
                // use document.querySelectorAll as a poor man's $(...)
@@ -857,7 +857,7 @@
                }
                var fun = jquery[change[1]];
                if (!fun) {
-                       err = new Error('bad mutator function: ' +change[1]);
+                       err = new Error('bad mutator function: ' + change[1]);
                        return;
                }
                Array.prototype.forEach.call(els, function(el) {
@@ -2062,18 +2062,18 @@
 
                // update the blacklist, if requested
                if (booleanOption( options['rewrite-blacklist'] )) {
-                       var filename = __dirname +'/parserTests-blacklist.js';
+                       var filename = __dirname + '/parserTests-blacklist.js';
                        var shell = fs.readFileSync(filename, 'utf8').
                                split(/^.*DO NOT REMOVE THIS LINE.*$/m);
                        var contents = shell[0];
                        contents += '// ### DO NOT REMOVE THIS LINE ### ';
                        contents += '(start of automatically-generated 
section)\n';
                        modes.forEach(function(mode) {
-                               contents += '\n// Blacklist for ' +mode +'\n';
+                               contents += '\n// Blacklist for ' + mode + '\n';
                                
this.stats.modes[mode].failList.forEach(function(fail) {
-                                       contents += 'add(' 
+JSON.stringify(mode) +', ' +
+                                       contents += 'add(' + 
JSON.stringify(mode) + ', ' +
                                                JSON.stringify(fail.title);
-                                       contents += ', ' 
+JSON.stringify(fail.raw);
+                                       contents += ', ' + 
JSON.stringify(fail.raw);
                                        contents += ');\n';
                                });
                                contents += '\n';
diff --git a/tests/server/diff.js b/tests/server/diff.js
index eaf81e1..874d5bd 100644
--- a/tests/server/diff.js
+++ b/tests/server/diff.js
@@ -62,7 +62,7 @@
 // oldString but not in newString.
 Diff.resultFlagged = function(oldString, newString, oldCommit, newCommit, 
flag) {
        // If one of the two results is an error, don't flag differences.
-       if (oldString.slice(0,6) === '<error' || newString.slice(0,6) === 
'<error') {
+       if (oldString.slice(0, 6) === '<error' || newString.slice(0, 6) === 
'<error') {
                var output = flag === '+' ? newString : oldString;
                return output;
        }
@@ -86,7 +86,7 @@
 
                var results = [];
                for (var i = 0, l = testcases.length - 1; i < l; i++) {
-                       if (i %2 === 0 && statusArray[i /2]) {
+                       if (i % 2 === 0 && statusArray[i / 2]) {
                                testcases[i] = 
testcases[i].replace('<testcase', '<testcase status="' + status + '"');
                        }
                        results.push(testcases[i]);
diff --git a/tests/server/render.helpers.js b/tests/server/render.helpers.js
index 0614ac1..e8a1b26 100644
--- a/tests/server/render.helpers.js
+++ b/tests/server/render.helpers.js
@@ -42,14 +42,14 @@
 RenderHelpers.newCommitLinkData = function(urlPrefix, oldCommit, newCommit, 
title, prefix) {
        return {
                url: urlPrefix + 'resultFlagNew/' + oldCommit + '/' + newCommit 
+ '/' + prefix + '/' + title,
-               name: newCommit.substr(0,7)
+               name: newCommit.substr(0, 7)
        };
 };
 
 RenderHelpers.oldCommitLinkData = function(urlPrefix, oldCommit, newCommit, 
title, prefix) {
        return {
                url: urlPrefix + 'resultFlagOld/' + oldCommit + '/' + newCommit 
+ '/' + prefix + '/' + title,
-               name: oldCommit.substr(0,7)
+               name: oldCommit.substr(0, 7)
        };
 };
 
diff --git a/tests/server/server.js b/tests/server/server.js
index 3f24300..e9b103e 100755
--- a/tests/server/server.js
+++ b/tests/server/server.js
@@ -599,7 +599,7 @@
 var statsScore = function(skipCount, failCount, errorCount) {
        // treat <errors,fails,skips> as digits in a base 1000 system
        // and use the number as a score which can help sort in topfails.
-       return errorCount *1000000 +failCount *1000 +skipCount;
+       return errorCount * 1000000 + failCount * 1000 + skipCount;
 };
 
 var transUpdateCB = function( title, prefix, hash, type, res, trans, 
success_cb, err, result ) {
@@ -631,7 +631,7 @@
                // console.warn("application/json");
                errorCount = result.err ? 1 : 0;
                failCount = parseInt(result.fails || "0");
-               skipCount =parseInt(result.skips || "0");
+               skipCount = parseInt(result.skips || "0");
                resultString = JSON.stringify(result);
        } else {
                // console.warn("old xml junit style");
@@ -691,7 +691,7 @@
                                                                        
transUpdateCB.bind( null, title, prefix, commitHash, "latest result", res, 
trans, function() {
                                                                                
trans.commit( function() {
                                                                                
        console.log( '<- ', prefix + ':' + title, ':', skipCount, failCount,
-                                                                               
                errorCount, commitHash.substr(0,7) );
+                                                                               
                errorCount, commitHash.substr(0, 7) );
 
                                                                                
        if (perfConfig) {
                                                                                
                // Insert the performance stats, ignoring errors for now
@@ -1114,23 +1114,23 @@
                                var row = rows[i];
                                var tableRow = {hash: row.hash, timestamp: 
row.timestamp};
                                if ( i + 1 < n ) {
-                                       tableRow.regUrl = 
'regressions/between/' + rows[i +1].hash + '/' + row.hash;
-                                       tableRow.fixUrl = 'topfixes/between/' + 
rows[i +1].hash + '/' + row.hash;
+                                       tableRow.regUrl = 
'regressions/between/' + rows[i + 1].hash + '/' + row.hash;
+                                       tableRow.fixUrl = 'topfixes/between/' + 
rows[i + 1].hash + '/' + row.hash;
                                }
                                tableRows.push(tableRow);
                        }
                        var data = {
                                numCommits: n,
-                               latest: rows[n 
-1].timestamp.toString().slice(4,15),
+                               latest: rows[n - 
1].timestamp.toString().slice(4, 15),
                                header: ['Commit hash', 'Timestamp', 'Tests', 
'-', '+'],
                                row: tableRows
                        };
 
                        hbs.registerHelper('formatHash', function(hash) {
-                               return hash.slice(0,10);
+                               return hash.slice(0, 10);
                        });
                        hbs.registerHelper('formatDate', function(timestamp) {
-                               return timestamp.toString().slice(4,21);
+                               return timestamp.toString().slice(4, 21);
                        });
 
                        res.render('commits.html', data);
@@ -1143,8 +1143,8 @@
                console.error( err );
                res.send( err.toString(), 500 );
        } else if (row.length === 2) {
-               var oldCommit = req.params[0].slice(0,10);
-               var newCommit = req.params[1].slice(0,10);
+               var oldCommit = req.params[0].slice(0, 10);
+               var newCommit = req.params[1].slice(0, 10);
                var oldResult = row[0].result;
                var newResult = row[1].result;
                var flagResult = Diff.resultFlagged(oldResult, newResult, 
oldCommit, newCommit, flag);
diff --git a/tests/server/static/js/commitList.js 
b/tests/server/static/js/commitList.js
index 77f7d55..287810d 100644
--- a/tests/server/static/js/commitList.js
+++ b/tests/server/static/js/commitList.js
@@ -26,7 +26,7 @@
                button('new', 0).attr('checked', 'checked');
                button('old', 1).attr('checked', 'checked');
                buttonDisplay('old', 0, 'hidden');
-               for (var i =1; i < numRows; i++) {
+               for (var i = 1; i < numRows; i++) {
                        buttonDisplay('new', i, 'hidden');
                }
        };
@@ -40,7 +40,7 @@
                }
                setCompareLinks(oldHash, newHash);
                var index = $(this).closest('tr').index();
-               for (var i =0; i < numRows; i++) {
+               for (var i = 0; i < numRows; i++) {
                        if (name === 'old' && i < index) {
                                buttonDisplay('new', i, 'visible');
                        } else if (name === 'old') {
diff --git a/tests/sync-parserTests.js b/tests/sync-parserTests.js
index f5f5cc2..1a7d7f0 100755
--- a/tests/sync-parserTests.js
+++ b/tests/sync-parserTests.js
@@ -54,7 +54,7 @@
        opts.showHelp();
        var morehelp = fs.readFileSync(__filename, 'utf8');
        morehelp = strip(morehelp.split(/== USAGE ==/, 2)[1]);
-       console.log(morehelp.replace(/^   /mg,''));
+       console.log(morehelp.replace(/^   /mg, ''));
        return;
 }
 
@@ -84,7 +84,7 @@
 // Fetch current Parsoid git hash.
 var phash;
 q.push(function(callback) {
-       
child_process.execFile('git',['log','--max-count=1','--pretty=format:%H'],{
+       child_process.execFile('git', ['log', '--max-count=1', 
'--pretty=format:%H'], {
                cwd: __dirname, env: process.env
        }, function(error, stdout, stderr) {
                if (error) { return callback(error.code || 1); }
@@ -101,11 +101,11 @@
 
 // Create a new mediawiki/core branch, based on the previous sync point.
 q.push(mwexec('git fetch origin'.split(' ')));
-q.push(mwexec(['git','checkout','-b', branch, oldhash]));
+q.push(mwexec(['git', 'checkout', '-b', branch, oldhash]));
 var cleanup = function(callback) {
        var qq = [
                mwexec('git checkout master'.split(' ')),
-               mwexec(['git','branch','-d',branch])
+               mwexec(['git', 'branch', '-d', branch])
        ];
        async.series(qq, callback);
 };
@@ -126,8 +126,8 @@
 // Make a new mediawiki/core commit with an appropriate message.
 q.push(function(callback) {
        var commitmsg = 'Sync up with Parsoid parserTests.';
-       commitmsg += '\n\nThis now aligns with Parsoid commit ' +phash;
-       mwexec(['git','commit','-m', commitmsg, mwPARSERTESTS])(callback);
+       commitmsg += '\n\nThis now aligns with Parsoid commit ' + phash;
+       mwexec(['git', 'commit', '-m', commitmsg, mwPARSERTESTS])(callback);
 });
 
 // Ok, run these commands in series, stopping if any fail.

-- 
To view, visit https://gerrit.wikimedia.org/r/202294
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idee8a562ae2c29cc5c661532b016220be3c107aa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to