@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.
Files changed (52) hide show
  1. package/.babelrc +2 -1
  2. package/dist/css/lt-player-main.css +1 -1
  3. package/dist/css/lt-player-main.css.map +1 -1
  4. package/dist/js/lt-player-main.js +1 -1
  5. package/dist/js/lt-player-main.js.map +1 -1
  6. package/package.json +5 -3
  7. package/src/assets/sass/abstracts/_mixins.scss +5 -5
  8. package/src/assets/sass/abstracts/_placeholders.scss +5 -5
  9. package/src/assets/sass/abstracts/_variables.scss +7 -7
  10. package/src/assets/sass/components/_modal.scss +61 -19
  11. package/src/assets/sass/sections/_additional-info.scss +6 -6
  12. package/src/assets/sass/sections/_control.scss +12 -11
  13. package/src/assets/sass/sections/_poster.scss +52 -10
  14. package/src/assets/sass/sections/_settings.scss +14 -12
  15. package/src/assets/sass/sections/_share.scss +263 -95
  16. package/src/assets/sass/sections/_subtitles.scss +14 -1
  17. package/src/assets/sass/sections/controllers/_botom.scss +160 -98
  18. package/src/assets/sass/sections/controllers/_mini-player.scss +18 -3
  19. package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +48 -85
  20. package/src/assets/sass/sections/controllers/_top.scss +39 -13
  21. package/src/components/LTPlayerDevMethode.ts +23 -3
  22. package/src/components/LTPlayerHls.ts +29 -0
  23. package/src/components/LTPlayerSetup.ts +14 -9
  24. package/src/components/LTPlayerType.ts +85 -37
  25. package/src/components/addInfo/LTPlayerAddInfoManager.ts +12 -5
  26. package/src/components/addInfo/LTPlayerAdditionalInfoEvents.ts +37 -12
  27. package/src/components/config/LTPlayerConfig.ts +44 -1
  28. package/src/components/config/LTPlayerConfigProcessor.ts +9 -5
  29. package/src/components/controls/LTPlayerControlsEvents.ts +26 -10
  30. package/src/components/controls/LTPlayerMini.ts +75 -5
  31. package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +2 -2
  32. package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +4 -4
  33. package/src/components/events/LTPlayer.ts +10 -1
  34. package/src/components/events/LTPlayerCommon.ts +7 -8
  35. package/src/components/events/LTPlayerDesktop.ts +29 -2
  36. package/src/components/events/LTPlayerMobile.ts +27 -0
  37. package/src/components/poster/LTPlayerPoster.ts +36 -22
  38. package/src/components/poster/LTPlayerPosterEvents.ts +10 -7
  39. package/src/components/poster/LTPlayerPosterManager.ts +3 -10
  40. package/src/components/share/LTPlayerShareDesktop.ts +120 -0
  41. package/src/components/share/LTPlayerShareEvents.ts +30 -69
  42. package/src/components/share/{LTPlayerShare.ts → LTPlayerShareManager.ts} +26 -8
  43. package/src/components/share/LTPlayerShareMobile.ts +154 -0
  44. package/src/components/video/LTPlayerVideo.ts +49 -0
  45. package/src/global/controllers/LTPlayerController.ts +8 -3
  46. package/src/services/Helper.ts +24 -0
  47. package/src/services/ResizeService.ts +33 -10
  48. package/src/views/additionalInfo.handlebars +58 -0
  49. package/src/views/background.handlebars +1 -1
  50. package/src/views/controls.handlebars +6 -6
  51. package/src/views/poster.handlebars +2 -1
  52. package/src/views/share.handlebars +81 -78
@@ -22,7 +22,7 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
22
22
  setButtonSpeed() {
23
23
  let playerControlsContainer = this.settingsInstance.playerInstance.plyr.elements.controls;
24
24
  let playerSpeedButton = playerControlsContainer.querySelector('.plyr__controls_speed-button');
25
- playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}`;
25
+ playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}X`;
26
26
  let plyr = this.settingsInstance.playerInstance.plyr;
27
27
  let instance = this.settingsInstance.playerInstance;
28
28
 
@@ -34,19 +34,19 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
34
34
  let playSpeed = plyr.speed + 0.25;
35
35
 
36
36
  if (playSpeed > 2) {
37
- playerSpeedButton.innerHTML = '1';
37
+ playerSpeedButton.innerHTML = `1x`;
38
38
  plyr.speed = 1;
39
39
  return;
40
40
  }
41
41
 
