j1-template 2021.1.9 → 2021.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|