Esanders has uploaded a new change for review.

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

Change subject: Fix placement of linear selection inside a table
......................................................................

Fix placement of linear selection inside a table

As stated in the TODO comment, we can't just assume cellRange.end-1
is a sensible content offset, so find the last actual content offset
within the cell. If one isn't found, don't set a selection.

Bug: T96446
Change-Id: I09a5db549520f2411f3d6758f172c16984ea4f7a
---
M demos/ve/pages/tables.html
M src/ce/nodes/ve.ce.TableNode.js
2 files changed, 23 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/12/205012/1

diff --git a/demos/ve/pages/tables.html b/demos/ve/pages/tables.html
index a047909..cb79930 100644
--- a/demos/ve/pages/tables.html
+++ b/demos/ve/pages/tables.html
@@ -47,26 +47,26 @@
 
 <table>
        <tr>
-               <td>cell 1 row 1</td>
-               <td>cell 2 row 1</td>
+               <td>col 1 row 1</td>
+               <td>col 2 row 1</td>
        </tr>
        <tr>
-               <td>cell 1 row 2</td>
+               <td>col 1 row 2</td>
                <td><table>
                                <tr>
-                                       <td>table 2 cell 1 row 1</td>
-                                       <td>table 2 cell 2 row 1</td>
+                                       <td>table 2 col 1 row 1</td>
+                                       <td>table 2 col 2 row 1</td>
                                </tr>
                                <tr>
-                                       <td>table 2 cell 1 row 2</td>
+                                       <td>table 2 col 1 row 2</td>
                                        <td><table>
                                                        <tr>
-                                                               <td>table 3 
cell 1 row 1</td>
-                                                               <td>table 3 
cell 2 row 1</td>
+                                                               <td>table 3 col 
1 row 1</td>
+                                                               <td>table 3 col 
2 row 1</td>
                                                        </tr>
                                                        <tr>
-                                                               <td>table 3 
cell 1 row 2</td>
-                                                               <td>table 3 
cell 2 row 2</td>
+                                                               <td>table 3 col 
1 row 2</td>
+                                                               <td>table 3 col 
2 row 2</td>
                                                        </tr>
                                                </table>
                                        </td>
@@ -74,6 +74,10 @@
                        </table>
                </td>
        </tr>
+       <tr>
+               <td><ul><li>List in</li><li>col 1 row 3</li></td>
+               <td><div rel="ve:Alien">col 2 row 3 contains block 
alien</div></td>
+       </tr>
 </table>
 
 <h2>Captioned table</h2>
diff --git a/src/ce/nodes/ve.ce.TableNode.js b/src/ce/nodes/ve.ce.TableNode.js
index c64374a..7332b5b 100644
--- a/src/ce/nodes/ve.ce.TableNode.js
+++ b/src/ce/nodes/ve.ce.TableNode.js
@@ -241,8 +241,10 @@
  * @param {boolean} noSelect Don't change the selection
  */
 ve.ce.TableNode.prototype.setEditing = function ( isEditing, noSelect ) {
+       var cell, offset, cellRange,
+               surfaceModel = this.surface.getModel(),
+               selection = surfaceModel.getSelection();
        if ( isEditing ) {
-               var cell, selection = this.surface.getModel().getSelection();
                if ( !selection.isSingleCell() ) {
                        selection = selection.collapseToFrom();
                        this.surface.getModel().setSelection( selection );
@@ -251,13 +253,16 @@
                cell = this.getCellNodesFromSelection( selection )[0];
                cell.setEditing( true );
                if ( !noSelect ) {
-                       // TODO: Find content offset within cell
-                       this.surface.getModel().setLinearSelection( new 
ve.Range( cell.getModel().getRange().end - 1 ) );
+                       cellRange = cell.getModel().getRange();
+                       offset = 
surfaceModel.getDocument().data.getNearestContentOffset( cellRange.end, -1 );
+                       if ( offset > cellRange.start ) {
+                               surfaceModel.setLinearSelection( new ve.Range( 
offset ) );
+                       }
                }
        } else if ( this.editingFragment ) {
                this.getCellNodesFromSelection( 
this.editingFragment.getSelection() )[0].setEditing( false );
                if ( !noSelect ) {
-                       this.surface.getModel().setSelection( 
this.editingFragment.getSelection() );
+                       surfaceModel.setSelection( 
this.editingFragment.getSelection() );
                }
                this.editingFragment = null;
        }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I09a5db549520f2411f3d6758f172c16984ea4f7a
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <esand...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to