diff options
32 files changed, 909 insertions, 229 deletions
@@ -122,7 +122,7 @@ git submodule foreach git pull origin master If you have previously used Netlfiy CMS or have made other changes without using the command line, the easiest thing to do is just clone it in a new place, change it how you want to, push those changes, and then you can safely remove the Git folder. So, do this: ```bash -git clone --recursive <your repo link goes here> && git submodule foreach git pull origin master && git push origin master +git clone --recursive <your repo link goes here> && git submodule foreach git pull origin master ``` More info about submodules on [updating](https://stackoverflow.com/a/5828396) & [cloning](https://stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules). diff --git a/exampleSite/config.yml b/exampleSite/config.yml index 85c5e26..0e72d4c 100644 --- a/exampleSite/config.yml +++ b/exampleSite/config.yml @@ -83,14 +83,14 @@ defaultContentLanguage: en # What is the hostname or path to the root? # Where is the site hosted? # -# 💥 cState & Hugo don’t support / in +# 💥 cState & Hugo don’t support '/' in # production use. It will break RSS # feeds and breaks permalinks since # version 3. If you are just testing, # localhost should automatically work. # # Example: https://status.example.com/ -baseURL: https://status.example.com +baseURL: https://cstate.mnts.lt ############################################################ # +------------------------------------------------------+ # @@ -182,16 +182,16 @@ params: # # Defaults: # - # brand: #181818 - # ok: 228B22 - # warning: EE7600 - # down: DC143C - # notice: 708090 - brand: 181818 - ok: 228B22 - disrupted: EE7600 - down: DC143C - notice: 708090 + # brand: "0a0c0f" + # ok: "008000" + # disrupted: "cc4400" + # down: "e60000" + # notice: "24478f" + brand: "0a0c0f" + ok: "008000" + disrupted: "cc4400" + down: "e60000" + notice: "24478f" # If the status page shows that # there are disruptions or outages diff --git a/exampleSite/content/issues/.gitkeep b/exampleSite/content/issues/.gitkeep new file mode 100644 index 0000000..90fc975 --- /dev/null +++ b/exampleSite/content/issues/.gitkeep @@ -0,0 +1 @@ +If you plan to have an empty issues list, then please keep this file to prevent build failure. diff --git a/exampleSite/content/issues/2018-05-25-us-east-conn-issues.md b/exampleSite/content/issues/2018-05-25-us-east-conn-issues.md index 96c228c..524035b 100644 --- a/exampleSite/content/issues/2018-05-25-us-east-conn-issues.md +++ b/exampleSite/content/issues/2018-05-25-us-east-conn-issues.md @@ -4,7 +4,7 @@ date: 2018-05-25 04:13:00 resolved: true resolvedWhen: 2018-05-25 04:13:59 # Possible severity levels: down, disrupted, notice -severity: disrupted +severity: down affected: - API - Media Proxy diff --git a/exampleSite/content/issues/2018-06-13-maintenance-window.md b/exampleSite/content/issues/2018-06-13-maintenance-window.md index e21ae4d..6b75810 100644 --- a/exampleSite/content/issues/2018-06-13-maintenance-window.md +++ b/exampleSite/content/issues/2018-06-13-maintenance-window.md @@ -2,9 +2,8 @@ title: Maintenance Window date: 2018-06-13 15:54:00 resolved: false -resolvedWhen: 2018-06-13 17:30:00 # Possible severity levels: down, disrupted, notice -severity: notice +severity: disrupted affected: - API section: issue diff --git a/exampleSite/content/pages/example-page.md b/exampleSite/content/pages/example-page.md new file mode 100644 index 0000000..e373e84 --- /dev/null +++ b/exampleSite/content/pages/example-page.md @@ -0,0 +1,170 @@ +--- +title: Example Page +description: This is an example page that demonstrates the capabilities of a Markdown page in cState. +--- + +Title here! +=========== + +This is an example page that demonstrates the capabilities of a Markdown page in cState. + +You can use HTML if the file extension is `.html`, but this one is `.md`. + +Let us dive in. + +Paragraphs are separated by a blank line. + +2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists +look like: + + * this one + * that one + * the other one + +Note that --- not considering the asterisk --- the actual text +content starts at 4-columns in. + +> Block quotes are +> written like so. +> +> They can span multiple paragraphs, +> if you like. + +Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all +in chapters 12--14"). Three dots ... will be converted to an ellipsis. +Unicode is supported. ☺ + + + +An h2 header +------------ + +Here's a numbered list: + + 1. first item + 2. second item + 3. third item + +Note again how the actual text starts at 4 columns in (4 characters +from the left side). Here's a code sample: + + # Let me re-iterate ... + for i in 1 .. 10 { do-something(i) } + +As you probably guessed, indented 4 spaces. By the way, instead of +indenting the block, you can use delimited blocks, if you like: + +~~~ +define foobar() { + print "Welcome to flavor country!"; +} +~~~ + +(which makes copying & pasting easier). You can optionally mark the +delimited block for Pandoc to syntax highlight it: + +~~~python +import time +# Quick, count to ten! +for i in range(10): + # (but not *too* quick) + time.sleep(0.5) + print(i) +~~~ + + + +### An h3 header ### + +Now a nested list: + + 1. First, get these ingredients: + + * carrots + * celery + * lentils + + 2. Boil some water. + + 3. Dump everything in the pot and follow + this algorithm: + + find wooden spoon + uncover pot + stir + cover pot + balance wooden spoon precariously on pot handle + wait 10 minutes + goto first step (or shut off burner when done) + + Do not bump wooden spoon or it will fall. + +Notice again how text always lines up on 4-space indents (including +that last line which continues item 3 above). + +Here's a link to [a website](http://foo.bar), to a [local +doc](local-doc.html), and to a [section heading in the current +doc](#an-h2-header). Here's a footnote [^1]. + +[^1]: Some footnote text. + +Tables can look like this: + +Name Size Material Color +-------------|-----|------------|------------ +All Business 9 leather brown +Roundabout 10 hemp canvas natural +Cinderella 11 glass transparent + +Table: Shoes sizes, materials, and colors. + +(The above is the caption for the table.) Pandoc also supports +multi-line tables: + +-------- ----------------------- +Keyword Text +-------- ----------------------- +red Sunsets, apples, and + other red or reddish + things. + +green Leaves, grass, frogs + and other things it's + not easy being. +-------- ----------------------- + +A horizontal rule follows. + +*** + +Here's a definition list: + +apples + : Good for making applesauce. + +oranges + : Citrus! + +tomatoes + : There's no "e" in tomatoe. + +Again, text is indented 4 spaces. (Put a blank line between each +term and its definition to spread things out more.) + +Here's a "line block" (note how whitespace is honored): + +| Line one +| Line too +| Line tree + +and images can be specified like so: + +![example image](https://via.placeholder.com/350x150 "An exemplary image") + +Inline math equation: $\omega = d\phi / dt$. Display +math should get its own line like so: + +$$I = \int \rho R^{2} dV$$ + +And note that you can backslash-escape any punctuation characters +which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc.
\ No newline at end of file diff --git a/exampleSite/netlify.toml b/exampleSite/netlify.toml index e387e8c..d649777 100644 --- a/exampleSite/netlify.toml +++ b/exampleSite/netlify.toml @@ -11,4 +11,7 @@ NODE_ENV = "production" [context.deploy-preview] - command = "hugo" + command = "hugo -b $DEPLOY_PRIME_URL" + +[context.branch-deploy] + command = "hugo -b $DEPLOY_PRIME_URL"
\ No newline at end of file diff --git a/exampleSite/netlify/change.html b/exampleSite/netlify/change.html new file mode 100644 index 0000000..23ad8a3 --- /dev/null +++ b/exampleSite/netlify/change.html @@ -0,0 +1,5 @@ +<h2>[cState Admin] <br> An email change has been requested.</h2> + +<p>Follow this link to confirm the update of your email from <strong>{{ .Email }}</strong> to <strong>{{ .NewEmail }}</strong>:</p> + +<p><a href="{{ .SiteURL }}/admin/#email_change_token={{ .Token }}">Make it <em>{{ .NewEmail }}</em></a></p>
\ No newline at end of file diff --git a/exampleSite/netlify/confirmation.html b/exampleSite/netlify/confirmation.html new file mode 100644 index 0000000..b6b8e55 --- /dev/null +++ b/exampleSite/netlify/confirmation.html @@ -0,0 +1,5 @@ +<h2>[cState Admin] <br> Confirm your signup, please.</h2> + +<p>Follow this link to confirm your account:</p> + +<p><a href="{{ .SiteURL }}/admin/#confirmation_token={{ .Token }}">Yes, confirm this email</a></p> diff --git a/exampleSite/netlify/invitation.html b/exampleSite/netlify/invitation.html new file mode 100644 index 0000000..4ad78bd --- /dev/null +++ b/exampleSite/netlify/invitation.html @@ -0,0 +1,5 @@ +<h2>[cState Admin] <br> You have been invited!</h2> + +<p>You have been invited to create a user profile on {{ .SiteURL }}. Follow this link to accept the invite:</p> + +<p><a href="{{ .SiteURL }}/admin/#invite_token={{ .Token }}">Accept the invite</a></p> diff --git a/exampleSite/netlify/recovery.html b/exampleSite/netlify/recovery.html new file mode 100644 index 0000000..1de69fd --- /dev/null +++ b/exampleSite/netlify/recovery.html @@ -0,0 +1,7 @@ +<h2>[cState Admin] <br> A password reset has been requested.</h2> + +<p>Follow this link to reset the password for your account:</p> + +<p><a href="{{ .SiteURL }}/admin/#recovery_token={{ .Token }}">Recover my access</a></p> + +<p>Note: If you did not request a password change, you do not need to do anything. It may mean someone else is trying to log into your account.</p>
\ No newline at end of file diff --git a/i18n/de.yaml b/i18n/de.yaml new file mode 100644 index 0000000..72944f1 --- /dev/null +++ b/i18n/de.yaml @@ -0,0 +1,127 @@ +# German language file for cState +# Version 3.0 + +- id: languageCode + translation: de +- id: languageName + translation: German +- id: languageNameShort + translation: DE + +## +## INDEX.HTML +## + +# Summary status message +- id: isDown + translation: Wir verzeichnen einen Ausfall +- id: isDisrupted + translation: Wir verzeichnen eine Störung +- id: isNotice + translation: Bitte lies die Ankündigungen +- id: isOk + translation: Alle Systeme funktionsbereit + +# No JS warning +- id: noScriptingIntro + translation: Uh oh! Es sieht aus, als wäre JavaScript bei Dir deaktiviert. Bitte +- id: noScriptingLink + translation: aktiviere die Einstellung, die verhinderdert, dass Skripte laufen. +- id: noScriptingOutro + translation: um Dein Erlebnis auf dieser Website zu verbessern. + +- id: thisIsDown + translation: Ausfall +- id: thisIsDisrupted + translation: Störung +- id: thisIsNotice + translation: Wartung +- id: thisIsOk + translation: Funktionsbereit + +# "Last checked" + "just now" +- id: lastChecked + translation: Zuletzt aktualisiert +- id: justNow + translation: gerade eben +- id: someTimeAgo + translation: her + +# Example usage: `5` + `years` +# Final result: 'Last checked 5 years ago' +# Number goes before string +# Use short variants until months +- id: yearsAgo + translation: Jahre +- id: monthsAgo + translation: Monate +- id: daysAgo + translation: t +- id: hoursAgo + translation: h +- id: minsAgo + translation: min +- id: secondsAgo + translation: s + +- id: autoRefreshNotice + translation: Wir versuchen die Daten alle fünf Minuten zu aktualisieren. + +# Incidents +- id: incidents + translation: Vorfälle +- id: incidentHistory + translation: Vorfalls Historie + +- id: resolved + translation: Gelöst # if it's less than a min +- id: inUnderAMinute + translation: in unter einer Minute # continuing the last string +- id: resolvedAfter + translation: Gelöst nach # + 19 min +- id: ofDowntime + translation: Ausfallzeit + +- id: downtimeOngoing + translation: Ungelöst! + +- id: calmBeforeTheStorm + translation: Is dies die Ruhe vor dem Sturm? +- id: noIncidentsDesc + translation: Es liegen keine Vorfälle vor. Eventuell hat der Besitzer (oder die Besitzer) noch keine Vorfälle verzeichnet. + +- id: continueReading + translation: Weiterlesen +- id: prev + translation: Nächste +- id: next + translation: Vorherige + +## +## OTHER +## + +- id: goBack + translation: Zurück zu +- id: backToTop + translation: Nach oben +- id: poweredBy + translation: Powered by + + +- id: rss + translation: RSS abonnieren +- id: toAllUpdates + translation: alle Updates +- id: or + translation: or +- id: onlyThisFeed + translation: nur diesen Feed + +## +## v3 +## +- id: entries + translation: Einträge +- id: newestToOldest + translation: von alt nach neu diff --git a/i18n/en.yaml b/i18n/en.yaml index 3eafd19..e417040 100644 --- a/i18n/en.yaml +++ b/i18n/en.yaml @@ -113,7 +113,7 @@ - id: notFound translation: There is nothing here. - id: notFoundText - translation: This could be a problem on our part. Perhaps we moved a certain resource and now it is gone. It is also possible that the resource you are trying to view is empty (for example, if a system has never been down, we have nothing to show). But do you also mind to double check the link? + translation: This could be a problem on our part. Perhaps we moved a certain resource and now it is gone. It is also possible that the resource you are trying to view is empty. But do you also mind to double check the link? - id: rss translation: Subscribe via RSS @@ -131,3 +131,9 @@ translation: entries - id: newestToOldest translation: newest to oldest + +## +## v4 +## +- id: notFoundAffected + translation: It looks like this system either does not exist or has never had any recorded downtime. diff --git a/i18n/fr.yaml b/i18n/fr.yaml new file mode 100644 index 0000000..2c97fdb --- /dev/null +++ b/i18n/fr.yaml @@ -0,0 +1,139 @@ +# French language file for cState +# Version 3.0 + +- id: languageCode + translation: fr +- id: languageName + translation: French +- id: languageNameShort + translation: FRE + +## +## INDEX.HTML +## + +# Summary status message +- id: isDown + translation: Nous faisons face à des problèmes majeurs +- id: isDisrupted + translation: Nous faisons face à des pertubations +- id: isNotice + translation: Merci de lire le détail +- id: isOk + translation: Tous les systèmes sont opérationnels + +# No JS warning +- id: noScriptingIntro + translation: Il semble que vous ayez désactivé JavaScript. +- id: noScriptingLink + translation: Merci d'activer les scripts +- id: noScriptingOutro + translation: pour améliorer votre expérience sur ce site Web. + +- id: thisIsDown + translation: Éteint +- id: thisIsDisrupted + translation: Perturbé +- id: thisIsNotice + translation: Maintenance +- id: thisIsOk + translation: Opérationnel + +# "Last checked" + "just now" +- id: lastChecked + translation: Dernière vérification +- id: justNow + translation: Il y a quelques secondes +#- id: someTimeAgo +# translation: # Unable to translate + +# Example usage: `5` + `years` +# Final result: 'Last checked 5 years ago' +# Number goes before string +# Use short variants until months +- id: yearsAgo + translation: ans +- id: monthsAgo + translation: mois +- id: daysAgo + translation: j +- id: hoursAgo + translation: h +- id: minsAgo + translation: min +- id: secondsAgo + translation: s + +- id: autoRefreshNotice + translation: Nous essaierons de rafraîchir la page toutes les 5 minutes + +# Incidents +- id: incidents + translation: Incidents +- id: incidentHistory + translation: Historique des incidents + +- id: resolved + translation: Résolu # if it's less than a min +- id: inUnderAMinute + translation: en moins d'une minute # continuing the last string +- id: resolvedAfter + translation: Résolu après # + 19 min +- id: ofDowntime + translation: de temps d'arrêt + +- id: downtimeOngoing + translation: Non résolu + + +- id: calmBeforeTheStorm + translation: Est-ce le calme avant la tempête ? +- id: noIncidentsDesc + translation: Cette page d'état ne contient aucun incident enregistré. Cela peut être dû au fait que le ou les propriétaires de la page d'état ont récemment configuré leur page d'état, n'ont eu aucun temps d'arrêt ou n'ont enregistré aucun temps d'arrêt. + + +- id: continueReading + translation: Lire la suite +- id: prev + translation: Précédent +- id: next + translation: Suivant + +## +## OTHER +## + +- id: goBack + translation: Retourner à +- id: backToTop + translation: Retour en haut de page +- id: poweredBy + translation: Propulsé par + +- id: notFound + translation: Il n'y a rien ici. +- id: notFoundText + translation: Cela pourrait être un problème de notre part. Peut-être avons-nous déplacé une certaine ressource et maintenant elle a disparu. Il est également possible que la ressource que vous essayez de visualiser soit vide. Mais cela vous dérange-t-il aussi de vérifier le lien ? + +- id: rss + translation: S'abonner via RSS +- id: toAllUpdates + translation: à toutes les mises à jour +- id: or + translation: ou +- id: onlyThisFeed + translation: seulement ce flux + +## +## v3 +## +- id: entries + translation: rubriques +- id: newestToOldest + translation: du plus récent au plus ancien + +## +## v4 +## +- id: notFoundAffected + translation: Il semble que ce système n'existe pas ou qu'il n'a jamais eu de temps d'arrêt enregistré. diff --git a/i18n/lt.yaml b/i18n/lt.yaml index 6721e8e..bee5e28 100644 --- a/i18n/lt.yaml +++ b/i18n/lt.yaml @@ -113,7 +113,7 @@ - id: notFound translation: Čia nieko nėra. - id: notFoundText - translation: Tai gali būti mūsų problema — galbūt puslapis, kurį bandote peržiūrėti, buvo kitur perkeltas arba buvo ištrintas. Taip pat yra galimybė, jog puslapis yra tuščias (pvz. jeigu vienas komponentas mūsų sistemoje nėra turėjęs problemų, nėra ko rodyti). Rekomenduoje dar kartą patikrinti, ar nuoroda, kurią naudojate, nėra neteisinga. + translation: Tai gali būti mūsų problema — galbūt puslapis, kurį bandote peržiūrėti, buvo kitur perkeltas arba buvo ištrintas. Rekomenduoje dar kartą patikrinti, ar nuoroda, kurią naudojate, nėra neteisinga. - id: rss translation: Gaukite atnaujinimus naudojant RSS @@ -131,3 +131,9 @@ translation: įrašai - id: newestToOldest translation: naujiausi rodomi pirmi + +## +## v4 +## +- id: notFoundAffected + translation: Ši sistema neturi nė vieno įrašo. Arba neegzistuoja, arba nė vieną kartą nebuvo sutrukdyta jos veikla.
\ No newline at end of file diff --git a/i18n/tr.yaml b/i18n/tr.yaml new file mode 100644 index 0000000..30646af --- /dev/null +++ b/i18n/tr.yaml @@ -0,0 +1,132 @@ +# Turkish language file for cState +# Version 3.0 + +- id: languageCode + translation: tr +- id: languageName + translation: Türkçe +- id: languageNameShort + translation: TUR + +## +## INDEX.HTML +## + +# Summary status message +- id: isDown + translation: Majör problemler yaşanıyor +- id: isDisrupted + translation: Kesintiler yaşanıyor +- id: isNotice + translation: Lütfen duyuruyu okuyun +- id: isOk + translation: Tüm sistemler işlevsel durumda + +# No JS warning +- id: noScriptingIntro + translation: Bir saniye! Görünüşe göre JavaScript devre dışı. Lütfen +- id: noScriptingLink + translation: JavaScript desteğini etkinleştirin +- id: noScriptingOutro + translation: ki bu İnternet sitesini sorunsuzca görüntüleyebilesiniz. + +- id: thisIsDown + translation: Çökmüş +- id: thisIsDisrupted + translation: Aksıyor +- id: thisIsNotice + translation: Bakımda +- id: thisIsOk + translation: İşlevsel + +# "Last checked" + "just now" +- id: lastChecked + translation: Son kontrol +- id: justNow + translation: az önce +- id: someTimeAgo + translation: önce + +# Example usage: `5` + `years` +# Final result: 'Last checked 5 years ago' +# Number goes before string +# Use short variants until months +- id: yearsAgo + translation: yıl +- id: monthsAgo + translation: ay +- id: daysAgo + translation: gün +- id: hoursAgo + translation: saat +- id: minsAgo + translation: dakika +- id: secondsAgo + translation: saniye + +- id: autoRefreshNotice + translation: Her 5 dakikada bir güncellenecektir + +# Incidents +- id: incidents + translation: Olaylar +- id: incidentHistory + translation: Olay geçmişi + +- id: resolved + translation: Çözümlendi # if it's less than a min +- id: inUnderAMinute + translation: bir dakikadan kısa bir süre içinde # continuing the last string +- id: resolvedAfter + translation: "Çözümlendi:" # + 19 min +- id: ofDowntime + translation: süren arıza sonrasında + +- id: downtimeOngoing + translation: Çözümlenmedi! + + +- id: calmBeforeTheStorm + translation: Bu fırtına öncesi sessizlik mi? +- id: noIncidentsDesc + translation: Kaydedilmiş bir olaya rastlayamadık. Bunun sebebi, sitenin yeni kurulmuş olması, kesinti yaşanmamış olması ya da bu kesintilerin kaydedilmemesi olabilir. + +- id: continueReading + translation: Okumaya devam et +- id: prev + translation: Önceki +- id: next + translation: Sıradaki + +## +## OTHER +## + +- id: goBack + translation: Geri git +- id: backToTop + translation: Yukarıya dön +- id: poweredBy + translation: Powered by + +- id: notFound + translation: Burada bir şey yok. +- id: notFoundText + translation: Belki de aradığınız şeyi başka bir yere taşımışızdır. O şey hiç bulunmamış da olabilir. İki defa dene belki işe yarar? + +- id: rss + translation: RSS beslemesine abone ol +- id: toAllUpdates + translation: bütün güncellemelere +- id: or + translation: ya da +- id: onlyThisFeed + translation: sadece bu beslemeye + +## +## v3 +## +- id: entries + translation: girdiler +- id: newestToOldest + translation: en yeniden en eskiye diff --git a/layouts/_default/single.html b/layouts/_default/single.html index c1292b2..51a09e8 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,7 +1,7 @@ {{ partial "meta" . }} <body class="default single"> <div class="contain"> - <a href="{{ .Site.BaseURL }}">← {{ T "goBack" }} <em>{{ .Site.Title }}<em></a> + <a href="{{ .Site.BaseURL }}">← {{ T "goBack" }} <em>{{ .Site.Title }}</em></a> <hr> {{ .Content }} </div> diff --git a/layouts/affected/404.html b/layouts/affected/404.html new file mode 100644 index 0000000..527c280 --- /dev/null +++ b/layouts/affected/404.html @@ -0,0 +1,21 @@ +{{ partial "meta" . }} + +{{ $incidents := where .Site.RegularPages "Params.section" "issue" }} +{{ $active := where $incidents "Params.resolved" "=" false }} + +{{ $isNotice := where $active "Params.severity" "=" "notice" }} +{{ $isDisrupted := where $active "Params.severity" "=" "disrupted" }} +{{ $isDown := where $active "Params.severity" "=" "down" }} + + <body class="status-homepage status-{{ if $isDown }}down{{ else }}{{ if $isDisrupted}}disrupted{{ else }}{{ if $isNotice }}notice{{ else }}ok{{ end }}{{ end }}{{ end }} {{ if not .Site.Params.alwaysKeepBrandColor }}change-header-color{{ end }}"> + {{ partial "header" . }} + + <div class="contain center"> + <h1 class="bold">{{ T "notFoundAffected" }}</h1> + <p>{{ T "notFoundText" }}</p> + </div> + + {{ partial "js" . }} + {{ partial "footer" . }} + </body> +</html> diff --git a/layouts/index.html b/layouts/index.html index 2802ce1..be887c8 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -12,185 +12,36 @@ <!-- Main --> <div class="contain"> - <noscript> - <p class="error">{{ T "noScriptingIntro" }} <a href="//enable-javascript.com">{{ T "noScriptingLink" }}</a> {{ T "noScriptingOutro" }}</p> - <div class="padding"></div> - </noscript> + <!-- Enable JavaScript banner --> + {{ partial "index/noscript" . }} - <!-- Main info --> - <div class="summary"> - <strong> - {{ if $isDown }} - {{ T "isDown" }} - {{ else }} - {{ if $isDisrupted }} - {{ T "isDisrupted" }} - {{ else }} - {{ if $isNotice }} - {{ T "isNotice" }} - {{ else }} - {{ T "isOk" }} - {{ end }}{{ end }}{{ end }} - </strong> + <!-- "All systems operational" (or not) banner --> + {{ partial "index/summary" . }} - <span class="summary__date float-right" onclick="location.reload()"></span> - </div> + <!-- Announcement box (title and short summary) --> + {{ partial "index/announcements" . }} - {{ if $active }} - <div class="announcement-box"> - {{ range $active }} - <div class="padding"> - <p><strong class="bold">{{ .Title }}</strong></p> - {{ .Content | safeHTML | truncate 500 "…" }} - <p><a href="{{ .Permalink }}">{{ T "continueReading" }}</a></p> - </div> - {{ else }}{{ end }} - </div> - {{ end }} - - {{ if .Site.Params.autoRefresh }} - <div class="faded right"> - <small><em>{{ T "autoRefreshNotice" }}</em></small> - </div> - <div class="padding-s"></div> - {{ else }} - <div class="padding"></div> - {{ end }} - - <!-- Individual info --> - <div class="components"> - {{ $systems := .Site.Params.systems }} - {{ range $systems }} - {{ $activeComponentIssues := where $active "Params.affected" "intersect" (slice .name) }} - - {{ $thisIsNotice := where $activeComponentIssues "Params.severity" "=" "notice" }} - {{ $thisIsDisrupted := where $activeComponentIssues "Params.severity" "=" "disrupted" }} - {{ $thisIsDown := where $activeComponentIssues "Params.severity" "=" "down" }} - - <div class="component" data-status="{{ if $thisIsDown }}down{{ else }}{{ if $thisIsDisrupted }}disrupted{{ else }}{{ if $thisIsNotice }}notice{{ else }}ok{{ end }}{{ end }}{{ end }}"> - <a href="/affected/{{ .name | urlize }}" class="no-underline"> - {{ .name }} - </a> - - {{ with .description }} - <span class="tooltip tooltip--small"> - <span class="faded">(?)</span> + <!-- Auto refresh --> + {{ partial "index/autorefresh" . }} - <span class="tooltip__text"> - {{ . }} - </span> - </span> - {{ end }} + <!-- Individual component info --> + {{ partial "index/components" . }} - <span class="component-status"> - {{ if $thisIsDown }} - {{ T "thisIsDown" }} - {{ else }} - {{ if $thisIsDisrupted }} - {{ T "thisIsDisrupted" }} - {{ else }} - {{ if $thisIsNotice }} - {{ T "thisIsNotice" }} - {{ else }} - {{ T "thisIsOk" }} - {{ end }}{{ end }}{{ end }} - </span> - - {{ with .partial }} - <div> - {{ partial . . }} - </div> - {{ end }} - </div> - {{ end }} - </div> - - {{ if .Site.Params.enableCustomHTML }} - {{ partial "custom/homepage-summary" . }} - {{ end }} - <!-- End main --> - </div> - - {{ if .Site.Params.customTabs }} - <div class="tabs"> - <div class="contain tabs--inner"> - <a href="/#incidents" class="tab tab--current"> - {{ T "incidents" }} - </a> - - {{ range .Site.Params.customTabs }} - <a href="{{ .link }}" class="tab tab--other"> - {{ .name }} - </a> - {{ end }} + {{ if .Site.Params.enableCustomHTML }} + {{ partial "custom/homepage-summary" . }} + {{ end }} + <!-- End main --> </div> - </div> - {{ else }} - <div class="contain contain--more"> - <h2 class="center">{{ T "incidentHistory" }}</h2> - <hr class="clean"> - </div> - {{ end }} + <!-- Custom tabs --> + {{ partial "index/tabs" . }} + <!-- All incidents + pagination --> <div class="contain contain--more" id="incidents"> - {{ if not $incidents }} - <div class="padding"></div> - <h3>{{ T "calmBeforeTheStorm" }}</h3> - <p>{{ T "noIncidentsDesc" }}</p> - <div class="padding"></div> - <div class="padding"></div> - <div class="padding"></div> - {{ else }} - {{ $paginator := .Paginate $incidents .Site.Params.incidentPostsPerPage }} - {{ range $paginator.Pages }} - {{ .Render "small" }} - {{ end }} - - <!-- If there are more than 2 pages, show pagination --> - {{ if gt $paginator.TotalPages 1 }} - <hr> - - <div class="center"> - {{ if $paginator.HasPrev }} - <a href="{{ $paginator.Prev.URL }}#incidents"> - ⭠ - {{ T "prev" }} - </a> - {{ else }} - <span class="faded"> - ⭠ - {{ T "prev" }} - </span> - {{ end }} - - - - {{ $paginator.PageNumber }} - / - {{ $paginator.TotalPages }} - - - - {{ if $paginator.HasNext }} - <a href="{{ $paginator.Next.URL }}#incidents"> - {{ T "next" }} - ⭢ - </a> - {{ else }} - <span class="faded"> - {{ T "next" }} - ⭢ - </span> - {{ end }} - </div> - {{ end }} - {{ end }} + {{ partial "index/incidents" . }} <div class="padding"></div> </div> - - {{ partial "js" . }} {{ partial "footer" . }} </body> diff --git a/layouts/issues/small.html b/layouts/issues/small.html index 6833b68..ef30b75 100644 --- a/layouts/issues/small.html +++ b/layouts/issues/small.html @@ -65,10 +65,6 @@ {{ .Title }} </h3> - {{ $t := (time .Params.ResolvedWhen) }} - {{ $timeDiff := (sub $t.Unix .Date.Unix) }} - {{ $diffInMin := (div $timeDiff 60) }} - <!-- Marker --> <div class="error">{{ T "downtimeOngoing" }}</div> diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 2dcea70..6187f61 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -4,7 +4,7 @@ <div class="footer"> <div class="contain"> - <p><strong class="bold">{{ now.Year }} © {{ .Site.Title }}</strong> + <p><strong class="bold">© {{ .Site.Title }}, {{ now.Year }}</strong> • <a href="#">{{ T "backToTop" }}</a> </p> diff --git a/layouts/partials/index/announcements.html b/layouts/partials/index/announcements.html new file mode 100644 index 0000000..0be3835 --- /dev/null +++ b/layouts/partials/index/announcements.html @@ -0,0 +1,24 @@ +{{ $incidents := where .Site.RegularPages "Params.section" "issue" }} +{{ $active := where $incidents "Params.resolved" "=" false }} + +{{ if $active }} + <div class="announcement-box" style="border-bottom: 0"> + {{ range $active }} + <div class="padding"> + <p> + <a href="{{ .Permalink }}"><strong class="bold">{{ .Title }} →</strong></a> + </p> + + <p><small> + {{ range .Params.Affected }} + <a href="/affected/{{ . | urlize }}" class="tag no-underline">{{ . }}</a> + {{ end }} + </small></p> + + {{ .Content | safeHTML | truncate 500 "…" }} + <p></p> + </div> + <hr class="clean announcement-box"> + {{ end }} + </div> +{{ end }}
\ No newline at end of file diff --git a/layouts/partials/index/autorefresh.html b/layouts/partials/index/autorefresh.html new file mode 100644 index 0000000..b419e2f --- /dev/null +++ b/layouts/partials/index/autorefresh.html @@ -0,0 +1,8 @@ +{{ if .Site.Params.autoRefresh }} + <div class="faded right"> + <small><em>{{ T "autoRefreshNotice" }}</em></small> + </div> + <div class="padding-s"></div> + {{ else }} + <div class="padding"></div> +{{ end }}
\ No newline at end of file diff --git a/layouts/partials/index/components.html b/layouts/partials/index/components.html new file mode 100644 index 0000000..128b887 --- /dev/null +++ b/layouts/partials/index/components.html @@ -0,0 +1,53 @@ +{{ $incidents := where .Site.RegularPages "Params.section" "issue" }} +{{ $active := where $incidents "Params.resolved" "=" false }} + +{{ $isNotice := where $active "Params.severity" "=" "notice" }} +{{ $isDisrupted := where $active "Params.severity" "=" "disrupted" }} +{{ $isDown := where $active "Params.severity" "=" "down" }} + +<div class="components"> + {{ $systems := .Site.Params.systems }} + {{ range $systems }} + {{ $activeComponentIssues := where $active "Params.affected" "intersect" (slice .name) }} + + {{ $thisIsNotice := where $activeComponentIssues "Params.severity" "=" "notice" }} + {{ $thisIsDisrupted := where $activeComponentIssues "Params.severity" "=" "disrupted" }} + {{ $thisIsDown := where $activeComponentIssues "Params.severity" "=" "down" }} + + <div class="component" data-status="{{ if $thisIsDown }}down{{ else }}{{ if $thisIsDisrupted }}disrupted{{ else }}{{ if $thisIsNotice }}notice{{ else }}ok{{ end }}{{ end }}{{ end }}"> + <a href="/affected/{{ .name | urlize }}" class="no-underline"> + {{ .name }} + </a> + + {{ with .description }} + <span class="tooltip tooltip--small"> + <span class="faded">(?)</span> + + <span class="tooltip__text"> + {{ . }} + </span> + </span> + {{ end }} + + <span class="component-status"> + {{ if $thisIsDown }} + <b>{{ T "thisIsDown" }}</b> + {{ else }} + {{ if $thisIsDisrupted }} + <b>{{ T "thisIsDisrupted" }}</b> + {{ else }} + {{ if $thisIsNotice }} + <b>{{ T "thisIsNotice" }}</b> + {{ else }} + {{ T "thisIsOk" }} + {{ end }}{{ end }}{{ end }} + </span> + + {{ with .partial }} + <div> + {{ partial . . }} + </div> + {{ end }} + </div> + {{ end }} + </div>
\ No newline at end of file diff --git a/layouts/partials/index/incidents.html b/layouts/partials/index/incidents.html new file mode 100644 index 0000000..bf312e9 --- /dev/null +++ b/layouts/partials/index/incidents.html @@ -0,0 +1,61 @@ +{{ $incidents := where .Site.RegularPages "Params.section" "issue" }} +{{ $active := where $incidents "Params.resolved" "=" false }} + +{{ $isNotice := where $active "Params.severity" "=" "notice" }} +{{ $isDisrupted := where $active "Params.severity" "=" "disrupted" }} +{{ $isDown := where $active "Params.severity" "=" "down" }} + +<!-- Pagination is also included with incidents --> + +{{ if not $incidents }} + <div class="padding"></div> + <h3>{{ T "calmBeforeTheStorm" }}</h3> + <p>{{ T "noIncidentsDesc" }}</p> + <div class="padding"></div> + <div class="padding"></div> + <div class="padding"></div> +{{ else }} + {{ $paginator := .Paginate $incidents .Site.Params.incidentPostsPerPage }} + {{ range $paginator.Pages }} + {{ .Render "small" }} + {{ end }} + + <!-- If there are more than 2 pages, show pagination --> + {{ if gt $paginator.TotalPages 1 }} + <hr> + + <div class="center"> + {{ if $paginator.HasPrev }} + <a href="{{ $paginator.Prev.URL }}#incidents"> + ⭠ + {{ T "prev" }} + </a> + {{ else }} + <span class="faded"> + ⭠ + {{ T "prev" }} + </span> + {{ end }} + + + + {{ $paginator.PageNumber }} + / + {{ $paginator.TotalPages }} + + + + {{ if $paginator.HasNext }} + <a href="{{ $paginator.Next.URL }}#incidents"> + {{ T "next" }} + ⭢ + </a> + {{ else }} + <span class="faded"> + {{ T "next" }} + ⭢ + </span> + {{ end }} + </div> + {{ end }} +{{ end }}
\ No newline at end of file diff --git a/layouts/partials/index/noscript.html b/layouts/partials/index/noscript.html new file mode 100644 index 0000000..ebebe8c --- /dev/null +++ b/layouts/partials/index/noscript.html @@ -0,0 +1,4 @@ +<noscript> + <p class="error">{{ T "noScriptingIntro" }} <a href="//enable-javascript.com">{{ T "noScriptingLink" }}</a> {{ T "noScriptingOutro" }}</p> + <div class="padding"></div> +</noscript>
\ No newline at end of file diff --git a/layouts/partials/index/summary.html b/layouts/partials/index/summary.html new file mode 100644 index 0000000..d8e3108 --- /dev/null +++ b/layouts/partials/index/summary.html @@ -0,0 +1,24 @@ +{{ $incidents := where .Site.RegularPages "Params.section" "issue" }} +{{ $active := where $incidents "Params.resolved" "=" false }} + +{{ $isNotice := where $active "Params.severity" "=" "notice" }} +{{ $isDisrupted := where $active "Params.severity" "=" "disrupted" }} +{{ $isDown := where $active "Params.severity" "=" "down" }} + +<div class="summary"> + <strong> + {{ if $isDown }} + {{ T "isDown" }} + {{ else }} + {{ if $isDisrupted }} + {{ T "isDisrupted" }} + {{ else }} + {{ if $isNotice }} + {{ T "isNotice" }} + {{ else }} + {{ T "isOk" }} + {{ end }}{{ end }}{{ end }} + </strong> + + <span class="summary__date float-right" onclick="location.reload()"></span> +</div>
\ No newline at end of file diff --git a/layouts/partials/index/tabs.html b/layouts/partials/index/tabs.html new file mode 100644 index 0000000..e1fc986 --- /dev/null +++ b/layouts/partials/index/tabs.html @@ -0,0 +1,20 @@ +{{ if .Site.Params.customTabs }} + <div class="tabs"> + <div class="contain tabs--inner"> + <a href="/#incidents" class="tab tab--current"> + {{ T "incidents" }} + </a> + + {{ range .Site.Params.customTabs }} + <a href="{{ .link }}" class="tab tab--other"> + {{ .name }} + </a> + {{ end }} + </div> + </div> +{{ else }} + <div class="contain contain--more"> + <h2 class="center">{{ T "incidentHistory" }}</h2> + <hr class="clean"> + </div> +{{ end }}
\ No newline at end of file diff --git a/layouts/partials/js.html b/layouts/partials/js.html index af3bb80..088cc44 100644 --- a/layouts/partials/js.html +++ b/layouts/partials/js.html @@ -3,7 +3,7 @@ * Dev toolset */ - console.log('cState v3.0.0 - Stable 2019-01-24 - https://github.com/cstate/cstate'); + console.log('cState v3.1.0 - rc1 - https://github.com/cstate/cstate'); document.getElementsByTagName('html')[0].className = 'js'; /** @@ -27,6 +27,18 @@ if (window.location.hash.match('access_token')) { document.location.pathname = '/admin'; } + if (window.location.hash.match('invite_token')) { + document.location.pathname = '/admin'; + } + if (window.location.hash.match('confirmation_token')) { + document.location.pathname = '/admin'; + } + if (window.location.hash.match('email_change_token')) { + document.location.pathname = '/admin'; + } + if (window.location.hash.match('recovery_token')) { + document.location.pathname = '/admin'; + } /** * Timer diff --git a/layouts/partials/meta.html b/layouts/partials/meta.html index df6b8d0..d0b32ce 100644 --- a/layouts/partials/meta.html +++ b/layouts/partials/meta.html @@ -6,13 +6,13 @@ <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Data --> - <meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Summary }}{{ end }}"> - <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} — {{ end }}{{ .Site.Title }}{{ end }}</title> + <meta name="description" content="{{ with .Summary }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}"> + <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} | {{ end }}{{ .Site.Title }}{{ end }}</title> <link rel="canonical" href="{{ .Permalink }}"> {{ range .AlternativeOutputFormats -}} {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} {{ end -}} - <meta name="generator" content="cState v3.0.0 - Stable 2019-01-24"> + <meta name="generator" content="cState v3.1.0 - rc1"> <meta name="theme-color" content="#{{ .Site.Params.brand }}"> <script> var themeBrandColor = '#{{ .Site.Params.brand }}'; @@ -23,23 +23,10 @@ </script> <!-- Sources --> <style> - /** - * Color palette - * - * Defaults: - * white: #fff; - * whitesmoke: #f5f5f5; - * forestgreen: #228B22; - * crimson: #DC143C; - * darkorange: #EE7600; - * slategray: #708090; - * - */ - html, body { margin: 0; background: #fff; - color: #444; + color: #4d4d4d; font: 100%/1.5 BlinkMacSystemFont, -apple-system, "San Francisco Text", "Roboto", "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; box-sizing: border-box; -webkit-tap-highlight-color: rgba(0,0,0, 0.25); @@ -100,8 +87,8 @@ .headline { font-size: 20px; } .bold { color: #000; } - .hinted { color: #777; } - .faded { color: #999; } + .hinted { color: #6d6d6d; } + .faded { color: #6d6d6d; } .clean { margin: 0; } @@ -270,7 +257,7 @@ padding: 12px 18px; position: relative; top: 1px; - color: #aaa; + color: #757575; } .tab--other:hover { color: #000; } @@ -299,24 +286,22 @@ padding: 16px; } - .status-ok .announcement-box { border: 2px solid #{{ .Site.Params.ok }}; } .status-disrupted .announcement-box { border: 2px solid #{{ .Site.Params.disrupted }}; } .status-down .announcement-box { border: 2px solid #{{ .Site.Params.down }}; } .status-notice .announcement-box { border: 2px solid #{{ .Site.Params.notice }}; } - - - .status-ok .status-homepage .announcement-box { border-bottom-width: 1px; } - + .status-disrupted .announcement-box, + .status-down .announcement-box, + .status-notice .announcement-box { border-top: 0; } /** * Dynamically show individual component statuses */ .component-status { float: right; } - .component[data-status="ok"] .component-status { color: #{{ .Site.Params.ok }};; } - .component[data-status="disrupted"] .component-status { color: #{{ .Site.Params.disrupted }};; } - .component[data-status="down"] .component-status { color: #{{ .Site.Params.down }};; } - .component[data-status="notice"] .component-status { color: #{{ .Site.Params.notice }};; } + .component[data-status="ok"] .component-status { color: #{{ .Site.Params.ok }}; } + .component[data-status="disrupted"] .component-status { color: #{{ .Site.Params.disrupted }}; } + .component[data-status="down"] .component-status { color: #{{ .Site.Params.down }}; } + .component[data-status="notice"] .component-status { color: #{{ .Site.Params.notice }}; } /** * Responsiveness diff --git a/static/admin/config.yml b/static/admin/config.yml index 014372e..5bee7cb 100644 --- a/static/admin/config.yml +++ b/static/admin/config.yml @@ -27,14 +27,14 @@ collections: fields: - {label: "Mark as incident", name: "section", widget: "hidden", default: "issue"} - {label: "Title", name: "title", widget: "string"} - - {label: "Start date & time (your time)", name: "date", widget: "datetime"} - - {label: "Mark as resolved", name: "resolved", widget: "boolean", required: false, default: false} - - {label: "End date & time (your time)", name: "resolvedWhen", widget: "datetime", required: false} - - label: "Affected systems (use exact name, separated by commas)" + - {label: "Start date & time (your time) ⌚", name: "date", widget: "datetime"} + - {label: "Mark as resolved ✔", name: "resolved", widget: "boolean", required: false, default: false} + - {label: "End date & time (your time) ⌛", name: "resolvedWhen", widget: "datetime", required: false} + - label: "Affected systems (use exact name, separated by commas) 🧐" name: "affected" widget: "list" required: false - - label: "Severity" + - label: "Severity ⚠" name: "severity" widget: "select" options: @@ -45,6 +45,19 @@ collections: name: "body" widget: "markdown" default: "*Investigating* - We are investigating a potential issue that might affect the uptime of one our of services. We are sorry for any inconvenience this may cause you. This incident post will be updated once we have more information." + - name: "pages" + label: "Pages" + label_singular: "Page" + description: "📜 Create and manage pages (not connected or related to issues). Good for things like about pages, SLAs, ways of contact, and so forth." + folder: "content/pages" + create: true + slug: "{{slug}}" + fields: + - {label: "Title", name: "title", widget: "string"} + - {label: "Description for SEO and social media", name: "description", widget: "string", required: false} + - label: "Markdown (or HTML) body" + name: "body" + widget: "markdown" - name: "settings" label: "Settings" description: "⚠ Please be warned that by editing settings from Netlify CMS you are _OVERWRITING_ what you have in the original Git repository, meaning any CURRENT SETTINGS OR COMMENTS left will be deleted." @@ -75,8 +88,11 @@ collections: options: - { label: "🇺🇸 English (default)", value: "en" } - { label: "🇱🇹 Lithuanian (official)", value: "lt" } + - { label: "🇹🇷 Turkish", value: "tr" } + - { label: "🇩🇪 Deutsch", value: "de" } + - { label: "🇫🇷 French", value: "fr" } - label: 'Site language in code for html[lang]' - hint: 'Use the ISO 639-1 defined abbreviations. Examples: en, lt, de. Fully explained here: https://github.com/mistermantas/cstate/wiki/Customization#changing-site-language' + hint: 'Use the ISO 639-1 defined abbreviations. Examples: en, lt, de. Fully explained here: https://github.com/cstate/cstate/wiki/Customization#changing-site-language' name: 'languageCode' widget: 'string' default: 'en' diff --git a/static/admin/index.html b/static/admin/index.html index 03fce04..028edc1 100644 --- a/static/admin/index.html +++ b/static/admin/index.html @@ -34,7 +34,7 @@ var resultOfState = 'This incident has been resolved.'; } - if (layoutPostDateEnd.getYear() === layoutPostDate.getYear()) { + if (layoutPostDateEnd.getFullYear() === layoutPostDate.getFullYear()) { if (layoutPostDateEnd.getHours() === layoutPostDate.getHours()) { if (layoutPostDateEnd.getMinutes() === layoutPostDate.getMinutes()) { var resultOfStateProps = {"class": "red"}; |