j1_template_mde 2018.4.15 → 2018.4.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +3 -3
  3. data/_includes/themes/j1/layouts/layout_shim_generator.html +4 -0
  4. data/_includes/themes/j1/modules/navigator/generator.html +4 -4
  5. data/_includes/themes/j1/modules/navigator/procedures/sidebar.proc +174 -127
  6. data/lib/j1/version.rb +1 -1
  7. data/lib/j1_app.rb +4 -1
  8. data/lib/j1_app/j1_auth_manager/auth_manager.previous.rb +939 -0
  9. data/lib/j1_app/j1_auth_manager/auth_manager.rb +386 -214
  10. data/lib/j1_app/j1_auth_manager/config.rb +103 -66
  11. data/lib/j1_app/j1_auth_manager/helpers.rb +22 -14
  12. data/lib/j1_app/j1_auth_manager/views/auth_manager_ui.erb +7 -2
  13. data/lib/j1_app/omniauth/strategies/_unused/doumart_patreon.rb +75 -0
  14. data/lib/j1_app/omniauth/strategies/_unused/my_patreon.rb +78 -0
  15. data/lib/j1_app/omniauth/strategies/_unused/patreon.v1.rb +50 -0
  16. data/lib/j1_app/omniauth/strategies/_unused/patreon.v2-v1.rb +82 -0
  17. data/lib/j1_app/omniauth/strategies/_unused/patreon.v2.rb +79 -0
  18. data/lib/starter_web/Gemfile +185 -168
  19. data/lib/starter_web/_config.yml +85 -69
  20. data/lib/starter_web/_data/j1_resources.yml +15 -0
  21. data/lib/starter_web/_data/modules/j1_navigator.yml +79 -12
  22. data/lib/starter_web/_rack/Guardfile +75 -0
  23. data/lib/starter_web/assets/data/authclient.html +10 -7
  24. data/lib/starter_web/assets/data/banner.html +127 -127
  25. data/lib/starter_web/assets/images/patreon/premium-content-460x200.png +0 -0
  26. data/lib/starter_web/assets/images/patreon/scalable/{Premium-content.psd → premium-content.psd} +0 -0
  27. data/lib/starter_web/assets/images/patreon/scalable/value-content.psd +0 -0
  28. data/lib/starter_web/assets/images/patreon/value-content-460x200.png +0 -0
  29. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.css +2 -2
  30. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  31. data/lib/starter_web/assets/themes/j1/core/css/uno.css +2 -2
  32. data/lib/starter_web/assets/themes/j1/core/css/uno.min.css +1 -1
  33. data/lib/starter_web/assets/themes/j1/core/js/adapter/navigator.js +66 -11
  34. data/lib/starter_web/assets/themes/j1/core/js/adapter/navigator.js.failed +797 -0
  35. data/lib/starter_web/assets/themes/j1/core/js/adapter/template.js +26 -7
  36. data/lib/starter_web/assets/themes/j1/extensions/livereload/LICENSE +20 -0
  37. data/lib/starter_web/assets/themes/j1/extensions/livereload/README.md +249 -0
  38. data/lib/starter_web/assets/themes/j1/extensions/livereload/js/livereload.js +1951 -0
  39. data/lib/starter_web/assets/themes/j1/extensions/livereload/js/livereload.min.js +1 -0
  40. data/lib/starter_web/assets/themes/j1/extensions/patreon/patreon.widget.button.html +21 -0
  41. data/lib/starter_web/package.json +14 -5
  42. data/lib/starter_web/pages/public/about/become_a_patron.adoc +1 -1
  43. data/lib/starter_web/pages/public/blog/navigator/archive.html +0 -1
  44. metadata +19 -4
  45. data/lib/starter_web/assets/images/patreon/premium-content-420x200.png +0 -0
