j1-template 2023.3.0 → 2023.3.1

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 (160) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/layout_metadata_generator.html +0 -3
  3. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  4. data/assets/data/banner.html +2 -2
  5. data/assets/data/masonry.html +1 -1
  6. data/assets/themes/j1/adapter/js/advertising.js +302 -96
  7. data/assets/themes/j1/adapter/js/j1.js +2 -1
  8. data/assets/themes/j1/adapter/js/themer.js +47 -16
  9. data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +104 -30
  10. data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +1 -1
  11. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +19 -5
  12. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  13. data/lib/j1/version.rb +1 -1
  14. data/lib/starter_web/Gemfile +2 -2
  15. data/lib/starter_web/README.md +5 -5
  16. data/lib/starter_web/_config.yml +2 -2
  17. data/lib/starter_web/_data/blocks/defaults/footer.yml +1 -1
  18. data/lib/starter_web/_data/blocks/footer.yml +3 -0
  19. data/lib/starter_web/_data/layouts/home.yml +29 -0
  20. data/lib/starter_web/_data/modules/advertising.yml +120 -42
  21. data/lib/starter_web/_data/modules/defaults/advertising.yml +1 -1
  22. data/lib/starter_web/_data/modules/masonry.yml +2 -2
  23. data/lib/starter_web/_data/modules/navigator_menu.yml +190 -148
  24. data/lib/starter_web/_data/modules/slick.yml +47 -86
  25. data/lib/starter_web/_data/resources.yml +2 -2
  26. data/lib/starter_web/_data/templates/feed.xml +1 -1
  27. data/lib/starter_web/_includes/attributes.0.asciidoc +626 -0
  28. data/lib/starter_web/_includes/attributes.asciidoc +26 -24
  29. data/lib/starter_web/_includes/google/static/google_ad_5128488466.html +19 -0
  30. data/lib/starter_web/_includes/google/static/google_ad_7284712660.html +19 -0
  31. data/lib/starter_web/_includes/google/templates/google_ads.html +55 -0
  32. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  33. data/lib/starter_web/assets/images/badges/configBinder.jpg +0 -0
  34. data/lib/starter_web/assets/images/badges/docsBinder.jpg +0 -0
  35. data/lib/starter_web/assets/images/badges/notebookBinder.jpg +0 -0
  36. data/lib/starter_web/assets/images/badges/scaleable/configBinder.svg +1 -1
  37. data/lib/starter_web/assets/images/badges/scaleable/docsBinder.svg +1 -1
  38. data/lib/starter_web/assets/images/badges/scaleable/myBinder.svg +1 -1
  39. data/lib/starter_web/assets/images/badges/scaleable/notebookBinder.svg +1 -1
  40. data/lib/starter_web/assets/images/icons/hyvor-talk/jpg/hyvor-logo.512x512.jpg +0 -0
  41. data/lib/starter_web/assets/images/icons/hyvor-talk/png/hyvor-logo.24x24.jpg +0 -0
  42. data/lib/starter_web/assets/images/icons/hyvor-talk/scalable/hyvor-logo.svg +1 -1
  43. data/lib/starter_web/assets/images/icons/j1/jpg/j1-256x256.jpg +0 -0
  44. data/lib/starter_web/assets/images/icons/j1/jpg/j1-512x512.jpg +0 -0
  45. data/lib/starter_web/assets/images/icons/j1/jpg/j1-64x64.jpg +0 -0
  46. data/lib/starter_web/assets/images/icons/j1/png/j1-256x256.png +0 -0
  47. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.jpg +0 -0
  48. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.jpg.png +0 -0
  49. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.png +0 -0
  50. data/lib/starter_web/assets/images/icons/j1/png/j1-64x64.png +0 -0
  51. data/lib/starter_web/assets/images/icons/j1/scalable/j1.svg +1 -1
  52. data/lib/starter_web/assets/images/modules/attics/1920x1280/brigitta-schneiter.jpg +0 -0
  53. data/lib/starter_web/assets/images/modules/icons/j1/scalable/j1.svg +1 -1
  54. data/lib/starter_web/assets/images/pages/asciidoc_skeletons/example-pdf-screenshot.jpg +0 -0
  55. data/lib/starter_web/assets/images/pages/core_web_vitals/200-create-a-link-1.jpg +0 -0
  56. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best.jpg +0 -0
  57. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best_full.jpg +0 -0
  58. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.jpg +0 -0
  59. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  60. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  61. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  62. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  63. data/lib/starter_web/assets/images/posts/featured/dynamic-web-access.jpg +0 -0
  64. data/lib/starter_web/assets/images/posts/featured/jamstack-generators.jpg +0 -0
  65. data/lib/starter_web/assets/images/posts/featured/jekyll.1200x400.jpg +0 -0
  66. data/lib/starter_web/assets/images/posts/featured/jekyll.jpg +0 -0
  67. data/lib/starter_web/assets/images/posts/featured/static-web-access.jpg +0 -0
  68. data/lib/starter_web/assets/images/promo/home/screenshot.jpg +0 -0
  69. data/lib/starter_web/assets/images/promo/jekyll/jekyll-faq.jpg +0 -0
  70. data/lib/starter_web/assets/images/promo/jekyll/jekyll-generator.jpg +0 -0
  71. data/lib/starter_web/assets/images/promo/jekyll/jekyll-generator.png +0 -0
  72. data/lib/starter_web/assets/images/promo/jekyll/jekyll-og.png +0 -0
  73. data/lib/starter_web/assets/images/promo/jekyll/scalable/jekyll-faq.psd +0 -0
  74. data/lib/starter_web/collections/_biography/a-life-in-questions.adoc +1 -1
  75. data/lib/starter_web/collections/_biography/becoming.adoc +1 -1
  76. data/lib/starter_web/collections/_biography/born-to-run.adoc +1 -1
  77. data/lib/starter_web/collections/_biography/forty-autumns.adoc +1 -1
  78. data/lib/starter_web/collections/_biography/not-dead-yet.adoc +1 -1
  79. data/lib/starter_web/collections/_biography/princess-diarist-the.adoc +1 -1
  80. data/lib/starter_web/collections/_biography/when-breath-becomes-air.adoc +1 -1
  81. data/lib/starter_web/collections/_fantasy/harry-potter-deathly-hallows.adoc +1 -1
  82. data/lib/starter_web/collections/_fantasy/harry-potter-philosophers-stone.adoc +1 -1
  83. data/lib/starter_web/collections/_fantasy/mistborn-trilogy.adoc +26 -1
  84. data/lib/starter_web/collections/_fantasy/ready-player-one.adoc +1 -1
  85. data/lib/starter_web/collections/_fantasy/sword-of-destiny.adoc +17 -2
  86. data/lib/starter_web/collections/_fantasy/terry-pratchet-diary.adoc +24 -1
  87. data/lib/starter_web/collections/_romance/{breath-of-snow-and-ashes-a.adoc → breath-of-snow-and-ashes.adoc} +13 -1
  88. data/lib/starter_web/collections/_romance/dressmaker-the.adoc +13 -1
  89. data/lib/starter_web/collections/_romance/fiery-cross-the.adoc +1 -1
  90. data/lib/starter_web/collections/_romance/it-ends-with-us.adoc +1 -1
  91. data/lib/starter_web/collections/_romance/outlander-novel.adoc +1 -1
  92. data/lib/starter_web/collections/_romance/virgins-outlander-short-story.adoc +1 -1
  93. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +4 -2
  94. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +4 -1
  95. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +5 -3
  96. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +4 -1
  97. data/lib/starter_web/collections/posts/public/featured/_posts/_includes/attributes.asciidoc +2 -2
  98. data/lib/starter_web/index.html +0 -9
  99. data/lib/starter_web/package.json +1 -1
  100. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/attributes.asciidoc +1 -1
  101. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/100_converter/112_getting_started.asciidoc +1 -1
  102. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/200_themes/212_values.asciidoc +4 -4
  103. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/attributes.asciidoc +1 -1
  104. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/attributes.asciidoc +2 -2
  105. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.0.asciidoc +112 -0
  106. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +2 -2
  107. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_rouge.asciidoc +1 -1
  108. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +28 -4
  109. data/lib/starter_web/pages/public/learn/where_to_go.adoc +11 -13
  110. data/lib/starter_web/pages/public/{learn → tools}/cheatsheet/gem.adoc +5 -5
  111. data/lib/starter_web/pages/public/{learn → tools}/cheatsheet/git.adoc +14 -14
  112. data/lib/starter_web/pages/public/{learn → tools}/cheatsheet/j1.adoc +1 -1
  113. data/lib/starter_web/pages/public/{learn → tools}/cheatsheet/yaml.adoc +1 -1
  114. data/lib/starter_web/pages/public/{previewer → tools/previewer}/preview_bootstrap_theme.adoc +1 -1
  115. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  116. data/lib/starter_web/utilsrv/package.json +1 -1
  117. metadata +51 -51
  118. data/assets/themes/j1/modules/advertising/js/adInitializer.js +0 -160
  119. data/lib/starter_web/assets/images/icons/j1/j1-256x256.gif +0 -0
  120. data/lib/starter_web/assets/images/pages/asciidoc_skeletons/example-pdf-screenshot.png +0 -0
  121. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best.png +0 -0
  122. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best_full.png +0 -0
  123. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
  124. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
  125. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
  126. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
  127. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
  128. data/lib/starter_web/assets/images/pages/nbinteract/binderhub-architecture.jpg +0 -0
  129. data/lib/starter_web/assets/images/pages/nbinteract/jupyterlab-architecture.jpg +0 -0
  130. data/lib/starter_web/assets/images/pages/nbinteract/mandelbrot-menge-1920x1200.jpg +0 -0
  131. data/lib/starter_web/assets/images/pages/nbinteract/mandelbrot-menge.png +0 -0
  132. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi-textbook-example.jpg +0 -0
  133. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_bar.jpg +0 -0
  134. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_hist.jpg +0 -0
  135. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_line.jpg +0 -0
  136. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_multiple_choice.jpg +0 -0
  137. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_scatter.jpg +0 -0
  138. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_scatter_drag.jpg +0 -0
  139. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_short_answer.jpg +0 -0
  140. data/lib/starter_web/assets/images/pages/nbinteract/nbi-textbook-example.jpg +0 -0
  141. data/lib/starter_web/assets/images/posts/featured/dynamic-web-access.png +0 -0
  142. data/lib/starter_web/assets/images/posts/featured/jamstack-generators.png +0 -0
  143. data/lib/starter_web/assets/images/posts/featured/jekyll.1200x400.png +0 -0
  144. data/lib/starter_web/assets/images/posts/featured/jekyll.png +0 -0
  145. data/lib/starter_web/assets/images/posts/featured/post-1.jpg +0 -0
  146. data/lib/starter_web/assets/images/posts/featured/post-2.jpg +0 -0
  147. data/lib/starter_web/assets/images/posts/featured/post-3.jpg +0 -0
  148. data/lib/starter_web/assets/images/posts/featured/post-4.jpg +0 -0
  149. data/lib/starter_web/assets/images/posts/featured/post-5.jpg +0 -0
  150. data/lib/starter_web/assets/images/posts/featured/static-web-access.png +0 -0
  151. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-01-organize-your-life.adoc +0 -118
  152. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-02-organize-your-life.adoc +0 -118
  153. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-03-organize-your-life.adoc +0 -118
  154. data/lib/starter_web/collections/posts/public/series/_posts/2022-09-01-organize-your-life.adoc +0 -117
  155. data/lib/starter_web/collections/posts/public/series/_posts/2022-09-02-organize-your-life.adoc +0 -117
  156. /data/lib/starter_web/assets/images/badges/{configBinder.png → png/configBinder.png} +0 -0
  157. /data/lib/starter_web/assets/images/badges/{docsBinder.png → png/docsBinder.png} +0 -0
  158. /data/lib/starter_web/assets/images/badges/{notebookBinder.png → png/notebookBinder.png} +0 -0
  159. /data/lib/starter_web/assets/images/icons/hyvor-talk/{hyvor-logo.24x24.png → png/hyvor-logo.24x24.png} +0 -0
  160. /data/lib/starter_web/assets/images/icons/hyvor-talk/{hyvor-logo.512x512.png → png/hyvor-logo.512x512.png} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71fc85b1224ecc67e1c96405f9c0ca10b39c45ee73135580cf1c6f9decee2d89
