Участник:Jack who built the house/Удобные обсуждения

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
This page is a translated version of a page User:Jack who built the house/Convenient Discussions and the translation is 93% complete. Changes to the translation template, respectively the source language can be submitted through User:Jack who built the house/Convenient Discussions and have to be approved by a translation administrator.
Outdated translations are marked like this.
Shortcut

Логотип скрипта. Цвета соответствуют фонам сообщений разных типов

Страница, на которой используются «Удобные обсуждения»
«Удобные обсуждения» добавляют ряд элементов в список наблюдения: группу кнопок «CD» слева от кнопки настроек списка наблюдения и ссылки «сообщение» справа от описаний изменений.

Convenient Discussions

2021 Coolest Tool
Award Winner

in the category
Versatile

«Удобные обсуждения» (Convenient Discussions, CD) — инструмент на JavaScript, создающий оболочку над существующей системой обсуждения MediaWiki, повышающую удобство использования страниц обсуждения множеством способов.

Возможности

  • Отправка и редактирование сообщений без перехода на отдельную страницу
    • Автодополнение @упоминаний, [[#ссылок на сообщения]], [[викиссылок]], {{шаблонов}} и <тегов>
    • Цитирование сообщений с сохранением форматирования
    • Автозаполнение описания изменений с указанием адресата сообщения
    • Сохранение черновиков сообщений с возможностью восстановления содержимого после неожиданных событий, таких как падения браузера
  • Создание тем и подразделов
  • Переоформленные страницы обсуждений, с отображением автора и даты выше сообщений (по согласию) и тонкими линиями, обозначающими ветки
  • Обработка шаблонов «outdent»
  • Сворачиваемые (и автоматически-сворачиваемые) ветки
  • Метки времени сообщений в местном времени и произвольном формате, включая относительный
  • Подсветка и навигация по новым сообщениям (через панель навигации или оглавление)
  • Подсветка своих сообщений
  • Проверка появления новых сообщений в фоновом режиме и автоматическое отображение простых правок
  • Подписка на темы, что влияет на уведомления и подсветку тем на нескольких страницах (основано на DiscussionTools)
  • Уведомления через операционную систему об ответах на сообщения пользователя и сообщения в разделах на открытых страницах (по согласию), на которые подписан участник
  • Перенос тем между страницами обсуждений
  • Благодарности и копирование ссылок на правки, которыми были добавлены сообщения
  • Копирование ссылок на сообщения
  • Переход к конкретному сообщению из списка наблюдения и других страниц, где перечисляются версии страниц
  • Всегда видное название текущего раздела и навигацию по частям страницы в один клик
  • Поиск по сообщениям и разделам в архиве

Скрипт позволяет забыть:

  • о необходимости искать в коде место для реплики, отсчитывать звёздочки, ставить тильды и другую разметку;
  • о конфликтах редактирования;
  • о чтении страниц обсуждения диффами;
  • о необходимости полностью перезагружать страницу и глазами искать новые сообщения;
  • о необходимости переводить даты в UTC в местное время.

Установка

Чтобы установить скрипт для всех сайтов Викимедиа, добавьте его в свой global.js в Meta:

mw.loader.load('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript');

Для установки скрипта в определённом вики-проекте, в котором он не является гаджетом, добавьте этот же код в ваш common.js. Если в вики-проекте скрипт является гаджетом, активируйте его в пользовательских настройках. Даже если скрипт у вас установлен глобально, имеет смысл включить гаджет — скрипт будет грузиться быстрее в этом вики-проекте.

Каждый вики-проект может обладать своей спецификой, разрешаемой через локальный файл конфигурации. Файлы конфигурации уникальны для каждого проекта и создаются волонтёрами. Если вы знаете JavaScript и у вашего проекта ещё нет файла конфигурации, см. § Конфигурирование для вики-проекта. Наличие локального файла конфигурации также ускорит выполнение скрипта.

Использование

Диалог настроек

Вы можете настроить скрипт по своему желанию в окне настроек, которое можно вызвать, кликнув на иконку шестерёнки OOjs UI icon advanced в секции «CD» в списке наблюдения, либо под любой формой отправки сообщения.

Горячие клавиши можно узнать, нажав на кнопку «?» под любой формой отправки сообщения, либо во всплывающем окне при наведении на кнопки панели навигации.

Типы комментариев

  • Новое сообщение (сообщение считается новым, если страница была загружена в течение 15 минут после первой загрузки сообщения)
  • Собственное сообщение
  • Целевое сообщение (открытое по ссылке или переходом)
  • Удалённое сообщение

Панель навигации

Часто задаваемые вопросы

Скрипт не работает на странице, на которой должен, или работает там, где не должен. Как это исправить?
Скрипт использует несколько факторов для определения, нужно ли ему обрабатывать конкретную страницу, таких как наличие таба «Добавить тему» и значение конфигурации wgExtraSignatureNamespaces. Простейший способ заставить его обрабатывать или не обрабатывать страницу — нажать на кнопку «Запустить „Удобные обсуждения“ на этой странице один раз», расположенную в подвале страницы. Однако это одноразовое решение. Вам следует связаться с участником, обслуживающим файл конфигурации вашего вики-проекта, или создать собственный файл конфигурации согласно инструкциям ниже. В этом файле используются регулярные выражения для проверок, должна ли страница быть включена/исключена из значений pageWhitelist / pageBlacklist. Есть и другой, худший способ решить эту проблему — добавить элемент с class="cd-talkPage" или class="cd-notTalkPage" в исходный код страницы. В этом случае страница будет по-прежнему некорректно классифицироваться на страницах журналов (список наблюдения, история изменений, и так далее).
Что означает «(-)» после текста сообщения в описании правки?
Эта метка означает, что в описании правки отображается полный текст сообщения, и поскольку в сообщении не содержится дополнительной информации, нет нужды открывать страницу для просмотра содержимого этой правки. Подобная нотация использовалась на некоторых старых интернет-форумах.
Меню сообщения (Ответить/Редактировать/Поблагодарить/...) закрывает ссылку на автора сообщения, и я не могу по ней кликнуть.
Выполните по блоку длинный клик/тап или правый клик, он исчезнет.
Как установить настройки для одного вики-проекта, а не всех сразу?
Используйте var cdLocalSettingName = value; в вашем common.js в этом проекте. Список всех названий настроек доступен здесь (первая буква обязана быть в верхнем регистре, например autopreviewcdLocalAutopreview).
Мне бы хотелось, чтобы после упоминания пользователя было вставлено , как в шаблоне {{Ping}}.
Удерживайте Ctrl при выборе упоминаемого участника. Вы также можете нажать на иконку упоминания, пока удерживаете Ctrl, — если вы отвечаете на сообщение, в начале вашего ответа появится упоминание автора целевого сообщения с на конце.

Данные

Вот список того, что, зачем и как хранит скрипт, а также как удалить эти данные. Обратите внимание, что у вас есть возможность удалить все данные, связанные со скриптом, в один клик нажатием на кнопку «Удалить все данные скрипта» во вкладке «Удаление данных» настроек скрипта. Также обратите внимание, что, хотя настройки (за исключением нескольких) глобальны, ваша история посещений и список отслеживаемых разделов хранятся индивидуально для каждой вики, поэтому вам придётся очищать их по отдельности.

Что Зачем Как Как удалить[1]
Настройки Чтобы позволить участникам настраивать скрипт по своему желанию. На серверах Викимедиа в качестве пользовательской настройки с названием userjs-convenientDiscussions-settings.

Глобальные настройки:

new mw.Api().postWithEditToken({
  action: 'globalpreferences',
  optionname: 'userjs-convenientDiscussions-settings',
});

Локальные настройки:

new mw.Api().saveOption('userjs-convenientDiscussions-localSettings', null);
Последние посещения страниц обсуждения Для обнаружения новых сообщений на страницах обсуждения. В сжатом виде, на серверах Викимедиа в качестве пользовательской настройки с названием userjs-convenientDiscussions-visits.[2]
new mw.Api().saveOption('userjs-convenientDiscussions-visits', null);
Отслеживаемые разделы (Только когда включено в настройках вместо стандартных подписок на темы.) Для отображения уведомлений и подсветки сообщений на служебных страницах, перечисляющих версии страниц обсуждения: список наблюдения, страница свежих правок, страницы истории изменений, страницы вклада участников. В сжатом виде, на серверах Викимедиа в качестве пользовательской настройки с названием userjs-convenientDiscussions-watchedSections.[2]

С помощью окна «Править список отслеживаемых разделов», доступного из списка наблюдения, либо

new mw.Api().saveOption('userjs-convenientDiscussions-watchedSections', null);
Содержимое неотправленных форм ответа Для восстановления черновиков сообщений после обновления страницы, крэша браузера, случайного перехода на другую страницу и т. д. Не дольше 30 дней, в локальном хранилище браузера.
localStorage.removeItem('convenientDiscussions-commentForms');
Правки, отблагодарённые через CD Для отражения в интерфейсе, что вы уже поблагодарили за сообщение. Не дольше 60 дней, в локальном хранилище браузера.
localStorage.removeItem('convenientDiscussions-thanks');
Просмотренные изменения сообщений Когда сообщение обновляется, его новая версия иногда отображается мгновенно. Если пользователь увидел обновление, этот факт сохраняется в памяти, чтобы в следующий раз, когда он его увидит, не было уведомления. Не дольше 60 дней, в локальном хранилище браузера.
localStorage.removeItem('convenientDiscussions-seenRenderedChanges');
  1. ^ Для исполнения кода в столбце «Как удалить», откройте инструменты разработчика в браузере (для большинства браузеров это делается нажатием F12), переключитесь на вкладку «Консоль», вставьте код в поле ввода и нажмите  Enter.
  2. ^ В русской Википедии по историческим причинам в названиях настроек используется cd вместо convenientDiscussions, а для настройки отслеживаемых разделов используется userjs-cd-watchedTopics.

Обратите внимание, что остальные скрипты, используемые вами на страницах вики-проектов, а также общесайтные скрипты, также могут получить доступ к этим данным.

Обратная связь

Лучше всего отправлять отчёты об ошибках и предложения на Phabricator с меткой «convenient-discussions». Если у вас нет учётной записи на этом сайте и вы не хотите её создавать, оставьте ваше сообщение на странице обсуждения (пожалуйста, упомяните $jack-link-commons).

Авторство

«Удобные обсуждения» были впервые представлены в 2018 году в русской Википедии как персональный скрипт. Они разрабатываются участником Jack who built the house, обогащённые вкладом и обратной связью от глобального технического сообщества и участников Викимедиа. Они также заимствуют код для парсинга временных меток в различных форматах у участника Matma Rex и используют решения и идеи от команд инженеров и дизайнеров Викимедиа.

Конфигурирование для вики-проекта

Структура проекта

Схема загрузки скрипта следующая. Существует основной файл скрипта на Викискладе и файл конфигурации на локальном проекте (если его кто-то создал). Файл конфигурации может быть как гаджетом, так и пользовательским скриптом (гаджет грузится быстрее). Файл конфигурации запрашивает загрузку основного файла скрипта, если он ещё не загружен. И наоборот, если основной файл загружен первым, он запрашивает файл конфигурации, если ссылка на файл конфигурации в нём указана. Так что нет разницы, какой файл загрузится первым.

Для конфигурации скрипта в вашем вики-проекте вы можете воспользоваться генератором конфигурации согласно инструкции ниже, а затем заполнить получившийся файл желаемыми значениями. Если вы хотите, чтобы файл конфигурации загружался при загрузке скрипта из Викисклада, вам следует связаться с владельцем репозитория. После того как он убедится в безопасности добавления, он добавит ссылку на ваш файл конфигурации в config/urls.json (вы также можете оставить пулл-реквест).

Для того чтобы сгенерировать файл конфигурации, выполните скрипт-генератор в консоли вашего браузера для любой страницы вики-проекта, для которого вы хотите получить конфигурацию. Вы можете сделать это, выполнив

mw.loader.load('https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions-generateBasicConfig.js&action=raw&ctype=text/javascript');

в консоли. Результатом выполнения скрипта будет конфигурационный объект, заполненный значениями, которые могут быть автоматически запрошены (системные сообщения, некоторая информация о сайте, названия шаблонов), обёрнутый в универсальный код-обёртку. Затем вам следует создать файл конфигурации с этим содержимым.

Значимая часть конфигурации содержится в объекте convenientDiscussions.config. Возможные свойства этого объекта, а также их значения по умолчанию документированы здесь, в алфавитном порядке. Исходный код этой документации перечисляет их в более логичном порядке.

Рекомендуется указывать только те свойства, значения которых отличаются от значений по умолчанию.

Вы также можете добавить любые необходимые дополнительные инструкции (например, хуки) после объекта.

Примеры

Как мне выключить кнопки «Ответить»?

See also: mw:Help:DiscussionTools/Magic words and markup.

To prevent the "Reply" buttons and the rest of the comment layout from showing up in certain templates used on talk pages (e.g. in the "Moved discussion" template after the mover's signature), add the mw-notalk class to those templates.

To prevent the "Reply" buttons from showing up in closed discussions, add the mw-archivedtalk class to the template.

Отладка с помощью Node.js и Git

Если вы хотите заняться более подробной отладкой файла конфигурации в инструментах разработчика вашего браузера, вы знакомы с Node.js и Git и они у вас установлены, склонируйте репозиторий скрипта, выполните npm install, находясь в директории скрипта, чтобы установить зависимости, создайте файл .js в директории config, назвав его в соответствии с шаблоном project_code[-language_code].js (например, w-en.js, wikt-de.js, mw.js) и вставьте в него следующий код:

export default {
  // List of properties
};

// Any additional code, e.g. hooks

Затем вам будет нужно добавить код согласно инструкции выше. После того как конфигурация будет готова, вам понадобится собрать итоговый файл конфигурации, который вы сможете залить в ваш вики-проект. Сделайте это исполнением команды npm run configs. Итоговый файл будет назван dist/convenientDiscussions-config/filename.

Тестируйте ваш файл конфигурации, выполняя npm run single -- project=project_code lang=language_code. Файл с именем convenientDiscussions-single-project_code[-language_code].js будет создан (и будет обновляться при изменениях кода) в папке dist. Загружайте его в вики, используя mw.loader.load('http://localhost:9000/filename').

Лучше всего будет, если вы оставите пулл-реквест на добавление вашей конфигурации в репозиторий CD. В этом случае, если в окружении скрипта изменится что-нибудь, что затронет ваш файл конфигурации (например, изменится формат свойства или обновится значение по умолчанию, на котором основано ваше значение), другие люди, включая мейнтейнера скрипта, смогут заметить это и либо уведомить вас, либо осуществить изменения самостоятельно.

Разработка

  • Репозиторий на GitHub используется для хранения исходного кода. GitHub Actions используется для сборки и размещения полученных файлов в вики-проектах, а также документации на Toolforge.
  • Метка на Phabricator используется для координации усилий. (Оставляйте отчёты об ошибках и предложения здесь, а не на GitHub.)
  • На Toolforge размещается автоматически генерируемая документация кода.
  • На Translatewiki размещаются локализуемые сообщения. Пожалуйста, предлагайте улучшения для исходных английских сообщений с помощью пулл-реквеста в en.json.

Ваш вклад приветствуется! Вы можете либо улучшать сам скрипт, либо писать плагины к нему. Несколько замечаний:

  • Глобальный объект скрипта имеет название convenientDiscussions (модули используют алиас cd).
  • convenientDiscussions.s() является аналогом mw.msg() для локализуемых сообщений скрипта. convenientDiscussions.sParse() является аналогом mw.message(...).parse(). Пожалуйста, убедитесь, что все сообщения, содержащие сырой HTML-код, вставляемый на страницу, используют convenientDiscussions.sParse() для предупреждения уязвимостей XSS. (Любой код из ненадёжных источников очищается от потенциально вредоносных частей на ранних стадиях, однако лишняя проверка не навредит.)
  • «События» на левой панели документации соотносятся с названиями, используемыми mw.hook. Например, чтобы добавить обработчик на событие commentFormCreated, вам нужен код mw.hook('convenientDiscussions.commentFormCreated').add(handler);
  • Для просмотра названий сообщений вместо самих сообщений, добавьте параметр uselang=qqx в конец адреса (точно так же, как и в MediaWiki).
  • Если вы пишете плагин и вам нужно, чтобы некоторый внутренний метод был доступен публично через глобальный объект, свяжитесь с мейнтейнером скрипта (или просто сделайте соответствующий пулл-реквест).
  • Для скрипта пока написано очень мало автоматических тестов (хотя было бы замечательно иметь больше); большая часть тестирования должна осуществляться вручную. Некоторые общие тестовые случаи для обнаружения сообщений и их добавления/редактирования собраны на странице User talk:Jack who built the house/CD test cases.

Сборка

Используйте:

  • npm run start для отдачи скрипта с сервера с http://localhost:9000/convenientDiscussions.dev.js и автоматической пересборки при обновлениях. Конфигурация вики-проекта и перевод будут всё так же загружаться с веба.
  • npm run single -- project=project_code lang=language_code для отдачи скрипта с сервера в качестве единого файла. Удобно для отладки конфигурации и перевода.
  • npm run build для сборки основного файла скрипта, карт кода, файлов конфигурации для проектов, файлов перевода, а также файла лицензии. Используйте --test для сборки файлов с постфиксом -test.
  • npm run docs для генерации документации из комментариев JSDoc.
  • npm run configs для генерации файлов конфигурации для вики-проектов. Используйте --test для генерации файлов с постфиксом -test.
  • npm run deploy для заливки полученных файлов (за исключением конфигурации для вики-проектов) в вики-проект, что настраивается в config.json5. Используйте --test для заливки тестовых версий.

См. также