MediaWiki:Gadget-convenientDiscussions.js: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Нет описания правки
Automatically update
(не показано 48 промежуточных версий 2 участников)
Строка 1: Строка 1:
/**
/**
* This file was assembled automatically from the configuration at
* This file was assembled automatically from the configuration at
* https://github.com/jwbth/convenient-discussions/tree/master/config/w-ru.js by running
* https://github.com/jwbth/convenient-discussions/tree/main/config/w-ru.js by running
* "node buildConfigs". The configuration might get outdated as the script evolves, so it's best
* "node buildConfigs". The configuration might get outdated as the script evolves, so it's best
* to keep it up to date by checking for the documentation updates from time to time. See the
* to keep it up to date by checking for the documentation updates from time to time. See the
Строка 7: Строка 7:
* https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions#Configuring_for_a_wiki.
* https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions#Configuring_for_a_wiki.
*/
*/

// <nowiki>


(function () {
(function () {


function unique(item, pos, arr) {
function unique(item, i, arr) {
return arr.indexOf(item) === pos;
return arr.indexOf(item) === i;
}
}


Строка 20: Строка 22:
return lang !== 'en';
return lang !== 'en';
})
})
.map(function (lang) {
.map((lang) => mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions-i18n/' + lang + '.js&action=raw&ctype=text/javascript'));
return mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions-i18n/' + lang + '.js&action=raw&ctype=text/javascript');
});

// We assume it's OK to fall back to English if the translation is unavailable for any reason.
// We assume it's OK to fall back to English if the translation is unavailable for any reason.
return Promise.all(requests).catch(function () {});
return Promise.all(requests).catch(function () {});
Строка 29: Строка 34:




/* BEGINNING OF THE CONFIGURATION */
/* BEGINNING OF CONFIGURATION */


convenientDiscussions.config = {
convenientDiscussions.config = {
Строка 90: Строка 95:
'comma-separator': ', ',
'comma-separator': ', ',
'colon-separator': ': ',
'colon-separator': ': ',
'nextdiff': 'Следующая правка →',
'pagetitle': '$1 — Википедия',
'discussiontools-topicsubscription-button-subscribe': 'подписаться',
'discussiontools-topicsubscription-button-subscribe-tooltip': '{{GENDER:|Подпишитесь}}, чтобы получать уведомления о новых сообщениях.',
'discussiontools-topicsubscription-button-unsubscribe': 'отписаться',
'discussiontools-topicsubscription-button-unsubscribe-tooltip': '{{GENDER:|Отпишитесь}}, чтобы перестать получать уведомления.',
'discussiontools-topicsubscription-notify-subscribed-title': '{{GENDER:|Вы}} подписались!',
'discussiontools-topicsubscription-notify-subscribed-body': '{{GENDER:|Вы}} будете получать уведомления о новых сообщениях в этой теме.',
'discussiontools-topicsubscription-notify-unsubscribed-title': '{{GENDER:|Вы}} отписались.',
'discussiontools-topicsubscription-notify-unsubscribed-body': '{{GENDER:|Вы}} больше не будете получать уведомления о новых сообщениях в этой теме.',
'discussiontools-newtopicssubscription-button-subscribe-label': 'Подписаться',
'discussiontools-newtopicssubscription-button-subscribe-tooltip': 'Подпишитесь, чтобы получать уведомления о появлении новых тем на этой странице.',
'discussiontools-newtopicssubscription-button-unsubscribe-label': 'Отписаться',
'discussiontools-newtopicssubscription-button-unsubscribe-tooltip': 'Отмените подписку, чтобы больше не получать уведомления о создании новых тем на этой странице.',
'discussiontools-newtopicssubscription-notify-subscribed-title': '{{GENDER:|Вы}} подписались!',
'discussiontools-newtopicssubscription-notify-subscribed-body': '{{GENDER:|Вы}} будете получать уведомления о создании новых тем на этой странице.',
'discussiontools-newtopicssubscription-notify-unsubscribed-title': '{{GENDER:|Вы}} отписались.',
'discussiontools-newtopicssubscription-notify-unsubscribed-body': '{{GENDER:|Вы}} больше не будете получать уведомления о создании новых тем на этой странице.',
'visualeditor-educationpopup-dismiss': 'Окей, понятно',
},
},


specialPageAliases: {
contribsPage: 'Служебная:Вклад',
'Contributions': 'Вклад',
'Diff': 'Изменения',
'PermanentLink': 'Постоянная ссылка',
},

substAliases: [
'подстановка:',
'подст:',
],

thumbAliases: [
'мини',
'миниатюра',
],


timezone: 'UTC',
localTimezoneOffset: 0,


pageWhitelist: [
pageWhitelist: [
/^Википедия:.* запросы/,
/^Арбитраж:.+\//,
/^Википедия:.+ запросы/,
/^Википедия:Вики-встречи$/,
/^Википедия:Выборы арбитров\//,
/^Википедия:Выборы арбитров\//,
/^Википедия:Голосования\//,
/^Википедия:Голосования\//,
Строка 107: Строка 147:
/^Википедия:К оценке источников/,
/^Википедия:К оценке источников/,
/^Википедия:К переименованию\//,
/^Википедия:К переименованию\//,
/^Википедия:К посредничеству\//,
/^Википедия:К посредничеству/,
/^Википедия:К разделению\//,
/^Википедия:К разделению\//,
/^Википедия:К удалению\//,
/^Википедия:К удалению\//,
/^Википедия:К улучшению\//,
/^Википедия:К улучшению\//,
/^Википедия:Кандидаты в .*\//,
/^Википедия:Кандидаты в .+\//,
/^Википедия:Кандидаты в кандидаты в администраторы/,
/^Википедия:Кандидаты в устаревшие избранные статьи/,
/^Википедия:Конфирмации\//,
/^Википедия:Конфирмации\//,
/^Википедия:Обсуждение категорий\//,
/^Википедия:Обсуждение категорий\//,
Строка 121: Строка 163:
/^Википедия:Рецензирование\//,
/^Википедия:Рецензирование\//,
/^Википедия:Снятие защиты/,
/^Википедия:Снятие защиты/,
/^Википедия:Совет вики-проектов\/Обсуждение проектов/,
/^Википедия:Сообщения об ошибках/,
/^Википедия:Сообщения об ошибках/,
/^Википедия:Статьи года\/.+\/Обсуждение/,
/^Википедия:Текущие события на заглавной странице\/Кандидаты/,
/^Википедия:Текущие события на заглавной странице\/Кандидаты/,
/^Википедия:Установка защиты/,
/^Википедия:Установка защиты/,
Строка 130: Строка 174:
/^Проект:Грамотность\/Запросы/,
/^Проект:Грамотность\/Запросы/,
/^Проект:Графическая мастерская\/Заявки/,
/^Проект:Графическая мастерская\/Заявки/,
/^Проект:Гражданская война в России\/К посредничеству\/Посредничество по содержанию статей/,
/^Проект:Добротные статьи\/К лишению статуса/,
/^Проект:Добротные статьи\/К лишению статуса/,
/^Проект:Знаете ли вы\/Подготовка следующего выпуска/,
/^Проект:Инкубатор\/(Мини-рецензирование|Форум)/,
/^Проект:Инкубатор\/(Мини-рецензирование|Форум)/,
/^Проект:Социальная ответственность\/Форум/,
/^Проект:Социальная ответственность\/Форум/,
Строка 136: Строка 182:


pageBlacklist: [
pageBlacklist: [
/^Википедия:Выборы арбитров\/.+\/Выдвижение\//,
/^Википедия:Выборы арбитров\/.+\/Выдвижение/,
/^Википедия:Выборы арбитров\/.+\/Голосование\//,
/^Википедия:Выборы арбитров\/.+\/Голосование/,
/^Википедия:Заявки на статус (администратора|бюрократа)$/,
/^Википедия:Заявки на статусы$/,
],
],


Строка 143: Строка 191:
female: 'Участница',
female: 'Участница',
},
},

genderNeutralUserNamespaceAlias: 'У',


archivePaths: [
archivePaths: [
Строка 148: Строка 198:
source: 'Википедия:Форум/Географический',
source: 'Википедия:Форум/Географический',
archive: 'Википедия:Форум/Географический/Архивы/',
archive: 'Википедия:Форум/Географический/Архивы/',
},
{
source: 'Википедия:Форум арбитров',
archive: 'Википедия:Форум/Архив/Форум арбитров',
},
},
{
{
Строка 168: Строка 222:
],
],


idleFragments: ['Преамбула'],
idleFragments: [/^Преамбула$/],


defaultIndentationChar: '*',
defaultIndentationChar: '*',
Строка 174: Строка 228:
indentationCharMode: 'unify',
indentationCharMode: 'unify',


signaturePrefixRegexp: /(?:\s*С уважением,)?(?:\s+>+)?(?:[·•\-–—―~/→⇒\s]|&mdash;|&ndash;|&rarr;|&middot;|&nbsp;|&#32;)*\(?'*$/,
signaturePrefixRegexp: /(?:\s*С уважением,?)?(?:\s[-–−—―]+\xa0?[A-Z][A-Za-z-_]*)?(?:\s+>+)?(?:[·•\-‑–−—―─~/→⇒\s\u200d\u200e\u200f\u2060]|&\w+;|&#\d+;)*(?:\s+\()?$/,


signatureEndingRegexp: / \(обс\.\)$/,
signatureEndingRegexp: / \(обс\.\)$/,
Строка 180: Строка 234:
tagName: 'convenient-discussions',
tagName: 'convenient-discussions',


hookToFireWithAuthorWrappers: 'global.userlinks',
optionsPrefix: 'cd',

scriptPageWikilink: 'U:JWBTH/CD',


unsignedTemplates: [
unsignedTemplates: [
'unsigned',
'Без подписи',
'unsignedIP',
'Не подписался',
'unsigned-IP',
'Unsigned2',
'unsigned2',
'UnsignedIP2',
'unsignedIP2',
'Нет подписи',
'не подписано',
'UnsignedIP',
'нпп',
'Не подписано',
'Неподписано',
'Написано',
'Unsigned IP',
'Unsignedip',
'Unsigned-ip',
'НеподписаноIP',
'Реплика',
'Не подписаноIP',
'Неподписано IP',
'Неподписано-IP',
'Неподписано-ip',
'Неподписано ip',
'Не подписано ip',
'Не подписано-ip',
'Unsigned-IP',
'Unsigned ip',
'Неподписаноip',
'Не подписаноip',
'Не подписано IP',
'Не подписано-IP',
'Написано-ip',
'Написано-IP',
'Написано ip',
'Написано IP',
'НаписаноIP',
'Написаноip',
'Нпп',
'НеподписаноIP2',
'Unsigned',
'UnsignedIP',
],
],


pairQuoteTemplates: [
pairQuoteTemplates: [
[
['начало цитаты'],
['конец цитаты'],
'Начало цитаты',
'НачалоЦитаты',
'Нц'
],
[
'Конец цитаты',
'КонецЦитаты',
'Кц'
]
],
],


smallDivTemplates: [
smallDivTemplate: 'block-small',
'block-small',
'Smalldiv',
'Div-small',
],


paragraphTemplates: [
paragraphTemplates: [
'pb',
'pb',
'абзац',
'Абзац',
],
],


outdentTemplates: [
elementsToExcludeClasses: [
'botMessage',
'outdent',
'ruwiki-movedTemplate',
'Od',
'Обратный отступ',
'ambox',
'NavFrame',
],
],


templatesToExclude: [
clearTemplates: [
'Clear',
'перенесено с', 'moved from',
'Clr',
'перенесено на', 'moved to',
'-',
'перенесено из раздела',
'перенесено в раздел',
'копия с',
'скопировано на',
],
],


quoteFormatting: function (mentionSource, author, timestamp, dtId) {
commentAntipatterns: [
var pre = '{{цс|1=';
/--\u00A0?\[\[Участник:DimaBot\|DimaBot\]\]/,
var post = '';
if (mentionSource) {
if (author) {
post += '|2=' + author;
}
if (timestamp) {
post += '|3=' + timestamp;
}
if (dtId) {
post += '|4=' + dtId;
}
post += '}}';
} else {
post = '|inline=1}}<br>';
}
return [pre, post];
},

noSignatureClasses: [
'ambox',
'NavHead',
'raaf', // [[Википедия:Запросы к администраторам/Быстрые]]
],
],


noSignatureTemplates: [
customBadCommentBeginnings: [
'Перенесено с',
/^\{\{(?:-|clear)\}\} *\n*/,
'Moved from',
'Перенесено из',
'Moved discussion from',
'Перенесено на',
'Обсуждение перенесено',
'Moved to',
'Перенесено в',
'Перенесено из раздела',
'Перенесено в раздел',
'Копия с',
'Скопировано на',
],
],


reflistTalkTemplates: [
keepInSectionEnding: [
'Reflist-talk',
/\n{2,}(?:<!--[^]*?-->\s*)+$/,
/\n+\{\{(?:-|clear)\}\}\s*$/,
],
],


reflistTalkClasses: ['reflist-talk'],
foreignElementsInHeadlinesClasses: [

'ch-helperText',
commentAntipatterns: [
'userflags-wrapper',
/--\xa0?\[\[Участник:DimaBot\|DimaBot\]\]/,
],
],


excludeFromHeadlineClasses: [
customFloatingElementsSelectors: [
'.infobox',
'ch-helperText',
'.vertical-navbox',
'userflags-wrapper',
'dclink-wrapper',
],
],


Строка 251: Строка 375:
'Начало закрытой секции',
'Начало закрытой секции',
'Close',
'Close',
'Закрыто/сворачивать',
'Closed/c',
'Начало скрытого блока',
'Hidden begin',
'Hidden block start',
],
],
[
[
Строка 261: Строка 390:
'Закрыто конец',
'Закрыто конец',
'ECS',
'ECS',
'Конец закрытой секции/сворачивать',
'Ecs/c',
'Рано',
'Рано',
'Конец скрытого блока',
'Hidden end',
'Oq-',
'Сворачиваемый блок-конец',
'Hidden block end',
],
],
],
],


closedDiscussionClasses: [
closedDiscussionClasses: [
'ruwiki-closedDiscussion',
'NavContent',
],
],


noHighlightClasses: [
customUnhighlightableElementsClasses: [
'infobox',
'infobox',
'ruwiki-movedTemplate',
],
],


dontConfirmEmptyCommentPages: [
customAddTopicLinkSelectors: [
/^Википедия:Заявки на статус /,
'.ruwiki-addTopicLink a',
/^Википедия:Голосования\//,
'.ruwiki-addSectionBottom',
],
],


indentationCharsPattern: '(?:\\{\\{(?:-vote|[зЗ]ачёркнутый голос|-голос)\\|)?([:*#]+)( *)',
logoDataUrl: 'data:image/png;base64,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',

logoWidth: '282px',

logoHeight: '40px',

noConfirmPostEmptyCommentPageRegexp: /^(?:Википедия:Заявки на статус |Википедия:Голосования\/)/,

indentationCharsPattern: '\\n*(?:\\{\\{(?:-vote|[зЗ]ачёркнутый голос|-голос)\\|)?([:*#]+) *',


undoTexts: [
undoTexts: [
Строка 294: Строка 421:
],
],


customTextReactions: [
textReactions: [
{
{
pattern: /\{\{(?:(?:subst|подст):)?ПИ2?\}\}/,
regexp: /\{\{(?:(?:subst|подст):)?ПИ2?\}\}/,
message: 'Шаблон указания на статус подводящего итоги добавлять не нужно — он будет добавлен автоматически.',
message: 'Шаблон указания на статус подводящего итоги добавлять не нужно — он будет добавлен автоматически.',
name: 'closerTemplateNotNeeded',
name: 'closerTemplateNotNeeded',
Строка 335: Строка 462:
/(\n?\n)$/,
/(\n?\n)$/,
function (newlines) {
function (newlines) {
return '\n' + (cd.settings.closerTemplate || '{{'.concat('subst:ПИ}}')) + newlines;
return '\n' + (cd.settings.get('closerTemplate') || '{{'.concat('subst:ПИ}}')) + newlines;
}
}
);
);
Строка 343: Строка 470:
},
},