@@ -0,0 +1,797 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/core/js/adapter/navigator.js
10
+ # Liquid template to create the Template Adapter for J1 Navigator
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ #
15
+ # Copyright (C) 2019 Juergen Adams
16
+ #
17
+ # J1 Template is licensed under the MIT License.
18
+ # For details, see https://jekyll.one
19
+ #
20
+ # -----------------------------------------------------------------------------
21
+ # Test data:
22
+ # {{ liquid_var | debug }}
23
+ #
24
+ # -----------------------------------------------------------------------------
25
+ {% endcomment %}
26
+
27
+ {% comment %} Variables
28
+ -------------------------------------------------------------------------------- {% endcomment %}
29
+ {% assign environment = site.environment %}
30
+ {% assign debug = navigator_config.debug %}
31
+ {% assign brand_image_height = site.brand.image_height %}
32
+
33
+ {% assign auth_config_provider = site.j1_auth.providers %}
34
+ {% assign navigator_config = site.data.modules.j1_navigator %}
35
+ {% assign nav_defaults = navigator_config.defaults %}
36
+ {% assign nav_bar_config = navigator_config.nav_bar %}
37
+ {% assign nav_menu_config = navigator_config.nav_menu %}
38
+ {% assign nav_quicklinks_config = navigator_config.nav_quicklinks %}
39
+ {% assign nav_topsearch_config = navigator_config.nav_topsearch %}
40
+ {% assign nav_sidebar_config = navigator_config.nav_sidebar %}
41
+ {% assign nav_authclient_config = navigator_config.nav_authclient %}
42
+
43
+ {% if nav_bar_config.dropdown_animate_duration != null %}
44
+ {% assign animate_duration = nav_bar_config.dropdown_animate_duration %}
45
+ {% else %}
46
+ {% assign animate_duration = 1 %}
47
+ {% endif %}
48
+
49
+ {% comment %}
50
+ Set|Overload Liquid vars hardwired to NOT break the (MD) style
51
+ ToDo: Remove configuration from j1_navigator.yml
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+ {% assign dropdown_border_height = "3" %}
54
+
55
+ /*
56
+ # -----------------------------------------------------------------------------
57
+ # ~/assets/themes/j1/core/js/adapter/navigator.js
58
+ # JS Adapter for J1 Navigator
59
+ #
60
+ # Product/Info:
61
+ # https://jekyll.one
62
+ #
63
+ # Copyright (C) 2019 Juergen Adams
64
+ #
65
+ # J1 Template is licensed under the MIT License.
66
+ # For details, see https://jekyll.one
67
+ #
68
+ # -----------------------------------------------------------------------------
69
+ # Adapter generated: {{site.time}}
70
+ # -----------------------------------------------------------------------------
71
+ */
72
+ 'use strict';
73
+
74
+ j1.Navigator = (function (j1, window) {
75
+ var environment = '{{environment}}'; // Set environment
76
+ var state = 'unknown';
77
+ // J1 data file objects
78
+ var nav_menu_id = "navigator_nav_menu"
79
+ var authclient_modals_id = "authclient_modals"
80
+ var colors_data_path = "/assets/data/colors.json";
81
+ var font_size_data_path = "/assets/data/font_sizes.json";
82
+ var nav_menu_data_path = "/assets/data/menu/index.html"
83
+ var authclient_modals_data_path = "/assets/data/authclient/index.html"
84
+ var web_session_data = j1.getWebSessionCookie();
85
+ var j1_colors = {};
86
+ var j1_font_sizes = {};
87
+ var logger;
88
+ var logText;
89
+
90
+ return {
91
+
92
+ // -------------------------------------------------------------------------
93
+ // Initialize Navigator
94
+ // -------------------------------------------------------------------------
95
+ init: function ( options ) {
96
+
97
+ // Module setting objects
98
+ var navDefaults = {};
99
+ var navBarConfig = {};
100
+ var navMenuConfig = {};
101
+ var navQuicklinksConfig = {};
102
+ var navTopsearchConfig = {};
103
+ var navSidebarConfig = {};
104
+ var navAuthClientConfig = {};
105
+ var navBarOptions = {};
106
+ var navMenuOptions = {};
107
+ var navQuicklinksOptions = {};
108
+ var navTopsearchOptions = {};
109
+ var navSidebarOptions = {};
110
+ var navAuthClientOptions = {};
111
+ var navAuthClientProvider = {};
112
+
113
+ {% comment %} Set global variables
114
+ -------------------------------------------------------------------------- {% endcomment %}
115
+
116
+ logger = log4javascript.getLogger("j1.Navigator"); // Setup logger
117
+
118
+ // Set|Log status
119
+ state = 'started';
120
+ logger.info('state: ' + state);
121
+
122
+ {% comment %} Load module config from yml data file
123
+ -------------------------------------------------------------------------- {% endcomment %}
124
+
125
+ // Load module DEFAULTS|CONFIG
126
+ navDefaults = $.extend({}, {{nav_defaults | replace: '=>', ':' }});
127
+ navBarConfig = $.extend({}, {{nav_bar_config | replace: '=>', ':' }});
128
+ navMenuConfig = $.extend({}, {{nav_menu_config | replace: '=>', ':' }});
129
+ navQuicklinksConfig = $.extend({}, {{nav_quicklinks_config | replace: '=>', ':' }});
130
+ navTopsearchConfig = $.extend({}, {{nav_topsearch_config | replace: '=>', ':' }});
131
+ navSidebarConfig = $.extend({}, {{nav_sidebar_config | replace: '=>', ':' }});
132
+ navAuthClientConfig = $.extend({}, {{nav_authclient_config | replace: '=>', ':' }});
133
+ navAuthClientProvider = $.extend({}, {{auth_config_provider | replace: '=>', ':' }});
134
+
135
+ // Merge|Overload module CONFIG by DEFAULTS
136
+ navBarOptions = j1.mergeData( navDefaults.nav_bar, navBarConfig );
137
+ navMenuOptions = j1.mergeData( navDefaults.nav_menu, navMenuConfig );
138
+ navQuicklinksOptions = j1.mergeData( navDefaults.nav_quicklinks, navQuicklinksConfig );
139
+ navTopsearchOptions = j1.mergeData( navDefaults.nav_topsearch, navTopsearchConfig );
140
+ navSidebarOptions = j1.mergeData( navDefaults.nav_sidebar, navSidebarConfig );
141
+ navAuthClientConfig = j1.mergeData( navDefaults.nav_authclient, navAuthClientConfig );
142
+
143
+ // Load (individual) frontmatter options (currently NOT used)
144
+ if ( options != null ) { var frontmatterOptions = $.extend({}, options) }
145
+
146
+ {% comment %} Helper functions for (AJAX) data load
147
+ -------------------------------------------------------------------------- {% endcomment %}
148
+ function load_color_data() {
149
+ // Returns the j1_colors object
150
+ return $.ajax({
151
+ url: colors_data_path,
152
+ success: function (data) {
153
+ if (typeof data == 'string') {
154
+ j1_colors = JSON.parse(data);
155
+ }
156
+ if (typeof data == 'object') {
157
+ j1_colors = data;
158
+ }
159
+ }
160
+ });
161
+ };
162
+ function load_font_sizes() {
163
+ // Returns the j1_font_sizes object
164
+ return $.ajax({
165
+ url: font_size_data_path,
166
+ success: function (data) {
167
+ if (typeof data == 'string') {
168
+ j1_font_sizes = JSON.parse(data);
169
+ }
170
+ if (typeof data == 'object') {
171
+ j1_font_sizes = data;
172
+ }
173
+ }
174
+ });
175
+ };
176
+
177
+ {% comment %} Deferred (AJAX) data load
178
+ -------------------------------------------------------------------------- {% endcomment %}
179
+ // Load color and font (json) data asychronously
180
+ // See: https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
181
+ $.when( load_color_data(), load_font_sizes() ).done (
182
+ function( load_color_data_response, load_font_sizes_response ) {
183
+ // Run initializer functions
184
+ j1.Navigator.loadMenuBar( navMenuOptions );
185
+ j1.Navigator.loadAuthClientModals( navAuthClientOptions, navAuthClientProvider );
186
+ j1.Navigator.setCss( navBarOptions, navMenuOptions, navQuicklinksOptions, navTopsearchOptions, navSidebarOptions );
187
+ // Set|Log status
188
+ state = 'initialized';
189
+ logger.info('state: ' + state);
190
+ logger.info("J1 Navigator initialized successfully");
191
+ });
192
+
193
+ /*
194
+ // jadams, 2017-10-18: Unclear if workaround is needed.
195
+ // For oversized menu bar, overflow set to hidden is set
196
+ // as a dynamic style - see setCss below
197
+ //
198
+ // jadams: WORKAROUND - Change width of the NavBar (to window size) if needed
199
+ */
200
+ /*
201
+ $(window).on("resize", function(){
202
+ var navID = "#navigator_nav";
203
+ var getWindow = $(window).width();
204
+ var getNavWidth = $( navID ).width();
205
+ var diff = getNavWidth - getWindow;
206
+
207
+ if ( diff ) {
208
+ // change width of the NavBar ( to window width)
209
+ $( navID ).width(getWindow);
210
+ var logText = "NavBar ID #j1_main_nav resized to: " +getNavWidth+ " (" +getWindow+ ")";
211
+ //logger.debug(logText);
212
+ logger.info(logText);
213
+ }
214
+ });
215
+ */
216
+
217
+ // Reset on resize
218
+ $(window).on("resize", function(){
219
+
220
+ j1nav.manageDropdownMenu();
221
+
222
+ $(".top-search").slideUp();
223
+ setTimeout(function(){
224
+ j1nav.navbarSticky();
225
+ }, 500);
226
+
227
+ // Toggle Bars
228
+ //$(".navbar-toggle").each(function(){
229
+ $('button.navigator.navbar-toggler').each(function(){
230
+ //$('button.navigator.navbar-toggler.animated').removeClass('rotateIn');
231
+ //$('button.navigator.navbar-toggler.animated').addClass('fadeIn')
232
+ $(".mdi", this).removeClass("mdi-close");
233
+ $(".mdi", this).addClass("mdi-menu");
234
+ $(this).removeClass("fixed");
235
+ });
236
+ $(".navbar-collapse").removeClass("in");
237
+ $(".navbar-collapse").removeClass("on");
238
+ $(".navbar-collapse").removeClass("bounceIn");
239
+ });
240
+ }, // end init
241
+
242
+ // -------------------------------------------------------------------------
243
+ // load the Menu bar
244
+ // -------------------------------------------------------------------------
245
+ loadMenuBar: function ( navMenuOptions ) {
246
+ //logger = log4javascript.getLogger("j1.Navigator.loadMenuBar");
247
+
248
+ // closure to pass additional data (e.g. div #id)
249
+ // to AJAX load callback (id)
250
+ // See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
251
+ var cb_load_closure = function(id, navMenuOptions) {
252
+ return function ( responseTxt, statusTxt, xhr ) {
253
+ if ( statusTxt == "success" ) {
254
+ j1nav.initialize( navMenuOptions );
255
+ var logText = "MenuBar on ID " +id+ " loaded successfully"
256
+ logger.info(logText);
257
+
258
+ // Initialize theme selectors for J1Theme Switcher
259
+ $('#ThemeList').bootstrapThemeSwitcher({localFeed: ''}); // Load from Bootswatch API
260
+ $('#ThemeSelect').bootstrapThemeSwitcher(); // Load from localFeed
261
+ var logText = "ThemeSwitcher Feeds on ID " +id+ " loaded successfully"
262
+ logger.info(logText);
263
+ //j1.Navigator.delayMenushow();
264
+ }
265
+ if ( statusTxt == "error" ) {
266
+ state = 'failed';
267
+ logger.error('state: ' + state);
268
+ var logText = "MenuBar on ID " +id+ " loading failed. Error: " + xhr.status + ": " + xhr.statusText;
269
+ logger.error(logText);
270
+ }
271
+ };
272
+ };
273
+
274
+ var id = "#" + nav_menu_id;
275
+ var selector = $(id);
276
+ if ( selector.length ) {
277
+ var menu_data_path = nav_menu_data_path + " " + id + " > *";
278
+
279
+ // Set the return URL (user by news pager) for the News Banner
280
+ selector.load( menu_data_path, cb_load_closure( id, navMenuOptions ) );
281
+ }
282
+
283
+ }, // end loadMenuBar
284
+
285
+ // -------------------------------------------------------------------------
286
+ // load the Modals used by J1AuthClient
287
+ // -------------------------------------------------------------------------
288
+ loadAuthClientModals: function ( authClientOptions, authClientProvider ) {
289
+ //logger = log4javascript.getLogger("j1.Navigator.loadAuthClientModals");
290
+
291
+ // closure to pass additional data (e.g. div #id)
292
+ // to AJAX load callback (id)
293
+ // See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
294
+ var cb_load_closure = function(id, authClientOptions) {
295
+ return function ( responseTxt, statusTxt, xhr ) {
296
+ if ( statusTxt == "success" ) {
297
+ //j1nav.initialize( authClientOptions );
298
+ var logText = "Modals on ID " +id+ " loaded successfully"
299
+
300
+ j1.Navigator.initAuthClient( authClientProvider );
301
+
302
+ logger.info(logText);
303
+ // Set|Log status
304
+ state = 'finished';
305
+ logger.info('state: ' + state);
306
+ }
307
+ if ( statusTxt == "error" ) {
308
+ state = 'failed';
309
+ logger.error('state: ' + state);
310
+ var logText = "Modals on ID " +id+ " loading failed. Error: " + xhr.status + ": " + xhr.statusText;
311
+ logger.error(logText);
312
+ }
313
+ };
314
+ };
315
+
316
+ var id = "#" + authclient_modals_id;
317
+ var selector = $(id);
318
+ if ( selector.length ) {
319
+ var modals_data_path = authclient_modals_data_path + " > *";
320
+
321
+ // Set the return URL (user by news pager) for the News Banner
322
+ selector.load( modals_data_path, cb_load_closure( id, authClientOptions ) );
323
+ }
324
+
325
+ }, // end loadAuthClientModals
326
+
327
+ // -------------------------------------------------------------------------
328
+ // Initialize JS portion for the dialogs (modals) used by J1AuthClient
329
+ // -------------------------------------------------------------------------
330
+ initAuthClient: function( authClientOptions ) {
331
+
332
+ var logger;
333
+ var logText;
334
+ var route;
335
+ var provider = 'unknown';
336
+ var allowed_users = 'unknown';
337
+ var web_session_data = j1.getWebSessionCookie();
338
+
339
+ var signIn = {
340
+ provider: authClientOptions["activated"][0],
341
+ user: authClientOptions[authClientOptions["activated"][0]]["users"],
342
+ do: false
343
+ }
344
+
345
+ var signOut = {
346
+ provider: authClientOptions["activated"][0],
347
+ providerSignOut: false,
348
+ do: false
349
+ }
350
+
351
+ // Set|Log status
352
+ logger = log4javascript.getLogger('j1.AuthClient');
353
+ state = 'initialize';
354
+ logger.info('state: ' + state);
355
+
356
+ $('ul.nav-pills > li').click(function (e) {
357
+ e.preventDefault();
358
+ signIn.provider = $(this).text().trim();
359
+ signIn.provider = signIn.provider.toLowerCase();
360
+ signIn.allowed_users = signIn.user[signIn.provider];
361
+ });
362
+
363
+ $("a.btn").click(function() {
364
+ if (this.id === "signInButton") {
365
+ signIn.do = true;
366
+ } else {
367
+ signIn.do = false;
368
+ }
369
+ if (this.id === "signOutButton") {
370
+ signOut.do = true;
371
+ } else {
372
+ signOut.do = false;
373
+ }
374
+ });
375
+
376
+ $('input:checkbox[name="providerSignOut"]').on('click', function (e) {
377
+ e.stopPropagation();
378
+ signOut.providerSignOut = $('input:checkbox[name="providerSignOut"]').is(":checked");
379
+ if( environment == "development" ) {
380
+ logText = "Provider signout set to: " +signOut.providerSignOut;
381
+ logger.info( logText );
382
+ }
383
+ });
384
+
385
+ $("#modalOmniSignIn").on('hidden.bs.modal', function() {
386
+ if (signIn.do == true) {
387
+ provider = signIn.provider.toLowerCase();
388
+ allowed_users = signIn.allowed_users;
389
+ logText = 'Provider detected: ' + provider;
390
+ logger.info(logText);
391
+ var route = '/authentication?request=signin&provider=' +provider+ '&allowed_users=' +allowed_users;
392
+ logText = 'Call middleware for route ' +route+ ' for signin';
393
+ logger.info(logText);
394
+ window.location.href = route;
395
+ } else {
396
+ provider = signIn.provider.toLowerCase();
397
+ logText = 'Provider detected: ' + provider;
398
+ logger.info(logText);
399
+ logText = 'Login for ' +provider+ " declined";
400
+ logger.info(logText);
401
+ }
402
+ }); // end modalOmniSignIn
403
+
404
+ $("#modalOmniSignOut").on('show.bs.modal', function() {
405
+ var modal = $(this);
406
+ logger.info('Place current user data');
407
+ var j1_user_state = j1.getUserStateCookie();
408
+ modal.find('.user-info').text('You are signed in to provider: ' + j1_user_state.provider);
409
+ }); // end SHOW modalOmniSignOut
410
+
411
+ $("#modalOmniSignOut").on('hidden.bs.modal', function() {
412
+ if (signOut.do == true) {
413
+ logger.info('Load active provider from cookie: UserState');
414
+ var j1_user_state = j1.getUserStateCookie();
415
+ provider = j1_user_state.provider;
416
+ // provider_url = providerUrls[provider];
417
+ logText = 'Provider detected: ' + provider;
418
+ logger.info(logText);
419
+ logText = 'SignIn for ' +provider+ ' accepted';
420
+ logger.info(logText);
421
+ // var route = '/authentication?request=signout&provider=' + provider + '&provider_signout=' + signOut.providerSignOut + '&provider_url=' + provider_url;
422
+ var route = '/authentication?request=signout&provider=' + provider + '&provider_signout=' + signOut.providerSignOut;
423
+ logText = 'Call middleware for route ' +route+ ' for signout';
424
+ logger.info(logText);
425
+ window.location.href = route;
426
+ } else {
427
+ provider = signOut.provider.toLowerCase();
428
+ logText = 'Provider detected: ' + provider;
429
+ logger.info(logText);
430
+ logText = 'SignOut for ' +provider+ " declined";
431
+ logger.info(logText);
432
+ }
433
+ }); // end modalSignOut
434
+
435
+ if ( web_session_data != null ) {
436
+ // Toggle/Set SignIn/SignOut icon|link in QuickLinks
437
+ // See: https://stackoverflow.com/questions/13524107/how-to-set-data-attributes-in-html-elements
438
+ if ( web_session_data.authenticated == 'true') {
439
+ var modal_target = $('#navLinkSignInOut').data('target');
440
+ var iconSignInOutClasses = $('#iconSignInOut').attr('class').split(/\s+/);
441
+ // Set SignOut
442
+ $('#navLinkSignInOut').attr("data-target","#modalOmniSignOut");
443
+ $('#iconSignInOut').removeClass( "mdi-login" ).addClass( "mdi-logout" );
444
+ // Show User Info with SideBar
445
+ $("#user-info").css({ display: "block" });
446
+ } else {
447
+ var modal_target = $('#navLinkSignInOut').data('target');
448
+ var iconSignInOutClasses = $('#iconSignInOut').attr('class').split(/\s+/);
449
+ // Set SignIn
450
+ $('#navLinkSignInOut').attr("data-target","#modalOmniSignIn");
451
+ $('#iconSignInOut').removeClass( "mdi-logout" ).addClass( "mdi-login" );
452
+ // Hide User Info from SideBar
453
+ $("#user-info").css({ display: "none" });
454
+ }
455
+ var session_json_data = JSON.stringify( web_session_data );
456
+ // jadams: confusion about last_page vs. requested_page
457
+ web_session_data.requested_page = window.location.pathname;
458
+ j1.setWebSessionCookie( web_session_data );
459
+ web_session_data = j1.getWebSessionCookie();
460
+ session_json_data = JSON.stringify( web_session_data );
461
+ logger.info( 'Session data: ' + session_json_data );
462
+ logger.info( 'Last page: ' + web_session_data.last_page );
463
+ } else {
464
+ // Hide SignIn button from QuickLinks
465
+ $("#quickLinksSignInOutButton").css({ display: "none" });
466
+ // Hide SignIn menu from MenuBar
467
+ $("#menuBarSignInOut").css({ display: "none" });
468
+ // Hide User Info from SideBar
469
+ $("#user-info").css({ display: "none" });
470
+ }
471
+ // Replace MACROs THEME Info
472
+ var j1_user_state = j1.getUserStateCookie();
473
+ var themeName = j1_user_state.theme_name;
474
+ $("#macro-theme-name").each(function() {
475
+ var $this = $(this);
476
+ var html = $this.html();
477
+ $(this).html(html.replace('??theme-name', themeName));
478
+ //console.log(html)
479
+ });
480
+ // Replace MACROs USER Info
481
+ var user;
482
+ var state;
483
+ var provider;
484
+ var provider_url;
485
+ var permissions;
486
+ var membership;
487
+ var membership_url;
488
+
489
+ if ( web_session_data.authenticated == 'true') {
490
+ // Call middleware info endpoint to return current user state
491
+ function load_user_details() {
492
+ return $.ajax({
493
+ url: '/status',
494
+ success: function (data) {
495
+ if (typeof data == 'string') {
496
+ JSON.parse(data)
497
+ }
498
+ if (typeof data == 'object') {
499
+ data
500
+ }
501
+ }
502
+ })
503
+ };
504
+ // Add|Place data when collected
505
+ $.when( load_user_details() ).done (
506
+ function( response ) {
507
+ var $this;
508
+ var html;
509
+
510
+ var json_data = JSON.stringify(response);
511
+ var user_state = JSON.parse(json_data);
512
+
513
+ user = user_state.user_name;
514
+ state = user_state.status;
515
+ provider = user_state.provider;
516
+ provider_url = user_state.provider_site_url;
517
+ permissions = user_state.provider_permissions;
518
+ membership = user_state.provider_membership;
519
+ membership_url = user_state.provider_member_url;
520
+
521
+ /*
522
+ See: https://stackoverflow.com/questions/5376431/wildcards-in-jquery-selectors
523
+ See: https://stackoverflow.com/questions/16400072/jquery-each-only-affects-last-element
524
+ See: https://dzone.com/articles/why-does-javascript-loop-only-use-last-value
525
+ */
526
+ /*
527
+ $("[id^=macro-]").each(function() {
528
+ $this = $(this);
529
+ html = $this.html();
530
+
531
+ // $("#macro-provider-name").html(html.replace('??provider-name', provider));
532
+
533
+ $(this).html(html.replace('??provider-name', provider));
534
+ $(this).html(html.replace('??user-name', user));
535
+ $(this).html(html.replace('??user-state', state));
536
+ $(this).html(html.replace('??provider-permission', permissions));
537
+ $(this).html(html.replace('??provider-membership', membership));
538
+ //$(this).attr("href", provider_url);
539
+ //$(this).attr("href", membership_url);
540
+
541
+ console.log(html)
542
+ });
543
+ */
544
+ $("#macro-provider-name").each(function() {
545
+ var $this = $(this);
546
+ var html = $this.html();
547
+ $(this).html(html.replace('??provider-name', provider));
548
+ $(this).attr("href", provider_url);
549
+ //console.log(html)
550
+ });
551
+
552
+ $("#macro-user-name").each(function() {
553
+ var $this = $(this);
554
+ var html = $this.html();
555
+ $(this).html(html.replace('??user-name', user));
556
+ //console.log(html)
557
+ });
558
+
559
+ $("#macro-user-state").each(function() {
560
+ var $this = $(this);
561
+ var html = $this.html();
562
+ $(this).html(html.replace('??user-state', state));
563
+ //console.log(html)
564
+ });
565
+
566
+ $("#macro-provider-permissions").each(function() {
567
+ var $this = $(this);
568
+ var html = $this.html();
569
+ $(this).html(html.replace('??provider-permissions', permissions));
570
+ //console.log(html)
571
+ });
572
+
573
+ $("#macro-provider-membership").each(function() {
574
+ var $this = $(this);
575
+ var html = $this.html();
576
+ $(this).html(html.replace('??provider-membership', membership));
577
+ $(this).attr("href", membership_url);
578
+ //console.log(html)
579
+ });
580
+ }); // end load_user_details
581
+ } // End if existsCookie j1.app.session
582
+ state = 'initialized';
583
+ logger.info('state: ' + state); // Set|Log status
584
+ }, // end initAuthClient
585
+
586
+ // -------------------------------------------------------------------------
587
+ // Initialize JS portion for the dialogs (modals) used by J1AuthClient
588
+ // -------------------------------------------------------------------------
589
+ toggleAuthClient : function() {
590
+
591
+ // code for toggle the AuthClient SignIn|SignOut
592
+
593
+ }, // end toggleAuthClient
594
+
595
+ // -------------------------------------------------------------------------
596
+ // Set dynamic CSS styles
597
+ // -------------------------------------------------------------------------
598
+ setCss: function ( navBarOptions, navMenuOptions, navQuicklinksOptions, navTopsearchOptions, navSidebarOptions ) {
599
+
600
+ // BS4 media breakpoints
601
+ var gridBreakpoint_lg = '992px';
602
+ var gridBreakpoint_md = '768px';
603
+ var gridBreakpoint_sm = '576px';
604
+
605
+ {% comment %} Resolve symbolic font sizes
606
+ -------------------------------------------------------------------------- {% endcomment %}
607
+
608
+ {% comment %} Set|Resolve navMenuOptions
609
+ -------------------------------------------------------------------------- {% endcomment %}
610
+ if ( typeof j1_font_sizes[navMenuOptions.dropdown_font_size] != "undefined" ) { navMenuOptions.dropdown_font_size = j1_font_sizes[navMenuOptions.dropdown_font_size] }
611
+ if ( typeof j1_font_sizes[navMenuOptions.megamenu_font_size] != "undefined" ) { navMenuOptions.megamenu_font_size = j1_font_sizes[navMenuOptions.megamenu_font_size] }
612
+
613
+
614
+ {% comment %} Resolve symbolic color names
615
+ -------------------------------------------------------------------------- {% endcomment %}
616
+
617
+ {% comment %} Set|Resolve navBarOptions
618
+ -------------------------------------------------------------------------- {% endcomment %}
619
+ if ( typeof j1_colors[navBarOptions.background_color_full] != "undefined" ) { navBarOptions.background_color_full = j1_colors[navBarOptions.background_color_full] }
620
+ if ( typeof j1_colors[navBarOptions.background_color_collapsed] != "undefined" ) { navBarOptions.background_color_collapsed = j1_colors[navBarOptions.background_color_collapsed] }
621
+ if ( typeof j1_colors[navBarOptions.background_color_scrolled] != "undefined" ) { navBarOptions.background_color_scrolled = j1_colors[navBarOptions.background_color_scrolled] }
622
+
623
+ {% comment %} Set|Resolve navMenuOptions
624
+ -------------------------------------------------------------------------- {% endcomment %}
625
+ if ( typeof j1_colors[navMenuOptions.menu_item_color] != "undefined" ) { navMenuOptions.menu_item_color = j1_colors[navMenuOptions.menu_item_color] }
626
+ if ( typeof j1_colors[navMenuOptions.menu_item_color_hover] != "undefined" ) { navMenuOptions.menu_item_color_hover = j1_colors[navMenuOptions.menu_item_color_hover] }
627
+ if ( typeof j1_colors[navMenuOptions.menu_item_dropdown_color] != "undefined" ) { navMenuOptions.menu_item_dropdown_color = j1_colors[navMenuOptions.menu_item_dropdown_color] }
628
+ if ( typeof j1_colors[navMenuOptions.dropdown_item_color] != "undefined" ) { navMenuOptions.dropdown_item_color = j1_colors[navMenuOptions.dropdown_item_color] }
629
+ if ( typeof j1_colors[navMenuOptions.dropdown_background_color_hover] != "undefined" ) { navMenuOptions.dropdown_background_color_hover = j1_colors[navMenuOptions.dropdown_background_color_hover] }
630
+ if ( typeof j1_colors[navMenuOptions.dropdown_background_color_active] != "undefined" ) { navMenuOptions.dropdown_background_color_active = j1_colors[navMenuOptions.dropdown_background_color_active] }
631
+ if ( typeof j1_colors[navMenuOptions.dropdown_border_color] != "undefined" ) { navMenuOptions.dropdown_border_color = j1_colors[navMenuOptions.dropdown_border_color] }
632
+
633
+ {% comment %} Set|Resolve navQuicklinksOptions
634
+ -------------------------------------------------------------------------- {% endcomment %}
635
+ if ( typeof j1_colors[navQuicklinksOptions.icon_color] != "undefined" ) { navQuicklinksOptions.icon_color = j1_colors[navQuicklinksOptions.icon_color] }
636
+ if ( typeof j1_colors[navQuicklinksOptions.icon_color_hover] != "undefined" ) { navQuicklinksOptions.icon_color_hover = j1_colors[navQuicklinksOptions.icon_color_hover] }
637
+ if ( typeof j1_colors[navQuicklinksOptions.background_color] != "undefined" ) { navQuicklinksOptions.background_color = j1_colors[navQuicklinksOptions.background_color] }
638
+
639
+ {% comment %} Set|Resolve navTopsearchOptions
640
+ -------------------------------------------------------------------------- {% endcomment %}
641
+ if ( typeof j1_colors[navTopsearchOptions.input_color] != "undefined" ) { navTopsearchOptions.input_color = j1_colors[navTopsearchOptions.input_color] }
642
+ if ( typeof j1_colors[navTopsearchOptions.background_color] != "undefined" ) { navTopsearchOptions.background_color = j1_colors[navTopsearchOptions.background_color] }
643
+
644
+ {% comment %} Set|Resolve navSidebarOptions
645
+ -------------------------------------------------------------------------- {% endcomment %}
646
+ if ( typeof j1_colors[navSidebarOptions.background_color] != "undefined" ) { navSidebarOptions.background_color = j1_colors[navSidebarOptions.background_color] }
647
+
648
+ {% comment %} Set dymanic styles
649
+ -------------------------------------------------------------------------- {% endcomment %}
650
+
651
+ {% comment %} navBar styles
652
+ -------------------------------------------------------------------------- {% endcomment %}
653
+ // Size of brand image
654
+ $('head').append("<style>.navbar-brand > img { height: {{brand_image_height}}px !important; }</style>");
655
+ // Navbar transparent-light (light)
656
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator.navbar-transparent.light { background-color: " +navBarOptions.background_color_full+ "; border-bottom: solid 0px !important; } }</style>");
657
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator.navbar-scrolled.light { background-color: " +navBarOptions.background_color_scrolled+ "; } }</style>");
658
+
659
+ /* Navbar media-queries, LARGE Window|Desktop (>= 1024) */
660
+ /* jadams: Oversized menu bar fixed by: overflow: hidden */
661
+ $('head').append("<style>@media (max-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator { background-color: " +navBarOptions.background_color_collapsed+ "; overflow: hidden; } }</style>");
662
+ //$('head').append("<style>@media (max-width: 1023px) { row { margin-left: 0 !important; margin-right: 0 !important; } }</style>");
663
+
664
+ {% comment %} navQuicklinks styles
665
+ -------------------------------------------------------------------------- {% endcomment %}
666
+ $('head').append("<style>.attr-nav> ul > li > a { color: " +navQuicklinksOptions.icon_color+ " !important; }</style>");
667
+ $('head').append("<style>.attr-nav> ul > li > a:hover { color: " +navQuicklinksOptions.icon_color_hover+ " !important; }</style>");
668
+
669
+ {% comment %} navMenu styles
670
+ -------------------------------------------------------------------------- {% endcomment %}
671
+
672
+ // TODO: Check if this style is needed for MENU item (hover)
673
+ //$('head').append("<style>nav.navbar.navbar-transparent ul.nav > li > a:hover,nav.navbar.no-background ul.nav > li > a:hover,nav.navbar ul.nav li.scroll.active > a,nav.navbar.navbar-dark ul.nav li.dropdown ul.dropdown-menu > li > a:hover,nav.navbar ul.nav li.dropdown.on > a,nav.navbar-dark ul.nav li.dropdown.on > a { color: " +navMenuOptions.menu_item_color_hover+ " !important; }</style>");
674
+ //
675
+ //$('head').append("<style>.dropdown-menu > .active > a { background-color: " +navMenuOptions.dropdown_background_color_active+ " !important; }</style>");
676
+ // Remove background for anchor
677
+ $('head').append("<style>.dropdown-menu > .active > a { background-color: transparent !important; }</style>");
678
+ // hover menu-item|menu-sub-item
679
+ $('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>");
680
+ // $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu > li a:hover { color: " +navMenuOptions.menu_item_color_hover+ " !important; background: " +navMenuOptions.dropdown_background_color_hover+ " !important; } }</style>");
681
+
682
+ // 1st dropdown, limit height
683
+ // TODO: overflow needs to be managed correctly (not static)
684
+ //$('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu { max-height: " +navMenuOptions.dropdown_menu_height+ "em; overflow: hidden } }</style>");
685
+
686
+ // Limit dropdown item width
687
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator ul.nav.navbar-right .dropdown-menu .dropdown-menu { left: -" +navMenuOptions.dropdown_item_width+ "em; } }</style>");
688
+
689
+ // Limit last (2nd) dropdown in height (nav.navbar.navigator li.dropdown ul.dropdown-menu ul.dropdown-menu)
690
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu ul.dropdown-menu { top: -" +navMenuOptions.dropdown_border_height+ "px !important; max-height: " +navMenuOptions.dropdown_menu_height+ "em; } }</style>");
691
+
692
+ // Set dropdown item colors
693
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator ul.nav > li > a { color: " +navMenuOptions.menu_item_color+ " !important; } }</style>");
694
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator ul.nav > li > a:hover { color: " +navMenuOptions.menu_item_color_hover+ " !important; } }</style>");
695
+
696
+ // Dropdown menu styles
697
+ //$('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: " +navMenuOptions.dropdown_border_color+ "; width: " +navMenuOptions.dropdown_item_width+ "px; border-top: solid " +navMenuOptions.dropdown_border_height+ "px; left: 1rem; top: calc( 90px + " +navMenuOptions.dropdown_border_height+ "px ); } }</style>");
698
+ //$('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: " +navMenuOptions.dropdown_border_color+ "; width: " +navMenuOptions.dropdown_item_width+ "em; border-top: solid " +navMenuOptions.dropdown_border_height+ "px; left: 1em; } }</style>");
699
+ // jadams, 2017-11-30: removed left padding from dropdown mwenu (for new j1nav style based on Navigator|Slate)
700
+ $('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: " +navMenuOptions.dropdown_border_color+ "; width: " +navMenuOptions.dropdown_item_width+ "em; border-top: solid " +navMenuOptions.dropdown_border_height+ "px; left: 0; } }</style>");
701
+
702
+ {% if dropdown_style == 'raised' %}
703
+ $('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); } }</style>");
704
+ {% endif %}
705
+
706
+ // jadams,2017-11-22: stop configure dropdown_font_size
707
+ //$('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown li.dropdown.nav-item.nav-sub-item { color: " +navMenuOptions.dropdown_item_color+ "; font-size: " +navMenuOptions.dropdown_font_size+ "; font-weight: 400; } }</style>");
708
+ // $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu > li > a { color: " +navMenuOptions.dropdown_item_color+ "; font-size: " +navMenuOptions.dropdown_font_size+ "; font-weight: 400; display: inline-flex; align-items: center;} }</style>");
709
+ $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu > li > a { color: " +navMenuOptions.dropdown_item_color+ "; font-size: " +navMenuOptions.dropdown_font_size+ "; font-weight: 400; } }</style>");
710
+ $('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+ "; font-size: " +navMenuOptions.megamenu_font_size+ "; font-weight: 400; } }</style>");
711
+
712
+ // dropdown-menu item padding
713
+ // jadams, 2017-11-22: moved item padding to nav|dropdown-item based on font-site (rel|em)
714
+ {% if dropdown_item_style == 'raised' %}
715
+ //$('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu > li > a { padding: " +navMenuOptions.dropdown_padding_y+ "px " +navMenuOptions.dropdown_padding_x+ "px; 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); } }</style>");
716
+ {% else %}
717
+ //$('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator li.dropdown ul.dropdown-menu > li > a { padding: " +navMenuOptions.dropdown_padding_y+ "px " +navMenuOptions.dropdown_padding_x+ "px; } }</style>");
718
+ // blödsinn $('head').append("<style>@media (min-width: " +gridBreakpoint_lg+ " ) { nav.navbar.navigator .dropdown .nav-item { padding-top: " +navMenuOptions.dropdown_item_padding+ "px; padding-bottom: " +navMenuOptions.dropdown_item_padding+ "px; } }</style>");
719
+ {% endif %}
720
+
721
+ {% comment %} navQuicklinks styles
722
+ -------------------------------------------------------------------------- {% endcomment %}
723
+
724
+ {% comment %} navTopSearch Styles
725
+ -------------------------------------------------------------------------- {% endcomment %}
726
+ $('head').append("<style>.top-search { background-color: " +navTopsearchOptions.background_color+ "; }</style>");
727
+ $('head').append("<style>.top-search .input-group-addon { color: " +navTopsearchOptions.input_color+ "; }</style>");
728
+ $('head').append("<style>.top-search .input.form-control { color: " +navTopsearchOptions.input_color+ "; }</style>");
729
+
730
+ {% comment %} navSidebar styles
731
+ -------------------------------------------------------------------------- {% endcomment %}
732
+ $('head').append("<style>.side { background-color: " +navSidebarOptions.background_color+ "; }</style>");
733
+
734
+
735
+ }, // end setCss
736
+
737
+ // -------------------------------------------------------------------------
738
+ // returns the current (processing) state of the module
739
+ // -------------------------------------------------------------------------
740
+ state: function () {
741
+ return state;
742
+ },
743
+
744
+ // -------------------------------------------------------------------------
745
+ // delay all dropdown menu to open for "delay" time
746
+ // http://jsfiddle.net/AndreasPizsa/NzvKC/
747
+ // -------------------------------------------------------------------------
748
+ delayMenushow: function () {
749
+ var theTimer = 0;
750
+ var theElement = null;
751
+
752
+ var logger = log4javascript.getLogger("j1.Navigator");
753
+ logText = "entered delayMenushow"
754
+ logger.info(logText);
755
+
756
+ $('#navigator_nav_menu')
757
+ .find('li.dropdown.nav-item')
758
+ .on('mouseenter', function (inEvent) {
759
+ theElement = $(this);
760
+ if (theElement) theElement.removeClass('open');
761
+ //if (theElement) theElement.css("display", "none");
762
+ //window.clearTimeout(theTimer);
763
+
764
+ //theTimer = window.setTimeout(function () {
765
+ setTimeout(function () {
766
+ theElement.addClass('open');
767
+ //theElement.css("display", "block");
768
+ //window.clearTimeout(theTimer);
769
+ }, {{menuOpenDelay}});
770
+ })
771
+ .on('mousemove', function (inEvent) {
772
+ if (theElement.hasClass('open')) return;
773
+ //window.clearTimeout(theTimer);
774
+ //theTimer = window.setTimeout(function () {
775
+ setTimeout(function () {
776
+ theElement.addClass('open');
777
+ //window.clearTimeout(theTimer);
778
+ }, {{menuOpenDelay}});
779
+ })
780
+ .on('mouseleave', function (inEvent) {
781
+ //window.clearTimeout(theTimer);
782
+ theElement = $(this);
783
+ //theTimer = window.setTimeout(function () {
784
+ setTimeout(function () {
785
+ theElement.removeClass('open');
786
+ //window.clearTimeout(theTimer);
787
+ }, {{menuOpenDelay}});
788
+ });
789
+ } // end delayMenushow
790
+ }; // end return
791
+
792
+ })(j1, window);
793
+
794
+ {% endcapture %}
795
+
796
+ {{ cache | strip_empty_lines }}
797
+ {% assign cache = nil %}