j1-template 2022.6.3 → 2023.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +15 -15
  4. data/_includes/themes/j1/layouts/content_generator_collection.html +3 -3
  5. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +3 -3
  6. data/_includes/themes/j1/layouts/content_generator_page.html +3 -3
  7. data/_includes/themes/j1/layouts/content_generator_post.html +3 -3
  8. data/_includes/themes/j1/layouts/content_generator_raw.html +5 -4
  9. data/_includes/themes/j1/layouts/layout_metadata_generator.html +3 -3
  10. data/_includes/themes/j1/layouts/layout_module_generator.html +3 -3
  11. data/_includes/themes/j1/layouts/layout_resource_generator.html +3 -3
  12. data/_includes/themes/j1/modules/attics/generator.html +3 -3
  13. data/_includes/themes/j1/modules/navigator/generator.html +4 -4
  14. data/_includes/themes/j1/modules/searcher/generator.html +3 -3
  15. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +3 -3
  16. data/_includes/themes/j1/procedures/blocks/footer/boxes/about_box.proc +2 -2
  17. data/_includes/themes/j1/procedures/blocks/footer/boxes/contacts_box.proc +2 -2
  18. data/_includes/themes/j1/procedures/blocks/footer/boxes/issue.proc +2 -2
  19. data/_includes/themes/j1/procedures/blocks/footer/boxes/legal_statements.proc +2 -2
  20. data/_includes/themes/j1/procedures/blocks/footer/boxes/links_box.proc +2 -2
  21. data/_includes/themes/j1/procedures/blocks/footer/boxes/news_box.proc +2 -2
  22. data/_includes/themes/j1/procedures/blocks/footer/boxes/social_media_icons.proc +29 -6
  23. data/_includes/themes/j1/procedures/blocks/get_wave.proc +18 -3
  24. data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +3 -3
  25. data/_includes/themes/j1/procedures/global/attributes_loader.proc +3 -3
  26. data/_includes/themes/j1/procedures/global/collect_frontmatter_options.proc +3 -3
  27. data/_includes/themes/j1/procedures/global/collect_page_options.proc +3 -3
  28. data/_includes/themes/j1/procedures/global/create_bs_button.proc +3 -3
  29. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +3 -3
  30. data/_includes/themes/j1/procedures/global/date-german.proc +3 -3
  31. data/_includes/themes/j1/procedures/global/get_category.proc +3 -3
  32. data/_includes/themes/j1/procedures/global/get_category_item.proc +3 -3
  33. data/_includes/themes/j1/procedures/global/get_documents_dir.proc +3 -3
  34. data/_includes/themes/j1/procedures/global/get_page_path.proc +3 -3
  35. data/_includes/themes/j1/procedures/global/get_page_url.proc +3 -3
  36. data/_includes/themes/j1/procedures/global/select_color.proc +3 -3
  37. data/_includes/themes/j1/procedures/global/select_font_size.proc +3 -3
  38. data/_includes/themes/j1/procedures/global/select_icon_size.proc +3 -3
  39. data/_includes/themes/j1/procedures/global/select_location.proc +3 -3
  40. data/_includes/themes/j1/procedures/global/set_base_vars_folders.proc +3 -3
  41. data/_includes/themes/j1/procedures/global/set_env_entry_document.proc +3 -3
  42. data/_includes/themes/j1/procedures/global/set_image_block.proc +3 -3
  43. data/_includes/themes/j1/procedures/global/setup.proc +3 -3
  44. data/_includes/themes/j1/procedures/layouts/content_writer.proc +3 -3
  45. data/_includes/themes/j1/procedures/layouts/default_writer.proc +3 -3
  46. data/_includes/themes/j1/procedures/layouts/module_writer.proc +3 -3
  47. data/_includes/themes/j1/procedures/layouts/resource_writer.proc +3 -3
  48. data/_includes/themes/j1/procedures/posts/collate_calendar.proc +3 -3
  49. data/_includes/themes/j1/procedures/posts/collate_list.proc +3 -3
  50. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +3 -3
  51. data/_includes/themes/j1/procedures/posts/create_ad_block.proc +3 -3
  52. data/_includes/themes/j1/procedures/posts/create_series_header.proc +3 -3
  53. data/_includes/themes/j1/procedures/posts/pager.proc +3 -3
  54. data/_layouts/collection.html +4 -4
  55. data/_layouts/compress.html +3 -3
  56. data/_layouts/default.html +4 -4
  57. data/_layouts/home.html +4 -4
  58. data/_layouts/news_panel_posts.html +4 -4
  59. data/_layouts/page.html +4 -4
  60. data/_layouts/paginator/autopage_category.html +3 -3
  61. data/_layouts/paginator/autopage_collection.html +3 -3
  62. data/_layouts/paginator/autopage_collections_tags.html +3 -3
  63. data/_layouts/paginator/autopage_tags.html +3 -3
  64. data/_layouts/post.html +4 -4
  65. data/_layouts/raw.html +5 -5
  66. data/apps/public/cc/cc.yml +12 -12
  67. data/apps/public/cc/index.adoc +1 -1
  68. data/assets/data/authclient.html +3 -3
  69. data/assets/data/banner.html +5 -5
  70. data/assets/data/carousel.json +4 -4
  71. data/assets/data/cookieconsent.html +3 -3
  72. data/assets/data/fab.html +3 -3
  73. data/assets/data/footer.html +4 -4
  74. data/assets/data/galleries.json +4 -4
  75. data/assets/data/gallery_customizer.html +4 -4
  76. data/assets/data/iso-639-language-codes-flags.json +1 -1
  77. data/assets/data/iso-639-language-codes.json +2 -2
  78. data/assets/data/j1_config.json +2 -2
  79. data/assets/data/masterslider.html +3 -3
  80. data/assets/data/mdi_icons.json +3 -3
  81. data/assets/data/mdil_icons.json +3 -3
  82. data/assets/data/menu.html +3 -3
  83. data/assets/data/mmenu.html +3 -3
  84. data/assets/data/mmenu_sidebar.html +3 -3
  85. data/assets/data/mmenu_toc.html +3 -3
  86. data/assets/data/nbinteract.html +3 -3
  87. data/assets/data/panel.html +3 -3
  88. data/assets/data/particles.yml +194 -0
  89. data/assets/data/private.json +2 -2
  90. data/assets/data/quicklinks.html +3 -3
  91. data/assets/data/rtext_resizer.html +3 -3
  92. data/assets/data/themes.bootswatch.json +2 -2
  93. data/assets/data/themes.json +2 -2
  94. data/assets/data/top_search_modal.html +3 -3
  95. data/assets/data/translator.html +3 -3
  96. data/assets/error_pages/HTTP204.html +3 -3
  97. data/assets/error_pages/HTTP400.html +3 -3
  98. data/assets/error_pages/HTTP401.html +3 -3
  99. data/assets/error_pages/HTTP403.html +3 -3
  100. data/assets/error_pages/HTTP404.html +3 -3
  101. data/assets/error_pages/HTTP444.html +3 -3
  102. data/assets/error_pages/HTTP445.html +3 -3
  103. data/assets/error_pages/HTTP446.html +5 -5
  104. data/assets/error_pages/HTTP447.html +5 -5
  105. data/assets/error_pages/HTTP448.html +3 -3
  106. data/assets/error_pages/HTTP500.html +3 -3
  107. data/assets/error_pages/HTTP501.html +3 -3
  108. data/assets/error_pages/HTTP502.html +3 -3
  109. data/assets/error_pages/HTTP503.html +3 -3
  110. data/assets/themes/j1/adapter/js/advertising.js +4 -4
  111. data/assets/themes/j1/adapter/js/algolia.js +4 -4
  112. data/assets/themes/j1/adapter/js/analytics.js +4 -4
  113. data/assets/themes/j1/adapter/js/asciidoctor.js +4 -4
  114. data/assets/themes/j1/adapter/js/attic.js +10 -7
  115. data/assets/themes/j1/adapter/js/bmd.js +4 -4
  116. data/assets/themes/j1/adapter/js/carousel.js +6 -6
  117. data/assets/themes/j1/adapter/js/clipboard.js +5 -5
  118. data/assets/themes/j1/adapter/js/comments.js +7 -5
  119. data/assets/themes/j1/adapter/js/cookieConsent.js +5 -5
  120. data/assets/themes/j1/adapter/js/customFunctions.js +4 -4
  121. data/assets/themes/j1/adapter/js/customModule.js +4 -4
  122. data/assets/themes/j1/adapter/js/dropdowns.js +4 -4
  123. data/assets/themes/j1/adapter/js/fab.js +4 -4
  124. data/assets/themes/j1/adapter/js/framer.js +4 -4
  125. data/assets/themes/j1/adapter/js/j1.js +8 -8
  126. data/assets/themes/j1/adapter/js/justifiedGallery.js +6 -6
  127. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +4 -4
  128. data/assets/themes/j1/adapter/js/lightbox.js +4 -4
  129. data/assets/themes/j1/adapter/js/logger.js +4 -4
  130. data/assets/themes/j1/adapter/js/lunr.js +5 -5
  131. data/assets/themes/j1/adapter/js/masonry.js +4 -4
  132. data/assets/themes/j1/adapter/js/masterslider.js +4 -4
  133. data/assets/themes/j1/adapter/js/mmenu.js +4 -4
  134. data/assets/themes/j1/adapter/js/navigator.js +4 -4
  135. data/assets/themes/j1/adapter/js/nbinteract.js +4 -4
  136. data/assets/themes/j1/adapter/js/particles.js +254 -0
  137. data/assets/themes/j1/adapter/js/rangeSlider.js +4 -4
  138. data/assets/themes/j1/adapter/js/rouge.js +4 -4
  139. data/assets/themes/j1/adapter/js/rtable.js +4 -4
  140. data/assets/themes/j1/adapter/js/rtextResizer.js +4 -4
  141. data/assets/themes/j1/adapter/js/scroller.js +4 -4
  142. data/assets/themes/j1/adapter/js/themer.js +4 -4
  143. data/assets/themes/j1/adapter/js/toccer.js +4 -4
  144. data/assets/themes/j1/adapter/js/translator.js +5 -5
  145. data/assets/themes/j1/adapter/js/waves.js +4 -4
  146. data/assets/themes/j1/core/country-flags/css/theme/uno.css +3 -3
  147. data/assets/themes/j1/core/country-flags/css/theme/uno.min.css +3 -3
  148. data/assets/themes/j1/core/css/animate.css +7 -7
  149. data/assets/themes/j1/core/css/icon-fonts/fontawesome.css +7 -7
  150. data/assets/themes/j1/core/css/icon-fonts/iconify.css +16 -16
  151. data/assets/themes/j1/core/css/icon-fonts/materialdesign-light.css +30 -30
  152. data/assets/themes/j1/core/css/icon-fonts/materialdesign.css +27 -27
  153. data/assets/themes/j1/core/css/icon-fonts/mdi.css +28 -28
  154. data/assets/themes/j1/core/css/icon-fonts/mdil.css +31 -31
  155. data/assets/themes/j1/core/css/icon-fonts/twemoji.css +18 -18
  156. data/assets/themes/j1/core/css/nbinteract-tutorial/styles.css +4 -4
  157. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +4 -4
  158. data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.css +8 -8
  159. data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +136 -136
  160. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +337 -204
  161. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  162. data/assets/themes/j1/core/css/vendor.css +32 -32
  163. data/assets/themes/j1/core/fonts/material_design_icons/fonts/_versions/v7.0.96/preview.html +717 -717
  164. data/assets/themes/j1/core/js/template.js +36 -36
  165. data/assets/themes/j1/core/js/template.min.js +2 -2
  166. data/assets/themes/j1/modules/advertising/js/google/adInitializer.js +5 -5
  167. data/assets/themes/j1/modules/backstretch/js/backstretch.js +4 -4
  168. data/assets/themes/j1/modules/backstretch/js/backstretch.min.js +4 -4
  169. data/assets/themes/j1/modules/backstretch/js/v2.1.16/backstretch.js +4 -4
  170. data/assets/themes/j1/modules/backstretch/js/v2.1.16/backstretch.min.js +4 -4
  171. data/assets/themes/j1/modules/backstretch/js/v2.1.18/backstretch.js +4 -4
  172. data/assets/themes/j1/modules/backstretch/js/v2.1.18/backstretch.min.js +4 -4
  173. data/assets/themes/j1/modules/bmd/js/bmd.js +4 -4
  174. data/assets/themes/j1/modules/bmd/js/bmd.min.js +4 -4
  175. data/assets/themes/j1/modules/bokeh/js/v2.4.3/bokeh.min.js +2 -2
  176. data/assets/themes/j1/modules/carousel/css/carousel.css +3 -3
  177. data/assets/themes/j1/modules/carousel/css/carousel.min.css +3 -3
  178. data/assets/themes/j1/modules/carousel/css/carousel_transitions.css +3 -3
  179. data/assets/themes/j1/modules/carousel/css/carousel_transitions.min.css +3 -3
  180. data/assets/themes/j1/modules/carousel/css/theme/uno.css +3 -3
  181. data/assets/themes/j1/modules/carousel/css/theme/uno.min.css +3 -3
  182. data/assets/themes/j1/modules/clipboard/css/theme/uno.css +3 -3
  183. data/assets/themes/j1/modules/clipboard/css/theme/uno.min.css +3 -3
  184. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +5 -5
  185. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +5 -5
  186. data/assets/themes/j1/modules/datatables/css/theme/uno.css +4 -4
  187. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.2.js +2 -2
  188. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.js +2 -2
  189. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.min.js +2 -2
  190. data/assets/themes/j1/modules/dropdowns/css/theme/uno/dropdowns.css +3 -3
  191. data/assets/themes/j1/modules/dropdowns/css/theme/uno/dropdowns.min.css +3 -3
  192. data/assets/themes/j1/modules/dropdowns/js/cash.js +3 -3
  193. data/assets/themes/j1/modules/dropdowns/js/dropdowns.js +3 -3
  194. data/assets/themes/j1/modules/fab/js/cash.js +3 -3
  195. data/assets/themes/j1/modules/fab/js/fab.js +3 -3
  196. data/assets/themes/j1/modules/fast-levenshtein/README.md +69 -0
  197. data/assets/themes/j1/modules/fast-levenshtein/js/levenshtein.js +135 -0
  198. data/assets/themes/j1/modules/fast-levenshtein/links.md +10 -0
  199. data/assets/themes/j1/modules/jquery/js/extensions/hasClass.js +4 -4
  200. data/assets/themes/j1/modules/jquery/js/extensions/hasClass.min.js +4 -4
  201. data/assets/themes/j1/modules/jquery/js/extensions/removeClass.js +4 -4
  202. data/assets/themes/j1/modules/jquery/js/extensions/removeClass.min.js +4 -4
  203. data/assets/themes/j1/modules/justifiedGallery/_versions/v3.7.0/css/theme/uno.css +3 -3
  204. data/assets/themes/j1/modules/justifiedGallery/css/theme/uno.css +3 -3
  205. data/assets/themes/j1/modules/justifiedGallery/css/theme/uno.min.css +3 -3
  206. data/assets/themes/j1/modules/lightGallery/css/themes/uno.css +3 -3
  207. data/assets/themes/j1/modules/lightGallery/css/themes/uno.min.css +3 -3
  208. data/assets/themes/j1/modules/lightGallery/js/core/j1/{lightgallery-x.js → lightgallery.js} +0 -0
  209. data/assets/themes/j1/modules/lightGallery/js/core/j1/{lightgallery-x.min.js → lightgallery.min.js} +0 -0
  210. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-video.js +1 -1
  211. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-video.min.js +2 -3
  212. data/assets/themes/j1/modules/lightbox/css/lightbox.css +4 -4
  213. data/assets/themes/j1/modules/lightbox/css/lightbox.min.css +4 -4
  214. data/assets/themes/j1/modules/lightbox/css/theme/uno.css +3 -3
  215. data/assets/themes/j1/modules/lightbox/css/theme/uno.min.css +3 -3
  216. data/assets/themes/j1/modules/lightbox/js/lightbox.js +4 -4
  217. data/assets/themes/j1/modules/lightbox/js/lightbox.min.js +4 -4
  218. data/assets/themes/j1/modules/lunr/css/j1.css +3 -3
  219. data/assets/themes/j1/modules/lunr/css/j1.min.css +3 -3
  220. data/assets/themes/j1/modules/lunr/js/j1.js +4 -4
  221. data/assets/themes/j1/modules/lunr/js/j1.min.js +3 -3
  222. data/assets/themes/j1/modules/masonry/README.md +84 -84
  223. data/assets/themes/j1/modules/masonry/js/masonry.pkgd.js +2503 -2503
  224. data/assets/themes/j1/modules/masonry/js/masonry.pkgd.min.js +9 -9
  225. data/assets/themes/j1/modules/masterslider/css/theme/uno.css +3 -3
  226. data/assets/themes/j1/modules/masterslider/css/theme/uno.min.css +3 -3
  227. data/assets/themes/j1/modules/masterslider/js/masterslider.js +2 -2
  228. data/assets/themes/j1/modules/masterslider/js/masterslider.min.js +1 -1
  229. data/assets/themes/j1/modules/mdiPreviewer/css/previewer.css +3 -3
  230. data/assets/themes/j1/modules/mdiPreviewer/css/previewer.min.css +3 -3
  231. data/assets/themes/j1/modules/mdiPreviewer/js/previewer.js +3 -3
  232. data/assets/themes/j1/modules/mdiPreviewer/js/previewer.min.js +3 -3
  233. data/assets/themes/j1/modules/mdilPreviewer/css/previewer.css +3 -3
  234. data/assets/themes/j1/modules/mdilPreviewer/css/previewer.min.css +3 -3
  235. data/assets/themes/j1/modules/mdilPreviewer/js/previewer.js +3 -3
  236. data/assets/themes/j1/modules/mdilPreviewer/js/previewer.min.js +3 -3
  237. data/assets/themes/j1/modules/mmenuLight/css/mmenu-light.css +3 -3
  238. data/assets/themes/j1/modules/mmenuLight/css/mmenu-light.min.css +3 -3
  239. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.css +11 -37
  240. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +4 -8
  241. data/assets/themes/j1/modules/mmenuLight/js/mmenu.js +4 -4
  242. data/assets/themes/j1/modules/mmenuLight/js/mmenu.min.js +4 -4
  243. data/assets/themes/j1/modules/msDropdown/css/flags.css +3 -3
  244. data/assets/themes/j1/modules/msDropdown/css/flags.min.css +3 -3
  245. data/assets/themes/j1/modules/msDropdown/css/msDropdown.css +3 -3
  246. data/assets/themes/j1/modules/msDropdown/css/msDropdown.min.css +3 -3
  247. data/assets/themes/j1/modules/msDropdown/css/themes/uno/msDropdown.css +3 -3
  248. data/assets/themes/j1/modules/msDropdown/css/themes/uno/msDropdown.min.css +3 -3
  249. data/assets/themes/j1/modules/msDropdown/js/msDropdown.js +3 -3
  250. data/assets/themes/j1/modules/msDropdown/js/msDropdown.min.js +3 -3
  251. data/assets/themes/j1/modules/nbinteract-core/LICENSE.txt +1 -1
  252. data/assets/themes/j1/modules/nbinteract-core/css/nbinteract.css +3 -3
  253. data/assets/themes/j1/modules/nbinteract-core/css/nbinteract.min.css +3 -3
  254. data/assets/themes/j1/modules/nbinteract-core/css/theme/uno/nbinteract.css +3 -3
  255. data/assets/themes/j1/modules/nbinteract-core/css/theme/uno/nbinteract.min.css +3 -3
  256. data/assets/themes/j1/modules/particles/LICENSE.md +21 -0
  257. data/assets/themes/j1/modules/particles/README.md +243 -0
  258. data/assets/themes/j1/modules/particles/css/images/snowflake-1.png +0 -0
  259. data/assets/themes/j1/modules/particles/css/images/snowflake-2.png +0 -0
  260. data/assets/themes/j1/modules/particles/examples/snow/CodePen-Home-Pure-CSS-Snow.md +1 -0
  261. data/assets/themes/j1/modules/particles/examples/snow/gist.github.comTanvir8.md +1 -0
  262. data/assets/themes/j1/modules/particles/examples/snow/let- it-snow.md +173 -0
  263. data/assets/themes/j1/modules/particles/js/particles.js +1541 -0
  264. data/assets/themes/j1/modules/particles/js/particles.min.js +9 -0
  265. data/assets/themes/j1/modules/rangeSlider/css/theme/uno/nouislider.css +3 -3
  266. data/assets/themes/j1/modules/rangeSlider/css/theme/uno/nouislider.min.css +3 -3
  267. data/assets/themes/j1/modules/rouge/css/base16/theme.css +3 -3
  268. data/assets/themes/j1/modules/rouge/css/base16.dark/theme.css +3 -3
  269. data/assets/themes/j1/modules/rouge/css/base16.light/theme.css +3 -3
  270. data/assets/themes/j1/modules/rouge/css/base16.monokai/theme.css +3 -3
  271. data/assets/themes/j1/modules/rouge/css/base16.monokai.dark/theme.css +3 -3
  272. data/assets/themes/j1/modules/rouge/css/base16.monokai.light/theme.css +3 -3
  273. data/assets/themes/j1/modules/rouge/css/base16.solarized/theme.css +3 -3
  274. data/assets/themes/j1/modules/rouge/css/base16.solarized.dark/theme.css +3 -3
  275. data/assets/themes/j1/modules/rouge/css/base16.solarized.light/theme.css +3 -3
  276. data/assets/themes/j1/modules/rouge/css/colorful/theme.css +3 -3
  277. data/assets/themes/j1/modules/rouge/css/github/theme.css +3 -3
  278. data/assets/themes/j1/modules/rouge/css/gruvbox/theme.css +3 -3
  279. data/assets/themes/j1/modules/rouge/css/gruvbox.dark/theme.css +3 -3
  280. data/assets/themes/j1/modules/rouge/css/gruvbox.light/theme.css +3 -3
  281. data/assets/themes/j1/modules/rouge/css/igorpro/theme.css +3 -3
  282. data/assets/themes/j1/modules/rouge/css/molokai/theme.css +3 -3
  283. data/assets/themes/j1/modules/rouge/css/monokai/theme.css +3 -3
  284. data/assets/themes/j1/modules/rouge/css/monokai.sublime/theme.css +3 -3
  285. data/assets/themes/j1/modules/rouge/css/pastie/theme.css +3 -3
  286. data/assets/themes/j1/modules/rouge/css/thankful_eyes/theme.css +3 -3
  287. data/assets/themes/j1/modules/rouge/css/themes.txt +3 -3
  288. data/assets/themes/j1/modules/rouge/css/tulip/theme.css +3 -3
  289. data/assets/themes/j1/modules/rouge/css/uno.dark/theme.css +3 -3
  290. data/assets/themes/j1/modules/rouge/css/uno.light/theme.css +3 -3
  291. data/assets/themes/j1/modules/rouge/js/select.js +3 -3
  292. data/assets/themes/j1/modules/rtable/css/theme/uno/rtable.css +4 -4
  293. data/assets/themes/j1/modules/rtable/css/theme/uno/rtable.min.css +4 -4
  294. data/assets/themes/j1/modules/rtable/js/rtable.js +4 -4
  295. data/assets/themes/j1/modules/rtable/js/rtable.min.js +4 -4
  296. data/assets/themes/j1/modules/scroller/css/theme/uno.css +3 -3
  297. data/assets/themes/j1/modules/scroller/css/theme/uno.min.css +3 -3
  298. data/assets/themes/j1/modules/scroller/js/scroller.js +2 -2
  299. data/assets/themes/j1/modules/scroller/js/scroller.min.js +2 -2
  300. data/assets/themes/j1/modules/spinner/css/spin.css +3 -3
  301. data/assets/themes/j1/modules/spinner/css/spin.min.css +3 -3
  302. data/assets/themes/j1/modules/spinner/js/spin.js +3 -3
  303. data/assets/themes/j1/modules/spinner/js/spin.min.js +3 -3
  304. data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +4 -4
  305. data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +3 -3
  306. data/assets/themes/j1/modules/translator/css/translator.css +3 -3
  307. data/assets/themes/j1/modules/translator/css/translator.min.css +3 -3
  308. data/assets/themes/j1/modules/translator/js/translator.js +3 -3
  309. data/assets/themes/j1/modules/translator/js/translator.min.js +3 -3
  310. data/exe/j1 +1 -1
  311. data/lib/j1/version.rb +1 -1
  312. data/lib/j1_app/j1_auth_manager/auth_manager.rb +3 -3
  313. data/lib/j1_app/j1_auth_manager/error_pages.rb +3 -3
  314. data/lib/j1_app/j1_auth_manager/helpers_disqus.rb +3 -3
  315. data/lib/j1_app/j1_auth_manager/helpers_facebook.rb +3 -3
  316. data/lib/j1_app/j1_auth_manager/helpers_github.rb +3 -3
  317. data/lib/j1_app/j1_auth_manager/helpers_patreon.rb +3 -3
  318. data/lib/j1_app/j1_auth_manager/helpers_twitter.rb +3 -3
  319. data/lib/j1_app/j1_auth_manager/views/auth_manager_ui.erb +1 -1
  320. data/lib/j1_app/j1_auth_manager/warden_omniauth.rb +3 -3
  321. data/lib/j1_app/j1_site_manager/static_site.no-cross-origin.rb +1 -1
  322. data/lib/j1_app/j1_site_manager/static_site.rb +1 -1
  323. data/lib/j1_app/omniauth/strategies/disqus.rb +3 -3
  324. data/lib/j1_app/omniauth/strategies/facebook.rb +3 -3
  325. data/lib/j1_app/omniauth/strategies/github.rb +3 -3
  326. data/lib/j1_app/omniauth/strategies/patreon.rb +3 -3
  327. data/lib/j1_app/omniauth/strategies/twitter.rb +3 -3
  328. data/lib/starter_web/Gemfile +14 -14
  329. data/lib/starter_web/README.md +24 -24
  330. data/lib/starter_web/_config.yml +29 -28
  331. data/lib/starter_web/_data/_defaults/categories.yml +5 -5
  332. data/lib/starter_web/_data/_defaults/colors.yml +3 -3
  333. data/lib/starter_web/_data/_defaults/font_sizes.yml +4 -4
  334. data/lib/starter_web/_data/_defaults/j1_config.yml +6 -6
  335. data/lib/starter_web/_data/_defaults/private.yml +2 -2
  336. data/lib/starter_web/_data/_defaults/resources.yml +11 -11
  337. data/lib/starter_web/_data/apps/defaults/justifiedGalleryCustomizer.yml +3 -3
  338. data/lib/starter_web/_data/apps/justifiedGalleryCustomizer.yml +3 -3
  339. data/lib/starter_web/_data/asciidoc2pdf/themes/j1-theme.yml +4 -4
  340. data/lib/starter_web/_data/blocks/banner.yml +26 -40
  341. data/lib/starter_web/_data/blocks/defaults/banner.yml +3 -3
  342. data/lib/starter_web/_data/blocks/defaults/footer.yml +6 -7
  343. data/lib/starter_web/_data/blocks/defaults/panel.yml +6 -6
  344. data/lib/starter_web/_data/blocks/footer.yml +21 -13
  345. data/lib/starter_web/_data/blocks/panel.yml +22 -22
  346. data/lib/starter_web/_data/categories.yml +5 -5
  347. data/lib/starter_web/_data/colors.yml +3 -3
  348. data/lib/starter_web/_data/font_sizes.yml +4 -4
  349. data/lib/starter_web/_data/j1_config.yml +6 -6
  350. data/lib/starter_web/_data/layouts/collection.yml +10 -10
  351. data/lib/starter_web/_data/layouts/default.yml +8 -8
  352. data/lib/starter_web/_data/layouts/home.yml +8 -8
  353. data/lib/starter_web/_data/layouts/news_panel_posts.yml +10 -10
  354. data/lib/starter_web/_data/layouts/page.yml +10 -10
  355. data/lib/starter_web/_data/layouts/post.yml +10 -10
  356. data/lib/starter_web/_data/layouts/raw.yml +10 -10
  357. data/lib/starter_web/_data/modules/advertising.yml +3 -3
  358. data/lib/starter_web/_data/modules/analytics.yml +3 -3
  359. data/lib/starter_web/_data/modules/attics.yml +4 -4
  360. data/lib/starter_web/_data/modules/authentication.yml +3 -3
  361. data/lib/starter_web/_data/modules/blog_navigator.yml +3 -3
  362. data/lib/starter_web/_data/modules/carousel.yml +5 -5
  363. data/lib/starter_web/_data/modules/comments.yml +3 -4
  364. data/lib/starter_web/_data/modules/cookieconsent.yml +3 -3
  365. data/lib/starter_web/_data/modules/cookies.yml +3 -3
  366. data/lib/starter_web/_data/modules/defaults/advertising.yml +3 -3
  367. data/lib/starter_web/_data/modules/defaults/analytics.yml +3 -3
  368. data/lib/starter_web/_data/modules/defaults/attics.yml +4 -4
  369. data/lib/starter_web/_data/modules/defaults/authentication.yml +3 -3
  370. data/lib/starter_web/_data/modules/defaults/blog_navigator.yml +3 -3
  371. data/lib/starter_web/_data/modules/defaults/carousel.yml +3 -3
  372. data/lib/starter_web/_data/modules/defaults/comments.yml +3 -3
  373. data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +3 -3
  374. data/lib/starter_web/_data/modules/defaults/cookies.yml +4 -4
  375. data/lib/starter_web/_data/modules/defaults/dropdowns.yml +3 -3
  376. data/lib/starter_web/_data/modules/defaults/fab.yml +3 -3
  377. data/lib/starter_web/_data/modules/defaults/framer.yml +3 -3
  378. data/lib/starter_web/_data/modules/defaults/justifiedGallery.yml +3 -3
  379. data/lib/starter_web/_data/modules/defaults/lightGallery.yml +3 -3
  380. data/lib/starter_web/_data/modules/defaults/lightbox.yml +3 -3
  381. data/lib/starter_web/_data/modules/defaults/log4javascript.yml +3 -3
  382. data/lib/starter_web/_data/modules/defaults/log4r.yml +3 -3
  383. data/lib/starter_web/_data/modules/defaults/lunr.yml +3 -3
  384. data/lib/starter_web/_data/modules/defaults/masonry.yml +3 -3
  385. data/lib/starter_web/_data/modules/defaults/masterslider.yml +3 -3
  386. data/lib/starter_web/_data/modules/defaults/navigator.yml +3 -3
  387. data/lib/starter_web/_data/modules/defaults/nbinteract.yml +3 -3
  388. data/lib/starter_web/_data/modules/defaults/particles.yml +134 -0
  389. data/lib/starter_web/_data/modules/defaults/rangeSlider.yml +3 -3
  390. data/lib/starter_web/_data/modules/defaults/rtable.yml +3 -3
  391. data/lib/starter_web/_data/modules/defaults/scoller.yml +3 -3
  392. data/lib/starter_web/_data/modules/defaults/themer.yml +3 -3
  393. data/lib/starter_web/_data/modules/defaults/toccer.yml +3 -3
  394. data/lib/starter_web/_data/modules/defaults/translator.yml +3 -3
  395. data/lib/starter_web/_data/modules/defaults/waves.yml +3 -3
  396. data/lib/starter_web/_data/modules/dropdowns.yml +3 -3
  397. data/lib/starter_web/_data/modules/fab.yml +3 -3
  398. data/lib/starter_web/_data/modules/framer.yml +3 -3
  399. data/lib/starter_web/_data/modules/justifiedGallery.yml +3 -3
  400. data/lib/starter_web/_data/modules/lightGallery.yml +3 -3
  401. data/lib/starter_web/_data/modules/lightbox.yml +3 -3
  402. data/lib/starter_web/_data/modules/log4javascript.yml +3 -3
  403. data/lib/starter_web/_data/modules/log4r.yml +3 -3
  404. data/lib/starter_web/_data/modules/lunr.yml +3 -3
  405. data/lib/starter_web/_data/modules/masonry.yml +3 -3
  406. data/lib/starter_web/_data/modules/masterslider.yml +3 -3
  407. data/lib/starter_web/_data/modules/navigator.yml +3 -3
  408. data/lib/starter_web/_data/modules/navigator_menu.yml +8 -8
  409. data/lib/starter_web/_data/modules/nbinteract.yml +3 -3
  410. data/lib/starter_web/_data/modules/particles.yml +149 -0
  411. data/lib/starter_web/_data/modules/rangeSlider.yml +3 -3
  412. data/lib/starter_web/_data/modules/rtable.yml +3 -3
  413. data/lib/starter_web/_data/modules/scroller.yml +3 -3
  414. data/lib/starter_web/_data/modules/themer.yml +3 -3
  415. data/lib/starter_web/_data/modules/toccer.yml +3 -3
  416. data/lib/starter_web/_data/modules/translator.yml +3 -3
  417. data/lib/starter_web/_data/modules/waves.yml +3 -3
  418. data/lib/starter_web/_data/plugins/defaults/feed.yml +3 -3
  419. data/lib/starter_web/_data/plugins/defaults/paginator.yml +3 -3
  420. data/lib/starter_web/_data/plugins/defaults/seo-tags.yml +5 -5
  421. data/lib/starter_web/_data/plugins/defaults/sitemap.yml +7 -7
  422. data/lib/starter_web/_data/plugins/feed.yml +3 -3
  423. data/lib/starter_web/_data/plugins/paginator.yml +3 -3
  424. data/lib/starter_web/_data/plugins/seo-tags.yml +3 -3
  425. data/lib/starter_web/_data/plugins/sitemap.yml +3 -3
  426. data/lib/starter_web/_data/private.yml +2 -2
  427. data/lib/starter_web/_data/resources.yml +41 -19
  428. data/lib/starter_web/_data/templates/feed.xml +5 -5
  429. data/lib/starter_web/_data/templates/robots.txt +6 -6
  430. data/lib/starter_web/_data/templates/seo-tags.html +3 -3
  431. data/lib/starter_web/_data/templates/sitemap.xml +3 -3
  432. data/lib/starter_web/_data/utilities/defaults/util_srv.yml +3 -3
  433. data/lib/starter_web/_data/utilities/util_srv.yml +2 -2
  434. data/lib/starter_web/_includes/attributes.asciidoc +29 -18
  435. data/lib/starter_web/_includes/custom/static/bs5_accordion.html +3 -3
  436. data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +3 -3
  437. data/lib/starter_web/_plugins/asciidoctor/admonition-block-answer.rb +4 -4
  438. data/lib/starter_web/_plugins/asciidoctor/admonition-block-question.rb +4 -4
  439. data/lib/starter_web/_plugins/asciidoctor/banner.rb +3 -3
  440. data/lib/starter_web/_plugins/asciidoctor/callout.rb +3 -3
  441. data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +3 -3
  442. data/lib/starter_web/_plugins/asciidoctor/conum.rb +3 -3
  443. data/lib/starter_web/_plugins/asciidoctor/fab-icon-inline.rb +4 -4
  444. data/lib/starter_web/_plugins/asciidoctor/fas-icon-inline.rb +4 -4
  445. data/lib/starter_web/_plugins/asciidoctor/flag-icon-inline.rb +4 -4
  446. data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +3 -3
  447. data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +4 -4
  448. data/lib/starter_web/_plugins/asciidoctor/iconify-icon-inline.rb +4 -4
  449. data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +3 -3
  450. data/lib/starter_web/_plugins/asciidoctor/lorem_inline.rb +4 -4
  451. data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +3 -3
  452. data/lib/starter_web/_plugins/asciidoctor/mdi-icon-inline.rb +4 -4
  453. data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +33 -0
  454. data/lib/starter_web/_plugins/asciidoctor/panel.rb +3 -3
  455. data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +3 -3
  456. data/lib/starter_web/_plugins/asciidoctor/shout-block.rb +4 -4
  457. data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +3 -3
  458. data/lib/starter_web/_plugins/asciidoctor/twitter-emoji-inline.rb +4 -4
  459. data/lib/starter_web/_plugins/filter/debug.rb +3 -3
  460. data/lib/starter_web/_plugins/filter/encodeBase64.rb +4 -4
  461. data/lib/starter_web/_plugins/filter/encryptAES.rb +4 -4
  462. data/lib/starter_web/_plugins/filter/filters.rb +4 -4
  463. data/lib/starter_web/_plugins/filter/minifyJS.rb +5 -5
  464. data/lib/starter_web/_plugins/filter/minifyJSON.rb +4 -4
  465. data/lib/starter_web/_plugins/filter/prettify.rb +4 -4
  466. data/lib/starter_web/_plugins/filter/xml_prettify.rb +4 -4
  467. data/lib/starter_web/_plugins/helper/symlink_watcher.rb +3 -3
  468. data/lib/starter_web/_plugins/i18n/date.rb +3 -3
  469. data/lib/starter_web/_plugins/index/lunr.rb +12 -15
  470. data/lib/starter_web/_plugins/seo/j1-feed.rb +3 -3
  471. data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +6 -6
  472. data/lib/starter_web/_plugins/seo/j1-sitemap.rb +8 -8
  473. data/lib/starter_web/assets/images/badges/scaleable/configBinder.svg +1 -1
  474. data/lib/starter_web/assets/images/badges/scaleable/docsBinder.svg +1 -1
  475. data/lib/starter_web/assets/images/badges/scaleable/myBinder.svg +1 -1
  476. data/lib/starter_web/assets/images/blocks/waves/scalable/{1280x100/wave-4.svg → 1920x100/wave-5.svg} +12 -16
  477. data/lib/starter_web/assets/images/icons/hyvor-talk/scalable/hyvor-logo.svg +1 -1
  478. data/lib/starter_web/assets/images/icons/j1/scalable/j1.svg +1 -1
  479. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-1.jpg +0 -0
  480. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-2.jpg +0 -0
  481. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-3.jpg +0 -0
  482. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-theme-mockup-1.jpg +0 -0
  483. data/lib/starter_web/assets/images/modules/icons/algolia/search-by-algolia.png +0 -0
  484. data/lib/starter_web/assets/images/modules/icons/asciidoc/logo-512x512.png +0 -0
  485. data/lib/starter_web/assets/images/modules/icons/bootstrap/bootstrap-solid-32x32.png +0 -0
  486. data/lib/starter_web/assets/images/modules/icons/bootstrap/bs-docs-masthead-pattern.png +0 -0
  487. data/lib/starter_web/assets/images/modules/icons/bootstrap/scalable/bootstrap-outline.svg +20 -0
  488. data/lib/starter_web/assets/images/modules/icons/bootstrap/scalable/bootstrap-punchout.svg +18 -0
  489. data/lib/starter_web/assets/images/modules/icons/bootstrap/scalable/bootstrap-solid.svg +17 -0
  490. data/lib/starter_web/assets/images/modules/icons/components/angular.ui.png +0 -0
  491. data/lib/starter_web/assets/images/modules/icons/components/angularjs.png +0 -0
  492. data/lib/starter_web/assets/images/modules/icons/components/aws.png +0 -0
  493. data/lib/starter_web/assets/images/modules/icons/components/bootstrap.png +0 -0
  494. data/lib/starter_web/assets/images/modules/icons/components/c9.png +0 -0
  495. data/lib/starter_web/assets/images/modules/icons/components/chai.png +0 -0
  496. data/lib/starter_web/assets/images/modules/icons/components/emmet.png +0 -0
  497. data/lib/starter_web/assets/images/modules/icons/components/express.png +0 -0
  498. data/lib/starter_web/assets/images/modules/icons/components/git.png +0 -0
  499. data/lib/starter_web/assets/images/modules/icons/components/github.png +0 -0
  500. data/lib/starter_web/assets/images/modules/icons/components/gulp.png +0 -0
  501. data/lib/starter_web/assets/images/modules/icons/components/heroku.png +0 -0
  502. data/lib/starter_web/assets/images/modules/icons/components/htmlcss-1.png +0 -0
  503. data/lib/starter_web/assets/images/modules/icons/components/htmlcss-2.png +0 -0
  504. data/lib/starter_web/assets/images/modules/icons/components/jasmine.png +0 -0
  505. data/lib/starter_web/assets/images/modules/icons/components/javascript.png +0 -0
  506. data/lib/starter_web/assets/images/modules/icons/components/jquery.png +0 -0
  507. data/lib/starter_web/assets/images/modules/icons/components/kanban.png +0 -0
  508. data/lib/starter_web/assets/images/modules/icons/components/leanux.png +0 -0
  509. data/lib/starter_web/assets/images/modules/icons/components/linkedin.png +0 -0
  510. data/lib/starter_web/assets/images/modules/icons/components/mean.png +0 -0
  511. data/lib/starter_web/assets/images/modules/icons/components/mongodb.png +0 -0
  512. data/lib/starter_web/assets/images/modules/icons/components/node.png +0 -0
  513. data/lib/starter_web/assets/images/modules/icons/components/postgresql.png +0 -0
  514. data/lib/starter_web/assets/images/modules/icons/components/protractor.png +0 -0
  515. data/lib/starter_web/assets/images/modules/icons/components/rails.png +0 -0
  516. data/lib/starter_web/assets/images/modules/icons/components/ruby.png +0 -0
  517. data/lib/starter_web/assets/images/modules/icons/components/sass.png +0 -0
  518. data/lib/starter_web/assets/images/modules/icons/components/scrum.png +0 -0
  519. data/lib/starter_web/assets/images/modules/icons/components/twitter.png +0 -0
  520. data/lib/starter_web/assets/images/modules/icons/j1/favicon.ico +0 -0
  521. data/lib/starter_web/assets/images/modules/icons/j1/j1-256x256.png +0 -0
  522. data/lib/starter_web/assets/images/modules/icons/j1/j1-32x32.ico +0 -0
  523. data/lib/starter_web/assets/images/modules/icons/j1/j1-512x512.png +0 -0
  524. data/lib/starter_web/assets/images/modules/icons/j1/j1-64x64.png +0 -0
  525. data/lib/starter_web/assets/images/modules/icons/j1/j1.ico +0 -0
  526. data/lib/starter_web/assets/images/modules/icons/j1/scalable/j1.svg +2023 -0
  527. data/lib/starter_web/assets/images/modules/icons/netlify/nf-logo.png +0 -0
  528. data/lib/starter_web/assets/images/modules/icons/social/amazon.png +0 -0
  529. data/lib/starter_web/assets/images/modules/icons/social/behance.png +0 -0
  530. data/lib/starter_web/assets/images/modules/icons/social/blogger.png +0 -0
  531. data/lib/starter_web/assets/images/modules/icons/social/dribbble.png +0 -0
  532. data/lib/starter_web/assets/images/modules/icons/social/dropbox.png +0 -0
  533. data/lib/starter_web/assets/images/modules/icons/social/facebook.png +0 -0
  534. data/lib/starter_web/assets/images/modules/icons/social/forrst.png +0 -0
  535. data/lib/starter_web/assets/images/modules/icons/social/github.png +0 -0
  536. data/lib/starter_web/assets/images/modules/icons/social/googleplus.png +0 -0
  537. data/lib/starter_web/assets/images/modules/icons/social/instagram.png +0 -0
  538. data/lib/starter_web/assets/images/modules/icons/social/linkedin.png +0 -0
  539. data/lib/starter_web/assets/images/modules/icons/social/pintrest.png +0 -0
  540. data/lib/starter_web/assets/images/modules/icons/social/rss.png +0 -0
  541. data/lib/starter_web/assets/images/modules/icons/social/skype.png +0 -0
  542. data/lib/starter_web/assets/images/modules/icons/social/spotify.png +0 -0
  543. data/lib/starter_web/assets/images/modules/icons/social/twitter.png +0 -0
  544. data/lib/starter_web/assets/images/modules/icons/social/vimeo.png +0 -0
  545. data/lib/starter_web/assets/images/modules/icons/social/vk.png +0 -0
  546. data/lib/starter_web/assets/images/modules/icons/social/wordpress.png +0 -0
  547. data/lib/starter_web/assets/images/modules/icons/social/xing.png +0 -0
  548. data/lib/starter_web/assets/images/modules/icons/social/yahoo.png +0 -0
  549. data/lib/starter_web/assets/images/modules/icons/social/youtube.png +0 -0
  550. data/lib/starter_web/assets/images/pages/roundtrip/themes-menu-1280x800.jpg +0 -0
  551. data/lib/starter_web/assets/images/promo/jekyll/jekyll-faq.jpg +0 -0
  552. data/lib/starter_web/assets/images/promo/jekyll/jekyll-generator.jpg +0 -0
  553. data/lib/starter_web/assets/images/promo/jekyll/scalable/jekyll-faq.psd +0 -0
  554. data/lib/starter_web/collections/asciidoc_skeletons/simple-post/_posts/yyyy-mm-dd-your-post-name.asciidoc +2 -2
  555. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +1 -1
  556. data/lib/starter_web/collections/posts/public/featured/_posts/{2021-02-01-site-generators.adoc → 2021-02-01-static-site-generators.adoc} +12 -9
  557. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +9 -9
  558. data/lib/starter_web/config.ru +3 -3
  559. data/lib/starter_web/dot.gitattributes +4 -4
  560. data/lib/starter_web/dot.nojekyll +4 -4
  561. data/lib/starter_web/index.html +14 -11
  562. data/lib/starter_web/package.json +2 -2
  563. data/lib/starter_web/pages/public/about/features.adoc +18 -21
  564. data/lib/starter_web/pages/public/about/reporting_issues.adoc +20 -22
  565. data/lib/starter_web/pages/public/about/site.adoc +19 -12
  566. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +1 -0
  567. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +1 -0
  568. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +1 -0
  569. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/000_intro.asciidoc +1 -1
  570. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/a2p.bat +2 -2
  571. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/a2p.sh +2 -2
  572. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.a2p +4 -4
  573. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -1
  574. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +1 -1
  575. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +1 -1
  576. data/lib/starter_web/pages/public/blog/navigator/archive/allview.html +5 -4
  577. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +8 -1
  578. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +5 -4
  579. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +5 -4
  580. data/lib/starter_web/pages/public/blog/navigator/index.html +5 -4
  581. data/lib/starter_web/pages/public/features/general.adoc +12 -10
  582. data/lib/starter_web/pages/public/features/template.adoc +17 -14
  583. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +2 -1
  584. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_bootstrap.asciidoc +18 -17
  585. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_rouge.asciidoc +2 -2
  586. data/lib/starter_web/pages/public/learn/roundtrip/asciidoc_extensions.adoc +30 -28
  587. data/lib/starter_web/pages/public/learn/roundtrip/bootstrap_themes.adoc +23 -15
  588. data/lib/starter_web/pages/public/learn/roundtrip/icon_fonts.adoc +27 -24
  589. data/lib/starter_web/pages/public/learn/roundtrip/lunr_search.adoc +26 -20
  590. data/lib/starter_web/pages/public/learn/roundtrip/modal_extentions.adoc +21 -19
  591. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +66 -42
  592. data/lib/starter_web/pages/public/learn/roundtrip/present_videos.adoc +24 -75
  593. data/lib/starter_web/pages/public/learn/roundtrip/responsive_tables.adoc +20 -13
  594. data/lib/starter_web/pages/public/learn/roundtrip/{template_typography.adoc → typography.adoc} +18 -14
  595. data/lib/starter_web/pages/public/learn/where_to_go.adoc +37 -36
  596. data/lib/starter_web/pages/public/legal/de/100_copyright.adoc +16 -13
  597. data/lib/starter_web/pages/public/legal/de/100_impress.adoc +14 -15
  598. data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +17 -14
  599. data/lib/starter_web/pages/public/legal/de/400_comment_policy.adoc +16 -16
  600. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +18 -19
  601. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +25 -23
  602. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +14 -14
  603. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +11 -16
  604. data/lib/starter_web/pages/public/panels/intro_panel/_includes/attributes.asciidoc +1 -1
  605. data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +20 -20
  606. data/lib/starter_web/pages/public/plans/plans.adoc +2 -2
  607. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +30 -28
  608. data/lib/starter_web/utilsrv/_defaults/package.json +2 -2
  609. data/lib/starter_web/utilsrv/package.json +2 -2
  610. data/lib/starter_web/utilsrv/server.js +7 -7
  611. metadata +101 -39
  612. data/assets/data/top_search_modal.0.html +0 -142
  613. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-x-video.js +0 -372
  614. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-x-video.min.js +0 -7
  615. data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-1.svg +0 -63
  616. data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-2.svg +0 -60
  617. data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-3.svg +0 -64
  618. data/lib/starter_web/assets/images/modules/attics/1280x800/j1-template.png +0 -0
  619. data/lib/starter_web/assets/images/modules/attics/1280x800/jekyll-generator.png +0 -0
  620. data/lib/starter_web/assets/images/modules/attics/1280x800jekyll-generator.jpg +0 -0
  621. data/lib/starter_web/assets/images/modules/attics/1920x1280/_ben-kolde.jpg +0 -0
  622. data/lib/starter_web/assets/images/modules/attics/1920x1280/_ev.jpg +0 -0
  623. data/lib/starter_web/assets/images/modules/attics/1920x1280/_guillaume-bolduc.jpg +0 -0
  624. data/lib/starter_web/assets/images/modules/attics/1920x1280/_moritz-kindler.jpg +0 -0
  625. data/lib/starter_web/assets/images/modules/attics/_alexander-redl.jpg +0 -0
  626. data/lib/starter_web/assets/images/modules/attics/_alexander-shatov-1920x1280.jpg +0 -0
  627. data/lib/starter_web/assets/images/modules/attics/_annie-spratt-1920x1280.jpg +0 -0
  628. data/lib/starter_web/assets/images/modules/attics/_antonino-visalli-1920x1280.jpg +0 -0
  629. data/lib/starter_web/assets/images/modules/attics/_christa-dodoo-1920x1280.jpg +0 -0
  630. data/lib/starter_web/assets/images/modules/attics/_guillaume-bolduc-1920x1280.jpg +0 -0
  631. data/lib/starter_web/assets/images/modules/attics/_harpal-singh.jpg +0 -0
  632. data/lib/starter_web/assets/images/modules/attics/_humble-lamb-1920x1280.jpg +0 -0
  633. data/lib/starter_web/assets/images/modules/attics/_john-schnobrich-2-1920x1280.jpg +0 -0
  634. data/lib/starter_web/assets/images/modules/attics/_kirklai-1920x1280.jpg +0 -0
  635. data/lib/starter_web/assets/images/modules/attics/_romain-vignes-1920x1280.jpg +0 -0
  636. data/lib/starter_web/assets/images/modules/attics/_runner-1920x1200.jpg +0 -0
  637. data/lib/starter_web/assets/images/modules/attics/_spacex-1920x1280.jpg +0 -0
  638. data/lib/starter_web/assets/images/modules/attics/_vladislav-klapin-1920x1280.jpg +0 -0
  639. data/lib/starter_web/assets/images/modules/attics/_wrongtog-1920x1280.jpg +0 -0
  640. data/lib/starter_web/assets/images/pages/roundtrip/500_themes/themes-menu-1280x800.jpg +0 -0
  641. data/lib/starter_web/pages/public/learn/quickstart.adoc +0 -465
