Jforrester has uploaded a new change for review.
https://gerrit.wikimedia.org/r/173443
Change subject: Restore original rowspan/colspan rather than normalizing or
overwriting with NaN
......................................................................
Restore original rowspan/colspan rather than normalizing or overwriting with NaN
Store originalRowspan/Colspan as strings instead of numbers,
so we get the actual original value. Use the original value
if the number we're setting is not really different
(prevents normalization of "02" to "2") or is NaN
(prevents normalization of "2 blah" to "NaN").
Bonus: don't modify dataElement.attributes
Change-Id: Ic30e0d6f7bfe27c10e505b7c18fe9200f322cfc7
---
M src/dm/nodes/ve.dm.TableCellNode.js
M tests/dm/ve.dm.example.js
2 files changed, 46 insertions(+), 12 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor
refs/changes/43/173443/1
diff --git a/src/dm/nodes/ve.dm.TableCellNode.js
b/src/dm/nodes/ve.dm.TableCellNode.js
index ba267d1..85e2dd4 100644
--- a/src/dm/nodes/ve.dm.TableCellNode.js
+++ b/src/dm/nodes/ve.dm.TableCellNode.js
@@ -52,12 +52,12 @@
if ( colspan !== null && colspan !== '' ) {
attributes.colspan = Number( colspan );
- attributes.originalColspan = attributes.colspan;
+ attributes.originalColspan = colspan;
}
if ( rowspan !== null && rowspan !== '' ) {
attributes.rowspan = Number( rowspan );
- attributes.originalRowspan = attributes.rowspan;
+ attributes.originalRowspan = rowspan;
}
return {
@@ -69,18 +69,31 @@
ve.dm.TableCellNode.static.toDomElements = function ( dataElement, doc ) {
var tag = dataElement.attributes && dataElement.attributes.style ===
'header' ? 'th' : 'td',
domElement = doc.createElement( tag ),
- attributes = dataElement.attributes;
+ attributes = dataElement.attributes,
+ spans = {
+ colspan: attributes.colspan,
+ rowspan: attributes.rowspan
+ };
// Ignore spans of 1 unless they were in the original HTML
- if ( attributes.colspan === 1 && !attributes.originalColspan ) {
- attributes.colspan = null;
+ if ( attributes.colspan === 1 && Number( attributes.originalColspan )
!== 1 ) {
+ spans.colspan = null;
}
- if ( attributes.rowspan === 1 && !attributes.originalRowspan ) {
- attributes.rowspan = null;
+ if ( attributes.rowspan === 1 && Number( attributes.originalRowspan )
!== 1 ) {
+ spans.rowspan = null;
}
- ve.setDomAttributes( domElement, dataElement.attributes, [ 'colspan',
'rowspan' ] );
+ // Use original value if the numerical value didn't change, or if the
numerical value is NaN
+ if ( attributes.colspan === Number( attributes.originalColspan ) ||
isNaN( attributes.colspan ) ) {
+ spans.colspan = attributes.originalColspan;
+ }
+
+ if ( attributes.rowspan === Number( attributes.originalRowspan ) ||
isNaN( attributes.rowspan ) ) {
+ spans.rowspan = attributes.originalRowspan;
+ }
+
+ ve.setDomAttributes( domElement, spans );
return [ domElement ];
};
diff --git a/tests/dm/ve.dm.example.js b/tests/dm/ve.dm.example.js
index 515bb85..7f3c4e9 100644
--- a/tests/dm/ve.dm.example.js
+++ b/tests/dm/ve.dm.example.js
@@ -776,7 +776,7 @@
];
ve.dm.example.complexTableHtml =
'<table><caption>Foo</caption><thead><tr><th>Bar</th></tr></thead>' +
-
'<tfoot><tr><td>Baz</td></tr></tfoot><tbody><tr><td>Quux</td><td>Whee</td></tr></tbody></table>';
+ '<tfoot><tr><td colspan=2>Baz</td></tr></tfoot><tbody><tr><td
rowspan="02">Quux</td><td colspan="2 garbage">Whee</td></tr></tbody></table>';
ve.dm.example.complexTable = [
{ type: 'table' },
@@ -800,7 +800,14 @@
{ type: '/tableSection' },
{ type: 'tableSection', attributes: { style: 'footer' } },
{ type: 'tableRow' },
- { type: 'tableCell', attributes: { style: 'data' } },
+ {
+ type: 'tableCell',
+ attributes: {
+ style: 'data',
+ colspan: 2,
+ originalColspan: '2'
+ }
+ },
{ type: 'paragraph', internal: { generated: 'wrapper' } },
'B',
'a',
@@ -811,7 +818,14 @@
{ type: '/tableSection' },
{ type: 'tableSection', attributes: { style: 'body' } },
{ type: 'tableRow' },
- { type: 'tableCell', attributes: { style: 'data' } },
+ {
+ type: 'tableCell',
+ attributes: {
+ style: 'data',
+ rowspan: 2,
+ originalRowspan: '02'
+ }
+ },
{ type: 'paragraph', internal: { generated: 'wrapper' } },
'Q',
'u',
@@ -819,7 +833,14 @@
'x',
{ type: '/paragraph' },
{ type: '/tableCell' },
- { type: 'tableCell', attributes: { style: 'data' } },
+ {
+ type: 'tableCell',
+ attributes: {
+ style: 'data',
+ colspan: NaN,
+ originalColspan: '2 garbage'
+ }
+ },
{ type: 'paragraph', internal: { generated: 'wrapper' } },
'W',
'h',
--
To view, visit https://gerrit.wikimedia.org/r/173443
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic30e0d6f7bfe27c10e505b7c18fe9200f322cfc7
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: wmf/1.25wmf7
Gerrit-Owner: Jforrester <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits