К сожалению, проблема всё ещё сохраняется. Я пробовал изменить порядок регулярных выражений в настройках темы, но всё равно сначала срабатывает запись «короткая».
Привет @jrgong! Удалось ли тебе выполнить массовую загрузку через CSV-файл? Пытаюсь разобраться, но не совсем понимаю, куда нажимать. К слову, я не разработчик ![]()
У нас тоже. Я отмечаю, что:
discourse,https://discourse.org
discourse meta,https://meta.discourse.org
meta discourse,https://meta.discourse.org
даёт нам:
discourse
discourse meta
meta discourse
Порядок, в котором они указаны в настройках темы (и, вероятно, в базе данных под ними), кажется, не имеет значения. Скорее, если вы расширяете уже существующее слово с гиперссылкой, он улавливает разницу. Если же вы добавляете слово перед ним, этого не происходит.
Хм, это немного странно. Вы правы, порядок в настройках не должен иметь значения, так как мы сортируем слова по длине:
Не уверен, сколько времени стоит уделять этому, поскольку, насколько мне известно, эта функция переносится в ядро Discourse.
Привет,
Заметил, что у слов, превращённых в ссылки, нет счётчика кликов, как у других ссылок (что, на мой взгляд, было бы приятной функцией). Это сделано намеренно или это баг?
Можно ли ограничить это конкретными категориями/тегами, чтобы ссылка генерировалась только для постов, входящих в определённую категорию или имеющих соответствующий тег?
Можно ли указать заголовок для ссылки? Например, чтобы «ghost» превратился в «ghost (см. предупреждение!)»?
Возможно, используя синтаксис markdown-ссылок:
ghost,[ghost (см. предупреждение!)](https://warning.example.com)
Или указав заголовок как третий параметр:
ghost,https://warning.example.com,ghost (см. предупреждение!)
@Paracelsus счетчик кликов в этой теме не поддерживается, извините.
Это не совсем ошибка: тема — это лишь JavaScript-код, работающий в вашем браузере. Он не взаимодействует с сервером, поэтому нет способа сохранить количество кликов.
Теперь в Discourse в разделе замены слов:
/admin/customize/watched_words/action/replace
Если просто ввести слово, а затем вставить URL без какого-либо markdown, всё работает! Именно так можно добиться работы без компонента темы autolink.
(В то время как в компоненте темы вы указываете слово/фразу, затем запятую и ссылку, которую нужно использовать, в разделе замены наблюдаемых слов вы вводите слово в одно поле, а ТОЛЬКО ссылку — в другое… не пытайтесь вводить markdown в строку замены, как я изначально пытался сделать.)
Привет, это отличный компонент! Спасибо за то, что его создали.
Но есть небольшая проблема: похоже, что автоматическая расстановка ссылок требует пробела после конкретного слова, поэтому компонент плохо работает на китайском и японском (возможно, также на корейском? Я не знаю этот язык) экземплярах Discourse.
Я носитель китайского языка и также говорю по-японски. В китайском языке люди иногда используют некоторые заимствованные слова в тексте, например, Apple, Office, BB (Blackboard), DNA и т. д., перевод которых в разговорной речи используется довольно редко. И обычно мы не ставим пробелы до/после таких слов, когда они окружены китайскими иероглифами, в неформальной письменной речи.
Вот пример:
你会用Office吗?
Ты умеешь пользоваться пакетом Office?
В японском языке ситуация похожа.
革新に満ちたAppleの世界へようこそ。(скопировано с официального сайта Apple Japan)
Добро пожаловать в мир Apple, полный революционных изменений.
Я понимаю, что адаптация этого компонента под эти два языка может потребовать много работы, так как это может привести к нежелательной расстановке ссылок в языках, использующих алфавит. Поэтому просто указываю на существование небольшого несовершенства. Еще раз благодарю за отличную идею создания этого компонента. ![]()
Это работает отлично. Можно ли запустить это ретроспективно, или нужно вручную проверить все ссылки и изменить их?
Вы должны иметь возможность пересобрать эти сообщения. Вы можете нажать на ключ и пересобрать HTML. Когда вы увидите, что это работает, вы сможете поискать, как запустить задачу rake для пересборки соответствующих сообщений.
На самом деле, эта тема динамически превращает ссылки в гиперссылки в постах при их загрузке в браузере, так что ничего делать не нужно. ![]()
О. Очень круто. Я не знал об этом, но это логично.
Наш глоссарий по программному обеспечению для генеалогии с открытым исходным кодом был слишком обширным для использования в постах или для автоматической гиперссылки.
Если бы мы просто добавили гиперссылки на каждый термин глоссария, то каждый пост утонул бы в море синих ссылок. Пользователи, скорее всего, перестали бы на них нажимать. Кроме того, нам хотелось иметь журнал изменений для глоссария.
Поэтому я сделал гиперссылку на «Глоссарий Gramps», ведущую к соответствующей статье в нашем вики-сайте на базе MediaWiki. Теперь я использую аннотацию вроде «(см. [термин глоссария] в Глоссарии Gramps)».
(У нас есть ещё один Генеалогический глоссарий для терминологии, которая является общей для темы генеалогии, а не специфичной для нашего программного обеспечения.)
Что-то было сделано для разрешения использования пайпов?
В данный момент я использую это как обходное решение:

Также, есть ли способ исключить мир из автоматического создания ссылок, когда он находится в глубокой вложенности (потомок потомка…) класса, который исключён?
Я создаю форум с категорией «Документация», и мне не нужно автоматическое создание ссылок для слов в ней, так как это будет избыточно: слова в других категориях будут ссылаться на темы в этой категории документации.
К тому же, слова с автоматическими ссылками открываются в новом окне.
Итак, это не сработало:

Вот пример проблемы, с которой я столкнулся. Это часть текста внутри темы документации.
Если я нажму на 22° halo, откроется страница, ведущая к… той же странице, в том же месте.
Я могу исключить слова в заголовках, особенно потому что они содержат оглавление, но следующие абзацы не имеют никакого специального класса. Это обычные абзацы.
Может быть, настройка исключённого класса могла бы принимать CSS-селекторы?
Например, d-toc-cooked > *
edit: Также я не понимаю, почему это не работает, так как моё слово является прямым потомком исключённого класса:
![]()
«22° Halo» всё ещё имеет автоматическую ссылку:
<h3 id="toc-h3-22-halo" data-d-toc="toc-h3-22-halo" class="d-toc-post-heading">
<a name="h-22-halo-7" class="anchor" href="#h-22-halo-7"></a>
<a href="https://discourse.canapin.com/t/ice-halos-information-and-list/28#h-22-halo-7" rel="nofollow" target="_blank" class="linkify-word no-track-link">22° Halo</a>
</h3>
Это потому, что HTML-код оглавления может генерироваться после «автоматического создания ссылок»?"}
Да, скорее всего, дело именно в этом. Оба этих компонента работают на JavaScript, поэтому возникает состояние гонки, и результат будет зависеть от того, какой из них выполнится первым.
Я добавил класс в белый список HTML, чтобы обойти эту проблему.
Однако возможность исключить атрибуты для кнопки могла бы обеспечить большую гибкость для предотвращения автоматического создания ссылок на слова, используя встроенный HTML-атрибут data-(что-либо), который по умолчанию разрешён в Discourse.
Пример:
<span data-nolinkify> текст </span> → <span data-nolinkify> текст </span>
Был бы принят запрос на включение изменений (pull request), если мне удастся добавить это в компонент темы?
К сожалению, это препятствует созданию ссылок для слов, которые явно содержат любой из этих символов (особенно ., что удобно при ссылках на сокращения вроде ID.1 или id2.5).
Возможно, это лучше исправить в ядре, но на данный момент вот PR, который исправляет указанные выше проблемы:
https://github.com/discourse/discourse-linkify-words/pull/21
Пример правила регулярного выражения (будет соответствовать id1.1 до id10.100 (включая варианты id m.n, IDm.n и ID m.n)
/(ID¦id)\s?(([1-9]¦10)\.([1-9]¦[1-9][0-9]¦100))/, https://example.com/id$2

