mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-25 11:16:51 +00:00
Merge "Create MWTemplateNode"
This commit is contained in:
commit
b9412011cb
|
@ -274,6 +274,7 @@ $wgResourceModules += array(
|
|||
'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 @@ $wgResourceModules += array(
|
|||
'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',
|
||||
|
|
|
@ -161,6 +161,7 @@ $html = file_get_contents( $page );
|
|||
<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>
|
||||
|
@ -204,8 +205,9 @@ $html = file_get_contents( $page );
|
|||
<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>
|
||||
|
|
42
modules/ve/ce/nodes/ve.ce.MWTemplateNode.js
Normal file
42
modules/ve/ce/nodes/ve.ce.MWTemplateNode.js
Normal file
|
@ -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 );
|
67
modules/ve/dm/nodes/ve.dm.MWTemplateNode.js
Normal file
67
modules/ve/dm/nodes/ve.dm.MWTemplateNode.js
Normal file
|
@ -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, converter ) {
|
||||
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, converter.getStore() );
|
||||
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 );
|
|
@ -39,7 +39,7 @@ QUnit.test( 'getDomElementsFromDataElement', 20, function ( assert ) {
|
|||
}
|
||||
} );
|
||||
|
||||
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( 'getDataFromDom', 51, function ( assert ) {
|
|||
}
|
||||
} );
|
||||
|
||||
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 );
|
||||
|
|
|
@ -715,6 +715,8 @@ ve.dm.example.conversions = {
|
|||
};
|
||||
|
||||
ve.dm.example.MWImageHtml = '<a rel="mw:Image" href="./File:Wiki.png" data-parsoid="{"tsr":[158,216],"src":"[[Image:Wiki.png|500px|thumb|center|Example wiki file]]","optNames":{"width":"$1px"},"dsr":[158,216,null,null]}"><img height="" width="500" src="/index.php?title=Special:FilePath/Wiki.png&width=500" alt="Wiki.png"></a>';
|
||||
ve.dm.example.MWTemplateSpan = '<span about="#mwt1" typeof="mw:Object/Template" data-mw="{"id":"mwt1","target":{"wt":"Test"},"params":{"1":{"wt":"Hello, world!"}}}" data-parsoid="{"tsr":[18,40],"src":"{{Test|Hello, world!}}","dsr":[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': {
|
||||
|
@ -775,6 +777,32 @@ ve.dm.example.domToDataCases = {
|
|||
{ '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': [
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue