j1-template 2021.1.6 → 2021.1.7

Sign up to get free protection for your applications and to get access to all the features.
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 %}