@@ -0,0 +1,1541 @@
1
+ /* -----------------------------------------------
2
+ /* Author : Vincent Garreau - vincentgarreau.com
3
+ /* MIT license: http://opensource.org/licenses/MIT
4
+ /* Demo / Generator : vincentgarreau.com/particles.js
5
+ /* GitHub : github.com/VincentGarreau/particles.js
6
+ /* How to use? : Check the GitHub README
7
+ /* v2.0.0
8
+ /* ----------------------------------------------- */
9
+
10
+ var pJS = function(tag_id, params){
11
+
12
+ var canvas_el = document.querySelector('#'+tag_id+' > .particles-js-canvas-el');
13
+
14
+ /* particles.js variables with default values */
15
+ this.pJS = {
16
+ canvas: {
17
+ el: canvas_el,
18
+ w: canvas_el.offsetWidth,
19
+ h: canvas_el.offsetHeight
20
+ },
21
+ particles: {
22
+ number: {
23
+ value: 400,
24
+ density: {
25
+ enable: true,
26
+ value_area: 800
27
+ }
28
+ },
29
+ color: {
30
+ value: '#fff'
31
+ },
32
+ shape: {
33
+ type: 'circle',
34
+ stroke: {
35
+ width: 0,
36
+ color: '#ff0000'
37
+ },
38
+ polygon: {
39
+ nb_sides: 5
40
+ },
41
+ image: {
42
+ src: '',
43
+ width: 100,
44
+ height: 100
45
+ }
46
+ },
47
+ opacity: {
48
+ value: 1,
49
+ random: false,
50
+ anim: {
51
+ enable: false,
52
+ speed: 2,
53
+ opacity_min: 0,
54
+ sync: false
55
+ }
56
+ },
57
+ size: {
58
+ value: 20,
59
+ random: false,
60
+ anim: {
61
+ enable: false,
62
+ speed: 20,
63
+ size_min: 0,
64
+ sync: false
65
+ }
66
+ },
67
+ line_linked: {
68
+ enable: true,
69
+ distance: 100,
70
+ color: '#fff',
71
+ opacity: 1,
72
+ width: 1
73
+ },
74
+ move: {
75
+ enable: true,
76
+ speed: 2,
77
+ direction: 'none',
78
+ random: false,
79
+ straight: false,
80
+ out_mode: 'out',
81
+ bounce: false,
82
+ attract: {
83
+ enable: false,
84
+ rotateX: 3000,
85
+ rotateY: 3000
86
+ }
87
+ },
88
+ array: []
89
+ },
90
+ interactivity: {
91
+ detect_on: 'canvas',
92
+ events: {
93
+ onhover: {
94
+ enable: true,
95
+ mode: 'grab'
96
+ },
97
+ onclick: {
98
+ enable: true,
99
+ mode: 'push'
100
+ },
101
+ resize: true
102
+ },
103
+ modes: {
104
+ grab:{
105
+ distance: 100,
106
+ line_linked:{
107
+ opacity: 1
108
+ }
109
+ },
110
+ bubble:{
111
+ distance: 200,
112
+ size: 80,
113
+ duration: 0.4
114
+ },
115
+ repulse:{
116
+ distance: 200,
117
+ duration: 0.4
118
+ },
119
+ push:{
120
+ particles_nb: 4
121
+ },
122
+ remove:{
123
+ particles_nb: 2
124
+ }
125
+ },
126
+ mouse:{}
127
+ },
128
+ retina_detect: false,
129
+ fn: {
130
+ interact: {},
131
+ modes: {},
132
+ vendors:{}
133
+ },
134
+ tmp: {}
135
+ };
136
+
137
+ var pJS = this.pJS;
138
+
139
+ /* params settings */
140
+ if(params){
141
+ Object.deepExtend(pJS, params);
142
+ }
143
+
144
+ pJS.tmp.obj = {
145
+ size_value: pJS.particles.size.value,
146
+ size_anim_speed: pJS.particles.size.anim.speed,
147
+ move_speed: pJS.particles.move.speed,
148
+ line_linked_distance: pJS.particles.line_linked.distance,
149
+ line_linked_width: pJS.particles.line_linked.width,
150
+ mode_grab_distance: pJS.interactivity.modes.grab.distance,
151
+ mode_bubble_distance: pJS.interactivity.modes.bubble.distance,
152
+ mode_bubble_size: pJS.interactivity.modes.bubble.size,
153
+ mode_repulse_distance: pJS.interactivity.modes.repulse.distance
154
+ };
155
+
156
+
157
+ pJS.fn.retinaInit = function(){
158
+
159
+ if(pJS.retina_detect && window.devicePixelRatio > 1){
160
+ pJS.canvas.pxratio = window.devicePixelRatio;
161
+ pJS.tmp.retina = true;
162
+ }
163
+ else{
164
+ pJS.canvas.pxratio = 1;
165
+ pJS.tmp.retina = false;
166
+ }
167
+
168
+ pJS.canvas.w = pJS.canvas.el.offsetWidth * pJS.canvas.pxratio;
169
+ pJS.canvas.h = pJS.canvas.el.offsetHeight * pJS.canvas.pxratio;
170
+
171
+ pJS.particles.size.value = pJS.tmp.obj.size_value * pJS.canvas.pxratio;
172
+ pJS.particles.size.anim.speed = pJS.tmp.obj.size_anim_speed * pJS.canvas.pxratio;
173
+ pJS.particles.move.speed = pJS.tmp.obj.move_speed * pJS.canvas.pxratio;
174
+ pJS.particles.line_linked.distance = pJS.tmp.obj.line_linked_distance * pJS.canvas.pxratio;
175
+ pJS.interactivity.modes.grab.distance = pJS.tmp.obj.mode_grab_distance * pJS.canvas.pxratio;
176
+ pJS.interactivity.modes.bubble.distance = pJS.tmp.obj.mode_bubble_distance * pJS.canvas.pxratio;
177
+ pJS.particles.line_linked.width = pJS.tmp.obj.line_linked_width * pJS.canvas.pxratio;
178
+ pJS.interactivity.modes.bubble.size = pJS.tmp.obj.mode_bubble_size * pJS.canvas.pxratio;
179
+ pJS.interactivity.modes.repulse.distance = pJS.tmp.obj.mode_repulse_distance * pJS.canvas.pxratio;
180
+
181
+ };
182
+
183
+
184
+
185
+ /* ---------- pJS functions - canvas ------------ */
186
+
187
+ pJS.fn.canvasInit = function(){
188
+ pJS.canvas.ctx = pJS.canvas.el.getContext('2d');
189
+ };
190
+
191
+ pJS.fn.canvasSize = function(){
192
+
193
+ pJS.canvas.el.width = pJS.canvas.w;
194
+ pJS.canvas.el.height = pJS.canvas.h;
195
+
196
+ if(pJS && pJS.interactivity.events.resize){
197
+
198
+ window.addEventListener('resize', function(){
199
+
200
+ pJS.canvas.w = pJS.canvas.el.offsetWidth;
201
+ pJS.canvas.h = pJS.canvas.el.offsetHeight;
202
+
203
+ /* resize canvas */
204
+ if(pJS.tmp.retina){
205
+ pJS.canvas.w *= pJS.canvas.pxratio;
206
+ pJS.canvas.h *= pJS.canvas.pxratio;
207
+ }
208
+
209
+ pJS.canvas.el.width = pJS.canvas.w;
210
+ pJS.canvas.el.height = pJS.canvas.h;
211
+
212
+ /* repaint canvas on anim disabled */
213
+ if(!pJS.particles.move.enable){
214
+ pJS.fn.particlesEmpty();
215
+ pJS.fn.particlesCreate();
216
+ pJS.fn.particlesDraw();
217
+ pJS.fn.vendors.densityAutoParticles();
218
+ }
219
+
220
+ /* density particles enabled */
221
+ pJS.fn.vendors.densityAutoParticles();
222
+
223
+ });
224
+
225
+ }
226
+
227
+ };
228
+
229
+
230
+ pJS.fn.canvasPaint = function(){
231
+ pJS.canvas.ctx.fillRect(0, 0, pJS.canvas.w, pJS.canvas.h);
232
+ };
233
+
234
+ pJS.fn.canvasClear = function(){
235
+ pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);
236
+ };
237
+
238
+
239
+ /* --------- pJS functions - particles ----------- */
240
+
241
+ pJS.fn.particle = function(color, opacity, position){
242
+
243
+ /* size */
244
+ this.radius = (pJS.particles.size.random ? Math.random() : 1) * pJS.particles.size.value;
245
+ if(pJS.particles.size.anim.enable){
246
+ this.size_status = false;
247
+ this.vs = pJS.particles.size.anim.speed / 100;
248
+ if(!pJS.particles.size.anim.sync){
249
+ this.vs = this.vs * Math.random();
250
+ }
251
+ }
252
+
253
+ /* position */
254
+ this.x = position ? position.x : Math.random() * pJS.canvas.w;
255
+ this.y = position ? position.y : Math.random() * pJS.canvas.h;
256
+
257
+ /* check position - into the canvas */
258
+ if(this.x > pJS.canvas.w - this.radius*2) this.x = this.x - this.radius;
259
+ else if(this.x < this.radius*2) this.x = this.x + this.radius;
260
+ if(this.y > pJS.canvas.h - this.radius*2) this.y = this.y - this.radius;
261
+ else if(this.y < this.radius*2) this.y = this.y + this.radius;
262
+
263
+ /* check position - avoid overlap */
264
+ if(pJS.particles.move.bounce){
265
+ pJS.fn.vendors.checkOverlap(this, position);
266
+ }
267
+
268
+ /* color */
269
+ this.color = {};
270
+ if(typeof(color.value) == 'object'){
271
+
272
+ if(color.value instanceof Array){
273
+ var color_selected = color.value[Math.floor(Math.random() * pJS.particles.color.value.length)];
274
+ this.color.rgb = hexToRgb(color_selected);
275
+ }else{
276
+ if(color.value.r != undefined && color.value.g != undefined && color.value.b != undefined){
277
+ this.color.rgb = {
278
+ r: color.value.r,
279
+ g: color.value.g,
280
+ b: color.value.b
281
+ }
282
+ }
283
+ if(color.value.h != undefined && color.value.s != undefined && color.value.l != undefined){
284
+ this.color.hsl = {
285
+ h: color.value.h,
286
+ s: color.value.s,
287
+ l: color.value.l
288
+ }
289
+ }
290
+ }
291
+
292
+ }
293
+ else if(color.value == 'random'){
294
+ this.color.rgb = {
295
+ r: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
296
+ g: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
297
+ b: (Math.floor(Math.random() * (255 - 0 + 1)) + 0)
298
+ }
299
+ }
300
+ else if(typeof(color.value) == 'string'){
301
+ this.color = color;
302
+ this.color.rgb = hexToRgb(this.color.value);
303
+ }
304
+
305
+ /* opacity */
306
+ this.opacity = (pJS.particles.opacity.random ? Math.random() : 1) * pJS.particles.opacity.value;
307
+ if(pJS.particles.opacity.anim.enable){
308
+ this.opacity_status = false;
309
+ this.vo = pJS.particles.opacity.anim.speed / 100;
310
+ if(!pJS.particles.opacity.anim.sync){
311
+ this.vo = this.vo * Math.random();
312
+ }
313
+ }
314
+
315
+ /* animation - velocity for speed */
316
+ var velbase = {}
317
+ switch(pJS.particles.move.direction){
318
+ case 'top':
319
+ velbase = { x:0, y:-1 };
320
+ break;
321
+ case 'top-right':
322
+ velbase = { x:0.5, y:-0.5 };
323
+ break;
324
+ case 'right':
325
+ velbase = { x:1, y:-0 };
326
+ break;
327
+ case 'bottom-right':
328
+ velbase = { x:0.5, y:0.5 };
329
+ break;
330
+ case 'bottom':
331
+ velbase = { x:0, y:1 };
332
+ break;
333
+ case 'bottom-left':
334
+ velbase = { x:-0.5, y:1 };
335
+ break;
336
+ case 'left':
337
+ velbase = { x:-1, y:0 };
338
+ break;
339
+ case 'top-left':
340
+ velbase = { x:-0.5, y:-0.5 };
341
+ break;
342
+ default:
343
+ velbase = { x:0, y:0 };
344
+ break;
345
+ }
346
+
347
+ if(pJS.particles.move.straight){
348
+ this.vx = velbase.x;
349
+ this.vy = velbase.y;
350
+ if(pJS.particles.move.random){
351
+ this.vx = this.vx * (Math.random());
352
+ this.vy = this.vy * (Math.random());
353
+ }
354
+ }else{
355
+ this.vx = velbase.x + Math.random()-0.5;
356
+ this.vy = velbase.y + Math.random()-0.5;
357
+ }
358
+
359
+ // var theta = 2.0 * Math.PI * Math.random();
360
+ // this.vx = Math.cos(theta);
361
+ // this.vy = Math.sin(theta);
362
+
363
+ this.vx_i = this.vx;
364
+ this.vy_i = this.vy;
365
+
366
+
367
+
368
+ /* if shape is image */
369
+
370
+ var shape_type = pJS.particles.shape.type;
371
+ if(typeof(shape_type) == 'object'){
372
+ if(shape_type instanceof Array){
373
+ var shape_selected = shape_type[Math.floor(Math.random() * shape_type.length)];
374
+ this.shape = shape_selected;
375
+ }
376
+ }else{
377
+ this.shape = shape_type;
378
+ }
379
+
380
+ if(this.shape == 'image'){
381
+ var sh = pJS.particles.shape;
382
+ this.img = {
383
+ src: sh.image.src,
384
+ ratio: sh.image.width / sh.image.height
385
+ }
386
+ if(!this.img.ratio) this.img.ratio = 1;
387
+ if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg != undefined){
388
+ pJS.fn.vendors.createSvgImg(this);
389
+ if(pJS.tmp.pushing){
390
+ this.img.loaded = false;
391
+ }
392
+ }
393
+ }
394
+
395
+
396
+
397
+ };
398
+
399
+
400
+ pJS.fn.particle.prototype.draw = function() {
401
+
402
+ var p = this;
403
+
404
+ if(p.radius_bubble != undefined){
405
+ var radius = p.radius_bubble;
406
+ }else{
407
+ var radius = p.radius;
408
+ }
409
+
410
+ if(p.opacity_bubble != undefined){
411
+ var opacity = p.opacity_bubble;
412
+ }else{
413
+ var opacity = p.opacity;
414
+ }
415
+
416
+ if(p.color.rgb){
417
+ var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+opacity+')';
418
+ }else{
419
+ var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+opacity+')';
420
+ }
421
+
422
+ pJS.canvas.ctx.fillStyle = color_value;
423
+ pJS.canvas.ctx.beginPath();
424
+
425
+ switch(p.shape){
426
+
427
+ case 'circle':
428
+ pJS.canvas.ctx.arc(p.x, p.y, radius, 0, Math.PI * 2, false);
429
+ break;
430
+
431
+ case 'edge':
432
+ pJS.canvas.ctx.rect(p.x-radius, p.y-radius, radius*2, radius*2);
433
+ break;
434
+
435
+ case 'triangle':
436
+ pJS.fn.vendors.drawShape(pJS.canvas.ctx, p.x-radius, p.y+radius / 1.66, radius*2, 3, 2);
437
+ break;
438
+
439
+ case 'polygon':
440
+ pJS.fn.vendors.drawShape(
441
+ pJS.canvas.ctx,
442
+ p.x - radius / (pJS.particles.shape.polygon.nb_sides/3.5), // startX
443
+ p.y - radius / (2.66/3.5), // startY
444
+ radius*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength
445
+ pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
446
+ 1 // sideCountDenominator
447
+ );
448
+ break;
449
+
450
+ case 'star':
451
+ pJS.fn.vendors.drawShape(
452
+ pJS.canvas.ctx,
453
+ p.x - radius*2 / (pJS.particles.shape.polygon.nb_sides/4), // startX
454
+ p.y - radius / (2*2.66/3.5), // startY
455
+ radius*2*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength
456
+ pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
457
+ 2 // sideCountDenominator
458
+ );
459
+ break;
460
+
461
+ case 'image':
462
+
463
+ function draw(){
464
+ pJS.canvas.ctx.drawImage(
465
+ img_obj,
466
+ p.x-radius,
467
+ p.y-radius,
468
+ radius*2,
469
+ radius*2 / p.img.ratio
470
+ );
471
+ }
472
+
473
+ if(pJS.tmp.img_type == 'svg'){
474
+ var img_obj = p.img.obj;
475
+ }else{
476
+ var img_obj = pJS.tmp.img_obj;
477
+ }
478
+
479
+ if(img_obj){
480
+ draw();
481
+ }
482
+
483
+ break;
484
+
485
+ }
486
+
487
+ pJS.canvas.ctx.closePath();
488
+
489
+ if(pJS.particles.shape.stroke.width > 0){
490
+ pJS.canvas.ctx.strokeStyle = pJS.particles.shape.stroke.color;
491
+ pJS.canvas.ctx.lineWidth = pJS.particles.shape.stroke.width;
492
+ pJS.canvas.ctx.stroke();
493
+ }
494
+
495
+ pJS.canvas.ctx.fill();
496
+
497
+ };
498
+
499
+
500
+ pJS.fn.particlesCreate = function(){
501
+ for(var i = 0; i < pJS.particles.number.value; i++) {
502
+ pJS.particles.array.push(new pJS.fn.particle(pJS.particles.color, pJS.particles.opacity.value));
503
+ }
504
+ };
505
+
506
+ pJS.fn.particlesUpdate = function(){
507
+
508
+ for(var i = 0; i < pJS.particles.array.length; i++){
509
+
510
+ /* the particle */
511
+ var p = pJS.particles.array[i];
512
+
513
+ // var d = ( dx = pJS.interactivity.mouse.click_pos_x - p.x ) * dx + ( dy = pJS.interactivity.mouse.click_pos_y - p.y ) * dy;
514
+ // var f = -BANG_SIZE / d;
515
+ // if ( d < BANG_SIZE ) {
516
+ // var t = Math.atan2( dy, dx );
517
+ // p.vx = f * Math.cos(t);
518
+ // p.vy = f * Math.sin(t);
519
+ // }
520
+
521
+ /* move the particle */
522
+ if(pJS.particles.move.enable){
523
+ var ms = pJS.particles.move.speed/2;
524
+ p.x += p.vx * ms;
525
+ p.y += p.vy * ms;
526
+ }
527
+
528
+ /* change opacity status */
529
+ if(pJS.particles.opacity.anim.enable) {
530
+ if(p.opacity_status == true) {
531
+ if(p.opacity >= pJS.particles.opacity.value) p.opacity_status = false;
532
+ p.opacity += p.vo;
533
+ }else {
534
+ if(p.opacity <= pJS.particles.opacity.anim.opacity_min) p.opacity_status = true;
535
+ p.opacity -= p.vo;
536
+ }
537
+ if(p.opacity < 0) p.opacity = 0;
538
+ }
539
+
540
+ /* change size */
541
+ if(pJS.particles.size.anim.enable){
542
+ if(p.size_status == true){
543
+ if(p.radius >= pJS.particles.size.value) p.size_status = false;
544
+ p.radius += p.vs;
545
+ }else{
546
+ if(p.radius <= pJS.particles.size.anim.size_min) p.size_status = true;
547
+ p.radius -= p.vs;
548
+ }
549
+ if(p.radius < 0) p.radius = 0;
550
+ }
551
+
552
+ /* change particle position if it is out of canvas */
553
+ if(pJS.particles.move.out_mode == 'bounce'){
554
+ var new_pos = {
555
+ x_left: p.radius,
556
+ x_right: pJS.canvas.w,
557
+ y_top: p.radius,
558
+ y_bottom: pJS.canvas.h
559
+ }
560
+ }else{
561
+ var new_pos = {
562
+ x_left: -p.radius,
563
+ x_right: pJS.canvas.w + p.radius,
564
+ y_top: -p.radius,
565
+ y_bottom: pJS.canvas.h + p.radius
566
+ }
567
+ }
568
+
569
+ if(p.x - p.radius > pJS.canvas.w){
570
+ p.x = new_pos.x_left;
571
+ p.y = Math.random() * pJS.canvas.h;
572
+ }
573
+ else if(p.x + p.radius < 0){
574
+ p.x = new_pos.x_right;
575
+ p.y = Math.random() * pJS.canvas.h;
576
+ }
577
+ if(p.y - p.radius > pJS.canvas.h){
578
+ p.y = new_pos.y_top;
579
+ p.x = Math.random() * pJS.canvas.w;
580
+ }
581
+ else if(p.y + p.radius < 0){
582
+ p.y = new_pos.y_bottom;
583
+ p.x = Math.random() * pJS.canvas.w;
584
+ }
585
+
586
+ /* out of canvas modes */
587
+ switch(pJS.particles.move.out_mode){
588
+ case 'bounce':
589
+ if (p.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
590
+ else if (p.x - p.radius < 0) p.vx = -p.vx;
591
+ if (p.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
592
+ else if (p.y - p.radius < 0) p.vy = -p.vy;
593
+ break;
594
+ }
595
+
596
+ /* events */
597
+ if(isInArray('grab', pJS.interactivity.events.onhover.mode)){
598
+ pJS.fn.modes.grabParticle(p);
599
+ }
600
+
601
+ if(isInArray('bubble', pJS.interactivity.events.onhover.mode) || isInArray('bubble', pJS.interactivity.events.onclick.mode)){
602
+ pJS.fn.modes.bubbleParticle(p);
603
+ }
604
+
605
+ if(isInArray('repulse', pJS.interactivity.events.onhover.mode) || isInArray('repulse', pJS.interactivity.events.onclick.mode)){
606
+ pJS.fn.modes.repulseParticle(p);
607
+ }
608
+
609
+ /* interaction auto between particles */
610
+ if(pJS.particles.line_linked.enable || pJS.particles.move.attract.enable){
611
+ for(var j = i + 1; j < pJS.particles.array.length; j++){
612
+ var p2 = pJS.particles.array[j];
613
+
614
+ /* link particles */
615
+ if(pJS.particles.line_linked.enable){
616
+ pJS.fn.interact.linkParticles(p,p2);
617
+ }
618
+
619
+ /* attract particles */
620
+ if(pJS.particles.move.attract.enable){
621
+ pJS.fn.interact.attractParticles(p,p2);
622
+ }
623
+
624
+ /* bounce particles */
625
+ if(pJS.particles.move.bounce){
626
+ pJS.fn.interact.bounceParticles(p,p2);
627
+ }
628
+
629
+ }
630
+ }
631
+
632
+
633
+ }
634
+
635
+ };
636
+
637
+ pJS.fn.particlesDraw = function(){
638
+
639
+ /* clear canvas */
640
+ pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);
641
+
642
+ /* update each particles param */
643
+ pJS.fn.particlesUpdate();
644
+
645
+ /* draw each particle */
646
+ for(var i = 0; i < pJS.particles.array.length; i++){
647
+ var p = pJS.particles.array[i];
648
+ p.draw();
649
+ }
650
+
651
+ };
652
+
653
+ pJS.fn.particlesEmpty = function(){
654
+ pJS.particles.array = [];
655
+ };
656
+
657
+ pJS.fn.particlesRefresh = function(){
658
+
659
+ /* init all */
660
+ cancelRequestAnimFrame(pJS.fn.checkAnimFrame);
661
+ cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
662
+ pJS.tmp.source_svg = undefined;
663
+ pJS.tmp.img_obj = undefined;
664
+ pJS.tmp.count_svg = 0;
665
+ pJS.fn.particlesEmpty();
666
+ pJS.fn.canvasClear();
667
+
668
+ /* restart */
669
+ pJS.fn.vendors.start();
670
+
671
+ };
672
+
673
+
674
+ /* ---------- pJS functions - particles interaction ------------ */
675
+
676
+ pJS.fn.interact.linkParticles = function(p1, p2){
677
+
678
+ var dx = p1.x - p2.x,
679
+ dy = p1.y - p2.y,
680
+ dist = Math.sqrt(dx*dx + dy*dy);
681
+
682
+ /* draw a line between p1 and p2 if the distance between them is under the config distance */
683
+ if(dist <= pJS.particles.line_linked.distance){
684
+
685
+ var opacity_line = pJS.particles.line_linked.opacity - (dist / (1/pJS.particles.line_linked.opacity)) / pJS.particles.line_linked.distance;
686
+
687
+ if(opacity_line > 0){
688
+
689
+ /* style */
690
+ var color_line = pJS.particles.line_linked.color_rgb_line;
691
+ pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';
692
+ pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
693
+ //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */
694
+
695
+ /* path */
696
+ pJS.canvas.ctx.beginPath();
697
+ pJS.canvas.ctx.moveTo(p1.x, p1.y);
698
+ pJS.canvas.ctx.lineTo(p2.x, p2.y);
699
+ pJS.canvas.ctx.stroke();
700
+ pJS.canvas.ctx.closePath();
701
+
702
+ }
703
+
704
+ }
705
+
706
+ };
707
+
708
+
709
+ pJS.fn.interact.attractParticles = function(p1, p2){
710
+
711
+ /* condensed particles */
712
+ var dx = p1.x - p2.x,
713
+ dy = p1.y - p2.y,
714
+ dist = Math.sqrt(dx*dx + dy*dy);
715
+
716
+ if(dist <= pJS.particles.line_linked.distance){
717
+
718
+ var ax = dx/(pJS.particles.move.attract.rotateX*1000),
719
+ ay = dy/(pJS.particles.move.attract.rotateY*1000);
720
+
721
+ p1.vx -= ax;
722
+ p1.vy -= ay;
723
+
724
+ p2.vx += ax;
725
+ p2.vy += ay;
726
+
727
+ }
728
+
729
+
730
+ }
731
+
732
+
733
+ pJS.fn.interact.bounceParticles = function(p1, p2){
734
+
735
+ var dx = p1.x - p2.x,
736
+ dy = p1.y - p2.y,
737
+ dist = Math.sqrt(dx*dx + dy*dy),
738
+ dist_p = p1.radius+p2.radius;
739
+
740
+ if(dist <= dist_p){
741
+ p1.vx = -p1.vx;
742
+ p1.vy = -p1.vy;
743
+
744
+ p2.vx = -p2.vx;
745
+ p2.vy = -p2.vy;
746
+ }
747
+
748
+ }
749
+
750
+
751
+ /* ---------- pJS functions - modes events ------------ */
752
+
753
+ pJS.fn.modes.pushParticles = function(nb, pos){
754
+
755
+ pJS.tmp.pushing = true;
756
+
757
+ for(var i = 0; i < nb; i++){
758
+ pJS.particles.array.push(
759
+ new pJS.fn.particle(
760
+ pJS.particles.color,
761
+ pJS.particles.opacity.value,
762
+ {
763
+ 'x': pos ? pos.pos_x : Math.random() * pJS.canvas.w,
764
+ 'y': pos ? pos.pos_y : Math.random() * pJS.canvas.h
765
+ }
766
+ )
767
+ )
768
+ if(i == nb-1){
769
+ if(!pJS.particles.move.enable){
770
+ pJS.fn.particlesDraw();
771
+ }
772
+ pJS.tmp.pushing = false;
773
+ }
774
+ }
775
+
776
+ };
777
+
778
+
779
+ pJS.fn.modes.removeParticles = function(nb){
780
+
781
+ pJS.particles.array.splice(0, nb);
782
+ if(!pJS.particles.move.enable){
783
+ pJS.fn.particlesDraw();
784
+ }
785
+
786
+ };
787
+
788
+
789
+ pJS.fn.modes.bubbleParticle = function(p){
790
+
791
+ /* on hover event */
792
+ if(pJS.interactivity.events.onhover.enable && isInArray('bubble', pJS.interactivity.events.onhover.mode)){
793
+
794
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
795
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
796
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),
797
+ ratio = 1 - dist_mouse / pJS.interactivity.modes.bubble.distance;
798
+
799
+ function init(){
800
+ p.opacity_bubble = p.opacity;
801
+ p.radius_bubble = p.radius;
802
+ }
803
+
804
+ /* mousemove - check ratio */
805
+ if(dist_mouse <= pJS.interactivity.modes.bubble.distance){
806
+
807
+ if(ratio >= 0 && pJS.interactivity.status == 'mousemove'){
808
+
809
+ /* size */
810
+ if(pJS.interactivity.modes.bubble.size != pJS.particles.size.value){
811
+
812
+ if(pJS.interactivity.modes.bubble.size > pJS.particles.size.value){
813
+ var size = p.radius + (pJS.interactivity.modes.bubble.size*ratio);
814
+ if(size >= 0){
815
+ p.radius_bubble = size;
816
+ }
817
+ }else{
818
+ var dif = p.radius - pJS.interactivity.modes.bubble.size,
819
+ size = p.radius - (dif*ratio);
820
+ if(size > 0){
821
+ p.radius_bubble = size;
822
+ }else{
823
+ p.radius_bubble = 0;
824
+ }
825
+ }
826
+
827
+ }
828
+
829
+ /* opacity */
830
+ if(pJS.interactivity.modes.bubble.opacity != pJS.particles.opacity.value){
831
+
832
+ if(pJS.interactivity.modes.bubble.opacity > pJS.particles.opacity.value){
833
+ var opacity = pJS.interactivity.modes.bubble.opacity*ratio;
834
+ if(opacity > p.opacity && opacity <= pJS.interactivity.modes.bubble.opacity){
835
+ p.opacity_bubble = opacity;
836
+ }
837
+ }else{
838
+ var opacity = p.opacity - (pJS.particles.opacity.value-pJS.interactivity.modes.bubble.opacity)*ratio;
839
+ if(opacity < p.opacity && opacity >= pJS.interactivity.modes.bubble.opacity){
840
+ p.opacity_bubble = opacity;
841
+ }
842
+ }
843
+
844
+ }
845
+
846
+ }
847
+
848
+ }else{
849
+ init();
850
+ }
851
+
852
+
853
+ /* mouseleave */
854
+ if(pJS.interactivity.status == 'mouseleave'){
855
+ init();
856
+ }
857
+
858
+ }
859
+
860
+ /* on click event */
861
+ else if(pJS.interactivity.events.onclick.enable && isInArray('bubble', pJS.interactivity.events.onclick.mode)){
862
+
863
+
864
+ if(pJS.tmp.bubble_clicking){
865
+ var dx_mouse = p.x - pJS.interactivity.mouse.click_pos_x,
866
+ dy_mouse = p.y - pJS.interactivity.mouse.click_pos_y,
867
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),
868
+ time_spent = (new Date().getTime() - pJS.interactivity.mouse.click_time)/1000;
869
+
870
+ if(time_spent > pJS.interactivity.modes.bubble.duration){
871
+ pJS.tmp.bubble_duration_end = true;
872
+ }
873
+
874
+ if(time_spent > pJS.interactivity.modes.bubble.duration*2){
875
+ pJS.tmp.bubble_clicking = false;
876
+ pJS.tmp.bubble_duration_end = false;
877
+ }
878
+ }
879
+
880
+
881
+ function process(bubble_param, particles_param, p_obj_bubble, p_obj, id){
882
+
883
+ if(bubble_param != particles_param){
884
+
885
+ if(!pJS.tmp.bubble_duration_end){
886
+ if(dist_mouse <= pJS.interactivity.modes.bubble.distance){
887
+ if(p_obj_bubble != undefined) var obj = p_obj_bubble;
888
+ else var obj = p_obj;
889
+ if(obj != bubble_param){
890
+ var value = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration);
891
+ if(id == 'size') p.radius_bubble = value;
892
+ if(id == 'opacity') p.opacity_bubble = value;
893
+ }
894
+ }else{
895
+ if(id == 'size') p.radius_bubble = undefined;
896
+ if(id == 'opacity') p.opacity_bubble = undefined;
897
+ }
898
+ }else{
899
+ if(p_obj_bubble != undefined){
900
+ var value_tmp = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration),
901
+ dif = bubble_param - value_tmp;
902
+ value = bubble_param + dif;
903
+ if(id == 'size') p.radius_bubble = value;
904
+ if(id == 'opacity') p.opacity_bubble = value;
905
+ }
906
+ }
907
+
908
+ }
909
+
910
+ }
911
+
912
+ if(pJS.tmp.bubble_clicking){
913
+ /* size */
914
+ process(pJS.interactivity.modes.bubble.size, pJS.particles.size.value, p.radius_bubble, p.radius, 'size');
915
+ /* opacity */
916
+ process(pJS.interactivity.modes.bubble.opacity, pJS.particles.opacity.value, p.opacity_bubble, p.opacity, 'opacity');
917
+ }
918
+
919
+ }
920
+
921
+ };
922
+
923
+
924
+ pJS.fn.modes.repulseParticle = function(p){
925
+
926
+ if(pJS.interactivity.events.onhover.enable && isInArray('repulse', pJS.interactivity.events.onhover.mode) && pJS.interactivity.status == 'mousemove') {
927
+
928
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
929
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
930
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);
931
+
932
+ var normVec = {x: dx_mouse/dist_mouse, y: dy_mouse/dist_mouse},
933
+ repulseRadius = pJS.interactivity.modes.repulse.distance,
934
+ velocity = 100,
935
+ repulseFactor = clamp((1/repulseRadius)*(-1*Math.pow(dist_mouse/repulseRadius,2)+1)*repulseRadius*velocity, 0, 50);
936
+
937
+ var pos = {
938
+ x: p.x + normVec.x * repulseFactor,
939
+ y: p.y + normVec.y * repulseFactor
940
+ }
941
+
942
+ if(pJS.particles.move.out_mode == 'bounce'){
943
+ if(pos.x - p.radius > 0 && pos.x + p.radius < pJS.canvas.w) p.x = pos.x;
944
+ if(pos.y - p.radius > 0 && pos.y + p.radius < pJS.canvas.h) p.y = pos.y;
945
+ }else{
946
+ p.x = pos.x;
947
+ p.y = pos.y;
948
+ }
949
+
950
+ }
951
+
952
+
953
+ else if(pJS.interactivity.events.onclick.enable && isInArray('repulse', pJS.interactivity.events.onclick.mode)) {
954
+
955
+ if(!pJS.tmp.repulse_finish){
956
+ pJS.tmp.repulse_count++;
957
+ if(pJS.tmp.repulse_count == pJS.particles.array.length){
958
+ pJS.tmp.repulse_finish = true;
959
+ }
960
+ }
961
+
962
+ if(pJS.tmp.repulse_clicking){
963
+
964
+ var repulseRadius = Math.pow(pJS.interactivity.modes.repulse.distance/6, 3);
965
+
966
+ var dx = pJS.interactivity.mouse.click_pos_x - p.x,
967
+ dy = pJS.interactivity.mouse.click_pos_y - p.y,
968
+ d = dx*dx + dy*dy;
969
+
970
+ var force = -repulseRadius / d * 1;
971
+
972
+ function process(){
973
+
974
+ var f = Math.atan2(dy,dx);
975
+ p.vx = force * Math.cos(f);
976
+ p.vy = force * Math.sin(f);
977
+
978
+ if(pJS.particles.move.out_mode == 'bounce'){
979
+ var pos = {
980
+ x: p.x + p.vx,
981
+ y: p.y + p.vy
982
+ }
983
+ if (pos.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
984
+ else if (pos.x - p.radius < 0) p.vx = -p.vx;
985
+ if (pos.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
986
+ else if (pos.y - p.radius < 0) p.vy = -p.vy;
987
+ }
988
+
989
+ }
990
+
991
+ // default
992
+ if(d <= repulseRadius){
993
+ process();
994
+ }
995
+
996
+ // bang - slow motion mode
997
+ // if(!pJS.tmp.repulse_finish){
998
+ // if(d <= repulseRadius){
999
+ // process();
1000
+ // }
1001
+ // }else{
1002
+ // process();
1003
+ // }
1004
+
1005
+
1006
+ }else{
1007
+
1008
+ if(pJS.tmp.repulse_clicking == false){
1009
+
1010
+ p.vx = p.vx_i;
1011
+ p.vy = p.vy_i;
1012
+
1013
+ }
1014
+
1015
+ }
1016
+
1017
+ }
1018
+
1019
+ }
1020
+
1021
+
1022
+ pJS.fn.modes.grabParticle = function(p){
1023
+
1024
+ if(pJS.interactivity.events.onhover.enable && pJS.interactivity.status == 'mousemove'){
1025
+
1026
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
1027
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
1028
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);
1029
+
1030
+ /* draw a line between the cursor and the particle if the distance between them is under the config distance */
1031
+ if(dist_mouse <= pJS.interactivity.modes.grab.distance){
1032
+
1033
+ var opacity_line = pJS.interactivity.modes.grab.line_linked.opacity - (dist_mouse / (1/pJS.interactivity.modes.grab.line_linked.opacity)) / pJS.interactivity.modes.grab.distance;
1034
+
1035
+ if(opacity_line > 0){
1036
+
1037
+ /* style */
1038
+ var color_line = pJS.particles.line_linked.color_rgb_line;
1039
+ pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';
1040
+ pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
1041
+ //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */
1042
+
1043
+ /* path */
1044
+ pJS.canvas.ctx.beginPath();
1045
+ pJS.canvas.ctx.moveTo(p.x, p.y);
1046
+ pJS.canvas.ctx.lineTo(pJS.interactivity.mouse.pos_x, pJS.interactivity.mouse.pos_y);
1047
+ pJS.canvas.ctx.stroke();
1048
+ pJS.canvas.ctx.closePath();
1049
+
1050
+ }
1051
+
1052
+ }
1053
+
1054
+ }
1055
+
1056
+ };
1057
+
1058
+
1059
+
1060
+ /* ---------- pJS functions - vendors ------------ */
1061
+
1062
+ pJS.fn.vendors.eventsListeners = function(){
1063
+
1064
+ /* events target element */
1065
+ if(pJS.interactivity.detect_on == 'window'){
1066
+ pJS.interactivity.el = window;
1067
+ }else{
1068
+ pJS.interactivity.el = pJS.canvas.el;
1069
+ }
1070
+
1071
+
1072
+ /* detect mouse pos - on hover / click event */
1073
+ if(pJS.interactivity.events.onhover.enable || pJS.interactivity.events.onclick.enable){
1074
+
1075
+ /* el on mousemove */
1076
+ pJS.interactivity.el.addEventListener('mousemove', function(e){
1077
+
1078
+ if(pJS.interactivity.el == window){
1079
+ var pos_x = e.clientX,
1080
+ pos_y = e.clientY;
1081
+ }
1082
+ else{
1083
+ var pos_x = e.offsetX || e.clientX,
1084
+ pos_y = e.offsetY || e.clientY;
1085
+ }
1086
+
1087
+ pJS.interactivity.mouse.pos_x = pos_x;
1088
+ pJS.interactivity.mouse.pos_y = pos_y;
1089
+
1090
+ if(pJS.tmp.retina){
1091
+ pJS.interactivity.mouse.pos_x *= pJS.canvas.pxratio;
1092
+ pJS.interactivity.mouse.pos_y *= pJS.canvas.pxratio;
1093
+ }
1094
+
1095
+ pJS.interactivity.status = 'mousemove';
1096
+
1097
+ });
1098
+
1099
+ /* el on onmouseleave */
1100
+ pJS.interactivity.el.addEventListener('mouseleave', function(e){
1101
+
1102
+ pJS.interactivity.mouse.pos_x = null;
1103
+ pJS.interactivity.mouse.pos_y = null;
1104
+ pJS.interactivity.status = 'mouseleave';
1105
+
1106
+ });
1107
+
1108
+ }
1109
+
1110
+ /* on click event */
1111
+ if(pJS.interactivity.events.onclick.enable){
1112
+
1113
+ pJS.interactivity.el.addEventListener('click', function(){
1114
+
1115
+ pJS.interactivity.mouse.click_pos_x = pJS.interactivity.mouse.pos_x;
1116
+ pJS.interactivity.mouse.click_pos_y = pJS.interactivity.mouse.pos_y;
1117
+ pJS.interactivity.mouse.click_time = new Date().getTime();
1118
+
1119
+ if(pJS.interactivity.events.onclick.enable){
1120
+
1121
+ switch(pJS.interactivity.events.onclick.mode){
1122
+
1123
+ case 'push':
1124
+ if(pJS.particles.move.enable){
1125
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);
1126
+ }else{
1127
+ if(pJS.interactivity.modes.push.particles_nb == 1){
1128
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);
1129
+ }
1130
+ else if(pJS.interactivity.modes.push.particles_nb > 1){
1131
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb);
1132
+ }
1133
+ }
1134
+ break;
1135
+
1136
+ case 'remove':
1137
+ pJS.fn.modes.removeParticles(pJS.interactivity.modes.remove.particles_nb);
1138
+ break;
1139
+
1140
+ case 'bubble':
1141
+ pJS.tmp.bubble_clicking = true;
1142
+ break;
1143
+
1144
+ case 'repulse':
1145
+ pJS.tmp.repulse_clicking = true;
1146
+ pJS.tmp.repulse_count = 0;
1147
+ pJS.tmp.repulse_finish = false;
1148
+ setTimeout(function(){
1149
+ pJS.tmp.repulse_clicking = false;
1150
+ }, pJS.interactivity.modes.repulse.duration*1000)
1151
+ break;
1152
+
1153
+ }
1154
+
1155
+ }
1156
+
1157
+ });
1158
+
1159
+ }
1160
+
1161
+
1162
+ };
1163
+
1164
+ pJS.fn.vendors.densityAutoParticles = function(){
1165
+
1166
+ if(pJS.particles.number.density.enable){
1167
+
1168
+ /* calc area */
1169
+ var area = pJS.canvas.el.width * pJS.canvas.el.height / 1000;
1170
+ if(pJS.tmp.retina){
1171
+ area = area/(pJS.canvas.pxratio*2);
1172
+ }
1173
+
1174
+ /* calc number of particles based on density area */
1175
+ var nb_particles = area * pJS.particles.number.value / pJS.particles.number.density.value_area;
1176
+
1177
+ /* add or remove X particles */
1178
+ var missing_particles = pJS.particles.array.length - nb_particles;
1179
+ if(missing_particles < 0) pJS.fn.modes.pushParticles(Math.abs(missing_particles));
1180
+ else pJS.fn.modes.removeParticles(missing_particles);
1181
+
1182
+ }
1183
+
1184
+ };
1185
+
1186
+
1187
+ pJS.fn.vendors.checkOverlap = function(p1, position){
1188
+ for(var i = 0; i < pJS.particles.array.length; i++){
1189
+ var p2 = pJS.particles.array[i];
1190
+
1191
+ var dx = p1.x - p2.x,
1192
+ dy = p1.y - p2.y,
1193
+ dist = Math.sqrt(dx*dx + dy*dy);
1194
+
1195
+ if(dist <= p1.radius + p2.radius){
1196
+ p1.x = position ? position.x : Math.random() * pJS.canvas.w;
1197
+ p1.y = position ? position.y : Math.random() * pJS.canvas.h;
1198
+ pJS.fn.vendors.checkOverlap(p1);
1199
+ }
1200
+ }
1201
+ };
1202
+
1203
+
1204
+ pJS.fn.vendors.createSvgImg = function(p){
1205
+
1206
+ /* set color to svg element */
1207
+ var svgXml = pJS.tmp.source_svg,
1208
+ rgbHex = /#([0-9A-F]{3,6})/gi,
1209
+ coloredSvgXml = svgXml.replace(rgbHex, function (m, r, g, b) {
1210
+ if(p.color.rgb){
1211
+ var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+p.opacity+')';
1212
+ }else{
1213
+ var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+p.opacity+')';
1214
+ }
1215
+ return color_value;
1216
+ });
1217
+
1218
+ /* prepare to create img with colored svg */
1219
+ var svg = new Blob([coloredSvgXml], {type: 'image/svg+xml;charset=utf-8'}),
1220
+ DOMURL = window.URL || window.webkitURL || window,
1221
+ url = DOMURL.createObjectURL(svg);
1222
+
1223
+ /* create particle img obj */
1224
+ var img = new Image();
1225
+ img.addEventListener('load', function(){
1226
+ p.img.obj = img;
1227
+ p.img.loaded = true;
1228
+ DOMURL.revokeObjectURL(url);
1229
+ pJS.tmp.count_svg++;
1230
+ });
1231
+ img.src = url;
1232
+
1233
+ };
1234
+
1235
+
1236
+ pJS.fn.vendors.destroypJS = function(){
1237
+ cancelAnimationFrame(pJS.fn.drawAnimFrame);
1238
+ canvas_el.remove();
1239
+ pJSDom = null;
1240
+ };
1241
+
1242
+
1243
+ pJS.fn.vendors.drawShape = function(c, startX, startY, sideLength, sideCountNumerator, sideCountDenominator){
1244
+
1245
+ // By Programming Thomas - https://programmingthomas.wordpress.com/2013/04/03/n-sided-shapes/
1246
+ var sideCount = sideCountNumerator * sideCountDenominator;
1247
+ var decimalSides = sideCountNumerator / sideCountDenominator;
1248
+ var interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides;
1249
+ var interiorAngle = Math.PI - Math.PI * interiorAngleDegrees / 180; // convert to radians
1250
+ c.save();
1251
+ c.beginPath();
1252
+ c.translate(startX, startY);
1253
+ c.moveTo(0,0);
1254
+ for (var i = 0; i < sideCount; i++) {
1255
+ c.lineTo(sideLength,0);
1256
+ c.translate(sideLength,0);
1257
+ c.rotate(interiorAngle);
1258
+ }
1259
+ //c.stroke();
1260
+ c.fill();
1261
+ c.restore();
1262
+
1263
+ };
1264
+
1265
+ pJS.fn.vendors.exportImg = function(){
1266
+ window.open(pJS.canvas.el.toDataURL('image/png'), '_blank');
1267
+ };
1268
+
1269
+
1270
+ pJS.fn.vendors.loadImg = function(type){
1271
+
1272
+ pJS.tmp.img_error = undefined;
1273
+
1274
+ if(pJS.particles.shape.image.src != ''){
1275
+
1276
+ if(type == 'svg'){
1277
+
1278
+ var xhr = new XMLHttpRequest();
1279
+ xhr.open('GET', pJS.particles.shape.image.src);
1280
+ xhr.onreadystatechange = function (data) {
1281
+ if(xhr.readyState == 4){
1282
+ if(xhr.status == 200){
1283
+ pJS.tmp.source_svg = data.currentTarget.response;
1284
+ pJS.fn.vendors.checkBeforeDraw();
1285
+ }else{
1286
+ console.log('Error pJS - Image not found');
1287
+ pJS.tmp.img_error = true;
1288
+ }
1289
+ }
1290
+ }
1291
+ xhr.send();
1292
+
1293
+ }else{
1294
+
1295
+ var img = new Image();
1296
+ img.addEventListener('load', function(){
1297
+ pJS.tmp.img_obj = img;
1298
+ pJS.fn.vendors.checkBeforeDraw();
1299
+ });
1300
+ img.src = pJS.particles.shape.image.src;
1301
+
1302
+ }
1303
+
1304
+ }else{
1305
+ console.log('Error pJS - No image.src');
1306
+ pJS.tmp.img_error = true;
1307
+ }
1308
+
1309
+ };
1310
+
1311
+
1312
+ pJS.fn.vendors.draw = function(){
1313
+
1314
+ if(pJS.particles.shape.type == 'image'){
1315
+
1316
+ if(pJS.tmp.img_type == 'svg'){
1317
+
1318
+ if(pJS.tmp.count_svg >= pJS.particles.number.value){
1319
+ pJS.fn.particlesDraw();
1320
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
1321
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
1322
+ }else{
1323
+ //console.log('still loading...');
1324
+ if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
1325
+ }
1326
+
1327
+ }else{
1328
+
1329
+ if(pJS.tmp.img_obj != undefined){
1330
+ pJS.fn.particlesDraw();
1331
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
1332
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
1333
+ }else{
1334
+ if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
1335
+ }
1336
+
1337
+ }
1338
+
1339
+ }else{
1340
+ pJS.fn.particlesDraw();
1341
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
1342
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
1343
+ }
1344
+
1345
+ };
1346
+
1347
+
1348
+ pJS.fn.vendors.checkBeforeDraw = function(){
1349
+
1350
+ // if shape is image
1351
+ if(pJS.particles.shape.type == 'image'){
1352
+
1353
+ if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg == undefined){
1354
+ pJS.tmp.checkAnimFrame = requestAnimFrame(check);
1355
+ }else{
1356
+ //console.log('images loaded! cancel check');
1357
+ cancelRequestAnimFrame(pJS.tmp.checkAnimFrame);
1358
+ if(!pJS.tmp.img_error){
1359
+ pJS.fn.vendors.init();
1360
+ pJS.fn.vendors.draw();
1361
+ }
1362
+
1363
+ }
1364
+
1365
+ }else{
1366
+ pJS.fn.vendors.init();
1367
+ pJS.fn.vendors.draw();
1368
+ }
1369
+
1370
+ };
1371
+
1372
+
1373
+ pJS.fn.vendors.init = function(){
1374
+
1375
+ /* init canvas + particles */
1376
+ pJS.fn.retinaInit();
1377
+ pJS.fn.canvasInit();
1378
+ pJS.fn.canvasSize();
1379
+ pJS.fn.canvasPaint();
1380
+ pJS.fn.particlesCreate();
1381
+ pJS.fn.vendors.densityAutoParticles();
1382
+
1383
+ /* particles.line_linked - convert hex colors to rgb */
1384
+ pJS.particles.line_linked.color_rgb_line = hexToRgb(pJS.particles.line_linked.color);
1385
+
1386
+ };
1387
+
1388
+
1389
+ pJS.fn.vendors.start = function(){
1390
+
1391
+ if(isInArray('image', pJS.particles.shape.type)){
1392
+ pJS.tmp.img_type = pJS.particles.shape.image.src.substr(pJS.particles.shape.image.src.length - 3);
1393
+ pJS.fn.vendors.loadImg(pJS.tmp.img_type);
1394
+ }else{
1395
+ pJS.fn.vendors.checkBeforeDraw();
1396
+ }
1397
+
1398
+ };
1399
+
1400
+
1401
+
1402
+
1403
+ /* ---------- pJS - start ------------ */
1404
+
1405
+
1406
+ pJS.fn.vendors.eventsListeners();
1407
+
1408
+ pJS.fn.vendors.start();
1409
+
1410
+
1411
+
1412
+ };
1413
+
1414
+ /* ---------- global functions - vendors ------------ */
1415
+
1416
+ Object.deepExtend = function(destination, source) {
1417
+ for (var property in source) {
1418
+ if (source[property] && source[property].constructor &&
1419
+ source[property].constructor === Object) {
1420
+ destination[property] = destination[property] || {};
1421
+ arguments.callee(destination[property], source[property]);
1422
+ } else {
1423
+ destination[property] = source[property];
1424
+ }
1425
+ }
1426
+ return destination;
1427
+ };
1428
+
1429
+ window.requestAnimFrame = (function(){
1430
+ return window.requestAnimationFrame ||
1431
+ window.webkitRequestAnimationFrame ||
1432
+ window.mozRequestAnimationFrame ||
1433
+ window.oRequestAnimationFrame ||
1434
+ window.msRequestAnimationFrame ||
1435
+ function(callback){
1436
+ window.setTimeout(callback, 1000 / 60);
1437
+ };
1438
+ })();
1439
+
1440
+ window.cancelRequestAnimFrame = ( function() {
1441
+ return window.cancelAnimationFrame ||
1442
+ window.webkitCancelRequestAnimationFrame ||
1443
+ window.mozCancelRequestAnimationFrame ||
1444
+ window.oCancelRequestAnimationFrame ||
1445
+ window.msCancelRequestAnimationFrame ||
1446
+ clearTimeout
1447
+ } )();
1448
+
1449
+ function hexToRgb(hex){
1450
+ // By Tim Down - http://stackoverflow.com/a/5624139/3493650
1451
+ // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
1452
+ var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
1453
+ hex = hex.replace(shorthandRegex, function(m, r, g, b) {
1454
+ return r + r + g + g + b + b;
1455
+ });
1456
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1457
+ return result ? {
1458
+ r: parseInt(result[1], 16),
1459
+ g: parseInt(result[2], 16),
1460
+ b: parseInt(result[3], 16)
1461
+ } : null;
1462
+ };
1463
+
1464
+ function clamp(number, min, max) {
1465
+ return Math.min(Math.max(number, min), max);
1466
+ };
1467
+
1468
+ function isInArray(value, array) {
1469
+ return array.indexOf(value) > -1;
1470
+ }
1471
+
1472
+
1473
+ /* ---------- particles.js functions - start ------------ */
1474
+
1475
+ window.pJSDom = [];
1476
+
1477
+ window.particlesJS = function(tag_id, params){
1478
+
1479
+ //console.log(params);
1480
+
1481
+ /* no string id? so it's object params, and set the id with default id */
1482
+ if(typeof(tag_id) != 'string'){
1483
+ params = tag_id;
1484
+ tag_id = 'particles-js';
1485
+ }
1486
+
1487
+ /* no id? set the id to default id */
1488
+ if(!tag_id){
1489
+ tag_id = 'particles-js';
1490
+ }
1491
+
1492
+ /* pJS elements */
1493
+ var pJS_tag = document.getElementById(tag_id),
1494
+ pJS_canvas_class = 'particles-js-canvas-el',
1495
+ exist_canvas = pJS_tag.getElementsByClassName(pJS_canvas_class);
1496
+
1497
+ /* remove canvas if exists into the pJS target tag */
1498
+ if(exist_canvas.length){
1499
+ while(exist_canvas.length > 0){
1500
+ pJS_tag.removeChild(exist_canvas[0]);
1501
+ }
1502
+ }
1503
+
1504
+ /* create canvas element */
1505
+ var canvas_el = document.createElement('canvas');
1506
+ canvas_el.className = pJS_canvas_class;
1507
+
1508
+ /* set size canvas */
1509
+ canvas_el.style.width = "100%";
1510
+ canvas_el.style.height = "100%";
1511
+
1512
+ /* append canvas */
1513
+ var canvas = document.getElementById(tag_id).appendChild(canvas_el);
1514
+
1515
+ /* launch particle.js */
1516
+ if(canvas != null){
1517
+ pJSDom.push(new pJS(tag_id, params));
1518
+ }
1519
+
1520
+ };
1521
+
1522
+ window.particlesJS.load = function(tag_id, path_config_json, callback){
1523
+
1524
+ /* load json config */
1525
+ var xhr = new XMLHttpRequest();
1526
+ xhr.open('GET', path_config_json);
1527
+ xhr.onreadystatechange = function (data) {
1528
+ if(xhr.readyState == 4){
1529
+ if(xhr.status == 200){
1530
+ var params = JSON.parse(data.currentTarget.response);
1531
+ window.particlesJS(tag_id, params);
1532
+ if(callback) callback();
1533
+ }else{
1534
+ console.log('Error pJS - XMLHttpRequest status: '+xhr.status);
1535
+ console.log('Error pJS - File config not found');
1536
+ }
1537
+ }
1538
+ };
1539
+ xhr.send();
1540
+
1541
+ };