@latest-thinking/lt-player 1.1.0-s → 1.1.0-u

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/ README.md +1 -0
  2. package/dist/css/lt-player-main.css +1 -1
  3. package/dist/css/lt-player-main.css.map +1 -1
  4. package/dist/js/lt-player-main.js +1 -1
  5. package/dist/js/lt-player-main.js.map +1 -1
  6. package/examples/lt-page-with-player.html +3529 -0
  7. package/examples/lt-page-with-player_files/Weiskopf_Coverphoto.jpg +0 -0
  8. package/examples/lt-page-with-player_files/ajax-progress.module.css +49 -0
  9. package/examples/lt-page-with-player_files/align.module.css +32 -0
  10. package/examples/lt-page-with-player_files/announce.js +49 -0
  11. package/examples/lt-page-with-player_files/autocomplete-loading.module.css +22 -0
  12. package/examples/lt-page-with-player_files/autocomplete.css +16 -0
  13. package/examples/lt-page-with-player_files/bootstrap.css +22691 -0
  14. package/examples/lt-page-with-player_files/clearfix.module.css +15 -0
  15. package/examples/lt-page-with-player_files/container-inline.module.css +16 -0
  16. package/examples/lt-page-with-player_files/cookiesjsr.min.css +10 -0
  17. package/examples/lt-page-with-player_files/core.css +97 -0
  18. package/examples/lt-page-with-player_files/details.module.css +10 -0
  19. package/examples/lt-page-with-player_files/fieldgroup.module.css +9 -0
  20. package/examples/lt-page-with-player_files/hidden.module.css +53 -0
  21. package/examples/lt-page-with-player_files/himme-alexander-beyond_0.jpg +0 -0
  22. package/examples/lt-page-with-player_files/item-list.module.css +19 -0
  23. package/examples/lt-page-with-player_files/js.module.css +22 -0
  24. package/examples/lt-page-with-player_files/latest_thinking.style.css +6496 -0
  25. package/examples/lt-page-with-player_files/logo-small.png +0 -0
  26. package/examples/lt-page-with-player_files/lt-player.css +3795 -0
  27. package/examples/lt-page-with-player_files/menu.css +64 -0
  28. package/examples/lt-page-with-player_files/nowrap.module.css +8 -0
  29. package/examples/lt-page-with-player_files/paragraphs.unpublished.css +3 -0
  30. package/examples/lt-page-with-player_files/position-container.module.css +8 -0
  31. package/examples/lt-page-with-player_files/progress.module.css +51 -0
  32. package/examples/lt-page-with-player_files/radix.style.css +1 -0
  33. package/examples/lt-page-with-player_files/reset-appearance.module.css +15 -0
  34. package/examples/lt-page-with-player_files/resize.module.css +21 -0
  35. package/examples/lt-page-with-player_files/search_api_autocomplete.css +41 -0
  36. package/examples/lt-page-with-player_files/sticky-header.module.css +13 -0
  37. package/examples/lt-page-with-player_files/system-status-counter.css +30 -0
  38. package/examples/lt-page-with-player_files/system-status-report-counters.css +27 -0
  39. package/examples/lt-page-with-player_files/system-status-report-general-info.css +14 -0
  40. package/examples/lt-page-with-player_files/tabledrag.module.css +98 -0
  41. package/examples/lt-page-with-player_files/tablesort.module.css +19 -0
  42. package/examples/lt-page-with-player_files/theme.css +446 -0
  43. package/examples/lt-page-with-player_files/thumbnail_MPI_CBS_Eingangsbereich.jpg +0 -0
  44. package/examples/lt-page-with-player_files/tree-child.module.css +18 -0
  45. package/examples/lt-page-with-player_files/widget-min.js +10 -0
  46. package/examples/portrait-with-subtitles.html +1 -0
  47. package/package.json +1 -1
  48. package/src/assets/sass/abstracts/_variables.scss +1 -1
  49. package/src/assets/sass/components/_all.scss +1 -1
  50. package/src/assets/sass/components/_loader.scss +70 -0
  51. package/src/assets/sass/core/_player.scss +3 -1
  52. package/src/assets/sass/sections/_additional-info.scss +1 -1
  53. package/src/assets/sass/sections/_settings.scss +1 -1
  54. package/src/assets/sass/sections/_subtitles.scss +50 -11
  55. package/src/assets/sass/sections/controllers/_botom.scss +43 -20
  56. package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +12 -1
  57. package/src/components/LTPlayerStatusFeedback.ts +68 -0
  58. package/src/components/captions/LTPlayerCaptions.ts +25 -1
  59. package/src/components/config/LTPlayerConfig.ts +9 -0
  60. package/src/components/controls/LTPlayerControlsEvents.ts +63 -58
  61. package/src/components/controls/settings/LTPlayerCommonSettingsControllers.ts +7 -1
  62. package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +4 -5
  63. package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +40 -44
  64. package/src/components/events/LTPlayerCommon.ts +32 -0
  65. package/src/components/events/LTPlayerDesktop.ts +8 -12
  66. package/src/components/events/LTPlayerMobile.ts +8 -11
  67. package/src/global/controllers/LTPlayerController.ts +5 -1
  68. package/src/services/Helper.ts +5 -1
  69. package/src/services/TemplateService.ts +5 -0
  70. package/src/views/settings.handlebars +1 -1
  71. package/src/views/settings.mobile.handlebars +20 -0
  72. package/src/views/template.handlebars +3 -0
  73. package/src/assets/sass/components/_spinner.scss +0 -46
@@ -2,6 +2,7 @@ import {LTPlayerSettingsControlsManager} from "../LTPlayerSettingsControlsManage
2
2
  import {SettingsControlsInterfaces} from "../../../global/interfaces/SettingsControlsInterfaces";
3
3
 
4
4
  export class LTPlayerMobileSettingsControllers implements SettingsControlsInterfaces {
5
+
5
6
  settingsInstance: LTPlayerSettingsControlsManager
6
7
  constructor(settingsInstance: LTPlayerSettingsControlsManager) {
7
8
  this.settingsInstance = settingsInstance;
@@ -11,6 +12,7 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
11
12
  init() {
12
13
  this.addOpenSettingsEventButton();
13
14
  this.setButtonSpeed();
15
+ this.createModal();
14
16
  }
15
17
 
16
18
  addOpenSettingsEventButton() {
@@ -21,11 +23,10 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
21
23
  if (mobileEvent) {
22
24
  mobileEvent.on('singletap', function LTPlayerMobileSettingsButton() {
23
25
  instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
24
- instance.createModal();
25
- instance.setActiveModal();
26
26
  instance.initCaptionsEvent();
27
27
  instance.initSpeedVideoEvent();
28
28
  instance.initSaveButton();
29
+ instance.showModal()
29
30
  setTimeout(() => {
30
31
  instance.setInactiveTouchModal();
31
32
  }, 100)
@@ -34,8 +35,24 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
34
35
  }
35
36
  }
36
37
 
38
+ hideModal() {
39
+ const body = document.body
40
+ body.removeAttribute('modal-open-body')
41
+
42
+ const modal = this.getModal()
43
+ modal.close()
44
+ }
45
+
46
+ showModal() {
47
+ const body = document.body
48
+ body.setAttribute('modal-open-body', '')
49
+
50
+ const modal = this.getModal()
51
+ modal.showModal()
52
+ }
53
+
37
54
  setInactiveTouchModal() {
38
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
55
+ const modal = this.getModal()
39
56
  const background = modal.querySelector('.settings-controllers-enable__background');
40
57
  const settingsContainerHeader = modal.querySelector('.settings-controllers-header')
41
58
  const instance = this;
@@ -46,10 +63,6 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
46
63
  mobileEvent.on('singletap', function LTPlayerMobileSettingsBackground(event) {
47
64
  instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
48
65
  event.preventDefault();
49
- let target = event.target as HTMLElement;
50
- if (!target.classList.contains('settings-controllers')) {
51
- instance.setInactiveModal();
52
- }
53
66
  })
54
67
  }
55
68
  }
@@ -61,64 +74,47 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
61
74
  instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
62
75
  event.preventDefault();
63
76
  let target = event.target as HTMLElement;
64
- instance.setInactiveModal();
77
+ instance.hideModal();
65
78
  })
66
79
  }
67
80
  }
68
-
69
81
  }
70
82
 
71
- createModal() {
72
- let modalTemplate = this.settingsInstance.playerInstance.templateService.getSettings({id : this.settingsInstance.playerInstance.playerConfig.getPlayerId()});
73
-
74
- const modal = document.createElement('div');
75
- modal.classList.add('lt-player-mobile-settings-modal')
76
- modal.innerHTML = modalTemplate;
77
-
78
- const body = document.querySelector('body');
79
-
80
- if (body) {
81
- body.appendChild(modal);
82
- }
83
+ getModal(): HTMLDialogElement {
84
+ const playerElementContainer = this.settingsInstance.playerInstance.playerConfig.getPlayerElementContainer()
85
+ return playerElementContainer.querySelector("dialog")
83
86
  }
84
87
 
85
- setActiveModal() {
86
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
87
- const background = modal.querySelector('.settings-controllers-enable__background');
88
-
89
- if (background) {
90
- if (background.classList.contains('d-none')) {
91
- background.classList.remove('d-none')
88
+ createModal() {
89
+ let settingsDialog = this.settingsInstance.playerInstance.templateService.getMobileSettings(
90
+ {
91
+ id : this.settingsInstance.playerInstance.playerConfig.getPlayerId(),
92
+ captions_enabled: this.settingsInstance.playerInstance.playerConfig.getCaptionsEnabled()
92
93
  }
93
- }
94
+ );
95
+ const playerElementContainer = this.settingsInstance.playerInstance.playerConfig.getPlayerElementContainer()
96
+ playerElementContainer.insertAdjacentHTML('beforeend', settingsDialog)
94
97
  }
95
98
 
96
- setInactiveModal() {
97
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
98
- if (modal) {
99
- modal.remove();
100
- }
101
- }
102
99
  initCaptionsEvent() {
103
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
104
- const checkBox = modal.querySelector(`#captions-lt-player-${this.settingsInstance.playerInstance.playerConfig.getPlayerId()}`) as HTMLInputElement;
100
+ const modal = this.getModal()
101
+ const checkBox = modal.querySelector(`.subtitles-body__input-switch`) as HTMLInputElement;
105
102
  const instance = this;
106
103
  if (checkBox) {
107
104
  checkBox.addEventListener('change', () => {
108
105
  instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
109
106
 
110
107
  if (!checkBox.checked) {
111
- this.settingsInstance.player.toggleCaptions(false);
112
- return
108
+ this.settingsInstance.playerInstance.captionsService.disableCaptions();
109
+ } else {
110
+ this.settingsInstance.playerInstance.captionsService.enableCaptions();
113
111
  }
114
112
 
115
- this.settingsInstance.player.toggleCaptions(true);
116
-
117
113
  })
118
114
  }
119
115
  }
120
116
  initSpeedVideoEvent() {
121
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
117
+ const modal = this.getModal()
122
118
  const playerInstance = this.settingsInstance.playerInstance;
123
119
  const player = this.settingsInstance.player;
124
120
  const rangeInput: HTMLInputElement = modal.querySelector('.speed-range-input');
@@ -145,7 +141,7 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
145
141
  myValue.innerHTML = `${values[0]}X`;
146
142
  }
147
143
  initSaveButton() {
148
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
144
+ const modal = this.getModal()
149
145
  const instance = this;
150
146
 
151
147
  const saveButton = modal.querySelector('.button-save');
@@ -153,7 +149,7 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
153
149
  saveButton.addEventListener('click', function (event) {
154
150
  instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
155
151
  event.preventDefault();
156
- instance.setInactiveModal();
152
+ instance.hideModal();
157
153
  })
158
154
  }
159
155
  setButtonSpeed() {
@@ -9,6 +9,13 @@ export class LTPlayerCommon {
9
9
  player: LTPlayer.PortraitType | LTPlayer.LandscapeType;
10
10
  plyr: Plyr;
11
11
 
12
+ setupCommon() {
13
+ this.playerPlay()
14
+ this.plyrOnPlaying()
15
+ this.plyrOnSeeking()
16
+ this.plyrOnControlsShown()
17
+ }
18
+
12
19
  playerPlay() {
13
20
  const instance = this.player;
14
21
 
@@ -204,4 +211,29 @@ export class LTPlayerCommon {
204
211
  }
205
212
  spanElement.innerHTML = ''; // Clear previous captions
206
213
  }
214
+
215
+ plyrOnSeeking() {
216
+ const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
217
+ const plyr: Plyr = this.plyr;
218
+ plyr.on('seeking', () => {
219
+ instance.statusFeedbackService.setLoadingSeek()
220
+ })
221
+ }
222
+
223
+ plyrOnPlaying() {
224
+ const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
225
+ const plyr: Plyr = this.plyr;
226
+ plyr.on('playing', () => {
227
+ instance.statusFeedbackService.clearLoading()
228
+ })
229
+ }
230
+
231
+ plyrOnControlsShown() {
232
+ const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
233
+ const plyr: Plyr = this.plyr;
234
+ plyr.on('controlsshown', () => {
235
+ instance.statusFeedbackService.setControlsVisible()
236
+ })
237
+ }
238
+
207
239
  }
@@ -13,7 +13,6 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
13
13
  this.plyr = eventManager.plyr;
14
14
 
15
15
  //init common events
16
- this.playerPlay();
17
16
  this.removeDesktopPlyrEvents();
18
17
 
19
18
  //init desktop events
@@ -26,6 +25,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
26
25
  this.plyrOnPause();
27
26
  this.plyrOnSeek();
28
27
  this.plyrOnCueChange();
28
+
29
+ this.setupCommon()
29
30
  }
30
31
 
31
32
  plyrOnSeek():void {
@@ -143,10 +144,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
143
144
 
144
145
  plyr.on('enterfullscreen', function LTPlayerDesktopEnterFullScreen(event) {
145
146
  //remove mini player on fullscreen
146
- const target = event.target as HTMLElement;
147
- const parent = target.closest('.lt-player');
148
147
 
149
- parent.classList.add('is-fullscreen');
148
+ instance.statusFeedbackService.setFullscreen()
150
149
  instance.miniPlayer.event.removeMiniPLOnFullScreen(instance, 'enterfullscreen');
151
150
 
152
151
  //fullscreen icon
@@ -158,10 +157,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
158
157
 
159
158
  plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen(event) {
160
159
  //add mini player on exit fullscreen
161
- const target = event.target as HTMLElement;
162
- const parent = target.closest('.lt-player');
163
160
 
164
- parent.classList.remove('is-fullscreen');
161
+ instance.statusFeedbackService.clearFullscreen()
165
162
  instance.miniPlayer.event.removeMiniPLOnFullScreen(instance, 'exitfullscreen');
166
163
 
167
164
  //fullscreen icon
@@ -191,6 +188,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
191
188
  let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
192
189
  let plyr: Plyr = this.plyr;
193
190
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
191
+ instance.statusFeedbackService.setLoading()
194
192
  LoaderService.removeSpinner(plyr.elements.container)
195
193
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
196
194
  })
@@ -212,11 +210,9 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
212
210
  let plyr: Plyr = this.plyr;
213
211
 
214
212
  plyr.on('cuechange', function LTPlayerDesktopTimeUpdate(event) {
215
- common.setCustomSubtitles(plyr.elements.controls, event)
213
+ if (instance.playerConfig.getCaptionsEnabled() && plyr.currentTrack >= 0) {
214
+ common.setCustomSubtitles(plyr.elements.controls, event)
215
+ }
216
216
  })
217
217
  }
218
-
219
- clearSubtitles(): void {
220
- this.clearCustomSubtitles(this.plyr.elements.controls)
221
- }
222
218
  }
@@ -13,7 +13,6 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
13
13
  this.plyr = eventManager.plyr;
14
14
 
15
15
  //init common events
16
- this.playerPlay();
17
16
  this.removeMobilePlyrEvents();
18
17
 
19
18
  //init mobile events
@@ -26,6 +25,8 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
26
25
  this.plyrOnPause();
27
26
  this.plyrOnSeek();
28
27
  this.plyrOnCueChange()
28
+
29
+ this.setupCommon()
29
30
  }
30
31
 
31
32
  plyrOnSeek():void {
@@ -132,10 +133,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
132
133
  let plyr: Plyr = this.plyr;
133
134
 
134
135
  plyr.on('enterfullscreen', function LTPlayerDesktopEnterFullScreen(event) {
135
- const target = event.target as HTMLElement;
136
- const parent = target.closest('.lt-player');
137
-
138
- parent.classList.add('is-fullscreen');
136
+ instance.statusFeedbackService.setFullscreen()
139
137
  instance.miniPlayer.event.removeMiniPLOnFullScreen(instance, 'enterfullscreen');
140
138
  //fullscreen icon
141
139
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
@@ -144,10 +142,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
144
142
  });
145
143
 
146
144
  plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen(event) {
147
- const target = event.target as HTMLElement;
148
- const parent = target.closest('.lt-player');
149
-
150
- parent.classList.remove('is-fullscreen');
145
+ instance.statusFeedbackService.clearFullscreen()
151
146
  instance.miniPlayer.event.removeMiniPLOnFullScreen(instance, 'exitfullscreen');
152
147
  //fullscreen icon
153
148
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
@@ -178,7 +173,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
178
173
  let plyr: Plyr = this.plyr;
179
174
 
180
175
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
181
- LoaderService.removeSpinner(plyr.elements.container)
176
+ instance.statusFeedbackService.setLoading()
182
177
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
183
178
  })
184
179
  }
@@ -235,7 +230,9 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
235
230
  let plyr: Plyr = this.plyr;
236
231
 
237
232
  plyr.on('cuechange', function LTPlayerDesktopTimeUpdate(event) {
238
- common.setCustomSubtitles(plyr.elements.controls, event)
233
+ if (instance.playerConfig.getCaptionsEnabled() && plyr.currentTrack >= 0) {
234
+ common.setCustomSubtitles(plyr.elements.controls, event)
235
+ }
239
236
  })
240
237
  }
