j1-template 2024.2.0 → 2024.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/gemini-ui.html +2 -2
  3. data/assets/themes/j1/adapter/js/advertising.js +2 -10
  4. data/assets/themes/j1/adapter/js/analytics.js +1 -5
  5. data/assets/themes/j1/adapter/js/bmd.js +195 -195
  6. data/assets/themes/j1/adapter/js/carousel.js +786 -786
  7. data/assets/themes/j1/adapter/js/clipboard.js +1 -0
  8. data/assets/themes/j1/adapter/js/comments.js +1 -0
  9. data/assets/themes/j1/adapter/js/cookieConsent.js +460 -466
  10. data/assets/themes/j1/adapter/js/customModule.js +5 -4
  11. data/assets/themes/j1/adapter/js/docsearch.js +1 -0
  12. data/assets/themes/j1/adapter/js/dropdowns.js +1 -0
  13. data/assets/themes/j1/adapter/js/fab.js +1 -0
  14. data/assets/themes/j1/adapter/js/gallery.js +495 -494
  15. data/assets/themes/j1/adapter/js/gemini.js +154 -128
  16. data/assets/themes/j1/adapter/js/iconPicker.js +257 -255
  17. data/assets/themes/j1/adapter/js/iconPickerPage.js +279 -279
  18. data/assets/themes/j1/adapter/js/iframer.js +3 -2
  19. data/assets/themes/j1/adapter/js/j1.js +3285 -3285
  20. data/assets/themes/j1/adapter/js/lazyLoader.js +241 -241
  21. data/assets/themes/j1/adapter/js/lightbox.js +242 -241
  22. data/assets/themes/j1/adapter/js/logger.js +1 -0
  23. data/assets/themes/j1/adapter/js/lunr.js +6 -10
  24. data/assets/themes/j1/adapter/js/masonry.js +427 -426
  25. data/assets/themes/j1/adapter/js/masterslider.js +526 -526
  26. data/assets/themes/j1/adapter/js/mmenu.js +1 -0
  27. data/assets/themes/j1/adapter/js/navigator.js +2 -2
  28. data/assets/themes/j1/adapter/js/particles.js +1 -0
  29. data/assets/themes/j1/adapter/js/rangeSlider.js +1 -0
  30. data/assets/themes/j1/adapter/js/rouge.js +288 -287
  31. data/assets/themes/j1/adapter/js/rtable.js +309 -309
  32. data/assets/themes/j1/adapter/js/slick.js +487 -487
  33. data/assets/themes/j1/adapter/js/slimSelect.js +3 -5
  34. data/assets/themes/j1/adapter/js/themeToggler.js +281 -280
  35. data/assets/themes/j1/adapter/js/themes.js +0 -1
  36. data/assets/themes/j1/adapter/js/toccer.js +1 -0
  37. data/assets/themes/j1/adapter/js/translator.js +1 -0
  38. data/assets/themes/j1/adapter/js/waves.js +1 -0
  39. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +23 -17
  40. data/assets/themes/j1/modules/js-cookies/js/js.cookie.js +147 -0
  41. data/assets/themes/j1/modules/js-cookies/js/js.cookie.min.js +2 -0
  42. data/lib/j1/version.rb +1 -1
  43. data/lib/starter_web/README.md +5 -5
  44. data/lib/starter_web/_config.yml +1 -1
  45. data/lib/starter_web/_data/modules/defaults/themes.yml +171 -171
  46. data/lib/starter_web/_data/resources.yml +26 -0
  47. data/lib/starter_web/_data/templates/feed.xml +1 -1
  48. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  49. data/lib/starter_web/package.json +1 -1
  50. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +500 -500
  51. metadata +4 -2
