j1-template 2022.0.10 → 2022.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/advertising.js +66 -48
  3. data/assets/themes/j1/adapter/js/algolia.js +10 -13
  4. data/assets/themes/j1/adapter/js/analytics.js +259 -0
  5. data/assets/themes/j1/adapter/js/asciidoctor.js +10 -13
  6. data/assets/themes/j1/adapter/js/attic.js +10 -5
  7. data/assets/themes/j1/adapter/js/bmd.js +10 -14
  8. data/assets/themes/j1/adapter/js/carousel.js +10 -13
  9. data/assets/themes/j1/adapter/js/clipboard.js +9 -10
  10. data/assets/themes/j1/adapter/js/comments.js +407 -0
  11. data/assets/themes/j1/adapter/js/cookieConsent.js +106 -87
  12. data/assets/themes/j1/adapter/js/fab.js +11 -11
  13. data/assets/themes/j1/adapter/js/framer.js +60 -62
  14. data/assets/themes/j1/adapter/js/j1.js +225 -268
  15. data/assets/themes/j1/adapter/js/justifiedGallery.js +12 -14
  16. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +10 -13
  17. data/assets/themes/j1/adapter/js/lightbox.js +12 -9
  18. data/assets/themes/j1/adapter/js/logger.js +11 -5
  19. data/assets/themes/j1/adapter/js/mmenu.js +11 -12
  20. data/assets/themes/j1/adapter/js/navigator.js +13 -12
  21. data/assets/themes/j1/adapter/js/quicksearch.js +10 -13
  22. data/assets/themes/j1/adapter/js/rouge.js +10 -13
  23. data/assets/themes/j1/adapter/js/rtable.js +10 -13
  24. data/assets/themes/j1/adapter/js/rtextResizer.js +10 -13
  25. data/assets/themes/j1/adapter/js/scroller.js +13 -11
  26. data/assets/themes/j1/adapter/js/themer.js +12 -3
  27. data/assets/themes/j1/adapter/js/toccer.js +10 -13
  28. data/assets/themes/j1/adapter/js/translator.js +35 -81
  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/assets/themes/j1/modules/advertising/js/google/adInitializer.js +14 -4
  33. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +11 -2
  34. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  35. data/lib/j1/version.rb +1 -1
  36. data/lib/starter_web/Gemfile +1 -1
  37. data/lib/starter_web/_config.yml +1 -9
  38. data/lib/starter_web/_data/apps/carousel.yml +2 -2
  39. data/lib/starter_web/_data/apps/defaults/carousel.yml +3 -2
  40. data/lib/starter_web/_data/apps/defaults/justifiedGallery.yml +2 -2
  41. data/lib/starter_web/_data/apps/defaults/justifiedGalleryCustomizer.yml +2 -2
  42. data/lib/starter_web/_data/apps/defaults/lightGallery.yml +2 -2
  43. data/lib/starter_web/_data/apps/defaults/lightbox.yml +2 -2
  44. data/lib/starter_web/_data/apps/justifiedGallery.yml +2 -2
  45. data/lib/starter_web/_data/apps/justifiedGalleryCustomizer.yml +2 -2
  46. data/lib/starter_web/_data/apps/lightGallery.yml +2 -2
  47. data/lib/starter_web/_data/apps/lightbox.yml +2 -2
  48. data/lib/starter_web/_data/blocks/banner.yml +3 -2
  49. data/lib/starter_web/_data/blocks/defaults/banner.yml +9 -0
  50. data/lib/starter_web/_data/blocks/defaults/footer.yml +9 -0
  51. data/lib/starter_web/_data/blocks/defaults/panel.yml +9 -0
  52. data/lib/starter_web/_data/blocks/footer.yml +3 -2
  53. data/lib/starter_web/_data/blocks/panel.yml +3 -2
  54. data/lib/starter_web/_data/builder/blog_navigator.yml +3 -2
  55. data/lib/starter_web/_data/builder/defaults/blog_navigator.yml +8 -8
  56. data/lib/starter_web/_data/j1_config.yml +0 -116
  57. data/lib/starter_web/_data/layouts/default.yml +14 -14
  58. data/lib/starter_web/_data/layouts/home.ads.yml +262 -0
  59. data/lib/starter_web/_data/layouts/home.no-ads.yml +262 -0
  60. data/lib/starter_web/_data/layouts/home.yml +1 -1
  61. data/lib/starter_web/_data/layouts/page.yml +7 -18
  62. data/lib/starter_web/_data/layouts/post.yml +0 -11
  63. data/lib/starter_web/_data/modules/advertising.yml +4 -14
  64. data/lib/starter_web/_data/modules/analytics.yml +99 -0
  65. data/lib/starter_web/_data/modules/attics.yml +3 -2
  66. data/lib/starter_web/_data/modules/comments.yml +55 -0
  67. data/lib/starter_web/_data/modules/cookieconsent.yml +2 -1
  68. data/lib/starter_web/_data/modules/cookies.yml +6 -1
  69. data/lib/starter_web/_data/modules/defaults/advertising.yml +9 -9
  70. data/lib/starter_web/_data/modules/defaults/analytics.yml +93 -0
  71. data/lib/starter_web/_data/modules/defaults/attics.yml +3 -2
  72. data/lib/starter_web/_data/modules/defaults/authentication.yml +51 -48
  73. data/lib/starter_web/_data/modules/defaults/comments.yml +114 -0
  74. data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +3 -3
  75. data/lib/starter_web/_data/modules/defaults/cookies.yml +107 -26
  76. data/lib/starter_web/_data/modules/defaults/fab.yml +4 -2
  77. data/lib/starter_web/_data/modules/defaults/framer.yml +2 -3
  78. data/lib/starter_web/_data/modules/defaults/log4javascript.yml +3 -2
  79. data/lib/starter_web/_data/modules/defaults/log4r.yml +2 -2
  80. data/lib/starter_web/_data/modules/defaults/navigator.yml +4 -2
  81. data/lib/starter_web/_data/modules/defaults/quicksearch.yml +4 -3
  82. data/lib/starter_web/_data/modules/defaults/rtable.yml +3 -2
  83. data/lib/starter_web/_data/modules/defaults/scoller.yml +3 -2
  84. data/lib/starter_web/_data/modules/defaults/themer.yml +119 -118
  85. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  86. data/lib/starter_web/_data/modules/defaults/translator.yml +1 -1
  87. data/lib/starter_web/_data/modules/fab.yml +3 -2
  88. data/lib/starter_web/_data/modules/framer.yml +3 -4
  89. data/lib/starter_web/_data/modules/log4r.yml +2 -2
  90. data/lib/starter_web/_data/modules/navigator.yml +4 -2
  91. data/lib/starter_web/_data/modules/quicksearch.yml +3 -3
  92. data/lib/starter_web/_data/modules/rtable.yml +3 -3
  93. data/lib/starter_web/_data/modules/scroller.yml +2 -3
  94. data/lib/starter_web/_data/modules/themer.yml +2 -3
  95. data/lib/starter_web/_data/modules/toccer.yml +3 -3
  96. data/lib/starter_web/_data/modules/translator.yml +1 -1
  97. data/lib/starter_web/_data/plugins/defaults/paginator.yml +2 -2
  98. data/lib/starter_web/_data/plugins/paginator.yml +2 -2
  99. data/lib/starter_web/_data/resources.yml +442 -309
  100. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  101. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  102. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +1 -1
  103. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +1 -1
  104. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.ads.asciidoc +196 -0
  105. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.comments.asciidoc +182 -0
  106. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-site-generators.adoc +1 -1
  107. data/lib/starter_web/collections/posts/public/featured/_posts/2021-03-03-about-j1.adoc +1 -1
  108. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-wiki-series.adoc +1 -1
  109. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-wiki-series.adoc +1 -1
  110. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-wiki-series.adoc +1 -1
  111. data/lib/starter_web/index.html +0 -3
  112. data/lib/starter_web/package.json +1 -1
  113. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +1 -1
  114. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +1 -1
  115. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +1 -1
  116. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -4
  117. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +1 -4
  118. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +1 -4
  119. data/lib/starter_web/pages/public/learn/roundtrip/{100_present_images.no_ads.asciidoc → 100_present_images.base.asciidoc} +0 -0
  120. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.comments.asciidoc +237 -0
  121. data/lib/starter_web/pages/public/manuals/dropdown-help.adoc +23 -2
  122. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +100 -166
  123. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  124. data/lib/starter_web/utilsrv/package.json +1 -1
  125. metadata +14 -26
  126. data/_includes/themes/j1/blocks/ads/ad.html +0 -64
  127. data/_includes/themes/j1/modules/boards/news_pin_board.html +0 -183
  128. data/_includes/themes/j1/modules/connectors/analytic/custom-provider.html +0 -32
  129. data/_includes/themes/j1/modules/connectors/analytic/google-analytics.html +0 -30
  130. data/_includes/themes/j1/modules/connectors/analytics +0 -60
  131. data/_includes/themes/j1/modules/connectors/comment/commento.html +0 -31
  132. data/_includes/themes/j1/modules/connectors/comment/custom-provider.html +0 -30
  133. data/_includes/themes/j1/modules/connectors/comment/disqus.html +0 -32
  134. data/_includes/themes/j1/modules/connectors/comment/facebook.html +0 -30
  135. data/_includes/themes/j1/modules/connectors/comment/hyvor.html +0 -32
  136. data/_includes/themes/j1/modules/connectors/comment/just-comments.html +0 -31
  137. data/_includes/themes/j1/modules/connectors/comments +0 -64
  138. data/_includes/themes/j1/modules/connectors/sharing +0 -29
  139. data/_includes/themes/j1/modules/connectors/survey/custom-provider.html +0 -30
  140. data/_includes/themes/j1/modules/connectors/survey/jotform.html +0 -32
  141. data/_includes/themes/j1/modules/connectors/surveys +0 -58
  142. data/_includes/themes/j1/modules/connectors/translator +0 -58
  143. data/_includes/themes/j1/modules/connectors/translators/custom-translator.html +0 -32
  144. data/_includes/themes/j1/modules/connectors/translators/google-translator.html +0 -53
  145. data/_includes/themes/j1/modules/search/algolia.html +0 -181
  146. data/_includes/themes/j1/modules/search/docsearch.html +0 -42
  147. data/assets/data/disqus.js +0 -81
  148. data/assets/data/hyvor.js +0 -72
@@ -60,8 +60,8 @@ regenerate: true
60
60
  {% assign themer_defaults = modules.defaults.themer.defaults %}
61
61
  {% assign themer_settings = modules.themer.settings %}
62
62
 
63
- {% assign tracking_enabled = template_config.analytics.enabled %}
64
- {% assign tracking_id = template_config.analytics.google.tracking_id %}
63
+ {% assign tracking_enabled = modules.analytics.enabled %}
64
+ {% assign tracking_id = modules.analytics.google.trackingID %}
65
65
 
66
66
  {% assign authentication_defaults = modules.defaults.authentication.defaults %}
67
67
  {% assign authentication_settings = modules.authentication.settings %}
@@ -82,24 +82,10 @@ regenerate: true
82
82
  {% assign themer_enabled = modules.themer_options.enabled %}
83
83
  {% assign themer_reloadPageOnChange = modules.themer_options.reloadPageOnChange %}
84
84
  {% assign themer_hideOnReload = modules.themer_options.hideOnReload %}
85
- {% assign comment_provider = template_config.comments.provider %}
85
+
86
86
 
87
87
  {% comment %} Set variables
88
88
  -------------------------------------------------------------------------------- {% endcomment %}
89
- {% if comment_provider == 'disqus' %}
90
- {% assign site_id = template_config.comments.disqus.site_id %}
91
- {% elsif comment_provider == 'hyvor' %}
92
- {% assign site_id = template_config.comments.hyvor.site_id %}
93
- {% elsif comment_provider == 'commento' %}
94
- {% assign site_id = template_config.comments.commento.site_id %}
95
- {% elsif comment_provider == 'just-comments' %}
96
- {% assign site_id = template_config.comments.just-comments.site_id %}
97
- {% elsif comment_provider == 'facebook' %}
98
- {% assign site_id = template_config.comments.facebook.site_id %}
99
- {% else %}
100
- {% assign site_id = false %}
101
- {% endif %}
102
-
103
89
  {% assign production = false %}
104
90
  {% if environment == 'prod' or environment == 'production' %}
105
91
  {% assign production = true %}
@@ -115,14 +101,6 @@ regenerate: true
115
101
  {% assign language = "en" %}
116
102
  {% endif %}
117
103
 
