Участник:Vavilexxx/dewikify.js
Перейти к навигации
Перейти к поиску
/* Скрипт для девикификации выделенного текста (убирает внутренние ссылки в выделенном тексте).
Добавляет в панель редактирования кнопку, при нажатии на которую в выделенном тексте все внутренние ссылки заменяются на текст.
Вот так:
[[link|text]] -> text
[[link]] -> link
Частично основано на скрипте уч. DonRumata [[Участник:DonRumata/lowercase.js]] */
function getFixedWikiLink(text) {
const reBracketSpace = /\[\[\s*([^\]\[]+?)\s*\]\]/g;
const rePipeSpace = /\[\[\s*([^\[\]\|]+?)\s*\|\s*([^\[\]\|]+?)\s*\]\]/g;
const result = text.replace(reBracketSpace, "[[$1]]").replace(rePipeSpace, "[[$1|$2]]");
return result;
}
function wikiLinkFix() {
var focus = $(document.activeElement);
if (focus) {
if (focus.hasClass('CodeMirror-code')) {
focus = $('#wpTextbox1');
}
if (focus.is('textarea, input')) {
var oldText = focus.textSelection('getSelection');
if (oldText) {
// insert your code here
const newText = getFixedWikiLink(oldText);
// replace text
focus.textSelection('encapsulateSelection', {
replace: true,
peri: newText
});
}
}
}
}
function dewikify() {
var focus = $(document.activeElement);
if (focus) {
if (focus.hasClass('CodeMirror-code')) {
focus = $('#wpTextbox1');
}
if (focus.is('textarea, input')) {
var oldText = focus.textSelection('getSelection');
if (oldText) {
// insert your code here
const reLinkText = /\[\[[^\[\]\|]+\|([^\[\]\|]+)\]\]/g;
const reLink = /\[\[([^\[\]\|]+)\]\]/g;
oldText = getFixedWikiLink(oldText);
const newText = oldText.replace(reLinkText, "$1").replace(reLink, "$1");
// replace text
focus.textSelection('encapsulateSelection', {
replace: true,
peri: newText
});
}
}
}
}
var customizeToolbarWikiLinks = function() {
$('#wpTextbox1').wikiEditor('addToToolbar', {
'section': 'main',
'group': 'gadgets', // 'group': 'gadgets', 'format', 'insert', 'codemirror'
'tools': {
'wikilinkfix': {
label: 'Исправление викиссылок', // or use labelMsg for a localized label
type: 'button',
icon: '/upwiki/wikipedia/commons/8/8f/OOjs_UI_icon_wikiText-progressive.svg',
action: {
'type': 'callback',
'execute': wikiLinkFix
}
},
'dewikify': {
label: 'Дефикифицировать выделенное', // or use labelMsg for a localized label
type: 'button',
icon: '/upwiki/wikipedia/commons/e/eb/OOjs_UI_icon_noWikiText-rtl-progressive.svg',
action: {
'type': 'callback',
'execute': dewikify
}
}
}
});
};
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
mw.loader.using(['user.options', 'jquery.textSelection'], function() {
if (mw.user.options.get('usebetatoolbar') === 1) {
$.when(
mw.loader.using('ext.wikiEditor'),
$.ready
).then(customizeToolbarWikiLinks);
}
});
}