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

Revision: 113848
Author:   catrope
Date:     2012-03-14 21:02:26 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Move computation of missing offset from pushAction() to synchronize(), and only 
compute offsets for actions that require them. This also fixes an issue where 
offsets computed by pushAction() would be adjusted incorrectly by pushAction().

Modified Paths:
--------------
    trunk/extensions/VisualEditor/modules/ve/dm/ve.dm.DocumentSynchronizer.js

Modified: 
trunk/extensions/VisualEditor/modules/ve/dm/ve.dm.DocumentSynchronizer.js
===================================================================
--- trunk/extensions/VisualEditor/modules/ve/dm/ve.dm.DocumentSynchronizer.js   
2012-03-14 21:02:24 UTC (rev 113847)
+++ trunk/extensions/VisualEditor/modules/ve/dm/ve.dm.DocumentSynchronizer.js   
2012-03-14 21:02:26 UTC (rev 113848)
@@ -25,13 +25,11 @@
  * @method
  * @param {String} type Type of action, can be: "insert", "delete", "rebuild", 
"resize" or "update"
  * @param {ve.dm.Node} node Node this action is related to
- * @param {Integer} offset Offset of node, improves performance if this has 
already been calculated
+ * @param {Integer|null} offset Offset of node, improves performance if this 
has already been calculated.
+ *                         Only used for insert and rebuild actions
  * @param {Integer} adjustment Node length adjustment, if any
  */
 ve.dm.DocumentSynchronizer.prototype.pushAction = function( type, node, 
offset, adjustment ) {
-       if ( offset === undefined ) {
-               offset = this.model.getOffsetFromNode( node );
-       }
        this.actions.push( {
                'type': type,
                'node': node,
@@ -54,9 +52,13 @@
                parent;
        for ( var i = 0, len = this.actions.length; i < len; i++ ) {
                action = this.actions[i];
-               offset = action.offset + adjustment;
+               offset = action.offset === null ? null : ( action.offset + 
adjustment );
                switch ( action.type ) {
                        case 'insert':
+                               // Compute the offset if it wasn't provided
+                               if ( offset === null ) {
+                                       offset = this.model.getOffsetFromNode( 
action.node );
+                               }
                                // Insert the new node at the given offset
                                var target = this.model.getNodeFromOffset( 
offset + 1 );
                                if ( target === this.model ) {
@@ -81,6 +83,10 @@
                                adjustment -= action.node.getElementLength();
                                break;
                        case 'rebuild':
+                               // Compute the offset if it wasn't provided
+                               if ( offset === null ) {
+                                       offset = this.model.getOffsetFromNode( 
action.node );
+                               }
                                // Replace original node with new node
                                var newNodes = 
ve.dm.DocumentNode.createNodesFromData( this.model.getData(
                                        new ve.Range( offset, 
action.node.getElementLength() + action.adjustment )


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

Reply via email to