Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

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 );
		}
	} );
} );