j1-template 2021.1.9 → 2021.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/error_pages/HTTP204.html +1 -1
- data/assets/themes/j1/adapter/js/cookieConsent.js +16 -9
- data/assets/themes/j1/adapter/js/j1.js +43 -13
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -275
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/_defaults/private.default.yml +119 -0
- data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +1 -1
- data/lib/starter_web/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/_plugins/lunr_index.rb +1 -1
- data/lib/starter_web/dot.gitignore +1 -1
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae5b79c95e56c200832abdfc497c3ed788f54303351ea239554c9fbad3fa7f48
|
4
|
+
data.tar.gz: db7b40a09194fc449699ff6f4a21a4b432c7fd2a94e05cff88c598ef6e2ab175
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4315042ef6c11323174b561b7c28bf4ea98fe317b35cfe2ad58ed3856fe3c09a929aa5e2cdb3bd2f9e600c3d6b250a3a21b65e33cd6423e0f22901cc1cdf1961
|
7
|
+
data.tar.gz: 9783b9f09b8e669fb94dc49fe0cae9f5cb23d822591a4371d8f70eee2dadafaaf57c25968b33a0a2d00f3141fcc73ddcd9093402adb72dd2bb09c683aa1fa0c3
|
@@ -51,7 +51,7 @@ sitemap: false
|
|
51
51
|
|
52
52
|
{% if language == 'en' %}
|
53
53
|
{% assign title = "No Content" %}
|
54
|
-
{% assign reason = "The request processed successfully. <br/>
|
54
|
+
{% assign reason = "The request processed successfully. <br/> This page has been disabled for technical reasons." %}
|
55
55
|
{% assign contact_issue = "Technical Contact" %}
|
56
56
|
{% endif %}
|
57
57
|
|
@@ -28,14 +28,16 @@ regenerate: true
|
|
28
28
|
{% comment %} Set config files
|
29
29
|
-------------------------------------------------------------------------------- {% endcomment %}
|
30
30
|
{% assign environment = site.environment %}
|
31
|
+
{% assign blocks = site.data.blocks %}
|
31
32
|
{% assign modules = site.data.modules %}
|
33
|
+
{% assign template_config = site.data.j1_config %}
|
32
34
|
|
33
35
|
{% comment %} Set config data
|
34
36
|
-------------------------------------------------------------------------------- {% endcomment %}
|
35
37
|
{% assign consent_defaults = modules.defaults.cookieconsent.defaults %}
|
36
38
|
{% assign consent_settings = modules.cookieconsent.settings %}
|
37
|
-
{% assign tracking_enabled =
|
38
|
-
{% assign tracking_id =
|
39
|
+
{% assign tracking_enabled = template_config.analytics.enabled %}
|
40
|
+
{% assign tracking_id = template_config.analytics.google.tracking_id %}
|
39
41
|
|
40
42
|
{% comment %} Set config options
|
41
43
|
-------------------------------------------------------------------------------- {% endcomment %}
|
@@ -225,20 +227,25 @@ j1.adapter['cookieConsent'] = (function (j1, window) {
|
|
225
227
|
$('#quickLinksCookieButton').css('display', 'block');
|
226
228
|
}
|
227
229
|
|
230
|
+
// jadams, 2021-07-11: moded to j1 adapter (displayPage)
|
231
|
+
//
|
228
232
|
// NOTE: Warning needs to be moved to another module
|
229
233
|
// because page is reloaded after selection
|
230
234
|
//
|
231
|
-
if (tracking_enabled && !tracking_id_valid) {
|
232
|
-
|
235
|
+
// if (tracking_enabled && !tracking_id_valid) {
|
236
|
+
// logger.error('tracking enabled, but invalid tracking id found: ' + tracking_id);
|
237
|
+
// } else {
|
238
|
+
// logger.warn('tracking enabled, tracking id found: ' + tracking_id);
|
239
|
+
// }
|
240
|
+
|
241
|
+
// for development only
|
242
|
+
if (environment === 'development') {
|
243
|
+
gaCookies.forEach(item => console.log('cookieConsent: ' + item));
|
233
244
|
}
|
234
245
|
|
235
|
-
// local adapter
|
236
|
-
|
237
|
-
// for debugging
|
238
|
-
// gaCookies.forEach(item => console.log('cookieConsent: ' + item));
|
239
|
-
|
240
246
|
if (user_agent.includes('iPad')) {
|
241
247
|
logger.warn('Product detected : ' + platform.product);
|
248
|
+
logger.warn('Skip deleting (unwanted) cookies for this platform');
|
242
249
|
}
|
243
250
|
|
244
251
|
// Manage Google Analytics OptIn/Out
|
@@ -41,9 +41,9 @@ regenerate: true
|
|
41
41
|
|
42
42
|
{% comment %} Set config files
|
43
43
|
-------------------------------------------------------------------------------- {% endcomment %}
|
44
|
-
{% assign template_config = site.data.j1_config %}
|
45
44
|
{% assign blocks = site.data.blocks %}
|
46
45
|
{% assign modules = site.data.modules %}
|
46
|
+
{% assign template_config = site.data.j1_config %}
|
47
47
|
|
48
48
|
{% comment %} Set config data
|
49
49
|
-------------------------------------------------------------------------------- {% endcomment %}
|
@@ -56,6 +56,8 @@ regenerate: true
|
|
56
56
|
{% assign toccer_settings = modules.toccer.settings %}
|
57
57
|
{% assign themer_defaults = modules.defaults.themer.defaults %}
|
58
58
|
{% assign themer_settings = modules.themer.settings %}
|
59
|
+
{% assign tracking_enabled = template_config.analytics.enabled %}
|
60
|
+
{% assign tracking_id = template_config.analytics.google.tracking_id %}
|
59
61
|
|
60
62
|
{% assign authentication_defaults = modules.defaults.authentication.defaults %}
|
61
63
|
{% assign authentication_settings = modules.authentication.settings %}
|
@@ -122,6 +124,11 @@ var j1 = (function () {
|
|
122
124
|
var state = 'not_started';
|
123
125
|
var mode = 'not_detected';
|
124
126
|
|
127
|
+
// Tracking information (GA)
|
128
|
+
var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
|
129
|
+
var tracking_id = '{{tracking_id}}';
|
130
|
+
var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
|
131
|
+
|
125
132
|
var current_user_data;
|
126
133
|
var current_page;
|
127
134
|
var previous_page;
|
@@ -157,14 +164,13 @@ var j1 = (function () {
|
|
157
164
|
var baseUrl;
|
158
165
|
var referrer;
|
159
166
|
|
167
|
+
// initial cookie values
|
160
168
|
var cookie_names = {
|
161
169
|
'app_session': '{{template_config.cookies.app_session}}',
|
162
170
|
'user_session': '{{template_config.cookies.user_session}}',
|
163
171
|
'user_state': '{{template_config.cookies.user_state}}',
|
164
172
|
'user_consent': '{{template_config.cookies.user_consent}}'
|
165
173
|
};
|
166
|
-
|
167
|
-
// user SESSION cookie (initial values)
|
168
174
|
var user_session = {
|
169
175
|
'mode': 'web',
|
170
176
|
'writer': 'web',
|
@@ -182,7 +188,6 @@ var j1 = (function () {
|
|
182
188
|
'previous_page': 'na',
|
183
189
|
'last_pager': '/pages/public/blog/navigator/'
|
184
190
|
};
|
185
|
-
|
186
191
|
var user_state = {
|
187
192
|
'theme_css': '',
|
188
193
|
'theme_name': '',
|
@@ -191,8 +196,7 @@ var j1 = (function () {
|
|
191
196
|
'session_active': false,
|
192
197
|
'last_session_ts': ''
|
193
198
|
};
|
194
|
-
|
195
|
-
var user_consent;
|
199
|
+
var user_consent = {};
|
196
200
|
|
197
201
|
// ---------------------------------------------------------------------------
|
198
202
|
// helper functions
|
@@ -223,12 +227,12 @@ var j1 = (function () {
|
|
223
227
|
// -----------------------------------------------------------------------
|
224
228
|
// global var (function)
|
225
229
|
// -----------------------------------------------------------------------
|
226
|
-
var logger
|
227
|
-
var url
|
228
|
-
var baseUrl
|
229
|
-
var date
|
230
|
-
var timestamp_now
|
231
|
-
var curr_state
|
230
|
+
var logger = log4javascript.getLogger('j1.init');
|
231
|
+
var url = new liteURL(window.location.href);
|
232
|
+
var baseUrl = url.origin;
|
233
|
+
var date = new Date();
|
234
|
+
var timestamp_now = date.toISOString();
|
235
|
+
var curr_state = 'started';
|
232
236
|
|
233
237
|
// -----------------------------------------------------------------------
|
234
238
|
// options loader
|
@@ -312,7 +316,15 @@ var j1 = (function () {
|
|
312
316
|
expires: 365
|
313
317
|
});
|
314
318
|
|
315
|
-
user_state
|
319
|
+
// jadams, 2021-07-11: Found situation that user_state NOT initialized
|
320
|
+
// correctly (user_state == false).
|
321
|
+
// TODO: Check if/why user state (cookie NOT created?) NOT initialized
|
322
|
+
// for what reason.
|
323
|
+
if (!user_state) {
|
324
|
+
logger.warn('user session cookie NOT found');
|
325
|
+
user_state = j1.readCookie(cookie_names.user_state);
|
326
|
+
user_state.session_active = true;
|
327
|
+
}
|
316
328
|
|
317
329
|
if (!user_consent.analyses || !user_consent.personalization) {
|
318
330
|
// expire consent|state cookies to session
|
@@ -821,6 +833,15 @@ var j1 = (function () {
|
|
821
833
|
// display page
|
822
834
|
$('#no_flicker').css('display', 'block');
|
823
835
|
|
836
|
+
// NOTE: Placed tracking warning/info here because page may reloaded
|
837
|
+
// after cookie consent selection
|
838
|
+
//
|
839
|
+
if (tracking_enabled && !tracking_id_valid) {
|
840
|
+
logger.error('tracking enabled, but invalid tracking id found: ' + tracking_id);
|
841
|
+
} else {
|
842
|
+
logger.warn('tracking enabled, tracking id found: ' + tracking_id);
|
843
|
+
}
|
844
|
+
|
824
845
|
// show|hide cookie icon (should MOVED to Cookiebar ???)
|
825
846
|
if (j1.existsCookie(cookie_names.user_consent)) {
|
826
847
|
// Display cookie icon
|
@@ -898,6 +919,15 @@ var j1 = (function () {
|
|
898
919
|
// display page
|
899
920
|
$('#no_flicker').css('display', 'block');
|
900
921
|
|
922
|
+
// NOTE: Placed tracking warning/info here because page may reloaded
|
923
|
+
// after cookie consent selection
|
924
|
+
//
|
925
|
+
if (tracking_enabled && !tracking_id_valid) {
|
926
|
+
logger.error('tracking enabled, but invalid tracking id found: ' + tracking_id);
|
927
|
+
} else {
|
928
|
+
logger.warn('tracking enabled, tracking id found: ' + tracking_id);
|
929
|
+
}
|
930
|
+
|
901
931
|
logger.info('mode detected: web');
|
902
932
|
logger.info('hide signin icon');
|
903
933
|
$('#quickLinksSignInOutButton').css('display', 'none');
|
@@ -24,278 +24,4 @@
|
|
24
24
|
# outside of J1 Template!
|
25
25
|
# -----------------------------------------------------------------------------
|
26
26
|
*/
|
27
|
-
|
28
|
-
|
29
|
-
// -----------------------------------------------------------------------------
|
30
|
-
// ESLint shimming
|
31
|
-
// -----------------------------------------------------------------------------
|
32
|
-
/* eslint indent: "off" */
|
33
|
-
/* eslint no-unused-vars: "off" */
|
34
|
-
/* eslint no-undef: "off" */
|
35
|
-
/* eslint no-redeclare: "off" */
|
36
|
-
/* eslint indent: "off" */
|
37
|
-
/* eslint JSUnfilteredForInLoop: "off" */
|
38
|
-
// -----------------------------------------------------------------------------
|
39
|
-
|
40
|
-
function BootstrapCookieConsent(props) {
|
41
|
-
var logText;
|
42
|
-
var current_page;
|
43
|
-
var whitelisted;
|
44
|
-
var logger = log4javascript.getLogger('j1.core.bsCookieConsent');
|
45
|
-
var modalId = "bccs-modal"
|
46
|
-
var self = this
|
47
|
-
var detailedSettingsShown = false
|
48
|
-
|
49
|
-
logger.info('Initializing core module: started');
|
50
|
-
logger.info('state: started');
|
51
|
-
|
52
|
-
this.props = {
|
53
|
-
autoShowDialog: true, // disable autoShowModal on the privacy policy and legal notice pages, to make these pages readable
|
54
|
-
language: navigator.language, // the language, in which the modal is shown
|
55
|
-
languages: ["en", "de"], // supported languages (in ./content/), defaults to first in array
|
56
|
-
contentURL: "./content", // this URL must contain the dialogs content in the needed languages
|
57
|
-
cookieName: "cookie-consent-settings", // the name of the cookie in which the configuration is stored as JSON
|
58
|
-
cookieStorageDays: 365, // the duration the cookie configuration is stored on the client
|
59
|
-
postSelectionCallback: undefined, // callback function, called after the user has made his selection
|
60
|
-
whitelisted: [], // pages NO consent modal page is issued
|
61
|
-
xhr_data_element: "" // container for the language-specific consent modal taken from /assets/data/cookieconsent.html
|
62
|
-
}
|
63
|
-
|
64
|
-
for (var property in props) {
|
65
|
-
this.props[property] = props[property];
|
66
|
-
}
|
67
|
-
|
68
|
-
this.language = this.props.language
|
69
|
-
if (this.language.indexOf("-") !== -1) {
|
70
|
-
this.language = this.language.split("-")[0];
|
71
|
-
}
|
72
|
-
|
73
|
-
if (!this.props.languages.includes(this.language)) {
|
74
|
-
this.language = this.props.languages[0]; // fallback on default language
|
75
|
-
}
|
76
|
-
|
77
|
-
var Cookie = {
|
78
|
-
set: function (name, value, days) {
|
79
|
-
var value_encoded = window.btoa(value);
|
80
|
-
var expires = "";
|
81
|
-
if (days) {
|
82
|
-
var date = new Date();
|
83
|
-
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
84
|
-
expires = "; expires=" + date.toUTCString();
|
85
|
-
}
|
86
|
-
document.cookie = name + "=" + (value_encoded || "") + expires + "; Path=/; SameSite=Strict;";
|
87
|
-
},
|
88
|
-
get: function (name) {
|
89
|
-
var nameEQ = name + "=";
|
90
|
-
var ca = document.cookie.split(';');
|
91
|
-
for (var i = 0; i < ca.length; i++) {
|
92
|
-
var c = ca[i];
|
93
|
-
while (c.charAt(0) === ' ') {
|
94
|
-
c = c.substring(1, c.length);
|
95
|
-
}
|
96
|
-
if (c.indexOf(nameEQ) === 0) {
|
97
|
-
var value_encoded = c.substring(nameEQ.length, c.length);
|
98
|
-
var value = window.atob(value_encoded);
|
99
|
-
return value;
|
100
|
-
}
|
101
|
-
}
|
102
|
-
return undefined
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
var Events = {
|
107
|
-
documentReady: function (onDocumentReady) {
|
108
|
-
if (document.readyState !== 'loading') {
|
109
|
-
onDocumentReady();
|
110
|
-
} else {
|
111
|
-
document.addEventListener('DOMContentLoaded', onDocumentReady);
|
112
|
-
}
|
113
|
-
}
|
114
|
-
}
|
115
|
-
|
116
|
-
function showDialog(options) {
|
117
|
-
Events.documentReady(function () {
|
118
|
-
|
119
|
-
self.modal = document.getElementById(modalId);
|
120
|
-
if (!self.modal) {
|
121
|
-
logger.info('Load consent modal');
|
122
|
-
self.modal = document.createElement("div");
|
123
|
-
self.modal.id = modalId;
|
124
|
-
self.modal.setAttribute("class", "modal fade");
|
125
|
-
self.modal.setAttribute("tabindex", "-1");
|
126
|
-
self.modal.setAttribute("role", "dialog");
|
127
|
-
self.modal.setAttribute("aria-labelledby", modalId);
|
128
|
-
document.body.append(self.modal);
|
129
|
-
self.$modal = $(self.modal);
|
130
|
-
|
131
|
-
if (self.props.postSelectionCallback) {
|
132
|
-
self.$modal.on("hidden.bs.modal", function () {
|
133
|
-
self.props.postSelectionCallback();
|
134
|
-
});
|
135
|
-
}
|
136
|
-
|
137
|
-
// load modal content
|
138
|
-
//
|
139
|
-
var templateUrl = self.props.contentURL + '/' + 'index.html';
|
140
|
-
$.get(templateUrl)
|
141
|
-
.done(function (data) {
|
142
|
-
logger.info('Loading Consent modal: successfully');
|
143
|
-
self.modal.innerHTML = data;
|
144
|
-
self.modal.innerHTML = $('#' + self.props.xhr_data_element).eq(0).html();
|
145
|
-
|
146
|
-
$(self.modal).modal({
|
147
|
-
backdrop: "static",
|
148
|
-
keyboard: false
|
149
|
-
});
|
150
|
-
|
151
|
-
self.$buttonDoNotAgree = $("#bccs-buttonDoNotAgree");
|
152
|
-
self.$buttonAgree = $("#bccs-buttonAgree");
|
153
|
-
self.$buttonSave = $("#bccs-buttonSave");
|
154
|
-
self.$buttonAgreeAll = $("#bccs-buttonAgreeAll");
|
155
|
-
|
156
|
-
logger.info('Load/Initialze options from cookie');
|
157
|
-
|
158
|
-
updateButtons();
|
159
|
-
updateOptionsFromCookie();
|
160
|
-
|
161
|
-
$("#bccs-options").on("hide.bs.collapse", function () {
|
162
|
-
detailedSettingsShown = false;
|
163
|
-
updateButtons();
|
164
|
-
}).on("show.bs.collapse", function () {
|
165
|
-
detailedSettingsShown = true;
|
166
|
-
updateButtons();
|
167
|
-
});
|
168
|
-
|
169
|
-
logger.info('Initialze event handler');
|
170
|
-
|
171
|
-
self.$buttonDoNotAgree.click(function () {
|
172
|
-
doNotAgree();
|
173
|
-
});
|
174
|
-
self.$buttonAgree.click(function () {
|
175
|
-
agreeAll();
|
176
|
-
});
|
177
|
-
self.$buttonSave.click(function () {
|
178
|
-
$("#bccs-options").collapse('hide');
|
179
|
-
saveSettings();
|
180
|
-
updateOptionsFromCookie();
|
181
|
-
});
|
182
|
-
self.$buttonAgreeAll.click(function () {
|
183
|
-
$("#bccs-options").collapse('hide');
|
184
|
-
agreeAll();
|
185
|
-
updateOptionsFromCookie();
|
186
|
-
});
|
187
|
-
})
|
188
|
-
.fail(function () {
|
189
|
-
logger.error('Loading Consent modal: failed');
|
190
|
-
logger.info('Probably no `contentURL` set');
|
191
|
-
})
|
192
|
-
} else {
|
193
|
-
self.$modal.modal("show")
|
194
|
-
}
|
195
|
-
}.bind(this))
|
196
|
-
}
|
197
|
-
|
198
|
-
function updateOptionsFromCookie() {
|
199
|
-
var settings = self.getSettings();
|
200
|
-
if (settings) {
|
201
|
-
for (var setting in settings) {
|
202
|
-
var $checkbox = self.$modal.find("#bccs-options .bccs-option[data-name='" + setting + "'] input[type='checkbox']");
|
203
|
-
$checkbox.prop("checked", settings[setting]);
|
204
|
-
}
|
205
|
-
}
|
206
|
-
}
|
207
|
-
|
208
|
-
function updateButtons() {
|
209
|
-
if (detailedSettingsShown) {
|
210
|
-
self.$buttonDoNotAgree.hide();
|
211
|
-
self.$buttonAgree.hide();
|
212
|
-
self.$buttonSave.show();
|
213
|
-
self.$buttonAgreeAll.show();
|
214
|
-
} else {
|
215
|
-
self.$buttonDoNotAgree.show();
|
216
|
-
self.$buttonAgree.show();
|
217
|
-
self.$buttonSave.hide();
|
218
|
-
self.$buttonAgreeAll.hide();
|
219
|
-
}
|
220
|
-
}
|
221
|
-
|
222
|
-
function gatherOptions(setAllExceptNecessary) {
|
223
|
-
var $options = self.$modal.find("#bccs-options .bccs-option");
|
224
|
-
var options = {};
|
225
|
-
for (var i = 0; i < $options.length; i++) {
|
226
|
-
var option = $options[i];
|
227
|
-
var name = option.getAttribute("data-name");
|
228
|
-
if (name === "necessary") {
|
229
|
-
options[name] = true;
|
230
|
-
} else if (setAllExceptNecessary === undefined) {
|
231
|
-
var $checkbox = $(option).find("input[type='checkbox']");
|
232
|
-
options[name] = $checkbox.prop("checked");
|
233
|
-
} else {
|
234
|
-
options[name] = !!setAllExceptNecessary;
|
235
|
-
}
|
236
|
-
}
|
237
|
-
return options
|
238
|
-
}
|
239
|
-
|
240
|
-
function agreeAll() {
|
241
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(true)), self.props.cookieStorageDays);
|
242
|
-
self.$modal.modal("hide");
|
243
|
-
}
|
244
|
-
|
245
|
-
function doNotAgree() {
|
246
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(false)), self.props.cookieStorageDays);
|
247
|
-
logger.warn('delete cookie: j1.user.consent');
|
248
|
-
// j1.deleteCookie('j1.user.consent');
|
249
|
-
j1.deleteCookie('all');
|
250
|
-
self.$modal.modal('hide')
|
251
|
-
j1.goHome();
|
252
|
-
}
|
253
|
-
|
254
|
-
function saveSettings() {
|
255
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions()), self.props.cookieStorageDays);
|
256
|
-
self.$modal.modal("hide");
|
257
|
-
}
|
258
|
-
|
259
|
-
// call consent dialog if no cookie found (except pages whitelisted)
|
260
|
-
//
|
261
|
-
whitelisted = (this.props.whitelisted.indexOf(window.location.pathname) > -1);
|
262
|
-
if (Cookie.get(this.props.cookieName) === undefined && this.props.autoShowDialog && !whitelisted) {
|
263
|
-
showDialog();
|
264
|
-
}
|
265
|
-
|
266
|
-
// API functions
|
267
|
-
// ---------------------------------------------------------------------------
|
268
|
-
|
269
|
-
logger.info('Initializing core module finished');
|
270
|
-
logger.info('state: finished');
|
271
|
-
|
272
|
-
// show the consent dialog (modal)
|
273
|
-
// ---------------------------------------------------------------------------
|
274
|
-
this.showDialog = function () {
|
275
|
-
whitelisted = (this.props.whitelisted.indexOf(window.location.pathname) > -1);
|
276
|
-
if (!whitelisted) {
|
277
|
-
showDialog();
|
278
|
-
}
|
279
|
-
}
|
280
|
-
|
281
|
-
// collect settings from consent cookie
|
282
|
-
// ---------------------------------------------------------------------------
|
283
|
-
this.getSettings = function (optionName) {
|
284
|
-
var cookie = Cookie.get(self.props.cookieName);
|
285
|
-
if (cookie) {
|
286
|
-
var settings = JSON.parse(Cookie.get(self.props.cookieName));
|
287
|
-
if (optionName === undefined) {
|
288
|
-
return settings;
|
289
|
-
} else {
|
290
|
-
if (settings) {
|
291
|
-
return settings[optionName];
|
292
|
-
} else {
|
293
|
-
return false;
|
294
|
-
}
|
295
|
-
}
|
296
|
-
} else {
|
297
|
-
return undefined;
|
298
|
-
}
|
299
|
-
} // END getSettings
|
300
|
-
|
301
|
-
} // END BootstrapCookieConsent
|
27
|
+
"use strict";function BootstrapCookieConsent(c){var g;var e;var q;var r=log4javascript.getLogger("j1.core.bsCookieConsent");var p="bccs-modal";var l=this;var n=false;r.info("Initializing core module: started");r.info("state: started");this.props={autoShowDialog:true,language:navigator.language,languages:["en","de"],contentURL:"./content",cookieName:"cookie-consent-settings",cookieStorageDays:365,postSelectionCallback:undefined,whitelisted:[],xhr_data_element:""};for(var d in c){this.props[d]=c[d]}this.language=this.props.language;if(this.language.indexOf("-")!==-1){this.language=this.language.split("-")[0]}if(!this.props.languages.includes(this.language)){this.language=this.props.languages[0]}var f={set:function(u,v,x){var w=window.btoa(v);var s="";if(x){var t=new Date();t.setTime(t.getTime()+(x*24*60*60*1000));s="; expires="+t.toUTCString()}document.cookie=u+"="+(w||"")+s+"; Path=/; SameSite=Strict;"},get:function(t){var w=t+"=";var s=document.cookie.split(";");for(var u=0;u<s.length;u++){var y=s[u];while(y.charAt(0)===" "){y=y.substring(1,y.length)}if(y.indexOf(w)===0){var x=y.substring(w.length,y.length);var v=window.atob(x);return v}}return undefined}};var k={documentReady:function(s){if(document.readyState!=="loading"){s()}else{document.addEventListener("DOMContentLoaded",s)}}};function j(s){k.documentReady(function(){l.modal=document.getElementById(p);if(!l.modal){r.info("Load consent modal");l.modal=document.createElement("div");l.modal.id=p;l.modal.setAttribute("class","modal fade");l.modal.setAttribute("tabindex","-1");l.modal.setAttribute("role","dialog");l.modal.setAttribute("aria-labelledby",p);document.body.append(l.modal);l.$modal=$(l.modal);if(l.props.postSelectionCallback){l.$modal.on("hidden.bs.modal",function(){l.props.postSelectionCallback()})}var t=l.props.contentURL+"/index.html";$.get(t).done(function(u){r.info("Loading Consent modal: successfully");l.modal.innerHTML=u;l.modal.innerHTML=$("#"+l.props.xhr_data_element).eq(0).html();$(l.modal).modal({backdrop:"static",keyboard:false});l.$buttonDoNotAgree=$("#bccs-buttonDoNotAgree");l.$buttonAgree=$("#bccs-buttonAgree");l.$buttonSave=$("#bccs-buttonSave");l.$buttonAgreeAll=$("#bccs-buttonAgreeAll");r.info("Load/Initialze options from cookie");i();h();$("#bccs-options").on("hide.bs.collapse",function(){n=false;i()}).on("show.bs.collapse",function(){n=true;i()});r.info("Initialze event handler");l.$buttonDoNotAgree.click(function(){b()});l.$buttonAgree.click(function(){m()});l.$buttonSave.click(function(){$("#bccs-options").collapse("hide");o();h()});l.$buttonAgreeAll.click(function(){$("#bccs-options").collapse("hide");m();h()})}).fail(function(){r.error("Loading Consent modal: failed");r.info("Probably no `contentURL` set")})}else{l.$modal.modal("show")}}.bind(this))}function h(){var u=l.getSettings();if(u){for(var t in u){var s=l.$modal.find("#bccs-options .bccs-option[data-name='"+t+"'] input[type='checkbox']");s.prop("checked",u[t])}}}function i(){if(n){l.$buttonDoNotAgree.hide();l.$buttonAgree.hide();l.$buttonSave.show();l.$buttonAgreeAll.show()}else{l.$buttonDoNotAgree.show();l.$buttonAgree.show();l.$buttonSave.hide();l.$buttonAgreeAll.hide()}}function a(t){var s=l.$modal.find("#bccs-options .bccs-option");var v={};for(var w=0;w<s.length;w++){var y=s[w];var u=y.getAttribute("data-name");if(u==="necessary"){v[u]=true}else{if(t===undefined){var x=$(y).find("input[type='checkbox']");v[u]=x.prop("checked")}else{v[u]=!!t}}}return v}function m(){f.set(l.props.cookieName,JSON.stringify(a(true)),l.props.cookieStorageDays);l.$modal.modal("hide")}function b(){f.set(l.props.cookieName,JSON.stringify(a(false)),l.props.cookieStorageDays);r.warn("delete cookie: j1.user.consent");j1.deleteCookie("all");l.$modal.modal("hide");j1.goHome()}function o(){f.set(l.props.cookieName,JSON.stringify(a()),l.props.cookieStorageDays);l.$modal.modal("hide")}q=(this.props.whitelisted.indexOf(window.location.pathname)>-1);if(f.get(this.props.cookieName)===undefined&&this.props.autoShowDialog&&!q){j()}r.info("Initializing core module finished");r.info("state: finished");this.showDialog=function(){q=(this.props.whitelisted.indexOf(window.location.pathname)>-1);if(!q){j()}};this.getSettings=function(t){var s=f.get(l.props.cookieName);if(s){var u=JSON.parse(f.get(l.props.cookieName));if(t===undefined){return u}else{if(u){return u[t]}else{return false}}}else{return undefined}}};
|
data/lib/j1/version.rb
CHANGED
data/lib/starter_web/Gemfile
CHANGED
@@ -54,7 +54,7 @@ gem 'jekyll', '~> 4.2'
|
|
54
54
|
|
55
55
|
# Theme Rubies, default: J1 Template (NOT used for the development system)
|
56
56
|
#
|
57
|
-
gem 'j1-template', '~> 2021.1.
|
57
|
+
gem 'j1-template', '~> 2021.1.10'
|
58
58
|
|
59
59
|
# ------------------------------------------------------------------------------
|
60
60
|
# PRODUCTION: Gem needed for the Jekyll and J1 prod environment
|
data/lib/starter_web/_config.yml
CHANGED
@@ -53,7 +53,7 @@ environment: production
|
|
53
53
|
# ------------------------------------------------------------------------------
|
54
54
|
# Sets the build version of J1 Template Gem
|
55
55
|
#
|
56
|
-
version: 2021.1.
|
56
|
+
version: 2021.1.10
|
57
57
|
|
58
58
|
# version
|
59
59
|
# ------------------------------------------------------------------------------
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# ------------------------------------------------------------------------------
|
2
|
+
# ~/_data/private.yml
|
3
|
+
# The private.yml file is used to set sensitive private data used by
|
4
|
+
# J1 components to configure security and authentication settings
|
5
|
+
#
|
6
|
+
# Product/Info:
|
7
|
+
# https://jekyll.one
|
8
|
+
#
|
9
|
+
# Copyright (C) 2019 Juergen Adams
|
10
|
+
#
|
11
|
+
# J1 Template is licensed under the MIT License.
|
12
|
+
# See: https://github.com/jekyll-one-org/j1_template/blob/master/LICENSE
|
13
|
+
# ------------------------------------------------------------------------------
|
14
|
+
# NOTE:
|
15
|
+
# As this file contains very confidential data, a productive private.yml
|
16
|
+
# file should ALWAYS be excluded from ANY source published to the public
|
17
|
+
# (e.g. a repo at Github)
|
18
|
+
# ------------------------------------------------------------------------------
|
19
|
+
|
20
|
+
|
21
|
+
# ==============================================================================
|
22
|
+
# GLOBAL settings
|
23
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
24
|
+
global:
|
25
|
+
|
26
|
+
# used by J1 to encrypt cookies
|
27
|
+
session_secret: <your-secret-string>
|
28
|
+
|
29
|
+
|
30
|
+
# ==============================================================================
|
31
|
+
# MODULE settings
|
32
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
33
|
+
modules:
|
34
|
+
|
35
|
+
# J1 Webhook
|
36
|
+
# NOTE:
|
37
|
+
# ----------------------------------------------------------------------------
|
38
|
+
webhook:
|
39
|
+
|
40
|
+
comment:
|
41
|
+
name: <your-config-name>
|
42
|
+
user: <your-gh-user>
|
43
|
+
repo: <your-gh-repo>
|
44
|
+
server_url: <your-gh-webhook-url>
|
45
|
+
|
46
|
+
secret: <your-gh-secret> # secret used at GH Webhooks
|
47
|
+
payload_url: <your-payload-url> # payload url (e.g channel at smee.io)
|
48
|
+
|
49
|
+
|
50
|
+
# ==============================================================================
|
51
|
+
# # J1 Utility Server
|
52
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
53
|
+
util_srv:
|
54
|
+
|
55
|
+
oauth:
|
56
|
+
|
57
|
+
# GH OAuth settings used for J1 Control Center (NetlifyCMS) for the
|
58
|
+
# external OAuth client (base_url)
|
59
|
+
# --------------------------------------------------------------------------
|
60
|
+
comment:
|
61
|
+
name: <your-config-name>
|
62
|
+
user: <your-gh-user>
|
63
|
+
user_url: <your-user-url>
|
64
|
+
strategy: members
|
65
|
+
members: all
|
66
|
+
|
67
|
+
site_url: http://localhost:41010
|
68
|
+
site_redirect_url: http://localhost:41010/auth/github/callback
|
69
|
+
client_scope: repo, user
|
70
|
+
client_id: <your-client-id>
|
71
|
+
client_secret: <your-client-secret>
|
72
|
+
|
73
|
+
|
74
|
+
# ==============================================================================
|
75
|
+
# MIDDLEWARE settings
|
76
|
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
77
|
+
middleware:
|
78
|
+
|
79
|
+
# OAuth settings (J1 Auth Client)
|
80
|
+
# ----------------------------------------------------------------------------
|
81
|
+
oauth:
|
82
|
+
|
83
|
+
# --------------------------------------------------------------------------
|
84
|
+
# DISQUS credentials
|
85
|
+
# ==========================================================================
|
86
|
+
disqus:
|
87
|
+
|
88
|
+
# J1 Auth client (mode APP, development system)
|
89
|
+
# ------------------------------------------------------------------------
|
90
|
+
comment:
|
91
|
+
name: <your-disqus-config-name>
|
92
|
+
user: <your-disqus-user>
|
93
|
+
|
94
|
+
client_url: http://localhost:41010
|
95
|
+
client_redirect_url: http://localhost:41010/auth/disqus/callback
|
96
|
+
client_id: <your-disqus-client-id>
|
97
|
+
client_secret: <your-disqus-client-secret>
|
98
|
+
|
99
|
+
# --------------------------------------------------------------------------
|
100
|
+
# GITHUB credentials
|
101
|
+
# ==========================================================================
|
102
|
+
github:
|
103
|
+
|
104
|
+
# J1 Auth client (mode APP, development system)
|
105
|
+
# ------------------------------------------------------------------------
|
106
|
+
comment:
|
107
|
+
name: <your-gh-config-name>
|
108
|
+
user: <your-gh-user>
|
109
|
+
org: <your-gh-org>
|
110
|
+
strategy: members
|
111
|
+
members: all
|
112
|
+
|
113
|
+
client_url: http://localhost:41010
|
114
|
+
client_redirect_url: http://localhost:41010/auth/github/callback
|
115
|
+
client_id: <your-gh-client-id>
|
116
|
+
client_secret: <your-gh-client-secret>
|
117
|
+
|
118
|
+
# ------------------------------------------------------------------------------
|
119
|
+
# END
|
@@ -27,7 +27,7 @@ defaults:
|
|
27
27
|
enabled: false
|
28
28
|
|
29
29
|
autoShowDialog: true # show consent dialog if NO consent cookie found
|
30
|
-
language:
|
30
|
+
language: en # language of the modal is shown. Default: navigator.language
|
31
31
|
languages: [en, de] # supported languages, defaults to FIRST language defined by languages
|
32
32
|
contentURL: /assets/data/cookieconsent # dialogs content for all languages
|
33
33
|
cookieName: j1.user.consent # name of the consent cookie
|
@@ -412,7 +412,7 @@ end::tables[]
|
|
412
412
|
// -----------------------------------------------------------------------------
|
413
413
|
tag::products[]
|
414
414
|
:j1--license: MIT License
|
415
|
-
:j1--version: 2021.1.
|
415
|
+
:j1--version: 2021.1.10
|
416
416
|
:j1--site-name: Jekyll One
|
417
417
|
end::products[]
|
418
418
|
|
@@ -42,7 +42,7 @@ tmp/
|
|
42
42
|
# Never publish your sensitive personal and/or OAuth
|
43
43
|
# data to any repo - not to public, not to any private.
|
44
44
|
# ------------------------------------------------------------------------------
|
45
|
-
private.yml
|
45
|
+
# private.yml
|
46
46
|
|
47
47
|
|
48
48
|
# Unneeded files for the generated site
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: j1-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2021.1.
|
4
|
+
version: 2021.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- juergen_jekyll_one
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -890,6 +890,7 @@ files:
|
|
890
890
|
- lib/starter_web/_data/_defaults/colors.yml
|
891
891
|
- lib/starter_web/_data/_defaults/font_sizes.yml
|
892
892
|
- lib/starter_web/_data/_defaults/j1_config.yml
|
893
|
+
- lib/starter_web/_data/_defaults/private.default.yml
|
893
894
|
- lib/starter_web/_data/_defaults/resources.yml
|
894
895
|
- lib/starter_web/_data/apps/carousel.yml
|
895
896
|
- lib/starter_web/_data/apps/defaults/carousel.yml
|