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

Revision: 97587
Author:   inez
Date:     2011-09-20 00:27:26 +0000 (Tue, 20 Sep 2011)
Log Message:
-----------
Big refactoring to to the code - new it is using new convention for Lists and 
ListItems

Modified Paths:
--------------
    trunk/parsers/wikidom/lib/synth/bases/es.ViewList.js
    trunk/parsers/wikidom/lib/synth/bases/es.ViewListItem.js
    trunk/parsers/wikidom/lib/synth/es.Surface.css
    trunk/parsers/wikidom/lib/synth/views/es.BlockView.js
    trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js
    trunk/parsers/wikidom/lib/synth/views/es.ListBlockItemView.js
    trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js
    trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js
    trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js
    trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js
    trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js

Modified: trunk/parsers/wikidom/lib/synth/bases/es.ViewList.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/bases/es.ViewList.js        2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/bases/es.ViewList.js        2011-09-20 
00:27:26 UTC (rev 97587)
@@ -1,8 +1,10 @@
 /**
  * Creates an es.ViewList object.
  * 
- * View containers follow the operations performed on a model container and 
keep a list of views,
- * each correlating to a model in the model container.
+ * View lists follow the operations performed on a model lists and keep a list 
of views,
+ * each correlating to a model in the model list.
+ *
+ * This will override this.$ (important in case of multiple inheritance).
  * 
  * @class
  * @constructor
@@ -13,31 +15,25 @@
  * @property $ {jQuery} Container element
  * @property items {Array} List of views, correlating to models in the model 
container
  */
