jenkins-bot has submitted this change and it was merged.

Change subject: Do not focus CE on mobile when editor opens
......................................................................


Do not focus CE on mobile when editor opens

Extract the part of mw.Target#restoreEditSection responsible for moving
cursor to a separate method and move the cursor only on desktop.

Bug: 68832
Change-Id: I4ffc54ced64ce9e52d0cbcffb2fb4d082239098c
---
M modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
M modules/ve-mw/init/ve.init.mw.Target.js
2 files changed, 56 insertions(+), 41 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js 
b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
index 654fec8..5fbea1a 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.MobileViewTarget.js
@@ -69,7 +69,6 @@
  * Once surface is ready ready, init UI.
  */
 ve.init.mw.MobileViewTarget.prototype.onSurfaceReady = function () {
-       this.surface.getView().focus();
        this.restoreEditSection();
 };
 
@@ -103,13 +102,22 @@
 /**
  * @inheritdoc
  */
-ve.init.mw.MobileViewTarget.prototype.scrollToHeading = function ( headingNode 
) {
-       var position;
+ve.init.mw.MobileViewTarget.prototype.goToHeading = function ( headingNode ) {
+       this.scrollToHeading( headingNode );
+};
 
-       if ( this.isIos ) {
-               position = headingNode.$element.offset().top - 
this.toolbar.$element.height();
-               this.surface.$element.closest( '.overlay-content' ).scrollTop( 
position );
-       } else {
-               
ve.init.mw.MobileViewTarget.super.prototype.scrollToHeading.call( this, 
headingNode );
-       }
+/**
+ * @inheritdoc
+ */
+ve.init.mw.MobileViewTarget.prototype.scrollToHeading = function ( headingNode 
) {
+       var target = this, position;
+
+       setTimeout( function () {
+               if ( target.isIos ) {
+                       position = headingNode.$element.offset().top - 
target.toolbar.$element.height();
+                       target.surface.$element.closest( '.overlay-content' 
).scrollTop( position );
+               } else {
+                       
ve.init.mw.MobileViewTarget.super.prototype.scrollToHeading.call( target, 
headingNode );
+               }
+       } );
 };
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index a76eb7c..d74db21 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -1432,14 +1432,10 @@
  */
 ve.init.mw.Target.prototype.restoreEditSection = function () {
        if ( this.section !== undefined && this.section > 0 ) {
-               var offset, offsetNode, nextNode,
-                       target = this,
-                       surfaceView = this.surface.getView(),
-                       surfaceModel = surfaceView.getModel(),
+               var surfaceView = this.surface.getView(),
                        $documentNode = 
surfaceView.getDocument().getDocumentNode().$element,
                        $section = $documentNode.find( 'h1, h2, h3, h4, h5, h6' 
).eq( this.section - 1 ),
-                       headingNode = $section.data( 'view' ),
-                       lastHeadingLevel = -1;
+                       headingNode = $section.data( 'view' );
 
                if ( $section.length ) {
                        this.initialEditSummary = '/* ' +
@@ -1447,30 +1443,45 @@
                }
 
                if ( headingNode ) {
-                       // Find next sibling which isn't a heading
-                       offsetNode = headingNode;
-                       while ( offsetNode instanceof ve.ce.HeadingNode && 
offsetNode.getModel().getAttribute( 'level' ) > lastHeadingLevel ) {
-                               lastHeadingLevel = 
offsetNode.getModel().getAttribute( 'level' );
-                               // Next sibling
-                               nextNode = 
offsetNode.parent.children[ve.indexOf( offsetNode, offsetNode.parent.children ) 
+ 1];
-                               if ( !nextNode ) {
-                                       break;
-                               }
-                               offsetNode = nextNode;
-                       }
-                       offset = 
surfaceModel.getDocument().data.getNearestContentOffset(
-                               offsetNode.getModel().getOffset(), 1
-                       );
-                       // onDocumentFocus is debounced, so wait for that to 
happen before setting
-                       // the model selection, otherwise it will get reset
-                       this.surface.getView().once( 'focus', function () {
-                               surfaceModel.setSelection( new ve.Range( offset 
) );
-                               target.scrollToHeading( headingNode );
-                       } );
+                       this.goToHeading( headingNode );
                }
 
                this.section = undefined;
        }
+};
+
+/**
+ * Move the cursor to a given heading and scroll to it.
+ *
+ * @method
+ * @param {ve.ce.HeadingNode} headingNode Heading node to scroll to
+ */
+ve.init.mw.Target.prototype.goToHeading = function ( headingNode ) {
+       var nextNode, offset,
+               target = this,
+               offsetNode = headingNode,
+               surfaceModel = this.surface.getView().getModel(),
+               lastHeadingLevel = -1;
+
+       // Find next sibling which isn't a heading
+       while ( offsetNode instanceof ve.ce.HeadingNode && 
offsetNode.getModel().getAttribute( 'level' ) > lastHeadingLevel ) {
+               lastHeadingLevel = offsetNode.getModel().getAttribute( 'level' 
);
+               // Next sibling
+               nextNode = offsetNode.parent.children[ve.indexOf( offsetNode, 
offsetNode.parent.children ) + 1];
+               if ( !nextNode ) {
+                       break;
+               }
+               offsetNode = nextNode;
+       }
+       offset = surfaceModel.getDocument().data.getNearestContentOffset(
+               offsetNode.getModel().getOffset(), 1
+       );
+       // onDocumentFocus is debounced, so wait for that to happen before 
setting
+       // the model selection, otherwise it will get reset
+       this.surface.getView().once( 'focus', function () {
+               surfaceModel.setSelection( new ve.Range( offset ) );
+               target.scrollToHeading( headingNode );
+       } );
 };
 
 /**
@@ -1480,11 +1491,7 @@
  * @param {ve.ce.HeadingNode} headingNode Heading node to scroll to
  */
 ve.init.mw.Target.prototype.scrollToHeading = function ( headingNode ) {
-       var $window = $( OO.ui.Element.getWindow( this.$element ) ),
-               target = this;
+       var $window = $( OO.ui.Element.getWindow( this.$element ) );
 
-       // Wait for toolbar to animate in so we can account for its height
-       setTimeout( function () {
-               $window.scrollTop( headingNode.$element.offset().top - 
target.toolbar.$element.height() );
-       }, 200 );
+       $window.scrollTop( headingNode.$element.offset().top - 
this.toolbar.$element.height() );
 };

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I4ffc54ced64ce9e52d0cbcffb2fb4d082239098c
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: JGonera <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: JGonera <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to