MediaWiki:Common.js: различия между версиями
Перейти к навигации
Перейти к поиску
Fritz (обсуждение | вклад) Нет описания правки |
Fritz (обсуждение | вклад) Нет описания правки |
||
| (не показано 18 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
/****************************/ | |||
/* Вкладка «Новая страница» */ | |||
/****************************/ | |||
// Добавляет вкладку «Новая страница» для упрощения создания новых страниц | |||
// Вопросы по скрипту сюда: https://ruxpert.ru/Обсуждение_участника:Fritz | |||
$(document).ready(function() { | |||
// Чтобы не было путаницы, во время редактирования вкладку не показываем | |||
if (window.location.search.includes('action=edit')) { | |||
return; // Выходим из скрипта, если находим параметр action=edit | |||
} | |||
// Ищем элемент вкладки "Обсуждение" | |||
var discussionTab = $('#ca-talk'); | |||
// Добавляем вкладку "Новая страница" | |||
var newTab = $('<li>', { | |||
id: 'ca-new-page', | |||
class: 'mw-list-item' | |||
}).append($('<a>', { | |||
href: '#', // Заглушка для ссылки | |||
text: 'Новая страница', | |||
click: function(event) { | |||
event.preventDefault(); // Предотвращаем стандартный переход по ссылке | |||
// Вопрос пользователю | |||
var pageName = prompt('Введите название новой страницы:'); | |||
if (pageName !== null && pageName.trim() !== '') { | |||
// Формируем URL для новой страницы | |||
var encodedPageName = encodeURIComponent(pageName.trim()); // Кодируем символы для URL | |||
// Открываем форму создания новой страницы | |||
window.location.href = '/index.php?title=' + encodedPageName + '&action=edit'; | |||
} | |||
} | |||
})); | |||
// Вставляем новую вкладку после вкладки "Обсуждение" | |||
discussionTab.after(newTab); | |||
}); | |||
/* */ | /* */ | ||
/* Ссылкоправ */ | /* Ссылкоправ */ | ||
| Строка 24: | Строка 66: | ||
// Правильное кодирование: ".20", ".D0.80" | // Правильное кодирование: ".20", ".D0.80" | ||
// Неправильное кодирование: ".ы", ".D1.8" (После .D0 и .D1 должна обязательно идти вторая часть кода символа) | // Неправильное кодирование: ".ы", ".D1.8" (После .D0 и .D1 должна обязательно идти вторая часть кода символа) | ||
console.log("Ссылкоправ: не могу расшифровать URL " | console.log("Ссылкоправ: не могу расшифровать URL " + encodedHash); | ||
} | } | ||
} | } | ||
// Собираем обратно часть ссылки | // Собираем обратно часть ссылки | ||
var | var decodedUrlPart = hashParts.join('#'); | ||
parts[0] = decodedUrlPart; // Обновляем первую часть с декодированной информацией | |||
// Собираем обратно все части ссылки, разделенные "|" | |||
var decodedLink = parts.join('|'); | |||
// Возвращаем измененную ссылку только если она изменилась | // Возвращаем измененную ссылку только если она изменилась | ||
| Строка 71: | Строка 117: | ||
} | } | ||
// Вешает кнопку Ссылкоправа на панель инструментов | // Вешает кнопку Ссылкоправа на панель инструментов (это часть скрипта выше) | ||
mw.loader.using(['mediawiki.util', 'mediawiki.user'], function () { | mw.loader.using(['mediawiki.util', 'mediawiki.user'], function () { | ||
setTimeout(function() { | setTimeout(function() { | ||
var formatGroup = document.querySelector('.wikiEditor-ui-toolbar .group.group-format'); | var formatGroup = document.querySelector('.wikiEditor-ui-toolbar .group.group-format'); | ||
if (!formatGroup) { | if (!formatGroup) { | ||
console.error('Format group not found'); | // Выходим, если панели инструментов нет на странице, то есть мы не в режиме редактирования | ||
//console.error('Format group not found'); | |||
return; | return; | ||
} | } | ||
Текущая версия от 21:57, 2 октября 2024
/****************************/
/* Вкладка «Новая страница» */
/****************************/
// Добавляет вкладку «Новая страница» для упрощения создания новых страниц
// Вопросы по скрипту сюда: https://ruxpert.ru/Обсуждение_участника:Fritz
$(document).ready(function() {
// Чтобы не было путаницы, во время редактирования вкладку не показываем
if (window.location.search.includes('action=edit')) {
return; // Выходим из скрипта, если находим параметр action=edit
}
// Ищем элемент вкладки "Обсуждение"
var discussionTab = $('#ca-talk');
// Добавляем вкладку "Новая страница"
var newTab = $('<li>', {
id: 'ca-new-page',
class: 'mw-list-item'
}).append($('<a>', {
href: '#', // Заглушка для ссылки
text: 'Новая страница',
click: function(event) {
event.preventDefault(); // Предотвращаем стандартный переход по ссылке
// Вопрос пользователю
var pageName = prompt('Введите название новой страницы:');
if (pageName !== null && pageName.trim() !== '') {
// Формируем URL для новой страницы
var encodedPageName = encodeURIComponent(pageName.trim()); // Кодируем символы для URL
// Открываем форму создания новой страницы
window.location.href = '/index.php?title=' + encodedPageName + '&action=edit';
}
}
}));
// Вставляем новую вкладку после вкладки "Обсуждение"
discussionTab.after(newTab);
});
/* */
/* Ссылкоправ */
/* */
// Исправляет все внутристатейные ссылки типа #.D0.92.D0.BE на русский текст
// Вопросы по скрипту сюда: https://ruxpert.ru/Обсуждение_участника:Fritz
// Раскодирует единичную ссылку типа #.D0.92.D0.BE
function decodeSingleURL(link) {
var originalLink = link;
var parts = link.split('|'); // Разбиваем на части по символу "|"
var urlPart = parts[0]; // Часть ссылки до "|"
var hashParts = urlPart.split('#'); // Разбиваем часть ссылки до "|" на части по символу "#"
if (hashParts.length > 1) {
// Замена точек на процент-кодирование, только если за точкой следуют два шестнадцатеричных символа
var encodedHash = hashParts[1].replace(/\.(?=[A-F0-9]{2})/gi, '%');
// Попытка декодирования части URL после "#"
try {
hashParts[1] = decodeURIComponent(encodedHash);
} catch (e) {
// В случае ошибки декодирования, флаг успешного раскодирования остается false,
// это нужно для правильного подсчёта числа раскодированных ссылок.
// Правильное кодирование: ".20", ".D0.80"
// Неправильное кодирование: ".ы", ".D1.8" (После .D0 и .D1 должна обязательно идти вторая часть кода символа)
console.log("Ссылкоправ: не могу расшифровать URL " + encodedHash);
}
}
// Собираем обратно часть ссылки
var decodedUrlPart = hashParts.join('#');
parts[0] = decodedUrlPart; // Обновляем первую часть с декодированной информацией
// Собираем обратно все части ссылки, разделенные "|"
var decodedLink = parts.join('|');
// Возвращаем измененную ссылку только если она изменилась
return (decodedLink !== originalLink) ? decodedLink : null;
}
// Находит все ссылки типа [[…]] и передаёт их по одной в decodeSingleURL
function decode_links() {
var textarea = document.getElementById('wpTextbox1');
var editText = textarea.value;
// Сохранение текущей позиции курсора
var cursorPosition = textarea.selectionStart;
var decodedCount = 0;
// Регулярное выражение для поиска всех ссылок
var regex = /\[\[([^\]]+)\]\]/g;
// Применение функции декодирования к каждой ссылке
var decodedText = editText.replace(regex, function(match, linkContent) {
var decodedLink = decodeSingleURL(linkContent);
if (decodedLink !== null) {
decodedCount++;
return '[[' + decodedLink + ']]'; // Убрали пробелы вокруг ссылки
}
return match;
});
// Обновление текста в textarea
textarea.value = decodedText;
// Восстановление позиции курсора
textarea.selectionStart = textarea.selectionEnd = cursorPosition;
var finalMessage = decodedCount === 0
? "Закодированных ссылок не найдено."
: "Раскодировано ссылок: " + decodedCount;
alert(finalMessage);
}
// Вешает кнопку Ссылкоправа на панель инструментов (это часть скрипта выше)
mw.loader.using(['mediawiki.util', 'mediawiki.user'], function () {
setTimeout(function() {
var formatGroup = document.querySelector('.wikiEditor-ui-toolbar .group.group-format');
if (!formatGroup) {
// Выходим, если панели инструментов нет на странице, то есть мы не в режиме редактирования
//console.error('Format group not found');
return;
}
// Создание новой кнопки
var button = document.createElement('span');
button.className = 'tool oo-ui-widget oo-ui-widget-enabled oo-ui-buttonElement oo-ui-buttonElement-frameless oo-ui-iconElement oo-ui-buttonWidget';
button.innerHTML = '<a class="oo-ui-buttonElement-button" role="button" title="Ссылкоправ" tabindex="0" rel="nofollow">' +
'<span class="oo-ui-iconElement-icon" style="background-image: url(\'https://ruxpert.ru/images/7/72/Ссылкоправ.jpg\');"></span>' +
'<span class="oo-ui-labelElement-label"></span>' +
'</a>';
// Добавление обработчика клика для вызова функции decode_links
button.onclick = function() {
decode_links();
};
// Добавление кнопки в группу форматирования
formatGroup.appendChild(button);
}, 1000);
});
/* */
/* WikiEditor/Викификатор */
/* */
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.load( '//ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript' );
}
var customizeToolbar = function() {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'advanced',
'group': 'format',
'tools': {
'wikify': {
label: 'Викификатор',
type: 'button',
icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
action: {
type: 'callback',
execute: function(context){
Wikify();
}
}
}
}
} );
};
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 () {
$(document).ready( customizeToolbar );
} );
}
} );
};
/*************************/
/* Реклама Яндекс Директ */
/*************************/
/* Реклама Яндекса не должна показываться на страницах редактирования статей, обсуждения статей и участников, страницах участников, служебных страницах, страницах с историей правок. */
var path = decodeURIComponent(window.location.pathname);
if(path.indexOf("Участник:") === -1 && path.indexOf("Обсуждение") === -1 &&
path.indexOf("index.php") === -1 && path.indexOf("Служебная:") === -1 &&
path.indexOf("help.php") === -1 && path.indexOf("MediaWiki:") === -1) {
/* Блок 1 */
(function() {
$('#top').after('<div id="yandex_rtb_R-A-446933-1"></div>');
})();
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-A-446933-1",
renderTo: "yandex_rtb_R-A-446933-1",
async: true
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(this, this.document, "yandexContextAsyncCallbacks");
/* Блок 2 */
(function() {
$('#mw-content-text').after('<div id="yandex_rtb_R-A-446933-2"></div>');
})();
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-A-446933-2",
renderTo: "yandex_rtb_R-A-446933-2",
async: true
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(this, this.document, "yandexContextAsyncCallbacks");
}