mediawiki-extensions-Visual.../modules/ve-mw/dm/nodes/ve.dm.MWAnnotationNode.js

63 lines
1.4 KiB
JavaScript
Raw Normal View History

/*!
* VisualEditor DataModel MWAnnotationNode class.
*
* @copyright See AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* DataModel MW node for mw:Annotation tags.
*
* @class
* @extends ve.dm.AlienInlineNode
* @constructor
* @param {Object} element Reference to element in linear model
*/
ve.dm.MWAnnotationNode = function VeDmMWAnnotationNode() {
// Parent constructor
ve.dm.MWAnnotationNode.super.apply( this, arguments );
};
/* Inheritance */
OO.inheritClass( ve.dm.MWAnnotationNode, ve.dm.AlienInlineNode );
/* Static Properties */
ve.dm.MWAnnotationNode.static.name = 'mwAnnotation';
ve.dm.MWAnnotationNode.static.preserveHtmlAttributes = true;
/* Static Methods */
/**
* @inheritdoc
*/
ve.dm.MWAnnotationNode.static.toDataElement = function ( domElements ) {
const mwDataJSON = domElements[ 0 ].getAttribute( 'data-mw' ),
type = domElements[ 0 ].getAttribute( 'typeof' );
const dataElement = {
type: 'mwAnnotation',
attributes: {
type: type
}
};
if ( mwDataJSON !== null ) {
dataElement.attributes.mw = JSON.parse( mwDataJSON );
}
return dataElement;
};
ve.dm.MWAnnotationNode.static.toDomElements = function ( dataElement, doc ) {
const el = doc.createElement( 'meta' );
el.setAttribute( 'typeof', dataElement.attributes.type );
if ( dataElement.attributes.mw ) {
el.setAttribute( 'data-mw', JSON.stringify( dataElement.attributes.mw ) );
}
return [ el ];
};