checkForCustomForeignComponents: function (node) {
rejectNode: function (node) {
return (
return (
node.classList.contains('ts-Закрыто-header') ||
node.classList.contains('ts-Закрыто-header') ||

// Talk page template
(cd.g.CURRENT_NAMESPACE_NUMBER % 2 === 1 && node.classList.contains('tmbox')) ||
// {{clear}}
// {{clear}}
(
(
Строка 355: Строка 481:
)
)
);
);
},

beforeAuthorLinkParse: function (authorLink, authorLinkPrototype) {
// https://ru.wikipedia.org/wiki/MediaWiki:Gadget-markadmins.js
const nextElement = authorLink.nextElementSibling;
if (nextElement && nextElement.classList.contains('userflags-wrapper')) {
authorLinkPrototype.parentNode.insertBefore(nextElement, authorLinkPrototype.nextSibling);
}
},
},


Строка 360: Строка 494:
if (/\{\{[нН]овые сверху/.test(code)) {
if (/\{\{[нН]овые сверху/.test(code)) {
return true;
return true;
} else if (/^Википедия:(?:.* запросы|Запросы|Оспаривание |Форум[/ ])/.test(title)) {
} else if (/^Википедия:(?:.+ запросы|Запросы|Оспаривание |Форум[/ ])/.test(title)) {
return true;
return true;
} else if (/^Википедия:(?:К восстановлению|К объединению|К переименованию|К разделению|К удалению|К улучшению)/.test(title)) {
} else if (/^Википедия:(?:К восстановлению|К объединению|К переименованию|К разделению|К удалению|К улучшению)/.test(title)) {
return false;
return false;
}
}
return null;
},
},


getMoveSourcePageCode: function (targetPageWikilink, signature, timestamp) {
getMoveSourcePageCode: function (targetPageWikilink, signature, timestamp) {
return '{{перенесено на|' + targetPageWikilink + '|' + signature + '}}\n<small>Для бота: ' + timestamp + '</small>';
return '{{перенесено на|' + targetPageWikilink + '|' + signature + '}}\n<small>Для бота: ' + timestamp + '</small>\n';
},
},


getMoveTargetPageCode: function (targetPageWikilink, signature) {
getMoveTargetPageCode: function (targetPageWikilink, signature) {
return '{{перенесено с|' + targetPageWikilink + '|' + signature + '}}';
return '{{перенесено с|' + targetPageWikilink + '|' + signature + '}}\n';
},
},
};
};
Строка 381: Строка 516:
// Handle {{-vote}} by actually putting pseudo-minus-1-level comments on the upper level. We split
// Handle {{-vote}} by actually putting pseudo-minus-1-level comments on the upper level. We split
// the parent list tag into two parts putting the comment in between.
// the parent list tag into two parts putting the comment in between.

$('.ruwiki-commentIndentation-minus1level').each(function (i, el) {
// Commented for now, as it can confuse votes for the criteria check script on voting pages.
/*$('.ruwiki-commentIndentation-minus1level').each(function (i, el) {
const $current = $(el).css('margin', 0);
const $current = $(el).css('margin', 0);
const $list = $current.parent('dd, li').parent('dl, ol, ul');
const $list = $current.parent('dd, li').parent('dl, ul, ol');
while ($list.get(0).contains($current.get(0))) {
while ($list[0].contains($current[0])) {
const $parent = $current.parent();
const $parent = $current.parent();
const $elementsAfter = $current.nextAll();
const $elementsAfter = $current.nextAll();
Строка 398: Строка 535:
}
}
}
}
});*/

mw.loader.using('mediawiki.util').then(function () {
mw.util.addCSS('.ruwiki-msgIndentation-minus1level { margin-left: 0 !important; }');
});
});
});
});


