jenkins-bot has submitted this change and it was merged.
Change subject: Add TableCaptionNode
......................................................................
Add TableCaptionNode
Because we have a node for <table>, we also need one for <caption>,
otherwise we'll try to alienate it and fail.
Added the test case as a separate example document so Ed can use it
for his tests.
Removed test case asserting <caption> is alienated.
Change-Id: I3a917db58e6c0eb97899b214b07d01fc8d86b56d
---
M VisualEditor.php
M demos/ve/index.php
A modules/ve/ce/nodes/ve.ce.TableCaptionNode.js
A modules/ve/dm/nodes/ve.dm.TableCaptionNode.js
M modules/ve/test/dm/ve.dm.example.js
M modules/ve/test/index.php
6 files changed, 142 insertions(+), 21 deletions(-)
Approvals:
Esanders: Looks good to me, approved
jenkins-bot: Verified
diff --git a/VisualEditor.php b/VisualEditor.php
index 3be6ccf..0eb7be1 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -271,6 +271,7 @@
've/dm/nodes/ve.dm.ListNode.js',
've/dm/nodes/ve.dm.ParagraphNode.js',
've/dm/nodes/ve.dm.PreformattedNode.js',
+ 've/dm/nodes/ve.dm.TableCaptionNode.js',
've/dm/nodes/ve.dm.TableCellNode.js',
've/dm/nodes/ve.dm.TableNode.js',
've/dm/nodes/ve.dm.TableRowNode.js',
@@ -324,6 +325,7 @@
've/ce/nodes/ve.ce.ListNode.js',
've/ce/nodes/ve.ce.ParagraphNode.js',
've/ce/nodes/ve.ce.PreformattedNode.js',
+ 've/ce/nodes/ve.ce.TableCaptionNode.js',
've/ce/nodes/ve.ce.TableCellNode.js',
've/ce/nodes/ve.ce.TableNode.js',
've/ce/nodes/ve.ce.TableRowNode.js',
@@ -516,7 +518,6 @@
),
),
);
-
// Parsoid Wrapper API
$wgAutoloadClasses['ApiVisualEditor'] = $dir . 'ApiVisualEditor.php';
$wgAPIModules['visualeditor'] = 'ApiVisualEditor';
diff --git a/demos/ve/index.php b/demos/ve/index.php
index ca7deae..af9385e 100644
--- a/demos/ve/index.php
+++ b/demos/ve/index.php
@@ -155,6 +155,7 @@
<script
src="../../modules/ve/dm/nodes/ve.dm.ListNode.js"></script>
<script
src="../../modules/ve/dm/nodes/ve.dm.ParagraphNode.js"></script>
<script
src="../../modules/ve/dm/nodes/ve.dm.PreformattedNode.js"></script>
+ <script
src="../../modules/ve/dm/nodes/ve.dm.TableCaptionNode.js"></script>
<script
src="../../modules/ve/dm/nodes/ve.dm.TableCellNode.js"></script>
<script
src="../../modules/ve/dm/nodes/ve.dm.TableNode.js"></script>
<script
src="../../modules/ve/dm/nodes/ve.dm.TableRowNode.js"></script>
@@ -208,6 +209,7 @@
<script
src="../../modules/ve/ce/nodes/ve.ce.ListNode.js"></script>
<script
src="../../modules/ve/ce/nodes/ve.ce.ParagraphNode.js"></script>
<script
src="../../modules/ve/ce/nodes/ve.ce.PreformattedNode.js"></script>
+ <script
src="../../modules/ve/ce/nodes/ve.ce.TableCaptionNode.js"></script>
<script
src="../../modules/ve/ce/nodes/ve.ce.TableCellNode.js"></script>
<script
src="../../modules/ve/ce/nodes/ve.ce.TableNode.js"></script>
<script
src="../../modules/ve/ce/nodes/ve.ce.TableRowNode.js"></script>
diff --git a/modules/ve/ce/nodes/ve.ce.TableCaptionNode.js
b/modules/ve/ce/nodes/ve.ce.TableCaptionNode.js
new file mode 100644
index 0000000..67741ed
--- /dev/null
+++ b/modules/ve/ce/nodes/ve.ce.TableCaptionNode.js
@@ -0,0 +1,31 @@
+/*!
+ * VisualEditor ContentEditable TableCaptionNode class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * ContentEditable table caption node.
+ *
+ * @class
+ * @extends ve.ce.BranchNode
+ * @constructor
+ * @param {ve.dm.TableCaptionNode} model Model to observe
+ */
+ve.ce.TableCaptionNode = function VeCeTableCaptionNode( model ) {
+ // Parent constructor
+ ve.ce.BranchNode.call( this, model, $( '<caption>' ) );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.ce.TableCaptionNode, ve.ce.BranchNode );
+
+/* Static Properties */
+
+ve.ce.TableCaptionNode.static.name = 'tableCaption';
+
+/* Registration */
+
+ve.ce.nodeFactory.register( ve.ce.TableCaptionNode );
diff --git a/modules/ve/dm/nodes/ve.dm.TableCaptionNode.js
b/modules/ve/dm/nodes/ve.dm.TableCaptionNode.js
new file mode 100644
index 0000000..0ec55a2
--- /dev/null
+++ b/modules/ve/dm/nodes/ve.dm.TableCaptionNode.js
@@ -0,0 +1,44 @@
+/*!
+ * VisualEditor DataModel TableCaptionNode class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * DataModel table caption node.
+ *
+ * @class
+ * @extends ve.dm.BranchNode
+ * @constructor
+ * @param {ve.dm.BranchNode[]} [children] Child nodes to attach
+ * @param {Object} [element] Reference to element in linear model
+ */
+ve.dm.TableCaptionNode = function VeDmTableCaptionNode( children, element ) {
+ // Parent constructor
+ ve.dm.BranchNode.call( this, children, element );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.dm.TableCaptionNode, ve.dm.BranchNode );
+
+/* Static Properties */
+
+ve.dm.TableCaptionNode.static.name = 'tableCaption';
+
+ve.dm.TableCaptionNode.static.parentNodeTypes = [ 'table' ];
+
+ve.dm.TableCaptionNode.static.matchTagNames = [ 'caption' ];
+
+ve.dm.TableCaptionNode.static.toDataElement = function () {
+ return { 'type': 'tableCaption' };
+};
+
+ve.dm.TableCaptionNode.static.toDomElements = function ( dataElement, doc ) {
+ return [ doc.createElement( 'caption' ) ];
+};
+
+/* Registration */
+
+ve.dm.modelRegistry.register( ve.dm.TableCaptionNode );
diff --git a/modules/ve/test/dm/ve.dm.example.js
b/modules/ve/test/dm/ve.dm.example.js
index 2caeddf..01086f5 100644
--- a/modules/ve/test/dm/ve.dm.example.js
+++ b/modules/ve/test/dm/ve.dm.example.js
@@ -570,6 +570,63 @@
]
];
+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>';
+
+ve.dm.example.complexTable = [
+ { 'type': 'table' },
+ { 'type': 'tableCaption' },
+ { 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
+ 'F',
+ 'o',
+ 'o',
+ { 'type': '/paragraph' },
+ { 'type': '/tableCaption' },
+ { 'type': 'tableSection', 'attributes': { 'style': 'header' } },
+ { 'type': 'tableRow' },
+ { 'type': 'tableCell', 'attributes': { 'style': 'header' } },
+ { 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
+ 'B',
+ 'a',
+ 'r',
+ { 'type': '/paragraph' },
+ { 'type': '/tableCell' },
+ { 'type': '/tableRow' },
+ { 'type': '/tableSection' },
+ { 'type': 'tableSection', 'attributes': { 'style': 'footer' } },
+ { 'type': 'tableRow' },
+ { 'type': 'tableCell', 'attributes': { 'style': 'data' } },
+ { 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
+ 'B',
+ 'a',
+ 'z',
+ { 'type': '/paragraph' },
+ { 'type': '/tableCell' },
+ { 'type': '/tableRow' },
+ { 'type': '/tableSection' },
+ { 'type': 'tableSection', 'attributes': { 'style': 'body' } },
+ { 'type': 'tableRow' },
+ { 'type': 'tableCell', 'attributes': { 'style': 'data' } },
+ { 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
+ 'Q',
+ 'u',
+ 'u',
+ 'x',
+ { 'type': '/paragraph' },
+ { 'type': '/tableCell' },
+ { 'type': 'tableCell', 'attributes': { 'style': 'data' } },
+ { 'type': 'paragraph', 'internal': { 'generated': 'wrapper' } },
+ 'W',
+ 'h',
+ 'e',
+ 'e',
+ { 'type': '/paragraph' },
+ { 'type': '/tableCell' },
+ { 'type': '/tableRow' },
+ { 'type': '/tableSection' },
+ { 'type': '/table' }
+];
+
/**
* Sample content data index.
*
@@ -2370,26 +2427,6 @@
{ 'type': '/paragraph' }
]
},
- 'context-sensitive nodes are alienated correctly': {
- 'html':
'<table><caption>Foo</caption><tbody><tr><td>Bar</td></tr></tbody></table>',
- 'data': [
- { 'type': 'table' },
- { 'type': 'alienBlock', 'attributes': { 'html':
'<caption>Foo</caption>' } },
- { 'type': '/alienBlock' },
- { 'type': 'tableSection', 'attributes': { 'style':
'body' } },
- { 'type': 'tableRow' },
- { 'type': 'tableCell', 'attributes': { 'style': 'data'
} },
- { 'type': 'paragraph', 'internal': { 'generated':
'wrapper' } },
- 'B',
- 'a',
- 'r',
- { 'type': '/paragraph' },
- { 'type': '/tableCell' },
- { 'type': '/tableRow' },
- { 'type': '/tableSection' },
- { 'type': '/table' }
- ]
- },
'whitespace before meta node in wrapping mode': {
'html': '<body><table><tbody><tr><td>Foo\n<meta
property="mw:foo" content="bar" /></td></tr></tbody></table></body>',
'data': [
@@ -2429,6 +2466,10 @@
{ 'type': '/tableSection' },
{ 'type': '/table' }
]
+ },
+ 'table with caption, head, foot and body': {
+ 'html': ve.dm.example.complexTableHtml,
+ 'data': ve.dm.example.complexTable
}
};
diff --git a/modules/ve/test/index.php b/modules/ve/test/index.php
index 49bc925..138fc64 100644
--- a/modules/ve/test/index.php
+++ b/modules/ve/test/index.php
@@ -98,6 +98,7 @@
<script src="../../ve/dm/nodes/ve.dm.ListNode.js"></script>
<script src="../../ve/dm/nodes/ve.dm.ParagraphNode.js"></script>
<script
src="../../ve/dm/nodes/ve.dm.PreformattedNode.js"></script>
+ <script
src="../../ve/dm/nodes/ve.dm.TableCaptionNode.js"></script>
<script src="../../ve/dm/nodes/ve.dm.TableCellNode.js"></script>
<script src="../../ve/dm/nodes/ve.dm.TableNode.js"></script>
<script src="../../ve/dm/nodes/ve.dm.TableRowNode.js"></script>
@@ -151,6 +152,7 @@
<script src="../../ve/ce/nodes/ve.ce.ListNode.js"></script>
<script src="../../ve/ce/nodes/ve.ce.ParagraphNode.js"></script>
<script
src="../../ve/ce/nodes/ve.ce.PreformattedNode.js"></script>
+ <script
src="../../ve/ce/nodes/ve.ce.TableCaptionNode.js"></script>
<script src="../../ve/ce/nodes/ve.ce.TableCellNode.js"></script>
<script src="../../ve/ce/nodes/ve.ce.TableNode.js"></script>
<script src="../../ve/ce/nodes/ve.ce.TableRowNode.js"></script>
--
To view, visit https://gerrit.wikimedia.org/r/60940
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3a917db58e6c0eb97899b214b07d01fc8d86b56d
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits