Divec has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/82756


Change subject: Replace renderingEnabled toggle with lock counter
......................................................................

Replace renderingEnabled toggle with lock counter

modules/ve/ce/ve.ce.Surface.js
* remove methods enableRendering/disableRendering/isRenderingEnabled
* add methods addRenderLock/removeRenderLock/isRenderingLocked
* Consequential method call changes
* try-finally blocks around addRenderLock/removeRenderLock pairs

modules/ve/ce/ve.ce.ContentBranchNode.js
* Consequential method call changes

Change-Id: Icb71bf536c7bad3a6c0c6512a2efb9565b5bd086
---
M modules/ve/ce/ve.ce.ContentBranchNode.js
M modules/ve/ce/ve.ce.Surface.js
2 files changed, 57 insertions(+), 39 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/56/82756/1

diff --git a/modules/ve/ce/ve.ce.ContentBranchNode.js 
b/modules/ve/ce/ve.ce.ContentBranchNode.js
index 06d864c..b815e5a 100644
--- a/modules/ve/ce/ve.ce.ContentBranchNode.js
+++ b/modules/ve/ce/ve.ce.ContentBranchNode.js
@@ -158,7 +158,8 @@
  */
 ve.ce.ContentBranchNode.prototype.renderContents = function () {
        var i, len, node, rendered;
-       if ( this.root instanceof ve.ce.DocumentNode && 
!this.root.getSurface().isRenderingEnabled() ) {
+       if ( this.root instanceof ve.ce.DocumentNode &&
+               this.root.getSurface().isRenderingLocked() ) {
                return;
        }
 
diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js
index 357597f..9492b81 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -36,7 +36,7 @@
        this.keyPressTimeout = null;
        this.$document = $( this.getElementDocument() );
        this.clipboard = {};
-       this.renderingEnabled = true;
+       this.renderLocks = 0;
        this.dragging = false;
        this.relocating = false;
        this.selecting = false;
@@ -827,7 +827,7 @@
                        }
                }
                // If there is no focused node, use native selection
-               if ( !this.focusedNode && this.isRenderingEnabled() ) {
+               if ( !this.focusedNode && !this.isRenderingLocked() ) {
                        this.showSelection( selection );
                }
        }
@@ -847,9 +847,12 @@
                // Ignore when the newRange is just a flipped oldRange
                return;
        }
-       this.disableRendering();
-       this.model.change( null, newRange );
-       this.enableRendering();
+       this.addRenderLock();
+       try {
+               this.model.change( null, newRange );
+       } finally {
+               this.removeRenderLock();
+       }
 };
 
 /**
@@ -913,14 +916,17 @@
                        if ( annotations instanceof ve.dm.AnnotationSet ) {
                                ve.dm.Document.addAnnotationsToData( data, 
this.model.getInsertionAnnotations() );
                        }
-                       this.disableRendering();
-                       this.model.change(
-                               ve.dm.Transaction.newFromInsertion(
-                                       this.documentView.model, 
previous.range.start, data
-                               ),
-                               next.range
-                       );
-                       this.enableRendering();
+                       this.addRenderLock();
+                       try {
+                               this.model.change(
+                                       ve.dm.Transaction.newFromInsertion(
+                                               this.documentView.model, 
previous.range.start, data
+                                       ),
+                                       next.range
+                               );
+                       } finally {
+                               this.removeRenderLock();
+                       }
                        return;
                }
 
@@ -931,12 +937,16 @@
                        } else {
                                range = new ve.Range( next.range.start, 
previous.range.start );
                        }
-                       this.disableRendering();
-                       this.model.change(
-                               ve.dm.Transaction.newFromRemoval( 
this.documentView.model, range ),
-                               next.range
-                       );
-                       this.enableRendering();
+                       this.addRenderLock();
+                       try {
+                               this.model.change(
+                                       ve.dm.Transaction.newFromRemoval( 
this.documentView.model,
+                                               range ),
+                                       next.range
+                               );
+                       } finally {
+                               this.removeRenderLock();
+                       }
                        return;
                }
        }
@@ -990,13 +1000,15 @@
        if ( newRange.isCollapsed() ) {
                newRange = new ve.Range( this.getNearestCorrectOffset( 
newRange.start, 1 ) );
        }
+
        if ( data.length > 0 ) {
-               this.model.change(
-                       ve.dm.Transaction.newFromInsertion(
-                               this.documentView.model, nodeOffset + 1 + 
fromLeft, data
-                       ),
-                       newRange
-               );
+                       this.model.change(
+                               ve.dm.Transaction.newFromInsertion(
+                                       this.documentView.model, nodeOffset + 1 
+ fromLeft,
+                                       data
+                               ),
+                               newRange
+                       );
        }
        if ( fromLeft + fromRight < previousData.length ) {
                this.model.change(
@@ -1004,7 +1016,8 @@
                                this.documentView.model,
                                new ve.Range(
                                        data.length + nodeOffset + 1 + fromLeft,
-                                       data.length + nodeOffset + 1 + 
previousData.length - fromRight
+                                       data.length + nodeOffset + 1 +
+                                               previousData.length - fromRight
                                )
                        ),
                        newRange
@@ -1091,8 +1104,12 @@
                ( e.altKey === true || e.ctrlKey === true ) ? 'word' : 
'character',
                e.shiftKey
        );
-
-       this.model.change( null, range );
+       this.addRenderLock();
+       try {
+               this.model.change( null, range );
+       } finally {
+               this.removeRenderLock();
+       }
        this.surfaceObserver.start( false, true );
 };
 
@@ -1647,31 +1664,31 @@
 };
 
 /**
- * Check if rendering is enabled.
+ * Check whether there are any render locks
  *
  * @method
- * @returns {boolean} Render is enabled
+ * @returns {boolean} Render is locked
  */
-ve.ce.Surface.prototype.isRenderingEnabled = function () {
-       return this.renderingEnabled;
+ve.ce.Surface.prototype.isRenderingLocked = function () {
+       return this.renderLocks > 0;
 };
 
 /**
- * Enable rendering.
+ * Add a single render lock (to disable rendering)
  *
  * @method
  */
-ve.ce.Surface.prototype.enableRendering = function () {
-       this.renderingEnabled = true;
+ve.ce.Surface.prototype.addRenderLock = function () {
+       this.renderLocks++;
 };
 
 /**
- * Disable rendering.
+ * Remove a single render lock
  *
  * @method
  */
-ve.ce.Surface.prototype.disableRendering = function () {
-       this.renderingEnabled = false;
+ve.ce.Surface.prototype.removeRenderLock = function () {
+       this.renderLocks--;
 };
 
 /**

-- 
To view, visit https://gerrit.wikimedia.org/r/82756
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb71bf536c7bad3a6c0c6512a2efb9565b5bd086
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <[email protected]>

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

Reply via email to