jenkins-bot has submitted this change and it was merged.
Change subject: Node v0.10.x Compatibility
......................................................................
Node v0.10.x Compatibility
* Removes the freeze on the WikiConfig prototype which was preventing
prototype values from being overwritten during init().
* Fix in TemplateHandler where a src listener was being pushed onto the
array instead of added via once().
* Resume response in tests/client/client.js for backwards stream
compatibility.
* Moves away from the inheritance pattern,
function Child() {}
Child.prototype = new Parent();
Better would be,
function Child() {
Parent.call(this);
}
function Ctor() {
this.constructor = Child;
}
Ctor.prototype = Parent.prototype;
Child.prototype = new Ctor();
But recommended is,
function Child() {
Parent.call(this);
}
// util.inherits(Child, Parent);
Child.prototype = Object.create(Parent.prototype, {
constructor: {
value: Child,
enumerable: false,
writable: true,
configurable: true
}
});
This was causing event emitter values initialized in the constructor to
be shared on the prototype of the TokenTransformManagers, resulting in
an infinite recursion.
Bug: 45994
Change-Id: Ic588060b5ebbc073839cce7c144e266bc4a5ab79
---
M js/lib/ext.core.TemplateHandler.js
M js/lib/mediawiki.ApiRequest.js
M js/lib/mediawiki.DOMPostProcessor.js
M js/lib/mediawiki.HTML5TreeBuilder.node.js
M js/lib/mediawiki.TokenTransformManager.js
M js/lib/mediawiki.WikiConfig.js
M js/lib/mediawiki.tokenizer.peg.js
M js/tests/client/client.js
M js/tests/dumpGrepper.js
9 files changed, 26 insertions(+), 31 deletions(-)
Approvals:
Subramanya Sastry: Looks good to me, approved
jenkins-bot: Verified
diff --git a/js/lib/ext.core.TemplateHandler.js
b/js/lib/ext.core.TemplateHandler.js
index eb529b4..25c28ac 100644
--- a/js/lib/ext.core.TemplateHandler.js
+++ b/js/lib/ext.core.TemplateHandler.js
@@ -925,7 +925,7 @@
env.requestQueue[text] = new Processor( env, title,
text );
}
// append request, process in document order
- env.requestQueue[text].listeners( 'src' ).push( cb );
+ env.requestQueue[text].once( 'src', cb );
parentCB ( { async: true } );
}
diff --git a/js/lib/mediawiki.ApiRequest.js b/js/lib/mediawiki.ApiRequest.js
index 0fc7d2d..6959579 100644
--- a/js/lib/mediawiki.ApiRequest.js
+++ b/js/lib/mediawiki.ApiRequest.js
@@ -371,8 +371,6 @@
// Inherit from ApiRequest
-//PreprocessorRequest.prototype = new ApiRequest();
-//PreprocessorRequest.prototype.constructor = PreprocessorRequest;
util.inherits( PreprocessorRequest, ApiRequest );
/**
diff --git a/js/lib/mediawiki.DOMPostProcessor.js
b/js/lib/mediawiki.DOMPostProcessor.js
index 5d1b005..d3b8193 100644
--- a/js/lib/mediawiki.DOMPostProcessor.js
+++ b/js/lib/mediawiki.DOMPostProcessor.js
@@ -3,6 +3,7 @@
"use strict";
var events = require('events'),
+ util = require('util'),
Util = require('./mediawiki.Util.js').Util,
DU = require('./mediawiki.DOMUtils.js').DOMUtils,
Node = require('./mediawiki.wikitext.constants.js').Node,
@@ -2989,6 +2990,7 @@
}
function DOMPostProcessor(env, options) {
+ events.EventEmitter.call(this);
this.env = env;
this.options = options;
@@ -3038,8 +3040,7 @@
}
// Inherit from EventEmitter
-DOMPostProcessor.prototype = new events.EventEmitter();
-DOMPostProcessor.prototype.constructor = DOMPostProcessor;
+util.inherits(DOMPostProcessor, events.EventEmitter);
DOMPostProcessor.prototype.setSourceOffsets = function(start, end) {
this.options.sourceOffsets = [start, end];
diff --git a/js/lib/mediawiki.HTML5TreeBuilder.node.js
b/js/lib/mediawiki.HTML5TreeBuilder.node.js
index 85574f8..2e24c84 100644
--- a/js/lib/mediawiki.HTML5TreeBuilder.node.js
+++ b/js/lib/mediawiki.HTML5TreeBuilder.node.js
@@ -6,6 +6,7 @@
* or .body(). */
var events = require('events'),
+ util = require('util'),
$ = require( './fakejquery' ),
HTML5 = require('./html5/index'),
defines = require('./mediawiki.parser.defines.js'),
@@ -22,6 +23,8 @@
FauxHTML5.TreeBuilder = function ( env ) {
+ events.EventEmitter.call(this);
+
// The parser we are going to emit our tokens to
this.parser = new HTML5.Parser();
@@ -39,8 +42,7 @@
};
// Inherit from EventEmitter
-FauxHTML5.TreeBuilder.prototype = new events.EventEmitter();
-FauxHTML5.TreeBuilder.prototype.constructor = FauxHTML5.TreeBuilder;
+util.inherits(FauxHTML5.TreeBuilder, events.EventEmitter);
/**
* Register for (token) 'chunk' and 'end' events from a token emitter,
diff --git a/js/lib/mediawiki.TokenTransformManager.js
b/js/lib/mediawiki.TokenTransformManager.js
index cea772a..e3aa16a 100644
--- a/js/lib/mediawiki.TokenTransformManager.js
+++ b/js/lib/mediawiki.TokenTransformManager.js
@@ -18,6 +18,7 @@
var events = require('events'),
LRU = require("lru-cache"),
crypto = require('crypto'),
+ util = require('util'),
Util = require('./mediawiki.Util.js').Util,
defines = require('./mediawiki.parser.defines.js');
// define some constructor shortcuts
@@ -63,8 +64,10 @@
* its only argument.
*/
function TokenTransformManager( env, options, pipeFactory, phaseEndRank,
attributeType ) {
- // Separate the constructor, so that we can call it from subclasses.
- this._construct();
+ events.EventEmitter.call(this);
+ this.defaultTransformers = []; // any transforms
+ this.tokenTransformers = {}; // non-any transforms
+ this.cachedTransformers = {}; // merged any + non-any transforms
}
function tokenTransformersKey(tkType, tagName) {
@@ -84,14 +87,7 @@
};
// Inherit from EventEmitter
-TokenTransformManager.prototype = new events.EventEmitter();
-TokenTransformManager.prototype.constructor = TokenTransformManager;
-
-TokenTransformManager.prototype._construct = function () {
- this.defaultTransformers = []; // any transforms
- this.tokenTransformers = {}; // non-any transforms
- this.cachedTransformers = {}; // merged any + non-any transforms
-};
+util.inherits(TokenTransformManager, events.EventEmitter);
/**
* Register to a token source, normally the tokenizer.
@@ -259,6 +255,7 @@
* @param {string} attributeType
*/
function AsyncTokenTransformManager ( env, options, pipeFactory, phaseEndRank,
attributeType ) {
+ TokenTransformManager.call(this);
this.uid = auid++; // useful for debugging
this.env = env;
this.options = options;
@@ -268,12 +265,10 @@
this.setFrame( null, null, [] );
this.debug = env.conf.parsoid.debug;
this.trace = env.conf.parsoid.traceFlags &&
(env.conf.parsoid.traceFlags.indexOf("async:" + phaseEndRank) !== -1);
- this._construct();
}
// Inherit from TokenTransformManager, and thus also from EventEmitter.
-AsyncTokenTransformManager.prototype = new TokenTransformManager();
-AsyncTokenTransformManager.prototype.constructor = AsyncTokenTransformManager;
+util.inherits(AsyncTokenTransformManager, TokenTransformManager);
// Reset state between uses
AsyncTokenTransformManager.prototype.reset = function() {
@@ -825,18 +820,17 @@
* @param {string} attributeType
*/
function SyncTokenTransformManager ( env, options, pipeFactory, phaseEndRank,
attributeType ) {
+ TokenTransformManager.call(this);
this.env = env;
this.options = options;
this.pipeFactory = pipeFactory;
this.phaseEndRank = phaseEndRank;
this.attributeType = attributeType;
this.trace = env.conf.parsoid.traceFlags &&
(env.conf.parsoid.traceFlags.indexOf("sync:" + phaseEndRank) !== -1);
- this._construct();
}
// Inherit from TokenTransformManager, and thus also from EventEmitter.
-SyncTokenTransformManager.prototype = new TokenTransformManager();
-SyncTokenTransformManager.prototype.constructor = SyncTokenTransformManager;
+util.inherits(SyncTokenTransformManager, TokenTransformManager);
/**
* @method
diff --git a/js/lib/mediawiki.WikiConfig.js b/js/lib/mediawiki.WikiConfig.js
index 776fb23..c789e8a 100644
--- a/js/lib/mediawiki.WikiConfig.js
+++ b/js/lib/mediawiki.WikiConfig.js
@@ -527,8 +527,6 @@
delete this.extensionTags[tagName];
}
};
-// Make sure the prototype is never modified
-Util.deepFreeze(WikiConfig.prototype);
if ( typeof module === 'object' ) {
module.exports.WikiConfig = WikiConfig;
diff --git a/js/lib/mediawiki.tokenizer.peg.js
b/js/lib/mediawiki.tokenizer.peg.js
index 6fb9c70..dd69e99 100644
--- a/js/lib/mediawiki.tokenizer.peg.js
+++ b/js/lib/mediawiki.tokenizer.peg.js
@@ -12,9 +12,11 @@
path = require('path'),
LRU = require("lru-cache"),
fs = require('fs'),
- events = require('events');
+ events = require('events'),
+ util = require('util');
function PegTokenizer( env, options ) {
+ events.EventEmitter.call(this);
this.env = env;
this.options = options || {};
this.offsets = {};
@@ -25,8 +27,7 @@
}
// Inherit from EventEmitter
-PegTokenizer.prototype = new events.EventEmitter();
-PegTokenizer.prototype.constructor = PegTokenizer;
+util.inherits(PegTokenizer, events.EventEmitter);
PegTokenizer.src = false;
diff --git a/js/tests/client/client.js b/js/tests/client/client.js
index 1238a6d..ba9f96f 100755
--- a/js/tests/client/client.js
+++ b/js/tests/client/client.js
@@ -143,6 +143,7 @@
cb( 'start' );
}
} );
+ res.resume();
} );
req.write( result, 'utf8' );
diff --git a/js/tests/dumpGrepper.js b/js/tests/dumpGrepper.js
index 5186615..a290885 100755
--- a/js/tests/dumpGrepper.js
+++ b/js/tests/dumpGrepper.js
@@ -5,17 +5,17 @@
var dumpReader = require('./dumpReader.js'),
events = require('events'),
+ util = require('util'),
optimist = require('optimist'),
Util = require( '../lib/mediawiki.Util.js' ).Util;
function DumpGrepper ( regexp ) {
// inherit from EventEmitter
- //events.EventEmitter.call(this);
+ events.EventEmitter.call(this);
this.re = regexp;
}
-DumpGrepper.prototype = new events.EventEmitter();
-DumpGrepper.prototype.constructor = DumpGrepper;
+util.inherits(DumpGrepper, events.EventEmitter);
DumpGrepper.prototype.grepRev = function ( revision, onlyFirst ) {
var result = this.re.exec( revision.text ),
--
To view, visit https://gerrit.wikimedia.org/r/76114
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic588060b5ebbc073839cce7c144e266bc4a5ab79
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
Gerrit-Reviewer: Arlolra <[email protected]>
Gerrit-Reviewer: Cscott <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits