@latest-thinking/lt-player 1.2.0 → 2.0.0-a

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 (205) hide show
  1. package/.editorconfig +1 -1
  2. package/.node-version +1 -0
  3. package/.nvmrc +1 -0
  4. package/README.md +162 -0
  5. package/dist/main.js +24375 -0
  6. package/package.json +31 -67
  7. package/tsconfig.json +2 -1
  8. package/vite-dev.config.mts +35 -0
  9. package/vite.config.mts +40 -0
  10. package/ README.md +0 -270
  11. package/.babelrc +0 -11
  12. package/.eslintrc.js +0 -6
  13. package/dist/css/lt-player-main.css +0 -3
  14. package/dist/css/lt-player-main.css.map +0 -1
  15. package/dist/fonts/0574e80a2483be7b033e.otf +0 -0
  16. package/dist/fonts/34274fbfb2f270b8d53b.otf +0 -0
  17. package/dist/fonts/80acced0ba3630ee652b.otf +0 -0
  18. package/dist/fonts/8ccea4947561e7008d19.otf +0 -0
  19. package/dist/fonts/d355445ed7d61b887e58.otf +0 -0
  20. package/dist/js/lt-player-main.js +0 -3
  21. package/dist/js/lt-player-main.js.LICENSE.txt +0 -9
  22. package/dist/js/lt-player-main.js.map +0 -1
  23. package/examples/basic.html +0 -35
  24. package/examples/lt-page-with-player.html +0 -3529
  25. package/examples/lt-page-with-player_files/Weiskopf_Coverphoto.jpg +0 -0
  26. package/examples/lt-page-with-player_files/ajax-progress.module.css +0 -49
  27. package/examples/lt-page-with-player_files/align.module.css +0 -32
  28. package/examples/lt-page-with-player_files/announce.js +0 -49
  29. package/examples/lt-page-with-player_files/autocomplete-loading.module.css +0 -22
  30. package/examples/lt-page-with-player_files/autocomplete.css +0 -16
  31. package/examples/lt-page-with-player_files/bootstrap.css +0 -22691
  32. package/examples/lt-page-with-player_files/clearfix.module.css +0 -15
  33. package/examples/lt-page-with-player_files/container-inline.module.css +0 -16
  34. package/examples/lt-page-with-player_files/cookiesjsr.min.css +0 -10
  35. package/examples/lt-page-with-player_files/core.css +0 -97
  36. package/examples/lt-page-with-player_files/details.module.css +0 -10
  37. package/examples/lt-page-with-player_files/fieldgroup.module.css +0 -9
  38. package/examples/lt-page-with-player_files/hidden.module.css +0 -53
  39. package/examples/lt-page-with-player_files/himme-alexander-beyond_0.jpg +0 -0
  40. package/examples/lt-page-with-player_files/item-list.module.css +0 -19
  41. package/examples/lt-page-with-player_files/js.module.css +0 -22
  42. package/examples/lt-page-with-player_files/latest_thinking.style.css +0 -6496
  43. package/examples/lt-page-with-player_files/logo-small.png +0 -0
  44. package/examples/lt-page-with-player_files/menu.css +0 -64
  45. package/examples/lt-page-with-player_files/nowrap.module.css +0 -8
  46. package/examples/lt-page-with-player_files/paragraphs.unpublished.css +0 -3
  47. package/examples/lt-page-with-player_files/position-container.module.css +0 -8
  48. package/examples/lt-page-with-player_files/progress.module.css +0 -51
  49. package/examples/lt-page-with-player_files/radix.style.css +0 -1
  50. package/examples/lt-page-with-player_files/reset-appearance.module.css +0 -15
  51. package/examples/lt-page-with-player_files/resize.module.css +0 -21
  52. package/examples/lt-page-with-player_files/search_api_autocomplete.css +0 -41
  53. package/examples/lt-page-with-player_files/sticky-header.module.css +0 -13
  54. package/examples/lt-page-with-player_files/system-status-counter.css +0 -30
  55. package/examples/lt-page-with-player_files/system-status-report-counters.css +0 -27
  56. package/examples/lt-page-with-player_files/system-status-report-general-info.css +0 -14
  57. package/examples/lt-page-with-player_files/tabledrag.module.css +0 -98
  58. package/examples/lt-page-with-player_files/tablesort.module.css +0 -19
  59. package/examples/lt-page-with-player_files/theme.css +0 -446
  60. package/examples/lt-page-with-player_files/thumbnail_MPI_CBS_Eingangsbereich.jpg +0 -0
  61. package/examples/lt-page-with-player_files/tree-child.module.css +0 -18
  62. package/examples/lt-page-with-player_files/widget-min.js +0 -10
  63. package/examples/lt-website.html +0 -76
  64. package/examples/portrait-with-subtitles.html +0 -81
  65. package/examples/samples/vtt/Pahl-Kerstin-Maria-MAIN-20230320.vtt +0 -765
  66. package/examples/samples/vtt/Sobolev-Anton-Subtitles-20230518_0.vtt +0 -352
  67. package/examples/samples/vtt/demo.vtt +0 -7
  68. package/src/assets/css/sample.css +0 -12
  69. package/src/assets/fonts/museo/MuseoSans-100.otf +0 -0
  70. package/src/assets/fonts/museo/MuseoSans-300.otf +0 -0
  71. package/src/assets/fonts/museo/MuseoSans-500.otf +0 -0
  72. package/src/assets/fonts/museo/MuseoSans-700.otf +0 -0
  73. package/src/assets/fonts/museo/MuseoSans-900.otf +0 -0
  74. package/src/assets/icons/arrow-down.svg +0 -8
  75. package/src/assets/icons/arrow-left.svg +0 -8
  76. package/src/assets/icons/chevron-down-full.svg +0 -7
  77. package/src/assets/icons/chevron-down.svg +0 -7
  78. package/src/assets/icons/chevron-up-full.svg +0 -7
  79. package/src/assets/icons/chevron-up.svg +0 -7
  80. package/src/assets/icons/close.svg +0 -8
  81. package/src/assets/icons/compass.svg +0 -8
  82. package/src/assets/icons/external-link.svg +0 -9
  83. package/src/assets/icons/facebook.svg +0 -7
  84. package/src/assets/icons/fast-backward.svg +0 -8
  85. package/src/assets/icons/fast-forward.svg +0 -8
  86. package/src/assets/icons/file-text.svg +0 -11
  87. package/src/assets/icons/home.svg +0 -8
  88. package/src/assets/icons/logo-big.png +0 -0
  89. package/src/assets/icons/logo.png +0 -0
  90. package/src/assets/icons/maximize.svg +0 -7
  91. package/src/assets/icons/mini-player.svg +0 -8
  92. package/src/assets/icons/minimize.svg +0 -7
  93. package/src/assets/icons/more-vertical.svg +0 -9
  94. package/src/assets/icons/mute.svg +0 -9
  95. package/src/assets/icons/pause.svg +0 -8
  96. package/src/assets/icons/play.svg +0 -8
  97. package/src/assets/icons/search.svg +0 -8
  98. package/src/assets/icons/settings.svg +0 -8
  99. package/src/assets/icons/share.svg +0 -11
  100. package/src/assets/icons/skip-backward.svg +0 -8
  101. package/src/assets/icons/skip-forward.svg +0 -8
  102. package/src/assets/icons/speed-1-5.svg +0 -7
  103. package/src/assets/icons/speed-1.svg +0 -7
  104. package/src/assets/icons/speed-2.svg +0 -7
  105. package/src/assets/icons/subtitles.svg +0 -7
  106. package/src/assets/icons/twitter.svg +0 -7
  107. package/src/assets/icons/university.svg +0 -9
  108. package/src/assets/icons/user.svg +0 -8
  109. package/src/assets/icons/volume-1.svg +0 -15
  110. package/src/assets/icons/volume-2.svg +0 -15
  111. package/src/assets/icons/volume-3.svg +0 -15
  112. package/src/assets/sass/abstracts/_mixins.scss +0 -145
  113. package/src/assets/sass/abstracts/_placeholders.scss +0 -112
  114. package/src/assets/sass/abstracts/_variables.scss +0 -68
  115. package/src/assets/sass/abstracts/all.scss +0 -4
  116. package/src/assets/sass/app.scss +0 -99
  117. package/src/assets/sass/components/_all.scss +0 -6
  118. package/src/assets/sass/components/_buttons.scss +0 -1
  119. package/src/assets/sass/components/_images.scss +0 -4
  120. package/src/assets/sass/components/_loader.scss +0 -187
  121. package/src/assets/sass/components/_modal.scss +0 -365
  122. package/src/assets/sass/components/_range.scss +0 -33
  123. package/src/assets/sass/core/_all.scss +0 -13
  124. package/src/assets/sass/core/_fonts.scss +0 -55
  125. package/src/assets/sass/core/_player.scss +0 -71
  126. package/src/assets/sass/core/_typography.scss +0 -13
  127. package/src/assets/sass/layout/_all.scss +0 -3
  128. package/src/assets/sass/layout/_grid.scss +0 -0
  129. package/src/assets/sass/sections/_additional-info.scss +0 -90
  130. package/src/assets/sass/sections/_all.scss +0 -6
  131. package/src/assets/sass/sections/_control.scss +0 -122
  132. package/src/assets/sass/sections/_poster.scss +0 -319
  133. package/src/assets/sass/sections/_settings.scss +0 -504
  134. package/src/assets/sass/sections/_share.scss +0 -250
  135. package/src/assets/sass/sections/_subtitles.scss +0 -85
  136. package/src/assets/sass/sections/controllers/_all.scss +0 -4
  137. package/src/assets/sass/sections/controllers/_botom.scss +0 -522
  138. package/src/assets/sass/sections/controllers/_mini-player.scss +0 -169
  139. package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +0 -260
  140. package/src/assets/sass/sections/controllers/_top.scss +0 -169
  141. package/src/components/LTPlayerDevMethode.ts +0 -192
  142. package/src/components/LTPlayerEventsManager.ts +0 -31
  143. package/src/components/LTPlayerHls.ts +0 -38
  144. package/src/components/LTPlayerManager.ts +0 -266
  145. package/src/components/LTPlayerSettingsManager.ts +0 -117
  146. package/src/components/LTPlayerSetup.ts +0 -286
  147. package/src/components/LTPlayerStatusFeedback.ts +0 -76
  148. package/src/components/LTPlayerStorage.ts +0 -58
  149. package/src/components/LTPlayerType.ts +0 -371
  150. package/src/components/LTPlayerUpdate.ts +0 -61
  151. package/src/components/addInfo/LTPLayerAddInfoResizeManager.ts +0 -15
  152. package/src/components/addInfo/LTPlayerAddInfoDesktop.ts +0 -127
  153. package/src/components/addInfo/LTPlayerAddInfoManager.ts +0 -230
  154. package/src/components/addInfo/LTPlayerAddInfoMobile.ts +0 -113
  155. package/src/components/captions/LTPlayerCaptions.ts +0 -80
  156. package/src/components/config/LTPlayerConfig.ts +0 -280
  157. package/src/components/config/LTPlayerConfigProcessor.ts +0 -604
  158. package/src/components/controls/LTPlayerChapters.ts +0 -285
  159. package/src/components/controls/LTPlayerControls.ts +0 -57
  160. package/src/components/controls/LTPlayerControlsEvents.ts +0 -946
  161. package/src/components/controls/LTPlayerMini.ts +0 -285
  162. package/src/components/controls/LTPlayerSettingsControlsManager.ts +0 -60
  163. package/src/components/controls/settings/LTPlayerCommonSettingsControllers.ts +0 -71
  164. package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +0 -135
  165. package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +0 -211
  166. package/src/components/events/LTPlayer.ts +0 -194
  167. package/src/components/events/LTPlayerCommon.ts +0 -252
  168. package/src/components/events/LTPlayerDesktop.ts +0 -222
  169. package/src/components/events/LTPlayerMobile.ts +0 -243
  170. package/src/components/poster/LTPlayerPoster.ts +0 -78
  171. package/src/components/poster/LTPlayerPosterEvents.ts +0 -172
  172. package/src/components/poster/LTPlayerPosterManager.ts +0 -46
  173. package/src/components/poster/LTPlayerPosterPreload.ts +0 -51
  174. package/src/components/poster/LTPlayerPosterPreloadEvents.ts +0 -152
  175. package/src/components/share/LTPlayerShareDesktop.ts +0 -131
  176. package/src/components/share/LTPlayerShareEvents.ts +0 -64
  177. package/src/components/share/LTPlayerShareManager.ts +0 -58
  178. package/src/components/share/LTPlayerShareMobile.ts +0 -154
  179. package/src/components/video/LTPlayerVideo.ts +0 -49
  180. package/src/global/controllers/LTPlayerController.ts +0 -58
  181. package/src/global/interfaces/EventsInterfaces.ts +0 -11
  182. package/src/global/interfaces/SettingsControlsInterfaces.ts +0 -3
  183. package/src/global/interfaces/TypeInterface.ts +0 -9
  184. package/src/global/types/ModuleTypes.d.ts +0 -35
  185. package/src/global/types/ModuleViews.d.ts +0 -13
  186. package/src/global/types/ModuleWindow.d.ts +0 -12
  187. package/src/global/types/Modules.d.ts +0 -44
  188. package/src/index.ts +0 -10
  189. package/src/json-schema/player-config.json +0 -16
  190. package/src/services/Helper.ts +0 -147
  191. package/src/services/IconsService.ts +0 -124
  192. package/src/services/LTPlayerRotateDeviceService.ts +0 -15
  193. package/src/services/LoaderService.ts +0 -21
  194. package/src/services/ResizeService.ts +0 -352
  195. package/src/services/TemplateService.ts +0 -136
  196. package/src/services/ValidatorService.ts +0 -31
  197. package/src/views/additionalInfo.handlebars +0 -103
  198. package/src/views/background.handlebars +0 -5
  199. package/src/views/controls.handlebars +0 -390
  200. package/src/views/onloadPoster.handlebars +0 -1
  201. package/src/views/poster.handlebars +0 -69
  202. package/src/views/settings.handlebars +0 -31
  203. package/src/views/settings.mobile.handlebars +0 -22
  204. package/src/views/share.handlebars +0 -101
  205. package/src/views/template.handlebars +0 -15
