j1-template 2021.1.12 → 2021.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/themes/j1/layouts/content_generator_app.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_blog_archive.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_collection.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_page.html +4 -1
- data/_includes/themes/j1/layouts/content_generator_post.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_raw.html +1 -1
- data/_includes/themes/j1/layouts/layout_metadata_generator.html +55 -0
- data/_includes/themes/j1/modules/connectors/comment/commento.html +31 -0
- data/_includes/themes/j1/modules/connectors/comment/custom-provider.html +7 -8
- data/_includes/themes/j1/modules/connectors/comment/disqus.html +12 -54
- data/_includes/themes/j1/modules/connectors/comment/facebook.html +7 -8
- data/_includes/themes/j1/modules/connectors/comment/hyvor.html +33 -0
- data/_includes/themes/j1/modules/connectors/comment/just-comments.html +31 -0
- data/_includes/themes/j1/modules/connectors/comments +3 -0
- data/_layouts/default.html +51 -0
- data/assets/data/disqus.js +81 -0
- data/assets/data/hyvor.js +72 -0
- data/assets/error_pages/HTTP204.html +2 -1
- data/assets/error_pages/HTTP400.html +2 -1
- data/assets/error_pages/HTTP401.html +2 -1
- data/assets/error_pages/HTTP403.html +2 -1
- data/assets/error_pages/HTTP404.html +2 -1
- data/assets/error_pages/HTTP444.html +93 -0
- data/assets/error_pages/HTTP500.html +2 -1
- data/assets/error_pages/HTTP501.html +2 -1
- data/assets/error_pages/HTTP502.html +2 -1
- data/assets/error_pages/HTTP503.html +2 -1
- data/assets/themes/j1/adapter/js/algolia.js +10 -10
- data/assets/themes/j1/adapter/js/asciidoctor.js +6 -6
- data/assets/themes/j1/adapter/js/attic.js +17 -17
- data/assets/themes/j1/adapter/js/bmd.js +6 -6
- data/assets/themes/j1/adapter/js/carousel.js +10 -10
- data/assets/themes/j1/adapter/js/clipboard.js +10 -10
- data/assets/themes/j1/adapter/js/cookieConsent.js +46 -20
- data/assets/themes/j1/adapter/js/fam.js +34 -34
- data/assets/themes/j1/adapter/js/framer.js +6 -6
- data/assets/themes/j1/adapter/js/j1.js +322 -209
- data/assets/themes/j1/adapter/js/justifiedGallery.js +11 -11
- data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +19 -19
- data/assets/themes/j1/adapter/js/lightbox.js +6 -6
- data/assets/themes/j1/adapter/js/logger.js +7 -7
- data/assets/themes/j1/adapter/js/mmenu.js +25 -25
- data/assets/themes/j1/adapter/js/navigator.js +48 -48
- data/assets/themes/j1/adapter/js/quicksearch.js +6 -6
- data/assets/themes/j1/adapter/js/rouge.js +7 -7
- data/assets/themes/j1/adapter/js/rtable.js +6 -6
- data/assets/themes/j1/adapter/js/themer.js +24 -20
- data/assets/themes/j1/adapter/js/toccer.js +9 -9
- data/assets/themes/j1/modules/backstretch/js/backstretch.js +3 -3
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +27 -20
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +287 -1
- data/assets/themes/j1/modules/lunrSearch/js/quicksearch.js +1 -1
- data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +19 -19
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/_config.yml +42 -24
- data/lib/starter_web/_data/j1_config.yml +22 -11
- data/lib/starter_web/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/_plugins/lunr_index.rb +1 -1
- data/lib/starter_web/index.html +3 -3
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/asciidoc_skeletons/book/book.adoc +3 -0
- data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +3 -0
- data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +3 -0
- data/lib/starter_web/pages/public/blog/navigator/archive.html +4 -0
- data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +4 -0
- data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +4 -0
- data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +5 -1
- data/lib/starter_web/pages/public/blog/navigator/index.html +4 -0
- data/lib/starter_web/pages/public/cookieConsent.adoc +3 -0
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +0 -1
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_videos.adoc +2 -1
- data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +0 -2
- data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +0 -2
- data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +0 -1
- data/lib/starter_web/pages/public/learn/roundtrip/410_bs_modals_extentions.adoc +0 -1
- data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +0 -1
- data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +0 -1
- data/lib/starter_web/pages/public/learn/roundtrip/600_quicksearch.adoc +0 -1
- data/lib/starter_web/pages/public/learn/where_to_go.adoc +0 -1
- data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +3 -1
- data/lib/starter_web/pages/public/legal/en/200_impress.adoc +3 -1
- data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +78 -17
- data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +3 -1
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +8 -3
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.org.asciidoc +0 -244
@@ -127,8 +127,8 @@ j1.adapter['toccer'] = (function () {
|
|
127
127
|
|
128
128
|
// initialize state flag
|
129
129
|
_this.setState('started');
|
130
|
-
logger.info('state: ' + _this.getState());
|
131
|
-
logger.info('
|
130
|
+
logger.info('\n' + 'state: ' + _this.getState());
|
131
|
+
logger.info('\n' + 'module is being initialized');
|
132
132
|
|
133
133
|
// create settings object from frontmatterOptions
|
134
134
|
var frontmatterOptions = options != null ? $.extend({}, options) : {};
|
@@ -175,9 +175,9 @@ j1.adapter['toccer'] = (function () {
|
|
175
175
|
_this.initToccerCore(settings);
|
176
176
|
_this.setState('finished');
|
177
177
|
|
178
|
-
logger.info('state: ' + _this.getState());
|
179
|
-
logger.info('module initialized successfully');
|
180
|
-
logger.info('met dependencies for: j1');
|
178
|
+
logger.info('\n' + 'state: ' + _this.getState());
|
179
|
+
logger.info('\n' + 'module initialized successfully');
|
180
|
+
logger.info('\n' + 'met dependencies for: j1');
|
181
181
|
clearInterval(dependencies_met_navigator);
|
182
182
|
}
|
183
183
|
}, 25);
|
@@ -219,7 +219,7 @@ j1.adapter['toccer'] = (function () {
|
|
219
219
|
scrollOffset = scrollOffset + moduleOptions.scrollSmoothOffset
|
220
220
|
|
221
221
|
_this.setState('running');
|
222
|
-
logger.info('state: ' + _this.getState());
|
222
|
+
logger.info('\n' + 'state: ' + _this.getState());
|
223
223
|
|
224
224
|
// tocbot get fired if HTML portion is loaded (AJAX load finished)
|
225
225
|
//
|
@@ -256,7 +256,7 @@ j1.adapter['toccer'] = (function () {
|
|
256
256
|
throttleTimeout: moduleOptions.throttleTimeout
|
257
257
|
});
|
258
258
|
/* eslint-enable */
|
259
|
-
logger.info('met dependencies for:
|
259
|
+
logger.info('\n' + 'met dependencies for: loadHTML');
|
260
260
|
clearInterval(dependencies_met_ajax_load_finished);
|
261
261
|
} // END AJAX load finished
|
262
262
|
}, 25); // END dependencies_met_ajax_load_finished
|
@@ -323,7 +323,7 @@ j1.adapter['toccer'] = (function () {
|
|
323
323
|
messageHandler: function (sender, message) {
|
324
324
|
var json_message = JSON.stringify(message, undefined, 2);
|
325
325
|
|
326
|
-
logText = 'received message from ' + sender + ': ' + json_message;
|
326
|
+
logText = '\n' + 'received message from ' + sender + ': ' + json_message;
|
327
327
|
logger.debug(logText);
|
328
328
|
|
329
329
|
// -----------------------------------------------------------------------
|
@@ -333,7 +333,7 @@ j1.adapter['toccer'] = (function () {
|
|
333
333
|
//
|
334
334
|
// Place handling of command|action here
|
335
335
|
//
|
336
|
-
logger.info(message.text);
|
336
|
+
logger.info('\n' + message.text);
|
337
337
|
}
|
338
338
|
|
339
339
|
//
|
@@ -861,12 +861,12 @@
|
|
861
861
|
|
862
862
|
// jadams, 2017-12-07: Added log for testing
|
863
863
|
if(this.options.debug) {
|
864
|
-
logText = 'resize: boxHeight x boxWidth: ' + boxHeight + ' x ' + boxWidth;
|
864
|
+
logText = '\n' + 'resize: boxHeight x boxWidth: ' + boxHeight + ' x ' + boxWidth;
|
865
865
|
logger.debug(logText);
|
866
866
|
}
|
867
867
|
|
868
868
|
if ( boxHeight == 0 || boxWidth == 0 ) {
|
869
|
-
logText = 'Kacke am Schuh';
|
869
|
+
logText = '\n' + 'Kacke am Schuh';
|
870
870
|
logger.warn(logText);
|
871
871
|
}
|
872
872
|
|
@@ -1083,7 +1083,7 @@
|
|
1083
1083
|
if ($(myID).is(':visible')) {
|
1084
1084
|
// clear interval checking
|
1085
1085
|
clearInterval(isVisible);
|
1086
|
-
logger.info('container visible on id: ' + myID);
|
1086
|
+
logger.info('\n' + 'container visible on id: ' + myID);
|
1087
1087
|
that.resize();
|
1088
1088
|
}
|
1089
1089
|
}, 50); // END 'isVisible'
|
@@ -38,16 +38,18 @@
|
|
38
38
|
// -----------------------------------------------------------------------------
|
39
39
|
|
40
40
|
function BootstrapCookieConsent(props) {
|
41
|
+
var logger = log4javascript.getLogger('j1.core.bsCookieConsent');
|
42
|
+
var modalId = 'bccs-modal';
|
43
|
+
var self = this;
|
44
|
+
var detailedSettingsShown = false;
|
45
|
+
var url = new liteURL(window.location.href);
|
46
|
+
var secure = (url.protocol.includes('https')) ? true : false;
|
41
47
|
var logText;
|
42
48
|
var current_page;
|
43
49
|
var whitelisted;
|
44
|
-
var logger = log4javascript.getLogger('j1.core.bsCookieConsent');
|
45
|
-
var modalId = "bccs-modal"
|
46
|
-
var self = this
|
47
|
-
var detailedSettingsShown = false
|
48
50
|
|
49
|
-
logger.info('
|
50
|
-
logger.info('state: started');
|
51
|
+
logger.info('\n' + 'initializing core module: started');
|
52
|
+
logger.info('\n' + 'state: started');
|
51
53
|
|
52
54
|
this.props = {
|
53
55
|
autoShowDialog: true, // disable autoShowModal on the privacy policy and legal notice pages, to make these pages readable
|
@@ -59,7 +61,8 @@ function BootstrapCookieConsent(props) {
|
|
59
61
|
postSelectionCallback: undefined, // callback function, called after the user has made his selection
|
60
62
|
whitelisted: [], // pages NO consent modal page is issued
|
61
63
|
xhr_data_element: "", // container for the language-specific consent modal taken from /assets/data/cookieconsent.html
|
62
|
-
sameSite: "Strict"
|
64
|
+
sameSite: "Strict", // restrict consent cookie to first-party, do NOT send cookie to other domains
|
65
|
+
secure: false //
|
63
66
|
}
|
64
67
|
|
65
68
|
for (var property in props) {
|
@@ -76,7 +79,7 @@ function BootstrapCookieConsent(props) {
|
|
76
79
|
}
|
77
80
|
|
78
81
|
var Cookie = {
|
79
|
-
set: function (name, value, days, samesite) {
|
82
|
+
set: function (name, value, days, samesite, secure) {
|
80
83
|
var value_encoded = window.btoa(value);
|
81
84
|
var expires = "";
|
82
85
|
if (days) {
|
@@ -84,7 +87,11 @@ function BootstrapCookieConsent(props) {
|
|
84
87
|
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
85
88
|
expires = "; expires=" + date.toUTCString();
|
86
89
|
}
|
87
|
-
|
90
|
+
if (secure) {
|
91
|
+
document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + '; ' + 'secure=' + secure + ';';
|
92
|
+
} else {
|
93
|
+
document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + ';';
|
94
|
+
}
|
88
95
|
},
|
89
96
|
get: function (name) {
|
90
97
|
var nameEQ = name + "=";
|
@@ -119,7 +126,7 @@ function BootstrapCookieConsent(props) {
|
|
119
126
|
|
120
127
|
self.modal = document.getElementById(modalId);
|
121
128
|
if (!self.modal) {
|
122
|
-
logger.info('
|
129
|
+
logger.info('\n' + 'load consent modal');
|
123
130
|
self.modal = document.createElement("div");
|
124
131
|
self.modal.id = modalId;
|
125
132
|
self.modal.setAttribute("class", "modal fade");
|
@@ -140,7 +147,7 @@ function BootstrapCookieConsent(props) {
|
|
140
147
|
var templateUrl = self.props.contentURL + '/' + 'index.html';
|
141
148
|
$.get(templateUrl)
|
142
149
|
.done(function (data) {
|
143
|
-
logger.info('
|
150
|
+
logger.info('\n' + 'loading consent modal: successfully');
|
144
151
|
self.modal.innerHTML = data;
|
145
152
|
self.modal.innerHTML = $('#' + self.props.xhr_data_element).eq(0).html();
|
146
153
|
|
@@ -154,7 +161,7 @@ function BootstrapCookieConsent(props) {
|
|
154
161
|
self.$buttonSave = $("#bccs-buttonSave");
|
155
162
|
self.$buttonAgreeAll = $("#bccs-buttonAgreeAll");
|
156
163
|
|
157
|
-
logger.info('
|
164
|
+
logger.info('\n' + 'load/initialze options from cookie');
|
158
165
|
|
159
166
|
updateButtons();
|
160
167
|
updateOptionsFromCookie();
|
@@ -167,7 +174,7 @@ function BootstrapCookieConsent(props) {
|
|
167
174
|
updateButtons();
|
168
175
|
});
|
169
176
|
|
170
|
-
logger.info('
|
177
|
+
logger.info('\n' + 'initialze event handler');
|
171
178
|
|
172
179
|
self.$buttonDoNotAgree.click(function () {
|
173
180
|
doNotAgree();
|
@@ -187,8 +194,8 @@ function BootstrapCookieConsent(props) {
|
|
187
194
|
});
|
188
195
|
})
|
189
196
|
.fail(function () {
|
190
|
-
logger.error('
|
191
|
-
logger.
|
197
|
+
logger.error('\n' + 'loading consent modal: failed');
|
198
|
+
logger.warn('\n' + 'probably no `contentURL` set');
|
192
199
|
})
|
193
200
|
} else {
|
194
201
|
self.$modal.modal("show")
|
@@ -239,12 +246,12 @@ function BootstrapCookieConsent(props) {
|
|
239
246
|
}
|
240
247
|
|
241
248
|
function agreeAll() {
|
242
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(true)), self.props.cookieStorageDays, self.props.sameSite);
|
249
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(true)), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
243
250
|
self.$modal.modal("hide");
|
244
251
|
}
|
245
252
|
|
246
253
|
function doNotAgree() {
|
247
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(false)), self.props.cookieStorageDays, self.props.sameSite);
|
254
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(false)), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
248
255
|
|
249
256
|
// jadams, 2021-07-15: all cookies NOT longer supported by j1.expireCookie
|
250
257
|
// TODO: Create loop over all cookies found in page
|
@@ -257,7 +264,7 @@ function BootstrapCookieConsent(props) {
|
|
257
264
|
}
|
258
265
|
|
259
266
|
function saveSettings() {
|
260
|
-
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions()), self.props.cookieStorageDays, self.props.sameSite);
|
267
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions()), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
261
268
|
self.$modal.modal("hide");
|
262
269
|
}
|
263
270
|
|
@@ -271,8 +278,8 @@ function BootstrapCookieConsent(props) {
|
|
271
278
|
// API functions
|
272
279
|
// ---------------------------------------------------------------------------
|
273
280
|
|
274
|
-
logger.info('
|
275
|
-
logger.info('state: finished');
|
281
|
+
logger.info('\n' + 'initializing core module finished');
|
282
|
+
logger.info('\n' + 'state: finished');
|
276
283
|
|
277
284
|
// show the consent dialog (modal)
|
278
285
|
// ---------------------------------------------------------------------------
|
@@ -24,4 +24,290 @@
|
|
24
24
|
# outside of J1 Template!
|
25
25
|
# -----------------------------------------------------------------------------
|
26
26
|
*/
|
27
|
-
|
27
|
+
'use strict';
|
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 logger = log4javascript.getLogger('j1.core.bsCookieConsent');
|
42
|
+
var modalId = 'bccs-modal';
|
43
|
+
var self = this;
|
44
|
+
var detailedSettingsShown = false;
|
45
|
+
var url = new liteURL(window.location.href);
|
46
|
+
var secure = (url.protocol.includes('https')) ? true : false;
|
47
|
+
var logText;
|
48
|
+
var current_page;
|
49
|
+
var whitelisted;
|
50
|
+
|
51
|
+
logger.info('\n' + 'initializing core module: started');
|
52
|
+
logger.info('\n' + 'state: started');
|
53
|
+
|
54
|
+
this.props = {
|
55
|
+
autoShowDialog: true, // disable autoShowModal on the privacy policy and legal notice pages, to make these pages readable
|
56
|
+
language: navigator.language, // the language, in which the modal is shown
|
57
|
+
languages: ["en", "de"], // supported languages (in ./content/), defaults to first in array
|
58
|
+
contentURL: "./content", // this URL must contain the dialogs content in the needed languages
|
59
|
+
cookieName: "cookie-consent-settings", // the name of the cookie in which the configuration is stored as JSON
|
60
|
+
cookieStorageDays: 365, // the duration the cookie configuration is stored on the client
|
61
|
+
postSelectionCallback: undefined, // callback function, called after the user has made his selection
|
62
|
+
whitelisted: [], // pages NO consent modal page is issued
|
63
|
+
xhr_data_element: "", // container for the language-specific consent modal taken from /assets/data/cookieconsent.html
|
64
|
+
sameSite: "Strict", // restrict consent cookie to first-party, do NOT send cookie to other domains
|
65
|
+
secure: false //
|
66
|
+
}
|
67
|
+
|
68
|
+
for (var property in props) {
|
69
|
+
this.props[property] = props[property];
|
70
|
+
}
|
71
|
+
|
72
|
+
this.language = this.props.language
|
73
|
+
if (this.language.indexOf("-") !== -1) {
|
74
|
+
this.language = this.language.split("-")[0];
|
75
|
+
}
|
76
|
+
|
77
|
+
if (!this.props.languages.includes(this.language)) {
|
78
|
+
this.language = this.props.languages[0]; // fallback on default language
|
79
|
+
}
|
80
|
+
|
81
|
+
var Cookie = {
|
82
|
+
set: function (name, value, days, samesite, secure) {
|
83
|
+
var value_encoded = window.btoa(value);
|
84
|
+
var expires = "";
|
85
|
+
if (days) {
|
86
|
+
var date = new Date();
|
87
|
+
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
88
|
+
expires = "; expires=" + date.toUTCString();
|
89
|
+
}
|
90
|
+
if (secure) {
|
91
|
+
document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + '; ' + 'secure=' + secure + ';';
|
92
|
+
} else {
|
93
|
+
document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + ';';
|
94
|
+
}
|
95
|
+
},
|
96
|
+
get: function (name) {
|
97
|
+
var nameEQ = name + "=";
|
98
|
+
var ca = document.cookie.split(';');
|
99
|
+
for (var i = 0; i < ca.length; i++) {
|
100
|
+
var c = ca[i];
|
101
|
+
while (c.charAt(0) === ' ') {
|
102
|
+
c = c.substring(1, c.length);
|
103
|
+
}
|
104
|
+
if (c.indexOf(nameEQ) === 0) {
|
105
|
+
var value_encoded = c.substring(nameEQ.length, c.length);
|
106
|
+
var value = window.atob(value_encoded);
|
107
|
+
return value;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
return undefined
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
var Events = {
|
115
|
+
documentReady: function (onDocumentReady) {
|
116
|
+
if (document.readyState !== 'loading') {
|
117
|
+
onDocumentReady();
|
118
|
+
} else {
|
119
|
+
document.addEventListener('DOMContentLoaded', onDocumentReady);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
function showDialog(options) {
|
125
|
+
Events.documentReady(function () {
|
126
|
+
|
127
|
+
self.modal = document.getElementById(modalId);
|
128
|
+
if (!self.modal) {
|
129
|
+
logger.info('\n' + 'load consent modal');
|
130
|
+
self.modal = document.createElement("div");
|
131
|
+
self.modal.id = modalId;
|
132
|
+
self.modal.setAttribute("class", "modal fade");
|
133
|
+
self.modal.setAttribute("tabindex", "-1");
|
134
|
+
self.modal.setAttribute("role", "dialog");
|
135
|
+
self.modal.setAttribute("aria-labelledby", modalId);
|
136
|
+
document.body.append(self.modal);
|
137
|
+
self.$modal = $(self.modal);
|
138
|
+
|
139
|
+
if (self.props.postSelectionCallback) {
|
140
|
+
self.$modal.on("hidden.bs.modal", function () {
|
141
|
+
self.props.postSelectionCallback();
|
142
|
+
});
|
143
|
+
}
|
144
|
+
|
145
|
+
// load modal content
|
146
|
+
//
|
147
|
+
var templateUrl = self.props.contentURL + '/' + 'index.html';
|
148
|
+
$.get(templateUrl)
|
149
|
+
.done(function (data) {
|
150
|
+
logger.info('\n' + 'loading consent modal: successfully');
|
151
|
+
self.modal.innerHTML = data;
|
152
|
+
self.modal.innerHTML = $('#' + self.props.xhr_data_element).eq(0).html();
|
153
|
+
|
154
|
+
$(self.modal).modal({
|
155
|
+
backdrop: "static",
|
156
|
+
keyboard: false
|
157
|
+
});
|
158
|
+
|
159
|
+
self.$buttonDoNotAgree = $("#bccs-buttonDoNotAgree");
|
160
|
+
self.$buttonAgree = $("#bccs-buttonAgree");
|
161
|
+
self.$buttonSave = $("#bccs-buttonSave");
|
162
|
+
self.$buttonAgreeAll = $("#bccs-buttonAgreeAll");
|
163
|
+
|
164
|
+
logger.info('\n' + 'load/initialze options from cookie');
|
165
|
+
|
166
|
+
updateButtons();
|
167
|
+
updateOptionsFromCookie();
|
168
|
+
|
169
|
+
$("#bccs-options").on("hide.bs.collapse", function () {
|
170
|
+
detailedSettingsShown = false;
|
171
|
+
updateButtons();
|
172
|
+
}).on("show.bs.collapse", function () {
|
173
|
+
detailedSettingsShown = true;
|
174
|
+
updateButtons();
|
175
|
+
});
|
176
|
+
|
177
|
+
logger.info('\n' + 'initialze event handler');
|
178
|
+
|
179
|
+
self.$buttonDoNotAgree.click(function () {
|
180
|
+
doNotAgree();
|
181
|
+
});
|
182
|
+
self.$buttonAgree.click(function () {
|
183
|
+
agreeAll();
|
184
|
+
});
|
185
|
+
self.$buttonSave.click(function () {
|
186
|
+
$("#bccs-options").collapse('hide');
|
187
|
+
saveSettings();
|
188
|
+
updateOptionsFromCookie();
|
189
|
+
});
|
190
|
+
self.$buttonAgreeAll.click(function () {
|
191
|
+
$("#bccs-options").collapse('hide');
|
192
|
+
agreeAll();
|
193
|
+
updateOptionsFromCookie();
|
194
|
+
});
|
195
|
+
})
|
196
|
+
.fail(function () {
|
197
|
+
logger.error('\n' + 'loading consent modal: failed');
|
198
|
+
logger.warn('\n' + 'probably no `contentURL` set');
|
199
|
+
})
|
200
|
+
} else {
|
201
|
+
self.$modal.modal("show")
|
202
|
+
}
|
203
|
+
}.bind(this))
|
204
|
+
}
|
205
|
+
|
206
|
+
function updateOptionsFromCookie() {
|
207
|
+
var settings = self.getSettings();
|
208
|
+
if (settings) {
|
209
|
+
for (var setting in settings) {
|
210
|
+
var $checkbox = self.$modal.find("#bccs-options .bccs-option[data-name='" + setting + "'] input[type='checkbox']");
|
211
|
+
$checkbox.prop("checked", settings[setting]);
|
212
|
+
}
|
213
|
+
}
|
214
|
+
}
|
215
|
+
|
216
|
+
function updateButtons() {
|
217
|
+
if (detailedSettingsShown) {
|
218
|
+
self.$buttonDoNotAgree.hide();
|
219
|
+
self.$buttonAgree.hide();
|
220
|
+
self.$buttonSave.show();
|
221
|
+
self.$buttonAgreeAll.show();
|
222
|
+
} else {
|
223
|
+
self.$buttonDoNotAgree.show();
|
224
|
+
self.$buttonAgree.show();
|
225
|
+
self.$buttonSave.hide();
|
226
|
+
self.$buttonAgreeAll.hide();
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
function gatherOptions(setAllExceptNecessary) {
|
231
|
+
var $options = self.$modal.find("#bccs-options .bccs-option");
|
232
|
+
var options = {};
|
233
|
+
for (var i = 0; i < $options.length; i++) {
|
234
|
+
var option = $options[i];
|
235
|
+
var name = option.getAttribute("data-name");
|
236
|
+
if (name === "necessary") {
|
237
|
+
options[name] = true;
|
238
|
+
} else if (setAllExceptNecessary === undefined) {
|
239
|
+
var $checkbox = $(option).find("input[type='checkbox']");
|
240
|
+
options[name] = $checkbox.prop("checked");
|
241
|
+
} else {
|
242
|
+
options[name] = !!setAllExceptNecessary;
|
243
|
+
}
|
244
|
+
}
|
245
|
+
return options
|
246
|
+
}
|
247
|
+
|
248
|
+
function agreeAll() {
|
249
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(true)), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
250
|
+
self.$modal.modal("hide");
|
251
|
+
}
|
252
|
+
|
253
|
+
function doNotAgree() {
|
254
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(false)), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
255
|
+
|
256
|
+
// jadams, 2021-07-15: all cookies NOT longer supported by j1.expireCookie
|
257
|
+
// TODO: Create loop over all cookies found in page
|
258
|
+
//
|
259
|
+
// logger.warn('expire all cookies');
|
260
|
+
// j1.expireCookie('all');
|
261
|
+
|
262
|
+
self.$modal.modal('hide')
|
263
|
+
j1.goHome();
|
264
|
+
}
|
265
|
+
|
266
|
+
function saveSettings() {
|
267
|
+
Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions()), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
268
|
+
self.$modal.modal("hide");
|
269
|
+
}
|
270
|
+
|
271
|
+
// call consent dialog if no cookie found (except pages whitelisted)
|
272
|
+
//
|
273
|
+
whitelisted = (this.props.whitelisted.indexOf(window.location.pathname) > -1);
|
274
|
+
if (Cookie.get(this.props.cookieName) === undefined && this.props.autoShowDialog && !whitelisted) {
|
275
|
+
showDialog();
|
276
|
+
}
|
277
|
+
|
278
|
+
// API functions
|
279
|
+
// ---------------------------------------------------------------------------
|
280
|
+
|
281
|
+
logger.info('\n' + 'initializing core module finished');
|
282
|
+
logger.info('\n' + 'state: finished');
|
283
|
+
|
284
|
+
// show the consent dialog (modal)
|
285
|
+
// ---------------------------------------------------------------------------
|
286
|
+
this.showDialog = function () {
|
287
|
+
whitelisted = (this.props.whitelisted.indexOf(window.location.pathname) > -1);
|
288
|
+
if (!whitelisted) {
|
289
|
+
showDialog();
|
290
|
+
}
|
291
|
+
}
|
292
|
+
|
293
|
+
// collect settings from consent cookie
|
294
|
+
// ---------------------------------------------------------------------------
|
295
|
+
this.getSettings = function (optionName) {
|
296
|
+
var cookie = Cookie.get(self.props.cookieName);
|
297
|
+
if (cookie) {
|
298
|
+
var settings = JSON.parse(Cookie.get(self.props.cookieName));
|
299
|
+
if (optionName === undefined) {
|
300
|
+
return settings;
|
301
|
+
} else {
|
302
|
+
if (settings) {
|
303
|
+
return settings[optionName];
|
304
|
+
} else {
|
305
|
+
return false;
|
306
|
+
}
|
307
|
+
}
|
308
|
+
} else {
|
309
|
+
return undefined;
|
310
|
+
}
|
311
|
+
} // END getSettings
|
312
|
+
|
313
|
+
} // END BootstrapCookieConsent
|