j1-template 2024.0.3 → 2024.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (419) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +1 -1
  3. data/assets/data/banner.html +4 -4
  4. data/assets/data/cookieconsent.html +270 -175
  5. data/assets/data/galeries.html +10 -5
  6. data/assets/data/iso-639-language-codes-flags.json +179 -169
  7. data/assets/data/masonry.html +18 -12
  8. data/assets/data/translator.html +124 -0
  9. data/assets/themes/j1/adapter/js/comments.js +420 -418
  10. data/assets/themes/j1/adapter/js/cookieConsent.js +462 -451
  11. data/assets/themes/j1/adapter/js/gallery.js +11 -0
  12. data/assets/themes/j1/adapter/js/j1.js +32 -18
  13. data/assets/themes/j1/adapter/js/navigator.js +2 -0
  14. data/assets/themes/j1/adapter/js/translator.js +2 -0
  15. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +5 -14
  16. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  17. data/assets/themes/j1/core/fonts/fontawesome_5/LICENSE.txt +2 -2
  18. data/assets/themes/j1/core/js/template.js +283 -224
  19. data/assets/themes/j1/core/js/template.min.js +5 -5
  20. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  21. data/assets/themes/j1/modules/comments/hyvor/css/hyvor.css +2105 -0
  22. data/assets/themes/j1/modules/comments/hyvor/css/themes/uno.css +18 -0
  23. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +8 -2
  24. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +2 -1
  25. data/assets/themes/j1/modules/lightGallery/css/themes/uno/uno.css +34 -2
  26. data/assets/themes/j1/modules/lightGallery/css/themes/uno/uno.min.css +1 -1
  27. data/assets/themes/j1/modules/lightGallery/js/lightgallery.js +116 -101
  28. data/assets/themes/j1/modules/lightGallery/js/lightgallery.min.js +2 -1
  29. data/assets/themes/j1/modules/lightGallery/js/parser/webvtt/LICENSE.md +44 -0
  30. data/assets/themes/j1/modules/lightGallery/js/parser/webvtt/README.md +37 -0
  31. data/assets/themes/j1/modules/lightGallery/js/parser/webvtt/parser.js +890 -0
  32. data/assets/themes/j1/modules/lightGallery/js/parser/webvtt/parser.min.js +8 -0
  33. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +166 -34
  34. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.min.js +11 -3
  35. data/assets/themes/j1/modules/msDropdown/js/msDropdown.js +1 -1
  36. data/assets/themes/j1/modules/msDropdown/js/msDropdown.min.js +4 -1
  37. data/assets/themes/j1/modules/tiktocPlayer/js/player.min.js +18 -0
  38. data/assets/themes/j1/modules/translator/js/translator.js +91 -80
  39. data/assets/themes/j1/modules/translator/js/translator.min.js +2 -1
  40. data/assets/themes/j1/modules/videojs/css/plugins/zoom.css +1 -1
  41. data/assets/themes/j1/modules/videojs/css/themes/uno.css +19 -1
  42. data/assets/themes/j1/modules/videojs/css/themes/uno.min.css +1 -1
  43. data/assets/themes/j1/modules/videojs/js/plugins/zoom.js +2 -2
  44. data/assets/themes/j1/modules/videojs/js/plugins/zoom.min.js +2 -2
  45. data/lib/j1/version.rb +1 -1
  46. data/lib/starter_web/Gemfile +2 -2
  47. data/lib/starter_web/README.md +8 -8
  48. data/lib/starter_web/_config.yml +2 -1
  49. data/lib/starter_web/_data/blocks/banner.yml +1 -1
  50. data/lib/starter_web/_data/blocks/defaults/footer.yml +1 -1
  51. data/lib/starter_web/_data/blocks/footer.yml +1 -1
  52. data/lib/starter_web/_data/blocks/panel.yml +3 -3
  53. data/lib/starter_web/_data/layouts/collection.yml +6 -6
  54. data/lib/starter_web/_data/layouts/default.yml +6 -6
  55. data/lib/starter_web/_data/layouts/home.yml +2 -2
  56. data/lib/starter_web/_data/layouts/news_panel_posts.yml +6 -6
  57. data/lib/starter_web/_data/layouts/page.yml +6 -6
  58. data/lib/starter_web/_data/layouts/post.yml +6 -6
  59. data/lib/starter_web/_data/layouts/raw.yml +6 -6
  60. data/lib/starter_web/_data/modules/analytics.yml +1 -1
  61. data/lib/starter_web/_data/modules/carousel.yml +2 -2
  62. data/lib/starter_web/_data/modules/comments.yml +4 -1
  63. data/lib/starter_web/_data/modules/defaults/analytics.yml +1 -2
  64. data/lib/starter_web/_data/modules/defaults/comments.yml +0 -6
  65. data/lib/starter_web/_data/modules/defaults/cookieconsent.de.yml +104 -0
  66. data/lib/starter_web/_data/modules/defaults/cookieconsent.en.yml +104 -0
  67. data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +1 -8
  68. data/lib/starter_web/_data/modules/defaults/gallery.yml +1 -1
  69. data/lib/starter_web/_data/modules/defaults/lunr.yml +2 -2
  70. data/lib/starter_web/_data/modules/defaults/translator.en.yml +138 -0
  71. data/lib/starter_web/_data/modules/defaults/translator.yml +22 -20
  72. data/lib/starter_web/_data/modules/gallery.yml +430 -273
  73. data/lib/starter_web/_data/resources.yml +31 -4
  74. data/lib/starter_web/_data/templates/feed.xml +1 -1
  75. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  76. data/lib/starter_web/_plugins/asciidoctor/audio-block.rb +85 -0
  77. data/lib/starter_web/_plugins/asciidoctor/video-block.rb +1 -1
  78. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +34 -8
  79. data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
  80. data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
  81. data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
  82. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  83. data/lib/starter_web/assets/audio/sound-effects/ambient-piano.mp3 +0 -0
  84. data/lib/starter_web/assets/images/modules/attics/1920x1280/alexander-redl.jpg +0 -0
  85. data/lib/starter_web/assets/images/modules/attics/1920x1280/alina-grubnyak.jpg +0 -0
  86. data/lib/starter_web/assets/images/modules/attics/1920x1280/andrea-badino.jpg +0 -0
  87. data/lib/starter_web/assets/images/modules/attics/1920x1280/brad-neathery.jpg +0 -0
  88. data/lib/starter_web/assets/images/modules/attics/1920x1280/brigitta-schneiter.jpg +0 -0
  89. data/lib/starter_web/assets/images/modules/attics/1920x1280/bruno-figueiredo.jpg +0 -0
  90. data/lib/starter_web/assets/images/modules/attics/1920x1280/clem-onojeghuo.jpg +0 -0
  91. data/lib/starter_web/assets/images/modules/attics/1920x1280/crawford-jolly.jpg +0 -0
  92. data/lib/starter_web/assets/images/modules/attics/1920x1280/eleni-afiontzi.jpg +0 -0
  93. data/lib/starter_web/assets/images/modules/attics/1920x1280/fly-d.jpg +0 -0
  94. data/lib/starter_web/assets/images/modules/attics/1920x1280/guillaume-bolduc.jpg +0 -0
  95. data/lib/starter_web/assets/images/modules/attics/1920x1280/harpal-singh.jpg +0 -0
  96. data/lib/starter_web/assets/images/modules/attics/1920x1280/hayden-mills-2.jpg +0 -0
  97. data/lib/starter_web/assets/images/modules/attics/1920x1280/isaac-davis.jpg +0 -0
  98. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-1.jpg +0 -0
  99. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-2.jpg +0 -0
  100. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-3.jpg +0 -0
  101. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-starter-mockup-1.jpg +0 -0
  102. data/lib/starter_web/assets/images/modules/attics/1920x1280/john-schnobrich-2.jpg +0 -0
  103. data/lib/starter_web/assets/images/modules/attics/1920x1280/josep-martins.jpg +0 -0
  104. data/lib/starter_web/assets/images/modules/attics/1920x1280/josh-liu.jpg +0 -0
  105. data/lib/starter_web/assets/images/modules/attics/1920x1280/kelly-sikkemal.jpg +0 -0
  106. data/lib/starter_web/assets/images/modules/attics/1920x1280/kira-auf-der-heide.jpg +0 -0
  107. data/lib/starter_web/assets/images/modules/attics/1920x1280/kristopher-roller.jpg +0 -0
  108. data/lib/starter_web/assets/images/modules/attics/1920x1280/matthaeus.jpg +0 -0
  109. data/lib/starter_web/assets/images/modules/attics/1920x1280/melanie-deziel.jpg +0 -0
  110. data/lib/starter_web/assets/images/modules/attics/1920x1280/milad-fakurian.jpg +0 -0
  111. data/lib/starter_web/assets/images/modules/attics/1920x1280/mohammad-rahmani.jpg +0 -0
  112. data/lib/starter_web/assets/images/modules/attics/1920x1280/nasa.jpg +0 -0
  113. data/lib/starter_web/assets/images/modules/attics/1920x1280/quino-al-2.jpg +0 -0
  114. data/lib/starter_web/assets/images/modules/attics/1920x1280/recha-oktaviani.jpg +0 -0
  115. data/lib/starter_web/assets/images/modules/attics/admin-dashboard-bootstrap-1280x600.jpg +0 -0
  116. data/lib/starter_web/assets/images/modules/attics/building-blocks-1920x1280.jpg +0 -0
  117. data/lib/starter_web/assets/images/modules/attics/christina-1920x1280.jpg +0 -0
  118. data/lib/starter_web/assets/images/modules/attics/cookies-1920x1200.jpg +0 -0
  119. data/lib/starter_web/assets/images/modules/attics/franck-1920x1280.jpg +0 -0
  120. data/lib/starter_web/assets/images/modules/attics/giammarco-boscaro-1920x1280.jpg +0 -0
  121. data/lib/starter_web/assets/images/modules/attics/ideas-start-here-1920x1280-bw.jpg +0 -0
  122. data/lib/starter_web/assets/images/modules/attics/ideas-start-here-1920x1280.jpg +0 -0
  123. data/lib/starter_web/assets/images/modules/attics/jessica-ruscello-1920x1280.jpg +0 -0
  124. data/lib/starter_web/assets/images/modules/attics/joanna-kosinska-1920x1280.jpg +0 -0
  125. data/lib/starter_web/assets/images/modules/attics/katie-moum-1920x1280.jpg +0 -0
  126. data/lib/starter_web/assets/images/modules/attics/leon-1920x1280.jpg +0 -0
  127. data/lib/starter_web/assets/images/modules/attics/lianhao-1920x1280.jpg +0 -0
  128. data/lib/starter_web/assets/images/modules/attics/library-1920x1280.jpg +0 -0
  129. data/lib/starter_web/assets/images/modules/attics/lunr-1280x800.jpg +0 -0
  130. data/lib/starter_web/assets/images/modules/attics/machine-generator-1920x1280.jpg +0 -0
  131. data/lib/starter_web/assets/images/modules/attics/markus-krisetya-1920x1280.jpg +0 -0
  132. data/lib/starter_web/assets/images/modules/attics/markus-spiske-1920x1280.jpg +0 -0
  133. data/lib/starter_web/assets/images/modules/attics/markus-spiske4-1920x1280.jpg +0 -0
  134. data/lib/starter_web/assets/images/modules/attics/matthaeus-1920x1280.jpg +0 -0
  135. data/lib/starter_web/assets/images/modules/attics/matthew-dockery-1920x1280.jpg +0 -0
  136. data/lib/starter_web/assets/images/modules/attics/no-time-1920x1280.jpg +0 -0
  137. data/lib/starter_web/assets/images/modules/attics/rirri-1920x1280.jpg +0 -0
  138. data/lib/starter_web/assets/images/modules/attics/shubham-dhage-1920x1280.jpg +0 -0
  139. data/lib/starter_web/assets/images/modules/attics/shutterstock_sponsor-1920x1280.jpg +0 -0
  140. data/lib/starter_web/assets/images/modules/attics/sigmund-1920x1280.jpg +0 -0
  141. data/lib/starter_web/assets/images/modules/attics/szabo-viktor-1920x1280.jpg +0 -0
  142. data/lib/starter_web/assets/images/modules/attics/themes-1920x1280-bw.jpg +0 -0
  143. data/lib/starter_web/assets/images/modules/attics/tldr-1920x800.jpg +0 -0
  144. data/lib/starter_web/assets/images/modules/attics/vladislav-klapin-1920x1280.jpg +0 -0
  145. data/lib/starter_web/assets/images/modules/attics/yellow-cactus-1920x1280.jpg +0 -0
  146. data/lib/starter_web/assets/images/modules/carousel/cats/cat-1.jpg +0 -0
  147. data/lib/starter_web/assets/images/modules/carousel/cats/cat-2.jpg +0 -0
  148. data/lib/starter_web/assets/images/modules/carousel/cats/cat-3.jpg +0 -0
  149. data/lib/starter_web/assets/images/modules/carousel/cats/cat-4.jpg +0 -0
  150. data/lib/starter_web/assets/images/modules/carousel/cats/cat-5.jpg +0 -0
  151. data/lib/starter_web/assets/images/modules/carousel/cats/cat-6.jpg +0 -0
  152. data/lib/starter_web/assets/images/modules/carousel/cats/cat-7.jpg +0 -0
  153. data/lib/starter_web/assets/images/modules/carousel/cats/cat-8.jpg +0 -0
  154. data/lib/starter_web/assets/images/modules/carousel/mega_cities/andreas-brucker_b.jpg +0 -0
  155. data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  156. data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-2_b.jpg +0 -0
  157. data/lib/starter_web/assets/images/modules/carousel/mega_cities/luca-bravo_b.jpg +0 -0
  158. data/lib/starter_web/assets/images/modules/carousel/mega_cities/thomas-tucker_b.jpg +0 -0
  159. data/lib/starter_web/assets/images/modules/gallery/mega_cities/andreas-brucker_b.jpg +0 -0
  160. data/lib/starter_web/assets/images/modules/gallery/mega_cities/banter-snaps_b.jpg +0 -0
  161. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  162. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2-bw.jpg +0 -0
  163. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2_b.jpg +0 -0
  164. data/lib/starter_web/assets/images/modules/gallery/mega_cities/emmad-mazhari_b.jpg +0 -0
  165. data/lib/starter_web/assets/images/modules/gallery/mega_cities/ethan-brooke_b.jpg +0 -0
  166. data/lib/starter_web/assets/images/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
  167. data/lib/starter_web/assets/images/modules/gallery/mega_cities/gints-gailis_b.jpg +0 -0
  168. data/lib/starter_web/assets/images/modules/gallery/mega_cities/johan-mouchet_b.jpg +0 -0
  169. data/lib/starter_web/assets/images/modules/gallery/mega_cities/luca-bravo_b.jpg +0 -0
  170. data/lib/starter_web/assets/images/modules/gallery/mega_cities/steven-diaz_b.jpg +0 -0
  171. data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
  172. data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
  173. data/lib/starter_web/assets/images/modules/gallery/old_times/image_01.jpg +0 -0
  174. data/lib/starter_web/assets/images/modules/gallery/old_times/image_02.jpg +0 -0
  175. data/lib/starter_web/assets/images/modules/gallery/old_times/image_03.jpg +0 -0
  176. data/lib/starter_web/assets/images/modules/gallery/old_times/image_04.jpg +0 -0
  177. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-1.jpg +0 -0
  178. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-2.jpg +0 -0
  179. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-3.jpg +0 -0
  180. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-4.jpg +0 -0
  181. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-5.jpg +0 -0
  182. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-6.jpg +0 -0
  183. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-7.jpg +0 -0
  184. data/lib/starter_web/assets/images/modules/masterslider/slider_1/cat-8.jpg +0 -0
  185. data/lib/starter_web/assets/images/modules/masterslider/slider_10/panorama-bg-slide1.jpg +0 -0
  186. data/lib/starter_web/assets/images/modules/masterslider/slider_10/panorama-bg-slide2.jpg +0 -0
  187. data/lib/starter_web/assets/images/modules/masterslider/slider_2/andreas-brucker.jpg +0 -0
  188. data/lib/starter_web/assets/images/modules/masterslider/slider_2/denys-nevozhai-1.jpg +0 -0
  189. data/lib/starter_web/assets/images/modules/masterslider/slider_2/denys-nevozhai-2.jpg +0 -0
  190. data/lib/starter_web/assets/images/modules/masterslider/slider_2/luca-bravo.jpg +0 -0
  191. data/lib/starter_web/assets/images/modules/masterslider/slider_2/thomas-tucker.jpg +0 -0
  192. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-family-2.jpg +0 -0
  193. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-hamburger.jpg +0 -0
  194. data/lib/starter_web/assets/images/modules/masterslider/slider_3/ms-free-food-restaurant.jpg +0 -0
  195. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-1-100x80.jpg +0 -0
  196. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-1.jpg +0 -0
  197. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-2-100x80.jpg +0 -0
  198. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-2.jpg +0 -0
  199. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-3-100x80.jpg +0 -0
  200. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-3.jpg +0 -0
  201. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-4-100x80.jpg +0 -0
  202. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-4.jpg +0 -0
  203. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-5-100x80.jpg +0 -0
  204. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-5.jpg +0 -0
  205. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-6-100x80.jpg +0 -0
  206. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-6.jpg +0 -0
  207. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-7-100x80.jpg +0 -0
  208. data/lib/starter_web/assets/images/modules/masterslider/slider_4/ms-free-animals-7.jpg +0 -0
  209. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-140x80.jpg +0 -0
  210. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-2-140x80.jpg +0 -0
  211. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-2.jpg +0 -0
  212. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-3-140x80.jpg +0 -0
  213. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family-3.jpg +0 -0
  214. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-family.jpg +0 -0
  215. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-hamburger-140x80.jpg +0 -0
  216. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-hamburger.jpg +0 -0
  217. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-pizza-140x80.jpg +0 -0
  218. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-pizza.jpg +0 -0
  219. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-table-140x80.jpg +0 -0
  220. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-table.jpg +0 -0
  221. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-woman-hand-140x80.jpg +0 -0
  222. data/lib/starter_web/assets/images/modules/masterslider/slider_5/ms-free-food-woman-hand.jpg +0 -0
  223. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876385555_74a0d7d7ee_b.jpg +0 -0
  224. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876387431_d86867a3d9_b.jpg +0 -0
  225. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876388511_d618d53455_b.jpg +0 -0
  226. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876389463_db27a377e1_b.jpg +0 -0
  227. data/lib/starter_web/assets/images/modules/masterslider/slider_6_7/6876390339_2e4dd9dbbb_b.jpg +0 -0
  228. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-1.jpg +0 -0
  229. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-2.jpg +0 -0
  230. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider-5-img-3.jpg +0 -0
  231. data/lib/starter_web/assets/images/modules/masterslider/slider_8/postslider6-bg-slide2-1024x622.jpg +0 -0
  232. data/lib/starter_web/assets/images/modules/masterslider/slider_9/1-2.jpg +0 -0
  233. data/lib/starter_web/assets/images/modules/masterslider/slider_9/5-2.jpg +0 -0
  234. data/lib/starter_web/assets/images/modules/masterslider/slider_9/6-2.jpg +0 -0
  235. data/lib/starter_web/assets/images/modules/masterslider/slider_9/6-3.jpg +0 -0
  236. data/lib/starter_web/assets/images/modules/masterslider/slider_9/8-1.jpg +0 -0
  237. data/lib/starter_web/assets/images/modules/masterslider/slider_9/8.jpg +0 -0
  238. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-1.jpg +0 -0
  239. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-2.jpg +0 -0
  240. data/lib/starter_web/assets/images/modules/masterslider/wp-examples/ms-free-business-3.jpg +0 -0
  241. data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
  242. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.jpg +0 -0
  243. data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
  244. data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
  245. data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
  246. data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
  247. data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
  248. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
  249. data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
  250. data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
  251. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  252. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  253. data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
  254. data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
  255. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  256. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  257. data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
  258. data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
  259. data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
  260. data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
  261. data/lib/starter_web/assets/images/pages/html_validator/appdevtools-html-validator.jpg +0 -0
  262. data/lib/starter_web/assets/images/pages/html_validator/freeformatter-html-validator.jpg +0 -0
  263. data/lib/starter_web/assets/images/pages/html_validator/w3c-nu-checker.jpg +0 -0
  264. data/lib/starter_web/assets/images/pages/html_validator/w3c-validator.jpg +0 -0
  265. data/lib/starter_web/assets/images/pages/panels/florian-olivo-1920x800.jpg +0 -0
  266. data/lib/starter_web/assets/images/pages/panels/modules-apps-1920x800.jpg +0 -0
  267. data/lib/starter_web/assets/images/pages/panels/no-time-1920x800.jpg +0 -0
  268. data/lib/starter_web/assets/images/pages/panels/responsive-text-1920x800.jpg +0 -0
  269. data/lib/starter_web/assets/images/pages/panels/the-place-1920x800.jpg +0 -0
  270. data/lib/starter_web/assets/images/pages/posts/adrien-olichon-1920x1280.jpg +0 -0
  271. data/lib/starter_web/assets/images/pages/posts/alejandro-barba-1920x1280.jpg +0 -0
  272. data/lib/starter_web/assets/images/pages/posts/andre-francois-mckenzie-1920x1280.jpg +0 -0
  273. data/lib/starter_web/assets/images/pages/posts/andreas-steger-1920x1280.jpg +0 -0
  274. data/lib/starter_web/assets/images/pages/posts/ansgar-scheffold-1920x1280.jpg +0 -0
  275. data/lib/starter_web/assets/images/pages/posts/ben-white-1920x1280.jpg +0 -0
  276. data/lib/starter_web/assets/images/pages/posts/craig-sybert-1920x1280.jpg +0 -0
  277. data/lib/starter_web/assets/images/pages/posts/danielle-cerullo-1920x1280.jpg +0 -0
  278. data/lib/starter_web/assets/images/pages/posts/deb-dowd-1920x1280.jpg +0 -0
  279. data/lib/starter_web/assets/images/pages/posts/halgatewood-1920x1280.jpg +0 -0
  280. data/lib/starter_web/assets/images/pages/posts/hans-eiskonen-1920x1280.jpg +0 -0
  281. data/lib/starter_web/assets/images/pages/posts/ian-barsby-1920x1280.jpg +0 -0
  282. data/lib/starter_web/assets/images/pages/posts/ivan-aleksic-1920x1280.jpg +0 -0
  283. data/lib/starter_web/assets/images/pages/posts/markus-krisetya-1920x1280.jpg +0 -0
  284. data/lib/starter_web/assets/images/pages/posts/markus-spiske-6-1920x1280.jpg +0 -0
  285. data/lib/starter_web/assets/images/pages/posts/markus-winkler-1920x1280.jpg +0 -0
  286. data/lib/starter_web/assets/images/pages/posts/markus-winkler-2-1920x1280.jpg +0 -0
  287. data/lib/starter_web/assets/images/pages/posts/michelle-cassar-1920x1280.jpg +0 -0
  288. data/lib/starter_web/assets/images/pages/posts/mika-baumeister-1920x1280.jpg +0 -0
  289. data/lib/starter_web/assets/images/pages/posts/science-in-hd-1920x1280.jpg +0 -0
  290. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-image-1.jpg +0 -0
  291. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-image-2.jpg +0 -0
  292. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-image-3.jpg +0 -0
  293. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-thumb-1.jpg +0 -0
  294. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-thumb-2.jpg +0 -0
  295. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/lightbox-thumb-3.jpg +0 -0
  296. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_icon.jpg +0 -0
  297. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_input.jpg +0 -0
  298. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_results.jpg +0 -0
  299. data/lib/starter_web/assets/images/pages/roundtrip/bootstrap-1920x1000-bw.jpg +0 -0
  300. data/lib/starter_web/assets/images/pages/roundtrip/cards-1920x1280-bw.jpg +0 -0
  301. data/lib/starter_web/assets/images/pages/roundtrip/emojies-1920x1280-bw.jpg +0 -0
  302. data/lib/starter_web/assets/images/pages/roundtrip/icon-fonts-1920x1280-bw.jpg +0 -0
  303. data/lib/starter_web/assets/images/pages/roundtrip/images-1920x1280-bw.jpg +0 -0
  304. data/lib/starter_web/assets/images/pages/roundtrip/puzzle-1920x1280-bw.jpg +0 -0
  305. data/lib/starter_web/assets/images/pages/roundtrip/tables-1920x1280-bw.jpg +0 -0
  306. data/lib/starter_web/assets/images/pages/roundtrip/themes-1920x1280.jpg +0 -0
  307. data/lib/starter_web/assets/images/pages/roundtrip/typography-1920x1280-bw.jpg +0 -0
  308. data/lib/starter_web/assets/images/pages/skeleton/annie-spratt-1920x1280.jpg +0 -0
  309. data/lib/starter_web/assets/images/pages/skeleton/antonino-visalli-1920x1280.jpg +0 -0
  310. data/lib/starter_web/assets/images/pages/skeleton/humble-lamb-1920x1280.jpg +0 -0
  311. data/lib/starter_web/assets/images/pages/skeleton/library-1920x1280.jpg +0 -0
  312. data/lib/starter_web/assets/images/pages/skeleton/romain-vignes-1920x1280.jpg +0 -0
  313. data/lib/starter_web/assets/images/pages/skeleton/sigmund-1920x1280.jpg +0 -0
  314. data/lib/starter_web/assets/videos/gallery/gianna_1.jpg +0 -0
  315. data/lib/starter_web/assets/videos/gallery/gianna_2.jpg +0 -0
  316. data/lib/starter_web/assets/videos/gallery/gianna_3.jpg +0 -0
  317. data/lib/starter_web/assets/videos/gallery/html5/video2.mp4 +0 -0
  318. data/lib/starter_web/assets/videos/gallery/kick-it-old-school-poster.jpg +0 -0
  319. data/lib/starter_web/assets/videos/gallery/solo-sex.jpg +0 -0
  320. data/lib/starter_web/assets/videos/gallery/stay-colorful-poster.jpg +0 -0
  321. data/lib/starter_web/assets/videos/gallery/video1-poster.jpg +0 -0
  322. data/lib/starter_web/assets/videos/gallery/video2-poster.jpg +0 -0
  323. data/lib/starter_web/assets/videos/gallery/video_adele-poster.jpg +0 -0
  324. data/lib/starter_web/assets/videos/gallery/video_adele_last_carpool_caraoke_poster.jpg +0 -0
  325. data/lib/starter_web/assets/videos/gallery/video_gaga-poster.jpg +0 -0
  326. data/lib/starter_web/assets/videos/gallery/video_gwen-poster.jpg +0 -0
  327. data/lib/starter_web/assets/videos/gallery/video_james_carpool_caraoke_poster.jpg +0 -0
  328. data/lib/starter_web/assets/videos/gallery/video_michelle-poster.jpg +0 -0
  329. data/lib/starter_web/assets/videos/gallery/videojs-poster.png +0 -0
  330. data/lib/starter_web/assets/videos/gallery/voice_kids_nl_2021/video_poster.jpg +0 -0
  331. data/lib/starter_web/assets/videos/vtt/captions/!readme +7 -0
  332. data/lib/starter_web/assets/videos/vtt/captions/video1.vtt +31 -0
  333. data/lib/starter_web/assets/videos/vtt/chapters/!readme +5 -0
  334. data/lib/starter_web/assets/videos/vtt/chapters/video1.vtt +23 -0
  335. data/lib/starter_web/assets/videos/vtt/descriptions/!readme +7 -0
  336. data/lib/starter_web/assets/videos/vtt/subtitles/!readme +6 -0
  337. data/lib/starter_web/collections/posts/public/featured/_posts/2023-10-18-url-types.adoc +17 -14
  338. data/lib/starter_web/index.html +2 -3
  339. data/lib/starter_web/package.json +2 -34
  340. data/lib/starter_web/pages/public/features/general.adoc +4 -4
  341. data/lib/starter_web/pages/public/features/template.adoc +15 -14
  342. data/lib/starter_web/pages/public/learn/bookshelf/jekyll_collections.adoc +3 -3
  343. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +4 -3
  344. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/100_gistblock.asciidoc +4 -3
  345. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_bootstrap.asciidoc +1 -1
  346. data/lib/starter_web/pages/public/learn/roundtrip/asciidoc_extensions.adoc +68 -47
  347. data/lib/starter_web/pages/public/learn/roundtrip/bootstrap_themes.adoc +21 -30
  348. data/lib/starter_web/pages/public/learn/roundtrip/highlghter_rouge.adoc +19 -14
  349. data/lib/starter_web/pages/public/learn/roundtrip/icon_fonts.adoc +58 -54
  350. data/lib/starter_web/pages/public/learn/roundtrip/lunr_search.adoc +43 -34
  351. data/lib/starter_web/pages/public/learn/roundtrip/modal_extentions.adoc +17 -18
  352. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +4 -11
  353. data/lib/starter_web/pages/public/learn/roundtrip/present_videos.adoc +44 -14
  354. data/lib/starter_web/pages/public/learn/roundtrip/responsive_tables.adoc +29 -192
  355. data/lib/starter_web/pages/public/learn/roundtrip/typography.adoc +33 -29
  356. data/lib/starter_web/pages/public/learn/where_to_go.adoc +5 -2
  357. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +11 -4
  358. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +19 -14
  359. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +17 -12
  360. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +12 -6
  361. data/lib/starter_web/pages/public/panels/intro_panel/_includes/attributes.asciidoc +4 -3
  362. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-image-1.jpg +0 -0
  363. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-image-2.jpg +0 -0
  364. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-image-3.jpg +0 -0
  365. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-thumb-1.jpg +0 -0
  366. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-thumb-2.jpg +0 -0
  367. data/lib/starter_web/pages/public/panels/roundtrip/100_present_images/lightbox-thumb-3.jpg +0 -0
  368. data/lib/starter_web/pages/public/panels/roundtrip/410_bs_modals_extentions/avatar.jpg +0 -0
  369. data/lib/starter_web/pages/public/panels/roundtrip/410_bs_modals_extentions/marc.jpg +0 -0
  370. data/lib/starter_web/pages/public/panels/roundtrip/600_quicksearch/quicksearch_icon.jpg +0 -0
  371. data/lib/starter_web/pages/public/panels/roundtrip/600_quicksearch/quicksearch_input.jpg +0 -0
  372. data/lib/starter_web/pages/public/panels/roundtrip/600_quicksearch/quicksearch_results.jpg +0 -0
  373. data/lib/starter_web/pages/public/panels/roundtrip/bootstrap-1920x1000-bw.jpg +0 -0
  374. data/lib/starter_web/pages/public/panels/roundtrip/cards-1920x1280-bw.jpg +0 -0
  375. data/lib/starter_web/pages/public/panels/roundtrip/emojies-1920x1280-bw.jpg +0 -0
  376. data/lib/starter_web/pages/public/panels/roundtrip/icon-fonts-1920x1280-bw.jpg +0 -0
  377. data/lib/starter_web/pages/public/panels/roundtrip/images-1920x1280-bw.jpg +0 -0
  378. data/lib/starter_web/pages/public/panels/roundtrip/puzzle-1920x1280-bw.jpg +0 -0
  379. data/lib/starter_web/pages/public/panels/roundtrip/tables-1920x1280-bw.jpg +0 -0
  380. data/lib/starter_web/pages/public/panels/roundtrip/themes-1920x1280.jpg +0 -0
  381. data/lib/starter_web/pages/public/panels/roundtrip/typography-1920x1280-bw.jpg +0 -0
  382. metadata +53 -39
  383. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-autoplay.css +0 -67
  384. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-comments.css +0 -157
  385. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-fullscreen.css +0 -32
  386. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-medium-zoom.css +0 -40
  387. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-pager.css +0 -115
  388. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-rotate.css +0 -74
  389. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-share.css +0 -168
  390. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-thumbnail.css +0 -133
  391. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-video.css +0 -169
  392. data/assets/themes/j1/modules/lightGallery/css/plugins/lg-zoom.css +0 -141
  393. data/lib/starter_web/assets/images/modules/attics/1920x1280/core_web_vitals_best.png +0 -0
  394. data/lib/starter_web/assets/images/modules/gallery/old_times/colored/image_01.jpg +0 -0
  395. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_icon-800x200.jpg +0 -0
  396. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_input-800x200.jpg +0 -0
  397. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_results_jekyll-.jpg +0 -0
  398. data/lib/starter_web/assets/images/pages/roundtrip/600_quicksearch/quicksearch_results_jekyll.jpg +0 -0
  399. data/lib/starter_web/assets/images/pages/roundtrip/themes-menu-1280x800.jpg +0 -0
  400. data/lib/starter_web/assets/videos/gallery/_video_james_carpool_caraoke_poster.jpg +0 -0
  401. data/lib/starter_web/assets/videos/gallery/html5/video1-poster.jpg +0 -0
  402. data/lib/starter_web/assets/videos/gallery/html5/video1.subtitles.vtt +0 -39
  403. data/lib/starter_web/assets/videos/gallery/html5/video2-poster.jpg +0 -0
  404. data/lib/starter_web/assets/videos/gallery/html5/303/237video2-poster.jpg +0 -0
  405. data/lib/starter_web/assets/videos/gallery/nye-party-shop-poster.jpg +0 -0
  406. data/lib/starter_web/assets/videos/gallery/video1-poster.1920..jpg +0 -0
  407. data/lib/starter_web/assets/videos/gallery/video1-thumb.jpg +0 -0
  408. data/lib/starter_web/assets/videos/gallery/video2-thumb.jpg +0 -0
  409. data/lib/starter_web/assets/videos/gallery/video_adele_last_carpool_caraoke_poster.1920.jpg +0 -0
  410. data/lib/starter_web/assets/videos/gallery/video_james_carpool_caraoke.1920.jpg +0 -0
  411. data/lib/starter_web/pages/public/tools/previewer/iframer_documents/iframe.content.html +0 -51
  412. data/lib/starter_web/pages/public/tools/previewer/iframer_documents/iframe.docsearch.info.html +0 -84
  413. data/lib/starter_web/pages/public/tools/previewer/preview_docsearch.adoc +0 -92
  414. data/lib/starter_web/pages/public/tools/previewer/preview_iframer.adoc +0 -106
  415. /data/lib/starter_web/_data/layouts/custom/{readme → !readme} +0 -0
  416. /data/lib/starter_web/_includes/custom/static/{readme → !readme} +0 -0
  417. /data/lib/starter_web/_includes/custom/templates/{readme → !readme} +0 -0
  418. /data/lib/starter_web/assets/videos/{tiktok → headers/tiktok}/einhorn.jpg +0 -0
  419. /data/lib/starter_web/assets/videos/{tiktok → headers/tiktok}/waluschka.jpg +0 -0