4
- data.tar.gz: 6dc9eb1d7c92b452f14341e3e59eeb112881979bcef5ea495189f2f1f54a2818
3
+ metadata.gz: e4e546edd3d0fb0df50cb026c9a0fbfecefe67f9e27ab2b3e1197fede65c9c6a
4
+ data.tar.gz: 4e9f703964a634cdd1c6df8f60733e12a0f5bfe95d92936ba473e4828bc9419b
5
5
  SHA512:
6
- metadata.gz: 3c8e7cd60c780f05905892bdd81aeddfc9ae4c3918c17c0456a026e2ac881311f51941ebebfaadab14079cea13c6f1b67f6ce131f698c0567ab51c0f1a551555
7
- data.tar.gz: 21c8705b2ca83c899addb32fc2bc08525f7064a84a99497d6aa1a3fb1d4d925f79dbf567ded619674c36396119fcb6570c6548dc984c0a8555ee34f102b77548
6
+ metadata.gz: 8b8a9a94213f6f7d4cbb096fc978d10d016133dcbe245da037abacabb31c6b0bc6b82aac08e0e65f28d502bc0c2e35c678fb08f1d92719c8902712c092600769
7
+ data.tar.gz: c7c8bd55790f676f51cff47bf5e42949c48e6a398527730f0f60d3b0b83be13d8c667e6abf4af71e5d3d8ccebd3893299449210c8dcc9b86c232de07fc2cd0e0
@@ -62,9 +62,6 @@
62
62
  <!-- [INFO ] [j1.layout.meta_data_generator.html ] [ page|content encoding ] -->
