@latest-thinking/lt-player 1.0.9 → 1.1.0
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.
- package/ README.md +144 -0
- package/dist/css/lt-player-main.css +1 -1
- package/dist/css/lt-player-main.css.map +1 -1
- package/dist/js/lt-player-main.js +1 -1
- package/dist/js/lt-player-main.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/sass/abstracts/_variables.scss +1 -0
- package/src/assets/sass/core/_player.scss +6 -0
- package/src/assets/sass/sections/controllers/_botom.scss +8 -0
- package/src/components/LTPlayerManager.ts +47 -29
- package/src/components/LTPlayerSetup.ts +20 -0
- package/src/components/controls/settings/LTPlayerDesktopSettingsControllers.ts +17 -7
- package/src/components/controls/settings/LTPlayerMobileSettingsControllers.ts +16 -5
- package/src/views/controls.handlebars +2 -6
package/package.json
CHANGED
|
@@ -66,6 +66,10 @@
|
|
|
66
66
|
&:active {
|
|
67
67
|
background-color: $default-lt-player-blue;
|
|
68
68
|
}
|
|
69
|
+
|
|
70
|
+
span {
|
|
71
|
+
font-size: $lt-player-font-size-xxs;
|
|
72
|
+
}
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
|
|
@@ -334,6 +338,10 @@
|
|
|
334
338
|
.plyr__controls_speed-button {
|
|
335
339
|
width: 40px;
|
|
336
340
|
height: 40px;
|
|
341
|
+
|
|
342
|
+
span {
|
|
343
|
+
font-size: $lt-player-font-size-sm;
|
|
344
|
+
}
|
|
337
345
|
}
|
|
338
346
|
}
|
|
339
347
|
}
|
|
@@ -24,9 +24,9 @@ export class LTPlayerManager {
|
|
|
24
24
|
|
|
25
25
|
let domElements: NodeListOf<HTMLElement>;
|
|
26
26
|
|
|
27
|
-
domElements = document.querySelectorAll(`.${process.env.DEFAULT_DOM_HTML_ELEMENTS}`);
|
|
27
|
+
domElements = document.querySelectorAll(`.${process.env.DEFAULT_DOM_HTML_ELEMENTS}, #${process.env.DEFAULT_DOM_HTML_ELEMENTS}`);
|
|
28
28
|
|
|
29
|
-
if (domElements.length
|
|
29
|
+
if (domElements.length !== 0) {
|
|
30
30
|
domElements = document.querySelectorAll('[data-lt-player-config]');
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -51,8 +51,9 @@ export class LTPlayerManager {
|
|
|
51
51
|
/**
|
|
52
52
|
* Init player by identifier
|
|
53
53
|
* @param identifier
|
|
54
|
+
* @param playerConfig
|
|
54
55
|
*/
|
|
55
|
-
initByClassOrID(identifier: string) {
|
|
56
|
+
initByClassOrID(identifier: string, playerConfig?: playerConfigType) {
|
|
56
57
|
|
|
57
58
|
if (typeof identifier !== 'string') {
|
|
58
59
|
console.error('Identifier has another type of');
|
|
@@ -69,7 +70,7 @@ export class LTPlayerManager {
|
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
71
72
|
return new Promise(resolve => {
|
|
72
|
-
this.initBySelector(defaultSelector).then(
|
|
73
|
+
this.initBySelector(defaultSelector, playerConfig).then(result => {
|
|
73
74
|
resolve(result);
|
|
74
75
|
})
|
|
75
76
|
})
|
|
@@ -79,13 +80,24 @@ export class LTPlayerManager {
|
|
|
79
80
|
/**
|
|
80
81
|
* Init player by HTMLElement selector
|
|
81
82
|
* @param selector
|
|
83
|
+
* @param playerConfig
|
|
82
84
|
*/
|
|
83
|
-
initBySelector(selector: HTMLElement) {
|
|
84
|
-
let playerConfig = selector.dataset.ltPlayerConfig;
|
|
85
|
+
initBySelector(selector: HTMLElement, playerConfig?: playerConfigType) {
|
|
85
86
|
|
|
86
|
-
|
|
87
|
+
let config: playerConfigType | string = selector.dataset.ltPlayerConfig;
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
if (!config) {
|
|
90
|
+
config = playerConfig;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (config !== undefined) {
|
|
94
|
+
let configData: playerConfigType;
|
|
95
|
+
|
|
96
|
+
if (typeof config === "string") {
|
|
97
|
+
configData = JSON.parse(config);
|
|
98
|
+
} else {
|
|
99
|
+
configData = config;
|
|
100
|
+
}
|
|
89
101
|
|
|
90
102
|
Object.assign(configData.body, {playerContainer: selector})
|
|
91
103
|
|
|
@@ -96,13 +108,17 @@ export class LTPlayerManager {
|
|
|
96
108
|
})
|
|
97
109
|
}
|
|
98
110
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
console.error(`Lt Player: No "data-lt-player-config" attribute is set on element!`);
|
|
113
|
+
console.log(selector)
|
|
114
|
+
console.error('Use one of below examples')
|
|
115
|
+
console.table({
|
|
116
|
+
Example_1: '<div class="lt-player" data-lt-player-config="{config}"> </div>',
|
|
117
|
+
})
|
|
118
|
+
reject()
|
|
104
119
|
})
|
|
105
|
-
|
|
120
|
+
|
|
121
|
+
|
|
106
122
|
}
|
|
107
123
|
|
|
108
124
|
/**
|
|
@@ -110,25 +126,27 @@ export class LTPlayerManager {
|
|
|
110
126
|
* @param playerConfig
|
|
111
127
|
* @protected
|
|
112
128
|
*/
|
|
113
|
-
public initPlayer(playerConfig?: playerConfigType) {
|
|
129
|
+
public initPlayer(playerConfig?: playerConfigType): Promise<any> | null {
|
|
114
130
|
|
|
115
131
|
const setup = new LTPlayerSetup();
|
|
116
132
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
return new Promise((resolve, reject) => {
|
|
134
|
+
if (!setup.checkIfPlayerExists(playerConfig)) {
|
|
135
|
+
reject('Duplicate player');
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let setupPLayer = setup.init(playerConfig);
|
|
139
|
+
|
|
140
|
+
if (setupPLayer) {
|
|
141
|
+
setupPLayer.then( result => {
|
|
142
|
+
this.players.push(result);
|
|
143
|
+
resolve(result);
|
|
144
|
+
})
|
|
145
|
+
} else {
|
|
146
|
+
reject('Player is not setup')
|
|
147
|
+
}
|
|
131
148
|
|
|
149
|
+
})
|
|
132
150
|
}
|
|
133
151
|
|
|
134
152
|
/**
|
|
@@ -5,10 +5,30 @@ import {ValidatorService} from "../services/ValidatorService";
|
|
|
5
5
|
import * as playerSchema from "../json-schema/player-config.json";
|
|
6
6
|
import {LTPLayerAddInfo} from "./addInfo/LTPlayerAddInfoManager";
|
|
7
7
|
import Plyr from "plyr";
|
|
8
|
+
import {LTPlayerDevMethode} from "./LTPlayerDevMethode";
|
|
9
|
+
import Player = LTPlayerDevMethode.Player;
|
|
8
10
|
|
|
9
11
|
export class LTPlayerSetup {
|
|
12
|
+
|
|
10
13
|
additionalInfoService: LTPLayerAddInfo.Controller;
|
|
11
14
|
|
|
15
|
+
checkIfPlayerExists(playerConfig?: playerConfigType): boolean
|
|
16
|
+
{
|
|
17
|
+
let response: boolean = false;
|
|
18
|
+
|
|
19
|
+
if (playerConfig.body.playerContainer instanceof HTMLElement) {
|
|
20
|
+
response = true;
|
|
21
|
+
if (window.Player !== undefined) {
|
|
22
|
+
window.Player.players.forEach(player => {
|
|
23
|
+
if (player.playerConfig.getPlayerElementContainer() === playerConfig.body.playerContainer) {
|
|
24
|
+
response = false;
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return response;
|
|
30
|
+
}
|
|
31
|
+
|
|
12
32
|
init(playerConfig?: playerConfigType): Promise<any> {
|
|
13
33
|
|
|
14
34
|
Helper.setDebugEvent('Start init player', 'info');
|
|
@@ -89,34 +89,44 @@ export class LTPlayerDesktopSettingsControllers implements SettingsControlsInter
|
|
|
89
89
|
setButtonSpeed() {
|
|
90
90
|
let playerControlsContainer = this.settingsInstance.playerInstance.plyr.elements.controls;
|
|
91
91
|
let playerSpeedButton = playerControlsContainer.querySelector('.plyr__controls_speed-button');
|
|
92
|
-
if (playerSpeedButton) {
|
|
93
|
-
playerSpeedButton.innerHTML = `${this.settingsInstance.playerInstance.plyr.speed}`;
|
|
94
|
-
}
|
|
95
92
|
let plyr = this.settingsInstance.playerInstance.plyr;
|
|
96
93
|
let instance = this.settingsInstance.playerInstance;
|
|
97
94
|
|
|
98
95
|
if (playerSpeedButton) {
|
|
96
|
+
let speedSpan = document.createElement('span');
|
|
97
|
+
playerSpeedButton.appendChild(speedSpan);
|
|
98
|
+
speedSpan.innerHTML = `1X`;
|
|
99
|
+
speedSpan.className = '';
|
|
100
|
+
speedSpan.classList.add('playback-speed--1X');
|
|
101
|
+
|
|
99
102
|
playerSpeedButton.addEventListener('click', function(event) {
|
|
100
103
|
let playSpeed = plyr.speed + 0.25;
|
|
101
104
|
|
|
102
105
|
if (playSpeed > 2) {
|
|
103
|
-
|
|
106
|
+
speedSpan.innerHTML = `1X`;
|
|
104
107
|
plyr.speed = 1;
|
|
108
|
+
speedSpan.className = '';
|
|
109
|
+
speedSpan.classList.add('playback-speed--1X');
|
|
105
110
|
return;
|
|
106
111
|
}
|
|
107
112
|
|
|
108
113
|
if (playSpeed === 1.75) {
|
|
109
114
|
plyr.speed = playSpeed + 0.25
|
|
110
|
-
|
|
115
|
+
speedSpan.innerHTML = `2X`;
|
|
116
|
+
speedSpan.className = '';
|
|
117
|
+
speedSpan.classList.add('playback-speed--2X');
|
|
111
118
|
return;
|
|
112
119
|
}
|
|
113
120
|
|
|
114
121
|
plyr.speed = playSpeed;
|
|
115
|
-
|
|
122
|
+
const displaySpeed = Math.floor(playSpeed * 10) / 10;
|
|
123
|
+
speedSpan.innerHTML = displaySpeed + "X";
|
|
124
|
+
speedSpan.className = '';
|
|
125
|
+
console.log(playSpeed.toPrecision(2));
|
|
126
|
+
speedSpan.classList.add('playback-speed--' + playSpeed + 'X');
|
|
116
127
|
|
|
117
128
|
instance.playerControl.mobileEvents.showControls(instance);
|
|
118
129
|
})
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
|
-
|
|
122
132
|
}
|
|
@@ -163,27 +163,38 @@ export class LTPlayerMobileSettingsControllers implements SettingsControlsInterf
|
|
|
163
163
|
let instance = this.settingsInstance.playerInstance;
|
|
164
164
|
|
|
165
165
|
if (playerSpeedButton) {
|
|
166
|
-
|
|
166
|
+
let speedSpan = document.createElement('span');
|
|
167
|
+
playerSpeedButton.appendChild(speedSpan);
|
|
168
|
+
speedSpan.innerHTML = `1X`;
|
|
169
|
+
speedSpan.className = '';
|
|
170
|
+
speedSpan.classList.add('playback-speed--1X');
|
|
171
|
+
|
|
167
172
|
let mobileEvent: HammerManager = this.settingsInstance.playerInstance.eventInstance.mobileEvents.setMobileEvent(playerSpeedButton);
|
|
168
173
|
if (mobileEvent) {
|
|
169
174
|
mobileEvent.on('singletap', function LTPlayerMobileSpeedButton() {
|
|
170
|
-
|
|
171
175
|
let playSpeed = plyr.speed + 0.25;
|
|
172
176
|
|
|
173
177
|
if (playSpeed > 2) {
|
|
174
|
-
|
|
178
|
+
speedSpan.innerHTML = `1X`;
|
|
175
179
|
plyr.speed = 1;
|
|
180
|
+
speedSpan.className = '';
|
|
181
|
+
speedSpan.classList.add('playback-speed--1X');
|
|
176
182
|
return;
|
|
177
183
|
}
|
|
178
184
|
|
|
179
185
|
if (playSpeed === 1.75) {
|
|
180
186
|
plyr.speed = playSpeed + 0.25
|
|
181
|
-
|
|
187
|
+
speedSpan.innerHTML = `2X`;
|
|
188
|
+
speedSpan.className = '';
|
|
189
|
+
speedSpan.classList.add('playback-speed--2X');
|
|
182
190
|
return;
|
|
183
191
|
}
|
|
184
192
|
|
|
185
193
|
plyr.speed = playSpeed;
|
|
186
|
-
|
|
194
|
+
const displaySpeed = Math.floor(playSpeed * 10) / 10;
|
|
195
|
+
speedSpan.innerHTML = displaySpeed + "X";
|
|
196
|
+
speedSpan.className = '';
|
|
197
|
+
speedSpan.classList.add('playback-speed--' + playSpeed + 'X');
|
|
187
198
|
|
|
188
199
|
instance.playerControl.mobileEvents.showControls(instance);
|
|
189
200
|
})
|
|
@@ -333,9 +333,7 @@
|
|
|
333
333
|
</div>
|
|
334
334
|
{{#mobile}}
|
|
335
335
|
<div class="bottom-controller__right-buttons">
|
|
336
|
-
<button type="button" class="plyr__control plyr__controls_speed-button">
|
|
337
|
-
<span class="playback-speed"></span>
|
|
338
|
-
</button>
|
|
336
|
+
<button type="button" class="plyr__control plyr__controls_speed-button"></button>
|
|
339
337
|
</div>
|
|
340
338
|
{{/mobile}}
|
|
341
339
|
{{#mobile}}
|
|
@@ -344,9 +342,7 @@
|
|
|
344
342
|
|
|
345
343
|
{{#desktop}}
|
|
346
344
|
<div class="bottom-controller__right-buttons">
|
|
347
|
-
<button type="button" class="plyr__control plyr__controls_speed-button">
|
|
348
|
-
<span class="playback-speed></span>
|
|
349
|
-
</button>
|
|
345
|
+
<button type="button" class="plyr__control plyr__controls_speed-button"></button>
|
|
350
346
|
</div>
|
|
351
347
|
{{/desktop}}
|
|
352
348
|
</div>
|