@@ -1,526 +1,526 @@
1
- ---
2
- regenerate: true
3
- ---
4
-
5
- {% capture cache %}
6
-
7
- {% comment %}
8
- # -----------------------------------------------------------------------------
9
- # ~/assets/themes/j1/adapter/js/masterslider.js
10
- # Liquid template to adapt Averta MasterSlider Lite
11
- #
12
- # Product/Info:
13
- # https://jekyll.one
14
- # Copyright (C) 2023, 2024 Juergen Adams
15
- #
16
- # J1 Template is licensed under the MIT License.
17
- # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
18
- # -----------------------------------------------------------------------------
19
- # Test data:
20
- # {{ liquid_var | debug }}
21
- # -----------------------------------------------------------------------------
22
- {% endcomment %}
23
-
24
- {% comment %} Liquid var initialization
25
- -------------------------------------------------------------------------------- {% endcomment %}
26
-
27
- {% comment %} Set config files
28
- -------------------------------------------------------------------------------- {% endcomment %}
29
- {% assign environment = site.environment %}
30
- {% assign template_config = site.data.j1_config %}
31
- {% assign modules = site.data.modules %}
32
-
33
- {% comment %} Set config data
34
- -------------------------------------------------------------------------------- {% endcomment %}
35
- {% assign master_slider_defaults = modules.defaults.masterslider.defaults %}
36
- {% assign master_slider_settings = modules.masterslider.settings %}
37
-
38
- {% comment %} Set config options
39
- -------------------------------------------------------------------------------- {% endcomment %}
40
- {% assign master_slider_options = master_slider_defaults | merge: master_slider_settings %}
41
- {% assign lightbox_enabled = master_slider_options.enable_lightbox %}
42
- {% assign slider_manager = master_slider_options.slider_manager %}
43
- {% assign save_slider_config = master_slider_options.save_slider_config %}
44
- {% assign module_version = master_slider_options.module_version %}
45
-
46
- {% comment %} Detect prod mode
47
- -------------------------------------------------------------------------------- {% endcomment %}
48
- {% assign production = false %}
49
- {% if environment == 'prod' or environment == 'production' %}
50
- {% assign production = true %}
51
- {% endif %}
52
-
53
- /*
54
- # -----------------------------------------------------------------------------
55
- # ~/assets/themes/j1/adapter/js/masterslider.js
56
- # J1 Adapter for Averta MasterSlider Lite v2.85.13 (Feb 2022)
57
- #
58
- # Product/Info:
59
- # https://jekyll.one
60
- #
61
- # Copyright (C) 2023, 2024 Juergen Adams
62
- #
63
- # J1 Template is licensed under the MIT License.
64
- # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
65
- # -----------------------------------------------------------------------------
66
- # Adapter generated: {{site.time}}
67
- # -----------------------------------------------------------------------------
68
- */
69
-
70
- // -----------------------------------------------------------------------------
71
- // ESLint shimming
72
- // -----------------------------------------------------------------------------
73
- /* eslint indent: "off" */
74
- // -----------------------------------------------------------------------------
75
- 'use strict';
76
- j1.adapter.masterslider = ((j1, window) => {
77
-
78
- {% comment %} Set global variables
79
- ------------------------------------------------------------------------------ {% endcomment %}
80
- var environment = '{{environment}}';
81
- var moduleVersion = '{{module_version}}';
82
- var sliderManager = j1.stringToBoolean('{{slider_manager}}');
83
- var lightboxEnabled = j1.stringToBoolean('{{lightbox_enabled}}');
84
- var saveSliderConfig = j1.stringToBoolean('{{save_slider_config}}');
85
- var newline = '\n';
86
- var state = 'not_started';
87
-
88
- var masterSliderDefaults;
89
- var masterSliderSettings;
90
- var masterSliderOptions;
91
-
92
- var _this;
93
- var logger;
94
- var logText;
95
-
96
- // date|time
97
- var startTime;
98
- var endTime;
99
- var startTimeModule;
100
- var endTimeModule;
101
- var timeSeconds;
102
-
103
- // ---------------------------------------------------------------------------
104
- // helper functions
105
- // ---------------------------------------------------------------------------
106
-
107
- // ---------------------------------------------------------------------------
108
- // main
109
- // ---------------------------------------------------------------------------
110
- return {
111
-
112
- // -------------------------------------------------------------------------
113
- // adapter initializer
114
- // -------------------------------------------------------------------------
115
- init: (options) => {
116
- var msSliderManager;
117
-
118
- if (sliderManager) {
119
- msSliderManager = document.createElement('script');
120
- msSliderManager.id = 'ms-slider-manager';
121
- msSliderManager.innerHTML = '';
122
- }
123
-
124
- // used for later access
125
- j1.masterslider = {};
126
- j1.masterslider.instances = j1.masterslider.instances || [];
127
-
128
- // -----------------------------------------------------------------------
129
- // default module settings
130
- // -----------------------------------------------------------------------
131
- var settings = $.extend({
132
- module_name: 'j1.adapter.masterslider',
133
- generated: '{{site.time}}'
134
- }, options);
135
-
136
- // Load module DEFAULTS|CONFIG
137
- masterSliderDefaults = $.extend({}, {{master_slider_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
138
- masterSliderSettings = $.extend({}, {{master_slider_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
139
- masterSliderOptions = $.extend({}, masterSliderDefaults, masterSliderSettings);
140
-
141
- // -----------------------------------------------------------------------
142
- // global variable settings
143
- // -----------------------------------------------------------------------
144
- _this = j1.adapter.masterslider;
145
- logger = log4javascript.getLogger('j1.adapter.masterslider');
146
-
147
- // initialize state flag
148
- //
149
- _this.setState('started');
150
- // console.debug('module state: ' + _this.getState());
151
-
152
- // load HTML portion for sliders configured
153
- // console.debug('loading HTML portion for all sliders configured');
154
- _this.loadSliderHTML(masterSliderOptions, masterSliderOptions.sliders);
155
- // create an 'MasterSlider' instance for all sliders configured
156
- // console.debug('create an \'MasterSlider\' instance for all MS sliders configured');
157
- _this.createSliderInstances(masterSliderOptions.sliders, msSliderManager);
158
-
159
- // -----------------------------------------------------------------------
160
- // module initializer
161
- // -----------------------------------------------------------------------
162
- var dependency_met_page_ready = setInterval(() => {
163
- var pageState = $('#content').css("display");
164
- var pageVisible = (pageState === 'block') ? true : false;
165
- var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
166
- var dataLoaded = (_this.getState() === 'data_loaded') ? true : false;
167
- var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
168
-
169
- if (pageVisible && j1CoreFinished && dataLoaded && atticFinished) {
170
- startTimeModule = Date.now();
171
-
172
- _this.setState('started');
173
- logger.debug('\n' + 'set module state to: ' + _this.getState());
174
- logger.info('\n' + 'initializing module: started');
175
-
176
- logger.debug('\n' + 'ms module version detected: ' + moduleVersion);
177
- logger.debug('\n' + 'module is being initialized');
178
-
179
- _this.initSliders(masterSliderOptions, masterSliderOptions.sliders, msSliderManager, saveSliderConfig);
180
-
181
- clearInterval(dependency_met_page_ready);
182
- } // END pageVisible|dataLoaded
183
- }, 10); // END dependency_met_page_ready
184
-
185
- // make sure the 'content' section is visible BEFORE setting-up sliders
186
- var dependencies_met_module_finished = setInterval (() => {
187
- var slidersInitialized = (_this.getState() === 'sliders_initialized') ? true: false;
188
-
189
- if (slidersInitialized) {
190
-
191
- // TODO: Check why a timeout is required to load the Slider Manager
192
- setTimeout(() => {
193
- if (sliderManager) document.body.appendChild(msSliderManager);
194
-
195
- _this.setState('finished');
196
- logger.debug('\n' + 'state: ' + _this.getState());
197
- logger.info('\n' + 'initializing module: finished');
198
-
199
- endTimeModule = Date.now();
200
- logger.info('\n' + 'module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
201
-
202
- }, masterSliderOptions.slider_manager_load_timeout);
203
-
204
- clearInterval(dependencies_met_module_finished);
205
- } // END if slidersInitialized
206
- }, 10); // END dependencies_met_j1_core_finished
207
- }, // END init
208
-
209
- // -------------------------------------------------------------------------
210
- // loadSliderHTML()
211
- // load all master sliders (HTML portion) dynanically configured
212
- // and enabled (AJAX) from data file
213
- // NOTE: Make sure the placeholder is available in the content page
214
- // eg. using the asciidoc extension masterslider::
215
- // -------------------------------------------------------------------------
216
- loadSliderHTML: (options, slider) => {
217
- var numSliders = Object.keys(slider).length;
218
- var active_sliders = numSliders;
219
- var xhr_data_path = options.xhr_data_path + '/index.html';
220
- var xhr_container_id;
221
-
222
- _this.setState('load_data');
223
- Object.keys(slider).forEach((key) => {
224
- if (slider[key].enabled) {
225
- xhr_container_id = 'p_' + slider[key].id;
226
- j1.loadHTML({
227
- xhr_container_id: xhr_container_id,
228
- xhr_data_path: xhr_data_path,
229
- xhr_data_element: slider[key].id
230
- });
231
- } else {
232
- active_sliders--;
233
- }
234
- }); //END forEach
235
-
236
- _this.setState('data_loaded');
237
- }, // END loadSliderHTML
238
-
239
- // -------------------------------------------------------------------------
240
- // createSliderInstances()
241
- // create an 'MasterSlider' instance for all sliders configured
242
- // -------------------------------------------------------------------------
243
- createSliderInstances: (sliders, sliderManager) => {
244
- var msSliderManager = sliderManager;
245
- var numSliders = Object.keys(sliders).length;
246
- var msSliderManagerItem;
247
-
248
- var i=0;
249
- Object.keys(sliders).forEach((key) => {
250
- i++;
251
- if (sliderManager) {
252
- msSliderManagerItem = ' var masterslider_' + i + ' = new MasterSlider();' + '\n';
253
- msSliderManager.innerHTML += msSliderManagerItem;
254
- } else {
255
- _this["masterslider_" + i] = new MasterSlider();
256
- }
257
- }); //END forEach
258
- }, // END createSliderInstances
259
-
260
- // -------------------------------------------------------------------------
261
- // initSliders()
262
- // initialze all master sliders found in page. Dynamically apply properties
263
- // for methods 'setup' and 'control'.
264
- // -------------------------------------------------------------------------
265
- initSliders: (options, slider, sliderManager, save_config) => {
266
- var msSliderManager = sliderManager;
267
- var newline = '\n';
268
-
269
- // run the method 'control' on all sliders 'enabled'
270
- //
271
- function setupControls(options, slider, sliderManager) {
272
- const controlOptions = options.controls;
273
- var msSliderManager = sliderManager;
274
- var index;
275
- var i=0;
276
-
277
- logger.info('\n' + 'generate slider controls');
278
-
279
- if (sliderManager) msSliderManager.innerHTML += newline;
280
- Object.keys(slider).forEach((key) => {
281
- i++; // instance index
282
- index = parseInt(key); // object index
283
-
284
- if (slider[index].enabled) {
285
- if (slider[index].controls) {
286
- Object.keys(slider[index].controls).forEach((key) => {
287
- var msSliderManagerItem = '\n';
288
- logger.debug('\n' + 'slider control found id|key: ' + slider[index].id + '|' + key);
289
-
290
- // merge settings, defaults into control
291
- control = $.extend({}, controlOptions[key], slider[index].controls[key]);
292
- // remove J1 config setting
293
- delete control['enabled'];
294
-
295
- if (sliderManager) {
296
- msSliderManagerItem = ' ' + 'masterslider_' + i + '.control(' + '\'' + key + '\'' + ', ' + JSON.stringify(control) + ');'
297
- msSliderManager.innerHTML += msSliderManagerItem + '\n';
298
- } else {
299
- _this["masterslider_" + i].control(key, control);
300
- }
301
-
302
- });
303
- } else {
304
- logger.debug('\n' + 'no slider controls found on id: ' + slider[key].id);
305
- }
306
- } else {
307
- logger.debug('\n' + 'slider found disabled on id: ' + slider[key].id);
308
- }
309
- });
310
- } // END setupControls
311
-
312
- // initialize plugins on all sliders if 'enabled'
313
- //
314
- function setupPlugIns(options, slider, sliderManager) {
315
- const pluginOptions = options.plugins;
316
- var msSliderManager = sliderManager;
317
- var plugins = {};
318
-
319
- var pluginSettings;
320
- var index;
321
- var i=0;
322
-
323
- logger.debug('\n' + 'generate slider plugins');
324
-
325
- if (sliderManager) msSliderManager.innerHTML += newline;
326
- Object.keys(slider).forEach((key) => {
327
- index = parseInt(key); // object index
328
- i++; // instance index
329
-
330
- if (slider[index].enabled) {
331
- if (slider[index].plugins) {
332
- Object.keys(slider[index].plugins).forEach((key) => {
333
- var msSliderManagerItem = '\n';
334
- logger.info('\n' + 'slider plugin found id|key: ' + slider[index].id + '|' + key);
335
-
336
- // merge settings, defaults into 'plugins'
337
- plugins = $.extend({}, pluginOptions, slider[index].plugins);
338
-
339
- // generate setup for plugin 'MSScrollParallax'
340
- // NOTE: for the MS config, the plugin 'MSScrollParallax' is named ' J1ScrollParallax'
341
- if (plugins.J1ScrollParallax.enabled) {
342
- // remove J1 config settings
343
- delete plugins.J1ScrollParallax.enabled;
344
-
345
- // create a 'properties' string
346
- pluginSettings = JSON.stringify(plugins.J1ScrollParallax).replace(/"/g, '').replace(/{/g, '').replace(/}/g, '');
347
- logger.debug('\n' + 'plugin J1ScrollParallax found: ' + pluginSettings);
348
-
349
- // remove property names to get a pure 'parameter' string
350
- pluginSettings = pluginSettings.replace(/layers_parallax_depth:/g, '');
351
- pluginSettings = pluginSettings.replace(/background_parallax_depth:/g, '');
352
- pluginSettings = pluginSettings.replace(/fade_layers:/g, '');
353
-
354
- if (sliderManager) {
355
- msSliderManagerItem = ' ' + 'MSScrollParallax.setup(masterslider_' + i + ', ' + pluginSettings + ');';
356
- msSliderManager.innerHTML += msSliderManagerItem + '\n';
357
- } else {
358
- MSScrollParallax.setup(j1.masterslider.instances[index], pluginSettings);
359
- }
360
- } // END plugin 'MSScrollParallax'
361
- });
362
- } else {
363
- logger.debug('\n' + 'no slider plugins found on id: ' + slider[key].id);
364
- } // END if slider[index].plugins
365
- } else {
366
- logger.debug('\n' + 'slider found disabled on id: ' + slider[key].id);
367
- } // END if slider[index].enabled
368
- }); // END forEach
369
- } // END setupPlugIns
370
-
371
- // run the method 'setup' on all sliders 'enabled'
372
- //
373
- function setupSliders(options, slider, sliderManager, save_config) {
374
- const controlOptions = options.controls;
375
- var msSliderManager = sliderManager;
376
- var control = {};
377
- var index;
378
-
379
- logger.info('\n' + 'generate slider setup');
380
-
381
- if (sliderManager) msSliderManager.innerHTML += newline;
382
- var i=0;
383
- Object.keys(slider).forEach((key) => {
384
- var msSliderManagerItem = '\n';
385
- i++; // instance index
386
- index = parseInt(key); // object index
387
- if (slider[index].enabled) {
388
- logger.debug('\n' + 'slider is being initialized on id: ' + slider[key].id);
389
-
390
- // merge settings, defaults into 'setup'
391
- setup = $.extend({}, settings.options, slider[index].options);
392
-
393
- // log the filter object if enabled
394
- if (setup.filters !== null) {
395
- var filterSettings = JSON.stringify(setup.filters).replace(/"/g, '');
396
- logger.debug('\n' + 'filters found: ' + filterSettings.replace(/{/g, '').replace(/}/g, ''));
397
- }
398
-
399
- if (sliderManager) {
400
- msSliderManagerItem = ' ' + 'masterslider_' + i + '.setup(' + '\'' + slider[key].id + '\'' + ', ' + JSON.stringify(setup) + ');'
401
- msSliderManager.innerHTML += msSliderManagerItem + '\n';
402
- } else {
403
- _this["masterslider_" + i].setup(slider[key].id, setup);
404
- }
405
-
406
- // save slider config for later access
407
- if (save_config) {
408
- if (sliderManager) {
409
- msSliderManagerItem = ' ' + 'j1.masterslider.instances.push(masterslider_' + i + ');';
410
- msSliderManager.innerHTML += msSliderManagerItem + '\n';
411
- } else {
412
- j1.masterslider.instances.push(_this["masterslider_" + i]);
413
- }
414
- }
415
- } else {
416
- logger.info('\n' + 'slider found disabled on id: ' + slider[key].id);
417
- }
418
- }); // END forEach
419
-
420
- _this.setState('sliders_initialized');
421
- logger.debug('\n' + 'state: ' + _this.getState());
422
- logger.info('\n' + 'initializing sliders finished');
423
-
424
- } // END setupSliders
425
-
426
- var settings = $.extend({}, options, slider);
427
- var control = {};
428
- var setup = {};
429
-
430
- var log_text;
431
-
432
- _this.setState('initialize_sliders');
433
- logger.debug('\n' + 'state: ' + _this.getState());
434
- log_text = '\n' + 'sliders are being initialized';
435
- logger.info(log_text);
436
-
437
- setupControls(options, slider, msSliderManager);
438
- setupSliders(options, slider, msSliderManager, save_config);
439
- setupPlugIns(options, slider, msSliderManager);
440
-
441
- }, // END initSliders
442
-
443
- // -------------------------------------------------------------------------
444
- // registerEvents()
445
- // Currently NOT used (experimental)
446
- // -------------------------------------------------------------------------
447
- registerEvents: (options, slider) => {
448
- var index;
449
-
450
- var i=0;
451
- Object.keys(slider).forEach((key) => {
452
- index = parseInt(key); // object index
453
- i++; // instance index
454
-
455
- logger.debug('\n' + 'slider events are being initialized on id: ' + index);
456
-
457
- slider[index].api.addEventListener(MSSliderEvent.WAITING, (e) => {
458
- var controller = e.target.view.controller;
459
- var controllerValue = e.target.view.controller.value;
460
- var isLoading = e.target.currentSlide.$loading.length;
461
-
462
- // dispatches when the slider's current slide change starts.
463
- if (!isLoading) {
464
- logger.info('\n' + 'slider is loaded' );
465
- } else {
466
- logger.info('\n' + 'slider is being loaded: ' + e.target.currentSlide.bg_src);
467
- }
468
- }); // END addEventListener
469
- }); // END forEach
470
- }, // END registerEvents
471
-
472
- // -------------------------------------------------------------------------
473
- // messageHandler()
474
- // manage messages send from other J1 modules
475
- // -------------------------------------------------------------------------
476
- messageHandler: (sender, message) => {
477
- var json_message = JSON.stringify(message, undefined, 2);
478
-
479
- logText = '\n' + 'received message from ' + sender + ': ' + json_message;
480
- logger.debug(logText);
481
-
482
- // -----------------------------------------------------------------------
483
- // process commands|actions
484
- // -----------------------------------------------------------------------
485
- if (message.type === 'command' && message.action === 'module_initialized') {
486
-
487
- //
488
- // place handling of command|action here
489
- //
490
-
491
- logger.info('\n' + message.text);
492
- }
493
-
494
- //
495
- // place handling of other command|action here
496
- //
497
-
498
- return true;
499
- }, // END messageHandler
500
-
501
- // -------------------------------------------------------------------------
502
- // setState()
503
- // sets the current (processing) state of the module
504
- // -------------------------------------------------------------------------
505
- setState: (stat) => {
506
- _this.state = stat;
507
- }, // END setState
508
-
509
- // -------------------------------------------------------------------------
510
- // getState()
511
- // Returns the current (processing) state of the module
512
- // -------------------------------------------------------------------------
513
- getState: () => {
514
- return _this.state;
515
- } // END getState
516
-
517
- }; // END main (return)
518
- })(j1, window);
519
-
520
- {% endcapture %}
521
- {% if production %}
522
- {{ cache | minifyJS }}
523
- {% else %}
524
- {{ cache | strip_empty_lines }}
525
- {% endif %}
526
- {% assign cache = nil %}
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/masterslider.js
10
+ # Liquid template to adapt Averta MasterSlider Lite
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ # Copyright (C) 2023, 2024 Juergen Adams
15
+ #
16
+ # J1 Template is licensed under the MIT License.
17
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
18
+ # -----------------------------------------------------------------------------
19
+ # Test data:
20
+ # {{ liquid_var | debug }}
21
+ # -----------------------------------------------------------------------------
22
+ {% endcomment %}
23
+
24
+ {% comment %} Liquid var initialization
25
+ -------------------------------------------------------------------------------- {% endcomment %}
26
+
27
+ {% comment %} Set config files
28
+ -------------------------------------------------------------------------------- {% endcomment %}
29
+ {% assign environment = site.environment %}
30
+ {% assign template_config = site.data.j1_config %}
31
+ {% assign modules = site.data.modules %}
32
+
33
+ {% comment %} Set config data
34
+ -------------------------------------------------------------------------------- {% endcomment %}
35
+ {% assign master_slider_defaults = modules.defaults.masterslider.defaults %}
36
+ {% assign master_slider_settings = modules.masterslider.settings %}
37
+
38
+ {% comment %} Set config options
39
+ -------------------------------------------------------------------------------- {% endcomment %}
40
+ {% assign master_slider_options = master_slider_defaults | merge: master_slider_settings %}
41
+ {% assign lightbox_enabled = master_slider_options.enable_lightbox %}
42
+ {% assign slider_manager = master_slider_options.slider_manager %}
43
+ {% assign save_slider_config = master_slider_options.save_slider_config %}
44
+ {% assign module_version = master_slider_options.module_version %}
45
+
46
+ {% comment %} Detect prod mode
47
+ -------------------------------------------------------------------------------- {% endcomment %}
48
+ {% assign production = false %}
49
+ {% if environment == 'prod' or environment == 'production' %}
50
+ {% assign production = true %}
51
+ {% endif %}
52
+
53
+ /*
54
+ # -----------------------------------------------------------------------------
55
+ # ~/assets/themes/j1/adapter/js/masterslider.js
56
+ # J1 Adapter for Averta MasterSlider Lite v2.85.13 (Feb 2022)
57
+ #
58
+ # Product/Info:
59
+ # https://jekyll.one
60
+ #
61
+ # Copyright (C) 2023, 2024 Juergen Adams
62
+ #
63
+ # J1 Template is licensed under the MIT License.
64
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
65
+ # -----------------------------------------------------------------------------
66
+ # Adapter generated: {{site.time}}
67
+ # -----------------------------------------------------------------------------
68
+ */
69
+
70
+ // -----------------------------------------------------------------------------
71
+ // ESLint shimming
72
+ // -----------------------------------------------------------------------------
73
+ /* eslint indent: "off" */
74
+ // -----------------------------------------------------------------------------
75
+ 'use strict';
76
+ j1.adapter.masterslider = ((j1, window) => {
77
+
78
+ {% comment %} Set global variables
79
+ ------------------------------------------------------------------------------ {% endcomment %}
80
+ var environment = '{{environment}}';
81
+ var moduleVersion = '{{module_version}}';
82
+ var sliderManager = j1.stringToBoolean('{{slider_manager}}');
83
+ var lightboxEnabled = j1.stringToBoolean('{{lightbox_enabled}}');
84
+ var saveSliderConfig = j1.stringToBoolean('{{save_slider_config}}');
85
+ var newline = '\n';
86
+ var state = 'not_started';
87
+
88
+ var masterSliderDefaults;
89
+ var masterSliderSettings;
90
+ var masterSliderOptions;
91
+
92
+ var _this;
93
+ var logger;
94
+ var logText;
95
+
96
+ // date|time
97
+ var startTime;
98
+ var endTime;
99
+ var startTimeModule;
100
+ var endTimeModule;
101
+ var timeSeconds;
102
+
103
+ // ---------------------------------------------------------------------------
104
+ // helper functions
105
+ // ---------------------------------------------------------------------------
106
+
107
+ // ---------------------------------------------------------------------------
108
+ // main
109
+ // ---------------------------------------------------------------------------
110
+ return {
111
+
112
+ // -------------------------------------------------------------------------
113
+ // adapter initializer
114
+ // -------------------------------------------------------------------------
115
+ init: (options) => {
116
+ var msSliderManager;
117
+
118
+ if (sliderManager) {
119
+ msSliderManager = document.createElement('script');
120
+ msSliderManager.id = 'ms-slider-manager';
121
+ msSliderManager.innerHTML = '';
122
+ }
123
+
124
+ // used for later access
125
+ j1.masterslider = {};
126
+ j1.masterslider.instances = j1.masterslider.instances || [];
127
+
128
+ // -----------------------------------------------------------------------
129
+ // default module settings
130
+ // -----------------------------------------------------------------------
131
+ var settings = $.extend({
132
+ module_name: 'j1.adapter.masterslider',
133
+ generated: '{{site.time}}'
134
+ }, options);
135
+
136
+ // Load module DEFAULTS|CONFIG
137
+ masterSliderDefaults = $.extend({}, {{master_slider_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
138
+ masterSliderSettings = $.extend({}, {{master_slider_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
139
+ masterSliderOptions = $.extend({}, masterSliderDefaults, masterSliderSettings);
140
+
141
+ // -----------------------------------------------------------------------
142
+ // global variable settings
143
+ // -----------------------------------------------------------------------
144
+ _this = j1.adapter.masterslider;
145
+ logger = log4javascript.getLogger('j1.adapter.masterslider');
146
+
147
+ // initialize state flag
148
+ //
149
+ _this.setState('started');
150
+ // console.debug('module state: ' + _this.getState());
151
+
152
+ // load HTML portion for sliders configured
153
+ // console.debug('loading HTML portion for all sliders configured');
154
+ _this.loadSliderHTML(masterSliderOptions, masterSliderOptions.sliders);
155
+ // create an 'MasterSlider' instance for all sliders configured
156
+ // console.debug('create an \'MasterSlider\' instance for all MS sliders configured');
157
+ _this.createSliderInstances(masterSliderOptions.sliders, msSliderManager);
158
+
159
+ // -----------------------------------------------------------------------
160
+ // module initializer
161
+ // -----------------------------------------------------------------------
162
+ var dependency_met_page_ready = setInterval(() => {
163
+ var pageState = $('#content').css("display");
164
+ var pageVisible = (pageState === 'block') ? true : false;
165
+ var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
166
+ var dataLoaded = (_this.getState() === 'data_loaded') ? true : false;
167
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
168
+
169
+ if (pageVisible && j1CoreFinished && dataLoaded && atticFinished) {
170
+ startTimeModule = Date.now();
171
+
172
+ _this.setState('started');
173
+ logger.debug('\n' + 'set module state to: ' + _this.getState());
174
+ logger.info('\n' + 'initializing module: started');
175
+
176
+ logger.debug('\n' + 'ms module version detected: ' + moduleVersion);
177
+ logger.debug('\n' + 'module is being initialized');
178
+
179
+ _this.initSliders(masterSliderOptions, masterSliderOptions.sliders, msSliderManager, saveSliderConfig);
180
+
181
+ clearInterval(dependency_met_page_ready);
182
+ } // END pageVisible|dataLoaded
183
+ }, 10); // END dependency_met_page_ready
184
+
185
+ // make sure the 'content' section is visible BEFORE setting-up sliders
186
+ var dependencies_met_module_finished = setInterval (() => {
187
+ var slidersInitialized = (_this.getState() === 'sliders_initialized') ? true: false;
188
+
189
+ if (slidersInitialized) {
190
+
191
+ // TODO: Check why a timeout is required to load the Slider Manager
192
+ setTimeout(() => {
193
+ if (sliderManager) document.body.appendChild(msSliderManager);
194
+
195
+ _this.setState('finished');
196
+ logger.debug('\n' + 'state: ' + _this.getState());
197
+ logger.info('\n' + 'initializing module: finished');
198
+
199
+ endTimeModule = Date.now();
200
+ logger.info('\n' + 'module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
201
+
202
+ }, masterSliderOptions.slider_manager_load_timeout);
203
+
204
+ clearInterval(dependencies_met_module_finished);
205
+ } // END if slidersInitialized
206
+ }, 10); // END dependencies_met_j1_core_finished
207
+ }, // END init
208
+
209
+ // -------------------------------------------------------------------------
210
+ // loadSliderHTML()
211
+ // load all master sliders (HTML portion) dynanically configured
212
+ // and enabled (AJAX) from data file
213
+ // NOTE: Make sure the placeholder is available in the content page
214
+ // eg. using the asciidoc extension masterslider::
215
+ // -------------------------------------------------------------------------
216
+ loadSliderHTML: (options, slider) => {
217
+ var numSliders = Object.keys(slider).length;
218
+ var active_sliders = numSliders;
219
+ var xhr_data_path = options.xhr_data_path + '/index.html';
220
+ var xhr_container_id;
221
+
222
+ _this.setState('load_data');
223
+ Object.keys(slider).forEach((key) => {
224
+ if (slider[key].enabled) {
225
+ xhr_container_id = 'p_' + slider[key].id;
226
+ j1.loadHTML({
227
+ xhr_container_id: xhr_container_id,
228
+ xhr_data_path: xhr_data_path,
229
+ xhr_data_element: slider[key].id
230
+ });
231
+ } else {
232
+ active_sliders--;
233
+ }
234
+ }); //END forEach
235
+
236
+ _this.setState('data_loaded');
237
+ }, // END loadSliderHTML
238
+
239
+ // -------------------------------------------------------------------------
240
+ // createSliderInstances()
241
+ // create an 'MasterSlider' instance for all sliders configured
242
+ // -------------------------------------------------------------------------
243
+ createSliderInstances: (sliders, sliderManager) => {
244
+ var msSliderManager = sliderManager;
245
+ var numSliders = Object.keys(sliders).length;
246
+ var msSliderManagerItem;
247
+
248
+ var i=0;
249
+ Object.keys(sliders).forEach((key) => {
250
+ i++;
251
+ if (sliderManager) {
252
+ msSliderManagerItem = ' var masterslider_' + i + ' = new MasterSlider();' + '\n';
253
+ msSliderManager.innerHTML += msSliderManagerItem;
254
+ } else {
255
+ _this["masterslider_" + i] = new MasterSlider();
256
+ }
257
+ }); //END forEach
258
+ }, // END createSliderInstances
259
+
260
+ // -------------------------------------------------------------------------
261
+ // initSliders()
262
+ // initialze all master sliders found in page. Dynamically apply properties
263
+ // for methods 'setup' and 'control'.
264
+ // -------------------------------------------------------------------------
265
+ initSliders: (options, slider, sliderManager, save_config) => {
266
+ var msSliderManager = sliderManager;
267
+ var newline = '\n';
268
+
269
+ // run the method 'control' on all sliders 'enabled'
270
+ //
271
+ function setupControls(options, slider, sliderManager) {
272
+ const controlOptions = options.controls;
273
+ var msSliderManager = sliderManager;
274
+ var index;
275
+ var i=0;
276
+
277
+ logger.info('\n' + 'generate slider controls');
278
+
279
+ if (sliderManager) msSliderManager.innerHTML += newline;
280
+ Object.keys(slider).forEach((key) => {
281
+ i++; // instance index
282
+ index = parseInt(key); // object index
283
+
284
+ if (slider[index].enabled) {
285
+ if (slider[index].controls) {
286
+ Object.keys(slider[index].controls).forEach((key) => {
287
+ var msSliderManagerItem = '\n';
288
+ logger.debug('\n' + 'slider control found id|key: ' + slider[index].id + '|' + key);
289
+
290
+ // merge settings, defaults into control
291
+ control = $.extend({}, controlOptions[key], slider[index].controls[key]);
292
+ // remove J1 config setting
293
+ delete control['enabled'];
294
+
295
+ if (sliderManager) {
296
+ msSliderManagerItem = ' ' + 'masterslider_' + i + '.control(' + '\'' + key + '\'' + ', ' + JSON.stringify(control) + ');'
297
+ msSliderManager.innerHTML += msSliderManagerItem + '\n';
298
+ } else {
299
+ _this["masterslider_" + i].control(key, control);
300
+ }
301
+
302
+ });
303
+ } else {
304
+ logger.debug('\n' + 'no slider controls found on id: ' + slider[key].id);
305
+ }
306
+ } else {
307
+ logger.debug('\n' + 'slider found disabled on id: ' + slider[key].id);
308
+ }
309
+ });
310
+ } // END setupControls
311
+
312
+ // initialize plugins on all sliders if 'enabled'
313
+ //
314
+ function setupPlugIns(options, slider, sliderManager) {
315
+ const pluginOptions = options.plugins;
316
+ var msSliderManager = sliderManager;
317
+ var plugins = {};
318
+
319
+ var pluginSettings;
320
+ var index;
321
+ var i=0;
322
+
323
+ logger.debug('\n' + 'generate slider plugins');
324
+
325
+ if (sliderManager) msSliderManager.innerHTML += newline;
326
+ Object.keys(slider).forEach((key) => {
327
+ index = parseInt(key); // object index
328
+ i++; // instance index
329
+
330
+ if (slider[index].enabled) {
331
+ if (slider[index].plugins) {
332
+ Object.keys(slider[index].plugins).forEach((key) => {
333
+ var msSliderManagerItem = '\n';
334
+ logger.info('\n' + 'slider plugin found id|key: ' + slider[index].id + '|' + key);
335
+
336
+ // merge settings, defaults into 'plugins'
337
+ plugins = $.extend({}, pluginOptions, slider[index].plugins);
338
+
339
+ // generate setup for plugin 'MSScrollParallax'
340
+ // NOTE: for the MS config, the plugin 'MSScrollParallax' is named ' J1ScrollParallax'
341
+ if (plugins.J1ScrollParallax.enabled) {
342
+ // remove J1 config settings
343
+ delete plugins.J1ScrollParallax.enabled;
344
+
345
+ // create a 'properties' string
346
+ pluginSettings = JSON.stringify(plugins.J1ScrollParallax).replace(/"/g, '').replace(/{/g, '').replace(/}/g, '');
347
+ logger.debug('\n' + 'plugin J1ScrollParallax found: ' + pluginSettings);
348
+
349
+ // remove property names to get a pure 'parameter' string
350
+ pluginSettings = pluginSettings.replace(/layers_parallax_depth:/g, '');
351
+ pluginSettings = pluginSettings.replace(/background_parallax_depth:/g, '');
352
+ pluginSettings = pluginSettings.replace(/fade_layers:/g, '');
353
+
354
+ if (sliderManager) {
355
+ msSliderManagerItem = ' ' + 'MSScrollParallax.setup(masterslider_' + i + ', ' + pluginSettings + ');';
356
+ msSliderManager.innerHTML += msSliderManagerItem + '\n';
357
+ } else {
358
+ MSScrollParallax.setup(j1.masterslider.instances[index], pluginSettings);
359
+ }
360
+ } // END plugin 'MSScrollParallax'
361
+ });
362
+ } else {
363
+ logger.debug('\n' + 'no slider plugins found on id: ' + slider[key].id);
364
+ } // END if slider[index].plugins
365
+ } else {
366
+ logger.debug('\n' + 'slider found disabled on id: ' + slider[key].id);
367
+ } // END if slider[index].enabled
368
+ }); // END forEach
369
+ } // END setupPlugIns
370
+
371
+ // run the method 'setup' on all sliders 'enabled'
372
+ //
373
+ function setupSliders(options, slider, sliderManager, save_config) {
374
+ const controlOptions = options.controls;
375
+ var msSliderManager = sliderManager;
376
+ var control = {};
377
+ var index;
378
+
379
+ logger.info('\n' + 'generate slider setup');
380
+
381
+ if (sliderManager) msSliderManager.innerHTML += newline;
382
+ var i=0;
383
+ Object.keys(slider).forEach((key) => {
384
+ var msSliderManagerItem = '\n';
385
+ i++; // instance index
386
+ index = parseInt(key); // object index
387
+ if (slider[index].enabled) {
388
+ logger.debug('\n' + 'slider is being initialized on id: ' + slider[key].id);
389
+
390
+ // merge settings, defaults into 'setup'
391
+ setup = $.extend({}, settings.options, slider[index].options);
392
+
393
+ // log the filter object if enabled
394
+ if (setup.filters !== null) {
395
+ var filterSettings = JSON.stringify(setup.filters).replace(/"/g, '');
396
+ logger.debug('\n' + 'filters found: ' + filterSettings.replace(/{/g, '').replace(/}/g, ''));
397
+ }
398
+
399
+ if (sliderManager) {
400
+ msSliderManagerItem = ' ' + 'masterslider_' + i + '.setup(' + '\'' + slider[key].id + '\'' + ', ' + JSON.stringify(setup) + ');'
401
+ msSliderManager.innerHTML += msSliderManagerItem + '\n';
402
+ } else {
403
+ _this["masterslider_" + i].setup(slider[key].id, setup);
404
+ }
405
+
406
+ // save slider config for later access
407
+ if (save_config) {
408
+ if (sliderManager) {
409
+ msSliderManagerItem = ' ' + 'j1.masterslider.instances.push(masterslider_' + i + ');';
410
+ msSliderManager.innerHTML += msSliderManagerItem + '\n';
411
+ } else {
412
+ j1.masterslider.instances.push(_this["masterslider_" + i]);
413
+ }
414
+ }
415
+ } else {
416
+ logger.info('\n' + 'slider found disabled on id: ' + slider[key].id);
417
+ }
418
+ }); // END forEach
419
+
420
+ _this.setState('sliders_initialized');
421
+ logger.debug('\n' + 'state: ' + _this.getState());
422
+ logger.info('\n' + 'initializing sliders finished');
423
+
424
+ } // END setupSliders
425
+
426
+ var settings = $.extend({}, options, slider);
427
+ var control = {};
428
+ var setup = {};
429
+
430
+ var log_text;
431
+
432
+ _this.setState('initialize_sliders');
433
+ logger.debug('\n' + 'state: ' + _this.getState());
434
+ log_text = '\n' + 'sliders are being initialized';
435
+ logger.info(log_text);
436
+
437
+ setupControls(options, slider, msSliderManager);
438
+ setupSliders(options, slider, msSliderManager, save_config);
439
+ setupPlugIns(options, slider, msSliderManager);
440
+
441
+ }, // END initSliders
442
+
443
+ // -------------------------------------------------------------------------
444
+ // registerEvents()
445
+ // Currently NOT used (experimental)
446
+ // -------------------------------------------------------------------------
447
+ registerEvents: (options, slider) => {
448
+ var index;
449
+
450
+ var i=0;
451
+ Object.keys(slider).forEach((key) => {
452
+ index = parseInt(key); // object index
453
+ i++; // instance index
454
+
455
+ logger.debug('\n' + 'slider events are being initialized on id: ' + index);
456
+
457
+ slider[index].api.addEventListener(MSSliderEvent.WAITING, (e) => {
458
+ var controller = e.target.view.controller;
459
+ var controllerValue = e.target.view.controller.value;
460
+ var isLoading = e.target.currentSlide.$loading.length;
461
+
462
+ // dispatches when the slider's current slide change starts.
463
+ if (!isLoading) {
464
+ logger.info('\n' + 'slider is loaded' );
465
+ } else {
466
+ logger.info('\n' + 'slider is being loaded: ' + e.target.currentSlide.bg_src);
467
+ }
468
+ }); // END addEventListener
469
+ }); // END forEach
470
+ }, // END registerEvents
471
+
472
+ // -------------------------------------------------------------------------
473
+ // messageHandler()
474
+ // manage messages send from other J1 modules
475
+ // -------------------------------------------------------------------------
476
+ messageHandler: (sender, message) => {
477
+ var json_message = JSON.stringify(message, undefined, 2);
478
+
479
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
480
+ logger.debug(logText);
481
+
482
+ // -----------------------------------------------------------------------
483
+ // process commands|actions
484
+ // -----------------------------------------------------------------------
485
+ if (message.type === 'command' && message.action === 'module_initialized') {
486
+
487
+ //
488
+ // place handling of command|action here
489
+ //
490
+
491
+ logger.info('\n' + message.text);
492
+ }
493
+
494
+ //
495
+ // place handling of other command|action here
496
+ //
497
+
498
+ return true;
499
+ }, // END messageHandler
500
+
501
+ // -------------------------------------------------------------------------
502
+ // setState()
503
+ // sets the current (processing) state of the module
504
+ // -------------------------------------------------------------------------
505
+ setState: (stat) => {
506
+ _this.state = stat;
507
+ }, // END setState
508
+
509
+ // -------------------------------------------------------------------------
510
+ // getState()
511
+ // Returns the current (processing) state of the module
512
+ // -------------------------------------------------------------------------
513
+ getState: () => {
514
+ return _this.state;
515
+ } // END getState
516
+
517
+ }; // END main (return)
518
+ })(j1, window);
519
+
520
+ {% endcapture %}
521
+ {% if production %}
522
+ {{ cache | minifyJS }}
523
+ {% else %}
524
+ {{ cache | strip_empty_lines }}
525
+ {% endif %}
526
+ {% assign cache = nil %}