Arlolra has uploaded a new change for review.
https://gerrit.wikimedia.org/r/76114
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().
* 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 .gitignore
M .jshintignore
M js/lib/ext.core.TemplateHandler.js
M js/lib/html5/parser.js
M js/lib/html5/parser/after_after_body_phase.js
M js/lib/html5/parser/after_body_phase.js
M js/lib/html5/parser/after_frameset_phase.js
M js/lib/html5/parser/after_head_phase.js
M js/lib/html5/parser/before_head_phase.js
M js/lib/html5/parser/before_html_phase.js
M js/lib/html5/parser/in_body_phase.js
M js/lib/html5/parser/in_caption_phase.js
M js/lib/html5/parser/in_cell_phase.js
M js/lib/html5/parser/in_column_group_phase.js
M js/lib/html5/parser/in_foreign_content_phase.js
M js/lib/html5/parser/in_frameset_phase.js
M js/lib/html5/parser/in_head_phase.js
M js/lib/html5/parser/in_row_phase.js
M js/lib/html5/parser/in_select_in_table_phase.js
M js/lib/html5/parser/in_select_phase.js
M js/lib/html5/parser/in_table_body_phase.js
M js/lib/html5/parser/in_table_phase.js
M js/lib/html5/parser/initial_phase.js
M js/lib/html5/parser/root_element_phase.js
M js/lib/html5/parser/trailing_end_phase.js
M js/lib/html5/tokenizer.js
M js/lib/html5/treewalker.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/dumpGrepper.js
34 files changed, 95 insertions(+), 62 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid
refs/changes/14/76114/1
diff --git a/.gitignore b/.gitignore
index cbbd961..bf9cd49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,6 @@
js/api/npm-debug.log
js/node_modules/
js/tests/parserTests.cache
+js/tests/server/pages.db
+js/tests/client/config.js
js/doc
diff --git a/.jshintignore b/.jshintignore
index d11a3c8..801790c 100644
--- a/.jshintignore
+++ b/.jshintignore
@@ -2,3 +2,4 @@
js/node_modules
js/api/scripts/jquery.js
js/doc
+js/tests/server/node_modules
diff --git a/js/lib/ext.core.TemplateHandler.js
b/js/lib/ext.core.TemplateHandler.js
index e8ac1f3..36600f0 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/html5/parser.js b/js/lib/html5/parser.js
index c71d39f..857e147 100644
--- a/js/lib/html5/parser.js
+++ b/js/lib/html5/parser.js
@@ -1,6 +1,7 @@
var HTML5 = exports.HTML5 = require('../html5');
-var events = require('events');
+var events = require('events'),
+ util = require('util');
require('./treebuilder');
require('../mediawiki.HTML5TreeBuilder.node');
@@ -37,7 +38,7 @@
this.tree = new HTML5.TreeBuilder(this.document);
}
-Parser.prototype = new events.EventEmitter;
+util.inherits(Parser, events.EventEmitter);
// normally accepts the source
Parser.prototype.parse = function(tokenizer) {
diff --git a/js/lib/html5/parser/after_after_body_phase.js
b/js/lib/html5/parser/after_after_body_phase.js
index 690dacb..830d9fe 100644
--- a/js/lib/html5/parser/after_after_body_phase.js
+++ b/js/lib/html5/parser/after_after_body_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var inBody = require('./in_body_phase').Phase;
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -11,7 +12,7 @@
this.start_tag_handlers = start_tag_handlers;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processComment = function(data) {
this.tree.insert_comment(data);
diff --git a/js/lib/html5/parser/after_body_phase.js
b/js/lib/html5/parser/after_body_phase.js
index e09a56c..e76659d 100644
--- a/js/lib/html5/parser/after_body_phase.js
+++ b/js/lib/html5/parser/after_body_phase.js
@@ -1,4 +1,5 @@
var Phase = require('./phase').Phase;
+var util = require('util');
var end_tag_handlers = {
html: 'endTagHtml',
@@ -10,7 +11,7 @@
this.end_tag_handlers = end_tag_handlers;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processComment = function(data) {
// This is needed because data is to be appended to the html element
here
diff --git a/js/lib/html5/parser/after_frameset_phase.js
b/js/lib/html5/parser/after_frameset_phase.js
index 1039c10..f3f0d76 100644
--- a/js/lib/html5/parser/after_frameset_phase.js
+++ b/js/lib/html5/parser/after_frameset_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var inBody = require('./in_body_phase').Phase;
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -18,7 +19,7 @@
this.end_tag_handlers = end_tag_handlers;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processCharacters = function(data) {
this.parse_error("unexpected-char-after-frameset");
diff --git a/js/lib/html5/parser/after_head_phase.js
b/js/lib/html5/parser/after_head_phase.js
index 134f449..d7e8566 100644
--- a/js/lib/html5/parser/after_head_phase.js
+++ b/js/lib/html5/parser/after_head_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var HTML5 = require('../../html5');
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -23,14 +24,12 @@
var p = exports.Phase = function AfterHeadPhase(parser, tree) {
Phase.call(this, parser, tree);
- this.start_tag_handlers = start_tag_handlers;
- this.end_tag_handlers = end_tag_handlers;
-
+ this.start_tag_handlers = start_tag_handlers;
+ this.end_tag_handlers = end_tag_handlers;
this.name = 'after_head_phase';
}
-p.prototype = new Phase;
-
+util.inherits(p, Phase);
p.prototype.processEOF = function() {
this.anything_else();
diff --git a/js/lib/html5/parser/before_head_phase.js
b/js/lib/html5/parser/before_head_phase.js
index a100ee1..75db053 100644
--- a/js/lib/html5/parser/before_head_phase.js
+++ b/js/lib/html5/parser/before_head_phase.js
@@ -1,4 +1,5 @@
var Phase = require('./phase').Phase;
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -22,7 +23,7 @@
this.name = 'before_head_phase';
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processEOF = function() {
this.startTagHead('head', {});
diff --git a/js/lib/html5/parser/before_html_phase.js
b/js/lib/html5/parser/before_html_phase.js
index 4e39817..889acfe 100644
--- a/js/lib/html5/parser/before_html_phase.js
+++ b/js/lib/html5/parser/before_html_phase.js
@@ -1,12 +1,13 @@
var Phase = require('./phase').Phase;
var HTML5 = require('../../html5');
+var util = require('util');
var p = exports.Phase = function BeforeHtmlPhase(parser, tree) {
Phase.call(this, parser, tree);
this.name = 'before_html_phase'
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processEOF = function() {
this.insert_html_element();
diff --git a/js/lib/html5/parser/in_body_phase.js
b/js/lib/html5/parser/in_body_phase.js
index 76cf084..7058509 100644
--- a/js/lib/html5/parser/in_body_phase.js
+++ b/js/lib/html5/parser/in_body_phase.js
@@ -1,6 +1,7 @@
var HTML5 = require('../../html5');
var Phase = require('./phase').Phase;
-var assert = require('assert')
+var assert = require('assert');
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -201,7 +202,7 @@
this.name = 'in_body_phase';
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processSpaceCharactersDropNewline = function(data) {
this.dropNewline = false
diff --git a/js/lib/html5/parser/in_caption_phase.js
b/js/lib/html5/parser/in_caption_phase.js
index eaf5245..55e5fa3 100644
--- a/js/lib/html5/parser/in_caption_phase.js
+++ b/js/lib/html5/parser/in_caption_phase.js
@@ -2,6 +2,7 @@
var inBody = require('./in_body_phase').Phase;
var assert = require('assert');
var HTML5 = require('../../html5');
+var util = require('util');
var starts = {
html: 'startTagHtml',
@@ -37,7 +38,7 @@
this.end_tag_handlers = ends;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.ignoreEndTagCaption = function() {
return !this.inScope('caption', HTML5.TABLE_SCOPING_ELEMENTS);
diff --git a/js/lib/html5/parser/in_cell_phase.js
b/js/lib/html5/parser/in_cell_phase.js
index 4b83504..05e4344 100644
--- a/js/lib/html5/parser/in_cell_phase.js
+++ b/js/lib/html5/parser/in_cell_phase.js
@@ -1,6 +1,7 @@
var Phase = require('./phase').Phase;
var inBody = require('./in_body_phase').Phase;
var HTML5 = require('../../html5');
+var util = require('util');
var starts = {
html: 'startTagHtml',
@@ -38,8 +39,7 @@
this.end_tag_handlers = ends;
}
-exports.Phase.prototype = new Phase;
-
+util.inherits(exports.Phase, Phase);
var p = exports.Phase.prototype;
p.processCharacters = function(data) {
diff --git a/js/lib/html5/parser/in_column_group_phase.js
b/js/lib/html5/parser/in_column_group_phase.js
index f89d4c5..28eab79 100644
--- a/js/lib/html5/parser/in_column_group_phase.js
+++ b/js/lib/html5/parser/in_column_group_phase.js
@@ -1,6 +1,7 @@
var Phase = require('./phase').Phase
var HTML5 = require('../../html5')
-var assert = require('assert')
+var assert = require('assert');
+var util = require('util');
var start = {
html: 'startTagHtml',
@@ -20,7 +21,8 @@
this.end_tag_handlers = end
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.ignoreEndTagColgroup = function() {
return this.tree.open_elements.last().tagName.toLowerCase() == 'html'
diff --git a/js/lib/html5/parser/in_foreign_content_phase.js
b/js/lib/html5/parser/in_foreign_content_phase.js
index 1b4f4be..dc815b4 100644
--- a/js/lib/html5/parser/in_foreign_content_phase.js
+++ b/js/lib/html5/parser/in_foreign_content_phase.js
@@ -1,4 +1,5 @@
var Phase = require('./phase').Phase;
+var util = require('util');
var starts = {
'-default': 'startTagOther'
@@ -15,7 +16,8 @@
this.end_tag_handlers = ends;
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.startTagOther = function(name, attributes, self_closing) {
if(['mglyph', 'malignmark'].indexOf(name) != -1
diff --git a/js/lib/html5/parser/in_frameset_phase.js
b/js/lib/html5/parser/in_frameset_phase.js
index 038979c..a5aef27 100644
--- a/js/lib/html5/parser/in_frameset_phase.js
+++ b/js/lib/html5/parser/in_frameset_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var inBody = require('./in_body_phase').Phase;
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -21,7 +22,7 @@
this.end_tag_handlers = end_tag_handlers;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processCharacters = function(data) {
this.parse_error("unexpected-char-in-frameset");
diff --git a/js/lib/html5/parser/in_head_phase.js
b/js/lib/html5/parser/in_head_phase.js
index 497a471..ade21e1 100644
--- a/js/lib/html5/parser/in_head_phase.js
+++ b/js/lib/html5/parser/in_head_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var HTML5 = require('../../html5');
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -35,7 +36,7 @@
this.end_tag_handlers = end_tag_handlers;
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processEOF = function() {
var name = this.tree.open_elements.last().tagName.toLowerCase()
diff --git a/js/lib/html5/parser/in_row_phase.js
b/js/lib/html5/parser/in_row_phase.js
index 4d1d936..192d24b 100644
--- a/js/lib/html5/parser/in_row_phase.js
+++ b/js/lib/html5/parser/in_row_phase.js
@@ -2,6 +2,7 @@
var HTML5 = require('../../html5')
var inTable = require('./in_table_phase').Phase;
var assert = require('assert');
+var util = require('util');
var starts = {
html: 'startTagHtml',
@@ -39,7 +40,8 @@
this.end_tag_handlers = ends;
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.processCharacters = function(data) {
new inTable(this.parser, this.tree).processCharacters(data);
diff --git a/js/lib/html5/parser/in_select_in_table_phase.js
b/js/lib/html5/parser/in_select_in_table_phase.js
index 6cebe9c..b0c216b 100644
--- a/js/lib/html5/parser/in_select_in_table_phase.js
+++ b/js/lib/html5/parser/in_select_in_table_phase.js
@@ -1,6 +1,7 @@
var HTML5 = require('../../html5')
var Phase = require('./phase').Phase;
var inSelect = require('./in_select_phase').Phase;
+var util = require('util');
var start_tag_handlers = {
caption: 'startTagTable',
@@ -27,13 +28,14 @@
}
exports.Phase = function InSelectInTablePhase(parser, tree) {
- Phase.call(this, parser, tree);
- this.start_tag_handlers = start_tag_handlers;
- this.end_tag_handlers = end_tag_handlers;
- this.name = 'in_select_in_table';
+ Phase.call(this, parser, tree);
+ this.start_tag_handlers = start_tag_handlers;
+ this.end_tag_handlers = end_tag_handlers;
+ this.name = 'in_select_in_table';
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.processCharacters = function(data) {
new inSelect(this.parser, this.tree).processCharacters(data)
diff --git a/js/lib/html5/parser/in_select_phase.js
b/js/lib/html5/parser/in_select_phase.js
index 7279af0..acc1db3 100644
--- a/js/lib/html5/parser/in_select_phase.js
+++ b/js/lib/html5/parser/in_select_phase.js
@@ -1,5 +1,6 @@
var Phase = require('./phase').Phase;
var HTML5 = require('../../html5');
+var util = require('util');
var starts = {
html: 'startTagHtml',
@@ -30,7 +31,8 @@
this.end_tag_handlers = ends;
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.processCharacters = function(data) {
this.tree.insert_text(data);
diff --git a/js/lib/html5/parser/in_table_body_phase.js
b/js/lib/html5/parser/in_table_body_phase.js
index 7e93b8f..a4f7195 100644
--- a/js/lib/html5/parser/in_table_body_phase.js
+++ b/js/lib/html5/parser/in_table_body_phase.js
@@ -1,6 +1,7 @@
var Phase = require('./phase').Phase;
var inTable = require('./in_table_phase').Phase
var HTML5 = require('../../html5');
+var util = require('util');
var starts = {
html: 'startTagHtml',
@@ -38,7 +39,8 @@
this.end_tag_handlers = ends;
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.processCharacters = function(data) {
new inTable(this.parser, this.tree).processCharacters(data);
diff --git a/js/lib/html5/parser/in_table_phase.js
b/js/lib/html5/parser/in_table_phase.js
index 4be0b27..0728b14 100644
--- a/js/lib/html5/parser/in_table_phase.js
+++ b/js/lib/html5/parser/in_table_phase.js
@@ -1,6 +1,7 @@
var Phase = require('./phase').Phase;
var inBody = require('./in_body_phase').Phase;
-var HTML5 = require('../../html5')
+var HTML5 = require('../../html5');
+var util = require('util');
var start_tag_handlers = {
html: 'startTagHtml',
@@ -39,7 +40,7 @@
this.end_tag_handlers = end_tag_handlers;
};
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processCharacters = function(data) {
this.parse_error("unexpected-char-implies-table-voodoo");
diff --git a/js/lib/html5/parser/initial_phase.js
b/js/lib/html5/parser/initial_phase.js
index 7454272..2f31f4e 100644
--- a/js/lib/html5/parser/initial_phase.js
+++ b/js/lib/html5/parser/initial_phase.js
@@ -1,11 +1,12 @@
var Phase = require('./phase').Phase;
+var util = require('util');
var p = exports.Phase = function InitialPhase(parser, tree) {
Phase.call(this, parser, tree);
this.name = 'initial_phase';
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processEOF = function() {
this.parse_error("expected-doctype-but-got-eof");
diff --git a/js/lib/html5/parser/root_element_phase.js
b/js/lib/html5/parser/root_element_phase.js
index 832cecd..2faeeaa 100644
--- a/js/lib/html5/parser/root_element_phase.js
+++ b/js/lib/html5/parser/root_element_phase.js
@@ -1,10 +1,12 @@
var Phase = require('./phase').Phase
+var util = require('util');
exports.Phase = function rootElementPhase(parser, tree) {
Phase.call(this, parser, tree)
}
-var p = exports.Phase.prototype = new Phase;
+util.inherits(exports.Phase, Phase);
+var p = exports.Phase.prototype;
p.processEOF = function() {
this.insert_html_element()
diff --git a/js/lib/html5/parser/trailing_end_phase.js
b/js/lib/html5/parser/trailing_end_phase.js
index 07fc555..8f11154 100644
--- a/js/lib/html5/parser/trailing_end_phase.js
+++ b/js/lib/html5/parser/trailing_end_phase.js
@@ -1,10 +1,11 @@
var Phase = require('./phase').Phase;
+var util = require('util');
var p = exports.Phase = function TrailingEndPhase(parser, tree) {
Phase.call(this, parser, tree);
}
-p.prototype = new Phase;
+util.inherits(p, Phase);
p.prototype.processEOF = function() {};
diff --git a/js/lib/html5/tokenizer.js b/js/lib/html5/tokenizer.js
index bc507d2..640b781 100644
--- a/js/lib/html5/tokenizer.js
+++ b/js/lib/html5/tokenizer.js
@@ -1,6 +1,7 @@
require('../core-upgrade');
var HTML5 = require('../html5');
var events = require('events');
+var util = require('util');
var Buffer = require('./buffer').Buffer;
var Models = HTML5.Models;
@@ -13,6 +14,8 @@
}
var t = HTML5.Tokenizer = function HTML5Tokenizer(input, document) {
+ events.EventEmitter.call(this);
+
var state;
var buffer = new Buffer();
var escapeFlag = false;
@@ -932,4 +935,4 @@
}
-t.prototype = new events.EventEmitter;
+util.inherits(t, events.EventEmitter);
diff --git a/js/lib/html5/treewalker.js b/js/lib/html5/treewalker.js
index 1e1b902..e17d280 100644
--- a/js/lib/html5/treewalker.js
+++ b/js/lib/html5/treewalker.js
@@ -1,5 +1,6 @@
-var HTML5 = require('../html5');
-var events = require('events');
+var HTML5 = require('../html5'),
+ events = require('events'),
+ util = require('util');
function error(msg) {
return {type: 'SerializeError', data: msg};
@@ -53,6 +54,7 @@
HTML5.TreeWalker = function(document, dest) {
if(dest instanceof Function) this.addListener('token', dest);
walk(document, this);
+ events.EventEmitter.call(this);
};
function walk(node, dest) {
@@ -93,4 +95,4 @@
}
}
-HTML5.TreeWalker.prototype = new events.EventEmitter;
+util.inherits(HTML5.TreeWalker, events.EventEmitter);
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 f569fe4..3a764a0 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,
@@ -2924,11 +2925,11 @@
domVisitor2.addHandler( 'li', cleanUpLIHack.bind( null, env ) );
domVisitor2.addHandler( null, saveDataParsoid );
this.processors.push(domVisitor2.traverse.bind(domVisitor2));
+ events.EventEmitter.call(this);
}
// 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 5bf7b7a..c64a00c 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'),
@@ -36,11 +37,12 @@
// Assigned to start tags
this.tagId = 1;
+
+ events.EventEmitter.call(this);
};
// 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..f676c4c 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
@@ -65,6 +66,7 @@
function TokenTransformManager( env, options, pipeFactory, phaseEndRank,
attributeType ) {
// Separate the constructor, so that we can call it from subclasses.
this._construct();
+ events.EventEmitter.call(this);
}
function tokenTransformersKey(tkType, tagName) {
@@ -84,8 +86,7 @@
};
// Inherit from EventEmitter
-TokenTransformManager.prototype = new events.EventEmitter();
-TokenTransformManager.prototype.constructor = TokenTransformManager;
+util.inherits(TokenTransformManager, events.EventEmitter);
TokenTransformManager.prototype._construct = function () {
this.defaultTransformers = []; // any transforms
@@ -268,12 +269,11 @@
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();
+ TokenTransformManager.call(this);
}
// 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() {
@@ -831,12 +831,11 @@
this.phaseEndRank = phaseEndRank;
this.attributeType = attributeType;
this.trace = env.conf.parsoid.traceFlags &&
(env.conf.parsoid.traceFlags.indexOf("sync:" + phaseEndRank) !== -1);
- this._construct();
+ TokenTransformManager.call(this);
}
// 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 6757544..4cef31c 100644
--- a/js/lib/mediawiki.tokenizer.peg.js
+++ b/js/lib/mediawiki.tokenizer.peg.js
@@ -12,7 +12,8 @@
path = require('path'),
LRU = require("lru-cache"),
fs = require('fs'),
- events = require('events');
+ events = require('events'),
+ util = require('util');
function PegTokenizer( env, canCache ) {
this.env = env;
@@ -21,11 +22,11 @@
if ( this.canCache ) {
this.cacheAccum = { chunks: [] };
}
+ events.EventEmitter.call(this);
}
// 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/dumpGrepper.js b/js/tests/dumpGrepper.js
index 3200eda..38cde50 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 ) {
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: newchange
Gerrit-Change-Id: Ic588060b5ebbc073839cce7c144e266bc4a5ab79
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits