@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
@@ -3,19 +3,18 @@
3
3
  &__xs {
4
4
  .lt-player-notification {
5
5
  .lt-player-video-content {
6
- padding: 0 1rem;
6
+ padding: 0 16px;
7
7
 
8
8
  .poster-title {
9
9
  @extend %line-clamp-3;
10
10
  @include line-clamp-3;
11
- font-size: .8rem;
11
+ font-size: $lt-player-font-size-xs;
12
12
  }
13
13
 
14
14
  .poster-paragraph {
15
15
  &__content {
16
- font-size: .9rem;
16
+ font-size: 14px;
17
17
  }
18
-
19
18
  }
20
19
  }
21
20
  }
@@ -25,7 +24,7 @@
25
24
  .lt-player-notification {
26
25
  .lt-player-video-content {
27
26
  .poster-title {
28
- font-size: 1rem;
27
+ font-size: $lt-player-font-size-base;
29
28
  }
30
29
  }
31
30
  }
@@ -37,11 +36,14 @@
37
36
  width: 100%;
38
37
  height: 100%;
39
38
  display: flex;
40
- position: relative;
39
+
40
+ &.portrait {
41
+ position: relative;
42
+ }
41
43
 
42
44
  &__notification-button-state {
43
45
  position: absolute;
44
- top: 40%;
46
+ top: 50%;
45
47
  left: 50%;
46
48
  transform: translate(-50%, -50%);
47
49
 
@@ -52,7 +54,7 @@
52
54
  @extend %lt-player-btn;
53
55
  @include dark-btn;
54
56
  background: rgba(39, 40, 42, 0.5);
55
- padding: 1rem;
57
+ padding: 16px;
56
58
  }
57
59
 
58
60
  .active {
@@ -63,16 +65,16 @@
63
65
 
64
66
  .lt-player-video-content {
65
67
  position: absolute;
66
- bottom: 5rem;
68
+ bottom: 176px;
67
69
  text-align: left;
68
70
  display: flex;
69
- padding: 0 1.5rem;
71
+ padding: 0 24px;
70
72
  width: 100%;
71
- justify-content: space-between;
73
+ user-select: none;
74
+ align-items: end;
72
75
 
73
76
  .content__body {
74
77
  z-index: 2;
75
- margin-top: auto;
76
78
  width: 100%;
77
79
  }
78
80
 
@@ -80,16 +82,13 @@
80
82
  @extend %line-clamp-3;
81
83
  @include line-clamp-4;
82
84
  color: $default-lt-player-white !important;
83
- font-size: 1.313rem;
85
+ font-size: $lt-player-font-size-xxl;
84
86
  font-weight: $lt-player-font-weight-lg;
85
87
  line-height: $lt-player-line-height;
86
88
  margin: 0;
87
89
  }
88
90
 
89
91
  .poster-paragraph {
90
-
91
- margin-bottom: 3rem;
92
-
93
92
  &__content {
94
93
  display: -webkit-box;
95
94
  -webkit-line-clamp: 2;
@@ -97,11 +96,11 @@
97
96
  word-wrap: break-word;
98
97
  text-overflow: ellipsis;
99
98
  overflow: hidden;
100
-
99
+ font-size: $lt-player-font-size-base;
101
100
  font-weight: $lt-player-font-weight-sm;
102
101
  color: $default-lt-player-white !important;
103
102
  margin-bottom: 0;
104
- max-height: 3.1rem;
103
+ max-height: 50px;
105
104
  transition: max-height 0.3s ease-in-out;
106
105
  }
107
106
 
@@ -119,38 +118,37 @@
119
118
  border: none;
120
119
  margin: 0;
121
120
  text-decoration: none;
122
- font-size: 0.8rem;
121
+ font-size: $lt-player-font-size-xs;
123
122
  color: white;
124
123
  cursor: pointer;
125
124
  position: absolute;
126
- bottom: 6rem;
127
- right: 6rem;
125
+ bottom: 144px;
126
+ right: 96px;
128
127
  z-index: 8;
129
128
  }
130
129
 
131
-
132
- .lt-player-rewind-area {
130
+ .lt-player-rewind-area,
131
+ .lt-player-forward-area {
133
132
  touch-action: inherit!important;
134
133
  width: 100%;
135
134
  height: 100%;
136
- z-index: 3;
135
+ z-index: 4;
137
136
  }
138
137
 
139
- .lt-player-rewind {
138
+ .lt-player-rewind,
139
+ .lt-player-forward {
140
140
  width: 50%;
141
- height: 130%;
142
- top: -10rem;
143
- display:flex;
144
- flex-direction: row;
141
+ top: 10%;
142
+ display: flex;
145
143
  position: absolute;
146
144
  text-align: center;
147
- border-radius:0 100% 100% 0;
148
- left: 0;
149
-
145
+ border-radius: 100% 0 0 100%;
146
+ height: unset;
147
+ bottom: 10%;
150
148
 
151
149
  &__icon-wrapper {
152
150
  display: flex;
153
- padding: 0 .5rem;
151
+ padding: 0 8px;
154
152
  user-select: none;
155
153
 
156
154
  &.rotate {
@@ -164,83 +162,48 @@
164
162
 
165
163
  &__icon {
166
164
  display: flex;
167
- justify-content:flex-start;
168
- align-items:center;
169
-
165
+ justify-content: flex-start;
166
+ align-items: center;
170
167
  color: rgba(255,255,255, 1);
171
168
  user-select: none;
172
-
173
- &__portrait {
174
- margin: auto auto 18rem 3rem;
175
- }
176
-
177
- &__landscape {
178
- margin: auto auto 13rem 4rem;
179
- }
180
169
  }
181
170
 
182
171
  span {
183
- font-size: 12px;
172
+ font-size: $lt-player-font-size-xs;
184
173
  user-select: none;
185
174
  }
186
-
187
- }
188
-
189
- .lt-player-forward-area {
190
- touch-action: inherit!important;
191
- width: 100%;
192
- height: 100%;
193
- z-index: 4;
194
175
  }
195
176
 
196
- .lt-player-forward {
197
- width: 50%;
198
- height: 130%;
199
- top: -10rem;
200
- display:flex;
201
- flex-direction: row;
202
- position: absolute;
203
- text-align: center;
204
- border-radius:100% 0 0 100%;
205
- right: 0;
177
+ .lt-player-rewind {
178
+ left: 0;
206
179
 
207
- &__icon-wrapper {
208
- display: flex;
209
- padding: 0 .5rem;
180
+ &__icon {
181
+ flex-direction: row-reverse;
210
182
 
211
- &.rotate {
212
- rotate: 180deg;
183
+ &__portrait {
184
+ margin: auto auto auto 48px;
213
185
  }
214
186
 
215
- img {
216
- max-width: 20px;
187
+ &__landscape {
188
+ margin: auto auto auto 64px;
217
189
  }
218
190
  }
191
+ }
219
192
 
220
- &__icon {
221
- display: flex;
222
- justify-content:flex-start;
223
- align-items:center;
224
-
225
- color: rgba(255,255,255, 1);
193
+ .lt-player-forward {
194
+ right: 0;
226
195
 
196
+ &__icon {
227
197
  &__portrait {
228
- margin: auto 3rem 18rem auto;
198
+ margin: auto 48px auto auto;
229
199
  }
230
200
 
231
201
  &__landscape {
232
- margin: auto 4rem 13rem auto;
202
+ margin: auto 64px auto auto;
233
203
  }
234
-
235
204
  }
236
-
237
- span{
238
- font-size:12px;
239
- }
240
-
241
205
  }
242
206
 
243
-
244
207
  .lt-player-notify {
245
208
  transition: background 0.8s;
246
209
  //background: rgba(200,200,200,.4) radial-gradient(circle, transparent 1%, rgba(200,200,200,.4) 1%) center/15000%;
@@ -6,7 +6,30 @@
6
6
  &__controls-enable,
7
7
  &__controls-enable-settings {
8
8
  .top-controllers {
9
- padding: 2rem 2rem 0 2rem;
9
+ padding: 40px 40px 0;
10
+
11
+ &__background {
12
+ display: none;
13
+ }
14
+ }
15
+ }
16
+ }
17
+ }
18
+
19
+ .lt-player-landscape--mobile,
20
+ .lt-player-landscape--desktop {
21
+ &.lt-player--landscape {
22
+ &__xxs {
23
+ .plyr {
24
+ &__controls {
25
+ .top-controllers {
26
+ padding: 10px;
27
+
28
+ button {
29
+ @include buttons-xs;
30
+ }
31
+ }
32
+ }
10
33
  }
11
34
  }
12
35
  }
@@ -19,7 +42,7 @@
19
42
  .plyr {
20
43
  &__controls {
21
44
  .top-controllers {
22
- padding: 1rem;
45
+ padding: 16px;
23
46
 
24
47
  button {
25
48
  @include buttons-xs;
@@ -43,10 +66,10 @@
43
66
  &__controls-enable,
44
67
  &__controls-enable-settings {
45
68
  .top-controllers {
46
- z-index: 10;
47
69
  width: 100%;
48
- height: 29%;
49
- padding: 1.5rem 1.5rem 0 1.5rem;
70
+ padding: 24px 24px 0 24px;
71
+ position: absolute;
72
+
50
73
  button {
51
74
  @extend %lt-player-btn;
52
75
  @include dark-btn;
@@ -60,17 +83,23 @@
60
83
  height: 20%;
61
84
  background: var(--plyr-video-controls-background,linear-gradient(transparent,rgba(0,0,0,.75)));
62
85
  rotate: 180deg;
86
+ display: none;
63
87
  }
64
88
 
65
89
  &__body {
66
90
  display: flex;
67
91
  justify-content: space-between;
68
92
 
69
- &__left {
93
+ &__left,
94
+ &__right {
70
95
  display: flex;
71
96
  flex-direction: column;
72
- align-items: start;
73
- flex: 0 0 20%
97
+ flex: 0 0 12%;
98
+ z-index: 5;
99
+ }
100
+
101
+ &__left {
102
+ align-items: flex-start;
74
103
  }
75
104
 
76
105
  &__center {
@@ -78,10 +107,7 @@
78
107
  }
79
108
 
80
109
  &__right {
81
- display: flex;
82
- flex-direction: column;
83
110
  align-items: end;
84
- flex: 0 0 20%
85
111
  }
86
112
 
87
113
  &__center {
@@ -101,7 +127,7 @@
101
127
  &__right {
102
128
 
103
129
  .mini-player-control {
104
- margin-top: 1rem;
130
+ margin-top: 16px;
105
131
  }
106
132
  }
107
133
  }
@@ -159,4 +185,4 @@
159
185
  // }
160
186
  //
161
187
  //}
162
- }
188
+ }
@@ -8,9 +8,11 @@ export namespace LTPlayerDevMethode {
8
8
  export class Player {
9
9
 
10
10
  player: Plyr
11
+ instance : LTPlayer.PortraitType | LTPlayer.LandscapeType
11
12
 
12
- constructor(player: Plyr) {
13
- this.player = player;
13
+ constructor(instance: LTPlayer.PortraitType | LTPlayer.LandscapeType) {
14
+ this.player = instance.plyr;
15
+ this.instance = instance
14
16
  }
15
17
 
16
18
  play() {
@@ -77,7 +79,9 @@ export namespace LTPlayerDevMethode {
77
79
  let miniPlayer = {
78
80
  controls : playerContainer.querySelector('.lt-player-mini-player-controls'),
79
81
  background: playerContainer.querySelector('.lt-player-mini-player-background'),
80
- enable: playerContainer.querySelector('.lt-player-mini-enable')
82
+ enable: playerContainer.querySelector('.lt-player-mini-enable'),
83
+ size_land: playerContainer.querySelector(`.lt-player-mini-1`),
84
+ size_port: playerContainer.querySelector(`.lt-player-mini-2`)
81
85
  };
82
86
 
83
87
  if (miniPlayer.controls) {
@@ -88,6 +92,14 @@ export namespace LTPlayerDevMethode {
88
92
  miniPlayer.background.remove();
89
93
  }
90
94
 
95
+ if (miniPlayer.size_land) {
96
+ miniPlayer.size_land.classList.remove(`lt-player-mini-1`)
97
+ }
98
+
99
+ if (miniPlayer.size_port) {
100
+ miniPlayer.size_port.classList.remove(`lt-player-mini-2`)
101
+ }
102
+
91
103
  if (miniPlayer.enable) {
92
104
  miniPlayer.enable.classList.remove('lt-player-mini-enable')
93
105
  }
@@ -106,6 +118,14 @@ export namespace LTPlayerDevMethode {
106
118
  exitFullScreen();
107
119
 
108
120
  }
121
+
122
+ enterMiniPlayer() {
123
+ this.instance.miniPlayer.enterMiniPlayer();
124
+ }
125
+
126
+ exitMiniPlayer() {
127
+ this.instance.miniPlayer.exitMiniPlayer(this.player);
128
+ }
109
129
  }
110
130
 
111
131
  export class Preload {
@@ -0,0 +1,29 @@
1
+ import {LTPlayer} from "./LTPlayerType";
2
+ import {LTPlayerConfig} from "./config/LTPlayerConfig";
3
+ import Hls from "hls.js";
4
+ import {defaultType} from "../global/types/ModuleTypes";
5
+
6
+ export class LTPlayerHls {
7
+ instance : LTPlayer.LandscapeType | LTPlayer.PortraitType
8
+ config : LTPlayerConfig
9
+ playerSettings : defaultType
10
+
11
+ hlsInstance : Hls
12
+
13
+ constructor(instance : LTPlayer.LandscapeType | LTPlayer.PortraitType, playerSettings : defaultType) {
14
+ this.instance = instance;
15
+ this.config = instance.playerConfig;
16
+ this.playerSettings = playerSettings;
17
+ this.hlsInstance = new Hls();
18
+ }
19
+
20
+ init() {
21
+ if (Hls.isSupported()) {
22
+ this.hlsInstance.loadSource(this.config.getVideoUrl().videoUrl);
23
+ this.hlsInstance.attachMedia(this.config.getPlayerElementContainer().querySelector('video'));
24
+ this.hlsInstance.on(Hls.Events.MANIFEST_PARSED,function() {
25
+ console.log('MANIFEST_PARSED');
26
+ });
27
+ }
28
+ }
29
+ }
@@ -85,6 +85,7 @@ export class LTPlayerSetup {
85
85
  if (checkVersion(playerConfig.version)) {
86
86
  return new Promise((resolve, reject) => {
87
87
  playerConfig.body.playerType = 2;
88
+
88
89
  resolve(this.setType(playerConfig, playerContainer));
89
90
  reject(null);
90
91
  });
@@ -193,19 +194,14 @@ export class LTPlayerSetup {
193
194
  }
194
195
 
195
196
  switch (videoData.type) {
196
-
197
197
  case 'embedded':
198
198
  return processEmbed()
199
199
  case 'video':
200
200
  return processVideo();
201
201
 
202
202
  }
203
-
204
203
  }
205
204
 
206
-
207
-
208
-
209
205
  /**
210
206
  * Set Additional Info
211
207
  * @param playerConfig
@@ -214,15 +210,24 @@ export class LTPlayerSetup {
214
210
 
215
211
  const additionalInfoContainer:HTMLElement = playerConfig.body.playerContainer.querySelector('.lt-player-additional-info');
216
212
 
217
- if (!additionalInfoContainer) {
218
- this.additionalInfoService = null;
213
+ if (additionalInfoContainer) {
214
+ this.additionalInfoService = new LTPLayerAddInfo.Controller();
215
+ this.additionalInfoService.setContainer(additionalInfoContainer);
219
216
  return;
220
217
  }
221
218
 
222
- this.additionalInfoService = new LTPLayerAddInfo.Controller();
223
- this.additionalInfoService.set(additionalInfoContainer);
224
219
 
220
+ if (playerConfig.body.additionalInfo !== undefined && Object.keys(playerConfig.body.additionalInfo).length > 0) {
221
+ this.additionalInfoService = new LTPLayerAddInfo.Controller();
222
+ this.additionalInfoService.setConfig(playerConfig.body.additionalInfo);
223
+ return;
224
+ }
225
+
226
+
227
+ this.additionalInfoService = null;
225
228
  return;
229
+
230
+
226
231
  }
227
232
 
228
233
  /**