j1-template 2024.1.0 → 2024.1.1
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/modules/searcher/procedures/topsearch.proc +1 -1
- data/assets/data/banner.html +4 -4
- data/assets/data/cookieconsent.html +270 -175
- data/assets/data/galeries.html +1 -1
- data/assets/data/iso-639-language-codes-flags.json +179 -169
- data/assets/data/masonry.html +18 -12
- data/assets/data/translator.html +124 -0
- data/assets/themes/j1/adapter/js/comments.js +420 -418
- data/assets/themes/j1/adapter/js/cookieConsent.js +462 -451
- data/assets/themes/j1/adapter/js/gallery.js +11 -0
- data/assets/themes/j1/adapter/js/j1.js +32 -18
- data/assets/themes/j1/adapter/js/translator.js +2 -0
- data/assets/themes/j1/core/js/template.js +147 -95
- data/assets/themes/j1/core/js/template.min.js +5 -5
- data/assets/themes/j1/core/js/template.min.js.map +1 -1
- data/assets/themes/j1/modules/comments/hyvor/css/hyvor.css +2105 -0
- data/assets/themes/j1/modules/comments/hyvor/css/themes/uno.css +18 -0
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +8 -2
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +2 -1
- data/assets/themes/j1/modules/lightGallery/js/lightgallery.js +116 -101
- data/assets/themes/j1/modules/lightGallery/js/lightgallery.min.js +2 -1
- data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +65 -21
- data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.min.js +9 -2
- data/assets/themes/j1/modules/msDropdown/js/msDropdown.js +1 -1
- data/assets/themes/j1/modules/msDropdown/js/msDropdown.min.js +4 -1
- data/assets/themes/j1/modules/tiktocPlayer/js/player.min.js +18 -0
- data/assets/themes/j1/modules/translator/js/translator.js +91 -80
- data/assets/themes/j1/modules/translator/js/translator.min.js +2 -1
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/README.md +5 -5
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/blocks/banner.yml +1 -1
- data/lib/starter_web/_data/layouts/collection.yml +6 -6
- data/lib/starter_web/_data/layouts/default.yml +6 -6
- data/lib/starter_web/_data/layouts/home.yml +2 -2
- data/lib/starter_web/_data/layouts/news_panel_posts.yml +6 -6
- data/lib/starter_web/_data/layouts/page.yml +6 -6
- data/lib/starter_web/_data/layouts/post.yml +6 -6
- data/lib/starter_web/_data/layouts/raw.yml +6 -6
- data/lib/starter_web/_data/modules/analytics.yml +1 -1
- data/lib/starter_web/_data/modules/comments.yml +4 -1
- data/lib/starter_web/_data/modules/defaults/analytics.yml +1 -2
- data/lib/starter_web/_data/modules/defaults/comments.yml +0 -6
- data/lib/starter_web/_data/modules/defaults/cookieconsent.de.yml +104 -0
- data/lib/starter_web/_data/modules/defaults/cookieconsent.en.yml +104 -0
- data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +1 -8
- data/lib/starter_web/_data/modules/defaults/lunr.yml +2 -2
- data/lib/starter_web/_data/modules/defaults/translator.en.yml +138 -0
- data/lib/starter_web/_data/modules/defaults/translator.yml +22 -20
- data/lib/starter_web/_data/modules/gallery.yml +416 -266
- data/lib/starter_web/_data/resources.yml +28 -2
- data/lib/starter_web/_data/templates/feed.xml +1 -1
- data/lib/starter_web/_plugins/asciidoctor/audio-block.rb +85 -0
- data/lib/starter_web/_plugins/asciidoctor/video-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +34 -8
- data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
- data/lib/starter_web/_plugins/index/lunr.rb +1 -1
- data/lib/starter_web/assets/audio/sound-effects/ambient-piano.mp3 +0 -0
- data/lib/starter_web/assets/videos/gallery/gianna_1.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/gianna_2.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/gianna_3.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/html5/video2.mp4 +0 -0
- data/lib/starter_web/assets/videos/gallery/solo-sex.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video1-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video2-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/videojs-poster.png +0 -0
- data/lib/starter_web/assets/videos/gallery/voice_kids_nl_2021/video_poster.jpg +0 -0
- data/lib/starter_web/assets/videos/vtt/chapters/video1.vtt +8 -0
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +0 -7
- data/lib/starter_web/pages/public/learn/roundtrip/present_videos.adoc +24 -7
- data/lib/starter_web/pages/public/learn/where_to_go.adoc +5 -1
- data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +11 -4
- data/lib/starter_web/pages/public/legal/en/200_impress.adoc +19 -14
- data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +17 -12
- data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +12 -6
- metadata +22 -18
- data/lib/starter_web/assets/videos/gallery/html5/video1-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/html5/video2-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/html5/303/237video2-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/nye-party-shop-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video1-poster.1920..jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video1-thumb.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video2-thumb.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_adele_last_carpool_caraoke_poster.1920.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_james_carpool_caraoke.1920.jpg +0 -0
- /data/lib/starter_web/_data/layouts/custom/{readme → !readme} +0 -0
- /data/lib/starter_web/_includes/custom/static/{readme → !readme} +0 -0
- /data/lib/starter_web/_includes/custom/templates/{readme → !readme} +0 -0
- /data/lib/starter_web/assets/videos/vtt/captions/{readme → !readme} +0 -0
- /data/lib/starter_web/assets/videos/vtt/chapters/{readme → !readme} +0 -0
- /data/lib/starter_web/assets/videos/vtt/descriptions/{readme → !readme} +0 -0
- /data/lib/starter_web/assets/videos/vtt/subtitles/{readme → !readme} +0 -0
@@ -33,7 +33,11 @@ function Translator(props) {
|
|
33
33
|
var logger = log4javascript.getLogger('j1.core.translator');
|
34
34
|
var pageURL = new liteURL(window.location.href);
|
35
35
|
var cookieSecure = (pageURL.protocol.includes('https')) ? true : false;
|
36
|
+
var navigatorLanguage = navigator.language || navigator.userLanguage;
|
37
|
+
var defaultDialogLanguage = 'en';
|
36
38
|
var detailedSettingsShown = false;
|
39
|
+
var defaultDialogLanguage = 'en';
|
40
|
+
var translator = {};
|
37
41
|
var navigator_language;
|
38
42
|
var translation_language;
|
39
43
|
|
@@ -92,46 +96,48 @@ function Translator(props) {
|
|
92
96
|
// ---------------------------------------------------------------------------
|
93
97
|
// default property settings
|
94
98
|
// ---------------------------------------------------------------------------
|
95
|
-
|
96
|
-
contentURL:
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
99
|
+
translator.props = {
|
100
|
+
contentURL: '/assets/data/translator', // this URL must contain the dialog content (modals) in the needed languages
|
101
|
+
translatorLanguagesFile: '/assets/data/iso-639-language-codes-flags.json', // this FILE contains the all codes/flags the can be used by the "dialog modal"
|
102
|
+
translatorLanguages: 'translator-languages', // contains the supprted language codes/flags used by the "dialog modal"
|
103
|
+
cookieName: 'j1.user.state', // the name of the User State Cookie (primary data)
|
104
|
+
cookieConsentName: 'j1.user.consent', // the name of the Cookie Consent Cookie (secondary data)
|
105
|
+
cookieStorageDays: 365, // the duration the cookie is stored on the client
|
106
|
+
cookieSameSite: 'Lax', // restrict consent cookie to first-party, do NOT send cookie to other domains
|
107
|
+
cookieSecure: cookieSecure, // secure flag on cookies
|
108
|
+
translationEnabled: false, // enable|disable translation on first page view
|
109
|
+
disableLanguageSelector: false, // disable language dropdown for translation in dialog (modal)
|
110
|
+
translatorName: 'google', // name of the default translator
|
111
|
+
translationLanguages: 'all', // supported languages for translation
|
112
|
+
translationLanguage: 'auto', // language used for translation
|
113
|
+
translateAllPages: true, // enable tranlation on all pages
|
114
|
+
hideSuggestionBox: true, // disable suggestions on translated text
|
115
|
+
hidePoweredBy: true, // disable label "Powered by Google"
|
116
|
+
hideTopFrame: true, // disable the (google) translator frame
|
117
|
+
dialogLanguage: 'auto', // language used for the consent dialog (modal)
|
118
|
+
dialogLanguages: ['en', 'de'], // supported languages for the consent dialog (modal), defaults to first in array//
|
119
|
+
dialogContainerID: 'translator-modal', // container, the dialog modal is (dynamically) loaded
|
120
|
+
xhrDataElement: '', // container for the language-specific consent modal taken from /assets/data/cookieconsent.html
|
121
|
+
postSelectionCallback: '', // callback function, called after the user has made his selection
|
116
122
|
};
|
117
123
|
|
118
124
|
// merge properties from default|module
|
119
125
|
for (var property in props) {
|
120
|
-
|
126
|
+
translator.props[property] = props[property];
|
121
127
|
}
|
122
128
|
|
123
129
|
// extract the language portion (e.g. "en" for English)
|
124
|
-
if (
|
125
|
-
|
130
|
+
if (translator.props.dialogLanguage.indexOf("-") !== -1) {
|
131
|
+
translator.props.dialogLanguage = translator.props.dialogLanguage.split("-")[0];
|
126
132
|
}
|
127
133
|
|
128
134
|
// fallback on default language (modal) if dialogLanguage not suppported
|
129
|
-
if (!
|
130
|
-
|
135
|
+
if (!translator.props.dialogLanguages.includes(translator.props.dialogLanguage)) {
|
136
|
+
translator.props.dialogLanguage = defaultDialogLanguage;
|
131
137
|
}
|
132
138
|
|
133
139
|
// set the xhrDataElement of the modal loadad based on dialogLanguage
|
134
|
-
|
140
|
+
translator.props.xhrDataElement = translator.props.xhrDataElement + '-' + translator.props.dialogLanguage;
|
135
141
|
|
136
142
|
logger.info('\n' + 'initializing core module: started');
|
137
143
|
logger.debug('\n' + 'state: started');
|
@@ -146,17 +152,17 @@ function Translator(props) {
|
|
146
152
|
"personalization": true
|
147
153
|
};
|
148
154
|
|
149
|
-
var translatorCookie = Cookie.get(
|
155
|
+
var translatorCookie = Cookie.get(translator.props.cookieName);
|
150
156
|
if (!translatorCookie) {
|
151
|
-
logger.info('\n' + 'initializing translator cookie: ' +
|
157
|
+
logger.info('\n' + 'initializing translator cookie: ' + translator.props.cookieName);
|
152
158
|
// enable and write all settings required for translation (translation cookie)
|
153
159
|
Cookie.set(
|
154
|
-
|
160
|
+
translator.props.cookieName,
|
155
161
|
JSON.stringify(translationDefaultSettings),
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
162
|
+
translator.props.cookieStorageDays,
|
163
|
+
translator.props.cookieSameSite,
|
164
|
+
translator.props.cookieDomain,
|
165
|
+
translator.props.cookieSecure
|
160
166
|
);
|
161
167
|
}
|
162
168
|
|
@@ -261,14 +267,19 @@ function Translator(props) {
|
|
261
267
|
var dropdownLanguages = [];
|
262
268
|
|
263
269
|
// collect translation languages
|
264
|
-
if (
|
270
|
+
if (translator.props.translationLanguages.includes('all')) {
|
265
271
|
dropdownLanguages = data[settings.elm];
|
266
272
|
} else {
|
267
|
-
|
268
|
-
|
269
|
-
|
273
|
+
if (dropdownLanguages.length == 0) {
|
274
|
+
for (var i = 0; i < data[settings.elm].length; i++) {
|
275
|
+
if (translator.props.translationLanguages.includes(data[settings.elm][i].value)) {
|
276
|
+
dropdownLanguages.push(data[settings.elm][i]);
|
277
|
+
} else {
|
278
|
+
var elementNotFoundText = "element not found: " + data[settings.elm][i];
|
279
|
+
}
|
270
280
|
}
|
271
|
-
}
|
281
|
+
} // END if dropdownLanguages.length
|
282
|
+
|
272
283
|
}
|
273
284
|
|
274
285
|
// correct rows of the dropdown if required
|
@@ -306,18 +317,18 @@ function Translator(props) {
|
|
306
317
|
var cbAction = 'none'
|
307
318
|
Events.documentReady(function () {
|
308
319
|
|
309
|
-
self.modal = document.getElementById(
|
320
|
+
self.modal = document.getElementById(translator.props.dialogContainerID);
|
310
321
|
if (!self.modal) {
|
311
322
|
logger.info('\n' + 'load consent modal');
|
312
323
|
|
313
324
|
self.modal = document.createElement('div');
|
314
|
-
self.modal.id =
|
325
|
+
self.modal.id = translator.props.dialogContainerID;
|
315
326
|
self.modal.style.display = 'none';
|
316
327
|
|
317
328
|
self.modal.setAttribute('class', 'modal fade');
|
318
329
|
self.modal.setAttribute('tabindex', '-1');
|
319
330
|
self.modal.setAttribute('role', 'dialog');
|
320
|
-
self.modal.setAttribute('aria-labelledby',
|
331
|
+
self.modal.setAttribute('aria-labelledby', translator.props.dialogContainerID);
|
321
332
|
document.body.append(self.modal);
|
322
333
|
self.$modal = $(self.modal);
|
323
334
|
|
@@ -340,8 +351,8 @@ function Translator(props) {
|
|
340
351
|
// create msDropdown from JSON data
|
341
352
|
$.when (
|
342
353
|
createMsDropdownFromJSON({
|
343
|
-
url: '/assets/data/iso-639-language-codes-flags.json',
|
344
|
-
elm: '
|
354
|
+
url: translator.props.translatorLanguagesFile, // '/assets/data/iso-639-language-codes-flags.json',
|
355
|
+
elm: translator.props.translatorLanguages, // 'supported-languages',
|
345
356
|
selector: 'dropdownJSON',
|
346
357
|
width: 400,
|
347
358
|
visibleRows: 8,
|
@@ -369,18 +380,18 @@ function Translator(props) {
|
|
369
380
|
self.$modal.hide();
|
370
381
|
} else {
|
371
382
|
// set translation language for auto detection
|
372
|
-
if (
|
383
|
+
if (translator.props.translationLanguage === 'auto') {
|
373
384
|
navigator_language = navigator.language || navigator.userLanguage;
|
374
385
|
translation_language = navigator_language.split('-')[0];
|
375
386
|
} else {
|
376
|
-
translation_language =
|
387
|
+
translation_language = translator.props.translationLanguage;
|
377
388
|
}
|
378
389
|
|
379
390
|
// set translation language for the dropdown
|
380
391
|
msDropdownJSON.selectedIndex = $('#dropdownJSON option[value=' + translation_language + ']').index();;
|
381
392
|
|
382
393
|
// disable translation language selection
|
383
|
-
if (
|
394
|
+
if (translator.props.disableLanguageSelector) {
|
384
395
|
msDropdownJSON.disabled = true;
|
385
396
|
}
|
386
397
|
|
@@ -406,18 +417,18 @@ function Translator(props) {
|
|
406
417
|
// if the modal is closed, show the menubar
|
407
418
|
// $('#navigator_nav_navbar').show();
|
408
419
|
// run the postSelectionCallback for (final) translation
|
409
|
-
executeFunctionByName (
|
420
|
+
executeFunctionByName (translator.props.postSelectionCallback, window, cbAction);
|
410
421
|
}); // END modal on 'hidden'
|
411
422
|
|
412
423
|
// ---------------------------------------------------------------------
|
413
424
|
// load the dialog (modal content)
|
414
425
|
// ---------------------------------------------------------------------
|
415
|
-
var templateUrl =
|
426
|
+
var templateUrl = translator.props.contentURL + '/' + 'index.html';
|
416
427
|
$.get(templateUrl)
|
417
428
|
.done(function (data) {
|
418
429
|
logger.info('\n' + 'loading consent modal: successfully');
|
419
430
|
self.modal.innerHTML = data;
|
420
|
-
self.modal.innerHTML = $('#' +
|
431
|
+
self.modal.innerHTML = $('#' + translator.props.xhrDataElement).eq(0).html();
|
421
432
|
self.modal.style.display = 'block';
|
422
433
|
|
423
434
|
$(self.modal).modal({
|
@@ -543,8 +554,8 @@ function Translator(props) {
|
|
543
554
|
// On 'agreeAll', enable ALL settings required for translation
|
544
555
|
// ---------------------------------------------------------------------------
|
545
556
|
function agreeAll() {
|
546
|
-
var consentSettings = JSON.parse(Cookie.get(
|
547
|
-
var translationSettings = JSON.parse(Cookie.get(
|
557
|
+
var consentSettings = JSON.parse(Cookie.get(translator.props.cookieConsentName));
|
558
|
+
var translationSettings = JSON.parse(Cookie.get(translator.props.cookieName));
|
548
559
|
|
549
560
|
// enable all settings required for translation
|
550
561
|
translationSettings.analysis = true;
|
@@ -556,22 +567,22 @@ function Translator(props) {
|
|
556
567
|
consentSettings.personalization = translationSettings.personalization;
|
557
568
|
|
558
569
|
Cookie.set(
|
559
|
-
|
570
|
+
translator.props.cookieConsentName,
|
560
571
|
JSON.stringify(consentSettings),
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
572
|
+
translator.props.cookieStorageDays,
|
573
|
+
translator.props.cookieSameSite,
|
574
|
+
translator.props.cookieDomain,
|
575
|
+
translator.props.cookieSecure
|
565
576
|
);
|
566
577
|
|
567
578
|
// write all settings required for translation (translation cookie)
|
568
579
|
Cookie.set(
|
569
|
-
|
580
|
+
translator.props.cookieName,
|
570
581
|
JSON.stringify(translationSettings),
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
582
|
+
translator.props.cookieStorageDays,
|
583
|
+
translator.props.cookieSameSite,
|
584
|
+
translator.props.cookieDomain,
|
585
|
+
translator.props.cookieSecure
|
575
586
|
);
|
576
587
|
|
577
588
|
self.$modal.modal('hide');
|
@@ -591,12 +602,12 @@ function Translator(props) {
|
|
591
602
|
// disable all settings required for translation (translation cookie)
|
592
603
|
translationSettings.translationEnabled = false;
|
593
604
|
Cookie.set(
|
594
|
-
|
605
|
+
translator.props.cookieName,
|
595
606
|
JSON.stringify(translationSettings),
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
607
|
+
translator.props.cookieStorageDays,
|
608
|
+
translator.props.cookieSameSite,
|
609
|
+
translator.props.cookieDomain,
|
610
|
+
translator.props.cookieSecure
|
600
611
|
);
|
601
612
|
self.$modal.modal('hide');
|
602
613
|
}
|
@@ -607,7 +618,7 @@ function Translator(props) {
|
|
607
618
|
// ---------------------------------------------------------------------------
|
608
619
|
function saveSettings() {
|
609
620
|
var translationSettings = gatherOptions();
|
610
|
-
var consentSettings = JSON.parse(Cookie.get(
|
621
|
+
var consentSettings = JSON.parse(Cookie.get(translator.props.cookieConsentName));
|
611
622
|
|
612
623
|
// update all cookies required for (google-)translation
|
613
624
|
//
|
@@ -615,20 +626,20 @@ function Translator(props) {
|
|
615
626
|
consentSettings.personalization = translationSettings.personalization;
|
616
627
|
|
617
628
|
Cookie.set(
|
618
|
-
|
629
|
+
translator.props.cookieConsentName,
|
619
630
|
JSON.stringify(consentSettings),
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
631
|
+
translator.props.cookieStorageDays,
|
632
|
+
translator.props.cookieSameSite,
|
633
|
+
translator.props.cookieDomain,
|
634
|
+
translator.props.cookieSecure
|
624
635
|
);
|
625
636
|
Cookie.set(
|
626
|
-
|
637
|
+
translator.props.cookieName,
|
627
638
|
JSON.stringify(translationSettings),
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
639
|
+
translator.props.cookieStorageDays,
|
640
|
+
translator.props.cookieSameSite,
|
641
|
+
translator.props.cookieDomain,
|
642
|
+
translator.props.cookieSecure
|
632
643
|
);
|
633
644
|
self.$modal.modal('hide');
|
634
645
|
}
|
@@ -650,9 +661,9 @@ function Translator(props) {
|
|
650
661
|
// collect settings from cookie
|
651
662
|
// ---------------------------------------------------------------------------
|
652
663
|
this.getSettings = function (optionName) {
|
653
|
-
var cookie = Cookie.get(
|
664
|
+
var cookie = Cookie.get(translator.props.cookieName);
|
654
665
|
if (cookie) {
|
655
|
-
var settings = JSON.parse(Cookie.get(
|
666
|
+
var settings = JSON.parse(Cookie.get(translator.props.cookieName));
|
656
667
|
if (optionName === undefined) {
|
657
668
|
return settings;
|
658
669
|
} else {
|
@@ -12,4 +12,5 @@
|
|
12
12
|
# See: https://github.com/jekyll-one/J1 Theme/blob/master/LICENSE
|
13
13
|
# -----------------------------------------------------------------------------
|
14
14
|
*/
|
15
|
-
|
15
|
+
|
16
|
+
"use strict";function Translator(o){var e,a,t=this,n=log4javascript.getLogger("j1.core.translator"),i=!!new liteURL(window.location.href).protocol.includes("https"),r=(navigator.language||navigator.userLanguage,!1),s={},l={set:function(o,e,a,t,n,i){var r=window.btoa(e),s="; expires=Thu, 01 Jan 1970 00:00:00 UTC";if(a>0){var l=new Date;l.setTime(l.getTime()+24*a*60*60*1e3),s="; expires="+l.toUTCString()}document.cookie=i?n?o+"="+(r||"")+s+"; Path=/; SameSite="+t+"; Domain="+n+"; Secure="+i+";":o+"="+(r||"")+s+"; Path=/; SameSite="+t+"; Secure="+i+";":n?o+"="+(r||"")+s+"; Path=/; SameSite="+t+";Domain="+n+"; ":o+"="+(r||"")+s+"; Path=/; SameSite="+t+";"},get:function(o){for(var e=o+"=",a=document.cookie.split(";"),t=0;t<a.length;t++){for(var n=a[t];" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(e)){var i=n.substring(e.length,n.length);return window.atob(i)}}}};for(var p in s.props={contentURL:"/assets/data/translator",translatorLanguagesFile:"/assets/data/iso-639-language-codes-flags.json",translatorLanguages:"translator-languages",cookieName:"j1.user.state",cookieConsentName:"j1.user.consent",cookieStorageDays:365,cookieSameSite:"Lax",cookieSecure:i,translationEnabled:!1,disableLanguageSelector:!1,translatorName:"google",translationLanguages:"all",translationLanguage:"auto",translateAllPages:!0,hideSuggestionBox:!0,hidePoweredBy:!0,hideTopFrame:!0,dialogLanguage:"auto",dialogLanguages:["en","de"],dialogContainerID:"translator-modal",xhrDataElement:"",postSelectionCallback:""},o)s.props[p]=o[p];-1!==s.props.dialogLanguage.indexOf("-")&&(s.props.dialogLanguage=s.props.dialogLanguage.split("-")[0]),s.props.dialogLanguages.includes(s.props.dialogLanguage)||(s.props.dialogLanguage="en"),s.props.xhrDataElement=s.props.xhrDataElement+"-"+s.props.dialogLanguage,n.info("\ninitializing core module: started"),n.debug("\nstate: started");l.get(s.props.cookieName)||(n.info("\ninitializing translator cookie: "+s.props.cookieName),l.set(s.props.cookieName,JSON.stringify({translatorName:"google",translationEnabled:!1,translateAllPages:!0,useLanguageFromBrowser:!0,translationLanguage:"de",analysis:!0,personalization:!0}),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure));var d=function(o){"loading"!==document.readyState?o():document.addEventListener("DOMContentLoaded",o)};function c(){var o={},e=!1,a=0,t=arguments.length;"[object Boolean]"===Object.prototype.toString.call(arguments[0])&&(e=arguments[0],a++);for(var n=function(a){for(var t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e&&"[object Object]"===Object.prototype.toString.call(a[t])?o[t]=c(!0,o[t],a[t]):o[t]=a[t])};a<t;a++){n(arguments[a])}return o}function g(o){var e,a=c({size:0,width:250,multiple:!1,selectedIndex:1,enableAutoFilter:!1,visibleRows:null},o);e="#"+a.selector,$.ajax({url:a.url,dataType:"json",success:function(o){var t=[];if(s.props.translationLanguages.includes("all"))t=o[a.elm];else for(var n=0;n<o[a.elm].length;n++)s.props.translationLanguages.includes(o[a.elm][n].value)&&t.push(o[a.elm][n]);a.visibleRows>t.length&&(a.visibleRows=t.length),void 0===$("#dropdownJSON")[0].msDropdown&&MsDropdown.make(e,{byJson:{data:t,name:a.name,size:a.size,width:a.width,multiple:a.multiple},enableAutoFilter:a.enableAutoFilter,visibleRows:a.visibleRows})},error:function(o,e,t){n.error("\nfailed to retrieve JSON data from: "+a.url)}})}function u(){var o="none";d(function(){if(t.modal=document.getElementById(s.props.dialogContainerID),t.modal)t.$modal.modal("show");else{n.info("\nload consent modal"),t.modal=document.createElement("div"),t.modal.id=s.props.dialogContainerID,t.modal.style.display="none",t.modal.setAttribute("class","modal fade"),t.modal.setAttribute("tabindex","-1"),t.modal.setAttribute("role","dialog"),t.modal.setAttribute("aria-labelledby",s.props.dialogContainerID),document.body.append(t.modal),t.$modal=$(t.modal),t.$modal.on("show.bs.modal",(function(){n.debug("\nshow.bs.modal: entered"),$.when(g({url:s.props.translatorLanguagesFile,elm:s.props.translatorLanguages,selector:"dropdownJSON",width:400,visibleRows:8})).then((function(o){n.info("\ncreating msDropdown from JSON data: finished")}))})),t.$modal.on("shown.bs.modal",(function(){var o,i;i=setInterval((function(){void 0!==document.getElementById("dropdownJSON").msDropdown&&((o=document.getElementById("dropdownJSON").msDropdown).length?("auto"===s.props.translationLanguage?(e=navigator.language||navigator.userLanguage,a=e.split("-")[0]):a=s.props.translationLanguage,o.selectedIndex=$("#dropdownJSON option[value="+a+"]").index(),s.props.disableLanguageSelector&&(o.disabled=!0),$("#dropdownJSON").show(),$("body").addClass("stop-scrolling"),n.info("\nmsDropdown successfully loaded in translation dialog"),clearInterval(i)):(n.error("\nno msDropdown found in translation dialog"),t.$modal.hide()))}),10)})),t.$modal.on("hidden.bs.modal",(function(){$("body").removeClass("stop-scrolling"),function(o,e){for(var a=Array.prototype.slice.call(arguments,2),t=o.split("."),n=t.pop(),i=0;i<t.length;i++)e=e[t[i]];e[n].apply(e,a)}(s.props.postSelectionCallback,window,o)}));var i=s.props.contentURL+"/index.html";$.get(i).done((function(e){n.info("\nloading consent modal: successfully"),t.modal.innerHTML=e,t.modal.innerHTML=$("#"+s.props.xhrDataElement).eq(0).html(),t.modal.style.display="block",$(t.modal).modal({backdrop:"static",keyboard:!1}),t.$buttonDoNotAgree=$("#translator-buttonDoNotAgree"),t.$buttonAgree=$("#translator-buttonAgree"),t.$buttonExit=$("#translator-buttonExit"),t.$buttonSave=$("#translator-buttonSave"),t.$buttonAgreeAll=$("#translator-buttonAgreeAll"),n.info("\nload/initialze options from cookie"),f(),m(),$("#google-options").on("hide.bs.collapse",(function(){r=!1,f()})).on("show.bs.collapse",(function(){r=!0,f()})),n.info("\ninitialze button event handler"),t.$buttonDoNotAgree.click((function(){var e;(e=b()).translationEnabled=!1,l.set(s.props.cookieName,JSON.stringify(e),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure),t.$modal.modal("hide"),o="process"})),t.$buttonAgree.click((function(){h(),o="process"})),t.$buttonExit.click((function(){o="exitOnly",t.$modal.modal("hide")})),t.$buttonSave.click((function(){var e,a;$("#google-options").collapse("hide"),e=b(),(a=JSON.parse(l.get(s.props.cookieConsentName))).analysis=e.analysis,a.personalization=e.personalization,l.set(s.props.cookieConsentName,JSON.stringify(a),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure),l.set(s.props.cookieName,JSON.stringify(e),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure),t.$modal.modal("hide"),m(),o="process"})),t.$buttonAgreeAll.click((function(){$("#google-options").collapse("hide"),h(),o="process"})),t.$modal.modal("show")})).fail((function(){n.error("\nloading translator dialog (modal): failed"),n.warn("\nprobably no|wrong `contentURL` set")}))}}.bind(this))}function m(){var o=t.getSettings();if(o)for(var e in o){t.$modal.find("#google-options .translator-option[data-name="+e+'] input[type="checkbox"]').prop("checked",o[e])}}function f(){r?(t.$buttonDoNotAgree.hide(),t.$buttonAgree.hide(),t.$buttonSave.show(),t.$buttonAgreeAll.show()):(t.$buttonDoNotAgree.show(),t.$buttonAgree.show(),t.$buttonSave.hide(),t.$buttonAgreeAll.hide())}function b(o){for(var e=t.$modal.find("#google-options .translator-option"),a={},n=0;n<e.length;n++){var i=e[n],r=i.getAttribute("data-name");if("necessary"===r)a[r]=!0;else if(void 0===o){var s=$(i).find('input[type="checkbox"]');a[r]=s.prop("checked")}else a[r]=!!o}return a}function h(){var o=JSON.parse(l.get(s.props.cookieConsentName)),e=JSON.parse(l.get(s.props.cookieName));e.analysis=!0,e.personalization=!0,e.translationEnabled=!0,o.analysis=e.analysis,o.personalization=e.personalization,l.set(s.props.cookieConsentName,JSON.stringify(o),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure),l.set(s.props.cookieName,JSON.stringify(e),s.props.cookieStorageDays,s.props.cookieSameSite,s.props.cookieDomain,s.props.cookieSecure),t.$modal.modal("hide")}this.showDialog=function(){u()},this.getSettings=function(o){if(l.get(s.props.cookieName)){var e=JSON.parse(l.get(s.props.cookieName));return void 0===o?e:!!e&&e[o]}},n.info("\ninitializing core module finished"),n.debug("\nstate: finished")}
|
data/lib/j1/version.rb
CHANGED
data/lib/starter_web/README.md
CHANGED
@@ -379,7 +379,7 @@ This command creates a **initial** project in folder **my-starter**.
|
|
379
379
|
2023-02-28 18:12:12 - GENERATE: Resolving dependencies...
|
380
380
|
2023-02-28 18:12:12 - GENERATE: Using bundler 2.3.7
|
381
381
|
...
|
382
|
-
2023-02-28 18:12:12 - GENERATE: Using j1-template 2024.1.
|
382
|
+
2023-02-28 18:12:12 - GENERATE: Using j1-template 2024.1.1
|
383
383
|
2023-02-28 18:12:12 - GENERATE: Bundle complete! 31 Gemfile dependencies, 78 gems now installed.
|
384
384
|
2023-02-28 18:12:12 - GENERATE: Bundled gems are installed into `../../.gem`
|
385
385
|
2023-02-28 18:12:12 - GENERATE: C:/Users/xxx/.gem/ruby/3.1.0;C:/DevTools/Ruby31-x64/lib/ruby/gems/3.1.0;
|
@@ -415,7 +415,7 @@ commands are available as well.
|
|
415
415
|
2023-02-28 18:17:48 - SETUP: Initialize the project ...
|
416
416
|
2023-02-28 18:17:48 - SETUP: Be patient, this will take a while ...
|
417
417
|
2023-02-28 18:17:49 - SETUP:
|
418
|
-
2023-02-28 18:17:49 - SETUP: > j1@2024.1.
|
418
|
+
2023-02-28 18:17:49 - SETUP: > j1@2024.1.1 setup C:\Users\xxx\j1-projects\my-starter
|
419
419
|
2023-02-28 18:17:49 - SETUP: > npm --silent run setup-start && npm --silent run setup-base && run-s -s setup:*
|
420
420
|
2023-02-28 18:17:49 - SETUP:
|
421
421
|
2023-02-28 18:17:50 - SETUP: Setup project for first use ..
|
@@ -460,7 +460,7 @@ browser. Let's start the journey ...
|
|
460
460
|
Check setup state of the J1 project ...
|
461
461
|
2023-02-28 18:26:18 - SITE: Starting up your site ...
|
462
462
|
2023-02-28 18:26:18 - SITE:
|
463
|
-
2023-02-28 18:26:18 - SITE: > j1@2024.1.
|
463
|
+
2023-02-28 18:26:18 - SITE: > j1@2024.1.1 j1-site C:\Users\jadams\j1-projects\my-starter
|
464
464
|
2023-02-28 18:26:18 - SITE: > run-p -s j1-site:*
|
465
465
|
2023-02-28 18:26:18 - SITE:
|
466
466
|
2023-02-28 18:26:20 - SITE: Startup UTILSRV ..
|
@@ -499,7 +499,7 @@ Check setup state of the J1 project ...
|
|
499
499
|
REBUILD: Rebuild the projects website ...
|
500
500
|
REBUILD: Be patient, this will take a while ...
|
501
501
|
2023-02-28 18:45:09 - REBUILD:
|
502
|
-
2023-02-28 18:45:09 - REBUILD: > j1@2024.1.
|
502
|
+
2023-02-28 18:45:09 - REBUILD: > j1@2024.1.1 rebuild C:\Users\xxx\j1-projects\my-starter
|
503
503
|
2023-02-28 18:45:09 - REBUILD: > run-s -s rebuild:* && run-s -s post-rebuild:*
|
504
504
|
2023-02-28 18:45:09 - REBUILD:
|
505
505
|
2023-02-28 18:45:10 - REBUILD: Rebuild site incremental ..
|
@@ -547,7 +547,7 @@ using Lerna for all packages:
|
|
547
547
|
2023-02-28 18:29:07 - RESET: Reset the project to factory state ...
|
548
548
|
2023-02-28 18:29:07 - RESET: Be patient, this will take a while ...
|
549
549
|
2023-02-28 18:29:08 - RESET:
|
550
|
-
2023-02-28 18:29:08 - RESET: > j1@2024.1.
|
550
|
+
2023-02-28 18:29:08 - RESET: > j1@2024.1.1 reset C:\Users\xxx\j1-projects\my-starter
|
551
551
|
2023-02-28 18:29:08 - RESET: > run-s -s reset:*
|
552
552
|
2023-02-28 18:29:08 - RESET:
|
553
553
|
2023-02-28 18:29:08 - RESET: Reset project to factory state ..
|
data/lib/starter_web/_config.yml
CHANGED
@@ -53,7 +53,7 @@ environment: development
|
|
53
53
|
# ------------------------------------------------------------------------------
|
54
54
|
# Sets the build version of the site
|
55
55
|
#
|
56
|
-
version: 2024.1.
|
56
|
+
version: 2024.1.1
|
57
57
|
|
58
58
|
# copyright
|
59
59
|
# ------------------------------------------------------------------------------
|
@@ -55,14 +55,14 @@
|
|
55
55
|
# values: head|body-navigation|body-header|body-main|body-footer
|
56
56
|
# default: no defaults
|
57
57
|
#
|
58
|
-
# type
|
58
|
+
# type (required)
|
59
59
|
# ----------------------------------------------------------------------------
|
60
|
-
# The (HTML) content of a lane can be
|
61
|
-
# loaded asychronously from
|
62
|
-
#
|
60
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
61
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
62
|
+
# calls for dynamic HTML pages.
|
63
63
|
#
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# values: sync|async
|
65
|
+
# default: no default
|
66
66
|
#
|
67
67
|
# source
|
68
68
|
# ----------------------------------------------------------------------------
|
@@ -54,14 +54,14 @@
|
|
54
54
|
# values: head|body-navigation|body-header|body-main|body-footer
|
55
55
|
# default: no defaults
|
56
56
|
#
|
57
|
-
# type
|
57
|
+
# type (required)
|
58
58
|
# ----------------------------------------------------------------------------
|
59
|
-
# The (HTML) content of a lane can be
|
60
|
-
# loaded asychronously from
|
61
|
-
#
|
59
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
60
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
61
|
+
# calls for dynamic HTML pages.
|
62
62
|
#
|
63
|
-
#
|
64
|
-
#
|
63
|
+
# values: sync|async
|
64
|
+
# default: no default
|
65
65
|
#
|
66
66
|
# source
|
67
67
|
# ----------------------------------------------------------------------------
|
@@ -78,7 +78,7 @@
|
|
78
78
|
# type (required)
|
79
79
|
# ----------------------------------------------------------------------------
|
80
80
|
# The (HTML) content of a lane can be passed from an included HTML template
|
81
|
-
# file or loaded asychronously at runtime from HTML data files by AJAX
|
81
|
+
# file (sync) or loaded asychronously at runtime from HTML data files by AJAX
|
82
82
|
# calls for dynamic HTML pages.
|
83
83
|
#
|
84
84
|
# values: sync|async
|
@@ -381,7 +381,7 @@ lanes:
|
|
381
381
|
# ----------------------------------------------------------------------------
|
382
382
|
#
|
383
383
|
- lane:
|
384
|
-
enabled:
|
384
|
+
enabled: true
|
385
385
|
id: banner_home_parallax
|
386
386
|
region: body-main
|
387
387
|
type: async
|
@@ -55,14 +55,14 @@
|
|
55
55
|
# values: head|body-navigation|body-header|body-main|body-footer
|
56
56
|
# default: no defaults
|
57
57
|
#
|
58
|
-
# type
|
58
|
+
# type (required)
|
59
59
|
# ----------------------------------------------------------------------------
|
60
|
-
# The (HTML) content of a lane can be
|
61
|
-
# loaded asychronously from
|
62
|
-
#
|
60
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
61
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
62
|
+
# calls for dynamic HTML pages.
|
63
63
|
#
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# values: sync|async
|
65
|
+
# default: no default
|
66
66
|
#
|
67
67
|
# source
|
68
68
|
# ----------------------------------------------------------------------------
|
@@ -55,14 +55,14 @@
|
|
55
55
|
# values: head|body-navigation|body-header|body-main|body-footer
|
56
56
|
# default: no defaults
|
57
57
|
#
|
58
|
-
# type
|
58
|
+
# type (required)
|
59
59
|
# ----------------------------------------------------------------------------
|
60
|
-
# The (HTML) content of a lane can be
|
61
|
-
# loaded asychronously from
|
62
|
-
#
|
60
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
61
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
62
|
+
# calls for dynamic HTML pages.
|
63
63
|
#
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# values: sync|async
|
65
|
+
# default: no default
|
66
66
|
#
|
67
67
|
# source
|
68
68
|
# ----------------------------------------------------------------------------
|
@@ -55,14 +55,14 @@
|
|
55
55
|
# values: head|body-navigation|body-header|body-main|body-footer
|
56
56
|
# default: no defaults
|
57
57
|
#
|
58
|
-
# type
|
58
|
+
# type (required)
|
59
59
|
# ----------------------------------------------------------------------------
|
60
|
-
# The (HTML) content of a lane can be
|
61
|
-
# loaded asychronously from
|
62
|
-
#
|
60
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
61
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
62
|
+
# calls for dynamic HTML pages.
|
63
63
|
#
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# values: sync|async
|
65
|
+
# default: no default
|
66
66
|
#
|
67
67
|
# source
|
68
68
|
# ----------------------------------------------------------------------------
|
@@ -55,14 +55,14 @@
|
|
55
55
|
# values: head|body-navigation|body-header|body-main|body-footer
|
56
56
|
# default: no defaults
|
57
57
|
#
|
58
|
-
# type
|
58
|
+
# type (required)
|
59
59
|
# ----------------------------------------------------------------------------
|
60
|
-
# The (HTML) content of a lane can be
|
61
|
-
# loaded asychronously from
|
62
|
-
#
|
60
|
+
# The (HTML) content of a lane can be passed from an included HTML template
|
61
|
+
# file or loaded asychronously at runtime from HTML data files by AJAX
|
62
|
+
# calls for dynamic HTML pages.
|
63
63
|
#
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# values: sync|async
|
65
|
+
# default: no default
|
66
66
|
#
|
67
67
|
# source
|
68
68
|
# ----------------------------------------------------------------------------
|