j1-template 2024.3.15 → 2024.3.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/amplitude.html +139 -68
  3. data/assets/data/banner.html +1 -1
  4. data/assets/data/cookieconsent.html +1 -1
  5. data/assets/data/docsearch.html +1 -1
  6. data/assets/data/fab.html +1 -1
  7. data/assets/data/footer.html +1 -1
  8. data/assets/data/galeries.html +1 -1
  9. data/assets/data/gallery_customizer.html +1 -1
  10. data/assets/data/gemini-ui.html +1 -1
  11. data/assets/data/iframes.html +1 -1
  12. data/assets/data/masonry.html +1 -1
  13. data/assets/data/masterslider.html +1 -1
  14. data/assets/data/menu.html +1 -1
  15. data/assets/data/mmenu.html +1 -1
  16. data/assets/data/mmenu_sidebar.html +1 -1
  17. data/assets/data/mmenu_toc.html +1 -1
  18. data/assets/data/panel.html +5 -4
  19. data/assets/data/quicklinks.html +1 -1
  20. data/assets/data/rtext_resizer.html +1 -1
  21. data/assets/data/slick.html +1 -1
  22. data/assets/data/speak2me.html +1 -1
  23. data/assets/data/swiper.html +313 -0
  24. data/assets/theme/j1/adapter/js/amplitude.30.js +1177 -0
  25. data/assets/theme/j1/adapter/js/amplitude.js +241 -191
  26. data/assets/theme/j1/adapter/js/j1.js +3 -3
  27. data/assets/theme/j1/adapter/js/masonry.js +2 -2
  28. data/assets/theme/j1/adapter/js/masterslider.js +2 -1
  29. data/assets/theme/j1/adapter/js/swiper.js +231 -0
  30. data/assets/theme/j1/adapter/js/videojs.js +212 -0
  31. data/assets/theme/j1/core/css/themes/unolight/bootstrap.css +7 -4
  32. data/assets/theme/j1/core/css/themes/unolight/bootstrap.css.map +1 -1
  33. data/assets/theme/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  34. data/assets/theme/j1/core/css/themes/unolight/bootstrap.min.css.map +1 -1
  35. data/assets/theme/j1/core/js/template.js +4 -0
  36. data/assets/theme/j1/core/js/template.min.js +2 -2
  37. data/assets/theme/j1/core/js/template.min.js.map +1 -1
  38. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +94 -4
  39. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +1 -1
  40. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.css +3 -2
  41. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +1 -1
  42. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +72 -10
  43. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +2 -1
  44. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/artist.svg +78 -0
  45. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/mute.svg +52 -20
  46. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/next.svg +20 -39
  47. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/now-playing.svg +24 -38
  48. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/playlist-hide.svg +85 -0
  49. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/playlist-music.svg +85 -0
  50. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/playlist-show.svg +85 -0
  51. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/playlist.svg +85 -0
  52. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/previous.svg +18 -37
  53. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/skip-backward.svg +33 -30
  54. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/skip-forward.svg +33 -29
  55. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/small/next.svg +55 -14
  56. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/small/previous.svg +56 -14
  57. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/volume.svg +38 -21
  58. data/assets/theme/j1/modules/amplitudejs/js/amplitude.map +20 -20
  59. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.15.js +1594 -0
  60. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +1617 -89
  61. data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.js +1 -1
  62. data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.js +31 -1
  63. data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.js +1 -1
  64. data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.js +1 -1
  65. data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.js +1 -1
  66. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.js +206 -122
  67. data/assets/theme/j1/modules/photoswipe/.version_5.4.4 +6 -0
  68. data/assets/theme/j1/modules/photoswipe/LICENSE +21 -0
  69. data/assets/theme/j1/modules/photoswipe/README.md +32 -0
  70. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe-dynamic-caption-plugin.umd.min.js +5 -0
  71. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe.css +420 -0
  72. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.css +67 -0
  73. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.min.css +16 -0
  74. data/assets/theme/j1/modules/photoswipe/css/photoswipe.css +376 -0
  75. data/assets/theme/j1/modules/photoswipe/css/photoswipe.min.css +17 -0
  76. data/assets/theme/j1/modules/photoswipe/css/scss/photoswipe.scss +427 -0
  77. data/assets/theme/j1/modules/photoswipe/example/photoswipe-caption-plugin.html +237 -0
  78. data/assets/theme/j1/modules/photoswipe/example/test-gallery.html +36 -0
  79. data/assets/theme/j1/modules/photoswipe/js/README.md +43 -0
  80. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.min.js +5 -0
  81. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.min.js +18 -0
  82. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.min.js +18 -0
  83. data/assets/theme/j1/modules/swiper/.version_1.2.0 +15 -0
  84. data/assets/theme/j1/modules/swiper/LICENSE +20 -0
  85. data/assets/theme/j1/modules/swiper/README.md +95 -0
  86. data/assets/theme/j1/modules/swiper/css/swiper-bundle.css +740 -0
  87. data/assets/theme/j1/modules/swiper/css/swiper-bundle.min..css +17 -0
  88. data/assets/theme/j1/modules/swiper/css/theme/uno.css +249 -0
  89. data/assets/theme/j1/modules/swiper/css/theme/uno.min.css +154 -0
  90. data/assets/theme/j1/modules/swiper/js/swiper-bundle.js +9785 -0
  91. data/assets/theme/j1/modules/swiper/js/swiper-bundle.min.js +17 -0
  92. data/assets/theme/j1/modules/swiper/swiperjs.com-demos.url +2 -0
  93. data/assets/theme/j1/modules/videojs/assets/icons/custom-icons/next.svg +82 -0
  94. data/assets/theme/j1/modules/videojs/css/font/README.md +151 -0
  95. data/assets/theme/j1/modules/videojs/css/font/VideoJS.svg +150 -0
  96. data/assets/theme/j1/modules/videojs/css/font/video-js-cdn.css +2012 -0
  97. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +32 -0
  98. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +31 -0
  99. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.css +31 -0
  100. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.min.css +21 -0
  101. data/assets/theme/j1/modules/videojs/css/themes/uno.css +14 -3
  102. data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
  103. data/assets/theme/j1/modules/videojs/css/videojs.css +1 -0
  104. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/LICENSE +13 -0
  105. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/README.md +75 -0
  106. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.js +149 -0
  107. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.min.js +21 -0
  108. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/README.md +76 -30
  109. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.js +64 -53
  110. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.min.js +1 -1
  111. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/README.md +133 -0
  112. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.js +137 -0
  113. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.min.js +21 -0
  114. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.js +15 -12
  115. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.js +43 -16
  116. data/lib/j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/3.3/fastfilereaderext.so +0 -0
  117. data/lib/j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/3.3/rubyeventmachine.so +0 -0
  118. data/lib/j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/3.4/fastfilereaderext.so +0 -0
  119. data/lib/j1/patches/rubygems/eventmachine-1.2.7-x64-mingw32/lib/3.4/rubyeventmachine.so +0 -0
  120. data/lib/j1/version.rb +1 -1
  121. data/lib/j1_app/j1_auth_manager/config.rb +0 -4
  122. data/lib/starter_web/Gemfile +45 -22
  123. data/lib/starter_web/README.md +5 -5
  124. data/lib/starter_web/_config.yml +4 -6
  125. data/lib/starter_web/_data/modules/amplitude.yml +308 -363
  126. data/lib/starter_web/_data/modules/defaults/amplitude.yml +60 -35
  127. data/lib/starter_web/_data/modules/defaults/gallery.yml +42 -0
  128. data/lib/starter_web/_data/modules/defaults/slick.yml +1 -1
  129. data/lib/starter_web/_data/modules/defaults/swiper.yml +515 -0
  130. data/lib/starter_web/_data/modules/defaults/videojs.yml +107 -0
  131. data/lib/starter_web/_data/modules/gallery.yml +30 -14
  132. data/lib/starter_web/_data/modules/masonry.yml +15 -0
  133. data/lib/starter_web/_data/modules/swiper.yml +227 -0
  134. data/lib/starter_web/_data/modules/videojs.yml +57 -0
  135. data/lib/starter_web/_data/resources.yml +50 -16
  136. data/lib/starter_web/_data/templates/feed.xml +1 -1
  137. data/lib/starter_web/_includes/tables/jekyll_variables.asciidoc +1 -0
  138. data/lib/starter_web/_plugins/asciidoctor/amplitude-block.rb +1 -0
  139. data/lib/starter_web/_plugins/asciidoctor/dailymotion-block.rb +4 -1
  140. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +141 -24
  141. data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +4 -1
  142. data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +313 -0
  143. data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +192 -17
  144. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  145. data/lib/starter_web/assets/video/poster/youtube/faelle_des_bnd/der_unverzichtbare_feind.jpg +0 -0
  146. data/lib/starter_web/assets/video/poster/youtube/faelle_des_bnd/ein_diener_vieler_herren.jpg +0 -0
  147. data/lib/starter_web/assets/video/poster/youtube/the_piano/the-piano.jpg +0 -0
  148. data/lib/starter_web/package.json +1 -1
  149. data/lib/starter_web/pages/public/_includes/attributes.asciidoc +45 -0
  150. data/lib/starter_web/pages/public/_includes/documents/photoswipe/200_photoswipe_parameters.asciidoc +510 -0
  151. data/lib/starter_web/pages/public/_includes/documents/photoswipe/210_photoswipe_lightbox_parameters.asciidoc +98 -0
  152. data/lib/starter_web/pages/public/_includes/documents/photoswipe/300_caption_plugin_for_photoSwipe.asciidoc +327 -0
  153. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_features.asciidoc +50 -0
  154. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_html_layout.asciidoc +122 -0
  155. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_initialization.asciidoc +53 -0
  156. data/lib/starter_web/pages/public/_includes/documents/swiper/110_swiper_common_options.asciidoc +43 -0
  157. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_a_k.asciidoc +994 -0
  158. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_l_o.asciidoc +473 -0
  159. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_p_s.asciidoc +700 -0
  160. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_t_z.asciidoc +413 -0
  161. data/lib/starter_web/pages/public/_includes/documents/swiper/300_swiper_instance_properties.asciidoc +873 -0
  162. data/lib/starter_web/pages/public/_includes/documents/swiper/400_swiper_modules.asciidoc +2514 -0
  163. data/lib/starter_web/pages/public/_includes/documents/swiper/500_swiper_methods.asciidoc +989 -0
  164. data/lib/starter_web/pages/public/_includes/documents/swiper/600_swiper_events.asciidoc +1534 -0
  165. data/lib/starter_web/pages/public/amplitude_yt_tester.adoc +89 -62
  166. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/amplitudejs-api.adoc +1 -1
  167. data/lib/starter_web/pages/public/manuals/integrations/videojs/youtube-api.adoc +1638 -0
  168. data/lib/starter_web/pages/public/photoswipe_api.adoc +150 -0
  169. data/lib/starter_web/pages/public/swiper_api.adoc +128 -0
  170. data/lib/starter_web/pages/public/swiper_tester.adoc +973 -0
  171. data/lib/starter_web/pages/public/tools/previewer/preview_bootstrap_theme.adoc +5 -6
  172. data/lib/starter_web/pages/public/tools/previewer/preview_videojs.adoc +203 -0
  173. data/lib/starter_web/pages/{tour → public/tour}/modal_extentions.adoc +12 -5
  174. data/lib/starter_web/pages/{tour → public/tour}/play_audio.adoc +63 -15
  175. data/lib/starter_web/pages/{tour → public/tour}/play_video.adoc +79 -40
  176. data/lib/starter_web/pages/{tour → public/tour}/present_images.adoc +5 -5
  177. metadata +114 -41
  178. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/_pause.svg +0 -19
  179. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/_play.svg +0 -18
  180. data/assets/theme/j1/modules/amplitudejs/icons/player/dark/show-playlist.svg +0 -15
  181. data/assets/theme/j1/modules/jqueryScrollbar/LICENSE +0 -20
  182. data/assets/theme/j1/modules/jqueryScrollbar/README.md +0 -28
  183. data/assets/theme/j1/modules/jqueryScrollbar/css/scrollbar.css +0 -939
  184. data/assets/theme/j1/modules/jqueryScrollbar/css/scrollbar.min.css +0 -20
  185. data/assets/theme/j1/modules/jqueryScrollbar/js/scrollbar.js +0 -851
  186. data/assets/theme/j1/modules/jqueryScrollbar/js/scrollbar.min.js +0 -36
  187. data/assets/theme/j1/modules/jqueryScrollbar/sass/scrollbar.scss +0 -806
  188. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.0.js +0 -794
  189. /data/lib/starter_web/pages/{tour → public/tour}/_includes/attributes.asciidoc +0 -0
  190. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/100_gistblock.asciidoc +0 -0
  191. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_bottom_info.asciidoc +0 -0
  192. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_bottom_left_warning.asciidoc +0 -0
  193. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_bottom_right_danger.asciidoc +0 -0
  194. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_central_success.asciidoc +0 -0
  195. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_full_height_left_info.asciidoc +0 -0
  196. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_full_height_right_success.asciidoc +0 -0
  197. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_table_bs_modal_examples.asciidoc +0 -0
  198. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_top_info.asciidoc +0 -0
  199. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_top_left_info.asciidoc +0 -0
  200. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/410_top_right_success.asciidoc +0 -0
  201. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/419_advanced_modals_demo.asciidoc +0 -0
  202. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/tables/bs_modal_examples.asciidoc +0 -0
  203. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/themes_bootstrap.asciidoc +0 -0
  204. /data/lib/starter_web/pages/{tour → public/tour}/_includes/documents/themes_rouge.asciidoc +0 -0
  205. /data/lib/starter_web/pages/{tour → public/tour}/asciidoc_extensions.adoc +0 -0
  206. /data/lib/starter_web/pages/{tour → public/tour}/bootstrap_themes.adoc +0 -0
  207. /data/lib/starter_web/pages/{tour → public/tour}/highlghter_rouge.adoc +0 -0
  208. /data/lib/starter_web/pages/{tour → public/tour}/icon_fonts.adoc +0 -0
  209. /data/lib/starter_web/pages/{tour → public/tour}/quicksearch.adoc +0 -0
  210. /data/lib/starter_web/pages/{tour → public/tour}/responsive_tables.adoc +0 -0
  211. /data/lib/starter_web/pages/{tour → public/tour}/typography.adoc +0 -0
