j1-template 2021.0.13 → 2021.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (411) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/footer/boxes/legal_statements.proc +4 -0
  3. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +34 -12
  4. data/_includes/themes/j1/layouts/content_generator_post.html +7 -5
  5. data/_includes/themes/j1/layouts/layout_metadata_generator.html +36 -35
  6. data/_includes/themes/j1/modules/connectors/ad/google-adsense.html +1 -1
  7. data/_includes/themes/j1/modules/connectors/ads +1 -1
  8. data/_includes/themes/j1/modules/connectors/analytic/google-analytics.html +1 -1
  9. data/_includes/themes/j1/modules/connectors/analytics +2 -3
  10. data/_includes/themes/j1/modules/connectors/comment/disqus.html +1 -1
  11. data/_includes/themes/j1/modules/navigator/generator.html +6 -6
  12. data/_includes/themes/j1/procedures/posts/create_series_header.proc +2 -0
  13. data/_layouts/default.html +11 -1
  14. data/apps/public/cc/index.adoc +13 -4
  15. data/assets/data/authclient.html +5 -1
  16. data/assets/data/banner.html +5 -0
  17. data/assets/data/carousel.json +1 -1
  18. data/assets/data/cookiebar.html +4 -0
  19. data/assets/data/fam.html +7 -2
  20. data/assets/data/footer.html +4 -0
  21. data/assets/data/galleries.json +2 -2
  22. data/assets/data/gallery_customizer.html +7 -2
  23. data/assets/data/menu.html +10 -7
  24. data/assets/data/mmenu.html +4 -1
  25. data/assets/data/mmenu_sidebar.html +5 -1
  26. data/assets/data/mmenu_toc.html +4 -0
  27. data/assets/data/panel.html +4 -0
  28. data/assets/data/quicklinks.html +5 -0
  29. data/assets/error_pages/HTTP204.html +2 -1
  30. data/assets/error_pages/HTTP400.html +2 -1
  31. data/assets/error_pages/HTTP401.html +2 -1
  32. data/assets/error_pages/HTTP403.html +2 -1
  33. data/assets/error_pages/HTTP404.html +2 -1
  34. data/assets/error_pages/HTTP500.html +2 -1
  35. data/assets/error_pages/HTTP501.html +2 -1
  36. data/assets/error_pages/HTTP502.html +2 -1
  37. data/assets/error_pages/HTTP503.html +2 -1
  38. data/assets/error_pages/HTTP520.html +2 -1
  39. data/assets/error_pages/HTTP521.html +2 -1
  40. data/assets/error_pages/HTTP533.html +2 -1
  41. data/assets/themes/j1/adapter/js/asciidoctor.js +166 -0
  42. data/assets/themes/j1/adapter/js/carousel.js +30 -1
  43. data/assets/themes/j1/adapter/js/fam.js +8 -12
  44. data/assets/themes/j1/adapter/js/j1.js +72 -25
  45. data/assets/themes/j1/adapter/js/{jf_gallery.js → justifiedGallery.js} +9 -9
  46. data/assets/themes/j1/adapter/js/{gallery_customizer.js → justifiedGalleryCustomizer.js} +11 -11
  47. data/assets/themes/j1/adapter/js/logger.js +35 -23
  48. data/assets/themes/j1/adapter/js/navigator.js +2 -13
  49. data/assets/themes/j1/adapter/js/themer.js +19 -40
  50. data/assets/themes/j1/core/css/themes/uno-light/bootstrap.css +18 -2
  51. data/assets/themes/j1/core/css/themes/uno-light/bootstrap.min.css +1 -1
  52. data/assets/themes/j1/core/css/vendor.css +14 -2
  53. data/assets/themes/j1/core/css/vendor.min.css +1 -1
  54. data/assets/themes/j1/core/js/template.js +6 -6
  55. data/assets/themes/j1/core/js/template.js.map +1 -1
  56. data/assets/themes/j1/core/js/template.min.js +6 -6
  57. data/assets/themes/j1/core/js/template.min.js.map +1 -0
  58. data/assets/themes/j1/modules/_lightGallery/css/core/lg-fb-comment-box.css +58 -0
  59. data/assets/themes/j1/modules/_lightGallery/css/core/lg-fb-comment-box.min.css +5 -0
  60. data/assets/themes/j1/modules/_lightGallery/css/core/lg-transitions.css +778 -0
  61. data/assets/themes/j1/modules/_lightGallery/css/core/lg-transitions.min.css +5 -0
  62. data/assets/themes/j1/modules/_lightGallery/css/core/lightgallery.css +981 -0
  63. data/assets/themes/j1/modules/_lightGallery/css/core/lightgallery.min.css +5 -0
  64. data/assets/themes/j1/modules/_lightGallery/css/fonts/lg.eot +0 -0
  65. data/assets/themes/j1/modules/_lightGallery/css/fonts/lg.svg +47 -0
  66. data/assets/themes/j1/modules/_lightGallery/css/fonts/lg.ttf +0 -0
  67. data/assets/themes/j1/modules/_lightGallery/css/fonts/lg.woff +0 -0
  68. data/assets/themes/j1/modules/_lightGallery/css/img/loading.gif +0 -0
  69. data/assets/themes/j1/modules/_lightGallery/css/img/video-play.png +0 -0
  70. data/assets/themes/j1/modules/_lightGallery/css/img/vimeo-play.png +0 -0
  71. data/assets/themes/j1/modules/_lightGallery/css/img/youtube-play.png +0 -0
  72. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/animation-w.png +0 -0
  73. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/customize-w.png +0 -0
  74. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/dynamic-w.png +0 -0
  75. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/facebook-icon.svg +10 -0
  76. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/googleplus-icon.svg +30 -0
  77. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/html5-w.png +0 -0
  78. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/linked-in.png +0 -0
  79. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/module-w.png +0 -0
  80. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/play-button.png +0 -0
  81. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/responsive-w.png +0 -0
  82. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/thumb-w.png +0 -0
  83. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/touch-w.png +0 -0
  84. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/twitter-icon.svg +15 -0
  85. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/twitter.png +0 -0
  86. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/video1-w.png +0 -0
  87. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/zoom-w.png +0 -0
  88. data/assets/themes/j1/modules/_lightGallery/css/themes/icons/zoom.png +0 -0
  89. data/assets/themes/j1/modules/_lightGallery/css/themes/uno.css +262 -0
  90. data/assets/themes/j1/modules/_lightGallery/css/themes/uno.min.css +15 -0
  91. data/assets/themes/j1/modules/_lightGallery/js/core/lightgallery.js +1362 -0
  92. data/assets/themes/j1/modules/_lightGallery/js/core/lightgallery.min.js +4 -0
  93. data/assets/themes/j1/modules/_lightGallery/js/modules/j1/j1-video.js +402 -0
  94. data/assets/themes/j1/modules/_lightGallery/js/modules/j1/j1-video.min.js +8 -0
  95. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-autoplay.js +206 -0
  96. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-autoplay.min.js +5 -0
  97. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-fullscreen.js +126 -0
  98. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-fullscreen.min.js +5 -0
  99. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-hash.js +101 -0
  100. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-hash.min.js +5 -0
  101. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-pager.js +105 -0
  102. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-pager.min.js +5 -0
  103. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-share.js +107 -0
  104. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-share.min.js +5 -0
  105. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-thumbnail.js +478 -0
  106. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-thumbnail.min.js +5 -0
  107. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-video.js +342 -0
  108. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-video.min.js +5 -0
  109. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-zoom.js +527 -0
  110. data/assets/themes/j1/modules/_lightGallery/js/modules/lg-zoom.min.js +5 -0
  111. data/assets/themes/j1/modules/lightGallery/js/core/j1/lightgallery-x.js +1368 -0
  112. data/assets/themes/j1/modules/lightGallery/js/core/j1/lightgallery-x.min.js +10 -0
  113. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-x-video.js +344 -0
  114. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-x-video.min.js +7 -0
  115. data/assets/themes/j1/modules/lightbox/js/lightbox.js +1 -1
  116. data/assets/themes/j1/modules/lightbox/js/lightbox.min.js +1 -1
  117. data/assets/themes/j1/modules/log4javascript/docs/backwardsincompatibilities.html +90 -0
  118. data/assets/themes/j1/modules/log4javascript/docs/distribution.html +87 -0
  119. data/assets/themes/j1/modules/log4javascript/docs/index.html +190 -0
  120. data/assets/themes/j1/modules/log4javascript/docs/lite.html +182 -0
  121. data/assets/themes/j1/modules/log4javascript/docs/manual.html +3217 -0
  122. data/assets/themes/j1/modules/log4javascript/docs/manual_lite.html +383 -0
  123. data/assets/themes/j1/modules/log4javascript/docs/quickstart.html +230 -0
  124. data/assets/themes/j1/modules/log4javascript/docs/whatsnew.html +86 -0
  125. data/assets/themes/j1/modules/log4javascript/js/log4javascript.js +5826 -0
  126. data/assets/themes/j1/modules/{util/js/log4javascript.js → log4javascript/js/log4javascript.min.js} +17 -0
  127. data/exe/j1 +1 -1
  128. data/lib/j1/commands/generate.rb +32 -9
  129. data/lib/{patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/2.6 → j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/2.7}/fastfilereaderext.so +0 -0
  130. data/lib/{patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/2.6 → j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/2.7}/rubyeventmachine.so +0 -0
  131. data/lib/j1/patches/rubygems/execjs-2.7.0/lib/execjs/external_runtime.rb +246 -0
  132. data/lib/j1/version.rb +1 -1
  133. data/lib/j1_app.rb +1 -1
  134. data/lib/j1_app/j1_auth_manager/auth_manager.rb +8 -2
  135. data/lib/j1_app/j1_site_manager/static_site.no-cross-origin.rb +94 -0
  136. data/lib/j1_app/j1_site_manager/static_site.rb +13 -11
  137. data/lib/starter_web/Gemfile +21 -15
  138. data/lib/starter_web/_config.yml +71 -116
  139. data/lib/starter_web/_data/_defaults/j1_config.yml +460 -0
  140. data/lib/starter_web/_data/_defaults/resources.yml +626 -325
  141. data/lib/starter_web/_data/apps/defaults/{justified_gallery.yml → justifiedGallery.yml} +2 -2
  142. data/lib/starter_web/_data/apps/defaults/{gallery_customizer.yml → justifiedGalleryCustomizer.yml} +0 -0
  143. data/lib/starter_web/_data/apps/defaults/{light_gallery.yml → lightGallery.yml} +0 -0
  144. data/lib/starter_web/_data/apps/{justified_gallery.yml → justifiedGallery.yml} +7 -7
  145. data/lib/starter_web/_data/apps/{gallery_customizer.yml → justifiedGalleryCustomizer.yml} +0 -0
  146. data/lib/starter_web/_data/apps/{light_gallery.yml → lightGallery.yml} +0 -0
  147. data/lib/starter_web/_data/blocks/banner.yml +18 -30
  148. data/lib/starter_web/_data/blocks/footer.yml +15 -3
  149. data/lib/starter_web/_data/blocks/panel.yml +4 -6
  150. data/lib/starter_web/_data/builder/blog_navigator.yml +4 -4
  151. data/lib/starter_web/_data/j1_config.yml +8 -7
  152. data/lib/starter_web/_data/layouts/collection.yml +10 -0
  153. data/lib/starter_web/_data/layouts/default.yml +8 -32
  154. data/lib/starter_web/_data/modules/authentication.yml +11 -100
  155. data/lib/starter_web/_data/modules/defaults/log4javascript.yml +37 -40
  156. data/lib/starter_web/_data/modules/defaults/quicksearch.yml +5 -24
  157. data/lib/starter_web/_data/modules/fam.yml +13 -2
  158. data/lib/starter_web/_data/modules/log4javascript.yml +11 -83
  159. data/lib/starter_web/_data/modules/navigator_menu.yml +27 -8
  160. data/lib/starter_web/_data/modules/quicksearch.yml +5 -3
  161. data/lib/starter_web/_data/plugins/defaults/paginator.yml +15 -12
  162. data/lib/starter_web/_data/plugins/paginator.yml +5 -3
  163. data/lib/starter_web/_data/private.yml +29 -57
  164. data/lib/starter_web/_data/resources.yml +33 -16
  165. data/lib/starter_web/_data/utilities/defaults/util_srv.yml +49 -3
  166. data/lib/starter_web/_data/utilities/util_srv.yml +8 -65
  167. data/lib/starter_web/_includes/attributes.asciidoc +10 -6
  168. data/lib/starter_web/_plugins/asciidoctor-extensions/callout.rb +47 -5
  169. data/lib/starter_web/_plugins/asciidoctor-extensions/conum.rb +28 -1
  170. data/lib/starter_web/_plugins/lunr_index.rb +24 -5
  171. data/lib/starter_web/assets/images/collections/blog/featured/dynamic-web-access.png +0 -0
  172. data/lib/starter_web/assets/images/collections/blog/featured/jamstack-generators.gif +0 -0
  173. data/lib/starter_web/assets/images/collections/blog/featured/jamstack-generators.jpg +0 -0
  174. data/lib/starter_web/assets/images/collections/blog/featured/static-web-access.png +0 -0
  175. data/lib/starter_web/assets/images/modules/attics/leon-1920x1280.jpg +0 -0
  176. data/lib/starter_web/assets/images/modules/attics/machine-generator-1920x1280.jpg +0 -0
  177. data/lib/starter_web/assets/images/modules/icons/j1/j1-256x256.gif +0 -0
  178. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +46 -47
  179. data/lib/starter_web/collections/posts/public/featured/_posts/{2020-06-01-about-cookies.adoc → 2020-01-01-about-cookies.adoc} +35 -40
  180. data/lib/starter_web/collections/posts/public/featured/_posts/{2020-05-01-top-site-generators.adoc → 2021-03-01-site-generators.adoc} +57 -31
  181. data/lib/starter_web/collections/posts/public/featured/_posts/2021-03-03-about-j1.adoc +124 -0
  182. data/lib/starter_web/collections/posts/public/featured/_posts/_includes/attributes.asciidoc +4 -0
  183. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-test-series.adoc +10 -9
  184. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-test-series.adoc +10 -10
  185. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-test-series.adoc +10 -10
  186. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-04-post-test-series.adoc +10 -10
  187. data/lib/starter_web/collections/posts/public/wikipedia/_posts/2016-11-20-minneapolis.adoc +2 -3
  188. data/lib/starter_web/collections/posts/public/wikipedia/_posts/2016-11-24-narcisse-snake-dens.adoc +2 -3
  189. data/lib/starter_web/collections/posts/public/wikipedia/_posts/2016-11-26-columbia-river.adoc +2 -3
  190. data/lib/starter_web/dot.gitattributes +1 -1
  191. data/lib/starter_web/dot.gitignore +5 -1
  192. data/lib/starter_web/index.html +5 -11
  193. data/lib/starter_web/package.json +5 -4
  194. data/lib/starter_web/pages/public/about/about_site.adoc +1 -1
  195. data/lib/starter_web/pages/public/asciidoc_skeletons/_templates/asciidoc-extensions/gallery.asciidoc +1 -1
  196. data/lib/starter_web/pages/public/asciidoc_skeletons/book/000_intro.adoc +7 -1
  197. data/lib/starter_web/pages/public/asciidoc_skeletons/book/100_chapter.adoc +5 -1
  198. data/lib/starter_web/pages/public/asciidoc_skeletons/book/200_chapter.adoc +7 -2
  199. data/lib/starter_web/pages/public/asciidoc_skeletons/book/900_references.adoc +5 -0
  200. data/lib/starter_web/pages/public/asciidoc_skeletons/book/book.adoc +7 -2
  201. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/100_chapter.asciidoc +1 -1
  202. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/200_chapter.asciidoc +2 -2
  203. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +7 -2
  204. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +6 -1
  205. data/lib/starter_web/pages/public/blog/navigator/archive.html +6 -7
  206. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +6 -7
  207. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +12 -11
  208. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +6 -7
  209. data/lib/starter_web/pages/public/blog/navigator/index.html +7 -11
  210. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +45 -48
  211. data/lib/starter_web/pages/public/learn/roundtrip/100_present_videos.adoc +21 -20
  212. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +6 -2
  213. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +39 -35
  214. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +38 -36
  215. data/lib/starter_web/pages/public/learn/roundtrip/410_bs_modals_extentions.adoc +16 -14
  216. data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +11 -9
  217. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +30 -27
  218. data/lib/starter_web/pages/public/learn/roundtrip/600_quicksearch.adoc +51 -50
  219. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/100_gistblock.asciidoc +1 -1
  220. data/lib/starter_web/pages/public/learn/where_to_go.adoc +44 -17
  221. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +116 -0
  222. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +82 -0
  223. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +77 -53
  224. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +123 -0
  225. data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +79 -71
  226. data/lib/starter_web/pages/public/previewer/_includes/tables/rouge/300_supported_languages.asciidoc +1 -1
  227. data/lib/starter_web/pages/public/previewer/bootstrap_theme.adoc +105 -121
  228. data/lib/starter_web/pages/public/previewer/iframer.adoc +1 -1
  229. data/lib/starter_web/pages/public/previewer/justified_gallery.html +3 -3
  230. data/lib/starter_web/pages/public/previewer/md_color_palette.adoc +1 -1940
  231. data/lib/starter_web/pages/public/previewer/mdi_icons_preview.adoc +7 -9
  232. data/lib/starter_web/pages/public/previewer/rouge.adoc +1 -1
  233. data/lib/starter_web/pages/public/previewer/twitter_emoji_preview.adoc +1 -1
  234. data/lib/starter_web/utilsrv/_defaults/package.json +13 -9
  235. data/lib/starter_web/utilsrv/package.json +6 -2
  236. data/lib/starter_web/utilsrv/server.js +228 -55
  237. metadata +99 -212
  238. data/lib/starter_web/_data/_defaults/j1_light_gallery.yml +0 -110
  239. data/lib/starter_web/_data/_defaults/template_settings.yml +0 -258
  240. data/lib/starter_web/_data/plugins/defaults/notebooks.yml +0 -61
  241. data/lib/starter_web/_data/plugins/notebooks.yml +0 -70
  242. data/lib/starter_web/assets/images/collections/blog/featured/staticgen.jpg +0 -0
  243. data/lib/starter_web/assets/images/modules/attics/aditya-joshi-1920x1280.jpg +0 -0
  244. data/lib/starter_web/assets/images/modules/attics/alex-holyoake-1920x1280.jpg +0 -0
  245. data/lib/starter_web/assets/images/modules/attics/anaya-katlego-1920x1280.jpg +0 -0
  246. data/lib/starter_web/assets/images/modules/attics/antonella-lombardi-1920x1280.jpg +0 -0
  247. data/lib/starter_web/assets/images/modules/attics/antonino-visalli-1920x1280.jpg +0 -0
  248. data/lib/starter_web/assets/images/modules/attics/banner/docker-1280x600-bw.jpg +0 -0
  249. data/lib/starter_web/assets/images/modules/attics/banner/jekyll.1200x600-bw.jpg +0 -0
  250. data/lib/starter_web/assets/images/modules/attics/banner/signpost-1920x800-bw.jpg +0 -0
  251. data/lib/starter_web/assets/images/modules/attics/banner/water-journal-1280x600.jpg +0 -0
  252. data/lib/starter_web/assets/images/modules/attics/banner/write-1280x600-bw.jpg +0 -0
  253. data/lib/starter_web/assets/images/modules/attics/brandon-mowinkel-1920x1280.jpg +0 -0
  254. data/lib/starter_web/assets/images/modules/attics/daniel-jensen-1920x1280.jpg +0 -0
  255. data/lib/starter_web/assets/images/modules/attics/florian-olivo-1920x1280.jpg +0 -0
  256. data/lib/starter_web/assets/images/modules/attics/go-up-1920x1280-bw.jpg +0 -0
  257. data/lib/starter_web/assets/images/modules/attics/ian-schneider-1920x1280.jpg +0 -0
  258. data/lib/starter_web/assets/images/modules/attics/jason-rosewell-1920x1280.jpg +0 -0
  259. data/lib/starter_web/assets/images/modules/attics/joel-filipe-1920x1280.jpg +0 -0
  260. data/lib/starter_web/assets/images/modules/attics/lianhao-1920x1280.jpg +0 -0
  261. data/lib/starter_web/assets/images/modules/attics/library-1920x1280-bw.jpg +0 -0
  262. data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280-v.jpg +0 -0
  263. data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280.jpg +0 -0
  264. data/lib/starter_web/assets/images/modules/attics/markus-spiske3-1920x1280.jpg +0 -0
  265. data/lib/starter_web/assets/images/modules/attics/modules-apps-1920x1280.jpg +0 -0
  266. data/lib/starter_web/assets/images/modules/attics/nicola-styles-1920x1280.jpg +0 -0
  267. data/lib/starter_web/assets/images/modules/attics/no-time-1920x1280.jpg +0 -0
  268. data/lib/starter_web/assets/images/modules/attics/nousnou-iwasaki-1920x1280.jpg +0 -0
  269. data/lib/starter_web/assets/images/modules/attics/premium-1920x1280-bw.jpg +0 -0
  270. data/lib/starter_web/assets/images/modules/attics/responsive-text-1920x1280.jpg +0 -0
  271. data/lib/starter_web/assets/images/modules/attics/robert-v-ruggiero-1920x1280.jpg +0 -0
  272. data/lib/starter_web/assets/images/modules/attics/romain-vignes-1920x1280.jpg +0 -0
  273. data/lib/starter_web/assets/images/modules/attics/spider-web-1920x1200-bw.jpg +0 -0
  274. data/lib/starter_web/assets/images/modules/attics/the-place-1920x1280.jpg +0 -0
  275. data/lib/starter_web/assets/images/modules/icons/algolia/search-by-algolia.png +0 -0
  276. data/lib/starter_web/assets/images/modules/icons/d1/d1-256x256.png +0 -0
  277. data/lib/starter_web/assets/images/modules/icons/d1/d1-32x32.ico +0 -0
  278. data/lib/starter_web/assets/images/modules/icons/d1/d1-512x512.png +0 -0
  279. data/lib/starter_web/assets/images/modules/icons/d1/d1-64x64.png +0 -0
  280. data/lib/starter_web/assets/images/modules/icons/d1/d1.ico +0 -0
  281. data/lib/starter_web/assets/images/modules/icons/d1/favicon.ico +0 -0
  282. data/lib/starter_web/assets/images/modules/icons/d1/scalable/d1.svg +0 -2025
  283. data/lib/starter_web/assets/images/modules/icons/netlify/nf-logo.png +0 -0
  284. data/lib/starter_web/assets/images/modules/icons/p1/favicon.ico +0 -0
  285. data/lib/starter_web/assets/images/modules/icons/p1/p1-256x256.png +0 -0
  286. data/lib/starter_web/assets/images/modules/icons/p1/p1-32x32.ico +0 -0
  287. data/lib/starter_web/assets/images/modules/icons/p1/p1-512x512.png +0 -0
  288. data/lib/starter_web/assets/images/modules/icons/p1/p1-64x64.png +0 -0
  289. data/lib/starter_web/assets/images/modules/icons/p1/p1.ico +0 -0
  290. data/lib/starter_web/assets/images/modules/icons/p1/scalable/p1.svg +0 -2020
  291. data/lib/starter_web/assets/images/modules/icons/patreon/favicon-16x16.png +0 -0
  292. data/lib/starter_web/assets/images/modules/icons/patreon/favicon-32x32.png +0 -0
  293. data/lib/starter_web/assets/images/pages/j1_webhooks/000_browser_console-1280x600.jpg +0 -0
  294. data/lib/starter_web/assets/images/pages/j1_webhooks/001_smee_channel-1280x400.jpg +0 -0
  295. data/lib/starter_web/assets/images/pages/j1_webhooks/002_gh_repo_settings-1280x800.jpg +0 -0
  296. data/lib/starter_web/assets/images/pages/j1_webhooks/003_gh_webhook_settings-1280x1000.jpg +0 -0
  297. data/lib/starter_web/assets/images/pages/j1_webhooks/004_gh_webhook_settings-post-1280x600.jpg +0 -0
  298. data/lib/starter_web/assets/images/pages/j1_webhooks/005_smee_channel_ping_receive-1280x800.jpg +0 -0
  299. data/lib/starter_web/assets/images/pages/j1_webhooks/006_gh_redeliver_payload-1280x900.jpg +0 -0
  300. data/lib/starter_web/assets/images/pages/j1_webhooks/007_receive_redelivered_payload-1280x800.jpg +0 -0
  301. data/lib/starter_web/assets/images/pages/j1_webhooks/base/000_browser_console.jpg +0 -0
  302. data/lib/starter_web/assets/images/pages/j1_webhooks/base/000_smee_channel.jpg +0 -0
  303. data/lib/starter_web/assets/images/pages/j1_webhooks/base/002_gh_repo-settings.jpg +0 -0
  304. data/lib/starter_web/assets/images/pages/j1_webhooks/base/003_gh_webhook_settings.jpg +0 -0
  305. data/lib/starter_web/assets/images/pages/j1_webhooks/base/004_gh_webhook_settings-post.jpg +0 -0
  306. data/lib/starter_web/assets/images/pages/j1_webhooks/base/005_smee_channel_ping_received.jpg +0 -0
  307. data/lib/starter_web/assets/images/pages/j1_webhooks/base/006_gh_redeliver_payload.jpg +0 -0
  308. data/lib/starter_web/assets/images/pages/j1_webhooks/base/007_receive_redelivered_payload.jpg +0 -0
  309. data/lib/starter_web/assets/images/pages/j1_webhooks/base/webhook_flow.jpg +0 -0
  310. data/lib/starter_web/assets/images/pages/j1_webhooks/flows/webhook_flow-1920x1280.jpg +0 -0
  311. data/lib/starter_web/assets/images/pages/j1_webhooks/scaleable/webhook_flow.svg +0 -432
  312. data/lib/starter_web/assets/images/pages/j1_webhooks/uml/auth_mgmr_signin_request_flow.uxf +0 -632
  313. data/lib/starter_web/assets/images/pages/j1_webhooks/uml/webhook_flow.uxf +0 -648
  314. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/get-started-1920x1280-bw.jpg +0 -0
  315. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/130_layout_inheritance.png +0 -0
  316. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/content_inheritance.png +0 -0
  317. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/content_inheritance_thumb.png +0 -0
  318. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/html_layout.png +0 -0
  319. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/j1-quickstart-windows.png +0 -0
  320. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/j1-template-theme.jpg +0 -0
  321. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/j1_layout.png +0 -0
  322. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/jekyll-minima-theme.png +0 -0
  323. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/lane_inheritance.png +0 -0
  324. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/layout_inheritance.png +0 -0
  325. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/preparations/msys_installation.jpg +0 -0
  326. data/lib/starter_web/assets/images/pages/log4j/apache-log4j-logo.png +0 -0
  327. data/lib/starter_web/assets/images/pages/log4r/code-1920x600.jpg +0 -0
  328. data/lib/starter_web/assets/images/pages/log4r/log4r-logo.png +0 -0
  329. data/lib/starter_web/assets/images/pages/log_expert/image_000.png +0 -0
  330. data/lib/starter_web/assets/images/pages/log_expert/image_001.png +0 -0
  331. data/lib/starter_web/assets/images/pages/log_expert/image_002.png +0 -0
  332. data/lib/starter_web/assets/images/pages/log_expert/image_003.png +0 -0
  333. data/lib/starter_web/assets/images/pages/log_expert/image_004.png +0 -0
  334. data/lib/starter_web/assets/images/pages/log_expert/image_005.png +0 -0
  335. data/lib/starter_web/assets/images/pages/log_expert/image_006.png +0 -0
  336. data/lib/starter_web/assets/images/pages/log_expert/image_007.png +0 -0
  337. data/lib/starter_web/assets/images/pages/log_expert/image_008.png +0 -0
  338. data/lib/starter_web/assets/images/pages/log_expert/image_009.png +0 -0
  339. data/lib/starter_web/assets/images/pages/log_expert/image_010.png +0 -0
  340. data/lib/starter_web/assets/images/pages/log_expert/image_011.png +0 -0
  341. data/lib/starter_web/assets/images/pages/log_expert/image_012.png +0 -0
  342. data/lib/starter_web/assets/images/pages/log_expert/image_013.png +0 -0
  343. data/lib/starter_web/assets/images/pages/log_expert/image_014.png +0 -0
  344. data/lib/starter_web/assets/images/pages/log_expert/image_015.png +0 -0
  345. data/lib/starter_web/assets/images/pages/log_expert/image_016.png +0 -0
  346. data/lib/starter_web/assets/images/pages/log_expert/image_017.png +0 -0
  347. data/lib/starter_web/assets/images/pages/log_expert/image_018.png +0 -0
  348. data/lib/starter_web/assets/images/pages/log_expert/image_019.png +0 -0
  349. data/lib/starter_web/assets/images/pages/log_expert/image_020.png +0 -0
  350. data/lib/starter_web/assets/images/pages/log_expert/image_021.png +0 -0
  351. data/lib/starter_web/assets/images/pages/log_expert/image_022.png +0 -0
  352. data/lib/starter_web/assets/images/pages/log_expert/image_023.png +0 -0
  353. data/lib/starter_web/assets/images/pages/log_expert/image_024.png +0 -0
  354. data/lib/starter_web/assets/images/pages/log_expert/image_025.png +0 -0
  355. data/lib/starter_web/assets/images/pages/log_expert/image_026.png +0 -0
  356. data/lib/starter_web/assets/images/pages/log_expert/image_027.png +0 -0
  357. data/lib/starter_web/assets/images/pages/log_expert/image_028.png +0 -0
  358. data/lib/starter_web/assets/images/pages/log_expert/image_029.png +0 -0
  359. data/lib/starter_web/assets/images/pages/log_expert/image_030.png +0 -0
  360. data/lib/starter_web/assets/images/pages/log_expert/image_031.png +0 -0
  361. data/lib/starter_web/assets/images/pages/log_expert/image_032.png +0 -0
  362. data/lib/starter_web/assets/images/pages/log_expert/image_033.png +0 -0
  363. data/lib/starter_web/assets/images/pages/log_expert/image_034.png +0 -0
  364. data/lib/starter_web/assets/images/pages/log_expert/image_035.png +0 -0
  365. data/lib/starter_web/assets/images/pages/log_expert/image_036.png +0 -0
  366. data/lib/starter_web/assets/images/pages/log_expert/image_037.png +0 -0
  367. data/lib/starter_web/assets/images/pages/log_expert/image_038.png +0 -0
  368. data/lib/starter_web/assets/images/pages/log_expert/image_039.png +0 -0
  369. data/lib/starter_web/assets/images/pages/log_expert/image_040.png +0 -0
  370. data/lib/starter_web/assets/images/pages/log_expert/image_041.png +0 -0
  371. data/lib/starter_web/assets/images/pages/log_expert/image_042.png +0 -0
  372. data/lib/starter_web/assets/images/pages/log_expert/image_043.png +0 -0
  373. data/lib/starter_web/assets/images/pages/log_expert/image_044.png +0 -0
  374. data/lib/starter_web/assets/images/pages/log_expert/image_045.png +0 -0
  375. data/lib/starter_web/assets/images/pages/log_expert/image_046.png +0 -0
  376. data/lib/starter_web/assets/images/pages/log_expert/image_047.png +0 -0
  377. data/lib/starter_web/assets/images/pages/log_expert/image_048.png +0 -0
  378. data/lib/starter_web/assets/images/pages/log_expert/image_049.png +0 -0
  379. data/lib/starter_web/assets/images/pages/log_expert/image_050.png +0 -0
  380. data/lib/starter_web/assets/images/pages/log_expert/image_051.png +0 -0
  381. data/lib/starter_web/assets/images/pages/log_expert/image_052.png +0 -0
  382. data/lib/starter_web/assets/images/pages/log_expert/image_053.png +0 -0
  383. data/lib/starter_web/assets/images/pages/log_expert/image_054.png +0 -0
  384. data/lib/starter_web/assets/images/pages/log_expert/image_055.png +0 -0
  385. data/lib/starter_web/assets/images/pages/log_expert/image_056.png +0 -0
  386. data/lib/starter_web/assets/images/pages/log_expert/image_057.png +0 -0
  387. data/lib/starter_web/assets/images/pages/material/apple-touch-icon.png +0 -0
  388. data/lib/starter_web/assets/images/pages/pen/jquery/jQuery-logo.png +0 -0
  389. data/lib/starter_web/assets/images/pages/pen/jquery/jquery-banner-1280x600.jpg +0 -0
  390. data/lib/starter_web/assets/images/pages/pen/jquery/jquery-banner-1920x800.jpg +0 -0
  391. data/lib/starter_web/assets/images/pages/pen/jquery/src/JQuery-Logo.svg +0 -122
  392. data/lib/starter_web/assets/images/pages/pen/jquery/src/banner.psd +0 -0
  393. data/lib/starter_web/assets/images/pages/winlogbeat/coordinate-map.png +0 -0
  394. data/lib/starter_web/assets/images/pages/winlogbeat/kibana-powershell.jpg +0 -0
  395. data/lib/starter_web/assets/images/pages/winlogbeat/option_ignore_outgoing.png +0 -0
  396. data/lib/starter_web/assets/images/pages/winlogbeat/winlogbeat-dashboard.png +0 -0
  397. data/lib/starter_web/assets/images/pages/writers_guide/1280px-PDCA_Process.png +0 -0
  398. data/lib/starter_web/assets/images/pages/writers_guide/annie-spratt-1920x1280.jpg +0 -0
  399. data/lib/starter_web/assets/images/pages/writers_guide/deming-cycle.png +0 -0
  400. data/lib/starter_web/assets/images/pages/writers_guide/humble-lamb-1920x1280.jpg +0 -0
  401. data/lib/starter_web/assets/images/pages/writers_guide/john-schnobrich-1920x1280.jpg +0 -0
  402. data/lib/starter_web/assets/images/pages/writers_guide/sigmund-1920x1280.jpg +0 -0
  403. data/lib/starter_web/collections/posts/public/series/_posts/_includes/attributes.asciidoc +0 -37
  404. data/lib/starter_web/collections/posts/public/series/_posts/_includes/documents/readme +0 -0
  405. data/lib/starter_web/collections/posts/public/series/_posts/_includes/tables/debug_variables.asciidoc +0 -47
  406. data/lib/starter_web/pages/protected/site_search.adoc +0 -180
  407. data/lib/starter_web/pages/public/asciidoc_skeletons/book/book.pdf +1 -5439
  408. data/lib/starter_web/pages/public/legal/en/000_copyright.adoc +0 -93
  409. data/lib/starter_web/pages/public/legal/en/100_impress.adoc +0 -55
  410. data/lib/starter_web/pages/public/legal/en/200_terms_of_use.adoc +0 -53
  411. data/lib/starter_web/pages/public/legal/en/eu/cookie.policy.asciidoc +0 -50
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: MDI Icon Previewer
3
3
  tagline: search and select mdi icons
