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