@gcorevideo/player 0.0.1

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 (192) hide show
  1. package/assets/icons/new/arrow-left.svg +5 -0
  2. package/assets/icons/new/arrow-right.svg +5 -0
  3. package/assets/icons/new/check.svg +5 -0
  4. package/assets/icons/new/close.svg +12 -0
  5. package/assets/icons/new/full.svg +8 -0
  6. package/assets/icons/new/fullscreen-off.svg +14 -0
  7. package/assets/icons/new/fullscreen-on.svg +14 -0
  8. package/assets/icons/new/gear-hd.svg +16 -0
  9. package/assets/icons/new/gear.svg +12 -0
  10. package/assets/icons/new/hd.svg +8 -0
  11. package/assets/icons/new/pause.svg +5 -0
  12. package/assets/icons/new/pip.svg +5 -0
  13. package/assets/icons/new/play.svg +10 -0
  14. package/assets/icons/new/replayleft.svg +5 -0
  15. package/assets/icons/new/replayright.svg +5 -0
  16. package/assets/icons/new/speed.svg +5 -0
  17. package/assets/icons/new/stats.svg +3 -0
  18. package/assets/icons/new/stop.svg +3 -0
  19. package/assets/icons/new/subtitles-off.svg +5 -0
  20. package/assets/icons/new/subtitles-on.svg +6 -0
  21. package/assets/icons/new/volume-max.svg +5 -0
  22. package/assets/icons/new/volume-min.svg +5 -0
  23. package/assets/icons/new/volume-off.svg +5 -0
  24. package/assets/icons/old/cardboard.svg +4 -0
  25. package/assets/icons/old/close-share.svg +13 -0
  26. package/assets/icons/old/close.svg +13 -0
  27. package/assets/icons/old/fb.svg +13 -0
  28. package/assets/icons/old/fullscreen.svg +12 -0
  29. package/assets/icons/old/language.svg +1 -0
  30. package/assets/icons/old/pause.svg +12 -0
  31. package/assets/icons/old/play.svg +12 -0
  32. package/assets/icons/old/quality-arrow.svg +13 -0
  33. package/assets/icons/old/reload.svg +4 -0
  34. package/assets/icons/old/share.svg +13 -0
  35. package/assets/icons/old/sound-off.svg +15 -0
  36. package/assets/icons/old/sound-on.svg +15 -0
  37. package/assets/icons/old/streams.svg +3 -0
  38. package/assets/icons/old/twitter.svg +13 -0
  39. package/assets/icons/old/wn.svg +15 -0
  40. package/assets/icons/standard/01-play.svg +3 -0
  41. package/assets/icons/standard/02-pause.svg +3 -0
  42. package/assets/icons/standard/03-stop.svg +3 -0
  43. package/assets/icons/standard/04-volume.svg +3 -0
  44. package/assets/icons/standard/05-mute.svg +3 -0
  45. package/assets/icons/standard/06-expand.svg +3 -0
  46. package/assets/icons/standard/07-shrink.svg +3 -0
  47. package/assets/icons/standard/08-hd.svg +3 -0
  48. package/assets/icons/standard/09-cc.svg +8 -0
  49. package/assets/icons/standard/10-reload.svg +4 -0
  50. package/assets/style/main.scss +50 -0
  51. package/assets/style/theme.scss +42 -0
  52. package/assets/style/variables.scss +7 -0
  53. package/dist/DashPlayback-6wKK0_pL.js +666 -0
  54. package/dist/DashPlayback-8U6_s4Jc.js +666 -0
  55. package/dist/DashPlayback-BeZz7mN9.js +663 -0
  56. package/dist/DashPlayback-CRdja67F.js +667 -0
  57. package/dist/DashPlayback-D0df6zGg.js +663 -0
  58. package/dist/DashPlayback-D7egS-CZ.js +664 -0
  59. package/dist/DashPlayback-DH5lZMRR.js +663 -0
  60. package/dist/DashPlayback-DZfIc9sK.js +665 -0
  61. package/dist/DashPlayback-VhCxbQhn.js +666 -0
  62. package/dist/HlsPlayback-Avwy8-0O.js +749 -0
  63. package/dist/index.css +125 -0
  64. package/dist/index.js +467 -0
  65. package/lib/Player.d.ts +50 -0
  66. package/lib/Player.d.ts.map +1 -0
  67. package/lib/Player.js +310 -0
  68. package/lib/backend.d.ts +3 -0
  69. package/lib/backend.d.ts.map +1 -0
  70. package/lib/backend.js +10 -0
  71. package/lib/constants.d.ts +19 -0
  72. package/lib/constants.d.ts.map +1 -0
  73. package/lib/constants.js +18 -0
  74. package/lib/index.d.ts +10 -0
  75. package/lib/index.d.ts.map +1 -0
  76. package/lib/index.js +9 -0
  77. package/lib/internal.types.d.ts +105 -0
  78. package/lib/internal.types.d.ts.map +1 -0
  79. package/lib/internal.types.js +1 -0
  80. package/lib/playback.types.d.ts +13 -0
  81. package/lib/playback.types.d.ts.map +1 -0
  82. package/lib/playback.types.js +1 -0
  83. package/lib/plugins/audio-selector/AudioSelector.d.ts +48 -0
  84. package/lib/plugins/audio-selector/AudioSelector.d.ts.map +1 -0
  85. package/lib/plugins/audio-selector/AudioSelector.js +282 -0
  86. package/lib/plugins/big-mute-button/BigMuteButton.d.ts +33 -0
  87. package/lib/plugins/big-mute-button/BigMuteButton.d.ts.map +1 -0
  88. package/lib/plugins/big-mute-button/BigMuteButton.js +148 -0
  89. package/lib/plugins/bottom-gear/BottomGear.d.ts +30 -0
  90. package/lib/plugins/bottom-gear/BottomGear.d.ts.map +1 -0
  91. package/lib/plugins/bottom-gear/BottomGear.js +103 -0
  92. package/lib/plugins/click-to-pause/ClickToPause.d.ts +16 -0
  93. package/lib/plugins/click-to-pause/ClickToPause.d.ts.map +1 -0
  94. package/lib/plugins/click-to-pause/ClickToPause.js +73 -0
  95. package/lib/plugins/dash-playback/DashPlayback.d.ts +81 -0
  96. package/lib/plugins/dash-playback/DashPlayback.d.ts.map +1 -0
  97. package/lib/plugins/dash-playback/DashPlayback.js +658 -0
  98. package/lib/plugins/dash-plugin/DashPlayback.d.ts +86 -0
  99. package/lib/plugins/dash-plugin/DashPlayback.d.ts.map +1 -0
  100. package/lib/plugins/dash-plugin/DashPlayback.js +659 -0
  101. package/lib/plugins/disable-controls/DisableControls.d.ts +15 -0
  102. package/lib/plugins/disable-controls/DisableControls.d.ts.map +1 -0
  103. package/lib/plugins/disable-controls/DisableControls.js +69 -0
  104. package/lib/plugins/dvr-controls/DVRControls.d.ts +27 -0
  105. package/lib/plugins/dvr-controls/DVRControls.d.ts.map +1 -0
  106. package/lib/plugins/dvr-controls/DVRControls.js +110 -0
  107. package/lib/plugins/hls-playback/HlsPlayback.d.ts +102 -0
  108. package/lib/plugins/hls-playback/HlsPlayback.d.ts.map +1 -0
  109. package/lib/plugins/hls-playback/HlsPlayback.js +747 -0
  110. package/lib/plugins/level-selector/LevelSelector.d.ts +48 -0
  111. package/lib/plugins/level-selector/LevelSelector.d.ts.map +1 -0
  112. package/lib/plugins/level-selector/LevelSelector.js +287 -0
  113. package/lib/plugins/media-control/MediaControl.d.ts +186 -0
  114. package/lib/plugins/media-control/MediaControl.d.ts.map +1 -0
  115. package/lib/plugins/media-control/MediaControl.js +1000 -0
  116. package/lib/plugins/poster/Poster.d.ts +41 -0
  117. package/lib/plugins/poster/Poster.d.ts.map +1 -0
  118. package/lib/plugins/poster/Poster.js +186 -0
  119. package/lib/trace/LogTracer.d.ts +12 -0
  120. package/lib/trace/LogTracer.d.ts.map +1 -0
  121. package/lib/trace/LogTracer.js +17 -0
  122. package/lib/trace/SentryTracer.d.ts +11 -0
  123. package/lib/trace/SentryTracer.d.ts.map +1 -0
  124. package/lib/trace/SentryTracer.js +18 -0
  125. package/lib/trace/Tracer.d.ts +13 -0
  126. package/lib/trace/Tracer.d.ts.map +1 -0
  127. package/lib/trace/Tracer.js +15 -0
  128. package/lib/trace/index.d.ts +18 -0
  129. package/lib/trace/index.d.ts.map +1 -0
  130. package/lib/trace/index.js +27 -0
  131. package/lib/trace/types.d.ts +8 -0
  132. package/lib/trace/types.d.ts.map +1 -0
  133. package/lib/trace/types.js +1 -0
  134. package/lib/types.d.ts +82 -0
  135. package/lib/types.d.ts.map +1 -0
  136. package/lib/types.js +1 -0
  137. package/lib/utils/Logger.d.ts +23 -0
  138. package/lib/utils/Logger.d.ts.map +1 -0
  139. package/lib/utils/Logger.js +81 -0
  140. package/lib/utils/canAutoplay.d.ts +6 -0
  141. package/lib/utils/canAutoplay.d.ts.map +1 -0
  142. package/lib/utils/canAutoplay.js +30 -0
  143. package/lib/utils/errors.d.ts +2 -0
  144. package/lib/utils/errors.d.ts.map +1 -0
  145. package/lib/utils/errors.js +6 -0
  146. package/lib/utils/queryParams.d.ts +2 -0
  147. package/lib/utils/queryParams.d.ts.map +1 -0
  148. package/lib/utils/queryParams.js +4 -0
  149. package/lib/utils/scripts-load.d.ts +2 -0
  150. package/lib/utils/scripts-load.d.ts.map +1 -0
  151. package/lib/utils/scripts-load.js +20 -0
  152. package/lib/utils/types.d.ts +4 -0
  153. package/lib/utils/types.d.ts.map +1 -0
  154. package/lib/utils/types.js +1 -0
  155. package/lib/utils/utils.d.ts +7 -0
  156. package/lib/utils/utils.d.ts.map +1 -0
  157. package/lib/utils/utils.js +57 -0
  158. package/package.json +57 -0
  159. package/rollup.config.js +34 -0
  160. package/src/Player.ts +390 -0
  161. package/src/backend.ts +12 -0
  162. package/src/constants.ts +17 -0
  163. package/src/index.ts +9 -0
  164. package/src/internal.types.ts +126 -0
  165. package/src/playback.types.ts +15 -0
  166. package/src/plugins/dash-playback/DashPlayback.ts +808 -0
  167. package/src/plugins/dash-playback/_DashPlayback.js +688 -0
  168. package/src/plugins/hls-playback/HlsPlayback.ts +909 -0
  169. package/src/plugins/hls-playback/hls.js +706 -0
  170. package/src/trace/LogTracer.ts +23 -0
  171. package/src/trace/SentryTracer.ts +18 -0
  172. package/src/trace/Tracer.ts +27 -0
  173. package/src/trace/index.ts +32 -0
  174. package/src/trace/types.ts +7 -0
  175. package/src/types.ts +100 -0
  176. package/src/typings/@clappr/core/error_mixin.d.ts +15 -0
  177. package/src/typings/@clappr/core/events.d.ts +7 -0
  178. package/src/typings/@clappr/core/html5_video.d.ts +28 -0
  179. package/src/typings/@clappr/core/playback.d.ts +5 -0
  180. package/src/typings/@clappr/core/player.d.ts +83 -0
  181. package/src/typings/@clappr/plugins.d.ts +29 -0
  182. package/src/typings/clappr-zepto.xd.xts +44 -0
  183. package/src/typings/globals.d.ts +8 -0
  184. package/src/utils/Logger.ts +107 -0
  185. package/src/utils/canAutoplay.ts +39 -0
  186. package/src/utils/errors.ts +6 -0
  187. package/src/utils/queryParams.ts +5 -0
  188. package/src/utils/scripts-load.ts +26 -0
  189. package/src/utils/types.ts +5 -0
  190. package/src/utils/utils.ts +64 -0
  191. package/tsconfig.json +43 -0
  192. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,282 @@
