Esanders has uploaded a new change for review.

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


Change subject: Create MWTemplateNode.
......................................................................

Create MWTemplateNode.

This node stores the rendered in the index-value store, hashed on
a custom hash of the dm (type + mw) which makes it unique it its
parameters.

Change-Id: I0ab4c9f7bca207121d5b42e83c821771b6139da8
---
M VisualEditor.php
M demos/ve/index.php
A modules/ve/ce/nodes/ve.ce.MWTemplateNode.js
A modules/ve/dm/nodes/ve.dm.MWTemplateNode.js
M modules/ve/test/dm/ve.dm.Converter.test.js
M modules/ve/test/dm/ve.dm.example.js
M modules/ve/test/index.php
7 files changed, 146 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/49/58549/1

diff --git a/VisualEditor.php b/VisualEditor.php
index 19bdc3d..7a71d8a 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -274,6 +274,7 @@
                        've/dm/nodes/ve.dm.MWHeadingNode.js',
                        've/dm/nodes/ve.dm.MWImageNode.js',
                        've/dm/nodes/ve.dm.MWPreformattedNode.js',
+                       've/dm/nodes/ve.dm.MWTemplateNode.js',
 
                        've/dm/annotations/ve.dm.LinkAnnotation.js',
                        've/dm/annotations/ve.dm.MWExternalLinkAnnotation.js',
@@ -325,6 +326,7 @@
                        've/ce/nodes/ve.ce.MWHeadingNode.js',
                        've/ce/nodes/ve.ce.MWImageNode.js',
                        've/ce/nodes/ve.ce.MWPreformattedNode.js',
+                       've/ce/nodes/ve.ce.MWTemplateNode.js',
 
                        've/ce/annotations/ve.ce.LinkAnnotation.js',
                        've/ce/annotations/ve.ce.MWExternalLinkAnnotation.js',
diff --git a/demos/ve/index.php b/demos/ve/index.php
index c0da99d..457a240 100644
--- a/demos/ve/index.php
+++ b/demos/ve/index.php
@@ -160,6 +160,7 @@
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWHeadingNode.js"></script>
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWImageNode.js"></script>
                <script 
src="../../modules/ve/dm/nodes/ve.dm.MWPreformattedNode.js"></script>
+               <script 
src="../../modules/ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.LinkAnnotation.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../modules/ve/dm/annotations/ve.dm.MWInternalLinkAnnotation.js"></script>
@@ -203,8 +204,9 @@
                <script 
src="../../modules/ve/ce/nodes/ve.ce.TextNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWEntityNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWHeadingNode.js"></script>
-               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
                <script 
