mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-25 14:56:20 +00:00
0d30e1e77d
VisualEditor.php * Add CSS file ve.ce.MWMathNode.js * Wrap the image in a span, so GenerateContentNode doesn't try to nest an image inside an image * Remove unnecessary attribute setting * Only pass unwrapped image to deferred.resolve * Retrigger MathJax rendering ve.ce.Node.css * Use inline-block for image wrapper ve.dm.MWMathNode.js * Mixin GeneratedContentNode and implement getHash * Copy over functionality of MWTransclusionNode: + Just store data-mw for attributes + Store orignal(DomElement|MW|Index) for selser ve.init.mw.ViewPageTarget.js * Add mwMath to the toolbar ve.ui.MWMathInspector.js * Remove static.InputWidget, not required in this architecture * Use multiline TextInputWidget * Only update mw attribute * Allow creation of new math nodes ve.ui.MWInspector.css * Set height of TextInputWidget Change-Id: I520f8ccc9f89a2ce70aa1d9e02ed0c6cacbecc2f
94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
/*!
|
|
* VisualEditor DataModel MWMathNode class.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* DataModel MediaWiki math node.
|
|
*
|
|
* @class
|
|
* @extends ve.dm.LeafNode
|
|
* @mixins ve.dm.GeneratedContentNode
|
|
*
|
|
* @constructor
|
|
*/
|
|
ve.dm.MWMathNode = function VeDmMWMathNode( length, element ) {
|
|
// Parent constructor
|
|
ve.dm.LeafNode.call( this, 0, element );
|
|
|
|
// Mixin constructors
|
|
ve.dm.GeneratedContentNode.call( this );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.dm.MWMathNode, ve.dm.LeafNode );
|
|
|
|
ve.mixinClass( ve.dm.MWMathNode, ve.dm.GeneratedContentNode );
|
|
|
|
/* Static members */
|
|
|
|
ve.dm.MWMathNode.static.name = 'mwMath';
|
|
|
|
ve.dm.MWMathNode.static.enableAboutGrouping = true;
|
|
|
|
ve.dm.MWMathNode.static.matchTagNames = null;
|
|
|
|
ve.dm.MWMathNode.static.matchRdfaTypes = [ 'mw:Extension/math' ];
|
|
|
|
ve.dm.MWMathNode.static.isContent = true;
|
|
|
|
ve.dm.MWMathNode.static.toDataElement = function ( domElements, converter ) {
|
|
var dataElement, index,
|
|
mwDataJSON = domElements[0].getAttribute( 'data-mw' ),
|
|
mwData = mwDataJSON ? JSON.parse( mwDataJSON ) : {};
|
|
|
|
dataElement = {
|
|
'type': 'mwMath',
|
|
'attributes': {
|
|
'mw': mwData,
|
|
'originalDomElements': ve.copyArray( domElements ),
|
|
'originalMw': mwDataJSON
|
|
}
|
|
};
|
|
|
|
index = this.storeDomElements( dataElement, domElements, converter.getStore() );
|
|
dataElement.attributes.originalIndex = index;
|
|
|
|
return dataElement;
|
|
};
|
|
|
|
ve.dm.MWMathNode.static.toDomElements = function ( dataElement, doc, converter ) {
|
|
var el,
|
|
index = converter.getStore().indexOfHash( ve.getHash( this.getHashObject( dataElement ) ) ),
|
|
originalMw = dataElement.attributes.originalMw;
|
|
|
|
// If the transclusion is unchanged just send back the
|
|
// original DOM elements so selser can skip over it
|
|
if (
|
|
index === dataElement.attributes.originalIndex ||
|
|
( originalMw && ve.compare( dataElement.attributes.mw, JSON.parse( originalMw ) ) )
|
|
) {
|
|
// The object in the store is also used for CE rendering so return a copy
|
|
return ve.copyDomElements( dataElement.attributes.originalDomElements, doc );
|
|
} else {
|
|
el = doc.createElement( 'img' );
|
|
el.setAttribute( 'typeof', 'mw:Extension/Math' );
|
|
el.setAttribute( 'data-mw', JSON.stringify( dataElement.attributes.mw ) );
|
|
return [ el ];
|
|
}
|
|
};
|
|
|
|
ve.dm.MWMathNode.static.getHashObject = function ( dataElement ) {
|
|
return {
|
|
type: dataElement.type,
|
|
mw: dataElement.attributes.mw
|
|
};
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.dm.modelRegistry.register( ve.dm.MWMathNode );
|