http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89744
Revision: 89744
Author: tparscal
Date: 2011-06-08 20:31:36 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
Made selection more accurate
Modified Paths:
--------------
trunk/parsers/wikidom/lib/jquery.editSurface.css
trunk/parsers/wikidom/lib/jquery.editSurface.js
Modified: trunk/parsers/wikidom/lib/jquery.editSurface.css
===================================================================
--- trunk/parsers/wikidom/lib/jquery.editSurface.css 2011-06-08 20:31:03 UTC
(rev 89743)
+++ trunk/parsers/wikidom/lib/jquery.editSurface.css 2011-06-08 20:31:36 UTC
(rev 89744)
@@ -1,6 +1,6 @@
body {
font-family: "Arial";
- font-size: 0.8em;
+ font-size: 1em;
}
#selection {
Modified: trunk/parsers/wikidom/lib/jquery.editSurface.js
===================================================================
--- trunk/parsers/wikidom/lib/jquery.editSurface.js 2011-06-08 20:31:03 UTC
(rev 89743)
+++ trunk/parsers/wikidom/lib/jquery.editSurface.js 2011-06-08 20:31:36 UTC
(rev 89744)
@@ -24,21 +24,21 @@
// TODO: If the target is not a line, find the nearest
line to the cursor and use it
if ( $target.is( '.editSurface-line' ) ) {
e.preventDefault();
- e.stopPropagation();
sel = {
'active': true,
'from': null,
'to': null,
- 'start': getSelection( e ),
+ 'start': getCursorPosition( e ),
'end': null
};
+ console.log( sel.start );
cursor.show();
drawSelection( $target.parent() );
// Move cursor
if ( sel.start ) {
cursor.$.css( {
'top': sel.start.top,
- 'left': sel.start.left
+ 'left': sel.start.x
} );
}
}
@@ -61,8 +61,8 @@
var $target = $( e.target );
// TODO: If the target is not a line, find the nearest
line to the cursor and use it
if ( $target.is( '.editSurface-line' ) && sel.active ) {
- sel.end = getSelection( e );
- if ( sel.start.line < sel.end.line
+ sel.end = getCursorPosition( e );
+ if ( sel.start && sel.end && sel.start.line <
sel.end.line
|| ( sel.start.line ===
sel.end.line
&&
sel.start.index < sel.end.index ) ) {
sel.from = sel.start;
@@ -106,7 +106,8 @@
}
return text;
}
- function getSelection( e ) {
+ // TODO: Take x and y, and infer the target
+ function getCursorPosition( e ) {
var $target = $( e.target );
var metrics = $target.data( 'metrics' );
var text = $target.data( 'text' );
@@ -115,23 +116,22 @@
return null;
}
var to = metrics.length - 1;
- var l = 0;
- var r = 0;
+ var a;
+ var b = { 'l': 0, 'c': 0, 'r': 0 };
+ var x = e.layerX;
for ( var i = 0; i <= to; i++ ) {
- l = r;
- r += metrics[i];
- if ( ( e.layerX > l && e.layerX <= r ) || ( e.layerX >=
r && i == to ) ) {
+ a = b;
+ b = { 'l': a.r, 'c': a.r + ( metrics[i] / 2 ), 'r': a.r
+ metrics[i] };
+ if ( ( i === 0 && x < a.l ) || ( x > a.c && x <= b.c )
|| ( i === to && x >= b.r ) ) {
var offset = $target.offset();
var height = $target.height();
return {
'$target': $target,
'index': i,
'line': line,
+ 'x': offset.left + b.l,
'top': offset.top,
- 'left': offset.left + l,
- 'right': r,
'bottom': offset.top + height,
- 'width': r - l,
'height': height
};
}
@@ -145,9 +145,9 @@
// 1 line
if ( sel.from.index !== sel.to.index ) {
ranges.$first.show().css( {
- 'left': sel.from.left,
+ 'left': sel.from.x,
'top': sel.from.top,
- 'width': sel.to.right -
sel.from.right,
+ 'width': sel.to.x - sel.from.x,
'height': sel.from.height
} );
ranges.$fill.hide();
@@ -159,9 +159,9 @@
} else if ( sel.from.line < sel.to.line ) {
// 2+ lines
ranges.$first.show().css( {
- 'left': sel.from.left,
+ 'left': sel.from.x,
'top': sel.from.top,
- 'width': ( $container.innerWidth() -
sel.from.left )
+ 'width': ( $container.innerWidth() -
sel.from.x )
+
$container.offset().left,
'height': sel.from.height
} );
@@ -178,7 +178,7 @@
ranges.$last.show().css( {
'left': $container.offset().left,
'top': sel.to.top,
- 'width': sel.to.left -
$container.offset().left,
+ 'width': sel.to.x -
$container.offset().left,
'height': sel.to.height
} );
// XXX: Demo code!
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs