@latest-thinking/lt-player 1.0.5 → 1.0.6-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.
- 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 +263 -95
- 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 -9
- package/src/components/LTPlayerType.ts +85 -37
- package/src/components/addInfo/LTPlayerAddInfoManager.ts +12 -5
- package/src/components/addInfo/LTPlayerAdditionalInfoEvents.ts +37 -12
- package/src/components/config/LTPlayerConfig.ts +44 -1
- 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 +7 -8
- package/src/components/events/LTPlayerDesktop.ts +29 -2
- package/src/components/events/LTPlayerMobile.ts +27 -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/LTPlayerShareDesktop.ts +120 -0
- package/src/components/share/LTPlayerShareEvents.ts +30 -69
- package/src/components/share/{LTPlayerShare.ts → LTPlayerShareManager.ts} +26 -8
- package/src/components/share/LTPlayerShareMobile.ts +154 -0
- package/src/components/video/LTPlayerVideo.ts +49 -0
- package/src/global/controllers/LTPlayerController.ts +8 -3
- 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 +81 -78
|
@@ -22,7 +22,7 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
|
|
|
22
22
|
setButtonSpeed() {
|
|
23
23
|
let playerControlsContainer = this.settingsInstance.playerInstance.plyr.elements.controls;
|
|
24
24
|
let playerSpeedButton = playerControlsContainer.querySelector('.plyr__controls_speed-button');
|
|
25
|
-
playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}`;
|
|
25
|
+
playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}X`;
|
|
26
26
|
let plyr = this.settingsInstance.playerInstance.plyr;
|
|
27
27
|
let instance = this.settingsInstance.playerInstance;
|
|
28
28
|
|
|
@@ -34,19 +34,19 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
|
|
|
34
34
|
let playSpeed = plyr.speed + 0.25;
|
|
35
35
|
|
|
36
36
|
if (playSpeed > 2) {
|
|
37
|
-
playerSpeedButton.innerHTML =
|
|
37
|
+
playerSpeedButton.innerHTML = `1x`;
|
|
38
38
|
plyr.speed = 1;
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
if (playSpeed === 1.75) {
|
|
43
43
|
plyr.speed = playSpeed + 0.25
|
|
44
|
-
playerSpeedButton.innerHTML = `${playSpeed + 0.25}`;
|
|
44
|
+
playerSpeedButton.innerHTML = `${playSpeed + 0.25}X`;
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
plyr.speed = playSpeed;
|
|
49
|
-
playerSpeedButton.innerHTML = `${playSpeed}`;
|
|
49
|
+
playerSpeedButton.innerHTML = `${playSpeed}X`;
|
|
50
50
|
|
|
51
51
|
instance.playerControl.mobileEvents.showControls(instance);
|
|
52
52
|
})
|
|
@@ -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,20 +106,19 @@ export class LTPlayerCommon {
|
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
-
|
|
110
109
|
onReadyPlayer() {
|
|
111
|
-
|
|
112
110
|
//set share button
|
|
113
|
-
this.player.
|
|
111
|
+
if (this.player.playerConfig.getShareData()) {
|
|
112
|
+
if (this.player.playerConfig.getDevice() === 'mobile') {
|
|
113
|
+
this.player.share.events.mobile.init();
|
|
114
|
+
} else {
|
|
115
|
+
this.player.share.events.desktop.init();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
114
118
|
|
|
115
|
-
this.player.windowService.init(this.player);
|
|
116
119
|
//set poster
|
|
117
120
|
this.player.posterManager.mobileEvents.onload(this.player);
|
|
118
121
|
|
|
119
|
-
if (this.player.additionalInfoService) {
|
|
120
|
-
this.player.additionalInfoService.init(this.player, this.player.playerId, this.player.iconService, this.player.templateService);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
122
|
if (this.player.playerConfig.isAutoPlay()) {
|
|
124
123
|
let playerContainer = this.player.plyr.elements.container;
|
|
125
124
|
|
|
@@ -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);
|
|
@@ -126,6 +147,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
126
147
|
//fullscreen icon
|
|
127
148
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
|
|
128
149
|
|
|
150
|
+
instance.videoService.removeObjectFit();
|
|
151
|
+
|
|
129
152
|
});
|
|
130
153
|
|
|
131
154
|
plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
|
|
@@ -134,6 +157,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
134
157
|
|
|
135
158
|
//fullscreen icon
|
|
136
159
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
|
|
160
|
+
|
|
161
|
+
instance.videoService.appendObjectFit();
|
|
137
162
|
})
|
|
138
163
|
}
|
|
139
164
|
|
|
@@ -147,16 +172,17 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
147
172
|
common.timeUpdate(event);
|
|
148
173
|
if (instance.playerConfig.getPreload().isActive) {
|
|
149
174
|
common.preloadPoster.timeUpdate(instance, 'event');
|
|
150
|
-
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
151
175
|
}
|
|
176
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
177
|
+
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
152
178
|
})
|
|
153
179
|
}
|
|
154
180
|
|
|
155
181
|
plyrOnPlay() {
|
|
156
182
|
let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
|
|
157
183
|
let plyr: Plyr = this.plyr;
|
|
158
|
-
|
|
159
184
|
plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
|
|
185
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
160
186
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
161
187
|
})
|
|
162
188
|
}
|
|
@@ -166,6 +192,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
166
192
|
let plyr: Plyr = this.plyr;
|
|
167
193
|
|
|
168
194
|
plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
|
|
195
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
169
196
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
170
197
|
})
|
|
171
198
|
}
|
|
@@ -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
|
|
|
@@ -110,11 +132,13 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
110
132
|
//fullscreen icon
|
|
111
133
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
|
|
112
134
|
|
|
135
|
+
instance.videoService.removeObjectFit();
|
|
113
136
|
});
|
|
114
137
|
|
|
115
138
|
plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
|
|
116
139
|
//fullscreen icon
|
|
117
140
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
|
|
141
|
+
instance.videoService.appendObjectFit();
|
|
118
142
|
})
|
|
119
143
|
}
|
|
120
144
|
|
|
@@ -128,6 +152,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
128
152
|
if (instance.playerConfig.getPreload().isActive) {
|
|
129
153
|
eventManager.preloadPoster.timeUpdate(instance, 'event');
|
|
130
154
|
}
|
|
155
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
131
156
|
|
|
132
157
|
eventManager.timeUpdate(event);
|
|
133
158
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
@@ -140,6 +165,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
140
165
|
let plyr: Plyr = this.plyr;
|
|
141
166
|
|
|
142
167
|
plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
|
|
168
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
143
169
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
144
170
|
})
|
|
145
171
|
}
|
|
@@ -149,6 +175,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
149
175
|
let plyr: Plyr = this.plyr;
|
|
150
176
|
|
|
151
177
|
plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
|
|
178
|
+
LoaderService.removeSpinner(plyr.elements.container)
|
|
152
179
|
instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
|
|
153
180
|
})
|
|
154
181
|
}
|
|
@@ -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
|
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {LTPlayerShareManager} from "./LTPlayerShareManager";
|
|
2
|
+
|
|
3
|
+
export class LTPlayerShareDesktop {
|
|
4
|
+
manager : LTPlayerShareManager
|
|
5
|
+
isPlaying : boolean
|
|
6
|
+
constructor(instance : LTPlayerShareManager) {
|
|
7
|
+
this.manager = instance;
|
|
8
|
+
this.setTemplate();
|
|
9
|
+
}
|
|
10
|
+
setTemplate() {
|
|
11
|
+
const playerContainer = this.manager.instance.plyr.elements.wrapper;
|
|
12
|
+
playerContainer.insertAdjacentHTML("afterend", this.manager.templateService.getShare(this.manager.playerConfig.getShareData()));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
activeModal() {
|
|
16
|
+
const selectors = this.getSelector();
|
|
17
|
+
const instance = this.manager.instance;
|
|
18
|
+
|
|
19
|
+
selectors.shareContainer.classList.remove('share-inactive');
|
|
20
|
+
selectors.shareContainer.classList.add('share-active');
|
|
21
|
+
(window as any).a2a.init_all();
|
|
22
|
+
if (!instance.playerConfig.getShareData().canonicalUrl) {
|
|
23
|
+
if (!instance.playerConfig.getShareData().embedUrl) {
|
|
24
|
+
selectors.shareContainer.querySelector('.share-controller-top').classList.add('d-none')
|
|
25
|
+
} else {
|
|
26
|
+
this.setCopyContent(true);
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
this.setCopyContent(false);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
this.setCopyButtonsEvents()
|
|
33
|
+
this.setSwitchButton()
|
|
34
|
+
if (instance.plyr.playing) {
|
|
35
|
+
this.isPlaying = true;
|
|
36
|
+
instance.plyr.pause();
|
|
37
|
+
} else {
|
|
38
|
+
this.isPlaying = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
setSwitchButton() {
|
|
44
|
+
const selectors = this.getSelector();
|
|
45
|
+
const instance = this.manager.instance;
|
|
46
|
+
|
|
47
|
+
if (!instance.playerConfig.getShareData().embedUrl || !instance.playerConfig.getShareData().canonicalUrl) {
|
|
48
|
+
selectors.switchButton.classList.add('d-none');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
selectors.switchButton.addEventListener('click', () => {
|
|
53
|
+
if (selectors.urlInput.classList.contains('canonicalUrl')) {
|
|
54
|
+
selectors.urlInput.classList.remove('canonicalUrl');
|
|
55
|
+
selectors.urlInput.classList.add('embedUrl');
|
|
56
|
+
this.setCopyContent(true);
|
|
57
|
+
} else {
|
|
58
|
+
selectors.urlInput.classList.add('canonicalUrl');
|
|
59
|
+
selectors.urlInput.classList.remove('embedUrl');
|
|
60
|
+
this.setCopyContent(false);
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
setCopyContent(embed : boolean) {
|
|
66
|
+
const selectors = this.getSelector();
|
|
67
|
+
const instance = this.manager.instance;
|
|
68
|
+
|
|
69
|
+
if (!embed) {
|
|
70
|
+
selectors.urlInput.classList.add('canonicalUrl');
|
|
71
|
+
selectors.urlInput.innerHTML = `${instance.playerConfig.getShareData().canonicalUrl}`;
|
|
72
|
+
(selectors.urlInput as HTMLElement).dataset.copy = instance.playerConfig.getShareData().canonicalUrl;
|
|
73
|
+
selectors.urlInput.addEventListener('click', () => {
|
|
74
|
+
window.open(instance.playerConfig.getShareData().canonicalUrl)
|
|
75
|
+
})
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
selectors.urlInput.classList.add('embedUrl');
|
|
79
|
+
const iframe = `<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>`;
|
|
80
|
+
(selectors.urlInput as HTMLElement).innerText = iframe;
|
|
81
|
+
(selectors.urlInput as HTMLElement).dataset.copy = iframe;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
inactiveModal() {
|
|
85
|
+
const selectors = this.getSelector();
|
|
86
|
+
const instance = this.manager.instance;
|
|
87
|
+
|
|
88
|
+
selectors.shareContainer.classList.add('share-inactive');
|
|
89
|
+
selectors.shareContainer.classList.remove('share-active');
|
|
90
|
+
if (this.isPlaying) {
|
|
91
|
+
instance.plyr.play();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
getSelector() {
|
|
96
|
+
return {
|
|
97
|
+
buttons : [
|
|
98
|
+
this.manager.instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
|
|
99
|
+
this.manager.instance.plyr.elements.controls.querySelector('.lt-player-share'),
|
|
100
|
+
],
|
|
101
|
+
urlInput : this.manager.instance.plyr.elements.container.querySelector('.share-controller-wrapper').querySelector('.share-controller-url'),
|
|
102
|
+
shareContainer : this.manager.instance.plyr.elements.container.querySelector('.share-controller-wrapper'),
|
|
103
|
+
copyButtons : this.manager.instance.plyr.elements.container.querySelectorAll('.share-controller-link'),
|
|
104
|
+
switchButton : this.manager.instance.plyr.elements.container.querySelector('.share-controller-wrapper').querySelector('.button_embed')
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
setCopyButtonsEvents() {
|
|
109
|
+
const selectors = this.getSelector();
|
|
110
|
+
|
|
111
|
+
if (selectors.copyButtons.length > 0) {
|
|
112
|
+
selectors.copyButtons.forEach((button: HTMLElement) => {
|
|
113
|
+
button.addEventListener('click', function LTPlayerShareCopy() {
|
|
114
|
+
navigator.clipboard.writeText((selectors.urlInput as HTMLElement).dataset.copy);
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -1,99 +1,60 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {defaultType} from "../../global/types/ModuleTypes";
|
|
1
|
+
import {LTPlayerShareManager} from "./LTPlayerShareManager";
|
|
3
2
|
|
|
4
3
|
export namespace LTPlayerShareEvents {
|
|
5
4
|
|
|
6
|
-
export class
|
|
5
|
+
export class mobile {
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
activeModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
10
|
-
selectors.shareContainer.classList.remove('share-inactive');
|
|
11
|
-
selectors.shareContainer.classList.add('share-active');
|
|
12
|
-
if (instance.plyr.playing) {
|
|
13
|
-
this.isPlaying = true;
|
|
14
|
-
instance.plyr.pause();
|
|
15
|
-
} else {
|
|
16
|
-
this.isPlaying = false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
7
|
+
manager : LTPlayerShareManager
|
|
19
8
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
selectors.shareContainer.classList.remove('share-active');
|
|
23
|
-
if (this.isPlaying) {
|
|
24
|
-
instance.plyr.play();
|
|
25
|
-
}
|
|
9
|
+
constructor(manager: LTPlayerShareManager) {
|
|
10
|
+
this.manager = manager;
|
|
26
11
|
}
|
|
27
12
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
],
|
|
34
|
-
shareContainer : instance.plyr.elements.container.querySelector('.share-controller-wrapper')
|
|
35
|
-
};
|
|
36
|
-
}
|
|
13
|
+
init() {
|
|
14
|
+
const buttons = [
|
|
15
|
+
this.manager.instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
|
|
16
|
+
this.manager.instance.plyr.elements.controls.querySelector('.lt-player-share'),
|
|
17
|
+
];
|
|
37
18
|
|
|
38
|
-
|
|
39
|
-
return instance.plyr.elements.container.querySelectorAll('.share-controller-link');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export class mobile {
|
|
43
|
-
common : LTPlayerShareEvents.common
|
|
44
|
-
constructor() {
|
|
45
|
-
this.common = new common();
|
|
46
|
-
}
|
|
19
|
+
const instance = this;
|
|
47
20
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const common = this.common;
|
|
51
|
-
common.getSelector(instance).buttons.forEach(button => {
|
|
21
|
+
buttons.forEach(button => {
|
|
52
22
|
if (button) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
23
|
+
let mobileEvent: HammerManager = this.manager.instance.eventInstance.mobileEvents.setMobileEvent(button);
|
|
24
|
+
if (mobileEvent) {
|
|
25
|
+
mobileEvent.on('singletap', function LTPlayerMobileShareButtons(event) {
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
instance.manager.mobile.activeModal();
|
|
28
|
+
})
|
|
29
|
+
}
|
|
56
30
|
}
|
|
57
31
|
})
|
|
58
|
-
|
|
59
|
-
if (common.getSelector(instance).shareContainer) {
|
|
60
|
-
common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
|
|
61
|
-
event.preventDefault();
|
|
62
|
-
if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
|
|
63
|
-
let target = event.target as HTMLElement;
|
|
64
|
-
if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
|
|
65
|
-
common.inactiveModal(instance, common.getSelector(instance));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
32
|
}
|
|
71
33
|
}
|
|
72
34
|
|
|
73
35
|
export class desktop {
|
|
74
|
-
|
|
75
|
-
constructor() {
|
|
76
|
-
this.
|
|
36
|
+
manager : LTPlayerShareManager
|
|
37
|
+
constructor(manager: LTPlayerShareManager) {
|
|
38
|
+
this.manager = manager;
|
|
77
39
|
}
|
|
78
40
|
|
|
79
|
-
init(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
common.getSelector(instance).buttons.forEach(button => {
|
|
41
|
+
init() {
|
|
42
|
+
const manager = this.manager;
|
|
43
|
+
manager.desktop.getSelector().buttons.forEach(button => {
|
|
83
44
|
if (button) {
|
|
84
45
|
button.addEventListener('click', () => {
|
|
85
|
-
|
|
46
|
+
manager.desktop.activeModal();
|
|
86
47
|
})
|
|
87
48
|
}
|
|
88
49
|
})
|
|
89
50
|
|
|
90
|
-
if (
|
|
91
|
-
|
|
51
|
+
if (manager.desktop.getSelector().shareContainer) {
|
|
52
|
+
manager.desktop.getSelector().shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
|
|
92
53
|
event.preventDefault();
|
|
93
|
-
if (
|
|
54
|
+
if ( manager.desktop.getSelector().shareContainer.classList.contains('share-active')) {
|
|
94
55
|
let target = event.target as HTMLElement;
|
|
95
56
|
if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
|
|
96
|
-
|
|
57
|
+
manager.desktop.inactiveModal();
|
|
97
58
|
}
|
|
98
59
|
}
|
|
99
60
|
})
|