@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
|
@@ -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,7 +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
|
+
import {LTPlayerHls} from "../../components/LTPlayerHls";
|
|
15
|
+
import {LTPlayerVideo} from "../../components/video/LTPlayerVideo";
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* Default Player type Service
|
|
@@ -31,7 +33,9 @@ export class LTPlayerController {
|
|
|
31
33
|
devMethodePreload: LTPlayerDevMethode.Preload
|
|
32
34
|
eventInstance: LTPlayerEventsManager
|
|
33
35
|
posterManager : LTPlayerPosterManager
|
|
34
|
-
share :
|
|
36
|
+
share : LTPlayerShareManager
|
|
37
|
+
hls : LTPlayerHls
|
|
38
|
+
videoService : LTPlayerVideo
|
|
35
39
|
/**
|
|
36
40
|
* Base player type service
|
|
37
41
|
*/
|
|
@@ -41,6 +45,7 @@ export class LTPlayerController {
|
|
|
41
45
|
this.templateService = new TemplateService();
|
|
42
46
|
this.playerControl = new LTPlayerControls(this.templateService);
|
|
43
47
|
this.posterManager = new LTPlayerPosterManager();
|
|
44
|
-
this.share = new
|
|
48
|
+
this.share = new LTPlayerShareManager();
|
|
49
|
+
this.videoService = new LTPlayerVideo();
|
|
45
50
|
}
|
|
46
51
|
}
|
package/src/services/Helper.ts
CHANGED
|
@@ -88,4 +88,28 @@ export class Helper {
|
|
|
88
88
|
}
|
|
89
89
|
return url.protocol === "http:" || url.protocol === "https:";
|
|
90
90
|
}
|
|
91
|
+
|
|
92
|
+
static checkIsHls(url : string): boolean {
|
|
93
|
+
const extensions = [
|
|
94
|
+
'm3u8'
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
let response = false;
|
|
98
|
+
|
|
99
|
+
extensions.forEach(item => {
|
|
100
|
+
if (url.includes(item)) {
|
|
101
|
+
response = true;
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
return response;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static getVideoOrientation(width: number, height: number) {
|
|
109
|
+
if (width > height) {
|
|
110
|
+
return 'landscape';
|
|
111
|
+
} else {
|
|
112
|
+
return 'portrait'
|
|
113
|
+
}
|
|
114
|
+
}
|
|
91
115
|
}
|
|
@@ -55,10 +55,13 @@ export class ResizeService {
|
|
|
55
55
|
height: 150
|
|
56
56
|
},
|
|
57
57
|
size : {
|
|
58
|
-
1067 : "
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
1067 : "xxl",
|
|
59
|
+
913 : "xl",
|
|
60
|
+
820 : "lg",
|
|
61
|
+
760 : "md",
|
|
62
|
+
640 : "sm",
|
|
63
|
+
480 : "xs",
|
|
64
|
+
266 : "xxs"
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
|
|
@@ -145,7 +148,9 @@ export class ResizeService {
|
|
|
145
148
|
this.playerInstance.plyr.elements.container.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
146
149
|
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
147
150
|
inserted.classList.add('lt-player__additional-info__is_set_out-side');
|
|
148
|
-
|
|
151
|
+
this.playerInstance.plyr.on('ready', () => {
|
|
152
|
+
deskEvent.set(controller);
|
|
153
|
+
})
|
|
149
154
|
}
|
|
150
155
|
|
|
151
156
|
const createAddInfoButtonsInSide = () => {
|
|
@@ -154,12 +159,29 @@ export class ResizeService {
|
|
|
154
159
|
addInfoContainer.remove();
|
|
155
160
|
}
|
|
156
161
|
|
|
157
|
-
|
|
162
|
+
if (this.playerInstance.plyr.elements.controls !== undefined) {
|
|
163
|
+
let controlsInfoBody = this.playerInstance.plyr.elements.controls.querySelector('.content__body');
|
|
164
|
+
|
|
165
|
+
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
166
|
+
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
167
|
+
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
168
|
+
|
|
169
|
+
deskEvent.set(controller);
|
|
170
|
+
} else {
|
|
171
|
+
this.playerInstance.plyr.on('ready', () => {
|
|
172
|
+
|
|
173
|
+
let controlsInfoBody = this.playerInstance.plyr.elements.controls.querySelector('.content__body');
|
|
174
|
+
|
|
175
|
+
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
176
|
+
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
177
|
+
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
178
|
+
|
|
179
|
+
deskEvent.set(controller);
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
|
|
158
184
|
|
|
159
|
-
controlsInfoBody.insertAdjacentHTML("afterend", buttonsTemplate);
|
|
160
|
-
let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
|
|
161
|
-
inserted.classList.add('lt-player__additional-info__is_set_in-side');
|
|
162
|
-
deskEvent.set(controller);
|
|
163
185
|
}
|
|
164
186
|
|
|
165
187
|
if (containerWidth >= 380) {
|
|
@@ -282,6 +304,7 @@ export class ResizeService {
|
|
|
282
304
|
setHeight();
|
|
283
305
|
}
|
|
284
306
|
} else {
|
|
307
|
+
|
|
285
308
|
setWidth();
|
|
286
309
|
|
|
287
310
|
if (version !== 1) {
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
{{#modal}}
|
|
2
2
|
{{#mobile}}
|
|
3
|
+
{{#object_data}}
|
|
4
|
+
<div class="player-lt__mobile__modal-header">
|
|
5
|
+
<span class="line-button"></span>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="player-lt__mobile__modal-content">
|
|
8
|
+
{{#abstract}}
|
|
9
|
+
<h2>{{abstract.title}}</h2>
|
|
10
|
+
<p>{{abstract.description}}</p>
|
|
11
|
+
<p>{{abstract.videoDOI}}</p>
|
|
12
|
+
<p>{{abstract.videoCitation}}</p>
|
|
13
|
+
{{/abstract}}
|
|
14
|
+
|
|
15
|
+
{{#institution}}
|
|
16
|
+
<h2>{{institution.title}}</h2>
|
|
17
|
+
<img src="{{institution.image}}" alt="image">
|
|
18
|
+
<p>{{institution.institutionName}}</p>
|
|
19
|
+
<p>{{institution.description}}</p>
|
|
20
|
+
{{/institution}}
|
|
21
|
+
|
|
22
|
+
{{#bio}}
|
|
23
|
+
<h2>{{bio.title}}</h2>
|
|
24
|
+
<p>{{bio.description}}</p>
|
|
25
|
+
{{/bio}}
|
|
26
|
+
</div>
|
|
27
|
+
{{/object_data}}
|
|
3
28
|
{{#data}}
|
|
4
29
|
<div class="player-lt__mobile__modal-header">
|
|
5
30
|
<span class="line-button"></span>
|
|
@@ -10,6 +35,39 @@
|
|
|
10
35
|
{{/data}}
|
|
11
36
|
{{/mobile}}
|
|
12
37
|
{{#desktop}}
|
|
38
|
+
{{#object_data}}
|
|
39
|
+
<div class="player-lt__modal lt-modal-{{id}}">
|
|
40
|
+
<div class="player-lt__modal-content">
|
|
41
|
+
<span class="player-lt__close-button">×</span>
|
|
42
|
+
<div class="player-lt__modal-body">
|
|
43
|
+
{{#abstract}}
|
|
44
|
+
<h2>{{abstract.title}}</h2>
|
|
45
|
+
<p>{{abstract.description}}</p>
|
|
46
|
+
<hr>
|
|
47
|
+
<h3>Video DOI</h3>
|
|
48
|
+
<p>{{abstract.videoDOI}}</p>
|
|
49
|
+
<h3>Video Citation</h3>
|
|
50
|
+
<p>{{abstract.videoCitation}}</p>
|
|
51
|
+
{{/abstract}}
|
|
52
|
+
|
|
53
|
+
{{#institution}}
|
|
54
|
+
<h2>{{institution.title}}</h2>
|
|
55
|
+
<div class="modal-flex">
|
|
56
|
+
<img src="{{institution.image}}" alt="image">
|
|
57
|
+
<h3>{{institution.institutionName}}</h3>
|
|
58
|
+
</div>
|
|
59
|
+
<hr>
|
|
60
|
+
<p>{{institution.description}}</p>
|
|
61
|
+
{{/institution}}
|
|
62
|
+
|
|
63
|
+
{{#bio}}
|
|
64
|
+
<h2>{{bio.title}}</h2>
|
|
65
|
+
<p>{{bio.description}}</p>
|
|
66
|
+
{{/bio}}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{{/object_data}}
|
|
13
71
|
{{#data}}
|
|
14
72
|
<div class="player-lt__modal lt-modal-{{id}}">
|
|
15
73
|
<div class="player-lt__modal-content">
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
</div>
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
|
34
|
-
<div class="lt-player-notification">
|
|
34
|
+
<div class="lt-player-notification landscape">
|
|
35
35
|
<!-- <div class="lt-player-video-content">-->
|
|
36
36
|
<!-- <div class="content__body">-->
|
|
37
37
|
<!-- <h4 class="poster-title">{{videoParagraph}}</h4>-->
|
|
38
38
|
<!-- <p class="poster-paragraph">{{videoTitle}}</p>-->
|
|
39
39
|
<!-- </div>-->
|
|
40
40
|
<!-- </div>-->
|
|
41
|
-
<div class="lt-player-notification__notification-button-state">
|
|
41
|
+
<div class="lt-player-notification__notification-button-state landscape">
|
|
42
42
|
<div class="player-state">
|
|
43
43
|
<img class="player-state__icon filter" src="" alt="">
|
|
44
44
|
</div>
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
</div>
|
|
168
168
|
{{#mobile}}
|
|
169
169
|
<div class="plyr__controls__mobile-background d-none">
|
|
170
|
-
<div class="lt-player-notification">
|
|
170
|
+
<div class="lt-player-notification portrait">
|
|
171
171
|
<div class="lt-player-rewind-area">
|
|
172
172
|
</div>
|
|
173
173
|
<div class="lt-player-rewind lt-player-notify">
|
|
@@ -222,8 +222,8 @@
|
|
|
222
222
|
</div>
|
|
223
223
|
</div>
|
|
224
224
|
</div>
|
|
225
|
-
<div class="lt-player-notification">
|
|
226
|
-
<div class="lt-player-notification__notification-button-state">
|
|
225
|
+
<div class="lt-player-notification portrait">
|
|
226
|
+
<div class="lt-player-notification__notification-button-state portrait">
|
|
227
227
|
<div class="player-state">
|
|
228
228
|
<img class="player-state__icon filter" src="" alt="">
|
|
229
229
|
</div>
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
</div>
|
|
335
335
|
{{#mobile}}
|
|
336
336
|
<div class="plyr__controls__mobile-background d-none">
|
|
337
|
-
<div class="lt-player-notification">
|
|
337
|
+
<div class="lt-player-notification portrait">
|
|
338
338
|
<div class="lt-player-rewind-area">
|
|
339
339
|
</div>
|
|
340
340
|
<div class="lt-player-rewind lt-player-notify">
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<div class="lt-player__poster">
|
|
2
2
|
<div class="lt-player__poster__image-body lt-player__poster__background__grey" >
|
|
3
|
-
<img class="lt-player__poster__img lt-player__poster__img__set-default" alt="" src="{{logoBig}}">
|
|
3
|
+
<img class="lt-player__poster__img lt-player__poster__img__set-default d-none" alt="" src="{{logoBig}}">
|
|
4
|
+
<img class="lt-player__poster__img--set-custom d-none" alt="" src="{{config.configData.posterImage}}">
|
|
4
5
|
</div>
|
|
5
6
|
<div class="lt-player__poster__body">
|
|
6
7
|
<div class="content">
|