mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-03 18:36:20 +00:00
1234a702c9
<span typeof="mw:Entity"> tags are now correctly represented in the model, and rendered in CE. There are still issues with cursor movement etc. in CE. Because the prioritization mechanism for annotations vs nodes is broken in the current "node API", I had to hack two special cases for mw:Entity into the converter. I also had to change the converter to ignore the children of inline nodes (this was a legitimate bug, but had never come up before). Change-Id: Ib9f70437c58b4ca06aa09f7272bf51d9c41b18f2
73 lines
1.6 KiB
JavaScript
73 lines
1.6 KiB
JavaScript
/**
|
|
* VisualEditor data model MWEntityNode class.
|
|
*
|
|
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* DataModel node for a document.
|
|
*
|
|
* @class
|
|
* @constructor
|
|
* @extends {ve.dm.LeafNode}
|
|
* @param {Number} [length] Length of content data in document
|
|
* @param {Object} [attributes] Reference to map of attribute key/value pairs
|
|
*/
|
|
ve.dm.MWEntityNode = function VeDmMWEntityNode( length, attributes ) {
|
|
// Parent constructor
|
|
ve.dm.LeafNode.call( this, 'MWentity', 0, attributes );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.dm.MWEntityNode, ve.dm.LeafNode );
|
|
|
|
/* Static Members */
|
|
|
|
/**
|
|
* Node rules.
|
|
*
|
|
* @see ve.dm.NodeFactory
|
|
* @static
|
|
* @member
|
|
*/
|
|
ve.dm.MWEntityNode.rules = {
|
|
'isWrapped': true,
|
|
'isContent': true,
|
|
'canContainContent': false,
|
|
'hasSignificantWhitespace': false,
|
|
'childNodeTypes': [],
|
|
'parentNodeTypes': null
|
|
};
|
|
|
|
/**
|
|
* Node converters.
|
|
*
|
|
* @see {ve.dm.Converter}
|
|
* @static
|
|
* @member
|
|
*/
|
|
ve.dm.MWEntityNode.converters = {
|
|
'domElementTypes': ['span'], // HACK uses special treatment in ve.dm.Converter instead
|
|
'toDomElement': function ( type, dataElement ) {
|
|
var domElement = document.createElement( 'span' ),
|
|
textNode = document.createTextNode( dataElement.attributes.character );
|
|
domElement.setAttribute( 'typeof', 'mw:Entity' );
|
|
domElement.appendChild( textNode );
|
|
return domElement;
|
|
},
|
|
'toDataElement': function ( tag, domElement ) {
|
|
return {
|
|
'type': 'MWentity',
|
|
'attributes': {
|
|
'character': domElement.textContent
|
|
}
|
|
};
|
|
}
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.dm.nodeFactory.register( 'MWentity', ve.dm.MWEntityNode );
|