118
- {% if language == "en" %}
119
- {% assign comments_headline = template_config.comments.comments_headline.en %}
120
- {% endif %}
121
-
122
- {% if language == "de" %}
123
- {% assign comments_headline = template_config.comments.comments_headline.de %}
124
- {% endif %}
125
-
126
104
  /*
127
105
  # -----------------------------------------------------------------------------
128
106
  # ~/assets/themes/j1/adapter/js/j1_template.js
@@ -151,30 +129,30 @@ regenerate: true
151
129
  /* eslint semi: "off" */
152
130
  // -----------------------------------------------------------------------------
153
131
  'use strict';
154
-
155
132
  var j1 = (function () {
156
133
 
157
134
  // ---------------------------------------------------------------------------
158
135
  // globals
159
136
  // ---------------------------------------------------------------------------
160
- var rePager = new RegExp('navigator|dateview|tagview|archive');
161
- var environment = '{{environment}}';
162
- var moduleOptions = {};
163
- var j1_runtime_data = {};
137
+ var rePager = new RegExp('navigator|dateview|tagview|archive');
138
+ var environment = '{{environment}}';
139
+ var moduleOptions = {};
140
+ var j1_runtime_data = {};
164
141
 
165
142
  // Status information
166
- var state = 'not_started';
167
- var mode = 'not_detected';
143
+ var state = 'not_started';
144
+ var mode = 'not_detected';
168
145
 
169
146
  // Default tracking provider information
170
- var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
171
- var tracking_id = '{{tracking_id}}';
172
- var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
147
+ // var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
148
+ // var tracking_id = '{{tracking_id}}';
149
+ // var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
173
150
 
174
151
  // Default comment provider information
175
- var comment_provider = '{{comment_provider}}';
176
- var site_id = '{{site_id}}';
177
- var check_cookies = {{cookie_options.check_cookies}};
152
+ var comment_provider = '{{comment_provider}}';
153
+ var site_id = '{{site_id}}';
154
+ var checkCookies = {{cookie_options.checkCookies}};
155
+ var expireCookiesOnRequiredOnly = ('{{cookie_options.expireCookiesOnRequiredOnly}}' === 'true') ? true: false;
178
156
 
179
157
  var current_user_data;
180
158
  var current_page;
@@ -275,7 +253,15 @@ var j1 = (function () {
275
253
  init: function (options) {
276
254
 
277
255
  // -----------------------------------------------------------------------
278
- // global var (function)
256
+ // Default module settings
257
+ // -----------------------------------------------------------------------
258
+ var settings = $.extend({
259
+ module_name: 'j1',
260
+ generated: '{{site.time}}'
261
+ }, options);
262
+
263
+ // -----------------------------------------------------------------------
264
+ // Global variable settings
279
265
  // -----------------------------------------------------------------------
280
266
  var logger = log4javascript.getLogger('j1.init');
281
267
  var url = new liteURL(window.location.href);
@@ -287,18 +273,8 @@ var j1 = (function () {
287
273
  var timestamp_now = date.toISOString();
288
274
  var curr_state = 'started';
289
275
  var gaCookies = j1.findCookie('_ga');
290
- var j1Cookies = j1.findCookie('j1');
291
276
  var themerOptions = $.extend({}, {{themer_options | replace: '=>', ':' | replace: 'nil', '""' }});
292
277
 
293
- // -----------------------------------------------------------------------
294
- // options loader
295
- // -----------------------------------------------------------------------
296
- var settings = $.extend({
297
- foo: 'foo_option',
298
- bar: 'bar_option'
299
- },
300
- options
301
- );
302
278
  // -----------------------------------------------------------------------
303
279
  // status settings
304
280
  // save status into the adapter object for (later) global access
@@ -369,22 +345,13 @@ var j1 = (function () {
369
345
  expires: 365
370
346
  });
371
347
 
372
- // jadams, 2021-12-06: Check if access to cookies for this site failed.
373
- // Possibly, a third-party domain or an attacker tries to access it.
374
- if (check_cookies) {
375
- if (!user_state) {
376
- logger.error('\n' + 'Access to cookie failed or cookie not found: ' + cookie_names.user_state);
377
- logger.debug('\n' + 'j1 cookies found:' + j1Cookies.length);
378
- // redirect to error page: blocked content
379
- window.location.href = '/446.html';
380
- }
381
- }
382
-
383
348
  if (!user_consent.analysis || !user_consent.personalization) {
384
- // expire permanent cookies to session
385
- j1.expireCookie({ name: cookie_names.user_state });
386
- j1.expireCookie({ name: cookie_names.user_consent });
387
- j1.expireCookie({ name: cookie_names.user_translate });
349
+ if (expireCookiesOnRequiredOnly) {
350
+ // expire permanent cookies to session
351
+ j1.expireCookie({ name: cookie_names.user_state });
352
+ j1.expireCookie({ name: cookie_names.user_consent });
353
+ j1.expireCookie({ name: cookie_names.user_translate });
354
+ }
388
355
  }
389
356
 
390
357
  // initialize event handler for window/history/back on <ESC>
@@ -848,6 +815,7 @@ var j1 = (function () {
848
815
  var categoryAllowed;
849
816
 
850
817
  // provider APIs require user consent
818
+ // -----------------------------------------------------------------------
851
819
  var meta_analytics = $('meta[name=analytics]').attr('content');
852
820
  var analytics = (meta_analytics === 'true') ? true: false;
853
821
  var meta_comments = $('meta[name=comments]').attr('content');
@@ -864,6 +832,7 @@ var j1 = (function () {
864
832
  var personalization = (meta_personalization === 'true') ? true: false;
865
833
 
866
834
  // if personalized content detected, page requires user consent
835
+ // -----------------------------------------------------------------------
867
836
  if (personalization && !user_consent.personalization) {
868
837
  // redirect to error page: blocked content
869
838
  window.location.href = '/444.html';
@@ -873,7 +842,9 @@ var j1 = (function () {
873
842
  logText= '\n' + 'loading page partials: started';
874
843
  logger.info(logText);
875
844
 
876
- if (j1.appDetected()) { // app mode
845
+ if (j1.appDetected()) {
846
+ // app mode
847
+ // ---------------------------------------------------------------------
877
848
  logger.info('\n' + 'mode detected: app');
878
849
 
879
850
  $.when ($.ajax(ep_status))
@@ -916,78 +887,36 @@ var j1 = (function () {
916
887
 
917
888
  // show the page delayed
918
889
  setTimeout (function() {
919
- // Manage providers for personalization OptIn/Out (Comments|Ads)
920
- if (!user_consent.personalization) {
921
- logger.debug('\n' + 'disable comment provider: ' + comment_provider);
922
- logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
923
- $('#leave-a-comment').remove();
924
- if (comment_provider === 'disqus') {
925
- $('#dsq-count-scr').remove();
926
- $('#disqus-thread').remove();
927
- }
928
- if (comment_provider === 'hyvor') {
929
- $('#hyvor-embed').remove();
930
- $('#hyvor-talk-view').remove();
931
- }
932
- } else {
933
- if (comments) {
934
- logger.info('\n' + 'enable comment provider: ' + comment_provider);
935
- $('#main-content').append('<h2 id="leave-a-comment" class="mt-4">{{comments_headline}}</h2>');
936
- if (comment_provider === 'disqus') {
937
- logger.info('\n' + 'load comment provider code: ' + comment_provider);
938
- $('#main-content').append('<div id="disqus_thread"></div>');
939
- $('body').append('<script async id="dsq-count-scr" src="//' + site_id + '.disqus.com/count.js"></script>');
940
- j1.loadJS({
941
- xhr_data_path: '/assets/data/' + comment_provider + '.js',
942
- xhr_data_element: comment_provider
943
- });
944
- }
945
- if (comment_provider === 'hyvor') {
946
- $('body').append('<script> var HYVOR_TALK_WEBSITE = ' + site_id + '; var HYVOR_TALK_CONFIG = { url: false, id: false };');
947
- $('#main-content').append('<div id="hyvor-talk-view"></div>');
948
- $('body').append('<script async id="hyvor-embed" type="text/javascript" src="//talk.hyvor.com/web-api/embed.js"></script>');
949
- }
890
+ // display page
891
+ $('#no_flicker').css('display', 'block');
892
+
893
+ // jadams, 2021-12-06: Check if access to cookies for this site failed.
894
+ // Possibly, a third-party domain or an attacker tries to access it.
895
+ if (checkCookies) {
896
+ var j1Cookies = j1.findCookie('j1');
897
+ if (!j1.existsCookie(cookie_names.user_state)) {
898
+ logger.error('\n' + 'Access to cookie failed or cookie not found: ' + cookie_names.user_state);
899
+ logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
900
+ // redirect to error page: blocked content
901
+ window.location.href = '/446.html';
902
+ } else {
903
+ logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
950
904
  }
951
905
  }
952
906
 
953
- // display page
954
- $('#no_flicker').css('display', 'block');
955
-
956
- // no dropcaps if translation enabled
957
- if (user_translate.translationEnabled) {
907
+ // manage Dropcaps if translation is enabled|disabled
908
+ // -----------------------------------------------------------------
909
+ if (user_translate.translationEnabled) {
958
910
  logger.info('\n' + 'translation enabled: ' + user_translate.translationEnabled);
959
911
  logger.debug('\n' + 'skipped processing of dropcaps');
960
- } else {
912
+ } else {
961
913
  // initialize dropcaps
962
914
  logger.info('\n' + 'post processing: createDropCap');
963
915
  j1.core.createDropCap();
964
- }
965
-
966
- // add recommended title to hyvor iframe for SEO optimization (if loadad)
967
- if (comment_provider === 'hyvor') {
968
- var dependencies_met_load_finished = setInterval (function () {
969
- if ($('#hyvor-talk-view').children().length) {
970
- $('#hyvor-talk-iframe').prop('title', 'Hyvor talk iframe');
971
- clearInterval(dependencies_met_load_finished);
972
- }
973
- }, 25);
974
- }
975
- // NOTE: Placed tracking warning/info here because page may reloaded
976
- // after cookie consent selection
977
- if (user_consent.analysis) {
978
- logger.info('\n' + 'tracking allowed, privacy settings for analysis: ' + user_consent.analysis);
979
- if (tracking_enabled && !tracking_id_valid) {
980
- logger.error('\n' + 'tracking enabled, but invalid tracking id found: ' + tracking_id);
981
- } else if (tracking_enabled && tracking_id_valid) {
982
- logger.info('\n' + 'tracking enabled, tracking id found: ' + tracking_id);
983
- } else {
984
- logger.info('\n' + 'tracking disabled, tracking id found: ' + tracking_id);
985
- }
986
- } else {
987
- logger.debug('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
988
916
  }
989
917
 
990
- // show|hide cookie icon (should MOVED to Cookiebar ???)
918
+ // TODO: should MOVED to Cookiebar ???
919
+ // show|hide cookie icon
991
920
  if (j1.existsCookie(cookie_names.user_consent)) {
992
921
  // Display cookie icon
993
922
  logText = '\n' + 'show cookie icon';
@@ -1000,6 +929,7 @@ var j1 = (function () {
1000
929
  $('#quickLinksCookieButton').css('display', 'none');
1001
930
  }
1002
931
 
932
+ // TODO: should MOVED to ControlCenter Adapter ???
1003
933
  // -----------------------------------------------------------------
1004
934
  // show cc icon (currently NOT supported)
1005
935
  // $('#quickLinksControlCenterButton').css('display', 'block');
@@ -1020,6 +950,7 @@ var j1 = (function () {
1020
950
  $('#quickLinksSignInOutButton').css('display', 'block');
1021
951
  }
1022
952
 
953
+ // TODO: should MOVED to Themer ???
1023
954
  // jadams, 2021-07-25: hide|show themes menu on cookie consent
1024
955
  // (analysis|personalization) settings. BootSwatch is a 3rd party
1025
956
  // is using e.g GA. Because NO control is possible on 3rd parties,
@@ -1033,10 +964,7 @@ var j1 = (function () {
1033
964
  $("#themes_menu").show();
1034
965
  }
1035
966
 
1036
- // if the page requested contains an anchor element,
1037
- // do a smooth scroll to
1038
- j1.scrollTo();
1039
-
967
+ // detect if a loaded page has been chenged
1040
968
  if (user_session.previous_page !== user_session.current_page) {
1041
969
  logText = '\n' + 'page change detected';
1042
970
  logger.info(logText);
@@ -1052,59 +980,50 @@ var j1 = (function () {
1052
980
  current_user_data = j1.mergeData(user_session, user_state);
1053
981
  j1.core.navigator.updateSidebar(current_user_data);
1054
982
 
1055
- // Set|Log status
983
+ // set|log status
1056
984
  state = 'finished';
1057
985
  j1.setState(state);
1058
986
  logText = '\n' + 'state: ' + state;
1059
987
  logger.info(logText);
1060
988
  logText = '\n' + 'page finalized successfully';
1061
989
  logger.info(logText);
990
+
991
+ // do a (smooth) scroll if all nav elements ready
992
+ // -----------------------------------------------------------------
993
+ var dependencies_met_navigator_finished = setInterval(function() {
994
+ if (j1.adapter.navigator.getState() == 'finished') {
995
+ // if a page requested contains an anchor element, do a smooth scroll
996
+ j1.scrollTo();
997
+ clearInterval(dependencies_met_navigator_finished);
998
+ }
999
+ }, 25);
1062
1000
  }, flickerTimeout);
1063
1001
  });
1064
1002
  } else {
1065
1003
  // web mode
1004
+ // ---------------------------------------------------------------------
1066
1005
  setTimeout (function() {
1067
1006
  // j1.setState('finished');
1068
1007
  logger.info('\n' + 'state: finished');
1069
1008
  logger.info('\n' + 'page initialization: finished');
1070
1009
 
1071
- // Manage providers for personalization OptIn/Out (Comments|Ads)
1072
- if (!user_consent.personalization) {
1073
- logger.debug('\n' + 'disable comment provider: ' + comment_provider);
1074
- logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1075
- $('#leave-a-comment').remove();
1076
- if (comment_provider === 'disqus') {
1077
- $('#dsq-count-scr').remove();
1078
- $('#disqus-thread').remove();
1079
- }
1080
- if (comment_provider === 'hyvor') {
1081
- $('#hyvor-embed').remove();
1082
- $('#hyvor-talk-view').remove();
1083
- }
1084
- } else {
1085
- if (comments) {
1086
- logger.info('\n' + 'enable comment provider: ' + comment_provider);
1087
- $('#main-content').append('<h2 id="leave-a-comment" class="mt-4">{{comments_headline}}</h2>');
1088
- if (comment_provider === 'disqus') {
1089
- logger.info('\n' + 'load comment provider code: ' + comment_provider);
1090
- $('#main-content').append('<div id="disqus_thread"></div>');
1091
- $('body').append('<script async id="dsq-count-scr" src="//' + site_id + '.disqus.com/count.js"></script>');
1092
- j1.loadJS({
1093
- xhr_data_path: '/assets/data/' + comment_provider + '.js',
1094
- xhr_data_element: comment_provider
1095
- });
1096
- }
1097
- if (comment_provider === 'hyvor') {
1098
- $('body').append('<script> var HYVOR_TALK_WEBSITE = ' + site_id + '; var HYVOR_TALK_CONFIG = { url: false, id: false };');
1099
- $('#main-content').append('<div id="hyvor-talk-view"></div>');
1100
- $('body').append('<script async id="hyvor-embed" type="text/javascript" src="//talk.hyvor.com/web-api/embed.js"></script>');
1101
- }
1010
+ // display the page loaded
1011
+ $('#no_flicker').css('display', 'block');
1012
+
1013
+ // jadams, 2021-12-06: Check if access to cookies for this site failed.
1014
+ // Possibly, a third-party domain or an attacker tries to access it.
1015
+ if (checkCookies) {
1016
+ var j1Cookies = j1.findCookie('j1');
1017
+ if (!j1.existsCookie(cookie_names.user_state)) {
1018
+ logger.error('\n' + 'Access to cookie failed or cookie not found: ' + cookie_names.user_state);
1019
+ logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
1020
+ // redirect to error page: blocked content
1021
+ window.location.href = '/446.html';
1022
+ } else {
1023
+ logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
1102
1024
  }
1103
1025
  }
1104
1026
 
1105
- // display page
1106
- $('#no_flicker').css('display', 'block');
1107
-
1108
1027
  // jadams, 2021-11-19: test code for 'tapTarget' of 'materializeCss'
1109
1028
  // See:
1110
1029
  // https://stackoverflow.com/questions/49422111/opening-tap-target-in-materialize-css-for-2-seconds
@@ -1129,7 +1048,8 @@ var j1 = (function () {
1129
1048
  $(this).parents(".card-header").toggleClass("highlight");
1130
1049
  });
1131
1050
 
1132
- // no dropcaps if translation enabled
1051
+ // manage Dropcaps if translation is enabled|disabled
1052
+ // -------------------------------------------------------------------
1133
1053
  if (user_translate.translationEnabled) {
1134
1054
  logger.info('\n' + 'translation enabled: ' + user_translate.translationEnabled);
1135
1055
  logger.debug('\n' + 'skipped processing of dropcaps');
@@ -1139,31 +1059,6 @@ var j1 = (function () {
1139
1059
  j1.core.createDropCap();
1140
1060
  }
1141
1061
 
1142
- // add recommended title to hyvor iframe for SEO optimization (if loadad)
1143
- if (comment_provider === 'hyvor') {
1144
- var dependencies_met_load_finished = setInterval (function () {
1145
- if ($('#hyvor-talk-view').children().length) {
1146
- $('#hyvor-talk-iframe').prop('title', 'Hyvor talk iframe');
1147
- clearInterval(dependencies_met_load_finished);
1148
- }
1149
- }, 25);
1150
- }
1151
-
1152
- // NOTE: Placed tracking warning/info here because page may reloaded
1153
- // after cookie consent selection
1154
- if (user_consent.analysis) {
1155
- logger.info('\n' + 'tracking allowed, privacy settings for analysis: ' + user_consent.analysis);
1156
- if (tracking_enabled && !tracking_id_valid) {
1157
- logger.error('\n' + 'tracking enabled, but invalid tracking id found: ' + tracking_id);
1158
- } else if (tracking_enabled && tracking_id_valid) {
1159
- logger.info('\n' + 'tracking enabled, tracking id found: ' + tracking_id);
1160
- } else {
1161
- logger.info('\n' + 'tracking disabled, tracking id found: ' + tracking_id);
1162
- }
1163
- } else {
1164
- logger.debug('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
1165
- }
1166
-
1167
1062
  logger.info('\n' + 'mode detected: web');
1168
1063
  logger.info('\n' + 'hide signin icon');
1169
1064
  $('#quickLinksSignInOutButton').css('display', 'none');
@@ -1177,9 +1072,12 @@ var j1 = (function () {
1177
1072
  expires: 0
1178
1073
  });
1179
1074
 
1075
+ // TODO: should MOVED to ControlCenter Adapter ???
1076
+ // -----------------------------------------------------------------
1180
1077
  // show cc icon (currently NOT supported)
1181
1078
  // $('#quickLinksControlCenterButton').css('display', 'block');
1182
1079
 
1080
+ // TODO: should MOVED to Cookiebar ???
1183
1081
  // show|hide cookie icon
1184
1082
  if (j1.existsCookie(cookie_names.user_consent)) {
1185
1083
  // Display cookie icon
@@ -1193,6 +1091,7 @@ var j1 = (function () {
1193
1091
  $('#quickLinksCookieButton').css('display', 'none');
1194
1092
  }
1195
1093
 
1094
+ // TODO: should MOVED to Themer ???
1196
1095
  // jadams, 2021-07-25: hide|show themes menu on cookie consent
1197
1096
  // (analysis|personalization) settings. BootSwatch is a 3rd party
1198
1097
  // is using e.g GA. Because NO control is possible on 3rd parties,
@@ -1206,10 +1105,7 @@ var j1 = (function () {
1206
1105
  $("#themes_menu").show();
1207
1106
  }
1208
1107
 
1209
- // If the page requested contains an anchor element,
1210
- // do a smooth scroll
1211
- j1.scrollTo();
1212
-
1108
+ // detect if a loaded page has been chenged
1213
1109
  if (user_session.previous_page !== user_session.current_page) {
1214
1110
  logText = '\n' + 'page change detected';
1215
1111
  logger.info(logText);
@@ -1225,13 +1121,23 @@ var j1 = (function () {
1225
1121
  current_user_data = j1.mergeData(user_session, user_state);
1226
1122
  j1.core.navigator.updateSidebar(current_user_data);
1227
1123
 
1228
- // Set|Log status
1124
+ // set|log status
1229
1125
  state = 'finished';
1230
1126
  j1.setState(state);
1231
1127
  logText = '\n' + 'state: ' + state;
1232
1128
  logger.info(logText);
1233
1129
  logText = '\n' + 'page finalized successfully';
1234
1130
  logger.info(logText);
1131
+
1132
+ // do a (smooth) scroll if all nav elements ready
1133
+ // -------------------------------------------------------------------
1134
+ var dependencies_met_navigator_finished = setInterval(function() {
1135
+ if (j1.adapter.navigator.getState() == 'finished') {
1136
+ // if a page requested contains an anchor element, do a smooth scroll
1137
+ j1.scrollTo();
1138
+ clearInterval(dependencies_met_navigator_finished);
1139
+ }
1140
+ }, 25);
1235
1141
  }, flickerTimeout);
1236
1142
  }
1237
1143
  },
@@ -1324,9 +1230,9 @@ var j1 = (function () {
1324
1230
  var anchor = window.location.href.split('#')[1];
1325
1231
  var anchor_id = typeof anchor !== 'undefined' ? '#' + anchor : false;
1326
1232
  var scrollDuration = {{toccer_options.scrollSmoothDuration}};
1233
+ var scrollOffset = j1.getScrollOffset();
1327
1234
  var isSlider = false;
1328
1235
  var selector;
1329
- var scrollOffset;
1330
1236
 
1331
1237
  if (typeof anchor === 'undefined') {
1332
1238
  return false;
@@ -1334,15 +1240,13 @@ var j1 = (function () {
1334
1240
  return false;
1335
1241
  }
1336
1242
 
1337
- scrollOffset = j1.getScrollOffset();
1338
-
1339
1243
  // Check if the anchor is an slider/gallery element
1340
1244
  if (typeof anchor !== 'undefined') {
1341
- isSlider = anchor.includes('slide');
1245
+ isSlider = anchor.includes('slide');
1342
1246
  }
1343
1247
 
1344
1248
  if (anchor_id && anchor_id !== '#' && !isSlider) {
1345
- // scroll only, if an anchor is given with URL
1249
+ // scroll only, if an anchor is given with an URL
1346
1250
  selector = $(anchor_id);
1347
1251
  if (selector.length) {
1348
1252
  j1.core.scrollSmooth.scroll(anchor_id, {
@@ -1618,30 +1522,33 @@ var j1 = (function () {
1618
1522
  // -------------------------------------------------------------------------
1619
1523
  writeCookie: function (options /*name, data, [path, expires, domain, samesite, http_only, secure]*/) {
1620
1524
  var date = new Date();
1621
- var timestamp_now = date.toISOString()
1525
+ var timestamp_now = date.toISOString();
1622
1526
  var url = new liteURL(window.location.href);
1623
1527
  var baseUrl = url.origin;;
1624
1528
  var hostname = url.hostname;
1625
- var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
1529
+ var auto_domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
1530
+ var auto_secure = (url.protocol.includes('https')) ? true : false;
1626
1531
  var stringifiedAttributes = '';
1627
1532
  var cookie_data = {};
1628
1533
  var data_json;
1629
1534
  var data_encoded;
1630
- var expires;
1631
- var domainAttribute;
1632
1535
 
1633
1536
  var defaults = {
1634
- data: {},
1635
- name: '',
1636
- path: '{{cookie_options.path}}',
1637
- expires: '{{cookie_options.expires}}',
1638
- domain: '{{cookie_options.domain}}',
1639
- samesite: '{{cookie_options.same_site}}',
1640
- http_only: '{{cookie_options.http_only}}',
1641
- secure: '{{cookie_options.secure}}'
1537
+ path: '{{cookie_options.path}}',
1538
+ expires: '{{cookie_options.expires}}',
1539
+ domain: ('{{cookie_options.domain}}' === 'false') ? false : '{{cookie_options.domain}}',
1540
+ samesite: '{{cookie_options.same_site}}',
1541
+ http_only: ('{{cookie_options.http_only}}' === 'true'),
1542
+ secure: ('{{cookie_options.secure}}' === 'false') ? false : '{{cookie_options.secure}}'
1642
1543
  };
1643
1544
  var settings = $.extend(defaults, options);
1644
1545
 
1546
+ // Failsafe: if 'None' is given for samesite in non-secure environments
1547
+ // -----------------------------------------------------------------------
1548
+ if (settings.samesite == 'None' && !settings.secure) {
1549
+ settings.samesite = 'Lax';
1550
+ }
1551
+
1645
1552
  cookie_data.timestamp = timestamp_now;
1646
1553
 
1647
1554
  if (j1.existsCookie(settings.name)) {
@@ -1655,6 +1562,8 @@ var j1 = (function () {
1655
1562
  data_encoded = window.btoa(data_json);
1656
1563
  }
1657
1564
 
1565
+ // collect the cookie attributes
1566
+ // -----------------------------------------------------------------------
1658
1567
  stringifiedAttributes += '; ' + 'Path=' + settings.path;
1659
1568
 
1660
1569
  if (settings.expires > 0) {
@@ -1665,20 +1574,25 @@ var j1 = (function () {
1665
1574
  stringifiedAttributes += '; ' + 'SameSite=' + settings.samesite;
1666
1575
 
1667
1576
  // set domain used by cookies
1668
- if (settings.domain == 'auto') {
1669
- domainAttribute = domain;
1670
- stringifiedAttributes += '; ' + 'Domain=' + domainAttribute;
1671
- } else {
1672
- domainAttribute = '';
1673
- stringifiedAttributes += '; ' + 'Domain=' + domainAttribute;
1577
+ if (settings.domain) {
1578
+ if (settings.domain == 'auto') {
1579
+ stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
1580
+ } else {
1581
+ stringifiedAttributes += '; ' + 'Domain=' + settings.domain;
1582
+ }
1674
1583
  }
1675
1584
 
1676
- if (settings.secure == 'true') {
1677
- stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
1585
+ // set secure attribute
1586
+ if (settings.secure) {
1587
+ if (settings.secure == 'auto') {
1588
+ stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
1589
+ } else {
1590
+ stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
1591
+ }
1678
1592
  }
1679
1593
 
1680
1594
  // write the cookie
1681
- // document.cookie = settings.name + '=' + content + '; path=' + settings.path + '; domain=' + settings.domain + '; ' + 'SameSite=' + settings.samesite + '; secure';
1595
+ // -----------------------------------------------------------------------
1682
1596
  document.cookie = settings.name + '=' + data_encoded + stringifiedAttributes;
1683
1597
 
1684
1598
  if (j1.existsCookie(settings.name)) {
@@ -1686,14 +1600,13 @@ var j1 = (function () {
1686
1600
  } else {
1687
1601
  return false;
1688
1602
  }
1689
-
1690
1603
  },
1691
1604
 
1692
1605
  // -------------------------------------------------------------------------
1693
1606
  // findCookie (Vanilla JS)
1694
- // Search for cookies (names) in the page header that matches a given
1695
- // name. Cookie name can be give as full name, like 'j1.user.state', or
1696
- // as a partial like 'j1'
1607
+ // Search for cookies (by name) in the page header that matches a given
1608
+ // (name) string. A cookie name can be given as full name, like 'j1.user.state',
1609
+ // or as a partial like 'j1'
1697
1610
  // Returns all names found as an array.
1698
1611
  // -------------------------------------------------------------------------
1699
1612
  // See: https://stackoverflow.com/questions/52287989/javascript-cookie-remove-or-delete-with-regex-regular-expression
@@ -1709,31 +1622,51 @@ var j1 = (function () {
1709
1622
  // removeCookie (Vanilla JS)
1710
1623
  // -------------------------------------------------------------------------
1711
1624
  removeCookie: function (options /*name, [path, domain]*/) {
1712
- var domainAttribute;
1625
+ var url = new liteURL(window.location.href);
1626
+ var baseUrl = url.origin;;
1627
+ var hostname = url.hostname;
1628
+ var auto_domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
1629
+ var auto_secure = (url.protocol.includes('https')) ? true : false;
1630
+ var stringifiedAttributes = '';
1713
1631
 
1714
1632
  var defaults = {
1715
1633
  path: '{{cookie_options.path}}',
1716
- expires: '{{cookie_options.expires}}',
1717
- domain: '{{cookie_options.domain}}',
1634
+ expires: 'Thu, 01 Jan 1970 00:00:00 UTC', // clear cookies by settting the expiry date in the PAST
1635
+ domain: ('{{cookie_options.domain}}' === 'false') ? false : '{{cookie_options.domain}}',
1718
1636
  samesite: '{{cookie_options.same_site}}',
1719
- http_only: '{{cookie_options.http_only}}',
1720
- secure: '{{cookie_options.secure}}'
1637
+ http_only: ('{{cookie_options.http_only}}' === 'true'),
1638
+ secure: ('{{cookie_options.secure}}' === 'false') ? false : '{{cookie_options.secure}}'
1721
1639
  };
1722
- var cookieExists;
1640
+ var settings = $.extend(defaults, options);
1723
1641
 
1724
- var settings = $.extend(defaults, options);
1642
+ // collect the cookie attributes
1643
+ // -----------------------------------------------------------------------
1644
+ stringifiedAttributes += '; ' + 'Path=' + settings.path;
1645
+ stringifiedAttributes += '; ' + 'SameSite=' + settings.samesite;
1646
+ stringifiedAttributes += '; ' + 'Expires=' + settings.expires;
1725
1647
 
1726
1648
  // set domain used by cookies
1727
- if (settings.domain == 'auto') {
1728
- domainAttribute = domain ;
1729
- } else {
1730
- // domainAttribute = hostname;
1731
- domainAttribute = '';
1649
+ if (settings.domain) {
1650
+ if (settings.domain == 'auto') {
1651
+ stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
1652
+ } else if (typeof settings.domain == 'string') {
1653
+ stringifiedAttributes += '; ' + 'Domain=' + settings.domain;
1654
+ }
1732
1655
  }
1733
1656
 
1657
+ // set secure attribute
1658
+ if (settings.secure) {
1659
+ if (settings.secure == 'auto') {
1660
+ stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
1661
+ } else {
1662
+ stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
1663
+ }
1664
+ }
1665
+
1666
+ // clear|remove the cookie if exists
1667
+ // -----------------------------------------------------------------------
1734
1668
  if (j1.findCookie(settings.name)) {
1735
- // clear cookie CONTENT and set expiry date in the PAST
1736
- document.cookie = settings.name + '=; Domain=' + domainAttribute + '; Expires=Thu, 01 Jan 1970 00:00:00 UTC; Path=/;';
1669
+ document.cookie = settings.name + '=;' + stringifiedAttributes;
1737
1670
  return true;
1738
1671
  } else {
1739
1672
  return false;
@@ -1748,49 +1681,71 @@ var j1 = (function () {
1748
1681
  // automatically by the browser if the last session (browser tab|window)
1749
1682
  // is closed.
1750
1683
  // -------------------------------------------------------------------------
1751
- // expireCookie() returns 'true' if cookie is set successfully,
1752
- // otherwise 'false' (e.g NOT found)
1684
+ // expireCookie() returns 'true' if cookie is set successfully
1685
+ // (to session), otherwise 'false' (e.g. NOT found)
1753
1686
  // -------------------------------------------------------------------------
1754
1687
  // NOTE:
1755
1688
  // See: https://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript
1689
+ //
1756
1690
  // NOTE:
1757
1691
  // There is NO way you could get a trace of Path, Domain and other
1758
1692
  // attributes of cookies as they are only read by browsers and NOT shown
1759
- // to JavaScript. For that reason, attributes needs to be set explicitly.
1693
+ // to JavaScript. For that reason, attributes needs to be set explicitly
1694
+ // to already KNOWN values.
1695
+ //
1760
1696
  // -------------------------------------------------------------------------
1761
1697
  expireCookie: function (options /*name [,path, samesite, secure]*/) {
1762
- var url = new liteURL(window.location.href);
1763
- var baseUrl = url.origin;;
1764
- var hostname = url.hostname;
1765
- var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
1766
- var domainAttribute;
1698
+ var url = new liteURL(window.location.href);
1699
+ var baseUrl = url.origin;;
1700
+ var hostname = url.hostname;
1701
+ var auto_domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
1702
+ var auto_secure = (url.protocol.includes('https')) ? true : false;
1703
+ var stringifiedAttributes = '';
1767
1704
 
1768
1705
  var defaults = {
1769
1706
  path: '{{cookie_options.path}}',
1770
1707
  expires: '{{cookie_options.expires}}',
1771
- domain: '{{cookie_options.domain}}',
1708
+ domain: ('{{cookie_options.domain}}' === 'false') ? false : '{{cookie_options.domain}}',
1772
1709
  samesite: '{{cookie_options.same_site}}',
1773
- http_only: '{{cookie_options.http_only}}',
1774
- secure: '{{cookie_options.secure}}'
1710
+ http_only: ('{{cookie_options.http_only}}' === 'true'),
1711
+ secure: ('{{cookie_options.secure}}' === 'false') ? false : '{{cookie_options.secure}}'
1775
1712
  };
1776
1713
  var settings = $.extend(defaults, options);
1777
1714
 
1715
+ // collect the cookie attributes
1716
+ // -----------------------------------------------------------------------
1717
+ stringifiedAttributes += '; ' + 'Path=' + settings.path;
1718
+ stringifiedAttributes += '; ' + 'SameSite=' + settings.samesite;
1719
+
1778
1720
  // set domain used by cookies
1779
- if (settings.domain == 'auto') {
1780
- domainAttribute = domain ;
1781
- } else {
1782
- // domainAttribute = hostname;
1783
- domainAttribute = '';
1721
+ if (settings.domain) {
1722
+ if (settings.domain == 'auto') {
1723
+ stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
1724
+ } else if (typeof settings.domain == 'string') {
1725
+ if (settings.domain !== 'false') {
1726
+ stringifiedAttributes += '; ' + 'Domain=' + settings.domain;
1727
+ }
1728
+ }
1729
+ }
1730
+
1731
+ // set secure attribute
1732
+ if (settings.secure) {
1733
+ if (settings.secure == 'auto') {
1734
+ stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
1735
+ } else {
1736
+ stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
1737
+ }
1784
1738
  }
1785
1739
 
1786
- var dc = document.cookie; // all cookies in page
1787
- var end = dc.length; // default to end of the string
1788
- var prefix = settings.name + '='; // search string for the cookie name given
1740
+ var dc = document.cookie; // all cookies in page
1741
+ var end = dc.length; // default to end of the string
1742
+ var prefix = settings.name + '='; // search string for the cookie name given
1789
1743
  var begin = dc.indexOf('; ' + prefix);
1790
1744
  var content = '';
1791
1745
 
1792
1746
  // collect the cookie content
1793
- //
1747
+ // -----------------------------------------------------------------------
1748
+
1794
1749
  // found, and not in the first position
1795
1750
  if (begin !== -1) {
1796
1751
  // exclude the "; "
@@ -1808,20 +1763,17 @@ var j1 = (function () {
1808
1763
  end = dc.indexOf(';', begin);
1809
1764
  }
1810
1765
 
1811
- // expire cookie to session
1766
+ // write the cookie content, expire to session
1767
+ // -----------------------------------------------------------------------
1812
1768
  content = decodeURI(dc.substring(begin + prefix.length, end) ).replace(/"/g, '');
1813
- if (settings.secure == 'true') {
1814
- document.cookie = settings.name + '=' + content +'; Path=' + settings.path + '; ' + 'SameSite=' + settings.samesite + '; ' + 'Domain=' + domainAttribute + '; Secure' + '; ';
1815
- } else {
1816
- document.cookie = settings.name + '=' + content +'; Path=' + settings.path + '; ' + 'SameSite=' + settings.samesite + '; ' + 'Domain=' + domainAttribute + '; ';
1817
- }
1769
+ document.cookie = settings.name + '=' + content + stringifiedAttributes;
1818
1770
 
1819
1771
  return true;
1820
1772
  },
1821
1773
 
1822
1774
  // -------------------------------------------------------------------------
1823
1775
  // existsCookie (Vanilla JS)
1824
- // returns true if a given cookie exists
1776
+ // returns true if a cookie of given name exists
1825
1777
  // -------------------------------------------------------------------------
1826
1778
  existsCookie: function (name) {
1827
1779
  var dc = document.cookie;
@@ -1831,6 +1783,9 @@ var j1 = (function () {
1831
1783
  var cookieExists = false;
1832
1784
  var cookieContent = '';
1833
1785
 
1786
+ // collect the cookie content
1787
+ // -----------------------------------------------------------------------
1788
+
1834
1789
  // found, and not in first position
1835
1790
  if (begin !== -1) {
1836
1791
  // exclude the "; "
@@ -1848,6 +1803,8 @@ var j1 = (function () {
1848
1803
  end = dc.indexOf(';', begin);
1849
1804
  }
1850
1805
 
1806
+ // check if the cookie exists
1807
+ // -----------------------------------------------------------------------
1851
1808
  cookieContent = decodeURI(dc.substring(begin + prefix.length, end) ).replace(/"/g, '');
1852
1809
  cookieExists = cookieContent.length ? true : false;
1853
1810