MediaWiki:Gadget-EditingAliases.js

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск
/* Приспособление, заменяющее на время редактирования неудобные для восприятия символы
 * или их группы на другие.
 * По умолчанию, неразрывный пробел заменяется на маленькую точку в середине строки.
 * Личные настройки замены можно сделать на странице Участник:<Участник>/EditingAliases.js.
 * В двумерном массиве edit_aliases лежат строки (регулярные выражения) для подстановки псевдонимов.
 * Если используется сложная подстановка (с необычными символами или метасимволами),
 * то обратную подстановку следует задать явно в edit_aliases_back.
 * Каждый элемент массивов должен иметь вид:
 * ['<заменяемые символы>', '<заменяющие символы>', '<опции регулярного выражения (не обязательно)>'].
 *
 * В гаджете не выполняется обратная замена, когда включено оглавление с возможностью навигации (Usability Initiative). Поэтому при таких настойках,
 * он автоматически отключается. Не используется и в CodeEditor.
 *
 * Автор: Александр Машин, 10 декабря 2008 — 1 марта 2014.
*/

function runReplacements (text_box, replacements) {

    // Подставить псевдонимы один за другим:
    var txt = text_box.value;    
    for (var i = 0; i < replacements.length; i++) {
        var reg_exp = new RegExp (replacements[i][0], 'g' + (replacements[i][2] || ''));
        txt = txt.replace (reg_exp, replacements[i][1]);
    }
    text_box.value = txt;    
}

function useAliases(){
    // Построение списка обратной автозамены:
    for (var i = 0; i < edit_aliases.length; i++) {
        if (!edit_aliases_back[i]) {
            edit_aliases_back[i] = {
                0: edit_aliases[i][1]
              , 1: edit_aliases[i][0]
              , 2: edit_aliases[i][2]
            };
        }
    }    
    // Применение заменяющих символов:
    $('textarea').each(function(){
        var areaScrollPosition = $(this).scrollTop();
        runReplacements(this, edit_aliases);
        $(this).scrollTop (areaScrollPosition);
    });
    // Подготовка обратной замены при отправке форм:
    $('form:not(#searchform)').submit (function () {
        $('textarea', this).each (function () {
            var areaScrollPosition = $(this).scrollTop ();
            runReplacements(this, edit_aliases_back);
            $(this).scrollTop (areaScrollPosition);
            return true;
        });
    });
    return true;
}

$(function () {
	if (!(mw.config.get('wgPageContentModel') === 'javascript'
	   || mw.config.get ('wgPageContentModel') === 'Scribunto'
	   || mw.config.get ('wgWikiEditorEnabledModules')
	   && mw.config.get ('wgWikiEditorEnabledModules')['toc']
	)) {
		
		// Замены по умолчанию:
		edit_aliases = [['\u00A0', '\u00B7']];
		edit_aliases_back = [['\u00B7(?!\\}\\})', '\u00A0']];
	
		// Личные настройки:
		mw.loader.load ('/w/index.php?title=Участник:' + mw.config.get ('wgUserName') + '/' + 'EditingAliases.js&action=raw&ctype=text/javascript');

		// Подготовка замены при загрузке и обратной замены при сохранении:
		useAliases ();
	}
});