Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/139824
Change subject: Fix selection after inserting nodes
......................................................................
Fix selection after inserting nodes
Some surface fragment methods return a clone, so make sure
that is written back to this.fragment in dialogs, as this.fragment.select()
is called on teardown.
Functionally depends on If26cc0a2d in core.
Bug: 65706
Change-Id: Ia552b2a4c4c59ffc308a4acdecac78a7803a1c1f
---
M modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
M modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
M modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
M modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
M modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
8 files changed, 24 insertions(+), 22 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/24/139824/1
diff --git a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
index e8f4904..8171b28 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWReferenceModel.js
@@ -160,7 +160,6 @@
*/
ve.dm.MWReferenceModel.prototype.insertReferenceNode = function (
surfaceFragment ) {
surfaceFragment
- .collapseRangeToEnd()
.insertContent( [
{
'type': 'mwReference',
diff --git a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
index cfc72a0..fb1a8c8 100644
--- a/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
+++ b/modules/ve-mw/dm/models/ve.dm.MWTransclusionModel.js
@@ -55,7 +55,6 @@
*/
ve.dm.MWTransclusionModel.prototype.insertTransclusionNode = function (
surfaceFragment ) {
surfaceFragment
- .collapseRangeToEnd()
.insertContent( [
{
'type': 'mwTransclusionInline',
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
index e76878e..afa83d1 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js
@@ -88,17 +88,17 @@
*/
ve.ui.MWCitationDialog.prototype.applyChanges = function () {
var item,
- surfaceFragment = this.getFragment(),
- surfaceModel = surfaceFragment.getSurface(),
+ surfaceModel = this.getFragment().getSurface(),
doc = surfaceModel.getDocument(),
internalList = doc.getInternalList(),
obj = this.transclusionModel.getPlainObject();
if ( !this.referenceModel ) {
- this.getFragment().collapseRangeToEnd();
+ // Collapse returns a new fragment, so update this.fragment
+ this.fragment = this.getFragment().collapseRangeToEnd();
this.referenceModel = new ve.dm.MWReferenceModel();
this.referenceModel.insertInternalItem( surfaceModel );
- this.referenceModel.insertReferenceNode( surfaceFragment );
+ this.referenceModel.insertReferenceNode( this.getFragment() );
}
item = this.referenceModel.findInternalItem( surfaceModel );
@@ -113,7 +113,7 @@
// the referenceModel will have already
initialized the internal node with a
// paragraph - getting the range of the item
covers the entire paragraph so we have
// to get the range of it's first (and empty)
child
- surfaceFragment.clone(
item.getChildren()[0].getRange() )
+ this.getFragment().clone(
item.getChildren()[0].getRange() )
);
}
}
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
index 663a3b6..58fa81e 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWMediaInsertDialog.js
@@ -74,7 +74,8 @@
};
}
- this.getFragment().collapseRangeToEnd().insertContent( [
+ // Collapse returns a new fragment, so update this.fragment
+ this.fragment =
this.getFragment().collapseRangeToEnd().insertContent( [
{
'type': 'mwBlockImage',
'attributes': {
@@ -93,7 +94,7 @@
{ 'type': 'mwImageCaption' },
{ 'type': '/mwImageCaption' },
{ 'type': '/mwBlockImage' }
- ] ).collapseRangeToEnd().select();
+ ] );
this.close();
}
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
index b09a5cd..9595b32 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js
@@ -227,8 +227,7 @@
* @inheritdoc
*/
ve.ui.MWReferenceDialog.prototype.applyChanges = function () {
- var surfaceFragment = this.getFragment(),
- surfaceModel = surfaceFragment.getSurface();
+ var surfaceModel = this.getFragment().getSurface();
this.referenceModel.setGroup( this.referenceGroupInput.getValue() );
@@ -237,7 +236,9 @@
if ( !this.referenceModel.findInternalItem( surfaceModel ) ) {
this.referenceModel.insertInternalItem( surfaceModel );
}
- this.referenceModel.insertReferenceNode( surfaceFragment );
+ // Collapse returns a new fragment, so update this.fragment
+ this.fragment = this.getFragment().collapseRangeToEnd();
+ this.referenceModel.insertReferenceNode( this.getFragment() );
}
// Update internal item
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
index 0fc022b..541ca4e 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWReferenceListDialog.js
@@ -75,8 +75,8 @@
);
}
} else {
- // Create new model
- this.getFragment().collapseRangeToEnd().insertContent( [
+ // Collapse returns a new fragment, so update this.fragment
+ this.fragment =
this.getFragment().collapseRangeToEnd().insertContent( [
{
'type': 'mwReferenceList',
'attributes': {
@@ -85,7 +85,7 @@
}
},
{ 'type': '/mwReferenceList' }
- ] ).collapseRangeToEnd().select();
+ ] );
}
// Parent method
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
index 11001bf..67686c2 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWTemplateDialog.js
@@ -290,14 +290,15 @@
* @inheritdoc
*/
ve.ui.MWTemplateDialog.prototype.applyChanges = function () {
- var surfaceFragment = this.getFragment(),
- surfaceModel = surfaceFragment.getSurface(),
+ var surfaceModel = this.getFragment().getSurface(),
obj = this.transclusionModel.getPlainObject();
if ( this.selectedNode instanceof ve.dm.MWTransclusionNode ) {
this.transclusionModel.updateTransclusionNode( surfaceModel,
this.selectedNode );
} else if ( obj !== null ) {
- this.transclusionModel.insertTransclusionNode( surfaceFragment
);
+ // Collapse returns a new fragment, so update this.fragment
+ this.fragment = this.getFragment().collapseRangeToEnd();
+ this.transclusionModel.insertTransclusionNode(
this.getFragment() );
}
// Parent method
diff --git a/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
b/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
index 66872e3..512b8da 100644
--- a/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
+++ b/modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js
@@ -147,8 +147,7 @@
return
ve.ui.MWExtensionInspector.super.prototype.getTeardownProcess.call( this, data )
.first( function () {
var mwData,
- fragment = this.getFragment(),
- surfaceModel = fragment.getSurface();
+ surfaceModel = this.getFragment().getSurface();
if ( this.constructor.static.allowedEmpty ||
this.input.getValue() !== '' ) {
if ( this.node ) {
@@ -168,7 +167,9 @@
'body': {}
};
this.updateMwData( mwData );
-
fragment.collapseRangeToEnd().insertContent( [
+ // Collapse returns a new fragment, so
update this.fragment
+ this.fragment =
this.getFragment().collapseRangeToEnd();
+
this.getFragment().collapseRangeToEnd().insertContent( [
{
'type':
this.constructor.static.nodeModel.static.name,
'attributes': {
@@ -181,7 +182,7 @@
} else if ( this.node &&
!this.constructor.static.allowedEmpty ) {
// Content has been emptied on a node which
isn't allowed to
// be empty, so delete it.
- fragment.removeContent();
+ this.getFragment().removeContent();
}
}, this );
};
--
To view, visit https://gerrit.wikimedia.org/r/139824
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia552b2a4c4c59ffc308a4acdecac78a7803a1c1f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits