Выноски для цитат

Здесь, возможно, есть ошибка: включение этой настройки (при том что изначально она была отключена) вызвало проблемы для аккаунтов без прав администратора. Не уверен, что именно вступило в конфликт, но некоторые темы стали скрытыми, а навигация по категориям и тегам стала полностью неработоспособной для аккаунтов с ограниченным доступом (TL1).

Я подожду обновления от Arkshine.

2 лайка

При обновлении сегодня я вижу следующее:

[Уведомление администратора] Тема ‘Quote Callouts’ содержит код, требующий обновления. (id:discourse.widgets-decommissioned) (узнать больше)

1 лайк

Я внес исправление, не могли бы вы обновить компонент и попробовать? :folded_hands:

7 лайков

Пока работает отлично!

2 лайка

Сейчас возникла проблема: блоки с подсказками больше нельзя свернуть/развернуть.

Не могли бы вы привести здесь воспроизводимый пример или ссылку на вашу тему на форуме (если удобнее, можете написать мне в личные сообщения)?

1 лайк

Конечно, в нижней части этой темы

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

Кратко

  • Добавлена поддержка текстового редактора с форматированием (подробный обзор ниже)
  • Рендеринг переведён на компонент Glimmer
  • Исправлен цвет CSS для вложенных вызовов
  • Исправлен цвет CSS для алиасов
  • Анимация сворачивания должна стать плавнее
  • Добавлена настройка callout_transition_duration_ms (анимация сворачивания)
  • Добавлено сочетание клавиш Ctrl + q для вставки вызова по умолчанию.
    Работает в обоих редакторах, а сочетание клавиш добавлено в модальное окно «Горячие клавиши».
    Изображения
  • Чат: добавлена кнопка в панели инструментов для вставки вызова по умолчанию
    Изображения
  • Предпросмотр Markdown: добавлена возможность изменения типа вызова при клике на иконку
    Изображение

Текстовый редактор с форматированием

Давайте поговорим о текстовом редакторе с форматированием и о том, чего ожидать!

Создание вызовов:

У вас есть четыре способа вставки вызовов:

  • Горячие клавиши
  • Панель инструментов
  • Правила ввода
    • /callout<type>
    • !!<type>
  • Поддержка вставки
    Видео

Редактирование вызовов

Элементы управления для редактирования вызова появляются только после его выбора.

  • Выбор типа
    При клике на иконку появится всплывающее меню.
  • Пользовательский заголовок
    Поддерживается встроенное форматирование и эмодзи
  • Сворачивание
    Возможность сделать вызов сворачиваемым. Доступно через меню параметров.
    Видео

Организация вызовов

  • Элементы управления перемещением

    • Настольный компьютер
      Есть ручка, за которую можно потянуть, чтобы перетащить вызов.
    • Устройство с сенсорным экраном
      Вы можете перемещать вызовы вверх/вниз или встраивать их в соседние вызовы. По умолчанию эта функция отключена, чтобы не перегружать интерфейс, так как вы редко будете этим заниматься. Включить можно в настройках.
    Видео

  • Навигация с клавиатуры
    Это помогает легче перемещаться внутрь и из вложенных вызовов.
    Возможно, в будущих версиях потребуется внести некоторые изменения для обеспечения согласованности поведения.

    • В начале заголовка автоматически откроется выбор типа вызова.
    • Внутри тела вызова, если нет абзаца, в который можно перейти, будет создан новый; если вы выйдете с пустым содержимым, абзац будет удалён.
    • Enter внутри заголовка перемещает курсор в тело (и создаёт его, если необходимо).
    Видео

  • Вставка по клику

    • В областях, где нет абзаца, можно кликнуть внутрь, чтобы открыть новый абзац.
    • При желании также можно использовать кнопки для открытия абзаца внутри или снаружи вызова.
      Видео

Возможно, позже я займусь:

  • автодополнением правил ввода
  • улучшением цветов с помощью современного CSS для обеспечения согласованности и видимости, особенно в тёмной теме.
  • Я бы хотел убрать все настройки и сначала сосредоточиться на простоте, оставив продвинутую кастомизацию только через CSS, но уже слишком поздно для этого :rofl:

Особая благодарность Moin за обратную связь.

