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 +4 -4
- data/assets/themes/j1/adapter/js/j1.js +16 -9
- data/assets/themes/j1/adapter/js/navigator.1.js +896 -0
- data/assets/themes/j1/adapter/js/navigator.2.js +928 -0
- data/assets/themes/j1/adapter/js/navigator.js +157 -200
- data/assets/themes/j1/adapter/js/themer.1.js +326 -0
- data/assets/themes/j1/adapter/js/themer.js +4 -28
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +286 -286
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/_plugins/lunr_index.rb +1 -1
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd99f44d9770cafc797059b8bb2dd7b2c60b54e460737d3fdcddaaac0702b52f
|
4
|
+
data.tar.gz: a1f080e81e48ec5ec902a7559ebf2555e33b648d3f385dcf99767b981a5d1636
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 %}
|