j1-template 2023.5.2 → 2023.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +11 -9
  3. data/_includes/themes/j1/layouts/content_generator_post.html +8 -6
  4. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +1 -1
  5. data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
  6. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +4 -4
  7. data/_includes/themes/j1/procedures/posts/pager.proc +1 -1
  8. data/_layouts/_home.html +88 -0
  9. data/_layouts/home.html +1 -1
  10. data/assets/data/banner.html +7 -7
  11. data/assets/data/panel.html +37 -25
  12. data/assets/data/quicklinks.html +40 -30
  13. data/assets/data/speak2me.html +219 -0
  14. data/assets/data/translator.html +32 -4
  15. data/assets/themes/j1/adapter/js/speak2me.js +425 -0
  16. data/assets/themes/j1/adapter/js/translator.js +10 -2
  17. data/assets/themes/j1/core/css/icon-fonts/mdib.css +21 -0
  18. data/assets/themes/j1/core/css/icon-fonts/mdib.min.css +1 -1
  19. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +34 -40
  20. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +2 -2
  21. data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +77 -57
  22. data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +2 -2
  23. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +176 -42
  24. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +3 -3
  25. data/assets/themes/j1/core/js/template.js +1658 -0
  26. data/assets/themes/j1/core/js/template.min.js +11 -5
  27. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  28. data/assets/themes/j1/modules/speak2me/LICENSE +21 -0
  29. data/assets/themes/j1/modules/speak2me/js/speak2me.js +947 -0
  30. data/assets/themes/j1/modules/speak2me/js/speak2me.min.js +26 -0
  31. data/assets/themes/j1/modules/translator/js/translator.js +30 -13
  32. data/assets/themes/j1/modules/translator/js/translator.min.js +1 -1
  33. data/lib/j1/version.rb +1 -1
  34. data/lib/starter_web/Gemfile +5 -5
  35. data/lib/starter_web/README.md +5 -5
  36. data/lib/starter_web/_config.yml +12 -44
  37. data/lib/starter_web/_data/blocks/banner.yml +7 -6
  38. data/lib/starter_web/_data/blocks/panel.yml +37 -39
  39. data/lib/starter_web/_data/layouts/home.yml +1 -1
  40. data/lib/starter_web/_data/modules/advertising.yml +10 -88
  41. data/lib/starter_web/_data/modules/buymeacoffee.yml +30 -0
  42. data/lib/starter_web/_data/modules/defaults/advertising.yml +3 -1
  43. data/lib/starter_web/_data/modules/defaults/blog_navigator.yml +97 -164
  44. data/lib/starter_web/_data/modules/defaults/buymeacoffee.yml +30 -0
  45. data/lib/starter_web/_data/modules/defaults/navigator.yml +8 -4
  46. data/lib/starter_web/_data/modules/defaults/speak2me.yml +72 -0
  47. data/lib/starter_web/_data/modules/scroller.yml +1 -1
  48. data/lib/starter_web/_data/modules/speak2me.yml +33 -0
  49. data/lib/starter_web/_data/resources.yml +24 -1
  50. data/lib/starter_web/_data/templates/feed.xml +1 -1
  51. data/lib/starter_web/_includes/google/static/{google_ad_5128488466.html → google_ad__your-slot-id.html} +1 -1
  52. data/lib/starter_web/_plugins/asciidoctor/callout.rb +1 -1
  53. data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +2 -2
  54. data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +2 -2
  55. data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +2 -2
  56. data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +1 -1
  57. data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +2 -7
  58. data/lib/starter_web/_plugins/asciidoctor/masonry-block.rb +2 -3
  59. data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +2 -2
  60. data/lib/starter_web/_plugins/asciidoctor/mdib-icon-inline.rb +43 -0
  61. data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +1 -1
  62. data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +1 -1
  63. data/lib/starter_web/_plugins/asciidoctor/slick-block.rb +2 -2
  64. data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +1 -1
  65. data/lib/starter_web/_plugins/filter/liquify.rb +22 -22
  66. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  67. data/lib/starter_web/assets/images/collections/books/biography/a_life_in_questions.jpg +0 -0
  68. data/lib/starter_web/assets/images/collections/books/biography/becoming.jpg +0 -0
  69. data/lib/starter_web/assets/images/collections/books/biography/born_to_run.jpg +0 -0
  70. data/lib/starter_web/assets/images/collections/books/biography/forty_autumns.jpg +0 -0
  71. data/lib/starter_web/assets/images/collections/books/biography/not_dead_yet.jpg +0 -0
  72. data/lib/starter_web/assets/images/collections/books/biography/the_princess_diarist.jpg +0 -0
  73. data/lib/starter_web/assets/images/collections/books/biography/when_breath_becomes_air.jpg +0 -0
  74. data/lib/starter_web/assets/images/collections/books/fantasy/harry-potter-deathly-hallows.jpg +0 -0
  75. data/lib/starter_web/assets/images/collections/books/fantasy/harry-potter-philosophers-stone.jpg +0 -0
  76. data/lib/starter_web/assets/images/collections/books/fantasy/mistborn-trilogy.jpg +0 -0
  77. data/lib/starter_web/assets/images/collections/books/fantasy/ready-player-one.jpg +0 -0
  78. data/lib/starter_web/assets/images/collections/books/fantasy/sword-of-destiny.jpg +0 -0
  79. data/lib/starter_web/assets/images/collections/books/fantasy/terry-pratchet-diary.jpg +0 -0
  80. data/lib/starter_web/assets/images/collections/books/romance/breath-of-snow-and-ashes.jpg +0 -0
  81. data/lib/starter_web/assets/images/collections/books/romance/it-ends-with-us.jpg +0 -0
  82. data/lib/starter_web/assets/images/collections/books/romance/outlander-novel.jpg +0 -0
  83. data/lib/starter_web/assets/images/collections/books/romance/outlander-short-story.jpg +0 -0
  84. data/lib/starter_web/assets/images/collections/books/romance/the-fiery-cross.jpg +0 -0
  85. data/lib/starter_web/assets/images/collections/books/romance/the_dressmaker.jpg +0 -0
  86. data/lib/starter_web/collections/_biography/a-life-in-questions.adoc +13 -8
  87. data/lib/starter_web/collections/_biography/becoming.adoc +18 -12
  88. data/lib/starter_web/collections/_biography/born-to-run.adoc +17 -13
  89. data/lib/starter_web/collections/_biography/forty-autumns.adoc +14 -9
  90. data/lib/starter_web/collections/_biography/not-dead-yet.adoc +12 -7
  91. data/lib/starter_web/collections/_biography/princess-diarist-the.adoc +13 -8
  92. data/lib/starter_web/collections/_biography/when-breath-becomes-air.adoc +14 -9
  93. data/lib/starter_web/collections/_fantasy/harry-potter-deathly-hallows.adoc +13 -7
  94. data/lib/starter_web/collections/_fantasy/harry-potter-philosophers-stone.adoc +12 -8
  95. data/lib/starter_web/collections/_fantasy/mistborn-trilogy.adoc +14 -10
  96. data/lib/starter_web/collections/_fantasy/ready-player-one.adoc +12 -11
  97. data/lib/starter_web/collections/_fantasy/sword-of-destiny.adoc +15 -7
  98. data/lib/starter_web/collections/_fantasy/terry-pratchet-diary.adoc +11 -6
  99. data/lib/starter_web/collections/_romance/breath-of-snow-and-ashes.adoc +15 -10
  100. data/lib/starter_web/collections/_romance/it-ends-with-us.adoc +11 -6
  101. data/lib/starter_web/collections/_romance/outlander-novel.adoc +11 -6
  102. data/lib/starter_web/collections/_romance/{virgins-outlander-short-story.adoc → outlander-virgins-short-story.adoc} +11 -6
  103. data/lib/starter_web/collections/_romance/{dressmaker-the.adoc → the-dressmaker.adoc} +11 -6
  104. data/lib/starter_web/collections/_romance/{fiery-cross-the.adoc → the-fiery-cross.adoc} +11 -6
  105. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +6 -6
  106. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +12 -11
  107. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +9 -7
  108. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +8 -8
  109. data/lib/starter_web/dot.ruby-version +1 -1
  110. data/lib/starter_web/index.html +10 -8
  111. data/lib/starter_web/package.json +1 -1
  112. data/lib/starter_web/pages/public/about/features.adoc +7 -1
  113. data/lib/starter_web/pages/public/about/reporting_issues.adoc +2 -0
  114. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +2 -0
  115. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +2 -0
  116. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +2 -0
  117. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/000_intro.asciidoc +1 -1
  118. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/100_converter/112_getting_started.asciidoc +1 -0
  119. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/100_converter/113_themes.asciidoc +1 -0
  120. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +2 -0
  121. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/_includes/documents/100_chapter.asciidoc +3 -1
  122. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/_includes/documents/200_chapter.asciidoc +1 -0
  123. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +2 -0
  124. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +6 -0
  125. data/lib/starter_web/pages/public/blog/navigator/archive/allview.html +6 -13
  126. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +17 -11
  127. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +7 -8
  128. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +5 -7
  129. data/lib/starter_web/pages/public/blog/navigator/index.html +15 -14
  130. data/lib/starter_web/pages/public/features/general.adoc +7 -1
  131. data/lib/starter_web/pages/public/features/template.adoc +87 -128
  132. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_all_books.adoc +10 -2
  133. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_biography.adoc +8 -3
  134. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_fantasy.adoc +11 -4
  135. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_romance.adoc +11 -5
  136. data/lib/starter_web/pages/public/learn/bookshelf/jekyll_collections.adoc +24 -14
  137. data/lib/starter_web/pages/public/learn/bs_sass_variables/bs_sass_variables.adoc +4 -0
  138. data/lib/starter_web/pages/public/learn/core_web_vitals/core_web_vitals.adoc +8 -4
  139. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/100_gistblock.asciidoc +2 -1
  140. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_bootstrap.asciidoc +27 -28
  141. data/lib/starter_web/pages/public/learn/roundtrip/asciidoc_extensions.adoc +169 -155
  142. data/lib/starter_web/pages/public/learn/roundtrip/bootstrap_themes.adoc +28 -19
  143. data/lib/starter_web/pages/public/learn/roundtrip/highlghter_rouge.adoc +9 -5
  144. data/lib/starter_web/pages/public/learn/roundtrip/icon_fonts.adoc +67 -77
  145. data/lib/starter_web/pages/public/learn/roundtrip/lunr_search.1.asciidoc +460 -0
  146. data/lib/starter_web/pages/public/learn/roundtrip/lunr_search.adoc +12 -7
  147. data/lib/starter_web/pages/public/learn/roundtrip/modal_extentions.adoc +26 -19
  148. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +470 -447
  149. data/lib/starter_web/pages/public/learn/roundtrip/present_videos.adoc +60 -59
  150. data/lib/starter_web/pages/public/learn/roundtrip/responsive_tables.adoc +51 -38
  151. data/lib/starter_web/pages/public/learn/roundtrip/typography.adoc +31 -25
  152. data/lib/starter_web/pages/public/learn/where_to_go.adoc +9 -4
  153. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +4 -0
  154. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +2 -0
  155. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +22 -3
  156. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +5 -0
  157. data/lib/starter_web/pages/public/manuals/speak2me.adoc +412 -0
  158. data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +27 -19
  159. data/lib/starter_web/pages/public/plans/plans.adoc +3 -0
  160. data/lib/starter_web/pages/public/tools/cheatsheet/gem.adoc +2 -0
  161. data/lib/starter_web/pages/public/tools/cheatsheet/git.adoc +2 -0
  162. data/lib/starter_web/pages/public/tools/cheatsheet/j1.adoc +2 -0
  163. data/lib/starter_web/pages/public/tools/cheatsheet/yaml.adoc +6 -0
  164. data/lib/starter_web/pages/public/tools/previewer/preview_bootstrap_theme.adoc +17 -3
  165. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  166. data/lib/starter_web/utilsrv/package.json +1 -1
  167. metadata +38 -7
  168. data/lib/starter_web/_includes/google/static/google_ad_7284712660.html +0 -19
