j1-template 2020.0.3 → 2020.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +21 -17
  3. data/_includes/themes/j1/layouts/content_generator_collection.html +14 -11
  4. data/_includes/themes/j1/layouts/content_generator_page.html +15 -16
  5. data/_includes/themes/j1/layouts/content_generator_post.html +17 -22
  6. data/_includes/themes/j1/modules/navigator/generator.html +31 -25
  7. data/assets/data/{sidebar.html → mmenu_sidebar.html} +24 -18
  8. data/assets/data/mmenu_toc.html +45 -0
  9. data/assets/data/quicklinks.html +12 -4
  10. data/assets/error_pages/HTTP204.html +3 -3
  11. data/assets/themes/j1/core/css/theme_extensions.css +2 -2
  12. data/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  13. data/assets/themes/j1/core/css/uno.css +2 -2
  14. data/assets/themes/j1/core/css/uno.min.css +1 -1
  15. data/assets/themes/j1/core/js/template.js +2 -2
  16. data/assets/themes/j1/core/js/template.js.map +1 -1
  17. data/assets/themes/j1/core/js/template.min.js +1 -1
  18. data/lib/j1/version.rb +1 -1
  19. data/lib/starter_web/Gemfile +1 -1
  20. data/lib/starter_web/_config.yml +12 -139
  21. data/lib/starter_web/_data/modules/defaults/navigator.yml +2 -24
  22. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  23. data/lib/starter_web/_data/modules/navigator.yml +158 -97
  24. data/lib/starter_web/_data/modules/toccer.yml +2 -1
  25. data/lib/starter_web/_data/resources.yml +8 -2
  26. data/lib/starter_web/assets/themes/j1/adapter/js/mmenu.js +207 -44
  27. data/lib/starter_web/assets/themes/j1/adapter/js/navigator.js +8 -32
  28. data/lib/starter_web/assets/themes/j1/adapter/js/toccer.js +40 -36
  29. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/mmenu-light.min.css +375 -1
  30. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/themes/uno.css +95 -0
  31. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/themes/uno.min.css +95 -0
  32. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.js +3 -1
  33. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.min.js +11 -3
  34. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.polyfills.min.js +118 -0
  35. data/lib/starter_web/collections/posts/public/{jekyll → featured}/_posts/2018-05-01-confusion-about-base-url.adoc +0 -0
  36. data/lib/starter_web/package.json +1 -1
  37. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +2 -2
  38. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +2 -2
  39. data/lib/starter_web/pages/public/legal/en/500_support.adoc +1 -1
  40. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  41. data/lib/starter_web/utilsrv/package.json +1 -1
  42. metadata +8 -4
@@ -169,4 +169,4 @@ defaults:
169
169
 
170
170
 
171
171
  # ------------------------------------------------------------------------------
172
- # END config
172
+ # END config
@@ -44,24 +44,179 @@ settings:
44
44
  delay_open_menu: 250
45
45
 
46
46
  # ----------------------------------------------------------------------------
47
- # NavMenu (Mobile)
47
+ # NavMenu (MMobile)
48
48
  #
49
49
  nav_mmenu:
50
50
  enabled: true
51
51
 