63
63
  <meta http-equiv="Content-Type" content="text/html;charset={{site.coding}}">
64
64
 
65
- <!-- [INFO ] [j1.layout.meta_data_generator.html ] [ enable Google experimental setting (prevent warnings) ] -->
66
- <meta http-equiv="Permissions-Policy" content="interest-cohort=()">
67
-
68
65
  <!-- [INFO ] [j1.layout.meta_data_generator.html ] [ added for MS Edge Browser ] -->
69
66
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
70
67
 
@@ -74,7 +74,7 @@
74
74
  <h4 id="blog_series_list" class="notoc mt-2 mr-2 mb-4">{{series_heading}}</h4>
75
75
  <ul class="side-nav" style="width: calc(100% - 15px)">
76
76
  {% endcapture %}
77
- {% for post in site.posts reversed %}
77
+ {% for post in site.posts %}
78
78
  {% if post.series == page.series %}
79
79
  {% assign count = count | plus: 1 %}
80
80
  {% if post.url == page.url %}
@@ -262,8 +262,8 @@ exclude_from_search: true
262
262
  <img
263
263
  class="sticker-image"
264
264
  src="/assets/images/sticker/600x600/sticker-new-version.png"
265
- alt="Get new version 2023.3.0"
266
- title="Get new version 2023.3.0"
265
+ alt="Get new version 2023.3.1"
266
+ title="Get new version 2023.3.1"
267
267
  style="width: 140px; height: 120px;"
268
268
  >
269
269
  </a>
@@ -249,7 +249,7 @@ exclude_from_search: true
249
249
  {% endif %}
250
250
  <div class="article-caption">
251
251
  <div class="article-caption-heading">
252
- <a class="card-link {{translate}}" href="{{article.url}}">{{article.title}}</a>
252
+ <a class="article-link {{translate}}" href="{{article.url}}">{{article.title}}</a>
253
253
  </div>
254
254
  <div class="article-caption-subheading text-muted">{{article.tags[0]}}</div>
255
255
  </div>
@@ -6,7 +6,7 @@ regenerate: true
6
6
 
7
7
  {% comment %}
8
8
  # -----------------------------------------------------------------------------
9
- # ~/assets/themes/j1/adapter/js/advertising.js
9
+ # ~/assets/theFdames/j1/adapter/js/advertising.js
10
10
  # Liquid template to adapt advertising plugin
11
11
  #
12
12
  # Product/Info:
@@ -55,6 +55,7 @@ regenerate: true
55
55
  -------------------------------------------------------------------------------- {% endcomment %}
56
56
  {% assign advertising = advertising_options.enabled %}
57
57
  {% assign advertising_provider = advertising_options.provider %}
58
+ {% assign layout = page.layout %}
58
59
 
59
60
  {% comment %} Detect prod mode
60
61
  -------------------------------------------------------------------------------- {% endcomment %}