42
42
  if (playSpeed === 1.75) {
43
43
  plyr.speed = playSpeed + 0.25
44
- playerSpeedButton.innerHTML = `${playSpeed + 0.25}`;
44
+ playerSpeedButton.innerHTML = `${playSpeed + 0.25}X`;
45
45
  return;
46
46
  }
47
47
 
48
48
  plyr.speed = playSpeed;
49
- playerSpeedButton.innerHTML = `${playSpeed}`;
49
+ playerSpeedButton.innerHTML = `${playSpeed}X`;
50
50
 
51
51
  instance.playerControl.mobileEvents.showControls(instance);
52
52
  })
@@ -27,10 +27,14 @@ export namespace LTPlayerEvents {
27
27
  }
28
28
 
29
29
  const miniPlayerEnable = playerContainer.querySelector('.lt-player-mini-enable');
30
+ const miniPlayerEnableSize = playerContainer.querySelector(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
30
31
 
31
32
  if (miniPlayerEnable) {
32
33
  miniPlayerEnable.classList.remove('lt-player-mini-enable');
33
34
  }
35
+ if (miniPlayerEnableSize) {
36
+ miniPlayerEnableSize.classList.remove(`.lt-player-mini-${player.playerConfig.getPlayerType()}`);
37
+ }
34
38
 
35
39
  })
36
40
 
@@ -134,7 +138,8 @@ export namespace LTPlayerEvents {
134
138
  let miniPlayer = {
135
139
  controls : playerContainer.querySelector('.lt-player-mini-player-controls'),
136
140
  background: playerContainer.querySelector('.lt-player-mini-player-background'),
137
- enable: playerContainer.querySelector('.lt-player-mini-enable')
141
+ enable: playerContainer.querySelector('.lt-player-mini-enable'),
142
+ size: playerContainer.querySelector(`.lt-player-mini-${instance.playerConfig.getPlayerType()}`)
138
143
  };
139
144
 
140
145
  if (miniPlayer.controls) {
@@ -145,6 +150,10 @@ export namespace LTPlayerEvents {
145
150
  miniPlayer.background.remove();
146
151
  }
147
152
 
153
+ if (miniPlayer.size) {
154
+ miniPlayer.size.classList.remove(`lt-player-mini-${instance.playerConfig.getPlayerType()}`)
155
+ }
156
+
148
157
  if (miniPlayer.enable) {
149
158
  miniPlayer.enable.classList.remove('lt-player-mini-enable')
150
159
  }
@@ -106,20 +106,19 @@ export class LTPlayerCommon {
106
106
  }
107
107
  });
108
108
  }
109
-
110
109
  onReadyPlayer() {
111
-
112
110
  //set share button
113
- this.player.share.events.desktop.init(this.player);
111
+ if (this.player.playerConfig.getShareData()) {
112
+ if (this.player.playerConfig.getDevice() === 'mobile') {
113
+ this.player.share.events.mobile.init();
114
+ } else {
115
+ this.player.share.events.desktop.init();
116
+ }
117
+ }
114
118
 
115
- this.player.windowService.init(this.player);
116
119
  //set poster
117
120
  this.player.posterManager.mobileEvents.onload(this.player);
118
121
 
119
- if (this.player.additionalInfoService) {
120
- this.player.additionalInfoService.init(this.player, this.player.playerId, this.player.iconService, this.player.templateService);
121
- }
122
-
123
122
  if (this.player.playerConfig.isAutoPlay()) {
124
123
  let playerContainer = this.player.plyr.elements.container;
125
124
 
@@ -5,6 +5,7 @@ import {plyr} from "../../global/types/ModuleTypes";
5
5
  import {LTPlayerEventsManager} from "../LTPlayerEventsManager";
6
6
  import {LTPlayerCommon} from "./LTPlayerCommon";
7
7
  import {EventsInterfaces} from "../../global/interfaces/EventsInterfaces";
8
+ import {LoaderService} from "../../services/LoaderService";
8
9
 
9
10
  export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces {
10
11
  setup(eventManager: LTPlayerEventsManager) {
@@ -23,8 +24,24 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
23
24
  this.plyrTimeUpdate();
24
25
  this.plyrOnPlay();
25
26
  this.plyrOnPause();
27
+ this.plyrOnSeek();
26
28
  }
27
29
 
30
+ plyrOnSeek():void {
31
+ let eventManager = this;
32
+ let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
33
+ let plyr: Plyr = this.plyr;
34
+
35
+ plyr.on('seeked', function LTPlayerSeek(){
36
+ if (plyr.isEmbed) {
37
+ if (plyr.paused) {
38
+ return;
39
+ }
40
+ let playerContainer = instance.plyr.elements.container;
41
+ playerContainer.querySelector(`.lt-player__poster`).insertAdjacentHTML('afterend', LoaderService.getSpinner());
42
+ }
43
+ })
44
+ }
28
45
 
29
46
  plyrOnReady(): void {
30
47
  let eventManager = this;
@@ -42,6 +59,10 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
42
59
  eventManager.setDefaultSettingsConfig();
43
60
 
44
61
  if (instance.plyr.isHTML5) {
62
+
63
+ if (instance.hls) {
64
+ instance.hls.init();
65
+ }
45
66
  eventManager.onReadyPlayer();
46
67
  eventManager.modal(instance);
47
68
  instance.posterManager.desktopEvents.buttons(instance);
@@ -126,6 +147,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
126
147
  //fullscreen icon
127
148
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
128
149
 
150
+ instance.videoService.removeObjectFit();
151
+
129
152
  });
130
153
 
131
154
  plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
@@ -134,6 +157,8 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
134
157
 
135
158
  //fullscreen icon
136
159
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
160
+
161
+ instance.videoService.appendObjectFit();
137
162
  })
138
163
  }
