Auto-Linkify Words

@danekhollas

К сожалению, проблема всё ещё сохраняется. Я пробовал изменить порядок регулярных выражений в настройках темы, но всё равно сначала срабатывает запись «короткая».

Привет @jrgong! Удалось ли тебе выполнить массовую загрузку через CSV-файл? Пытаюсь разобраться, но не совсем понимаю, куда нажимать. К слову, я не разработчик :smiley:

Я использую это :slight_smile:

https://meta.discourse.org/t/discourse-linkify-google-sheets/163985/4

У нас тоже. Я отмечаю, что:

discourse,https://discourse.org
discourse meta,https://meta.discourse.org
meta discourse,https://meta.discourse.org

даёт нам:

discourse
discourse meta
meta discourse

Порядок, в котором они указаны в настройках темы (и, вероятно, в базе данных под ними), кажется, не имеет значения. Скорее, если вы расширяете уже существующее слово с гиперссылкой, он улавливает разницу. Если же вы добавляете слово перед ним, этого не происходит.

1 лайк

Хм, это немного странно. Вы правы, порядок в настройках не должен иметь значения, так как мы сортируем слова по длине:

Не уверен, сколько времени стоит уделять этому, поскольку, насколько мне известно, эта функция переносится в ядро Discourse.

4 лайка

Привет,

Заметил, что у слов, превращённых в ссылки, нет счётчика кликов, как у других ссылок (что, на мой взгляд, было бы приятной функцией). Это сделано намеренно или это баг?

2 лайка

Можно ли ограничить это конкретными категориями/тегами, чтобы ссылка генерировалась только для постов, входящих в определённую категорию или имеющих соответствующий тег?

1 лайк

Можно ли указать заголовок для ссылки? Например, чтобы «ghost» превратился в «ghost (см. предупреждение!)»?

Возможно, используя синтаксис markdown-ссылок:

ghost,[ghost (см. предупреждение!)](https://warning.example.com)

Или указав заголовок как третий параметр:

ghost,https://warning.example.com,ghost (см. предупреждение!)

@Paracelsus счетчик кликов в этой теме не поддерживается, извините.

Это не совсем ошибка: тема — это лишь JavaScript-код, работающий в вашем браузере. Он не взаимодействует с сервером, поэтому нет способа сохранить количество кликов.

2 лайка

Теперь в Discourse в разделе замены слов:
/admin/customize/watched_words/action/replace

Если просто ввести слово, а затем вставить URL без какого-либо markdown, всё работает! Именно так можно добиться работы без компонента темы autolink.

(В то время как в компоненте темы вы указываете слово/фразу, затем запятую и ссылку, которую нужно использовать, в разделе замены наблюдаемых слов вы вводите слово в одно поле, а ТОЛЬКО ссылку — в другое… не пытайтесь вводить markdown в строку замены, как я изначально пытался сделать.)

4 лайка

Привет, это отличный компонент! Спасибо за то, что его создали.

Но есть небольшая проблема: похоже, что автоматическая расстановка ссылок требует пробела после конкретного слова, поэтому компонент плохо работает на китайском и японском (возможно, также на корейском? Я не знаю этот язык) экземплярах Discourse.

Я носитель китайского языка и также говорю по-японски. В китайском языке люди иногда используют некоторые заимствованные слова в тексте, например, Apple, Office, BB (Blackboard), DNA и т. д., перевод которых в разговорной речи используется довольно редко. И обычно мы не ставим пробелы до/после таких слов, когда они окружены китайскими иероглифами, в неформальной письменной речи.

Вот пример:

你会用Office吗?
Ты умеешь пользоваться пакетом Office?

В японском языке ситуация похожа.

革新に満ちたAppleの世界へようこそ。(скопировано с официального сайта Apple Japan)
Добро пожаловать в мир Apple, полный революционных изменений.

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

2 лайка

Это работает отлично. Можно ли запустить это ретроспективно, или нужно вручную проверить все ссылки и изменить их?

Вы должны иметь возможность пересобрать эти сообщения. Вы можете нажать на ключ и пересобрать HTML. Когда вы увидите, что это работает, вы сможете поискать, как запустить задачу rake для пересборки соответствующих сообщений.

На самом деле, эта тема динамически превращает ссылки в гиперссылки в постах при их загрузке в браузере, так что ничего делать не нужно. :slight_smile:

3 лайка

О. Очень круто. Я не знал об этом, но это логично.

3 лайка

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

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

Поэтому я сделал гиперссылку на «Глоссарий Gramps», ведущую к соответствующей статье в нашем вики-сайте на базе MediaWiki. Теперь я использую аннотацию вроде «(см. [термин глоссария] в Глоссарии Gramps)».

(У нас есть ещё один Генеалогический глоссарий для терминологии, которая является общей для темы генеалогии, а не специфичной для нашего программного обеспечения.)

1 лайк

Что-то было сделано для разрешения использования пайпов?

В данный момент я использую это как обходное решение:
image


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

Итак, это не сработало:
image

Вот пример проблемы, с которой я столкнулся. Это часть текста внутри темы документации.

Если я нажму на 22° halo, откроется страница, ведущая к… той же странице, в том же месте.
Я могу исключить слова в заголовках, особенно потому что они содержат оглавление, но следующие абзацы не имеют никакого специального класса. Это обычные абзацы.


Может быть, настройка исключённого класса могла бы принимать CSS-селекторы?
Например, d-toc-cooked > *


edit: Также я не понимаю, почему это не работает, так как моё слово является прямым потомком исключённого класса:

image

«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-код оглавления может генерироваться после «автоматического создания ссылок»?"}

1 лайк

Да, скорее всего, дело именно в этом. Оба этих компонента работают на JavaScript, поэтому возникает состояние гонки, и результат будет зависеть от того, какой из них выполнится первым.

4 лайка

Я добавил класс в белый список HTML, чтобы обойти эту проблему.

Однако возможность исключить атрибуты для кнопки могла бы обеспечить большую гибкость для предотвращения автоматического создания ссылок на слова, используя встроенный HTML-атрибут data-(что-либо), который по умолчанию разрешён в Discourse.

Пример:
<span data-nolinkify> текст </span><span data-nolinkify> текст </span>

Был бы принят запрос на включение изменений (pull request), если мне удастся добавить это в компонент темы?

1 лайк

К сожалению, это препятствует созданию ссылок для слов, которые явно содержат любой из этих символов (особенно ., что удобно при ссылках на сокращения вроде 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