src="../../modules/ve/ce/nodes/ve.ce.MWImageNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
+               <script 
src="../../modules/ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.LinkAnnotation.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../modules/ve/ce/annotations/ve.ce.MWInternalLinkAnnotation.js"></script>
diff --git a/modules/ve/ce/nodes/ve.ce.MWTemplateNode.js 
b/modules/ve/ce/nodes/ve.ce.MWTemplateNode.js
new file mode 100644
index 0000000..fab1119
--- /dev/null
+++ b/modules/ve/ce/nodes/ve.ce.MWTemplateNode.js
@@ -0,0 +1,42 @@
+/*!
+ * VisualEditor ContentEditable MWTemplate class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * ContentEditable MediaWiki template node.
+ *
+ * @class
+ * @abstract
+ * @extends ve.ce.GeneratedContentNode
+ * @constructor
+ * @param {ve.dm.MWTemplateNode} model Model to observe
+ */
+ve.ce.MWTemplateNode = function VeCeMWTemplateNode( model ) {
+       // Parent constructor
+       ve.ce.GeneratedContentNode.call( this, model );
+
+       // DOM Changes
+       this.$.addClass( 've-ce-MWTemplateNode' );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.ce.MWTemplateNode, ve.ce.GeneratedContentNode );
+
+/* Static Properties */
+
+ve.ce.MWTemplateNode.static.name = 'MWtemplate';
+
+/* Methods */
+
+ve.ce.MWTemplateNode.prototype.generateContents = function () {
+       // TODO: return $.ajax( api call to get new contents )
+       return new $.Deferred();
+};
+
+/* Registration */
+
+ve.ce.nodeFactory.register( ve.ce.MWTemplateNode );
diff --git a/modules/ve/dm/nodes/ve.dm.MWTemplateNode.js 
b/modules/ve/dm/nodes/ve.dm.MWTemplateNode.js
new file mode 100644
index 0000000..69c8bb4
--- /dev/null
+++ b/modules/ve/dm/nodes/ve.dm.MWTemplateNode.js
@@ -0,0 +1,67 @@
+/*!
+ * VisualEditor DataModel MWTemplateNode class.
+ *
+ * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * DataModel MediaWiki template node.
+ *
+ * @class
+ * @abstract
+ * @extends ve.dm.GeneratedContentNode
+ * @constructor
+ * @param {number} [length] Length of content data in document; ignored and 
overridden to 0
+ * @param {Object} [element] Reference to element in linear model
+ */
+ve.dm.MWTemplateNode = function VeDmMWTemplateNode( length, element ) {
+       // Parent constructor
+       ve.dm.GeneratedContentNode.call( this, 0, element );
+};
+
+/* Inheritance */
+
+ve.inheritClass( ve.dm.MWTemplateNode, ve.dm.GeneratedContentNode );
+
+/* Static members */
+
+ve.dm.MWTemplateNode.static.name = 'MWtemplate';
+
+ve.dm.MWTemplateNode.static.matchTagNames = null;
+
+ve.dm.MWTemplateNode.static.matchRdfaTypes = [ 'mw:Object/Template' ];
+
+ve.dm.MWTemplateNode.static.getHashObject = function ( dataElement ) {
+       return {
+               type: dataElement.type,
+               mw: dataElement.mw
+       };
+};
+
+ve.dm.MWTemplateNode.static.toDataElement = function ( domElements, context, 
store ) {
+       var dataElement,
+               about = domElements[0].getAttribute( 'about' ),
+               mw = JSON.parse( domElements[0].getAttribute( 'data-mw' ) );
+       dataElement = {
+               'type': this.name,
+               'mw': mw,
+               'about': about
+       };
+       this.storeHtml( dataElement, domElements, store );
+       return dataElement;
+};
+
+ve.dm.MWTemplateNode.static.toDomElements = function ( dataElement, doc ) {
+       var span = doc.createElement( 'span' );
+       // All we need to send back to Parsoid is the original template marker,
+       // with a reconstructed data-mw property.
+       span.setAttribute( 'about', dataElement.about );
+       span.setAttribute( 'typeof', 'mw:Object/Template' );
+       span.setAttribute( 'data-mw', JSON.stringify( dataElement.mw ) );
+       return [ span ];
+};
+
+/* Registration */
+
+ve.dm.modelRegistry.register( ve.dm.MWTemplateNode );
diff --git a/modules/ve/test/dm/ve.dm.Converter.test.js 
b/modules/ve/test/dm/ve.dm.Converter.test.js
index 88a03de..6c99437 100644
--- a/modules/ve/test/dm/ve.dm.Converter.test.js
+++ b/modules/ve/test/dm/ve.dm.Converter.test.js
@@ -39,7 +39,7 @@
        }
 } );
 
-QUnit.test( 'getDataFromDom', 51, function ( assert ) {
+QUnit.test( 'getDataFromDom', 52, function ( assert ) {
        var msg,
                store = new ve.dm.IndexValueStore(),
                cases = ve.copyObject( ve.dm.example.domToDataCases );
@@ -61,7 +61,7 @@
        }
 } );
 
-QUnit.test( 'getDomFromData', 55, function ( assert ) {
+QUnit.test( 'getDomFromData', 56, function ( assert ) {
        var msg,
                store = new ve.dm.IndexValueStore(),
                cases = ve.copyObject( ve.dm.example.domToDataCases );
diff --git a/modules/ve/test/dm/ve.dm.example.js 
b/modules/ve/test/dm/ve.dm.example.js
index 48111d6..3cfb7f1 100644
--- a/modules/ve/test/dm/ve.dm.example.js
+++ b/modules/ve/test/dm/ve.dm.example.js
@@ -710,6 +710,8 @@
 };
 
 ve.dm.example.MWImageHtml = '<a rel="mw:Image" href="./File:Wiki.png" 
data-parsoid="{&quot;tsr&quot;:[158,216],&quot;src&quot;:&quot;[[Image:Wiki.png|500px|thumb|center|Example
 wiki 
file]]&quot;,&quot;optNames&quot;:{&quot;width&quot;:&quot;$1px&quot;},&quot;dsr&quot;:[158,216,null,null]}"><img
 height="" width="500" 
src="/index.php?title=Special:FilePath/Wiki.png&amp;width=500" 
alt="Wiki.png"></a>';
+ve.dm.example.MWTemplateSpan = '<span about="#mwt1" 
typeof="mw:Object/Template" 
data-mw="{&quot;id&quot;:&quot;mwt1&quot;,&quot;target&quot;:{&quot;wt&quot;:&quot;Test&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;Hello,
 world!&quot;}}}" 