139
164
 
@@ -147,16 +172,17 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
147
172
  common.timeUpdate(event);
148
173
  if (instance.playerConfig.getPreload().isActive) {
149
174
  common.preloadPoster.timeUpdate(instance, 'event');
150
- instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
151
175
  }
176
+ LoaderService.removeSpinner(plyr.elements.container)
177
+ instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
152
178
  })
153
179
  }
154
180
 
155
181
  plyrOnPlay() {
156
182
  let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
157
183
  let plyr: Plyr = this.plyr;
158
-
159
184
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
185
+ LoaderService.removeSpinner(plyr.elements.container)
160
186
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
161
187
  })
162
188
  }
@@ -166,6 +192,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
166
192
  let plyr: Plyr = this.plyr;
167
193
 
168
194
  plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
195
+ LoaderService.removeSpinner(plyr.elements.container)
169
196
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
170
197
  })
171
198
  }
@@ -4,6 +4,7 @@ import {EventsInterfaces} from "../../global/interfaces/EventsInterfaces";
4
4
  import {LTPlayer} from "../LTPlayerType";
5
5
  import Plyr from "plyr";
6
6
  import {plyr} from "../../global/types/ModuleTypes";
7
+ import {LoaderService} from "../../services/LoaderService";
7
8
 
8
9
  export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
9
10
 
@@ -23,8 +24,24 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
23
24
  this.plyrTimeUpdate();
24
25
  this.plyrOnPlay();
25
26
  this.plyrOnPause();
27
+ this.plyrOnSeek();
26
28
  }
27
29
 
30
+ plyrOnSeek():void {
31
+ let eventManager = this;
32
+ let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
33
+ let plyr: Plyr = this.plyr;
34
+
35
+ plyr.on('seeked', function LTPlayerSeek(){
36
+ if (plyr.isEmbed) {
37
+ if (plyr.paused) {
38
+ return;
39
+ }
40
+ let playerContainer = instance.plyr.elements.container;
41
+ playerContainer.querySelector(`.lt-player__poster`).insertAdjacentHTML('afterend', LoaderService.getSpinner());
42
+ }
43
+ })
44
+ }
28
45
  plyrOnReady(): void {
29
46
  let eventManager = this;
30
47
  let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
@@ -38,6 +55,11 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
38
55
  }
39
56
 
40
57
  if (instance.plyr.isHTML5) {
58
+
59
+ if (instance.hls) {
60
+ instance.hls.init();
61
+ }
62
+
41
63
  eventManager.onReadyPlayer();
42
64
  instance.posterManager.mobileEvents.buttons(instance);
43
65
 
@@ -110,11 +132,13 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
110
132
  //fullscreen icon
111
133
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'enterfullscreen');
112
134
 
135
+ instance.videoService.removeObjectFit();
113
136
  });
114
137
 
115
138
  plyr.on('exitfullscreen', function LTPlayerDesktopExitFullScreen() {
116
139
  //fullscreen icon
117
140
  instance.playerControl.desktopEvents.fullscreenIcon(instance, 'exitfullscreen');
141
+ instance.videoService.appendObjectFit();
118
142
  })
119
143
  }
120
144
 
@@ -128,6 +152,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
128
152
  if (instance.playerConfig.getPreload().isActive) {
129
153
  eventManager.preloadPoster.timeUpdate(instance, 'event');
130
154
  }
155
+ LoaderService.removeSpinner(plyr.elements.container)
131
156
 
