1
0
mirror of https://github.com/alanorth/hugo-theme-bootstrap4-blog.git synced 2025-05-16 09:13:01 +02:00

23 Commits

Author SHA1 Message Date
9b877752b7 Version 1.5.0 2020-05-17 22:48:58 +03:00
ef714f2192 layouts: Fix error in Haven invocation 2020-05-17 22:45:23 +03:00
d72552cde3 layouts: Update Haven invocation
If the user has configured a cookie consent information URL we will
show it in the banner.
2020-05-17 22:42:56 +03:00
21aab8a79d README.md: Update Google Analytics description
Now consent is mandatory if you enable Google Analytics.
2020-05-17 22:40:32 +03:00
26f170bfdd layouts: Test for existence of Google Analytics ID
Previously we showed the Cookie Usage banner if the site's config
had a cookie consent URL specified. As of 2018-05 (GDPR) it makes
more sense to only display this banner if the site has a Google
Analytics ID set. Because we are using Haven for consent manage-
ment we can now inject Google Analytics automatically after the
user has agreed, so we no longer need to use Hugo's internal te-
mplate.
2020-05-17 22:32:12 +03:00
dedea8ccc0 README.md: Update feature description for Google Analytics 2020-05-17 22:26:24 +03:00
006e3f49bd CHANGELOG.md: Move unreleased changes to v1.5.0 2020-05-17 22:24:52 +03:00
a019ed776f CHANGELOG.md: Add note about Haven 2020-05-13 14:19:04 +03:00
3b360d2eef Use haven for GDPR popup instead of cookieconsent
Haven is newer and more well maintained (and also it is actually
open source instead of open core with an upsell to a paid subscrip-
tion). Haven is configured to be 100% *opt-in* for Google Analytics,
which means it does not load or send a hit until the user agrees.

This is mostly a drop-in replacement, but translations need to make
sure the following strings are updated:

- cookieAccept
- cookieDecline
2020-05-13 13:19:41 +03:00
e840f783e7 CHANGELOG: Add unreleased changes 2020-05-13 10:01:18 +03:00
8da96f34ef Regenerate static assets 2020-05-13 10:00:27 +03:00
2845e18f9a package.json: Run npm update
Minor version bumps to webpack, fontawesome, and node-sass.
2020-05-13 09:58:50 +03:00
8448af2481 Bootstrap v4.5.0
See: https://github.com/twbs/bootstrap/releases/tag/v4.5.0
2020-05-13 09:54:43 +03:00
a390958117 Revert ".travis.yml: Use an LXD container instead of VM"
This reverts commit faa3c3cf5bf96fb6e4c0cb05b6232c3bfde45127.

Build took over six minutes for each Node.js version because NVM
had to build each from source. So yeah, let's go back to amd64 VMs.
2020-03-30 09:31:34 +03:00
faa3c3cf5b .travis.yml: Use an LXD container instead of VM
We need to specify OS and Arch in order to use an LXD container in-
stead of a VM. This should theoretically be much faster according
to the Travis docs. Here we are building on arm64 because there is
no amd64 container support right now, but it shouldn't matter beca-
use we are only doing npm build.

See: https://docs.travis-ci.com/user/reference/overview/
2020-03-30 09:16:38 +03:00
bbc5ef18cf .travis.yml: Don't use Node.js v14
It is not released yet.

See: https://nodejs.org/en/about/releases/
2020-03-29 16:49:49 +03:00
1cb082e1f1 .travis.yml: Update
Remove deprecated sudo, update Node.js versions to current actively
maintained and LTS versions, use Ubuntu 18.04 "Bionic" environment
instead of 16.04 "Xenial".
2020-03-29 16:44:33 +03:00
3a83d4e43e CHANGELOG.md: Add note about DE i18n strings 2020-03-25 14:18:53 +02:00
3c21de9fcd Added missing language keys DE 2020-03-25 14:16:49 +02:00
ce89342827 exampleSite/config.toml: Show how to override date format 2020-03-22 15:28:33 +02:00
a2ac9fe29e CHANGELOG.md: Update cookieconsent to 3.1.1 2020-03-22 15:10:23 +02:00
77e05f010e Regenerate static asssets 2020-03-22 15:09:46 +02:00
320ee71b75 Update to cookieconsent 3.1.1
In my minimal testing this works for the default popup.
2020-03-22 15:09:01 +02:00
27 changed files with 618 additions and 942 deletions

