// Сценарий, позволяющий редактировать описание правки-отката // Перевод сценария Majr'а // Использование: /* importScript('Участник:NickTheRed37/Сценарии/editableRollback.js'); */ // СЦЕНАРИЙ УСТАРЕЛ: Изменяемое описание отката реализовано в виде гаджета: [[MediaWiki:Gadget-editableRollback.js]] // Страница сохранена в исторических целях, так как на неё есть ссылки в архивах страниц обсуждений // Здесь начинается код! $(function() { 'use strict'; // Как всё должно выглядеть mw.util.addCSS([ // Кнопка изменения '.edit-rollback {', 'display: inline-block;', 'width: 10px;', 'height: 10px;', 'margin-left: 2px;', 'background: url(http://media-mcw.cursecdn.com/6/6c/Edit_pencil.png) no-repeat;', 'cursor: pointer;', '}', // Область изменения описания '#rollback-summary {', 'display: flex;', 'align-items: center;', 'position: absolute;', 'left: 1em;', 'right: 1em;', 'padding: 0.8em;', 'border: 1px solid #CCC;', 'background-color: #F9F9F9;', 'z-index: 99;', 'box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);', '}', /// Поле ввода '#rollback-summary > *:first-child {', 'flex: auto;', 'margin-right: 1em;', '}', /// Кнопка отката '#rollback-summary > .rollback-submit-button {', 'flex: none;', 'background-color: #4f7ab3;', 'border-color: #466185;', 'color: #000000;', '}', ].join('\n')); $('.mw-rollback-link > a').after($('<span>').addClass('edit-rollback').prop('title', 'Редактировать описание отката')); $('#mw-content-text').on('click', '.edit-rollback', function() { var $rollback = $('#rollback-summary'); if ($(this).parent().is($rollback.parent())) { $rollback.toggle(); } else { $rollback.remove(); var name = decodeURIComponent($(this).prev().prop('href').match(/&from=(.+)&token/)[1].replace(/\+/g, ' ')); $rollback = $('<div id="rollback-summary">').append( $('<input type="text">').addClass('rollback-text').prop({maxlength: 250, spellcheck: true}).val( 'Откат правок [[Служебная:Вклад/' + name + '|' + name + ']] ([[User talk:' + name + '|обсуждение]])' ), $('<input type="button">').addClass('mw-ui-button mw-ui-constructive rollback-submit-button').val('Откатить') ).insertAfter(this); } // Установить курсор в конец текста var $text = $rollback.find('.rollback-text'); var summary = $text.val(); $text.focus().val('').val(summary); } ); $('#mw-content-text').on('click', '.rollback-submit-button', function() { var $link = $(this).closest('.mw-rollback-link'); window.location = $link.find('a').prop('href') + '&summary=' + encodeURIComponent($link.find('.rollback-text').val()); }); // Позволяет откатывать нажатием <Enter>, когда выделено поле ввода $('#mw-content-text').on('keypress', '.rollback-text', function(e) { if (e.which !== 13) { return; } e.preventDefault(); $('.rollback-submit-button').click(); }); // Закрыть окно, если нажато не на нём $(window).click(function(e) { if (!$(e.target).is('#rollback-summary, .edit-rollback') && !$('#rollback-summary').has(e.target).length) { $('#rollback-summary').hide(); } }); });