mw.hook('convenientDiscussions.pageReady').add(function () {
mw.hook('convenientDiscussions.pageReadyFirstTime').add(function () {
const generateEditCommonJsLink = function () {
if (cd.g.firstRun) {
return mw.util.getUrl('User:' + cd.user.getName() + '/common.js', { action: 'edit' });
const generateEditCommonJsLink = function () {
};
return mw.util.getUrl('User:' + cd.g.CURRENT_USER_NAME + '/common.js', { action: 'edit' });
};


const isHlmEnabled = window.highlightMessagesAfterLastVisit !== undefined;
const isHlmEnabled = window.highlightMessagesAfterLastVisit !== undefined;
if (cd.settings.highlightNew && isHlmEnabled) {
if (isHlmEnabled) {
// Suppress the work of [[Участник:Кикан/highlightLastMessages.js]] in possible ways.
// Suppress the work of [[Участник:Кикан/highlightLastMessages.js]] in possible ways.
window.highlightMessagesAfterLastVisit = false;
window.highlightMessagesAfterLastVisit = false;
window.highlightMessages = 0;
window.highlightMessages = 0;

}
if (isHlmEnabled && !mw.cookie.get('cd-hlmConflict')) {
if (!mw.cookie.get('cd-hlmConflict')) {
// Remove the results of work of [[Участник:Кикан/highlightLastMessages.js]]
// Remove the results of work of [[Участник:Кикан/highlightLastMessages.js]]
if (window.messagesHighlightColor !== undefined) {
if (window.messagesHighlightColor !== undefined) {
const dummyElement = document.createElement('span');
const dummyElement = document.createElement('span');
dummyElement.style.color = window.messagesHighlightColor;
dummyElement.style.color = window.messagesHighlightColor;
const hlmStyledElements = cd.g.rootElement.querySelectorAll(
const hlmStyledElements = cd.api.getRootElement().querySelectorAll(
'.cd-commentPart[style="background-color: ' + dummyElement.style.color + ';"],' +
'.cd-comment-part[style="background-color: ' + dummyElement.style.color + ';"],' +
'.cd-commentPart[style="background-color: ' + window.messagesHighlightColor + '"]'
'.cd-comment-part[style="background-color: ' + window.messagesHighlightColor + '"]'
);
);
hlmStyledElements.forEach(function (el) {
hlmStyledElements.forEach(function (el) {
Строка 427: Строка 567:
}
}


const $text = cd.util.wrapInElement('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Кикан/highlightLastMessages.js">highlightLastMessages.js</a>, конфликтующий с функциональностью подсветки скрипта «Удобные дискуссии». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
const $text = cd.api.wrapHtml('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Кикан/highlightLastMessages.js">highlightLastMessages.js</a>, конфликтующий с функциональностью подсветки скрипта «Удобные обсуждения». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
mw.notify($text, { autoHide: false } );
mw.notify($text, {
type: 'warn',
autoHide: false,
});
mw.cookie.set('cd-hlmConflict', '1', {
mw.cookie.set('cd-hlmConflict', '1', {
path: '/',
path: '/',
expires: cd.g.SECONDS_IN_A_DAY * 30,
expires: 60 * 60 * 24 * 30,
});
});
}
}
}


if (typeof proceedToArchiveRunned !== 'undefined' && !mw.cookie.get('cd-ptaConflict')) {
if (typeof proceedToArchiveRunned !== 'undefined' && !mw.cookie.get('cd-ptaConflict')) {
const $text = cd.util.wrapInElement('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Jack_who_built_the_house/proceedToArchive.js">proceedToArchive.js</a>, функциональность которого включена в скрипт «Удобные дискуссии». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
const $text = cd.api.wrapHtml('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Jack_who_built_the_house/proceedToArchive.js">proceedToArchive.js</a>, функциональность которого включена в скрипт «Удобные обсуждения». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
mw.notify($text, { autoHide: false });
mw.notify($text, {
mw.cookie.set('cd-ptaConflict', '1', {
type: 'warn',
path: '/',
autoHide: false,
});
expires: cd.g.SECONDS_IN_A_DAY * 30,
mw.cookie.set('cd-ptaConflict', '1', {
});
}
path: '/',
expires: 60 * 60 * 24 * 30,
});
}


if ($('.localcomments[style="font-size: 95%; white-space: nowrap;"]').length) {
if ($('.localcomments[style="font-size: 95%; white-space: nowrap;"]').length) {
const $text = cd.util.wrapInElement('Скрипт <a href="//ru.wikipedia.org/wiki/Участник:Александр_Дмитриев/comments_in_local_time_ru.js">comments in local time ru.js</a> выполняется раньше скрипта «Удобные дискуссии», что мешает работе последнего. Проследуйте инструкциям <a href="' + mw.util.getUrl(cd.config.scriptPageWikilink) + '#Совместимость">здесь</a>, чтобы обеспечить их совместимость.');
const $text = cd.api.wrapHtml('Скрипт <a href="//ru.wikipedia.org/wiki/Участник:Александр_Дмитриев/comments_in_local_time_ru.js">comments in local time ru.js</a> выполняется раньше скрипта «Удобные обсуждения», что мешает работе последнего. Проследуйте инструкциям <a href="' + mw.util.getUrl(cd.config.scriptPageWikilink) + '#Совместимость">здесь</a>, чтобы обеспечить их совместимость.');
mw.notify($text, { autoHide: false });
mw.notify($text, {
}
type: 'warn',
autoHide: false,
});
}
}
});
});
Строка 453: Строка 602:
mw.hook('convenientDiscussions.commentFormCreated').add(function (commentForm) {
mw.hook('convenientDiscussions.commentFormCreated').add(function (commentForm) {
commentForm.couldBeCloserClosing = (
commentForm.couldBeCloserClosing = (
/^Википедия:К удалению/.test(cd.g.CURRENT_PAGE.name) &&
/^Википедия:К удалению/.test(cd.page.name) &&
commentForm.mode === 'addSubsection' &&
commentForm.getMode() === 'addSubsection' &&
mw.config.get('wgUserGroups').includes('closer')
mw.config.get('wgUserGroups').includes('closer')
);
);
});
});


mw.hook('convenientDiscussions.commentFormToolbarReady').add(function (commentForm) {
mw.hook('convenientDiscussions.commentFormCustomModulesReady').add(function (commentForm) {
const wikify = function () {
commentForm.$element.on('keydown', function (e) {
// Ctrl+Alt+W
window.Wikify(commentForm.commentInput.$input.get(0));
const isCmdModifierPressed = $.client.profile().platform === 'mac' ? e.metaKey : e.ctrlKey;
};
if (isCmdModifierPressed && !e.shiftKey && e.altKey && e.keyCode === 87) {
window.Wikify(commentForm.commentInput.$input[0]);
}
});
});


mw.hook('convenientDiscussions.commentFormToolbarReady').add(function (commentForm) {
commentForm.commentInput.$input.wikiEditor('addToToolbar', {
commentForm.commentInput.$input.wikiEditor('addToToolbar', {
section: 'main',
section: 'main',
Строка 475: Строка 630:
action: {
action: {
type: 'callback',
type: 'callback',
execute: wikify,
execute: function () {
window.Wikify(commentForm.commentInput.$input[0]);
},
},
},
},
},
Строка 485: Строка 642:
.find('.group-gadgets')
.find('.group-gadgets')
.insertBefore(commentForm.$element.find('.section-main .group-format'));
.insertBefore(commentForm.$element.find('.section-main .group-format'));
commentForm.$form.on('keydown', function (e) {
// Ctrl+Alt+W
if (e.ctrlKey && !e.shiftKey && e.altKey && e.keyCode === 87) {
wikify();
}
});


if (mw.user.options.get('gadget-urldecoder')) {
if (mw.user.options.get('gadget-urldecoder')) {
Строка 504: Строка 655:
type: 'callback',
type: 'callback',
execute: function () {
execute: function () {
window.urlDecoderRun(commentForm.commentInput.$input.get(0));
window.urlDecoderRun(commentForm.commentInput.$input[0]);
},
},
},
},
Строка 513: Строка 664:
});
});


/* END OF THE CONFIGURATION */
/* END OF CONFIGURATION */




if (!convenientDiscussions.running) {
if (!convenientDiscussions.isRunning) {
convenientDiscussions.getStringsPromise = getStrings();
convenientDiscussions.getStringsPromise = getStrings();
mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript')
mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript')
Строка 525: Строка 676:


}());
}());

// </nowiki>

Версия от 19:52, 21 июля 2024

/**
 * This file was assembled automatically from the configuration at
 * https://github.com/jwbth/convenient-discussions/tree/main/config/w-ru.js by running
 * "node buildConfigs". The configuration might get outdated as the script evolves, so it's best
 * to keep it up to date by checking for the documentation updates from time to time. See the
 * documentation at
 * https://commons.wikimedia.org/wiki/Special:MyLanguage/User:Jack_who_built_the_house/Convenient_Discussions#Configuring_for_a_wiki.
 */

// <nowiki>

(function () {

function unique(item, i, arr) {
  return arr.indexOf(item) === i;
}

function getStrings() {
  const requests = [mw.config.get('wgUserLanguage'), mw.config.get('wgContentLanguage')]
    .filter(unique)
    .filter(function (lang) {
      return lang !== 'en';
    })
    .map(function (lang) {
      return mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions-i18n/' + lang + '.js&action=raw&ctype=text/javascript');
    });

  // We assume it's OK to fall back to English if the translation is unavailable for any reason.
  return Promise.all(requests).catch(function () {});
}

window.convenientDiscussions = window.convenientDiscussions || {};
if (convenientDiscussions.config) return;


/* BEGINNING OF CONFIGURATION */

convenientDiscussions.config = {
  messages: {
    'sun': 'Вс',
    'mon': 'Пн',
    'tue': 'Вт',
    'wed': 'Ср',
    'thu': 'Чт',
    'fri': 'Пт',
    'sat': 'Сб',
    'sunday': 'воскресенье',
    'monday': 'понедельник',
    'tuesday': 'вторник',
    'wednesday': 'среда',
    'thursday': 'четверг',
    'friday': 'пятница',
    'saturday': 'суббота',
    'jan': 'янв',
    'feb': 'фев',
    'mar': 'мар',
    'apr': 'апр',
    'may': 'май',
    'jun': 'июн',
    'jul': 'июл',
    'aug': 'авг',
    'sep': 'сен',
    'oct': 'окт',
    'nov': 'ноя',
    'dec': 'дек',
    'january': 'январь',
    'february': 'февраль',
    'march': 'март',
    'april': 'апрель',
    'may_long': 'май',
    'june': 'июнь',
    'july': 'июль',
    'august': 'август',
    'september': 'сентябрь',
    'october': 'октябрь',
    'november': 'ноябрь',
    'december': 'декабрь',
    'january-gen': 'января',
    'february-gen': 'февраля',
    'march-gen': 'марта',
    'april-gen': 'апреля',
    'may-gen': 'мая',
    'june-gen': 'июня',
    'july-gen': 'июля',
    'august-gen': 'августа',
    'september-gen': 'сентября',
    'october-gen': 'октября',
    'november-gen': 'ноября',
    'december-gen': 'декабря',
    'timezone-utc': 'UTC',
    'parentheses': '($1)',
    'parentheses-start': '(',
    'parentheses-end': ')',
    'word-separator': ' ',
    'comma-separator': ', ',
    'colon-separator': ': ',
    'nextdiff': 'Следующая правка →',
    'pagetitle': '$1 — Википедия',
    'discussiontools-topicsubscription-button-subscribe': 'подписаться',
    'discussiontools-topicsubscription-button-subscribe-tooltip': '{{GENDER:|Подпишитесь}}, чтобы получать уведомления о новых сообщениях.',
    'discussiontools-topicsubscription-button-unsubscribe': 'отписаться',
    'discussiontools-topicsubscription-button-unsubscribe-tooltip': '{{GENDER:|Отпишитесь}}, чтобы перестать получать уведомления.',
    'discussiontools-topicsubscription-notify-subscribed-title': '{{GENDER:|Вы}} подписались!',
    'discussiontools-topicsubscription-notify-subscribed-body': '{{GENDER:|Вы}} будете получать уведомления о новых сообщениях в этой теме.',
    'discussiontools-topicsubscription-notify-unsubscribed-title': '{{GENDER:|Вы}} отписались.',
    'discussiontools-topicsubscription-notify-unsubscribed-body': '{{GENDER:|Вы}} больше не будете получать уведомления о новых сообщениях в этой теме.',
    'discussiontools-newtopicssubscription-button-subscribe-label': 'Подписаться',
    'discussiontools-newtopicssubscription-button-subscribe-tooltip': 'Подпишитесь, чтобы получать уведомления о появлении новых тем на этой странице.',
    'discussiontools-newtopicssubscription-button-unsubscribe-label': 'Отписаться',
    'discussiontools-newtopicssubscription-button-unsubscribe-tooltip': 'Отмените подписку, чтобы больше не получать уведомления о создании новых тем на этой странице.',
    'discussiontools-newtopicssubscription-notify-subscribed-title': '{{GENDER:|Вы}} подписались!',
    'discussiontools-newtopicssubscription-notify-subscribed-body': '{{GENDER:|Вы}} будете получать уведомления о создании новых тем на этой странице.',
    'discussiontools-newtopicssubscription-notify-unsubscribed-title': '{{GENDER:|Вы}} отписались.',
    'discussiontools-newtopicssubscription-notify-unsubscribed-body': '{{GENDER:|Вы}} больше не будете получать уведомления о создании новых тем на этой странице.',
    'visualeditor-educationpopup-dismiss': 'Окей, понятно',
  },

  specialPageAliases: {
    'Contributions': 'Вклад',
    'Diff': 'Изменения',
    'PermanentLink': 'Постоянная ссылка',
  },

  substAliases: [
    'подстановка:',
    'подст:',
  ],

  thumbAliases: [
    'мини',
    'миниатюра',
  ],

  timezone: 'UTC',

  pageWhitelist: [
    /^Арбитраж:.+\//,
    /^Википедия:.+ запросы/,
    /^Википедия:Вики-встречи$/,
    /^Википедия:Выборы арбитров\//,
    /^Википедия:Голосования\//,
    /^Википедия:Запросы/,
    /^Википедия:Заявки на /,
    /^Википедия:Изменение спам-листа/,
    /^Википедия:К восстановлению\//,
    /^Википедия:К объединению\//,
    /^Википедия:К оценке источников/,
    /^Википедия:К переименованию\//,
    /^Википедия:К посредничеству/,
    /^Википедия:К разделению\//,
    /^Википедия:К удалению\//,
    /^Википедия:К улучшению\//,
    /^Википедия:Кандидаты в .+\//,
    /^Википедия:Кандидаты в кандидаты в администраторы/,
    /^Википедия:Кандидаты в устаревшие избранные статьи/,
    /^Википедия:Конфирмации\//,
    /^Википедия:Обсуждение категорий\//,
    /^Википедия:Обсуждение правил\//,
    /^Википедия:Опросы\//,
    /^Википедия:Оспаривание/,
    /^Википедия:Проверка участников\//,
    /^Википедия:Просьба прокомментировать\//,
    /^Википедия:Рецензирование\//,
    /^Википедия:Снятие защиты/,
    /^Википедия:Совет вики-проектов\/Обсуждение проектов/,
    /^Википедия:Сообщения об ошибках/,
    /^Википедия:Статьи года\/.+\/Обсуждение/,
    /^Википедия:Текущие события на заглавной странице\/Кандидаты/,
    /^Википедия:Установка защиты/,
    /^Википедия:Фильтр правок\/Срабатывания/,
    /^Википедия:Форум[/ ]/,
    /^Проект:Библиотека\/(Требуются книги|Вопросы|Горячие темы|Технические вопросы)/,
    /^Проект:Водные объекты/,
    /^Проект:Грамотность\/Запросы/,
    /^Проект:Графическая мастерская\/Заявки/,
    /^Проект:Гражданская война в России\/К посредничеству\/Посредничество по содержанию статей/,
    /^Проект:Добротные статьи\/К лишению статуса/,
    /^Проект:Знаете ли вы\/Подготовка следующего выпуска/,
    /^Проект:Инкубатор\/(Мини-рецензирование|Форум)/,
    /^Проект:Социальная ответственность\/Форум/,
  ],

  pageBlacklist: [
    /^Википедия:Выборы арбитров\/.+\/Выдвижение/,
    /^Википедия:Выборы арбитров\/.+\/Голосование/,
    /^Википедия:Заявки на статус (администратора|бюрократа)$/,
    /^Википедия:Заявки на статусы$/,
  ],

  userNamespacesByGender: {
    female: 'Участница',
  },

  genderNeutralUserNamespaceAlias: 'У',

  archivePaths: [
    {
      source: 'Википедия:Форум/Географический',
      archive: 'Википедия:Форум/Географический/Архивы/',
    },
    {
      source: 'Википедия:Форум арбитров',
      archive: 'Википедия:Форум/Архив/Форум арбитров',
    },
    {
      source: 'Википедия:Форум/$1',
      archive: 'Википедия:Форум/Архив/$1/',
      replacements: [/[^/]+/],
    },
    /\/Архив/,
  ],

  pagesWithoutArchives: [
    /^Википедия:К удалению\//,
    /^Википедия:К восстановлению\//,
    /^Википедия:К переименованию\//,
    /^Википедия:К объединению\//,
    /^Википедия:К разделению\//,
    /^Википедия:К улучшению\//,
    /^Википедия:Кандидаты в хорошие статьи\//,
    /^Википедия:Кандидаты в добротные статьи\//,
  ],

  idleFragments: [/^Преамбула$/],

  defaultIndentationChar: '*',

  indentationCharMode: 'unify',

  signaturePrefixRegexp: /(?:\s*С уважением,?)?(?:\s[-–−—―]+\xa0?[A-Z][A-Za-z-_]*)?(?:\s+>+)?(?:[·•\-‑–−—―─~⁓/→⇒\s\u200d\u200e\u200f\u2060]|&\w+;|&#\d+;)*(?:\s+\()?$/,

  signatureEndingRegexp: / \(обс\.\)$/,

  tagName: 'convenient-discussions',

  hookToFireWithAuthorWrappers: 'global.userlinks',

  unsignedTemplates: [
    'Без подписи',
    'Не подписался',
    'Unsigned2',
    'UnsignedIP2',
    'Нет подписи',
    'UnsignedIP',
    'Не подписано',
    'Неподписано',
    'Написано',
    'Unsigned IP',
    'Unsignedip',
    'Unsigned-ip',
    'НеподписаноIP',
    'Реплика',
    'Не подписаноIP',
    'Неподписано IP',
    'Неподписано-IP',
    'Неподписано-ip',
    'Неподписано ip',
    'Не подписано ip',
    'Не подписано-ip',
    'Unsigned-IP',
    'Unsigned ip',
    'Неподписаноip',
    'Не подписаноip',
    'Не подписано IP',
    'Не подписано-IP',
    'Написано-ip',
    'Написано-IP',
    'Написано ip',
    'Написано IP',
    'НаписаноIP',
    'Написаноip',
    'Нпп',
    'НеподписаноIP2',
    'Unsigned',
    'UnsignedIP',
  ],

  pairQuoteTemplates: [
    [
      'Начало цитаты',
      'НачалоЦитаты',
      'Нц'
    ],
    [
      'Конец цитаты',
      'КонецЦитаты',
      'Кц'
    ]
  ],

  smallDivTemplates: [
    'block-small',
    'Smalldiv',
    'Div-small',
  ],

  paragraphTemplates: [
    'pb',
    'Абзац',
  ],

  outdentTemplates: [
    'outdent',
    'Od',
    'Обратный отступ',
  ],

  clearTemplates: [
    'Clear',
    'Clr',
    '-',
  ],

  quoteFormatting: function (mentionSource, author, timestamp, dtId) {
    var pre = '{{цс|1=';
    var post = '';
    if (mentionSource) {
      if (author) {
        post += '|2=' + author;
      }
      if (timestamp) {
        post += '|3=' + timestamp;
      }
      if (dtId) {
        post += '|4=' + dtId;
      }
      post += '}}';
    } else {
      post = '|inline=1}}<br>';
    }
    return [pre, post];
  },

  noSignatureClasses: [
    'ambox',
    'NavHead',
    'raaf',  // [[Википедия:Запросы к администраторам/Быстрые]]
  ],

  noSignatureTemplates: [
    'Перенесено с',
    'Moved from',
    'Перенесено из',
    'Moved discussion from',
    'Перенесено на',
    'Обсуждение перенесено',
    'Moved to',
    'Перенесено в',
    'Перенесено из раздела',
    'Перенесено в раздел',
    'Копия с',
    'Скопировано на',
  ],

  reflistTalkTemplates: [
    'Reflist-talk',
  ],

  reflistTalkClasses: ['reflist-talk'],

  commentAntipatterns: [
    /--\xa0?\[\[Участник:DimaBot\|DimaBot\]\]/,
  ],

  excludeFromHeadlineClasses: [
    'ch-helperText',
    'userflags-wrapper',
    'dclink-wrapper',
  ],

  closedDiscussionTemplates: [
    [
      'Закрыто',
      'Closed',
      'Начало закрытой секции',
      'Close',
      'Закрыто/сворачивать',
      'Closed/c',
      'Начало скрытого блока',
      'Hidden begin',
      'Hidden block start',
    ],
    [
      'Конец закрытой секции',
      'Закрыто-конец',
      'Ecs',
      'Конец',
      'Esc',
      'Кзс',
      'Закрыто конец',
      'ECS',
      'Конец закрытой секции/сворачивать',
      'Ecs/c',
      'Рано',
      'Конец скрытого блока',
      'Hidden end',
      'Oq-',
      'Сворачиваемый блок-конец',
      'Hidden block end',
    ],
  ],

  closedDiscussionClasses: [
    'NavContent',
  ],

  noHighlightClasses: [
    'infobox',
  ],

  dontConfirmEmptyCommentPages: [
    /^Википедия:Заявки на статус /,
    /^Википедия:Голосования\//,
  ],

  indentationCharsPattern: '(?:\\{\\{(?:-vote|[зЗ]ачёркнутый голос|-голос)\\|)?([:*#]+)( *)',

  undoTexts: [
    'отмена правки',
    'откат правок',
  ],

  textReactions: [
    {
      regexp: /\{\{(?:(?:subst|подст):)?ПИ2?\}\}/,
      message: 'Шаблон указания на статус подводящего итоги добавлять не нужно — он будет добавлен автоматически.',
      name: 'closerTemplateNotNeeded',
      type: 'notice',
      checkFunc: function (commentForm) {
        return commentForm.couldBeCloserClosing && commentForm.headlineInput.getValue().trim() === 'Итог';
      },
    },
  ],

  customCommentFormModules: [
    {
      name: 'ext.gadget.wikificator',
    },
    {
      name: 'ext.gadget.urldecoder',
      checkFunc: function () {
        return mw.user.options.get('gadget-urldecoder');
      },
    },
  ],

  transformSummary: function (summary) {
    return summary
      .replace(cd.s('es-new-subsection') + ': /* Итог */', 'итог')
      .replace(cd.s('es-new-subsection') + ': /* Предварительный итог */', 'предварительный итог')
      .replace(cd.s('es-new-subsection') + ': /* Предытог */', 'предытог');
  },

  postTransformCode: function (code, commentForm) {
    // Add a closer template
    if (
      commentForm.couldBeCloserClosing &&
      commentForm.headlineInput.getValue().trim() === 'Итог' &&
      !/\{\{(?:(?:subst|подст):)?ПИ2?\}\}|правах подводящего итоги/.test(code)
    ) {
      code = code.replace(
        /(\n?\n)$/,
        function (newlines) {
          return '\n' + (cd.settings.get('closerTemplate') || '{{'.concat('subst:ПИ}}')) + newlines;
        }
      );
    }

    return code;
  },

  rejectNode: function (node) {
    return (
      node.classList.contains('ts-Закрыто-header') ||

      // {{clear}}
      (
        node.tagName === 'DIV' &&
        node.getAttribute('style') === 'clear:both;' &&
        !node.childNodes.length
      )
    );
  },

  beforeAuthorLinkParse: function (authorLink, authorLinkPrototype) {
    // https://ru.wikipedia.org/wiki/MediaWiki:Gadget-markadmins.js
    const nextElement = authorLink.nextElementSibling;
    if (nextElement && nextElement.classList.contains('userflags-wrapper')) {
      authorLinkPrototype.parentNode.insertBefore(nextElement, authorLinkPrototype.nextSibling);
    }
  },

  areNewTopicsOnTop: function (title, code) {
    if (/\{\{[нН]овые сверху/.test(code)) {
      return true;
    } else if (/^Википедия:(?:.+ запросы|Запросы|Оспаривание |Форум[/ ])/.test(title)) {
      return true;
    } else if (/^Википедия:(?:К восстановлению|К объединению|К переименованию|К разделению|К удалению|К улучшению)/.test(title)) {
      return false;
    }
    return null;
  },

  getMoveSourcePageCode: function (targetPageWikilink, signature, timestamp) {
    return '{{перенесено на|' + targetPageWikilink + '|' + signature + '}}\n<small>Для бота: ' + timestamp + '</small>\n';
  },

  getMoveTargetPageCode: function (targetPageWikilink, signature) {
    return '{{перенесено с|' + targetPageWikilink + '|' + signature + '}}\n';
  },
};

const cd = convenientDiscussions;

mw.hook('convenientDiscussions.beforeParse').add(function () {
  // Handle {{-vote}} by actually putting pseudo-minus-1-level comments on the upper level. We split
  // the parent list tag into two parts putting the comment in between.

  // Commented for now, as it can confuse votes for the criteria check script on voting pages.
  /*$('.ruwiki-commentIndentation-minus1level').each(function (i, el) {
    const $current = $(el).css('margin', 0);
    const $list = $current.parent('dd, li').parent('dl, ul, ol');
    while ($list[0].contains($current[0])) {
      const $parent = $current.parent();
      const $elementsAfter = $current.nextAll();
      if ($elementsAfter.length) {
        $parent
          .clone()
          .empty()
          .append($elementsAfter);
      }
      $parent.after($current);
      if (!$parent.children().length) {
        $parent.remove();
      }
    }
  });*/

  mw.loader.using('mediawiki.util').then(function () {
    mw.util.addCSS('.ruwiki-msgIndentation-minus1level { margin-left: 0 !important; }');
  });
});

mw.hook('convenientDiscussions.pageReadyFirstTime').add(function () {
  const generateEditCommonJsLink = function () {
    return mw.util.getUrl('User:' + cd.user.getName() + '/common.js', { action: 'edit' });
  };

  const isHlmEnabled = window.highlightMessagesAfterLastVisit !== undefined;
  if (isHlmEnabled) {
    // Suppress the work of [[Участник:Кикан/highlightLastMessages.js]] in possible ways.
    window.highlightMessagesAfterLastVisit = false;
    window.highlightMessages = 0;

    if (!mw.cookie.get('cd-hlmConflict')) {
      // Remove the results of work of [[Участник:Кикан/highlightLastMessages.js]]
      if (window.messagesHighlightColor !== undefined) {
        const dummyElement = document.createElement('span');
        dummyElement.style.color = window.messagesHighlightColor;
        const hlmStyledElements = cd.api.getRootElement().querySelectorAll(
          '.cd-comment-part[style="background-color: ' + dummyElement.style.color + ';"],' +
          '.cd-comment-part[style="background-color: ' + window.messagesHighlightColor + '"]'
        );
        hlmStyledElements.forEach(function (el) {
          el.style.backgroundColor = null;
        });
      }

      const $text = cd.api.wrapHtml('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Кикан/highlightLastMessages.js">highlightLastMessages.js</a>, конфликтующий с функциональностью подсветки скрипта «Удобные обсуждения». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
      mw.notify($text, {
        type: 'warn',
        autoHide: false,
      });
      mw.cookie.set('cd-hlmConflict', '1', {
        path: '/',
        expires: 60 * 60 * 24 * 30,
      });
    }
  }

  if (typeof proceedToArchiveRunned !== 'undefined' && !mw.cookie.get('cd-ptaConflict')) {
    const $text = cd.api.wrapHtml('У вас подключён скрипт <a href="//ru.wikipedia.org/wiki/Участник:Jack_who_built_the_house/proceedToArchive.js">proceedToArchive.js</a>, функциональность которого включена в скрипт «Удобные обсуждения». Рекомендуется отключить его в <a href="' + generateEditCommonJsLink() + '">вашем common.js</a> (или другом файле настроек).');
    mw.notify($text, {
      type: 'warn',
      autoHide: false,
    });
    mw.cookie.set('cd-ptaConflict', '1', {
      path: '/',
      expires: 60 * 60 * 24 * 30,
    });
  }

  if ($('.localcomments[style="font-size: 95%; white-space: nowrap;"]').length) {
    const $text = cd.api.wrapHtml('Скрипт <a href="//ru.wikipedia.org/wiki/Участник:Александр_Дмитриев/comments_in_local_time_ru.js">comments in local time ru.js</a> выполняется раньше скрипта «Удобные обсуждения», что мешает работе последнего. Проследуйте инструкциям <a href="' + mw.util.getUrl(cd.config.scriptPageWikilink) + '#Совместимость">здесь</a>, чтобы обеспечить их совместимость.');
    mw.notify($text, {
      type: 'warn',
      autoHide: false,
    });
  }
});

mw.hook('convenientDiscussions.commentFormCreated').add(function (commentForm) {
  commentForm.couldBeCloserClosing = (
    /^Википедия:К удалению/.test(cd.page.name) &&
    commentForm.getMode() === 'addSubsection' &&
    mw.config.get('wgUserGroups').includes('closer')
  );
});

mw.hook('convenientDiscussions.commentFormCustomModulesReady').add(function (commentForm) {
  commentForm.$element.on('keydown', function (e) {
    // Ctrl+Alt+W
    const isCmdModifierPressed = $.client.profile().platform === 'mac' ? e.metaKey : e.ctrlKey;
    if (isCmdModifierPressed && !e.shiftKey && e.altKey && e.keyCode === 87) {
      window.Wikify(commentForm.commentInput.$input[0]);
    }
  });
});

mw.hook('convenientDiscussions.commentFormToolbarReady').add(function (commentForm) {
  commentForm.commentInput.$input.wikiEditor('addToToolbar', {
    section: 'main',
    groups: {
      gadgets: {
        tools: {
          wikificator: {
            label: 'Викификатор — автоматический обработчик текста (Ctrl+Alt+W)',
            type: 'button',
            icon: 'https://upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
            action: {
              type: 'callback',
              execute: function () {
                window.Wikify(commentForm.commentInput.$input[0]);
              },
            },
          },
        },
      }
    },
  });
  commentForm.$element
    .find('.group-gadgets')
    .insertBefore(commentForm.$element.find('.section-main .group-format'));

  if (mw.user.options.get('gadget-urldecoder')) {
    commentForm.commentInput.$input.wikiEditor('addToToolbar', {
      section: 'main',
      group: 'gadgets',
      tools: {
        urlDecoder: {
          label: 'Раскодировать URL перед курсором или все URL в выделенном тексте',
          type: 'button',
          icon: 'https://upload.wikimedia.org/wikipedia/commons/0/01/Link_go_remake.png',
          action: {
            type: 'callback',
            execute: function () {
              window.urlDecoderRun(commentForm.commentInput.$input[0]);
            },
          },
        },
      },
    });
  }
});

/* END OF CONFIGURATION */


if (!convenientDiscussions.isRunning) {
  convenientDiscussions.getStringsPromise = getStrings();
  mw.loader.getScript('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript')
    .catch(function (e) {
      console.warn('Couldn\'t load Convenient Discussions.', e);
    });
}

}());

// </nowiki>