132
157
  eventManager.timeUpdate(event);
133
158
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
@@ -140,6 +165,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
140
165
  let plyr: Plyr = this.plyr;
141
166
 
142
167
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
168
+ LoaderService.removeSpinner(plyr.elements.container)
143
169
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
144
170
  })
145
171
  }
@@ -149,6 +175,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
149
175
  let plyr: Plyr = this.plyr;
150
176
 
151
177
  plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
178
+ LoaderService.removeSpinner(plyr.elements.container)
152
179
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
153
180
  })
154
181
  }
@@ -31,29 +31,43 @@ export class LTPlayerPoster {
31
31
 
32
32
 
33
33
  setImage() {
34
- return new Promise((resolve, reject) => {
35
- const posterImageBody: HTMLElement = this.plyr.elements.container.querySelector('.lt-player__poster__image-body');
36
-
37
- if (posterImageBody) {
38
- const imageTag = document.createElement('img');
39
- imageTag.classList.add('lt-player__poster__img--set-custom');
40
- imageTag.src = this.config.getPosterImage();
41
-
42
- imageTag.onload = function LTPlayerLoadPosterImage() {
43
- posterImageBody.append(imageTag);
44
- resolve(true);
45
- }
46
-
47
- imageTag.onerror = function LTPlayerLoadPosterImageError() {
48
- reject(true);
49
- }
34
+ const customImageSelector = this.plyr.elements.container.querySelector('.lt-player__poster__img--set-custom');
35
+ const defaultImageSelector = this.plyr.elements.container.querySelector('.lt-player__poster__img__set-default');
36
+
37
+ const checkImage = (imageUrl: string, callback: (arg0: boolean) => void) => {
38
+ let img = new Image();
39
+
40
+ img.onerror = function() {
41
+ callback(false);
42
+ };
43
+
44
+ img.onload = function() {
45
+ callback(true);
46
+ };
47
+
48
+ img.src = imageUrl;
49
+ }
50
+
51
+
52
+ const setDefault = () => {
53
+ if (defaultImageSelector) {
54
+ defaultImageSelector.classList.remove('d-none');
50
55
  }
51
- })
52
- }
56
+ }
53
57
 
54
- removeDefaultImage() {
55
- const posterImage: HTMLElement = this.plyr.elements.container.querySelector('.lt-player__poster__img');
56
- posterImage.classList.add('d-none');
57
- }
58
58
 
59
+ if (this.config.getPosterImage()) {
60
+ if (customImageSelector) {
61
+ checkImage(this.config.getPosterImage(), function (exist) {
62
+ if (!exist) {
63
+ setDefault();
64
+ } else {
65
+ customImageSelector.classList.remove('d-none');
66
+ }
67
+ })
68
+ }
69
+ } else {
70
+ setDefault()
71
+ }
72
+ }
59
73
  }
@@ -88,6 +88,7 @@ export namespace LTPlayerPosterEvents {
88
88
  button.addEventListener('click', function LTPlayerPosterButtons(event) {
89
89
  event.preventDefault();
90
90
  instance.playerControl.desktopEvents.titleLineBreak(instance);
91
+ instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
91
92
  common.poster.reset(instance);
92
93
  })
93
94
  });