52
+ # --------------------------------------------------------------------------
53
+ # INSTANCE configuration (drawers|menus)
54
+ # --------------------------------------------------------------------------
55
+ menus:
56
+
57
+ # ------------------------------------------------------------------------
58
+ # NAVIGATION Main
59
+ #
60
+ - menu:
61
+ enabled: true
62
+
63
+ xhr_container_id: navigator_nav_mmenu
64
+ xhr_data_path: /assets/data/mmenu/index.html
65
+
66
+ drawer:
67
+ position: right
68
+
69
+ content:
70
+ type: navigation
71
+ title: Starter Web
72
+ theme: dark
73
+ toggler: "#navbar-toggler"
74
+
75
+ # ------------------------------------------------------------------------
76
+ # DRAWER Sidebar
77
+ #
78
+ - menu:
79
+ enabled: true
80
+
81
+ xhr_container_id: navigator_sidebar_mmenu
82
+ xhr_data_path: /assets/data/mmenu_sidebar/index.html
83
+
84
+ drawer:
85
+ position: left
86
+
87
+ content:
88
+ type: drawer
89
+ title: Site Info
90
+ theme: dark
91
+ toggler: "#navbar-brand"
92
+ toggler_animation: rotateIn
93
+ toggler_activated: always
94
+
95
+ boxes:
96
+
97
+ - box:
98
+ enabled: true
99
+ type: user_info
100
+ title: User
101
+
102
+ links:
103
+ - title: Provider
104
+ value: ??provider
105
+ href: ??provider-site-url
106
+ target: _blank
107
+ icon: domain
108
+ - title: User
109
+ icon: account
110
+ value: ??user-name
111
+ href: ??provider_member_url
112
+ target: none
113
+ - title: Permissions
114
+ icon: account-check
115
+ value: ??provider-permissions
116
+ href: ??provider_member_url
117
+ target: none
118
+ - title: Membership
119
+ icon: account-settings
120
+ value: ??provider-membership
121
+ href: ??provider_member_url
122
+ target: none
123
+ - title: Cookies
124
+ icon: cookie
125
+ value: ??cookie-state
126
+ href: ??provider_privacy_url
127
+ target: none
128
+
129
+ - box:
130
+ enabled: true
131
+ type: theme_info
132
+ title: Theme
133
+
134
+ links:
135
+ - title: Name
136
+ icon: face
137
+ value: ??theme-name
138
+ href: /pages/public/previewer/theme/
139
+ target: none
140
+ - title: Author
141
+ icon: grease-pencil
142
+ value: ??theme-author
143
+ href: ??theme-author-url
144
+ target: _blank
145
+ - title: Version
146
+ icon: numeric
147
+ value: ??theme-version
148
+ href: /pages/public/previewer/theme/
149
+ target: none
150
+
151
+ - box:
152
+ enabled: true
153
+ type: site_info
154
+ title: Site
155
+
156
+ links:
157
+ - title: About
158
+ icon: home-outline
159
+ href: /pages/public/about/site/
160
+ target: none
161
+
162
+ # - title: Become a Patron
163
+ # icon: patreon
164
+ # href: /pages/public/about/become_a_patron/
165
+ # target: _blank
166
+
167
+ - title: Impress
168
+ icon: alert-outline
169
+ href: /pages/public/legal/en/impress/
170
+ target: none
171
+ - title: Privacy
172
+ icon: heart
173
+ href: /pages/public/legal/en/privacy/
174
+ target: none
175
+ - title: License
176
+ icon: checkbox-multiple-marked-circle-outline
177
+ href: /pages/public/legal/en/license_agreement/
178
+ target: none
179
+
180
+ # - title: Contact
181
+ # icon: contact-mail
182
+ # href: mailto:contact@jekyll.one
183
+ # target: none
184
+
185
+ # ------------------------------------------------------------------------
186
+ # DRAWER Toc
187
+ #
188
+ - menu:
189
+ enabled: true
190
+
191
+ xhr_container_id: navigator_toc_mmenu
192
+ xhr_data_path: /assets/data/mmenu_toc/index.html
193
+
194
+ drawer:
195
+ position: right
196
+
197
+ content:
198
+ type: drawer
199
+ title: Table of Contents
200
+ theme: light
201
+ toggler: "#toc-toggler"
202
+ toggler_animation: rotateIn
203
+ toggler_activated: "js-toc-content"
204
+
52
205
  # ----------------------------------------------------------------------------
53
206
  # NavQuicklinks
54
207
  #
55
208
  nav_quicklinks:
56
209
  enabled: true
57
210
 
58
- home_url: none # none | URL
211
+ home_url: / # none | URL
59
212
  back_url: none # none | URL
60
213
 
214
+ toc_toggler: true
215
+
61
216
  r_text_sizer: false # true | false
