@latest-thinking/lt-player 1.0.3-c → 1.0.4-c

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 (35) hide show
  1. package/dist/css/lt-player-main.css +5 -0
  2. package/dist/css/lt-player-main.css.map +1 -0
  3. package/dist/js/lt-player-main.js +3 -0
  4. package/dist/js/lt-player-main.js.map +1 -0
  5. package/package.json +5 -5
  6. package/src/assets/sass/abstracts/_mixins.scss +7 -0
  7. package/src/assets/sass/core/_fonts.scss +5 -5
  8. package/src/assets/sass/sections/_share.scss +3 -4
  9. package/src/assets/sass/sections/_subtitles.scss +6 -0
  10. package/src/assets/sass/sections/controllers/_botom.scss +14 -4
  11. package/src/assets/sass/sections/controllers/_notification-rewind-forward.scss +60 -15
  12. package/src/assets/sass/sections/controllers/_top.scss +18 -1
  13. package/src/components/LTPlayerManager.ts +2 -6
  14. package/src/components/LTPlayerType.ts +9 -3
  15. package/src/components/controls/LTPlayerControlsEvents.ts +25 -164
  16. package/src/components/events/LTPlayerCommon.ts +4 -1
  17. package/src/components/events/LTPlayerDesktop.ts +20 -5
  18. package/src/components/events/LTPlayerMobile.ts +21 -11
  19. package/src/components/poster/LTPlayerPoster.ts +4 -13
  20. package/src/components/share/LTPlayerShare.ts +40 -0
  21. package/src/components/share/LTPlayerShareEvents.ts +103 -0
  22. package/src/global/controllers/LTPlayerController.ts +3 -1
  23. package/src/global/types/ModuleTypes.d.ts +6 -0
  24. package/src/index.ts +1 -3
  25. package/src/services/IconsService.ts +2 -1
  26. package/src/views/controls.handlebars +33 -12
  27. package/src/views/poster.handlebars +5 -7
  28. package/dist/css/lt-player-app.css +0 -5
  29. package/dist/css/lt-player-app.css.map +0 -1
  30. package/dist/js/lt-player-app.js +0 -3
  31. package/dist/js/lt-player-app.js.map +0 -1
  32. package/webpack.common.js +0 -49
  33. package/webpack.config.dev.js +0 -50
  34. package/webpack.config.prod.js +0 -43
  35. /package/dist/js/{lt-player-app.js.LICENSE.txt → lt-player-main.js.LICENSE.txt} +0 -0
@@ -21,6 +21,8 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
21
21
  this.plyrEndVideo();
22
22
  this.plyrFullScreen();
23
23
  this.plyrTimeUpdate();
24
+ this.plyrOnPlay();
25
+ this.plyrOnPause();
24
26
  }
25
27
 
26
28
  plyrOnReady(): void {
@@ -46,20 +48,15 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
46
48
  }
47
49
  }
48
50
 
49
- eventManager.setDefaultSettingsConfig(true);
51
+ eventManager.setDefaultSettingsConfig();
50
52
 
51
53
  instance.posterManager.mobileEvents.showControls(instance);
52
54
 
53
-
54
55
  instance.playerControl.mobileEvents.controlsTimeShow(instance);
55
56
 
56
- // //set fullscreen button
57
- // instance.playerControl.mobileEvents.fullScreenButtons(instance);
58
-
59
57
  //set play/pause icon
60
58
  instance.playerControl.mobileEvents.playPauseIcon(instance, 'ready');
61
59
 
62
-
63
60
  //set rewind/forward
64
61
  instance.playerControl.mobileEvents.backwardForward(instance);
65
62
  instance.playerControl.mobileEvents.backwardForwardSeconds(instance);
@@ -67,10 +64,6 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
67
64
  //set volume controller
68
65
  instance.playerControl.mobileEvents.volume(instance);
69
66
 
70
-
71
- //set volume controller
72
- instance.playerControl.mobileEvents.share(instance);
73
-
74
67
  //set settings controller
75
68
  instance.playerControl.settingsControlsManager.init(instance);
76
69
 
