Implement announcements as data-driven content

This change allows announcements to have an expiry date and / or a
“do not show until” date.
Separating this out also leaves room for future changes to enforce
a set of approvers.

Co-Authored-By: Karen Bradshaw <kbhawkey@gmail.com>
pull/25769/head
Tim Bannister 2020-12-22 21:57:33 +00:00
parent 65e4bede91
commit 20d8b28e1b
3 changed files with 97 additions and 26 deletions

View File

@ -0,0 +1,31 @@
---
# For an example of the format, see commented structure below.
#
# 🛈 Changes require approval from @kubernetes/steering-committee
# The order matters: if two schedules overlaps, the announcement
# that comes FIRST in the following list takes precedence.
#
#announcements:
# - startTime: 2020-01-01T00:00:00
# # startTime is optional
# endTime: 2021-04-01T00:00:00
# # endTime is required
# style: >-
# color: #fff; background: #000;
# # style is optional; if using, set both color and background
# # choose a dark color for the background
# title: "Sample 1 announcement"
# # title is optional
# message: |
# Message *one*.
# [Hyperlink](https://en.wikipedia.org/wiki/Hyperlink).
# # message is required. You can use Markdown.
# - name: Sample 2
# startTime: 2020-01-01T00:00:00
# endTime: 2021-04-01T00:00:00
# message: |
# Message *two*.
# leave the "announcements" key in place
announcements:

View File

@ -1,14 +1,34 @@
{{ if .Page.Param "announcement" }}
<section lang="en" id="announcement" style="background-color:{{ .Page.Param "announcement_bg" }}">
<aside>
<div class="content announcement main-section" data-nosnippet>
<h4 class="announcement">
{{ T "announcement_title" | markdownify }}
</h4>
<p class="announcement">{{ T "announcement_message" | markdownify }}</p>
</div>
</aside>
</section>
{{ $dateRegExp := "^[0-9]{4}-1[0-2]|0[1-9]-(?:3[01]|0[1-9]|[12][0-9])T(?:2[0-3]|[01][0-9]):(?:[0-5][0-9]):(?:60|[0-5][0-9])$" }}
{{ $announcementShown := false }}
{{ range $.Site.Data.announcements }}
{{ range .announcements }}
{{ if or ( eq .endTime nil ) ( eq .message nil ) }}
{{ errorf "Invalid announcement: %#v" . }}
{{ end }}
{{ if and (ne .startTime nil ) (lt ( len ( findRE $dateRegExp .startTime ) ) 1 ) }}
{{ errorf "Invalid announcement start time: %#v" .startTime }}
{{ end }}
{{ if lt ( len ( findRE $dateRegExp .endTime ) ) 1 }}
{{ errorf "Invalid announcement end time: %#v" .endTime }}
{{ end }}
{{ if or (eq .startTime nil ) (lt ( time .startTime ) now ) }}
{{- if or (eq .endTime nil ) (gt ( time .endTime ) now ) -}}
{{- if not $announcementShown -}}
{{- $announcementShown = true -}}
<section lang="en" id="announcement" style="background-color: #3371e3; color: #fff; {{ .style | safeCSS }}">
<aside>
<div class="content announcement main-section" data-nosnippet>
{{ if .title }}
<h4 class="announcement">
{{ .title | markdownify }}
</h4>
{{ end }}
<p class="announcement">{{ .message | markdownify }}</p>
</div>
</aside>
</section>
{{- end -}}
{{- end -}}
{{- end -}}
{{ end }}
{{ end }}

View File

@ -1,14 +1,34 @@
{{ if .Page.Param "announcement" }}
<section lang="en" id="fp-announcement" style="background-color:{{ .Page.Param "announcement_bg" }}">
<aside >
<div class="content announcement main-section" data-nosnippet>
<h3>
{{ T "announcement_title" | markdownify }}
</h3>
<p>{{ T "announcement_message" | markdownify }}</p>
</div>
</aside>
</section>
{{ $dateRegExp := "^[0-9]{4}-1[0-2]|0[1-9]-(?:3[01]|0[1-9]|[12][0-9])T(?:2[0-3]|[01][0-9]):(?:[0-5][0-9]):(?:60|[0-5][0-9])$" }}
{{ $announcementShown := false }}
{{ range $.Site.Data.announcements }}
{{ range .announcements }}
{{ if or ( eq .endTime nil ) ( eq .message nil ) }}
{{ errorf "Invalid announcement: %#v" . }}
{{ end }}
{{ if and (ne .startTime nil ) (lt ( len ( findRE $dateRegExp .startTime ) ) 1 ) }}
{{ errorf "Invalid announcement start time: %#v" .startTime }}
{{ end }}
{{ if lt ( len ( findRE $dateRegExp .endTime ) ) 1 }}
{{ errorf "Invalid announcement end time: %#v" .endTime }}
{{ end }}
{{ if or (eq .startTime nil ) (lt ( time .startTime ) now ) }}
{{- if or (eq .endTime nil ) (gt ( time .endTime ) now ) -}}
{{- if not $announcementShown -}}
{{- $announcementShown = true -}}
<section lang="en" id="fp-announcement" style="background-color: #3371e3; color: #fff; {{ .style | safeCSS }}">
<aside>
<div class="content announcement main-section" data-nosnippet>
{{ if .title }}
<h4 class="announcement">
{{ .title | markdownify }}
</h4>
{{ end }}
<p class="announcement">{{ .message | markdownify }}</p>
</div>
</aside>
</section>
{{- end -}}
{{- end -}}
{{- end -}}
{{ end }}
{{ end }}