j1-template 2024.2.0 → 2024.2.1

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