mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-10-01 06:06:47 +00:00
515ad01713
Move the triggering of the rerender event into an overridable method 'afterRender'. Some nodes don't have the correct dimensions immediately after rendering their DOM elements as they may need to wait for images to load, or for a script to run (e.g. MathJax) Change-Id: If204f665dcb2fd69d00a183279056d11188ddd74
65 lines
1.5 KiB
JavaScript
65 lines
1.5 KiB
JavaScript
/*!
|
|
* VisualEditor ContentEditable MWMathNode class.
|
|
*
|
|
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/*global MathJax */
|
|
|
|
/**
|
|
* ContentEditable MediaWiki math node.
|
|
*
|
|
* @class
|
|
* @extends ve.ce.MWExtensionNode
|
|
*
|
|
* @constructor
|
|
* @param {ve.dm.MWMathNode} model Model to observe
|
|
* @param {Object} [config] Configuration options
|
|
*/
|
|
ve.ce.MWMathNode = function VeCeMWMathNode( model, config ) {
|
|
// Parent constructor
|
|
ve.ce.MWExtensionNode.call( this, model, config );
|
|
|
|
// DOM changes
|
|
this.$.addClass( 've-ce-mwMathNode' );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.ce.MWMathNode, ve.ce.MWExtensionNode );
|
|
|
|
/* Static Properties */
|
|
|
|
ve.ce.MWMathNode.static.name = 'mwMath';
|
|
|
|
/* Methods */
|
|
|
|
/** */
|
|
ve.ce.MWMathNode.prototype.onParseSuccess = function ( deferred, response ) {
|
|
var data = response.visualeditor, contentNodes = $( data.content ).get();
|
|
// HACK: unwrap paragraph from PHP parser
|
|
contentNodes = Array.prototype.slice.apply( contentNodes[0].childNodes );
|
|
deferred.resolve( contentNodes );
|
|
};
|
|
|
|
/** */
|
|
ve.ce.MWExtensionNode.prototype.afterRender = function ( domElements ) {
|
|
if ( $( domElements ).is( 'span.tex' ) ) {
|
|
// MathJax
|
|
MathJax.Hub.Queue(
|
|
[ 'Typeset', MathJax.Hub ],
|
|
[ this, this.emit, 'rerender' ]
|
|
);
|
|
} else {
|
|
// Rerender after image load
|
|
this.$.find( 'img.tex' ).on( 'load', ve.bind( function () {
|
|
this.emit( 'rerender' );
|
|
}, this ) );
|
|
}
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.ce.nodeFactory.register( ve.ce.MWMathNode );
|