@@ -137,12 +130,29 @@ export class LTPlayerMobile extends LTPlayerCommon implements EventsInterfaces {
137
130
  }
138
131
 
139
132
  eventManager.timeUpdate(event);
140
- instance.playerControl.mobileEvents.playPauseIcon(instance, 'timeupdate');
141
133
 
142
134
  instance.playerControl.mobileEvents.removePlyrControlsClass(instance);
143
135
  })
144
136
  }
145
137
 
138
+ plyrOnPlay() {
139
+ let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
140
+ let plyr: Plyr = this.plyr;
141
+
142
+ plyr.on('play', function LTPlayerDesktopTimeUpdate(event) {
143
+ instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
144
+ })
145
+ }
146
+
147
+ plyrOnPause() {
148
+ let instance: LTPlayer.PortraitType | LTPlayer.LandscapeType = this.player;
149
+ let plyr: Plyr = this.plyr;
150
+
151
+ plyr.on('pause', function LTPlayerDesktopTimeUpdate(event) {
152
+ instance.playerControl.desktopEvents.playPauseIcon(instance, 'timeupdate');
153
+ })
154
+ }
155
+
146
156
  setMobileEvent = (selector: Element): undefined | HammerManager => {
147
157
  let instance = this;
148
158
 
@@ -1,21 +1,14 @@
1
1
  import {TemplateService} from "../../services/TemplateService";
2
2
  import {LTPlayerConfig} from "../LTPlayerConfig";
3
3
  import {IconsService} from "../../services/IconsService";
4
- import {LoaderService} from "../../services/LoaderService";
5
4
  import Plyr from "plyr";
6
- import {LTPlayer} from "../LTPlayerType";
7
- import {LTPlayerPosterEvents} from "./LTPlayerPosterEvents";
8
-
9
5
 
10
6
  export class LTPlayerPoster {
11
-
12
7
  custom_selector: string = 'lt-player__poster';
13
8
  config: LTPlayerConfig;
14
9
  iconService: IconsService;
15
10
  templateService: TemplateService;
16
11
  plyr: Plyr
17
-
18
-
19
12
  constructor(player: Plyr, templateService: TemplateService, config: LTPlayerConfig, iconService: IconsService) {
20
13
  this.plyr = player;
21
14
  this.iconService = iconService;
@@ -24,11 +17,12 @@ export class LTPlayerPoster {
24
17
  }
25
18
 
26
19
  setTemplate() {
20
+
27
21
  Object.assign(this.config, this.iconService.getIconsByComponent('poster'));
28
22
 
29
23
  const logo: string = this.iconService.getLogo();
30
24
 
31
- const posterTemplate = this.templateService.getPoster({config:this.config, logoBig: logo});
25
+ const posterTemplate = this.templateService.getPoster({config:this.config, logoBig: logo, isShare : !!(this.config.getShareData())});
32
26
 
33
27
  const container = this.plyr.elements.wrapper;
34
28
 
@@ -38,8 +32,7 @@ export class LTPlayerPoster {
38
32
 
39
33
  setImage() {
40
34
  return new Promise((resolve, reject) => {
41
- const playerContainer = this.plyr.elements.container;
42
- const posterImageBody: HTMLElement = playerContainer.querySelector('.lt-player__poster__image-body');
35
+ const posterImageBody: HTMLElement = this.plyr.elements.container.querySelector('.lt-player__poster__image-body');
43
36
 
44
37
  if (posterImageBody) {
45
38
  const imageTag = document.createElement('img');
@@ -59,9 +52,7 @@ export class LTPlayerPoster {
59
52
  }
60
53
 
61
54
  removeDefaultImage() {
62
- const playerContainer = this.plyr.elements.container;
63
- const posterImage: HTMLElement = playerContainer.querySelector('.lt-player__poster__img');
64
-
55
+ const posterImage: HTMLElement = this.plyr.elements.container.querySelector('.lt-player__poster__img');
65
56
  posterImage.classList.add('d-none');
66
57
  }
67
58
 
@@ -0,0 +1,40 @@
1
+ import {LTPlayer} from "../LTPlayerType";
2
+ import {LTPlayerConfig} from "../LTPlayerConfig";
3
+ import {IconsService} from "../../services/IconsService";
4
+ import {TemplateService} from "../../services/TemplateService";
5
+ import {LTPlayerShareEvents} from "./LTPlayerShareEvents";
6
+ import {shareType} from "../../global/types/ModuleTypes";
7
+
8
+ export class LTPlayerShare {
9
+ instance: LTPlayer.LandscapeType | LTPlayer.PortraitType
10
+ playerConfig: LTPlayerConfig
11
+ iconService: IconsService
12
+ templateService: TemplateService
13
+ events: shareType = { desktop: new LTPlayerShareEvents.desktop(), mobile: new LTPlayerShareEvents.mobile() }
14
+
15
+ constructor() {
16
+ }
17
+
18
+ init(instance: LTPlayer.LandscapeType | LTPlayer.PortraitType) {
19
+ this.instance = instance;
20
+ this.playerConfig = instance.playerConfig;
21
+ this.templateService = instance.templateService;
22
+ this.iconService = instance.iconService;
23
+ this.setTemplate();
24
+ this.appendScriptTag();
25
+ }
26
+
27
+ setTemplate() {
28
+ const playerContainer = this.instance.plyr.elements.wrapper;
29
+ playerContainer.insertAdjacentHTML("afterend", this.templateService.getShare(this.playerConfig.getShareData()));
30
+ }
31
+
32
+ appendScriptTag() {
33
+ const script = document.createElement("script");
34
+ script.type = "text/javascript";
35
+ script.src = "https://static.addtoany.com/menu/page.js";
36
+ script.async;
37
+ document.body.appendChild(script);
38
+ }
39
+
40
+ }
@@ -0,0 +1,103 @@
1
+ import {LTPlayer} from "../LTPlayerType";
2
+ import {defaultType} from "../../global/types/ModuleTypes";
3
+
4
+ export namespace LTPlayerShareEvents {
5
+
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
+ if (instance.plyr.playing) {
13
+ this.isPlaying = true;
14
+ instance.plyr.pause();
15
+ } else {
16
+ this.isPlaying = false;
17
+ }
18
+ }
19
+
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
+ }
26
+ }
27
+
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
+ }
37
+
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
+ }
47
+
48
+ init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
49
+
50
+ const common = this.common;
51
+ common.getSelector(instance).buttons.forEach(button => {
52
+ if (button) {
53
+ button.addEventListener('click', () => {
54
+ common.activeModal(instance, this.common.getSelector(instance));
55
+ })
56
+ }
57
+ })
58
+
59
+ common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
60
+ event.preventDefault();
61
+ if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
62
+ let target = event.target as HTMLElement;
63
+ if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
64
+ common.inactiveModal(instance, common.getSelector(instance));
65
+ }
66
+ }
67
+ })
68
+
69
+
70
+ }
71
+ }
72
+
73
+ export class desktop {
74
+ common : LTPlayerShareEvents.common
75
+ constructor() {
76
+ this.common = new common();
77
+ }
78
+
79
+ init(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
80
+
81
+ const common = this.common;
82
+ common.getSelector(instance).buttons.forEach(button => {
83
+ if (button) {
84
+ button.addEventListener('click', () => {
85
+ common.activeModal(instance, this.common.getSelector(instance));
86
+ })
87
+ }
88
+ })
89
+
90
+ common.getSelector(instance).shareContainer.addEventListener('click', function LTPlayerShareArea(event) {
91
+ event.preventDefault();
92
+ if ( common.getSelector(instance).shareContainer.classList.contains('share-active')) {
93
+ let target = event.target as HTMLElement;
94
+ if (target.classList.contains('share-active') || target.classList.contains('player-lt__close-button')) {
95
+ common.inactiveModal(instance, common.getSelector(instance));
96
+ }
97
+ }
98
+ })
99
+
100
+
101
+ }
102
+ }
103
+ }
@@ -1,6 +1,5 @@
1
1
  import {LTPlayerConfig} from "../../components/LTPlayerConfig";
