mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-01 17:36:35 +00:00
e1e02fa0d8
New changes: abf8f41 Replace Array#concat with Array#push in converter 02aeb90 Localisation updates from https://translatewiki.net. 902ddda Use safer batchPush in converter 6368191 Use current surface's sequence registry in command help dialog f7ce4b9 Optimize batchPush on small lists fb43a0a ve.batchPush: add unit test to exercise long-array path d6c7d24 Factor out RESTBase ID regular expression ffcbf4b IndentationCommand: Use hasMatchingAncestor d447023 Allow ommission of range from ve.dm.Document cloneFromRange cfbc344 Don't strip empty paragraphs on paste if they are generated 01c918b Localisation updates from https://translatewiki.net. 1467947 Fix documentation of getMetadataIdRegExp Local changes: * Define RESTBase ID pattern in platform and fix slightly * Bring in paste test from core, which requires platform switching. Bug: T147607 Depends-On: Ifc1c15872a50f915e5ef8d561b3a363dc5f4d28f Change-Id: I3eb21e115de92a67afa85b5675fcbca5b111adb6
115 lines
3.1 KiB
JavaScript
115 lines
3.1 KiB
JavaScript
/*!
|
|
* VisualEditor MediaWiki test utilities.
|
|
*
|
|
* @copyright 2011-2016 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
ve.test.utils.createSurfaceFromDocument = function ( doc ) {
|
|
var target, mwTarget;
|
|
|
|
// Prevent the target from setting up the surface immediately
|
|
ve.init.platform.initialized = $.Deferred();
|
|
|
|
// HACK: MW targets are async and heavy, use an SA target but
|
|
// override the global registration
|
|
target = new ve.init.sa.Target();
|
|
mwTarget = new ve.init.mw.ArticleTarget();
|
|
|
|
$( '#qunit-fixture' ).append( target.$element );
|
|
target.addSurface( doc );
|
|
|
|
ve.init.platform.initialized.resolve();
|
|
mwTarget = null;
|
|
target.addSurface( doc );
|
|
return target.surface;
|
|
};
|
|
|
|
// Unregister MW override nodes.
|
|
// They are temporarily registered in setup/teardown.
|
|
ve.dm.modelRegistry.unregister( ve.dm.MWHeadingNode );
|
|
ve.dm.modelRegistry.unregister( ve.dm.MWPreformattedNode );
|
|
ve.dm.modelRegistry.unregister( ve.dm.MWTableNode );
|
|
ve.dm.modelRegistry.unregister( ve.dm.MWExternalLinkAnnotation );
|
|
// Re-register unregistered nodes.
|
|
ve.dm.modelRegistry.register( ve.dm.InlineImageNode );
|
|
ve.dm.modelRegistry.register( ve.dm.BlockImageNode );
|
|
|
|
ve.test.utils.mwEnvironment = ( function () {
|
|
var mwPlatform, corePlatform,
|
|
overrides = [
|
|
ve.dm.MWHeadingNode,
|
|
ve.dm.MWPreformattedNode,
|
|
ve.dm.MWTableNode,
|
|
ve.dm.MWExternalLinkAnnotation
|
|
],
|
|
overridden = [
|
|
ve.dm.InlineImageNode,
|
|
ve.dm.BlockImageNode
|
|
];
|
|
|
|
corePlatform = ve.init.platform;
|
|
mwPlatform = new ve.init.mw.Platform();
|
|
// Disable some API requests from platform
|
|
mwPlatform.imageInfoCache = null;
|
|
// Unregister mwPlatform
|
|
ve.init.platform = corePlatform;
|
|
|
|
function setupOverrides() {
|
|
var i;
|
|
for ( i = 0; i < overrides.length; i++ ) {
|
|
ve.dm.modelRegistry.register( overrides[ i ] );
|
|
}
|
|
for ( i = 0; i < overridden.length; i++ ) {
|
|
ve.dm.modelRegistry.unregister( overridden[ i ] );
|
|
}
|
|
ve.init.platform = mwPlatform;
|
|
}
|
|
|
|
function teardownOverrides() {
|
|
var i;
|
|
for ( i = 0; i < overrides.length; i++ ) {
|
|
ve.dm.modelRegistry.unregister( overrides[ i ] );
|
|
}
|
|
for ( i = 0; i < overridden.length; i++ ) {
|
|
ve.dm.modelRegistry.register( overridden[ i ] );
|
|
}
|
|
ve.init.platform = corePlatform;
|
|
}
|
|
|
|
// On load, teardown overrides so the first core tests run correctly
|
|
teardownOverrides();
|
|
|
|
return QUnit.newMwEnvironment( {
|
|
setup: setupOverrides,
|
|
teardown: teardownOverrides
|
|
} );
|
|
} )();
|
|
|
|
( function () {
|
|
var getDomElementSummaryCore = ve.getDomElementSummary;
|
|
|
|
/**
|
|
* Override getDomElementSummary to extract HTML from data-mw/body.html
|
|
* and make it comparable.
|
|
*
|
|
* @method
|
|
* @inheritdoc ve#getDomElementSummary
|
|
*/
|
|
ve.getDomElementSummary = function ( element, includeHtml ) {
|
|
// "Parent" method
|
|
return getDomElementSummaryCore( element, includeHtml, function ( name, value ) {
|
|
var obj, html;
|
|
if ( name === 'data-mw' ) {
|
|
obj = JSON.parse( value );
|
|
html = ve.getProp( obj, 'body', 'html' );
|
|
if ( html ) {
|
|
obj.body.html = ve.getDomElementSummary( $( '<div>' ).html( html )[ 0 ] );
|
|
}
|
|
return obj;
|
|
}
|
|
return value;
|
|
} );
|
|
};
|
|
} )();
|