https://www.mediawiki.org/wiki/Special:Code/MediaWiki/110904

Revision: 110904
Author:   inez
Date:     2012-02-08 00:30:40 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
Implement: surfaceView.showCursorAt(int n)

Modified Paths:
--------------
    trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js

Modified: trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js
===================================================================
--- trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js        
2012-02-08 00:26:18 UTC (rev 110903)
+++ trunk/extensions/VisualEditor/modules/ve/ce/ve.es.Surface.js        
2012-02-08 00:30:40 UTC (rev 110904)
@@ -116,6 +116,54 @@
        }
 };
 
+
+ve.es.Surface.prototype.showCursorAt = function( offset ) {
+       var $node = this.documentView.getNodeFromOffset( offset ).$;
+       var current = [$node.contents(), 0];
+       var stack = [current];
+       var node;
+       var localOffset;
+       
+       var index = 1 + this.documentView.getOffsetFromNode( $node.data('view') 
);
+               
+       while ( stack.length > 0 ) {
+               if ( current[1] >= current[0].length ) {
+                       stack.pop();
+                       current = stack[ stack.length - 1 ];
+                       continue;
+               }
+               var item = current[0][current[1]];
+               var $item = current[0].eq( current[1] );
+               
+               if ( item.nodeType === 3 ) {
+                       var length = item.textContent.length;
+                       if ( offset >= index && offset <= index + length ) {
+                               node = item;
+                               localOffset = offset - index;
+                       } else {
+                               index += length;
+                       }
+               } else if ( item.nodeType === 1 ) {
+                       if ( $( item ).attr('contentEditable') === "false" ) {
+                               index += 1;
+                       } else {
+                               stack.push( [$item.contents(), 0] );
+                               current[1]++;
+                               current = stack[stack.length-1];
+                               continue;
+                       }
+               }
+               current[1]++;
+       }
+       var range = document.createRange();
+       range.collapsed = true;
+       range.setStart(node, localOffset);
+
+       var sel = window.getSelection();
+       sel.removeAllRanges();
+       sel.addRange(range);
+};
+
 /* Inheritance */
 
 ve.extendClass( ve.es.Surface, ve.EventEmitter );


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to