@@ -90,15 +91,19 @@ j1.adapter.advertising = (function (j1, window) {
90
91
 
91
92
  {% comment %} Set global variables
92
93
  -------------------------------------------------------------------------------- {% endcomment %}
93
- var environment = '{{environment}}';
94
- var date = new Date();
95
- var timestamp_now = date.toISOString();
96
- var gasScript = document.createElement('script');
97
- var gasDiv = document.createElement('div');
98
- var gasIns = document.createElement('ins');
99
- var adInitializerScript = document.createElement('script');
94
+ var environment = '{{environment}}';
95
+ var production = (environment.includes('prod') ? true : false);
96
+ var development = (environment.includes('dev') ? true : false);
97
+ var date = new Date();
98
+ var timestamp_now = date.toISOString();
99
+ var gasScript = document.createElement('script');
100
+ var gasDiv = document.createElement('div');
101
+ var gasIns = document.createElement('ins');
102
+ var adInitializerScript = document.createElement('script');
103
+ var advertisingProvider = 'Google Adsense';
104
+ var layout;
100
105
  var advertisingDefaults;
101
- var aadvertisingSettings;
106
+ var advertisingSettings;
102
107
  var advertisingOptions;
103
108
  var frontmatterOptions;
104
109
  var autoHideOnUnfilled;
@@ -112,9 +117,8 @@ var baseUrl;
112
117
  var hostname;
113
118
  var cookie_names;
114
119
  var user_consent;
115
- var advertisingProvider;
116
120
  var publisherID;
117
- var validPublisherID;
121
+ var validpublisherID;
118
122
  var _this;
119
123
  var logger;
120
124
  var logText;
@@ -149,79 +153,111 @@ var logText;
149
153
  hostname = url.hostname;
150
154
 
151
155
  // create settings object from frontmatter
156
+ //
152
157
  frontmatterOptions = options != null ? $.extend({}, options) : {};
153
158
 
159
+ // initialze advertisingOptions
160
+ //
154
161
  advertisingDefaults = $.extend({}, {{advertising_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
155
- aadvertisingSettings = $.extend({}, {{advertising_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
156
- advertisingOptions = $.extend(true, {}, advertisingDefaults, aadvertisingSettings);
157
-
162
+ advertisingSettings = $.extend({}, {{advertising_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
163
+ advertisingOptions = $.extend(true, {}, advertisingDefaults, advertisingSettings, frontmatterOptions);
164
+ layout = advertisingOptions.layout;
165
+ publisherID = advertisingOptions.google.publisherID;
166
+ validpublisherID = (publisherID.includes('pub-')) ? true : false;
158
167
  autoHideOnUnfilled = advertisingOptions.google.autoHideOnUnfilled;
159
168
  addBorderOnUnfilled = advertisingOptions.google.addBorderOnUnfilled;
160
169
  checkTrackingProtection = advertisingOptions.google.checkTrackingProtection;
161
170
  showErrorPageOnBlocked = advertisingOptions.google.showErrorPageOnBlocked;
162
171
 
172
+ // run initialization on 'contentVisible'
173
+ //
163
174
  var dependencies_met_page_ready = setInterval (function (options) {
164
- var pageState = $('#no_flicker').css("display");
165
- var pageVisible = (pageState == 'block') ? true: false;
166
- var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
175
+ var contentState = $('#content').css("display");
176
+ var contentVisible = (contentState == 'block') ? true: false;
177
+
178
+ if (j1.getState() === 'finished' && contentVisible) {
167
179
 
168
- // if (j1.getState() === 'finished' && pageVisible && atticFinished) {
169
- if (j1.getState() === 'finished' && pageVisible) {
180
+ {% comment %} detect|load code if 'advertising' is 'enabled'
181
+ ------------------------------------------------------------------------ {% endcomment %}
170
182
  {% if advertising %}
171
183
 
172
- var advertisingProvider = 'Google Adsense';
173
- var providerID = '{{advertising_options.google.publisherID}}';
174
- var validProviderID = (providerID.includes('pub-')) ? true : false;
175
- if (!validProviderID) {
176
- logger.warn('\n' + 'invalid publisher id: ' + providerID);
177
- logger.info('\n' + 'module disabled' );
184
+ _this.ad_initializer();
185
+
186
+ if (!validpublisherID) {
187
+ if (development) {
188
+ logger.warn('\n' + 'invalid publisher id: ' + publisherID);
189
+ logger.info('\n' + 'module disabled' );
190
+ }
178
191
  clearInterval(dependencies_met_page_ready);
179
192
  return false;
180
193
  }
181
194
 
182
195
  {% case advertising_provider %}
183
196
  {% when "google" %}
184
- // [INFO ] [j1.adapter.advertising ] [ place provider: Google Adsense ]
197
+ // [INFO ] [j1.adapter.advertising ] [ place provider: Google Adsense ]
185
198
 
186
199
  // initialize state flag
200
+ //
187
201
  _this.setState('started');
188
- logger.debug('\n' + 'state: ' + _this.getState());
202
+ if (development) {
203
+ logger.debug('\n' + 'state: ' + _this.getState());
204
+ }
189
205
 
190
206
  if (user_consent.personalization) {
191
- logger.info('\n' + 'adsense api is being initialized');
192
-
193
- publisherID = advertisingOptions.google.publisherID;
194
- advertisingProvider = 'Google Adsense';
195
- validPublisherID = (publisherID.includes('your')) ? false : true;
207
+ if (development) {
208
+ logger.info('\n' + 'adsense api is being initialized');
209
+ }
196
210
 
197
- if (!validPublisherID) {
198
- logger.debug('\n' + 'invalid publisherID detected for Google Adsense (GAS): ' + publisherID);
199
- logger.info('\n' + 'skip initialization for provider: ' + advertisingProvider);
200
- // return false;
211
+ if (!validpublisherID) {
212
+ if (development) {
213
+ logger.debug('\n' + 'invalid publisherID detected for Google Adsense: ' + publisherID);
214
+ logger.info('\n' + 'skip initialization for provider: ' + advertisingProvider);
215
+ }
216
+ return false;
201
217
  } else {
202
- logger.info('\n' + 'use publisherID for Google Adsense (GAS): ' + publisherID);
218
+ if (development) {
219
+ logger.info('\n' + 'use publisherID for Google Adsense: ' + publisherID);
220
+ }
221
+ }
222
+
223
+ // add Google Adsense API dynamically in head section loaded async
224
+ //
225
+ if (development) {
226
+ logger.info('\n' + 'add Google AdsenseAPI in section: head');
203
227
  }
204
228
 
205
- // add GAS API (Google Adsense) dynamically in head section
206
- // loaded async
207
- // -----------------------------------------------------------------
208
- logger.info('\n' + 'add Google Adsense (GAS) API in section: head');
209
229
  gasScript.async = true;
210
230
  gasScript.id = 'gas-api';
211
231
  gasScript.src = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
212
232
  gasScript.setAttribute('data-ad-client', publisherID);
213
233
  document.head.appendChild(gasScript);
214
- logger.info('\n' + 'adsense api initialized');
234
+
235
+ if (development) {
236
+ logger.info('\n' + 'adsense api initialized');
237
+ }
215
238
 
216
239
  // setup monitor for state changes on all ads configured
217
- // -----------------------------------------------------------------
218
- logger.info('\n' + 'setup ad monitoring');
219
- _this.ad_monitor();
240
+ //
241
+ setTimeout(function () {
242
+ var ads_found = (document.getElementsByClassName('adsbygoogle').length > 0) ? true : false;
243
+ if (ads_found > 0) {
244
+ if (development) {
245
+ logger.info('\n' + 'setup Google Ad monitoring');
246
+ }
247
+ _this.ad_monitor();
248
+ } else {
249
+ if (development) {
250
+ logger.warn('\n' + 'no initialized Google Ads found in page');
251
+ }
252
+ }
253
+ }, 1000);
220
254
 
221
255
  // run protection check
222
- // -----------------------------------------------------------------
256
+ //
223
257
  if (checkTrackingProtection) {
224
- logger.debug('\n' + 'run checks for tracking protection');
258
+ if (development) {
259
+ logger.debug('\n' + 'run checks for tracking protection');
260
+ }
225
261
 
226
262
  _this.check_tracking_protection();
227
263
  var dependencies_met_tracking_check_ready = setInterval (function (options) {
@@ -229,46 +265,57 @@ var logText;
229
265
  var browser_tracking_feature = navigator.DoNotTrack;
230
266
 
231
267
  if (!tracking_protection && !browser_tracking_feature) {
232
- logText = '\n' + 'tracking protection: disabled';
233
- logger.info(logText);
268
+ if (development) {
269
+ logText = '\n' + 'tracking protection: disabled';
270
+ logger.info(logText);
271
+ }
234
272
  } else {
235
- logText = '\n' + 'tracking protection: enabled';
236
- logger.debug(logText);
273
+ if (development) {
274
+ logText = '\n' + 'tracking protection: enabled';
275
+ logger.debug(logText);
276
+ }
237
277
 
238
278
  if (showErrorPageOnBlocked) {
239
- logger.error('\n' + 'redirect to error page (blocked content): HTML-447');
279
+ if (development) {
280
+ logger.error('\n' + 'redirect to error page (blocked content): HTML-447');
281
+ }
240
282
  // redirect to error page: blocked content
241
283
  window.location.href = '/447.html';
242
284
  }
243
285
  }
244
286
  }
287
+
245
288
  clearInterval(dependencies_met_tracking_check_ready);
246
289
  }, 10);
247
290
  } else {
248
291
  // no protection check enabled
249
292
  _this.setState('finished');
250
- logger.debug('\n' + 'state: ' + _this.getState());
251
- logger.info('\n' + 'module initialized successfully');
293
+
294
+ if (development) {
295
+ logger.debug('\n' + 'state: ' + _this.getState());
296
+ logger.info('\n' + 'module initialized successfully');
297
+ }
298
+
252
299
  clearInterval(dependencies_met_tracking_check_ready);
253
300
  }
254
301
 
255
302
  } else {
256
303
  // user consent on personalization "false"
257
304
  //
258
- logger.warn('\n' + 'user consent on personalization: ' + user_consent.personalization);
259
- logger.warn('\n' + 'initializing module: skipped');
260
-
261
- // manage GAD cookies if no consent is given|rejected
262
- // -----------------------------------------------------------------
263
- var gasCookies = j1.findCookie('__ga');
264
- logger.debug('\n' + 'consent on cookies disabled for personalization');
265
- logger.debug('\n' + 'initialization of module advertising skipped');
266
-
267
- // remove cookies on invalid GAS config or left from a previous
268
- // session/page view if they exists
269
- // ------------------------------------------------------------------
305
+ if (production) {
306
+ console.debug('cookies for personalization rejected');
307
+ console.debug('initialization of module advertising skipped');
308
+ } else {
309
+ logger.warn('\n' + 'user consent on personalization: ' + user_consent.personalization);
310
+ logger.warn('\n' + 'initializing module: skipped');
311
+ }
312
+
313
+ // if consent is rejected, detect and remove Adsense cookies
314
+ //
315
+ var gasCookies = j1.findCookie('__g');
270
316
  gasCookies.forEach(function (item) {
271
- // Remove cookies from Google Ads
317
+ // remove Google Ad cookies
318
+ //
272
319
  if (hostname == 'localhost') {
273
320
  j1.removeCookie({ name: item, domain: false, secure: false });
274
321
  } else {
@@ -277,14 +324,18 @@ var logText;
277
324
  });
278
325
 
279
326
  // manage tracking protection
280
- // -----------------------------------------------------------------
327
+ //
281
328
  if (checkTrackingProtection) {
282
329
  if (!user_consent.personalization) {
283
- logText = '\n' + 'consent on cookies disabled for personalization';
284
- logger.debug(logText);
330
+ if (development) {
331
+ logText = '\n' + 'consent on cookies disabled for personalization';
332
+ logger.debug(logText);
333
+ }
285
334
 
286
335
  if (showErrorPageOnBlocked) {
287
- logger.error('\n' + 'redirect to error page (blocked content): HTML-447');
336
+ if (development) {
337
+ logger.error('\n' + 'redirect to error page (blocked content): HTML-447');
338
+ }
288
339
  // redirect to error page: blocked content
289
340
  window.location.href = '/448.html';
290
341
  }
@@ -299,48 +350,195 @@ var logText;
299
350
  // [INFO ] [j1.adapter.advertising ] [ end processing ]
300
351
  {% else %}
301
352
  var ads_found = document.getElementsByClassName('adsbygoogle').length;
302
- logger = log4javascript.getLogger('j1.adapter.advertising');
303
- logger.debug('\n' + 'found ads in page: #' + ads_found);
304
- logger.debug('\n' + 'no ads initialized, advertising disabled');
305
- {% endif %}
353
+ if (development) {
354
+ logger = log4javascript.getLogger('j1.adapter.advertising');
355
+ logger.debug('\n' + 'found ads in page: #' + ads_found);
356
+ logger.debug('\n' + 'no ads initialized, advertising disabled');
357
+ }
358
+ {% endif %} // END if 'advertising'
306
359
 
307
360
  clearInterval(dependencies_met_page_ready);
308
361
  }
309
362
  }, 10);
310
363
  }, // END init
311
364
 
365
+ // -------------------------------------------------------------------------
366
+ // ad_initializer()
367
+ // initialze all ad units in a page (ins elements)
368
+ // -------------------------------------------------------------------------
369
+ ad_initializer: function () {
370
+
371
+ var dependencies_met_page_visible = setInterval (function (options) {
372
+ var contentState = $('#content').css("display");
373
+ var contentVisible = (contentState == 'block') ? true: false;
374
+ var ads_found = (document.getElementsByClassName('adsbygoogle').length > 0) ? true : false;
375
+ var ads_initialized = 0;
376
+ var ad_containers;
377
+
378
+ if (j1.getState() === 'finished' && contentVisible && ads_found) {
379
+ if (!validpublisherID) {
380
+ // skip setup processes
381
+ //
382
+ clearInterval(dependencies_met_page_visible);
383
+ return false;
384
+ }
385
+
386
+ // create|loading adverting for containers enabled
387
+ //
388
+ ad_containers = advertisingOptions.google.ads;
389
+ ad_containers.forEach(function (ad) {
390
+ if (user_consent.personalization) {
391
+ var currentDiv = document.getElementById(ad.id);
392
+
393
+ if (ad.enabled && ad.layout == layout) {
394
+ var ins = document.createElement('ins');
395
+
396
+ currentDiv.appendChild(ins);
397
+ var insID = 'ins_' + ad.id;
398
+ ins.setAttribute('id', insID);
399
+ ins.className = "adsbygoogle";
400
+
401
+ document.getElementById(insID).setAttribute('style', ad.styles);
402
+ document.getElementById(insID).setAttribute('data-ad-test', ad.test)
403
+ document.getElementById(insID).setAttribute('data-ad-client', ad.publisherID);
404
+ document.getElementById(insID).setAttribute('data-ad-slot', ad.slot);
405
+ document.getElementById(insID).setAttribute('data-ad-format', ad.ad_format);
406
+
407
+ if (ad.ad_layout == 'display') {
408
+ document.getElementById(insID).setAttribute('data-full-width-responsive', ad.ad_responsive);
409
+ }
410
+
411
+ // if (ad.ad_layout == 'in-article') {
412
+ // document.getElementById(insID).setAttribute('data-ad-format', ad.ad_format);
413
+ // }
414
+
415
+ if (ad.ad_layout == 'multiplex') {
416
+ document.getElementById(insID).setAttribute('data-matched-content-ui-typ', ad.ui_type);
417
+ document.getElementById(insID).setAttribute('data-matched-content-columns-num', ad.ui_columns);
418
+ document.getElementById(insID).setAttribute('data-matched-content-rows-num', ad.ui_rows);
419
+ }
420
+
421
+ ads_initialized ++;
422
+ } else {
423
+ if (ad.layout == layout) {
424
+ if (development) {
425
+ logger.warn('\n' + 'ad disabled on id ' + ad.id + ' for slot: ' + ad.slot);
426
+ }
427
+ }
428
+ }
429
+ } else {
430
+ if (development) {
431
+ logger.warn('\n' + 'skipped add settings on all ad containers');
432
+ }
433
+ } // END if user_consent.personalization
434
+
435
+ });
436
+ // END loading adverting containers
437
+
438
+ if (ads_initialized > 0) {
439
+ if (development) {
440
+ logger.info('\n' + 'ads enabled found in page (total): ' + ads_initialized);
441
+ }
442
+
443
+ var google_ads = document.getElementsByClassName('adsbygoogle');
444
+ var counter = document.getElementsByClassName('adsbygoogle').length;
445
+
446
+ // jadams, 2023-06-22:
447
+ // skip last element in google_ads (adsbygoogle-noablate)
448
+ // TODO: clarify for what reason an 'ins' element with
449
+ // class 'adsbygoogle-noablate' is added by Googgle Adsense
450
+ // Possible reason: publisherID is 'wrong|fake' or NOT 'verified'
451
+ //
452
+ counter--;
453
+
454
+ [].forEach.call(google_ads, function() {
455
+ // skip last element in google_ads (adsbygoogle-noablate)
456
+ if (counter > 0) {
457
+ (adsbygoogle = window.adsbygoogle || []).push({});
458
+ }
459
+ counter --;
460
+ });
461
+ } else {
462
+ if (development) {
463
+ logger.warn('\n' + 'no ads found in page for layout: ' + layout);
464
+ }
465
+ } // END if ads_initialized
466
+
467
+ clearInterval(dependencies_met_page_visible);
468
+ } // END contentVisible|ads_found
469
+
470
+ }, 10); // END dependencies_met_page_visible
471
+
472
+ }, // END ad_initializer
473
+
312
474
  // -------------------------------------------------------------------------
313
475
  // ad_monitor()
314
476
  // monitor for state changes on the ad placed in pages (if any)
315
477
  //
316
478
  // NOTE: Check visibility state of the adSlot to prevent multiple
317
479
  // processing of the same slot
480
+ //
481
+ // NOTE: Skip ad containers with class 'adsbygoogle-noablate'
482
+ //
318
483
  // -------------------------------------------------------------------------
319
484
  ad_monitor: function () {
320
- // logger.info('\n' + 'setup ad monitoring');
321
485
  $('.adsbygoogle').attrchange({
322
486
  trackValues: true,
323
487
  callback: function (event) {
324
- if (event.newValue === 'unfilled') {
325
- var elm = event.target.dataset;
326
- var adSlotIsVisible = $('.adsbygoogle').is(":visible");
327
- if (adSlotIsVisible) {
328
- logger.warn('\n' + 'detected ad on slot ' + elm.adSlot + ' in state: ' + event.newValue);
488
+ var elm = event.target.dataset;
489
+ var elm_classes = event.target.className;
490
+ var validAdContainer = (elm_classes.includes('adsbygoogle-noablate')) ? false : true;
491
+ var environment = '{{environment}}';
492
+ var production = (environment.includes('prod') ? true : false);
493
+ var adSlotIsVisible = $('.adsbygoogle').is(":visible");
494
+
495
+ if (adSlotIsVisible && validAdContainer && event.newValue !== event.oldValue) {
496
+ if (event.newValue === 'unfilled') {
497
+ if (production) {
498
+ console.debug('detected ad blocks in state: unfilled');
499
+ } else {
500
+ logger.warn('\n' + 'detected ad on slot ' + elm.adSlot + ' in state: ' + event.newValue);
501
+ }
329
502
  if (addBorderOnUnfilled) {
330
503
  $('.adsbygoogle').addClass('border--dotted');
331
504
  }
332
-
333
505
  if (autoHideOnUnfilled) {
334
- logger.info('\n' + ' hide ad on slot: ' + elm.adSlot);
506
+ if (development) {
507
+ logger.info('\n' + ' hide ad on slot: ' + elm.adSlot);
508
+ }
335
509
  $('.adsbygoogle').hide();
336
510
  }
337
- }
338
- } else {
339
- // logger.info('\n' + 'found ad in state ' + event.newValue + ' on slot: ' + elm.adSlot);
340
- }
341
- }
342
- });
343
- },
511
+ } else if (event.newValue === 'filled') {
512
+ if (development) {
513
+ logger.info('\n' + 'detected ad on slot ' + elm.adSlot + ' in state: ' + event.newValue);
514
+ }
515
+ } else {
516
+ var filled = (event.newValue.includes('display') ? true : false);
517
+ var unfilled = (event.newValue.includes('dotted') ? true : false);
518
+ if (filled) {
519
+ if (production) {
520
+ console.info('detected ad blocks in state: filled');
521
+ } else {
522
+ logger.info('\n' + 'detected ad block on slot ' + elm.adSlot + ' in state: filled');
523
+ }
524
+ } else if (unfilled) {
525
+ if (production) {
526
+ console.info('detected ad blocks in state: unfilled');
527
+ } else {
528
+ logger.info('\n' + 'detected ad block on slot ' + elm.adSlot + ' in state: unfilled');
529
+ }
530
+ } else {
531
+ if (production) {
532
+ console.warn('unknown ad state detected: ' + event.newValue);
533
+ } else {
534
+ logger.warn('\n' + 'unknown ad state detected on slot ' + elm.adSlot + ' : ' + event.newValue);
535
+ }
536
+ }
537
+ } // END if 'event.newValue'
538
+ } // END if 'adSlotIsVisible'
539
+ } // END 'callback'
540
+ }); // END 'attrchange'
541
+ }, // END ad_monitor
344
542
 
345
543
  // -------------------------------------------------------------------------
346
544
  // check_tracking_protection()
@@ -357,8 +555,10 @@ var logText;
357
555
  check_tracking_protection: function () {
358
556
  var logger = log4javascript.getLogger('j1.adapter.advertising.monitor.tracking');
359
557
 
360
- logText = '\n' + 'check for trackingprotection';
361
- logger.info(logText);
558
+ if (development) {
559
+ logText = '\n' + 'check for trackingprotection';
560
+ logger.info(logText);
561
+ }
362
562
 
363
563
  function checkTrackingProtection() {
364
564
  if (!checkTrackingProtection.promise) {
@@ -379,7 +579,9 @@ var logText;
379
579
  tracking_protection = false;
380
580
  }).catch(e => {
381
581
  tracking_protection = true;
382
- logger.debug('\n' + 'detection details: ' + e);
582
+ if (development) {
583
+ logger.debug('\n' + 'detection details: ' + e);
584
+ }
383
585
  });
384
586
  }
385
587
  }
@@ -394,8 +596,10 @@ var logText;
394
596
  messageHandler: function (sender, message) {
395
597
  var json_message = JSON.stringify(message, undefined, 2);
396
598
 
397
- logText = '\n' + 'received message from ' + sender + ': ' + json_message;
398
- logger.debug(logText);
599
+ if (development) {
600
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
601
+ logger.debug(logText);
602
+ }
399
603
 
400
604
  // -----------------------------------------------------------------------
401
605
  // Process commands|actions
@@ -404,7 +608,9 @@ var logText;
404
608
  //
405
609
  // Place handling of command|action here
406
610
  //
407
- logger.info('\n' + message.text);
611
+ if (development) {
612
+ logger.info('\n' + message.text);
613
+ }
408
614
  }
409
615
 
410
616
  //
@@ -2778,7 +2778,8 @@ var j1 = (function (options) {
2778
2778
  }
2779
2779
 
2780
2780
  for (const {node, currentRect, previousRect} of entry.sources) {
2781
- if (node.hasOwnProperty('firstElementChild') && typeof node.firstElementChild != 'null' && typeof node.firstElementChild != 'undefined') {
2781
+ var hasProperty = (node.hasOwnProperty('firstElementChild')) ? true : false;
2782
+ if (hasProperty) {
2782
2783
  var id = '';
2783
2784
  try {
2784
2785
  id = node.firstElementChild.id;