@latest-thinking/lt-player 1.0.5 → 1.0.6

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 (48) 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 +123 -100
  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 -8
  24. package/src/components/LTPlayerType.ts +84 -34
  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 +29 -0
  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 +2 -5
  35. package/src/components/events/LTPlayerDesktop.ts +25 -2
  36. package/src/components/events/LTPlayerMobile.ts +25 -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/LTPlayerShareEvents.ts +66 -3
  41. package/src/global/controllers/LTPlayerController.ts +2 -0
  42. package/src/services/Helper.ts +24 -0
  43. package/src/services/ResizeService.ts +33 -10
  44. package/src/views/additionalInfo.handlebars +58 -0
  45. package/src/views/background.handlebars +1 -1
  46. package/src/views/controls.handlebars +6 -6
  47. package/src/views/poster.handlebars +2 -1
  48. package/src/views/share.handlebars +69 -69
@@ -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,19 +106,16 @@ export class LTPlayerCommon {
106
106
  }
107
107
  });
108
108
  }
109
-
110
109
  onReadyPlayer() {
111
110
 
112
111
  //set share button
113
112
  this.player.share.events.desktop.init(this.player);
114
113
 
115
- this.player.windowService.init(this.player);
114
+ // this.player.windowService.init(this.player);
116
115
  //set poster
117
116
  this.player.posterManager.mobileEvents.onload(this.player);
118
117
 
119
- if (this.player.additionalInfoService) {
120
- this.player.additionalInfoService.init(this.player, this.player.playerId, this.player.iconService, this.player.templateService);
121
- }
118
+
122
119
 
123
120
  if (this.player.playerConfig.isAutoPlay()) {
124
121
  let playerContainer = this.player.plyr.elements.container;
@@ -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);
@@ -147,16 +168,17 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
147
168
  common.timeUpdate(event);
148
169
  if (instance.playerConfig.getPreload().isActive) {
149
170
  common.preloadPoster.timeUpdate(instance, 'event');
150
- instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
151
171
  }
172
+ LoaderService.removeSpinner(plyr.elements.container)
173
+ instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
152
174
  })
153
175
  }
154
176
 
155
177
  plyrOnPlay() {
156
178
  let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
157
179
  let plyr: Plyr = this.plyr;
158
-
159
180
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
181
+ LoaderService.removeSpinner(plyr.elements.container)
160
182
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
161
183
  })
162
184
  }
@@ -166,6 +188,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
166
188
  let plyr: Plyr = this.plyr;
167
189
 
168
190
  plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
191
+ LoaderService.removeSpinner(plyr.elements.container)
169
192
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
170
193
  })
171
194
  }
@@ -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
 
@@ -128,6 +150,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
128
150
  if (instance.playerConfig.getPreload().isActive) {
129
151
  eventManager.preloadPoster.timeUpdate(instance, 'event');
130
152
  }
153
+ LoaderService.removeSpinner(plyr.elements.container)
131
154
 
132
155
  eventManager.timeUpdate(event);
133
156
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
@@ -140,6 +163,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
140
163
  let plyr: Plyr = this.plyr;
141
164
 
142
165
  plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
166
+ LoaderService.removeSpinner(plyr.elements.container)
143
167
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
144
168
  })
145
169
  }
@@ -149,6 +173,7 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
149
173
  let plyr: Plyr = this.plyr;
150
174
 
151
175
  plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
176
+ LoaderService.removeSpinner(plyr.elements.container)
152
177
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
153
178
  })
154
179
  }
@@ -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
  }
@@ -9,6 +9,19 @@ export namespace LTPlayerShareEvents {
9
9
  activeModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
10
10
  selectors.shareContainer.classList.remove('share-inactive');
11
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)
12
25
  if (instance.plyr.playing) {
13
26
  this.isPlaying = true;
14
27
  instance.plyr.pause();
@@ -17,6 +30,44 @@ export namespace LTPlayerShareEvents {
17
30
  }
18
31
  }
19
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
+
20
71
  inactiveModal(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
21
72
  selectors.shareContainer.classList.add('share-inactive');
22
73
  selectors.shareContainer.classList.remove('share-active');
@@ -31,13 +82,25 @@ export namespace LTPlayerShareEvents {
31
82
  instance.plyr.elements.container.querySelector('.poster-lt-player-share'),
32
83
  instance.plyr.elements.controls.querySelector('.lt-player-share'),
33
84
  ],
34
- shareContainer : instance.plyr.elements.container.querySelector('.share-controller-wrapper')
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')
35
89
  };
36
90
  }
37
91
 
38
- copyButtons(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
39
- return instance.plyr.elements.container.querySelectorAll('.share-controller-link');
92
+ setCopyButtonsEvents(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType, selectors: defaultType) {
93
+
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
+ })
99
+
100
+ })
101
+ }
40
102
  }
103
+
41
104
  }
42
105
  export class mobile {
43
106
  common : LTPlayerShareEvents.common
@@ -11,6 +11,7 @@ import {LTPlayerDevMethode} from "../../components/LTPlayerDevMethode";
11
11
  import {LTPlayerEventsManager} from "../../components/LTPlayerEventsManager";
12
12
  import {LTPlayerPosterManager} from "../../components/poster/LTPlayerPosterManager";
13
13
  import {LTPlayerShare} from "../../components/share/LTPlayerShare";
14
+ import {LTPlayerHls} from "../../components/LTPlayerHls";
14
15
 
15
16
  /**
16
17
  * Default Player type Service
@@ -32,6 +33,7 @@ export class LTPlayerController {
32
33
  eventInstance: LTPlayerEventsManager
33
34
  posterManager : LTPlayerPosterManager
34
35
  share : LTPlayerShare
36
+ hls : LTPlayerHls
35
37
  /**
36
38
  * Base player type service
37
39
  */
@@ -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 : "lg",
59
- 800 : "md",
60
- 533 : "sm",
61
- 266 : "xs"
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
- deskEvent.set(controller);
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
- let controlsInfoBody = this.playerInstance.plyr.elements.controls.querySelector('.content__body');
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">&times;</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">
@@ -1,4 +1,4 @@
1
- <div class="lt-player-mini-player-background">
1
+ <div class="lt-player-mini-player-background {{classObserve}}">
2
2
  <div class="logo">
3
3
  <img src="{{logo}}" alt="">
4
4
  </div>
@@ -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">