j1-template 2021.3.2 → 2022.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/ads/ad.html +14 -14
  3. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +4 -4
  4. data/_includes/themes/j1/layouts/content_generator_post.html +4 -4
  5. data/_includes/themes/j1/modules/connectors/analytic/google-analytics.html +3 -13
  6. data/_includes/themes/j1/modules/connectors/comment/hyvor.html +4 -5
  7. data/_includes/themes/j1/modules/navigator/generator.html +9 -11
  8. data/_includes/themes/j1/modules/search/docsearch.html +1 -1
  9. data/_includes/themes/j1/procedures/global/create_bs_button.proc +5 -5
  10. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +5 -3
  11. data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
  12. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +3 -3
  13. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  14. data/_layouts/default.html +66 -22
  15. data/_layouts/home.html +1 -1
  16. data/_layouts/raw.html +2 -1
  17. data/assets/data/article_navigator/index.html +1 -1
  18. data/assets/data/authclient.html +11 -11
  19. data/assets/data/banner.html +7 -25
  20. data/assets/data/cookieconsent.html +20 -20
  21. data/assets/data/{fam.html → fab.html} +42 -24
  22. data/assets/data/gallery_customizer.html +6 -6
  23. data/assets/data/menu.html +13 -13
  24. data/assets/data/mmenu.html +2 -2
  25. data/assets/data/panel.html +17 -23
  26. data/assets/data/private.json +1 -1
  27. data/assets/data/quicklinks.html +6 -7
  28. data/assets/data/rtext_resizer.html +1 -1
  29. data/assets/data/themes.bootswatch.json +75 -0
  30. data/assets/data/themes.json +6 -6
  31. data/assets/data/translator.html +23 -23
  32. data/assets/error_pages/HTTP445.html +110 -0
  33. data/assets/themes/j1/adapter/js/bmd.js +1 -1
  34. data/assets/themes/j1/adapter/js/clipboard.js +1 -1
  35. data/assets/themes/j1/adapter/js/cookieConsent.js +19 -10
  36. data/assets/themes/j1/adapter/js/{fam.js → fab.js} +121 -116
  37. data/assets/themes/j1/adapter/js/j1.js +258 -190
  38. data/assets/themes/j1/adapter/js/mmenu.js +18 -24
  39. data/assets/themes/j1/adapter/js/navigator.js +6 -4
  40. data/assets/themes/j1/adapter/js/themer.js +13 -4
  41. data/assets/themes/j1/adapter/js/toccer.js +37 -76
  42. data/assets/themes/j1/adapter/js/translator.js +10 -2
  43. data/assets/themes/j1/core/country-flags/css/theme/uno.min.css +15 -0
  44. data/assets/themes/j1/core/css/icon-fonts/mdi.css +22307 -0
  45. data/assets/themes/j1/core/css/icon-fonts/mdi.min.css +1 -0
  46. data/assets/themes/j1/core/css/icon-fonts/mdil.css +1222 -0
  47. data/assets/themes/j1/core/css/icon-fonts/mdil.min.css +1 -0
  48. data/assets/themes/j1/core/css/icon-fonts/twemoji.css +4 -0
  49. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +5341 -4730
  50. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +3 -1
  51. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.css +8301 -0
  52. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.min.css +3 -0
  53. data/assets/themes/j1/core/css/themes/{uno-dark → unodark}/bootstrap.css +5284 -4646
  54. data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +3 -0
  55. data/assets/themes/j1/core/css/themes/{uno-light → unolight}/bootstrap.css +12188 -12734
  56. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +23 -0
  57. data/assets/themes/j1/core/css/vendor.css +2 -28
  58. data/assets/themes/j1/core/css/vendor.min.css +1 -1
  59. data/assets/themes/j1/core/js/template.js +111 -29
  60. data/assets/themes/j1/core/js/template.min.js +1 -1
  61. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  62. data/assets/themes/j1/modules/bmd/js/bmd.js +2280 -0
  63. data/assets/themes/j1/modules/bmd/js/bmd.min.js +20 -0
  64. data/assets/themes/j1/modules/bootstrap/js/bootstrap.js +5072 -0
  65. data/assets/themes/j1/modules/bootstrap/js/bootstrap.min.js +7 -0
  66. data/assets/themes/j1/modules/bootstrap/js/bootstrap.min.js.map +1 -0
  67. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +19 -17
  68. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  69. data/assets/themes/j1/modules/cryptoJS/js/aes.js +35 -0
  70. data/assets/themes/j1/modules/cryptoJS/js/aes.min.js +35 -0
  71. data/assets/themes/j1/modules/cryptoJS/js/hmac-md5.js +21 -0
  72. data/assets/themes/j1/modules/cryptoJS/js/hmac-ripemd160.js +31 -0
  73. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha1.js +17 -0
  74. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha224.js +19 -0
  75. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha256.js +18 -0
  76. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha3.js +21 -0
  77. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha384.js +27 -0
  78. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha512.js +25 -0
  79. data/assets/themes/j1/modules/cryptoJS/js/md5.js +19 -0
  80. data/assets/themes/j1/modules/cryptoJS/js/pbkdf2.js +19 -0
  81. data/assets/themes/j1/modules/cryptoJS/js/rabbit-legacy.js +36 -0
  82. data/assets/themes/j1/modules/cryptoJS/js/rabbit.js +36 -0
  83. data/assets/themes/j1/modules/cryptoJS/js/rc4.js +33 -0
  84. data/assets/themes/j1/modules/cryptoJS/js/ripemd160.js +29 -0
  85. data/assets/themes/j1/modules/cryptoJS/js/sha1.js +15 -0
  86. data/assets/themes/j1/modules/cryptoJS/js/sha224.js +17 -0
  87. data/assets/themes/j1/modules/cryptoJS/js/sha256.js +16 -0
  88. data/assets/themes/j1/modules/cryptoJS/js/sha3.js +19 -0
  89. data/assets/themes/j1/modules/cryptoJS/js/sha384.js +25 -0
  90. data/assets/themes/j1/modules/cryptoJS/js/sha512.js +23 -0
  91. data/assets/themes/j1/modules/cryptoJS/js/tripledes.js +51 -0
  92. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.2.js +460 -0
  93. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.js +379 -353
  94. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.min.js +1 -1
  95. data/assets/themes/j1/modules/{fam/css/theme/uno/fam.css → fab/css/theme/uno/fab.css} +32 -28
  96. data/assets/themes/j1/modules/{fam/css/theme/uno/fam.min.css → fab/css/theme/uno/fab.min.css} +3 -3
  97. data/assets/themes/j1/modules/{materialize → fab}/js/cash.js +20 -2
  98. data/assets/themes/j1/modules/{fam/js/fam.js → fab/js/fab.js} +4 -2
  99. data/assets/themes/j1/modules/gtag-opt-in/js/gtag-opt-in.js +107 -0
  100. data/assets/themes/j1/modules/{util/js/gtag-opt-in.js → gtag-opt-in/js/gtag-opt-in.min.js} +15 -1
  101. data/assets/themes/j1/modules/lightGallery/js/modules/lg-thumbnail.min.js +4 -1
  102. data/assets/themes/j1/modules/materialize/js/autocomplete.js +1 -1
  103. data/assets/themes/j1/modules/materialize/js/bin/materialize.js +12374 -0
  104. data/assets/themes/j1/modules/materialize/js/bin/materialize.min.js +6 -0
  105. data/assets/themes/j1/modules/materialize/js/global.js +1 -1
  106. data/assets/themes/j1/modules/materialize/js/select.js +1 -1
  107. data/assets/themes/j1/modules/materialize/js/{tapTarget.js → tapTarget.cash.js} +1 -1
  108. data/assets/themes/j1/modules/materialize/js/tapTarget.jQuery.js +187 -0
  109. data/assets/themes/j1/modules/msDropdown/css/themes/uno/msDropdown.css +278 -0
  110. data/assets/themes/j1/modules/popper/js/popper.js +1670 -2346
  111. data/assets/themes/j1/modules/popper/js/popper.min.js +6 -4
  112. data/assets/themes/j1/modules/popper/js/popper.min.js.map +1 -1
  113. data/assets/themes/j1/modules/scroller/js/scroller.js +6 -6
  114. data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
  115. data/assets/themes/j1/modules/translator/js/translator.js +6 -2
  116. data/assets/themes/j1/modules/translator/js/translator.min.js +1 -1
  117. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.js +2 -2
  118. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.min.js +1 -1
  119. data/exe/j1 +6 -7
  120. data/lib/j1/commands/generate.rb +15 -16
  121. data/lib/j1/version.rb +1 -1
  122. data/lib/starter_web/Gemfile +7 -1
  123. data/lib/starter_web/_config.yml +21 -24
  124. data/lib/starter_web/_data/_defaults/j1_config.yml +1 -1
  125. data/lib/starter_web/_data/_defaults/private.yml +3 -2
  126. data/lib/starter_web/_data/_defaults/resources.yml +1 -1
  127. data/lib/starter_web/_data/blocks/banner.yml +71 -68
  128. data/lib/starter_web/_data/blocks/defaults/banner.yml +5 -5
  129. data/lib/starter_web/_data/blocks/defaults/panel.yml +3 -3
  130. data/lib/starter_web/_data/blocks/panel.yml +171 -73
  131. data/lib/starter_web/_data/builder/defaults/_blog_navigator.yml +396 -0
  132. data/lib/starter_web/_data/builder/defaults/blog_navigator.yml +77 -64
  133. data/lib/starter_web/_data/j1_config.yml +3 -3
  134. data/lib/starter_web/_data/layouts/article_navigator.yml +1 -1
  135. data/lib/starter_web/_data/layouts/blog_archive.yml +1 -1
  136. data/lib/starter_web/_data/layouts/collection.yml +1 -1
  137. data/lib/starter_web/_data/layouts/default.yml +1 -1
  138. data/lib/starter_web/_data/layouts/home.yml +6 -26
  139. data/lib/starter_web/_data/layouts/news_panel_posts.yml +1 -1
  140. data/lib/starter_web/_data/layouts/page.yml +1 -1
  141. data/lib/starter_web/_data/layouts/post.yml +1 -1
  142. data/lib/starter_web/_data/modules/defaults/attics.yml +1 -1
  143. data/lib/starter_web/_data/modules/defaults/{fam.yml → fab.yml} +8 -7
  144. data/lib/starter_web/_data/modules/defaults/navigator.yml +3 -0
  145. data/lib/starter_web/_data/modules/defaults/rtable.yml +2 -1
  146. data/lib/starter_web/_data/modules/defaults/scoller.yml +33 -0
  147. data/lib/starter_web/_data/modules/defaults/themer.yml +1 -1
  148. data/lib/starter_web/_data/modules/defaults/toccer.yml +5 -4
  149. data/lib/starter_web/_data/modules/{fam.yml → fab.yml} +31 -31
  150. data/lib/starter_web/_data/modules/scroller.yml +2 -2
  151. data/lib/starter_web/_data/modules/toccer.yml +3 -5
  152. data/lib/starter_web/_data/modules/translator.yml +3 -3
  153. data/lib/starter_web/_data/private.yml +3 -2
  154. data/lib/starter_web/_data/resources.yml +72 -33
  155. data/lib/starter_web/_includes/attributes.asciidoc +121 -122
  156. data/lib/starter_web/_plugins/encodeBase64.rb +46 -0
  157. data/lib/starter_web/_plugins/encryptAES.rb +53 -0
  158. data/lib/starter_web/_plugins/filters.rb +2 -1
  159. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  160. data/lib/starter_web/_plugins/minifyJSON.rb +2 -2
  161. data/lib/starter_web/assets/images/pages/roundtrip/500_themes/themes-menu-1280x800.jpg +0 -0
  162. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +1 -4
  163. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +2 -2
  164. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-site-generators.adoc +2 -2
  165. data/lib/starter_web/collections/posts/public/featured/_posts/2021-03-03-about-j1.adoc +2 -2
  166. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-wiki-series.adoc +1 -1
  167. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-wiki-series.adoc +1 -1
  168. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-wiki-series.adoc +2 -2
  169. data/lib/starter_web/index.html +1 -1
  170. data/lib/starter_web/package.json +1 -1
  171. data/lib/starter_web/pages/_test_pages/100_side-bar-tester.adoc +244 -0
  172. data/lib/starter_web/pages/_test_pages/_includes/attributes.asciidoc +110 -0
  173. data/lib/starter_web/pages/_test_pages/_includes/documents/100_gistblock.asciidoc +28 -0
  174. data/lib/starter_web/pages/_test_pages/_includes/documents/410_bottom_info.asciidoc +14 -0
  175. data/lib/starter_web/pages/_test_pages/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
  176. data/lib/starter_web/pages/_test_pages/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
  177. data/lib/starter_web/pages/_test_pages/_includes/documents/410_central_success.asciidoc +11 -0
  178. data/lib/starter_web/pages/_test_pages/_includes/documents/410_full_height_left_info.asciidoc +11 -0
  179. data/lib/starter_web/pages/_test_pages/_includes/documents/410_full_height_right_success.asciidoc +11 -0
  180. data/lib/starter_web/pages/_test_pages/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
  181. data/lib/starter_web/pages/_test_pages/_includes/documents/410_top_info.asciidoc +11 -0
  182. data/lib/starter_web/pages/_test_pages/_includes/documents/410_top_left_info.asciidoc +11 -0
  183. data/lib/starter_web/pages/_test_pages/_includes/documents/410_top_right_success.asciidoc +11 -0
  184. data/lib/starter_web/pages/_test_pages/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
  185. data/lib/starter_web/pages/_test_pages/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
  186. data/lib/starter_web/pages/_test_pages/accordion-01-tester.adoc +220 -0
  187. data/lib/starter_web/pages/_test_pages/accordion-02-tester.adoc +177 -0
  188. data/lib/starter_web/pages/_test_pages/accordion-03-tester.adoc +148 -0
  189. data/lib/starter_web/pages/_test_pages/attribute-changes-01-tester.adoc +226 -0
  190. data/lib/starter_web/pages/_test_pages/backdrop-tester.adoc +109 -0
  191. data/lib/starter_web/pages/_test_pages/button-tester-1.adoc +127 -0
  192. data/lib/starter_web/pages/_test_pages/card-tester.adoc +128 -0
  193. data/lib/starter_web/pages/_test_pages/cookieConsent.adoc +96 -0
  194. data/lib/starter_web/pages/_test_pages/deepl.0.adoc +258 -0
  195. data/lib/starter_web/pages/_test_pages/deepl.adoc +204 -0
  196. data/lib/starter_web/pages/_test_pages/desandro-button.adoc +171 -0
  197. data/lib/starter_web/pages/_test_pages/desandro.adoc +147 -0
  198. data/lib/starter_web/pages/_test_pages/flipcard-1-tester.adoc +308 -0
  199. data/lib/starter_web/pages/_test_pages/formular-01-tester.adoc +167 -0
  200. data/lib/starter_web/pages/_test_pages/formular-02-tester.adoc +727 -0
  201. data/lib/starter_web/pages/_test_pages/google-translate-tester.0.adoc +113 -0
  202. data/lib/starter_web/pages/_test_pages/google-translate-tester.1.adoc +233 -0
  203. data/lib/starter_web/pages/_test_pages/google-translate-tester.3.adoc +149 -0
  204. data/lib/starter_web/pages/_test_pages/google-translate-tester.4.adoc +239 -0
  205. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester-2.adoc +183 -0
  206. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester-3.adoc +235 -0
  207. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester-4.adoc +222 -0
  208. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester-5.adoc +119 -0
  209. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester.1.adoc +236 -0
  210. data/lib/starter_web/pages/_test_pages/infinite-scroll-tester.adoc +225 -0
  211. data/lib/starter_web/pages/_test_pages/list-group-tester.adoc +265 -0
  212. data/lib/starter_web/pages/_test_pages/tictok.adoc +127 -0
  213. data/lib/starter_web/pages/public/about/about_site.adoc +1 -1
  214. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +1 -1
  215. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +1 -1
  216. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +1 -1
  217. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.a2p +1 -1
  218. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +2 -2
  219. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +2 -2
  220. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +2 -2
  221. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +5 -5
  222. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +4 -4
  223. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +4 -3
  224. data/lib/starter_web/pages/public/blog/navigator/archive.html +4 -4
  225. data/lib/starter_web/pages/public/blog/navigator/index.html +1 -1
  226. data/lib/starter_web/pages/public/learn/quickstart.adoc +3 -3
  227. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +2 -2
  228. data/lib/starter_web/pages/public/learn/roundtrip/100_present_videos.adoc +2 -2
  229. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +6 -7
  230. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +2 -2
  231. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +2 -2
  232. data/lib/starter_web/pages/public/learn/roundtrip/410_bs_modals_extentions.adoc +3 -3
  233. data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +2 -2
  234. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +4 -4
  235. data/lib/starter_web/pages/public/learn/roundtrip/600_quicksearch.adoc +13 -11
  236. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
  237. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_bottom_info.asciidoc +3 -3
  238. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +1 -1
  239. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +1 -1
  240. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_central_success.asciidoc +1 -1
  241. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_full_height_left_info.asciidoc +1 -1
  242. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_full_height_right_success.asciidoc +1 -1
  243. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_top_info.asciidoc +1 -1
  244. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_top_left_info.asciidoc +1 -1
  245. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_top_right_success.asciidoc +1 -1
  246. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +51 -51
  247. data/lib/starter_web/pages/public/learn/where_to_go.adoc +3 -3
  248. data/lib/starter_web/pages/public/legal/de/100_copyright.adoc +3 -3
  249. data/lib/starter_web/pages/public/legal/de/100_impress.adoc +3 -3
  250. data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +7 -7
  251. data/lib/starter_web/pages/public/legal/de/400_comment_policy.adoc +3 -3
  252. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +3 -3
  253. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +3 -3
  254. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +6 -7
  255. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +3 -3
  256. data/lib/starter_web/pages/public/manuals/dropdown-help.adoc +1 -1
  257. data/lib/starter_web/pages/public/panels/intro_panel/_includes/attributes.asciidoc +55 -0
  258. data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +53 -5
  259. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +1688 -686
  260. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  261. data/lib/starter_web/utilsrv/package.json +1 -1
  262. metadata +107 -29
  263. data/assets/themes/j1/core/css/themes/uno-dark/bootstrap.min.css +0 -1
  264. data/assets/themes/j1/core/css/themes/uno-light/bootstrap.min.css +0 -23
  265. data/assets/themes/j1/modules/bmd/css/bootstrap-material-design.css +0 -12177
  266. data/assets/themes/j1/modules/bmd/css/bootstrap-material-design.min.css +0 -8
  267. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.full.js +0 -6930
  268. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.js +0 -6936
  269. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.js.map +0 -1
  270. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.min.js +0 -1
  271. data/assets/themes/j1/modules/popper/js/popper.js.map +0 -1
  272. data/assets/themes/j1/modules/util/js/domready.js +0 -146
  273. data/lib/j1/commands/help.rb +0 -32
  274. data/lib/j1/commands/module.rb +0 -69
  275. data/lib/starter_web/_data/blocks/defaults/panel.1.yml +0 -256
  276. data/lib/starter_web/_data/blocks/defaults/panel.2.yml +0 -250
