Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shortcodes for tabbed panes: improvements (allow textual content) #1009

Merged
merged 1 commit into from
May 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assets/scss/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
@import "pageinfo";
@import "taxonomy";
@import "drawio";
@import "shortcodes";

@if $td-enable-google-fonts {
@import url($web-font-path);
Expand Down
2 changes: 2 additions & 0 deletions assets/scss/shortcodes.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@import "shortcodes/tabbed-pane.scss";
@import "shortcodes/cards-pane.scss";
19 changes: 19 additions & 0 deletions assets/scss/shortcodes/cards-pane.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
.card-deck {
max-width: 83%;
}
.card {
max-width: 80%;
.highlight {
border: none;
}
}
.card-body.code {
background-color: #f8f9fa;
padding: 0 0 0 1ex;
}
.card-body {
pre {
margin: 0;
padding: 0 1rem 1rem 1rem;
}
}
39 changes: 39 additions & 0 deletions assets/scss/shortcodes/tabbed-pane.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
.td-content {
.highlight {
margin: 0rem 0 2rem 0;
}
}
.tab-content {
.tab-pane {
.highlight {
border: none;
max-width: 100%;
}
pre {
border-left: 1px solid rgba(0, 0, 0, 0.125);
border-right: 1px solid rgba(0, 0, 0, 0.125);
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
}
margin: 0rem;
max-width: 80%;
border-left: none;
border-right: none;
border-bottom: none;
}
}

.tab-body {
font-weight: $font-weight-medium;
background: $gray-100;
color: inherit;
border-radius: 0;
padding: 1.5rem;

@each $color, $value in $theme-colors {
&-#{$color} {

border-style: solid;
border-color: $value;
}
}
}
33 changes: 22 additions & 11 deletions layouts/shortcodes/tab.html
Original file line number Diff line number Diff line change
@@ -1,28 +1,39 @@
<!-- Make sure that we are enclosed within a tabpane shortcode block -->
{{ with $.Parent }}
{{- if ne $.Parent.Name "tabpane" -}}
{{- errorf "tab must be used within a tabpane block" -}}
{{- end -}}
{{- if ne $.Parent.Name "tabpane" -}}
{{- errorf "shortcode 'tab' must be used within a 'tabpane' block" -}}
{{- end -}}
{{- end -}}

<!-- Prefill header if not given as parameter -->
{{ $header := default (printf "Tab %v" ( add $.Ordinal 1)) (.Get "header") }}
{{ $header := "Tab" }}
{{ if and (not .IsNamedParams) (.Get 0) }}
{{ $header = (.Get 0) }}
{{ else }}
<!-- Prefill header if not given as named or unnamed parameter -->
{{ $header = default (printf "Tab %v" ( add $.Ordinal 1)) (.Get "header") }}
{{ end }}

<!-- store all tab info in dict tab -->
{{ $tab := dict "header" $header }}
{{ with $.Get "lang" }}
{{ $tab = merge $tab (dict "language" ($.Get "lang")) }}
{{ $tab = merge $tab (dict "language" ($.Get "lang")) }}
{{ end }}
{{ with $.Get "highlight" }}
{{ $tab = merge $tab (dict "highlight" ($.Get "highlight")) }}
{{ $tab = merge $tab (dict "highlight" ($.Get "highlight")) }}
{{ end }}
{{ with $.Get "code" }}
{{ $tab = merge $tab (dict "code" ($.Get "code")) }}
{{ end }}
{{ with $.Get "disabled" }}
{{ $tab = merge $tab (dict "disabled" ($.Get "disabled")) }}
{{ end }}
{{ with $.Inner }}
<!-- Trim any leading and trailing newlines from .Inner, this avoids
spurious lines during syntax highlighting -->
{{ $tab = merge $tab (dict "content" (trim $.Inner "\n")) }}
<!-- Trim any leading and trailing newlines from .Inner, this avoids
spurious lines during syntax highlighting -->
{{ $tab = merge $tab (dict "content" $.Inner ) }}
{{ end }}

