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