Как форматировать внешние ссылки во время сборки? - PullRequest
1 голос
/ 29 июня 2019

У меня есть сайт Hugo с некоторыми JavaScript и Gulp.
Я хотел бы автоматически обнаруживать и форматировать <a> ссылки, чтобы добавить значок "external link" и "target = _blank".

Сейчас я делаю это в клиентском браузере с некоторым JavaScript:

// EXTERNAL LINKS
$(document.links).filter(function() {
  return this.hostname != window.location.hostname
      && this.hostname != "domain-name-base-url.com"
      && this.hostname != "another-domain-name-base-url-to-be-treated-as-internal.com"
}).attr('target', '_blank').addClass("external");

Но я хотел бы сделать это во время сборки из соображений производительности.

Как я могу перенести это в задачу после сборки?Я попробовал кое-что с .pipe(replace...), но не смог этого сделать.Могу ли я сделать это даже во время сборки Hugo?

Если кто-нибудь знает еще более простой способ добиться этого (разрешите пользователю печатать в Markdown, забывая о том, является ли ссылка внешней или нет, и добавляя `target = _blank"и значок во время сборки) ... какая-нибудь волшебная библиотека или лучшая практика?

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Обновление: Вы также можете сделать это в своих шаблонах, используя функцию replace, чтобы добавить этот атрибут ко всем элементам привязки:

{{ $content := replace .Content "<a " "<a target=\"_blank\" " | safeHTML }}
{{ $content }}

Вы можете настроить Blackfriday, процессор уценки Hugo, для открытия ссылок на новой вкладке, добавив его в конец файла config.toml:

[blackfriday]
  hrefTargetBlank = true

Из опций Черная пятница документы:

hrefTargetBlank

по умолчанию: false
Флаг Черной пятницы: HTML_HREF_TARGET_BLANK
Цель: true открывает (внешние ссылки) абсолютные ссылки в новом окне или вкладке. Хотя атрибут target="_blank" обычно используется для внешних ссылок, Blackfriday делает это для всех абсолютных ссылок ( ref ). Об этом следует помнить, если они используют абсолютные ссылки повсюду, в том числе и для внутренних ссылок (например, установив canonifyURLs в true или через absURL).

0 голосов
/ 29 июня 2019

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

С Markdown 2.5.2 вы можете использовать следующий синтаксис

[link](url){:target="_blank"}

Если это не сработает, просто используйте обычный HTML

<a href="http://example.com/" target="_blank">Hello, world!</a>

Более подробную информацию о внутренних и внешних ссылках в Hugo можно найти здесь .

...