2
2
  import {LTPlayerControls} from "../../components/controls/LTPlayerControls";
3
- import {LTPlayerPoster} from "../../components/poster/LTPlayerPoster";
4
3
  import Plyr from "plyr";
5
4
  import {TemplateService} from "../../services/TemplateService";
6
5
  import {IconsService} from "../../services/IconsService";
@@ -11,6 +10,7 @@ import {LTPlayerMini} from "../../components/controls/LTPlayerMini";
11
10
  import {LTPlayerDevMethode} from "../../components/LTPlayerDevMethode";
12
11
  import {LTPlayerEventsManager} from "../../components/LTPlayerEventsManager";
13
12
  import {LTPlayerPosterManager} from "../../components/poster/LTPlayerPosterManager";
13
+ import {LTPlayerShare} from "../../components/share/LTPlayerShare";
14
14
 
15
15
  /**
16
16
  * Default Player type Service
@@ -31,6 +31,7 @@ export class LTPlayerController {
31
31
  devMethodePreload: LTPlayerDevMethode.Preload
32
32
  eventInstance: LTPlayerEventsManager
33
33
  posterManager : LTPlayerPosterManager
34
+ share : LTPlayerShare
34
35
  /**
35
36
  * Base player type service
36
37
  */
@@ -40,5 +41,6 @@ export class LTPlayerController {
40
41
  this.templateService = new TemplateService();
41
42
  this.playerControl = new LTPlayerControls(this.templateService);
42
43
  this.posterManager = new LTPlayerPosterManager();
44
+ this.share = new LTPlayerShare();
43
45
  }