data-parsoid="{&quot;tsr&quot;:[18,40],&quot;src&quot;:&quot;{{Test|Hello, 
world!}}&quot;,&quot;dsr&quot;:[18,40,null,null]}"></span>';
+ve.dm.example.MWTemplateContent = '<p about="#mwt1" data-parsoid="{}">Hello, 
world!</p>';
 
 ve.dm.example.domToDataCases = {
        'paragraph with plain text': {
@@ -758,6 +760,32 @@
                        { 'type': '/paragraph' }
                ]
        },
+       'mw:Template': {
+               'html': '<body>' + ve.dm.example.MWTemplateSpan + 
ve.dm.example.MWTemplateContent + '</body>',
+               'data': [
+                       {
+                               'type': 'MWtemplate',
+                               'mw': {
+                                       'id': 'mwt1',
+                                       'target': { 'wt' : 'Test' },
+                                       'params': {
+                                               '1': { 'wt': 'Hello, world!' }
+                                       }
+                               },
+                               'about': '#mwt1',
+                               'attributes': {
+                                       'html/0/about': '#mwt1',
+                                       'html/0/data-mw': 
'{\"id\":\"mwt1\",\"target\":{\"wt\":\"Test\"},\"params\":{\"1\":{\"wt\":\"Hello,
 world!\"}}}',
+                                       'html/0/data-parsoid': 
'{\"tsr\":[18,40],\"src\":\"{{Test|Hello, 
world!}}\",\"dsr\":[18,40,null,null]}',
+                                       'html/0/typeof': 'mw:Object/Template',
+                                       'html/1/about': '#mwt1',
+                                       'html/1/data-parsoid': '{}'
+                               },
+                       },
+                       { 'type': '/MWtemplate' },
+               ],
+               'normalizedHtml': ve.dm.example.MWTemplateSpan
+       },
        'paragraph with alienInline inside': {
                'html': '<body><p>a<tt class="foo">b</tt>c</p></body>',
                'data': [
diff --git a/modules/ve/test/index.php b/modules/ve/test/index.php
index 7ec6876..13910bb 100644
--- a/modules/ve/test/index.php
+++ b/modules/ve/test/index.php
@@ -104,6 +104,7 @@
                <script src="../../ve/dm/nodes/ve.dm.MWHeadingNode.js"></script>
                <script src="../../ve/dm/nodes/ve.dm.MWImageNode.js"></script>
                <script 
src="../../ve/dm/nodes/ve.dm.MWPreformattedNode.js"></script>
+               <script 
src="../../ve/dm/nodes/ve.dm.MWTemplateNode.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.LinkAnnotation.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../ve/dm/annotations/ve.dm.MWInternalLinkAnnotation.js"></script>
@@ -149,6 +150,7 @@
                <script src="../../ve/ce/nodes/ve.ce.MWHeadingNode.js"></script>
                <script src="../../ve/ce/nodes/ve.ce.MWImageNode.js"></script>
                <script 
src="../../ve/ce/nodes/ve.ce.MWPreformattedNode.js"></script>
+               <script 
src="../../ve/ce/nodes/ve.ce.MWTemplateNode.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.LinkAnnotation.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.MWExternalLinkAnnotation.js"></script>
                <script 
src="../../ve/ce/annotations/ve.ce.MWInternalLinkAnnotation.js"></script>

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0ab4c9f7bca207121d5b42e83c821771b6139da8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/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