http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99125

Revision: 99125
Author:   tparscal
Date:     2011-10-06 18:03:25 +0000 (Thu, 06 Oct 2011)
Log Message:
-----------
Added references to linear model elements from tree model nodes.

Modified Paths:
--------------
    trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js
    trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js
    trunk/parsers/wikidom/lib/hype/models/es.ListItemModel.js
    trunk/parsers/wikidom/lib/hype/models/es.ListModel.js
    trunk/parsers/wikidom/lib/hype/models/es.ParagraphModel.js
    trunk/parsers/wikidom/lib/hype/models/es.TableCellModel.js
    trunk/parsers/wikidom/lib/hype/models/es.TableModel.js
    trunk/parsers/wikidom/lib/hype/models/es.TableRowModel.js
    trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js

Modified: trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js        
2011-10-06 17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/bases/es.DocumentModelNode.js        
2011-10-06 18:03:25 UTC (rev 99125)
@@ -9,7 +9,7 @@
  * @param {Integer|Array} contents Either Length of content or array of child 
nodes to append
  * @property {Integer} contentLength Length of content
  */
-es.DocumentModelNode = function( contents ) {
+es.DocumentModelNode = function( element, contents ) {
        // Extension
        var node = $.extend( new es.ModelNode(), this );
        
@@ -23,6 +23,7 @@
        } );
        
        // Properties
+       node.element = element || null;
        node.contentLength = 0;
        if ( typeof contents === 'number' ) {
                if ( contents < 0 ) {
@@ -129,6 +130,16 @@
 };
 
 /**
+ * Gets the element object.
+ * 
+ * @method
+ * @returns {Object} Element object in linear data model
+ */
+es.DocumentModelNode.prototype.getElement = function() {
+       return this.element;
+};
+
+/**
  * Gets the content length.
  * 
  * FIXME: This method makes assumptions that a node with a data property is a 
DocumentModel, which

Modified: trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js   2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.DocumentModel.js   2011-10-06 
18:03:25 UTC (rev 99125)
@@ -11,7 +11,7 @@
  */
 es.DocumentModel = function( data, attributes ) {
        // Inheritance
-       var node = $.extend( new es.DocumentModelNode( length ), this );
+       var node = $.extend( new es.DocumentModelNode( null, length ), this );
        
        // Properties
        node.data = $.isArray( data ) ? data : [];
@@ -20,9 +20,10 @@
        // Build a tree of models, which is a space partitioning data structure
        var currentNode = node;
        for ( var i = 0, length = node.data.length; i < length; i++ ) {
-               if ( node.data[i].type !== undefined ) {
+               if ( data[i].type !== undefined ) {
                        // It's an element, figure out it's type
-                       var type = node.data[i].type,
+                       var element = node.data[i],
+                               type = element.type,
                                open = type[0] !== '/';
                        // Trim the "/" off the beginning of closing tag types
                        if ( !open ) {
@@ -34,7 +35,7 @@
                                        throw 'Unsuported element error. No 
class registered for element type: ' + type;
                                }
                                // Create a model node for the element
-                               var newNode = new 
es.DocumentModel.nodeModels[node.data[i].type]();
+                               var newNode = new 
es.DocumentModel.nodeModels[element.type]( element );
                                // Add the new model node as a child
                                currentNode.push( newNode );
                                // Descend into the new model node
@@ -47,7 +48,7 @@
                        // It's content, let's start tracking the length
                        var start = i;
                        // Move forward to the next object, tracking the length 
as we go
-                       while ( node.data[i].type === undefined && i < length ) 
{
+                       while ( data[i].type === undefined && i < length ) {
                                i++;
                        }
                        // Now we know how long the current node is
@@ -57,6 +58,8 @@
                }
        }
        
+       console.dir( node );
+       
        return node;
 };
 
@@ -174,7 +177,7 @@
                        }
                        target.splice( index, 1 );
                }
-       };
+       }
        
        return {
                // Retain

Modified: trunk/parsers/wikidom/lib/hype/models/es.ListItemModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.ListItemModel.js   2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.ListItemModel.js   2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.ListItemModel = function( length ) {
+es.ListItemModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/lib/hype/models/es.ListModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.ListModel.js       2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.ListModel.js       2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.ListModel = function( length ) {
+es.ListModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/lib/hype/models/es.ParagraphModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.ParagraphModel.js  2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.ParagraphModel.js  2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.ParagraphModel = function( length ) {
+es.ParagraphModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/lib/hype/models/es.TableCellModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.TableCellModel.js  2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.TableCellModel.js  2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.TableCellModel = function( length ) {
+es.TableCellModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/lib/hype/models/es.TableModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.TableModel.js      2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.TableModel.js      2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.TableModel = function( length ) {
+es.TableModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/lib/hype/models/es.TableRowModel.js
===================================================================
--- trunk/parsers/wikidom/lib/hype/models/es.TableRowModel.js   2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/lib/hype/models/es.TableRowModel.js   2011-10-06 
18:03:25 UTC (rev 99125)
@@ -4,9 +4,9 @@
  * @class
  * @constructor
  */
-es.TableRowModel = function( length ) {
+es.TableRowModel = function( element, length ) {
        // Extension
-       return $.extend( new es.DocumentModelNode( length ), this );
+       return $.extend( new es.DocumentModelNode( element, length ), this );
 };
 
 /* Methods */

Modified: trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js
===================================================================
--- trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js   2011-10-06 
17:55:23 UTC (rev 99124)
+++ trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js   2011-10-06 
18:03:25 UTC (rev 99125)
@@ -184,20 +184,20 @@
  * This is a node tree that describes each partition within the document's 
content data.
  */
 var tree = [
-       new es.ParagraphModel( 3 ),
-       new es.TableModel( [
-               new es.TableRowModel( [
-                       new es.TableCellModel( [
-                               new es.ParagraphModel( 1 ),
-                               new es.ListModel( [
-                                       new es.ListItemModel( 1 ),
-                                       new es.ListItemModel( 1 ),
-                                       new es.ListItemModel( 1 )
+       new es.ParagraphModel( data[0], 3 ),
+       new es.TableModel( data[5], [
+               new es.TableRowModel( data[6], [
+                       new es.TableCellModel( data[7], [
+                               new es.ParagraphModel( data[8], 1 ),
+                               new es.ListModel( data[11], [
+                                       new es.ListItemModel( data[12], 1 ),
+                                       new es.ListItemModel( data[15], 1 ),
+                                       new es.ListItemModel( data[18], 1 )
                                ] )
                        ] )
                ] )
        ] ),
-       new es.ParagraphModel( 1 )
+       new es.ParagraphModel( data[25], 1 )
 ];
 
 test( 'es.DocumentModel', function() {


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to