4
- date: 2020-11-08 00:00:00
4
+ date: 2020-11-08 00:00:00 +100
5
5
  description: >
6
6
  Previewer for Material Design Icons (MDI) for J1 Template.
7
7
  Material Design Icons is a growing icon collection allows
@@ -89,21 +89,19 @@ include equivalent text either inside the `<i>` tag or right next to it
89
89
  click to reply, the link is usable if CSS doesn't load, and human readers
90
90
  with good eyesight and a decent browser see a pretty icon.
91
91
 
92
- /////
93
92
  == Asciidoc Markup
94
93
 
94
+ For pages using Asciidoc for the source (default), a easier solution is to
95
+ use Markups from Asciidoc.
96
+
95
97
  [source, html]
96
98
  ----
97
- pass:[<i class="mdi mdi-3x mdi-star"></i>] <1>
98
- mdi:star[3x] <2>
99
+ pass:[<i class="mdi mdi-<name> mdi-<size> mdi-<modifier>"></i>] <1>
100
+ mdi:<name>[<size>, <modifier>] <2>
99
101
  ----
100
102
  <1> Markup using a pass block
101
- <2> Markup using the Asciidoc extension
103
+ <2> Markup using the Asciidoc extension (mdi:)
102
104
 
103
- NOTE: The `<i>` tag provides more meaning to machines because of the HTML spec,
104
- it provides more meaning to *humans* because the `i` can easily associated with
105
- `icon`.
106
- /////
107
105
 