44
46
  }
@@ -1,5 +1,6 @@
1
1
  import {LTPlayer} from "../../components/LTPlayerType";
2
2
  import Plyr from "plyr";
3
+ import {LTPlayerShareEvents} from "../../components/share/LTPlayerShareEvents";
3
4
 
4
5
  type playerConfigType = {[index: string]: any}
5
6
 
@@ -27,3 +28,8 @@ type urlVideoType = {
27
28
  embedId : string
28
29
  embedHash : string
29
30
  }
31
+
32
+ type shareType = {
33
+ mobile : LTPlayerShareEvents.mobile,
34
+ desktop : LTPlayerShareEvents.desktop
35
+ }
package/src/index.ts CHANGED
@@ -1,11 +1,9 @@
1
- import '~/assets/sass/app.scss';
2
1
  import {LTPlayerManager} from "./components/LTPlayerManager";
3
2
 
4
3
 
5
- // todo remove from window, it's for developer
4
+ //todo remove from window, it's for developer
6
5
  window.addEventListener('load', function () {
7
6
  if (window.Player === undefined) {
8
7
  window.Player = new LTPlayerManager();
9
8
  }
10
- window.Player.initPageDomElements()
11
9
  })
@@ -4,7 +4,8 @@ export class IconsService {
4
4
 
5
5
  posterMapIconsName = [
6
6
  'play',
7
- 'logo'
7
+ 'logo',
8
+ 'share'
8
9
  ];
9
10
 
10
11
  controlsMapIconsName = [
@@ -38,20 +38,32 @@
38
38
  <!-- <p class="poster-paragraph">{{videoTitle}}</p>-->
39
39
  <!-- </div>-->
40
40
  <!-- </div>-->
41
+ <div class="lt-player-notification__notification-button-state d-none">
42
+ <div class="player-state">
43
+ <img class="player-state__play-icon filter d-none" src="{{icons.play}}" alt="">
44
+ <img class="player-state__pause-icon filter" src="{{icons.pause}}" alt="">
45
+ </div>
46
+ </div>
41
47
  <div class="lt-player-rewind-area">
42
48
  </div>
43
49
  <div class="lt-player-rewind lt-player-notify">
44
50
  <div class="lt-player-rewind__icon">
45
- <i class="left-triangle triangle">◀◀◀</i>
46
- <span class="rewind">10 seconds</span>
51
+ <div class="lt-player-rewind__icon-wrapper rotate">
52
+ <img class="filter" src="{{icons.play}}" alt="">
53
+ <img class="filter" src="{{icons.play}}" alt="">
54
+ </div>
55
+ <span class="rewind">10 sec</span>
47
56
  </div>
48
57
  </div>
49
58
  <div class="lt-player-forward-area">
50
59
  </div>
51
60
  <div class="lt-player-forward lt-player-notify">
52
61
  <div class="lt-player-forward__icon">
53
- <i class="right-triangle triangle">▶▶▶</i>
54
- <span class="forward">10 seconds</span>
62
+ <div class="lt-player-rewind__icon-wrapper">
63
+ <img class="filter" src="{{icons.play}}" alt="">
64
+ <img class="filter" src="{{icons.play}}" alt="">
65
+ </div>
66
+ <span class="forward">10 sec</span>
55
67
  </div>
56
68
  </div>
57
69
  </div>
@@ -166,15 +178,12 @@
166
178
  <img class="filter" src="{{icons.share}}" alt="">
167
179
  </button>
168
180
  {{/isShare}}
169
- <button type="button" class="plyr__control lt-player-share invisible">
170
- <img class="filter" src="{{icons.share}}" alt="">
171
- </button>
172
181
  </div>
173
182
  <div class="top-controllers__body__center">
174
183
  <p class="chapter"></p>
175
184
  </div>
176
185
  <div class="top-controllers__body__right">
177
- {{#desktop}}
186
+ {{#desktop}}
178
187
  <button type="button" class="plyr__control fullscreen-custom-control">
179
188
  <img class="filter minimize d-none" src="{{icons.minimize}}" alt="">
180
189
  <img class="filter maximize" src="{{icons.maximize}}" alt="">
@@ -187,6 +196,12 @@
187
196
  </div>
188
197
  </div>
189
198
  <div class="lt-player-notification">
199
+ <div class="lt-player-notification__notification-button-state">
200
+ <div class="player-state">
201
+ <img class="player-state__play-icon filter d-none" src="{{icons.play}}" alt="">
202
+ <img class="player-state__pause-icon filter d-none" src="{{icons.pause}}" alt="">
203
+ </div>
204
+ </div>
190
205
  <div class="lt-player-video-content">
191
206
  <div class="content__body">
192
207
  <h4 class="poster-title">{{videoParagraph}}</h4>
@@ -197,16 +212,22 @@
197
212
  </div>
198
213
  <div class="lt-player-rewind lt-player-notify">
199
214
  <div class="lt-player-rewind__icon">
200
- <i class="left-triangle triangle">◀◀◀</i>
201
- <span class="rewind">10 seconds</span>
215
+ <span class="rewind">10 sec</span>
216
+ <div class="lt-player-rewind__icon-wrapper rotate">
217
+ <img class="filter" src="{{icons.play}}" alt="">
218
+ <img class="filter" src="{{icons.play}}" alt="">
219
+ </div>
202
220
  </div>
203
221
  </div>
204
222
  <div class="lt-player-forward-area">
205
223
  </div>
206
224
  <div class="lt-player-forward lt-player-notify">
207
225
  <div class="lt-player-forward__icon">
208
- <i class="right-triangle triangle">▶▶▶</i>
209
- <span class="forward">10 seconds</span>
226
+ <div class="lt-player-rewind__icon-wrapper">
227
+ <img class="filter" src="{{icons.play}}" alt="">
228
+ <img class="filter" src="{{icons.play}}" alt="">
229
+ </div>
230
+ <span class="forward">10 sec</span>
210
231
  </div>
211
232
  </div>
212
233
  </div>
@@ -23,13 +23,11 @@
23
23
  <button class="poster-button-watch-now">
24
24
  Watch now
25
25
  </button>
26
- <!-- Lt player share-->
27
-
28
- <!-- <button class="poster-lt-player-share" type="button">-->
29
- <!-- <img class="filter" src="{{config.icons.share}}" alt="" role="presentation" >-->
30
- <!-- </button>-->
31
-
32
- <!-- Lt player share-->
26
+ {{#isShare}}
27
+ <button class="poster-lt-player-share" type="button">
28
+ <img class="filter" src="{{config.share}}" alt="" role="presentation" >
29
+ </button>
30
+ {{/isShare}}
33
31
  </div>
34
32
  </div>
35
33
  </div>