commit 7ede00c0aec0123121b227d49634e9faa58e08c7 from: Anton Kasimov date: Mon Feb 23 21:50:26 2026 UTC Наработки по безопасным ссылкам. commit - 1f96f0c8bf727e636246cfd8122e84b4b302e018 commit + 7ede00c0aec0123121b227d49634e9faa58e08c7 blob - ef81a50ef59156ae9ff33c71eca798692076ce57 blob + 31cf3f50f05c461adf400c4bc7a275beceb12464 --- README.md +++ README.md @@ -7,6 +7,19 @@ _merge = 'deep' ``` +## Параметры +Все используемые параметры должны содержаться в настройках сайта в .Params.radium + +publisher +: ссылка на профиль публикатора для элементов JSON-LD. +external_rel +: rel по умолчанию для абсолютных ссылок. + +## render hooks +### render-link +Вставляет ссылку с разрешённым назначением ссылки. +Для абсолютных ссылок указывает rel из настроек сайта или значение по умолчанию `noopener noreferrer external`. + ## Шаблоны ### baseof Базовый шаблон, включающий индексирование Pagefind только для main тега. @@ -17,6 +30,11 @@ _merge = 'deep' ## Partials +### element +Создаёт HTML элемент, с именем тэга = .tag, атрибутами = .attributes, содержимым .inner. + +Если тэг не установлен, то проставляется значение по умолчанию `tag`. + ### image Отображает изображение, передаваемое в .image. .image должен быть ресурсом, полученным через .Resources.Get* или resources.Get*. @@ -67,10 +85,18 @@ _merge = 'deep' ``` #### Статья -Для указания publisher в статье укажите publisher в Params страницы, либо в настройках сайта в site.Params.radium.publisher +Для указания publisher в статье укажите publisher в Params страницы, либо в настройках сайта. ## Shortcodes ### details Корректный details, позволяющий рендерить html. Аналогично [стандартному](https://gohugo.io/shortcodes/details/#article) shortcode, за исключением способа вызова — необходимо использовать вызов {{% details %}} для рендера внутреннего текста в качестве Markdown. + +### a +Создаёт ссылку с атрибутами href, class, id, rel. + +Полезно для установки rel. + +Вызывает partial/element. +Если необходимы другие атрибуты, то переопределите этот shortcode. blob - /dev/null blob + 51f2deee8d2dede3520ed4b14f73c618e8924087 (mode 644) --- /dev/null +++ layouts/_partials/element.html @@ -0,0 +1,9 @@ +{{- $tag := default "div" .tag -}} +{{- $attrs := "" -}} +{{- with .attributes -}} + {{- range $k, $v := . -}} + {{- $attrs = printf `%s %s=%q` $attrs $k $v -}} + {{- end -}} +{{- end -}} + +{{- printf "<%s%s>%s" $tag $attrs (default "" .inner) $tag | safeHTML -}} blob - /dev/null blob + 0b2e9363e52a65a20fd412838e2e108cefacb55a (mode 644) --- /dev/null +++ layouts/_markup/render-link.html @@ -0,0 +1,32 @@ +{{- $p := .Page -}} +{{- with .PageInner -}}{{- $p = . -}}{{- end -}} + +{{- $href := .Destination -}} + +{{- with $p.GetPage $href -}} + {{- $href = .RelPermalink -}} +{{- else -}} + {{- with $p.Resources.Get $href -}} + {{- $href = .RelPermalink -}} + {{- else -}} + {{- with resources.Get $href -}} + {{- $href = .RelPermalink -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- $rel := "" -}} +{{- if (urls.Parse $href).IsAbs }} + {{- if isset (default (dict) site.Params.radium) "external_rel" -}} + {{- $rel = site.Params.radium.external_rel -}} + {{- else -}} + {{- $rel = "noopener noreferrer external" -}} + {{- end -}} +{{- end -}} + + + {{ .Text }} + blob - /dev/null blob + 5676ce2443a0c996549fa63f508a44195ca86e2d (mode 644) --- /dev/null +++ layouts/_shortcodes/a.html @@ -0,0 +1,26 @@ +{{- $allowed := slice + "href" + "title" + "rel" + "target" + "class" + "id" + "download" + "referrerpolicy" + "hreflang" + "type" + "role" + "tabindex" + "aria-label" + "aria-current" + "aria-describedby" +-}} +{{- $attributes := dict -}} +{{- range $allowed -}} + {{- $value := $.Get . -}} + {{- if $value -}} + {{- $attributes = merge $attributes (dict . $value) -}} + {{- end -}} +{{- end -}} + +{{- partial "element.html" (dict "tag" "a" "inner" .Inner "attributes" $attributes) -}}