<!-- add dict tab to parent's scratchpad -->
{{ with .Parent }}
{{- $.Parent.Scratch.SetInMap "tabs" (printf "%v" $.Ordinal) $tab -}}
{{- $.Parent.Scratch.SetInMap "tabs" (printf "%v" $.Ordinal) $tab -}}
{{ end }}
113 changes: 95 additions & 18 deletions layouts/shortcodes/tabpane.html
Original file line number Diff line number Diff line change
@@ -1,46 +1,123 @@
<!-- Scratchpad gets populated through call to .Inner -->
<!-- Check parameter types -->
{{ with .Get "langEqualsHeader" }}
{{ if ne ( printf "%T" . ) "bool" }}
{{- errorf "shortcode tabpane: parameter 'langEqualsHeader' must be either true or false" -}}
{{ end }}
{{ end }}

{{ with .Get "code" }}
{{ if ne ( printf "%T" . ) "bool" }}
{{- errorf "shortcode tabpane: parameter 'code' must be either true or false" -}}
{{ end }}
{{ end }}

{{ with .Get "persistLang" }}
{{ if ne ( printf "%T" . ) "bool" }}
{{- errorf "shortcode tabpane: parameter 'persistLang' must be either true or false" -}}
{{ end }}
{{ end }}

<!-- Set values given defined within tabpane -->
{{- $langPane := default "" ($.Get "lang") -}}
{{- $hloptionsPane := default "" ($.Get "highlight") -}}
{{- $codePane := default true ($.Get "code") -}}
{{- $langEqualsHeader := default false ($.Get "langEqualsHeader") -}}
{{- $persistLang := default true ($.Get "persistLang") -}}
{{- $disabled := false -}}
{{- $activeSet := false -}}

<!-- Scratchpad gets populated through call to .Inner -->
{{- .Inner -}}

<ul class="nav nav-tabs" id="tabs-{{- $.Ordinal -}}" role="tablist">
{{- range $index, $element := $.Scratch.Get "tabs" -}}

{{- $lang := $langPane -}}
{{- if $langEqualsHeader -}}
{{- $lang = $element.header -}}
{{end}}
{{- with $element.language -}}
{{- $lang = $element.language -}}
{{- end -}}

{{- $disabled := false -}}
{{- with $element.disabled -}}
{{ if ne ( printf "%T" . ) "bool" }}
{{- errorf "shortcode tab: parameter 'disabled' must be either true or false" -}}
{{ end }}
{{- $disabled = . }}
{{- end -}}

<!-- Replace space and +, not valid for css selectors -->
{{- $lang := replaceRE "[\\s+]" "-" $lang -}}

<li class="nav-item">
<!-- Generate the IDs for the <a> and the <div> elements -->
{{- $tabid := printf "tabs-%v-%v-tab" $.Ordinal $index | anchorize -}}
{{- $entryid := printf "tabs-%v-%v" $.Ordinal $index | anchorize -}}
<!-- Replace space and + from tabname to set class -->
{{- $tabname := replaceRE "(\\s)" "-" $element.header -}}
{{- $tabname := replaceRE "(\\+)" "-" $tabname -}}
<a class="nav-link{{ if eq $index "0" }} active{{ end }} tab-{{ $tabname }}"
id="{{ $tabid }}" data-toggle="tab" href="#{{ $entryid }}" role="tab" onclick="handleClick({{ $tabname }});"
aria-controls="{{ $entryid }}" aria-selected="{{- cond (eq $index "0") "true" "false" -}}">
{{ index . "header" }}

