| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- {{/* Check parameter types */ -}}
- {{ $tpPersistAttrName := "data-td-tp-persist" -}}
- {{ with .Get "langEqualsHeader" -}}
- {{ if ne ( printf "%T" . ) "bool" -}}
- {{ errorf "Shortcode %q: boolean value expected for parameter %q, but got %s. Error position: %s" $.Name "langEqualsHeader" (printf "%T" .) $.Position -}}
- {{ end -}}
- {{ end -}}
- {{ with .Get "text" -}}
- {{ if ne ( printf "%T" . ) "bool" -}}
- {{ errorf "Shortcode %q: boolean value expected for parameter %q, but got %s. Error position: %s" $.Name "text" (printf "%T" .) $.Position -}}
- {{ end -}}
- {{ end -}}
- {{ $_persistLang := .Get "persistLang" -}}
- {{ if and (ne $_persistLang nil) (ne $_persistLang "") -}}
- {{ if ne ( printf "%T" $_persistLang ) "bool" -}}
- {{ errorf "Shortcode %q: boolean value expected for parameter %q, but got %s. Error position: %s" $.Name "persistLang" (printf "%T" $_persistLang) $.Position -}}
- {{ else -}}
- {{ warnf "Shortcode %q parameter `persistLang` is deprecated, use `persist` instead: %s" $.Name $.Position -}}
- {{ end -}}
- {{ end -}}
- {{ $_persist := .Get "persist" -}}
- {{ with $_persist -}}
- {{ $matched := findRE "^(header|lang|disabled)$" . -}}
- {{ if not $matched -}}
- {{ errorf "Shortcode %q: parameter %q should be one of 'header', 'lang', or 'disabled'; but got %s. Error position: %s" $.Name "persist" $_persist $.Position -}}
- {{ end -}}
- {{ end -}}
- {{ with .Get "right" -}}
- {{ if ne ( printf "%T" . ) "bool" -}}
- {{ errorf "Shortcode %q: boolean value expected for parameter %q, but got %s. Error position: %s" $.Name "right" (printf "%T" .) $.Position -}}
- {{ end -}}
- {{ end -}}
- {{/* Set values given defined within tabpane */ -}}
- {{ $langPane := default "" ($.Get "lang") -}}
- {{ $hloptionsPane := default "" ($.Get "highlight") -}}
- {{ $textPane := default false ($.Get "text") -}}
- {{ $langEqualsHeader := default false ($.Get "langEqualsHeader") -}}
- {{ $deprecatedPersistLang := $_persistLang | default true -}}
- {{ $persistKeyKind := $_persist
- | default (cond (or $textPane (ne "" $langPane)) "header" "lang") -}}
- {{ $persistTabpane := and $deprecatedPersistLang (ne $persistKeyKind "disabled") -}}
- {{ $rightPane := default false ($.Get "right") -}}
- {{ $activeSet := false -}}
- {{/* Scratchpad gets populated through call to .Inner */ -}}
- {{ .Inner -}}
- {{ $duplicate := false -}}
- {{ $duplicateKey := "" -}}
- {{ $persistKeyList := slice -}}
- {{ $tabPaneOrdinal := .Ordinal -}}
- {{/* Nav tabs */ -}}
- <ul class="nav nav-tabs{{ if $rightPane }} justify-content-end{{ end }}" id="tabs-{{- $tabPaneOrdinal -}}" role="tablist">
- {{ range $index, $element := $.Scratch.Get "tabs" -}}
- {{ $enabled := not $element.disabled -}}
- {{ $lang := $langPane -}}
- {{ if $langEqualsHeader -}}
- {{ $lang = $element.header -}}
- {{ end -}}
- {{ with $element.language -}}
- {{ $lang = . -}}
- {{ end -}}
- {{ $persistKey := "" -}}
- {{ if eq $persistKeyKind "lang" -}}
- {{ with $lang -}}
- {{ $persistKey = . -}}
- {{ else -}}
- {{ with findRE "```(\\S+)" $element.content 1 -}}
- {{ $persistKey = index . 1 -}}
- {{ end -}}
- {{ end -}}
- {{ else if eq $persistKeyKind "header" -}}
- {{ $persistKey = $element.header -}}
- {{ end -}}
- {{ $persistKey = $persistKey | lower -}}
- {{ $persistTab := and $persistTabpane $persistKey $enabled -}}
- {{/* Check for duplicate tab-persistence keys */ -}}
- {{ if $persistTab -}}
- {{ if in $persistKeyList $persistKey -}}
- {{ $duplicate = true -}}
- {{ $duplicateKey = $persistKey -}}
- {{ $persistTab = false -}}
- {{ else -}}
- {{ $persistKeyList = $persistKeyList | append $persistKey -}}
- {{ end -}}
- {{ end -}}
- {{ $rightpush := false -}}
- {{ with $element.rightpush -}}
- {{ $rightpush = . -}}
- {{ end -}}
- <li class="nav-item{{ if $rightpush }} ms-auto{{ end -}}">
- {{/* Generate the IDs for the <a> and the <div> elements */ -}}
- {{ $tabid := printf "tabs-%02v-%v-tab" $tabPaneOrdinal $index | anchorize -}}
- {{ $entryid := printf "tabs-%02v-%v" $tabPaneOrdinal $index | anchorize -}}
- {{ $isActive := and $enabled (not $activeSet) -}}
- <button class="nav-link
- {{- if $isActive -}}
- {{ $activeSet = true }} active
- {{- end -}}
- {{ if not $enabled }} disabled{{ end -}}"
- id="{{ $tabid }}" data-bs-toggle="tab" data-bs-target="#{{ $entryid }}" role="tab"
- {{ if $persistTab -}}
- {{ printf "%s=%q " $tpPersistAttrName $persistKey | safeHTMLAttr -}}
- {{ end -}}
- aria-controls="{{- $entryid -}}" aria-selected="{{ $isActive }}">
- {{ index . "header" | markdownify }}
- </button>
- </li>
- {{- end }}
- </ul>
- {{ if $duplicate -}}
- {{ warnf "Shortcode %q: duplicate tab-persistence key %q detected, disabling persistence to avoid multiple tab display. Position: %s" $.Name $duplicateKey $.Position -}}
- {{ end -}}
- {{ $activeSet = false -}}
- {{/* Tab panes */ -}}
- <div class="tab-content" id="tabs-{{ $tabPaneOrdinal }}-content">
- {{- range $index, $element := $.Scratch.Get "tabs" -}}
- {{ $lang := $langPane -}}
- {{ if $langEqualsHeader -}}
- {{ $lang = $element.header -}}
- {{ end -}}
- {{ with $element.language -}}
- {{ $lang = . -}}
- {{ end -}}
- {{ $enabled := not $element.disabled -}}
- {{ $hloptions := $hloptionsPane -}}
- {{ with $element.highlight -}}
- {{ $hloptions = . -}}
- {{ end -}}
- {{ $text := $textPane -}}
- {{ with $element.text -}}
- {{ $text = . }}
- {{ end -}}
- {{ $tabid := printf "tabs-%02v-%v-tab" $tabPaneOrdinal $index | anchorize -}}
- {{ $entryid := printf "tabs-%02v-%v" $tabPaneOrdinal $index | anchorize }}
- {{ $isActive := and $enabled (not $activeSet) -}}
- <div class="{{ if $text }}tab-body {{end}}tab-pane fade
- {{- if $isActive -}}
- {{ $activeSet = true }} show active
- {{- end }}"
- id="{{ $entryid }}" role="tabpanel" aria-labelled-by="{{ $tabid }}" tabindex="{{ $tabPaneOrdinal }}">
- {{ if $text -}}
- {{ index . "content" -}}
- {{ else -}}
- {{ highlight (trim (index . "content") "\r\n") $lang $hloptions -}}
- {{ end }}
- </div>
- {{- end }}
- </div>
|