mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-24 14:33:59 +00:00
9ffbfc77cd
Bug: T250843 Change-Id: I53ef4fa4a65b017eec90cc1f2cbb7e7f0681e317
79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
/*!
|
|
* VisualEditor UserInterface MWPreviewElement class.
|
|
*
|
|
* @copyright See AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* Creates an ve.ui.MWPreviewElement object.
|
|
*
|
|
* @class
|
|
* @extends ve.ui.PreviewElement
|
|
*
|
|
* @constructor
|
|
* @param {ve.dm.Node} [model]
|
|
* @param {Object} [config]
|
|
* @param {boolean} [config.useView=false] Use the view HTML, and don't bother generating model HTML, which
|
|
* is a bit slower
|
|
*/
|
|
ve.ui.MWPreviewElement = function VeUiMwPreviewElement() {
|
|
// Parent constructor
|
|
ve.ui.MWPreviewElement.super.apply( this, arguments );
|
|
|
|
// Initialize
|
|
this.$element.addClass( 've-ui-mwPreviewElement mw-body-content mw-parser-output' );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ve.ui.MWPreviewElement, ve.ui.PreviewElement );
|
|
|
|
/* Method */
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.MWPreviewElement.prototype.beforeAppend = function ( element ) {
|
|
// Parent method
|
|
ve.ui.MWPreviewElement.super.prototype.beforeAppend.apply( this, arguments );
|
|
|
|
// Remove any TemplateStyles stylesheets already present on the page, to avoid
|
|
// very slow repaints (T330781)
|
|
Array.prototype.forEach.call( element.querySelectorAll( 'style[data-mw-deduplicate]' ), ( style ) => {
|
|
const key = style.getAttribute( 'data-mw-deduplicate' );
|
|
|
|
const duplicate = element.querySelector( 'style[data-mw-deduplicate="' + key + '"]' );
|
|
if ( duplicate ) {
|
|
style.parentNode.removeChild( style );
|
|
}
|
|
} );
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.MWPreviewElement.prototype.setModel = function ( model ) {
|
|
// Parent method
|
|
ve.ui.MWPreviewElement.super.prototype.setModel.call( this, model );
|
|
|
|
// The following classes are used here:
|
|
// * mw-content-ltr
|
|
// * mw-content-rtl
|
|
this.$element.addClass( 'mw-content-' + this.model.getDocument().getDir() );
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.MWPreviewElement.prototype.replaceWithModelDom = function () {
|
|
// Parent method
|
|
ve.ui.MWPreviewElement.super.prototype.replaceWithModelDom.apply( this, arguments );
|
|
|
|
ve.init.platform.linkCache.styleParsoidElements(
|
|
this.$element,
|
|
// The DM node should be attached, but check just in case.
|
|
this.model.getDocument() && this.model.getDocument().getHtmlDocument()
|
|
);
|
|
};
|