-es.ViewList = function( model, typeName, tagName ) {
+es.ViewList = function( model, $element ) {
        es.EventEmitter.call( this );
        this.model = model;
        if ( !this.model ) {
                return;
        }
+       this.$ = $element || $( '<div/>' );
        this.items = new es.AggregateArray();
-       if ( typeof typeName !== 'string' ) {
-               typeName = 'viewList';
-       }
-       if ( typeof tagName !== 'string' ) {
-               tagName = 'div';
-       }
-       if ( !this.$ ) {
-               this.$ = $( '<' + tagName + '/>' );
-       }
-       this.$.addClass( 'editSurface-' + typeName ).data( typeName, this );
-       var container = this;
+       
+       var list = this;
+       
        this.relayUpdate = function() {
-               container.emit( 'update' );
+               list.emit( 'update' );
        };
-       function recycleItemView( itemModel, autoCreate ) {
-               var itemView = container.lookupItemView( itemModel );
+       
+       this.recycleItemView = function( itemModel, autoCreate ) {
+               var itemView = list.lookupItemView( itemModel );
                if ( itemView ) {
-                       container.views.splice( container.views.indexOf( 
itemView ), 1 );
+                       list.items.splice( list.items.indexOf( itemView ), 1 );
                        itemView.$.detach();
                }
                if ( autoCreate && itemView === null ) {
@@ -45,61 +41,63 @@
                }
                return itemView;
        }
+       
        this.model.on( 'prepend', function( itemModel ) {
-               var itemView = recycleItemView( itemModel, true );
-               itemView.on( 'update', container.relayUpdate );
-               container.views.unshift( itemView );
-               container.$.prepend( itemView.$ );
-               container.emit( 'prepend', itemView );
-               container.emit( 'update' );
+               var itemView = list.recycleItemView( itemModel, true );
+               itemView.on( 'update', list.relayUpdate );
+               list.items.unshift( itemView );
+               list.$.prepend( itemView.$ );
+               list.emit( 'prepend', itemView );
+               list.emit( 'update' );
        } );
        this.model.on( 'append', function( itemModel ) {
-               var itemView = recycleItemView( itemModel, true );
-               itemView.on( 'update', container.relayUpdate );
-               container.views.push( itemView );
-               container.$.append( itemView.$ );
-               container.emit( 'append', itemView );
-               container.emit( 'update' );
+               var itemView = list.recycleItemView( itemModel, true );
+               itemView.on( 'update', list.relayUpdate );
+               list.items.push( itemView );
+               list.$.append( itemView.$ );
+               list.emit( 'append', itemView );
+               list.emit( 'update' );
        } );
        this.model.on( 'insertBefore', function( itemModel, beforeModel ) {
-               var beforeView = container.lookupItemView( beforeModel ),
-                       itemView = recycleItemView( itemModel, true );
-               itemView.on( 'update', container.relayUpdate );
+               var beforeView = list.lookupItemView( beforeModel ),
+                       itemView = list.recycleItemView( itemModel, true );
+               itemView.on( 'update', list.relayUpdate );
                if ( beforeView ) {
-                       container.views.splice( container.views.indexOf( 
beforeView ), 0, itemView );
+                       list.items.splice( list.items.indexOf( beforeView ), 0, 
itemView );
                        itemView.$.insertBefore( beforeView.$ );
                } else {
-                       container.views.unshift( itemView );
-                       container.$.prepend( itemView.$ );
+                       list.items.unshift( itemView );
+                       list.$.prepend( itemView.$ );
                }
-               container.emit( 'insertBefore', itemView, beforeView );
-               container.emit( 'update' );
+               list.emit( 'insertBefore', itemView, beforeView );
+               list.emit( 'update' );
        } );
        this.model.on( 'insertAfter', function( itemModel, afterModel ) {
-               var afterView = container.lookupItemView( afterModel ),
-                       itemView = recycleItemView( itemModel, true );
-               itemView.on( 'update', container.relayUpdate );
+               var afterView = list.lookupItemView( afterModel ),
+                       itemView = list.recycleItemView( itemModel, true );
+               itemView.on( 'update', list.relayUpdate );
                if ( afterView ) {
-                       container.views.splice( container.views.indexOf( 
afterView ) + 1, 0, itemView );
+                       list.items.splice( list.items.indexOf( afterView ) + 1, 
0, itemView );
                        itemView.$.insertAfter( afterView.$ );
                } else {
-                       container.views.push( itemView );
-                       container.$.append( itemView.$ );
+                       list.items.push( itemView );
+                       list.$.append( itemView.$ );
                }
-               container.emit( 'insertAfter', itemView, afterView );
-               container.emit( 'update' );
+               list.emit( 'insertAfter', itemView, afterView );
+               list.emit( 'update' );
        } );
        this.model.on( 'remove', function( itemModel ) {
-               var itemView = recycleItemView( itemModel );
-               itemView.removeListener( 'update', container.relayUpdate );
-               container.emit( 'remove', itemView );
-               container.emit( 'update' );
+               var itemView = list.recycleItemView( itemModel );
+               itemView.removeListener( 'update', list.relayUpdate );
+               list.emit( 'remove', itemView );
+               list.emit( 'update' );
        } );
-       // Auto-add views for existing items
+       
+       // Auto-add items for existing items
        var itemModels = this.model.all();
        for ( var i = 0; i < itemModels.length; i++ ) {
                var itemView = itemModels[i].createView();
-               itemView.on( 'update', container.relayUpdate );
+               itemView.on( 'update', this.relayUpdate );
                this.items.push( itemView );
                this.$.append( itemView.$ );
        }
@@ -115,5 +113,4 @@
 };
 
 /* Inheritance */
-
-es.extend( es.ViewList, es.EventEmitter );
+es.extend( es.ViewList, es.EventEmitter );
\ No newline at end of file

Modified: trunk/parsers/wikidom/lib/synth/bases/es.ViewListItem.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/bases/es.ViewListItem.js    2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/bases/es.ViewListItem.js    2011-09-20 
00:27:26 UTC (rev 97587)
@@ -1,27 +1,17 @@
 /**
  * Generic synchronized Object/Element container item.
+ * This will override this.$ (important in case of multiple inheritance).
  * 
  * @class
  * @constructor
  * @extends {es.EventEmitter}
- * @param typeName {String} Name to use in CSS classes and HTML element data
- * @param tagName {String} HTML element name to use (optional, default: "div")
+ * @param $element {jQuery} jQuery object to use
  * @property $ {jQuery} Container element
  */
-es.ViewListItem = function( model, typeName, tagName ) {
+es.ViewListItem = function( model, $element ) {
        es.EventEmitter.call( this );
        this.model = model;
-       if ( typeof typeName !== 'string' ) {
-               typeName = 'viewListItem';
-       }
-       if ( typeof tagName !== 'string' ) {
-               tagName = 'div';
-       }
-       
-       if ( !this.$ ) {
-               this.$ = $( '<' + tagName + '/>' );
-       }
-       this.$.addClass( 'editSurface-' + typeName ).data( typeName, this );
+       this.$ = $element || $( '<div/>' );
 };
 
 es.ViewListItem.prototype.getModel = function() {
@@ -29,7 +19,7 @@
 };
 
 /**
- * Gets the index of this item within it's container.
+ * Gets the index of this item within it's list.
  * 
  * This method simply delegates to the model.
  * 
@@ -42,4 +32,4 @@
 
 /* Inheritance */
 
-es.extend( es.ViewListItem, es.EventEmitter );
+es.extend( es.ViewListItem, es.EventEmitter );
\ No newline at end of file

Modified: trunk/parsers/wikidom/lib/synth/es.Surface.css
===================================================================
--- trunk/parsers/wikidom/lib/synth/es.Surface.css      2011-09-20 00:27:21 UTC 
(rev 97586)
+++ trunk/parsers/wikidom/lib/synth/es.Surface.css      2011-09-20 00:27:26 UTC 
(rev 97587)
@@ -25,7 +25,9 @@
        -webkit-user-select: none;
 }
 
-.editSurface-block {
+.editSurface-tableBlock,
+.editSurface-listBlock,
+.editSurface-paragraphBlock {
        margin: 1em;
        margin-top: 0;
        position: relative;

Modified: trunk/parsers/wikidom/lib/synth/views/es.BlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.BlockView.js       2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.BlockView.js       2011-09-20 
00:27:26 UTC (rev 97587)
@@ -8,9 +8,8 @@
  * @param typeName {String} Name of block type (optional, default: "block")
  * @param tagName {String} HTML tag name to use in rendering (optional, 
default: "div")
  */
-es.BlockView = function( blockModel, typeName, tagName ) {
-       es.ViewListItem.call( this, blockModel, typeName || 'block', tagName || 
'div' );
-       this.$.addClass( 'editSurface-block' );
+es.BlockView = function( blockModel, $element ) {
+       es.ViewListItem.call( this, blockModel, $element );
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js    2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js    2011-09-20 
00:27:26 UTC (rev 97587)
@@ -5,7 +5,8 @@
  * @constructor
  */
 es.DocumentView = function( documentModel ) {
-       es.ViewList.call( this, documentModel, 'document' );
+       es.ViewList.call( this, documentModel );
+       this.$.addClass( 'editSurface-document' )
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.ListBlockItemView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ListBlockItemView.js       
2011-09-20 00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.ListBlockItemView.js       
2011-09-20 00:27:26 UTC (rev 97587)
@@ -5,7 +5,8 @@
  * @constructor
  */
 es.ListBlockItemView = function( model ) {
-       es.ViewListItem.call( this, model, 'listItem' );
+       es.ViewListItem.call( this, model );
+       this.$.addClass( 'editSurface-listItem' );
        this.$icon = $( '<div class="editSurface-listItem-icon"></div>' );
        this.$content = $( '<div class="editSurface-listItem-content"></div>' );
        this.$

Modified: trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js   2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js   2011-09-20 
00:27:26 UTC (rev 97587)
@@ -5,8 +5,9 @@
  * @constructor
  */
 es.ListBlockView = function( model ) {
-       es.ViewList.call( this, model, 'list' );
-       es.BlockView.call( this, model, 'list' );
+       es.ViewList.call( this, model );
+       es.BlockView.call( this, model, this.$ );
+       this.$.addClass( 'editSurface-listBlock' );
        var view = this;
        this.on( 'update', function() {
                view.enumerate();

Modified: trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js      
2011-09-20 00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js      
2011-09-20 00:27:26 UTC (rev 97587)
@@ -5,7 +5,10 @@
  * @constructor
  */
 es.ParagraphBlockView = function( model ) {
-       es.BlockView.call( this, model, 'paragraph' );
+       es.BlockView.call( this, model );
+       
+       this.$.addClass( 'editSurface-paragraphBlock' );
+       
        this.contentView = new es.ContentView( this.$, this.model.content );
        var view = this;
        this.contentView.on( 'update', function() {

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js      
2011-09-20 00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js      
2011-09-20 00:27:26 UTC (rev 97587)
@@ -5,7 +5,7 @@
  * @constructor
  */
 es.TableBlockCellView = function( model ) {
-       es.ViewListItem.call( this, model, 'cell', 'td' );
+       es.ViewListItem.call( this, model, $( '<td>' ) );
        
        this.documentView = new es.DocumentView( this.model.documentModel );
        this.$.append( this.documentView.$ );

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js       
2011-09-20 00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js       
2011-09-20 00:27:26 UTC (rev 97587)
@@ -5,8 +5,8 @@
  * @constructor
  */
 es.TableBlockRowView = function( model ) {
-       es.ViewList.call( this, model, 'row', 'tr' )
-       es.ViewListItem.call( this, model, 'tr' );
+       es.ViewList.call( this, model, $( '<tr>' ) );
+       es.ViewListItem.call( this, model, this.$ );    
        
        var classes = this.$.attr('class');
        for ( var name in this.model.attributes ) {

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js  2011-09-20 
00:27:21 UTC (rev 97586)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js  2011-09-20 
00:27:26 UTC (rev 97587)
@@ -5,14 +5,12 @@
  * @constructor
  */
 es.TableBlockView = function( model ) {
-       es.ViewList.call( this, model, 'table', 'table' );
-       es.BlockView.call( this, model, 'table', 'table' );
-       
-       var classes = this.$.attr('class');
+       es.ViewList.call( this, model, $( '<table>' ) );
+       es.BlockView.call( this, model, this.$ );
        for ( var name in this.model.attributes ) {
                this.$.attr( name, this.model.attributes[name] );
        }
-       this.$.addClass(classes);
+       this.$.addClass( 'editSurface-tableBlock' );
 };
 
 /**


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

Reply via email to