Обсуждение MediaWiki:Gadget-EditingAliases.js
Перейти к навигации
Перейти к поиску
Проверка поддержки регулярных выражений[править код]
// Проверить, поддерживаются ли регулярные выражения:
var test_regexp = 'код';
test_regexp = test_regexp.replace(/д/g, 'т');
if (test_regexp != 'кот') return false;
А точно ли есть такие браузеры, в которых регулярные выражения не поддерживаются, но код «/д/g
» не вызывает немедленный syntax error?
Может быть, эта проверка и не нужна вовсе? —Mithgol the Webmaster 11:53, 3 февраля 2010 (UTC)
- Я скопировал этот код из викификатора. Да, думаю, это бессмысленная паранойя. Удалю, спасибо.
Александр Машин 13:08, 3 февраля 2010 (UTC)
useAliases()[править код]
Если функция useAliases
вызывается только один раз, внутри $(...);
, тогда её, пожалуй, можно было бы туда и поместить:
if (!wgPageName.match(/\.js$/i)) {
var edit_aliases = [['\\u00A0', '\u00B7']];
var edit_aliases_back = [['\\u00B7', '\u00A0']];
// Личные настройки:
importScript ('Участник:' + wgUserName + '/' + 'EditingAliases.js');
// Замена при загрузке, замена обратно при сохранении:
$(function(){
// Построение списка обратной автозамены:
for (var i = 0; i < edit_aliases.length; i++) {
if (!edit_aliases_back[i]) {
edit_aliases_back[i] = new Array (3);
edit_aliases_back[i][0] = edit_aliases[i][1];
edit_aliases_back[i][1] = edit_aliases[i][0];
edit_aliases_back[i][2] = edit_aliases[i][2];
}
}
$("textarea").each(function(){
runReplacements(this, edit_aliases);
});
$("form").submit(function(){
$("textarea", this).each(function(){
runReplacements(this, edit_aliases_back);
});
});
return true;
});
}
—Mithgol the Webmaster 11:53, 3 февраля 2010 (UTC)
- Боюсь, что такой лаконизм снизит читаемость кода.
Александр Машин 13:08, 3 февраля 2010 (UTC)
Массивы замен[править код]
// Замены по умолчанию:
var edit_aliases = [['\\u00A0', '\u00B7']];
var edit_aliases_back = [['\\u00B7', '\u00A0']];
У меня по этому поводу два вопроса:
- Для какой цели в нулевом элементе массива стоит двойная обратная косая черта, а в следующем элементе — однократная?
- Если у этой разницы действительно есть некоторая цель, то не получится ли так, что код
edit_aliases_back[i] = new Array (3);
edit_aliases_back[i][0] = edit_aliases[i][1];
edit_aliases_back[i][1] = edit_aliases[i][0];
edit_aliases_back[i][2] = edit_aliases[i][2];
не достигнет желаемой цели именно потому, что порядок однократной и двойной черты в edit_aliases_back[i]
переменится на противоположный сравнительно с edit_aliases[i]
?.. —Mithgol the Webmaster 12:18, 5 февраля 2010 (UTC)
- Двукратная косая черта превращается в однократную, интерпретируемую уже парсером регулярных выражений, а весь нулевой элемент массива — в регулярное выражение /\u00A0/. Однократная черта даёт просто символ для замены. Резервный алгоритм автоматического формирования edit_aliases_back вызывается только тогда, когда edit_aliases_back не задан явно, зато в личных настройках задан свой edit_aliases. Он даст неверные результаты только тогда, когда заменяется регулярное выражение (хотя бы /\u00A0/), а не просто строка, о чём и написано в документации; но если человек задал в личных настройках приспособления регулярное выражение, он сможет и явно прописать обратную замену.
Александр Машин 13:08, 5 февраля 2010 (UTC)
- Ага, понятно. Но тогда, быть может, уместно сразу и заменить в коде двукратную черту именно на однократную, чтобы получался как раз сам символ, и оттого чтобы и для замены, и для регэкспа он выходил одинаков? И тем избавиться от надобности вручную записывать обратную замену. Экономия усилий. —Mithgol the Webmaster 15:41, 5 февраля 2010 (UTC)
- Не уверен, что парсер регулярных выражений JavaScript правильно поймёт символ неразрывного пробела. Безопаснее его обозначать escape-последовательностью.
Александр Машин 15:50, 5 февраля 2010 (UTC)
- Не уверен, что парсер регулярных выражений JavaScript правильно поймёт символ неразрывного пробела. Безопаснее его обозначать escape-последовательностью.
- Парсер обязан понимать этот символ буквально (к такому поведению его обязывает раздел 15.10 стандарта ECMA-262, определяющего ECMAScript). И так как у нас нет данных о парсерах, пренебрегающих именно этим обязательством, то считаю нужным двойную косую черту переменить тут на одинарную. И переменю. Однако не удастся избавиться от надобности вручную записывать обратную замену. Обратная замена должна превосходить только тогда, когда символ средней точки не предшествует двойной закрывающей фигурной скобке, а не то страдает тот шаблон наш, имя которого состоит из средней точки. —Mithgol the Webmaster 10:41, 19 марта 2010 (UTC)