mediawiki-extensions-Visual.../modules/ve/dm/nodes/ve.dm.MetaBlockNode.js
Catrope 49963c75fd Store the data model element in the DM tree
This is cleaner than passing around the attributes separately, and it
allows us to access the annotations in dm.LeafNode as well.

Change-Id: Ie5b90988114835831cbe5cdccf63c7cd45719e31
2012-11-27 14:36:29 -08:00

75 lines
1.8 KiB
JavaScript

/**
* VisualEditor data model MetaBlockNode class.
*
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* DataModel node for an alien block node.
*
* @class
* @constructor
* @extends {ve.dm.BranchNode}
* @param {Integer} [length] Length of content data in document
* @param {Object} [element] Reference to element in linear model
*/
ve.dm.MetaBlockNode = function VeDmMetaBlockNode( length, element ) {
// Parent constructor
ve.dm.BranchNode.call( this, 'metaBlock', 0, element );
};
/* Inheritance */
ve.inheritClass( ve.dm.MetaBlockNode, ve.dm.BranchNode );
/* Static Members */
/**
* Node rules.
*
* @see ve.dm.NodeFactory
* @static
* @member
*/
ve.dm.MetaBlockNode.rules = {
'isWrapped': true,
'isContent': false,
'canContainContent': false,
'hasSignificantWhitespace': false,
'childNodeTypes': [],
'parentNodeTypes': null
};
/**
* Node converters.
*
* @see {ve.dm.Converter}
* @static
* @member
*/
ve.dm.MetaBlockNode.converters = {
'domElementTypes': ['meta', 'link'],
'toDomElement': function ( type, element ) {
var isLink, domElement;
if ( element.attributes.style === 'comment' ) {
domElement = document.createComment( element.attributes.text );
} else {
isLink = element.attributes.style === 'link';
domElement = document.createElement( isLink ? 'link' : 'meta' );
if ( element.attributes.key !== null ) {
domElement.setAttribute( isLink ? 'rel' : 'property', element.attributes.key );
}
if ( element.attributes.value ) {
domElement.setAttribute( isLink ? 'href' : 'content', element.attributes.value );
}
}
return domElement;
},
'toDataElement': null // Special handling in ve.dm.Converter
};
/* Registration */
ve.dm.nodeFactory.register( 'metaBlock', ve.dm.MetaBlockNode );