mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-01 17:36:35 +00:00
aa2836aa6e
There's no use case for keeping a deep copy of the 'internal' property in the node tree, and it was breaking some of my new tests concerning change markers. We could keep internal data in the node tree if we wanted to, but to be correct we'd have to synchronize every time we changed it, which is a pain. Change-Id: I024de1ff8b6b6154da82c103c4bb21db8ff2ec14
77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
/**
|
|
* VisualEditor data model HeadingNode class.
|
|
*
|
|
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* DataModel node for a heading.
|
|
*
|
|
* @class
|
|
* @constructor
|
|
* @extends {ve.dm.BranchNode}
|
|
* @param {ve.dm.LeafNode[]} [children] Child nodes to attach
|
|
* @param {Object} [attributes] Reference to map of attribute key/value pairs
|
|
*/
|
|
ve.dm.HeadingNode = function VeDmHeadingNode( children, attributes ) {
|
|
// Parent constructor
|
|
ve.dm.BranchNode.call( this, 'heading', children, attributes );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.dm.HeadingNode, ve.dm.BranchNode );
|
|
|
|
/* Static Members */
|
|
|
|
/**
|
|
* Node rules.
|
|
*
|
|
* @see ve.dm.NodeFactory
|
|
* @static
|
|
* @member
|
|
*/
|
|
ve.dm.HeadingNode.rules = {
|
|
'isWrapped': true,
|
|
'isContent': false,
|
|
'canContainContent': true,
|
|
'childNodeTypes': null,
|
|
'parentNodeTypes': null
|
|
};
|
|
|
|
/**
|
|
* Node converters.
|
|
*
|
|
* @see {ve.dm.Converter}
|
|
* @static
|
|
* @member
|
|
*/
|
|
ve.dm.HeadingNode.converters = {
|
|
'domElementTypes': ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
|
|
'toDomElement': function ( type, element ) {
|
|
return element.attributes && ( {
|
|
1: document.createElement( 'h1' ),
|
|
2: document.createElement( 'h2' ),
|
|
3: document.createElement( 'h3' ),
|
|
4: document.createElement( 'h4' ),
|
|
5: document.createElement( 'h5' ),
|
|
6: document.createElement( 'h6' )
|
|
} )[element.attributes.level];
|
|
},
|
|
'toDataElement': function ( tag ) {
|
|
return ( {
|
|
'h1': { 'type': 'heading', 'attributes': { 'level': 1 } },
|
|
'h2': { 'type': 'heading', 'attributes': { 'level': 2 } },
|
|
'h3': { 'type': 'heading', 'attributes': { 'level': 3 } },
|
|
'h4': { 'type': 'heading', 'attributes': { 'level': 4 } },
|
|
'h5': { 'type': 'heading', 'attributes': { 'level': 5 } },
|
|
'h6': { 'type': 'heading', 'attributes': { 'level': 6 } }
|
|
} )[tag];
|
|
}
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.dm.nodeFactory.register( 'heading', ve.dm.HeadingNode );
|