mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2024-11-28 08:50:07 +00:00
89dd1faa11
We generate stub MWCitationDialog sub-classes for each citation type, e.g. cite-web, cite-news. The only override these sub-classes provide is for the dialog title, providing "Website" instead of "Cite web", however because of code in MWTemplateDialog, this override isn't even used. 1. Make the 'citation' dialog (now 'cite') concrete by registering it, and allow a 'title' argument to be passed it. 2. Actually override the title, using the passed in argument. 3. Remove the stub generated citation dialogs. This will also fix our tracking data. Current we are getting window-open actions with the argument being a localised citation type name, e.g. cite-Literatur, cite-אתר. These will now all be tracked as 'cite' as we use the parent dialog. Bug: T216248 Depends-On: I355e7fe4c2ea965f2ca91f0ab0430cfb95e56e0a Change-Id: I661707b5f9d3d810e9391ad63bef546d4fcb29e4
141 lines
4.9 KiB
JavaScript
141 lines
4.9 KiB
JavaScript
/*!
|
|
* VisualEditor MediaWiki Cite initialisation code.
|
|
*
|
|
* @copyright 2011-2018 VisualEditor Team's Cite sub-team and others; see AUTHORS.txt
|
|
* @license MIT
|
|
*/
|
|
|
|
( function () {
|
|
var name;
|
|
|
|
function fixTarget( target ) {
|
|
var i, iLen, toolGroup, label, group,
|
|
toolGroups = target.static.toolbarGroups;
|
|
|
|
if ( mw.config.get( 'wgCiteVisualEditorOtherGroup' ) ) {
|
|
for ( i = 0, iLen = toolGroups.length; i < iLen; i++ ) {
|
|
toolGroup = toolGroups[ i ];
|
|
if ( toolGroup.name === 'insert' && ( !toolGroup.demote || toolGroup.demote.indexOf( 'reference' ) === -1 ) ) {
|
|
toolGroup.demote = toolGroup.demote || [];
|
|
toolGroup.demote.push( { group: 'cite' }, 'reference', 'reference/existing' );
|
|
}
|
|
}
|
|
} else {
|
|
// Find the reference placeholder group and replace it
|
|
for ( i = 0, iLen = toolGroups.length; i < iLen; i++ ) {
|
|
if ( toolGroups[ i ].name === 'reference' ) {
|
|
toolGroups[ i ] = group = {
|
|
// Change the name so it isn't replaced twice
|
|
name: 'cite',
|
|
type: 'list',
|
|
indicator: 'down',
|
|
include: [ { group: 'cite' }, 'reference', 'reference/existing' ],
|
|
demote: [ 'reference', 'reference/existing' ]
|
|
};
|
|
label = OO.ui.deferMsg( 'cite-ve-toolbar-group-label' );
|
|
// Treat mobile targets differently
|
|
if ( ve.init.mw.MobileArticleTarget && target.prototype instanceof ve.init.mw.MobileArticleTarget ) {
|
|
group.header = label;
|
|
group.title = label;
|
|
group.icon = 'reference';
|
|
} else {
|
|
group.label = label;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for ( name in ve.init.mw.targetFactory.registry ) {
|
|
fixTarget( ve.init.mw.targetFactory.lookup( name ) );
|
|
}
|
|
|
|
ve.init.mw.targetFactory.on( 'register', function ( name, target ) {
|
|
fixTarget( target );
|
|
} );
|
|
|
|
/**
|
|
* Add reference insertion tools from on-wiki data.
|
|
*
|
|
* By adding a definition in JSON to MediaWiki:Visualeditor-cite-tool-definition, the cite menu can
|
|
* be populated with tools that create refrences containing a specific templates. The content of the
|
|
* definition should be an array containing a series of objects, one for each tool. Each object must
|
|
* contain a `name`, `icon` and `template` property. An optional `title` property can also be used
|
|
* to define the tool title in plain text. The `name` property is a unique identifier for the tool,
|
|
* and also provides a fallback title for the tool by being transformed into a message key. The name
|
|
* is prefixed with `visualeditor-cite-tool-name-`, and messages can be defined on Wiki. Some common
|
|
* messages are pre-defined for tool names such as `web`, `book`, `news` and `journal`.
|
|
*
|
|
* Example:
|
|
* [ { "name": "web", "icon": "ref-cite-web", "template": "Cite web" }, ... ]
|
|
*
|
|
*/
|
|
( function () {
|
|
var i, len, item, name, data, tool, tools, contextItem,
|
|
limit = 5;
|
|
|
|
try {
|
|
// Must use mw.message to avoid JSON being parsed as Wikitext
|
|
tools = JSON.parse( mw.message( 'cite-tool-definition.json' ).plain() );
|
|
} catch ( e ) {}
|
|
if ( !tools ) {
|
|
try {
|
|
// Must use mw.message to avoid JSON being parsed as Wikitext
|
|
tools = JSON.parse( mw.message( 'visualeditor-cite-tool-definition.json' ).plain() );
|
|
} catch ( e ) {}
|
|
}
|
|
|
|
if ( Array.isArray( tools ) ) {
|
|
for ( i = 0, len = Math.min( limit, tools.length ); i < len; i++ ) {
|
|
item = tools[ i ];
|
|
data = { template: item.template, title: item.title };
|
|
|
|
// Generate citation tool
|
|
name = 'cite-' + item.name;
|
|
if ( !ve.ui.toolFactory.lookup( name ) ) {
|
|
tool = function GeneratedMWCitationDialogTool() {
|
|
ve.ui.MWCitationDialogTool.apply( this, arguments );
|
|
};
|
|
OO.inheritClass( tool, ve.ui.MWCitationDialogTool );
|
|
tool.static.group = 'cite';
|
|
tool.static.name = name;
|
|
tool.static.icon = item.icon;
|
|
if ( mw.config.get( 'wgCiteVisualEditorOtherGroup' ) ) {
|
|
tool.static.title = mw.msg( 'cite-ve-othergroup-item', item.title );
|
|
} else {
|
|
tool.static.title = item.title;
|
|
}
|
|
tool.static.commandName = name;
|
|
tool.static.template = item.template;
|
|
tool.static.autoAddToCatchall = false;
|
|
tool.static.autoAddToGroup = true;
|
|
tool.static.associatedWindows = [ name ];
|
|
ve.ui.toolFactory.register( tool );
|
|
ve.ui.commandRegistry.register(
|
|
new ve.ui.Command(
|
|
name, 'mwcite', 'open', { args: [ data ], supportedSelections: [ 'linear' ] }
|
|
)
|
|
);
|
|
}
|
|
|
|
// Generate citation context item
|
|
if ( !ve.ui.contextItemFactory.lookup( name ) ) {
|
|
contextItem = function GeneratedMWCitationContextItem() {
|
|
// Parent constructor
|
|
ve.ui.MWCitationContextItem.apply( this, arguments );
|
|
};
|
|
OO.inheritClass( contextItem, ve.ui.MWCitationContextItem );
|
|
contextItem.static.name = name;
|
|
contextItem.static.icon = item.icon;
|
|
contextItem.static.label = item.title;
|
|
contextItem.static.commandName = name;
|
|
contextItem.static.template = item.template;
|
|
ve.ui.contextItemFactory.register( contextItem );
|
|
}
|
|
}
|
|
}
|
|
}() );
|
|
|
|
}() );
|