View File

@ -1,10 +1,9 @@
language: node_js
node_js:
- 8
- 10
- 11
- 12
- 13
script: npm run build
sudo: false
dist: xenial
dist: bionic
# vim: ts=2 sw=2 et

View File

@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [[1.5.0]] - 2020-05-17
### Updated
- i18n language keys for German (#dermellor, #131)
- Boostrap v4.5.0
- Minor version bump for webpack, node-sass, and fontawesome
### Changed
- Use Haven for GDPR-compliant popup instead of cookieconsent, which is now
configured as *opt-in* and does not load Google Analytics or send a hit until
the user agrees.
- Note to translators that some strings have changed, please check:
- `cookieAccept`: the string for the "Agree" button
- `cookieDecline`: the string for the "Disagree" button
## [[1.4.2]] - 2020-03-22
### Fixed
- Encoding of dates in HTML (@alanorth)

View File

@ -13,9 +13,8 @@ See [picturingjordan.com](https://picturingjordan.com) for an example of this th
- robots.txt linking to XML sitemap (disabled by default, see [Hugo docs](https://gohugo.io/extras/robots-txt/))
- Basic support for [multi-lingual content](https://gohugo.io/content-management/multilingual/) (added in Hugo 0.17) and user interface translation (i18n), including RTL languages like Arabic and Farsi
- Supports Google, Bing, and Yandex site verification via meta tags
- Supports Google Analytics (async version), see [Hugo docs](https://gohugo.io/extras/analytics/)
- Supports GDPR-compliant Google Analytics (script is not even loaded until *after* the user agrees) with configurable consent banner, see [`exampleSite/config.toml`](https://github.com/alanorth/hugo-theme-bootstrap4-blog/blob/master/exampleSite/config.toml)
- Supports Disqus comments, see [Hugo docs](https://gohugo.io/extras/comments/)
- Can show a message about cookie usage to the user, see [`exampleSite/config.toml`](https://github.com/alanorth/hugo-theme-bootstrap4-blog/blob/master/exampleSite/config.toml)
- Allow addition of custom `<head>` code in site's `layouts/partials/head-custom.html` (see [#17](https://github.com/alanorth/hugo-theme-bootstrap4-blog/pull/17))
- Configurable display of summaries of content in list templates.
- Configurable keywords for every post

View File

@ -1,6 +0,0 @@
.cc-window{opacity:1;transition:opacity 1s ease}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{transition:transform 1s ease}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-bottom,.cc-animate.cc-revoke.cc-active.cc-top,.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;overflow:hidden;transition:max-height 1s}
.cc-link,.cc-revoke:hover{text-decoration:underline}.cc-revoke,.cc-window{position:fixed;overflow:hidden;box-sizing:border-box;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;z-index:9999}.cc-window.cc-static{position:static}.cc-window.cc-floating{padding:2em;max-width:24em;-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner{padding:1em 1.8em;width:100%;-ms-flex-direction:row;flex-direction:row}.cc-revoke{padding:.5em}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;display:inline-block;padding:.2em}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{display:block;padding:.4em .8em;font-size:.9em;font-weight:700;border-width:2px;border-style:solid;text-align:center;white-space:nowrap}.cc-banner .cc-btn:last-child{min-width:140px}.cc-highlight .cc-btn:first-child{background-color:transparent;border-color:transparent}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:transparent;text-decoration:underline}.cc-close{display:block;position:absolute;top:.5em;right:.5em;font-size:1.6em;opacity:.9;line-height:.75}.cc-close:focus,.cc-close:hover{opacity:1}
.cc-revoke.cc-top{top:0;left:3em;border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}.cc-revoke.cc-bottom{bottom:0;left:3em;border-top-left-radius:.5em;border-top-right-radius:.5em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{display:block;margin-bottom:1em}.cc-window.cc-floating .cc-compliance{-ms-flex:1;flex:1}.cc-window.cc-banner{-ms-flex-align:center;align-items:center}.cc-banner.cc-top{left:0;right:0;top:0}.cc-banner.cc-bottom{left:0;right:0;bottom:0}.cc-banner .cc-message{-ms-flex:1;flex:1}.cc-compliance{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:justify;align-content:space-between}.cc-compliance>.cc-btn{-ms-flex:1;flex:1}.cc-btn+.cc-btn{margin-left:.5em}
@media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px) and (orientation:portrait),screen and (max-width:736px) and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner .cc-compliance{-ms-flex:1;flex:1}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-ms-flex-align:unset;align-items:unset}}
.cc-floating.cc-theme-classic{padding:1.2em;border-radius:5px}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;display:inline;-ms-flex:none;flex:none}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block}
.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em 2em 1.5em}.cc-banner.cc-theme-edgeless .cc-btn{margin:0;padding:.8em 1.8em;height:100%}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

12
assets/js/haven.umd.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -91,5 +91,7 @@ summaryLength = 50
# Languages to render
#[languages.en]
#[languages.bg]
# Bulgarian date format is dd.mm.yyyy
#date_format = "02.01.2006"
# vim: ts=2 sw=2 et

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: ".اعْرَف أَكْثَر"
- id: cookieDismiss
- id: cookieAccept
translation: "!أُوَافِق"
- id: backToTop

View File

@ -28,8 +28,11 @@
- id: cookieLink
translation: "Научете повече."
- id: cookieDismiss
translation: "Разбрах!"
- id: cookieAccept
translation: "Съгласен съм"
- id: cookieDecline
translation: "Не съм съгласен"
- id: backToTop
translation: "Нагоре"

View File

@ -28,11 +28,17 @@
- id: cookieLink
translation: "Weitere Informationen"
- id: cookieDismiss
translation: "OK"
- id: cookieDecline
translation: "Nicht zustimmen"
- id: backToTop
translation: "Zurück zum Anfang"
- id: links
translation: "Links"
- id: authoredBy
translation: "von"
- id: postedIn
translation: "in"

View File

@ -28,8 +28,11 @@
- id: cookieLink
translation: "Learn more."
- id: cookieDismiss
translation: "Got it!"
- id: cookieAccept
translation: "Agree"
- id: cookieDecline
translation: "Disagree"
- id: backToTop
translation: "Back to top"

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "Leer más."
- id: cookieDismiss
- id: cookieAccept
translation: "Comprendido!"
- id: backToTop

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: ".بیشتر بدانید"
- id: cookieDismiss
- id: cookieAccept
translation: "!متوجه شدم"
- id: backToTop

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "En savoir plus."
- id: cookieDismiss
- id: cookieAccept
translation: "J'ai compris !"
- id: backToTop

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "Pelajari"
- id: cookieDismiss
- id: cookieAccept
translation: "Paham!"
- id: backToTop

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "Lees hier meer"
- id: cookieDismiss
- id: cookieAccept
translation: "OK"
- id: backToTop

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "Lær mer."
- id: cookieDismiss
- id: cookieAccept
translation: "Greit!"
- id: backToTop

View File

@ -28,5 +28,5 @@
- id: cookieLink
translation: "Saiba mais."
- id: cookieDismiss
- id: cookieAccept
translation: "Ok!"

View File

@ -28,7 +28,7 @@
- id: cookieLink
translation: "進一步瞭解。"
- id: cookieDismiss
- id: cookieAccept
translation: "知道了!"
- id: backToTop

View File

@ -31,9 +31,7 @@
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{ end -}}
{{ template "_internal/google_analytics_async.html" . }}
{{ if .Site.Params.cookie_consent_info_url }}
{{ if .Site.GoogleAnalytics }}
{{ partial "cookie-consent.html" . }}
{{ end }}

View File

@ -1,28 +1,40 @@
{{ $cookieConsentStyle := resources.Get "css/cookieconsent.min.css" | resources.Fingerprint }}
<link href="{{ $cookieConsentStyle.Permalink }}" rel="stylesheet" type="text/css"{{ if not .Site.Params.disable_sri }} integrity="{{ $cookieConsentStyle.Data.Integrity }}" crossorigin="anonymous"{{ end }}>
{{ $cookieConsentScript := resources.Get "js/cookieconsent.min.js" | resources.Fingerprint }}
<script src="{{ $cookieConsentScript.Permalink }}"{{ if not .Site.Params.disable_sri }} integrity="{{ $cookieConsentScript.Data.Integrity }}" crossorigin="anonymous"{{ end }} async></script>
{{ $cookieConsentScript := resources.Get "js/haven.umd.min.js" | resources.Fingerprint }}
<script src="{{ $cookieConsentScript.Permalink }}"{{ if not .Site.Params.disable_sri }} integrity="{{ $cookieConsentScript.Data.Integrity }}" crossorigin="anonymous"{{ end }}></script>
<script>
window.addEventListener("load", function(){
window.cookieconsent.initialise({
"palette": {
"popup": {
"background": "#428bca",
"text": "#ffffff"
},
"button": {
"background": "#f71559"
}
Haven.create({
notification: {
{{ with .Site.Params.cookie_consent_info_url -}}
policyUrl: {{ . | absURL }},
{{- end }}
styles: {
background: '#428bca',
textColor: '#ffffff',
buttonBackgroundColor: '#f71559',
buttonTextColor: '#ffffff',
},
},
"content": {
"message": '{{ i18n "cookieMessage" }}',
"dismiss": '{{ i18n "cookieDismiss" }}',
"link": '{{ i18n "cookieLink" }}',
"href": "{{ .Site.Params.cookie_consent_info_url | absURL}}"
translations: {
{{ .Lang }}: {
notification: {
policy: '{{ i18n "cookieLink" }}',
message: '{{ i18n "cookieMessage" }}',
accept: '{{ i18n "cookieAccept" }}',
decline: '{{ i18n "cookieDecline" }}',
}
},
},
"position": "bottom-right"
})});
services: [
{
name: 'google-analytics',
options: {
id: {{ .Site.GoogleAnalytics }},
},
purposes: ['analytics'],
inject: true,
}
]
});
</script>
{{- /* vim: set ts=2 sw=2 et: */}}

1373
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "hugo-theme-bootstrap4-blog",
"version": "1.4.2",
"version": "1.5.0",
"description": "A Bootstrap v4 theme for the Hugo static site generator.",
"repository": {
"type": "git",
@ -9,7 +9,7 @@
"scripts": {
"build:css": "node-sass --output-style expanded --precision 6 source/scss/style.scss assets/css/style.css.tmp && cleancss --level 1 assets/css/style.css.tmp -o assets/css/style.css",
"build:rtlcss": "rtlcss -s assets/css/style.css.tmp assets/css/style.rtl.css.tmp && cleancss --level 1 assets/css/style.rtl.css.tmp -o assets/css/style.rtl.css",
"build:cookieconsent": "cp node_modules/cookieconsent/build/cookieconsent.min.css assets/css && cp node_modules/cookieconsent/build/cookieconsent.min.js assets/js",
"build:cookieconsent": "cp node_modules/@chiiya/haven/dist/haven.umd.min.js assets/js",
"build:js": "webpack",
"build": "npm run build:css && npm run build:rtlcss && npm run build:js && npm run build:cookieconsent && npm run clean",
"clean": "rm assets/css/style.css.tmp assets/css/style.rtl.css.tmp"
@ -18,15 +18,15 @@
"author": "Alan Orth",
"license": "CC-BY-3.0",
"devDependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.27",
"@fortawesome/free-brands-svg-icons": "^5.12.1",
"@fortawesome/free-solid-svg-icons": "^5.12.1",
"bootstrap": "~4.4.1",
"@chiiya/haven": "^0.6.0",
"@fortawesome/fontawesome-svg-core": "^1.2.28",
"@fortawesome/free-brands-svg-icons": "^5.13.0",
"@fortawesome/free-solid-svg-icons": "^5.13.0",
"bootstrap": "~4.5.0",
"clean-css-cli": "^4.3.0",
"cookieconsent": "3.0.4",
"node-sass": "^4.13.1",
"node-sass": "^4.14.1",
"rtlcss": "^2.5.0",
"webpack": "^4.42.0",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11"
}
}

View File

@ -1,7 +1,7 @@
/*!
* Bootstrap v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Bootstrap v4.5.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/