@@ -1,211 +0,0 @@
1
- import {LTPlayerSettingsControlsManager} from "../LTPlayerSettingsControlsManager";
2
- import {SettingsControlsInterfaces} from "../../../global/interfaces/SettingsControlsInterfaces";
3
-
4
- export class LTPlayerMobileSettingsControllers implements SettingsControlsInterfaces {
5
-
6
- settingsInstance: LTPlayerSettingsControlsManager
7
- constructor(settingsInstance: LTPlayerSettingsControlsManager) {
8
- this.settingsInstance = settingsInstance;
9
- this.init();
10
- }
11
-
12
- init() {
13
- this.addOpenSettingsEventButton();
14
- this.setButtonSpeed();
15
- this.createModal();
16
- }
17
-
18
- addOpenSettingsEventButton() {
19
- const settingsButton = this.settingsInstance.playerInstance.plyr.elements.controls.querySelector('.plyr__controls_settings-button');
20
- const instance = this;
21
- if (settingsButton) {
22
- let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(settingsButton);
23
- if (mobileEvent) {
24
- mobileEvent.on('singletap', function LTPlayerMobileSettingsButton() {
25
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
26
- instance.initCaptionsEvent();
27
- instance.initSpeedVideoEvent();
28
- instance.initSaveButton();
29
- instance.showModal()
30
- setTimeout(() => {
31
- instance.setInactiveTouchModal();
32
- }, 100)
33
- })
34
- }
35
- }
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
-
54
- setInactiveTouchModal() {
55
- const modal = this.getModal()
56
- const background = modal.querySelector('.settings-controllers-enable__background');
57
- const settingsContainerHeader = modal.querySelector('.settings-controllers-header')
58
- const instance = this;
59
-
60
- if (background) {
61
- let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(background);
62
- if (mobileEvent) {
63
- mobileEvent.on('singletap', function LTPlayerMobileSettingsBackground(event) {
64
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
65
- event.preventDefault();
66
- })
67
- }
68
- }
69
-
70
- if (settingsContainerHeader) {
71
- let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(settingsContainerHeader);
72
- if (mobileEvent) {
73
- mobileEvent.on('pan', function LTPlayerMobileSettingsHeader(event) {
74
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
75
- event.preventDefault();
76
- let target = event.target as HTMLElement;
77
- instance.hideModal();
78
- })
79
- }
80
- }
81
- }
82
-
83
- getModal(): HTMLDialogElement {
84
- const playerElementContainer = this.settingsInstance.playerInstance.playerConfig.getPlayerElementContainer()
85
- return playerElementContainer.querySelector("dialog")
86
- }
87
-
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.hasCaptionsUrl() &&
93
- this.settingsInstance.playerInstance.playerConfig.getCaptionsEnabled(),
94
- captions_missing: !this.settingsInstance.playerInstance.playerConfig.hasCaptionsUrl()
95
- }
96
- );
97
- const playerElementContainer = this.settingsInstance.playerInstance.playerConfig.getPlayerElementContainer()
98
- playerElementContainer.insertAdjacentHTML('beforeend', settingsDialog)
99
-
100
- const modal = this.getModal()
101
- modal.addEventListener('click', (e) => {
102
- if (e.target === modal) {
103
- this.hideModal()
104
- }
105
- });
106
-
107
- }
108
-
109
- initCaptionsEvent() {
110
- const modal = this.getModal()
111
- const checkBox = modal.querySelector(`.subtitles-body__input-switch`) as HTMLInputElement;
112
- const instance = this;
113
- if (checkBox) {
114
- checkBox.addEventListener('change', () => {
115
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
116
-
117
- if (!checkBox.checked) {
118
- this.settingsInstance.playerInstance.captionsService.disableCaptions();
119
- } else {
120
- this.settingsInstance.playerInstance.captionsService.enableCaptions();
121
- }
122
-
123
- })
124
- }
125
- }
126
- initSpeedVideoEvent() {
127
- const modal = this.getModal()
128
- const playerInstance = this.settingsInstance.playerInstance;
129
- const player = this.settingsInstance.player;
130
- const rangeInput: HTMLInputElement = modal.querySelector('.speed-range-input');
131
-
132
-
133
- const myRange: HTMLInputElement = modal.querySelector(`#speed-range-${playerInstance.playerConfig.getPlayerId()}`);
134
-
135
- myRange.value = String(0);
136
-
137
- const myValue: HTMLElement = modal.querySelector(`#speed-range-value-${playerInstance.playerConfig.getPlayerId()}`);
138
-
139
- myValue.style.top = "-20px";
140
-
141
- let values:any = [1,1.25,1.50,2];
142
-
143
- const instance = this;
144
- myRange.oninput = function() {
145
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
146
- player.speed = parseFloat(values[rangeInput.value]);
147
- myValue.innerHTML = `${values[rangeInput.value]}X`;
148
- };
149
-
150
- player.speed = parseFloat(String(values[0]));
151
- myValue.innerHTML = `${values[0]}X`;
152
- }
153
- initSaveButton() {
154
- const modal = this.getModal()
155
- const instance = this;
156
-
157
- const saveButton = modal.querySelector('.button-save');
158
-
159
- saveButton.addEventListener('click', function (event) {
160
- instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
161
- event.preventDefault();
162
- instance.hideModal();
163
- })
164
- }
165
- setButtonSpeed() {
166
- let playerControlsContainer = this.settingsInstance.playerInstance.plyr.elements.controls;
167
- let playerSpeedButton = playerControlsContainer.querySelector('.plyr__controls_speed-button');
168
- let plyr = this.settingsInstance.playerInstance.plyr;
169
- let instance = this.settingsInstance.playerInstance;
170
-
171
- if (playerSpeedButton) {
172
- let speedSpan = document.createElement('span');
173
- playerSpeedButton.appendChild(speedSpan);
174
- speedSpan.innerHTML = `1X`;
175
- speedSpan.className = '';
176
- speedSpan.classList.add('playback-speed--1X');
177
-
178
- let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(playerSpeedButton);
179
- if (mobileEvent) {
180
- mobileEvent.on('singletap', function LTPlayerMobileSpeedButton() {
181
- let playSpeed = plyr.speed + 0.25;
182
-
183
- if (playSpeed > 2) {
184
- speedSpan.innerHTML = `1X`;
185
- plyr.speed = 1;
186
- speedSpan.className = '';
187
- speedSpan.classList.add('playback-speed--1X');
188
- return;
189
- }
190
-
191
- if (playSpeed === 1.75) {
192
- plyr.speed = playSpeed + 0.25
193
- speedSpan.innerHTML = `2X`;
194
- speedSpan.className = '';
195
- speedSpan.classList.add('playback-speed--2X');
196
- return;
197
- }
198
-
199
- plyr.speed = playSpeed;
200
- const displaySpeed = Math.floor(playSpeed * 10) / 10;
201
- speedSpan.innerHTML = displaySpeed + "X";
202
- speedSpan.className = '';
203
- speedSpan.classList.add('playback-speed--' + playSpeed + 'X');
204
-
205
- instance.playerControl.mobileEvents.showControls(instance);
206
- })
207
- }
208
- }
209
- }
210
-
211
- }
@@ -1,194 +0,0 @@
1
- import {LTPlayer} from "../LTPlayerType";
2
- import {PlyrEvent} from "plyr";
3
-
4
- export namespace LTPlayerEvents {
5
- export class Desktop {
6
- playPause(plyrEvent: PlyrEvent) {
7
- const players = window.Player.players;
8
- const currentPlayPlayer = plyrEvent.detail.plyr;
9
-
10
- players.forEach( player => {
11
- if (player.plyr != currentPlayPlayer) {
12
- player.plyr.pause();
13
-
14
- player.plyr.on('ready', () => {
15
- const playerContainer = player.plyr.elements.container;
16
-
17
- const miniPlayerControls = playerContainer.querySelector('.lt-player-mini-player-controls');
18
-
19
- if (miniPlayerControls) {
20
- miniPlayerControls.remove();
21
- }
22
-
23
- const miniPlayersBackground = playerContainer.querySelector('.lt-player-mini-player-background');
24
-
25
- if (miniPlayersBackground) {
26
- miniPlayersBackground.remove();
27
- }
28
-
29
- const miniPlayerEnable = playerContainer.querySelector('.lt-player-mini-enable');
30
- const miniPlayerEnableSize = playerContainer.querySelector(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
31
-
32
- if (miniPlayerEnable) {
33
- miniPlayerEnable.classList.remove('lt-player-mini-enable');
34
- }
35
- if (miniPlayerEnableSize) {
36
- miniPlayerEnableSize.classList.remove(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
37
- }
38
-
39
- })
40
-
41
- }
42
- })
43
-
44
- }
45
-
46
- endVideo(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
47
-
48
- let player = instance.plyr;
49
- const playerContainer = player.elements.container;
50
-
51
- const disableControls = () => {
52
- const controls = player.elements.controls;
53
-
54
- if (controls.classList.contains('plyr__controls-enable')) {
55
- controls.classList.remove('plyr__controls-enable')
56
- }
57
-
58
- const volumeControl = controls.querySelector('.bottom-controller__volume_control');
59
- if (volumeControl) {
60
- const volumeButton = volumeControl.querySelector('.button-open');
61
- const volumeBackground = volumeControl.querySelector('.volume_control__background');
62
- const volumeBackgroundArea = volumeControl.querySelector('.volume_control__background__area');
63
- const volumeArea = volumeControl.querySelector('.volume_control__background__area__range');
64
-
65
-
66
- if (volumeButton) {
67
- volumeButton.classList.remove('d-none');
68
- }
69
-
70
- if (volumeBackground) {
71
- volumeBackground.classList.add('d-none')
72
- }
73
-
74
- if (volumeBackgroundArea) {
75
- volumeBackgroundArea.classList.add('d-none')
76
- }
77
-
78
- if (volumeArea) {
79
- volumeArea.classList.remove('volume-area-open')
80
- }
81
-
82
- if (volumeControl) {
83
- volumeControl.classList.remove('volume-area-open');
84
- volumeControl.classList.remove('volume-control-enable');
85
- }
86
- }
87
- const controlsBackground = player.elements.container.querySelector('.plyr__controls__mobile-background');
88
- if (controlsBackground) {
89
- if (!controlsBackground.classList.contains('d-none')) {
90
- controlsBackground.classList.add('d-none');
91
- }
92
- }
93
-
94
- }
95
- const enablePoster = () => {
96
-
97
- const customPoster = playerContainer.querySelector('.lt-player__poster');
98
- const controls = playerContainer.querySelector('.plyr__controls');
99
- const playerPosterImage = playerContainer.querySelector('.lt-player__poster__image-body');
100
-
101
- playerContainer.classList.add('plyr--stopped')
102
- customPoster.classList.remove('d-none');
103
- controls.classList.add('d-none');
104
-
105
- if (playerPosterImage) {
106
- playerPosterImage.classList.remove('lt-player__poster__image-body--preload');
107
- }
108
-
109
- if (!player.poster) {
110
- player.poster = instance.playerConfig.getPosterImage();
111
- }
112
-
113
- }
114
-
115
- const disableSettings = () => {
116
-
117
- const settingsBody = playerContainer.querySelector('.settings-controllers');
118
-
119
- if (!settingsBody) {
120
-
121
- const modal = document.querySelector('.lt-player-mobile-settings-modal');
122
-
123
- if (modal) {
124
- modal.remove();
125
- }
126
-
127
-
128
- return;
129
- }
130
-
131
- if (settingsBody.classList.contains('settings-controllers-enable')) {
132
-
133
- const settingsBody = playerContainer.querySelector('.settings-controllers');
134
- player.elements.controls.classList.remove('plyr__controls-enable-settings')
135
-
136
- settingsBody.classList.remove('settings-controllers-enable');
137
-
138
- const background = document.querySelector('.settings-controllers-enable__background');
139
-
140
- if (!background.classList.contains('d-none')) {
141
- background.classList.add('d-none');
142
- }
143
- }
144
- }
145
-
146
- const exitMiniPLayer = () => {
147
- let miniPlayer = {
148
- controls : playerContainer.querySelector('.lt-player-mini-player-controls'),
149
- background: playerContainer.querySelector('.lt-player-mini-player-background'),
150
- enable: playerContainer.querySelector('.lt-player-mini-enable'),
151
- size: playerContainer.querySelector(`.lt-player-mini-${instance.playerConfig.getPlayerType()}`)
152
- };
153
-
154
- if (miniPlayer.controls) {
155
- miniPlayer.controls.remove();
156
- }
157
-
158
- if (miniPlayer.background) {
159
- miniPlayer.background.remove();
160
- }
161
-
162
- if (miniPlayer.size) {
163
- miniPlayer.size.classList.remove(`lt-player-mini-${instance.playerConfig.getPlayerType()}`)
164
- }
165
-
166
- if (miniPlayer.enable) {
167
- miniPlayer.enable.classList.remove('lt-player-mini-enable')
168
- }
169
- }
170
-
171
- const exitFullScreen = () => {
172
- if (player.fullscreen.active) {
173
- player.fullscreen.exit();
174
- }
175
- }
176
-
177
- enablePoster();
178
- disableSettings();
179
- exitMiniPLayer();
180
- exitFullScreen();
181
- disableControls();
182
-
183
- if (!instance.plyr.elements.container.classList.contains('plyr__poster-enabled')) {
184
- instance.plyr.elements.container.classList.add('plyr__poster-enabled');
185
- }
186
-
187
- instance.statusFeedbackService.clearLoading()
188
- }
189
-
190
- }
191
- export class Mobile {
192
-
193
- }
194
- }
@@ -1,252 +0,0 @@
1
- import {LTPlayer} from "../LTPlayerType";
2
- import Plyr, {PlyrEvent} from "plyr";
3
- import {LoaderService} from "../../services/LoaderService";
4
- import {LTPlayerPosterPreloadEvents} from "../poster/LTPlayerPosterPreloadEvents";
5
- import {plyr} from "../../global/types/ModuleTypes";
6
-
7
- export class LTPlayerCommon {
8
-
9
- player: LTPlayer.PortraitType | LTPlayer.LandscapeType;
10
- plyr: Plyr;
11
-
12
- setupCommon() {
13
- this.playerPlay()
14
- this.plyrOnPlaying()
15
- this.plyrOnSeeking()
16
- this.plyrOnControlsShown()
17
- this.plyrOnCanplay()
18
- }
19
-
20
- playerPlay() {
21
- const instance = this.player;
22
-
23
- this.plyr.on('play', function LTPlayerPlay(event) {
24
-
25
- if (!instance.plyr.elements.controls.classList.contains('plyr__controls-enable')) {
26
- instance.plyr.elements.controls.classList.add('plyr__controls-enable');
27
- }
28
-
29
- instance.desktopEvents.playPause(event);
30
-
31
- if (instance.additionalInfoService) {
32
- instance.additionalInfoService.setCurrentPlayerPlay(instance, event);
33
- }
34
-
35
- })
36
- }
37
- setDefaultSettingsConfig() {
38
- const instance = this.player;
39
-
40
- instance.plyr.speed = 1;
41
-
42
- if (!instance.plyr.isEmbed) {
43
- let checkCaptions = (instance.plyr as plyr).captions;
44
-
45
- if (checkCaptions.currentTrack >= 0) {
46
- instance.plyr.toggleCaptions(true);
47
- return;
48
- }
49
- instance.plyr.toggleCaptions(false);
50
- return;
51
- }
52
-
53
- instance.plyr.embed.getTextTracks().then( (response: string | any[]) => {
54
- if (response.length !== 0) {
55
- instance.plyr.toggleCaptions(true);
56
- return;
57
- }
58
- instance.plyr.toggleCaptions(false);
59
-
60
- })
61
- }
62
- removeDesktopPlyrEvents() {
63
- let plyrInstance = this.plyr as Plyr as Plyr & { eventListeners: Array<any> }
64
-
65
- plyrInstance.eventListeners.forEach(function (eventListener) {
66
- //remove dblclick event from plyr
67
- if (eventListener.type === 'dblclick') {
68
- eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options);
69
- }
70
- });
71
- }
72
-
73
- removeMobilePlyrEvents() {
74
- let plyrInstance = this.plyr as Plyr as Plyr & { eventListeners: Array<any> }
75
- const playerInstance = this.player;
76
-
77
- plyrInstance.eventListeners.forEach(function (eventListener) {
78
-
79
- if (playerInstance.playerConfig.getDevice() === 'mobile') {
80
- const deleteTouchEvents = () => {
81
- if (!eventListener.element.classList.contains('plyr__progress')) {
82
- if (!eventListener.element.classList.contains('plyr__progress__seek')) {
83
- eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options);
84
- }
85
- }
86
- if (eventListener.element.classList.length === 0) {
87
- eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options);
88
- }
89
- }
90
-
91
- //remove mobile touch event from plyr
92
- if (eventListener.type === 'touchstart') {
93
- deleteTouchEvents();
94
- }
95
-
96
- if (eventListener.type === 'touchend') {
97
- deleteTouchEvents();
98
- }
99
-
100
- if (eventListener.type === 'touchmove') {
101
- deleteTouchEvents();
102
- }
103
- if (eventListener.type === 'mousemove') {
104
- deleteTouchEvents();
105
- }
106
-
107
- if (eventListener.type === 'click') {
108
- eventListener.element.removeEventListener(eventListener.type, eventListener.callback, eventListener.options);
109
- }
110
- }
111
- });
112
- }
113
- onReadyPlayer() {
114
- //set share button
115
- if (this.player.playerConfig.getShareData()) {
116
- if (this.player.playerConfig.getDevice() === 'mobile') {
117
- this.player.share.events.mobile.init();
118
- } else {
119
- this.player.share.events.desktop.init();
120
- }
121
- }
122
-
123
- //set poster
124
- this.player.posterManager.mobileEvents.onload(this.player);
125
-
126
- if (this.player.playerConfig.isAutoPlay()) {
127
- let playerContainer = this.player.plyr.elements.container;
128
-
129
- const disablePoster = () => {
130
- playerContainer.querySelector(`.lt-player__poster`).classList.add('d-none');
131
- playerContainer.querySelector('.plyr__controls').classList.remove('d-none');
132
- }
133
-
134
- if (this.player.plyr.embed) {
135
- disablePoster();
136
- playerContainer.querySelector(`.lt-player__poster`).insertAdjacentHTML('afterend', LoaderService.getSpinner())
137
-
138
- this.player.plyr.embed.play().then(function () {
139
- LoaderService.removeSpinner(playerContainer)
140
- });
141
- LoaderService.removeSpinner(playerContainer)
142
- } else {
143
- this.player.plyr.play();
144
- disablePoster();
145
- }
146
-
147
- }
148
- }
149
-
150
- endVideo() {
151
- this.player.desktopEvents.endVideo(this.player);
152
- }
153
-
154
- timeUpdate(event: PlyrEvent) {
155
-
156
- //set chapters time and title
157
- if (this.player.playerControl.chaptersService) {
158
- this.player.playerControl.chaptersService.updateCurrentTimeAndTitle(this.player, event);
159
- }
160
- }
161
-
162
-
163
- preloadPoster = {
164
- ready(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
165
-
166
- const preloadData = instance.playerConfig.getPreload();
167
-
168
- LTPlayerPosterPreloadEvents.preloadEvents.removePosterImage(instance);
169
-
170
- if (preloadData.autoType) {
171
- if (instance.plyr.isEmbed) {
172
- LTPlayerPosterPreloadEvents.preloadEvents.embedPlay(instance, 'event');
173
-
174
- }
175
-
176
- if (instance.plyr.isHTML5) {
177
- LTPlayerPosterPreloadEvents.preloadEvents.html5Play(instance, 'event');
178
-
179
- }
180
- }
181
-
182
- },
183
-
184
- timeUpdate(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, type: string) {
185
- LTPlayerPosterPreloadEvents.preloadEvents.stop(instance, type);
186
- }
187
- }
188
-
189
- setCustomSubtitles(controls: HTMLElement, event: Plyr.PlyrEvent )
190
- {
191
- const eventPlayer: any = event.detail.plyr;
192
-
193
- const customSubtitlesElement = controls.querySelector('.lt-player-custom-captions');
194
- const spanElement = customSubtitlesElement.querySelector('span');
195
-
196
- if (!spanElement) {
197
- return;
198
- }
199
- if (!eventPlayer.captions.currentTrackNode.activeCues) {
200
- return;
201
- }
202
- if (eventPlayer.captions.currentTrackNode.activeCues.length > 0) {
203
- spanElement.innerHTML = eventPlayer.captions.currentTrackNode.activeCues[0].text;
204
- } else {
205
- spanElement.innerHTML = ''; // Clear previous captions
206
- }
207
- }
208
-
209
- clearCustomSubtitles(controls: HTMLElement)
210
- {
211
- const customSubtitlesElement = controls.querySelector('.lt-player-custom-captions');
212
- const spanElement = customSubtitlesElement.querySelector('span');
213
-
214
- if (!spanElement) {
215
- return;
216
- }
217
- spanElement.innerHTML = ''; // Clear previous captions
218
- }
219
-
220
- plyrOnSeeking() {
221
- const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
222
- const plyr: Plyr = this.plyr;
223
- plyr.on('seeking', () => {
224
- instance.statusFeedbackService.setLoadingSeek()
225
- })
226
- }
227
-
228
- plyrOnPlaying() {
229
- const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
230
- const plyr: Plyr = this.plyr;
231
- plyr.on('playing', () => {
232
- instance.statusFeedbackService.clearLoading()
233
- })
234
- }
235
-
236
- plyrOnCanplay() {
237
- const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
238
- const plyr: Plyr = this.plyr;
239
- plyr.on('canplay', () => {
240
- instance.statusFeedbackService.clearLoading()
241
- })
242
- }
243
-
244
- plyrOnControlsShown() {
245
- const instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
246
- const plyr: Plyr = this.plyr;
247
- plyr.on('controlsshown', () => {
248
- instance.statusFeedbackService.setControlsVisible()
249
- })
250
- }
251
-
252
- }