@@ -109,8 +110,10 @@ export namespace LTPlayerPosterEvents {
109
110
 
110
111
  if (mobileEvent) {
111
112
  mobileEvent.on('singletap', function LTPlayerMobilePosterButtons() {
113
+
112
114
  instance.playerControl.desktopEvents.titleLineBreak(instance);
113
115
 
116
+ instance.playerControl.mobileEvents.playPauseIcon(instance, 'timeupdate');
114
117
  common.poster.reset(instance);
115
118
 
116
119
  playerContainer.classList.remove('plyr__poster-enabled');
@@ -125,13 +128,13 @@ export namespace LTPlayerPosterEvents {
125
128
  * Remove Onload Poster from player
126
129
  */
127
130
  onload(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
128
- const playerElementContainer = instance.playerConfig.getPlayerElementContainer();
129
- const playerOnloadPosterSelector = playerElementContainer.parentElement.querySelector('.lt-player-onload-poster');
130
-
131
- if (playerOnloadPosterSelector) {
132
- playerElementContainer.classList.remove('d-none');
133
- playerElementContainer.parentElement.querySelector('.lt-player-onload-poster').remove();
134
- }
131
+ // const playerElementContainer = instance.playerConfig.getPlayerElementContainer();
132
+ // const playerOnloadPosterSelector = playerElementContainer.parentElement.querySelector('.lt-player-onload-poster');
133
+ //
134
+ // if (playerOnloadPosterSelector) {
135
+ // // playerElementContainer.classList.remove('d-none');
136
+ // playerElementContainer.parentElement.querySelector('.lt-player-onload-poster').remove();
137
+ // }
135
138
  }
136
139
 
137
140
  showControls(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
@@ -23,23 +23,16 @@ export class LTPlayerPosterManager {
23
23
  }
24
24
 
25
25
  init(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
26
+
26
27
  this.instance = instance;
27
28
  this.playerConfig = instance.playerConfig;
28
29
  this.templateService = instance.templateService;
29
30
  this.iconService = instance.iconService;
30
31
 
31
32
  this.poster = new LTPlayerPoster(this.instance.plyr, this.templateService, this.playerConfig, this.iconService);
32
- this.poster.setTemplate();
33
33
 
34
- if (this.playerConfig.getPosterImage()) {
35
- this.poster.setImage().then(
36
- result => {
37
- this.poster.removeDefaultImage();
38
- if (this.playerConfig.getPreload()) {
39
- this.initPreload();
40
- }
41
- });
42
- }
34
+ this.poster.setTemplate();
35
+ this.poster.setImage();
43
36
  if (this.playerConfig.getPreload()) {
44
37
  this.initPreload();
45
38
  }
@@ -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,99 +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 {
5
+ export class mobile {
7
6
 
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
- if (instance.plyr.playing) {
13
- this.isPlaying = true;
14
- instance.plyr.pause();
15
- } else {
16
- this.isPlaying = false;
17
- }
18
- }
7
+ manager : LTPlayerShareManager
19
8
 
20
- inactiveModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
21
- selectors.shareContainer.classList.add('share-inactive');
22
- selectors.shareContainer.classList.remove('share-active');
23
- if (this.isPlaying) {
24
- instance.plyr.play();
25
- }
9
+ constructor(manager: LTPlayerShareManager) {
10
+ this.manager = manager;
26
11
  }
27
12
 
28
- getSelector(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
29
- return {
30
- buttons : [
31
- instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
32
- instance.plyr.elements.controls.querySelector('.lt-player-share'),
33
- ],
34
- shareContainer : instance.plyr.elements.container.querySelector('.share-controller-wrapper')
35
- };
36
- }
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
+ ];
37
18
 
38
- copyButtons(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
39
- return instance.plyr.elements.container.querySelectorAll('.share-controller-link');
40
- }
41
- }
42
- export class mobile {
43
- common : LTPlayerShareEvents.common
44
- constructor() {
45
- this.common = new common();
46
- }
19
+ const instance = this;
47
20
 
48
- init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
49
-
50
- const common = this.common;
51
- common.getSelector(instance).buttons.forEach(button => {
21
+ buttons.forEach(button => {
52
22
  if (button) {
53
- button.addEventListener('click', () => {
54
- common.activeModal(instance, this.common.getSelector(instance));
55
- })
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
+ }
56
30
  }
57
31
  })
58
-
59
- if (common.getSelector(instance).shareContainer) {
60
- common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
61
- event.preventDefault();
62
- if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
63
- let target = event.target as HTMLElement;
64
- if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
65
- common.inactiveModal(instance, common.getSelector(instance));
66
- }
67
- }
68
- })
69
- }
70
32
  }
71
33
  }
72
34
 
73
35
  export class desktop {
74
- common : LTPlayerShareEvents.common
75
- constructor() {
76
- this.common = new common();
36
+ manager : LTPlayerShareManager
37
+ constructor(manager: LTPlayerShareManager) {
38
+ this.manager = manager;
77
39
  }
78
40
 
79
- init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
80
-
81
- const common = this.common;
82
- common.getSelector(instance).buttons.forEach(button => {
41
+ init() {
42
+ const manager = this.manager;
43
+ manager.desktop.getSelector().buttons.forEach(button => {
83
44
  if (button) {
84
45
  button.addEventListener('click', () => {
85
- common.activeModal(instance, this.common.getSelector(instance));
46
+ manager.desktop.activeModal();
86
47
  })
87
48
  }
88
49
  })
89
50
 
90
- if (common.getSelector(instance).shareContainer) {
91
- 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) {
92
53
  event.preventDefault();
93
- if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
54
+ if ( manager.desktop.getSelector().shareContainer.classList.contains('share-active')) {
94
55
  let target = event.target as HTMLElement;
95
56
  if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
96
- common.inactiveModal(instance, common.getSelector(instance));
57
+ manager.desktop.inactiveModal();
97
58
  }
98
59
  }
99
60
  })