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