r98838 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r98837‎ | r98838 | r98839 >
Date:00:08, 4 October 2011
Author:tparscal
Status:deferred
Tags:
Comment:
Setup node length propagation
Modified paths:
  • /trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js (modified) (history)
  • /trunk/parsers/wikidom/lib/hype/bases/es.ModelNode.js (modified) (history)
  • /trunk/parsers/wikidom/tests/hype/es.ModelNode.test.js (modified) (history)

Diff [purge]

Index: trunk/parsers/wikidom/tests/hype/es.ModelNode.test.js
@@ -3,9 +3,9 @@
44 test( 'es.ModelNode', 17, function() {
55 // Example data (integers) is used for simplicity of testing
66 var modelNode1 = new es.ModelNode(),
7 - modelNode2 = new es.ModelNode( [1] ),
8 - modelNode3 = new es.ModelNode( [1, 2]),
9 - modelNode4 = new es.ModelNode( [1, 2, 3] );
 7+ modelNode2 = new es.ModelNode(),
 8+ modelNode3 = new es.ModelNode( [new es.ModelNode()] ),
 9+ modelNode4 = new es.ModelNode( [new es.ModelNode(), new es.ModelNode()] );
1010
1111 // Event triggering is detected using a callback that increments a counter
1212 var updates = 0;
@@ -25,7 +25,7 @@
2626 modelNode1.push( modelNode2 );
2727 equal( updates, 1, 'es.ModelNode emits update events on push' );
2828 equal( modelNode1[0], modelNode2, 'es.ModelNode appends node on push' );
29 -
 29+
3030 /** @covers es.ModelNode.attach */
3131 equal( attaches, 1, 'es.ModelNode emits afterAttach events when added to another node' );
3232
Index: trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js
@@ -6,16 +6,13 @@
77 *
88 * @class
99 * @constructor
10 - * @param {Integer} contentLength Length of content
 10+ * @param {Integer|Array} contents Either Length of content or array of child nodes to append
1111 * @property {Integer} contentLength Length of content
1212 */
13 -es.DocumentModelNode = function( contentLength ) {
 13+es.DocumentModelNode = function( contents ) {
1414 // Extension
15 - var node = $.extend( new es.ModelNode(), this );
 15+ var node = $.extend( new es.ModelNode( $.isArray( contents ) ? contents : [] ), this );
1616
17 - // Properties
18 - node.contentLength = contentLength || 0;
19 -
2017 // Observe add and remove operations to keep lengths up to date
2118 node.addListenerMethods( node, {
2219 'beforePush': 'onBeforePush',
@@ -25,6 +22,16 @@
2623 'beforeSplice': 'onBeforeSplice'
2724 } );
2825
 26+ // Properties
 27+ if ( typeof contents === 'number' ) {
 28+ if ( contents < 0 ) {
 29+ throw 'Invalid content length error. Content length can not be less than 0.';
 30+ }
 31+ node.contentLength = contents;
 32+ } else {
 33+ node.contentLength = 0;
 34+ }
 35+
2936 return node;
3037 };
3138
Index: trunk/parsers/wikidom/lib/hype/bases/es.ModelNode.js
@@ -16,13 +16,20 @@
1717 es.EventEmitter.call( this );
1818
1919 // Extension
20 - var node = $.extend( $.isArray( children ) ? children : [], this )
 20+ var node = $.extend( [], this )
2121
2222 // Reusable function for passing update events upstream
2323 node.emitUpdate = function() {
2424 node.emit( 'update' );
2525 };
2626
 27+ // Children
 28+ if ( $.isArray( children ) ) {
 29+ for ( var i = 0; i < children.length; i++ ) {
 30+ node.push( children[i] );
 31+ }
 32+ }
 33+
2734 return node;
2835 };
2936
@@ -83,7 +90,7 @@
8491 var childModel = this[this.length - 1];
8592 childModel.detach();
8693 childModel.removeListener( 'update', this.emitUpdate );
87 - Array.prototype.pop.call( this, childModel );
 94+ Array.prototype.pop.call( this );
8895 this.emit( 'afterPop' );
8996 this.emit( 'update' );
9097 return childModel;
@@ -105,7 +112,7 @@
106113 var childModel = this[0];
107114 childModel.detach();
108115 childModel.removeListener( 'update', this.emitUpdate );
109 - Array.prototype.shift.call( this, childModel );
 116+ Array.prototype.shift.call( this );
110117 this.emit( 'afterShift' );
111118 this.emit( 'update' );
112119 return childModel;
@@ -205,7 +212,7 @@
206213 es.ModelNode.prototype.detach = function() {
207214 this.emit( 'beforeDetach' );
208215 var parent = this.parent;
209 - this.parent = null;
 216+ this.parent = undefined;
210217 this.emit( 'afterDetach' );
211218 };
212219

Status & tagging log