241
238
 
@@ -14,6 +14,7 @@ import {LTPlayerShareManager} from "../../components/share/LTPlayerShareManager"
14
14
  import {LTPlayerHls} from "../../components/LTPlayerHls";
15
15
  import {LTPlayerVideo} from "../../components/video/LTPlayerVideo";
16
16
  import {LTPlayerCaptionsManager} from "../../components/captions/LTPlayerCaptions";
17
+ import {LTPlayerStatusFeedback} from "../../components/LTPlayerStatusFeedback";
17
18
 
18
19
  /**
19
20
  * Default Player type Service
@@ -38,6 +39,8 @@ export class LTPlayerController {
38
39
  hls : LTPlayerHls
39
40
  videoService : LTPlayerVideo
40
41
  captionsService : LTPlayerCaptionsManager
42
+ statusFeedbackService: LTPlayerStatusFeedback
43
+
41
44
  /**
42
45
  * Base player type service
43
46
  */
@@ -49,6 +52,7 @@ export class LTPlayerController {
49
52
  this.posterManager = new LTPlayerPosterManager();
50
53
  this.share = new LTPlayerShareManager();
51
54
  this.videoService = new LTPlayerVideo();
52
- this.captionsService = new LTPlayerCaptionsManager(this)
55
+ this.captionsService = new LTPlayerCaptionsManager(this);
56
+ this.statusFeedbackService = new LTPlayerStatusFeedback(this);
53
57
  }
