@latest-thinking/lt-player 1.0.5 → 1.0.6
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/.babelrc +2 -1
- 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/package.json +5 -3
- package/src/assets/sass/abstracts/_mixins.scss +5 -5
- package/src/assets/sass/abstracts/_placeholders.scss +5 -5
- package/src/assets/sass/abstracts/_variables.scss +7 -7
- package/src/assets/sass/components/_modal.scss +61 -19
- package/src/assets/sass/sections/_additional-info.scss +6 -6
- package/src/assets/sass/sections/_control.scss +12 -11
- package/src/assets/sass/sections/_poster.scss +52 -10
- package/src/assets/sass/sections/_settings.scss +14 -12
- package/src/assets/sass/sections/_share.scss +123 -100
- package/src/assets/sass/sections/_subtitles.scss +14 -1
- package/src/assets/sass/sections/controllers/_botom.scss +160 -98
- package/src/assets/sass/sections/controllers/_mini-player.scss +18 -3
- package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +48 -85
- package/src/assets/sass/sections/controllers/_top.scss +39 -13
- package/src/components/LTPlayerDevMethode.ts +23 -3
- package/src/components/LTPlayerHls.ts +29 -0
- package/src/components/LTPlayerSetup.ts +14 -8
- package/src/components/LTPlayerType.ts +84 -34
- package/src/components/addInfo/LTPlayerAddInfoManager.ts +12 -5
- package/src/components/addInfo/LTPlayerAdditionalInfoEvents.ts +37 -12
- package/src/components/config/LTPlayerConfig.ts +29 -0
- package/src/components/config/LTPlayerConfigProcessor.ts +9 -5
- package/src/components/controls/LTPlayerControlsEvents.ts +26 -10
- package/src/components/controls/LTPlayerMini.ts +75 -5
- package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +2 -2
- package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +4 -4
- package/src/components/events/LTPlayer.ts +10 -1
- package/src/components/events/LTPlayerCommon.ts +2 -5
- package/src/components/events/LTPlayerDesktop.ts +25 -2
- package/src/components/events/LTPlayerMobile.ts +25 -0
- package/src/components/poster/LTPlayerPoster.ts +36 -22
- package/src/components/poster/LTPlayerPosterEvents.ts +10 -7
- package/src/components/poster/LTPlayerPosterManager.ts +3 -10
- package/src/components/share/LTPlayerShareEvents.ts +66 -3
- package/src/global/controllers/LTPlayerController.ts +2 -0
- package/src/services/Helper.ts +24 -0
- package/src/services/ResizeService.ts +33 -10
- package/src/views/additionalInfo.handlebars +58 -0
- package/src/views/background.handlebars +1 -1
- package/src/views/controls.handlebars +6 -6
- package/src/views/poster.handlebars +2 -1
- package/src/views/share.handlebars +69 -69
|
@@ -27,10 +27,14 @@ export namespace LTPlayerEvents {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const miniPlayerEnable = playerContainer.querySelector('.lt-player-mini-enable');
|
|
30
|
+
const miniPlayerEnableSize = playerContainer.querySelector(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
|
|
30
31
|
|
|
31
32
|
if (miniPlayerEnable) {
|
|
32
33
|
miniPlayerEnable.classList.remove('lt-player-mini-enable');
|
|
33
34
|
}
|
|
35
|
+
if (miniPlayerEnableSize) {
|
|
36
|
+
miniPlayerEnableSize.classList.remove(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
|
|
37
|
+
}
|
|
34
38
|
|
|
35
39
|
})
|
|
36
40
|
|
|
@@ -134,7 +138,8 @@ export namespace LTPlayerEvents {
|
|
|
134
138
|
let miniPlayer = {
|
|
135
139
|
controls : playerContainer.querySelector('.lt-player-mini-player-controls'),
|
|
136
140
|
background: playerContainer.querySelector('.lt-player-mini-player-background'),
|
|
137
|
-
enable: playerContainer.querySelector('.lt-player-mini-enable')
|
|
141
|
+
enable: playerContainer.querySelector('.lt-player-mini-enable'),
|
|
142
|
+
size: playerContainer.querySelector(`.lt-player-mini-${instance.playerConfig.getPlayerType()}`)
|
|
138
143
|
};
|
|
139
144
|
|
|
140
145
|
if (miniPlayer.controls) {
|
|
@@ -145,6 +150,10 @@ export namespace LTPlayerEvents {
|
|
|
145
150
|
miniPlayer.background.remove();
|
|
146
151
|
}
|
|
147
152
|
|
|
153
|
+
if (miniPlayer.size) {
|
|
154
|
+
miniPlayer.size.classList.remove(`lt-player-mini-${instance.playerConfig.getPlayerType()}`)
|
|
155
|
+
}
|
|
156
|
+
|
|
148
157
|
if (miniPlayer.enable) {
|
|
149
158
|
miniPlayer.enable.classList.remove('lt-player-mini-enable')
|
|
150
159
|
}
|
|
@@ -106,19 +106,16 @@ export class LTPlayerCommon {
|
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
-
|
|
110
109
|
onReadyPlayer() {
|
|
111
110
|
|
|
112
111
|
//set share button
|
|
113
112
|
this.player.share.events.desktop.init(this.player);
|
|
114
113
|
|
|
115
|
-
this.player.windowService.init(this.player);
|
|
114
|
+
// this.player.windowService.init(this.player);
|
|
116
115
|
//set poster
|
|
117
116
|
this.player.posterManager.mobileEvents.onload(this.player);
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
this.player.additionalInfoService.init(this.player, this.player.playerId, this.player.iconService, this.player.templateService);
|
|
121
|
-
}
|
|
118
|
+
|
|
122
119
|
|
|
123
120
|
if (this.player.playerConfig.isAutoPlay()) {
|
|
124
121
|
let playerContainer = this.player.plyr.elements.container;
|
|
@@ -5,6 +5,7 @@ import {plyr} from "../../global/types/ModuleTypes";
|
|
|
5
5
|
import {LTPlayerEventsManager} from "../LTPlayerEventsManager";
|
|
6
6
|
import {LTPlayerCommon} from "./LTPlayerCommon";
|
|
7
7
|
import {EventsInterfaces} from "../../global/interfaces/EventsInterfaces";
|
|
8
|
+
import {LoaderService} from "../../services/LoaderService";
|
|
8
9
|
|
|
9
10
|
export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces {
|
|
10
11
|
setup(eventManager: LTPlayerEventsManager) {
|
|
@@ -23,8 +24,24 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
23
24
|
this.plyrTimeUpdate();
|
|
24
25
|
this.plyrOnPlay();
|
|
25
26
|
this.plyrOnPause();
|
|
27
|
+
this.plyrOnSeek();
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
plyrOnSeek():void {
|
|
31
|
+
let eventManager = this;
|
|
32
|
+
let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
|
|
33
|
+
let plyr: Plyr = this.plyr;
|
|
34
|
+
|
|
35
|
+
plyr.on('seeked', function LTPlayerSeek(){
|
|
36
|
+
if (plyr.isEmbed) {
|
|
37
|
+
if (plyr.paused) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
let playerContainer = instance.plyr.elements.container;
|
|
41
|
+
playerContainer.querySelector(`.lt-player__poster`).insertAdjacentHTML('afterend', LoaderService.getSpinner());
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
}
|
|
28
45
|
|
|
29
46
|
plyrOnReady(): void {
|
|
30
47
|
let eventManager = this;
|
|
@@ -42,6 +59,10 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
42
59
|
eventManager.setDefaultSettingsConfig();
|
|
43
60
|
|
|
44
61
|
if (instance.plyr.isHTML5) {
|
|
62
|
+
|
|
63
|
+
if (instance.hls) {
|
|
64
|
+
instance.hls.init();
|
|
65
|
+
}
|
|
45
66
|
eventManager.onReadyPlayer();
|
|
46
67
|
eventManager.modal(instance);
|
|
47
68
|
instance.posterManager.desktopEvents.buttons(instance);
|
|
@@ -147,16 +168,17 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
147
168
|
common.timeUpdate(event);
|
|
148
169
|
if (instance.playerConfig.getPreload().isActive) {
|
|
149
170
|
common.preloadPoster.timeUpdate(instance, 'event');
|
|
150
|
-
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
151
171
|
}
|
|
172
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
173
|
+
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
152
174
|
})
|
|
153
175
|
}
|
|
154
176
|
|
|
155
177
|
plyrOnPlay() {
|
|
156
178
|
let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
|
|
157
179
|
let plyr: Plyr = this.plyr;
|
|
158
|
-
|
|
159
180
|
plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
|
|
181
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
160
182
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
161
183
|
})
|
|
162
184
|
}
|
|
@@ -166,6 +188,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
166
188
|
let plyr: Plyr = this.plyr;
|
|
167
189
|
|
|
168
190
|
plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
|
|
191
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
169
192
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
170
193
|
})
|
|
171
194
|
}
|
|
@@ -4,6 +4,7 @@ import {EventsInterfaces} from "../../global/interfaces/EventsInterfaces";
|
|
|
4
4
|
import {LTPlayer} from "../LTPlayerType";
|
|
5
5
|
import Plyr from "plyr";
|
|
6
6
|
import {plyr} from "../../global/types/ModuleTypes";
|
|
7
|
+
import {LoaderService} from "../../services/LoaderService";
|
|
7
8
|
|
|
8
9
|
export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
9
10
|
|
|
@@ -23,8 +24,24 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
23
24
|
this.plyrTimeUpdate();
|
|
24
25
|
this.plyrOnPlay();
|
|
25
26
|
this.plyrOnPause();
|
|
27
|
+
this.plyrOnSeek();
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
plyrOnSeek():void {
|
|
31
|
+
let eventManager = this;
|
|
32
|
+
let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
|
|
33
|
+
let plyr: Plyr = this.plyr;
|
|
34
|
+
|
|
35
|
+
plyr.on('seeked', function LTPlayerSeek(){
|
|
36
|
+
if (plyr.isEmbed) {
|
|
37
|
+
if (plyr.paused) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
let playerContainer = instance.plyr.elements.container;
|
|
41
|
+
playerContainer.querySelector(`.lt-player__poster`).insertAdjacentHTML('afterend', LoaderService.getSpinner());
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
}
|
|
28
45
|
plyrOnReady(): void {
|
|
29
46
|
let eventManager = this;
|
|
30
47
|
let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
|
|
@@ -38,6 +55,11 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
38
55
|
}
|
|
39
56
|
|
|
40
57
|
if (instance.plyr.isHTML5) {
|
|
58
|
+
|
|
59
|
+
if (instance.hls) {
|
|
60
|
+
instance.hls.init();
|
|
61
|
+
}
|
|
62
|
+
|
|
41
63
|
eventManager.onReadyPlayer();
|
|
42
64
|
instance.posterManager.mobileEvents.buttons(instance);
|
|
43
65
|
|
|
@@ -128,6 +150,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
128
150
|
if (instance.playerConfig.getPreload().isActive) {
|
|
129
151
|
eventManager.preloadPoster.timeUpdate(instance, 'event');
|
|
130
152
|
}
|
|
153
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
131
154
|
|
|
132
155
|
eventManager.timeUpdate(event);
|
|
133
156
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
@@ -140,6 +163,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
140
163
|
let plyr: Plyr = this.plyr;
|
|
141
164
|
|
|
142
165
|
plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
|
|
166
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
143
167
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
144
168
|
})
|
|
145
169
|
}
|
|
@@ -149,6 +173,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
149
173
|
let plyr: Plyr = this.plyr;
|
|
150
174
|
|
|
151
175
|
plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
|
|
176
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
152
177
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
153
178
|
})
|
|
154
179
|
}
|
|
@@ -31,29 +31,43 @@ export class LTPlayerPoster {
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
setImage() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
34
|
+
const customImageSelector = this.plyr.elements.container.querySelector('.lt-player__poster__img--set-custom');
|
|
35
|
+
const defaultImageSelector = this.plyr.elements.container.querySelector('.lt-player__poster__img__set-default');
|
|
36
|
+
|
|
37
|
+
const checkImage = (imageUrl: string, callback: (arg0: boolean) => void) => {
|
|
38
|
+
let img = new Image();
|
|
39
|
+
|
|
40
|
+
img.onerror = function() {
|
|
41
|
+
callback(false);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
img.onload = function() {
|
|
45
|
+
callback(true);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
img.src = imageUrl;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const setDefault = () => {
|
|
53
|
+
if (defaultImageSelector) {
|
|
54
|
+
defaultImageSelector.classList.remove('d-none');
|
|
50
55
|
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
56
|
+
}
|
|
53
57
|
|
|
54
|
-
removeDefaultImage() {
|
|
55
|
-
const posterImage: HTMLElement = this.plyr.elements.container.querySelector('.lt-player__poster__img');
|
|
56
|
-
posterImage.classList.add('d-none');
|
|
57
|
-
}
|
|
58
58
|
|
|
59
|
+
if (this.config.getPosterImage()) {
|
|
60
|
+
if (customImageSelector) {
|
|
61
|
+
checkImage(this.config.getPosterImage(), function (exist) {
|
|
62
|
+
if (!exist) {
|
|
63
|
+
setDefault();
|
|
64
|
+
} else {
|
|
65
|
+
customImageSelector.classList.remove('d-none');
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
setDefault()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
59
73
|
}
|
|
@@ -88,6 +88,7 @@ export namespace LTPlayerPosterEvents {
|
|
|
88
88
|
button.addEventListener('click', function LTPlayerPosterButtons(event) {
|
|
89
89
|
event.preventDefault();
|
|
90
90
|
instance.playerControl.desktopEvents.titleLineBreak(instance);
|
|
91
|
+
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
91
92
|
common.poster.reset(instance);
|
|
92
93
|
})
|
|
93
94
|
});
|
|
@@ -109,8 +110,10 @@ export namespace LTPlayerPosterEvents {
|
|
|
109
110
|
|
|
110
111
|
if (mobileEvent) {
|
|
111
112
|
mobileEvent.on('singletap', function LTPlayerMobilePosterButtons() {
|
|
113
|
+
|
|
112
114
|
instance.playerControl.desktopEvents.titleLineBreak(instance);
|
|
113
115
|
|
|
116
|
+
instance.playerControl.mobileEvents.playPauseIcon(instance, 'timeupdate');
|
|
114
117
|
common.poster.reset(instance);
|
|
115
118
|
|
|
116
119
|
playerContainer.classList.remove('plyr__poster-enabled');
|
|
@@ -125,13 +128,13 @@ export namespace LTPlayerPosterEvents {
|
|
|
125
128
|
* Remove Onload Poster from player
|
|
126
129
|
*/
|
|
127
130
|
onload(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
|
|
128
|
-
const playerElementContainer = instance.playerConfig.getPlayerElementContainer();
|
|
129
|
-
const playerOnloadPosterSelector = playerElementContainer.parentElement.querySelector('.lt-player-onload-poster');
|
|
130
|
-
|
|
131
|
-
if (playerOnloadPosterSelector) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
131
|
+
// const playerElementContainer = instance.playerConfig.getPlayerElementContainer();
|
|
132
|
+
// const playerOnloadPosterSelector = playerElementContainer.parentElement.querySelector('.lt-player-onload-poster');
|
|
133
|
+
//
|
|
134
|
+
// if (playerOnloadPosterSelector) {
|
|
135
|
+
// // playerElementContainer.classList.remove('d-none');
|
|
136
|
+
// playerElementContainer.parentElement.querySelector('.lt-player-onload-poster').remove();
|
|
137
|
+
// }
|
|
135
138
|
}
|
|
136
139
|
|
|
137
140
|
showControls(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
|
|
@@ -23,23 +23,16 @@ export class LTPlayerPosterManager {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
init(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
|
|
26
|
+
|
|
26
27
|
this.instance = instance;
|
|
27
28
|
this.playerConfig = instance.playerConfig;
|
|
28
29
|
this.templateService = instance.templateService;
|
|
29
30
|
this.iconService = instance.iconService;
|
|
30
31
|
|
|
31
32
|
this.poster = new LTPlayerPoster(this.instance.plyr, this.templateService, this.playerConfig, this.iconService);
|
|
32
|
-
this.poster.setTemplate();
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
result => {
|
|
37
|
-
this.poster.removeDefaultImage();
|
|
38
|
-
if (this.playerConfig.getPreload()) {
|
|
39
|
-
this.initPreload();
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
34
|
+
this.poster.setTemplate();
|
|
35
|
+
this.poster.setImage();
|
|
43
36
|
if (this.playerConfig.getPreload()) {
|
|
44
37
|
this.initPreload();
|
|
45
38
|
}
|
|
@@ -9,6 +9,19 @@ export namespace LTPlayerShareEvents {
|
|
|
9
9
|
activeModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
10
10
|
selectors.shareContainer.classList.remove('share-inactive');
|
|
11
11
|
selectors.shareContainer.classList.add('share-active');
|
|
12
|
+
|
|
13
|
+
if (!instance.playerConfig.getShareData().canonicalUrl) {
|
|
14
|
+
if (!instance.playerConfig.getShareData().embedUrl) {
|
|
15
|
+
selectors.shareContainer.querySelector('.share-controller-top').classList.add('d-none')
|
|
16
|
+
} else {
|
|
17
|
+
this.setCopyContent(instance, selectors, true);
|
|
18
|
+
}
|
|
19
|
+
} else {
|
|
20
|
+
this.setCopyContent(instance, selectors, false);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
this.setCopyButtonsEvents(instance, selectors)
|
|
24
|
+
this.setSwitchButton(instance, selectors)
|
|
12
25
|
if (instance.plyr.playing) {
|
|
13
26
|
this.isPlaying = true;
|
|
14
27
|
instance.plyr.pause();
|
|
@@ -17,6 +30,44 @@ export namespace LTPlayerShareEvents {
|
|
|
17
30
|
}
|
|
18
31
|
}
|
|
19
32
|
|
|
33
|
+
|
|
34
|
+
setSwitchButton(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
35
|
+
if (!instance.playerConfig.getShareData().embedUrl || !instance.playerConfig.getShareData().canonicalUrl) {
|
|
36
|
+
selectors.switchButton.classList.add('d-none');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
selectors.switchButton.addEventListener('click', () => {
|
|
41
|
+
if (selectors.urlInput.classList.contains('canonicalUrl')) {
|
|
42
|
+
selectors.urlInput.classList.remove('canonicalUrl');
|
|
43
|
+
selectors.urlInput.classList.add('embedUrl');
|
|
44
|
+
this.setCopyContent(instance, selectors, true);
|
|
45
|
+
} else {
|
|
46
|
+
selectors.urlInput.classList.add('canonicalUrl');
|
|
47
|
+
selectors.urlInput.classList.remove('embedUrl');
|
|
48
|
+
this.setCopyContent(instance, selectors, false);
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
setCopyContent(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType, embed : boolean) {
|
|
57
|
+
|
|
58
|
+
if (!embed) {
|
|
59
|
+
selectors.urlInput.classList.add('canonicalUrl');
|
|
60
|
+
selectors.urlInput.innerHTML = `${instance.playerConfig.getShareData().canonicalUrl}`;
|
|
61
|
+
selectors.urlInput.dataset.copy = instance.playerConfig.getShareData().canonicalUrl;
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
selectors.urlInput.classList.add('embedUrl');
|
|
65
|
+
selectors.urlInput.innerText = `<iframe width="560" height="315" src="${instance.playerConfig.getShareData().embedUrl}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
|
|
66
|
+
selectors.urlInput.dataset.copy = `<iframe width="560" height="315" src="${instance.playerConfig.getShareData().embedUrl}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
20
71
|
inactiveModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
21
72
|
selectors.shareContainer.classList.add('share-inactive');
|
|
22
73
|
selectors.shareContainer.classList.remove('share-active');
|
|
@@ -31,13 +82,25 @@ export namespace LTPlayerShareEvents {
|
|
|
31
82
|
instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
|
|
32
83
|
instance.plyr.elements.controls.querySelector('.lt-player-share'),
|
|
33
84
|
],
|
|
34
|
-
|
|
85
|
+
urlInput : instance.plyr.elements.container.querySelector('.share-controller-wrapper').querySelector('.share-controller-url'),
|
|
86
|
+
shareContainer : instance.plyr.elements.container.querySelector('.share-controller-wrapper'),
|
|
87
|
+
copyButtons : instance.plyr.elements.container.querySelectorAll('.share-controller-link'),
|
|
88
|
+
switchButton : instance.plyr.elements.container.querySelector('.share-controller-wrapper').querySelector('.a2a_button_embed')
|
|
35
89
|
};
|
|
36
90
|
}
|
|
37
91
|
|
|
38
|
-
|
|
39
|
-
|
|
92
|
+
setCopyButtonsEvents(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
93
|
+
|
|
94
|
+
if (selectors.copyButtons.length > 0) {
|
|
95
|
+
selectors.copyButtons.forEach((button: HTMLElement) => {
|
|
96
|
+
button.addEventListener('click', function LTPlayerShareCopy() {
|
|
97
|
+
navigator.clipboard.writeText(selectors.urlInput.dataset.copy);
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
})
|
|
101
|
+
}
|
|
40
102
|
}
|
|
103
|
+
|
|
41
104
|
}
|
|
42
105
|
export class mobile {
|
|
43
106
|
common : LTPlayerShareEvents.common
|
|
@@ -11,6 +11,7 @@ import {LTPlayerDevMethode} from "../../components/LTPlayerDevMethode";
|
|
|
11
11
|
import {LTPlayerEventsManager} from "../../components/LTPlayerEventsManager";
|
|
12
12
|
import {LTPlayerPosterManager} from "../../components/poster/LTPlayerPosterManager";
|
|
13
13
|
import {LTPlayerShare} from "../../components/share/LTPlayerShare";
|
|
14
|
+
import {LTPlayerHls} from "../../components/LTPlayerHls";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Default Player type Service
|
|
@@ -32,6 +33,7 @@ export class LTPlayerController {
|
|
|
32
33
|
eventInstance: LTPlayerEventsManager
|
|
33
34
|
posterManager : LTPlayerPosterManager
|
|
34
35
|
share : LTPlayerShare
|
|
36
|
+
hls : LTPlayerHls
|
|
35
37
|
/**
|
|
36
38
|
* Base player type service
|
|
37
39
|
*/
|
package/src/services/Helper.ts
CHANGED
|
@@ -88,4 +88,28 @@ export class Helper {
|
|
|
88
88
|
}
|
|
89
89
|
return url.protocol === "http:" || url.protocol === "https:";
|
|
90
90
|
}
|
|
91
|
+
|
|
92
|
+
static checkIsHls(url : string): boolean {
|
|
93
|
+
const extensions = [
|
|
94
|
+
'm3u8'
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
let response = false;
|
|
98
|
+
|
|
99
|
+
extensions.forEach(item => {
|
|
100
|
+
if (url.includes(item)) {
|
|
101
|
+
response = true;
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
return response;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static getVideoOrientation(width: number, height: number) {
|
|
109
|
+
if (width > height) {
|
|
110
|
+
return 'landscape';
|
|
111
|
+
} else {
|
|
112
|
+
return 'portrait'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
91
115
|
}
|
|
@@ -55,10 +55,13 @@ export class ResizeService {
|
|
|
55
55
|
height: 150
|
|
56
56
|
},
|
|
57
57
|
size : {
|
|
58
|
-
1067 : "
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
1067 : "xxl",
|
|
59
|
+
913 : "xl",
|
|
60
|
+
820 : "lg",
|
|
61
|
+
760 : "md",
|
|
62
|
+
640 : "sm",
|
|
63
|
+
480 : "xs",
|
|
64
|
+
266 : "xxs"
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
|
|
@@ -145,7 +148,9 @@ export class ResizeService {
|
|
|
145
148
|
this.playerInstance.plyr.elements.container.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
146
149
|
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
147
150
|
inserted.classList.add('lt-player__additional-info__is_set_out-side');
|
|
148
|
-
|
|
151
|
+
this.playerInstance.plyr.on('ready', () => {
|
|
152
|
+
deskEvent.set(controller);
|
|
153
|
+
})
|
|
149
154
|
}
|
|
150
155
|
|
|
151
156
|
const createAddInfoButtonsInSide = () => {
|
|
@@ -154,12 +159,29 @@ export class ResizeService {
|
|
|
154
159
|
addInfoContainer.remove();
|
|
155
160
|
}
|
|
156
161
|
|
|
157
|
-
|
|
162
|
+
if (this.playerInstance.plyr.elements.controls !== undefined) {
|
|
163
|
+
let controlsInfoBody = this.playerInstance.plyr.elements.controls.querySelector('.content__body');
|
|
164
|
+
|
|
165
|
+
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
166
|
+
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
167
|
+
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
168
|
+
|
|
169
|
+
deskEvent.set(controller);
|
|
170
|
+
} else {
|
|
171
|
+
this.playerInstance.plyr.on('ready', () => {
|
|
172
|
+
|
|
173
|
+
let controlsInfoBody = this.playerInstance.plyr.elements.controls.querySelector('.content__body');
|
|
174
|
+
|
|
175
|
+
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
176
|
+
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
177
|
+
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
178
|
+
|
|
179
|
+
deskEvent.set(controller);
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
158
184
|
|
|
159
|
-
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
160
|
-
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
161
|
-
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
162
|
-
deskEvent.set(controller);
|
|
163
185
|
}
|
|
164
186
|
|
|
165
187
|
if (containerWidth >= 380) {
|
|
@@ -282,6 +304,7 @@ export class ResizeService {
|
|
|
282
304
|
setHeight();
|
|
283
305
|
}
|
|
284
306
|
} else {
|
|
307
|
+
|
|
285
308
|
setWidth();
|
|
286
309
|
|
|
287
310
|
if (version !== 1) {
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
{{#modal}}
|
|
2
2
|
{{#mobile}}
|
|
3
|
+
{{#object_data}}
|
|
4
|
+
<div class="player-lt__mobile__modal-header">
|
|
5
|
+
<span class="line-button"></span>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="player-lt__mobile__modal-content">
|
|
8
|
+
{{#abstract}}
|
|
9
|
+
<h2>{{abstract.title}}</h2>
|
|
10
|
+
<p>{{abstract.description}}</p>
|
|
11
|
+
<p>{{abstract.videoDOI}}</p>
|
|
12
|
+
<p>{{abstract.videoCitation}}</p>
|
|
13
|
+
{{/abstract}}
|
|
14
|
+
|
|
15
|
+
{{#institution}}
|
|
16
|
+
<h2>{{institution.title}}</h2>
|
|
17
|
+
<img src="{{institution.image}}" alt="image">
|
|
18
|
+
<p>{{institution.institutionName}}</p>
|
|
19
|
+
<p>{{institution.description}}</p>
|
|
20
|
+
{{/institution}}
|
|
21
|
+
|
|
22
|
+
{{#bio}}
|
|
23
|
+
<h2>{{bio.title}}</h2>
|
|
24
|
+
<p>{{bio.description}}</p>
|
|
25
|
+
{{/bio}}
|
|
26
|
+
</div>
|
|
27
|
+
{{/object_data}}
|
|
3
28
|
{{#data}}
|
|
4
29
|
<div class="player-lt__mobile__modal-header">
|
|
5
30
|
<span class="line-button"></span>
|
|
@@ -10,6 +35,39 @@
|
|
|
10
35
|
{{/data}}
|
|
11
36
|
{{/mobile}}
|
|
12
37
|
{{#desktop}}
|
|
38
|
+
{{#object_data}}
|
|
39
|
+
<div class="player-lt__modal lt-modal-{{id}}">
|
|
40
|
+
<div class="player-lt__modal-content">
|
|
41
|
+
<span class="player-lt__close-button">×</span>
|
|
42
|
+
<div class="player-lt__modal-body">
|
|
43
|
+
{{#abstract}}
|
|
44
|
+
<h2>{{abstract.title}}</h2>
|
|
45
|
+
<p>{{abstract.description}}</p>
|
|
46
|
+
<hr>
|
|
47
|
+
<h3>Video DOI</h3>
|
|
48
|
+
<p>{{abstract.videoDOI}}</p>
|
|
49
|
+
<h3>Video Citation</h3>
|
|
50
|
+
<p>{{abstract.videoCitation}}</p>
|
|
51
|
+
{{/abstract}}
|
|
52
|
+
|
|
53
|
+
{{#institution}}
|
|
54
|
+
<h2>{{institution.title}}</h2>
|
|
55
|
+
<div class="modal-flex">
|
|
56
|
+
<img src="{{institution.image}}" alt="image">
|
|
57
|
+
<h3>{{institution.institutionName}}</h3>
|
|
58
|
+
</div>
|
|
59
|
+
<hr>
|
|
60
|
+
<p>{{institution.description}}</p>
|
|
61
|
+
{{/institution}}
|
|
62
|
+
|
|
63
|
+
{{#bio}}
|
|
64
|
+
<h2>{{bio.title}}</h2>
|
|
65
|
+
<p>{{bio.description}}</p>
|
|
66
|
+
{{/bio}}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{{/object_data}}
|
|
13
71
|
{{#data}}
|
|
14
72
|
<div class="player-lt__modal lt-modal-{{id}}">
|
|
15
73
|
<div class="player-lt__modal-content">
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
</div>
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
|
34
|
-
<div class="lt-player-notification">
|
|
34
|
+
<div class="lt-player-notification landscape">
|
|
35
35
|
<!-- <div class="lt-player-video-content">-->
|
|
36
36
|
<!-- <div class="content__body">-->
|
|
37
37
|
<!-- <h4 class="poster-title">{{videoParagraph}}</h4>-->
|
|
38
38
|
<!-- <p class="poster-paragraph">{{videoTitle}}</p>-->
|
|
39
39
|
<!-- </div>-->
|
|
40
40
|
<!-- </div>-->
|
|
41
|
-
<div class="lt-player-notification__notification-button-state">
|
|
41
|
+
<div class="lt-player-notification__notification-button-state landscape">
|
|
42
42
|
<div class="player-state">
|
|
43
43
|
<img class="player-state__icon filter" src="" alt="">
|
|
44
44
|
</div>
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
</div>
|
|
168
168
|
{{#mobile}}
|
|
169
169
|
<div class="plyr__controls__mobile-background d-none">
|
|
170
|
-
<div class="lt-player-notification">
|
|
170
|
+
<div class="lt-player-notification portrait">
|
|
171
171
|
<div class="lt-player-rewind-area">
|
|
172
172
|
</div>
|
|
173
173
|
<div class="lt-player-rewind lt-player-notify">
|
|
@@ -222,8 +222,8 @@
|
|
|
222
222
|
</div>
|
|
223
223
|
</div>
|
|
224
224
|
</div>
|
|
225
|
-
<div class="lt-player-notification">
|
|
226
|
-
<div class="lt-player-notification__notification-button-state">
|
|
225
|
+
<div class="lt-player-notification portrait">
|
|
226
|
+
<div class="lt-player-notification__notification-button-state portrait">
|
|
227
227
|
<div class="player-state">
|
|
228
228
|
<img class="player-state__icon filter" src="" alt="">
|
|
229
229
|
</div>
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
</div>
|
|
335
335
|
{{#mobile}}
|
|
336
336
|
<div class="plyr__controls__mobile-background d-none">
|
|
337
|
-
<div class="lt-player-notification">
|
|
337
|
+
<div class="lt-player-notification portrait">
|
|
338
338
|
<div class="lt-player-rewind-area">
|
|
339
339
|
</div>
|
|
340
340
|
<div class="lt-player-rewind lt-player-notify">
|