@latest-thinking/lt-player 1.0.6-a → 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/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/sections/_share.scss +145 -0
- package/src/components/LTPlayerSetup.ts +0 -1
- package/src/components/LTPlayerType.ts +10 -12
- package/src/components/config/LTPlayerConfig.ts +25 -11
- package/src/components/events/LTPlayerCommon.ts +5 -2
- package/src/components/events/LTPlayerDesktop.ts +4 -0
- package/src/components/events/LTPlayerMobile.ts +2 -0
- 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/views/share.handlebars +36 -33
package/package.json
CHANGED
|
@@ -19,6 +19,151 @@
|
|
|
19
19
|
// }
|
|
20
20
|
//}
|
|
21
21
|
|
|
22
|
+
.lt-player-mobile-share-modal {
|
|
23
|
+
.share-controller {
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
.share-inactive {
|
|
27
|
+
align-items: end;
|
|
28
|
+
background: rgba(0, 0, 0, .3);
|
|
29
|
+
-webkit-backdrop-filter: blur(14px);
|
|
30
|
+
backdrop-filter: blur(14px);
|
|
31
|
+
bottom: 0;
|
|
32
|
+
color: $default-lt-player-white;
|
|
33
|
+
display: flex;
|
|
34
|
+
justify-content: center;
|
|
35
|
+
left: 0;
|
|
36
|
+
position: absolute;
|
|
37
|
+
right: 0;
|
|
38
|
+
top: 0;
|
|
39
|
+
z-index: 9999999;
|
|
40
|
+
|
|
41
|
+
.share-controller-content {
|
|
42
|
+
background: $default-lt-player-white;
|
|
43
|
+
padding: 0 28px 20px;
|
|
44
|
+
text-align: center;
|
|
45
|
+
width: 100%;
|
|
46
|
+
|
|
47
|
+
.share-controller-mobile-modal-header {
|
|
48
|
+
position: sticky;
|
|
49
|
+
top: 0;
|
|
50
|
+
display: flex;
|
|
51
|
+
justify-content: space-between;
|
|
52
|
+
align-items: center;
|
|
53
|
+
background-color: #F9F9F9;
|
|
54
|
+
min-height: 50px;
|
|
55
|
+
padding: 0 16px;
|
|
56
|
+
border-radius: 15px 15px 0 0;
|
|
57
|
+
|
|
58
|
+
.line-button {
|
|
59
|
+
display: flex;
|
|
60
|
+
width: 56px;
|
|
61
|
+
height: 6px;
|
|
62
|
+
background-color: #E6E6E6;
|
|
63
|
+
margin: 0.5rem auto;
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
.line-button {
|
|
70
|
+
display: flex;
|
|
71
|
+
width: 56px;
|
|
72
|
+
height: 6px;
|
|
73
|
+
background-color: $default-lt-line-button;
|
|
74
|
+
margin: 8px auto;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
visibility: hidden;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.share-controller-frame {
|
|
80
|
+
position: relative;
|
|
81
|
+
|
|
82
|
+
.player-share-close-button {
|
|
83
|
+
color: $default-lt-player-black;
|
|
84
|
+
position: absolute;
|
|
85
|
+
right: -20px;
|
|
86
|
+
top: -20px;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.share-controller-title,
|
|
91
|
+
.share-controller-via {
|
|
92
|
+
h3 {
|
|
93
|
+
color: $default-lt-button-color;
|
|
94
|
+
font-size: $lt-player-font-size-base;
|
|
95
|
+
font-weight: $lt-player-font-weight-lg;
|
|
96
|
+
margin-top: 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.share-controller-via {
|
|
101
|
+
margin-bottom: 25px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.share-controller-link-wrapper {
|
|
105
|
+
@extend %center-elements;
|
|
106
|
+
flex-flow: column wrap;
|
|
107
|
+
gap: 20px;
|
|
108
|
+
word-break: break-word;
|
|
109
|
+
|
|
110
|
+
.share-controller-url {
|
|
111
|
+
font-size: $lt-player-font-size-base;
|
|
112
|
+
color: $default-lt-player-modal-color;
|
|
113
|
+
font-weight: $lt-player-font-weight-sm;
|
|
114
|
+
text-decoration: underline;
|
|
115
|
+
cursor: pointer;
|
|
116
|
+
max-width: 90%;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.share-controller-link {
|
|
120
|
+
@extend %lt-player-btn;
|
|
121
|
+
@include yellow-btn;
|
|
122
|
+
color: $default-lt-button-color !important;
|
|
123
|
+
max-width: 142px;
|
|
124
|
+
width: 100%;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.share-controller-hr {
|
|
129
|
+
opacity: 0.3;
|
|
130
|
+
margin: 20px 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.share-controller-icons {
|
|
134
|
+
@extend %center-elements;
|
|
135
|
+
gap: 15px;
|
|
136
|
+
flex-wrap: wrap;
|
|
137
|
+
|
|
138
|
+
div {
|
|
139
|
+
display: none;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
a {
|
|
143
|
+
padding: 0;
|
|
144
|
+
|
|
145
|
+
&:first-child {
|
|
146
|
+
.share-icon__icon {
|
|
147
|
+
background: $default_color_player;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.share-icon__icon {
|
|
152
|
+
@extend %center-elements;
|
|
153
|
+
width: 32px;
|
|
154
|
+
height: 32px;
|
|
155
|
+
max-width: 32px;
|
|
156
|
+
max-height: 32px;
|
|
157
|
+
background: $default-lt-button-color;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
|
|
22
167
|
.plyr {
|
|
23
168
|
.share-controller {
|
|
24
169
|
.share-inactive {
|
|
@@ -106,14 +106,12 @@ export namespace LTPlayer {
|
|
|
106
106
|
|
|
107
107
|
this.playerConfig.getPlayerElementContainer().classList.add(`lt-player-portrate--${this.playerConfig.getDevice()}`);
|
|
108
108
|
|
|
109
|
-
|
|
110
109
|
let playerSettings = {};
|
|
111
110
|
|
|
112
111
|
const controls = this.getPlayerControllers();
|
|
113
112
|
|
|
114
113
|
Object.assign(playerSettings, {controls});
|
|
115
114
|
|
|
116
|
-
|
|
117
115
|
if (this.playerConfig.getVideoType() === 'embedded') {
|
|
118
116
|
Object.assign(playerSettings, this.playerConfig.getEmbedOrigin())
|
|
119
117
|
}
|
|
@@ -128,14 +126,14 @@ export namespace LTPlayer {
|
|
|
128
126
|
|
|
129
127
|
const element = this.playerConfig.getPlayerElementContainer().querySelector('.embed_player');
|
|
130
128
|
|
|
131
|
-
|
|
129
|
+
this.plyr = new Plyr(element, playerSettings);
|
|
132
130
|
|
|
133
|
-
this.playerConfig.setObjectFit(
|
|
131
|
+
this.playerConfig.setObjectFit(this.plyr, 'portrait').then(() => {
|
|
132
|
+
this.videoService.init(this);
|
|
133
|
+
});
|
|
134
134
|
|
|
135
135
|
this.windowService.init(this);
|
|
136
136
|
|
|
137
|
-
this.plyr = player;
|
|
138
|
-
|
|
139
137
|
this.posterManager.init(this);
|
|
140
138
|
|
|
141
139
|
const chapters = this.playerConfig.getChapters();
|
|
@@ -151,7 +149,7 @@ export namespace LTPlayer {
|
|
|
151
149
|
}
|
|
152
150
|
|
|
153
151
|
if (this.playerConfig.getDevice() !== 'mobile') {
|
|
154
|
-
this.miniPlayer.init(
|
|
152
|
+
this.miniPlayer.init(this.plyr, this.templateService, this.iconService, this.playerConfig.getPlayerType(), this);
|
|
155
153
|
}
|
|
156
154
|
}
|
|
157
155
|
|
|
@@ -264,14 +262,14 @@ export namespace LTPlayer {
|
|
|
264
262
|
|
|
265
263
|
const element = this.playerConfig.getPlayerElementContainer().querySelector('.embed_player');
|
|
266
264
|
|
|
267
|
-
|
|
265
|
+
this.plyr = new Plyr(element, playerSettings);
|
|
268
266
|
|
|
269
|
-
this.playerConfig.setObjectFit(
|
|
267
|
+
this.playerConfig.setObjectFit(this.plyr, 'landscape').then(() => {
|
|
268
|
+
this.videoService.init(this);
|
|
269
|
+
});
|
|
270
270
|
|
|
271
271
|
this.windowService.init(this);
|
|
272
272
|
|
|
273
|
-
this.plyr = player;
|
|
274
|
-
|
|
275
273
|
this.posterManager.init(this);
|
|
276
274
|
|
|
277
275
|
const chapters = this.playerConfig.getChapters();
|
|
@@ -287,7 +285,7 @@ export namespace LTPlayer {
|
|
|
287
285
|
}
|
|
288
286
|
|
|
289
287
|
if (this.playerConfig.getDevice() !== 'mobile') {
|
|
290
|
-
this.miniPlayer.init(
|
|
288
|
+
this.miniPlayer.init(this.plyr, this.templateService, this.iconService, this.playerConfig.getPlayerType(), this);
|
|
291
289
|
}
|
|
292
290
|
}
|
|
293
291
|
|
|
@@ -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) {
|
|
@@ -107,10 +107,13 @@ export class LTPlayerCommon {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
onReadyPlayer() {
|
|
110
|
-
|
|
111
110
|
//set share button
|
|
112
111
|
if (this.player.playerConfig.getShareData()) {
|
|
113
|
-
this.player.
|
|
112
|
+
if (this.player.playerConfig.getDevice() === 'mobile') {
|
|
113
|
+
this.player.share.events.mobile.init();
|
|
114
|
+
} else {
|
|
115
|
+
this.player.share.events.desktop.init();
|
|
116
|
+
}
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
//set poster
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -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
|
})
|