j1-template 2020.0.1 → 2020.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +22 -18
  3. data/_includes/themes/j1/layouts/content_generator_collection.html +15 -12
  4. data/_includes/themes/j1/layouts/content_generator_page.html +16 -17
  5. data/_includes/themes/j1/layouts/content_generator_post.html +19 -24
  6. data/_includes/themes/j1/modules/navigator/generator.html +62 -40
  7. data/assets/data/menu.html +6 -5
  8. data/assets/data/mmenu.html +455 -0
  9. data/assets/data/{sidebar.html → mmenu_sidebar.html} +24 -18
  10. data/assets/data/mmenu_toc.html +45 -0
  11. data/assets/data/quicklinks.html +9 -4
  12. data/assets/data/ssm.html +227 -0
  13. data/assets/error_pages/HTTP204.html +3 -3
  14. data/assets/themes/j1/core/css/bootstrap.css +116 -93
  15. data/assets/themes/j1/core/css/bootstrap.min.css +4 -4
  16. data/assets/themes/j1/core/css/globals.css +1 -1
  17. data/assets/themes/j1/core/css/theme_extensions.css +186 -96
  18. data/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  19. data/assets/themes/j1/core/css/uno.css +186 -96
  20. data/assets/themes/j1/core/css/uno.min.css +1 -1
  21. data/assets/themes/j1/core/css/vendor.css +130 -104
  22. data/assets/themes/j1/core/css/vendor.min.css +4 -4
  23. data/assets/themes/j1/core/js/template.js +296 -24
  24. data/assets/themes/j1/core/js/template.js.map +1 -1
  25. data/assets/themes/j1/core/js/template.min.js +1 -1
  26. data/lib/j1/version.rb +1 -1
  27. data/lib/j1_app/j1_auth_manager/auth_manager.rb +21 -17
  28. data/lib/j1_app/j1_auth_manager/config.rb +13 -9
  29. data/lib/j1_app/j1_site_manager/static_site.rb +1 -1
  30. data/lib/starter_web/Gemfile +2 -2
  31. data/lib/starter_web/_config.yml +12 -139
  32. data/lib/starter_web/_data/modules/authentication.yml +1 -1
  33. data/lib/starter_web/_data/modules/defaults/navigator.yml +25 -24
  34. data/lib/starter_web/_data/modules/defaults/ssm.yml +50 -0
  35. data/lib/starter_web/_data/modules/defaults/toccer.yml +14 -15
  36. data/lib/starter_web/_data/modules/navigator.yml +164 -97
  37. data/lib/starter_web/_data/modules/ssm.yml +133 -0
  38. data/lib/starter_web/_data/modules/toccer.yml +20 -62
  39. data/lib/starter_web/_data/resources.yml +74 -51
  40. data/lib/starter_web/_data/template_settings.yml +13 -13
  41. data/lib/starter_web/_plugins/uglify.rb +41 -0
  42. data/lib/starter_web/apps/public/{cc → cc/cc.yml} +0 -0
  43. data/lib/starter_web/apps/public/cc/index.adoc +107 -0
  44. data/lib/starter_web/assets/images/modules/icons/j1/{j1..ico → j1.ico} +0 -0
  45. data/lib/starter_web/assets/themes/j1/adapter/js/algolia.js +321 -0
  46. data/lib/starter_web/assets/themes/j1/adapter/js/attic.js +4 -4
  47. data/lib/starter_web/assets/themes/j1/adapter/js/carousel.js +3 -3
  48. data/lib/starter_web/assets/themes/j1/adapter/js/framer.js +3 -3
  49. data/lib/starter_web/assets/themes/j1/adapter/js/j1.js +19 -60
  50. data/lib/starter_web/assets/themes/j1/adapter/js/mmenu.js +452 -0
  51. data/lib/starter_web/assets/themes/j1/adapter/js/navigator.js +50 -50
  52. data/lib/starter_web/assets/themes/j1/adapter/js/ssm.js +498 -0
  53. data/lib/starter_web/assets/themes/j1/adapter/js/themer.js +1 -1
  54. data/lib/starter_web/assets/themes/j1/adapter/js/toccer.js +40 -43
  55. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/mmenu-light.css +384 -0
  56. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/mmenu-light.min.css +384 -0
  57. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/themes/uno.css +153 -0
  58. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/css/themes/uno.min.css +153 -0
  59. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.js +11 -0
  60. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.min.js +11 -0
  61. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.polyfills.js +118 -0
  62. data/lib/starter_web/assets/themes/j1/extensions/mmenu-light/js/mmenu-light.polyfills.min.js +118 -0
  63. data/lib/starter_web/collections/posts/public/{jekyll → featured}/_posts/2018-05-01-confusion-about-base-url.adoc +0 -0
  64. data/lib/starter_web/package.json +1 -1
  65. data/lib/starter_web/pages/public/learn/floating_sidebar.adoc +199 -0
  66. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +2 -2
  67. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +2 -2
  68. data/lib/starter_web/pages/public/learn/whats_up.adoc +12 -11
  69. data/lib/starter_web/pages/public/legal/en/500_support.adoc +1 -1
  70. data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/200_rotate.asciidoc +1 -1
  71. data/lib/starter_web/pages/public/previewer/mdi_icons_preview.adoc +2 -3
  72. data/lib/starter_web/pages/public/previewer/twitter_emoji_preview.adoc +3 -3
  73. data/lib/starter_web/pages/public/site_search.adoc +196 -0
  74. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  75. data/lib/starter_web/utilsrv/package.json +1 -1
  76. metadata +26 -13
  77. data/assets/themes/j1/core/css/globals.scss +0 -28
  78. data/lib/starter_web/_data/modules/back2top.yml +0 -40
  79. data/lib/starter_web/_data/modules/defaults/back2top.yml +0 -147
  80. data/lib/starter_web/_data/modules/defaults/smooth_scroll.yml +0 -169
  81. data/lib/starter_web/_data/modules/smooth_scroll.yml +0 -169
  82. data/lib/starter_web/assets/themes/j1/adapter/js/back2top.js +0 -227
  83. data/lib/starter_web/assets/themes/j1/adapter/js/scroller.js +0 -177
