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

Revision: 97964
Author:   inez
Date:     2011-09-23 22:19:29 +0000 (Fri, 23 Sep 2011)
Log Message:
-----------
Bunch of good fixes to getOffsetFromPosition

Modified Paths:
--------------
    trunk/parsers/wikidom/lib/synth/bases/es.AggregateArray.js
    trunk/parsers/wikidom/lib/synth/views/es.ContentView.js
    trunk/parsers/wikidom/lib/synth/views/es.DocumentView.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.SurfaceView.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.AggregateArray.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/bases/es.AggregateArray.js  2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/bases/es.AggregateArray.js  2011-09-23 
22:19:29 UTC (rev 97964)
@@ -27,6 +27,19 @@
        return null;
 };
 
+es.AggregateArray.prototype.offsetOf = function( item ) {
+       if ( this.length ) {
+               var offset = 0;
+               for( var i = 0; i < this.length; i++ ) {
+                       if ( this[i] === item ) {
+                               return offset;
+                       }
+                       offset += this[i].getLength() + 1;
+               }
+       }
+       return null;
+};
+
 es.AggregateArray.prototype.rangeOf = function( item ) {
        if ( this.length ) {
                var i = 0,

Modified: trunk/parsers/wikidom/lib/synth/views/es.ContentView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ContentView.js     2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.ContentView.js     2011-09-23 
22:19:29 UTC (rev 97964)
@@ -281,6 +281,11 @@
        if ( this.model.getLength() === 0 ) {
                return 0;
        }
+
+       // Localize position
+       position.subtract( es.Position.newFromElementPagePosition( this.$ ) );
+
+       //
        /*
         * Line finding
         * 

Modified: trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js    2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.DocumentView.js    2011-09-23 
22:19:29 UTC (rev 97964)
@@ -16,23 +16,17 @@
        if ( this.items.length === 0 ) {
                return 0;
        }
-
-       var blockView = this.items[0],
-               blockLength = 0,
-               offset = 0;
        
+       var blockView = this.items[0];
+
        for ( var i = 0; i < this.items.length; i++ ) {
                if ( this.items[i].$.offset().top >= position.top ) {
                        break;
                }
                blockView = this.items[i];
-               blockLength = blockView.getLength();
-               offset += blockLength + 1;
        }
-
-       offset -= blockLength + 1;
-
-       return offset + blockView.getOffsetFromPosition( position );
+       
+       return blockView.list.items.offsetOf( blockView ) + 
blockView.getOffsetFromPosition( position );
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js   2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.ListBlockView.js   2011-09-23 
22:19:29 UTC (rev 97964)
@@ -30,24 +30,16 @@
                return 0;
        }
        
-       var contentOffset,
-               itemHeight,
-               offset = 0;
+       var listItemView = this.items[0];
 
        for ( var i = 0; i < this.items.length; i++ ) {
-               contentOffset = this.items[i].$content.offset();
-               if ( position.top >= contentOffset.top ) {
-                       itemHeight = this.items[i].$.height();
-                       if ( position.top < contentOffset.top + itemHeight ) {
-                               position.left -= contentOffset.left;
-                               position.top -= contentOffset.top;
-                               return offset + this.items[i].getContentOffset( 
position );
-                       }
+               if ( this.items[i].$.offset().top >= position.top ) {
+                       break;
                }
-               offset += this.items[i].getLength() + 1;
+               listItemView = this.items[i];
        }
        
-       throw 'Position coordinates are outside of the view.';
+       return listItemView.list.items.offsetOf( listItemView ) + 
listItemView.getContentOffset( position );
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js      
2011-09-23 22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.ParagraphBlockView.js      
2011-09-23 22:19:29 UTC (rev 97964)
@@ -25,9 +25,6 @@
  * @returns {Integer} Offset nearest to position
  */
 es.ParagraphBlockView.prototype.getOffsetFromPosition = function( position ) {
-       var blockPosition = this.$.offset();
-       position.left -= blockPosition.left;
-       position.top -= blockPosition.top;
        return this.contentView.getOffset( position );
 };
 

Modified: trunk/parsers/wikidom/lib/synth/views/es.SurfaceView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.SurfaceView.js     2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.SurfaceView.js     2011-09-23 
22:19:29 UTC (rev 97964)
@@ -238,13 +238,12 @@
 };
 
 es.SurfaceView.prototype.onMouseDown = function( e ) {
-       var position = es.Position.newFromEventPagePosition( e );
-       var offset = this.documentView.getOffsetFromPosition( position );
-       this.from = offset;
+       var mousePosition = es.Position.newFromEventPagePosition( e );
+       var contentOffset = this.documentView.getOffsetFromPosition( 
mousePosition );
+
+       this.from = contentOffset;
        this.selecting = true;
 
-       console.log(offset);
-
        if ( !this.$input.is(':focus') ) {
                this.$input.focus().select();
        }
@@ -254,10 +253,10 @@
 
 es.SurfaceView.prototype.onMouseMove = function( e ) {
        if (this.selecting ) {
-               var position = es.Position.newFromEventPagePosition( e );
-               position.subtract( es.Position.newFromElementPagePosition( 
this.documentView.$ ) );
-               var offset = this.documentView.getOffsetFromPosition( position 
);
-               this.to = offset;
+               var mousePosition = es.Position.newFromEventPagePosition( e );
+               var contentOffset = this.documentView.getOffsetFromPosition( 
mousePosition );
+
+               this.to = contentOffset;                
                this.documentView.drawSelection( new es.Range( this.from, 
this.to ) );
        }
        // TODO: Respond to mouse move event, updating selection while painting

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js      
2011-09-23 22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockCellView.js      
2011-09-23 22:19:29 UTC (rev 97964)
@@ -21,22 +21,20 @@
  * @returns {Integer} Offset nearest to position
  */
 es.TableBlockCellView.prototype.getOffsetFromPosition = function( position ) {
-       var blockOffset,
-               itemHeight,
-               offset = 0;
+       if ( this.items.length === 0 ) {
+               return 0;
+       }
        
+       var blockView = this.items[0];
+
        for ( var i = 0; i < this.items.length; i++ ) {
-               blockOffset = this.items[i].$.offset();
-               if ( position.top >= blockOffset.top ) {
-                       itemHeight = this.items[i].$.height();
-                       if ( position.top < blockOffset.top + itemHeight ) {
-                               return offset + 
this.items[i].getOffsetFromPosition( position );
-                       }
+               if ( this.items[i].$.offset().top >= position.top ) {
+                       break;
                }
-               offset += this.items[i].getLength() + 1;
+               blockView = this.items[i];
        }
        
-       throw 'Position coordinates are outside of the view.';
+       return blockView.list.items.offsetOf( blockView ) + 
blockView.getOffsetFromPosition( position );
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js       
2011-09-23 22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockRowView.js       
2011-09-23 22:19:29 UTC (rev 97964)
@@ -22,22 +22,20 @@
  * @returns {Integer} Offset nearest to position
  */
 es.TableBlockRowView.prototype.getOffsetFromPosition = function( position ) {
-       var cellOffset,
-               itemWidth,
-               offset = 0;
+       if ( this.items.length === 0 ) {
+               return 0;
+       }
+       
+       var cellView = this.items[0];
 
        for ( var i = 0; i < this.items.length; i++ ) {
-               cellOffset = this.items[i].$.offset();
-               if ( position.left >= cellOffset.left ) {
-                       itemWidth = this.items[i].$.width();
-                       if ( position.left < cellOffset.left + itemWidth ) {
-                               return offset + 
this.items[i].getOffsetFromPosition( position );
-                       }
+               if ( this.items[i].$.offset().left >= position.left ) {
+                       break;
                }
-               offset += this.items[i].getLength() + 1;
+               cellView = this.items[i];
        }
        
-       throw 'Position coordinates are outside of the view.';
+       return cellView.list.items.offsetOf( cellView ) + 
cellView.getOffsetFromPosition( position );
 };
 
 /**

Modified: trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js
===================================================================
--- trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js  2011-09-23 
22:17:41 UTC (rev 97963)
+++ trunk/parsers/wikidom/lib/synth/views/es.TableBlockView.js  2011-09-23 
22:19:29 UTC (rev 97964)
@@ -27,22 +27,16 @@
                return 0;
        }
        
-       var rowOffset,
-               itemHeight,
-               offset = 0;
+       var rowView = this.items[0];
 
        for ( var i = 0; i < this.items.length; i++ ) {
-               rowOffset = this.items[i].$.offset();
-               if ( position.top >= rowOffset.top ) {
-                       itemHeight = this.items[i].$.height();
-                       if ( position.top < rowOffset.top + itemHeight ) {
-                               return offset + 
this.items[i].getOffsetFromPosition( position );
-                       }
+               if ( this.items[i].$.offset().top >= position.top ) {
+                       break;
                }
-               offset += this.items[i].getLength() + 1;
+               rowView = this.items[i];
        }
        
-       throw 'Position coordinates are outside of the view.';
+       return rowView.list.items.offsetOf( rowView ) + 
rowView.getOffsetFromPosition( position );
 };
 
 /**


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

Reply via email to