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