MediaWiki:Gadget-develika-components.js
Страница интерфейса MediaWiki
Дополнительные действия
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
/* Группа «Компоненты» в панели VisualEditor: кнопки вставки шаблонов «Девелика».
Подключается как гаджет (см. MediaWiki:Gadgets-definition).
ВАЖНО: регистрация синхронная — иначе панель VE успевает построиться раньше. */
mw.libs.ve.addPlugin( function () {
var components = [
{ name: 'dvlkInfobox', title: 'Инфобокс устройства', tpl: 'Инфобокс устройства', block: true },
{ name: 'dvlkReview', title: 'Карточка обзора', tpl: 'Карточка обзора', block: true },
{ name: 'dvlkCallout', title: 'Плашка', tpl: 'Плашка', block: false },
{ name: 'dvlkBadge', title: 'Бейдж', tpl: 'Бейдж', block: false },
{ name: 'dvlkDisc', title: 'Карточка обсуждения', tpl: 'Карточка обсуждения', block: true }
];
components.forEach( function ( c ) {
// Команда открывает диалог шаблона, предзаполненный нужным компонентом
// (пользователь сразу получает форму параметров — паттерн Cite-tool VE).
ve.ui.commandRegistry.register( new ve.ui.Command(
c.name, 'window', 'open',
{ args: [ 'transclusion', { template: c.tpl } ], supportedSelections: [ 'linear' ] }
) );
function Tool() { Tool.super.apply( this, arguments ); }
OO.inheritClass( Tool, ve.ui.Tool );
Tool.static.name = c.name;
Tool.static.group = 'dvlkComponents';
Tool.static.icon = 'add';
Tool.static.title = c.title;
Tool.static.commandName = c.name;
Tool.static.autoAddToCatchall = false;
Tool.static.displayBothIconAndLabel = true;
// onUpdateState НЕ переопределяем — базовый ve.ui.Tool сам включает/выключает
// кнопку по применимости команды (иначе кнопка остаётся disabled).
ve.ui.toolFactory.register( Tool );
} );
var groupCfg = {
name: 'dvlkComponents',
title: 'Компоненты',
label: 'Компоненты',
type: 'list',
icon: 'add',
include: [ 'dvlkInfobox', 'dvlkReview', 'dvlkCallout', 'dvlkBadge', 'dvlkDisc' ]
};
[ ve.init.mw.DesktopArticleTarget, ve.init.mw.MobileArticleTarget ].forEach( function ( target ) {
if ( target && target.static && Array.isArray( target.static.toolbarGroups ) ) {
var groups = target.static.toolbarGroups;
var idx = -1;
groups.forEach( function ( g, i ) { if ( g.name === 'insert' ) { idx = i; } } );
groups.splice( idx === -1 ? groups.length : idx + 1, 0, groupCfg );
}
} );
} );