MediaWiki:Gadget-InsertCW.js
Перейти к навигации
Перейти к поиску
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
if ($.inArray (mw.config.get ('wgAction'), ['edit', 'submit']) !== -1) { mw.loader.using ('user.options', function () { if ( mw.user.options.get ('usebetatoolbar')) { mw.loader.using ('ext.wikiEditor.toolbar', function () { mw.loader.using ('ext.wikiEditor.dialogs', function () { $(document).ready (function () { var idPrefix = 'wikieditor-toolbar-cw-'; var languages = [ { name: 'Английский', template: '{{Англ}}' } ]; var id = function (id) { return idPrefix + id; } var extendWikiEditor = function () { $('#wpTextbox1').wikiEditor ('addDialog', { 'insert-cw': { title: 'Вставка подробной ссылки', id: id ('dialog'), resizeme : false, init: dialogInit, html: dialogHtml (), dialog: { width: 750, buttons: { 'wikieditor-toolbar-tool-reference-insert': insertCWAction }, dialogClass: 'wikiEditor-toolbar-dialog', open: dialogOpen } } }); $('#wpTextbox1').wikiEditor ('addToToolbar', { 'section': 'main', 'group': 'insert', 'tools': { 'cite-web': { label: 'Подробная ссылка', type: 'button', icon: $.wikiEditor.imgPath + 'dialogs/insert-link-external.png', action: { type: 'dialog', module: 'insert-cw' } } } }); } var dialogHtml = function () { var row = function (fieldId, label, fieldHtml, toolsHtml) { var tools = typeof toolsHtml != 'undefined'; return '<tr><td class="label"><label for="' + id (fieldId) + '">' + label + ':</label></td><td' + (tools ? '' : ' colspan="2"') + ' class="field">' + fieldHtml + '</td>' + (tools ? '<td class="tools">' + toolsHtml + '</td>' : '') + '</tr>'; } var input = function (fieldId, placeholder) { return '<input type="text" id="' + id (fieldId) + '"' + (typeof placeholder == 'undefined' ? '' : ' placeholder="' + placeholder + '"') + ' />'; } var button = function (fieldId, text, hint) { return '<button id="' + id (fieldId) + '"' + (typeof hint == 'undefined' ? '' : ' title="' + hint + '"') + '>' + text + '</button>'; } var languagesSelect = function (fieldId, emptyText) { var html = '<select id="' + id (fieldId) + '"><option value="">' + emptyText + '</option>'; for (var i in languages) html += '<option value="' + i + '">' + languages[i].name + '</option>'; return html + '</select>'; } var checkbox = function (fieldId) { return '<input type="checkbox" id="' + id (fieldId) + '" />'; } return [ '<table id="' + id ('container') + '">', row ('url', 'Ссылка', input ('url'), [ button ('open-url', 'открыть'), button ('open-archive-is', '<img src="http://archive.is/favicon.ico" width="16" />', 'Просмотреть список архивов на archive.is'), button ('open-archive-org', '<img src="http://archive.org/favicon.ico" width="16" />', 'Просмотреть список архивов на archive.org') ].join ('')), row ('title', 'Заголовок', input ('title')), row ('quote', 'Цитата', input ('quote', 'Без крайних кавычек и без точки в конце')), row ('author', 'Автор', input ('author', 'Несколько авторов указываются через запятую')), row ('language', 'Язык', languagesSelect ('language', '(нет)')), row ('publisher', 'Издатель', input ('publisher')), row ('date', 'Дата', input ('date', 'гггг-мм-дд'), button ('insert-date', 'сегодня')), row ('access-date', 'Дата проверки', input ('access-date', 'гггг-мм-дд'), button ('insert-access-date', 'сегодня')), row ('broken-link', 'Битая ссылка', checkbox ('broken-link')), row ('archive-url', 'Ссылка на архив', input ('archive-url', 'URL или конструкция с применением {{Reference archive}}'), [ button ('create-new-archive', '<img src="http://archive.is/favicon.ico" width="16" /> новый'), button ('parse-archive-url', 'распознать', 'Распознать URL и дату создания архива по содержимому поля') ].join ('')), row ('archive-date', 'Дата архива', input ('archive-date', 'гггг-мм-дд'), button ('insert-archive-date', 'сегодня')), row ('extra', 'Дополнительно', input ('extra', 'Например: т. 1, гл. 4, стр. 46')), '</table>', ].join (''); } var dialogInit = function () { $('#' + id ('open-url')).click (openUrlAction); $('#' + id ('open-archive-is')).click (openArchiveIsAction); $('#' + id ('open-archive-org')).click (openArchiveOrgAction); $('#' + id ('insert-date')).click (insertDateAction); $('#' + id ('insert-access-date')).click (insertDateAction); $('#' + id ('insert-archive-date')).click (insertDateAction); $('#' + id ('create-new-archive')).click (createNewArchiveAction); $('#' + id ('parse-archive-url')).click (parseArchiveUrlAction); } var dialogOpen = function () { $('#' + id ('container') + ' :input').each (function () { switch (this.type) { case 'password': case 'select-multiple': case 'text': case 'textarea': $(this).val (''); break; case 'checkbox': case 'radio': this.checked = false; case 'select-one': $(this).val (''); } }); } var requireValue = function (inputId, cb) { var input = $('#' + id (inputId)); var value = input.val (); if (value == '') { input.focus (); } else { cb (value, input); } } var requireUrl = function (cb) { requireValue ('url', cb); } var insertDate = function (fieldId) { var input = $('#' + id (fieldId)); input.val (new Date ().format ('yyyy-mm-dd')); } var openUrlAction = function () { requireUrl (function (url) { window.open (url); }); } var openArchiveIsAction = function () { requireUrl (function (url) { window.open ('http://archive.is/' + url); }); } var openArchiveOrgAction = function () { requireUrl (function (url) { window.open ('http://web.archive.org/web/*/' + url); }); } var insertDateAction = function () { var rgx = new RegExp (id ('insert-') + '(.+)$', 'g'); var res = rgx.exec ($(this).attr ('id')); insertDate (res[1]); } var createNewArchiveAction = function () { requireUrl (function (url) { insertDate ('archive-date'); window.open ('http://archive.is/?run=1&url=' + url); }); } var parseArchiveUrlAction = function () { requireValue ('archive-url', function (value) { var rgx = new RegExp ('http://web\\.archive\\.org/web/([0-9]{4})([0-9]{2})([0-9]{2})[0-9]{6}/(.+)', 'g'); var res = rgx.exec (value); if (res !== null) { $('#' + id ('archive-date')).val ('' + res[1] + '-' + res[2] + '-' + res[3]); $('#' + id ('url')).val (res[4]); } else { rgx = new RegExp ('{{reference.*archive\\|1=(.+)\\|2=([0-9]{4})-([0-9]{2})-([0-9]{2})}}', 'gi'); res = rgx.exec (value); if (res !== null) { $('#' + id ('archive-date')).val ('' + res[2] + '-' + res[3] + '-' + res[4]); $('#' + id ('url')).val (res[1]); } } }); } var insertCWAction = function () { var ids = [ ['url', 'ссылка'], ['title', 'заголовок'], ['quote', 'цитата'], ['author', 'автор'], ['language', 'язык'], ['publisher', 'издатель'], ['date', 'дата'], ['access-date', 'датаДоступности'], ['broken-link', 'битая'], ['archive-url', 'архив'], ['archive-date', 'датаАрхива'], ['extra', 'дополнительно'] ]; var params = []; for (var i in ids) { var fieldId = ids[i][0]; var paramName = ids[i][1]; var element = $('#' + id (fieldId)); switch (fieldId) { case 'language': var value = element.val (); if (value != '') { params.push ([paramName, languages[parseInt (value)].template]); } break; case 'broken-link': if (element.is (':checked')) params.push ([paramName, 1]); break; default: var value = element.val (); if (value != '') params.push ([paramName, value]); break; } } var str = '{{CW'; for (var i in params) str += '|' + params[i][0] + '=' + params[i][1]; str += '}}'; $.wikiEditor.modules.toolbar.fn.doAction ($(this).data ('context'), { type: 'replace', options: { pre: str, peri: '', post: '' } }, $(this)); $(this).dialog ('close'); } window.importScriptURI ('http://stevenlevithan.com/assets/misc/date.format.js'); extendWikiEditor (); });});});}});}