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

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 +163 -0
  5. package/dist/main.js +29712 -0
  6. package/package.json +32 -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,266 +0,0 @@
1
- import {playerConfigType, playerManger} from "../global/types/ModuleTypes";
2
- import {LTPlayer} from "./LTPlayerType"
3
- import {LTPlayerSetup} from "./LTPlayerSetup";
4
- export class LTPlayerManager {
5
-
6
- /**
7
- * All players instance
8
- */
9
- players: Array<LTPlayer.LandscapeType| LTPlayer.PortraitType> = [];
10
-
11
-
12
- /**
13
- * Create a new instance of the Player LTPlayerManager
14
- *
15
- */
16
- constructor() {
17
- this.initPageDomElements();
18
- }
19
-
20
- /**
21
- * Init player by default names
22
- */
23
- initPageDomElements() {
24
-
25
- let domElements: NodeListOf<HTMLElement>;
26
-
27
- domElements = document.querySelectorAll(`.${process.env.DEFAULT_DOM_HTML_ELEMENTS}, #${process.env.DEFAULT_DOM_HTML_ELEMENTS}`);
28
-
29
- if (domElements.length !== 0) {
30
- domElements = document.querySelectorAll('[data-lt-player-config]');
31
- }
32
-
33
- if (domElements.length === 0) {
34
- // console.error(`Lt Player: No Element or Node List Of Element, found in dom!`);
35
- // console.error('Use one of below examples')
36
- // console.table({
37
- // Example_1: '<div class="lt-player" data-lt-player-config="{config}"> </div>',
38
- // Example_2: '<div data-lt-player-config="{config}"> </div>'
39
- // })
40
- return;
41
- }
42
-
43
- domElements.forEach(element => {
44
- this.initBySelector(element);
45
- })
46
-
47
- return;
48
-
49
- }
50
-
51
- /**
52
- * Init player by identifier
53
- * @param identifier
54
- * @param playerConfig
55
- */
56
- initByClassOrID(identifier: string, playerConfig?: playerConfigType) {
57
-
58
- if (typeof identifier !== 'string') {
59
- console.error('Identifier has another type of');
60
- return;
61
- }
62
-
63
- let defaultSelector: HTMLElement = document.querySelector(`.${identifier}, #${identifier}`);
64
-
65
-
66
- if (!defaultSelector) {
67
- if (process.env.DEBUG === "true") {
68
- console.error(`No item with ${identifier} found`);
69
- }
70
- return;
71
- }
72
- return new Promise(resolve => {
73
- this.initBySelector(defaultSelector, playerConfig).then(result => {
74
- resolve(result);
75
- })
76
- })
77
-
78
- }
79
-
80
- /**
81
- * Init player by HTMLElement selector
82
- * @param selector
83
- * @param playerConfig
84
- */
85
- initBySelector(selector: HTMLElement, playerConfig?: playerConfigType) {
86
-
87
- let config: playerConfigType | string = selector.dataset.ltPlayerConfig;
88
-
89
- if (!config) {
90
- config = playerConfig;
91
- }
92
-
93
- if (config !== undefined) {
94
- let configData: playerConfigType;
95
-
96
- if (typeof config === "string") {
97
- configData = JSON.parse(config);
98
- } else {
99
- configData = config;
100
- }
101
-
102
- Object.assign(configData.body, {playerContainer: selector})
103
-
104
- return new Promise(resolve => {
105
- this.initPlayer(configData).then( result => {
106
- resolve(result);
107
- })
108
- })
109
- }
110
-
111
- return new Promise((resolve, reject) => {
112
- console.error(`Lt Player: No "data-lt-player-config" attribute is set on element!`);
113
- console.log(selector)
114
- console.error('Use one of below examples')
115
- console.table({
116
- Example_1: '<div class="lt-player" data-lt-player-config="{config}"> </div>',
117
- })
118
- reject()
119
- })
120
-
121
-
122
- }
123
-
124
- /**
125
- * Init Player Instance, parse config
126
- * @param playerConfig
127
- * @protected
128
- */
129
- public initPlayer(playerConfig?: playerConfigType): Promise<any> | null {
130
-
131
- const setup = new LTPlayerSetup();
132
-
133
- return new Promise((resolve, reject) => {
134
- if (!setup.checkIfPlayerExists(playerConfig)) {
135
- reject('Duplicate player');
136
- return;
137
- }
138
- let setupPLayer = setup.init(playerConfig);
139
-
140
- if (setupPLayer) {
141
- setupPLayer.then( result => {
142
- this.players.push(result);
143
- resolve(result);
144
- })
145
- } else {
146
- reject('Player is not setup')
147
- }
148
-
149
- })
150
- }
151
-
152
- /**
153
- * Get player instance
154
- * @return null | LTPlayer.LandscapeType | LTPlayer.PortraitType
155
- * @param player
156
- */
157
- getPlayer(player: string | Element | HTMLElement | number): null | LTPlayer.LandscapeType | LTPlayer.PortraitType {
158
-
159
- if (this.players.length === 0) {
160
- return null;
161
- }
162
-
163
- const getPlayerByID = (id: any) : null | LTPlayer.LandscapeType | LTPlayer.PortraitType => {
164
-
165
- let response = null;
166
-
167
- this.players.forEach(instance => {
168
- if (instance.playerConfig.getConfigData().playerId === id) {
169
- response = instance;
170
- }
171
- })
172
-
173
- return response;
174
- }
175
-
176
- const getPlayerByElement = (player : Element | HTMLElement) : null | LTPlayer.LandscapeType | LTPlayer.PortraitType => {
177
-
178
- let response = null;
179
-
180
- const playerInstance = (player as playerManger).playerManager;
181
-
182
-
183
- this.players.forEach(instance => {
184
- if (instance === playerInstance) {
185
- response = instance;
186
- }
187
- })
188
-
189
- return response;
190
- }
191
-
192
- if (typeof player === 'string') {
193
- return getPlayerByID(parseInt(player));
194
- }
195
-
196
- if (typeof player === 'number') {
197
- return getPlayerByID(player)
198
- }
199
-
200
- if (player instanceof Element) {
201
- return getPlayerByElement(player);
202
- }
203
- }
204
-
205
- getPlayerByExternalId(id: string | number): null | LTPlayer.LandscapeType | LTPlayer.PortraitType {
206
- if (this.players.length === 0) {
207
- return null;
208
- }
209
-
210
- let response = null;
211
-
212
- this.players.forEach(instance => {
213
- if (instance.playerConfig.getConfigData().externalId == id) {
214
- response = instance;
215
- }
216
- })
217
-
218
- return response;
219
- }
220
-
221
- /**
222
- * Pause all players
223
- */
224
- pauseAllPlayers() {
225
- this.players.forEach(instance => {
226
- if(instance.plyr.playing) {
227
- instance.plyr.pause();
228
- }
229
- })
230
- }
231
-
232
- /**
233
- * Stop all players
234
- */
235
- stopAllPlayers() {
236
- this.players.forEach(instance => {
237
- if(instance.plyr.playing) {
238
- instance.plyr.stop();
239
- }
240
- })
241
- }
242
-
243
- async destruct() {
244
- const destructInstance = async (instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) => {
245
- await instance.destruct();
246
- }
247
-
248
- const iterateInstances = async (array: Array<any>, callback:any): Promise<void> => {
249
- for (let index = 0; index < array.length; index++) {
250
- await callback(array[index]);
251
- }
252
- }
253
-
254
- const initDestruct = async (): Promise<void> => {
255
- await iterateInstances(this.players, async (callback: LTPlayer.PortraitType | LTPlayer.LandscapeType) => {
256
- await destructInstance(callback);
257
- })
258
- }
259
-
260
-
261
- return initDestruct().then(() => {
262
- this.players = [];
263
- console.clear();
264
- });
265
- }
266
- }
@@ -1,117 +0,0 @@
1
- import {LTPlayer} from "./LTPlayerType";
2
- import Plyr from "plyr";
3
- import {LTPlayerStorage} from "./LTPlayerStorage";
4
- import {settings} from "json-schema-library";
5
-
6
- export class LTPlayerSettingsManager {
7
- instance: LTPlayer.PortraitType | LTPlayer.LandscapeType
8
- player: Plyr
9
- storage: LTPlayerStorage
10
- constructor(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
11
- this.player = instance.plyr;
12
- this.instance = instance;
13
- this.storage = new LTPlayerStorage();
14
- }
15
-
16
- applyGlobalSettings() {
17
- const settings = this.storage.getSettings();
18
- this.player.speed = settings.speed;
19
- this.player.volume = settings.volume;
20
- this.player.muted = settings.muted;
21
- this.volumeIconsChange();
22
- this.speedButtonChange(this.player.elements.container);
23
- }
24
-
25
- setGlobalSettings() {
26
- const settings = {
27
- speed: this.player.speed,
28
- volume: this.player.volume,
29
- muted: this.player.muted
30
- }
31
- console.log(settings.volume);
32
- console.log(settings.muted);
33
-
34
- this.storage.setSettings(settings);
35
- }
36
-
37
- speedButtonChange(container: HTMLElement) {
38
- const storage = new LTPlayerStorage();
39
- const speed = storage.getSpeed();
40
- const displaySpeed = Math.floor(speed * 10) / 10;
41
- const speedSpan = container.querySelector('.plyr__control.plyr__controls_speed-button > span');
42
- if(speedSpan) {
43
- speedSpan.innerHTML = displaySpeed + "X";
44
- speedSpan.className = '';
45
- speedSpan.classList.add('playback-speed--' + speed + 'X');
46
- }
47
- }
48
-
49
- volumeIconsChange() {
50
- if (this.instance.playerConfig.getDevice() === 'desktop') {
51
- this.volumeItemsDesktop();
52
- } else {
53
- this.volumeIconsMobile();
54
- }
55
- }
56
-
57
- volumeIconsMobile() {
58
- if (this.storage.getMutedState() === false) {
59
- this.player.volume = 1;
60
- this.storage.setVolume(1);
61
- }
62
- const playerControlsContainer = this.player.elements.controls;
63
- const volume: HTMLElement = playerControlsContainer.querySelector('.bottom-controller__volume_control');
64
-
65
- if (volume) {
66
- const volumeUnmute = volume.querySelector('.volume-max');
67
- const volumeMute = volume.querySelector('.volume-mute');
68
-
69
- if (this.player.muted) {
70
- volumeUnmute.classList.remove('d-none');
71
- volumeMute.classList.remove('d-none');
72
- volumeUnmute.classList.add('d-none');
73
- } else {
74
- volumeUnmute.classList.remove('d-none');
75
- volumeMute.classList.remove('d-none');
76
- volumeMute.classList.add('d-none');
77
- }
78
- }
79
- }
80
-
81
- volumeItemsDesktop() {
82
- const range = this.storage.getVolume().toString()
83
- const playerControlsContainer = this.player.elements.controls;
84
- const volumeMax: HTMLElement = playerControlsContainer.querySelector('.volume-max');
85
- const volume75: HTMLElement = playerControlsContainer.querySelector('.volume-75');
86
- const volume50: HTMLElement = playerControlsContainer.querySelector('.volume-50');
87
- const volumeMute: HTMLElement = playerControlsContainer.querySelector('.volume-mute');
88
- const volumeBody: HTMLElement = playerControlsContainer.querySelector('.bottom-controller__volume_control');
89
- const volumeIconsManager = (item: HTMLElement) => {
90
-
91
- const rangeVolumesItems: NodeListOf<HTMLElement> = volumeBody.querySelectorAll('.volume-max, .volume-75, .volume-50, .volume-mute');
92
-
93
- rangeVolumesItems.forEach(function (value) {
94
- if (item.dataset.rangeValue === value.dataset.rangeValue) {
95
- value.classList.remove('d-none');
96
- } else {
97
- value.classList.add('d-none')
98
- }
99
- })
100
- }
101
-
102
-
103
- const volumeThresholds = [
104
- { threshold: 1, element: volumeMax },
105
- { threshold: 0.65, element: volume75 },
106
- { threshold: 0.35, element: volume50 },
107
- { threshold: 0, element: volumeMute }
108
- ];
109
-
110
- for (let i = 0; i < volumeThresholds.length; i++) {
111
- if (range >= volumeThresholds[i].threshold) {
112
- volumeIconsManager(volumeThresholds[i].element);
113
- break;
114
- }
115
- }
116
- }
117
- }
@@ -1,286 +0,0 @@
1
- import {LTPlayer} from "./LTPlayerType";
2
- import {defaultType, playerConfigType, PlayerType, urlVideoType} from "../global/types/ModuleTypes";
3
- import {Helper} from "../services/Helper";
4
- import {ValidatorService} from "../services/ValidatorService";
5
- import * as playerSchema from "../json-schema/player-config.json";
6
- import {LTPLayerAddInfo} from "./addInfo/LTPlayerAddInfoManager";
7
- import Plyr from "plyr";
8
- import {LTPlayerDevMethode} from "./LTPlayerDevMethode";
9
- import Player = LTPlayerDevMethode.Player;
10
-
11
- export class LTPlayerSetup {
12
-
13
- additionalInfoService: LTPLayerAddInfo.Controller;
14
-
15
- checkIfPlayerExists(playerConfig?: playerConfigType): boolean
16
- {
17
- let response = false;
18
- if (playerConfig.body.playerContainer instanceof HTMLElement) {
19
- response = !playerConfig.body.playerContainer.classList.contains('is-loaded');
20
- }
21
- return response;
22
- }
23
-
24
- init(playerConfig?: playerConfigType): Promise<any> {
25
-
26
- Helper.setDebugEvent('Start init player', 'info');
27
-
28
- if (!playerConfig || Object.keys(playerConfig).length === 0) {
29
- Helper.setDebugEvent('Lt Player: The config object is empty', 'error')
30
- Helper.setDebugEvent('Use one of below examples', 'error')
31
- Helper.setDebugEvent({
32
- Example_1: 'Use object to configure player (Player.init({versions : "Player versions", body : {player configure body}}))',
33
- Example_2: 'Use HTML dataset attribute to configure Player (data-lt-player-config="{versions : "Player versions", body : {player configure body}"))'
34
- }, 'table')
35
- return;
36
- }
37
-
38
- const validateResult = ValidatorService.validate('init', playerSchema, playerConfig);
39
-
40
- if (!validateResult) {
41
- return;
42
- }
43
-
44
- Helper.setDebugEvent('Validate player config', 'info');
45
-
46
- if (typeof playerConfig.body.playerContainer === "string") {
47
-
48
- const playerContainerPlayer = document.querySelector(`.${playerConfig.body.playerContainer}, #${playerConfig.body.playerContainer}`);
49
-
50
- if (!playerContainerPlayer) {
51
- console.error(`No Element found with ${playerConfig.body.playerContainer}`);
52
- return;
53
- }
54
-
55
- playerConfig.body.playerContainer = playerContainerPlayer;
56
- }
57
-
58
-
59
- if (process.env.DEBUG === "true") {
60
- console.info('Setup Player Container');
61
- }
62
-
63
- playerConfig.body.device = Helper.getDevice();
64
-
65
- if (process.env.DEBUG === "true") {
66
- console.info(`Set Device - ${playerConfig.body.device}`);
67
- }
68
-
69
- const playerContainer = playerConfig.body.playerContainer;
70
-
71
- playerContainer.classList.add(`lt-player`);
72
- playerContainer.classList.add(`is-loaded`);
73
-
74
- this.setAdditionalInfo(playerConfig);
75
-
76
- if (process.env.DEBUG === "true") {
77
- console.info(`Set Additional Info`);
78
- }
79
-
80
- if (playerConfig.body.playerType === undefined) {
81
- const checkVersion = (version : string | number) : boolean => {
82
- if (typeof version === 'string') {
83
- if (parseInt(version) === 1) {
84
- return true;
85
- }
86
- }
87
-
88
- if (typeof version === "number") {
89
- if (version === 1) {
90
- return true;
91
- }
92
- }
93
-
94
- return false;
95
-
96
- }
97
-
98
- if (checkVersion(playerConfig.version)) {
99
- return new Promise((resolve, reject) => {
100
- playerConfig.body.playerType = 2;
101
-
102
- resolve(this.setType(playerConfig, playerContainer));
103
- reject(null);
104
- });
105
- }
106
-
107
- return new Promise((resolve, reject) => {
108
- playerConfig.body.playerType = this.getVideoTypeByUrl(playerConfig.body.videoUrl).then(response => {
109
- playerConfig.body.playerType = response;
110
- resolve(this.setType(playerConfig, playerContainer));
111
- });
112
- })
113
- } else {
114
- return new Promise((resolve, reject) => {
115
- resolve(this.setType(playerConfig, playerContainer));
116
- reject(null);
117
- });
118
- }
119
- }
120
-
121
- setType(playerConfig: playerConfigType, playerContainer: HTMLElement) {
122
-
123
- let player: LTPlayer.LandscapeType | LTPlayer.PortraitType = this.setPlayerType(playerConfig.body.playerType);
124
-
125
- if (!player) {
126
- console.error('No "playerType" is set in config!')
127
- return;
128
- }
129
-
130
- let setupPlayer = player.setup(playerConfig, this.additionalInfoService);
131
-
132
- if (process.env.DEBUG === "true") {
133
- console.info(`Finish Setup Player`);
134
- }
135
-
136
-
137
- if (!setupPlayer) {
138
- return;
139
- }
140
-
141
- if (process.env.DEBUG === "true") {
142
- player.plyr.on('ready', () => {
143
- console.log(`Player id=${player.playerConfig.getPlayerId()} finish setup`);
144
- })
145
- }
146
-
147
- playerConfig.body.playerContainer = player;
148
- this.additionalInfoService = null;
149
-
150
- return player;
151
- }
152
-
153
- getVideoTypeByUrl(url: string) {
154
-
155
- let videoData = Helper.processConfigData(url) as urlVideoType;
156
-
157
- const processEmbed = () => {
158
-
159
- const embedRequest = (url: string) =>{
160
- return new Promise((resolveOuter, reject) => {
161
- fetch(`https://vimeo.com/api/oembed.json?url=${url}`).then(
162
- response => {
163
- resolveOuter(response.json());
164
- },
165
- error => {
166
- reject(error);
167
- })
168
- });
169
- }
170
-
171
-
172
- videoData.embedId = Helper.getEmbeddedID(url);
173
- videoData.embedHash = Helper.getEmbeddedHash(url);
174
-
175
-
176
- return embedRequest(url).then(
177
- respose => {
178
- return new Promise((resolve, reject) => {
179
-
180
- let res: any = respose;
181
-
182
- if (res.width > res.height) {
183
- resolve('landscape');
184
- } else {
185
- resolve('portrait');
186
- }
187
- });
188
-
189
- });
190
-
191
- }
192
-
193
- const processVideo = () => {
194
- let videoTag = document.createElement('video');
195
- videoTag.src = url;
196
-
197
- if (url.includes('.m3u8')) {
198
- return new Promise((resolve) => {
199
- resolve('portrait')
200
- })
201
- }
202
-
203
- return new Promise((resolve) => {
204
- videoTag.addEventListener( "loadedmetadata", function (e) {
205
- if (this.videoWidth > this.videoHeight) {
206
- resolve('landscape');
207
- } else {
208
- resolve('portrait');
209
- }
210
- }, false );
211
- })
212
-
213
-
214
- }
215
-
216
- switch (videoData.type) {
217
- case 'embedded':
218
- return processEmbed()
219
- case 'video':
220
- return processVideo();
221
-
222
- }
223
- }
224
-
225
- /**
226
- * Set Additional Info
227
- * @param playerConfig
228
- */
229
- setAdditionalInfo(playerConfig: defaultType): void {
230
-
231
- const additionalInfoContainer:HTMLElement = playerConfig.body.playerContainer.querySelector('.lt-player-additional-info');
232
-
233
- if (additionalInfoContainer) {
234
- this.additionalInfoService = new LTPLayerAddInfo.Controller();
235
- this.additionalInfoService.setContainer(additionalInfoContainer);
236
- return;
237
- }
238
-
239
-
240
- if (playerConfig.body.additionalInfo !== undefined && Object.keys(playerConfig.body.additionalInfo).length > 0) {
241
- this.additionalInfoService = new LTPLayerAddInfo.Controller();
242
- this.additionalInfoService.setConfig(playerConfig.body.additionalInfo);
243
- return;
244
- }
245
-
246
-
247
- this.additionalInfoService = null;
248
- return;
249
-
250
-
251
- }
252
-
253
- /**
254
- * Set player type
255
- * @param type
256
- */
257
- setPlayerType(type: number | string): LTPlayer.PortraitType | LTPlayer.LandscapeType {
258
-
259
- let player: PlayerType = null;
260
-
261
- switch (type) {
262
- case "1":
263
- player = new LTPlayer.PortraitType();
264
- break
265
- case "2":
266
- player = new LTPlayer.LandscapeType();
267
- break
268
- case 1:
269
- player = new LTPlayer.PortraitType();
270
- break
271
- case 2:
272
- player = new LTPlayer.LandscapeType()
273
- break
274
- case 'portrait':
275
- player = new LTPlayer.PortraitType();
276
- break
277
- case 'landscape':
278
- player = new LTPlayer.LandscapeType()
279
- break
280
- }
281
-
282
- return player;
283
- }
284
-
285
-
286
- }