108
106
  == Sizes
109
107
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Rouge
3
3
  tagline: preview rouge themes
4
- date: 2020-11-08 00:00:00
4
+ date: 2020-11-08 00:00:00 +100
5
5
  description: >
6
6
  Previewer page for J1 module Rouge. Rouge is a pure Ruby
7
7
  syntax highlighter. It can highlight over 100 different
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Emoji Previewer
3
3
  tagline: search and select twitter emojis
4
- date: 2020-11-08 00:00:00
4
+ date: 2020-11-08 00:00:00 +100
5
5
  description: >
6
6
  Twitter Emoji Icons V1 Previewer.Twitter Emoji is a colored
7
7
  icon font developed by Twitter. The full icon set is fully
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": true,
3
3
  "name": "utls",
4
- "version": "2021.0.13",
4
+ "version": "2021.1.1",
5
5
  "description": "J1 Template Utility Server",
6
6
  "homepage": "https://jekyll.one",
7
7
  "author": {
@@ -19,15 +19,17 @@
19
19
  "yarn": ">=1.6"
20
20
  },
21
21
  "utilsrv": {
22
- "enabled": "true",
22
+ "enabled": "true"
23
23
  },
24
24
  "scripts": {
25
25
  "clean": "shx rm -f *.lock && shx rm -f package-lock.json",
26
- "start": "run-s utilsrv-run",
27
- "develop": "run-s utilsrv",
28
- "utilsrv": "cross-env UTILSRV_ENABLED=$npm_package_utilsrv_enabled if-env UTILSRV_ENABLED=true && run-s -s utilsrv-run || run-s -s utilsrv-exit",
29
- "utilsrv-run": "echo Startup utility server .. && node server.js",
30
- "utilsrv-exit": "echo Startup utility server globally disabled, not started."
26
+ "start": "run-p -s utilsrv-run",
27
+ "app": "run-p -s utilsrv",
28
+ "develop": "run-p -s utilsrv",
29
+ "site": "run-p -s utilsrv",
30
+ "utilsrv": "cross-env UTILSRV_ENABLED=$npm_package_utilsrv_enabled if-env UTILSRV_ENABLED=true && run-p -s utilsrv-run || run-p -s utilsrv-exit",
31
+ "utilsrv-run": "echo Startup UTILSRV .. && node server.js",
32
+ "utilsrv-exit": "echo UTILSRV disabled. Not started."
31
33
  },