62
217
 
63
- disqus_url: https://disqus.com/
64
218
  github_url: https://github.com/jekyll-one
219
+ disqus_url: none # https://disqus.com/
65
220
  patreon_url: none # https://www.patreon.com/jekyll_one/posts
66
221
 
67
222
  # ----------------------------------------------------------------------------
@@ -70,99 +225,5 @@ settings:
70
225
  nav_topsearch:
71
226
  enabled: true
72
227
 
73
- # ----------------------------------------------------------------------------
74
- # NavSidebar
75
- #
76
- nav_sidebar:
77
- enabled: true
78
-
79
- boxes:
80
-
81
- - box:
82
- enabled: true
83
- type: user_info
84
- title: User
85
-
86
- links:
87
- - title: Provider
88
- value: ??provider
89
- href: ??provider-site-url
90
- target: _blank
91
- icon: domain
92
- - title: User
93
- icon: account
94
- value: ??user-name
95
- href: ??provider_member_url
96
- target: none
97
-
98
- - title: Permissions
99
- icon: account-check
100
- value: ??provider-permissions
101
- href: ??provider_member_url
102
- target: none
103
- - title: Membership
104
- icon: account-settings
105
- value: ??provider-membership
106
- href: ??provider_member_url
107
- target: none
108
- - title: Cookies
109
- icon: cookie
110
- value: ??cookie-state
111
- href: ??provider_privacy_url
112
- target: none
113
-
114
- - box:
115
- enabled: true
116
- type: theme_info
117
- title: Theme
118
- links:
119
- - title: Name
120
- icon: face
121
- value: ??theme-name
122
- href: /pages/public/previewer/theme/
123
- target: none
124
- - title: Author
125
- icon: grease-pencil
126
- value: ??theme-author
127
- href: ??theme-author-url
128
- target: _blank
129
- - title: Version
130
- icon: numeric
131
- value: ??theme-version
132
- href: /pages/public/previewer/theme/
133
- target: none
134
-
135
- - box:
136
- enabled: true
137
- type: site_info
138
- title: Site
139
- links:
140
- - title: About
141
- icon: home-outline
142
- href: /pages/public/about/site/
143
- target: none
144
- # - title: Become a Patron
145
- # icon: patreon
146
- # href: /pages/public/about/become_a_patron/
147
- # target: _blank
148
- - title: Impress
149
- icon: alert-outline
150
- href: /pages/public/legal/en/impress/
151
- target: none
152
- - title: Privacy
153
- icon: heart
154
- href: /pages/public/legal/en/privacy/
155
- target: none
156
- - title: License
157
- icon: checkbox-multiple-marked-circle-outline
158
- href: /pages/public/legal/en/license_agreement/
159
- target: none
160
-
161
- # - title: Contact
162
- # icon: contact-mail
163
- # href: mailto:contact@jekyll.one
164
- # target: none
165
-
166
-
167
228
  # ------------------------------------------------------------------------------
168
229
  # END config
@@ -45,6 +45,7 @@ settings:
45
45
  # ----------------------------------------------------------------------------
46
46
  enabled: true
47
47
  log: false
48
+ delay: 400
48
49
 
49
50
  # ----------------------------------------------------------------------------
50
51
  # MODULE settings
@@ -169,4 +170,4 @@ settings:
169
170
 
170
171
 
171
172
  # ------------------------------------------------------------------------------
172
- # END config
173
+ # END config
@@ -712,9 +712,15 @@ resources:
712
712
  dependencies: false
713
713
  pass_init_data: false
714
714
  data:
715
- css: [ extensions/mmenu-light/css/mmenu-light ]
715
+ css: [
716
+ extensions/mmenu-light/css/mmenu-light,
717
+ extensions/mmenu-light/css/themes/uno
718
+ ]
716
719
  files: [ adapter/js/mmenu.js]