1
+ import assert from 'assert';
2
+ import { Events, UICorePlugin, template } from '@clappr/core';
3
+ import { HlsEvents, } from 'hls.js';
4
+ import pluginHtml from '../../../assets/plugins/audio-selector/track-selector.ejs';
5
+ import '../../../assets/plugins/audio-selector/style.scss';
6
+ import audioArrow from '../../../assets/icons/old/quality-arrow.svg';
7
+ assert(process.env.CLAPPR_VERSION, 'CLAPPR_VERSION is required');
8
+ const CLAPPR_VERSION = process.env.CLAPPR_VERSION;
9
+ assert(process.env.VERSION, 'VERSION is required');
10
+ const VERSION = process.env.VERSION;
11
+ // const T = 'plugins.audio_selector';
12
+ const AUTO = 0;
13
+ export default class AudioSelector extends UICorePlugin {
14
+ selectedTrackId;
15
+ currentTrack = null;
16
+ tracks = [];
17
+ get name() {
18
+ return 'audio_selector';
19
+ }
20
+ get supportedVersion() {
21
+ return { min: CLAPPR_VERSION };
22
+ }
23
+ static get version() {
24
+ return VERSION;
25
+ }
26
+ get template() {
27
+ return template(pluginHtml);
28
+ }
29
+ get attributes() {
30
+ return {
31
+ 'class': this.name,
32
+ 'data-track-selector': ''
33
+ };
34
+ }
35
+ // constructor(core) {
36
+ // super(core);
37
+ // }
38
+ get events() {
39
+ return {
40
+ 'click [data-track-selector-select]': 'onTrackSelect',
41
+ 'click [data-track-selector-button]': 'onShowLevelSelectMenu'
42
+ };
43
+ }
44
+ bindEvents() {
45
+ this.listenTo(this.core, Events.CORE_READY, this.bindPlaybackEvents);
46
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
47
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
48
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectTrackMenu);
49
+ }
50
+ unBindEvents() {
51
+ // @ts-ignore
52
+ this.stopListening(this.core, Events.CORE_READY);
53
+ // @ts-ignore
54
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED);
55
+ // @ts-ignore
56
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED);
57
+ // @ts-ignore
58
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE);
59
+ }
60
+ bindPlaybackEvents() {
61
+ // this.currentTrack = {};
62
+ // this.removeAuto = false;
63
+ this.selectedTrackId = undefined;
64
+ const currentPlayback = this.core.activePlayback;
65
+ this.listenTo(currentPlayback, Events.PLAYBACK_STOP, this.onStop);
66
+ this.setupAudioTrackListeners();
67
+ }
68
+ setupAudioTrackListeners() {
69
+ const currentPlayback = this.core.activePlayback;
70
+ // TODO no-crutch:currentPlayback._hls
71
+ if (currentPlayback._hls) {
72
+ // TODO AUDIO_TRACKS_UPDATED
73
+ // currentPlayback._hls.on('hlsAudioTracksUpdated', (e, data) => {
74
+ currentPlayback._hls.on(HlsEvents.AUDIO_TRACKS_UPDATED, (e, data) => {
75
+ // let id = -1;
76
+ // for (const audioTrack of data.audioTracks) {
77
+ // if (audioTrack.default) {
78
+ // id = audioTrack.id;
79
+ // this.currentTrack = audioTrack;
80
+ // }
81
+ // }
82
+ const defaultTrack = data.audioTracks.find((track) => track.default);
83
+ if (defaultTrack) {
84
+ this.currentTrack = {
85
+ id: defaultTrack.id,
86
+ label: defaultTrack.name
87
+ };
88
+ }
89
+ this.fillTracks(data.audioTracks.map(p => ({
90
+ id: p.id,
91
+ label: p.name
92
+ })), defaultTrack?.id);
93
+ });
94
+ currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_SWITCHING, this.startTrackSwitch.bind(this));
95
+ currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_SWITCHED, this.updateCurrentTrack.bind(this));
96
+ currentPlayback._hls.on(HlsEvents.AUDIO_TRACK_LOADED, this.updateCurrentTrack.bind(this));
97
+ }
98
+ else {
99
+ this.listenToOnce(currentPlayback, Events.PLAYBACK_PLAY, () => {
100
+ const mediaElement = currentPlayback.$el.get(0);
101
+ // const { audioTracks } = currentPlayback.$el.get(0);
102
+ const audioTracks = mediaElement.audioTracks;
103
+ if (audioTracks && audioTracks.length) {
104
+ let index = 0;
105
+ const trackItems = [];
106
+ for (const audioTrack of audioTracks) {
107
+ if (audioTrack.enabled) {
108
+ const t = {
109
+ id: index,
110
+ label: audioTrack.label,
111
+ };
112
+ this.currentTrack = t;
113
+ trackItems.push(t);
114
+ index++;
115
+ }
116
+ }
117
+ audioTracks.addEventListener('change', () => this.updateCurrentTrackW3C());
118
+ this.fillTracks(trackItems, trackItems[0].id);
119
+ }
120
+ });
121
+ }
122
+ }
123
+ onStop() { }
124
+ reload() {
125
+ this.unBindEvents();
126
+ this.bindEvents();
127
+ this.bindPlaybackEvents();
128
+ }
129
+ shouldRender() {
130
+ if (!this.core.activeContainer) {
131
+ return false;
132
+ }
133
+ const currentPlayback = this.core.activePlayback;
134
+ if (!currentPlayback) {
135
+ return false;
136
+ }
137
+ const { audioTracks } = (currentPlayback.activePlayback._hls || currentPlayback.$el.get(0));
138
+ this.tracks = audioTracks;
139
+ // Only care if we have at least 2 to choose from
140
+ return this.tracks && this.tracks.length > 1;
141
+ }
142
+ render() {
143
+ if (this.shouldRender()) {
144
+ this.$el.html(this.template({ 'tracks': this.tracks, 'title': this.getTitle() }));
145
+ if (Object.prototype.hasOwnProperty.call(this.core.mediaControl, '$audioTracksSelector') &&
146
+ this.core.mediaControl.$audioTracksSelector.length > 0) {
147
+ this.core.mediaControl.$audioTracksSelector.append(this.el);
148
+ }
149
+ this.highlightCurrentTrack();
150
+ }
151
+ if (Object.prototype.hasOwnProperty.call(this.core.mediaControl, '$audioTracksSelector') &&
152
+ this.core.mediaControl.$audioTracksSelector.find('span.audio-arrow').length > 0) {
153
+ this.core.mediaControl.$audioTracksSelector.find('span.audio-arrow').append(audioArrow);
154
+ }
155
+ return this;
156
+ }
157
+ fillTracks(tracks, selected = AUTO) {
158
+ if (this.selectedTrackId === undefined) {
159
+ this.selectedTrackId = selected;
160
+ }
161
+ // this.tracks = levels.audioTracks;
162
+ // for (let i = 0; i < this.tracks.length; i++) {
163
+ // if (this.tracks[i].name && !this.tracks[i].label) {
164
+ // this.tracks[i].label = this.tracks[i].name;
165
+ // }
166
+ // }
167
+ this.tracks = tracks;
168
+ // Player.player.trigger('tracks', this.tracks);
169
+ // this.core.trigger('tracks', this.tracks);
170
+ this.render();
171
+ }
172
+ findTrackBy(id) {
173
+ return this.tracks.find((track) => track.id === id);
174
+ }
175
+ onTrackSelect(event) {
176
+ // this.selectedTrackId = parseInt(event.target.dataset.levelSelectorSelect, 10)
177
+ const id = event.target?.dataset?.trackSelectorSelect;
178
+ if (id) {
179
+ this.setIndexTrack(Number(id));
180
+ }
181
+ this.toggleContextMenu();
182
+ event.stopPropagation();
183
+ return false;
184
+ }
185
+ setIndexTrack(index) {
186
+ this.selectedTrackId = index;
187
+ if (this.core.activePlayback._hls) {
188
+ if (this.core.activePlayback._hls.audioTrack.id === this.selectedTrackId) {
189
+ return;
190
+ }
191
+ this.core.activePlayback._hls.audioTrack = this.selectedTrackId;
192
+ }
193
+ else {
194
+ const { audioTracks } = this.core.activePlayback.$el.get(0);
195
+ for (const track of audioTracks) {
196
+ track.enabled = track.id === this.selectedTrackId;
197
+ }
198
+ }
199
+ this.updateText(this.selectedTrackId);
200
+ }
201
+ onShowLevelSelectMenu() {
202
+ this.toggleContextMenu();
203
+ }
204
+ hideSelectTrackMenu() {
205
+ this.$('.audio_selector ul').hide();
206
+ }
207
+ toggleContextMenu() {
208
+ this.$('.audio_selector ul').toggle();
209
+ }
210
+ buttonElement() {
211
+ return this.$('.audio_selector button');
212
+ }
213
+ buttonElementText() {
214
+ return this.$('.audio_selector button .audio-text');
215
+ }
216
+ trackElement(id) {
217
+ return this.$('.audio_selector ul a' + (id !== undefined ? '[data-track-selector-select="' + id + '"]' : '')).parent();
218
+ }
219
+ getTitle() {
220
+ if (!this.tracks) {
221
+ return '';
222
+ }
223
+ const selectedTrackId = this.selectedTrackId || 0;
224
+ const selectedTrack = this.tracks[selectedTrackId];
225
+ return selectedTrack?.label || '';
226
+ }
227
+ startTrackSwitch() {
228
+ this.buttonElement().addClass('changing');
229
+ }
230
+ updateText(trackId) {
231
+ if (trackId === undefined) {
232
+ return;
233
+ }
234
+ const track = this.findTrackBy(trackId);
235
+ if (track) {
236
+ this.buttonElementText().text(track.label);
237
+ }
238
+ }
239
+ updateCurrentTrack(e, info) {
240
+ // if (!info) {
241
+ // const { audioTracks } = this.core.activePlayback.$el.get(0);
242
+ // for (const track of audioTracks) {
243
+ // if (track.enabled) {
244
+ // info = track;
245
+ // }
246
+ // }
247
+ // }
248
+ // if (!info) {
249
+ // return;
250
+ // }
251
+ // const track = this.findTrackBy(info.id);
252
+ // this.currentTrack = track ? track : null;
253
+ // this.selectedTrackId = track?.id;
254
+ // this.highlightCurrentTrack();
255
+ // this.buttonElement().removeClass('changing');
256
+ this.setCurrentTrack(info.id);
257
+ }
258
+ updateCurrentTrackW3C() {
259
+ const { audioTracks } = this.core.activePlayback.$el.get(0);
260
+ const index = audioTracks.findIndex((track) => track.enabled);
261
+ if (index >= 0) {
262
+ this.setCurrentTrack(index);
263
+ }
264
+ }
265
+ setCurrentTrack(index) {
266
+ const track = this.findTrackBy(index);
267
+ this.currentTrack = track ?? null;
268
+ this.selectedTrackId = index;
269
+ this.highlightCurrentTrack();
270
+ this.buttonElement().removeClass('changing');
271
+ }
272
+ highlightCurrentTrack() {
273
+ this.trackElement().removeClass('current');
274
+ this.trackElement().find('a').removeClass('gcore-skin-active');
275
+ if (this.currentTrack) {
276
+ const currentTrackElement = this.trackElement(this.currentTrack.id);
277
+ currentTrackElement.addClass('current');
278
+ currentTrackElement.find('a').addClass('gcore-skin-active');
279
+ }
280
+ this.updateText(this.selectedTrackId);
281
+ }
282
+ }
@@ -0,0 +1,33 @@
1
+ import { UICorePlugin } from '@clappr/core';
2
+ import '../../../assets/plugins/big-mute-button/big-mute-button.scss';
3
+ export default class BigMuteButton extends UICorePlugin {
4
+ private isBigMuteButtonHidden;
5
+ private _adIsPlaying;
6
+ private $bigMuteBtnContainer;
7
+ private $bigMuteButton;
8
+ get name(): string;
9
+ get supportedVersion(): {
10
+ min: string;
11
+ };
12
+ get template(): any;
13
+ get events(): {
14
+ 'click .big-mute-icon': string;
15
+ 'click .big-mute-icon-wrapper': string;
16
+ };
17
+ bindEvents(): void;
18
+ unBindEvents(): void;
19
+ private onCoreReady;
20
+ private onContainerVolume;
21
+ private onContainerStart;
22
+ private onPlaybackEnded;
23
+ private mediaControlRendered;
24
+ private onStartAd;
25
+ private onFinishAd;
26
+ private shouldRender;
27
+ render(): this;
28
+ private hideBigMuteBtn;
29
+ private showBigMuteBtn;
30
+ private destroyBigMuteBtn;
31
+ private handleBigMuteBtnClick;
32
+ }
33
+ //# sourceMappingURL=BigMuteButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigMuteButton.d.ts","sourceRoot":"","sources":["../../../src/plugins/big-mute-button/BigMuteButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAS,MAAM,cAAc,CAAC;AAMrE,OAAO,8DAA8D,CAAC;AAStE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,oBAAoB,CAA4B;IAExD,OAAO,CAAC,cAAc,CAA4B;IAElD,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAMD,IAAI,QAAQ,QAEX;IAED,IAAI,MAAM;;;MAKT;IAED,UAAU;IAWV,YAAY;IAcZ,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAmBpB,MAAM;IAqBN,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,qBAAqB;CAQ9B"}
@@ -0,0 +1,148 @@
1
+ import { Events, template, UICorePlugin, Utils } from '@clappr/core';
2
+ import assert from 'assert';
3
+ import { trace } from "../../trace/index.js";
4
+ import volumeMuteIcon from '../../../assets/icons/new/volume-off.svg';
5
+ import pluginHtml from '../../../assets/plugins/big-mute-button/big-mute-button.ejs';
6
+ import '../../../assets/plugins/big-mute-button/big-mute-button.scss';
7
+ assert(process.env.CLAPPR_VERSION, 'CLAPPR_VERSION is required');
8
+ const CLAPPR_VERSION = process.env.CLAPPR_VERSION;
9
+ const T = "plugins.big-mute-button";
10
+ export default class BigMuteButton extends UICorePlugin {
11
+ isBigMuteButtonHidden = false;
12
+ _adIsPlaying = false;
13
+ $bigMuteBtnContainer = null;
14
+ $bigMuteButton = null;
15
+ get name() {
16
+ return 'big-mute-button';
17
+ }
18
+ get supportedVersion() {
19
+ return { min: CLAPPR_VERSION };
20
+ }
21
+ // constructor(core) {
22
+ // super(core);
23
+ // }
24
+ get template() {
25
+ return template(pluginHtml);
26
+ }
27
+ get events() {
28
+ return {
29
+ 'click .big-mute-icon': 'handleBigMuteBtnClick',
30
+ 'click .big-mute-icon-wrapper': 'destroyBigMuteBtn',
31
+ };
32
+ }
33
+ bindEvents() {
34
+ super.bindEvents();
35
+ this.listenTo(this.core, Events.CORE_READY, this.onCoreReady);
36
+ this.listenTo(this.core, 'core:advertisement:start', this.onStartAd);
37
+ this.listenTo(this.core, 'core:advertisement:finish', this.onFinishAd);
38
+ trace(`${T} bindEvents`, {
39
+ mediacontrol: !!this.core.mediaControl,
40
+ });
41
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.mediaControlRendered);
42
+ }
43
+ unBindEvents() {
44
+ // @ts-ignore
45
+ this.stopListening(this.core, Events.CORE_READY);
46
+ this.stopListening(this.core, 'core:advertisement:start', this.onStartAd);
47
+ this.stopListening(this.core, 'core:advertisement:finish', this.onFinishAd);
48
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.mediaControlRendered);
49
+ const container = this.core.activeContainer;
50
+ if (container) {
51
+ this.stopListening(container.playback, Events.PLAYBACK_PLAY, this.render);
52
+ }
53
+ }
54
+ onCoreReady() {
55
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_VOLUME, this.onContainerVolume);
56
+ this.listenTo(this.core.activeContainer, Events.CONTAINER_READY, this.onContainerStart);
57
+ this.listenTo(this.core.activePlayback, Events.PLAYBACK_ENDED, this.onPlaybackEnded);
58
+ }
59
+ onContainerVolume(value) {
60
+ if (value !== 0) {
61
+ this.destroyBigMuteBtn();
62
+ }
63
+ }
64
+ onContainerStart() {
65
+ if (this.isBigMuteButtonHidden) {
66
+ this.showBigMuteBtn();
67
+ }
68
+ }
69
+ onPlaybackEnded() {
70
+ this.hideBigMuteBtn();
71
+ }
72
+ mediaControlRendered() {
73
+ const container = this.core.activeContainer;
74
+ trace(`${T} mediaControlRendered`, {
75
+ container: !!container,
76
+ });
77
+ if (container) {
78
+ this.listenTo(container.playback, Events.PLAYBACK_PLAY, () => {
79
+ trace(`${T} PLAYBACK_PLAY`);
80
+ this.render();
81
+ });
82
+ }
83
+ }
84
+ onStartAd() {
85
+ this._adIsPlaying = true;
86
+ if (this.$bigMuteBtnContainer) {
87
+ this.$bigMuteBtnContainer.addClass('hide');
88
+ }
89
+ }
90
+ onFinishAd() {
91
+ this._adIsPlaying = false;
92
+ if (this.$bigMuteBtnContainer) {
93
+ this.$bigMuteBtnContainer.removeClass('hide');
94
+ }
95
+ }
96
+ shouldRender() {
97
+ const container = this.core.activeContainer;
98
+ if (!container) {
99
+ return false;
100
+ }
101
+ const { autoPlay, wasMuted } = this.options;
102
+ const volume = container.volume;
103
+ trace(`${T} shouldRender`, {
104
+ autoPlay,
105
+ wasMuted,
106
+ volume,
107
+ });
108
+ return autoPlay && !wasMuted && volume === 0;
109
+ }
110
+ render() {
111
+ if (this.shouldRender()) {
112
+ trace(`${T} render`, {
113
+ el: !!this.$el,
114
+ });
115
+ this.$el.html(this.template());
116
+ this.$bigMuteBtnContainer = this.$el.find('.big-mute-icon-wrapper[data-big-mute]');
117
+ this._adIsPlaying && this.$bigMuteBtnContainer.addClass('hide');
118
+ this.$bigMuteButton = this.$bigMuteBtnContainer.find('.big-mute-icon');
119
+ this.$bigMuteButton.append(volumeMuteIcon);
120
+ const container = this.core.activeContainer;
121
+ container.$el.append(this.$el.get(0));
122
+ }
123
+ return this;
124
+ }
125
+ hideBigMuteBtn() {
126
+ this.isBigMuteButtonHidden = true;
127
+ this.$bigMuteBtnContainer?.addClass('hide');
128
+ }
129
+ showBigMuteBtn() {
130
+ this.isBigMuteButtonHidden = false;
131
+ if (this.$bigMuteBtnContainer) {
132
+ this.$bigMuteBtnContainer.removeClass('hide');
133
+ }
134
+ }
135
+ destroyBigMuteBtn(e) {
136
+ this.hideBigMuteBtn();
137
+ if (e && e.stopPropagation) {
138
+ e.stopPropagation();
139
+ }
140
+ this.destroy();
141
+ }
142
+ handleBigMuteBtnClick(e) {
143
+ const localVolume = Utils.Config.restore('volume');
144
+ const volume = !isNaN(localVolume) ? localVolume : 100;
145
+ this.core.mediaControl.setVolume(volume === 0 ? 100 : volume);
146
+ this.destroyBigMuteBtn(e);
147
+ }
148
+ }
@@ -0,0 +1,30 @@
1
+ import { UICorePlugin } from '@clappr/core';
2
+ import '../../../assets/plugins/bottom-gear/gear.scss';
3
+ import '../../../assets/plugins/bottom-gear/gear-sub-menu.scss';
4
+ export default class BottomGear extends UICorePlugin {
5
+ private isHd;
6
+ get name(): string;
7
+ get supportedVersion(): {
8
+ min: string;
9
+ };
10
+ get template(): any;
11
+ get attributes(): {
12
+ class: string;
13
+ 'data-track-selector': string;
14
+ };
15
+ get events(): {
16
+ 'click .button-gear': string;
17
+ };
18
+ get container(): any;
19
+ bindEvents(): void;
20
+ unBindEvents(): void;
21
+ private onActiveContainerChanged;
22
+ private bindContainerEvents;
23
+ reload(): void;
24
+ private highDefinitionUpdate;
25
+ render(): this;
26
+ refresh(): void;
27
+ toggleGearMenu(): void;
28
+ hide(): void;
29
+ }
30
+ //# sourceMappingURL=BottomGear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomGear.d.ts","sourceRoot":"","sources":["../../../src/plugins/bottom-gear/BottomGear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,cAAc,CAAC;AAI9D,OAAO,+CAA+C,CAAC;AACvD,OAAO,wDAAwD,CAAC;AAShE,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IAClD,OAAO,CAAC,IAAI,CAAS;IAErB,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAMD,IAAI,QAAQ,QAEX;IAED,IAAI,UAAU;;;MAKb;IAED,IAAI,MAAM;;MAIT;IAED,IAAI,SAAS,QAEZ;IAOD,UAAU;IASV,YAAY;IAOZ,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,mBAAmB;IAO3B,MAAM;IAKN,OAAO,CAAC,oBAAoB;IAS5B,MAAM;IAmBN,OAAO;IAKP,cAAc;IAId,IAAI;CAGL"}
@@ -0,0 +1,103 @@
1
+ import { UICorePlugin, template, Events } from '@clappr/core';
2
+ import assert from 'assert';
3
+ import pluginHtml from '../../../assets/plugins/bottom-gear/bottomgear.ejs';
4
+ import '../../../assets/plugins/bottom-gear/gear.scss';
5
+ import '../../../assets/plugins/bottom-gear/gear-sub-menu.scss';
6
+ import gearIcon from '../../../assets/icons/new/gear.svg';
7
+ import gearHdIcon from '../../../assets/icons/new/gear-hd.svg';
8
+ import { trace } from '../../trace/index.js';
9
+ assert(process.env.CLAPPR_VERSION, 'CLAPPR_VERSION is required');
10
+ const CLAPPR_VERSION = process.env.CLAPPR_VERSION;
11
+ export default class BottomGear extends UICorePlugin {
12
+ isHd = false;
13
+ get name() {
14
+ return 'gear';
15
+ }
16
+ get supportedVersion() {
17
+ return { min: CLAPPR_VERSION };
18
+ }
19
+ // static get version() {
20
+ // return process.env.VERSION;
21
+ // }
22
+ get template() {
23
+ return template(pluginHtml);
24
+ }
25
+ get attributes() {
26
+ return {
27
+ 'class': this.name,
28
+ 'data-track-selector': ''
29
+ };
30
+ }
31
+ get events() {
32
+ return {
33
+ 'click .button-gear': 'toggleGearMenu',
34
+ };
35
+ }
36
+ get container() {
37
+ return this.core && this.core.activeContainer;
38
+ }
39
+ // constructor(core) {
40
+ // super(core);
41
+ // this.isHd = false;
42
+ // }
43
+ bindEvents() {
44
+ this.listenTo(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
45
+ this.listenTo(this.core, 'gear:refresh', this.refresh);
46
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
47
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
48
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
49
+ this.bindContainerEvents();
50
+ }
51
+ unBindEvents() {
52
+ this.stopListening(this.core, Events.CORE_ACTIVE_CONTAINER_CHANGED, this.onActiveContainerChanged);
53
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
54
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
55
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hide);
56
+ }
57
+ onActiveContainerChanged() {
58
+ this.bindEvents();
59
+ this.bindContainerEvents();
60
+ }
61
+ bindContainerEvents() {
62
+ if (!this.container) {
63
+ return;
64
+ }
65
+ this.listenTo(this.container, Events.CONTAINER_HIGHDEFINITIONUPDATE, this.highDefinitionUpdate);
66
+ }
67
+ reload() {
68
+ this.unBindEvents();
69
+ this.bindEvents();
70
+ }
71
+ highDefinitionUpdate(isHd) {
72
+ this.isHd = isHd;
73
+ if (isHd) {
74
+ this.$el.find('.gear-icon').html(gearHdIcon);
75
+ }
76
+ else {
77
+ this.$el.find('.gear-icon').html(gearIcon);
78
+ }
79
+ }
80
+ render() {
81
+ const items = [
82
+ 'quality',
83
+ 'rate',
84
+ 'nerd',
85
+ ];
86
+ const icon = this.isHd ? gearHdIcon : gearIcon;
87
+ trace(`plugins.BottomGear render`, { items, isHd: this.isHd, mediaControl: !!this.core.mediaControl });
88
+ this.$el.html(this.template({ icon, items }));
89
+ this.core.mediaControl.$bottomGear?.html(this.el);
90
+ this.core.trigger('gear:rendered');
91
+ return this;
92
+ }
93
+ refresh() {
94
+ this.render();
95
+ this.$el.find('.gear-wrapper').show();
96
+ }
97
+ toggleGearMenu() {
98
+ this.$el.find('.gear-wrapper').toggle();
99
+ }
100
+ hide() {
101
+ this.$el.find('.gear-wrapper').hide();
102
+ }
103
+ }
@@ -0,0 +1,16 @@
1
+ import { ContainerPlugin } from '@clappr/core';
2
+ export default class ClickToPause extends ContainerPlugin {
3
+ private pointerEnabled;
4
+ private timer;
5
+ get name(): string;
6
+ get supportedVersion(): {
7
+ min: string | undefined;
8
+ };
9
+ get config(): any;
10
+ bindEvents(): void;
11
+ private click;
12
+ private settingsUpdate;
13
+ private togglePlay;
14
+ private clearTimer;
15
+ }
16
+ //# sourceMappingURL=ClickToPause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickToPause.d.ts","sourceRoot":"","sources":["../../../src/plugins/click-to-pause/ClickToPause.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AAOjE,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,eAAe;IACvD,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,KAAK,CAAsB;IAEnC,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAED,IAAI,MAAM,QAET;IAMD,UAAU;IAKV,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,UAAU;CAMnB"}