32
34
  "dependencies": {
33
35
  "body-parser": "^1.19.0",
@@ -38,12 +40,14 @@
38
40
  "express": "^4.15.2",
39
41
  "fs": "0.0.1-security",
40
42
  "if-env": "^1.0.4",
41
- "js-yaml": "^3.13.1",
43
+ "js-yaml": "^4.0",
42
44
  "lite-url": "^1.0.5",
45
+ "log4js": "^6.3.0",
43
46
  "moment": "^2.24.0",
47
+ "node-cron": "^3.0.0",
44
48
  "npm-run-all": "^4.1.5",
45
49
  "randomstring": "^1.1.5",
46
- "shx": "^0.2.2",
50
+ "shx": "^0.3.3",
47
51
  "simple-git": "^1.113.0",
48
52
  "simple-oauth2": "^1.6.0",
49
53
  "sprintf-js": "^1.1.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": true,
3
3
  "name": "utls",
4
- "version": "2021.0.13",
4
+ "version": "2021.1.1",
5
5
  "description": "J1 Template Utility Server",
6
6
  "homepage": "https://jekyll.one",
7
7
  "author": {
@@ -19,12 +19,14 @@
19
19
  "yarn": ">=1.6"
20
20
  },
21
21
  "utilsrv": {
22
- "enabled": "false"
22
+ "enabled": "true"
23
23
  },
24
24
  "scripts": {
25
25
  "clean": "shx rm -f *.lock && shx rm -f package-lock.json",
26
26
  "start": "run-p -s utilsrv-run",
27
+ "app": "run-p -s utilsrv",
27
28
  "develop": "run-p -s utilsrv",
29
+ "site": "run-p -s utilsrv",
28
30
  "utilsrv": "cross-env UTILSRV_ENABLED=$npm_package_utilsrv_enabled if-env UTILSRV_ENABLED=true && run-p -s utilsrv-run || run-p -s utilsrv-exit",
29
31
  "utilsrv-run": "echo Startup UTILSRV .. && node server.js",
30
32
  "utilsrv-exit": "echo UTILSRV disabled. Not started."
@@ -40,7 +42,9 @@
40
42
  "if-env": "^1.0.4",
41
43
  "js-yaml": "^4.0",
42
44
  "lite-url": "^1.0.5",
45
+ "log4js": "^6.3.0",
43
46
  "moment": "^2.24.0",
47
+ "node-cron": "^3.0.0",
44
48
  "npm-run-all": "^4.1.5",
45
49
  "randomstring": "^1.1.5",
46
50
  "shx": "^0.3.3",
@@ -17,7 +17,7 @@
17
17
  # Netlify-cms-github-oauth-provider is licensed under UNKNOWN License.
18
18
  # See: https://github.com/vencax/netlify-cms-github-oauth-provider/blob/master/README.md
19
19
  # -----------------------------------------------------------------------------
20
- # NOTE:
20
+ # NOTE:
21
21
  # To fix Webstorm NodeJS API issue see:
22
22
  # https://stackoverflow.com/questions/19532660/webstorm-7-cannot-recognize-node-api-methods
23
23
  # -----------------------------------------------------------------------------
@@ -61,6 +61,9 @@ const exec = util.promisify(require('child_process').exec);
61
61
  const moment = require('moment');
62
62
  const sprintf = require('sprintf-js').sprintf;
63
63
  const vsprintf = require('sprintf-js').vsprintf;
64
+ const cron = require('node-cron');
65
+ const log4js = require('log4js');
66
+
64
67
 
65
68
  // =============================================================================
66
69
  // base settings
@@ -68,7 +71,7 @@ const vsprintf = require('sprintf-js').vsprintf;
68
71
  const daemon_home = path.resolve(__dirname);
69
72
  const environment = daemon_home.indexOf('packages') !== -1 ? 'dev' : 'prod';
70
73
  const current_date = moment().format('YYYY-MM-DD');
71
- // let dotenv_home;
74
+
72
75
  let config_home;
73
76
  let project_home;
74
77
  let log_home;
@@ -76,6 +79,7 @@ let utilsrv_options;
76
79
  let log4javascript_options;
77
80
  let private_data;
78
81
  let logStream;
82
+ let fsStats;
79
83
 
80
84
  // timestamp settings
81
85
  //
@@ -87,18 +91,13 @@ moment().format('YYYY-MM-DD hh:mm:ss.SSS');
87
91
  if (environment === 'dev') {
88
92
  project_home = daemon_home + '/../400_template_site';
89
93
  config_home = daemon_home + '/../400_template_site/_data';
90
- //dotenv_home = daemon_home + '/../400_template_site';
91
94
  log_home = daemon_home + '/../..';
92
95
  } else {
93
96
  project_home = daemon_home + '/..';
94
97
  config_home = daemon_home + '/../_data';
95
- //dotenv_home = daemon_home + '/..';
96
98
  log_home = daemon_home + '/..';
97
99
  }
98
100
 
99
- // const dotenv = require('dotenv').config({ path: dotenv_home + '/.env', silent: true });
100
- // const dotenv_json = JSON.stringify( dotenv, null, 2 ); // JSON pretty print
101
-
102
101
  // =============================================================================
103
102
  // load configuration data
104
103
  // -----------------------------------------------------------------------------
@@ -118,68 +117,191 @@ const utilsrv_defaults_file = util_defaults + '/' + 'util_srv.yml';
118
117
  const utilsrv_settings_file = util_settings + '/' + 'util_srv.yml';
119
118
 
120
119
  try {
121
- const log4javascript_defaults = yaml.safeLoad(fs.readFileSync(log4javascript_defaults_file, 'utf8'));
122
- const log4javascript_settings = yaml.safeLoad(fs.readFileSync(log4javascript_settings_file, 'utf8'));
123
- const utilsrv_defaults = yaml.safeLoad(fs.readFileSync(utilsrv_defaults_file, 'utf8'));
124
- const utilsrv_settings = yaml.safeLoad(fs.readFileSync(utilsrv_settings_file, 'utf8'));
125
- const private_data_settings = yaml.safeLoad(fs.readFileSync(private_data_file, 'utf8'));
120
+ const log4javascript_defaults = yaml.load(fs.readFileSync(log4javascript_defaults_file, 'utf8'));
121
+ const log4javascript_settings = yaml.load(fs.readFileSync(log4javascript_settings_file, 'utf8'));
122
+ const utilsrv_defaults = yaml.load(fs.readFileSync(utilsrv_defaults_file, 'utf8'));
123
+ const utilsrv_settings = yaml.load(fs.readFileSync(utilsrv_settings_file, 'utf8'));
124
+ const private_data_settings = yaml.load(fs.readFileSync(private_data_file, 'utf8'));
126
125
 
126
+ // noinspection JSUnresolvedVariable
127
127
  private_data = private_data_settings.util_srv;
128
- log4javascript_options = mergeData(log4javascript_defaults.defaults, log4javascript_settings_file.settings);
129
128
  utilsrv_options = mergeData(utilsrv_defaults.defaults, utilsrv_settings.settings);
130
-
129
+ log4javascript_options = mergeData(log4javascript_defaults.defaults, utilsrv_settings.settings);
131
130
  } catch (e) {
132
131
  console.log(e);
133
132
  }
134
133
  const ajaxAppenderOptions = log4javascript_options.appenders[1].appender;
135
134
 
136
135
  // -----------------------------------------------------------------------------
137
- // utility server (daemon) settings
136
+ // utility server settings
138
137
  //
139
- const ssl = utilsrv_options.ssl || false;
140
- const port = utilsrv_options.port || 44444;
141
- const origin = utilsrv_options.origin || 'localhost';
142
- const hostName = utilsrv_options.host_name || '0.0.0.0';
143
- const verbose = utilsrv_options.verbose || false;
144
- const logFileName = ajaxAppenderOptions.log_file_name + '_' + current_date || 'messages' + '_' + current_date;
145
- const logFileExt = ajaxAppenderOptions.log_file_ext || 'log';
146
- const logFolder = ajaxAppenderOptions.log_folder || 'log';
147
- const logFileNamePath = log_home + '/' + logFolder + '/' + logFileName + '.' + logFileExt;
148
- const util_srv_url = ssl ? 'https://' + origin + ':' + port : 'http://' + origin + ':' + port;
138
+ const enabled = utilsrv_options.enabled || false;
139
+ const ssl = utilsrv_options.ssl || false;
140
+ const port = utilsrv_options.port || 40020;
141
+ const origin = utilsrv_options.origin || 'localhost';
142
+ const hostName = utilsrv_options.host_name || '0.0.0.0';
143
+ const verbose = utilsrv_options.verbose || false;
144
+ const logFileName = ajaxAppenderOptions.log_file_name + '_' + current_date || 'messages' + '_' + current_date;
145
+ const logFileExt = ajaxAppenderOptions.log_file_ext || 'log';
146
+ const logFolder = ajaxAppenderOptions.log_folder || 'log';
147
+ const logFileNamePath = log_home + '/' + logFolder + '/' + logFileName + '.' + logFileExt;
148
+ const current_logFile = log_home + '/' + logFolder + '/' + 'messages.current';
149
+ const util_srv_url = ssl ? 'https://' + origin + ':' + port : 'http://' + origin + ':' + port;
150
+ const thread_id = generateId (11);
151
+ const page = '/util_srv';
152
+ const isWin = process.platform === "win32";
149
153
 
150
154
  // -----------------------------------------------------------------------------
151
- // print utility server issue
155
+ // logger settings
156
+ // See: https://github.com/log4js-node/log4js-node/blob/master/docs/layouts.md
152
157
  //
153
- if (environment === 'dev') {
154
- console.log('Environment detected as: ' + environment);
155
- console.log('Daemon path set to: ' + daemon_home);
156
- console.log('Daemon verbosity set to: ' + verbose);
157
- console.log('Project path set to: ' + project_home);
158
- console.log('Data path set to: ' + config_home);
159
- console.log('Log file set to: ' + logFileNamePath);
160
- }
158
+ log4js.configure({
159
+ appenders: {
160
+ stdout: {
161
+ type: 'stdout',
162
+ layout: {
163
+ type: 'pattern',
164
+ pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%p] [%-40c] %m%n'
165
+ }
166
+ },
167
+ file: {
168
+ type: 'file',
169
+ filename: logFileNamePath,
170
+ layout: {
171
+ type: 'pattern',
172
+ pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%-11x{thread}] [%-5p] [%-60x{page}] [%-40c] %m',
173
+ tokens: {
174
+ thread: thread_id,
175
+ page: page
176
+ }
177
+ }
178
+ }
179
+ },
180
+ categories: {
181
+ default: {
182
+ appenders: ['stdout'],
183
+ level: 'info'
184
+ },
185
+ 'j1.util_srv': {
186
+ appenders: ['file'],
187
+ level: 'info'
188
+ },
189
+ 'j1.util_srv.preflight': {
190
+ appenders: ['file'],
191
+ level: 'info'
192
+ },
193
+ 'j1.util_srv.task': {
194
+ appenders: ['file'],
195
+ level: 'info'
196
+ }
197
+ }
198
+ });
161
199
 
