Auto-Linkify Words

Linkify работает почти именно так, как мне нужно:

/TBI\s*\W?(\d*)/,https://tbi.example.com/tbi/$1/

Это покрывает «номера TBI», вводимые пользователями во множестве различных форм:

  • TBI 17
  • TBI-17
  • TBI17
  • TBI -17
  • TBI*17
  • и т. д.

Мне нравится такая гибкость.

К сожалению, это не обрабатывает канонический способ ввода этих номеров:

  • TBI #17

Кажется, что ничего не поможет правильно сопоставить символ # (хештег, решётка, знак номера, октопорп, знак решётки, фунт, символ крестиков-ноликов). Я пробовал

/TBI\s*#?(\d*)/,https://tbi.example.com/tbi/$1/
/TBI\s*\#?(\d*)/,https://tbi.example.com/tbi/$1/

естественно, но это не сработало; даже полный wildcard не помогает:

/TBI\s*.?(\d*)/,https://tbi.example.com/tbi/$1/

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

Это ожидаемое поведение или ошибка? Знает ли кто-нибудь способ обойти это?

Да, если вы просмотрите исходный код HTML, то увидите, что Discourse помещает всё, что начинается с хештега, в отдельный элемент span, что нарушает поток темы linkify. Боюсь, простого решения здесь нет, извините. :frowning: Придётся форкнуть тему и настроить её специально для этого случая, если только у кого-то нет лучшей идеи.

Этот плагин работает отлично, спасибо. Однако в сочетании с abrify он не функционирует.
Возможно ли, чтобы ссылка также работала с тегом , который добавляется этим плагином:
GitHub - metabrainz/discourse-abbrify-words: Discourse theme component for automatically adding <abbr> to abbreviations and acronyms · GitHub.

Полагаю, проблема в том, что плагин abbrify по умолчанию пропускает теги ссылок. Вы можете попробовать исправить это, изменив код: удалите строку 16 в head_tag.html

'a': 1,

Дайте знать, если это сработает или если вам понадобится дополнительная помощь. :slightly_smiling_face:

2 лайка

Похоже, всё работает, большое спасибо.

Кстати, есть ли разница, если правки вносятся только в шаблоны CSS/HTML, а не напрямую через GitHub?

Да, при обновлении компонента темы из GitHub нужно быть осторожным: это перезапишет ваши локальные изменения в CSS/HTML.

3 лайка

Спасибо, интересно, можно ли сделать то же самое, но добавить другой класс вместо атрибута abriffy, например dfn data-info или span aria-label или что-то подобное.

Например, чтобы работать с content: attr().

Да, безусловно. Вы можете поэкспериментировать с функцией createAbbr (или с соответствующей функцией в теме linkify)

1 лайк

Действительно хорошо. Мне нужно немного поиграть с этим.
Кажется, здесь открывается множество возможностей. Не знаете, как можно как-то использовать JSON и API в данном контексте?

Например, чтобы отображать слова из Ab riffy и другие данные на WordPress через API?

Я не совсем понимаю, что вы имеете в виду. Не могли бы вы конкретнее описать, чего вы пытаетесь достичь? Компоненты темы работают в Discourse, и для их использования в других местах нет API. Однако в большинстве случаев вы сможете использовать JavaScript-код, просто скопировав его в другое место и изменив части, специфичные для Discourse.

Есть ли способ исключить контент в oneboxes из автоматического создания ссылок?

1 лайк

Вы можете попробовать добавить тег <aside> в настройки пропускаемых тегов. Хотя я не уверен, что все onebox-блоки размещены внутри тега <aside>. Возможно, нам понадобится фильтр по имени класса.

@sam, есть ли у вас какие-либо мысли по этому поводу? :arrow_double_up: Это казалось бы разумным поведением по умолчанию (не создавать автоматические ссылки в onebox-блоках).

4 лайка

Настройка фильтра на основе классов звучит отлично, по умолчанию мы должны исключать один блок

7 лайков

Хорошо, я попробую отправить PR на следующей неделе.

2 лайка

Привет! Сегодня я успешно установил этот компонент темы для моей темы по умолчанию Light. Однако он у меня не работает.

Я пробовал использовать регулярные выражения и слова по умолчанию для автоматического создания ссылок (discourse и meta). Ни один из вариантов не помог.

У меня установлена версия v2.3.0.beta2 +256. Не могли бы вы подсказать, как отладить эту проблему? Заранее спасибо :slight_smile:

1 лайк

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

6 лайков

Ссылкообразование в однобоксах теперь должно быть отключено по умолчанию. @jrgong, пожалуйста, обновите вашу тему и проверьте это.

1 лайк

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

Идея: а что если настройка со всеми её строками превращается в редактируемое текстовое поле при двойном щелчке? Похоже на редакторы Изменить CSS/HTML? Это упростило бы создание резервных копий/экспорт, а также импорт списка элементов, где каждый элемент находится на отдельной строке.

До:

При двойном щелчке:

Кстати: вы можете увидеть там странное регулярное выражение, но в этих полях настроек нельзя использовать символ |. Возможно, это можно решить с помощью предложенного выше решения.

3 лайка

Привет снова, дружище! Как ты думаешь, можно ли превращать слова/ссылки (с помощью плагина linkify/abrify) в изображение (изображения)?

Скорее всего, это невозможно с текущим плагином, но не должно составить труда модифицировать плагин так, чтобы он генерировал теги <img> вместо <a>.

1 лайк