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