summaryrefslogtreecommitdiffstats
path: root/site/layouts/shortcodes/example.html
blob: c6dcddbe0d48675b2ea59002ff798120c11f0c91 (plain)
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
{{- /*
  Usage: `example args`

  `args` are all optional and can be one of the following:
    * id: the `div`'s id - default: ""
    * class: any extra class(es) to be added to the `div` - default: ""
    * lang: language used to display the code - default: "html"
    * show_markup: if the markup should be output in the HTML - default: `true`
    * show_preview: if the preview should be output in the HTML - default: `true`
    * stackblitz_add_js: if extra JS snippet should be added to StackBlitz - default: `false`
*/ -}}

{{- $id := .Get "id" -}}
{{- $class := .Get "class" -}}
{{- $lang := .Get "lang" | default "html" -}}
{{- $stackblitz_add_js := .Get "stackblitz_add_js" | default false -}}
{{- $show_markup := .Get "show_markup" | default true -}}
{{- $show_preview := .Get "show_preview" | default true -}}
{{- $input := .Inner -}}

<div class="bd-example-snippet bd-code-snippet">
  {{- if eq $show_preview true -}}
  <div{{ with $id }} id="{{ . }}"{{ end }} class="bd-example{{ with $class }} {{ . }}{{ end }}">
    {{- $input -}}
  </div>
  {{- end -}}

  {{- if eq $show_markup true -}}
    {{- if eq $show_preview true -}}
      <div class="d-flex align-items-center highlight-toolbar bg-light ps-3 pe-2 py-1">
        <small class="font-monospace text-muted text-uppercase">{{- $lang -}}</small>
        <div class="d-flex ms-auto">
          <button type="button" class="btn-edit text-nowrap"{{ with $stackblitz_add_js }} data-sb-js-snippet="{{ $stackblitz_add_js }}"{{ end }} title="Try it on StackBlitz">
            <svg class="bi" role="img" aria-label="Try it"><use xlink:href="#lightning-charge-fill"/></svg>
          </button>
          <button type="button" class="btn-clipboard mt-0 me-0" title="Copy to clipboard">
            <svg class="bi" role="img" aria-label="Copy"><use xlink:href="#clipboard"/></svg>
          </button>
        </div>
      </div>
    {{- end -}}

    {{- $content := replaceRE `<svg class="bd-placeholder-img(?:-lg)?(?: *?bd-placeholder-img-lg)? ?(.*?)".*?<\/svg>\n` `<img src="..." class="$1" alt="...">` $input -}}
    {{- $content = replaceRE ` (class=" *?")` "" $content -}}
    {{- highlight (trim $content "\n") $lang "" -}}
  {{- end -}}
</div>