j1-template 2024.0.1 → 2024.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/j1.js +16 -21
  3. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +1 -1
  4. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  5. data/assets/themes/j1/core/js/template.js +0 -12
  6. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  7. data/assets/themes/j1/modules/chatbot/css/theme/uno.css +10 -0
  8. data/assets/themes/j1/modules/chatbot/css/theme/uno.min.css +1 -1
  9. data/assets/themes/j1/modules/iframeResizer/README.md +105 -105
  10. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +30 -5
  11. data/assets/themes/j1/modules/videojs/assets/material-icons.woff +0 -0
  12. data/assets/themes/j1/modules/videojs/assets/material-icons.woff2 +0 -0
  13. data/assets/themes/j1/modules/videojs/css/plugins/zoom.css +96 -0
  14. data/assets/themes/j1/modules/videojs/css/plugins/zoom.min.css +21 -0
  15. data/assets/themes/j1/modules/videojs/css/themes/city.css +1 -1
  16. data/assets/themes/j1/modules/videojs/css/themes/city.min.css +1 -1
  17. data/assets/themes/j1/modules/videojs/css/themes/fantasy.css +1 -1
  18. data/assets/themes/j1/modules/videojs/css/themes/fantasy.min.css +1 -1
  19. data/assets/themes/j1/modules/videojs/css/themes/forest.css +1 -1
  20. data/assets/themes/j1/modules/videojs/css/themes/forest.min.css +1 -1
  21. data/assets/themes/j1/modules/videojs/css/themes/sea.css +1 -1
  22. data/assets/themes/j1/modules/videojs/css/themes/sea.min.css +1 -1
  23. data/assets/themes/j1/modules/videojs/css/themes/uno.css +16 -18
  24. data/assets/themes/j1/modules/videojs/css/themes/uno.min.css +3 -2
  25. data/assets/themes/j1/modules/videojs/css/{video-js.css → video.css} +9 -7
  26. data/assets/themes/j1/modules/videojs/css/{video-js.min.css → video.min.css} +2 -2
  27. data/assets/themes/j1/modules/videojs/js/plugins/zoom.js +377 -0
  28. data/assets/themes/j1/modules/videojs/js/plugins/zoom.min.js +21 -0
  29. data/assets/themes/j1/modules/videojs/js/video.js +641 -71
  30. data/assets/themes/j1/modules/videojs/js/video.min.js +10 -9
  31. data/lib/j1/version.rb +1 -1
  32. data/lib/starter_web/README.md +5 -5
  33. data/lib/starter_web/_config.yml +1 -1
  34. data/lib/starter_web/_data/modules/gallery.yml +7 -2
  35. data/lib/starter_web/_data/resources.yml +4 -2
  36. data/lib/starter_web/_data/templates/feed.xml +1 -1
  37. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +3 -2
  38. data/lib/starter_web/_plugins/index/lunr.rb +4 -2
  39. data/lib/starter_web/assets/videos/gallery/video_james_carpool_caraoke.1920.jpg +0 -0
  40. data/lib/starter_web/package.json +1 -1
  41. data/lib/starter_web/pages/public/tools/previewer/preview_docsearch.adoc +92 -92
  42. data/lib/starter_web/pages/public/tools/previewer/preview_iframer.adoc +106 -106
  43. metadata +11 -5
  44. data/lib/starter_web/_data/modules/_docsearch.yml +0 -45
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Video.js 8.6.0 <http://videojs.com/>
3
+ * Video.js 8.6.1 <http://videojs.com/>
4
4
  * Copyright Brightcove, Inc. <https://www.brightcove.com/>
5
5
  * Available under Apache License Version 2.0
6
6
  * <https://github.com/videojs/video.js/blob/main/LICENSE>
@@ -8,7 +8,7 @@
8
8
  * Includes vtt.js <https://github.com/mozilla/vtt.js>
9
9
  * Available under Apache License Version 2.0
10
10
  * <https://github.com/mozilla/vtt.js/blob/main/LICENSE>
11
- */
11
+ */
12
12
 
13
13
  @charset "UTF-8";
14
14
  .vjs-modal-dialog .vjs-modal-dialog-content, .video-js .vjs-modal-dialog, .vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {
@@ -29,6 +29,7 @@
29
29
  font-weight: normal;
30
30
  font-style: normal;
31
31
  }
