@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,48 @@
1
+ import { UICorePlugin } from '@clappr/core';
2
+ import '../../../assets/plugins/level-selector/style.scss';
3
+ import { ZeptoResult } from '../../utils/types';
4
+ export default class LevelSelector extends UICorePlugin {
5
+ private currentLevel;
6
+ private levels;
7
+ private levelLabels;
8
+ private removeAuto;
9
+ get name(): string;
10
+ get supportedVersion(): {
11
+ min: string;
12
+ };
13
+ get attributes(): {
14
+ class: string;
15
+ 'data-level-selector': string;
16
+ };
17
+ private currentText;
18
+ private selectedLevelId;
19
+ get events(): {
20
+ 'click .gear-sub-menu_btn': string;
21
+ 'click .gear-option': string;
22
+ 'click .go-back': string;
23
+ };
24
+ bindEvents(): void;
25
+ unBindEvents(): void;
26
+ private bindPlaybackEvents;
27
+ onStop(): void;
28
+ reload(): void;
29
+ shouldRender(): boolean;
30
+ render(): this;
31
+ private fillLevels;
32
+ configureLevelsLabels(): void;
33
+ private findLevelBy;
34
+ private onLevelSelect;
35
+ goBack(): void;
36
+ setIndexLevel(index: number): false | undefined;
37
+ onShowLevelSelectMenu(): void;
38
+ allLevelElements(): ZeptoResult;
39
+ levelElement(id?: number): any;
40
+ getTitle(): any;
41
+ startLevelSwitch(): void;
42
+ stopLevelSwitch(): void;
43
+ private updateText;
44
+ private getLevelLabel;
45
+ private updateCurrentLevel;
46
+ private highlightCurrentLevel;
47
+ }
48
+ //# sourceMappingURL=LevelSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LevelSelector.d.ts","sourceRoot":"","sources":["../../../src/plugins/level-selector/LevelSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAK,MAAM,cAAc,CAAC;AASjE,OAAO,mDAAmD,CAAC;AAI3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAuDhD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,OAAO,CAAC,YAAY,CAAkC;IAEtD,OAAO,CAAC,MAAM,CAA2B;IAEzC,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,CAAC,UAAU,CAAS;IAE3B,IAAI,IAAI,WAEP;IAED,IAAI,gBAAgB;;MAEnB;IAUD,IAAI,UAAU;;;MAKb;IAED,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,eAAe,CAAM;IAM7B,IAAI,MAAM;;;;MAMT;IAED,UAAU;IAQV,YAAY;IAQZ,OAAO,CAAC,kBAAkB;IAkB1B,MAAM;IAeN,MAAM;IAMN,YAAY;IAmBZ,MAAM;IA4BN,OAAO,CAAC,UAAU;IAkBlB,qBAAqB;IAmBrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAUrB,MAAM;IAIN,aAAa,CAAC,KAAK,EAAE,MAAM;IAmB3B,qBAAqB;IAcrB,gBAAgB,IAC0B,WAAW;IAGrD,YAAY,CAAC,EAAE,SAAK;IAIpB,QAAQ;IAIR,gBAAgB;IAKhB,eAAe;IAWf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,qBAAqB;CAc9B"}
@@ -0,0 +1,287 @@
1
+ import { Events, template, UICorePlugin } from '@clappr/core';
2
+ import assert from 'assert';
3
+ import buttonHtml from '../../../assets/plugins/level-selector/button.ejs';
4
+ import listHtml from '../../../assets/plugins/level-selector/list.ejs';
5
+ import hdIcon from '../../../assets/icons/new/hd.svg';
6
+ import arrowRightIcon from '../../../assets/icons/new/arrow-right.svg';
7
+ import arrowLeftIcon from '../../../assets/icons/new/arrow-left.svg';
8
+ import checkIcon from '../../../assets/icons/new/check.svg';
9
+ import '../../../assets/plugins/level-selector/style.scss';
10
+ import { trace } from '../../trace/index.js';
11
+ assert(process.env.CLAPPR_VERSION, 'CLAPPR_VERSION is required');
12
+ const CLAPPR_VERSION = process.env.CLAPPR_VERSION;
13
+ // assert(process.env.VERSION, 'VERSION is required');
14
+ // const VERSION: string = process.env.VERSION;
15
+ // import Player from '../../Player';
16
+ // import LogManager from '../../utils/LogManager';
17
+ const T = 'plugins.level_selector';
18
+ const AUTO = -1;
19
+ const NO_LEVEL = {
20
+ level: {
21
+ bitrate: 0,
22
+ // mediaType: 'video',
23
+ width: 0,
24
+ height: 0,
25
+ // scanType: '',
26
+ // qualityIndex: -1,
27
+ },
28
+ id: -1,
29
+ };
30
+ // type LevelInfo = {
31
+ // id: number;
32
+ // label: string;
33
+ // }
34
+ // const NO_LEVEL = {
35
+ // id: -1,
36
+ // label: 'Auto',
37
+ // };
38
+ export default class LevelSelector extends UICorePlugin {
39
+ currentLevel = null;
40
+ levels = [];
41
+ levelLabels = [];
42
+ removeAuto = false;
43
+ get name() {
44
+ return 'level_selector';
45
+ }
46
+ get supportedVersion() {
47
+ return { min: CLAPPR_VERSION };
48
+ }
49
+ // static get version() {
50
+ // return VERSION;
51
+ // }
52
+ // get template() {
53
+ // return template(pluginHtml);
54
+ // }
55
+ get attributes() {
56
+ return {
57
+ 'class': this.name,
58
+ 'data-level-selector': ''
59
+ };
60
+ }
61
+ currentText = 'Auto';
62
+ selectedLevelId = -1;
63
+ // constructor(core) {
64
+ // super(core);
65
+ // }
66
+ get events() {
67
+ return {
68
+ 'click .gear-sub-menu_btn': 'onLevelSelect',
69
+ 'click .gear-option': 'onShowLevelSelectMenu',
70
+ 'click .go-back': 'goBack',
71
+ };
72
+ }
73
+ bindEvents() {
74
+ this.listenTo(this.core, Events.CORE_READY, this.bindPlaybackEvents);
75
+ this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
76
+ // this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_RENDERED, this.render);
77
+ this.listenTo(this.core, 'gear:rendered', this.render);
78
+ // this.listenTo(this.core.mediaControl, Events.MEDIACONTROL_HIDE, this.hideSelectLevelMenu);
79
+ }
80
+ unBindEvents() {
81
+ this.stopListening(this.core, Events.CORE_READY, this.bindPlaybackEvents);
82
+ this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_CONTAINERCHANGED, this.reload);
83
+ // this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_RENDERED);
84
+ this.stopListening(this.core, 'gear:rendered', this.render);
85
+ // this.stopListening(this.core.mediaControl, Events.MEDIACONTROL_HIDE);
86
+ }
87
+ bindPlaybackEvents() {
88
+ // this.currentLevel = {};
89
+ this.currentLevel = NO_LEVEL;
90
+ this.removeAuto = false;
91
+ const currentPlayback = this.core.activePlayback;
92
+ this.listenTo(currentPlayback, Events.PLAYBACK_LEVELS_AVAILABLE, this.fillLevels);
93
+ this.listenTo(currentPlayback, Events.PLAYBACK_LEVEL_SWITCH_START, this.startLevelSwitch);
94
+ this.listenTo(currentPlayback, Events.PLAYBACK_LEVEL_SWITCH_END, this.stopLevelSwitch);
95
+ this.listenTo(currentPlayback, Events.PLAYBACK_BITRATE, this.updateCurrentLevel);
96
+ this.listenTo(currentPlayback, Events.PLAYBACK_STOP, this.onStop);
97
+ const playbackLevelsAvailableWasTriggered = currentPlayback.levels && currentPlayback.levels.length > 0;
98
+ playbackLevelsAvailableWasTriggered && this.fillLevels(currentPlayback.levels);
99
+ }
100
+ onStop() {
101
+ const currentPlayback = this.core.activePlayback;
102
+ this.listenToOnce(currentPlayback, Events.PLAYBACK_PLAY, () => {
103
+ trace(`${T} PLAYBACK_PLAY`, {
104
+ playbackType: currentPlayback.getPlaybackType(),
105
+ });
106
+ if (currentPlayback.getPlaybackType() === 'live') {
107
+ if (this.selectedLevelId !== -1) {
108
+ currentPlayback.currentLevel = this.findLevelBy(this.selectedLevelId) || NO_LEVEL;
109
+ }
110
+ }
111
+ });
112
+ }
113
+ reload() {
114
+ this.unBindEvents();
115
+ this.bindEvents();
116
+ this.bindPlaybackEvents();
117
+ }
118
+ shouldRender() {
119
+ if (!this.core.activeContainer) {
120
+ return false;
121
+ }
122
+ const currentPlayback = this.core.activePlayback;
123
+ if (!currentPlayback) {
124
+ return false;
125
+ }
126
+ // TODO typeof currentPlayback.currentLevel === 'number' should it be
127
+ const respondsToCurrentLevel = currentPlayback.currentLevel !== undefined;
128
+ // Only care if we have at least 2 to choose from
129
+ const hasLevels = !!(this.levels && this.levels.length > 1);
130
+ return respondsToCurrentLevel && hasLevels;
131
+ }
132
+ render() {
133
+ if (this.shouldRender()) {
134
+ // this.$el.html(this.template({ 'levels': this.levels, 'title': this.getTitle() }));
135
+ const t = template(buttonHtml);
136
+ this.$el.html(t({
137
+ currentText: this.currentText,
138
+ hdIcon,
139
+ arrowRightIcon,
140
+ }));
141
+ this.core.mediaControl.$el?.find('.gear-options-list [data-quality]').html(this.el);
142
+ // this.highlightCurrentLevel();
143
+ }
144
+ if (this.removeAuto) {
145
+ this.core.mediaControl
146
+ .$el
147
+ .find('.gear-options-list [data-quality]')
148
+ .find('[data-level-selector-select="-1"]')
149
+ .parent()
150
+ .remove();
151
+ }
152
+ return this;
153
+ }
154
+ fillLevels(levels, initialLevel = AUTO) {
155
+ trace('${T} fillLevels', { levels, initialLevel });
156
+ // Player.player.trigger('levels', levels);
157
+ // this.core.trigger('levels', levels);
158
+ // TODO fire directly on the plugin object
159
+ // Remove quality selector if it's not HLS
160
+ if (initialLevel !== -1) {
161
+ this.removeAuto = true;
162
+ }
163
+ // if (this.selectedLevelId === undefined) { // TODO compare with AUTO?
164
+ // this.selectedLevelId = initialLevel;
165
+ // }
166
+ this.levels = levels;
167
+ this.configureLevelsLabels();
168
+ this.render();
169
+ }
170
+ configureLevelsLabels() {
171
+ trace('${T} configureLevelsLabels', { options: this.core.options, levels: this.levels });
172
+ const labels = this.core.options.pluginSettings?.level_selector?.labels;
173
+ this.levelLabels = [];
174
+ if (labels) {
175
+ for (let i = 0; i < this.levels.length; i++) {
176
+ const level = this.levels[i];
177
+ const ll = level.level.width > level.level.height ? level.level.height : level.level.width;
178
+ const label = labels[ll] || `${ll}p`;
179
+ this.levelLabels.push(label);
180
+ }
181
+ }
182
+ trace('${T} configureLevelsLabels leave', { levelLabels: this.levelLabels });
183
+ }
184
+ findLevelBy(id) {
185
+ return this.levels.find((level) => level.id === id);
186
+ }
187
+ onLevelSelect(event) {
188
+ const selectedLevel = event.currentTarget?.dataset?.id;
189
+ trace('${T} onLevelSelect', { selectedLevel });
190
+ this.setIndexLevel(parseInt(event.currentTarget?.dataset?.id ?? "-1", 10));
191
+ // this.toggleContextMenu();
192
+ // event.stopPropagation();
193
+ // return false;
194
+ }
195
+ goBack() {
196
+ this.core.trigger('gear:refresh');
197
+ }
198
+ setIndexLevel(index) {
199
+ this.selectedLevelId = index;
200
+ if (this.core.activePlayback) {
201
+ this.core.activePlayback.trigger('playback:level:select:start');
202
+ }
203
+ if (this.core.activePlayback.currentLevel.id === this.selectedLevelId) {
204
+ return false;
205
+ }
206
+ this.core.activePlayback.currentLevel = this.selectedLevelId;
207
+ try {
208
+ this.updateText(this.selectedLevelId);
209
+ this.highlightCurrentLevel();
210
+ }
211
+ catch (error) {
212
+ // LogManager.exception(error);
213
+ reportError(error);
214
+ }
215
+ }
216
+ onShowLevelSelectMenu() {
217
+ const t = template(listHtml);
218
+ this.$el.html(t({
219
+ levels: this.levels,
220
+ labels: this.levelLabels,
221
+ arrowLeftIcon,
222
+ checkIcon,
223
+ }));
224
+ this.core.mediaControl.$el?.find('.gear-wrapper').html(this.el);
225
+ this.highlightCurrentLevel();
226
+ }
227
+ allLevelElements() {
228
+ return this.$('ul.gear-sub-menu li');
229
+ }
230
+ levelElement(id = -1) {
231
+ return this.$(`ul.gear-sub-menu a[data-id="${id}"]`).parent();
232
+ }
233
+ getTitle() {
234
+ return (this.core.options.level_selector || {}).title;
235
+ }
236
+ startLevelSwitch() {
237
+ // Player.player.trigger('startLevelSwitch');
238
+ this.levelElement(this.selectedLevelId).addClass('changing');
239
+ }
240
+ stopLevelSwitch() {
241
+ if (this.core.activePlayback) {
242
+ this.core.activePlayback.trigger('playback:level:select:end', {
243
+ label: this.getLevelLabel(this.selectedLevelId)
244
+ });
245
+ }
246
+ this.levelElement(this.selectedLevelId).removeClass('changing');
247
+ // Player.player.trigger('stopLevelSwitch');
248
+ }
249
+ updateText(level) {
250
+ if (level === undefined || isNaN(level)) {
251
+ return;
252
+ }
253
+ this.currentText = this.getLevelLabel(level);
254
+ }
255
+ getLevelLabel(id) {
256
+ if (id === -1) {
257
+ return 'Auto';
258
+ }
259
+ const index = this.levels.findIndex((l) => l.id === id);
260
+ if (index < 0) {
261
+ return 'Auto';
262
+ }
263
+ return this.levelLabels[index] || formatLevelLabel(this.levels[index]);
264
+ }
265
+ updateCurrentLevel(info) {
266
+ trace('${T} updateCurrentLevel', { info, levels: this.levels });
267
+ const level = this.findLevelBy(info.level);
268
+ this.currentLevel = level ? level : null;
269
+ this.highlightCurrentLevel();
270
+ // Player.player.trigger('updateCurrentLevel', info);
271
+ }
272
+ highlightCurrentLevel() {
273
+ trace('${T} highlightCurrentLevel', { currentLevel: this.currentLevel, selectedLevelId: this.selectedLevelId });
274
+ this.allLevelElements().removeClass('current');
275
+ this.allLevelElements().find('a').removeClass('gcore-skin-active');
276
+ if (this.currentLevel) {
277
+ const currentLevelElement = this.levelElement(this.selectedLevelId);
278
+ currentLevelElement.addClass('current');
279
+ currentLevelElement.find('a').addClass('gcore-skin-active');
280
+ }
281
+ this.updateText(this.selectedLevelId);
282
+ }
283
+ }
284
+ function formatLevelLabel(level) {
285
+ const h = level.level.width > level.level.height ? level.level.height : level.level.width;
286
+ return `${h}p`;
287
+ }
@@ -0,0 +1,186 @@
1
+ import { UICorePlugin, Player as PlayerClappr } from '@clappr/core';
2
+ import { ZeptoResult } from "../../utils/types";
3
+ import '../../../assets/plugins/media-control/media-control.scss';
4
+ import '../../../assets/plugins/media-control/plugins.scss';
5
+ type TimeProgress = {
6
+ start: number;
7
+ total: number;
8
+ current: number;
9
+ };
10
+ export default class MediaControl extends UICorePlugin {
11
+ private advertisementPlaying;
12
+ private buttonsColor;
13
+ private currentDurationValue;
14
+ private currentPositionValue;
15
+ private currentSeekBarPercentage;
16
+ private disabledClickableList;
17
+ private displayedDuration;
18
+ private displayedPosition;
19
+ private displayedSeekBarPercentage;
20
+ private draggingSeekBar;
21
+ private draggingVolumeBar;
22
+ private fullScreenOnVideoTagSupported;
23
+ private hideId;
24
+ private hideVolumeId;
25
+ private intendedVolume;
26
+ private isHD;
27
+ private keepVisible;
28
+ private kibo;
29
+ private lastMouseX;
30
+ private lastMouseY;
31
+ private persistConfig;
32
+ private rendered;
33
+ private settings;
34
+ private svgMask;
35
+ private userDisabled;
36
+ private userKeepVisible;
37
+ private verticalVolume;
38
+ private $audioTracksSelector;
39
+ private $bottomGear;
40
+ private $clipText;
41
+ private $clipTextContainer;
42
+ private $duration;
43
+ private $fullscreenToggle;
44
+ private $multiCameraSelector;
45
+ private $pip;
46
+ private $playPauseToggle;
47
+ private $playStopToggle;
48
+ private $playbackRate;
49
+ private $position;
50
+ private $seekBarContainer;
51
+ private $seekBarHover;
52
+ private $seekBarLoaded;
53
+ private $seekBarPosition;
54
+ private $seekBarScrubber;
55
+ private $subtitlesSelector;
56
+ private $volumeBarContainer;
57
+ private $volumeBarBackground;
58
+ private $volumeBarFill;
59
+ private $volumeBarScrubber;
60
+ private $volumeContainer;
61
+ private $volumeIcon;
62
+ get name(): string;
63
+ get supportedVersion(): {
64
+ min: string;
65
+ };
66
+ get disabled(): any;
67
+ get container(): any;
68
+ get playback(): any;
69
+ get attributes(): {
70
+ class: string;
71
+ 'data-media-control-skin-1': string;
72
+ };
73
+ get events(): {
74
+ 'click [data-play]': string;
75
+ 'click [data-pause]': string;
76
+ 'click [data-playpause]': string;
77
+ 'click [data-stop]': string;
78
+ 'click [data-playstop]': string;
79
+ 'click [data-fullscreen]': string;
80
+ 'click .bar-container[data-seekbar]': string;
81
+ 'click .bar-container[data-volume]': string;
82
+ 'click .drawer-icon[data-volume]': string;
83
+ 'mouseenter .drawer-container[data-volume]': string;
84
+ 'mouseleave .drawer-container[data-volume]': string;
85
+ 'mousedown .bar-container[data-volume]': string;
86
+ 'touchstart .bar-container[data-volume]': string;
87
+ 'mousemove .bar-container[data-volume]': string;
88
+ 'touchmove .bar-container[data-volume]': string;
89
+ 'mousedown .bar-scrubber[data-seekbar]': string;
90
+ 'mousedown .bar-container[data-seekbar]': string;
91
+ 'touchstart .bar-scrubber[data-seekbar]': string;
92
+ 'touchstart .bar-container[data-seekbar]': string;
93
+ 'mousemove .bar-container[data-seekbar]': string;
94
+ 'touchmove .bar-container[data-seekbar]': string;
95
+ 'mouseleave .bar-container[data-seekbar]': string;
96
+ 'touchend .bar-container[data-seekbar]': string;
97
+ 'mouseenter .media-control-layer[data-controls]': string;
98
+ 'mouseleave .media-control-layer[data-controls]': string;
99
+ };
100
+ get template(): any;
101
+ get volume(): any;
102
+ get muted(): boolean;
103
+ constructor(core: PlayerClappr);
104
+ getExternalInterface(): {
105
+ setVolume: (value: number, isInitialVolume?: boolean) => void;
106
+ getVolume: () => any;
107
+ };
108
+ bindEvents(): void;
109
+ bindContainerEvents(): void;
110
+ disable(): void;
111
+ enable(): void;
112
+ play(): void;
113
+ pause(): void;
114
+ stop(): void;
115
+ setInitialVolume(): void;
116
+ onVolumeChanged(): void;
117
+ onLoadedMetadataOnVideoTag(event: any): void;
118
+ updateVolumeUI(): void;
119
+ changeTogglePlay(): void;
120
+ mousemoveOnSeekBar(event: MouseEvent): void;
121
+ mouseleaveOnSeekBar(event: MouseEvent): void;
122
+ onVolumeClick(event: MouseEvent): void;
123
+ mousemoveOnVolumeBar(event: MouseEvent): void;
124
+ playerResize(size: {
125
+ width: number;
126
+ height: number;
127
+ }): void;
128
+ togglePlayPause(): boolean;
129
+ togglePlayStop(): void;
130
+ startSeekDrag(event: MouseEvent): void;
131
+ startVolumeDrag(event: MouseEvent): void;
132
+ stopDrag: (event: MouseEvent) => void;
133
+ updateDrag: (event: MouseEvent | TouchEvent) => void;
134
+ getVolumeFromUIEvent(event: MouseEvent | TouchEvent): number;
135
+ toggleMute(): void;
136
+ setVolume(value: number, isInitialVolume?: boolean): void;
137
+ toggleFullscreen(): void;
138
+ onActiveContainerChanged(): void;
139
+ showVolumeBar(): void;
140
+ hideVolumeBar(timeout?: number): void;
141
+ ended(): void;
142
+ updateProgressBar(progress: TimeProgress): void;
143
+ onTimeUpdate(timeProgress: TimeProgress): void;
144
+ renderSeekBar(): void;
145
+ drawDurationAndPosition(): void;
146
+ seek(event: MouseEvent): false | undefined;
147
+ setKeepVisible(): void;
148
+ resetKeepVisible(): void;
149
+ setUserKeepVisible(): void;
150
+ resetUserKeepVisible(): void;
151
+ isVisible(): boolean;
152
+ show(event?: MouseEvent): void;
153
+ hide(delay?: number): void;
154
+ updateCursorStyle(showing: boolean): void;
155
+ settingsUpdate(event: any): void;
156
+ getSettings(): any;
157
+ highDefinitionUpdate(isHD: boolean): void;
158
+ createCachedElements(): void;
159
+ resetIndicators(): void;
160
+ initializeIcons(): void;
161
+ setSeekPercentage(value: number): void;
162
+ seekRelative(delta: number): void;
163
+ bindKeyAndShow(key: string, callback: () => void): void;
164
+ bindKeyEvents(): void;
165
+ unbindKeyEvents(): void;
166
+ parseColors(): void;
167
+ applyButtonStyle(element: ZeptoResult | undefined): void;
168
+ destroy(): import("@clappr/core").UIObject;
169
+ configure(): void;
170
+ render(): this;
171
+ get bigPlayButton(): any;
172
+ handleFullScreenOnBtn(): void;
173
+ onStartAd(): void;
174
+ onFinishAd(): void;
175
+ setClipText(txt: unknown): void;
176
+ hideControllAds(): void;
177
+ setSVGMask(svg: string): void;
178
+ setMuted(value: boolean): void;
179
+ private static getPageX;
180
+ private static getPageY;
181
+ enableControlButton(): void;
182
+ disabledControlButton(): void;
183
+ isSeekEnabledForHtml5Playback(): any;
184
+ }
185
+ export {};
186
+ //# sourceMappingURL=MediaControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/media-control/MediaControl.ts"],"names":[],"mappings":"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"}