MediaWiki:Gadget-edittop.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.
/* полностью переписанный скрипт с исправленными на март 2026 года уязвимостями */
// предназначен для правки нуль-раздела (преамбулы)
// добавляет кнопку редактирования над первым заголовком
(function() {
'use strict';
if (typeof mw === 'undefined' || !mw.config || !mw.util || !mw.hook) {
return;
}
mw.hook('wikipage.content').add(function($content) {
// Проверяем, что это основная страница
if (!mw.config.get('wgArticleId') || mw.config.get('wgAction') !== 'view') {
return;
}
// Проверяем, не добавлена ли уже кнопка
if ($('#ca-edit-0').length) {
return;
}
// Получаем первую секцию редактирования
var $firstH2 = $content.find('h2').first();
var $firstEditSection = $firstH2.find('.mw-editsection').first();
if (!$firstEditSection.length) {
// Альтернативный поиск для разных скинов
$firstEditSection = $('#bodyContent .mw-editsection').first();
if (!$firstEditSection.length) {
return;
}
}
// Создаем новую секцию редактирования
var $newSection = $('<span>')
.addClass('mw-editsection mw-editsection-0')
.attr('id', 'ca-edit-0');
// Копируем ссылки из существующей секции
var $sourceLinks = $firstEditSection.find('a');
var linkCount = $sourceLinks.length;
$sourceLinks.each(function(index) {
var $sourceLink = $(this);
var $newLink = $('<a>');
// Копируем классы
$newLink.attr('class', $sourceLink.attr('class'));
// Копируем текст
$newLink.text($sourceLink.text());
// Определяем тип ссылки
var isVisualEditor = $sourceLink.hasClass('mw-editsection-visualeditor');
// Формируем правильные параметры для нулевой секции
var pageName = mw.config.get('wgPageName');
var wgScript = mw.config.get('wgScript') || '/wiki/index.php';
var hrefStart = wgScript + '?title=' + mw.util.wikiUrlencode(pageName);
var params = isVisualEditor ? '&veaction=edit§ion=0' : '&action=edit§ion=0';
// Добавляем summary для вики-текста
if (!isVisualEditor) {
params += '&summary=' + encodeURIComponent('/* Преамбула */');
}
var href = hrefStart + params;
// Проверка безопасности
if (!/^(javascript|data|vbscript):/i.test(href)) {
$newLink.attr('href', href);
}
// Добавляем title если есть
if (typeof zeroSectionTip !== 'undefined' && zeroSectionTip) {
var safeTip = mw.html.escape(String(zeroSectionTip).slice(0, 300));
$newLink.attr('title', safeTip);
}
$newSection.append($newLink);
// Добавляем разделитель между ссылками (НЕ после последней)
if (index < linkCount - 1) {
$newSection.append(document.createTextNode(' | '));
}
});
// Добавляем скобки как в оригинальной секции
$newSection.prepend(document.createTextNode('['));
$newSection.append(document.createTextNode(']'));
// Определяем направление текста
var direction = $(document.body).hasClass('rtl') ? 'rtl' : 'ltr';
$newSection.attr('dir', direction);
// Применяем стили
$newSection.css({
'float': direction === 'ltr' ? 'right' : 'left',
'clear': direction === 'ltr' ? 'right' : 'left',
'font-size': '85%',
'margin-bottom': '0.5em',
'margin-top': direction === 'ltr' ? '-2.5em' : '-2.5em',
'position': 'relative',
'z-index': '1'
});
// Вставляем в нужное место в зависимости от скина
var skin = mw.config.get('skin');
try {
if (skin === 'vector-2022') {
var $indicators = $('#bodyContent .mw-indicators');
if ($indicators.length) {
$newSection.css('margin-top', '0.5em').insertAfter($indicators);
} else {
$('#bodyContent').prepend($newSection);
}
} else if (skin === 'vector') {
// Для классического Vector
var $firstHeading = $('#firstHeading');
if ($firstHeading.length) {
$newSection.insertAfter($firstHeading);
} else {
$('#bodyContent').prepend($newSection);
}
} else {
// Для других скинов
$('#bodyContent').prepend($newSection);
}
// Добавляем отступ для контента, чтобы не налезало на кнопку
$('#mw-content-text').css('clear', direction === 'ltr' ? 'right' : 'left');
} catch (e) {
if (window.console && console.error) {
console.error('Ошибка вставки кнопки редактирования:', e);
}
}
});
})();