mirror of
https://github.com/tiennm99/HugoBlox-kit.git
synced 2026-10-14 12:16:19 +00:00
templates: migrate Research Group template from v1 to v2 blocks (#2914)
This commit is contained in:
1 parent
9ea080c354
commit
a4e5661b88
22 files changed
+410
-267
No files matched your search
@@ -0,0 +1,24 @@
|
||||
{{/* Uniform 'sort_by' parameter between built-in Hugo and Wowchemy ones */}}
|
||||
{{/* Input: 'sort_by' parameter (string) */}}
|
||||
{{/* Output: fixed 'sort_by' parameter (string) */}}
|
||||
|
||||
{{/*
|
||||
Fix the 'sort_by' parameter, by adding "Params." as prefix if it is not a built-in Hugo parameter.
|
||||
Since Wowchemy parameters are all standardised to lowercase-underscore convention, we:
|
||||
- remove any leading ".": ".Date" is the same as "Date"
|
||||
- check the first letter:
|
||||
- if it is capitalized, then we have a built-in Hugo parameter, and we do nothing
|
||||
- otherwise, it is a custom Wowchemy parameter, and we add "Params." as prefix
|
||||
This logic should also be backward compatible, since "Params.my_param" is not modified.
|
||||
*/}}
|
||||
|
||||
{{ $param := strings.TrimLeft "." . }}
|
||||
{{/* Get first letter */}}
|
||||
{{ $first := substr $param 0 }}
|
||||
{{/* Check if it is lowercase */}}
|
||||
{{ if eq $first (lower $first) }}
|
||||
{{/* Add 'Params.' prefix */}}
|
||||
{{ $param = printf "Params.%s" $param }}
|
||||
{{ end }}
|
||||
|
||||
{{ return $param }}
|
||||
@@ -63,6 +63,7 @@
|
||||
|
||||
{{/* Sort */}}
|
||||
{{ $sort_by := $block.content.sort_by | default "Date" }}
|
||||
{{ $sort_by = partial "functions/get_sort_by_parameter" $sort_by }}
|
||||
{{ $sort_ascending := $block.content.sort_ascending | default (eq $block.content.order "asc") | default false }}
|
||||
{{ $sort_order := cond $sort_ascending "asc" "desc" }}
|
||||
{{ $query = sort $query $sort_by $sort_order }}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
{{ end }}
|
||||
|
||||
<div class="col-12 {{if eq $columns "2"}}col-lg-8{{end}}">
|
||||
{{ with $block.content.text }}{{ . | emojify | $page.RenderString }}{{ end }}
|
||||
{{ with $block.content.text }}<p>{{ . | emojify | $page.RenderString }}</p>{{ end }}
|
||||
|
||||
{{ if $use_form }}
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
{{/* Wowchemy Blocks: People */}}
|
||||
{{/* Documentation: https://wowchemy.com/blocks/ */}}
|
||||
{{/* License: https://github.com/wowchemy/wowchemy-hugo-themes/blob/main/LICENSE.md */}}
|
||||
|
||||
{{/* Initialise */}}
|
||||
{{ $page := .wcPage }}
|
||||
{{ $block := .wcBlock }}
|
||||
{{ $show_social := $block.design.show_social | default false }}
|
||||
{{ $show_interests := $block.design.show_interests | default true }}
|
||||
{{ $show_organizations := $block.design.show_organizations | default false }}
|
||||
{{ $show_role := $block.design.show_role | default true }}
|
||||
|
||||
<div class="row justify-content-center people-widget">
|
||||
{{ with $block.content.title }}
|
||||
<div class="section-heading col-12 mb-3 text-center">
|
||||
<h1 class="mb-0">{{ . | markdownify | emojify }}</h1>
|
||||
{{ with $block.content.subtitle }}<p class="mt-1">{{ . | markdownify | emojify }}</p>{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ with $block.content.text }}
|
||||
<div class="col-md-12">
|
||||
{{ . | emojify | $page.RenderString }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ range $block.content.user_groups }}
|
||||
{{ $query := where (where site.Pages "Section" "authors") ".Params.user_groups" "intersect" (slice .) }}
|
||||
|
||||
{{/* Sort */}}
|
||||
{{ $sort_by := $block.content.sort_by | default "Params.last_name" }}
|
||||
{{ $sort_by = partial "functions/get_sort_by_parameter" $sort_by }}
|
||||
{{ $sort_ascending := $block.content.sort_ascending | default true }}
|
||||
{{ $sort_order := cond $sort_ascending "asc" "desc" }}
|
||||
{{ $query = sort $query $sort_by $sort_order }}
|
||||
|
||||
{{if $query | and (gt (len $block.content.user_groups) 1) }}
|
||||
<div class="col-md-12">
|
||||
<h2 class="mb-4">{{ . | markdownify }}</h2>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
{{ range $query }}
|
||||
{{ $avatar := (.Resources.ByType "image").GetMatch "*avatar*" }}
|
||||
{{/* Get link to user's profile page. */}}
|
||||
{{ $link := "" }}
|
||||
{{ with site.GetPage (printf "/authors/%s" (path.Base .File.Dir)) }}
|
||||
{{ $link = .RelPermalink }}
|
||||
{{ end }}
|
||||
<div class="col-12 col-sm-auto people-person">
|
||||
{{ $src := "" }}
|
||||
{{ if site.Params.features.avatar.gravatar }}
|
||||
{{ $src = printf "https://s.gravatar.com/avatar/%s?s=150" (md5 .Params.email) }}
|
||||
{{ else if $avatar }}
|
||||
{{ $avatar_image := $avatar.Fill "270x270 Center" }}
|
||||
{{ $src = $avatar_image.RelPermalink }}
|
||||
{{ end }}
|
||||
{{ if $src }}
|
||||
{{ $avatar_shape := site.Params.features.avatar.shape | default "circle" }}
|
||||
{{with $link}}<a href="{{.}}">{{end}}<img width="270" height="270" loading="lazy" class="avatar {{if eq $avatar_shape "square"}}avatar-square{{else}}avatar-circle{{end}}" src="{{ $src }}" alt="Avatar">{{if $link}}</a>{{end}}
|
||||
{{ end }}
|
||||
|
||||
<div class="portrait-title">
|
||||
<h2>{{with $link}}<a href="{{.}}">{{end}}{{ .Title }}{{if $link}}</a>{{end}}</h2>
|
||||
{{ if and $show_organizations .Params.organizations }}{{ range .Params.organizations }}<h3>{{ .name }}</h3>{{ end }}{{ end }}
|
||||
{{ if and $show_role .Params.role }}<h3>{{ .Params.role | markdownify | emojify }}</h3>{{ end }}
|
||||
{{ if $show_social }}{{ partial "social_links" . }}{{ end }}
|
||||
{{ if and $show_interests .Params.interests }}<p class="people-interests">{{ delimit .Params.interests ", " | markdownify | emojify }}</p>{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
@@ -87,6 +87,7 @@
|
||||
|
||||
{{/* Sort */}}
|
||||
{{ $sort_by := $block.content.sort_by | default "Date" }}
|
||||
{{ $sort_by = partial "functions/get_sort_by_parameter" $sort_by }}
|
||||
{{ $sort_ascending := $block.content.sort_ascending | default (eq $block.content.order "asc") | default false }}
|
||||
{{ $sort_order := cond $sort_ascending "asc" "desc" }}
|
||||
{{ $query = sort $query $sort_by $sort_order }}
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
{{/* Wowchemy Blocks: Slider */}}
|
||||
{{/* Documentation: https://wowchemy.com/blocks/ */}}
|
||||
{{/* License: https://github.com/wowchemy/wowchemy-hugo-themes/blob/main/LICENSE.md */}}
|
||||
|
||||
{{/* Initialise */}}
|
||||
{{ $page := .wcPage }}
|
||||
{{ $block := .wcBlock }}
|
||||
{{ $hash_id := .wcIdentifier }}
|
||||
|
||||
<!-- Indicators -->
|
||||
<ol class="carousel-indicators">
|
||||
{{ range $index, $item := $block.content.slides }}
|
||||
<li data-target="#{{$hash_id}}" data-slide-to="{{$index}}" {{if eq $index 0}}class="active"{{end}}></li>
|
||||
{{ end }}
|
||||
</ol>
|
||||
|
||||
<!-- Carousel slides wrapper -->
|
||||
<div class="carousel-inner">
|
||||
{{ range $index, $item := $block.content.slides }}
|
||||
|
||||
{{ $style_bg := "" }}
|
||||
{{ $style_filter := "" }}
|
||||
|
||||
{{with $block.design.slide_height}}
|
||||
{{ $style_bg = printf "%s height: %s;" $style_bg . }}
|
||||
{{end}}
|
||||
|
||||
{{ $bg := $item.background}}
|
||||
{{ with $bg.color }}
|
||||
{{ $style_bg = printf "%s background-color: %s;" $style_bg (. | default "transparent") }}
|
||||
{{ end }}
|
||||
|
||||
{{ if and $bg.gradient_start $bg.gradient_end }}
|
||||
{{ $angle := string $bg.gradient_angle | default "90" }}
|
||||
{{ $style_bg = printf "%sbackground-image: linear-gradient(%sdeg, %s, %s);" $style_bg $angle $bg.gradient_start $bg.gradient_end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if $bg.image.filename }}
|
||||
{{ $bg_img := resources.Get (printf "media/%s" $bg.image.filename) }}
|
||||
{{ if $bg_img }}
|
||||
{{ $style_bg = printf "%sbackground-image: url('%s'); background-repeat: no-repeat; background-position: %s; background-size: %s; " $style_bg $bg_img.Permalink ($bg.image.position | default "center") ($bg.image.size | default "cover") }}
|
||||
{{ else }}
|
||||
{{ errorf "Couldn't find `%s` in the `assets/media/` folder - please add it." $bg.image.filename }}
|
||||
{{ end }}
|
||||
{{ with $bg.image.filters.brightness }}
|
||||
{{ $style_filter = printf "%s-webkit-backdrop-filter: brightness(%s); backdrop-filter: brightness(%s);" $style_filter (string .) (string .) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<div class="carousel-item{{if eq $index 0}} active{{end}} {{with $block.design.is_fullscreen}}fullscreen{{end}}" style="{{$style_bg | safeCSS}}">
|
||||
<div class="position-absolute d-flex w-100 h-100 justify-content-center align-items-center" style="{{$style_filter | safeCSS}}">
|
||||
{{/* To prevent control overlap, margins are based on $carousel-control-* in bootstrap-variables.scss */}}
|
||||
<div class="wg-hero dark container" style="margin-left: 6rem; margin-right: 6rem; text-align: {{$item.align | default "left"}};">
|
||||
<h1 class="hero-title ">
|
||||
{{ with $item.title }}{{ . | markdownify | emojify }}{{ end }}
|
||||
</h1>
|
||||
|
||||
{{ with $item.content }}
|
||||
<p class="hero-lead" style="{{if eq $item.align "center"}}margin: 0 auto 0 auto;{{else if eq $item.align "right"}}margin-left: auto; margin-right: 0{{end}}">
|
||||
{{ . | emojify | $page.RenderString }}
|
||||
</p>
|
||||
{{ end }}
|
||||
|
||||
{{ if $item.link.url }}
|
||||
{{ $pack := $item.link.icon_pack | default "fas" }}
|
||||
{{ $pack_prefix := $pack }}
|
||||
{{ if in (slice "fab" "fas" "far" "fal") $pack }}
|
||||
{{ $pack_prefix = "fa" }}
|
||||
{{ end }}
|
||||
<p>
|
||||
<a href="{{ $item.link.url }}" class="btn btn-light btn-lg mt-3">
|
||||
{{- with $item.link.icon -}}<i class="{{ $pack }} {{ $pack_prefix }}-{{ . }}" style="padding-right: 10px;"></i>{{- end -}}
|
||||
{{- $item.link.text | emojify | markdownify | safeHTML -}}
|
||||
</a>
|
||||
</p>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<!-- Left and right controls -->
|
||||
<a class="carousel-control-prev" href="#{{$hash_id}}" data-slide="prev">
|
||||
<span class="carousel-control-prev-icon"></span>
|
||||
<span class="sr-only">Previous</span>
|
||||
</a>
|
||||
<a class="carousel-control-next" href="#{{$hash_id}}" data-slide="next">
|
||||
<span class="carousel-control-next-icon"></span>
|
||||
<span class="sr-only">Next</span>
|
||||
</a>
|
||||
Reference in new issue
Block a user