MediaWiki:Gadget-makecard.js
Перейти к навигации
Перейти к поиску
Замечание: Чтобы после сохранения вступили в силу изменения стилей, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=common&*, если используете скин Common.
Чтобы вступили в силу изменения скриптов, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=common&*, если используете скин Common.
Гаджеты и импортируемые скрипты загружаются отдельными файлами.
/*
* Автогенерация шаблона Summary на основании спецификации.
* А. Машин
*/
var ns = mw.config.get ('wgNamespaceNumber');
if (ns === 10 || ns === 156) {
if (!mw.edit_gadget_extensions) {
mw.edit_gadget_extensions = [];
}
mw.edit_gadget_extensions.push (function () {
mw.tools_above [mw.tools_above.length - 6].splice (-1, 0,
{wrapper: (ns === 10 ? makeTemplate : makeForm), button: '<img src="/images/d/d5/Etool_make_template.png" width="16" height="16" alt="M"/>', title: 'Создать ' + (ns === 10 ? 'шаблон' : 'форму'), all: true}
);
});
}
// Создать шаблон, основанный на [[Шаблон:Карточка]] по синтаксису вызова:
function makeTemplate (/* String */ s) {
return makeTemplateOrCard (true, s);
}
// Создать форму, основанную на [[Шаблон:Карточка]] по синтаксису вызова:
function makeForm (/* String */ s) {
return makeTemplateOrCard (false, s);
}
/* Функция, генерирующая:
* код шаблона, основанного на шаблоне Карточка или
* код формы Semantic Forms с тем же оформлением
* на основании синтаксиса вызова шаблона в виде
* {{<Имя шаблона>
* | <параметр1> = пояснение1
* | <параметр2> = пояснение2
* ...
* | <параметрn> = пояснениеn
* }}
* Спецификация синтаксиса берётся из выделения в окне редактирования викитекста;
* если ничего не выделено, используется всё содержимое окна.
*
* Для генерации кода шаблона или формы нужно нажать кнопку со всплывающей подсказкой «Создать карточку».
*
* Автор: Александр Машин, 2 августа 2009 (создание шаблона) и 11 октября 2009 (создание формы) -- в виде приспособления.
* 7 сентября 2012 -- интеграция в инструменты редактирования
*
*/
// Создание кода шаблона-карточки или формы-карточки на основе переданной спецификации:
function makeTemplateOrCard (/* Bool */is_template, /* String */specs) {
// Ничего не выбрано:
if (undefined === typeof specs || !specs || '' === specs) return specs;
// Это не вызов шаблона с параметрами:
var params = specs.split ('|');
if (params === null) return specs;
var t_body = '';
// Проход по параметрам.
// Номера параметров не подряд, чтобы облегчить вставку:
var incr = 99 / params.length; // -- заменить на var incr = 10; после перехода [[Шаблон:Карточка]] на циклы.
incr = incr < 1 ? 1 : incr;
for (var i = 0; i < params.length; i++) {
// Обрезка пробелов и того, что после =:
var param = $.trim (params [i].split ('=') [0]);
param = param.replace (/}}.*/, ''); // -- удаление закрывающих }}.
param = param.substr (0, 1).toLocaleLowerCase () + param.substr (1); // -- регистр параметра.
if (param.indexOf ('{{') > -1) {
// Это название шаблона:
var template_title = param.replace (/^.*\{\{/, '');
continue;
}
if (is_template && (param == 'название' || param == 'name'
|| param == 'тип' || param == 'type'
|| param == 'изображение' || param == 'image'
|| param == 'ширина' || param == 'width'
|| param == 'подпись' || param == 'signature')) {
// Эти параметры идут в заголовке шаблона:
continue;
}
if (!is_template && (param == 'название' || param == 'name'
|| param == 'ширина' || param == 'width'
|| param == 'подпись' || param == 'signature')) {
// Эти параметры идут в заголовке формы:
continue;
}
var param_no = Math.floor ((i + 1) * incr).toString ();
var label = param.substr (0, 1).toLocaleUpperCase () + param.substr (1).toLocaleLowerCase ();
if (is_template) {
// Это шаблон:
var type = param.toLocaleLowerCase ().indexOf ('дата') > -1
|| param.toLocaleLowerCase ().indexOf ('год') > -1
|| param.toLocaleLowerCase ().indexOf ('день') > -1
? 'дата'
: 'страница';
var prop = type == 'дата' ? label.replace (/(дата|год|день)\s*/i, '') : label;
param = '{{{' + param + '|{{{' + label + '|}}}}}}';
} else {
// Это форма:
param = '{{{field|' + param + '|width=23}}}';
}
t_body = t_body + '\n'
+ '\n | заголовок' + param_no + ' = ' + ''
+ '\n | метка' + param_no + ' = ' + label
+ ' | текст' + param_no + ' = ' + param;
if (is_template) {
// Это нужно только для шаблонов:
t_body = t_body
+ '\n | свойство' + param_no + ' = ' + prop
+ ' | обратно' + param_no + ' = ' + ''
+ ' | тип' + param_no + ' = ' + type
+ ( type != 'дата' ?('\n | категория' + param_no + ' = ' + ''
+ ' | постфикс' + param_no + ' = ' + '')
:('\n | категория_дня' + param_no + ' = ' + ''
+ ' | постфикс_дня' + param_no + ' = ' + ''
+ ' | категория_года' + param_no + ' = ' + ''
+ ' | постфикс_года' + param_no + ' = ' + ''));
}
}
t_foot = '\n\n | внизу ='
+ ' | стиль_внизу = '
+ ' | форма = ' + template_title
+ '}}\n';
if (is_template) {
// Это шаблон:
var preface = '';
var title = '{{{название|{{{Название|{{{name|{{{Name|{{PAGENAME}}}}}}}}}}}}}}';
var subtitle = '{{{тип|{{{Тип|{{{type|{{{Type|' + template_title + '}}}}}}}}}}}}';
var image = '{{{изображение|{{{Изображение|{{{image|{{{Image|}}}}}}}}}}}}';
var width = '{{{ширина|{{{Ширина|{{{width|{{{Width|}}}}}}}}}}}}';
var signature = '{{{подпись|{{{Подпись|{{{signature|{{{Signature|}}}}}}}}}}}}';
var head_props = '';
var body_class = '';
} else {
// это форма:
var preface = '<noinclude>{{#forminput:' + template_title + '|120|(' + template_title + ' — новая)|Создать}}\n'
+ '</noinclude><includeonly>\n'
+ '{{{info|page name=<' + template_title + '[название]>|add title=Создание статьи о ' + template_title + '|edit title=Правка статьи о·' + template_title + '}}}\n'
+ '<!-- <div id="wikiPreview" style="display none; padding-bottom 25px; margin-bottom 25px; border-bottom 1px solid #AAAAAA;"></div> -->\n'
+ '{{{for template|' + template_title + '}}}';
var title = '{{{field|название|width=52}}}';
var subtitle = '';
var image = '';
var width = '';
var signature = '';
var head_props = '-';
var body_class = 'formtable';
}
var t_head = preface
+ '\n{{Карточка'
+ '\n |имя = ' + template_title
+ '\n |стиль_тела = border-color: black'
+ '\n |класс_тела = ' + body_class
+ '\n |шапка = '
+ ' |стиль_шапки = '
+ ' |свойство_шапки = ' + head_props
+ ' |класс_шапки = '
+ '\n |название = ' + title
+ ' |стиль_названия = black'
+ '\n |вверху = '
+ ' |стиль_вверху = '
+ ' |свойство_вверху = ' + head_props
+ '\n |вверху2 = ' + subtitle
+ ' |стиль_вверху2 = '
+ ' |свойство_вверху2 = ' + head_props
+ '\n |вверху3 = '
+ ' |стиль_вверху3 = '
+ ' |свойство_вверху3 = ' + head_props
+ '\n |значок = '
+ '\n |изображение = ' + image
+ '\n |стиль_заголовков = '
+ ' |стиль_меток = '
+ ' |стиль_текста = ';
if (is_template) {
// шаблон:
t_foot = t_foot
+ '<noinclude>\n<pre>\n' + specs + '\n</pre>\n[[Категория:Традиция:Шаблоны Summary]]</noinclude>';
} else {
// форма:
t_foot = t_foot
+ '{{{end template}}}\n'
+ '{{{standard input|free text|rows=25|cols=55}}}\n\n'
+ '{{{standard input|summary}}}\n\n'
+ '{{{standard input|minor edit}}} {{{standard input|watch}}}\n\n'
+ '{{{standard input|save}}} {{{standard input|preview}}} {{{standard input|changes}}} {{{standard input|cancel}}}\n\n'
+ '</includeonly><noinclude>[[Категория:Традиция:Формы]]</noinclude>';
}
return t_head + t_body + t_foot;
}