Esanders has uploaded a new change for review.

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

Change subject: Tables: Add getMaxColCount to count total columns in a table 
matrix
......................................................................

Tables: Add getMaxColCount to count total columns in a table matrix

The number of columns varies in a sparse table. Ensure
that getColCount is always called with a row parameter
and fix instances of it being used incorrectly.

Change-Id: Ic42f3d87f1b4f197a18791c6f0a3ff59a5a1eb0b
---
M src/ce/keydownhandlers/ve.ce.LinearDeleteKeyDownHandler.js
M src/ce/ve.ce.Surface.js
M src/dm/ve.dm.TableMatrix.js
3 files changed, 30 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/05/266505/1

diff --git a/src/ce/keydownhandlers/ve.ce.LinearDeleteKeyDownHandler.js 
b/src/ce/keydownhandlers/ve.ce.LinearDeleteKeyDownHandler.js
index 7486cc9..1ac16e1 100644
--- a/src/ce/keydownhandlers/ve.ce.LinearDeleteKeyDownHandler.js
+++ b/src/ce/keydownhandlers/ve.ce.LinearDeleteKeyDownHandler.js
@@ -43,7 +43,7 @@
  */
 ve.ce.LinearDeleteKeyDownHandler.static.execute = function ( surface, e ) {
        var docLength, startNode, tableEditingRange, position, skipNode, 
pairNode, linkNode, range,
-               documentModelSelectedNodes, i, node, nodeRange, nodeOuterRange, 
matrix,
+               documentModelSelectedNodes, i, node, nodeRange, nodeOuterRange, 
matrix, col, row,
                direction = e.keyCode === OO.ui.Keys.DELETE ? 1 : -1,
                unit = ( e.altKey === true || e.ctrlKey === true ) ? 'word' : 
'character',
                offset = 0,
@@ -190,8 +190,10 @@
                                        ) );
                                } else {
                                        matrix = node.getMatrix();
+                                       row = matrix.getRowCount() - 1;
+                                       col = matrix.getColCount( row ) - 1
                                        surface.getModel().setSelection( new 
ve.dm.TableSelection(
-                                               documentModel, nodeOuterRange, 
matrix.getColCount() - 1, matrix.getRowCount() - 1
+                                               documentModel, nodeOuterRange, 
col, row
                                        ) );
                                }
                                e.preventDefault();
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 81bc1dd..d76e359 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -1123,7 +1123,7 @@
  */
 ve.ce.Surface.prototype.afterDocumentKeyDown = function ( e ) {
        var direction, focusableNode, startOffset, endOffset, offsetDiff, 
dmFocus, dmSelection,
-               inNonSlug, ceSelection, ceNode, range, fixupCursorForUnicorn, 
matrix, $focusNode,
+               inNonSlug, ceSelection, ceNode, range, fixupCursorForUnicorn, 
matrix, col, row, $focusNode,
                surface = this,
                isArrow = (
                        e.keyCode === OO.ui.Keys.UP ||
@@ -1329,8 +1329,10 @@
                                ) );
                        } else {
                                matrix = focusableNode.getModel().getMatrix();
+                               row = matrix.getRowCount() - 1;
+                               col = matrix.getColCount( row ) - 1
                                this.model.setSelection( new 
ve.dm.TableSelection(
-                                       this.model.documentModel, range, 
matrix.getColCount() - 1, matrix.getRowCount() - 1
+                                       this.model.documentModel, range, col, 
row
                                ) );
                        }
                } else {
@@ -2126,7 +2128,7 @@
                this.getModel().setSelection(
                        new ve.dm.TableSelection(
                                selection.getDocument(), selection.tableRange,
-                               0, 0, matrix.getColCount() - 1, 
matrix.getRowCount() - 1
+                               0, 0, matrix.getMaxColCount() - 1, 
matrix.getRowCount() - 1
                        )
                );
 
diff --git a/src/dm/ve.dm.TableMatrix.js b/src/dm/ve.dm.TableMatrix.js
index df24e5a..9ce7cf5 100644
--- a/src/dm/ve.dm.TableMatrix.js
+++ b/src/dm/ve.dm.TableMatrix.js
@@ -202,14 +202,32 @@
 };
 
 /**
- * Get number of columns in the table
+ * Get number of columns in a row
  *
- * @param {number} [row] Row to count columns in (for when the table is sparse 
and this is variable)
+ * To get the number of columns in a table use #getMaxColCount
+ *
+ * @param {number} row Row to count columns in
  * @return {number} Number of columns
  */
 ve.dm.TableMatrix.prototype.getColCount = function ( row ) {
        var matrix = this.getMatrix();
-       return matrix.length ? matrix[ row || 0 ].length : 0;
+       return matrix.length ? matrix[ row ].length : 0;
+};
+
+/**
+ * Get the maximum number of columns in a table
+ *
+ * This is required because in sparse tables the column count is variable.
+ *
+ * @return {number} Number of columns
+ */
+ve.dm.TableMatrix.prototype.getMaxColCount = function () {
+       var row, colCount = 0;
+
+       for ( row = this.getRowCount() - 1; row >= 0; row-- ) {
+               colCount = Math.max( colCount, this.getColCount( row ) );
+       }
+       return colCount;
 };
 
 /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic42f3d87f1b4f197a18791c6f0a3ff59a5a1eb0b
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

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

Reply via email to