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

Change subject: Ensure that selection is not lost inside block slugs after 
backspace/delete
......................................................................


Ensure that selection is not lost inside block slugs after backspace/delete

It is no longer possible to cursor into a block slug, therefore this
would cause the selection to be lost after backspace/delete in some
cases (see the added test case). We were allowing slug or content
offset, rather than content offset only.

Change-Id: I43f70c657e1ac537c8eb8039c26d7f07834556a8
---
M src/dm/ve.dm.SurfaceFragment.js
M tests/ce/ve.ce.Surface.test.js
2 files changed, 20 insertions(+), 6 deletions(-)

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



diff --git a/src/dm/ve.dm.SurfaceFragment.js b/src/dm/ve.dm.SurfaceFragment.js
index 40e87ad..0a63346 100644
--- a/src/dm/ve.dm.SurfaceFragment.js
+++ b/src/dm/ve.dm.SurfaceFragment.js
@@ -925,16 +925,17 @@
                                ] );
                        }
                }
-               rangeAfterRemove = new ve.Range( rangeAfterRemove.start );
        }
+
        // rangeAfterRemove is now guaranteed to be collapsed so make sure that 
it is a content offset
-       if ( !this.document.data.isContentOffset( rangeAfterRemove.start ) ) {
-               rangeAfterRemove = this.document.getRelativeRange(
-                       rangeAfterRemove,
+       rangeAfterRemove = new ve.Range(
+               this.document.data.getNearestContentOffset(
+                       rangeAfterRemove.start,
                        // If undefined (e.g. cut), default to backwards 
movement
                        directionAfterDelete || -1
-               );
-       }
+               )
+       );
+
        this.change( [], new ve.dm.LinearSelection( this.getDocument(), 
rangeAfterRemove ) );
 
        return this;
diff --git a/tests/ce/ve.ce.Surface.test.js b/tests/ce/ve.ce.Surface.test.js
index 7f0cabe..3d2687a 100644
--- a/tests/ce/ve.ce.Surface.test.js
+++ b/tests/ce/ve.ce.Surface.test.js
@@ -220,6 +220,19 @@
                                msg: 'Empty list node deleted by backspace from 
after'
                        },
                        {
+                               html: 
'<ul><li><p></p><ul><li><p></p></li></ul></li></ul>',
+                               range: new ve.Range( 7 ),
+                               operations: ['backspace'],
+                               expectedData: function ( data ) {
+                                       data.splice( 2, 2 );
+                               },
+                               expectedSelection: {
+                                       type: 'linear',
+                                       range: new ve.Range( 5 )
+                               },
+                               msg: 'Selection is not lost inside block slug 
after backspace'
+                       },
+                       {
                                range: new ve.Range( 0, 63 ),
                                operations: ['backspace'],
                                expectedData: function ( data ) {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I43f70c657e1ac537c8eb8039c26d7f07834556a8
Gerrit-PatchSet: 6
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Divec <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Trevor Parscal <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to