aboutsummaryrefslogtreecommitdiff
path: root/layouts/shortcodes/details.html
blob: ca524f7a4a5e160d8b3821d8ddc89f56cdf14373 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

{{- /*
Renders an HTML details element.

@param {string} [class] The value of the element's class attribute.
@param {string} [name] The value of the element's name attribute.
@param {string} [summary] The content of the child summary element.
@param {string} [title] The value of the element's title attribute.
@param {bool} [open=false] Whether to initially display the content of the details element.

@reference https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details

@examples

  {{< details >}}
  A basic collapsible section.
  {{< /details >}}

  {{< details summary="Custom Summary Text" >}}
  Showing custom `summary` text.
  {{< /details >}}

  {{< details summary="Open Details" open=true >}}
  Contents displayed initially by using `open`.
  {{< /details >}}

  {{< details summary="Styled Content" class="my-custom-class" >}}
  Content can be styled with CSS by specifying a `class`.

  Target details element:

  ```css
  details.my-custom-class { }
  ```

  Target summary element:

  ```css
  details.my-custom-class > summary > * { }
  ```

  Target inner content:

  ```css
  details.my-custom-class > :not(summary) { }
  ```
  {{< /details >}}

  {{< details summary="Grouped Details" name="my-details" >}}
  Specifying a `name` allows elements to be connected, with only one able to be open at a time.
  {{< /details >}}

*/}}

{{- /* Get arguments. */}}
{{- $class := or (.Get "class") "" }}
{{- $name := or (.Get "name") "" }}
{{- $summary := or (.Get "summary") "Details" }}
{{- $title := or (.Get "title") "" }}
{{- $open := false }}
{{- if in (slice "false" false 0) (.Get "open") }}
  {{- $open = false }}
{{- else if in (slice "true" true 1) (.Get "open") }}
  {{- $open = true }}
{{- end }}

{{- /* Render. */}}
<details
  {{- with $class }} class="{{ . }}" {{- end }}
  {{- with $name }} name="{{ . }}" {{- end }}
  {{- with $open }} open {{- end }}
  {{- with $title }} title="{{ . }}" {{- end -}}
>
  <summary>{{ $summary | .Page.RenderString }}</summary>
  {{ .Inner | .Page.RenderString (dict "display" "block") -}}
</details>