54
58
  }
@@ -11,7 +11,11 @@ export class Helper {
11
11
  return device;
12
12
  }
13
13
 
14
- static setDebugEvent(data: string | object, type: string) {
14
+ static setDebugEvent(data: string | object, type?: string) {
15
+ if (type === undefined) {
16
+ type = 'info'
17
+ }
18
+
15
19
  if (process.env.DEBUG === "true") {
16
20
  switch (type) {
17
21
  case 'info':
@@ -3,6 +3,7 @@ import template from '../views/template.handlebars';
3
3
  import controlsTemplate from '../views/controls.handlebars';
4
4
  import posterTemplate from '../views/poster.handlebars';
5
5
  import settingsTemplate from '../views/settings.handlebars';
6
+ import settingsMobileTemplate from '../views/settings.mobile.handlebars';
6
7
  import additionalInfo from '../views/additionalInfo.handlebars';
7
8
  import share from '../views/share.handlebars';
8
9
  import background from '../views/background.handlebars';
@@ -43,6 +44,10 @@ export class TemplateService {
43
44
  return Mustache.render(settingsTemplate, data);
44
45
  }
45
46
 
47
+ getMobileSettings(data: Object) {
48
+ return Mustache.render(settingsMobileTemplate, data);
49
+ }
50
+
46
51
  getAdditionalInfo(data : Object) {
47
52
  return Mustache.render(additionalInfo, data);
48
53
  }
@@ -4,7 +4,7 @@
4
4
  <div class="settings-controllers-enable__subtitles settings">
5
5
  <p class="settings-text settings">Subtitles</p>
6
6
  <label class="subtitles-body__switch settings">
7
- <input id="captions-lt-player-{{id}}" class="subtitles-body__input-switch settings" value="" type="checkbox">
7
+ <input id="captions-lt-player-{{id}}" class="subtitles-body__input-switch settings" {{#captions_enabled }}checked{{/captions_enabled}} type="checkbox">
8
8
  <label for="captions-lt-player-{{id}}" class="subtitles-body__slider settings"></label>
9
9
  </label>
10
10
  </div>
@@ -0,0 +1,20 @@
1
+ <dialog class="settings-controllers settings">
2
+ <span class="line-button settings-controllers-header"></span>
3
+ <div class="settings-controllers-enable__subtitles settings">
4
+ <p class="settings-text settings">Subtitles</p>
5
+ <label class="subtitles-body__switch settings">
6
+ <input id="captions-lt-player-{{id}}" class="subtitles-body__input-switch settings" {{#captions_enabled }}checked{{/captions_enabled}} type="checkbox">
7
+ <label for="captions-lt-player-{{id}}" class="subtitles-body__slider settings"></label>
8
+ </label>
9
+ </div>
10
+ <div class="settings-controllers-enable__speed-range settings">
11
+ <p class="settings-text settings">Speed</p>
12
+ <div class="speed-range-input-body settings">
13
+ <output class="settings speed-range-value" style="display: flex; justify-content: center" id="speed-range-value-{{id}}"></output>
14
+ <input id="speed-range-{{id}}" type="range" min="0" max="3" step="1" class="speed-range-input settings">
15
+ </div>
16
+ </div>
17
+ <div class="settings-controllers-enable__button-save settings">
18
+ <button class="button-save settings">Save</button>
19
+ </div>
20
+ </dialog>
@@ -9,4 +9,7 @@
9
9
  <track kind="captions" label="{{label}} captions" src="{{url}}" srclang="{{srclang}}" {{default}} />
10
10
  {{/defaultConfig.captions}}
11
11
  </video>
12
+ <div class="loader__backdrop">
13
+ <div class="loader"><div></div><div></div><div></div><div></div></div>
14
+ </div>
12
15
  {{/video}}
@@ -1,46 +0,0 @@
1
- .lt-player-spinner {
2
-
3
- &__loader {
4
- position: absolute;
5
- width: 100%;
6
- height: 100%;
7
- display: flex;
8
- justify-content: center;
9
- align-items: center;
10
- z-index: 999;
11
- background: rgba(251,251,251,0.9);
12
-
13
- &__circle-svg {
14
- animation: rotate 2s linear infinite;
15
- width: 50px;
16
- height: 50px;
17
-
18
- & .path {
19
- stroke: $default_color_player;
20
- stroke-linecap: round;
21
- animation: dash 1.5s ease-in-out infinite;
22
- }
23
- }
24
- }
25
- }
26
-
27
- @keyframes rotate {
28
- 100% {
29
- transform: rotate(360deg);
30
- }
31
- }
32
-
33
- @keyframes dash {
34
- 0% {
35
- stroke-dasharray: 1, 150;
36
- stroke-dashoffset: 0;
37
- }
38
- 50% {
39
- stroke-dasharray: 90, 150;
40
- stroke-dashoffset: -35;
41
- }
42
- 100% {
43
- stroke-dasharray: 90, 150;
44
- stroke-dashoffset: -124;
45
- }
46
- }