Explorar el Código

feat: add support for multi-day events

Previously, the talk layout was intended for talks (intra-day events).

This commit adds support for more general events which can span multiple
days.

Close #1169
George Cushen hace 6 años
padre
commit
03599c42d5

+ 17 - 0
layouts/partials/functions/get_event_dates.html

@@ -0,0 +1,17 @@
+{{/* Function to get event start and end dates/times. */}}
+{{ $t1 := time .Date }}{{/* Start datetime. */}}
+{{ $str := slice ((time $t1).Format site.Params.date_format) }}{{/* Init return string with start date. */}}
+{{/* Show start time if not all day event. */}}
+{{ if not .Params.all_day }}{{ $str = $str | append ((time $t1).Format (site.Params.time_format)) }}{{ end }}
+{{/* Show event end date if provided. */}}
+{{ if .Params.date_end }}
+  {{ $str = $str | append "—" }}
+  {{ $t2 := time .Params.date_end}}{{/* End datetime. */}}
+  {{/* Show end date if it differs to start date. */}}
+  {{ if not (eq $t1.Year $t2.Year | and (eq $t1.Month $t2.Month) | and (eq $t1.Day $t2.Day)) }}
+    {{ $str = $str | append ((time $t2).Format site.Params.date_format) }}
+  {{ end }}
+  {{/* Show end time if not all day event. */}}
+  {{ if not .Params.all_day }}{{ $str = $str | append ((time $t2).Format (site.Params.time_format)) }}{{ end }}
+{{ end }}
+{{ return (delimit $str " ") }}

+ 1 - 8
layouts/partials/li_card.html

@@ -36,14 +36,7 @@
     </div>
     {{ end }}
     <span itemprop="startDate">
-      {{ $date := $item.Date }}
-      {{ (time $date).Format site.Params.date_format }}
-      {{ if not $item.Params.all_day }}
-        {{ (time $date).Format (site.Params.time_format | default "3:04 PM") }}
-        {{ with $item.Params.date_end }}
-        &mdash; {{ (time .).Format (site.Params.time_format | default "3:04 PM") }}
-        {{ end }}
-      {{ end }}
+      {{ partial "functions/get_event_dates" $item }}
     </span>
     {{ with $item.Params.location }}
     <span class="middot-divider"></span>

+ 1 - 8
layouts/partials/li_compact.html

@@ -45,14 +45,7 @@
       {{ if eq $item.Type "talk" }}
       <div>
         <span itemprop="startDate">
-          {{ $date := $item.Date }}
-          {{ (time $date).Format site.Params.date_format }}
-          {{ if not $item.Params.all_day }}
-            {{ (time $date).Format (site.Params.time_format | default "3:04 PM") }}
-            {{ with $item.Params.date_end }}
-            &mdash; {{ (time .).Format (site.Params.time_format | default "3:04 PM") }}
-            {{ end }}
-          {{ end }}
+          {{ partial "functions/get_event_dates" $item }}
         </span>
         {{ with $item.Params.location }}
         <span class="middot-divider"></span>

+ 1 - 8
layouts/partials/li_list.html

@@ -25,14 +25,7 @@
   {{ if eq $item.Type "talk" }}
   <div class="article-metadata">
     <span itemprop="startDate">
-      {{ $date := $item.Date }}
-      {{ (time $date).Format site.Params.date_format }}
-      {{ if not $item.Params.all_day }}
-        {{ (time $date).Format (site.Params.time_format | default "3:04 PM") }}
-        {{ with $item.Params.date_end }}
-        &mdash; {{ (time .).Format (site.Params.time_format | default "3:04 PM") }}
-        {{ end }}
-      {{ end }}
+      {{ partial "functions/get_event_dates" $item }}
     </span>
     {{ with $item.Params.location }}
     <span class="middot-divider"></span>

+ 1 - 10
layouts/talk/single.html

@@ -19,16 +19,7 @@
         <div class="row">
           <div class="col-12 col-md-3 pub-row-heading">{{ i18n "date" }}</div>
           <div class="col-12 col-md-9" itemprop="datePublished">
-            {{ $date := .Date }}
-            {{ (time $date).Format site.Params.date_format }}
-            <div class="talk-time">
-              {{ if not .Params.all_day }}
-                {{ (time $date).Format (site.Params.time_format | default "3:04 PM") }}
-                {{ with .Params.date_end }}
-                  &mdash; {{ (time .).Format (site.Params.time_format | default "3:04 PM") }}
-                {{ end }}
-              {{ end }}
-            </div>
+            {{ partial "functions/get_event_dates" . }}
           </div>
         </div>
       </div>