717
- js: [ extensions/mmenu-light/js/mmenu-light]
720
+ js: [
721
+ extensions/mmenu-light/js/mmenu-light,
722
+ extensions/mmenu-light/js/mmenu-light.polyfills
723
+ ]
718
724
  init_function: [ j1.adapter.mmenu.init ]
719
725
 
720
726
  # ==============================================================================
@@ -92,9 +92,13 @@ j1.adapter['mmenu'] = (function (j1, window) {
92
92
  // ---------------------------------------------------------------------------
93
93
  // globals
94
94
  // ---------------------------------------------------------------------------
95
- var environment = '{{environment}}';
96
- var dclFinished = false;
97
- var moduleOptions = {};
95
+ var environment = '{{environment}}';
96
+ var dclFinished = false;
97
+ var moduleOptions = {};
98
+ var cookie_names = j1.getCookieNames();
99
+ var user_state;
100
+ var user_session;
101
+ var user_data;
98
102
  var _this;
99
103
  var logger;
100
104
  var logText;
@@ -123,15 +127,19 @@ j1.adapter['mmenu'] = (function (j1, window) {
123
127
  module_name: 'j1.adapter.mmenu',
124
128
  generated: '{{site.time}}'
125
129
  }, options);
130
+
131
+ // -----------------------------------------------------------------------
132
+ // globals
133
+ // -----------------------------------------------------------------------
126
134
  _this = j1.adapter.mmenu;
127
135
  logger = log4javascript.getLogger('j1.adapter.mmenu');
128
136
 
129
137
  // -----------------------------------------------------------------------
130
138
  // options loader
131
139
  // -----------------------------------------------------------------------
132
- var navMenuOptions = {};
133
-
134
- navMenuOptions = $.extend({}, {{nav_mmenu_options | replace: '=>', ':' }});
140
+ var navMenuOptions = $.extend({}, {{nav_mmenu_options | replace: '=>', ':' }});
141
+ var xhr_data_path;
142
+ var menu_id;
135
143
 
136
144
  // save config settings into the mmenu object for global access
137
145
  //
@@ -139,80 +147,235 @@ j1.adapter['mmenu'] = (function (j1, window) {
139
147
 
140
148
  // Load (individual) frontmatter options (currently NOT used)
141
149
  //
142
- if (options != null) { var frontmatterOptions = $.extend({}, options) }
150
+ if (options != null) { var frontmatterOptions = $.extend({}, options) }
143
151
 
144
152
  _this.setState('started');
145
153
  logger.info('state: ' + _this.getState());
146
154
  logger.info('module is being initialized');
147
155
 
156
+ // jadams, 2020-06-24: Set max_count to 100 what cause to wait 2.5s
157
+ // for J1 Navigator to finish (init)
158
+ //
159
+ var interval_count = 0;
160
+ var max_count = 100;
161
+
162
+ var dependencies_met_navigator = setInterval(function() {
163
+ interval_count += 1;
164
+ if ( j1.adapter.navigator.getState() == 'finished' ) {
165
+ logger.info('dependencies of module navigator met for: mmenu');
166
+ logger.info('dependencies of module navigator met after: ' + interval_count * 25 + ' ms');
167
+ j1.adapter.mmenu.mmenuLoader(navMenuOptions);
168
+ clearInterval(dependencies_met_navigator);
169
+ }
170
+ if (interval_count > max_count) {
171
+ logger.warn('dependency check failed for module: navigator');
172
+ logger.warn('dependencies of module navigator met after: ' + interval_count * 25 + ' ms');
173
+ clearInterval(dependencies_met_navigator);
174
+ j1.adapter.mmenu.mmenuLoader(navMenuOptions);
175
+ }
176
+ }, 25);
177
+
178
+ }, // END init
179
+
180
+ // -------------------------------------------------------------------------
181
+ // MMenu Loader
182
+ // -------------------------------------------------------------------------
183
+ mmenuLoader: function (mmOptions) {
184
+ var menu_id;
185
+ var xhr_data_path;
186
+
187
+ _this.setState('loading');
188
+ logger.info('status: ' + _this.getState());
189
+ logger.info('load HTML data for navs and drawers');
190
+
191
+ {% assign id_list = "" %}
192
+
148
193
  // -----------------------------------------------------------------------
149
- // data loader
194
+ // Load HTML data (AJAX)
150
195
  // -----------------------------------------------------------------------
196
+ // jadams, 202-06-24: Promise (chain) if $.when seems NOT to work correctly.
197
+ // It semms a chain using .then will be a better solution to make it sure
198
+ // that the last Deferred set the state to 'data_loaded'.
199
+ // Found the final state randomly set to 'null' what prevent the module
200
+ // to run mmenuInitializer.
201
+ // Workaround: Set 'data_loaded' to be returned by all Deferred in
202
+ // the chain.
203
+ // See: https://stackoverflow.com/questions/5436327/jquery-deferreds-and-promises-then-vs-done
204
+ //
205
+ {% comment %} Modify chain
206
+ --------------------------------------------------------------------------
207
+ {% if forloop.last %}'data_loaded'{% else %}'null'{% endif %}){% if forloop.last %}{% else %},{% endif %}
208
+ to
209
+ {% if forloop.last %}'data_loaded'{% else %}'data_loaded'{% endif %}){% if forloop.last %}{% else %},{% endif %}
210
+ -------------------------------------------------------------------------- {% endcomment %}
151
211
  $.when (
152
- j1.xhrData ( // mmenu
153
- 'j1.adapter.mmenu', {
154
- xhr_container_id: navMenuOptions.xhr_container_id,
155
- xhr_data_path: navMenuOptions.xhr_data_path },
156
- 'mmenu_loaded'))
157
- .done (function (mmenu) {
158
- // -----------------------------------------------------------------------
159
- // core initializer
160
- // -----------------------------------------------------------------------
161
- var dependencies_met_mmenu_loaded = setInterval (function () {
162
- if (mmenu && _this.getState() === 'mmenu_loaded') {
163
- const menu_selector = document.querySelector( '#' + navMenuOptions.xhr_container_id );
164
- const navbar_toggler = document.querySelector( "#navbar-toggler" );
212
+ {% for item in nav_mmenu_options.menus %} {% if item.menu.enabled %}
213
+ {% assign menu_id = item.menu.xhr_container_id %}
214
+ {% assign xhr_data_path = item.menu.xhr_data_path %}
165
215
 
216
+ j1.xhrData (
217
+ 'j1.adapter.mmenu', {
218
+ xhr_container_id: "{{menu_id}}",
219
+ xhr_data_path: "{{xhr_data_path}}" },
220
+ {% if forloop.last %}'data_loaded'{% else %}'data_loaded'{% endif %}){% if forloop.last %}{% else %},{% endif %}
221
+
222
+ {% endif %}
223
+ {% capture id_list %}{{id_list}}{{menu_id}}{% if forloop.last %}{% else %},{% endif %} {% endcapture %}
224
+ {% endfor %} // ENDFOR menus
225
+ ).done (function ({{id_list}}) {
226
+ // ---------------------------------------------------------------------
227
+ // Initialize MMenu Navs and Drawers
228
+ // ---------------------------------------------------------------------
229
+ var dependencies_met_mmenu_initialized = setInterval (function () {
230
+ if (_this.getState() === 'data_loaded') {
231
+ logger.info('load HTML data (AJAX): finished');
166
232
  _this.setState('processing');
167
233
  logger.info('status: ' + _this.getState());
168
- logger.info('initialize mmenu core');
234
+ logger.info('initialize navs and drawers');
235
+ j1.adapter.mmenu.mmenuInitializer(mmOptions);
236
+ clearInterval(dependencies_met_mmenu_initialized);
237
+ }
238
+ }); // END dependencies_met_mmenu_loaded
239
+ }); // END done
240
+ }, // END dataLoader
169
241
 
170
- const menu = new MmenuLight (
242
+ // -------------------------------------------------------------------------
243
+ // MMenu Initializer
244
+ // -------------------------------------------------------------------------
245
+ mmenuInitializer: function (mmOptions) {
246
+ var menu_id;
247
+ var xhr_data_path;
248
+
249
+ {% for item in nav_mmenu_options.menus %} {% if item.menu.enabled %}
250
+
251
+ {% assign menu_id = item.menu.xhr_container_id %}
252
+ menu_id = "{{menu_id}}";
253
+ xhr_data_path = "{{item.menu.xhr_data_path}}";
254
+
255
+ // Create an mmenu instance if id exists: {{menu_id}}
256
+ if ($('#{{menu_id}}').length) {
257
+
258
+ logger.info('mmenu is being initialized on id: {{menu_id}}');
259
+
260
+ {% if item.menu.content.type == "navigation" %}
261
+ // Create an mmenu instance of type NAVIGATION
262
+ logger.info('found content type: NAVIGATION');
263
+ // ---------------------------------------------------------------------
264
+ // menu initializer (NAVIGATION)
265
+ // ---------------------------------------------------------------------
266
+ logger.info('initialize mmenu on id: #{{menu_id}}');
267
+ var dependencies_met_{{menu_id}}_loaded = setInterval (function () {
268
+ if ({{menu_id}}) {
269
+ const menu_selector = document.querySelector('#{{menu_id}}');
270
+ const mmenu_{{menu_id}} = new MmenuLight (
171
271
  menu_selector,
172
- '(max-width: ' + navMenuOptions.mmenu_plugin.max_width +'px)', {
272
+ '(max-width: ' + mmOptions.mmenu_plugin.max_width +'px)', {
173
273
  // plugin options
174
- node: navMenuOptions.mmenu_plugin.node,
175
- mediaQuery: navMenuOptions.mmenu_plugin.mediaQuery
274
+ node: mmOptions.mmenu_plugin.node,
275
+ mediaQuery: mmOptions.mmenu_plugin.mediaQuery
176
276
  });
177
277
 
178
- const navigator = menu.navigation ({
179
- // navigator options
180
- selected: navMenuOptions.mmenu_navigator.selected,
181
- slidingSubmenus: navMenuOptions.mmenu_navigator.slidingSubmenus,
182
- title: navMenuOptions.mmenu_navigator.title,
183
- theme: navMenuOptions.mmenu_navigator.theme
278
+ const drawer_{{menu_id}} = mmenu_{{menu_id}}.offcanvas ({
279
+ // drawer options
280
+ position: mmOptions.mmenu_drawer.position
184
281
  });
185
282
 
186
- const drawer = menu.offcanvas ({
187
- // drawer options
188
- position: navMenuOptions.mmenu_drawer.position
283
+ const navigator_{{menu_id}} = mmenu_{{menu_id}}.navigation ({
284
+ // navigator options
285
+ selected: mmOptions.mmenu_navigator.selected,
286
+ slidingSubmenus: mmOptions.mmenu_navigator.slidingSubmenus,
287
+ title: mmOptions.mmenu_navigator.title,
288
+ theme: mmOptions.mmenu_navigator.theme
189
289
  });
190
290
 
191
291
  // Toggle Bars (Hamburger) for the NavBar to open|close
192
292
  // the mmenu drawer
193
- $('button.navigator.navbar-toggler').each(function(e) {
293
+ $('{{item.menu.content.toggler}}').each(function(e) {
194
294
  var $this = $(this);
195
295
 
196
296
  $this.on('click', function(e){
197
- var toggler = this;
297
+ const toggler_{{menu_id}} = this;
198
298
 
199
299
  // TODO: Animated toggle button
200
300
  //
201
- $('button.navigator.navbar-toggler.animated').toggleClass('fadeIn');
202
- $('button.navigator.navbar-toggler.animated').toggleClass('rotateIn')
301
+ $('{{item.menu.content.toggler}}').toggleClass('fadeIn');
302
+ $('{{item.menu.content.toggler}}').toggleClass('rotateIn')
203
303
 
204
304
  $('.mdi', this).toggleClass('mdi-menu');
205
305
  $('.mdi', this).toggleClass('mdi-close');
206
306
  e.preventDefault();
207
- (toggler.t = !toggler.t) ? drawer.open() : drawer.close();
307
+ (toggler_{{menu_id}}.t = !toggler_{{menu_id}}.t)
308
+ ? drawer_{{menu_id}}.open()
309
+ : drawer_{{menu_id}}.close();
208
310
  });
209
311
  });
210
- clearInterval(dependencies_met_mmenu_loaded);
211
-
312
+ clearInterval(dependencies_met_{{menu_id}}_loaded);
313
+ logger.info('initializing mmenu finished on id: #{{menu_id}}');
212
314
  }; // END mmenu_loaded
213
315
  }); // END dependencies_met_mmenu_loaded
214
- }); // END done
215
- }, // END init
316
+ {% endif %} // ENDIF content_type: NAVIGATION
317
+
318
+ {% if item.menu.content.type == "drawer" %}
319
+ // Create an mmenu instance of type HTML
320
+ logger.info('found content type: DRAWER');
321
+ // -------------------------------------------------------------------
322
+ // menu initializer (DRAWER)
323
+ // -------------------------------------------------------------------
324
+ logger.info('initialize mmenu on id: #{{menu_id}}');
325
+ var dependencies_met_{{menu_id}}_loaded = setInterval (function () {
326
+ if ({{menu_id}}) {
327
+ const menu_selector = document.querySelector('#{{menu_id}}');
328
+
329
+ const mmenu_{{menu_id}} = new MmenuLight (
330
+ menu_selector,
331
+ '(max-width: ' + mmOptions.mmenu_plugin.max_width +'px)', {
332
+ // plugin options
333
+ node: mmOptions.mmenu_plugin.node,
334
+ mediaQuery: mmOptions.mmenu_plugin.mediaQuery
335
+ });
336
+
337
+ const drawer_{{menu_id}} = mmenu_{{menu_id}}.offcanvas ({
338
+ // drawer options
339
+ position: "{{item.menu.drawer.position}}"
340
+ });
341
+
342
+ // Toggler for the MMenu tocbar to open|close the toc drawer
343
+ $('{{item.menu.content.toggler}}').each(function(e) {
344
+ var $this = $(this);
345
+
346
+ $this.on('click', function(e) {
347
+ var toggler_{{menu_id}} = this;
348
+ var hasClass;
349
+
350
+ // check if the toggler should be activated
351
+ // e.g for TOC only if clas js-toc-content is found
352
+ //
353
+ if ('{{item.menu.content.toggler_activated}}' != 'always') {
354
+ hasClass = $('main').hasClass('{{item.menu.content.toggler_activated}}');
355
+ } else {
356
+ hasClass = true;
357
+ }
358
+ if (hasClass) {
359
+ // Toggle button animation
360
+ $('{{item.menu.content.toggler}}').toggleClass('{{item.menu.content.toggler_animation}}')
361
+
362
+ e.preventDefault();
363
+ (toggler_{{menu_id}}.t = !toggler_{{menu_id}}.t)
364
+ ? drawer_{{menu_id}}.open()
365
+ : drawer_{{menu_id}}.close();
366
+ } // END if hasclass
367
+ });
368
+ });
369
+ clearInterval(dependencies_met_{{menu_id}}_loaded);
370
+ }; // END if menu_loaded
371
+ }); // END dependencies_met_mmenu_loaded
372
+ logger.info('initializing mmenu finished on id: #{{menu_id}}');
373
+ {% endif %} // ENDIF content_type: DRAWER
374
+ } // END menus|drawers
375
+
376
+ {% endif %} // ENDIF menu enabled
377
+ {% endfor %} // ENDFOR menus
378
+ }, // END mmenuInitializer
216
379
 
217
380
  // -------------------------------------------------------------------------
218
381
  // messageHandler