@@ -0,0 +1,890 @@
1
+ // https://github.com/w3c/webvtt.js
2
+ //
3
+ // Any copyright is dedicated to the Public Domain.
4
+ // http://creativecommons.org/publicdomain/zero/1.0/
5
+
6
+ // Not intended to be fast, but if you can make it faster, please help out!
7
+
8
+ (function () {
9
+ var defaultCueSettings = {
10
+ direction:"horizontal",
11
+ snapToLines:true,
12
+ linePosition:"auto",
13
+ lineAlign:"start",
14
+ textPosition:"auto",
15
+ positionAlign:"auto",
16
+ size:100,
17
+ alignment:"center",
18
+ };
19
+
20
+ var WebVTTParser = function(entities) {
21
+ if (!entities) {
22
+ entities = {
23
+ "&amp": "&",
24
+ "&lt": "<",
25
+ "&gt": ">",
26
+ "&lrm": "\u200e",
27
+ "&rlm": "\u200f",
28
+ "&nbsp": "\u00A0"
29
+ }
30
+ }
31
+ this.entities = entities
32
+ this.parse = function(input, mode) {
33
+ // global search and replace for \0
34
+ input = input.replace(/\0/g, '\uFFFD');
35
+ var NEWLINE = /\r\n|\r|\n/,
36
+ startTime = Date.now(),
37
+ linePos = 0,
38
+ lines = input.split(NEWLINE),
39
+ alreadyCollected = false,
40
+ styles = [],
41
+ cues = [],
42
+ errors = []
43
+ function err(message, col) {
44
+ errors.push({message:message, line:linePos+1, col:col})
45
+ }
46
+
47
+ var line = lines[linePos],
48
+ lineLength = line.length,
49
+ signature = "WEBVTT",
50
+ bom = 0,
51
+ signature_length = signature.length
52
+
53
+ /* Byte order mark */
54
+ if (line[0] === "\ufeff") {
55
+ bom = 1
56
+ signature_length += 1
57
+ }
58
+ /* SIGNATURE */
59
+ if (
60
+ lineLength < signature_length ||
61
+ line.indexOf(signature) !== 0+bom ||
62
+ lineLength > signature_length &&
63
+ line[signature_length] !== " " &&
64
+ line[signature_length] !== "\t"
65
+ ) {
66
+ err("No valid signature. (File needs to start with \"WEBVTT\".)")
67
+ }
68
+
69
+ linePos++
70
+
71
+ /* HEADER */
72
+ while(lines[linePos] != "" && lines[linePos] != undefined) {
73
+ err("No blank line after the signature.")
74
+ if(lines[linePos].indexOf("-->") != -1) {
75
+ alreadyCollected = true
76
+ break
77
+ }
78
+ linePos++
79
+ }
80
+
81
+ /* CUE LOOP */
82
+ while(lines[linePos] != undefined) {
83
+ var cue
84
+ while(!alreadyCollected && lines[linePos] == "") {
85
+ linePos++
86
+ }
87
+ if(!alreadyCollected && lines[linePos] == undefined)
88
+ break
89
+
90
+ /* CUE CREATION */
91
+ cue = Object.assign({}, defaultCueSettings, {
92
+ id:"",
93
+ startTime:0,
94
+ endTime:0,
95
+ pauseOnExit:false,
96
+ direction:"horizontal",
97
+ snapToLines:true,
98
+ linePosition:"auto",
99
+ lineAlign:"start",
100
+ textPosition:"auto",
101
+ positionAlign:"auto",
102
+ size:100,
103
+ alignment:"center",
104
+ text:"",
105
+ tree:null
106
+ })
107
+
108
+ var parseTimings = true
109
+
110
+ if(lines[linePos].indexOf("-->") == -1) {
111
+ cue.id = lines[linePos]
112
+
113
+ /* COMMENTS
114
+ Not part of the specification's parser as these would just be ignored. However,
115
+ we want them to be conforming and not get "Cue identifier cannot be standalone".
116
+ */
117
+ if(/^NOTE($|[ \t])/.test(cue.id)) { // .startsWith fails in Chrome
118
+ linePos++
119
+ while(lines[linePos] != "" && lines[linePos] != undefined) {
120
+ if(lines[linePos].indexOf("-->") != -1)
121
+ err("Cannot have timestamp in a comment.")
122
+ linePos++
123
+ }
124
+ continue
125
+ }
126
+
127
+ /* STYLES */
128
+ if(/^STYLE($|[ \t])/.test(cue.id)) {
129
+ var style = []
130
+ var invalid = false
131
+ linePos++
132
+ while(lines[linePos] != "" && lines[linePos] != undefined) {
133
+ if(lines[linePos].indexOf("-->") != -1) {
134
+ err("Cannot have timestamp in a style block.")
135
+ invalid = true
136
+ }
137
+ style.push(lines[linePos])
138
+ linePos++
139
+ }
140
+ if(cues.length) {
141
+ err("Style blocks cannot appear after the first cue.")
142
+ continue
143
+ }
144
+ if (!invalid) {
145
+ styles.push(style.join('\n'))
146
+ }
147
+ continue
148
+ }
149
+
150
+ linePos++
151
+
152
+ if(lines[linePos] == "" || lines[linePos] == undefined) {
153
+ err("Cue identifier cannot be standalone.")
154
+ continue
155
+ }
156
+
157
+ if(lines[linePos].indexOf("-->") == -1) {
158
+ parseTimings = false
159
+ err("Cue identifier needs to be followed by timestamp.")
160
+ continue
161
+ }
162
+ }
163
+
164
+ /* TIMINGS */
165
+ alreadyCollected = false
166
+ var timings = new WebVTTCueTimingsAndSettingsParser(lines[linePos], err)
167
+ var previousCueStart = 0
168
+ if(cues.length > 0) {
169
+ previousCueStart = cues[cues.length-1].startTime
170
+ }
171
+ if(parseTimings && !timings.parse(cue, previousCueStart)) {
172
+ /* BAD CUE */
173
+
174
+ cue = null
175
+ linePos++
176
+
177
+ /* BAD CUE LOOP */
178
+ while(lines[linePos] != "" && lines[linePos] != undefined) {
179
+ if(lines[linePos].indexOf("-->") != -1) {
180
+ alreadyCollected = true
181
+ break
182
+ }
183
+ linePos++
184
+ }
185
+ continue
186
+ }
187
+ linePos++
188
+
189
+ /* CUE TEXT LOOP */
190
+ while(lines[linePos] != "" && lines[linePos] != undefined) {
191
+ if(lines[linePos].indexOf("-->") != -1) {
192
+ err("Blank line missing before cue.")
193
+ alreadyCollected = true
194
+ break
195
+ }
196
+ if(cue.text != "")
197
+ cue.text += "\n"
198
+ cue.text += lines[linePos]
199
+ linePos++
200
+ }
201
+
202
+ /* CUE TEXT PROCESSING */
203
+ var cuetextparser = new WebVTTCueTextParser(cue.text, err, mode, entities)
204
+ cue.tree = cuetextparser.parse(cue.startTime, cue.endTime)
205
+ cues.push(cue)
206
+ }
207
+ cues.sort(function(a, b) {
208
+ if (a.startTime < b.startTime)
209
+ return -1
210
+ if (a.startTime > b.startTime)
211
+ return 1
212
+ if (a.endTime > b.endTime)
213
+ return -1
214
+ if (a.endTime < b.endTime)
215
+ return 1
216
+ return 0
217
+ })
218
+ /* END */
219
+ return {cues:cues, errors:errors, time:Date.now()-startTime, styles: styles}
220
+ }
221
+ }
222
+
223
+ var WebVTTCueTimingsAndSettingsParser = function(line, errorHandler) {
224
+ var SPACE = /[\u0020\t\f]/,
225
+ NOSPACE = /[^\u0020\t\f]/,
226
+ line = line,
227
+ pos = 0,
228
+ err = function(message) {
229
+ errorHandler(message, pos+1)
230
+ },
231
+ spaceBeforeSetting = true
232
+ function skip(pattern) {
233
+ while(
234
+ line[pos] != undefined &&
235
+ pattern.test(line[pos])
236
+ ) {
237
+ pos++
238
+ }
239
+ }
240
+ function collect(pattern) {
241
+ var str = ""
242
+ while(
243
+ line[pos] != undefined &&
244
+ pattern.test(line[pos])
245
+ ) {
246
+ str += line[pos]
247
+ pos++
248
+ }
249
+ return str
250
+ }
251
+ /* http://dev.w3.org/html5/webvtt/#collect-a-webvtt-timestamp */
252
+ function timestamp() {
253
+ var units = "minutes",
254
+ val1,
255
+ val2,
256
+ val3,
257
+ val4
258
+ // 3
259
+ if(line[pos] == undefined) {
260
+ err("No timestamp found.")
261
+ return
262
+ }
263
+ // 4
264
+ if(!/\d/.test(line[pos])) {
265
+ err("Timestamp must start with a character in the range 0-9.")
266
+ return
267
+ }
268
+ // 5-7
269
+ val1 = collect(/\d/)
270
+ if(val1.length > 2 || parseInt(val1, 10) > 59) {
271
+ units = "hours"
272
+ }
273
+ // 8
274
+ if(line[pos] != ":") {
275
+ err("No time unit separator found.")
276
+ return
277
+ }
278
+ pos++
279
+ // 9-11
280
+ val2 = collect(/\d/)
281
+ if(val2.length != 2) {
282
+ err("Must be exactly two digits.")
283
+ return
284
+ }
285
+ // 12
286
+ if(units == "hours" || line[pos] == ":") {
287
+ if(line[pos] != ":") {
288
+ err("No seconds found or minutes is greater than 59.")
289
+ return
290
+ }
291
+ pos++
292
+ val3 = collect(/\d/)
293
+ if(val3.length != 2) {
294
+ err("Must be exactly two digits.")
295
+ return
296
+ }
297
+ } else {
298
+ if (val1.length != 2) {
299
+ err("Must be exactly two digits.")
300
+ return
301
+ }
302
+ val3 = val2
303
+ val2 = val1
304
+ val1 = "0"
305
+ }
306
+ // 13
307
+ if(line[pos] != ".") {
308
+ err("No decimal separator (\".\") found.")
309
+ return
310
+ }
311
+ pos++
312
+ // 14-16
313
+ val4 = collect(/\d/)
314
+ if(val4.length != 3) {
315
+ err("Milliseconds must be given in three digits.")
316
+ return
317
+ }
318
+ // 17
319
+ if(parseInt(val2, 10) > 59) {
320
+ err("You cannot have more than 59 minutes.")
321
+ return
322
+ }
323
+ if(parseInt(val3, 10) > 59) {
324
+ err("You cannot have more than 59 seconds.")
325
+ return
326
+ }
327
+ return parseInt(val1, 10) * 60 * 60 + parseInt(val2, 10) * 60 + parseInt(val3, 10) + parseInt(val4, 10) / 1000
328
+ }
329
+
330
+ /* http://dev.w3.org/html5/webvtt/#parse-the-webvtt-settings */
331
+ function parseSettings(input, cue) {
332
+ var settings = input.split(SPACE),
333
+ seen = []
334
+ for(var i=0; i < settings.length; i++) {
335
+ if(settings[i] == "")
336
+ continue
337
+
338
+ var index = settings[i].indexOf(':'),
339
+ setting = settings[i].slice(0, index),
340
+ value = settings[i].slice(index + 1)
341
+
342
+ if(seen.indexOf(setting) != -1) {
343
+ err("Duplicate setting.")
344
+ }
345
+ seen.push(setting)
346
+
347
+ if(value == "") {
348
+ err("No value for setting defined.")
349
+ return
350
+ }
351
+
352
+ if(setting == "vertical") { // writing direction
353
+ if(value != "rl" && value != "lr") {
354
+ err("Writing direction can only be set to 'rl' or 'rl'.")
355
+ continue
356
+ }
357
+ cue.direction = value
358
+ } else if(setting == "line") { // line position and optionally line alignment
359
+ if (/,/.test(value)) {
360
+ var comp = value.split(',')
361
+ value = comp[0]
362
+ var lineAlign = comp[1]
363
+ }
364
+ if(!/^[-\d](\d*)(\.\d+)?%?$/.test(value)) {
365
+ err("Line position takes a number or percentage.")
366
+ continue
367
+ }
368
+ if(value.indexOf("-", 1) != -1) {
369
+ err("Line position can only have '-' at the start.")
370
+ continue
371
+ }
372
+ if(value.indexOf("%") != -1 && value.indexOf("%") != value.length-1) {
373
+ err("Line position can only have '%' at the end.")
374
+ continue
375
+ }
376
+ if(value[0] == "-" && value[value.length-1] == "%") {
377
+ err("Line position cannot be a negative percentage.")
378
+ continue
379
+ }
380
+ var numVal = value;
381
+ var isPercent = false;
382
+ if(value[value.length-1] == "%") {
383
+ isPercent = true;
384
+ numVal = value.slice(0, value.length-1)
385
+ if(parseInt(value, 10) > 100) {
386
+ err("Line position cannot be >100%.")
387
+ continue
388
+ }
389
+ }
390
+ if (numVal === '' || isNaN(numVal) || !isFinite(numVal)) {
391
+ err("Line position needs to be a number")
392
+ continue
393
+ }
394
+ if (lineAlign !== undefined) {
395
+ if (!["start", "center", "end"].includes(lineAlign)) {
396
+ err("Line alignment needs to be one of start, center or end")
397
+ continue
398
+ }
399
+ cue.lineAlign = lineAlign
400
+ }
401
+ cue.snapToLines = !isPercent;
402
+ cue.linePosition = parseFloat(numVal)
403
+ if (parseFloat(numVal).toString() !== numVal) {
404
+ cue.nonSerializable = true;
405
+ }
406
+ } else if(setting == "position") { // text position and optional positionAlign
407
+ if (/,/.test(value)) {
408
+ var comp = value.split(',')
409
+ value = comp[0]
410
+ var positionAlign = comp[1]
411
+ }
412
+ if(value[value.length-1] != "%") {
413
+ err("Text position must be a percentage.")
414
+ continue
415
+ }
416
+ if(parseInt(value, 10) > 100 || parseInt(value, 10) < 0) {
417
+ err("Text position needs to be between 0 and 100%.")
418
+ continue
419
+ }
420
+ numVal = value.slice(0, value.length-1)
421
+ if (numVal === '' || isNaN(numVal) || !isFinite(numVal)) {
422
+ err("Line position needs to be a number")
423
+ continue
424
+ }
425
+ if (positionAlign !== undefined) {
426
+ if (!["line-left", "center", "line-right"].includes(positionAlign)) {
427
+ err("Position alignment needs to be one of line-left, center or line-right")
428
+ continue
429
+ }
430
+ cue.positionAlign = positionAlign
431
+ }
432
+ cue.textPosition = parseFloat(numVal)
433
+ } else if(setting == "size") { // size
434
+ if(value[value.length-1] != "%") {
435
+ err("Size must be a percentage.")
436
+ continue
437
+ }
438
+ if(parseInt(value, 10) > 100) {
439
+ err("Size cannot be >100%.")
440
+ continue
441
+ }
442
+ var size = value.slice(0, value.length -1)
443
+ if (size === undefined || size === "" || isNaN(size)) {
444
+ err("Size needs to be a number")
445
+ size = 100
446
+ continue
447
+ } else {
448
+ size = parseFloat(size)
449
+ if (size < 0 || size > 100) {
450
+ err("Size needs to be between 0 and 100%.")
451
+ continue;
452
+ }
453
+ }
454
+ cue.size = size
455
+ } else if(setting == "align") { // alignment
456
+ var alignValues = ["start", "center", "end", "left", "right"]
457
+ if(alignValues.indexOf(value) == -1) {
458
+ err("Alignment can only be set to one of " + alignValues.join(", ") + ".")
459
+ continue
460
+ }
461
+ cue.alignment = value
462
+ } else {
463
+ err("Invalid setting.")
464
+ }
465
+ }
466
+ }
467
+
468
+ this.parse = function(cue, previousCueStart) {
469
+ skip(SPACE)
470
+ cue.startTime = timestamp()
471
+ if(cue.startTime == undefined) {
472
+ return
473
+ }
474
+ if(cue.startTime < previousCueStart) {
475
+ err("Start timestamp is not greater than or equal to start timestamp of previous cue.")
476
+ }
477
+ if(NOSPACE.test(line[pos])) {
478
+ err("Timestamp not separated from '-->' by whitespace.")
479
+ }
480
+ skip(SPACE)
481
+ // 6-8
482
+ if(line[pos] != "-") {
483
+ err("No valid timestamp separator found.")
484
+ return
485
+ }
486
+ pos++
487
+ if(line[pos] != "-") {
488
+ err("No valid timestamp separator found.")
489
+ return
490
+ }
491
+ pos++
492
+ if(line[pos] != ">") {
493
+ err("No valid timestamp separator found.")
494
+ return
495
+ }
496
+ pos++
497
+ if(NOSPACE.test(line[pos])) {
498
+ err("'-->' not separated from timestamp by whitespace.")
499
+ }
500
+ skip(SPACE)
501
+ cue.endTime = timestamp()
502
+ if(cue.endTime == undefined) {
503
+ return
504
+ }
505
+ if(cue.endTime <= cue.startTime) {
506
+ err("End timestamp is not greater than start timestamp.")
507
+ }
508
+
509
+ if(NOSPACE.test(line[pos])) {
510
+ spaceBeforeSetting = false
511
+ }
512
+ skip(SPACE)
513
+ parseSettings(line.substring(pos), cue)
514
+ return true
515
+ }
516
+ this.parseTimestamp = function() {
517
+ var ts = timestamp()
518
+ if(line[pos] != undefined) {
519
+ err("Timestamp must not have trailing characters.")
520
+ return
521
+ }
522
+ return ts
523
+ }
524
+ }
525
+
526
+ var WebVTTCueTextParser = function(line, errorHandler, mode, entities) {
527
+ this.entities = entities
528
+ var self = this
529
+ var line = line,
530
+ pos = 0,
531
+ err = function(message) {
532
+ if(mode == "metadata")
533
+ return
534
+ errorHandler(message, pos+1)
535
+ }
536
+
537
+ this.parse = function(cueStart, cueEnd) {
538
+ function removeCycles(tree) {
539
+ const cyclelessTree = {...tree};
540
+ if (tree.children) {
541
+ cyclelessTree.children = tree.children.map(removeCycles);
542
+ }
543
+ if (cyclelessTree.parent) {
544
+ delete cyclelessTree.parent;
545
+ }
546
+ return cyclelessTree;
547
+ }
548
+
549
+ var result = {children:[]},
550
+ current = result,
551
+ timestamps = []
552
+
553
+ function attach(token) {
554
+ current.children.push({type:"object", name:token[1], classes:token[2], children:[], parent:current})
555
+ current = current.children[current.children.length-1]
556
+ }
557
+ function inScope(name) {
558
+ var node = current
559
+ while(node) {
560
+ if(node.name == name)
561
+ return true
562
+ node = node.parent
563
+ }
564
+ return
565
+ }
566
+
567
+ while(line[pos] != undefined) {
568
+ var token = nextToken()
569
+ if(token[0] == "text") {
570
+ current.children.push({type:"text", value:token[1], parent:current})
571
+ } else if(token[0] == "start tag") {
572
+ if(mode == "chapters")
573
+ err("Start tags not allowed in chapter title text.")
574
+ var name = token[1]
575
+ if(name != "v" && name != "lang" && token[3] != "") {
576
+ err("Only <v> and <lang> can have an annotation.")
577
+ }
578
+ if(
579
+ name == "c" ||
580
+ name == "i" ||
581
+ name == "b" ||
582
+ name == "u" ||
583
+ name == "ruby"
584
+ ) {
585
+ attach(token)
586
+ } else if(name == "rt" && current.name == "ruby") {
587
+ attach(token)
588
+ } else if(name == "v") {
589
+ if(inScope("v")) {
590
+ err("<v> cannot be nested inside itself.")
591
+ }
592
+ attach(token)
593
+ current.value = token[3] // annotation
594
+ if(!token[3]) {
595
+ err("<v> requires an annotation.")
596
+ }
597
+ } else if(name == "lang") {
598
+ attach(token)
599
+ current.value = token[3] // language
600
+ } else {
601
+ err("Incorrect start tag.")
602
+ }
603
+ } else if(token[0] == "end tag") {
604
+ if(mode == "chapters")
605
+ err("End tags not allowed in chapter title text.")
606
+ // XXX check <ruby> content
607
+ if(token[1] == current.name) {
608
+ current = current.parent
609
+ } else if(token[1] == "ruby" && current.name == "rt") {
610
+ current = current.parent.parent
611
+ } else {
612
+ err("Incorrect end tag.")
613
+ }
614
+ } else if(token[0] == "timestamp") {
615
+ if(mode == "chapters")
616
+ err("Timestamp not allowed in chapter title text.")
617
+ var timings = new WebVTTCueTimingsAndSettingsParser(token[1], err),
618
+ timestamp = timings.parseTimestamp()
619
+ if(timestamp != undefined) {
620
+ if(timestamp <= cueStart || timestamp >= cueEnd) {
621
+ err("Timestamp must be between start timestamp and end timestamp.")
622
+ }
623
+ if(timestamps.length > 0 && timestamps[timestamps.length-1] >= timestamp) {
624
+ err("Timestamp must be greater than any previous timestamp.")
625
+ }
626
+ current.children.push({type:"timestamp", value:timestamp, parent:current})
627
+ timestamps.push(timestamp)
628
+ }
629
+ }
630
+ }
631
+ while(current.parent) {
632
+ if(current.name != "v") {
633
+ err("Required end tag missing.")
634
+ }
635
+ current = current.parent
636
+ }
637
+ return removeCycles(result)
638
+ }
639
+
640
+ function nextToken() {
641
+ var state = "data",
642
+ result = "",
643
+ buffer = "",
644
+ classes = []
645
+ while(line[pos-1] != undefined || pos == 0) {
646
+ var c = line[pos]
647
+ if(state == "data") {
648
+ if(c == "&") {
649
+ buffer = c
650
+ state = "escape"
651
+ } else if(c == "<" && result == "") {
652
+ state = "tag"
653
+ } else if(c == "<" || c == undefined) {
654
+ return ["text", result]
655
+ } else {
656
+ result += c
657
+ }
658
+ } else if(state == "escape") {
659
+ if(c == "<" || c == undefined) {
660
+ err("Incorrect escape.")
661
+ let m;
662
+ if (m = buffer.match(/^&#([0-9]+)$/)) {
663
+ result += String.fromCharCode(m[1])
664
+ } else {
665
+ if(self.entities[buffer]) {
666
+ result += self.entities[buffer]
667
+ } else {
668
+ result += buffer
669
+ }
670
+ }
671
+ return ["text", result]
672
+ } else if(c == "&") {
673
+ err("Incorrect escape.")
674
+ result += buffer
675
+ buffer = c
676
+ } else if(/[a-z#0-9]/i.test(c)) {
677
+ buffer += c
678
+ } else if(c == ";") {
679
+ let m;
680
+ if (m = buffer.match(/^&#(x?[0-9]+)$/)) {
681
+ // we prepend "0" so that x20 be interpreted as hexadecim (0x20)
682
+ result += String.fromCharCode("0" + m[1])
683
+ } else if(self.entities[buffer + c]) {
684
+ result += self.entities[buffer + c]
685
+ } else if (m = Object.keys(entities).find(n => buffer.startsWith(n))) { // partial match
686
+ result += self.entities[m] + buffer.slice(m.length) + c
687
+ } else {
688
+ err("Incorrect escape.")
689
+ result += buffer + ";"
690
+ }
691
+ state = "data"
692
+ } else {
693
+ err("Incorrect escape.")
694
+ result += buffer + c
695
+ state = "data"
696
+ }
697
+ } else if(state == "tag") {
698
+ if(c == "\t" || c == "\n" || c == "\f" || c == " ") {
699
+ state = "start tag annotation"
700
+ } else if(c == ".") {
701
+ state = "start tag class"
702
+ } else if(c == "/") {
703
+ state = "end tag"
704
+ } else if(/\d/.test(c)) {
705
+ result = c
706
+ state = "timestamp tag"
707
+ } else if(c == ">" || c == undefined) {
708
+ if(c == ">") {
709
+ pos++
710
+ }
711
+ return ["start tag", "", [], ""]
712
+ } else {
713
+ result = c
714
+ state = "start tag"
715
+ }
716
+ } else if(state == "start tag") {
717
+ if(c == "\t" || c == "\f" || c == " ") {
718
+ state = "start tag annotation"
719
+ } else if(c == "\n") {
720
+ buffer = c
721
+ state = "start tag annotation"
722
+ } else if(c == ".") {
723
+ state = "start tag class"
724
+ } else if(c == ">" || c == undefined) {
725
+ if(c == ">") {
726
+ pos++
727
+ }
728
+ return ["start tag", result, [], ""]
729
+ } else {
730
+ result += c
731
+ }
732
+ } else if(state == "start tag class") {
733
+ if(c == "\t" || c == "\f" || c == " ") {
734
+ if (buffer) {
735
+ classes.push(buffer)
736
+ }
737
+ buffer = ""
738
+ state = "start tag annotation"
739
+ } else if(c == "\n") {
740
+ if (buffer) {
741
+ classes.push(buffer)
742
+ }
743
+ buffer = c
744
+ state = "start tag annotation"
745
+ } else if(c == ".") {
746
+ if (buffer) {
747
+ classes.push(buffer)
748
+ }
749
+ buffer = ""
750
+ } else if(c == ">" || c == undefined) {
751
+ if(c == ">") {
752
+ pos++
753
+ }
754
+ if (buffer) {
755
+ classes.push(buffer)
756
+ }
757
+ return ["start tag", result, classes, ""]
758
+ } else {
759
+ buffer += c
760
+ }
761
+ } else if(state == "start tag annotation") {
762
+ if(c == ">" || c == undefined) {
763
+ if(c == ">") {
764
+ pos++
765
+ }
766
+ buffer = buffer.split(/[\u0020\t\f\r\n]+/).filter(function(item) { if(item) return true }).join(" ")
767
+ return ["start tag", result, classes, buffer]
768
+ } else {
769
+ buffer +=c
770
+ }
771
+ } else if(state == "end tag") {
772
+ if(c == ">" || c == undefined) {
773
+ if(c == ">") {
774
+ pos++
775
+ }
776
+ return ["end tag", result]
777
+ } else {
778
+ result += c
779
+ }
780
+ } else if(state == "timestamp tag") {
781
+ if(c == ">" || c == undefined) {
782
+ if(c == ">") {
783
+ pos++
784
+ }
785
+ return ["timestamp", result]
786
+ } else {
787
+ result += c
788
+ }
789
+ } else {
790
+ err("Never happens.") // The joke is it might.
791
+ }
792
+ // 8
793
+ pos++
794
+ }
795
+ }
796
+ }
797
+
798
+ var WebVTTSerializer = function() {
799
+ function serializeTimestamp(seconds) {
800
+ const ms = ("00" + (seconds - Math.floor(seconds)).toFixed(3)*1000).slice(-3);
801
+ let h = 0, m = 0, s = 0;
802
+ if (seconds >= 3600) {
803
+ h = Math.floor(seconds/3600);
804
+ }
805
+ m = Math.floor((seconds - 3600*h) / 60);
806
+ s = Math.floor(seconds - 3600*h - 60*m);
807
+ return (h ? h + ":" : "") + ("" + m).padStart(2, "0") + ":" + ("" + s).padStart(2, "0") + "." + ms;
808
+ }
809
+ function serializeCueSettings(cue) {
810
+ var result = ""
811
+ const nonDefaultSettings = Object.keys(defaultCueSettings).filter(s => cue[s] !== defaultCueSettings[s]);
812
+ if (nonDefaultSettings.includes("direction")) {
813
+ result+= " vertical:" + cue.direction
814
+ }
815
+ if (nonDefaultSettings.includes("alignment")) {
816
+ result+= " align:" + cue.alignment
817
+ }
818
+ if (nonDefaultSettings.includes("size")) {
819
+ result+= " size:" + cue.size + "%"
820
+ }
821
+ if (nonDefaultSettings.includes("lineAlign") || nonDefaultSettings.includes("linePosition")) {
822
+ result += " line:" + cue.linePosition + (cue.snapToLines ? "" : "%") + (cue.lineAlign && cue.lineAlign != defaultCueSettings.lineAlign ? "," + cue.lineAlign : "")
823
+ }
824
+ if (nonDefaultSettings.includes("textPosition") || nonDefaultSettings.includes("positionAlign")) {
825
+ result += " position:" + cue.textPosition + "%" + (cue.positionAlign && cue.positionAlign !== defaultCueSettings.positionAlign ? "," + cue.positionAlign : "")
826
+ }
827
+ return result
828
+ }
829
+ function serializeTree(tree) {
830
+ var result = ""
831
+ for (var i = 0; i < tree.length; i++) {
832
+ var node = tree[i]
833
+ if(node.type == "text") {
834
+ result += node.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
835
+ } else if(node.type == "object") {
836
+ result += "<" + node.name
837
+ if(node.classes) {
838
+ for(var y = 0; y < node.classes.length; y++) {
839
+ result += "." + node.classes[y]
840
+ }
841
+ }
842
+ if(node.value) {
843
+ result += " " + node.value
844
+ }
845
+ result += ">"
846
+ if(node.children)
847
+ result += serializeTree(node.children)
848
+ result += "</" + node.name + ">"
849
+ } else if(node.type == "timestamp") {
850
+ result += "<" + serializeTimestamp(node.value) + ">"
851
+ } else {
852
+ result += "<" + node.value + ">"
853
+ }
854
+ }
855
+ return result
856
+ }
857
+ function serializeCue(cue) {
858
+ return (cue.id !== undefined ? cue.id + "\n" : "")
859
+ + serializeTimestamp(cue.startTime)
860
+ + " --> "
861
+ + serializeTimestamp(cue.endTime)
862
+ + serializeCueSettings(cue)
863
+ + "\n" + serializeTree(cue.tree.children) + "\n\n"
864
+ }
865
+ function serializeStyle(style) {
866
+ return "STYLE\n" + style + "\n\n"
867
+ }
868
+ this.serialize = function(cues, styles) {
869
+ var result = "WEBVTT\n\n"
870
+ if (styles) {
871
+ for(var i=0;i<styles.length;i++) {
872
+ result += serializeStyle(styles[i])
873
+ }
874
+ }
875
+ for(var i=0;i<cues.length;i++) {
876
+ result += serializeCue(cues[i])
877
+ }
878
+ return result
879
+ }
880
+ }
881
+
882
+ function exportify(object) {
883
+ object.WebVTTParser = WebVTTParser
884
+ object.WebVTTCueTimingsAndSettingsParser = WebVTTCueTimingsAndSettingsParser
885
+ object.WebVTTCueTextParser = WebVTTCueTextParser
886
+ object.WebVTTSerializer = WebVTTSerializer
887
+ }
888
+ if (typeof window !== 'undefined') exportify(window);
889
+ if (typeof exports !== 'undefined') exportify(exports);
890
+ })()