j1-template 2022.0.10 → 2022.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/advertising.js +1 -4
  3. data/assets/themes/j1/adapter/js/algolia.js +1 -4
  4. data/assets/themes/j1/adapter/js/analytics.js +237 -0
  5. data/assets/themes/j1/adapter/js/asciidoctor.js +1 -4
  6. data/assets/themes/j1/adapter/js/attic.js +1 -4
  7. data/assets/themes/j1/adapter/js/bmd.js +1 -4
  8. data/assets/themes/j1/adapter/js/carousel.js +1 -4
  9. data/assets/themes/j1/adapter/js/clipboard.js +1 -2
  10. data/assets/themes/j1/adapter/js/comments.js +387 -0
  11. data/assets/themes/j1/adapter/js/cookieConsent.js +35 -27
  12. data/assets/themes/j1/adapter/js/fab.js +1 -1
  13. data/assets/themes/j1/adapter/js/framer.js +1 -4
  14. data/assets/themes/j1/adapter/js/j1.js +52 -166
  15. data/assets/themes/j1/adapter/js/justifiedGallery.js +1 -4
  16. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +1 -4
  17. data/assets/themes/j1/adapter/js/lightbox.js +1 -5
  18. data/assets/themes/j1/adapter/js/logger.js +1 -2
  19. data/assets/themes/j1/adapter/js/mmenu.js +2 -3
  20. data/assets/themes/j1/adapter/js/navigator.js +4 -3
  21. data/assets/themes/j1/adapter/js/quicksearch.js +1 -4
  22. data/assets/themes/j1/adapter/js/rouge.js +1 -4
  23. data/assets/themes/j1/adapter/js/rtable.js +1 -4
  24. data/assets/themes/j1/adapter/js/rtextResizer.js +1 -4
  25. data/assets/themes/j1/adapter/js/scroller.js +1 -4
  26. data/assets/themes/j1/adapter/js/themer.js +1 -1
  27. data/assets/themes/j1/adapter/js/toccer.js +1 -4
  28. data/assets/themes/j1/adapter/js/translator.js +25 -68
  29. data/assets/themes/j1/core/js/template.js +13 -5
  30. data/assets/themes/j1/core/js/template.min.js +1 -1
  31. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  32. data/lib/j1/version.rb +1 -1
  33. data/lib/starter_web/Gemfile +1 -1
  34. data/lib/starter_web/_config.yml +1 -9
  35. data/lib/starter_web/_data/apps/carousel.yml +2 -2
  36. data/lib/starter_web/_data/apps/defaults/carousel.yml +3 -2
  37. data/lib/starter_web/_data/apps/defaults/justifiedGallery.yml +2 -2
  38. data/lib/starter_web/_data/apps/defaults/justifiedGalleryCustomizer.yml +2 -2
  39. data/lib/starter_web/_data/apps/defaults/lightGallery.yml +2 -2
  40. data/lib/starter_web/_data/apps/defaults/lightbox.yml +2 -2
  41. data/lib/starter_web/_data/apps/justifiedGallery.yml +2 -2
  42. data/lib/starter_web/_data/apps/justifiedGalleryCustomizer.yml +2 -2
  43. data/lib/starter_web/_data/apps/lightGallery.yml +2 -2
  44. data/lib/starter_web/_data/apps/lightbox.yml +2 -2
  45. data/lib/starter_web/_data/blocks/banner.yml +3 -2
  46. data/lib/starter_web/_data/blocks/defaults/banner.yml +9 -0
  47. data/lib/starter_web/_data/blocks/defaults/footer.yml +9 -0
  48. data/lib/starter_web/_data/blocks/defaults/panel.yml +9 -0
  49. data/lib/starter_web/_data/blocks/footer.yml +3 -2
  50. data/lib/starter_web/_data/blocks/panel.yml +3 -2
  51. data/lib/starter_web/_data/builder/blog_navigator.yml +3 -2
  52. data/lib/starter_web/_data/builder/defaults/blog_navigator.yml +8 -8
  53. data/lib/starter_web/_data/j1_config.yml +0 -116
  54. data/lib/starter_web/_data/layouts/default.yml +14 -14
  55. data/lib/starter_web/_data/layouts/page.yml +7 -18
  56. data/lib/starter_web/_data/layouts/post.yml +0 -11
  57. data/lib/starter_web/_data/modules/advertising.yml +3 -2
  58. data/lib/starter_web/_data/modules/analytics.yml +99 -0
  59. data/lib/starter_web/_data/modules/attics.yml +3 -2
  60. data/lib/starter_web/_data/modules/comments.yml +55 -0
  61. data/lib/starter_web/_data/modules/cookieconsent.yml +2 -1
  62. data/lib/starter_web/_data/modules/cookies.yml +2 -0
  63. data/lib/starter_web/_data/modules/defaults/advertising.yml +4 -3
  64. data/lib/starter_web/_data/modules/defaults/analytics.yml +93 -0
  65. data/lib/starter_web/_data/modules/defaults/attics.yml +3 -2
  66. data/lib/starter_web/_data/modules/defaults/authentication.yml +51 -48
  67. data/lib/starter_web/_data/modules/defaults/comments.yml +114 -0
  68. data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +3 -3
  69. data/lib/starter_web/_data/modules/defaults/cookies.yml +19 -8
  70. data/lib/starter_web/_data/modules/defaults/fab.yml +4 -2
  71. data/lib/starter_web/_data/modules/defaults/framer.yml +2 -3
  72. data/lib/starter_web/_data/modules/defaults/log4javascript.yml +3 -2
  73. data/lib/starter_web/_data/modules/defaults/log4r.yml +2 -2
  74. data/lib/starter_web/_data/modules/defaults/navigator.yml +4 -2
  75. data/lib/starter_web/_data/modules/defaults/quicksearch.yml +4 -3
  76. data/lib/starter_web/_data/modules/defaults/rtable.yml +3 -2
  77. data/lib/starter_web/_data/modules/defaults/scoller.yml +3 -2
  78. data/lib/starter_web/_data/modules/defaults/themer.yml +119 -118
  79. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  80. data/lib/starter_web/_data/modules/defaults/translator.yml +1 -1
  81. data/lib/starter_web/_data/modules/fab.yml +3 -2
  82. data/lib/starter_web/_data/modules/framer.yml +3 -4
  83. data/lib/starter_web/_data/modules/log4r.yml +2 -2
  84. data/lib/starter_web/_data/modules/navigator.yml +4 -2
  85. data/lib/starter_web/_data/modules/quicksearch.yml +3 -3
  86. data/lib/starter_web/_data/modules/rtable.yml +3 -3
  87. data/lib/starter_web/_data/modules/scroller.yml +2 -3
  88. data/lib/starter_web/_data/modules/themer.yml +2 -3
  89. data/lib/starter_web/_data/modules/toccer.yml +3 -3
  90. data/lib/starter_web/_data/modules/translator.yml +1 -1
  91. data/lib/starter_web/_data/plugins/defaults/paginator.yml +2 -2
  92. data/lib/starter_web/_data/plugins/paginator.yml +2 -2
  93. data/lib/starter_web/_data/resources.yml +442 -309
  94. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  95. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  96. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.ads.asciidoc +196 -0
  97. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.comments.asciidoc +182 -0
  98. data/lib/starter_web/package.json +1 -1
  99. data/lib/starter_web/pages/public/learn/roundtrip/{100_present_images.no_ads.asciidoc → 100_present_images.base.asciidoc} +0 -0
  100. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.comments.asciidoc +237 -0
  101. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  102. data/lib/starter_web/utilsrv/package.json +1 -1
  103. metadata +12 -26
  104. data/_includes/themes/j1/blocks/ads/ad.html +0 -64
  105. data/_includes/themes/j1/modules/boards/news_pin_board.html +0 -183
  106. data/_includes/themes/j1/modules/connectors/analytic/custom-provider.html +0 -32
  107. data/_includes/themes/j1/modules/connectors/analytic/google-analytics.html +0 -30
  108. data/_includes/themes/j1/modules/connectors/analytics +0 -60
  109. data/_includes/themes/j1/modules/connectors/comment/commento.html +0 -31
  110. data/_includes/themes/j1/modules/connectors/comment/custom-provider.html +0 -30
  111. data/_includes/themes/j1/modules/connectors/comment/disqus.html +0 -32
  112. data/_includes/themes/j1/modules/connectors/comment/facebook.html +0 -30
  113. data/_includes/themes/j1/modules/connectors/comment/hyvor.html +0 -32
  114. data/_includes/themes/j1/modules/connectors/comment/just-comments.html +0 -31
  115. data/_includes/themes/j1/modules/connectors/comments +0 -64
  116. data/_includes/themes/j1/modules/connectors/sharing +0 -29
  117. data/_includes/themes/j1/modules/connectors/survey/custom-provider.html +0 -30
  118. data/_includes/themes/j1/modules/connectors/survey/jotform.html +0 -32
  119. data/_includes/themes/j1/modules/connectors/surveys +0 -58
  120. data/_includes/themes/j1/modules/connectors/translator +0 -58
  121. data/_includes/themes/j1/modules/connectors/translators/custom-translator.html +0 -32
  122. data/_includes/themes/j1/modules/connectors/translators/google-translator.html +0 -53
  123. data/_includes/themes/j1/modules/search/algolia.html +0 -181
  124. data/_includes/themes/j1/modules/search/docsearch.html +0 -42
  125. data/assets/data/disqus.js +0 -81
  126. data/assets/data/hyvor.js +0 -72
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc2a02f0992942be9547df18b61632391829e533c645ea81fe4131eae7f49043
4
- data.tar.gz: d5e934d860c004b360d99ca7596cefcb45b3a0d76f68642310738d790260ce6b
3
+ metadata.gz: 4a30d2f4bc51e2af06b5b10c812289a4f8161cead03377b80c39e0793737bbcd
4
+ data.tar.gz: b32a2635e86fbd1fbcc1918a817c84470acbe4495666e853a89794a3f69038bd
5
5
  SHA512:
