@latest-thinking/lt-player 1.0.6 → 1.0.7
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/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 +1 -1
- package/src/assets/sass/abstracts/_mixins.scss +11 -0
- package/src/assets/sass/abstracts/_variables.scss +3 -0
- package/src/assets/sass/app.scss +13 -1
- package/src/assets/sass/components/_modal.scss +1 -1
- package/src/assets/sass/sections/_settings.scss +255 -82
- package/src/assets/sass/sections/_share.scss +132 -21
- package/src/assets/sass/sections/controllers/_botom.scss +296 -303
- package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +36 -66
- package/src/assets/sass/sections/controllers/_top.scss +94 -113
- package/src/components/LTPlayerSetup.ts +0 -1
- package/src/components/LTPlayerType.ts +12 -12
- package/src/components/addInfo/LTPlayerAddInfoDesktop.ts +99 -0
- package/src/components/addInfo/LTPlayerAddInfoManager.ts +6 -6
- package/src/components/addInfo/LTPlayerAddInfoMobile.ts +110 -0
- package/src/components/config/LTPlayerConfig.ts +25 -11
- package/src/components/controls/LTPlayerControlsEvents.ts +46 -36
- package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +0 -1
- package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +166 -30
- package/src/components/events/LTPlayer.ts +8 -0
- package/src/components/events/LTPlayerCommon.ts +28 -32
- package/src/components/events/LTPlayerDesktop.ts +4 -0
- package/src/components/events/LTPlayerMobile.ts +4 -2
- package/src/components/share/LTPlayerShareDesktop.ts +120 -0
- package/src/components/share/LTPlayerShareEvents.ts +30 -132
- 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 +6 -3
- package/src/index.ts +6 -0
- package/src/services/ResizeService.ts +7 -7
- package/src/views/additionalInfo.handlebars +4 -8
- package/src/views/controls.handlebars +41 -37
- package/src/views/settings.handlebars +11 -14
- package/src/views/share.handlebars +36 -33
- package/src/components/addInfo/LTPlayerAdditionalInfoEvents.ts +0 -247
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {LTPLayerAddInfo} from "./LTPlayerAddInfoManager";
|
|
2
|
+
import {additionalInformation} from "../../global/types/ModuleTypes";
|
|
3
|
+
|
|
4
|
+
export class LTPlayerAddInfoMobile {
|
|
5
|
+
set(controller: LTPLayerAddInfo.Controller) {
|
|
6
|
+
const playerContainer = controller.plyr.elements.container;
|
|
7
|
+
const playerControlsContainer = controller.plyr.elements.controls;
|
|
8
|
+
let additionalInfoBody: Element = playerContainer.querySelector('.lt-player__additional-info-mobile');
|
|
9
|
+
let instance = controller;
|
|
10
|
+
let __this = this;
|
|
11
|
+
|
|
12
|
+
let buttons: NodeList = additionalInfoBody.querySelectorAll('button');
|
|
13
|
+
|
|
14
|
+
if (buttons.length === 0) {
|
|
15
|
+
return
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const createInformationModal = (info: additionalInformation, key: string) => {
|
|
19
|
+
let modalTemplate = null;
|
|
20
|
+
|
|
21
|
+
if (typeof info === 'object') {
|
|
22
|
+
modalTemplate = controller.templateService.getAdditionalInfo({
|
|
23
|
+
mobile : true,
|
|
24
|
+
modal : true,
|
|
25
|
+
[controller.device] : true,
|
|
26
|
+
object_data : true,
|
|
27
|
+
[key] : info
|
|
28
|
+
})
|
|
29
|
+
} else {
|
|
30
|
+
modalTemplate = controller.templateService.getAdditionalInfo({
|
|
31
|
+
mobile : true,
|
|
32
|
+
modal : true,
|
|
33
|
+
data : info,
|
|
34
|
+
[controller.device] : true
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const modal = document.createElement('div');
|
|
39
|
+
modal.classList.add('lt-player-mobile-add-info-modal')
|
|
40
|
+
modal.innerHTML = modalTemplate;
|
|
41
|
+
|
|
42
|
+
const body = document.querySelector('body');
|
|
43
|
+
|
|
44
|
+
if (body) {
|
|
45
|
+
body.appendChild(modal);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
buttons.forEach((button: HTMLElement) => {
|
|
50
|
+
let mobileEvent: HammerManager = controller.playerInstance.eventInstance.mobileEvents.setMobileEvent(button);
|
|
51
|
+
if (mobileEvent) {
|
|
52
|
+
mobileEvent.on('singletap', function LTPlayerMobileAdditionalInfoButtons(event) {
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
|
|
55
|
+
controller.playerInstance.plyr.elements.controls.classList.add('plyr__controls-enable-addInfo');
|
|
56
|
+
|
|
57
|
+
let targetModal = button.dataset.ltTarget;
|
|
58
|
+
let data = instance.additionalData;
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
if (data[targetModal] !== undefined) {
|
|
62
|
+
createInformationModal(data[targetModal], targetModal)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
playerControlsContainer.classList.add('player-lt__modal__mobile-show-modal');
|
|
66
|
+
|
|
67
|
+
window.Player.players.forEach( item => {item.plyr.pause()});
|
|
68
|
+
|
|
69
|
+
__this.dragCloseModal(controller);
|
|
70
|
+
|
|
71
|
+
controller.playerInstance.playerControl.mobileEvents.showControls(controller.playerInstance)
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
dragCloseModal(controller: LTPLayerAddInfo.Controller) {
|
|
80
|
+
const modalBody = document.querySelector('.lt-player-mobile-add-info-modal');
|
|
81
|
+
const modalHeader = modalBody.querySelector('.player-lt__mobile__modal-header');
|
|
82
|
+
const background = modalBody.querySelector('.player-lt__modal__mobile__background');
|
|
83
|
+
|
|
84
|
+
const closeModal = () => {
|
|
85
|
+
modalBody.remove();
|
|
86
|
+
}
|
|
87
|
+
if (modalHeader) {
|
|
88
|
+
let mobileEvent: HammerManager = controller.playerInstance.eventInstance.mobileEvents.setMobileEvent(modalHeader);
|
|
89
|
+
if (mobileEvent) {
|
|
90
|
+
mobileEvent.on('pan', function LTPlayerMobileDragDownModal() {
|
|
91
|
+
closeModal();
|
|
92
|
+
if (controller.plyr.paused) {
|
|
93
|
+
controller.plyr.play();
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (background) {
|
|
99
|
+
let mobileEvent: HammerManager = controller.playerInstance.eventInstance.mobileEvents.setMobileEvent(background);
|
|
100
|
+
if (mobileEvent) {
|
|
101
|
+
mobileEvent.on('singletap', function LTPlayerMobileCloseModal() {
|
|
102
|
+
closeModal();
|
|
103
|
+
if (controller.plyr.paused) {
|
|
104
|
+
controller.plyr.play();
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -29,7 +29,8 @@ export class LTPlayerConfig {
|
|
|
29
29
|
chapters : null,
|
|
30
30
|
playerType: null,
|
|
31
31
|
device : 'desktop',
|
|
32
|
-
observe : false
|
|
32
|
+
observe : false,
|
|
33
|
+
videoObjectFit : false
|
|
33
34
|
}
|
|
34
35
|
processor : LTPlayerConfigProcessor.Map
|
|
35
36
|
|
|
@@ -64,22 +65,35 @@ export class LTPlayerConfig {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
setObjectFit(plyr : Plyr, instanceType : string) {
|
|
67
|
-
if (plyr.isHTML5) {
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
return new Promise(resolve => {
|
|
70
|
+
if (plyr.isHTML5) {
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
const videoTag = plyr.elements.wrapper.querySelector('video');
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
if (videoTag) {
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
videoTag.addEventListener('loadedmetadata', (event)=> {
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
const type = Helper.getVideoOrientation(videoTag.videoWidth, videoTag.videoHeight);
|
|
79
|
+
|
|
80
|
+
if (type === instanceType) {
|
|
81
|
+
this.configData.videoObjectFit = 'cover';
|
|
82
|
+
} else {
|
|
83
|
+
this.configData.videoObjectFit = 'clip';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
resolve(true);
|
|
87
|
+
})
|
|
88
|
+
}
|
|
81
89
|
}
|
|
82
|
-
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
getObjectFit() {
|
|
96
|
+
return this.configData.videoObjectFit
|
|
83
97
|
}
|
|
84
98
|
|
|
85
99
|
setVersion(version : string | number) {
|
|
@@ -706,46 +706,56 @@ export namespace LTPlayerControlsEvents {
|
|
|
706
706
|
}
|
|
707
707
|
|
|
708
708
|
|
|
709
|
-
|
|
709
|
+
settings(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
|
|
710
710
|
let playerControlsContainer = instance.plyr.elements.controls;
|
|
711
|
-
const
|
|
712
|
-
const volumeButton = volume.querySelector('button');
|
|
713
|
-
const volumeUp = volume.querySelector('.volume-max');
|
|
714
|
-
const volumeMute = volume.querySelector('.volume-mute');
|
|
715
|
-
|
|
716
|
-
const setVolumeIcon = (volumeState: string) => {
|
|
717
|
-
if (volumeState === 'up') {
|
|
718
|
-
volumeUp.classList.remove('d-none');
|
|
719
|
-
volumeMute.classList.remove('d-none');
|
|
720
|
-
volumeMute.classList.add('d-none');
|
|
721
|
-
} else {
|
|
722
|
-
volumeUp.classList.remove('d-none');
|
|
723
|
-
volumeMute.classList.remove('d-none');
|
|
724
|
-
volumeUp.classList.add('d-none');
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
const setVolume = (): string => {
|
|
729
|
-
if (instance.plyr.muted) {
|
|
730
|
-
instance.plyr.muted = false;
|
|
731
|
-
return 'up';
|
|
732
|
-
} else {
|
|
733
|
-
instance.plyr.muted = true;
|
|
734
|
-
return 'mute';
|
|
735
|
-
}
|
|
736
|
-
}
|
|
711
|
+
const settingsButton = playerControlsContainer.querySelector('.plyr__controls_settings-button');
|
|
737
712
|
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
let mobileEvent: HammerManager = instance.eventInstance.mobileEvents.setMobileEvent(volumeButton);
|
|
741
|
-
|
|
742
|
-
mobileEvent.on('singletap', function LTPlayerMobileRewindClick() {
|
|
743
|
-
let volumeState = setVolume();
|
|
744
|
-
setVolumeIcon(volumeState);
|
|
745
|
-
instance.playerControl.mobileEvents.showControls(instance);
|
|
746
|
-
})
|
|
713
|
+
if (settingsButton) {
|
|
747
714
|
|
|
715
|
+
}
|
|
748
716
|
}
|
|
717
|
+
|
|
718
|
+
//remove volume
|
|
719
|
+
// volume(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
|
|
720
|
+
// let playerControlsContainer = instance.plyr.elements.controls;
|
|
721
|
+
// const volume:HTMLElement = playerControlsContainer.querySelector('.bottom-controller__volume_control');
|
|
722
|
+
// const volumeButton = volume.querySelector('button');
|
|
723
|
+
// const volumeUp = volume.querySelector('.volume-max');
|
|
724
|
+
// const volumeMute = volume.querySelector('.volume-mute');
|
|
725
|
+
//
|
|
726
|
+
// const setVolumeIcon = (volumeState: string) => {
|
|
727
|
+
// if (volumeState === 'up') {
|
|
728
|
+
// volumeUp.classList.remove('d-none');
|
|
729
|
+
// volumeMute.classList.remove('d-none');
|
|
730
|
+
// volumeMute.classList.add('d-none');
|
|
731
|
+
// } else {
|
|
732
|
+
// volumeUp.classList.remove('d-none');
|
|
733
|
+
// volumeMute.classList.remove('d-none');
|
|
734
|
+
// volumeUp.classList.add('d-none');
|
|
735
|
+
// }
|
|
736
|
+
// }
|
|
737
|
+
//
|
|
738
|
+
// const setVolume = (): string => {
|
|
739
|
+
// if (instance.plyr.muted) {
|
|
740
|
+
// instance.plyr.muted = false;
|
|
741
|
+
// return 'up';
|
|
742
|
+
// } else {
|
|
743
|
+
// instance.plyr.muted = true;
|
|
744
|
+
// return 'mute';
|
|
745
|
+
// }
|
|
746
|
+
// }
|
|
747
|
+
//
|
|
748
|
+
// setVolumeIcon('up');
|
|
749
|
+
//
|
|
750
|
+
// let mobileEvent: HammerManager = instance.eventInstance.mobileEvents.setMobileEvent(volumeButton);
|
|
751
|
+
//
|
|
752
|
+
// mobileEvent.on('singletap', function LTPlayerMobileRewindClick() {
|
|
753
|
+
// let volumeState = setVolume();
|
|
754
|
+
// setVolumeIcon(volumeState);
|
|
755
|
+
// instance.playerControl.mobileEvents.showControls(instance);
|
|
756
|
+
// })
|
|
757
|
+
//
|
|
758
|
+
// }
|
|
749
759
|
}
|
|
750
760
|
|
|
751
761
|
|
|
@@ -18,7 +18,6 @@ export class LTPlayerDesktopSettingsControllers implements SettingsControlsInter
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
addOpenSettingsEventButton() {
|
|
21
|
-
|
|
22
21
|
const selectors: defaultType = this.settingsInstance.common.getSelectors();
|
|
23
22
|
|
|
24
23
|
selectors.button.addEventListener('click', (event: MouseEvent) => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {LTPlayerSettingsControlsManager} from "../LTPlayerSettingsControlsManager";
|
|
2
2
|
import {SettingsControlsInterfaces} from "../../../global/interfaces/SettingsControlsInterfaces";
|
|
3
|
-
import {defaultType} from "../../../global/types/ModuleTypes";
|
|
4
3
|
|
|
5
4
|
export class LTPlayerMobileSettingsControllers implements SettingsControlsInterfaces {
|
|
6
5
|
settingsInstance: LTPlayerSettingsControlsManager
|
|
@@ -10,48 +9,185 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
|
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
init() {
|
|
13
|
-
this.
|
|
14
|
-
this.setDefaultSpeed();
|
|
15
|
-
this.setButtonSpeed();
|
|
12
|
+
this.addOpenSettingsEventButton();
|
|
16
13
|
}
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
this.settingsInstance.playerInstance.plyr.
|
|
15
|
+
addOpenSettingsEventButton() {
|
|
16
|
+
const settingsButton = this.settingsInstance.playerInstance.plyr.elements.controls.querySelector('.plyr__controls_settings-button');
|
|
17
|
+
const instance = this;
|
|
18
|
+
if (settingsButton) {
|
|
19
|
+
let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(settingsButton);
|
|
20
|
+
if (mobileEvent) {
|
|
21
|
+
mobileEvent.on('singletap', function LTPlayerMobileSettingsButton() {
|
|
22
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
23
|
+
instance.createModal();
|
|
24
|
+
instance.setActiveModal();
|
|
25
|
+
instance.initCaptionsEvent();
|
|
26
|
+
instance.initSpeedVideoEvent();
|
|
27
|
+
instance.initSaveButton();
|
|
28
|
+
setTimeout(() => {
|
|
29
|
+
instance.setInactiveTouchModal();
|
|
30
|
+
}, 100)
|
|
31
|
+
})
|
|
32
|
+
}
|
|
33
|
+
}
|
|
20
34
|
}
|
|
21
35
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
let instance = this.settingsInstance.playerInstance;
|
|
36
|
+
setInactiveTouchModal() {
|
|
37
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
38
|
+
const background = modal.querySelector('.settings-controllers-enable__background');
|
|
39
|
+
const settingsContainerHeader = modal.querySelector('.settings-controllers-header')
|
|
40
|
+
const instance = this;
|
|
28
41
|
|
|
29
|
-
if (
|
|
30
|
-
let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(
|
|
42
|
+
if (background) {
|
|
43
|
+
let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(background);
|
|
31
44
|
if (mobileEvent) {
|
|
32
|
-
mobileEvent.on('singletap', function
|
|
45
|
+
mobileEvent.on('singletap', function LTPlayerMobileSettingsBackground(event) {
|
|
46
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
let target = event.target as HTMLElement;
|
|
49
|
+
if (!target.classList.contains('settings-controllers')) {
|
|
50
|
+
instance.setInactiveModal();
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
}
|
|
33
55
|
|
|
34
|
-
|
|
56
|
+
if (settingsContainerHeader) {
|
|
57
|
+
let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(settingsContainerHeader);
|
|
58
|
+
if (mobileEvent) {
|
|
59
|
+
mobileEvent.on('pan', function LTPlayerMobileSettingsHeader(event) {
|
|
60
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
let target = event.target as HTMLElement;
|
|
63
|
+
instance.setInactiveModal();
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
35
67
|
|
|
36
|
-
|
|
37
|
-
playerSpeedButton.innerHTML = `1x`;
|
|
38
|
-
plyr.speed = 1;
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
68
|
+
}
|
|
41
69
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
playerSpeedButton.innerHTML = `${playSpeed + 0.25}X`;
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
70
|
+
createModal() {
|
|
71
|
+
let modalTemplate = this.settingsInstance.playerInstance.templateService.getSettings({id : this.settingsInstance.playerInstance.playerConfig.getPlayerId()});
|
|
47
72
|
|
|
48
|
-
|
|
49
|
-
|
|
73
|
+
const modal = document.createElement('div');
|
|
74
|
+
modal.classList.add('lt-player-mobile-settings-modal')
|
|
75
|
+
modal.innerHTML = modalTemplate;
|
|
50
76
|
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
const body = document.querySelector('body');
|
|
78
|
+
|
|
79
|
+
if (body) {
|
|
80
|
+
body.appendChild(modal);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
setActiveModal() {
|
|
85
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
86
|
+
const background = modal.querySelector('.settings-controllers-enable__background');
|
|
87
|
+
|
|
88
|
+
if (background) {
|
|
89
|
+
if (background.classList.contains('d-none')) {
|
|
90
|
+
background.classList.remove('d-none')
|
|
53
91
|
}
|
|
54
92
|
}
|
|
55
93
|
}
|
|
56
94
|
|
|
95
|
+
setInactiveModal() {
|
|
96
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
97
|
+
if (modal) {
|
|
98
|
+
modal.remove();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
initCaptionsEvent() {
|
|
102
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
103
|
+
const checkBox = modal.querySelector(`#captions-lt-player-${this.settingsInstance.playerInstance.playerConfig.getPlayerId()}`) as HTMLInputElement;
|
|
104
|
+
const instance = this;
|
|
105
|
+
if (checkBox) {
|
|
106
|
+
checkBox.addEventListener('change', () => {
|
|
107
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
108
|
+
|
|
109
|
+
if (!checkBox.checked) {
|
|
110
|
+
this.settingsInstance.player.toggleCaptions(false);
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this.settingsInstance.player.toggleCaptions(true);
|
|
115
|
+
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
initSpeedVideoEvent() {
|
|
120
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
121
|
+
const playerInstance = this.settingsInstance.playerInstance;
|
|
122
|
+
const player = this.settingsInstance.player;
|
|
123
|
+
const rangeInput: HTMLInputElement = modal.querySelector('.speed-range-input');
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
const myRange: HTMLInputElement = modal.querySelector(`#speed-range-${playerInstance.playerConfig.getPlayerId()}`);
|
|
127
|
+
|
|
128
|
+
myRange.value = String(0);
|
|
129
|
+
|
|
130
|
+
const myValue: HTMLElement = modal.querySelector(`#speed-range-value-${playerInstance.playerConfig.getPlayerId()}`);
|
|
131
|
+
|
|
132
|
+
myValue.style.top = "-20px";
|
|
133
|
+
|
|
134
|
+
let values:any = [1,1.25,1.50,2];
|
|
135
|
+
|
|
136
|
+
const instance = this;
|
|
137
|
+
myRange.oninput = function() {
|
|
138
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
139
|
+
player.speed = parseFloat(values[rangeInput.value]);
|
|
140
|
+
myValue.innerHTML = `${values[rangeInput.value]}X`;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
player.speed = parseFloat(String(values[0]));
|
|
144
|
+
myValue.innerHTML = `${values[0]}X`;
|
|
145
|
+
}
|
|
146
|
+
initSaveButton() {
|
|
147
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
148
|
+
const instance = this;
|
|
149
|
+
|
|
150
|
+
const saveButton = modal.querySelector('.button-save');
|
|
151
|
+
|
|
152
|
+
saveButton.addEventListener('click', function (event) {
|
|
153
|
+
instance.settingsInstance.playerInstance.playerControl.mobileEvents.showControls(instance.settingsInstance.playerInstance);
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
instance.setInactiveModal();
|
|
156
|
+
})
|
|
157
|
+
}
|
|
158
|
+
// setButtonSpeed() {
|
|
159
|
+
// let playerControlsContainer = this.settingsInstance.playerInstance.plyr.elements.controls;
|
|
160
|
+
// let playerSpeedButton = playerControlsContainer.querySelector('.plyr__controls_speed-button');
|
|
161
|
+
// playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}X`;
|
|
162
|
+
// let plyr = this.settingsInstance.playerInstance.plyr;
|
|
163
|
+
// let instance = this.settingsInstance.playerInstance;
|
|
164
|
+
//
|
|
165
|
+
// if (playerSpeedButton) {
|
|
166
|
+
// let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(playerSpeedButton);
|
|
167
|
+
// if (mobileEvent) {
|
|
168
|
+
// mobileEvent.on('singletap', function LTPlayerMobileSpeedButton() {
|
|
169
|
+
//
|
|
170
|
+
// let playSpeed = plyr.speed + 0.25;
|
|
171
|
+
//
|
|
172
|
+
// if (playSpeed > 2) {
|
|
173
|
+
// playerSpeedButton.innerHTML = `1x`;
|
|
174
|
+
// plyr.speed = 1;
|
|
175
|
+
// return;
|
|
176
|
+
// }
|
|
177
|
+
//
|
|
178
|
+
// if (playSpeed === 1.75) {
|
|
179
|
+
// plyr.speed = playSpeed + 0.25
|
|
180
|
+
// playerSpeedButton.innerHTML = `${playSpeed + 0.25}X`;
|
|
181
|
+
// return;
|
|
182
|
+
// }
|
|
183
|
+
//
|
|
184
|
+
// plyr.speed = playSpeed;
|
|
185
|
+
// playerSpeedButton.innerHTML = `${playSpeed}X`;
|
|
186
|
+
//
|
|
187
|
+
// instance.playerControl.mobileEvents.showControls(instance);
|
|
188
|
+
// })
|
|
189
|
+
// }
|
|
190
|
+
// }
|
|
191
|
+
// }
|
|
192
|
+
|
|
57
193
|
}
|
|
@@ -116,6 +116,14 @@ export namespace LTPlayerEvents {
|
|
|
116
116
|
const settingsBody = playerContainer.querySelector('.settings-controllers');
|
|
117
117
|
|
|
118
118
|
if (!settingsBody) {
|
|
119
|
+
|
|
120
|
+
const modal = document.querySelector('.lt-player-mobile-settings-modal');
|
|
121
|
+
|
|
122
|
+
if (modal) {
|
|
123
|
+
modal.remove();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
119
127
|
return;
|
|
120
128
|
}
|
|
121
129
|
|
|
@@ -27,33 +27,26 @@ export class LTPlayerCommon {
|
|
|
27
27
|
|
|
28
28
|
instance.plyr.speed = 1;
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
let checkCaptions = (instance.plyr as plyr).captions;
|
|
52
|
-
|
|
53
|
-
if (checkCaptions.currentTrack >= 0) {
|
|
54
|
-
instance.plyr.toggleCaptions(true);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
30
|
+
instance.plyr.toggleCaptions(false);
|
|
31
|
+
return;
|
|
32
|
+
|
|
33
|
+
//
|
|
34
|
+
// if (instance.plyr.isEmbed) {
|
|
35
|
+
// instance.plyr.embed.getTextTracks().then( (response: string | any[]) => {
|
|
36
|
+
// if (response.length !== 0) {
|
|
37
|
+
// instance.plyr.toggleCaptions(true);
|
|
38
|
+
// } else {
|
|
39
|
+
// instance.plyr.toggleCaptions(false);
|
|
40
|
+
// }
|
|
41
|
+
// })
|
|
42
|
+
// } else {
|
|
43
|
+
//
|
|
44
|
+
// let checkCaptions = (instance.plyr as plyr).captions;
|
|
45
|
+
//
|
|
46
|
+
// if (checkCaptions.currentTrack >= 0) {
|
|
47
|
+
// instance.plyr.toggleCaptions(true);
|
|
48
|
+
// }
|
|
49
|
+
// }
|
|
57
50
|
}
|
|
58
51
|
removeDesktopPlyrEvents() {
|
|
59
52
|
let plyrInstance = this.plyr as Plyr as Plyr & { eventListeners: Array<any> }
|
|
@@ -107,16 +100,18 @@ export class LTPlayerCommon {
|
|
|
107
100
|
});
|
|
108
101
|
}
|
|
109
102
|
onReadyPlayer() {
|
|
110
|
-
|
|
111
103
|
//set share button
|
|
112
|
-
this.player.
|
|
104
|
+
if (this.player.playerConfig.getShareData()) {
|
|
105
|
+
if (this.player.playerConfig.getDevice() === 'mobile') {
|
|
106
|
+
this.player.share.events.mobile.init();
|
|
107
|
+
} else {
|
|
108
|
+
this.player.share.events.desktop.init();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
113
111
|
|
|
114
|
-
// this.player.windowService.init(this.player);
|
|
115
112
|
//set poster
|
|
116
113
|
this.player.posterManager.mobileEvents.onload(this.player);
|
|
117
114
|
|
|
118
|
-
|
|
119
|
-
|
|
120
115
|
if (this.player.playerConfig.isAutoPlay()) {
|
|
121
116
|
let playerContainer = this.player.plyr.elements.container;
|
|
122
117
|
|
|
@@ -153,6 +148,7 @@ export class LTPlayerCommon {
|
|
|
153
148
|
}
|
|
154
149
|
|
|
155
150
|
//set captions
|
|
151
|
+
// TODO: Find a way to show/hide subtitles that does not loop on every timeUpdate. Consider using the controls show/hide event.
|
|
156
152
|
this.player.playerControl.desktopEvents.subtitles(this.player);
|
|
157
153
|
}
|
|
158
154
|
|
|
@@ -147,6 +147,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
147
147
|
//fullscreen icon
|
|
148
148
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
|
|
149
149
|
|
|
150
|
+
instance.videoService.removeObjectFit();
|
|
151
|
+
|
|
150
152
|
});
|
|
151
153
|
|
|
152
154
|
plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
|
|
@@ -155,6 +157,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
|
|
|
155
157
|
|
|
156
158
|
//fullscreen icon
|
|
157
159
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
|
|
160
|
+
|
|
161
|
+
instance.videoService.appendObjectFit();
|
|
158
162
|
})
|
|
159
163
|
}
|
|
160
164
|
|
|
@@ -83,8 +83,8 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
83
83
|
instance.playerControl.mobileEvents.backwardForward(instance);
|
|
84
84
|
instance.playerControl.mobileEvents.backwardForwardSeconds(instance);
|
|
85
85
|
|
|
86
|
-
//
|
|
87
|
-
instance.playerControl.mobileEvents.volume(instance);
|
|
86
|
+
//remove volume controller
|
|
87
|
+
// instance.playerControl.mobileEvents.volume(instance);
|
|
88
88
|
|
|
89
89
|
//set settings controller
|
|
90
90
|
instance.playerControl.settingsControlsManager.init(instance);
|
|
@@ -132,11 +132,13 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
|
|
|
132
132
|
//fullscreen icon
|
|
133
133
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
|
|
134
134
|
|
|
135
|
+
instance.videoService.removeObjectFit();
|
|
135
136
|
});
|
|
136
137
|
|
|
137
138
|
plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
|
|
138
139
|
//fullscreen icon
|
|
139
140
|
instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
|
|
141
|
+
instance.videoService.appendObjectFit();
|
|
140
142
|
})
|
|
141
143
|
}
|
|
142
144
|
|