@latest-thinking/lt-player 1.0.7-c → 1.0.7-e

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.
@@ -1,8 +1,10 @@
1
1
  import {LTPLayerAddInfo} from "./LTPlayerAddInfoManager";
2
2
  import {additionalInformation} from "../../global/types/ModuleTypes";
3
+ import {LTPlayer} from "../LTPlayerType";
4
+ import {LoaderService} from "../../services/LoaderService";
3
5
 
4
6
  export class LTPlayerAddInfoDesktop {
5
- set(controller: LTPLayerAddInfo.Controller) {
7
+ set(controller: LTPLayerAddInfo.Controller, type: string) {
6
8
 
7
9
  const playerContainer = controller.plyr.elements.container;
8
10
  const playerControlsContainer = controller.plyr.elements.controls;
@@ -10,7 +12,6 @@ export class LTPlayerAddInfoDesktop {
10
12
  let additionalInfoBodyIn: Element = playerControlsContainer.querySelector('.lt-player__additional-info');
11
13
  let instance = controller;
12
14
 
13
-
14
15
  const getInfoButtons = (selector: Element): NodeList => {
15
16
 
16
17
  if (!selector) {
@@ -24,7 +25,7 @@ export class LTPlayerAddInfoDesktop {
24
25
  const infoButtonsOut: NodeList = getInfoButtons(additionalInfoBodyOut);
25
26
  const infoButtonsIn: NodeList = getInfoButtons(additionalInfoBodyIn);
26
27
 
27
- if (!infoButtonsOut) {
28
+ if (type == 'in') {
28
29
  buttons = infoButtonsIn;
29
30
  } else {
30
31
  buttons = infoButtonsOut;
@@ -34,24 +35,24 @@ export class LTPlayerAddInfoDesktop {
34
35
  return
35
36
  }
36
37
 
37
- const createInformationModal = (info: additionalInformation, key: string) => {
38
+ const createInformationModal = (info: additionalInformation, key: string) => {
38
39
 
39
40
  let modalTemplate = null;
40
41
 
41
42
  if (typeof info === 'object') {
42
43
  modalTemplate = controller.templateService.getAdditionalInfo({
43
- desktop : true,
44
- modal : true,
45
- id : `${key}-${controller.playerInstance.playerConfig.getPlayerId()}`,
46
- object_data : true,
47
- [key] : info
44
+ desktop: true,
45
+ modal: true,
46
+ id: `${key}-${controller.playerInstance.playerConfig.getPlayerId()}`,
47
+ object_data: true,
48
+ [key]: info
48
49
  })
49
50
  } else {
50
51
  modalTemplate = controller.templateService.getAdditionalInfo({
51
- desktop : true,
52
- modal : true,
53
- id : `${key}-${controller.playerInstance.playerConfig.getPlayerId()}`,
54
- data : info
52
+ desktop: true,
53
+ modal: true,
54
+ id: `${key}-${controller.playerInstance.playerConfig.getPlayerId()}`,
55
+ data: info
55
56
  })
56
57
  }
57
58
 
@@ -77,12 +78,18 @@ export class LTPlayerAddInfoDesktop {
77
78
  modal.classList.add('player-lt__show-modal');
78
79
  }
79
80
 
80
- window.Player.players.forEach( item => {item.plyr.pause()})
81
+ window.Player.players.forEach(item => {
82
+ if (item.plyr.playing) {
83
+ instance.playerInstance.pausedPlayer = item.plyr;
84
+ item.plyr.pause();
85
+ return;
86
+ }
87
+ })
81
88
  })
82
89
  })
83
90
  }
84
91
 
85
- windowDesktopEvents(event: MouseEvent) {
92
+ windowDesktopEvents(event: MouseEvent, instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
86
93
  const modals = document.querySelectorAll('.player-lt__modal');
87
94
  if (modals.length !== 0) {
88
95
  modals.forEach(modal => {
@@ -91,6 +98,25 @@ export class LTPlayerAddInfoDesktop {
91
98
  if (target.classList.contains('player-lt__show-modal') || target.classList.contains('player-lt__close-button')) {
92
99
  modal.classList.remove('player-lt__show-modal');
93
100
  document.querySelectorAll(".player-lt__modal").forEach(el => el.remove());
101
+
102
+ window.Player.players.forEach(item => {
103
+ if (item.pausedPlayer !== undefined) {
104
+ if (item.pausedPlayer.isEmbed) {
105
+ item.pausedPlayer.embed.play().then(function () {
106
+ return;
107
+ }).catch(function () {
108
+ // an error occurred
109
+ });
110
+ }
111
+
112
+ if (item.pausedPlayer.isHTML5) {
113
+
114
+ item.pausedPlayer.play();
115
+ return;
116
+ }
117
+ return;
118
+ }
119
+ })
94
120
  }
95
121
  }
96
122
  })
@@ -64,7 +64,13 @@ export class LTPlayerAddInfoMobile {
64
64
 
65
65
  playerControlsContainer.classList.add('player-lt__modal__mobile-show-modal');
66
66
 
67
- window.Player.players.forEach( item => {item.plyr.pause()});
67
+ window.Player.players.forEach(item => {
68
+ if (item.plyr.playing) {
69
+ instance.playerInstance.pausedPlayer = item.plyr;
70
+ item.plyr.pause();
71
+ return;
72
+ }
73
+ })
68
74
 
69
75
  __this.dragCloseModal(controller);
70
76
 
@@ -89,9 +95,24 @@ export class LTPlayerAddInfoMobile {
89
95
  if (mobileEvent) {
90
96
  mobileEvent.on('pan', function LTPlayerMobileDragDownModal() {
91
97
  closeModal();
92
- if (controller.plyr.paused) {
93
- controller.plyr.play();
94
- }
98
+ window.Player.players.forEach(item => {
99
+ if (item.pausedPlayer !== undefined) {
100
+ if (item.pausedPlayer.isEmbed) {
101
+ item.pausedPlayer.embed.play().then(function () {
102
+ return;
103
+ }).catch(function () {
104
+ // an error occurred
105
+ });
106
+ }
107
+
108
+ if (item.pausedPlayer.isHTML5) {
109
+
110
+ item.pausedPlayer.play();
111
+ return;
112
+ }
113
+ return;
114
+ }
115
+ })
95
116
  })
96
117
  }
97
118
  }
@@ -100,9 +121,24 @@ export class LTPlayerAddInfoMobile {
100
121
  if (mobileEvent) {
101
122
  mobileEvent.on('singletap', function LTPlayerMobileCloseModal() {
102
123
  closeModal();
103
- if (controller.plyr.paused) {
104
- controller.plyr.play();
105
- }
124
+ window.Player.players.forEach(item => {
125
+ if (item.pausedPlayer !== undefined) {
126
+ if (item.pausedPlayer.isEmbed) {
127
+ item.pausedPlayer.embed.play().then(function () {
128
+ return;
129
+ }).catch(function () {
130
+ // an error occurred
131
+ });
132
+ }
133
+
134
+ if (item.pausedPlayer.isHTML5) {
135
+
136
+ item.pausedPlayer.play();
137
+ return;
138
+ }
139
+ return;
140
+ }
141
+ })
106
142
  })
107
143
  }
108
144
  }
@@ -169,7 +169,7 @@ export namespace LTPlayerConfigProcessor {
169
169
  controls: false,
170
170
  active: false,
171
171
  gesture: 'media',
172
- transparent: false,
172
+ transparent: true,
173
173
  speed: true,
174
174
  portrait: true,
175
175
  keyboard: false,
@@ -103,7 +103,7 @@ export class LTPlayerDesktop extends LTPlayerCommon implements EventsInterfaces
103
103
  window.addEventListener('click', function LTPLayerWindowClick(event: MouseEvent) {
104
104
 
105
105
  if (instance.additionalInfoService) {
106
- instance.additionalInfoService.desktopEvents.windowDesktopEvents(event);
106
+ instance.additionalInfoService.desktopEvents.windowDesktopEvents(event, instance);
107
107
  }
108
108
  LTPlayerSettingsControlsManager.closeSettingsEvent(event);
109
109
  })
@@ -2,6 +2,7 @@ import {TemplateService} from "../../services/TemplateService";
2
2
  import {LTPlayerConfig} from "../config/LTPlayerConfig";
3
3
  import {IconsService} from "../../services/IconsService";
4
4
  import Plyr from "plyr";
5
+ import {Helper} from "../../services/Helper";
5
6
 
6
7
  export class LTPlayerPoster {
7
8
  custom_selector: string = 'lt-player__poster';
@@ -22,7 +23,11 @@ export class LTPlayerPoster {
22
23
 
23
24
  const logo: string = this.iconService.getLogo();
24
25
 
25
- const posterTemplate = this.templateService.getPoster({config:this.config, logoBig: logo, isShare : !!(this.config.isShareData())});
26
+ const playerTypeString = Helper.getPlayerStringType(this.config.getPlayerType());
27
+
28
+ let templateData = {[playerTypeString]: true, config:this.config, logoBig: logo, isShare : !!(this.config.isShareData())}
29
+
30
+ const posterTemplate = this.templateService.getPoster(templateData);
26
31
 
27
32
  const container = this.plyr.elements.wrapper;
28
33
 
@@ -91,9 +91,17 @@ export namespace LTPlayerPosterEvents {
91
91
  if (posterBody) {
92
92
  posterBody.addEventListener('click', function LTPlayerPosterButtons(event) {
93
93
  event.preventDefault();
94
+
95
+ if((event.target as HTMLInputElement).classList.contains('poster-lt-player-share') ||
96
+ (event.target as HTMLInputElement).classList.contains('filter')
97
+ ) {
98
+ return;
99
+ }
100
+
94
101
  instance.playerControl.desktopEvents.titleLineBreak(instance);
95
102
  instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
96
103
  common.poster.reset(instance);
104
+
97
105
  })
98
106
  }
99
107
  }
@@ -112,4 +112,31 @@ export class Helper {
112
112
  return 'portrait'
113
113
  }
114
114
  }
115
+
116
+ static getPlayerStringType(type: string|number)
117
+ {
118
+ let response = null;
119
+
120
+ switch (type) {
121
+ case "1":
122
+ response = 'portrait'
123
+ break
124
+ case "2":
125
+ response = 'landscape'
126
+ break
127
+ case 1:
128
+ response = 'portrait'
129
+ break
130
+ case 2:
131
+ response = 'landscape'
132
+ break
133
+ case 'portrait':
134
+ response = 'portrait'
135
+ break
136
+ case 'landscape':
137
+ response = 'landscape'
138
+ }
139
+
140
+ return response;
141
+ }
115
142
  }
@@ -5,6 +5,7 @@ import {LTPLayerAddInfoResizeManager} from "../components/addInfo/LTPLayerAddInf
5
5
  import {LTPLayerAddInfo} from "../components/addInfo/LTPlayerAddInfoManager";
6
6
  import {LTPlayerRotateDeviceService} from "./LTPlayerRotateDeviceService";
7
7
  import {LTPlayerAddInfoDesktop} from "../components/addInfo/LTPlayerAddInfoDesktop";
8
+ import {Helper} from "./Helper";
8
9
 
9
10
  /**
10
11
  * Window service (set width and height)
@@ -138,8 +139,38 @@ export class ResizeService {
138
139
 
139
140
  protected setAddInfoByDimensions(containerWidth: number, buttonsTemplate:string, deskEvent: LTPlayerAddInfoDesktop, controller: LTPLayerAddInfo.Controller) {
140
141
 
142
+
141
143
  const createAddInfoButtonsOutSide = () => {
144
+ const setButtonsByVideoType = () => {
145
+ const plyr: Plyr = this.player;
146
+
147
+ if (plyr.embed !== undefined) {
148
+ deskEvent.set(controller, 'out');
149
+ return;
150
+ }
151
+
152
+
153
+ if (this.playerInstance.playerConfig.getVideoType() === 'embedded') {
154
+ plyr.on('ready', function () {
155
+ plyr.embed.ready().then (function () {
156
+ deskEvent.set(controller, 'out');
157
+ })
158
+ })
159
+ return;
160
+ }
161
+
162
+ if (this.playerInstance.playerConfig.getVideoType() === 'video'){
163
+ plyr.on('ready', function () {
164
+ deskEvent.set(controller, 'out');
165
+ return;
166
+ })
167
+ deskEvent.set(controller, 'out');
168
+ return;
169
+ }
170
+
142
171
 
172
+
173
+ }
143
174
  let addInfoContainer = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
144
175
  if (addInfoContainer) {
145
176
  addInfoContainer.remove();
@@ -148,12 +179,12 @@ export class ResizeService {
148
179
  this.playerInstance.plyr.elements.container.insertAdjacentHTML("afterend", buttonsTemplate);
149
180
  let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
150
181
  inserted.classList.add('lt-player__additional-info__is_set_out-side');
151
- this.playerInstance.plyr.on('ready', () => {
152
- deskEvent.set(controller);
153
- })
182
+
183
+ setButtonsByVideoType();
154
184
  }
155
185
 
156
186
  const createAddInfoButtonsInSide = () => {
187
+
157
188
  let addInfoContainer = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
158
189
  if (addInfoContainer) {
159
190
  addInfoContainer.remove();
@@ -166,7 +197,7 @@ export class ResizeService {
166
197
  let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
167
198
  inserted.classList.add('lt-player__additional-info__is_set_in-side');
168
199
 
169
- deskEvent.set(controller);
200
+ deskEvent.set(controller, 'in');
170
201
  } else {
171
202
  this.playerInstance.plyr.on('ready', () => {
172
203
 
@@ -176,43 +207,39 @@ export class ResizeService {
176
207
  let inserted = this.playerInstance.playerConfig.getPlayerElementContainer().querySelector('.lt-player__additional-info');
177
208
  inserted.classList.add('lt-player__additional-info__is_set_in-side');
178
209
 
179
- deskEvent.set(controller);
210
+ deskEvent.set(controller, 'in');
180
211
  })
181
212
  }
182
-
183
-
184
-
185
213
  }
186
214
 
187
- if (containerWidth >= 380) {
188
-
189
- if (this.addInfoInSide && containerWidth + 70 <= 380) {
190
- return;
191
- }
215
+ if (containerWidth >= 380) {
192
216
 
193
- if (this.addInfoOutSide) {
194
- return;
195
- }
217
+ if (this.addInfoInSide && (containerWidth + 70 <= 380)) {
218
+ return;
219
+ }
196
220
 
197
- this.addInfoOutSide = true;
198
- this.addInfoInSide = false;
221
+ if (this.addInfoOutSide) {
222
+ return;
223
+ }
199
224
 
200
- createAddInfoButtonsOutSide();
201
- } else {
225
+ this.addInfoOutSide = true;
226
+ this.addInfoInSide = false;
202
227
 
203
- if (this.addInfoOutSide && containerWidth + 70 >= 380) {
204
- return;
205
- }
228
+ createAddInfoButtonsOutSide();
229
+ } else {
206
230
 
207
- if (this.addInfoInSide) {
208
- return;
209
- }
231
+ if (this.addInfoOutSide && (containerWidth + 70 >= 380)) {
232
+ return;
233
+ }
210
234
 
211
- this.addInfoInSide = true;
212
- this.addInfoOutSide = false;
213
- createAddInfoButtonsInSide();
214
- }
235
+ if (this.addInfoInSide) {
236
+ return;
237
+ }
215
238
 
239
+ this.addInfoInSide = true;
240
+ this.addInfoOutSide = false;
241
+ createAddInfoButtonsInSide();
242
+ }
216
243
  }
217
244
 
218
245
  protected setDimensions(containerWidth: number, containerHeight: number, defaultData: defaultType) {
@@ -1,32 +1,64 @@
1
+ {{#portrait}}
1
2
  <div class="lt-player__poster">
2
- <div class="lt-player__poster__image-body lt-player__poster__background__grey" >
3
+ <div class="lt-player__poster__image-body">
4
+ <div class="lt-player__poster--background"></div>
5
+ <img class="lt-player__poster__img lt-player__poster__img__set-default d-none" alt="" src="{{logoBig}}">
6
+ <img class="lt-player__poster__img--set-custom d-none" alt="" src="{{config.configData.posterImage}}">
7
+ </div>
8
+ <div class="lt-player__poster__body">
9
+ <div class="content">
10
+ <div class="content__header">
11
+ <img src="{{config.logo}}" alt="logo">
12
+ </div>
13
+ <div class="content__body">
14
+ <div class="poster-title">{{config.configData.videoParagraph}}</div>
15
+ <div class="poster-paragraph">{{config.configData.videoTitle}}</div>
16
+ </div>
17
+ <div class="content__footer">
18
+ <div class="poster-buttons">
19
+ <button class="poster-button-play">
20
+ <img src="{{config.play}}" alt="" class="icon--not-pressed" role="presentation">
21
+ </button>
22
+ <button class="poster-button-watch-now">
23
+ Watch now
24
+ </button>
25
+ {{#isShare}}
26
+ <button class="poster-lt-player-share" type="button">
27
+ <img class="filter" src="{{config.share}}" alt="" role="presentation">
28
+ </button>
29
+ {{/isShare}}
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ {{/portrait}}
36
+ {{#landscape}}
37
+ <div class="lt-player__poster">
38
+ <div class="lt-player__poster__image-body">
39
+ <div class="lt-player__poster--background"></div>
3
40
  <img class="lt-player__poster__img lt-player__poster__img__set-default d-none" alt="" src="{{logoBig}}">
4
41
  <img class="lt-player__poster__img--set-custom d-none" alt="" src="{{config.configData.posterImage}}">
5
42
  </div>
6
43
  <div class="lt-player__poster__body">
7
44
  <div class="content">
8
45
  <div class="content__header">
9
- <div class="poster-logo-header">
10
- <div class="logo">
11
- <img src="{{config.logo}}" alt="">
12
- </div>
13
- </div>
46
+ <div class="poster-title">{{config.configData.videoParagraph}}</div>
14
47
  </div>
15
48
  <div class="content__body">
16
- <h4 class="poster-title">{{config.configData.videoParagraph}}</h4>
17
- <p class="poster-paragraph">{{config.configData.videoTitle}}</p>
49
+ <div class="poster-paragraph">{{config.configData.videoTitle}}</div>
18
50
  </div>
19
51
  <div class="content__footer">
20
52
  <div class="poster-buttons">
21
53
  <button class="poster-button-play">
22
- <img src="{{config.play}}" alt="" class="icon--not-pressed" role="presentation" >
54
+ <img src="{{config.play}}" alt="" class="icon--not-pressed" role="presentation">
23
55
  </button>
24
56
  <button class="poster-button-watch-now">
25
57
  Watch now
26
58
  </button>
27
59
  {{#isShare}}
28
60
  <button class="poster-lt-player-share" type="button">
29
- <img class="filter" src="{{config.share}}" alt="" role="presentation" >
61
+ <img class="filter" src="{{config.share}}" alt="" role="presentation">
30
62
  </button>
31
63
  {{/isShare}}
32
64
  </div>
@@ -34,3 +66,4 @@
34
66
  </div>
35
67
  </div>
36
68
  </div>
69
+ {{/landscape}}
@@ -26,8 +26,8 @@
26
26
  <a class="button_embed lt-player-mobile-share">
27
27
  <span class="share-icon__icon lt-player-mobile-share">
28
28
  <svg class="lt-player-mobile-share" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
29
- <path d="M8.00028 17.0003C7.74428 17.0003 7.48825 16.9023 7.29325 16.7073L3.29325 12.7073C2.90225 12.3163 2.90225 11.6843 3.29325 11.2933L7.29325 7.29325C7.68425 6.90225 8.31631 6.90225 8.70731 7.29325C9.09831 7.68425 9.09831 8.31631 8.70731 8.70731L5.41434 12.0003L8.70731 15.2933C9.09831 15.6843 9.09831 16.3163 8.70731 16.7073C8.51231 16.9023 8.25628 17.0003 8.00028 17.0003Z" fill="#27282A"/>
30
- <path d="M16.0007 17.0003C16.2567 17.0003 16.5127 16.9023 16.7077 16.7073L20.7077 12.7073C21.0987 12.3163 21.0987 11.6843 20.7077 11.2933L16.7077 7.29325C16.3167 6.90225 15.6847 6.90225 15.2937 7.29325C14.9027 7.68425 14.9027 8.31631 15.2937 8.70731L18.5866 12.0003L15.2937 15.2933C14.9027 15.6843 14.9027 16.3163 15.2937 16.7073C15.4887 16.9023 15.7447 17.0003 16.0007 17.0003Z" fill="#27282A"/>
29
+ <path d="M8.00028 17.0003C7.74428 17.0003 7.48825 16.9023 7.29325 16.7073L3.29325 12.7073C2.90225 12.3163 2.90225 11.6843 3.29325 11.2933L7.29325 7.29325C7.68425 6.90225 8.31631 6.90225 8.70731 7.29325C9.09831 7.68425 9.09831 8.31631 8.70731 8.70731L5.41434 12.0003L8.70731 15.2933C9.09831 15.6843 9.09831 16.3163 8.70731 16.7073C8.51231 16.9023 8.25628 17.0003 8.00028 17.0003Z" fill="#ffffff"/>
30
+ <path d="M16.0007 17.0003C16.2567 17.0003 16.5127 16.9023 16.7077 16.7073L20.7077 12.7073C21.0987 12.3163 21.0987 11.6843 20.7077 11.2933L16.7077 7.29325C16.3167 6.90225 15.6847 6.90225 15.2937 7.29325C14.9027 7.68425 14.9027 8.31631 15.2937 8.70731L18.5866 12.0003L15.2937 15.2933C14.9027 15.6843 14.9027 16.3163 15.2937 16.7073C15.4887 16.9023 15.7447 17.0003 16.0007 17.0003Z" fill="#ffffff"/>
31
31
  </svg>
32
32
  </span>
33
33
  </a>