<a class="nav-link{{ if and ( not $activeSet ) ( not $disabled ) }} active{{ end }}{{ if eq $disabled true }} disabled{{ end }}{{ if ne $lang "" }}{{ if $persistLang }} persistLang-{{- $lang -}}{{ end }}{{ end }}"
id="{{- $tabid -}}" data-toggle="tab" href="#{{ $entryid }}" role="tab"
{{ if ne $lang "" }}{{- if $persistLang -}}onclick="persistLang({{- $lang -}});"{{end}}{{end}}
aria-controls="{{- $entryid -}}" aria-selected="{{- cond (eq $index "0") "true" "false" -}}">
{{- index . "header" | markdownify -}}
</a>
</li>

{{ if not $disabled }}
{{ $activeSet = true }}
{{ end }}

{{- end -}}
</ul>

{{ $activeSet = false }}

<!-- Inner content -->
<div class="tab-content" id="tabs-{{- $.Ordinal -}}-content">
{{- range $index, $element := $.Scratch.Get "tabs" -}}

{{- $lang := default $.Site.Language.Lang ($.Get "lang") -}}
{{with $.Get "langEqualsHeader"}}
{{ if $.Get "langEqualsHeader"}}
{{ $lang = $element.header }}
{{end}}
{{- $lang := $langPane -}}
{{- if $langEqualsHeader -}}
{{- $lang = $element.header -}}
{{end}}
{{- $hloptions := default "" ($.Get "highlight") -}}
{{- with $element.language -}}
{{ $lang = $element.language }}
{{- $lang = $element.language -}}
{{- end -}}

{{- $disabled := false -}}
{{- with $element.disabled -}}
{{- $disabled = . }}
{{- end -}}

{{- $hloptions := $hloptionsPane -}}
{{- with $element.highlight -}}
{{ $hloptions = $element.highlight }}
{{- $hloptions = $element.highlight -}}
{{- end -}}

{{- $code := $codePane -}}
{{- with $element.code -}}
{{ if ne ( printf "%T" . ) "bool" }}
{{- errorf "shortcode tab: parameter 'code' must be either true or false" -}}
{{ end }}
{{- $code = . }}
{{- end -}}

{{- $tabid := printf "tabs-%v-%v-tab" $.Ordinal $index | anchorize -}}
{{- $entryid := printf "tabs-%v-%v" $.Ordinal $index | anchorize -}}
<div class="tab-pane fade{{ if eq $index "0" }} show active{{ end }}"

<div class="{{ if not $code }}tab-body {{end}}tab-pane fade{{ if and ( not $activeSet ) ( not $disabled ) }} show active{{ end }}"
id="{{ $entryid }}" role="tabpanel" aria-labelled-by="{{ $tabid }}">
{{- highlight (index . "content") $lang $hloptions -}}
{{ if $code }}
{{- highlight (trim (index . "content") "\n") $lang $hloptions -}}
{{- else -}}
{{- index . "content" -}}
{{- end -}}
</div>

{{ if not $disabled }}
{{ $activeSet = true }}
{{ end }}

{{ end }}
</div>
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@
"bootstrap": "^4.6.1"
},
"devDependencies": {
"hugo-extended": "0.98.0"
"hugo-extended": "0.99.1"
}
}
2 changes: 0 additions & 2 deletions static/css/shortcodes.css

This file was deleted.

21 changes: 0 additions & 21 deletions static/css/shortcodes/cards-pane.css

This file was deleted.

18 changes: 0 additions & 18 deletions static/css/shortcodes/tabbed-pane.css

This file was deleted.

6 changes: 3 additions & 3 deletions static/js/tabpane-persist.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ if (typeof Storage !== 'undefined') {
const activeLanguage = localStorage.getItem('active_language');
if (activeLanguage) {
document
.querySelectorAll('.tab-' + activeLanguage)
.querySelectorAll('.persistLang-' + activeLanguage)
.forEach((element) => {
$('#' + element.id).tab('show');
});
}
}
function handleClick(language) {
function persistLang(language) {
if (typeof Storage !== 'undefined') {
localStorage.setItem('active_language', language);
document.querySelectorAll('.tab-' + language)
document.querySelectorAll('.persistLang-' + language)
.forEach((element) => {
$('#' + element.id).tab('show');
});
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading