j1-template 2023.3.0 → 2023.3.1

Sign up to get free protection for your applications and to get access to all the features.
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;