32
+
32
33
  .vjs-icon-play, .video-js .vjs-play-control .vjs-icon-placeholder, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {
33
34
  font-family: VideoJS;
34
35
  font-weight: normal;
@@ -500,12 +501,13 @@ body.vjs-full-window {
500
501
  padding: 0;
501
502
  cursor: pointer;
502
503
  opacity: 1;
503
- border: 0.06666em solid #fff;
504
+ /* border-radius: 0.3em; */
505
+ /* border: 0.06666em solid #fff; */
506
+ /* background-color: rgba(43, 51, 63, 0.7); */
504
507
  background-color: #2B333F;
505
- background-color: rgba(43, 51, 63, 0.7);
506
- border-radius: 0.3em;
507
508
  transition: all 0.4s;
508
509
  }
510
+
509
511
  .vjs-big-play-centered .vjs-big-play-button {
510
512
  top: 50%;
511
513
  left: 50%;
@@ -515,9 +517,9 @@ body.vjs-full-window {
515
517
 
516
518
  .video-js:hover .vjs-big-play-button,
517
519
  .video-js .vjs-big-play-button:focus {
518
- border-color: #fff;
520
+ /* border-color: #fff; */
521
+ /* background-color: rgba(115, 133, 159, 0.5); */
519
522
  background-color: #73859f;
520
- background-color: rgba(115, 133, 159, 0.5);
521
523
  transition: all 0s;
522
524
  }
523
525
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Video.js 8.6.0 <http://videojs.com/>
3
+ * Video.js 8.6.1 <http://videojs.com/>
4
4
  * Copyright Brightcove, Inc. <https://www.brightcove.com/>
5
5
  * Available under Apache License Version 2.0
6
6
  * <https://github.com/videojs/video.js/blob/main/LICENSE>
@@ -8,6 +8,6 @@
8
8
  * Includes vtt.js <https://github.com/mozilla/vtt.js>
9
9
  * Available under Apache License Version 2.0
10
10
  * <https://github.com/mozilla/vtt.js/blob/main/LICENSE>
11
- */
11
+ */
12
12
 
13
13
  @charset "UTF-8";.vjs-modal-dialog .vjs-modal-dialog-content,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff");font-weight:normal;font-style:normal}.vjs-icon-play,.video-js .vjs-play-control .vjs-icon-placeholder,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-play:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before{content:"\f103"}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before{content:"\f104"}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{content:"\f105"}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{content:"\f106"}.vjs-icon-volume-high,.video-js .vjs-mute-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control .vjs-icon-placeholder:before{content:"\f107"}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:"\f108"}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.vjs-icon-subtitles,.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before{content:"\f10c"}.vjs-icon-captions,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-captions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-captions:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-captions-button .vjs-icon-placeholder:before{content:"\f10d"}.vjs-icon-chapters,.video-js .vjs-chapters-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button .vjs-icon-placeholder:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder,.video-js .vjs-volume-level,.video-js .vjs-play-progress{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before,.video-js .vjs-volume-level:before,.video-js .vjs-play-progress:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before{content:"\f115"}.vjs-icon-replay,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-replay:before,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.vjs-icon-audio-description,.video-js .vjs-descriptions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button .vjs-icon-placeholder:before{content:"\f11d"}.vjs-icon-audio,.video-js .vjs-audio-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button .vjs-icon-placeholder:before{content:"\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-next-item:before{content:"\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-previous-item:before{content:"\f120"}.vjs-icon-picture-in-picture-enter,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-picture-in-picture-enter:before,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:"\f121"}.vjs-icon-picture-in-picture-exit,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-picture-in-picture-exit:before,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:"\f122"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:normal;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:0}.video-js *,.video-js *:before,.video-js *:after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;left:50%;top:50%;width:68px;height:48px;margin-left:-34px;margin-top:-24px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43,51,63,0.7);border-radius:.3em;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-0.81666em;margin-left:-1.5em}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,0.5);transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:0;border:0;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,0.8);background:linear-gradient(180deg,rgba(0,0,0,0.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover,.js-focus-visible .vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,0.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover,.js-focus-visible .vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:bold;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,0.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,0.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43,51,63,0.7)}.vjs-has-started .vjs-control-bar{display:flex;visibility:visible;opacity:1;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;flex:none}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0 0 1em white}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;flex:auto;display:flex;align-items:center;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:flex;align-items:center}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{flex:auto;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-0.5em;top:-0.3333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,0.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,0.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255,255,255,0.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,0.8)}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115,133,159,0.5)}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em white;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active{visibility:visible;opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;visibility:visible;opacity:1;position:relative;transition:none}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{position:absolute;bottom:3em;left:.5em}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-0.5em;left:-0.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-0.3em;right:-0.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43,51,63,0.7)}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:flex;align-items:flex-start;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js:not(.vjs-live) .vjs-live-control,.video-js.vjs-liveui .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{cursor:pointer;flex:none;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.vjs-no-flex .vjs-seek-to-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.vjs-playback-rate>.vjs-menu-button,.vjs-playback-rate .vjs-playback-rate-value{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-0.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,0.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;-webkit-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:white}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,0.2,0,0.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,0.2,0,0.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:white}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:white;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:white}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:white}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-0.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"";font-size:1.5em;line-height:inherit}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-0.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" ";font-size:1.5em;line-height:inherit}.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-current-time,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-time-divider,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-duration,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-remaining-time,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-playback-rate,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-chapters-button,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-descriptions-button,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-captions-button,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-subtitles-button,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-audio-button,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-control,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-current-time,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-time-divider,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-duration,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-remaining-time,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-playback-rate,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-chapters-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-descriptions-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-captions-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-subtitles-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-audio-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-control,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-current-time,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-time-divider,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-duration,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-remaining-time,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-playback-rate,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-chapters-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-descriptions-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-captions-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subtitles-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-audio-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-control{display:none}.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:auto;width:initial}.video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button,.video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subs-caps-button{display:none}.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-custom-control-spacer{flex:auto;display:block}.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer,.video-js:not(.vjs-fullscreen).vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-progress-control,.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-progress-control{display:none}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,0.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-font,.vjs-text-track-settings .vjs-track-settings-controls{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports(display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0 24px}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:5px;padding:3px;border:0}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px 0}.vjs-text-track-settings .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);display:block;margin:0 0 5px 0;padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:focus,.vjs-track-settings-controls button:active{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,0.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>*:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:0;z-index:-1000}.js-focus-visible .video-js *:focus:not(.focus-visible){outline:0;background:0}.video-js *:focus:not(:focus-visible),.video-js .vjs-menu *:focus:not(:focus-visible){outline:0;background:0}
@@ -0,0 +1,377 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/modules/videojs/js/zoom/zoom.js
4
+ # Provides the VideoJS (V8) plugin Zoom, Version 1.2.0
5
+ # See: https://github.com/theonlyducks/videojs-zoom
6
+ #
7
+ # Product/Info:
8
+ # https://github.com/theonlyducks/videojs-zoom/blob/main/README.md
9
+ # http://jekyll.one
10
+ #
11
+ # Copyright (C) 2023, 2024 The Only Ducks
12
+ # Copyright (C) 2023, 2024 Juergen Adams
13
+ #
14
+ # Videojs Zoom is licensed under the MIT License.
15
+ # See: https://github.com/theonlyducks/videojs-zoom/blob/main/LICENSE
16
+ # J1 Theme is licensed under MIT License.
17
+ # See: https://github.com/jekyll-one/J1 Theme/blob/master/LICENSE
18
+ # -----------------------------------------------------------------------------
19
+ */
20
+
21
+ (function (global, factory) {
22
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('video.js')) :
23
+ typeof define === 'function' && define.amd ? define(['video.js'], factory) :
24
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["@theonlyducks/videojs-zoom"] = factory(global.videojs));
25
+ })(this, (function (videojs) { 'use strict'
26
+
27
+ const Button = videojs.getComponent('Button');
28
+ const Plugin = videojs.getPlugin('plugin');
29
+ const Component = videojs.getComponent('Component');
30
+
31
+ const version = '1.2.0';
32
+ const ZOOM_SALT = 0.2;
33
+
34
+ const DEFAULT_OPTIONS = {
35
+ zoom: 1,
36
+ moveX: 0,
37
+ moveY: 0,
38
+ flip: "+",
39
+ rotate: 0
40
+ };
41
+
42
+ class Observer {
43
+ static _instance = null;
44
+ constructor() {
45
+ this._listeners = [];
46
+ }
47
+ static getInstance() {
48
+ if (!Observer._instance) {
49
+ Observer._instance = new Observer();
50
+ }
51
+ return Observer._instance;
52
+ }
53
+ subscribe(event, callback) {
54
+ this._listeners.push({
55
+ event,
56
+ callback
57
+ });
58
+ }
59
+ notify(event, data) {
60
+ this._listeners.forEach(listener => {
61
+ if (listener.event === event) {
62
+ return listener.callback(data);
63
+ }
64
+ });
65
+ }
66
+ }
67
+
68
+ class ZoomFunction {
69
+ constructor(player, options) {
70
+ this.player = player.el();
71
+ this.plugin = options.plugin;
72
+ this.observer = Observer.getInstance();
73
+ player.on('playing', () => {
74
+ this._updateSalt();
75
+ });
76
+ this.observer.subscribe('change', state => {
77
+ this.state = {
78
+ ...state,
79
+ saltMoveX: 70,
80
+ saltMoveY: 70
81
+ };
82
+ this._updateSalt();
83
+ });
84
+ }
85
+
86
+ _updateSalt() {
87
+ this.state.saltMoveX = this.player.offsetWidth * ZOOM_SALT / 2;
88
+ this.state.saltMoveY = this.player.offsetHeight * ZOOM_SALT / 2;
89
+ }
90
+ _zoom() {
91
+ this.plugin.zoom(this.state.zoom);
92
+ this.plugin.listeners.change(this.state);
93
+ }
94
+ zoomIn() {
95
+ if (this.state.zoom >= 9.8) return;
96
+ this.state.moveCount++;
97
+ this.state.zoom += ZOOM_SALT;
98
+ this.plugin.zoom(this.state.zoom);
99
+ this.plugin.listeners.change(this.state);
100
+ }
101
+ zoomOut() {
102
+ if (this.state.zoom <= 1) return;
103
+ this.state.moveCount--;
104
+ this.state.zoom -= ZOOM_SALT;
105
+ this.plugin.zoom(this.state.zoom);
106
+ this.plugin.move(0, 0);
107
+ this.plugin.listeners.change(this.state);
108
+ }
109
+ _move() {
110
+ this.plugin.move(this.state.moveX, this.state.moveY);
111
+ this.plugin.listeners.change(this.state);
112
+ }
113
+ moveUp() {
114
+ const next = this.state.moveY + this.state.saltMoveY;
115
+ const available = this.state.moveCount * this.state.saltMoveY;
116
+ if (available < next) return;
117
+ this._updateSalt();
118
+ this.state.moveY += this.state.saltMoveY;
119
+ this._move();
120
+ }
121
+ moveDown() {
122
+ const next = this.state.moveY - this.state.saltMoveY;
123
+ const available = this.state.moveCount * this.state.saltMoveY;
124
+ if (-available > next) return;
125
+ this._updateSalt();
126
+ this.state.moveY -= this.state.saltMoveY;
127
+ this._move();
128
+ }
129
+ reset() {
130
+ this.state.zoom = 1;
131
+ this.state.moveX = 0;
132
+ this.state.moveY = 0;
133
+ this.state.rotate = 0;
134
+ this.state.moveCount = 0;
135
+ this.plugin.zoom(1);
136
+ this.plugin.flip("+");
137
+ this.plugin.rotate(0);
138
+ this.plugin.move(0, 0);
139
+ this.plugin.listeners.change(this.state);
140
+ }
141
+ moveLeft() {
142
+ const next = this.state.moveX + this.state.saltMoveX;
143
+ const available = this.state.moveCount * this.state.saltMoveX;
144
+ if (available < next) return;
145
+ this._updateSalt();
146
+ this.state.moveX += this.state.saltMoveX;
147
+ this._move();
148
+ }
149
+ moveRight() {
150
+ const next = this.state.moveX - this.state.saltMoveX;
151
+ const available = this.state.moveCount * this.state.saltMoveX;
152
+ if (-available > next) return;
153
+ this._updateSalt();
154
+ this.state.moveX -= this.state.saltMoveX;
155
+ this._move();
156
+ }
157
+ _rotate() {
158
+ this.plugin.rotate(this.state.rotate);
159
+ this.plugin.listeners.change(this.state);
160
+ }
161
+ rotate() {
162
+ this.state.rotate -= 180;
163
+ if (this.state.rotate === -360) {
164
+ this.state.rotate = 0;
165
+ }
166
+ this._rotate();
167
+ }
168
+ _flip() {
169
+ this.plugin.flip(this.state.flip);
170
+ this.plugin.listeners.change(this.state);
171
+ }
172
+ flip() {
173
+ this.state.flip = this.state.flip === "+" ? "-" : "+";
174
+ this._flip();
175
+ }
176
+ }
177
+
178
+ class ZoomModalContent {
179
+ constructor() {
180
+ this.content = null;
181
+ this._createContent();
182
+ }
183
+
184
+ getContent() {
185
+ return this.content;
186
+ }
187
+ _createContent() {
188
+ this.content = `
189
+ <div class="vjs-zoom-duck__container--row">
190
+ <button id="vjs-zoom-duck__zoomIn" class="vjs-zoom-duck__button">
191
+ <span class="vjs-zoom-icons">add</span>
192
+ </button>
193
+ <span class="vjs-zoom-duck__space"></span>
194
+ <button id="vjs-zoom-duck__zoomOut" class="vjs-zoom-duck__button">
195
+ <span class="vjs-zoom-icons">remove</span>
196
+ </button>
197
+ </div>
198
+ <div class="vjs-zoom-duck__container--row">
199
+ <span class="vjs-zoom-duck__space"></span>
200
+ <button id="vjs-zoom-duck__moveUp" class="vjs-zoom-duck__button">
201
+ <span class="vjs-zoom-icons">arrow_drop_up</span>
202
+ </button>
203
+ <span class="vjs-zoom-duck__space"></span>
204
+ </div>
205
+ <div class="vjs-zoom-duck__container--row">
206
+ <button id="vjs-zoom-duck__moveLeft" class="vjs-zoom-duck__button">
207
+ <span class="vjs-zoom-icons">arrow_left</span>
208
+ </button>
209
+ <button id="vjs-zoom-duck__reset" class="vjs-zoom-duck__button">
210
+ <span class="vjs-zoom-icons">fiber_manual_record</span>
211
+ </button>
212
+ <button id="vjs-zoom-duck__moveRight" class="vjs-zoom-duck__button">
213
+ <span class="vjs-zoom-icons">arrow_right</span>
214
+ </button>
215
+ </div>
216
+ <div class="vjs-zoom-duck__container--row">
217
+ <span class="vjs-zoom-duck__space"></span>
218
+ <button id="vjs-zoom-duck__moveDown" class="vjs-zoom-duck__button">
219
+ <span class="vjs-zoom-icons">arrow_drop_down</span>
220
+ </button>
221
+ <span class="vjs-zoom-duck__space"></span>
222
+ </div>
223
+ <div class="vjs-zoom-duck__container--row">
224
+ <button id="vjs-zoom-duck__rotate" class="vjs-zoom-duck__button">
225
+ <span class="vjs-zoom-icons">rotate_left</span>
226
+ </button>
227
+ <span class="vjs-zoom-duck__space"></span>
228
+ <button id="vjs-zoom-duck__flip" class="vjs-zoom-duck__button">
229
+ <span class="vjs-zoom-icons">swap_horiz</span>
230
+ </button>
231
+ </div>
232
+ `;
233
+ }
234
+ }
235
+
236
+ class ZoomModal extends Component {
237
+ constructor(player, options) {
238
+ super(player, options);
239
+ this.player = player.el();
240
+ this.plugin = options.plugin;
241
+ this.function = new ZoomFunction(player, options);
242
+ player.on('playing', () => {
243
+ this.listeners();
244
+ });
245
+ }
246
+
247
+ createEl() {
248
+ const modal = videojs.dom.createEl('div', {
249
+ className: 'vjs-zoom-duck__container'
250
+ });
251
+ const content = new ZoomModalContent();
252
+ modal.innerHTML = content.getContent();
253
+ return modal;
254
+ }
255
+ listeners() {
256
+ let buttons = this.player.getElementsByClassName('vjs-zoom-duck__button');
257
+ buttons = Array.from(buttons);
258
+ buttons.map(button => {
259
+ const [, action] = button.id.split('__');
260
+ button.onclick = () => this.function[action]();
261
+ });
262
+ }
263
+ toggle() {
264
+ const [modal] = this.player.getElementsByClassName('vjs-zoom-duck__container');
265
+ modal.classList.toggle('open');
266
+ this.plugin.listeners.click();
267
+ }
268
+ open() {
269
+ const [modal] = this.player.getElementsByClassName('vjs-zoom-duck__container');
270
+ modal.classList.add('open');
271
+ this.plugin.listeners.click();
272
+ }
273
+ close() {
274
+ const [modal] = this.player.getElementsByClassName('vjs-zoom-duck__container');
275
+ modal.classList.remove('open');
276
+ this.plugin.listeners.click();
277
+ }
278
+ }
279
+
280
+ class ZoomButton extends Button {
281
+ constructor(player, options) {
282
+ super(player, options);
283
+ this.isOpen = false;
284
+ player.on('useractive', () => {
285
+ if (!this.isOpen) return;
286
+ const modal = this.player().getChild('ZoomModal');
287
+ modal.open();
288
+ });
289
+ player.on('userinactive', () => {
290
+ if (!this.isOpen) return;
291
+ const modal = this.player().getChild('ZoomModal');
292
+ modal.close();
293
+ });
294
+ }
295
+
296
+ buildCSSClass() {
297
+ return `vjs-zoom-duck ${super.buildCSSClass()}`;
298
+ }
299
+ handleClick() {
300
+ const modal = this.player().getChild('ZoomModal');
301
+ videojs.log('[~Zoom Plugin] button handleClick');
302
+ this.isOpen = !this.isOpen;
303
+ modal.toggle();
304
+ }
305
+ }
306
+
307
+ class ZoomPlugin extends Plugin {
308
+ constructor(player) {
309
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
310
+ super(player, options);
311
+ videojs.log('[~Zoom Plugin] start ', options);
312
+ this.player = player.el();
313
+ this.listeners = {
314
+ click: () => {},
315
+ change: () => {}
316
+ };
317
+ this.player.style.overflow = 'hidden';
318
+ this.state = videojs.mergeOptions(DEFAULT_OPTIONS, options);
319
+ this.state.flip = "+";
320
+ this.state.moveCount = Math.round((this.state.zoom - 1) / ZOOM_SALT);
321
+ player.getChild('ControlBar').addChild('ZoomButton');
322
+ player.addChild('ZoomModal', {
323
+ plugin: this,
324
+ state: this.state
325
+ });
326
+ this._observer = Observer.getInstance();
327
+ this._setTransform();
328
+ }
329
+
330
+ zoom(value) {
331
+ if (value <= 0) {
332
+ throw new Error('Zoom value invalid');
333
+ }
334
+ this.state.zoom = value;
335
+ this.state.moveCount = Math.round((this.state.zoom - 1) / ZOOM_SALT);
336
+ this._setTransform();
337
+ }
338
+ rotate(value) {
339
+ this.state.rotate = value;
340
+ this._setTransform();
341
+ }
342
+ move(x, y) {
343
+ this.state.moveX = x;
344
+ this.state.moveY = y;
345
+ this._setTransform();
346
+ }
347
+ flip(signal) {
348
+ this.state.flip = signal;
349
+ this._setTransform();
350
+ }
351
+ toggle() {
352
+ const [modal] = this.player.getElementsByClassName('vjs-zoom-duck__container');
353
+ modal.classList.toggle('open');
354
+ }
355
+ listen(listener, callback) {
356
+ this.listeners[listener] = callback;
357
+ }
358
+ _notify() {
359
+ this._observer.notify('change', this.state);
360
+ }
361
+ _setTransform() {
362
+ const [video] = this.player.getElementsByTagName('video');
363
+ video.style.transform = `
364
+ translate(${this.state.moveX}px, ${this.state.moveY}px)
365
+ scale(${this.state.flip}${this.state.zoom}, ${this.state.zoom})
366
+ rotate(${this.state.rotate}deg)
367
+ `;
368
+ this._notify();
369
+ }
370
+ }
371
+
372
+ videojs.registerComponent('ZoomModal', ZoomModal);
373
+ videojs.registerComponent('ZoomButton', ZoomButton);
374
+ videojs.registerPlugin('zoomPlugin', ZoomPlugin);
375
+
376
+ return ZoomPlugin;
377
+ }));
@@ -0,0 +1,21 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/modules/videojs/js/zoom/zoom.min.js
4
+ # Provides the VideoJS (V8) plugin Zoom, Version 1.2.0
5
+ # See: https://github.com/theonlyducks/videojs-zoom
6
+ #
7
+ # Product/Info:
8
+ # https://github.com/theonlyducks/videojs-zoom/blob/main/README.md
9
+ # http://jekyll.one
10
+ #
11
+ # Copyright (C) 2023, 2024 The Only Ducks
12
+ # Copyright (C) 2023, 2024 Juergen Adams
13
+ #
14
+ # Videojs Zoom is licensed under the MIT License.
15
+ # See: https://github.com/theonlyducks/videojs-zoom/blob/main/LICENSE
16
+ # J1 Theme is licensed under MIT License.
17
+ # See: https://github.com/jekyll-one/J1 Theme/blob/master/LICENSE
18
+ # -----------------------------------------------------------------------------
19
+ */
20
+
21
+ !function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],s):(t="undefined"!=typeof globalThis?globalThis:t||self)["@theonlyducks/videojs-zoom"]=s(t.videojs)}(this,(function(t){"use strict";var s={name:"@theonlyducks/videojs-zoom",title:"Video.js Zoom",version:"1.2.0",private:!1,description:"Simple plugin to zoom in video.js player",author:"Giovane Santos <giovanesantos1999@gmail.com>",license:"MIT",main:"./dist/videojs-zoom.cjs.js",module:"./dist/videojs-zoom.es.js",browser:"./dist/videojs-zoom.js",exports:{".":{import:"./dist/videojs-zoom.es.js",require:"./dist/videojs-zoom.cjs.js"},"./styles":{import:"./dist/videojs-zoom.css",require:"./dist/videojs-zoom.css"}},scripts:{build:"yarn clean && yarn build:js && yarn build:css","build:js":"rollup -c","build:css":"mv dist/plugin.css dist/videojs-zoom.css ",clean:"rm -rf ./dist",start:"webpack serve --progress"},engines:{node:">=16.0"},repository:{type:"git",url:"git+https://github.com/theonlyducks/videojs-zoom-duck.git"},bugs:{url:"https://github.com/theonlyducks/videojs-zoom-duck/issues"},files:["dist","LICENSE","README.md"],keywords:["videojs","video-zoom","videojs-zoom","videojs-zoom-duck","videojs-plugin","videojs-plugin-zoom"],browserslist:["defaults"],peerDependencies:{"video.js":">= ^8"},devDependencies:{"@babel/cli":"^7.19.3","@babel/core":"^7.19.6","@babel/preset-env":"^7.19.4","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.0.1","babel-loader":"^9.0.1","css-loader":"^6.7.1","html-webpack-plugin":"^5.5.0",rollup:"^3.3.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-terser":"^7.0.2","style-loader":"^3.3.1","video.js":"^8.6.1",webpack:"^5.76.0","webpack-cli":"^4.10.0","webpack-dev-server":"^4.11.1"}};class o{static _instance=null;constructor(){this._listeners=[]}static getInstance(){return o._instance||(o._instance=new o),o._instance}subscribe(t,s){this._listeners.push({event:t,callback:s})}notify(t,s){this._listeners.forEach((o=>{if(o.event===t)return o.callback(s)}))}}const e=.2;class i{constructor(t,s){this.player=t.el(),this.plugin=s.plugin,this.observer=o.getInstance(),t.on("playing",(()=>{this._updateSalt()})),this.observer.subscribe("change",(t=>{this.state={...t,saltMoveX:70,saltMoveY:70},this._updateSalt()}))}_updateSalt(){this.state.saltMoveX=this.player.offsetWidth*e/2,this.state.saltMoveY=this.player.offsetHeight*e/2}_zoom(){this.plugin.zoom(this.state.zoom),this.plugin.listeners.change(this.state)}zoomIn(){this.state.zoom>=9.8||(this.state.moveCount++,this.state.zoom+=e,this.plugin.zoom(this.state.zoom),this.plugin.listeners.change(this.state))}zoomOut(){this.state.zoom<=1||(this.state.moveCount--,this.state.zoom-=e,this.plugin.zoom(this.state.zoom),this.plugin.move(0,0),this.plugin.listeners.change(this.state))}_move(){this.plugin.move(this.state.moveX,this.state.moveY),this.plugin.listeners.change(this.state)}moveUp(){const t=this.state.moveY+this.state.saltMoveY;this.state.moveCount*this.state.saltMoveY<t||(this._updateSalt(),this.state.moveY+=this.state.saltMoveY,this._move())}moveDown(){const t=this.state.moveY-this.state.saltMoveY;-(this.state.moveCount*this.state.saltMoveY)>t||(this._updateSalt(),this.state.moveY-=this.state.saltMoveY,this._move())}reset(){this.state.zoom=1,this.state.moveX=0,this.state.moveY=0,this.state.rotate=0,this.state.moveCount=0,this.plugin.zoom(1),this.plugin.flip("+"),this.plugin.rotate(0),this.plugin.move(0,0),this.plugin.listeners.change(this.state)}moveLeft(){const t=this.state.moveX+this.state.saltMoveX;this.state.moveCount*this.state.saltMoveX<t||(this._updateSalt(),this.state.moveX+=this.state.saltMoveX,this._move())}moveRight(){const t=this.state.moveX-this.state.saltMoveX;-(this.state.moveCount*this.state.saltMoveX)>t||(this._updateSalt(),this.state.moveX-=this.state.saltMoveX,this._move())}_rotate(){this.plugin.rotate(this.state.rotate),this.plugin.listeners.change(this.state)}rotate(){this.state.rotate-=180,-360===this.state.rotate&&(this.state.rotate=0),this._rotate()}_flip(){this.plugin.flip(this.state.flip),this.plugin.listeners.change(this.state)}flip(){this.state.flip="+"===this.state.flip?"-":"+",this._flip()}}class n{constructor(){this.content=null,this._createContent()}getContent(){return this.content}_createContent(){this.content='\n\t\t\t<div class="vjs-zoom-duck__container--row">\n\t\t\t\t<button id="vjs-zoom-duck__zoomIn" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">add</span>\n\t\t\t\t</button>\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t\t<button id="vjs-zoom-duck__zoomOut" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">remove</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class="vjs-zoom-duck__container--row">\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t\t<button id="vjs-zoom-duck__moveUp" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">arrow_drop_up</span>\n\t\t\t\t</button>\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t</div>\n\t\t\t<div class="vjs-zoom-duck__container--row">\n\t\t\t\t<button id="vjs-zoom-duck__moveLeft" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">arrow_left</span>\n\t\t\t\t</button>\n\t\t\t\t<button id="vjs-zoom-duck__reset" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">fiber_manual_record</span>\n\t\t\t\t</button>\n\t\t\t\t<button id="vjs-zoom-duck__moveRight" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">arrow_right</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class="vjs-zoom-duck__container--row">\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t\t<button id="vjs-zoom-duck__moveDown" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">arrow_drop_down</span>\n\t\t\t\t</button>\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t</div>\n\t\t\t<div class="vjs-zoom-duck__container--row">\n\t\t\t\t<button id="vjs-zoom-duck__rotate" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">rotate_left</span>\n\t\t\t\t</button>\n\t\t\t\t<span class="vjs-zoom-duck__space"></span>\n\t\t\t\t<button id="vjs-zoom-duck__flip" class="vjs-zoom-duck__button">\n\t\t\t\t\t<span class="vjs-zoom-icons">swap_horiz</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t'}}const a=t.getComponent("Component");const l=t.getComponent("Button");const{version:r}=s,c=t.getPlugin("plugin"),u={zoom:1,moveX:0,moveY:0,flip:"+",rotate:0};class h extends c{constructor(s){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(s,i),t.log("[~Zoom Plugin] start ",i),this.player=s.el(),this.listeners={click:()=>{},change:()=>{}},this.player.style.overflow="hidden",this.state=t.mergeOptions(u,i),this.state.flip="+",this.state.moveCount=Math.round((this.state.zoom-1)/e),s.getChild("ControlBar").addChild("ZoomButton"),s.addChild("ZoomModal",{plugin:this,state:this.state}),this._observer=o.getInstance(),this._setTransform()}zoom(t){if(t<=0)throw new Error("Zoom value invalid");this.state.zoom=t,this.state.moveCount=Math.round((this.state.zoom-1)/e),this._setTransform()}rotate(t){this.state.rotate=t,this._setTransform()}move(t,s){this.state.moveX=t,this.state.moveY=s,this._setTransform()}flip(t){this.state.flip=t,this._setTransform()}toggle(){const[t]=this.player.getElementsByClassName("vjs-zoom-duck__container");t.classList.toggle("open")}listen(t,s){this.listeners[t]=s}_notify(){this._observer.notify("change",this.state)}_setTransform(){const[t]=this.player.getElementsByTagName("video");t.style.transform=`\n\t\t\ttranslate(${this.state.moveX}px, ${this.state.moveY}px) \n\t\t\tscale(${this.state.flip}${this.state.zoom}, ${this.state.zoom}) \n\t\t\trotate(${this.state.rotate}deg)\n\t\t`,this._notify()}}return h.defaultState={},h.VERSION=r,t.registerComponent("ZoomModal",class extends a{constructor(t,s){super(t,s),this.player=t.el(),this.plugin=s.plugin,this.function=new i(t,s),t.on("playing",(()=>{this.listeners()}))}createEl(){const s=t.dom.createEl("div",{className:"vjs-zoom-duck__container"}),o=new n;return s.innerHTML=o.getContent(),s}listeners(){let t=this.player.getElementsByClassName("vjs-zoom-duck__button");t=Array.from(t),t.map((t=>{const[,s]=t.id.split("__");t.onclick=()=>this.function[s]()}))}toggle(){const[t]=this.player.getElementsByClassName("vjs-zoom-duck__container");t.classList.toggle("open"),this.plugin.listeners.click()}open(){const[t]=this.player.getElementsByClassName("vjs-zoom-duck__container");t.classList.add("open"),this.plugin.listeners.click()}close(){const[t]=this.player.getElementsByClassName("vjs-zoom-duck__container");t.classList.remove("open"),this.plugin.listeners.click()}}),t.registerComponent("ZoomButton",class extends l{constructor(t,s){super(t,s),this.isOpen=!1,t.on("useractive",(()=>{if(!this.isOpen)return;this.player().getChild("ZoomModal").open()})),t.on("userinactive",(()=>{if(!this.isOpen)return;this.player().getChild("ZoomModal").close()}))}buildCSSClass(){return`vjs-zoom-duck ${super.buildCSSClass()}`}handleClick(){const s=this.player().getChild("ZoomModal");t.log("[~Zoom Plugin] button handleClick"),this.isOpen=!this.isOpen,s.toggle()}}),t.registerPlugin("zoomPlugin",h),h}));