@@ -0,0 +1,973 @@
1
+ ---
2
+ title: Swiper Tester
3
+ title_extention: Swiper Integration
4
+ tagline: Swiper Integration
5
+
6
+ date: 2025-01-07
7
+ #last_modified: 2025-01-01
8
+
9
+ description: >
10
+
11
+ keywords: >
12
+ open source, free, template, jekyll, jekyllone, web,
13
+ sites, static, jamstack, bootstrap,
14
+ html, html5, video, support, flash player,
15
+ quicktime, silverlight
16
+
17
+ categories: [ Roundtrip ]
18
+ tags: [ Module, Swiper ]
19
+
20
+ image:
21
+ path: /assets/image/modules/attics/markus-spiske-1920x1280.jpg
22
+ width: 1920
23
+ height: 1280
24
+
25
+ attic: false
26
+ regenerate: false
27
+ personalization: true
28
+ permalink: /pages/public/swiper_tester/
29
+
30
+ resources: [ swiper, slick-slider, photoswipe, videojs ]
31
+ resource_options:
32
+ - toccer:
33
+ collapseDepth: 3
34
+ - attic:
35
+ slides:
36
+ - url: /assets/image/modules/attics/markus-spiske-1920x1280.jpg
37
+ alt: Swiper Tester
38
+ ---
39
+
40
+ // Page Initializer
41
+ // =============================================================================
42
+ // Enable the Liquid Preprocessor
43
+ :page-liquid:
44
+
45
+ // Attribute settings for section control
46
+ //
47
+ :swiper--features: false
48
+
49
+ // Set (local) page attributes here
50
+ // -----------------------------------------------------------------------------
51
+ // :page--attr: <attr-value>
52
+
53
+ // Load Liquid procedures
54
+ // -----------------------------------------------------------------------------
55
+ {% capture load_attributes %}themes/{{site.template.name}}/procedures/global/attributes_loader.proc{%endcapture%}
56
+
57
+ // Load page attributes
58
+ // -----------------------------------------------------------------------------
59
+ {% include {{load_attributes}} scope="global" %}
60
+
61
+
62
+ // Page content
63
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64
+ [role="dropcap"]
65
+ Swiper, the free and most modern mobile touch slider with hardware accelerated
66
+ transitions and amazing native behavior. It is intended to be used in mobile
67
+ websites, mobile web apps, and mobile native/hybrid apps.
68
+
69
+ // Include sub-documents (if any)
70
+ // -----------------------------------------------------------------------------
71
+ lorem:sentences[5]
72
+
73
+ [NOTE]
74
+ ====
75
+ Swiper is not compatible with all platforms, it is a modern touch slider
76
+ which is focused only on modern apps/platforms to bring the best experience
77
+ and simplicity.
78
+ ====
79
+
80
+ [role="mt-5"]
81
+ == Examples
82
+ // See: https://swiperjs.com/demos
83
+
84
+ lorem:sentences[5]
85
+
86
+ [role="mt-4"]
87
+ === Text Slider
88
+
89
+ A slider is typically used for displaying images. Still, the implementation
90
+ for the J1 Template supports a lot more sources to be displayed as a slide
91
+ show — simple text for example.
92
+
93
+ ==== Base Text Carousel
94
+
95
+ Important statements or topics can be placed on top of an article or a
96
+ paragraph to give them better visibility. You can present facts to know
97
+ animated for the readers attention.
98
+
99
+ ++++
100
+ <div id="textSwiper" class="swiper swiper--text">
101
+ <div class="swiper-wrapper">
102
+ <div class="swiper-slide">
103
+ <p>
104
+ <big>J1 is Open Source</big>
105
+ <br>
106
+ <i>No pain for private or professional use</i>
107
+ </p>
108
+ </div>
109
+ <div class="swiper-slide">
110
+ <p>
111
+ <big>Explore this site</big>
112
+ <br>
113
+ <i>Learn what's possible if you go the Jekyll Way</i>
114
+ </p>
115
+ </div>
116
+ <div class="swiper-slide">
117
+ <p>
118
+ <big>Create modern static sites</big>
119
+ <br>
120
+ <i>Secure, powerful and fast!</i>
121
+ </p>
122
+ </div>
123
+ </div>
124
+
125
+ <div class="autoplay-progress">
126
+ <svg viewBox="0 0 48 48">
127
+ <circle cx="24" cy="24" r="20"></circle>
128
+ </svg>
129
+ <span></span>
130
+ </div>
131
+ </div>
132
+
133
+ <!-- Initialize Text Swiper -->
134
+ <script>
135
+ $(function() {
136
+ // ---------------------------------------------------------------------------
137
+ // slider initializer
138
+ // ---------------------------------------------------------------------------
139
+ var dependencies_met_page_ready = setInterval (() => {
140
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
141
+
142
+ if (atticFinished) {
143
+ const progressCircle = document.querySelector(".autoplay-progress svg");
144
+ const progressContent = document.querySelector(".autoplay-progress span");
145
+
146
+ const textSwiper = new Swiper('#textSwiper', {
147
+ // Optional parameters
148
+ direction: 'horizontal',
149
+ loop: true,
150
+ autoplay: {
151
+ delay: 3000,
152
+ pauseOnMouseEnter: true,
153
+ disableOnInteraction: false
154
+ },
155
+ // scrollbar: {
156
+ // el: '.swiper-scrollbar',
157
+ // },
158
+ // on: {
159
+ // // afterInit: function (swiper) {
160
+ // // // do something
161
+ // // },
162
+ // // autoplayTimeLeft(s, time, progress) {
163
+ // // progressCircle.style.setProperty("--progress", 1 - progress);
164
+ // // progressContent.textContent = `${Math.ceil(time / 1000)}s`;
165
+ // // }
166
+ // }
167
+ });
168
+
169
+ clearInterval(dependencies_met_page_ready);
170
+ } // END pageVisible
171
+ }, 10); // END dependencies_met_page_ready
172
+ });
173
+ </script>
174
+ ++++
175
+
176
+ [role="mt-4"]
177
+ === Image Slider
178
+
179
+ Sliders (or Carousel)s are mostly used for pictures data to animate the
180
+ images as a series. Find with the following some examples of how to use
181
+ a slider for your image data.
182
+
183
+ [role="mt-4"]
184
+ ==== Base Silder + Captions
185
+
186
+ A simple image show is useful, for example, as an animated (or not animated)
187
+ banner presenting exciting things about your site or the products offered.
188
+
189
+ ++++
190
+ <!-- Swiper HTML Base Slider (image)-->
191
+ <div class="carousel-title"> <i class="mdib mdib-view-carousel mdib-24px mr-2"></i> Base Silder · Captions</div>
192
+
193
+ <div id="base_image_slider_1" class="swiper swiper-container">
194
+ <!-- jadams, 2025-01-15, customize wrapper element for HEIGHT|OUTER bullets -->
195
+ <!-- Slides container -->
196
+ <ul class="swiper-wrapper" style="margin-bottom: 3.75rem;">
197
+ <li class="swiper-slide">
198
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg">
199
+ <div class="caption"> Image 1</div>
200
+ </li>
201
+ <li class="swiper-slide">
202
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg">
203
+ <div class="caption">Image 2</div>
204
+ </li>
205
+ <li class="swiper-slide">
206
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg">
207
+ <div class="caption">Image 3</div>
208
+ </li>
209
+ <li class="swiper-slide">
210
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg">
211
+ <div class="caption">Image 4</div>
212
+ </li>
213
+ <li class="swiper-slide">
214
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg">
215
+ <div class="caption">Image 5</div>
216
+ </li>
217
+ <li class="swiper-slide">
218
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg">
219
+ <div class="caption">Image 6</div>
220
+ </li>
221
+ </ul> <!-- END swiper-wrapper (slides) -->
222
+
223
+ <!-- Navigation -->
224
+ <!-- div class="swiper-button-prev"></div>
225
+ <div class="swiper-button-next"></div -->
226
+
227
+ <!-- Pagination -->
228
+ <!-- jadams, 2025-01-15, customize pagination element for OUTER bullets -->
229
+ <div class="swiper-pagination" style="bottom: 16px;"></div>
230
+
231
+ </div> <!-- END swiper-container -->
232
+
233
+ <script>
234
+ $(function() {
235
+ // -------------------------------------------------------------------------
236
+ // slider initializer
237
+ // -------------------------------------------------------------------------
238
+ var dependencies_met_page_ready = setInterval (() => {
239
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
240
+
241
+ if (atticFinished) {
242
+
243
+ const baseImageSlider1 = new Swiper("#base_image_slider_1", {
244
+ slidesPerView: 2,
245
+ slidesPerGroup: 2,
246
+ spaceBetween: 5,
247
+ // navigation: {
248
+ // nextEl: ".swiper-button-next",
249
+ // prevEl: ".swiper-button-prev",
250
+ // },
251
+ pagination: {
252
+ el: ".swiper-pagination",
253
+ type: 'bullets',
254
+ clickable: true,
255
+ renderBullet: function (index, className) {
256
+ return '<span class="' + className + '">' + (index + 1) + "</span>";
257
+ }
258
+ }
259
+ });
260
+
261
+ clearInterval(dependencies_met_page_ready);
262
+ } // END pageVisible
263
+
264
+ }, 10); // END dependencies_met_page_ready
265
+ });
266
+ </script>
267
+ ++++
268
+
269
+
270
+ [role="mt-4"]
271
+ ==== Base Slider + Captions + Lightbox
272
+
273
+ Carousels are used for an exceptionally compact form of image galleries.
274
+ This example shows some pictures having individual caption text and supports
275
+ a lightbox to enlarge images full size.
276
+
277
+ ++++
278
+ <div class="carousel-title"> <i class="mdib mdib-view-carousel mdib-24px mr-2"></i> Base Silder · Captions + Lightbox</div>
279
+ <div id="my_gallery" class="swiper swiper-container">
280
+ <!-- Slides container -->
281
+ <ul class="swiper-wrapper" style="margin-bottom: 3.75rem;">
282
+ <li class="swiper-slide">
283
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg"
284
+ data-pswp-width="1600"
285
+ data-pswp-height="900">
286
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg" alt="Image 1">
287
+ <div class="caption">Image 1</div>
288
+ <span class="pswp-caption-content">Image 1</span>
289
+ </a>
290
+ </li>
291
+ <li class="swiper-slide">
292
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg"
293
+ data-pswp-width="1600"
294
+ data-pswp-height="900">
295
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg" alt="Image 2">
296
+ <div class="caption">Image 2</div>
297
+ <span class="pswp-caption-content">Image 2</span>
298
+ </a>
299
+ </li>
300
+ <li class="swiper-slide">
301
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg"
302
+ data-pswp-width="1600"
303
+ data-pswp-height="900">
304
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg" alt="Image 3">
305
+ <div class="caption">Image 3</div>
306
+ <span class="pswp-caption-content">Image 3</span>
307
+ </a>
308
+ </li>
309
+ <li class="swiper-slide">
310
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg"
311
+ data-pswp-width="1600"
312
+ data-pswp-height="900">
313
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg" alt="Image 4">
314
+ <div class="caption">Image 4</div>
315
+ <span class="pswp-caption-content">Image 4</span>
316
+ </a>
317
+ </li>
318
+ <li class="swiper-slide">
319
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg"
320
+ data-pswp-width="1600"
321
+ data-pswp-height="900">
322
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg" alt="Image 5">
323
+ <div class="caption">Image 5</div>
324
+ <span class="pswp-caption-content">Image 5</span>
325
+ </a>
326
+ </li>
327
+ <li class="swiper-slide">
328
+ <a href="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg"
329
+ data-pswp-width="1600"
330
+ data-pswp-height="900">
331
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg" alt="Image 6">
332
+ <div class="caption">Image 6</div>
333
+ <span class="pswp-caption-content">Image 6</span>
334
+ </a>
335
+ </li>
336
+ </ul>
337
+
338
+ <!-- Pagination -->
339
+ <div class="swiper-pagination"></div>
340
+
341
+ <!-- Navigation -->
342
+ <!-- div class="swiper-button-prev"></div>
343
+ <div class="swiper-button-next"></div -->
344
+ </div>
345
+
346
+ <script>
347
+ $(function() {
348
+ var dependencies_met_page_ready = setInterval (() => {
349
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
350
+
351
+ if (atticFinished) {
352
+
353
+ // ---------------------------------------------------------------------
354
+ // slider initializer
355
+ // ---------------------------------------------------------------------
356
+ var swiper = new Swiper("#my_gallery", {
357
+ slidesPerView: 2,
358
+ slidesPerGroup: 2,
359
+ spaceBetween: 5,
360
+ grabCursor: true,
361
+ loop: true,
362
+ pagination: {
363
+ el: '.swiper-pagination',
364
+ clickable: true,
365
+ renderBullet: function(index, className) {
366
+ return '<span class="' + className + '">' + (index + 1) + "</span>";
367
+ }
368
+ },
369
+ // navigation: {
370
+ // nextEl: '.swiper-button-next',
371
+ // prevEl: '.swiper-button-prev',
372
+ // },
373
+ // autoplay: {
374
+ // delay: 4000,
375
+ // disableOnInteraction: true
376
+ // },
377
+ keyboard: {
378
+ enabled: true,
379
+ },
380
+ });
381
+
382
+ // ---------------------------------------------------------------------
383
+ // PhotoSwipe initializer
384
+ // ---------------------------------------------------------------------
385
+
386
+ // Setup PhotoSwipe Lightbox
387
+ // ---------------------------------------------------------------------
388
+ const myLightbox = new PhotoSwipeLightbox({
389
+ gallery: '#my_gallery',
390
+ pswpModule: PhotoSwipe,
391
+ bgOpacity: 1,
392
+ showHideOpacity: true,
393
+ children: 'a',
394
+ loop: true,
395
+ showHideAnimationType: 'zoom',
396
+ imageClickAction: 'next',
397
+ tapAction: 'next',
398
+ zoom: false,
399
+ close: true,
400
+ counter: true,
401
+ arrowKeys: true,
402
+ bgOpacity: "1",
403
+ wheelToZoom: true,
404
+ escKey: true
405
+ });
406
+
407
+ // Setup Lightbox Captions
408
+ // ---------------------------------------------------------------------
409
+ const captionPlugin = new PhotoSwipeDynamicCaption(myLightbox, {
410
+ type: 'auto'
411
+ });
412
+
413
+ // Initialize the Lightbox
414
+ // ---------------------------------------------------------------------
415
+ myLightbox.init();
416
+
417
+ // Create Lightbox Events
418
+ // ---------------------------------------------------------------------
419
+ myLightbox.on('change', () => {
420
+ const { pswp } = myLightbox;
421
+ swiper.slideTo(pswp.currIndex, 0, false);
422
+ console.log('Slide index', pswp.currIndex);
423
+ console.log('Slide object', pswp.currSlide);
424
+ console.log('Slide object data', pswp.currSlide.data);
425
+ });
426
+
427
+ myLightbox.on('afterInit', () => {
428
+ const { pswp } = myLightbox;
429
+ if (swiper.params.autoplay.enabled) {
430
+ swiper.autoplay.stop();
431
+ };
432
+ });
433
+
434
+ // if autoplay enabled, run autoplay.start() on (lightbox) close
435
+ myLightbox.on('closingAnimationStart', () => {
436
+ const { pswp } = myLightbox;
437
+ swiper.slideTo(pswp.currIndex, 0, false);
438
+ if (swiper.params.autoplay.enabled) {
439
+ swiper.autoplay.start();
440
+ }
441
+ });
442
+
443
+ clearInterval(dependencies_met_page_ready);
444
+ } // END pageVisible
445
+ }, 10); // END dependencies_met_page_ready
446
+ });
447
+ </script>
448
+ ++++
449
+
450
+ [role="mt-4"]
451
+ [[image_thumbs_silder_bottom]]
452
+ ==== Thumbs Slider (bottom)
453
+
454
+ To give the users a more *visual* control over a slideshow, Swiper sliders can
455
+ provide UI elements by placing mini-images or short text elements (thumbs)
456
+ side-by-side (on the left|right), or at bottom|toop of a slideshow. Find below
457
+ examples how to control such sliders by a thumbs slave silder.
458
+
459
+ ++++
460
+ <!-- Master Slider (top) -->
461
+ <div class="carousel-title"> <i class="mdib mdib-view-carousel mdib-24px mr-2"></i> Thumbs Silder · Bottom</div>
462
+ <div id="master_slider_1" class="swiper swiper-container">
463
+
464
+ <!-- Slides container -->
465
+ <ul class="swiper-wrapper">
466
+ <li class="swiper-slide">
467
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg">
468
+ </li>
469
+ <li class="swiper-slide">
470
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg">
471
+ </li>
472
+ <li class="swiper-slide">
473
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg">
474
+ </li>
475
+ <li class="swiper-slide">
476
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg">
477
+ </li>
478
+ <li class="swiper-slide">
479
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg">
480
+ </li>
481
+ <li class="swiper-slide">
482
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg">
483
+ </li>
484
+ </ul> <!-- END swiper-wrapper -->
485
+
486
+ </div> <!-- END swiper-container -->
487
+
488
+ <!-- Thumbs Slider (bottom) -->
489
+ <div id="thumbs_slider_1" class="swiper swiper-container thumbs-slider--bottom mt-1 mb-5">
490
+
491
+ <!-- Slides container -->
492
+ <ul class="swiper-wrapper">
493
+ <li class="swiper-slide">
494
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg">
495
+ </li>
496
+ <li class="swiper-slide">
497
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg">
498
+ </li>
499
+ <li class="swiper-slide">
500
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg">
501
+ </li>
502
+ <li class="swiper-slide">
503
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg">
504
+ </li>
505
+ <li class="swiper-slide">
506
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg">
507
+ </li>
508
+ <li class="swiper-slide">
509
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg">
510
+ </li>
511
+ </ul> <!-- END swiper-wrapper -->
512
+
513
+ </div> <!-- END swiper-container -->
514
+
515
+ <!-- Initialize Image Thumbs Slider (bottom) -->
516
+ <script>
517
+ $(function() {
518
+ // ---------------------------------------------------------------------------
519
+ // slider initializer
520
+ // ---------------------------------------------------------------------------
521
+ var dependencies_met_page_ready = setInterval (() => {
522
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
523
+
524
+ if (atticFinished) {
525
+
526
+ const thumbsSlider1 = new Swiper("#thumbs_slider_1", {
527
+ autoHeight: true,
528
+ direction: 'horizontal',
529
+ spaceBetween: 5,
530
+ slidesPerView: 3,
531
+ grabCursor: true,
532
+ freeMode: false,
533
+ watchSlidesProgress: true,
534
+ on: {
535
+ transitionStart: (swiper) => {
536
+ masterSlider1.slideTo(swiper.activeIndex);
537
+ }
538
+ },
539
+ });
540
+
541
+ const masterSlider1 = new Swiper("#master_slider_1", {
542
+ direction: 'horizontal',
543
+ thumbs: {
544
+ swiper: thumbsSlider1,
545
+ },
546
+ on: {
547
+ slideChangeTransitionStart: (swiper) => {
548
+ thumbsSlider1.slideTo(swiper.activeIndex);
549
+ }
550
+ },
551
+ });
552
+
553
+ clearInterval(dependencies_met_page_ready);
554
+ } // END pageVisible
555
+ }, 10); // END dependencies_met_page_ready
556
+ });
557
+ </script>
558
+ ++++
559
+
560
+ [role="mt-4"]
561
+ [[image_thumbs_silder_right]]
562
+ ==== Thumbs Slider (right) + Captions
563
+
564
+ A more *compact* version using image thumbs can defined by placing the thumb
565
+ images (slave slider) on the right of the master slider side-by-side. The will
566
+ reduce the size of the (master) slider, but all elements of the combined sliders
567
+ are in a *single row*.
568
+
569
+ ++++
570
+ <div class="carousel-title"> <i class="mdib mdib-view-carousel mdib-24px mr-2"></i> Thumbs Silder · Right + Captions</div>
571
+ <div class="container g-0 mb-5">
572
+ <div class="row gx-1">
573
+
574
+ <!-- BS Multi Slider (left) -->
575
+ <div class="col-md-9">
576
+ <div id="master_slider_2" class="swiper swiper-container swiper--multi gallery-slider">
577
+ <!-- Slides container -->
578
+ <ul class="swiper-wrapper">
579
+ <li class="swiper-slide">
580
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg">
581
+ <div class="caption">Image 1</div>
582
+ </li>
583
+ <li class="swiper-slide">
584
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg">
585
+ <div class="caption">Image 2</div>
586
+ </li>
587
+ <li class="swiper-slide">
588
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg">
589
+ <div class="caption">Image 3</div>
590
+ </li>
591
+ <li class="swiper-slide">
592
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg">
593
+ <div class="caption">Image 4</div>
594
+ </li>
595
+ <li class="swiper-slide">
596
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg">
597
+ <div class="caption">Image 5</div>
598
+ </li>
599
+ <li class="swiper-slide">
600
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg">
601
+ <div class="caption">Image 6</div>
602
+ </li>
603
+ </ul> <!-- END swiper-wrapper -->
604
+ </div> <!-- END swiper-container -->
605
+ </div> <!-- END col-md-9" -->
606
+
607
+ <!-- Thumbs Slider (right) -->
608
+ <div class="col-md-3">
609
+ <div id="thumbs_slider_2" class="swiper swiper-container swiper--multi thumbs-slider--right">
610
+ <!-- Slides container -->
611
+ <ul class="swiper-wrapper">
612
+ <li class="swiper-slide">
613
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg">
614
+ <div class="caption">Image 1</div>
615
+ </li>
616
+ <li class="swiper-slide">
617
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg">
618
+ <div class="caption">Image 2</div>
619
+ </li>
620
+ <li class="swiper-slide">
621
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg">
622
+ <div class="caption">Image 3</div>
623
+ </li>
624
+ <li class="swiper-slide">
625
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-4.jpg">
626
+ <div class="caption">Image 4</div>
627
+ </li>
628
+ <li class="swiper-slide">
629
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-5.jpg">
630
+ <div class="caption">Image 5</div>
631
+ </li>
632
+ <li class="swiper-slide">
633
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-6.jpg">
634
+ <div class="caption">Image 6</div>
635
+ </li>
636
+ </ul> <!-- END swiper-wrapper -->
637
+ </div> <!-- END swiper-container -->
638
+ </div> <!-- END col-md-3" -->
639
+
640
+ </div> <!-- END BS row -->
641
+ </div> <!-- END BS container -->
642
+
643
+ <!-- Initialize BS Multi Swiper -->
644
+ <script>
645
+ $(function() {
646
+ // ---------------------------------------------------------------------------
647
+ // slider initializer
648
+ // ---------------------------------------------------------------------------
649
+ var dependencies_met_page_ready = setInterval (() => {
650
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
651
+
652
+ if (atticFinished) {
653
+
654
+ // Initialize Thumb Swiper instance (right)
655
+ var thumbsSwiper2 = new Swiper('#thumbs_slider_2', {
656
+ direction: 'vertical',
657
+ spaceBetween: 5,
658
+ slidesPerView: 3,
659
+ grabCursor: true,
660
+ // centeredSlides: true,
661
+ // centeredSlidesBounds: true,
662
+ // watchOverflow: true,
663
+ // watchSlidesVisibility: true,
664
+ // watchSlidesProgress: true,
665
+ on: {
666
+ transitionStart: (swiper) => {
667
+ masterSwiper2.slideTo(swiper.activeIndex);
668
+ }
669
+ }
670
+ });
671
+
672
+ // Initialize Master Swiper instance (left)
673
+ var masterSwiper2 = new Swiper('#master_slider_2', {
674
+ direction: 'horizontal',
675
+ grabCursor: true,
676
+ // watchOverflow: true,
677
+ // watchSlidesVisibility: true,
678
+ // watchSlidesProgress: true,
679
+ // preventInteractionOnTransition: true,
680
+ effect: 'fade',
681
+ fadeEffect: {
682
+ crossFade: true
683
+ },
684
+ thumbs: {
685
+ swiper: thumbsSwiper2
686
+ },
687
+ on: {
688
+ slideChangeTransitionStart: (swiper) => {
689
+ thumbsSwiper2.slideTo(swiper.activeIndex);
690
+ },
691
+ click: (swiper, event) => {
692
+ console.log('Clicked on the slider, index: ', swiper.activeIndex);
693
+ }
694
+ }
695
+ });
696
+
697
+ clearInterval(dependencies_met_page_ready);
698
+ } // END pageVisible
699
+ }, 10); // END dependencies_met_page_ready
700
+ });
701
+ </script>
702
+ ++++
703
+
704
+
705
+ [role="mt-4"]
706
+ [[slider-videojs]]
707
+ === Video Slider
708
+
709
+ If only a *small* number of video sources should presented, the concept of
710
+ controller based slders using Thumb Elements provide a quite *space-saving*
711
+ way to do so.
712
+
713
+ The J1 template system uses VideoJS to enable *mixed* video sliders. VideoJS
714
+ for J1 supports VJS plugins for local Video like MP4 files or platforms like
715
+ YouTube, Vimeo, or Dailymotion to play video *sources* from *different*
716
+ providers.
717
+
718
+ ++++
719
+ <div class="carousel-title"> <i class="mdib mdib-view-carousel mdib-24px mr-2"></i> Video Slider · Mixed Sources + Captions</div>
720
+ <!-- Master Slider (top) -->
721
+ <div id="master_slider_3" class="swiper swiper-container master-slider">
722
+ <div class="swiper-wrapper">
723
+ <div class="swiper-slide swiper-no-swiping" data-slide-type="image">
724
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg" aria-label="Animals-1">
725
+ <div class="caption">Image 1</div>
726
+ </div>
727
+
728
+ <!-- div class="swiper-slide swiper-no-swiping" data-slide-type="video">
729
+ <video
730
+ id="peck_pocketed_video"
731
+ class="video-js vjs-theme-uno"
732
+ controls
733
+ width="640" height="360"
734
+ poster="/assets/video/poster/html5/peck_pocketed.jpg"
735
+ alt="title"
736
+ aria-label="title"
737
+ data-setup='{
738
+ "fluid" : true,
739
+ "sources": [{
740
+ "type": "video/mp4",
741
+ "src": "/assets/video//html5/peck_pocketed.mp4"
742
+ }],
743
+ "controlBar": {
744
+ "pictureInPictureToggle": false,
745
+ "skipButtons": {
746
+ "backward": 15,
747
+ "forward": 15
748
+ },
749
+ "volumePanel": {
750
+ "inline": false
751
+ }
752
+ }
753
+ }'
754
+ > </video>
755
+ </div -->
756
+
757
+ <div class="swiper-slide swiper-no-swiping" data-slide-type="video">
758
+ <video
759
+ id="peck_pocketed_video"
760
+ class="video-js vjs-theme-uno"
761
+ controls
762
+ width="640" height="360"
763
+ poster="//img.youtube.com/vi/1J2qz6B-PFY/maxresdefault.jpg"
764
+ data-setup='{
765
+ "fluid" : true,
766
+ "rel": 0,
767
+ "techOrder": [
768
+ "youtube", "html5"
769
+ ],
770
+ "sources": [{
771
+ "type": "video/youtube",
772
+ "src": "//youtube.com/watch?v=1J2qz6B-PFY"
773
+ }],
774
+ "controlBar": {
775
+ "pictureInPictureToggle": false,
776
+ "volumePanel": {
777
+ "inline": false
778
+ }
779
+ }
780
+ }'
781
+ >
782
+ </video>
783
+ <div class="caption">Roni Sagi & Rhythm · AGT 2024 (YouTube)</div>
784
+ </div>
785
+
786
+ <div class="swiper-slide swiper-no-swiping" data-slide-type="image">
787
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg" aria-label="Animals-2">
788
+ <div class="caption">Image 2</div>
789
+ </div>
790
+ <div class="swiper-slide swiper-no-swiping" data-slide-type="image">
791
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg" aria-label="Animals-3">
792
+ <div class="caption">Image 3</div>
793
+ </div>
794
+ </div> <!-- END swiper-wrapper -->
795
+
796
+ </div> <!-- END swiper-container -->
797
+
798
+ <!-- Thumbs Slider (bottom) -->
799
+ <div id="thumbs_slider_3" class="swiper swiper-container thumbs-slider thumbs-slider--bottom mt-1 mb-8">
800
+
801
+ <div class="swiper-wrapper">
802
+ <div class="swiper-slide">
803
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-1.jpg" aria-label="Animals-1">
804
+ <div class="caption">Image 1</div>
805
+ </div>
806
+ <div class="swiper-slide">
807
+ <!-- img src="/assets/video/poster/html5/peck_pocketed.jpg" aria-label="peck_pocketed" -->
808
+ <img src="//img.youtube.com/vi/1J2qz6B-PFY/maxresdefault.jpg">
809
+ <div class="caption">Roni Sagi & Rhythm · AGT 2024 (YouTube)</div>
810
+ </div>
811
+ <div class="swiper-slide">
812
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-2.jpg" aria-label="Animals-2">
813
+ <div class="caption">Image 2</div>
814
+ </div>
815
+ <div class="swiper-slide">
816
+ <img src="/assets/image/modules/masterslider/slider_4/ms-free-animals-3.jpg" aria-label="Animals-3">
817
+ </div>
818
+ </div> <!-- END swiper-wrapper -->
819
+
820
+ </div> <!-- END swiper-container -->
821
+
822
+ <script>
823
+ $(function() {
824
+
825
+ // ---------------------------------------------------------------------------
826
+ // slider initializer
827
+ // ---------------------------------------------------------------------------
828
+ var dependencies_met_page_ready = setInterval (() => {
829
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true : false;
830
+
831
+ if (atticFinished) {
832
+
833
+ const VIDEO_PLAYING_STATE = {
834
+ "PLAYING": "PLAYING",
835
+ "PAUSE": "PAUSE",
836
+ "ENDED": "ENDED"
837
+ };
838
+
839
+ var vjsPlayer;
840
+ var vjsOptions;
841
+ var piSkipButtons;
842
+
843
+ var vjsPlayerType = 'native';
844
+ var videoPlayStatus = VIDEO_PLAYING_STATE.PAUSE;
845
+
846
+ piSkipButtons = {
847
+ enabled: true,
848
+ backward: 30,
849
+ forward: 30,
850
+ backwardIndex: 0,
851
+ forwardIndex: 0,
852
+ surroundPlayButton: true
853
+ };
854
+
855
+ // Thumbs Slider (slave|bottom)
856
+ // -----------------------------------------------------------------------
857
+ const thumbsSlider3 = new Swiper("#thumbs_slider_3", {
858
+ direction: 'horizontal',
859
+ spaceBetween: 5,
860
+ slidesPerView: 3,
861
+ grabCursor: true,
862
+ watchSlidesProgress: true,
863
+ on: {
864
+ transitionStart: (swiper) => {
865
+ masterSlider3.slideTo(swiper.activeIndex);
866
+ }
867
+ }
868
+ });
869
+
870
+ // Initialize Master Slider
871
+ // -----------------------------------------------------------------------
872
+ // See: https://stackoverflow.com/questions/45468980/how-to-fix-event-conflicts-between-swiper-and-video-js
873
+ var masterSlider3 = new Swiper('#master_slider_3', {
874
+ autoHeight: true, // adapt height of the currently active slide.
875
+ direction: 'horizontal',
876
+ thumbs: {
877
+ swiper: thumbsSlider3,
878
+ },
879
+ on: {
880
+ afterInit: (swiper) => {
881
+ // do something
882
+ },
883
+ slideChangeTransitionStart: (swiper) => {
884
+ thumbsSlider3.slideTo(swiper.activeIndex);
885
+ },
886
+ slideChangeTransitionEnd: (swiper) => {
887
+ var currentSlide = $(swiper.slides[swiper.activeIndex]);
888
+ var currentSlideType = currentSlide.data('slide-type');
889
+ // in case user click next before video ended
890
+ if (videoPlayStatus === VIDEO_PLAYING_STATE.PLAYING) {
891
+ vjsPlayer.pause();
892
+ }
893
+
894
+ switch (currentSlideType) {
895
+ case 'image':
896
+ //runNext();
897
+ break;
898
+ case 'video':
899
+ // vjsPlayer.currentTime(0);
900
+ // vjsPlayer.play();
901
+ videoPlayStatus = VIDEO_PLAYING_STATE.PLAYING;
902
+ break;
903
+ default:
904
+ throw new Error('invalid slide type');
905
+ }
906
+ }
907
+ }
908
+ });
909
+
910
+ // vjsPlayer.on('ended', function() {
911
+ // next();
912
+ // });
913
+
914
+ // global function
915
+ // function prev() {
916
+ // swiper.slidePrev();
917
+ // }
918
+
919
+ // function next() {
920
+ // swiper.slideNext();
921
+ // }
922
+
923
+ // function runNext() {
924
+ // timeout = setTimeout(function () {
925
+ // next()
926
+ // }, waiting)
927
+ // }
928
+
929
+ // Initialize VideoJS player/s
930
+ // -----------------------------------------------------------------------
931
+ vjsOptions = {
932
+ plugins: {
933
+ skipButtons: {
934
+ backward: 30,
935
+ forward: 30,
936
+ backwardIndex: 0,
937
+ forwardIndex: 1
938
+ }
939
+ }
940
+ };
941
+ vjsPlayer = videojs('peck_pocketed_video', {});
942
+
943
+ // Add VJS plugins
944
+ // -----------------------------------------------------------------------
945
+ if (piSkipButtons.enabled) {
946
+ var backwardIndex = piSkipButtons.backwardIndex;
947
+ var forwardIndex = piSkipButtons.forwardIndex;
948
+
949
+ // property 'surroundPlayButton' takes precendence
950
+ //
951
+ if (piSkipButtons.surroundPlayButton) {
952
+ var backwardIndex = 0;
953
+ var forwardIndex = 1;
954
+ }
955
+
956
+ // plugin initialized with custom options
957
+ // See: https://videojs.com/guides/options/
958
+ vjsPlayer.skipButtons({
959
+ backwardIndex: backwardIndex,
960
+ forwardIndex: forwardIndex,
961
+ backward: piSkipButtons.backward,
962
+ forward: piSkipButtons.forward,
963
+ });
964
+ }
965
+
966
+ clearInterval(dependencies_met_page_ready);
967
+ } // END pageVisible
968
+ }, 10); // END dependencies_met_page_ready
969
+
970
+ });
971
+ </script>
972
+ ++++
973
+