@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,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,162 +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
|
|
7
|
-
|
|
8
|
-
isPlaying : boolean
|
|
9
|
-
activeModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
10
|
-
selectors.shareContainer.classList.remove('share-inactive');
|
|
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)
|
|
25
|
-
if (instance.plyr.playing) {
|
|
26
|
-
this.isPlaying = true;
|
|
27
|
-
instance.plyr.pause();
|
|
28
|
-
} else {
|
|
29
|
-
this.isPlaying = false;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
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
|
-
|
|
71
|
-
inactiveModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
72
|
-
selectors.shareContainer.classList.add('share-inactive');
|
|
73
|
-
selectors.shareContainer.classList.remove('share-active');
|
|
74
|
-
if (this.isPlaying) {
|
|
75
|
-
instance.plyr.play();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
getSelector(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
|
|
80
|
-
return {
|
|
81
|
-
buttons : [
|
|
82
|
-
instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
|
|
83
|
-
instance.plyr.elements.controls.querySelector('.lt-player-share'),
|
|
84
|
-
],
|
|
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')
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
setCopyButtonsEvents(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
|
|
5
|
+
export class mobile {
|
|
93
6
|
|
|
94
|
-
|
|
95
|
-
selectors.copyButtons.forEach((button: HTMLElement) => {
|
|
96
|
-
button.addEventListener('click', function LTPlayerShareCopy() {
|
|
97
|
-
navigator.clipboard.writeText(selectors.urlInput.dataset.copy);
|
|
98
|
-
})
|
|
7
|
+
manager : LTPlayerShareManager
|
|
99
8
|
|
|
100
|
-
|
|
101
|
-
|
|
9
|
+
constructor(manager: LTPlayerShareManager) {
|
|
10
|
+
this.manager = manager;
|
|
102
11
|
}
|
|
103
12
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
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
|
+
];
|
|
110
18
|
|
|
111
|
-
|
|
19
|
+
const instance = this;
|
|
112
20
|
|
|
113
|
-
|
|
114
|
-
common.getSelector(instance).buttons.forEach(button => {
|
|
21
|
+
buttons.forEach(button => {
|
|
115
22
|
if (button) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
+
}
|
|
119
30
|
}
|
|
120
31
|
})
|
|
121
|
-
|
|
122
|
-
if (common.getSelector(instance).shareContainer) {
|
|
123
|
-
common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
|
|
124
|
-
event.preventDefault();
|
|
125
|
-
if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
|
|
126
|
-
let target = event.target as HTMLElement;
|
|
127
|
-
if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
|
|
128
|
-
common.inactiveModal(instance, common.getSelector(instance));
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
})
|
|
132
|
-
}
|
|
133
32
|
}
|
|
134
33
|
}
|
|
135
34
|
|
|
136
35
|
export class desktop {
|
|
137
|
-
|
|
138
|
-
constructor() {
|
|
139
|
-
this.
|
|
36
|
+
manager : LTPlayerShareManager
|
|
37
|
+
constructor(manager: LTPlayerShareManager) {
|
|
38
|
+
this.manager = manager;
|
|
140
39
|
}
|
|
141
40
|
|
|
142
|
-
init(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
common.getSelector(instance).buttons.forEach(button => {
|
|
41
|
+
init() {
|
|
42
|
+
const manager = this.manager;
|
|
43
|
+
manager.desktop.getSelector().buttons.forEach(button => {
|
|
146
44
|
if (button) {
|
|
147
45
|
button.addEventListener('click', () => {
|
|
148
|
-
|
|
46
|
+
manager.desktop.activeModal();
|
|
149
47
|
})
|
|
150
48
|
}
|
|
151
49
|
})
|
|
152
50
|
|
|
153
|
-
if (
|
|
154
|
-
|
|
51
|
+
if (manager.desktop.getSelector().shareContainer) {
|
|
52
|
+
manager.desktop.getSelector().shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
|
|
155
53
|
event.preventDefault();
|
|
156
|
-
if (
|
|
54
|
+
if ( manager.desktop.getSelector().shareContainer.classList.contains('share-active')) {
|
|
157
55
|
let target = event.target as HTMLElement;
|
|
158
56
|
if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
|
|
159
|
-
|
|
57
|
+
manager.desktop.inactiveModal();
|
|
160
58
|
}
|
|
161
59
|
}
|
|
162
60
|
})
|
|
@@ -4,37 +4,55 @@ import {IconsService} from "../../services/IconsService";
|
|
|
4
4
|
import {TemplateService} from "../../services/TemplateService";
|
|
5
5
|
import {LTPlayerShareEvents} from "./LTPlayerShareEvents";
|
|
6
6
|
import {shareType} from "../../global/types/ModuleTypes";
|
|
7
|
+
import {LTPlayerShareDesktop} from "./LTPlayerShareDesktop";
|
|
8
|
+
import {LTPlayerShareMobile} from "./LTPlayerShareMobile";
|
|
7
9
|
|
|
8
|
-
export class
|
|
10
|
+
export class LTPlayerShareManager {
|
|
9
11
|
instance: LTPlayer.LandscapeType | LTPlayer.PortraitType
|
|
10
12
|
playerConfig: LTPlayerConfig
|
|
11
13
|
iconService: IconsService
|
|
12
14
|
templateService: TemplateService
|
|
13
|
-
events: shareType = {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
events: shareType = {
|
|
16
|
+
desktop : undefined,
|
|
17
|
+
mobile : undefined
|
|
16
18
|
}
|
|
19
|
+
desktop : LTPlayerShareDesktop
|
|
20
|
+
mobile: LTPlayerShareMobile
|
|
17
21
|
|
|
18
22
|
init(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
|
|
19
23
|
this.instance = instance;
|
|
20
24
|
this.playerConfig = instance.playerConfig;
|
|
21
25
|
this.templateService = instance.templateService;
|
|
22
26
|
this.iconService = instance.iconService;
|
|
23
|
-
this.setTemplate();
|
|
24
27
|
this.appendScriptTag();
|
|
28
|
+
this.setByDevice();
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
setByDevice() {
|
|
32
|
+
switch (this.playerConfig.getDevice()) {
|
|
33
|
+
case "desktop":
|
|
34
|
+
this.desktop = new LTPlayerShareDesktop(this);
|
|
35
|
+
this.events.desktop = new LTPlayerShareEvents.desktop(this);
|
|
36
|
+
break
|
|
37
|
+
case "mobile":
|
|
38
|
+
this.mobile = new LTPlayerShareMobile(this);
|
|
39
|
+
this.events.mobile = new LTPlayerShareEvents.mobile(this)
|
|
40
|
+
}
|
|
30
41
|
}
|
|
31
42
|
|
|
32
43
|
appendScriptTag() {
|
|
33
44
|
const script = document.createElement("script");
|
|
45
|
+
script.classList.add('lt-player-add-to-any')
|
|
34
46
|
script.type = "text/javascript";
|
|
35
47
|
script.src = "https://static.addtoany.com/menu/page.js";
|
|
36
48
|
script.async;
|
|
37
49
|
document.body.appendChild(script);
|
|
38
50
|
}
|
|
39
51
|
|
|
52
|
+
removeScriptTag() {
|
|
53
|
+
const script = document.querySelector('.lt-player-add-to-any');
|
|
54
|
+
if(script) {
|
|
55
|
+
script.remove();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
40
58
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import {LTPlayerShareManager} from "./LTPlayerShareManager";
|
|
2
|
+
|
|
3
|
+
export class LTPlayerShareMobile {
|
|
4
|
+
|
|
5
|
+
manager : LTPlayerShareManager
|
|
6
|
+
isPlaying : boolean
|
|
7
|
+
|
|
8
|
+
constructor(instance : LTPlayerShareManager) {
|
|
9
|
+
this.manager = instance;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
activeModal() {
|
|
13
|
+
if (!this.manager.playerConfig.getShareData().canonicalUrl) {
|
|
14
|
+
if (!this.manager.playerConfig.getShareData().embedUrl) {
|
|
15
|
+
return
|
|
16
|
+
} else {
|
|
17
|
+
this.createModal();
|
|
18
|
+
this.setCopyContent(true);
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
this.createModal();
|
|
22
|
+
this.setCopyContent(false);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
(window as any).a2a.init_all();
|
|
26
|
+
|
|
27
|
+
this.setCopyButtonsEvents()
|
|
28
|
+
this.setSwitchButton()
|
|
29
|
+
|
|
30
|
+
if (this.manager.instance.plyr.playing) {
|
|
31
|
+
this.isPlaying = true;
|
|
32
|
+
this.manager.instance.plyr.pause();
|
|
33
|
+
} else {
|
|
34
|
+
this.isPlaying = false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
setTimeout(() => {
|
|
38
|
+
const shareContainer = document.querySelector('.share-controller-wrapper');
|
|
39
|
+
const shareContainerHeader = document.querySelector('.share-controller-mobile-modal-header');
|
|
40
|
+
let instance = this;
|
|
41
|
+
|
|
42
|
+
if (shareContainer) {
|
|
43
|
+
let mobileEvent: HammerManager = this.manager.instance.eventInstance.mobileEvents.setMobileEvent(shareContainer);
|
|
44
|
+
if (mobileEvent) {
|
|
45
|
+
mobileEvent.on('singletap', function LTPlayerMobileShareButtonsExit(event) {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
let target = event.target as HTMLElement;
|
|
48
|
+
if (!target.classList.contains('player-lt__close-button') && !target.classList.contains('lt-player-mobile-share')) {
|
|
49
|
+
instance.inactiveModal();
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (shareContainerHeader) {
|
|
56
|
+
let mobileEvent: HammerManager = this.manager.instance.eventInstance.mobileEvents.setMobileEvent(shareContainer);
|
|
57
|
+
if (mobileEvent) {
|
|
58
|
+
mobileEvent.on('pan', function LTPlayerMobileShareButtonsExitPan(event) {
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
let target = event.target as HTMLElement;
|
|
61
|
+
if (!target.classList.contains('player-lt__close-button') ) {
|
|
62
|
+
instance.inactiveModal();
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, 100)
|
|
68
|
+
}
|
|
69
|
+
setSwitchButton() {
|
|
70
|
+
const switchButton = document.querySelector('.share-controller-wrapper').querySelector('.button_embed');
|
|
71
|
+
const urlInput = document.querySelector('.share-controller-wrapper').querySelector('.share-controller-url');
|
|
72
|
+
const instance = this.manager.instance;
|
|
73
|
+
|
|
74
|
+
if (!instance.playerConfig.getShareData().embedUrl || !instance.playerConfig.getShareData().canonicalUrl) {
|
|
75
|
+
switchButton.classList.add('d-none');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
switchButton.addEventListener('click', () => {
|
|
80
|
+
if (urlInput.classList.contains('canonicalUrl')) {
|
|
81
|
+
urlInput.classList.remove('canonicalUrl');
|
|
82
|
+
urlInput.classList.add('embedUrl');
|
|
83
|
+
this.setCopyContent(true);
|
|
84
|
+
} else {
|
|
85
|
+
urlInput.classList.add('canonicalUrl');
|
|
86
|
+
urlInput.classList.remove('embedUrl');
|
|
87
|
+
this.setCopyContent(false);
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
setCopyButtonsEvents() {
|
|
93
|
+
const selectors = document.querySelectorAll('.share-controller-link');
|
|
94
|
+
const urlInput = document.querySelector('.share-controller-wrapper').querySelector('.share-controller-url');
|
|
95
|
+
|
|
96
|
+
if (selectors.length > 0) {
|
|
97
|
+
selectors.forEach((button: HTMLElement) => {
|
|
98
|
+
button.addEventListener('click', function LTPlayerShareCopy() {
|
|
99
|
+
navigator.clipboard.writeText((urlInput as HTMLElement).dataset.copy);
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
setCopyContent(embed : boolean) {
|
|
107
|
+
const urlInput = document.querySelector('.share-controller-wrapper').querySelector('.share-controller-url');
|
|
108
|
+
|
|
109
|
+
if (!urlInput) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (!embed) {
|
|
114
|
+
urlInput.classList.add('canonicalUrl');
|
|
115
|
+
urlInput.innerHTML = `${this.manager.instance.playerConfig.getShareData().canonicalUrl}`;
|
|
116
|
+
(urlInput as HTMLElement).dataset.copy = this.manager.instance.playerConfig.getShareData().canonicalUrl;
|
|
117
|
+
urlInput.addEventListener('click', () => {
|
|
118
|
+
window.open(this.manager.instance.playerConfig.getShareData().canonicalUrl)
|
|
119
|
+
})
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
urlInput.classList.add('embedUrl');
|
|
123
|
+
const iframe = `<iframe width="560" height="315" src="${this.manager.instance.playerConfig.getShareData().embedUrl}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
|
|
124
|
+
(urlInput as HTMLElement).innerText = iframe;
|
|
125
|
+
(urlInput as HTMLElement).dataset.copy = iframe;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
createModal() {
|
|
129
|
+
|
|
130
|
+
let modalTemplate = this.manager.instance.templateService.getShare(this.manager.playerConfig.getShareData());
|
|
131
|
+
|
|
132
|
+
const modal = document.createElement('div');
|
|
133
|
+
modal.classList.add('lt-player-mobile-share-modal')
|
|
134
|
+
modal.innerHTML = modalTemplate;
|
|
135
|
+
|
|
136
|
+
const body = document.querySelector('body');
|
|
137
|
+
|
|
138
|
+
if (body) {
|
|
139
|
+
body.appendChild(modal);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
inactiveModal() {
|
|
144
|
+
const modal = document.querySelector('.lt-player-mobile-share-modal');
|
|
145
|
+
|
|
146
|
+
if (modal) {
|
|
147
|
+
modal.remove();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (this.isPlaying) {
|
|
151
|
+
this.manager.instance.plyr.play();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {LTPlayer} from "../LTPlayerType";
|
|
2
|
+
import {LTPlayerConfig} from "../config/LTPlayerConfig";
|
|
3
|
+
import Plyr from "plyr";
|
|
4
|
+
|
|
5
|
+
export class LTPlayerVideo {
|
|
6
|
+
instanceType : LTPlayer.LandscapeType | LTPlayer.PortraitType
|
|
7
|
+
playerConfig : LTPlayerConfig
|
|
8
|
+
plyr : Plyr
|
|
9
|
+
objectFit: string
|
|
10
|
+
init(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
|
|
11
|
+
this.instanceType = instance;
|
|
12
|
+
this.playerConfig = instance.playerConfig;
|
|
13
|
+
this.plyr = instance.plyr;
|
|
14
|
+
this.objectFit =instance.playerConfig.getObjectFit();
|
|
15
|
+
this.appendObjectFit();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
appendObjectFit() {
|
|
19
|
+
if (!this.objectFit) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!this.plyr.isHTML5) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const videoTag = this.plyr.elements.wrapper.querySelector('video');
|
|
28
|
+
|
|
29
|
+
if (this.objectFit === 'cover') {
|
|
30
|
+
videoTag.style.objectFit = this.objectFit;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
removeObjectFit() {
|
|
35
|
+
if (!this.objectFit) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!this.plyr.isHTML5) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const videoTag = this.plyr.elements.wrapper.querySelector('video');
|
|
44
|
+
|
|
45
|
+
if (this.objectFit === 'cover') {
|
|
46
|
+
videoTag.style.objectFit = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -10,8 +10,9 @@ import {LTPlayerMini} from "../../components/controls/LTPlayerMini";
|
|
|
10
10
|
import {LTPlayerDevMethode} from "../../components/LTPlayerDevMethode";
|
|
11
11
|
import {LTPlayerEventsManager} from "../../components/LTPlayerEventsManager";
|
|
12
12
|
import {LTPlayerPosterManager} from "../../components/poster/LTPlayerPosterManager";
|
|
13
|
-
import {
|
|
13
|
+
import {LTPlayerShareManager} from "../../components/share/LTPlayerShareManager";
|
|
14
14
|
import {LTPlayerHls} from "../../components/LTPlayerHls";
|
|
15
|
+
import {LTPlayerVideo} from "../../components/video/LTPlayerVideo";
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Default Player type Service
|
|
@@ -32,8 +33,9 @@ export class LTPlayerController {
|
|
|
32
33
|
devMethodePreload: LTPlayerDevMethode.Preload
|
|
33
34
|
eventInstance: LTPlayerEventsManager
|
|
34
35
|
posterManager : LTPlayerPosterManager
|
|
35
|
-
share :
|
|
36
|
+
share : LTPlayerShareManager
|
|
36
37
|
hls : LTPlayerHls
|
|
38
|
+
videoService : LTPlayerVideo
|
|
37
39
|
/**
|
|
38
40
|
* Base player type service
|
|
39
41
|
*/
|
|
@@ -43,6 +45,7 @@ export class LTPlayerController {
|
|
|
43
45
|
this.templateService = new TemplateService();
|
|
44
46
|
this.playerControl = new LTPlayerControls(this.templateService);
|
|
45
47
|
this.posterManager = new LTPlayerPosterManager();
|
|
46
|
-
this.share = new
|
|
48
|
+
this.share = new LTPlayerShareManager();
|
|
49
|
+
this.videoService = new LTPlayerVideo();
|
|
47
50
|
}
|
|
48
51
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import {LTPlayerManager} from "./components/LTPlayerManager";
|
|
2
2
|
|
|
3
|
+
const supportsContainerQueries = "container" in document.documentElement.style;
|
|
4
|
+
if (!supportsContainerQueries) {
|
|
5
|
+
let polyfill_script = document.createElement('script');
|
|
6
|
+
polyfill_script.setAttribute('src','https://cdn.jsdelivr.net/npm/container-query-polyfill@1/dist/container-query-polyfill.modern.js');
|
|
7
|
+
document.body.appendChild(polyfill_script);
|
|
8
|
+
}
|
|
3
9
|
|
|
4
10
|
//todo remove from window, it's for developer
|
|
5
11
|
window.addEventListener('load', function () {
|