@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.
Files changed (40) hide show
  1. package/dist/css/lt-player-main.css +1 -1
  2. package/dist/css/lt-player-main.css.map +1 -1
  3. package/dist/js/lt-player-main.js +1 -1
  4. package/dist/js/lt-player-main.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/assets/sass/abstracts/_mixins.scss +11 -0
  7. package/src/assets/sass/abstracts/_variables.scss +3 -0
  8. package/src/assets/sass/app.scss +13 -1
  9. package/src/assets/sass/components/_modal.scss +1 -1
  10. package/src/assets/sass/sections/_settings.scss +255 -82
  11. package/src/assets/sass/sections/_share.scss +132 -21
  12. package/src/assets/sass/sections/controllers/_botom.scss +296 -303
  13. package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +36 -66
  14. package/src/assets/sass/sections/controllers/_top.scss +94 -113
  15. package/src/components/LTPlayerSetup.ts +0 -1
  16. package/src/components/LTPlayerType.ts +12 -12
  17. package/src/components/addInfo/LTPlayerAddInfoDesktop.ts +99 -0
  18. package/src/components/addInfo/LTPlayerAddInfoManager.ts +6 -6
  19. package/src/components/addInfo/LTPlayerAddInfoMobile.ts +110 -0
  20. package/src/components/config/LTPlayerConfig.ts +25 -11
  21. package/src/components/controls/LTPlayerControlsEvents.ts +46 -36
  22. package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +0 -1
  23. package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +166 -30
  24. package/src/components/events/LTPlayer.ts +8 -0
  25. package/src/components/events/LTPlayerCommon.ts +28 -32
  26. package/src/components/events/LTPlayerDesktop.ts +4 -0
  27. package/src/components/events/LTPlayerMobile.ts +4 -2
  28. package/src/components/share/LTPlayerShareDesktop.ts +120 -0
  29. package/src/components/share/LTPlayerShareEvents.ts +30 -132
  30. package/src/components/share/{LTPlayerShare.ts → LTPlayerShareManager.ts} +26 -8
  31. package/src/components/share/LTPlayerShareMobile.ts +154 -0
  32. package/src/components/video/LTPlayerVideo.ts +49 -0
  33. package/src/global/controllers/LTPlayerController.ts +6 -3
  34. package/src/index.ts +6 -0
  35. package/src/services/ResizeService.ts +7 -7
  36. package/src/views/additionalInfo.handlebars +4 -8
  37. package/src/views/controls.handlebars +41 -37
  38. package/src/views/settings.handlebars +11 -14
  39. package/src/views/share.handlebars +36 -33
  40. 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 {LTPlayer} from "../LTPlayerType";
2
- import {defaultType} from "../../global/types/ModuleTypes";
1
+ import {LTPlayerShareManager} from "./LTPlayerShareManager";
3
2
 
4
3
  export namespace LTPlayerShareEvents {
5
4
 
6
- export class common {
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
- if (selectors.copyButtons.length > 0) {
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
- export class mobile {
106
- common : LTPlayerShareEvents.common
107
- constructor() {
108
- this.common = new common();
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
- init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
19
+ const instance = this;
112
20
 
113
- const common = this.common;
114
- common.getSelector(instance).buttons.forEach(button => {
21
+ buttons.forEach(button => {
115
22
  if (button) {
116
- button.addEventListener('click', () => {
117
- common.activeModal(instance, this.common.getSelector(instance));
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
- common : LTPlayerShareEvents.common
138
- constructor() {
139
- this.common = new common();
36
+ manager : LTPlayerShareManager
37
+ constructor(manager: LTPlayerShareManager) {
38
+ this.manager = manager;
140
39
  }
141
40
 
142
- init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
143
-
144
- const common = this.common;
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
- common.activeModal(instance, this.common.getSelector(instance));
46
+ manager.desktop.activeModal();
149
47
  })
150
48
  }
151
49
  })
152
50
 
153
- if (common.getSelector(instance).shareContainer) {
154
- common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
51
+ if (manager.desktop.getSelector().shareContainer) {
52
+ manager.desktop.getSelector().shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
155
53
  event.preventDefault();
156
- if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
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
- common.inactiveModal(instance, common.getSelector(instance));
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 LTPlayerShare {
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 = { desktop: new LTPlayerShareEvents.desktop(), mobile: new LTPlayerShareEvents.mobile() }
14
-
15
- constructor() {
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
- setTemplate() {
28
- const playerContainer = this.instance.plyr.elements.wrapper;
29
- playerContainer.insertAdjacentHTML("afterend", this.templateService.getShare(this.playerConfig.getShareData()));
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 {LTPlayerShare} from "../../components/share/LTPlayerShare";
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 : LTPlayerShare
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 LTPlayerShare();
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 () {