На этом всё. Дайте знать, что вы думаете. Отзывы очень приветствуются!

8 лайков

Я заметил, что вы реализовали такой эффект: если у определённого типа есть несколько алиасов, то при выборе типа в редакторе с форматированием каждый алиас отображается как отдельный вариант, расположенные подряд.

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

Если такая доработка сложна в реализации, возможно, стоит добавить чекбокс, который позволит отключать добавление дополнительных записей в список выбора типов, соответствующих алиасам один к одному, когда задан заголовок. :slightly_smiling_face:

3 лайка

Вы правы! Спасибо за обратную связь, приятно видеть, что люди используют TC.
На самом деле я об этом думал, но совершенно забыл это исправить. :grinning_face_with_smiling_eyes:
Я займусь исправлением, чтобы правильно фильтровать список, когда указано заголовок.

2 лайка

Я исправил ошибку. Дайте знать, как получится! :+1:

3 лайка

Я только что протестировал последнюю версию, и теперь элементы с заголовком отображаются в списке выбора категории только один раз, независимо от количества алиасов. :smiley:

3 лайка

У меня возникает следующая ошибка, только при использовании перевода на de*:

Скриншот красной панели с сообщением об ошибке в Quote Callouts

JS-консоль:

client-error-handler.js:109 [THEME 6 'Quote Callouts'] TypeError: Cannot set properties of undefined (setting 'callout_sample')
    at new po (callouts.gjs:30:19)
    at callouts.gjs:265:23
    at eK (plugin-api.gjs:3582:10)
    at Object.initialize (callouts.gjs:264:5)
    at i.initialize (app.js:304:28)
    at index.js:375:19
    at e.each (index.js:183:7)
    at e.walk (index.js:112:10)
    at e.each (index.js:59:20)
    at e.topsort (index.js:65:10)
    at ij._runInitializer (index.js:388:11)
    at ij.runInstanceInitializers (index.js:373:10)
    at l._bootSync (instance.js:111:22)
    at ij.didBecomeReady (index.js:780:18)
    at invoke (index.js:262:14)
    at m.flush (index.js:180:11)
    at g.flush (index.js:334:19)
    at Y._end (index.js:762:32)
    at Y._boundAutorunEnd (index.js:499:12)
h	@	client-error-handler.js:109

Она возникает в последней строке этого фрагмента:

class QuoteCallouts {
  constructor(owner, api) {
    [...]
    window.I18n.translations[
      window.I18n.fallbackLocale || "en"
    ].js.composer.callout_sample = ``;

* установите /u/<username>/preferences/interface “Язык интерфейса” на “Немецкий (Deutsch)”

Похоже, что ошибка была внесена в одном из последних обновлений Discourse между версиями 2026.3.0-latest и 2026.4.0-latest, но я не могу определить точное место. В данный момент я использую версию 2026.4.0-latest 4b2c45376d и Quote Callout v0.0.1 9aa6548

2 лайка

Я действительно думал, что подобные проблемы уже исправлены.
Правильно ли я понимаю, что локаль сайта установлена по умолчанию на английский (США), а локаль пользователя — на немецкий?

1 лайк

Да, это решило проблему. Спасибо! <3

1 лайк

Привет, @Arkshine, спасибо за отличный плагин!

Можно ли использовать блок-вызов без заголовка вообще или только с иконкой?

2 лайка

Я не думаю, что вы можете сделать это прямо сейчас, но я придумаю способ реализовать это в следующем обновлении!

А пока есть трюк: вставьте пробел нулевой ширины, и это должно сработать :grinning_face_with_smiling_eyes:. Вы можете скопировать его, например, с этой страницы: ​ U+200B ZERO WIDTH SPACE - Unicode Explorer


Дайте знать, если это поможет вам.

4 лайка

Кажется, это сработало! Спасибо! :heart_eyes:

2 лайка

Привет, @Arkshine :waving_hand:

Возможно ли сохранить исходный цвет блока при использовании функции «Скрыть детали»?

В режиме редактора поста исходные цвета сохраняются, но после сохранения изменений фон становится серым:

2 лайка

Спасибо за отчет!
Я внес исправление. Можете обновить компонент и проверить, повторится ли это?

3 лайка