j1-template 2021.1.6 → 2021.1.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5ceecb6b421d85c3db86a44fba73d25650012ace9626b1a53ff082d16a61e9e
4
- data.tar.gz: 7093783266335d7524f406c452bff71b8a9979f0b9d172c7025c01f9559ffc36
3
+ metadata.gz: dd99f44d9770cafc797059b8bb2dd7b2c60b54e460737d3fdcddaaac0702b52f
4
+ data.tar.gz: a1f080e81e48ec5ec902a7559ebf2555e33b648d3f385dcf99767b981a5d1636
5
5
  SHA512:
6
- metadata.gz: a63666eeb929986759194324a01d601aec108c9f5f1716326668786779d84db989d97adfe02c40ef065faf54fb13743f900dca24e6934c4988e0c8110802ba3f
7
- data.tar.gz: f702196b47569beb2d080ddcc75db8c4d4e7a3512a03d6bd291937d5a88167e7343dff4ac2a984978d269c42685b6766cb08ebca40aa74c0cbd35b3e63aa4183
6
+ metadata.gz: 8faefc3ade2153c53a3edef1576b42cced5ef8ed77ef560799a779e155bfb00e86fe2f8d95e3774203bcefcaea3d23b780223a3235b1b824b21bf24e7eb4dbe3
7
+ data.tar.gz: 8d928351b119f2b3288218844a586abda950e7acc100384ddd262f7746eda189b4db7bbc3f60071ea6ea8ae8bf3f15c33c14e8c92c932549edb7b58886c311e3
@@ -1148,19 +1148,24 @@ var j1 = (function () {
1148
1148
 
1149
1149
  // see: https://stackoverflow.com/questions/20420577/detect-added-element-to-dom-with-mutation-observer
1150
1150
  //
1151
- var html_data_path;
1151
+ var html_data_path = options.xhr_data_path + ' #' + options.xhr_data_element;
1152
1152
  var id = '#' + options.xhr_container_id;
1153
1153
  var container = '#' + options.xhr_container_id + '_container';
1154
1154
  var $selector = $(id);
1155
1155
 
1156
+ // NOTE: Unclear why some pages (e.g. about/site) affected (fam button).
1157
+ // All pages should have FRONTMATTER defaults (by _config.yml) setting
1158
+ // all relevant defaults.
1159
+
1160
+ // failsafe - prevent XHR load errors
1161
+ if (options.xhr_data_element !== '') {
1162
+ logger.info('XHR data element found: ' + options.xhr_data_element);
1163
+ } else {
1164
+ logger.warn('no XHR data element found, loading data aborted');
1165
+ return;
1166
+ }
1167
+
1156
1168
  if ( $selector.length ) {
1157
- if (options.xhr_data_element) {
1158
- html_data_path = options.xhr_data_path + ' #' + options.xhr_data_element;
1159
- logger.info('XHR data element found: ' + options.xhr_data_element);
1160
- } else {
1161
- logger.warn('no XHR data element found. HTML data loaded full page.');
1162
- html_data_path = options.xhr_data_path + ' > *';
1163
- }
1164
1169
  $selector.load( html_data_path, cb_load_closure( mod, id ) );
1165
1170
 
1166
1171
  var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
@@ -1173,7 +1178,7 @@ var j1 = (function () {
1173
1178
 
1174
1179
  selector.each(function(){
1175
1180
  xhrObserver.observe(this, obsConfig);
1176
- } );
1181
+ });
1177
1182
 
1178
1183
  function mutationHandler (mutationRecords) {
1179
1184
  mutationRecords.forEach ( function (mutation) {
@@ -1185,6 +1190,8 @@ var j1 = (function () {
1185
1190
  }
1186
1191
  } else {
1187
1192
  // jadams, 2020-07-21: To be clarified why a id is "undefined"
1193
+
1194
+ // failsafe - prevent XHR load errors
1188
1195
  if (id != '#undefined') {
1189
1196
  logText = 'data not loaded on id:' + id;
1190
1197
  logger.warn(logText);
@@ -0,0 +1,896 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/navigator.js
10
+ # Liquid template to adapt Navigator Core functions
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ #
15
+ # Copyright (C) 2021 Juergen Adams
16
+ #
17
+ # J1 Template is licensed under the MIT License.
18
+ # For details, see https://jekyll.one
19
+ # -----------------------------------------------------------------------------
20
+ # Test data:
21
+ # {{ liquid_var | debug }}
22
+ # -----------------------------------------------------------------------------
23
+ # NOTE:
24
+ #
25
+ # JSON pretty print
26
+ # Example: var str = JSON.stringify(obj, null, 2); // spacing level = 2
27
+ # See: https://stackoverflow.com/questions/4810841/how-can-i-pretty-print-json-using-javascript
28
+ # -----------------------------------------------------------------------------
29
+ # NOTE:
30
+ # jadams, 2020-06-21:
31
+ # J1 Navigator needs a general revision on BS4 code and functionalities
32
+ # Current, only base function are tested with BS4 (was coded for BS3)
33
+ # -----------------------------------------------------------------------------
34
+ # NOTE:
35
+ # jadams, 2020-07-17:
36
+ # J1 Navigator can't be minfied for now. Uglifier fails on an ES6
37
+ # (most probably) structure that couldn't fixed by 'harmony' setting.
38
+ # Minifier fails by:
39
+ # Unexpected token: punc ())
40
+ # Current, minifying has been disabled
41
+ # -----------------------------------------------------------------------------
42
+ {% endcomment %}
43
+
44
+ {% comment %} Liquid procedures
45
+ -------------------------------------------------------------------------------- {% endcomment %}
46
+ {% capture select_color %}themes/{{site.template.name}}/procedures/global/select_color.proc{% endcapture %}
47
+
48
+ {% comment %} Set global settings
49
+ -------------------------------------------------------------------------------- {% endcomment %}
50
+ {% assign environment = site.environment %}
51
+ {% assign brand_image_height = site.brand.image_height %}
52
+
53
+ {% comment %} Process YML config data
54
+ ================================================================================ {% endcomment %}
55
+
56
+
57
+ {% comment %} Set config files
58
+ {% assign auth_manager_config = site.j1_auth %}
59
+ -------------------------------------------------------------------------------- {% endcomment %}
60
+ {% assign template_config = site.data.j1_config %}
61
+ {% assign blocks = site.data.blocks %}
62
+ {% assign modules = site.data.modules %}
63
+
64
+ {% assign themer_defaults = modules.defaults.themer.defaults %}
65
+ {% assign themer_settings = modules.themer.settings %}
66
+
67
+ {% assign authentication_defaults = modules.defaults.authentication.defaults %}
68
+ {% assign authentication_settings = modules.authentication.settings %}
69
+
70
+ {% assign template_config = site.data.template_settings %}
71
+ {% assign navigator_defaults = site.data.modules.defaults.navigator.defaults %}
72
+ {% assign navigator_settings = site.data.modules.navigator.settings %}
73
+
74
+ {% comment %} Set config data
75
+ -------------------------------------------------------------------------------- {% endcomment %}
76
+ {% assign nav_bar_defaults = navigator_defaults.nav_bar %}
77
+ {% assign nav_bar_settings = navigator_settings.nav_bar %}
78
+ {% assign nav_menu_defaults = navigator_defaults.nav_menu %}
79
+ {% assign nav_menu_settings = navigator_settings.nav_menu %}
80
+
81
+ {% assign nav_quicklinks_defaults = navigator_defaults.nav_quicklinks %}
82
+ {% assign nav_quicklinks_settings = navigator_settings.nav_quicklinks %}
83
+ {% assign nav_topsearch_defaults = navigator_defaults.nav_topsearch %}
84
+ {% assign nav_topsearch_settings = navigator_settings.nav_topsearch %}
85
+ {% assign nav_authclient_defaults = authentication_defaults.auth_client %}
86
+ {% assign nav_authclient_settings = authentication_settings.auth_client %}
87
+
88
+ {% comment %} Set config options
89
+ -------------------------------------------------------------------------------- {% endcomment %}
90
+ {% assign authentication_options = authentication_defaults | merge: authentication_settings %}
91
+ {% assign themer_options = themer_defaults | merge: themer_settings %}
92
+ {% assign nav_bar_options = nav_bar_defaults | merge: nav_bar_settings %}
93
+ {% assign nav_menu_options = nav_menu_defaults | merge: nav_menu_settings %}
94
+ {% assign quicklinks_options = nav_quicklinks_defaults | merge: nav_quicklinks_settings %}
95
+ {% assign topsearch_options = nav_topsearch_defaults | merge: nav_topsearch_settings %}
96
+ {% assign authclient_options = nav_authclient_defaults | merge: nav_authclient_settings %}
97
+
98
+ {% assign nav_bar_id = navigator_defaults.nav_bar.id %}
99
+ {% assign nav_menu_id = navigator_defaults.nav_menu.id %}
100
+ {% assign nav_quicklinks_id = navigator_defaults.nav_quicklinks.id %}
101
+ {% assign nav_navbar_media_breakpoint = navigator_defaults.nav_bar.media_breakpoint %}
102
+ {% assign authclient_modals_id = navigator_defaults.nav_authclient.xhr_container_id %}
103
+
104
+ {% if nav_bar_options.dropdown_animate_duration != null %}
105
+ {% assign animate_duration = nav_bar_options.dropdown_animate_duration %}
106
+ {% else %}
107
+ {% assign animate_duration = 1 %}
108
+ {% endif %}
109
+
110
+ {% assign production = false %}
111
+ {% if environment == 'prod' or environment == 'production' %}
112
+ {% assign production = true %}
113
+ {% endif %}
114
+
115
+ {% comment %}
116
+ --------------------------------------------------------------------------------
117
+ Set|Overload Liquid vars hardwired to NOT break the (MD) style
118
+ ToDo: Remove configuration from j1_navigator.yml
119
+ -------------------------------------------------------------------------------- {% endcomment %}
120
+ {% assign dropdown_border_height = "3" %}
121
+
122
+ /*
123
+ # -----------------------------------------------------------------------------
124
+ # ~/assets/themes/j1/adapter/js/navigator.js
125
+ # JS Adapter for J1 Navigator
126
+ #
127
+ # Product/Info:
128
+ # {{site.data.template_settings.theme_author_url}}
129
+ #
130
+ # Copyright (C) 2021 Juergen Adams
131
+ #
132
+ # J1 Template is licensed under the MIT License.
133
+ # For details, see {{site.data.template_settings.theme_author_url}}
134
+ # -----------------------------------------------------------------------------
135
+ # NOTE: For AJAX (XHR) loads see
136
+ # https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
137
+ # -----------------------------------------------------------------------------
138
+ # NOTE: For getStyleValue helper see
139
+ # https://stackoverflow.com/questions/16965515/how-to-get-a-style-attribute-from-a-css-class-by-javascript-jquery
140
+ # -----------------------------------------------------------------------------
141
+ # Adapter generated: {{site.time}}
142
+ # -----------------------------------------------------------------------------
143
+ */
144
+
145
+ // -----------------------------------------------------------------------------
146
+ // ESLint shimming
147
+ // -----------------------------------------------------------------------------
148
+ /* eslint indent: "off" */
149
+ // -----------------------------------------------------------------------------
150
+ 'use strict';
151
+
152
+ j1.adapter['navigator'] = (function (j1, window) {
153
+
154
+ // ---------------------------------------------------------------------------
155
+ // globals
156
+ // ---------------------------------------------------------------------------
157
+ var environment = '{{environment}}';
158
+ var dclFinished = false;
159
+ var moduleOptions = {};
160
+
161
+ var nav_menu_id = '{{nav_menu_id}}';
162
+ var nav_quicklinks_id = '{{nav_quicklinks_id}}';
163
+
164
+ var authclient_modals_id = '{{authclient_modals_id}}';
165
+ var authclient_xhr_data_element = '{{authclient_options.xhr_data_element}}';
166
+ var authclient_modals_data_path = '{{authclient_options.xhr_data_path}}';
167
+
168
+ var nav_menu_data_path = '{{nav_menu_options.data_path}}';
169
+ var nav_quicklinks_data_path = '{{quicklinks_options.data_path}}';
170
+
171
+ var colors_data_path = '{{template_config.colors_data_path}}';
172
+ var font_size_data_path = '{{template_config.font_size_data_path}}';
173
+
174
+
175
+ var cookie_names = j1.getCookieNames();
176
+ var cookie_user_session_name = cookie_names.user_session;
177
+
178
+ var user_session = {};
179
+ var user_session_merged = {};
180
+ var session_state = {};
181
+
182
+ var themerEnabled = {{themer_options.enabled}}; //was (test): false;
183
+ var authClientEnabled;
184
+ var appDetected;
185
+ var json_data;
186
+ var _this;
187
+ var logger;
188
+ var logText;
189
+
190
+
191
+ // ---------------------------------------------------------------------------
192
+ // helper functions
193
+ // ---------------------------------------------------------------------------
194
+
195
+ // ---------------------------------------------------------------------------
196
+ // main object
197
+ // ---------------------------------------------------------------------------
198
+ return {
199
+
200
+ // -------------------------------------------------------------------------
201
+ // module initializer
202
+ // -------------------------------------------------------------------------
203
+ init: function (options) {
204
+
205
+ // -----------------------------------------------------------------------
206
+ // globals
207
+ // -----------------------------------------------------------------------
208
+ _this = j1.adapter.navigator;
209
+ logger = log4javascript.getLogger('j1.adapter.navigator');
210
+
211
+ // initialize state flag
212
+ _this.setState('started');
213
+ logger.info('state: ' + _this.getState());
214
+ logger.info('module is being initialized');
215
+
216
+ // -----------------------------------------------------------------------
217
+ // defaults
218
+ // -----------------------------------------------------------------------
219
+ var settings = $.extend({
220
+ module_name: 'j1.adapter.navigator',
221
+ generated: '{{site.time}}'
222
+ }, options);
223
+
224
+ // -----------------------------------------------------------------------
225
+ // options loader
226
+ // -----------------------------------------------------------------------
227
+ /* eslint-disable */
228
+ var authConfig = {};
229
+ var navDefaults = {};
230
+ var navBarConfig = {};
231
+ var navMenuConfig = {};
232
+ var navQuicklinksConfig = {};
233
+ var navTopsearchConfig = {};
234
+ var navAuthClientConfig = {};
235
+ var navBarOptions = {};
236
+ var navMenuOptions = {};
237
+ var navQuicklinksOptions = {};
238
+ var navTopsearchOptions = {};
239
+ var navAuthClientOptions = {};
240
+ var navAuthMAnagerConfig = {};
241
+
242
+ var user_state = {};
243
+ var cookie_names = j1.getCookieNames();
244
+ var cookie_user_state_name = cookie_names.user_state;
245
+
246
+ var themerOptions = {};
247
+ var interval_count = 0;
248
+ var user_state_detected;
249
+ var themes_count;
250
+ var max_count = 100;
251
+
252
+
253
+ navDefaults = $.extend({}, {{navigator_defaults | replace: '=>', ':' }});
254
+ navBarConfig = $.extend({}, {{nav_bar_options | replace: '=>', ':' }});
255
+ navMenuConfig = $.extend({}, {{nav_menu_options | replace: '=>', ':' }});
256
+ navQuicklinksConfig = $.extend({}, {{quicklinks_options | replace: '=>', ':' }});
257
+ navTopsearchConfig = $.extend({}, {{topsearch_options | replace: '=>', ':' }});
258
+ navAuthClientConfig = $.extend({}, {{authclient_options | replace: '=>', ':' }});
259
+
260
+ navAuthMAnagerConfig = $.extend({}, {{authentication_options | replace: '=>', ':' }});
261
+ authClientEnabled = navAuthMAnagerConfig.enabled;
262
+
263
+ themerOptions = $.extend({}, {{themer_options | replace: '=>', ':' | replace: 'nil', '""' }});
264
+
265
+ // Merge|Overload module CONFIG by DEFAULTS
266
+ //
267
+ navBarOptions = j1.mergeData(navBarConfig, navDefaults.nav_bar);
268
+ navMenuOptions = j1.mergeData(navMenuConfig, navDefaults.nav_menu);
269
+ navQuicklinksOptions = j1.mergeData(navQuicklinksConfig, navDefaults.nav_quicklinks);
270
+ navTopsearchOptions = j1.mergeData(navTopsearchConfig, navDefaults.nav_topsearch);
271
+ navAuthClientConfig = j1.mergeData(navAuthClientConfig, navDefaults.nav_authclient);
272
+
273
+ // save config settings into the adapter object for global access
274
+ //
275
+ _this['navDefaults'] = navDefaults;
276
+ _this['navBarOptions'] = navBarOptions;
277
+ _this['navMenuOptions'] = navMenuOptions;
278
+ _this['navQuicklinksOptions'] = navQuicklinksOptions;
279
+ _this['navTopsearchOptions'] = navTopsearchOptions;
280
+ _this['navAuthClientConfig'] = navAuthClientConfig;
281
+ _this['navAuthManagerConfig'] = navAuthMAnagerConfig;
282
+
283
+ // Load (individual) frontmatter options (currently NOT used)
284
+ if (options != null) { var frontmatterOptions = $.extend({}, options) }
285
+ /* eslint-enable */
286
+
287
+ // -----------------------------------------------------------------------
288
+ // Load HTML data (AJAX)
289
+ // -----------------------------------------------------------------------
290
+ // jadams, 202-06-24: Promise (chain) if $.when seems NOT to work correctly.
291
+ // It seems a chain using .then will be a better solution to make it sure
292
+ // that the last Deferred set the state to 'data_loaded'.
293
+ // Found the final state randomly set to 'null' what prevent the module
294
+ // to run mmenuInitializer.
295
+ // Workaround: Set 'data_loaded' to be returned by all Deferred in
296
+ // the chain.
297
+ // See: https://stackoverflow.com/questions/5436327/jquery-deferreds-and-promises-then-vs-done
298
+ // authclient_xhr_data_element
299
+ // -----------------------------------------------------------------------
300
+ // data loader
301
+ // -----------------------------------------------------------------------
302
+
303
+ j1.xhrData({
304
+ xhr_container_id: navQuicklinksOptions.xhr_container_id,
305
+ xhr_data_path: navQuicklinksOptions.xhr_data_path,
306
+ xhr_data_element: navQuicklinksOptions.xhr_data_element },
307
+ 'j1.adapter.navigator',
308
+ null);
309
+ j1.xhrData({
310
+ xhr_container_id: navAuthClientConfig.xhr_container_id,
311
+ xhr_data_path: navAuthClientConfig.xhr_data_path,
312
+ xhr_data_element: navAuthClientConfig.xhr_data_element },
313
+ 'j1.adapter.navigator',
314
+ null);
315
+ j1.xhrData({
316
+ xhr_container_id: navMenuOptions.xhr_container_id,
317
+ xhr_data_path: navMenuOptions.xhr_data_path,
318
+ xhr_data_element: navMenuOptions.xhr_data_element },
319
+ 'j1.adapter.navigator',
320
+ 'data_loaded');
321
+
322
+ var dependencies_met_load_menu_finished = setInterval (function () {
323
+ if (j1.xhrDOMState['#'+navQuicklinksOptions.xhr_container_id] == 'not loaded' ||
324
+ j1.xhrDOMState['#'+navAuthClientConfig.xhr_container_id] == 'not loaded' ||
325
+ j1.xhrDOMState['#'+navMenuOptions.xhr_container_id] == 'not loaded')
326
+ {
327
+ // load HTML data (AJAX) failed
328
+ logger.error('load HTML data (AJAX): failed');
329
+ _this.setState('finished');
330
+ logger.info('state: ' + _this.getState());
331
+ logger.info('initializing module: failed');
332
+ logger.info('met dependencies for: xhrData');
333
+ clearInterval(dependencies_met_load_menu_finished);
334
+ } else if (j1.xhrDOMState['#'+navQuicklinksOptions.xhr_container_id] == 'success' &&
335
+ j1.xhrDOMState['#'+navAuthClientConfig.xhr_container_id] == 'success' &&
336
+ j1.xhrDOMState['#'+navMenuOptions.xhr_container_id] == 'success' )
337
+ {
338
+ // AJAX loads (xhrData) has finished successfully
339
+ _this.setState('processing');
340
+ logger.info('status: ' + _this.getState());
341
+ logger.info('initialize navigator core');
342
+
343
+ // Detect|Set J1 App status
344
+ appDetected = j1.appDetected();
345
+ authClientEnabled = j1.authEnabled();
346
+ logger.info('application status detected: ' + appDetected);
347
+
348
+ j1.core.navigator.init (_this.navDefaults, _this.navMenuOptions);
349
+
350
+ // load themes (to menu) if themer is enabled
351
+ if (themerEnabled) {
352
+
353
+ logText = 'theme switcher: enabled';
354
+ logger.info(logText);
355
+
356
+ // Detect|Set J1 UserState
357
+ user_state_detected = j1.existsCookie(cookie_user_state_name);
358
+ if (user_state_detected) {
359
+ user_state = j1.readCookie(cookie_user_state_name);
360
+ }
361
+
362
+ logText = 'load themes';
363
+ logger.info(logText);
364
+
365
+ // load LOCAL themes from JSON data
366
+ logText = 'load local themes (json file)';
367
+ logger.info(logText);
368
+ $('#local_themes').bootstrapThemeSwitcher({
369
+ localFeed: themerOptions.localThemes
370
+ });
371
+
372
+ // load REMOTE themes from Bootswatch API (localFeed EMPTY!)
373
+ $('#remote_themes').bootstrapThemeSwitcher({
374
+ localFeed: '',
375
+ bootswatchApiVersion: themerOptions.bootswatchApiVersion
376
+ });
377
+
378
+ // jadams, 2021-04-22: Up to now, it is unclear why in some
379
+ // cases the menu bar is NOT fully loaded for THEMES
380
+ // TODO: Add additional checks to find the reason
381
+ var dependencies_met_remote_themes_loaded = setInterval(function() {
382
+ // jadams, 2021-07-03: check for themer get finished loading
383
+ interval_count += 1;
384
+ themes_count = document.getElementById("remote_themes").getElementsByTagName("li").length;
385
+ if ( themes_count > 0 ) {
386
+ logger.info('remote themes loaded: successfully');
387
+ logger.info('remote themes loaded: successfully after: ' + interval_count * 25 + ' ms');
388
+
389
+ clearInterval(dependencies_met_remote_themes_loaded);
390
+ } else {
391
+ logger.debug('wait for theme to be loaded: ' + user_state.theme_name);
392
+ }
393
+ if (interval_count > max_count) {
394
+ logger.warn('remote themes loading: failed');
395
+ logger.warn('continue processing');
396
+ clearInterval(dependencies_met_remote_themes_loaded);
397
+ }
398
+ clearInterval(dependencies_met_page_finished);
399
+ }, 25); // END dependencies_met_remote_themes_loaded
400
+ } else {
401
+ logger.info('theme switcher detected as: disabled');
402
+ } // END if themerEnabled
403
+
404
+ // -------------------------------------------------------------------
405
+ // event handler|css styles
406
+ // -------------------------------------------------------------------
407
+ // jadams, 2021-07-03: unclear why to wait for the themer ???
408
+ // continue to apply the theme CSS
409
+ if (themerEnabled) {
410
+ _this.setState('processing');
411
+
412
+ logger.info('initialize eventHandler');
413
+ j1.core.navigator.eventHandler();
414
+
415
+ logger.info('initializing dynamic CSS styles');
416
+ _this.setCSS (
417
+ navDefaults, navBarOptions, navMenuOptions,
418
+ navQuicklinksOptions, navTopsearchOptions
419
+ );
420
+
421
+ logger.info('init auth client');
422
+ _this.initAuthClient(_this.navAuthManagerConfig);
423
+
424
+ _this.setState('finished');
425
+ logger.info('state: ' + _this.getState());
426
+ logger.info('module initialized successfully');
427
+ logger.info('met dependencies for: j1');
428
+ clearInterval(dependencies_met_themer_finished);
429
+ } else {
430
+ _this.setState('processing');
431
+
432
+ logger.info('initialize eventHandler');
433
+ j1.core.navigator.eventHandler();
434
+
435
+ // set general|global theme colors
436
+ logger.info('apply dynamic CSS styles');
437
+ _this.setCSS (
438
+ navDefaults, navBarOptions, navMenuOptions,
439
+ navQuicklinksOptions, navTopsearchOptions
440
+ );
441
+
442
+ logger.info('init auth client');
443
+ _this.initAuthClient(_this.navAuthManagerConfig);
444
+ _this.setState('finished');
445
+ logger.info('state: ' + _this.getState());
446
+ clearInterval(dependencies_met_themer_finished);
447
+ }
448
+ } else {
449
+ // load HTML data (AJAX) failed for unknown reason
450
+ logger.error('initializing module: failed for unlnown reason');
451
+ _this.setState('finished');
452
+ logger.info('state: ' + _this.getState());
453
+ clearInterval(dependencies_met_load_menu_finished);
454
+ }
455
+ }, 25); // END dependencies_met_load_menu_finished
456
+
457
+ // -----------------------------------------------------------------------
458
+ // Register event 'reset on resize' to call j1.core.navigator on
459
+ // manageDropdownMenu to manage the (current) NAV menu for
460
+ // desktop or mobile
461
+ // -----------------------------------------------------------------------
462
+ $(window).on('resize', function() {
463
+ j1.core.navigator.manageDropdownMenu(navDefaults, navMenuOptions);
464
+
465
+ // jadams, 2020-07-10: cause severe trouble on mobile devices if
466
+ // OnScreen Kbd comes up and reduces the window size (resize event)
467
+ // DISABLED
468
+ // ---------------------------------------------------------------------
469
+ // Hide|Close topSearch on resize event
470
+ // $('.top-search').slideUp();
471
+
472
+ // Manage sticky NAV bars
473
+ setTimeout (function() {
474
+ j1.core.navigator.navbarSticky();
475
+ }, 500);
476
+
477
+ // Scroll the page one pixel back and forth to get
478
+ // the right position for Toccer (trigger) and SSM
479
+ $(window).scrollTop($(window).scrollTop()+1);
480
+ $(window).scrollTop($(window).scrollTop()-1);
481
+
482
+ // jadams, 2020-06-21: unclear|forgotten what I'm doing here!
483
+ // Looks like the old BS3 implementation
484
+ //
485
+ // $('.navbar-collapse').removeClass('in');
486
+ // $('.navbar-collapse').removeClass('on');
487
+ // $('.navbar-collapse').removeClass('bounceIn');
488
+ });
489
+ }, // END init
490
+
491
+ // -------------------------------------------------------------------------
492
+ // initialize JS portion for the dialogs (modals) used by J1AuthClient
493
+ // NOTE: Currently cookie updates NOT processed at the NAV module
494
+ // All updates on Cookies are managed by Cookie Consent.
495
+ // To be considered to re-add cookie updates for the auth state
496
+ // -------------------------------------------------------------------------
497
+ initAuthClient: function(auth_config) {
498
+ var logger = log4javascript.getLogger('j1.adapter.navigator.initAuthClient');
499
+ var user_session = j1.readCookie(cookie_user_session_name);
500
+
501
+ _this.modalEventHandler(auth_config);
502
+
503
+ if (j1.appDetected() && j1.authEnabled()) {
504
+ // Toggle/Set SignIn/SignOut icon|link in QuickLinks
505
+ // See: https://stackoverflow.com/questions/13524107/how-to-set-data-attributes-in-html-elements
506
+ if (user_session.authenticated === 'true') {
507
+ // Set SignOut
508
+ $('#navLinkSignInOut').attr('data-target', '#modalOmniSignOut');
509
+ $('#iconSignInOut').removeClass('mdi-login').addClass('mdi-logout');
510
+ } else {
511
+ // Set SignIn
512
+ $('#navLinkSignInOut').attr('data-target', '#modalOmniSignIn');
513
+ $('#iconSignInOut').removeClass('mdi-logout').addClass('mdi-login');
514
+ }
515
+ }
516
+
517
+ return true;
518
+ }, // END initAuthClient
519
+
520
+ // -------------------------------------------------------------------------
521
+ // modalEventHandler
522
+ // Manage button click events for all BS Modals
523
+ // See: https://www.nickang.com/add-event-listener-for-loop-problem-in-javascript/
524
+ // -------------------------------------------------------------------------
525
+ modalEventHandler: function (options) {
526
+ // var logger = log4javascript.getLogger('j1.adapter.navigator.EventHandler');
527
+ var authConfig = options.j1_auth;
528
+ var route;
529
+ var provider;
530
+ var provider_url;
531
+ var allowed_users;
532
+ var logText;
533
+
534
+ var signIn = {
535
+ provider: authConfig.providers.activated[0],
536
+ users: authConfig.providers[authConfig.providers['activated'][0]]['users'],
537
+ do: false
538
+ };
539
+
540
+ var signOut = {
541
+ provider: authConfig.providers.activated[0],
542
+ providerSignOut: false,
543
+ do: false
544
+ };
545
+
546
+ logText = 'initialize button click events';
547
+ logger.info(logText);
548
+
549
+ // Manage button click events for modal "signInOutButton"
550
+ // -----------------------------------------------------------------------
551
+ $('ul.nav-pills > li').click(function (e) {
552
+ e.preventDefault();
553
+ // jadams, 2019-07-30: To be checked if needed
554
+ signIn.provider = $(this).text().trim();
555
+ signIn.provider = signIn.provider.toLowerCase();
556
+ signIn.allowed_users = signIn.users.toString();
557
+ });
558
+
559
+ $('a.btn').click(function() {
560
+ if (this.id === 'signInButton') {
561
+ signIn.do = true;
562
+ } else {
563
+ signIn.do = false;
564
+ }
565
+ if (this.id === 'signOutButton') {
566
+ signOut.do = true;
567
+ } else {
568
+ signOut.do = false;
569
+ }
570
+ });
571
+
572
+ $('input:checkbox[name="providerSignOut"]').on('click', function (e) {
573
+ e.stopPropagation();
574
+ signOut.providerSignOut = $('input:checkbox[name="providerSignOut"]').is(':checked');
575
+ if(environment === 'development') {
576
+ logText = 'provider signout set to: ' + signOut.providerSignOut;
577
+ logger.info(logText);
578
+ }
579
+ });
580
+
581
+ // Manage pre events on modal "modalOmniSignIn"
582
+ // -----------------------------------------------------------------------
583
+ $('#modalOmniSignOut').on('show.bs.modal', function() {
584
+ var modal = $(this);
585
+ logger.info('place current user data');
586
+ user_session = j1.readCookie(cookie_user_session_name);
587
+ modal.find('.user-info').text('You are signed in to provider: ' + user_session.provider);
588
+ }); // END SHOW modalOmniSignOut
589
+
590
+ // Manage post events on modal "modalOmniSignIn"
591
+ // -----------------------------------------------------------------------
592
+ $('#modalOmniSignIn').on('hidden.bs.modal', function() {
593
+ if (signIn.do == true) {
594
+ provider = signIn.provider.toLowerCase();
595
+ allowed_users = signIn.users.toString();
596
+ logText = 'provider detected: ' + provider;
597
+ logger.info(logText);
598
+
599
+ var route = '/authentication?request=signin&provider=' +provider+ '&allowed_users=' +allowed_users;
600
+ logText = 'call middleware for signin on route: ' + route;
601
+ logger.info(logText);
602
+ window.location.href = route;
603
+ } else {
604
+ provider = signIn.provider.toLowerCase();
605
+ logText = 'provider detected: ' + provider;
606
+ logger.info(logText);
607
+ logText = 'login declined for provider: ' +provider;
608
+ logger.info(logText);
609
+ }
610
+ }); // END post events "modalOmniSignIn"
611
+
612
+ // Manage post events on modal "modalOmniSignOut"
613
+ // -----------------------------------------------------------------------
614
+ $('#modalOmniSignOut').on('hidden.bs.modal', function() {
615
+ if (signOut.do == true) {
616
+ logger.info('load active provider from cookie: ' + cookie_user_session_name);
617
+
618
+ user_session = j1.readCookie(cookie_user_session_name);
619
+ provider = user_session.provider;
620
+ provider_url = user_session.provider_site_url;
621
+
622
+ logText = 'provider detected: ' + provider;
623
+ logger.info(logText);
624
+ logText = 'initiate signout for provider: ' +provider;
625
+ logger.info(logText);
626
+
627
+ var route = '/authentication?request=signout&provider=' + provider + '&provider_signout=' + signOut.providerSignOut; // + '/logout/';
628
+ logText = 'call middleware on route : ' +route;
629
+ logger.info(logText);
630
+ window.location.href = route;
631
+ } else {
632
+ provider = signOut.provider.toLowerCase();
633
+ logText = 'provider detected: ' + provider;
634
+ logger.info(logText);
635
+ logText = 'signout declined for provider: ' +provider ;
636
+ logger.info(logText);
637
+ }
638
+ }); // END post events "modalSignOut"
639
+
640
+ logText = 'initialize button click events completed';
641
+ logger.info(logText);
642
+
643
+ return true;
644
+ }, // END modalEventHandler
645
+
646
+ // -------------------------------------------------------------------------
647
+ // setCSS
648
+ // Set dynamic CSS styles
649
+ // -------------------------------------------------------------------------
650
+ setCSS: function (navDefaults, navBarOptions, navMenuOptions, navQuicklinksOptions, navTopsearchOptions) {
651
+ var logger = log4javascript.getLogger('j1.adapter.navigator.setCSS');
652
+ var gridBreakpoint_lg = '992px';
653
+ var gridBreakpoint_md = '768px';
654
+ var gridBreakpoint_sm = '576px';
655
+ var navPrimaryColor = navDefaults.nav_primary_color;
656
+
657
+ {% comment %} Set|Resolve navMenuOptions
658
+ -------------------------------------------------------------------------- {% endcomment %}
659
+ navMenuOptions.dropdown_font_size = navMenuOptions.dropdown_font_size;
660
+ navMenuOptions.megamenu_font_size = navMenuOptions.megamenu_font_size;
661
+
662
+ {% comment %} Set|Resolve navBarOptions
663
+ -------------------------------------------------------------------------- {% endcomment %}
664
+ navBarOptions.background_color_full = navBarOptions.background_color_full;
665
+
666
+ {% comment %} Set|Resolve navMenuOptions
667
+ -------------------------------------------------------------------------- {% endcomment %}
668
+ navMenuOptions.menu_item_color = navMenuOptions.menu_item_color;
669
+ navMenuOptions.menu_item_color_hover = navMenuOptions.menu_item_color_hover;
670
+ navMenuOptions.menu_item_dropdown_color = navMenuOptions.menu_item_dropdown_color;
671
+ navMenuOptions.dropdown_item_color = navMenuOptions.dropdown_item_color;
672
+ navMenuOptions.dropdown_background_color_hover = navMenuOptions.dropdown_background_color_hover;
673
+ navMenuOptions.dropdown_background_color_active = navMenuOptions.dropdown_background_color_active;
674
+ navMenuOptions.dropdown_border_color = navMenuOptions.dropdown_border_color;
675
+
676
+ {% comment %} Set|Resolve navQuicklinksOptions
677
+ -------------------------------------------------------------------------- {% endcomment %}
678
+ navQuicklinksOptions.icon_color = navQuicklinksOptions.icon_color;
679
+ navQuicklinksOptions.icon_color_hover = navQuicklinksOptions.icon_color_hover;
680
+ navQuicklinksOptions.background_color = navQuicklinksOptions.background_color;
681
+
682
+ {% comment %} Set|Resolve navTopsearchOptions
683
+ -------------------------------------------------------------------------- {% endcomment %}
684
+ navTopsearchOptions.input_color = navTopsearchOptions.input_color;
685
+ navTopsearchOptions.background_color = navTopsearchOptions.background_color;
686
+
687
+ {% comment %} Set dymanic styles
688
+ -------------------------------------------------------------------------- {% endcomment %}
689
+ // $('nav-primary').css({"background-color": "navPrimaryColor"});
690
+
691
+
692
+ {% comment %} navBar styles
693
+ -------------------------------------------------------------------------- {% endcomment %}
694
+ var bg_primary = j1.getStyleValue('bg-primary', 'background-color');
695
+ var bg_scrolled = bg_primary;
696
+ var bg_collapsed = bg_primary;
697
+
698
+ $('head').append('<style>.mdi-bg-primary {color: ' +bg_scrolled+ ';}</style>');
699
+
700
+ // Size of brand image
701
+ $('head').append('<style>.navbar-brand > img { height: {{brand_image_height}}px !important; }</style>');
702
+
703
+ // Navbar transparent-light (light)
704
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator.navbar-transparent.light { background-color: ' +navBarOptions.background_color_full+ ' !important; border-bottom: solid 0px !important; } }</style>');
705
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator.navbar-scrolled.light { background-color: ' +bg_scrolled+ ' !important; } }</style>');
706
+
707
+ $('head').append('<style id="dynNav">@media (max-width: ' +gridBreakpoint_md+ ') { nav.navbar.navigator.navbar-transparent.light { background-color: ' +navBarOptions.background_color_full+ ' !important; border-bottom: solid 0px !important; } }</style>');
708
+ $('head').append('<style id="dynNav">@media (max-width: ' +gridBreakpoint_md+ ') { nav.navbar.navigator.navbar-scrolled.light { background-color: ' +bg_scrolled+ ' !important; } }</style>');
709
+ $('head').append('<style id="dynNav">@media (min-width: ' +gridBreakpoint_md+ ') { nav.navbar.navigator.navbar-transparent.light { background-color: ' +navBarOptions.background_color_full+ ' !important; border-bottom: solid 0px !important; } }</style>');
710
+ $('head').append('<style id="dynNav">@media (min-width: ' +gridBreakpoint_md+ ') { nav.navbar.navigator.navbar-scrolled.light { background-color: ' +bg_scrolled+ ' !important; } }</style>');
711
+
712
+ $('head').append('<style id="dynNav">@media (max-width: ' +gridBreakpoint_sm+ ') { nav.navbar.navigator.navbar-transparent.light { background-color: ' +navBarOptions.background_color_full+ ' !important; border-bottom: solid 0px !important; } }</style>');
713
+ $('head').append('<style id="dynNav">@media (max-width: ' +gridBreakpoint_sm+ ') { nav.navbar.navigator.navbar-scrolled.light { background-color: ' +bg_scrolled+ ' !important; } }</style>');
714
+
715
+ {% comment %} navQuicklinks styles
716
+ -------------------------------------------------------------------------- {% endcomment %}
717
+ $('head').append('<style>.attr-nav> ul > li > a { color: ' +navQuicklinksOptions.icon_color+ ' !important; }</style>');
718
+ $('head').append('<style>.attr-nav> ul > li > a:hover { color: ' +navQuicklinksOptions.icon_color_hover+ ' !important; }</style>');
719
+
720
+ {% comment %} navMenu styles
721
+ -------------------------------------------------------------------------- {% endcomment %}
722
+ // Remove background for anchor
723
+ $('head').append('<style>.dropdown-menu > .active > a { background-color: transparent !important; }</style>');
724
+ // hover menu-item|menu-sub-item
725
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator .dropdown-item:focus, nav.navbar.navigator .dropdown-item:hover, nav.navbar.navigator .nav-sub-item:focus, nav.navbar.navigator .nav-sub-item:hover { background: ' +navMenuOptions.dropdown_background_color_hover+ ' !important; }}</style>');
726
+
727
+ // Limit 1st dropdown item width
728
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator ul.nav.navbar-right .dropdown-menu .dropdown-menu { left: -' +navMenuOptions.dropdown_item_min_width+ 'rem !important; } }</style>');
729
+
730
+ // Limit last (2nd) dropdown in height (nav.navbar.navigator li.dropdown ul.dropdown-menu ul.dropdown-menu)
731
+ // !important
732
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator li.dropdown ul.dropdown-menu ul.dropdown-menu { top: -' +navMenuOptions.dropdown_border_top+ 'px !important; max-height: ' +navMenuOptions.dropdown_menu_max_height+ 'em; } }</style>');
733
+
734
+ // Set dropdown item colors
735
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator ul.nav > li > a { color: ' +navMenuOptions.menu_item_color+ ' !important; } }</style>');
736
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator ul.nav > li > a:hover { color: ' +navMenuOptions.menu_item_color_hover+ ' !important; } }</style>');
737
+
738
+ // Dropdown menu styles
739
+ // jadams, 2017-11-30: removed left padding from dropdown mwenu (for new j1nav style based on Navigator|Slate)
740
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator li.dropdown ul.dropdown-menu { animation-duration: ' +navMenuOptions.dropdown_animate_duration+ 's !important; color: ' +bg_scrolled+ ' !important; min-width: ' +navMenuOptions.dropdown_item_min_width+ 'rem !important; border-top: solid ' +navMenuOptions.dropdown_border_top+ 'px !important; border-radius: ' +navMenuOptions.dropdown_border_radius+ 'px !important; left: 0; } }</style>');
741
+
742
+ {% if dropdown_style == 'raised' %}
743
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator li.dropdown ul.dropdown-menu { box-shadow: 0 16px 38px -12px rgba(0, 0, 0, 0.56), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2) !important; } }</style>');
744
+ {% endif %}
745
+
746
+ // jadams, 2017-11-22: configure dropdown_font_size|color
747
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator li.dropdown ul.dropdown-menu > li > a { color: ' +navMenuOptions.dropdown_item_color+ ' !important; font-size: ' +navMenuOptions.dropdown_font_size+ ' !important; font-weight: 400; } }</style>');
748
+ $('head').append('<style>@media (min-width: ' +gridBreakpoint_lg+ ') { nav.navbar.navigator ul.dropdown-menu.megamenu-content .content ul.menu-col li a { color: ' +navMenuOptions.dropdown_item_color+ ' !important; font-size: ' +navMenuOptions.megamenu_font_size+ ' !important; font-weight: 400; } }</style>');
749
+
750
+ {% comment %} navQuicklinks styles
751
+ -------------------------------------------------------------------------- {% endcomment %}
752
+
753
+ {% comment %} navTopSearch Styles
754
+ -------------------------------------------------------------------------- {% endcomment %}
755
+ // jadams, 2020-07-08: disabled because colors for icons set by the icon font settings
756
+ // $('head').append('<style>.top-search .input-group-addon { color: ' +navTopsearchOptions.input_color+ ' !important; }</style>');
757
+ $('head').append('<style>.top-search { background-color: ' +navTopsearchOptions.background_color+ ' !important; }</style>');
758
+ $('head').append('<style>.top-search input.form-control { color: ' +navTopsearchOptions.input_color+ ' !important; }</style>');
759
+
760
+ {% comment %} Timeline styles
761
+ -------------------------------------------------------------------------- {% endcomment %}
762
+ $('head').append('<style>.timeline > li > .timeline-panel:after {border-right-color: ' +bg_scrolled+ '; border-left-color: ' +bg_scrolled+ ';}</style>');
763
+ $('head').append('<style>.tmicon {background: ' +bg_scrolled+ ';}</style>');
764
+
765
+ {% comment %} Heading styles
766
+ -------------------------------------------------------------------------- {% endcomment %}
767
+ $('head').append('<style>.heading:after {background: ' +bg_scrolled+ ' !important;}</style>');
768
+
769
+ {% comment %} Tag Cloud styles
770
+ -------------------------------------------------------------------------- {% endcomment %}
771
+ $('head').append('<style>.tag-cloud ul li a {background-color: ' +bg_scrolled+ ' !important;}</style>');
772
+ // $('head').append('<style>.tag-cloud ul li a:hover {background-color: #212121 !important;}</style>');
773
+
774
+ {% comment %} Toccer styles
775
+ -------------------------------------------------------------------------- {% endcomment %}
776
+ $('head').append('<style>.is-active-link::before {background-color: ' +bg_scrolled+ ' !important;}</style>');
777
+
778
+ {% comment %} BS extended Modal styles
779
+ -------------------------------------------------------------------------- {% endcomment %}
780
+ $('head').append('<style>.modal-dialog.modal-notify.modal-primary .modal-header {background-color: ' +bg_scrolled+ ';}</style>');
781
+
782
+ {% comment %} BS nav|pills styles
783
+ -------------------------------------------------------------------------- {% endcomment %}
784
+ $('head').append('<style>.nav-pills .nav-link.active, .nav-pills .show > .nav-link {background-color: ' +bg_scrolled+ ' !important;}</style>');
785
+
786
+ return true;
787
+ }, // END setCSS
788
+
789
+ // -------------------------------------------------------------------------
790
+ // delayShowMenu
791
+ // delay all dropdown menu to open for "delay" time
792
+ // See: http://jsfiddle.net/AndreasPizsa/NzvKC/
793
+ // -------------------------------------------------------------------------
794
+ delayShowMenu: function ( menuOpenDelay ) {
795
+ var logger = log4javascript.getLogger('j1.adapter.navigator.delayShowMenu');
796
+ var theTimer = 0;
797
+ var theElement = null;
798
+ var theLastPosition = {x:0,y:0};
799
+
800
+ logText ='entered delayShowMenu';
801
+ logger.info(logText);
802
+
803
+ // $('#navigator_nav_menu')
804
+ // .find('li.dropdown.nav-item')
805
+
806
+ $('[data-toggle]').closest('li')
807
+ .on('mouseenter', function (inEvent) {
808
+ if (theElement) theElement.removeClass('open');
809
+ window.clearTimeout(theTimer);
810
+ theElement = $(this);
811
+
812
+ theTimer = window.setTimeout(function () {
813
+ theElement.addClass('open');
814
+ }, menuOpenDelay);
815
+ })
816
+ .on('mousemove', function (inEvent) {
817
+ if(Math.abs(theLastPosition.x - inEvent.ScreenX) > 4 ||
818
+ Math.abs(theLastPosition.y - inEvent.ScreenY) > 4) {
819
+ theLastPosition.x = inEvent.ScreenX;
820
+ theLastPosition.y = inEvent.ScreenY;
821
+ return;
822
+ }
823
+ if (theElement.hasClass('open')) return;
824
+ window.clearTimeout(theTimer);
825
+ theTimer = window.setTimeout(function () {
826
+ theElement.addClass('open');
827
+ }, menuOpenDelay);
828
+ })
829
+ .on('mouseleave', function (inEvent) {
830
+ window.clearTimeout(theTimer);
831
+ theElement = $(this);
832
+ theTimer = window.setTimeout(function () {
833
+ theElement.removeClass('open');
834
+ }, menuOpenDelay);
835
+ });
836
+
837
+ return true;
838
+ }, // END delayShowMenu
839
+
840
+ // -------------------------------------------------------------------------
841
+ // messageHandler
842
+ // Manage messages (paylods) send from other J1 modules
843
+ // -------------------------------------------------------------------------
844
+ messageHandler: function (sender, message) {
845
+ // var json_message = JSON.stringify(message, undefined, 2); // multiline
846
+ var json_message = JSON.stringify(message);
847
+
848
+ logText = 'received message from ' + sender + ': ' + json_message;
849
+ logger.debug(logText);
850
+
851
+ // -----------------------------------------------------------------------
852
+ // Process commands|actions
853
+ // -----------------------------------------------------------------------
854
+ if (message.type === 'command' && message.action === 'module_initialized') {
855
+ //
856
+ // Place handling of command|action here
857
+ //
858
+ logger.info(message.text);
859
+ }
860
+ if (message.type === 'command' && message.action === 'status') {
861
+ logger.info('messageHandler: received - ' + message.action);
862
+ }
863
+
864
+ //
865
+ // Place handling of other command|action here
866
+ //
867
+
868
+ return true;
869
+ }, // END messageHandler
870
+
871
+ // -------------------------------------------------------------------------
872
+ // setState()
873
+ // Sets the current (processing) state of the module
874
+ // -------------------------------------------------------------------------
875
+ setState: function (stat) {
876
+ _this.state = stat;
877
+ }, // END setState
878
+
879
+ // -------------------------------------------------------------------------
880
+ // getState()
881
+ // Returns the current (processing) state of the module
882
+ // -------------------------------------------------------------------------
883
+ getState: function () {
884
+ return _this.state;
885
+ } // END getState
886
+
887
+ }; // END return
888
+ })(j1, window);
889
+
890
+ {% endcapture %}
891
+ {% if production %}
892
+ {{ cache | minifyJS }}
893
+ {% else %}
894
+ {{ cache | strip_empty_lines }}
895
+ {% endif %}
896
+ {% assign cache = nil %}