Участник:Radmir Far/dewikify.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
/* Скрипт для девикификации выделенного текста (убирает внутренние ссылки в выделенном тексте).
Добавляет в панель редактирования кнопку, при нажатии на которую в выделенном тексте все внутренние ссылки заменяются на текст.
Вот так: [[abc|def]] -> def, [[abc]] -> abc.
Частично основано на скрипте уч. DonRumata [[Участник:DonRumata/lowercase.js]] */
( function () {
function dewikify(){
	var focus = $( document.activeElement );
	if (focus) {
		var oldText = focus.textSelection('getSelection');
		if (oldText) {
			newText = "";
			/* REGEXP /\[\[([^\]\[]*)\|([^\]\[]*)\]\]/g */
			regexp_links_text = /\[\[([^\]\[]*)\|([^\]\[]*)\]\]/g; //ссылки с текстом [[aa|bb]]
			/* REGEXP /\[\[([^\]\[\|]*)\]\]/g */
			regexp_links = /\[\[([^\]\[\|]*)\]\]/g; //ссылки без текста [[aa]]
			// здесь происходят замены
			newText = oldText.replace(regexp_links_text, '$2').replace(regexp_links, '$1'); // [[aa|bb]] -> bb; [[aa]] -> aa
			// заменяем старый текст новым
			focus.textSelection( 'encapsulateSelection', {
				replace: true,
				peri: newText
			} );
		}
	}
}

var customizeToolbar = function () {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
	'section': 'main',
    'group': 'insert',
	'tools': {
		'dewikify': {
			label: 'Дефикифицировать выделенное', // or use labelMsg for a localized label, see above
			type: 'button',
			icon: '//upload.wikimedia.org/wikipedia/commons/9/9d/OOjs_UI_icon_noWikiText-ltr-progressive.svg',
			action: {
				type: 'callback',
				execute: function(context){
					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( customizeToolbar );
		}
    } );
}
}() );