@@ -0,0 +1,460 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/modules/deeplAPI/js/deeplAPI.js
4
+ # J1 core module for deeplAPI
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ #
9
+ # Copyright (C) 2021 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # For details, see https://jekyll.one
13
+ # -----------------------------------------------------------------------------
14
+ # NOTE: Based on https://github.com/jquery-boilerplate/jquery-boilerplate
15
+ # See: https://www.dotnetcurry.com/jquery/1069/authoring-jquery-plugins
16
+ # -----------------------------------------------------------------------------
17
+ */
18
+
19
+ // the semi-colon before function invocation is a SAFETY method against
20
+ // concatenated scripts and/or other plugins which may NOT be closed
21
+ // properly.
22
+ //
23
+ ;(function($, window, document, undefined) {
24
+
25
+ 'use strict';
26
+
27
+ // Create the defaults
28
+ var pluginName = 'deeplAPI',
29
+ defaults = {
30
+ api: 'free', // free (default) | pro
31
+ auth_key: '', // API authorization key
32
+ source_lang: 'auto', // autodetection (default: auto)|supported language. Specifies the language for the input text.
33
+ target_lang: 'DE', // language to be tranlasted in.
34
+ max_chars: false, // false (unlimited) or number. Number of chars from the source text passed for translation.
35
+ split_sentences: '1', // enabled (1, default)|disabled (0)|nonewlines. Sets the translation engine to first split the input text into sentences.
36
+ preserve_formatting: '0', // disabled (0, default)|enabled (1). Sets the translation engine to respect the original formatting.
37
+ formality: 'default', // default|more|less. Sets the translated text should lean towards formal or informal language.
38
+ tag_handling: false, // false (value=0)|xml. Sets which kind of tags should be handled. If set, API is able to process structured XML content.
39
+ outline_detection: true, // false (value=0) or true (NO value passed). Controls the automatic mechanism on XML tags for splitting. If disabled, all splitting_tags are to be specified.
40
+ non_splitting_tags: false, // false or comma-separated list of XML tags. Disable automated splitting on the tags specified.
41
+ splitting_tags: false, // false or comma-separated list of XML tags which always cause splitting.
42
+ ignore_tags: false, // false or comma-separated list of XML tags that indicate text NOT to be translated.
43
+ onInit: function (){}, // callback after plugin has initialized.
44
+ onBeforeTranslation: function (){}, // callback before translation started.
45
+ onAfterTranslation: function (){} // callback after translation finished.
46
+ };
47
+
48
+ // -------------------------------------------------------------------------
49
+ // plugin constructor
50
+ // create the jquery plugin
51
+ // -------------------------------------------------------------------------
52
+ function Plugin (element, options) {
53
+ this.element = element;
54
+ this.settings = $.extend( {}, defaults, options);
55
+ this.settings.elementID = '#' + this.element.id;
56
+ this.xhr = new XMLHttpRequest();
57
+
58
+ // call the plugin initializer
59
+ this.init(this.settings);
60
+ }
61
+
62
+ // Avoid plugin prototype conflicts
63
+ $.extend(Plugin.prototype, {
64
+ // -----------------------------------------------------------------------
65
+ // init()
66
+ // initialize|run the translation
67
+ // -----------------------------------------------------------------------
68
+ init: function(options) {
69
+ var _this = this;
70
+ var logger = log4javascript.getLogger('deeplAPI.init');
71
+ var data_url = '/assets/data/private.json';
72
+ var settings = options;
73
+ var auth_key;
74
+ var encodedString;
75
+ var encryptedString;
76
+ var jsonObject;
77
+
78
+ logger.info('\n' + 'initializing plugin: started');
79
+
80
+ // loading private data (auth key)
81
+ $.ajax({
82
+ url: data_url,
83
+ dataType: 'text',
84
+ success: function (data) {
85
+ encodedString = atob(data);
86
+ encryptedString = _this.decryptData(data, '8c841fc2e3aa2bd5', '0000000000000000' );
87
+ jsonObject = JSON.parse(encryptedString);
88
+ auth_key = jsonObject.translators.deepl.auth_key;
89
+ },
90
+ error: function (jqXHR, textStatus, errorThrown) {
91
+ logger.error('\n' + 'failed to retrieve JSON data from: ' + data_url);
92
+ }
93
+ });
94
+
95
+ // run the translation (if private data loaded)
96
+ var dependencies_met_page_ready = setInterval (function () {
97
+ if (typeof auth_key !== 'undefined' ) {
98
+ settings.auth_key = auth_key;
99
+ _this.translate(settings);
100
+ logger.info('\n' + 'translation: in progress');
101
+ clearInterval(dependencies_met_page_ready);
102
+ }
103
+ });
104
+ },
105
+
106
+ encryptData: function (message = '', key = '') {
107
+ var message = CryptoJS.AES.encrypt(message, key);
108
+
109
+ return message.toString();
110
+ },
111
+
112
+ decryptData: function (message = '', key = '', iv = '') {
113
+ // var test_key_32 = "2e35f242a46d67eeb74aabc37d5e5d05";
114
+ // var data = CryptoJS.AES.encrypt("Message", test_key_32); // Encryption Part
115
+ // var decrypted = CryptoJS.AES.decrypt(data, test_key_32).toString(CryptoJS.enc.Utf8);
116
+
117
+ // 1. Separate ciphertext and salt
118
+ var encryptedWA = CryptoJS.enc.Base64.parse(message);
119
+ var prefixWA = CryptoJS.lib.WordArray.create(encryptedWA.words.slice(0, 8/4)); // Salted__ prefix
120
+ // var saltWA = CryptoJS.lib.WordArray.create(encryptedWA.words.slice(8/4, 16/4)); // 8 bytes salt: 0x0123456789ABCDEF
121
+ var ciphertextWA = CryptoJS.lib.WordArray.create(encryptedWA.words.slice(16/4, encryptedWA.words.length)); // ciphertext
122
+
123
+ // 2. Determine key and IV using PBKDF2
124
+ // var password = 'mypassword'
125
+ // var keyIvWA = CryptoJS.PBKDF2(
126
+ // password,
127
+ // saltWA,
128
+ // {
129
+ // keySize: (32+16)/4, // key and IV
130
+ // iterations: 10000,
131
+ // hasher: CryptoJS.algo.SHA256
132
+ // }
133
+ // );
134
+ // var keyWA = CryptoJS.lib.WordArray.create(keyIvWA.words.slice(0, 32/4));
135
+ // var ivWA = CryptoJS.lib.WordArray.create(keyIvWA.words.slice(32/4, (32+16)/4));
136
+
137
+ // 3. Decrypt
138
+ var decryptedWA = CryptoJS.AES.decrypt(
139
+ {ciphertext: ciphertextWA},
140
+ key,
141
+ {iv: iv}
142
+ );
143
+ var decrypted = decryptedWA.toString(CryptoJS.enc.Utf8)
144
+ return decrypted;
145
+ },
146
+
147
+ // -----------------------------------------------------------------------
148
+ // prepareXHR
149
+ // Prepare a XHR request according to DeepL API specification
150
+ // for the required HTTP header settings
151
+ // See: https://www.deepl.com/de/docs-api/simulator/
152
+ // -----------------------------------------------------------------------
153
+ // NOTE: "User-Agent" NOT used as the use is qualified UNSECURE
154
+ // -----------------------------------------------------------------------
155
+ prepareXHR: function (settings) {
156
+ if (settings.api === 'free') {
157
+ this.xhr.open("POST", "https://api-free.deepl.com/v2/translate", true);
158
+ } else if (settings.api === 'pro') {
159
+ this.xhr.open("POST", "https://api.deepl.com/v2/translate", true);
160
+ } else {
161
+ this.xhr.open("POST", "https://api-free.deepl.com/v2/translate", true);
162
+ }
163
+ // Set required header parameters
164
+ this.xhr.setRequestHeader("Accept", "*/*");
165
+ this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
166
+ },
167
+
168
+ // -----------------------------------------------------------------------
169
+ // prepareText
170
+ // Prepare text function used to parse, or arrange text, designed as
171
+ // a module. Currently it splits all text whenever a newline ("\n")
172
+ // is met, so that it preserves the original layout of the text, which
173
+ // would have otherwise been lost because of the way DeepL accepts
174
+ // multiple sentences.
175
+ // -----------------------------------------------------------------------
176
+ prepareText: function (source_text) {
177
+ return source_text.split("\n");
178
+ },
179
+
180
+ // -----------------------------------------------------------------------
181
+ // translate
182
+ // Translate text function which uses all the other modules, in order to
183
+ // create a request, which is sent to the DeepL API to translate, and
184
+ // then display the result, designed as a module.
185
+ // -----------------------------------------------------------------------
186
+ translate: function (settings) {
187
+ const logger = log4javascript.getLogger('deeplAPI.translate');
188
+ const READYSTATE_DONE = 4;
189
+ const STATUS_OK = 200;
190
+ const SUPPORTED_LANG = ['BG', 'CS', 'DA', 'DE', 'EL', 'EN-GB', 'EN-US', 'EN', 'ES', 'ET', 'FI', 'FR', 'HU', 'IT', 'JA', 'LT', 'LV', 'NL', 'PL', 'PT-PT', 'PT-BR', 'PT', 'RO', 'RU', 'SK', 'SL', 'SV', 'ZH'];
191
+ const ALLOWED_FORMALITY_LANG = ['DE', 'FR', 'IT', 'ES', 'NL', 'PL', 'PT', 'PT-BR', 'RU'];
192
+ const ALLOWED_TAG_HANDLING = ['xml'];
193
+ const TARGET_ELEMENT = settings.targetElement;
194
+ const TARGET_ELEMENT_EXISTS = $(TARGET_ELEMENT).length;
195
+ const ERROR_TEXT = 'Translation failed.' + '\n' + 'Reason: ';
196
+ const WARNING_TEXT = 'Translation skipped.' + '\n' + 'Reason: ';
197
+
198
+ var BASE_TARGET_ELEMENT;
199
+ var ELEMENT_TYPE;
200
+ var SOURCE_TEXT_FOUND;
201
+
202
+ var API_RESPONSE = {};
203
+ API_RESPONSE['400'] = 'Bad request. Please check error message and your parameters.';
204
+ API_RESPONSE['401'] = 'Authorization failed. Please supply a valid DeepL-Auth-Key.';
205
+ API_RESPONSE['403'] = 'Forbidden. The access to the requested resource is denied, because of insufficient access rights.';
206
+ API_RESPONSE['404'] = 'The requested resource could not be found.';
207
+ API_RESPONSE['413'] = 'The request size exceeds the limit.';
208
+ API_RESPONSE['415'] = 'The requested entries format specified in the Accept header is not supported.';
209
+ API_RESPONSE['429'] = 'Too many requests. Please wait and resend your request.';
210
+ API_RESPONSE['456'] = 'Quota exceeded. The maximum amount of glossaries has been reached.';
211
+ API_RESPONSE['500'] = 'Internal server error';
212
+ API_RESPONSE['503'] = 'Resource currently unavailable. Try again later.';
213
+ API_RESPONSE['529'] = 'Too many requests. Please wait and resend your request.';
214
+
215
+ var reason_text;
216
+ var request = '';
217
+ var element = '';
218
+ var source_text = '';
219
+ var source_text_lines = '';
220
+ var source_lang;
221
+ var target_lang;
222
+
223
+ // check if passed HTML element or ID exists
224
+ if (TARGET_ELEMENT_EXISTS) {
225
+ BASE_TARGET_ELEMENT = (TARGET_ELEMENT.includes('.')||TARGET_ELEMENT.includes('#')) ? TARGET_ELEMENT.substring(1) : TARGET_ELEMENT;
226
+ ELEMENT_TYPE = $(TARGET_ELEMENT).get(0).nodeName;
227
+
228
+ // Read the text to be translated from the given HTML element
229
+ if (ELEMENT_TYPE === 'TEXTAREA') {
230
+ source_text = this.element.value;
231
+ } else if (ELEMENT_TYPE === 'P') {
232
+ element = this.element;
233
+ source_text = $(TARGET_ELEMENT).text();
234
+ }
235
+ SOURCE_TEXT_FOUND = source_text.length;
236
+ } else {
237
+ logger.error('\n' + 'target element does not exists: ' + TARGET_ELEMENT);
238
+ return false;
239
+ }
240
+
241
+ // limit the source text if required
242
+ if (settings.max_char && source_text.length > settings.max_char ) {
243
+ var source_text_limited = source_text.substring(0, settings.max_char -3);
244
+ source_text = source_text_limited + ' ...';
245
+ logger.info('\n' + 'limit for source text ' + '(max: ' + settings.max_char + ')' + ' reached: ' + source_text.length);
246
+ }
247
+ source_text_lines = this.prepareText(source_text);
248
+
249
+ // prepare the XHR request for the API (free/pro) requested
250
+ this.prepareXHR(settings);
251
+
252
+ // Makes a request with every line, as a new text to translate
253
+ var source_text_request = "";
254
+ for(var i = 0; i < source_text_lines.length; i++) {
255
+ source_text_request += "&text=" + source_text_lines[i];
256
+ }
257
+
258
+ this.xhr.onload = function () {
259
+ if (this.readyState === READYSTATE_DONE) {
260
+ if (this.status === STATUS_OK) {
261
+ // JSON parse the response
262
+ var result = JSON.parse(this.responseText);
263
+
264
+ // recreate the response as one text to keep its original layout
265
+ var translated_text = "";
266
+ for(var i = 0; i < result.translations.length; i++) {
267
+ translated_text += result.translations[i].text;
268
+ translated_text += "\n";
269
+ }
270
+ logger.info('\n' + 'translation: finished');
271
+
272
+ // update the HTM element (content) by the tranlation
273
+ if (ELEMENT_TYPE === 'TEXTAREA') {
274
+ $(TARGET_ELEMENT).val(translated_text);
275
+ } else if (ELEMENT_TYPE === 'P') {
276
+ $(TARGET_ELEMENT).text(translated_text);
277
+ }
278
+ } else {
279
+ logger.error('\n' + 'API returned ' + this.status + ': ' + API_RESPONSE[this.status]);
280
+ }
281
+ }
282
+ };
283
+
284
+ // ---------------------------------------------------------------------
285
+ // preflight (validity check) on given parameters
286
+ // ---------------------------------------------------------------------
287
+
288
+ // Check for SUPPORTED language by option source_lang|target_lang
289
+ source_lang = this.settings.source_lang;
290
+ target_lang = this.settings.target_lang;
291
+
292
+ if (this.settings.source_lang !== 'auto') {
293
+ this.settings.source_lang = (SUPPORTED_LANG.indexOf(this.settings.source_lang) > -1) ? this.settings.source_lang : false;
294
+ }
295
+ this.settings.target_lang = (SUPPORTED_LANG.indexOf(this.settings.target_lang) > -1) ? this.settings.target_lang : false;
296
+
297
+ // stop processing if invalid language or NO AUTH key passed
298
+ if (!this.settings.auth_key || !this.settings.source_lang || !this.settings.target_lang) {
299
+ if (!this.settings.auth_key) {
300
+ reason_text = 'NO AUTH key passed.';
301
+ logger.error('\n' + 'invalid option found. ' + reason_text);
302
+ }
303
+ if (!this.settings.source_lang) {
304
+ reason_text = 'WRONG source language passed: ' + source_lang;
305
+ logger.error('\n' + 'invalid option found. ' + reason_text);
306
+ }
307
+ if (!this.settings.target_lang) {
308
+ reason_text = 'WRONG target language passed: ' + target_lang;
309
+ logger.error('\n' + 'invalid option found. ' + reason_text);
310
+ }
311
+
312
+ // update the HTML element (content) by an error text
313
+ if (ELEMENT_TYPE === 'TEXTAREA') {
314
+ $(TARGET_ELEMENT).val(ERROR_TEXT + reason_text);
315
+ } else if (ELEMENT_TYPE === 'P') {
316
+ $(TARGET_ELEMENT).text(ERROR_TEXT + reason_text);
317
+ }
318
+ return false;
319
+ }
320
+
321
+ if(!SOURCE_TEXT_FOUND) {
322
+ reason_text = 'NO text found for translation';
323
+ // update the HTML element (content) by an error text
324
+ if (ELEMENT_TYPE === 'TEXTAREA') {
325
+ $(TARGET_ELEMENT).val(WARNING_TEXT + reason_text);
326
+ } else if (ELEMENT_TYPE === 'P') {
327
+ $(TARGET_ELEMENT).text(WARNING_TEXT + reason_text);
328
+ }
329
+ logger.warn('\n' + 'no text found for translation');
330
+ return false;
331
+ }
332
+
333
+ // Check for VALID language supported by option 'formality'
334
+ if (this.settings.formality !== 'default' ) {
335
+ if (!(ALLOWED_FORMALITY_LANG.indexOf(this.settings.target_lang) > -1)) {
336
+ logger.warn('\n' + 'wrong language found for formality setting: ' + this.settings.target_lang);
337
+ }
338
+ this.settings.formality = (ALLOWED_FORMALITY_LANG.indexOf(this.settings.target_lang) > -1) ? this.settings.formality : 'default';
339
+ }
340
+
341
+ // Check for VALID tag handling and options
342
+ if (this.settings.tag_handling) {
343
+ var tag_handling = this.settings.tag_handling;
344
+ // check for VALID method
345
+ this.settings.tag_handling = (ALLOWED_TAG_HANDLING.indexOf(this.settings.tag_handling) > -1) ? this.settings.tag_handling : false;
346
+ if (this.settings.tag_handling) {
347
+ this.settings.non_splitting_tags = this.settings.non_splitting_tags ? encodeURIComponent(this.settings.non_splitting_tags) : false;
348
+ this.settings.splitting_tags = this.settings.splitting_tags ? encodeURIComponent(this.settings.splitting_tags) : false;
349
+ this.settings.ignore_tags = this.settings.ignore_tags ? encodeURIComponent(this.settings.ignore_tags) : false;
350
+ } else {
351
+ logger.error('\n' + 'invalid option found for tag handling : ' + tag_handling);
352
+ logger.warn('\n' + 'disable option: ' + 'tag_handling');
353
+ // reset to defaults if WRONG method detected
354
+ if (this.settings.non_splitting_tags) {
355
+ logger.warn('\n' + 'disable option: ' + this.settings.non_splitting_tags);
356
+ this.settings.non_splitting_tags = false;
357
+ }
358
+ if (this.settings.splitting_tags) {
359
+ logger.warn('\n' + 'disable option : ' + this.settings.splitting_tags);
360
+ this.settings.splitting_tags = false;
361
+ }
362
+ if (this.settings.ignore_tags) {
363
+ logger.warn('\n' + 'disable option: ' + this.settings.ignore_tags);
364
+ this.settings.ignore_tags = false;
365
+ }
366
+ }
367
+ } else {
368
+ // reset tags to their defaults if NO tag_handling is enabled but settings passed
369
+ if (this.settings.non_splitting_tags) {
370
+ logger.warn('\n' + 'invalid option found: ' + this.settings.non_splitting_tags);
371
+ this.settings.non_splitting_tags = false;
372
+ }
373
+ if (this.settings.splitting_tags) {
374
+ logger.warn('\n' + 'invalid option found: ' + this.settings.splitting_tags);
375
+ this.settings.splitting_tags = false;
376
+ }
377
+ if (this.settings.ignore_tags) {
378
+ logger.warn('\n' + 'invalid option found: ' + this.settings.ignore_tags);
379
+ this.settings.ignore_tags = false;
380
+ }
381
+ }
382
+
383
+ // ---------------------------------------------------------------------
384
+ // construct the API request body
385
+ // ---------------------------------------------------------------------
386
+ request = "auth_key=" + this.settings.auth_key;
387
+ request += (this.settings.source_lang !== 'auto' ) ? "&source_lang=" + this.settings.source_lang : '';
388
+ request += "&target_lang=" + this.settings.target_lang;
389
+ request += (this.settings.formality !== 'default' ) ? "&formality=" + this.settings.formality : '';
390
+ request += (this.settings.split_sentences) ? "&split_sentences=" + this.settings.formality : '';
391
+ request += (this.settings.tag_handling) ? "&tag_handling=" + this.settings.tag_handling : "&tag_handling=0";
392
+ request += (this.settings.tag_handling && this.settings.non_splitting_tags) ? "&non_splitting_tags=" + this.settings.non_splitting_tags : '';
393
+ request += (this.settings.tag_handling && this.settings.splitting_tags) ? "&splitting_tags=" + this.settings.splitting_tags : '';
394
+ request += (this.settings.tag_handling && this.settings.ignore_tags) ? "&ignore_tags=" + this.settings.ignore_tags : '';
395
+ request += source_text_request;
396
+
397
+ // Send the constructed request to the API for translation
398
+ this.xhr.send(request);
399
+ } // END translate
400
+
401
+ }); // END prototype
402
+
403
+ // ---------------------------------------------------------------------------
404
+ // plugin wrapper
405
+ // A really lightweight plugin wrapper around the constructor,
406
+ // wrapper around the constructor to prevent multiple instantiations
407
+ // preventing against multiple instantiations and allowing any
408
+ // public function (ie. a function whose name doesn't start
409
+ // with an underscore) to be called via the jQuery plugin,
410
+ // e.g. $(element).defaultPluginName('functionName', arg1, arg2)
411
+ // ---------------------------------------------------------------------------
412
+ $.fn[pluginName] = function ( options ) {
413
+ var args = arguments;
414
+
415
+ // Is the first parameter an object (options), or was omitted,
416
+ // instantiate a new instance of the plugin.
417
+ //
418
+ if (options === undefined || typeof options === 'object') {
419
+ return this.each(function () {
420
+ // Only allow the plugin to be instantiated once,
421
+ // so we check that the element has no plugin instantiation yet
422
+ if (!$.data(this, 'plugin_' + pluginName)) {
423
+ // if it has no instance, create a new one, pass options to the
424
+ // plugin constructor, and store the plugin instance in the
425
+ // elements jQuery data object.
426
+ $.data(this, 'plugin_' + pluginName, new Plugin( this, options ));
427
+ }
428
+ });
429
+ } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
430
+ // If the first parameter is a string and it doesn't start
431
+ // with an underscore or "contains" the `init`-function,
432
+ // treat this as a call to a public method.
433
+
434
+ // Cache the method call to make it possible to return a value
435
+ var returns;
436
+
437
+ this.each(function () {
438
+ var instance = $.data(this, 'plugin_' + pluginName);
439
+
440
+ // Tests that there's already a plugin-instance
441
+ // and checks that the requested public method exists
442
+ if (instance instanceof Plugin && typeof instance[options] === 'function') {
443
+ // Call the method of our plugin instance,
444
+ // and pass it the supplied arguments.
445
+ returns = instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
446
+ }
447
+
448
+ // Allow instances to be destroyed via the 'destroy' method
449
+ if (options === 'destroy') {
450
+ $.data(this, 'plugin_' + pluginName, null);
451
+ }
452
+ });
453
+
454
+ // If the earlier cached method gives a value back return the value,
455
+ // otherwise return "this" to preserve chainability.
456
+ return returns !== undefined ? returns : this;
457
+ }
458
+ }; // END plugin wrapper
459
+
460
+ })(jQuery, window, document);