162
200
  // -----------------------------------------------------------------------------
163
- // initialize log client
164
- // fs.writeFile(logFileNamePath, '', function(){console.log('Reset file: ' +logFileNamePath)});
201
+ // create loggers
165
202
  //
203
+ let stdout = log4js.getLogger('stdout');
204
+ let preflight = log4js.getLogger('j1.util_srv.preflight');
205
+ let logger = log4js.getLogger('j1.util_srv.core');
166
206
 
167
- if ( ajaxAppenderOptions.create_on_start === 'true') {
168
- touch(logFileNamePath);
169
- } else {
207
+ // -----------------------------------------------------------------------------
208
+ // scheduler task settings
209
+ // See: https://github.com/node-cron/node-cron
210
+ //
211
+ let test_per_minute = cron.schedule('* * * * *', () => {
212
+ let timestamp = moment().format('YYYY-MM-DD HH:mm');
213
+ console.log(timestamp + ': scheduled test task running every minute');
214
+ }, {
215
+ scheduled: false
216
+ });
217
+
218
+ let rolling_logs = cron.schedule('* * * * *', () => {
219
+ let logger = log4js.getLogger( 'j1.util_srv.task');
220
+ // logger_stdout.info('rolling log task running every minute');
221
+ logger.info('rolling log task running every minute');
222
+ let timestamp = moment().format('YYYY-MM-DD HH:mm');
223
+ console.log(timestamp + ': rolling log task running every minute');
224
+ }, {
225
+ scheduled: false
226
+ });
227
+
228
+ // -----------------------------------------------------------------------------
229
+ // initialize the logfile
230
+
231
+ // check if the logfile exists
232
+ try {
233
+ fsStats = fs.statSync(logFileNamePath);
234
+ console.log('Log file exists : ' + logFileName);
235
+ preflight.info('log file exists: ' + logFileName)
236
+
237
+ if ( ajaxAppenderOptions.reset_on_start === true) {
238
+ fs.truncate(logFileNamePath, 0, function(){console.log('Reset file: ' + logFileName)});
239
+ }
240
+ }
241
+ catch (e) {
242
+ console.log('Create Log file :' + logFileName);
243
+ preflight.info('create log file :' + logFileName);
244
+ // create empty logfile
170
245
  touch(logFileNamePath);
171
246
  }
172
247
 
173
- if ( ajaxAppenderOptions.reset_on_start === 'true') {
174
- fs.truncate(logFileNamePath, 0, function(){console.log('Reset file: ' + logFileNamePath)});
248
+ // symlinks on Windows are only supported by elevated user rights
249
+ //
250
+ if (isWin === false) {
251
+ // (Re-)Create symlink to current logfile
252
+ //
253
+ fs.unlink(current_logFile, (err => {
254
+ if (err) {
255
+ fs.symlink (
256
+ logFileNamePath,
257
+ current_logFile,
258
+ function (err) { console.log(err || 'Symlink to current log created.'); }
259
+ );
260
+ } else {
261
+ // See: https://stackoverflow.com/questions/29777506/create-relative-symlinks-using-absolute-paths-in-node-js
262
+ //
263
+ fs.symlink (
264
+ logFileNamePath,
265
+ current_logFile,
266
+ function (err) { console.log(err || 'Symlink to current log re-created.'); }
267
+ );
268
+ }
269
+ }));
175
270
  }
176
271
 
177
- if ( ajaxAppenderOptions.mode === 'append') {
272
+
273
+ // check if logs should be appended
274
+ //
275
+ preflight.info('appender options, mode: ' + ajaxAppenderOptions.mode);
276
+ if (ajaxAppenderOptions.mode === 'append') {
178
277
  logStream = fs.createWriteStream(logFileNamePath, {'flags': 'a'});
179
278
  } else {
279
+ fs.truncate(logFileNamePath, 0, function(){console.log('Reset file: ' + logFileName)});
180
280
  logStream = fs.createWriteStream(logFileNamePath, {'flags': 'a'});
181
281
  }
182
282
 
283
+ // check if logs should be rolled (e.g. daily)
284
+ //
285
+ preflight.info('appender options, rolling files: ' + ajaxAppenderOptions.rolling_files);
286
+ if (ajaxAppenderOptions.rolling_files === true) {
287
+ // start the scheduled task for rolling (log) files
288
+ //
289
+ rolling_logs.start();
290
+ }
291
+
292
+ // -----------------------------------------------------------------------------
293
+ // print utility server issue
294
+ //
295
+ if (environment === 'dev') {
296
+ console.log('Server enabled: ' + enabled);
297
+ console.log('Environment detected as: ' + environment);
298
+ console.log('Daemon path set to: ' + daemon_home);
299
+ console.log('Daemon verbosity set to: ' + verbose);
300
+ console.log('Project path set to: ' + project_home);
301
+ console.log('Data path set to: ' + config_home);
302
+ console.log('Log file set to: ' + logFileNamePath);
303
+ }
304
+
183
305
  // -----------------------------------------------------------------------------
184
306
  // Github OAuth client settings (used for CC)
185
307
  //
@@ -193,11 +315,10 @@ const oauthProviderClientScope = private_data.oauth.client_scope;
193
315
  const oauthProviderClientId = private_data.oauth.client_id;
194
316
  const oauthProviderClientSecret = private_data.oauth.client_secret;
195
317
 
196
-
197
318
  // -----------------------------------------------------------------------------
198
319
  // cors settings
199
320
  //
200
- var corsSettings = {
321
+ let corsSettings = {
201
322
  origin: '*',
202
323
  optionsSuccessStatus: 200 // Some legacy browsers (IE11, various SmartTVs) choke on 204
203
324
  }
@@ -211,7 +332,7 @@ var corsSettings = {
211
332
  //
212
333
 
213
334
  // =============================================================================
214
- // initialize libraries
335
+ // initialize runtime libraries
215
336
  // -----------------------------------------------------------------------------
216
337
  const app = express();
217
338
  const oauth2 = simpleOauthModule.create({
@@ -322,6 +443,7 @@ app.get('/auth/github/callback', (req, res) => {
322
443
  }
323
444
 
324
445
  // see: http://usefulangle.com/post/4/javascript-communication-parent-child-window
446
+ //
325
447
  const script = `
326
448
  <script>
327
449
  (function() {
@@ -524,6 +646,10 @@ app.post('/log2disk', (req, res) => {
524
646
  // ---------------------------------------------------------------------------
525
647
  // globals
526
648
  let pageID = req.headers['x-page-id'];
649
+ let tzOffset = req.headers['x-tz-offset'];
650
+ const tz_offset = tzOffset.replace(/GMT/g, '');
651
+ let tz_factor;
652
+ let tz_offset_milli;
527
653
  let logLine;
528
654
  let msgDate2Int;
529
655
  let timestamp;
@@ -532,6 +658,7 @@ app.post('/log2disk', (req, res) => {
532
658
 
533
659
  // ---------------------------------------------------------------------------
534
660
  // process the POST response body
661
+ //
535
662
  if (req.body.layout === 'XmlLayout') {
536
663
  logLine = req.body.data;
537
664
  } else if (req.body.layout === 'JsonLayout' || req.body.layout === 'PatternLayout' || req.body.layout === 'SimpleLayout' || req.body.layout === 'NullLayout') {
@@ -539,18 +666,35 @@ app.post('/log2disk', (req, res) => {
539
666
  } else if (req.body.layout === 'HttpPostDataLayout') {
540
667
  url = new parseURL(req.body.url);
541
668
  path = url.pathname;
542
- msgDate2Int = parseInt(req.body.timestamp, 10); // ISOString: ±YYYY-MM-DDTHH:mm:ss.sssZ
669
+
670
+ msgDate2Int = parseInt(req.body.timestamp, 10);
671
+
672
+ // calculate TZ offset
673
+ //
674
+ let tz_split = tz_offset.split(':');
675
+ let tz_offset_hours = eval(tz_split[0]*1);
676
+ let tz_offset_minutes = eval(tz_split[1]*1);
677
+
678
+ tz_factor = tz_offset_hours < 0 ? -1 : 1;
679
+
680
+ tz_offset_hours = tz_factor*tz_offset_hours;
681
+ tz_offset_milli = tz_factor*((3600*1000*tz_offset_hours) + (tz_offset_minutes*60*1000));
682
+ msgDate2Int += tz_offset_milli;
683
+
684
+ // ISOString: yyyy-MM-ddThh:mm:ss.sssZ
543
685
  timestamp = new Date(msgDate2Int).toISOString().slice(0, 23).replace('T', ' ');
686
+
544
687
  // [10:05:12.666] [INFO ] [j1.logger.writer ] [logger.js:154] [state: finished]
545
688
  // [http://localhost:41000/assets/themes/j1/adapter/js/logger.js:154]
546
- logLine = sprintf('[%s] [%s] [%-5s] [%-25s] [%-35s] %s\n', timestamp, pageID, req.body.level, path, req.body.logger, req.body.message);
689
+ logLine = sprintf('[%s] [%s] [%-5s] [%-60s] [%-40s] %s\n', timestamp, pageID, req.body.level, path, req.body.logger, req.body.message);
547
690
  } else {
548
691
  logLine = req.body + '\n';
549
692
  }
550
693
 
551
- // if (verbose) console.log('Utility Server: endpoint /log2disk entered');
552
- // if (verbose) console.log('Utility Server: processing request: ' + req.query.request);
553
- if (verbose) console.log('Utility Server: write message: ' + logLine);
694
+ // if (verbose) console.log('Utility Server: endpoint /log2disk entered');
695
+ // if (verbose) console.log('Utility Server: processing request: ' + req.query.request);
696
+ // if (verbose) console.log('Utility Server: write message: ' + logLine);
697
+
554
698
  logStream.write(logLine);
555
699
  res.send('');
556
700
 
@@ -577,6 +721,20 @@ function mergeData () {
577
721
  return o;
578
722
  }
579
723
 
724
+ // -------------------------------------------------------------------------
725
+ // generateId()
726
+ // Generate a unique (thread) id used by the logger
727
+ // -------------------------------------------------------------------------
728
+ function generateId (length) {
729
+ let result = '';
730
+ let characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
731
+ let charactersLength = characters.length;
732
+ for ( let i = 0; i < length; i++ ) {
733
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
734
+ }
735
+ return result;
736
+ } // END generateId
737
+
580
738
 
581
739
  // =============================================================================
582
740
  // main
@@ -594,8 +752,23 @@ process.on('uncaughtException', function(err) {
594
752
  process.exit;
595
753
  });
596
754
 
597
- // run the daemon (use IPV4, all interfaces)
598
- // see https://github.com/expressjs/express/issues/3528
599
- app.listen(port, hostName, () => {
600
- console.log("Utility Server is listening on port: " + port);
601
- });
755
+ if (utilsrv_options.enabled) {
756
+
757
+ // test_per_minute.start();
758
+
759
+ logger.info('utility server is starting');
760
+
761
+ // run the daemon (use IPV4, all interfaces)
762
+ // see https://github.com/expressjs/express/issues/3528
763
+ app.listen(port, hostName, () => {
764
+ console.log("Utility Server is listening on port: " + port);
765
+ logger.info('utility server is listening on port: ' + port);
766
+ });
767
+ } else {
768
+ logger.info('found utility server: disabled');
769
+ logger.info('stop the server');
770
+ console.log('Stop the server. Exiting ...');
771
+ }
772
+
773
+ // END main
774
+ // -----------------------------------------------------------------------------