@@ -0,0 +1,498 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/ssm.js
10
+ # Liquid template to adapt SSM Core functions
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ #
15
+ # Copyright (C) 2020 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
+ {% endcomment %}
24
+
25
+ {% comment %} Liquid var initialization
26
+ -------------------------------------------------------------------------------- {% endcomment %}
27
+
28
+ {% comment %} Set config files
29
+ -------------------------------------------------------------------------------- {% endcomment %}
30
+ {% assign site_config = site %}
31
+ {% assign template_config = site.data.template_settings %}
32
+ {% assign modules = site.data.modules %}
33
+
34
+ {% comment %} Set config data
35
+ -------------------------------------------------------------------------------- {% endcomment %}
36
+ {% assign ssm_settings = modules.ssm.settings %}
37
+ {% assign ssm_defaults = modules.defaults.ssm.defaults %}
38
+
39
+ {% comment %} Set config options
40
+ -------------------------------------------------------------------------------- {% endcomment %}
41
+ {% assign ssm_options = ssm_defaults | merge: ssm_settings %}
42
+
43
+ /*
44
+ # -----------------------------------------------------------------------------
45
+ # ~/assets/themes/j1/adapter/js/ssm.js
46
+ # JS Adapter for J1 SSM (Sticky Side Menu)
47
+ #
48
+ # Product/Info:
49
+ # {{site.data.template_settings.theme_author_url}}
50
+ #
51
+ # Copyright (C) 2020 Juergen Adams
52
+ #
53
+ # J1 Template is licensed under the MIT License.
54
+ # For details, see {{site.data.template_settings.theme_author_url}}
55
+ # -----------------------------------------------------------------------------
56
+ # Adapter generated: {{site.time}}
57
+ # -----------------------------------------------------------------------------
58
+ */
59
+ 'use strict';
60
+
61
+ j1.adapter['ssm'] = (function (j1, window) {
62
+
63
+ // ---------------------------------------------------------------------------
64
+ // globals
65
+ // ---------------------------------------------------------------------------
66
+ var environment = '{{environment}}';
67
+ var dclFinished = false;
68
+ var moduleOptions = {};
69
+ var cookie_names = j1.getCookieNames();
70
+ var user_state;
71
+ var user_session;
72
+ var user_data;
73
+ var sect1Nodes;
74
+ var sect12Nodes;
75
+ var _this;
76
+ var logger;
77
+ var logText;
78
+
79
+ // ---------------------------------------------------------------------------
80
+ // helper functions
81
+ // ---------------------------------------------------------------------------
82
+
83
+
84
+ // ---------------------------------------------------------------------------
85
+ // main object
86
+ // ---------------------------------------------------------------------------
87
+ return {
88
+
89
+ // -------------------------------------------------------------------------
90
+ // module initializer
91
+ // -------------------------------------------------------------------------
92
+ init: function (options) {
93
+
94
+ // create seetings object from frontmatterOptions
95
+ var frontmatterOptions = options != null ? $.extend({}, options) : {};
96
+
97
+ // initialize state flag
98
+ j1.adapter.ssm.state = 'pending';
99
+
100
+ // -----------------------------------------------------------------------
101
+ // defaults
102
+ // -----------------------------------------------------------------------
103
+ var settings = $.extend({
104
+ module_name: 'j1.adapter.ssm',
105
+ generated: '{{site.time}}'
106
+ }, options);
107
+
108
+ // -----------------------------------------------------------------------
109
+ // globals
110
+ // -----------------------------------------------------------------------
111
+ _this = j1.adapter.ssm;
112
+ logger = log4javascript.getLogger('j1.adapter.ssm');
113
+ sect12Nodes = $("[class$='sect1'],[class$='sect2'");
114
+ sect1Nodes = $("[class$='sect1']");
115
+
116
+ // -----------------------------------------------------------------------
117
+ // options loader
118
+ // -----------------------------------------------------------------------
119
+ var ssmMenuOptions = $.extend({}, {{nav_ssm_options | replace: '=>', ':' }});
120
+ var ssmOptions = $.extend({}, {{ssm_options | replace: 'nil', 'null' | replace: '=>', ':' }});
121
+ var xhr_data_path;
122
+ var menu_id;
123
+
124
+ // Load (individual) frontmatter options (currently NOT used)
125
+ //
126
+ if (options != null) { var frontmatterOptions = $.extend({}, options) }
127
+
128
+ if (typeof frontmatterOptions !== 'undefined') {
129
+ moduleOptions = j1.mergeData(ssmOptions, frontmatterOptions);
130
+ }
131
+
132
+ // save config settings into the mmenu object for global access
133
+ //
134
+ j1.adapter.ssm['moduleOptions'] = moduleOptions;
135
+
136
+ _this.setState('started');
137
+ logger.info('state: ' + _this.getState());
138
+ logger.info('module is being initialized');
139
+
140
+ // jadams, 2020-06-24: Set max_count to 100 what cause to wait 2.5s
141
+ // for J1 Navigator to finish (init)
142
+ //
143
+ var interval_count = 0;
144
+ var max_count = 100;
145
+
146
+ var dependencies_met_navigator = setInterval(function() {
147
+ interval_count += 1;
148
+ if ( j1.adapter.navigator.getState() == 'finished' ) {
149
+ logger.info('dependencies of module navigator met for: mmenu');
150
+ logger.info('dependencies of module navigator met after: ' + interval_count * 25 + ' ms');
151
+ j1.core.ssm.init (moduleOptions);
152
+ _this.ssmLoader(moduleOptions);
153
+ clearInterval(dependencies_met_navigator);
154
+ }
155
+ if (interval_count > max_count) {
156
+ logger.warn('dependency check failed for module: navigator');
157
+ logger.warn('dependencies of module navigator met after: ' + interval_count * 25 + ' ms');
158
+ j1.core.ssm.init (moduleOptions);
159
+ _this.ssmLoader(moduleOptions);
160
+ clearInterval(dependencies_met_navigator);
161
+ }
162
+ }, 25);
163
+
164
+ }, // END init
165
+
166
+ // -------------------------------------------------------------------------
167
+ // SSM Loader
168
+ // -------------------------------------------------------------------------
169
+ ssmLoader: function (ssmOptions) {
170
+ var menu_id;
171
+ var xhr_data_path;
172
+
173
+ _this.setState('loading');
174
+ logger.info('status: ' + _this.getState());
175
+ logger.info('load HTML data for ssm');
176
+
177
+ {% assign id_list = "" %}
178
+
179
+ $.when (
180
+ {% assign menu_id = ssm_options.xhr_container_id %}
181
+ {% assign xhr_data_path = ssm_options.xhr_data_path %}
182
+ j1.xhrData (
183
+ 'j1.adapter.ssm', {
184
+ xhr_container_id: "{{menu_id}}",
185
+ xhr_data_path: "{{xhr_data_path}}" },
186
+ 'data_loaded')
187
+ ).done (function (ssm) {
188
+ // ---------------------------------------------------------------------
189
+ // Initialize MMenu Navs and Drawers
190
+ // ---------------------------------------------------------------------
191
+ var dependencies_met_mmenu_initialized = setInterval (function () {
192
+ if (ssm) {
193
+ if (j1.getState() === 'finished') {
194
+ // if ( j1.adapter.navigator.getState() == 'finished' ) {
195
+ logger.info('load HTML data (AJAX): finished');
196
+ _this.setState('processing');
197
+ logger.info('status: ' + _this.getState());
198
+ logger.info('initialize ssm menu');
199
+ if ( ssmOptions.mode === 'icon') {
200
+ logger.info('icon mode detected');
201
+ }
202
+ _this.scrollSpy(ssmOptions);
203
+ _this.buttonInitializer(ssmOptions);
204
+ clearInterval(dependencies_met_mmenu_initialized);
205
+ }
206
+ } else {
207
+ logger.error('initialize ssm failed, HTML data NOT loaded');
208
+ }
209
+ }, 25); // END dependencies_met_mmenu_loaded
210
+ }); // END done
211
+ }, // END dataLoader
212
+
213
+ // -------------------------------------------------------------------------
214
+ // Button Initializer
215
+ // -------------------------------------------------------------------------
216
+ buttonInitializer: function (ssmOptions) {
217
+ var eventHandler;
218
+
219
+ {% for item in ssm_options.items %} {% if item.enabled %}
220
+
221
+ {% comment %} Identify the menu (item) type
222
+ -------------------------------------------------------------------------- {% endcomment %}
223
+ {% if item.sublevel %}
224
+ {% assign menu_type = 'sublevel_menu' %}
225
+ {% else %}
226
+ {% assign menu_type = 'top_level_item' %}
227
+ {% endif %}
228
+
229
+ {% if menu_type == 'top_level_item' %}
230
+ {% assign button_id = item.id %}
231
+
232
+ // Create an eventhandler instance if id exists: {{button_id}}
233
+ if ($('#{{button_id}}').length) {
234
+ eventHandler = "{{item.event_handler}}"
235
+
236
+ // check if eventhandler configured is a SINGLE word
237
+ if (eventHandler.split(" ").length == 1) {
238
+ logger.info('register pre-configured eventhandler {{item.event_handler}} on id: {{button_id}}');
239
+ $('#{{button_id}}').each(function(e) {
240
+ var $this = $(this);
241
+ $this.on('click', function(e) {
242
+ j1.adapter.ssm.{{item.event_handler}}(sect1Nodes);
243
+ });
244
+ });
245
+ } else {
246
+ logger.info('register custom eventhandler on id: {{button_id}}');
247
+ }
248
+
249
+ } // END items (buttons)
250
+ {% endif %} // menu_type 'top_level_item'
251
+ {% endif %} // ENDIF button_id enabled
252
+ {% endfor %} // ENDFOR items
253
+ }, // END buttonInitializer
254
+
255
+ // -------------------------------------------------------------------------
256
+ // Eventhandler
257
+
258
+ // -------------------------------------------------------------------------
259
+ // open mobile menu
260
+ // -------------------------------------------------------------------------
261
+ open_mmenu: function (id) {
262
+ logger.info('eventhandler fired on id: ' + id );
263
+ }, // END open_mmenu
264
+
265
+ // -------------------------------------------------------------------------
266
+ // scroll to previous section
267
+ // -------------------------------------------------------------------------
268
+ scroll_previous_section: function (nodes) {
269
+ var previous_header_id;
270
+ var currentNode;
271
+ var prev_node;
272
+
273
+ var index = 0;
274
+ var maxNode = $(nodes).length - 1;
275
+ var $toc = $("#sidebar");
276
+ var current_header_id = $toc.find(".is-active-link").attr('href');
277
+
278
+ // logger.info('eventhandler fired on id: ' + id );
279
+
280
+ nodes.each(function() {
281
+ currentNode = $(this).find(current_header_id);
282
+ if (currentNode.length) {
283
+ if (index > maxNode) {
284
+ return false
285
+ } else {
286
+ prev_node = (index > 0) ? nodes[index-1] : nodes[index];
287
+ previous_header_id = $(prev_node).find(":header").first()[0].id;
288
+ $('a[href*="' + current_header_id + '"]').removeClass('is-active-link');
289
+ $('a[href*="' + previous_header_id + '"]').addClass('is-active-link');
290
+ var dest = $('body').scrollTop() + $('#' + previous_header_id).offset().top - 100;
291
+ $('html, body').animate({
292
+ scrollTop: dest
293
+ }, 500);
294
+ return false;
295
+ }
296
+ }
297
+ (index < maxNode) ? index++ : index;
298
+ // (index = 0) ? index : index++;
299
+ });
300
+ }, // END scroll_previous_section
301
+
302
+ // -------------------------------------------------------------------------
303
+ // scroll to next section
304
+ // -------------------------------------------------------------------------
305
+ scroll_next_section: function (nodes) {
306
+ var next_header_id;
307
+ var currentNode;
308
+ var nextNode;
309
+
310
+ var index = 0;
311
+ var maxNode = $(nodes).length -1;
312
+ var $toc = $("#sidebar");
313
+ var current_header_id = $toc.find(".is-active-link").attr('href');
314
+
315
+ // logger.info('eventhandler fired on id: ' + id );
316
+
317
+ nodes.each(function() {
318
+ // currentNode = $(this).find(current_header_id);
319
+ currentNode = $(this).find(current_header_id);
320
+ if (currentNode.length) {
321
+ if (index == maxNode) {
322
+ return false
323
+ } else {
324
+ nextNode = nodes[index+1];
325
+ next_header_id = $(nextNode).closest().find(":header").first();
326
+ next_header_id = $(nextNode).find(":header").first()[0].id;
327
+
328
+ $('a[href*="' + current_header_id + '"]').removeClass('is-active-link');
329
+ $('a[href*="' + next_header_id + '"]').addClass('is-active-link');
330
+
331
+ var dest = $('body').scrollTop() + $('#' + next_header_id).offset().top - 100;
332
+ $('html, body').animate({
333
+ scrollTop: dest
334
+ }, 500);
335
+ return false;
336
+ }
337
+ }
338
+ (index < maxNode) ? index++ : index;
339
+ });
340
+ }, // END scroll_next_section
341
+
342
+ // -------------------------------------------------------------------------
343
+ // scroll to top
344
+ // -------------------------------------------------------------------------
345
+ scroll_to_top: function () {
346
+ var dest = 0;
347
+
348
+ // logger.info('eventhandler fired on id: ' + id );
349
+
350
+ $('html, body').animate({
351
+ scrollTop: dest
352
+ }, 500);
353
+ }, // END scroll_top
354
+
355
+ // -------------------------------------------------------------------------
356
+ // scroll to bottom
357
+ // -------------------------------------------------------------------------
358
+ scroll_to_bottom: function () {
359
+ var $page = $(document);
360
+ var $footer = $('#j1_footer');
361
+ var f = $footer.length ? $footer.outerHeight() : 0;
362
+ var pageHeight = $page.height() - f - 400;
363
+ var pageHeightOuter = $page.outerHeight()
364
+
365
+ // logger.info('eventhandler fired on id: ' + id );
366
+
367
+ $('html, body').animate({
368
+ scrollTop: pageHeight
369
+ }, 500);
370
+ }, // END scroll_bottom
371
+
372
+ // -------------------------------------------------------------------------
373
+ // scroll to comments (Disqus)
374
+ // -------------------------------------------------------------------------
375
+ scroll_to_comments: function () {
376
+ // logger.info('eventhandler fired on id: ' + id );
377
+ }, // END scroll_comments
378
+
379
+ // -------------------------------------------------------------------------
380
+ // create generic alert
381
+ // -------------------------------------------------------------------------
382
+ alert_me: function (id) {
383
+ // logger.info('eventhandler fired on id: ' + id );
384
+ alert ("Hello world!");
385
+ }, // END alert_me
386
+ // -------------------------------------------------------------------------
387
+ // messageHandler
388
+ // Manage messages (paylods) send from other J1 modules
389
+ // -------------------------------------------------------------------------
390
+ messageHandler: function (sender, message) {
391
+ // var json_message = JSON.stringify(message, undefined, 2); // multiline
392
+ var json_message = JSON.stringify(message);
393
+
394
+ logText = 'received message from ' + sender + ': ' + json_message;
395
+ logger.debug(logText);
396
+
397
+ // -----------------------------------------------------------------------
398
+ // Process commands|actions
399
+ // -----------------------------------------------------------------------
400
+ if (message.type === 'command' && message.action === 'module_initialized') {
401
+ //
402
+ // Place handling of command|action here
403
+ //
404
+ logger.info(message.text);
405
+ }
406
+ if (message.type === 'command' && message.action === 'status') {
407
+ logger.info('messageHandler: received - ' + message.action);
408
+ }
409
+
410
+ //
411
+ // Place handling of other command|action here
412
+ //
413
+
414
+ return true;
415
+ }, // END messageHandler
416
+
417
+ // -------------------------------------------------------------------------
418
+ // setState
419
+ // Set the current (processing) state of the module
420
+ // -------------------------------------------------------------------------
421
+ setState: function (stat) {
422
+ j1.adapter.ssm.state = stat;
423
+ }, // END setState
424
+
425
+ // -------------------------------------------------------------------------
426
+ // getState
427
+ // Returns the current (processing) state of the module
428
+ // -------------------------------------------------------------------------
429
+ getState: function () {
430
+ return j1.adapter.ssm.state;
431
+ }, // END state
432
+
433
+ // -------------------------------------------------------------------------
434
+ // Manage (top) position and sizes (@media breakpoints) of the
435
+ // SSM container depending on the size of the page header (attic)
436
+ // -------------------------------------------------------------------------
437
+ scrollSpy: function (options) {
438
+ logger = log4javascript.getLogger('j1.adapter.ssm.scrollSpy');
439
+
440
+ $(window).scroll(function(event){
441
+ var $navbar = $('nav.navbar');
442
+ var $pagehead = $('.attic');
443
+ var $main_content = $('.js-toc-content');
444
+ var $adblock = $('#adblock');
445
+ var $footer = $('#j1_footer');
446
+ var $ssmContainer = $('#ssm-container');
447
+ var $page = $(document);
448
+
449
+ var offset = 0;
450
+ var pageOffset = -120;
451
+ var scrollPos = $(document).scrollTop();
452
+ var pageHeight = $page.height()
453
+ var pageHeightOuter = $page.outerHeight()
454
+
455
+ // var m = parseInt(pagehead.css('margin-bottom'), 10);
456
+ var m = $main_content.offset().top;
457
+ var s = $ssmContainer.length ? $ssmContainer.height() : 0;
458
+ var f = $footer.length ? $footer.outerHeight() : 0;
459
+ var n = $navbar.length ? $navbar.height() : 0;
460
+ // var h = $pagehead.length ? $pagehead.outerHeight() : 0;
461
+ var a = $adblock.length ? $adblock.outerHeight() : 0;
462
+
463
+ // var o = n + h + a + offset;
464
+ // var o = n + m + offset;
465
+ var o = n + offset;
466
+
467
+ // space above the (fixed) ssm container
468
+ var showSsmPos = m + pageOffset;
469
+
470
+ // space below the (fixed) ssm container
471
+ var hideSsmPos = pageHeight - s - f + pageOffset;
472
+
473
+ // set the top position of ssm container for navbar modes
474
+ // e.g. "sticky" (navbar-fixed)
475
+ if($navbar.hasClass('navbar-fixed')){
476
+ $('#ssm-container').css('top', o);
477
+ } else {
478
+ $('#ssm-container').css('top', m);
479
+ }
480
+
481
+ // show|hide ssm container on scroll position in page
482
+ //
483
+ ( scrollPos >= showSsmPos ) && ( scrollPos <= hideSsmPos )
484
+ ? $ssmContainer.css('display','block')
485
+ : $ssmContainer.css('display','none');
486
+
487
+ logger.debug('content pos detected as: ' + m + 'px');
488
+ logger.debug('scroll pos detected as: ' + scrollPos + 'px');
489
+ }); // END setTop on scroll
490
+
491
+ } // END scrollSpy
492
+
493
+ }; // END return
494
+ })(j1, window);
495
+
496
+ {% endcapture %}
497
+ {{ cache | strip_empty_lines }}
498
+ {% assign cache = nil %}