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

Revision: 89840
Author:   tparscal
Date:     2011-06-10 19:00:40 +0000 (Fri, 10 Jun 2011)
Log Message:
-----------
Replaced closestToOffset plugin with much simpler function that only takes 
vertical axis into account.

Modified Paths:
--------------
    trunk/parsers/wikidom/demos/surface/index.html
    trunk/parsers/wikidom/lib/jquery.editSurface.js

Removed Paths:
-------------
    trunk/parsers/wikidom/lib/jquery.closestToOffset.js

Modified: trunk/parsers/wikidom/demos/surface/index.html
===================================================================
--- trunk/parsers/wikidom/demos/surface/index.html      2011-06-10 18:48:16 UTC 
(rev 89839)
+++ trunk/parsers/wikidom/demos/surface/index.html      2011-06-10 19:00:40 UTC 
(rev 89840)
@@ -12,7 +12,6 @@
                
                <!-- EditSurface -->
                <script type="text/javascript" 
src="../../lib/jquery.js"></script>
-               <script type="text/javascript" 
src="../../lib/jquery.closestToOffset.js"></script>
                <script type="text/javascript" 
src="../../lib/jquery.flow.js"></script>
                <script type="text/javascript" 
src="../../lib/jquery.editSurface.js"></script>
                

Deleted: trunk/parsers/wikidom/lib/jquery.closestToOffset.js
===================================================================
--- trunk/parsers/wikidom/lib/jquery.closestToOffset.js 2011-06-10 18:48:16 UTC 
(rev 89839)
+++ trunk/parsers/wikidom/lib/jquery.closestToOffset.js 2011-06-10 19:00:40 UTC 
(rev 89840)
@@ -1,33 +0,0 @@
-$.fn.closestToOffset = function( offset ) {
-       var $e = null,
-               x = offset.left,
-               y = offset.top,
-               o,
-               d,
-               dx,
-               dy,
-               md;
-       this.each( function() {
-               var o = $(this).offset();
-               if ( ( x >= o.left ) && ( x <= o.right ) && ( y >= o.top ) && ( 
y <= o.bottom ) ) {
-                       $e = $(this);
-                       return false;
-               }
-               var offsets = [
-                       [o.left, o.top],
-                       [o.right, o.top],
-                       [o.left, o.bottom],
-                       [o.right, o.bottom]
-               ];
-               for ( var i = 0; i < offsets.length; i++ ) {
-                       dx = offsets[i][0] - x;
-                       dy = offsets[i][1] - y;
-                       d = Math.sqrt( ( dx * dx ) + ( dy * dy ) );
-                       if ( md === undefined || d < md ) {
-                               md = d;
-                               $e = $(this);
-                       }
-               }
-       } );
-       return $e;
-};

Modified: trunk/parsers/wikidom/lib/jquery.editSurface.js
===================================================================
--- trunk/parsers/wikidom/lib/jquery.editSurface.js     2011-06-10 18:48:16 UTC 
(rev 89839)
+++ trunk/parsers/wikidom/lib/jquery.editSurface.js     2011-06-10 19:00:40 UTC 
(rev 89840)
@@ -32,7 +32,7 @@
                'mousedown': function( e ) {
                        var $target = $( e.target );
                        if ( $target.is( '.editSurface-paragraph' ) ) {
-                               $target = $target.children().closestToOffset( { 
'left': e.pageX, 'top': e.pageY } );
+                               $target = getNearestLine( $target.children(), 
e.pageY );
                        }
                        if ( !$target.is( '.editSurface-line' ) ) {
                                var $line = $target.closest( 
'.editSurface-line' );
@@ -81,14 +81,9 @@
                        if ( sel.active ) {
                                var $target = $( e.target );
                                if ( !$target.is( '.editSurface-line' ) ) {
-                                       $target = 
sel.start.$target.parent().children().closestToOffset(
-                                               { 'left': e.pageX, 'top': 
e.pageY }
-                                       );
+                                       $target = getNearestLine( 
sel.start.$target.parent().children(), e.pageY );
                                }
                                sel.end = getCursorPosition( e.pageX, e.pageY, 
$target );
-                               //console.log( [sel.start.char, sel.end.char] );
-                               //console.log( [sel.start.word, sel.end.word] );
-                               //console.log( [sel.start.line, sel.end.line] );
                                if ( sel.start.line < sel.end.line
                                                || ( sel.start.line === 
sel.end.line
                                                                && 
sel.start.char < sel.end.char ) ) {
@@ -105,6 +100,26 @@
        } );
        
        // Functions
+       function getNearestLine( $lines, y ) {
+               var $line,
+                       minDistance;
+               $lines.each( function() {
+                       var top = $(this).offset().top;
+                       var bottom = top + $(this).height();
+                       // Inside test
+                       if ( y > top && y < bottom ) {
+                               $line = $(this);
+                               return false;
+                       }
+                       // Distance test
+                       var distance = Math.abs( y - top );
+                       if ( minDistance === undefined || distance < 
minDistance ) {
+                               minDistance = distance;
+                               $line = $(this);
+                       }
+               } );
+               return $line;
+       }
        function getSelectionText() {
                var text;
                if ( sel.from && sel.to ) {


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

Reply via email to