Esanders has uploaded a new change for review.

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

Change subject: Only replace selection when we know it has changed
......................................................................

Only replace selection when we know it has changed

Usually when extra 'select' events are emitted we always
re-apply the native selection without checking if it has
actually changed.

TODO: Check this is a performance increase.

Bug: T87419
Change-Id: I53f7d939f1a9aa0261da3dc08f504d3a3fed4e59
---
M src/ce/ve.ce.Surface.js
1 file changed, 16 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/72/189472/1

diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 1cce4e1..60fe173 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -3156,27 +3156,27 @@
                rangeSelection = this.getRangeSelection( range ),
                nativeRange = this.getElementDocument().createRange();
 
-       this.nativeSelection.removeAllRanges();
+       nativeRange.setStart( rangeSelection.start.node, 
rangeSelection.start.offset );
        if ( rangeSelection.end ) {
-               nativeRange.setStart( rangeSelection.start.node, 
rangeSelection.start.offset );
                nativeRange.setEnd( rangeSelection.end.node, 
rangeSelection.end.offset );
-               if ( rangeSelection.isBackwards && this.nativeSelection.extend 
) {
-                       endRange = nativeRange.cloneRange();
-                       endRange.collapse( false );
-                       this.nativeSelection.addRange( endRange );
-                       try {
-                               this.nativeSelection.extend( 
nativeRange.startContainer, nativeRange.startOffset );
-                       } catch ( e ) {
-                               // Firefox sometimes fails when nodes are 
different,
-                               // see 
https://bugzilla.mozilla.org/show_bug.cgi?id=921444
-                               this.nativeSelection.addRange( nativeRange );
-                       }
-               } else {
+       }
+       if ( rangeSelection.end && rangeSelection.isBackwards && 
this.nativeSelection.extend ) {
+               endRange = nativeRange.cloneRange();
+               endRange.collapse( false );
+               this.nativeSelection.removeAllRanges();
+               this.nativeSelection.addRange( endRange );
+               try {
+                       this.nativeSelection.extend( 
nativeRange.startContainer, nativeRange.startOffset );
+               } catch ( e ) {
+                       // Firefox sometimes fails when nodes are different,
+                       // see 
https://bugzilla.mozilla.org/show_bug.cgi?id=921444
                        this.nativeSelection.addRange( nativeRange );
                }
        } else {
-               nativeRange.setStart( rangeSelection.start.node, 
rangeSelection.start.offset );
-               this.nativeSelection.addRange( nativeRange );
+               if ( !this.nativeSelection.rangeCount || !ve.compare( 
nativeRange, this.nativeSelection.getRangeAt( 0 ) ) ) {
+                       this.nativeSelection.removeAllRanges();
+                       this.nativeSelection.addRange( nativeRange );
+               }
        }
        // Setting a range doesn't give focus in all browsers so make sure this 
happens
        // Also set focus after range to prevent scrolling to top

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I53f7d939f1a9aa0261da3dc08f504d3a3fed4e59
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

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

Reply via email to