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,426 +1,427 @@
1
- ---
2
- regenerate: true
3
- ---
4
-
5
- {% capture cache %}
6
-
7
- {% comment %}
8
- # -----------------------------------------------------------------------------
9
- # ~/assets/themes/j1/adapter/js/masonry.js
10
- # Liquid template to adapt the Masonry module
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
- # masonry_options: {{ masonry_options | debug }}
22
- # -----------------------------------------------------------------------------
23
- {% endcomment %}
24
-
25
- {% comment %} Liquid procedures
26
- -------------------------------------------------------------------------------- {% endcomment %}
27
-
28
- {% comment %} Set global settings
29
- -------------------------------------------------------------------------------- {% endcomment %}
30
- {% assign environment = site.environment %}
31
- {% assign asset_path = "/assets/themes/j1" %}
32
-
33
- {% comment %} Process YML config data
34
- ================================================================================ {% endcomment %}
35
-
36
- {% comment %} Set config files
37
- -------------------------------------------------------------------------------- {% endcomment %}
38
- {% assign template_config = site.data.j1_config %}
39
- {% assign blocks = site.data.blocks %}
40
- {% assign modules = site.data.modules %}
41
-
42
- {% comment %} Set config data (settings only)
43
- -------------------------------------------------------------------------------- {% endcomment %}
44
- {% assign masonry_defaults = modules.defaults.masonry.defaults %}
45
- {% assign masonry_settings = modules.masonry.settings %}
46
-
47
- {% comment %} Set config options (settings only)
48
- -------------------------------------------------------------------------------- {% endcomment %}
49
- {% assign masonry_options = masonry_defaults | merge: masonry_settings %}
50
-
51
- {% comment %} Variables
52
- -------------------------------------------------------------------------------- {% endcomment %}
53
-
54
- {% comment %} Detect prod mode
55
- -------------------------------------------------------------------------------- {% endcomment %}
56
- {% assign production = false %}
57
- {% if environment == 'prod' or environment == 'production' %}
58
- {% assign production = true %}
59
- {% endif %}
60
-
61
- /*
62
- # -----------------------------------------------------------------------------
63
- # ~/assets/themes/j1/adapter/js/masonry.js
64
- # J1 Adapter for the comments module
65
- #
66
- # Product/Info:
67
- # https://jekyll.one
68
- #
69
- # Copyright (C) 2023, 2024 Juergen Adams
70
- #
71
- # J1 Template is licensed under the MIT License.
72
- # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
73
- # -----------------------------------------------------------------------------
74
- # Adapter generated: {{site.time}}
75
- # -----------------------------------------------------------------------------
76
- */
77
-
78
- // -----------------------------------------------------------------------------
79
- // ESLint shimming
80
- // -----------------------------------------------------------------------------
81
- /* eslint indent: "off" */
82
- // -----------------------------------------------------------------------------
83
- 'use strict';
84
- j1.adapter.masonry = ((j1, window) => {
85
-
86
- {% comment %} Set global variables
87
- ------------------------------------------------------------------------------ {% endcomment %}
88
- var environment = '{{environment}}';
89
- var cookie_names = j1.getCookieNames();
90
- var user_state = j1.readCookie(cookie_names.user_state);
91
- var viewport_width = $(window).width();
92
- var state = 'not_started';
93
- var masonryDefaults;
94
- var masonrySettings;
95
- var masonryOptions;
96
-
97
- var themes_allowed;
98
- var theme_enabled;
99
- var theme;
100
-
101
- var _this;
102
- var logger;
103
- var logText;
104
-
105
- // date|time
106
- var startTime;
107
- var endTime;
108
- var startTimeModule;
109
- var endTimeModule;
110
- var timeSeconds;
111
-
112
- // ---------------------------------------------------------------------------
113
- // main
114
- // ---------------------------------------------------------------------------
115
- return {
116
-
117
- // -------------------------------------------------------------------------
118
- // adapter initializer
119
- // -------------------------------------------------------------------------
120
- init: (options) => {
121
- var xhrLoadState = 'pending'; // (initial) load state for the HTML portion of the slider
122
- var load_dependencies = {};
123
- var dependency;
124
-
125
- // -----------------------------------------------------------------------
126
- // default module settings
127
- // -----------------------------------------------------------------------
128
- var settings = $.extend({
129
- module_name: 'j1.adapter.masonry',
130
- generated: '{{site.time}}'
131
- }, options);
132
-
133
- // -----------------------------------------------------------------------
134
- // global variable settings
135
- // -----------------------------------------------------------------------
136
- _this = j1.adapter.masonry;
137
- theme = user_state.theme_name;
138
- logger = log4javascript.getLogger('j1.adapter.masonry');
139
-
140
- // Load module DEFAULTS|CONFIG
141
- masonryDefaults = $.extend({}, {{masonry_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
142
- masonrySettings = $.extend({}, {{masonry_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
143
- masonryOptions = $.extend(true, {}, masonryDefaults, masonrySettings);
144
-
145
- // load HTML portion for all grids
146
- console.debug('loading HTML portion for all Masonry grids configured');
147
- _this.loadGridHTML(masonryOptions, masonryOptions.grids);
148
-
149
- // -----------------------------------------------------------------------
150
- // module initializer
151
- // -----------------------------------------------------------------------
152
- var dependencies_met_page_ready = setInterval (() => {
153
- var pageState = $('#content').css("display");
154
- var pageVisible = (pageState === 'block') ? true: false;
155
- var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
156
-
157
- if (j1CoreFinished && pageVisible) {
158
- startTimeModule = Date.now();
159
-
160
- _this.setState('started');
161
- logger.debug('\n' + 'state: ' + _this.getState());
162
- logger.info('\n' + 'module is being initialized');
163
-
164
- {% for grid in masonry_settings.grids %}
165
- {% if grid.enabled %}
166
- {% assign grid_id = grid.id %}
167
- logger.debug('\n' + 'found masonry grid on id: ' + '{{grid_id}}');
168
-
169
- {% comment %} load default grid options
170
- ------------------------------------------------------------------ {% endcomment %}
171
- {% assign percent_position = masonry_defaults.percentPosition %}
172
- {% assign horizontal_order = masonry_defaults.horizontalOrder %}
173
- {% assign origin_left = masonry_defaults.originLeft %}
174
- {% assign origin_top = masonry_defaults.originTop %}
175
- {% assign init_layout = masonry_defaults.initLayout %}
176
- {% assign transition_duration = masonry_defaults.transitionDuration %}
177
- {% assign stagger_duration = masonry_defaults.stagger %}
178
- {% assign gutter_size = masonry_defaults.gutter %}
179
- {% assign resize = masonry_defaults.resize %}
180
- {% assign itemSelector = masonry_defaults.itemSelector %}
181
- {% assign containerStyle = masonry_defaults.containerStyle %}
182
- {% assign columnWidth = masonry_defaults.columnWidth %}
183
-
184
- {% comment %} overload defaults by grid element options
185
- ------------------------------------------------------------------ {% endcomment %}
186
- {% if grid.options.percentPosition %} {% assign percent_position = grid.options.percentPosition %} {% endif %}
187
- {% if grid.options.horizontalOrder %} {% assign horizontal_order = grid.options.horizontalOrder %} {% endif %}
188
- {% if grid.options.originLeft %} {% assign origin_left = grid.options.originLeft %} {% endif %}
189
- {% if grid.options.originTop %} {% assign origin_top = grid.options.originTop %} {% endif %}
190
- {% if grid.options.initLayout %} {% assign init_layout = grid.options.initLayout %} {% endif %}
191
- {% if grid.options.transitionDuration %} {% assign transition_duration = grid.options.transitionDuration %} {% endif %}
192
- {% if grid.options.stagger %} {% assign stagger_duration = grid.options.stagger %} {% endif %}
193
- {% if grid.options.gutter %} {% assign gutter_size = grid.options.gutter %} {% endif %}
194
- {% if grid.options.resize %} {% assign resize = grid.options.resize %} {% endif %}
195
- {% if grid.options.itemSelector %} {% assign itemSelector = grid.options.itemSelector %} {% endif %}
196
- {% if grid.options.containerStyle %} {% assign containerStyle = grid.options.containerStyle %} {% endif %}
197
- {% if grid.options.columnWidth %} {% assign columnWidth = grid.options.columnWidth %} {% endif %}
198
-
199
- // create dynamic loader variable to setup the grid on id {{grid.id}}
200
- dependency = 'dependencies_met_html_loaded_{{grid.id}}';
201
- load_dependencies[dependency] = '';
202
-
203
- // initialize the grid if HTML portion successfully loaded
204
- load_dependencies['dependencies_met_html_loaded_{{grid.id}}'] = setInterval (() => {
205
- // check if HTML portion of the grid is loaded successfully
206
- xhrLoadState = j1.xhrDOMState['#{{grid.id}}_parent'];
207
- if (xhrLoadState === 'success') {
208
- setTimeout(() => {
209
- var $grid_{{grid_id}} = $('#{{grid_id}}');
210
- logger.debug('\n' + 'initialize grid on id: ' + '{{grid_id}}');
211
-
212
- // grid event handler
213
- logger.debug('\n' + 'install event handlers for grid on id: ' + '{{grid_id}}');
214
- $grid_{{grid_id}}.on('layoutComplete', () => {
215
- // initializing (grid layout) completed
216
- logger.debug('\n' + 'initializing layout completed for grid on id: ' + '{{grid_id}}');
217
-
218
- // correct position for artice modals (previwes)
219
- logger.debug('\n' + 'adjust positions of all modals on id: {{grid_id.id}}');
220
- var preview_modals = $("#{{grid_id}} > .article-modal");
221
- $.each($(preview_modals), (index, modal) => {
222
- $(modal).attr('style', 'left: 0%');
223
- }); // END $each
224
- }); // ENF on layoutComplete
225
-
226
- // setup grid
227
- logger.debug('\n' + 'grid is being setup on id: ' + '{{grid.id}}');
228
- var $grid_{{grid_id}} = $grid_{{grid_id}}.masonry({
229
- percentPosition: {{percent_position}},
230
- horizontalOrder: {{horizontal_order}},
231
- originLeft: {{origin_left}},
232
- originTop: {{origin_top}},
233
- initLayout: {{init_layout}},
234
- transitionDuration: "{{transition_duration}}s",
235
- stagger: "{{stagger_duration}}s",
236
- resize: {{resize}},
237
- gutter: {{gutter_size}}
238
- });
239
-
240
- // run code after all images are loaded with the grid
241
- $grid_{{grid_id}}.imagesLoaded(() => {
242
- console.debug("masonry: images loaded on {{grid_id}}");
243
-
244
- {% if grid.lightbox.type == 'lg' %}
245
- console.log("masonry: gallery detected on id: {{grid_id}}");
246
-
247
- // setup lightbox
248
- var lg = document.getElementById("{{grid_id}}");
249
- var gallery = lightGallery(lg, {
250
- "plugins": [{{grid.lightGallery.plugins}}],
251
- "selector": '.lg-item',
252
- {% for option in grid.lightGallery.options %}
253
- {{option[0] | json}}: {{option[1] | json}},
254
- {% endfor %}
255
- {% if grid.videojs.enabled %}
256
- {% if grid.videojs.player.vimeoPlayer.enabled %}
257
- // vimeo player options
258
- //
259
- vimeoPlayerParams: {
260
- {% for option in grid.videojs.player.vimeoPlayer.options %}
261
- {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
262
- {% endfor %}
263
- {% endif %}
264
- },
265
- {% if grid.videojs.player.wistiaPlayer.enabled %}
266
- // wistia player options
267
- //
268
- wistiaPlayerParams: {
269
- {% for option in grid.videojs.player.wistiaPlayer.options %}
270
- {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
271
- {% endfor %}
272
- {% endif %}
273
- },
274
- // youtube player options
275
- //
276
- {% if grid.videojs.player.youTubePlayer.enabled %}
277
- youTubePlayerParams: {
278
- {% for option in grid.videojs.player.youTubePlayer.options %}
279
- {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
280
- {% endfor %}
281
- {% endif %}
282
- },
283
- {% endif %}
284
- {% if grid.videojs.enabled %}
285
- // videojs player options
286
- //
287
- videojs: {{grid.videojs.enabled}},
288
- videojsTheme: "vjs-theme-{{grid.videojs.theme}}",
289
- videojsOptions: {
290
- {% for option in grid.lightGallery.player.videojsPlayer.options %}
291
- {% if option == 'playbackRates' %}
292
- playbackRates: [{{option[1]}}],
293
- {% continue %}
294
- {% endif %}
295
- {{option[0] | json}}: {{option[1] | json}},
296
- {% endfor %}
297
- "controls": {{grid.videojs.player.videojsPlayer.controls}},
298
- "controlBar": {
299
- {% for option in grid.videojs.player.videojsPlayer.controlBar %}
300
- {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
301
- {% endfor %}
302
- } // END controlBar
303
- } // END videojsOptions
304
- {% endif %}
305
- }); // END lightGallery
306
- {% endif %}
307
- }); // END grid|imagesLoaded
308
-
309
- }, masonryOptions.initTimeout);
310
- }
311
- clearInterval(load_dependencies['dependencies_met_html_loaded_{{grid.id}}']);
312
- }, 10); // END dependencies_met_html_loaded
313
-
314
- {% else %}
315
-
316
- logger.info('\n' + 'found grid disabled on id: {{grid.id}}');
317
- {% if masonryOptions.hideDisabled %}
318
- // hide a grid if disabled
319
- logger.debug('\n' + 'hide grid disabled on id: {{grid.id}}');
320
- $('#{{grid.id}}').hide();
321
- {% endif %}
322
- {% endif %} // ENDIF grid enabled
323
-
324
- {% endfor %} // ENDFOR (all) grids
325
-
326
- _this.setState('finished');
327
- logger.debug('\n' + 'state: ' + _this.getState());
328
- logger.info('\n' + 'initializing module: finished');
329
-
330
- endTimeModule = Date.now();
331
- logger.info('\n' + 'module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
332
-
333
- clearInterval(dependencies_met_page_ready);
334
- } // END if pageVisible
335
- }, 10); // END dependencies_met_page_ready
336
- }, // END init
337
-
338
- // -------------------------------------------------------------------------
339
- // loadGridHTML()
340
- // loads the HTML portion via AJAX (j1.loadHTML) for all grids configured.
341
- // NOTE: Make sure the placeholder DIV is available in the content
342
- // page e.g. using the asciidoc extension masonry::
343
- // -------------------------------------------------------------------------
344
- loadGridHTML: (options, grid) => {
345
- var numGrids = Object.keys(grid).length;
346
- var active_grids = numGrids;
347
- var xhr_data_path = options.xhr_data_path + '/index.html';
348
- var xhr_container_id;
349
-
350
- console.debug('number of grids found: ' + numGrids);
351
-
352
- _this.setState('load_data');
353
- Object.keys(grid).forEach((key) => {
354
- if (grid[key].enabled) {
355
- xhr_container_id = grid[key].id + '_parent';
356
-
357
- console.debug('load HTML portion on grid id: ' + grid[key].id);
358
- j1.loadHTML({
359
- xhr_container_id: xhr_container_id,
360
- xhr_data_path: xhr_data_path,
361
- xhr_data_element: grid[key].id
362
- });
363
- } else {
364
- console.debug('grid found disabled on id: ' + grid[key].id);
365
- active_grids--;
366
- }
367
- });
368
- console.debug('grids loaded in page enabled|all: ' + active_grids + '|' + numGrids);
369
- _this.setState('data_loaded');
370
- }, // END loadSliderHTML
371
-
372
- // -------------------------------------------------------------------------
373
- // messageHandler()
374
- // manage messages send from other J1 modules
375
- // -------------------------------------------------------------------------
376
- messageHandler: (sender, message) => {
377
- var json_message = JSON.stringify(message, undefined, 2);
378
-
379
- logText = '\n' + 'received message from ' + sender + ': ' + json_message;
380
- logger.debug(logText);
381
-
382
- // -----------------------------------------------------------------------
383
- // process commands|actions
384
- // -----------------------------------------------------------------------
385
- if (message.type === 'command' && message.action === 'module_initialized') {
386
-
387
- //
388
- // place handling of command|action here
389
- //
390
-
391
- logger.info('\n' + message.text);
392
- }
393
-
394
- //
395
- // place handling of other command|action here
396
- //
397
-
398
- return true;
399
- }, // END messageHandler
400
-
401
- // -------------------------------------------------------------------------
402
- // setState()
403
- // sets the current (processing) state of the module
404
- // -------------------------------------------------------------------------
405
- setState: (stat) => {
406
- _this.state = stat;
407
- }, // END setState
408
-
409
- // -------------------------------------------------------------------------
410
- // getState()
411
- // Returns the current (processing) state of the module
412
- // -------------------------------------------------------------------------
413
- getState: () => {
414
- return _this.state;
415
- } // END getState
416
-
417
- }; // END main (return)
418
- })(j1, window);
419
-
420
- {% endcapture %}
421
- {% if production %}
422
- {{ cache | minifyJS }}
423
- {% else %}
424
- {{ cache | strip_empty_lines }}
425
- {% endif %}
426
- {% assign cache = nil %}
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/masonry.js
10
+ # Liquid template to adapt the Masonry module
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
+ # masonry_options: {{ masonry_options | debug }}
22
+ # -----------------------------------------------------------------------------
23
+ {% endcomment %}
24
+
25
+ {% comment %} Liquid procedures
26
+ -------------------------------------------------------------------------------- {% endcomment %}
27
+
28
+ {% comment %} Set global settings
29
+ -------------------------------------------------------------------------------- {% endcomment %}
30
+ {% assign environment = site.environment %}
31
+ {% assign asset_path = "/assets/themes/j1" %}
32
+
33
+ {% comment %} Process YML config data
34
+ ================================================================================ {% endcomment %}
35
+
36
+ {% comment %} Set config files
37
+ -------------------------------------------------------------------------------- {% endcomment %}
38
+ {% assign template_config = site.data.j1_config %}
39
+ {% assign blocks = site.data.blocks %}
40
+ {% assign modules = site.data.modules %}
41
+
42
+ {% comment %} Set config data (settings only)
43
+ -------------------------------------------------------------------------------- {% endcomment %}
44
+ {% assign masonry_defaults = modules.defaults.masonry.defaults %}
45
+ {% assign masonry_settings = modules.masonry.settings %}
46
+
47
+ {% comment %} Set config options (settings only)
48
+ -------------------------------------------------------------------------------- {% endcomment %}
49
+ {% assign masonry_options = masonry_defaults | merge: masonry_settings %}
50
+
51
+ {% comment %} Variables
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+
54
+ {% comment %} Detect prod mode
55
+ -------------------------------------------------------------------------------- {% endcomment %}
56
+ {% assign production = false %}
57
+ {% if environment == 'prod' or environment == 'production' %}
58
+ {% assign production = true %}
59
+ {% endif %}
60
+
61
+ /*
62
+ # -----------------------------------------------------------------------------
63
+ # ~/assets/themes/j1/adapter/js/masonry.js
64
+ # J1 Adapter for the comments module
65
+ #
66
+ # Product/Info:
67
+ # https://jekyll.one
68
+ #
69
+ # Copyright (C) 2023, 2024 Juergen Adams
70
+ #
71
+ # J1 Template is licensed under the MIT License.
72
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
73
+ # -----------------------------------------------------------------------------
74
+ # Adapter generated: {{site.time}}
75
+ # -----------------------------------------------------------------------------
76
+ */
77
+
78
+ // -----------------------------------------------------------------------------
79
+ // ESLint shimming
80
+ // -----------------------------------------------------------------------------
81
+ /* eslint indent: "off" */
82
+ // -----------------------------------------------------------------------------
83
+ 'use strict';
84
+ j1.adapter.masonry = ((j1, window) => {
85
+
86
+ {% comment %} Set global variables
87
+ ------------------------------------------------------------------------------ {% endcomment %}
88
+ var environment = '{{environment}}';
89
+ var cookie_names = j1.getCookieNames();
90
+ var user_state = j1.readCookie(cookie_names.user_state);
91
+ var viewport_width = $(window).width();
92
+ var state = 'not_started';
93
+
94
+ var masonryDefaults;
95
+ var masonrySettings;
96
+ var masonryOptions;
97
+
98
+ var themes_allowed;
99
+ var theme_enabled;
100
+ var theme;
101
+
102
+ var _this;
103
+ var logger;
104
+ var logText;
105
+
106
+ // date|time
107
+ var startTime;
108
+ var endTime;
109
+ var startTimeModule;
110
+ var endTimeModule;
111
+ var timeSeconds;
112
+
113
+ // ---------------------------------------------------------------------------
114
+ // main
115
+ // ---------------------------------------------------------------------------
116
+ return {
117
+
118
+ // -------------------------------------------------------------------------
119
+ // adapter initializer
120
+ // -------------------------------------------------------------------------
121
+ init: (options) => {
122
+ var xhrLoadState = 'pending'; // (initial) load state for the HTML portion of the slider
123
+ var load_dependencies = {};
124
+ var dependency;
125
+
126
+ // -----------------------------------------------------------------------
127
+ // default module settings
128
+ // -----------------------------------------------------------------------
129
+ var settings = $.extend({
130
+ module_name: 'j1.adapter.masonry',
131
+ generated: '{{site.time}}'
132
+ }, options);
133
+
134
+ // -----------------------------------------------------------------------
135
+ // global variable settings
136
+ // -----------------------------------------------------------------------
137
+ _this = j1.adapter.masonry;
138
+ theme = user_state.theme_name;
139
+ logger = log4javascript.getLogger('j1.adapter.masonry');
140
+
141
+ // Load module DEFAULTS|CONFIG
142
+ masonryDefaults = $.extend({}, {{masonry_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
143
+ masonrySettings = $.extend({}, {{masonry_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
144
+ masonryOptions = $.extend(true, {}, masonryDefaults, masonrySettings);
145
+
146
+ // load HTML portion for all grids
147
+ console.debug('loading HTML portion for all Masonry grids configured');
148
+ _this.loadGridHTML(masonryOptions, masonryOptions.grids);
149
+
150
+ // -----------------------------------------------------------------------
151
+ // module initializer
152
+ // -----------------------------------------------------------------------
153
+ var dependencies_met_page_ready = setInterval (() => {
154
+ var pageState = $('#content').css("display");
155
+ var pageVisible = (pageState === 'block') ? true: false;
156
+ var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
157
+
158
+ if (j1CoreFinished && pageVisible) {
159
+ startTimeModule = Date.now();
160
+
161
+ _this.setState('started');
162
+ logger.debug('\n' + 'state: ' + _this.getState());
163
+ logger.info('\n' + 'module is being initialized');
164
+
165
+ {% for grid in masonry_settings.grids %}
166
+ {% if grid.enabled %}
167
+ {% assign grid_id = grid.id %}
168
+ logger.debug('\n' + 'found masonry grid on id: ' + '{{grid_id}}');
169
+
170
+ {% comment %} load default grid options
171
+ ------------------------------------------------------------------ {% endcomment %}
172
+ {% assign percent_position = masonry_defaults.percentPosition %}
173
+ {% assign horizontal_order = masonry_defaults.horizontalOrder %}
174
+ {% assign origin_left = masonry_defaults.originLeft %}
175
+ {% assign origin_top = masonry_defaults.originTop %}
176
+ {% assign init_layout = masonry_defaults.initLayout %}
177
+ {% assign transition_duration = masonry_defaults.transitionDuration %}
178
+ {% assign stagger_duration = masonry_defaults.stagger %}
179
+ {% assign gutter_size = masonry_defaults.gutter %}
180
+ {% assign resize = masonry_defaults.resize %}
181
+ {% assign itemSelector = masonry_defaults.itemSelector %}
182
+ {% assign containerStyle = masonry_defaults.containerStyle %}
183
+ {% assign columnWidth = masonry_defaults.columnWidth %}
184
+
185
+ {% comment %} overload defaults by grid element options
186
+ ------------------------------------------------------------------ {% endcomment %}
187
+ {% if grid.options.percentPosition %} {% assign percent_position = grid.options.percentPosition %} {% endif %}
188
+ {% if grid.options.horizontalOrder %} {% assign horizontal_order = grid.options.horizontalOrder %} {% endif %}
189
+ {% if grid.options.originLeft %} {% assign origin_left = grid.options.originLeft %} {% endif %}
190
+ {% if grid.options.originTop %} {% assign origin_top = grid.options.originTop %} {% endif %}
191
+ {% if grid.options.initLayout %} {% assign init_layout = grid.options.initLayout %} {% endif %}
192
+ {% if grid.options.transitionDuration %} {% assign transition_duration = grid.options.transitionDuration %} {% endif %}
193
+ {% if grid.options.stagger %} {% assign stagger_duration = grid.options.stagger %} {% endif %}
194
+ {% if grid.options.gutter %} {% assign gutter_size = grid.options.gutter %} {% endif %}
195
+ {% if grid.options.resize %} {% assign resize = grid.options.resize %} {% endif %}
196
+ {% if grid.options.itemSelector %} {% assign itemSelector = grid.options.itemSelector %} {% endif %}
197
+ {% if grid.options.containerStyle %} {% assign containerStyle = grid.options.containerStyle %} {% endif %}
198
+ {% if grid.options.columnWidth %} {% assign columnWidth = grid.options.columnWidth %} {% endif %}
199
+
200
+ // create dynamic loader variable to setup the grid on id {{grid.id}}
201
+ dependency = 'dependencies_met_html_loaded_{{grid.id}}';
202
+ load_dependencies[dependency] = '';
203
+
204
+ // initialize the grid if HTML portion successfully loaded
205
+ load_dependencies['dependencies_met_html_loaded_{{grid.id}}'] = setInterval (() => {
206
+ // check if HTML portion of the grid is loaded successfully
207
+ xhrLoadState = j1.xhrDOMState['#{{grid.id}}_parent'];
208
+ if (xhrLoadState === 'success') {
209
+ setTimeout(() => {
210
+ var $grid_{{grid_id}} = $('#{{grid_id}}');
211
+ logger.debug('\n' + 'initialize grid on id: ' + '{{grid_id}}');
212
+
213
+ // grid event handler
214
+ logger.debug('\n' + 'install event handlers for grid on id: ' + '{{grid_id}}');
215
+ $grid_{{grid_id}}.on('layoutComplete', () => {
216
+ // initializing (grid layout) completed
217
+ logger.debug('\n' + 'initializing layout completed for grid on id: ' + '{{grid_id}}');
218
+
219
+ // correct position for artice modals (previwes)
220
+ logger.debug('\n' + 'adjust positions of all modals on id: {{grid_id.id}}');
221
+ var preview_modals = $("#{{grid_id}} > .article-modal");
222
+ $.each($(preview_modals), (index, modal) => {
223
+ $(modal).attr('style', 'left: 0%');
224
+ }); // END $each
225
+ }); // ENF on layoutComplete
226
+
227
+ // setup grid
228
+ logger.debug('\n' + 'grid is being setup on id: ' + '{{grid.id}}');
229
+ var $grid_{{grid_id}} = $grid_{{grid_id}}.masonry({
230
+ percentPosition: {{percent_position}},
231
+ horizontalOrder: {{horizontal_order}},
232
+ originLeft: {{origin_left}},
233
+ originTop: {{origin_top}},
234
+ initLayout: {{init_layout}},
235
+ transitionDuration: "{{transition_duration}}s",
236
+ stagger: "{{stagger_duration}}s",
237
+ resize: {{resize}},
238
+ gutter: {{gutter_size}}
239
+ });
240
+
241
+ // run code after all images are loaded with the grid
242
+ $grid_{{grid_id}}.imagesLoaded(() => {
243
+ console.debug("masonry: images loaded on {{grid_id}}");
244
+
245
+ {% if grid.lightbox.type == 'lg' %}
246
+ console.log("masonry: gallery detected on id: {{grid_id}}");
247
+
248
+ // setup lightbox
249
+ var lg = document.getElementById("{{grid_id}}");
250
+ var gallery = lightGallery(lg, {
251
+ "plugins": [{{grid.lightGallery.plugins}}],
252
+ "selector": '.lg-item',
253
+ {% for option in grid.lightGallery.options %}
254
+ {{option[0] | json}}: {{option[1] | json}},
255
+ {% endfor %}
256
+ {% if grid.videojs.enabled %}
257
+ {% if grid.videojs.player.vimeoPlayer.enabled %}
258
+ // vimeo player options
259
+ //
260
+ vimeoPlayerParams: {
261
+ {% for option in grid.videojs.player.vimeoPlayer.options %}
262
+ {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
263
+ {% endfor %}
264
+ {% endif %}
265
+ },
266
+ {% if grid.videojs.player.wistiaPlayer.enabled %}
267
+ // wistia player options
268
+ //
269
+ wistiaPlayerParams: {
270
+ {% for option in grid.videojs.player.wistiaPlayer.options %}
271
+ {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
272
+ {% endfor %}
273
+ {% endif %}
274
+ },
275
+ // youtube player options
276
+ //
277
+ {% if grid.videojs.player.youTubePlayer.enabled %}
278
+ youTubePlayerParams: {
279
+ {% for option in grid.videojs.player.youTubePlayer.options %}
280
+ {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
281
+ {% endfor %}
282
+ {% endif %}
283
+ },
284
+ {% endif %}
285
+ {% if grid.videojs.enabled %}
286
+ // videojs player options
287
+ //
288
+ videojs: {{grid.videojs.enabled}},
289
+ videojsTheme: "vjs-theme-{{grid.videojs.theme}}",
290
+ videojsOptions: {
291
+ {% for option in grid.lightGallery.player.videojsPlayer.options %}
292
+ {% if option == 'playbackRates' %}
293
+ playbackRates: [{{option[1]}}],
294
+ {% continue %}
295
+ {% endif %}
296
+ {{option[0] | json}}: {{option[1] | json}},
297
+ {% endfor %}
298
+ "controls": {{grid.videojs.player.videojsPlayer.controls}},
299
+ "controlBar": {
300
+ {% for option in grid.videojs.player.videojsPlayer.controlBar %}
301
+ {{option[0] | json}}: {{option[1] | json}}{% if forloop.last %}{% else %},{% endif %}
302
+ {% endfor %}
303
+ } // END controlBar
304
+ } // END videojsOptions
305
+ {% endif %}
306
+ }); // END lightGallery
307
+ {% endif %}
308
+ }); // END grid|imagesLoaded
309
+
310
+ }, masonryOptions.initTimeout);
311
+ }
312
+ clearInterval(load_dependencies['dependencies_met_html_loaded_{{grid.id}}']);
313
+ }, 10); // END dependencies_met_html_loaded
314
+
315
+ {% else %}
316
+
317
+ logger.info('\n' + 'found grid disabled on id: {{grid.id}}');
318
+ {% if masonryOptions.hideDisabled %}
319
+ // hide a grid if disabled
320
+ logger.debug('\n' + 'hide grid disabled on id: {{grid.id}}');
321
+ $('#{{grid.id}}').hide();
322
+ {% endif %}
323
+ {% endif %} // ENDIF grid enabled
324
+
325
+ {% endfor %} // ENDFOR (all) grids
326
+
327
+ _this.setState('finished');
328
+ logger.debug('\n' + 'state: ' + _this.getState());
329
+ logger.info('\n' + 'initializing module: finished');
330
+
331
+ endTimeModule = Date.now();
332
+ logger.info('\n' + 'module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
333
+
334
+ clearInterval(dependencies_met_page_ready);
335
+ } // END if pageVisible
336
+ }, 10); // END dependencies_met_page_ready
337
+ }, // END init
338
+
339
+ // -------------------------------------------------------------------------
340
+ // loadGridHTML()
341
+ // loads the HTML portion via AJAX (j1.loadHTML) for all grids configured.
342
+ // NOTE: Make sure the placeholder DIV is available in the content
343
+ // page e.g. using the asciidoc extension masonry::
344
+ // -------------------------------------------------------------------------
345
+ loadGridHTML: (options, grid) => {
346
+ var numGrids = Object.keys(grid).length;
347
+ var active_grids = numGrids;
348
+ var xhr_data_path = options.xhr_data_path + '/index.html';
349
+ var xhr_container_id;
350
+
351
+ console.debug('number of grids found: ' + numGrids);
352
+
353
+ _this.setState('load_data');
354
+ Object.keys(grid).forEach((key) => {
355
+ if (grid[key].enabled) {
356
+ xhr_container_id = grid[key].id + '_parent';
357
+
358
+ console.debug('load HTML portion on grid id: ' + grid[key].id);
359
+ j1.loadHTML({
360
+ xhr_container_id: xhr_container_id,
361
+ xhr_data_path: xhr_data_path,
362
+ xhr_data_element: grid[key].id
363
+ });
364
+ } else {
365
+ console.debug('grid found disabled on id: ' + grid[key].id);
366
+ active_grids--;
367
+ }
368
+ });
369
+ console.debug('grids loaded in page enabled|all: ' + active_grids + '|' + numGrids);
370
+ _this.setState('data_loaded');
371
+ }, // END loadSliderHTML
372
+
373
+ // -------------------------------------------------------------------------
374
+ // messageHandler()
375
+ // manage messages send from other J1 modules
376
+ // -------------------------------------------------------------------------
377
+ messageHandler: (sender, message) => {
378
+ var json_message = JSON.stringify(message, undefined, 2);
379
+
380
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
381
+ logger.debug(logText);
382
+
383
+ // -----------------------------------------------------------------------
384
+ // process commands|actions
385
+ // -----------------------------------------------------------------------
386
+ if (message.type === 'command' && message.action === 'module_initialized') {
387
+
388
+ //
389
+ // place handling of command|action here
390
+ //
391
+
392
+ logger.info('\n' + message.text);
393
+ }
394
+
395
+ //
396
+ // place handling of other command|action here
397
+ //
398
+
399
+ return true;
400
+ }, // END messageHandler
401
+
402
+ // -------------------------------------------------------------------------
403
+ // setState()
404
+ // sets the current (processing) state of the module
405
+ // -------------------------------------------------------------------------
406
+ setState: (stat) => {
407
+ _this.state = stat;
408
+ }, // END setState
409
+
410
+ // -------------------------------------------------------------------------
411
+ // getState()
412
+ // Returns the current (processing) state of the module
413
+ // -------------------------------------------------------------------------
414
+ getState: () => {
415
+ return _this.state;
416
+ } // END getState
417
+
418
+ }; // END main (return)
419
+ })(j1, window);
420
+
421
+ {% endcapture %}
422
+ {% if production %}
423
+ {{ cache | minifyJS }}
424
+ {% else %}
425
+ {{ cache | strip_empty_lines }}
426
+ {% endif %}
427
+ {% assign cache = nil %}