@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.
- package/ README.md +1 -0
- package/dist/css/lt-player-main.css +1 -1
- package/dist/css/lt-player-main.css.map +1 -1
- package/dist/js/lt-player-main.js +1 -1
- package/dist/js/lt-player-main.js.map +1 -1
- package/examples/lt-page-with-player.html +3529 -0
- package/examples/lt-page-with-player_files/Weiskopf_Coverphoto.jpg +0 -0
- package/examples/lt-page-with-player_files/ajax-progress.module.css +49 -0
- package/examples/lt-page-with-player_files/align.module.css +32 -0
- package/examples/lt-page-with-player_files/announce.js +49 -0
- package/examples/lt-page-with-player_files/autocomplete-loading.module.css +22 -0
- package/examples/lt-page-with-player_files/autocomplete.css +16 -0
- package/examples/lt-page-with-player_files/bootstrap.css +22691 -0
- package/examples/lt-page-with-player_files/clearfix.module.css +15 -0
- package/examples/lt-page-with-player_files/container-inline.module.css +16 -0
- package/examples/lt-page-with-player_files/cookiesjsr.min.css +10 -0
- package/examples/lt-page-with-player_files/core.css +97 -0
- package/examples/lt-page-with-player_files/details.module.css +10 -0
- package/examples/lt-page-with-player_files/fieldgroup.module.css +9 -0
- package/examples/lt-page-with-player_files/hidden.module.css +53 -0
- package/examples/lt-page-with-player_files/himme-alexander-beyond_0.jpg +0 -0
- package/examples/lt-page-with-player_files/item-list.module.css +19 -0
- package/examples/lt-page-with-player_files/js.module.css +22 -0
- package/examples/lt-page-with-player_files/latest_thinking.style.css +6496 -0
- package/examples/lt-page-with-player_files/logo-small.png +0 -0
- package/examples/lt-page-with-player_files/lt-player.css +3795 -0
- package/examples/lt-page-with-player_files/menu.css +64 -0
- package/examples/lt-page-with-player_files/nowrap.module.css +8 -0
- package/examples/lt-page-with-player_files/paragraphs.unpublished.css +3 -0
- package/examples/lt-page-with-player_files/position-container.module.css +8 -0
- package/examples/lt-page-with-player_files/progress.module.css +51 -0
- package/examples/lt-page-with-player_files/radix.style.css +1 -0
- package/examples/lt-page-with-player_files/reset-appearance.module.css +15 -0
- package/examples/lt-page-with-player_files/resize.module.css +21 -0
- package/examples/lt-page-with-player_files/search_api_autocomplete.css +41 -0
- package/examples/lt-page-with-player_files/sticky-header.module.css +13 -0
- package/examples/lt-page-with-player_files/system-status-counter.css +30 -0
- package/examples/lt-page-with-player_files/system-status-report-counters.css +27 -0
- package/examples/lt-page-with-player_files/system-status-report-general-info.css +14 -0
- package/examples/lt-page-with-player_files/tabledrag.module.css +98 -0
- package/examples/lt-page-with-player_files/tablesort.module.css +19 -0
- package/examples/lt-page-with-player_files/theme.css +446 -0
- package/examples/lt-page-with-player_files/thumbnail_MPI_CBS_Eingangsbereich.jpg +0 -0
- package/examples/lt-page-with-player_files/tree-child.module.css +18 -0
- package/examples/lt-page-with-player_files/widget-min.js +10 -0
- package/examples/portrait-with-subtitles.html +1 -0
- package/package.json +1 -1
- package/src/assets/sass/abstracts/_variables.scss +1 -1
- package/src/assets/sass/components/_all.scss +1 -1
- package/src/assets/sass/components/_loader.scss +70 -0
- package/src/assets/sass/core/_player.scss +3 -1
- package/src/assets/sass/sections/_additional-info.scss +1 -1
- package/src/assets/sass/sections/_settings.scss +1 -1
- package/src/assets/sass/sections/_subtitles.scss +50 -11
- package/src/assets/sass/sections/controllers/_botom.scss +43 -20
- package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +12 -1
- package/src/components/LTPlayerStatusFeedback.ts +68 -0
- package/src/components/captions/LTPlayerCaptions.ts +25 -1
- package/src/components/config/LTPlayerConfig.ts +9 -0
- package/src/components/controls/LTPlayerControlsEvents.ts +63 -58
- package/src/components/controls/settings/LTPlayerCommonSettingsControllers.ts +7 -1
- package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +4 -5
- package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +40 -44
- package/src/components/events/LTPlayerCommon.ts +32 -0
- package/src/components/events/LTPlayerDesktop.ts +8 -12
- package/src/components/events/LTPlayerMobile.ts +8 -11
- package/src/global/controllers/LTPlayerController.ts +5 -1
- package/src/services/Helper.ts +5 -1
- package/src/services/TemplateService.ts +5 -0
- package/src/views/settings.handlebars +1 -1
- package/src/views/settings.mobile.handlebars +20 -0
- package/src/views/template.handlebars +3 -0
- 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 =
|
|
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.
|
|
77
|
+
instance.hideModal();
|
|
65
78
|
})
|
|
66
79
|
}
|
|
67
80
|
}
|
|
68
|
-
|
|
69
81
|
}
|
|
70
82
|
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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 =
|
|
104
|
-
const checkBox = modal.querySelector(
|
|
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.
|
|
112
|
-
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/src/services/Helper.ts
CHANGED
|
@@ -11,7 +11,11 @@ export class Helper {
|
|
|
11
11
|
return device;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
static setDebugEvent(data: string | object, type
|
|
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"
|
|
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
|
-
}
|