mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-16 10:59:56 +00:00
5cbd04ac3e
It turns out there are events bound to the rendering of CE nodes that prevent certain events. The quick fix is to just round trip the reference rendering to through the browser's HTML serializer and parser, but T92583 has been filed to find a more general solution. Bug: T92427 Change-Id: I725a0d2dbb24af9cbe7b1e7e0c8e0bda7fd8417c
88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
/*!
|
|
* VisualEditor MWReferenceContextItem class.
|
|
*
|
|
* @copyright 2011-2015 VisualEditor Team and others; see http://ve.mit-license.org
|
|
*/
|
|
|
|
/**
|
|
* Context item for a MWReference.
|
|
*
|
|
* @class
|
|
* @extends ve.ui.ContextItem
|
|
*
|
|
* @constructor
|
|
* @param {ve.ui.Context} context Context item is in
|
|
* @param {ve.dm.Model} model Model item is related to
|
|
* @param {Object} config Configuration options
|
|
*/
|
|
ve.ui.MWReferenceContextItem = function VeMWReferenceContextItem( context, model, config ) {
|
|
// Parent constructor
|
|
ve.ui.MWReferenceContextItem.super.call( this, context, model, config );
|
|
|
|
// Initialization
|
|
this.$element.addClass( 've-ui-mwReferenceContextItem' );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ve.ui.MWReferenceContextItem, ve.ui.ContextItem );
|
|
|
|
/* Static Properties */
|
|
|
|
ve.ui.MWReferenceContextItem.static.name = 'reference';
|
|
|
|
ve.ui.MWReferenceContextItem.static.icon = 'reference';
|
|
|
|
ve.ui.MWReferenceContextItem.static.label = OO.ui.deferMsg( 'visualeditor-dialogbutton-reference-tooltip' );
|
|
|
|
ve.ui.MWReferenceContextItem.static.modelClasses = [ ve.dm.MWReferenceNode ];
|
|
|
|
ve.ui.MWReferenceContextItem.static.commandName = 'reference';
|
|
|
|
/* Methods */
|
|
|
|
/**
|
|
* Get a DOM rendering of the reference.
|
|
*
|
|
* @private
|
|
* @return {jQuery} DOM rendering of reference
|
|
*/
|
|
ve.ui.MWReferenceContextItem.prototype.getRendering = function () {
|
|
var ref = ve.dm.MWReferenceModel.static.newFromReferenceNode( this.model ),
|
|
view = new ve.ce.InternalItemNode(
|
|
this.model.getDocument().getInternalList().getItemNode( ref.getListIndex() )
|
|
);
|
|
|
|
// HACK: PHP parser doesn't wrap single lines in a paragraph
|
|
if ( view.$element.children().length === 1 && view.$element.children( 'p' ).length === 1 ) {
|
|
// unwrap inner
|
|
view.$element.children().replaceWith( view.$element.children().contents() );
|
|
}
|
|
|
|
// Make all links open in a new window
|
|
view.$element.find( 'a' ).attr( 'target', '_blank' );
|
|
|
|
view.destroy();
|
|
|
|
// Strip the HTML rendering of any events that might be still bound to it
|
|
return $( view.$element.html() );
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.MWReferenceContextItem.prototype.getDescription = function () {
|
|
return this.getRendering().text();
|
|
};
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
ve.ui.MWReferenceContextItem.prototype.renderBody = function () {
|
|
this.$body.empty().append( this.getRendering() );
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.ui.contextItemFactory.register( ve.ui.MWReferenceContextItem );
|