6
- metadata.gz: 023b1c837af69c38b606fd4b47725b70a439a6a92e2513cca0bac881a5b4dc923d4f858ee4eec3bd54c4acbc203aae09ce728dee194ee506ce35009df3efc6d5
7
- data.tar.gz: af03effec7b450c998b5131863b0d61bc1fc9ddbec2d855bede05d857d7a1fa50dbc6e61a16d7a7028562a515f0d0feddbf94de9efd75c82dd8b89403f0e0def
6
+ metadata.gz: 9442e43055a99e22dba59f961763f74b3e4bdb7b6d6b83156b0b9670d6eb0a834d7d42eccc846b418698b949a9e904aaf48c048f140aaba8d606a73a0afaf9a7
7
+ data.tar.gz: 2b49a58cf6149a1d20745bf88d8187318a7096ca7adc00648caec4a5eb0de6f60ed58ec602f1d8e60036be96041466a6eb556d6f864723e01d4330e8fe6459c9
@@ -84,10 +84,7 @@ regenerate: true
84
84
  /* eslint indent: "off" */
85
85
  // -----------------------------------------------------------------------------
86
86
  'use strict';
87
-
88
- {% comment %} Main
89
- -------------------------------------------------------------------------------- {% endcomment %}
90
- j1.adapter['advertising'] = (function (j1, window) {
87
+ j1.adapter.advertising = (function (j1, window) {
91
88
 
92
89
  {% comment %} Set global variables
93
90
  -------------------------------------------------------------------------------- {% endcomment %}
@@ -74,10 +74,7 @@ regenerate: false
74
74
  /* eslint indent: "off" */
75
75
  // -----------------------------------------------------------------------------
76
76
  'use strict';
77
-
78
- {% comment %} Main
79
- -------------------------------------------------------------------------------- {% endcomment %}
80
- j1.adapter['algolia'] = (function (j1, window) {
77
+ j1.adapter.algolia = (function (j1, window) {
81
78
 
82
79
  {% comment %} Set global variables
83
80
  ------------------------------------------------------------------------------ {% endcomment %}
@@ -0,0 +1,237 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/analytics.js
10
+ # Liquid template to adapt the Analytics module
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ # Copyright (C) 2021 Juergen Adams
15
+ #
16
+ # J1 Template is licensed under the MIT License.
17
+ # For details, see https://jekyll.one
18
+ # -----------------------------------------------------------------------------
19
+ # Test data:
20
+ # {{ liquid_var | debug }}
21
+ # analytics_options: {{ analytics_options | debug }}
22
+ # -----------------------------------------------------------------------------
23
+ {% endcomment %}
24
+
25
+ {% comment %} Liquid procedures
26
+ -------------------------------------------------------------------------------- {% endcomment %}
27
+
28
+ {% comment %} Set global settings
29
+ -------------------------------------------------------------------------------- {% endcomment %}
30
+ {% assign environment = site.environment %}
31
+ {% assign asset_path = "/assets/themes/j1" %}
32
+
33
+ {% comment %} Process YML config data
34
+ ================================================================================ {% endcomment %}
35
+
36
+ {% comment %} Set config files
37
+ -------------------------------------------------------------------------------- {% endcomment %}
38
+ {% assign template_config = site.data.j1_config %}
39
+ {% assign blocks = site.data.blocks %}
40
+ {% assign modules = site.data.modules %}
41
+
42
+ {% comment %} Set config data (settings only)
43
+ -------------------------------------------------------------------------------- {% endcomment %}
44
+ {% assign analytics_defaults = modules.defaults.analytics.defaults %}
45
+ {% assign analytics_settings = modules.analytics.settings %}
46
+
47
+ {% comment %} Set config options (settings only)
48
+ -------------------------------------------------------------------------------- {% endcomment %}
49
+ {% assign analytics_options = analytics_defaults | merge: analytics_settings %}
50
+
51
+ {% comment %} Variables
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+ {% assign analytics = analytics_options.enabled %}
54
+ {% assign analytics_provider = analytics_options.provider %}
55
+
56
+ {% assign production = false %}
57
+ {% if environment == 'prod' or environment == 'production' %}
58
+ {% assign production = true %}
59
+ {% endif %}
60
+
61
+ /*
62
+ # -----------------------------------------------------------------------------
63
+ # ~/assets/themes/j1/adapter/js/analytics.js
64
+ # J1 Adapter for the analytics module
65
+ #
66
+ # Product/Info:
67
+ # https://jekyll.one
68
+ #
69
+ # Copyright (C) 2021 Juergen Adams
70
+ #
71
+ # J1 Template is licensed under the MIT License.
72
+ # For details, see https://jekyll.one
73
+ # -----------------------------------------------------------------------------
74
+ # Adapter generated: {{site.time}}
75
+ # -----------------------------------------------------------------------------
76
+ */
77
+
78
+ // -----------------------------------------------------------------------------
79
+ // ESLint shimming
80
+ // -----------------------------------------------------------------------------
81
+ /* eslint indent: "off" */
82
+ // -----------------------------------------------------------------------------
83
+ 'use strict';
84
+ j1.adapter.analytics = (function (j1, window) {
85
+
86
+ {% comment %} Set global variables
87
+ -------------------------------------------------------------------------------- {% endcomment %}
88
+ var environment = '{{environment}}';
89
+ var gaScript = document.createElement('script');
90
+ var trackingID = '{{analytics_options.google.trackingID}}';
91
+ var optInOut = {{analytics_options.google.optInOut}};
92
+ var anonymizeIP = {{analytics_options.google.anonymizeIP}};
93
+ var cookie_names = j1.getCookieNames();
94
+ var gaCookies;
95
+ var user_consent;
96
+ var gaExists;
97
+ var _this;
98
+ var logger;
99
+ var logText;
100
+
101
+ // ---------------------------------------------------------------------------
102
+ // Main object
103
+ // ---------------------------------------------------------------------------
104
+ return {
105
+
106
+ // -------------------------------------------------------------------------
107
+ // init()
108
+ // adapter initializer
109
+ // -------------------------------------------------------------------------
110
+ init: function (options) {
111
+
112
+ {% if analytics %}
113
+ // [INFO ] [j1.adapter.analytics ] [ detected analytics provider (j1_config): {{analytics_provider}}} ]
114
+ // [INFO ] [j1.adapter.analytics ] [ start processing load region head, layout: {{page.layout}} ]
115
+
116
+ {% case analytics_provider %}
117
+ {% when "google" %}
118
+ // [INFO ] [j1.adapter.analytics ] [ place provider: Google Adsense ]
119
+ _this = j1.adapter.analytics;
120
+ logger = log4javascript.getLogger('j1.adapter.analytics.google');
121
+ // initialize state flag
122
+ _this.setState('started');
123
+ logger.info('\n' + 'state: ' + _this.getState());
124
+ logger.info('\n' + 'module is being initialized');
125
+ // default module settings
126
+ var settings = $.extend({
127
+ module_name: 'j1.adapter.analytics',
128
+ generated: '2021-12-18 18:55:38 +0000'
129
+ }, options);
130
+
131
+ // remove all ga cookies left from a previous session/page view
132
+ // -----------------------------------------------------------------------
133
+ gaCookies = j1.findCookie('_ga');
134
+ gaCookies.forEach(function (item) {
135
+ logger.warn('\n' + 'delete GA cookie: ' + item);
136
+ j1.removeCookie({ name: item });
137
+ });
138
+
139
+ var dependencies_met_page_ready = setInterval(function() {
140
+ if (j1.getState() == 'finished') {
141
+
142
+ gaExists = document.getElementById('google-tag-manager');
143
+ if (!gaExists) {
144
+ // add ga api dynamically in the head section
145
+ // -----------------------------------------------------------------
146
+ logger.info('\n' + 'add ga api dynamically in section: head');
147
+ gaScript.async = true;
148
+ gaScript.id = 'google-tag-manager';
149
+ gaScript.src = '//www.googletagmanager.com/gtag/js?id={{analytics_options.google.trackingID}}';
150
+ document.head.appendChild(gaScript);
151
+ }
152
+
153
+ user_consent = j1.readCookie(cookie_names.user_consent);
154
+ if (user_consent.analysis) {
155
+ logger.info('\n' + 'user consent on analytics: ' + user_consent.analysis);
156
+ logger.info('\n' + 'enable: GA');
157
+ GTagOptIn.register(trackingID);
158
+ GTagOptIn.optIn();
159
+ } else {
160
+ logger.info('\n' + 'user consent on analytics: ' + user_consent.analysis);
161
+ logger.warn('\n' + 'disable: GA');
162
+ GTagOptIn.register(trackingID);
163
+ GTagOptIn.optOut();
164
+ }
165
+ clearInterval(dependencies_met_page_ready);
166
+ } // END if getState 'finished'
167
+ }, 25);
168
+
169
+ {% when "custom" %}
170
+ // [INFO ] [j1.adapter.analytics ] [ place provider: Custom Provider ]
171
+ {% endcase %}
172
+ // [INFO ] [j1.adapter.analytics ] [ end processing ]
173
+ {% else %}
174
+ var dependencies_met_page_ready = setInterval(function() {
175
+ if (j1.getState() == 'finished') {
176
+ logger = log4javascript.getLogger('j1.adapter.analytics.google');
177
+ logger.info('\n' + 'ga: disabled');
178
+ clearInterval(dependencies_met_page_ready);
179
+ }
180
+ }, 25);
181
+ {% endif %}
182
+ return;
183
+ }, // END init
184
+
185
+ // -------------------------------------------------------------------------
186
+ // messageHandler()
187
+ // manage messages send from other J1 modules
188
+ // -------------------------------------------------------------------------
189
+ messageHandler: function (sender, message) {
190
+ var json_message = JSON.stringify(message, undefined, 2);
191
+
192
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
193
+ logger.debug(logText);
194
+
195
+ // -----------------------------------------------------------------------
196
+ // Process commands|actions
197
+ // -----------------------------------------------------------------------
198
+ if (message.type === 'command' && message.action === 'module_initialized') {
199
+ //
200
+ // Place handling of command|action here
201
+ //
202
+ logger.info('\n' + message.text);
203
+ }
204
+
205
+ //
206
+ // Place handling of other command|action here
207
+ //
208
+
209
+ return true;
210
+ }, // END messageHandler
211
+
212
+ // -------------------------------------------------------------------------
213
+ // setState()
214
+ // Sets the current (processing) state of the module
215
+ // -------------------------------------------------------------------------
216
+ setState: function (stat) {
217
+ _this.state = stat;
218
+ }, // END setState
219
+
220
+ // -------------------------------------------------------------------------
221
+ // getState()
222
+ // Returns the current (processing) state of the module
223
+ // -------------------------------------------------------------------------
224
+ getState: function () {
225
+ return _this.state;
226
+ } // END getState
227
+
228
+ }; // END return
229
+ })(j1, window);
230
+
231
+ {% endcapture %}
232
+ {% if production %}
233
+ {{ cache | minifyJS }}
234
+ {% else %}
235
+ {{ cache | strip_empty_lines }}
236
+ {% endif %}
237
+ {% assign cache = nil %}
@@ -44,10 +44,7 @@ regenerate: true
44
44
  /* eslint indent: "off" */
45
45
  // -----------------------------------------------------------------------------
46
46
  'use strict';
47
-
48
- {% comment %} Main
49
- -------------------------------------------------------------------------------- {% endcomment %}
50
- j1.adapter['asciidoctor'] = (function (j1, window) {
47
+ j1.adapter.asciidoctor = (function (j1, window) {
51
48
 
52
49
  {% comment %} Set global variables
53
50
  ------------------------------------------------------------------------------ {% endcomment %}
@@ -81,10 +81,7 @@ regenerate: true
81
81
  /* eslint indent: "off" */
82
82
  // -----------------------------------------------------------------------------
83
83
  'use strict';
84
-
85
- {% comment %} Main
86
- -------------------------------------------------------------------------------- {% endcomment %}
87
- j1.adapter['attic'] = (function (j1, window) {
84
+ j1.adapter.attic = (function (j1, window) {
88
85
 
89
86
  {% comment %} Set global variables
90
87
  ------------------------------------------------------------------------------ {% endcomment %}
@@ -44,10 +44,7 @@ regenerate: false
44
44
  /* eslint indent: "off" */
45
45
  // -----------------------------------------------------------------------------
46
46
  'use strict';
47
-
48
- {% comment %} Main
49
- -------------------------------------------------------------------------------- {% endcomment %}
50
- j1.adapter['bmd'] = (function (j1, window) {
47
+ j1.adapter.bmd = (function (j1, window) {
51
48
 
52
49
  {% comment %} Set global variables
53
50
  ------------------------------------------------------------------------------ {% endcomment %}
@@ -77,10 +77,7 @@ regenerate: true
77
77
  /* eslint indent: "off" */
78
78
  // -----------------------------------------------------------------------------
79
79
  'use strict';
80
-
81
- {% comment %} Main
82
- --------------------------------------------------------------- {% endcomment %}
83
- j1.adapter['carousel'] = (function (j1, window) {
80
+ j1.adapter.carousel = (function (j1, window) {
84
81
  var environment = '{{environment}}';
85
82
  var moduleOptions = {};
86
83
  var _this;
@@ -62,8 +62,7 @@ regenerate: false
62
62
  /* eslint indent: "off" */
63
63
  // -----------------------------------------------------------------------------
64
64
  'use strict';
65
-
66
- j1.adapter['clipboard'] = (function (j1, window) {
65
+ j1.adapter.clipboard = (function (j1, window) {
67
66
 
68
67
  // ---------------------------------------------------------------------------
69
68
  // globals