@@ -0,0 +1,425 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/adapter/js/speak2me.js
10
+ # Liquid template to adapt the Speak2Me module
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ # Copyright (C) 2023 Juergen Adams
15
+ #
16
+ # J1 Theme is licensed under the MIT License.
17
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
18
+ # -----------------------------------------------------------------------------
19
+ # Test data:
20
+ # {{ liquid_var | debug }}
21
+ # speak2me_options: {{ speak2me_options | debug }}
22
+ # -----------------------------------------------------------------------------
23
+ {% endcomment %}
24
+
25
+ {% comment %} Liquid procedures
26
+ -------------------------------------------------------------------------------- {% endcomment %}
27
+
28
+ {% comment %} Set global settings
29
+ -------------------------------------------------------------------------------- {% endcomment %}
30
+ {% assign environment = site.environment %}
31
+ {% assign asset_path = "/assets/themes/j1" %}
32
+
33
+ {% comment %} Process YML config data
34
+ ================================================================================ {% endcomment %}
35
+
36
+ {% comment %} Set config files
37
+ -------------------------------------------------------------------------------- {% endcomment %}
38
+ {% assign template_config = site.data.j1_config %}
39
+ {% assign blocks = site.data.blocks %}
40
+ {% assign modules = site.data.modules %}
41
+
42
+ {% comment %} Set config data (settings only)
43
+ -------------------------------------------------------------------------------- {% endcomment %}
44
+ {% assign speak2me_defaults = modules.defaults.speak2me.defaults %}
45
+ {% assign speak2me_settings = modules.speak2me.settings %}
46
+
47
+ {% comment %} Set config options (settings only)
48
+ -------------------------------------------------------------------------------- {% endcomment %}
49
+ {% assign speak2me_options = speak2me_defaults | merge: speak2me_settings %}
50
+
51
+ {% comment %} Variables
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+ {% assign comments = speak2me_options.enabled %}
54
+
55
+ {% comment %} Detect prod mode
56
+ -------------------------------------------------------------------------------- {% endcomment %}
57
+ {% assign production = false %}
58
+ {% if environment == 'prod' or environment == 'production' %}
59
+ {% assign production = true %}
60
+ {% endif %}
61
+
62
+ /*
63
+ # -----------------------------------------------------------------------------
64
+ # ~/assets/themes/j1/adapter/js/speak2me.js
65
+ # J1 Adapter for the speak2me module
66
+ #
67
+ # Product/Info:
68
+ # https://jekyll.one
69
+ #
70
+ # Copyright (C) 2023 Juergen Adams
71
+ #
72
+ # J1 Theme is licensed under the MIT License.
73
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
74
+ # -----------------------------------------------------------------------------
75
+ # NOTE: Wave styles defind in /assets/data/panel.html, key 'wave'
76
+ # -----------------------------------------------------------------------------
77
+ # Adapter generated: {{site.time}}
78
+ # -----------------------------------------------------------------------------
79
+ */
80
+
81
+ // -----------------------------------------------------------------------------
82
+ // ESLint shimming
83
+ // -----------------------------------------------------------------------------
84
+ /* eslint indent: "off" */
85
+ // -----------------------------------------------------------------------------
86
+ 'use strict';
87
+ j1.adapter.speak2me = (function (j1, window) {
88
+
89
+ {% comment %} Set global variables
90
+ -------------------------------------------------------------------------------- {% endcomment %}
91
+ var environment = '{{environment}}';
92
+ var cookie_names = j1.getCookieNames();
93
+ var user_state = j1.readCookie(cookie_names.user_state);
94
+ var state = 'not_started';
95
+ var isFirefox = /Firefox/i.test(navigator.userAgent);
96
+ var chrome = /chrome/i.test( navigator.userAgent );
97
+ var isEdge = /Edg/i.test(navigator.userAgent);
98
+ var isOpera = /OPR/i.test(navigator.userAgent);
99
+ var isAvast = /Avast/i.test(navigator.userAgent);
100
+ var isChrome = ((chrome) && (!isEdge));
101
+ var ttsDisabled = false;
102
+ var isMobile = (window.orientation !== undefined) ? true :false; // NOTE: window.orientation is DEPRECATED
103
+ // var isMobile = (screen.orientation.type == 'portrait-secondary') ? true : false;
104
+
105
+ var frontmatterOptions;
106
+ var speak2meDefaults;
107
+ var speak2meSettings;
108
+ var speak2meOptions;
109
+ var speak2meModal;
110
+ var _this;
111
+ var logger;
112
+ var logText;
113
+
114
+ // -------------------------------------------------------------------------
115
+ // global event handler
116
+ // -------------------------------------------------------------------------
117
+ var Events = {
118
+ documentReady: function (onDocumentReady) {
119
+ if (document.readyState !== 'loading') {
120
+ onDocumentReady();
121
+ } else {
122
+ document.addEventListener('DOMContentLoaded', onDocumentReady);
123
+ }
124
+ }
125
+ };
126
+
127
+ // ---------------------------------------------------------------------------
128
+ // Main object
129
+ // ---------------------------------------------------------------------------
130
+ return {
131
+
132
+ // -------------------------------------------------------------------------
133
+ // init()
134
+ // adapter initializer
135
+ // -------------------------------------------------------------------------
136
+ init: function (options) {
137
+
138
+ // -----------------------------------------------------------------------
139
+ // Default module settings
140
+ // -----------------------------------------------------------------------
141
+ var settings = $.extend({
142
+ module_name: 'j1.adapter.speak2me',
143
+ generated: '{{site.time}}'
144
+ }, options);
145
+
146
+ // -----------------------------------------------------------------------
147
+ // Global variable settings
148
+ // -----------------------------------------------------------------------
149
+
150
+ // create settings object from frontmatter
151
+ //
152
+ frontmatterOptions = options != null ? $.extend({}, options) : {};
153
+
154
+ // create settings object from module options
155
+ //
156
+ speak2meDefaults = $.extend({}, {{speak2me_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
157
+ speak2meSettings = $.extend({}, {{speak2me_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
158
+ speak2meOptions = $.extend(true, {}, speak2meDefaults, speak2meSettings, frontmatterOptions);
159
+
160
+ ttsDisabled = (speak2meOptions.tts == "false") ? true : false;
161
+
162
+ _this = j1.adapter.speak2me;
163
+ logger = log4javascript.getLogger('j1.adapter.speak2me');
164
+
165
+ _this.setState('started');
166
+ logger.debug('\n' + 'state: ' + _this.getState());
167
+ logger.info('\n' + 'module is being initialized');
168
+
169
+ // -----------------------------------------------------------------------
170
+ // initializer
171
+ // -----------------------------------------------------------------------
172
+ var dependencies_met_page_ready = setInterval (function (options) {
173
+ var pageState = $('#no_flicker').css("display");
174
+ var pageVisible = (pageState == 'block') ? true : false;
175
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
176
+
177
+ if (j1.getState() === 'finished' && pageVisible && atticFinished) {
178
+
179
+ if (isMobile) {
180
+ console.log('module speak2me is currently not supported for the Opera browser');
181
+ $('#quickLinksSpeakButton').hide();
182
+ clearInterval(dependencies_met_page_ready);
183
+ return;
184
+ }
185
+
186
+ if (isOpera) {
187
+ console.log('module speak2me is currently not supported for the Firefox browser');
188
+ $('#quickLinksSpeakButton').hide();
189
+ clearInterval(dependencies_met_page_ready);
190
+ return;
191
+ }
192
+
193
+ if (isAvast) {
194
+ console.log('module speak2me is currently not supported for the Avast Secure browser');
195
+ $('#quickLinksSpeakButton').hide();
196
+ clearInterval(dependencies_met_page_ready);
197
+ return;
198
+ }
199
+
200
+ if (isFirefox) {
201
+ console.log('module speak2me is currently not supported on mobile devices');
202
+ $('#quickLinksSpeakButton').hide();
203
+ clearInterval(dependencies_met_page_ready);
204
+ return;
205
+ }
206
+
207
+ if (isChrome) {
208
+ var chromeWorkaround = setInterval(function () {
209
+ if ($().speak2me('isSpeaking')) {
210
+ $().speak2me('pause').speak2me('resume');
211
+ logger.debug('\n' + 'speak: send pause-resumed');
212
+ }
213
+ }, 10000);
214
+ }
215
+
216
+ if (ttsDisabled) {
217
+ logger.warn('\n' + 'tts detected: disabled');
218
+ $('#quickLinksSpeakButton').hide();
219
+ clearInterval(dependencies_met_page_ready);
220
+ return;
221
+ } else {
222
+ speak2meModal = document.createElement('div');
223
+ speak2meModal.id = speak2meOptions.dialogContainerID;
224
+ speak2meModal.style.display = 'none';
225
+
226
+ speak2meModal.setAttribute('class', 'modal fade');
227
+ speak2meModal.setAttribute('tabindex', '-1');
228
+ speak2meModal.setAttribute('role', 'dialog');
229
+ speak2meModal.setAttribute('aria-labelledby', speak2meOptions.dialogContainerID);
230
+ document.body.append(speak2meModal);
231
+
232
+ // -------------------------------------------------------------------
233
+ // data loader
234
+ // -------------------------------------------------------------------
235
+ j1.loadHTML ({
236
+ xhr_container_id: 'speak2me_container',
237
+ xhr_data_path: '/assets/data/speak2me/index.html',
238
+ xhr_data_element: 'speak2me-modal-data' },
239
+ 'j1.adapter.rtextResizer',
240
+ 'null'
241
+ );
242
+ }
243
+
244
+ // -------------------------------------------------------------------
245
+ // on 'show'
246
+ // -------------------------------------------------------------------
247
+ $('#speak2me_container').on('show.bs.modal', function () {
248
+ if (isChrome || isEdge) {
249
+ logger.warn('\n' + 'chromium browser detected: pause|resume buttons disabled');
250
+ $('#pause_button').hide();
251
+ $('#resume_button').hide();
252
+ }
253
+ _this.create('#voiceSelector');
254
+ }); // END modal on 'show'
255
+
256
+ // -------------------------------------------------------------------
257
+ // on 'shown'
258
+ // -------------------------------------------------------------------
259
+ // $('#speak2me_container').on('shown.bs.modal', function () {
260
+ // // do something here
261
+ // return;
262
+ // }); // END modal on 'shown'
263
+
264
+ _this.setState('finished');
265
+ logger.debug('\n' + 'state: ' + _this.getState());
266
+ logger.info('\n' + 'module initialization finished');
267
+
268
+ clearInterval(dependencies_met_page_ready);
269
+ }
270
+ }, 10);
271
+
272
+ }, // END init
273
+
274
+ // -------------------------------------------------------------------------
275
+ // create()
276
+ // create a HTML select element for all (valid) voices found
277
+ // -------------------------------------------------------------------------
278
+ create: function (obj) {
279
+ var isSelectEmpty = ($('#voiceSelect').length == 1) ? false: true;
280
+ var numVoices;
281
+
282
+ // create select element (#voiceSelect) if not already exist
283
+ if (isSelectEmpty) {
284
+ numVoices = $().speak2me('getVoices', obj, 'Select a voice');
285
+
286
+ // delete select element (#voiceSelect) if no valid voiuces found
287
+ if (numVoices === 0) {
288
+ $(obj).remove();
289
+ }
290
+ }
291
+ }, // END create
292
+
293
+ // -------------------------------------------------------------------------
294
+ // showDialog()
295
+ // display the tts settings dialog
296
+ // -------------------------------------------------------------------------
297
+ showDialog: function () {
298
+ logger.debug('\n' + "showDialog");
299
+
300
+ $('#speak2me_container').modal({
301
+ backdrop: 'static',
302
+ keyboard: false
303
+ });
304
+
305
+ $('#speak2me_container').modal('show');
306
+ }, // END showDialog
307
+
308
+ // -------------------------------------------------------------------------
309
+ // update()
310
+ // update the value to the right of the input sliders
311
+ // -------------------------------------------------------------------------
312
+ update: function (obj, value) {
313
+ var n = parseFloat(value).toFixed(1)
314
+ $(obj).parent().find('span').text(n);
315
+ }, // END update
316
+
317
+ // -------------------------------------------------------------------------
318
+ // speak()
319
+ // calls the 'speak' functiion of the screen reader
320
+ // -------------------------------------------------------------------------
321
+ speak: function (obj) {
322
+ // Get the parameter values from the input sliders
323
+ //
324
+ var rate = parseFloat(document.getElementById('rate').value);
325
+ var pitch = parseFloat(document.getElementById('pitch').value);
326
+ var volume = parseFloat(document.getElementById('volume').value);
327
+
328
+ // Note: Function calls can be perfromed individually or
329
+ // chained together as demonstrated below
330
+ //
331
+ $(obj).speak2me('rate', rate).speak2me('pitch', pitch).speak2me('volume', volume);
332
+ // $(obj).speak2me('ignore', 'h2','h3');
333
+ var speaker = $(obj).speak2me('speak');
334
+ $(".mdib-speaker").addClass("mdib-spin");
335
+
336
+ // just for debugging completeness, no errors seem to be thrown though
337
+ speaker.addEventListener('error', (event) => {
338
+ console.log('speak2me error:', event);
339
+ });
340
+
341
+ }, // END speak
342
+
343
+ // -------------------------------------------------------------------------
344
+ // pause()
345
+ // Calls the 'pause' function of rge screen reader
346
+ // -------------------------------------------------------------------------
347
+ pause: function () {
348
+ $().speak2me('pause');
349
+ $(".mdib-speaker").removeClass("mdib-spin");
350
+ }, // END pause
351
+
352
+ // -------------------------------------------------------------------------
353
+ // resume()
354
+ // Calls the 'resume' function of rge screen reader
355
+ // -------------------------------------------------------------------------
356
+ resume: function () {
357
+ $().speak2me('resume');
358
+ $(".mdib-speaker").addClass("mdib-spin");
359
+ }, // END resume
360
+
361
+ // -------------------------------------------------------------------------
362
+ // stop()
363
+ // Calls the 'stop' function of rge screen reader
364
+ // -------------------------------------------------------------------------
365
+ stop: function () {
366
+ $().speak2me('stop');
367
+ $(".mdib-speaker").removeClass("mdib-spin");
368
+ // potential workaround, when selected language in voice
369
+ // selector (dialog) has NOT changed if translation was changed
370
+ // location.reload();
371
+ }, // END stop
372
+
373
+ // -------------------------------------------------------------------------
374
+ // messageHandler()
375
+ // manage messages send from other J1 modules
376
+ // -------------------------------------------------------------------------
377
+ messageHandler: function (sender, message) {
378
+ var json_message = JSON.stringify(message, undefined, 2);
379
+
380
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
381
+ logger.debug(logText);
382
+
383
+ // -----------------------------------------------------------------------
384
+ // Process commands|actions
385
+ // -----------------------------------------------------------------------
386
+ if (message.type === 'command' && message.action === 'module_initialized') {
387
+ //
388
+ // Place handling of command|action here
389
+ //
390
+ logger.info('\n' + message.text);
391
+ }
392
+
393
+ //
394
+ // Place handling of other command|action here
395
+ //
396
+
397
+ return true;
398
+ }, // END messageHandler
399
+
400
+ // -------------------------------------------------------------------------
401
+ // setState()
402
+ // Sets the current (processing) state of the module
403
+ // -------------------------------------------------------------------------
404
+ setState: function (stat) {
405
+ _this.state = stat;
406
+ }, // END setState
407
+
408
+ // -------------------------------------------------------------------------
409
+ // getState()
410
+ // Returns the current (processing) state of the module
411
+ // -------------------------------------------------------------------------
412
+ getState: function () {
413
+ return _this.state;
414
+ } // END getState
415
+
416
+ }; // END return
417
+ })(j1, window);
418
+
419
+ {% endcapture %}
420
+ {% if production %}
421
+ {{ cache | minifyJS }}
422
+ {% else %}
423
+ {{ cache | strip_empty_lines }}
424
+ {% endif %}
425
+ {% assign cache = nil %}
@@ -80,6 +80,8 @@ regenerate: true
80
80
  /* eslint quotes: "off" */
81
81
  // -----------------------------------------------------------------------------
82
82
  // https://github.com/EdwardBalaj/Simple-DeepL-API-Integration
83
+ // https://www.javatpoint.com/how-to-add-google-translate-button-on-your-webpage
84
+ // https://gist.github.com/ab007shetty/28e99707734db32a6e881e4d245d42f7
83
85
  // https://github.com/marghoobsuleman/ms-Dropdown
84
86
  // https://www.marghoobsuleman.com/image-dropdown/help
85
87
  // https://www.marghoobsuleman.com/image-dropdown/advanced-help
@@ -410,7 +412,7 @@ j1.adapter.translator = (function (j1, window) {
410
412
  // Called by the translator CORE module after the user has made
411
413
  // the selection for a translation|language
412
414
  // -------------------------------------------------------------------------
413
- cbGoogle: function () {
415
+ cbGoogle: function (option) {
414
416
  var logger = log4javascript.getLogger('j1.adapter.translator.cbGoogle');
415
417
  var msDropdown = document.getElementById('dropdownJSON').msDropdown;
416
418
 
@@ -445,6 +447,12 @@ j1.adapter.translator = (function (j1, window) {
445
447
  // domainAttribute = '';
446
448
  // }
447
449
 
450
+ // button 'Do nothing' clicked
451
+ //
452
+ if (option === 'exitOnly') {
453
+ return;
454
+ }
455
+
448
456
  selectedTranslationLanguage = msDropdown.value;
449
457
  logger.info('\n' + 'selected translation language: ' + selectedTranslationLanguage);
450
458
 
@@ -461,7 +469,7 @@ j1.adapter.translator = (function (j1, window) {
461
469
  Cookies.remove('googtrans', { domain: domainAttribute });
462
470
  Cookies.remove('googtrans', { domain: hostname });
463
471
  Cookies.remove('googtrans');
464
- location.reload(true);
472
+ location.reload();
465
473
  }
466
474
 
467
475
  // set transCode settings
@@ -3503,6 +3503,9 @@
3503
3503
  .mdib-format-annotation-plus:before {
3504
3504
  content: "\F0646"; }
3505
3505
 
3506
+ .mdib-format-clear:before {
3507
+ content: "\F0265"; }
3508
+
3506
3509
  .mdib-format-color-fill:before {
3507
3510
  content: "\F0266"; }
3508
3511
 
@@ -5903,6 +5906,12 @@
5903
5906
  .mdib-play:before {
5904
5907
  content: "\F040A"; }
5905
5908
 
5909
+ .mdib-play-outline:before {
5910
+ content: "\F0F1B"; }
5911
+
5912
+ .mdib-play-pause:before {
5913
+ content: "\F040E"; }
5914
+
5906
5915
  .mdib-plex:before {
5907
5916
  content: "\F06BA"; }
5908
5917
 
@@ -7001,6 +7010,18 @@
7001
7010
  .mdib-speaker:before {
7002
7011
  content: "\F04C3"; }
7003
7012
 
7013
+ .mdib-speaker-off:before {
7014
+ content: "\F04C4"; }
7015
+
7016
+ .mdib-speaker-pause:before {
7017
+ content: "\F1B73"; }
7018
+
7019
+ .mdib-speaker-play:before {
7020
+ content: "\F1B72"; }
7021
+
7022
+ .mdib-speaker-stop:before {
7023
+ content: "\F1B74"; }
7024
+
7004
7025
  .mdib-spear:before {
7005
7026
  content: "\F1845"; }
7006
7027