ravnur-player-public 3.4.4 → 3.4.5

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 (260) hide show
  1. package/dist/RavnurMediaPlayer.min.js +1 -1
  2. package/dist/cdn/RavnurMediaPlayer.min.js +1 -1
  3. package/package.json +10 -6
  4. package/.eslintignore +0 -7
  5. package/.eslintrc.js +0 -206
  6. package/.flowconfig +0 -3
  7. package/.vscode/extensions.json +0 -7
  8. package/.vscode/launch.json +0 -37
  9. package/.vscode/settings.json +0 -4
  10. package/README-Private.md +0 -54
  11. package/babel.config.js +0 -28
  12. package/bitbucket-pipelines.yml +0 -61
  13. package/cert.pem +0 -23
  14. package/demo/BaseM.mp4 +0 -0
  15. package/demo/HD.mp4 +0 -0
  16. package/demo/annotations.json +0 -50
  17. package/demo/annotations_ge.json +0 -50
  18. package/demo/base.mp3 +0 -0
  19. package/demo/cc_2125en.vtt +0 -4958
  20. package/demo/cc_en.vtt +0 -171
  21. package/demo/cc_ge.vtt +0 -178
  22. package/demo/chapters_en.vtt +0 -38
  23. package/demo/chapters_ge.vtt +0 -5
  24. package/demo/chapters_ge1.json +0 -23
  25. package/demo/hls/audio/stereo/en/128kbit.m3u8 +0 -912
  26. package/demo/hls/audio/stereo/none/128kbit.m3u8 +0 -912
  27. package/demo/hls/audio/surround/en/320kbit.m3u8 +0 -912
  28. package/demo/hls/playlist.m3u8 +0 -31
  29. package/demo/hls/video/10000kbit.m3u8 +0 -894
  30. package/demo/hls/video/1100kbit.m3u8 +0 -894
  31. package/demo/hls/video/1500kbit.m3u8 +0 -894
  32. package/demo/hls/video/250kbit.m3u8 +0 -894
  33. package/demo/hls/video/4000kbit.m3u8 +0 -894
  34. package/demo/hls/video/500kbit.m3u8 +0 -894
  35. package/demo/hls/video/6000kbit.m3u8 +0 -894
  36. package/demo/hls/video/800kbit.m3u8 +0 -894
  37. package/demo/hls.js +0 -5
  38. package/demo/hls.js.map +0 -1
  39. package/demo/hls.min.js +0 -2
  40. package/demo/hls.min.js.map +0 -1
  41. package/demo/playlist.m3u8 +0 -31
  42. package/demo/ravnur-flash-audio.swf +0 -0
  43. package/demo/ravnur-flash-video-hls.swf +0 -0
  44. package/demo/ravnur-flash-video.swf +0 -0
  45. package/demo/shaka/shaka-player.foo.debug.d.ts +0 -4532
  46. package/demo/shaka/shaka-player.foo.debug.externs.js +0 -3886
  47. package/demo/shaka/shaka-player.foo.debug.js +0 -1746
  48. package/demo/shaka/shaka-player.foo.debug.map +0 -8
  49. package/demo/shaka/wrapper.js +0 -7
  50. package/demo/test.html +0 -458
  51. package/jest.config.js +0 -4
  52. package/key.pem +0 -27
  53. package/lib/es5.js +0 -344
  54. package/lib/images/Spinner-small.gif +0 -0
  55. package/lib/images/close.png +0 -0
  56. package/lib/images/ic_check_box_black_24dp_1x.png +0 -0
  57. package/lib/images/ic_check_box_outline_blank_black_24dp_1x.png +0 -0
  58. package/lib/images/ic_chevron_left_white_24dp_1x.png +0 -0
  59. package/lib/images/ic_chevron_right_white_24dp_1x.png +0 -0
  60. package/lib/images/ic_closed_caption_white_24dp_1x.png +0 -0
  61. package/lib/images/ic_fast_forward_white_24dp_1x.png +0 -0
  62. package/lib/images/ic_fast_rewind_white_24dp_1x.png +0 -0
  63. package/lib/images/ic_fullscreen_exit_white_24dp_1x.png +0 -0
  64. package/lib/images/ic_fullscreen_white_24dp_1x.png +0 -0
  65. package/lib/images/ic_hd_white_24dp_1x.png +0 -0
  66. package/lib/images/ic_keyboard_arrow_left_black_24dp_1x.png +0 -0
  67. package/lib/images/ic_keyboard_arrow_right_black_24dp_1x.png +0 -0
  68. package/lib/images/ic_pause_white_24dp_1x.png +0 -0
  69. package/lib/images/ic_photo_white_24dp_1x.png +0 -0
  70. package/lib/images/ic_play_arrow_white_24dp_1x.png +0 -0
  71. package/lib/images/ic_refresh_white_24dp_1x.png +0 -0
  72. package/lib/images/ic_settings_white_24dp_1x.png +0 -0
  73. package/lib/images/ic_skip_next_white_24dp_1x.png +0 -0
  74. package/lib/images/ic_skip_previous_white_24dp_1x.png +0 -0
  75. package/lib/images/ic_toc_white_24dp_1x.png +0 -0
  76. package/lib/images/ic_volume_off_white_24dp_1x.png +0 -0
  77. package/lib/images/ic_volume_up_white_24dp_1x.png +0 -0
  78. package/lib/player4ie8.css +0 -225
  79. package/server.js +0 -29
  80. package/src/config/cc.js +0 -56
  81. package/src/config/i18n.js +0 -101
  82. package/src/config/options.js +0 -123
  83. package/src/config/playlist.js +0 -9
  84. package/src/config/source.js +0 -23
  85. package/src/config/statuses.js +0 -8
  86. package/src/config/styles.js +0 -16
  87. package/src/entity.js +0 -27
  88. package/src/events.js +0 -5
  89. package/src/extensions/annotations.js +0 -142
  90. package/src/extensions/audio-tarcks.js +0 -115
  91. package/src/extensions/backward.js +0 -45
  92. package/src/extensions/base.js +0 -73
  93. package/src/extensions/bottom-next.js +0 -50
  94. package/src/extensions/bottom-prev.js +0 -50
  95. package/src/extensions/buffering.js +0 -78
  96. package/src/extensions/c2pa.js +0 -350
  97. package/src/extensions/caption-search.js +0 -230
  98. package/src/extensions/cc.js +0 -874
  99. package/src/extensions/crawl.js +0 -118
  100. package/src/extensions/download.js +0 -411
  101. package/src/extensions/error.js +0 -47
  102. package/src/extensions/forward.js +0 -44
  103. package/src/extensions/fullscreen.js +0 -84
  104. package/src/extensions/help.js +0 -201
  105. package/src/extensions/helpers/FileSaver.js +0 -157
  106. package/src/extensions/helpers/clickOpener.js +0 -180
  107. package/src/extensions/helpers/opener.js +0 -30
  108. package/src/extensions/helpers/openerHeightChecker.js +0 -13
  109. package/src/extensions/helpers/popover.js +0 -33
  110. package/src/extensions/helpers/popoverPosition.js +0 -30
  111. package/src/extensions/helpers/scrollIntoView.js +0 -9
  112. package/src/extensions/helpers/storage.js +0 -20
  113. package/src/extensions/helpers/textContent.js +0 -6
  114. package/src/extensions/helpers/timeCodeToSeconds.js +0 -44
  115. package/src/extensions/helpers/transport.js +0 -43
  116. package/src/extensions/helpers/vtt-loader.js +0 -42
  117. package/src/extensions/index.js +0 -87
  118. package/src/extensions/live.js +0 -76
  119. package/src/extensions/mux.js +0 -57
  120. package/src/extensions/next-frame.js +0 -44
  121. package/src/extensions/next.js +0 -48
  122. package/src/extensions/placeholder.js +0 -241
  123. package/src/extensions/play.js +0 -102
  124. package/src/extensions/poster.js +0 -47
  125. package/src/extensions/prev-frame.js +0 -44
  126. package/src/extensions/prev.js +0 -48
  127. package/src/extensions/progress.js +0 -465
  128. package/src/extensions/resizer.js +0 -37
  129. package/src/extensions/settings.js +0 -367
  130. package/src/extensions/theater.js +0 -56
  131. package/src/extensions/title.js +0 -38
  132. package/src/extensions/toc.js +0 -334
  133. package/src/extensions/volume.js +0 -196
  134. package/src/flash/FlashPlugin.js +0 -301
  135. package/src/flash/MediaElement.js +0 -361
  136. package/src/flash/plugins.js +0 -32
  137. package/src/flash-detector.js +0 -66
  138. package/src/helpers/$t.js +0 -10
  139. package/src/helpers/binder.js +0 -11
  140. package/src/helpers/isAndroid.js +0 -5
  141. package/src/helpers/isBlackBerry.js +0 -5
  142. package/src/helpers/isCanvasSupported.js +0 -6
  143. package/src/helpers/isIE.js +0 -21
  144. package/src/helpers/isMobile.js +0 -10
  145. package/src/helpers/isWindows.js +0 -5
  146. package/src/helpers/isWindowsPhone.js +0 -5
  147. package/src/helpers/isiOS.js +0 -5
  148. package/src/html5media.js +0 -19
  149. package/src/index.js +0 -2
  150. package/src/logger.js +0 -31
  151. package/src/microevent.js +0 -65
  152. package/src/normalize-options.js +0 -139
  153. package/src/player.js +0 -864
  154. package/src/players/base.js +0 -209
  155. package/src/players/flash.js +0 -172
  156. package/src/players/hls.js +0 -278
  157. package/src/players/html.js +0 -205
  158. package/src/players/index.js +0 -59
  159. package/src/players/shaka.js +0 -219
  160. package/src/playlist.js +0 -362
  161. package/src/screenfull.js +0 -121
  162. package/src/state.js +0 -474
  163. package/src/static/es5.js +0 -344
  164. package/src/static/images/Spinner-small.gif +0 -0
  165. package/src/static/images/close.png +0 -0
  166. package/src/static/images/ic_check_box_black_24dp_1x.png +0 -0
  167. package/src/static/images/ic_check_box_outline_blank_black_24dp_1x.png +0 -0
  168. package/src/static/images/ic_chevron_left_white_24dp_1x.png +0 -0
  169. package/src/static/images/ic_chevron_right_white_24dp_1x.png +0 -0
  170. package/src/static/images/ic_closed_caption_white_24dp_1x.png +0 -0
  171. package/src/static/images/ic_fast_forward_white_24dp_1x.png +0 -0
  172. package/src/static/images/ic_fast_rewind_white_24dp_1x.png +0 -0
  173. package/src/static/images/ic_fullscreen_exit_white_24dp_1x.png +0 -0
  174. package/src/static/images/ic_fullscreen_white_24dp_1x.png +0 -0
  175. package/src/static/images/ic_hd_white_24dp_1x.png +0 -0
  176. package/src/static/images/ic_keyboard_arrow_left_black_24dp_1x.png +0 -0
  177. package/src/static/images/ic_keyboard_arrow_right_black_24dp_1x.png +0 -0
  178. package/src/static/images/ic_pause_white_24dp_1x.png +0 -0
  179. package/src/static/images/ic_play_arrow_white_24dp_1x.png +0 -0
  180. package/src/static/images/ic_refresh_white_24dp_1x.png +0 -0
  181. package/src/static/images/ic_settings_white_24dp_1x.png +0 -0
  182. package/src/static/images/ic_skip_next_white_24dp_1x.png +0 -0
  183. package/src/static/images/ic_skip_previous_white_24dp_1x.png +0 -0
  184. package/src/static/images/ic_toc_white_24dp_1x.png +0 -0
  185. package/src/static/images/ic_volume_off_white_24dp_1x.png +0 -0
  186. package/src/static/images/ic_volume_up_white_24dp_1x.png +0 -0
  187. package/src/static/player4ie8.css +0 -225
  188. package/src/styles/bplaylist.css.js +0 -124
  189. package/src/styles/index.js +0 -1966
  190. package/src/styles/playlist.css.js +0 -84
  191. package/src/styles/rplaylist.css.js +0 -98
  192. package/src/svgs.js +0 -111
  193. package/src/types/Logger.js +0 -10
  194. package/src/types/Options.js +0 -179
  195. package/src/types/Playlist.js +0 -3
  196. package/src/types/Source.js +0 -28
  197. package/src/types/State.js +0 -46
  198. package/src/types/Styles.js +0 -11
  199. package/src/types/TimeData.js +0 -8
  200. package/src/types/Translation.js +0 -69
  201. package/src/utils/absolutizeUrl.js +0 -9
  202. package/src/utils/addClass.js +0 -9
  203. package/src/utils/addEvent.js +0 -31
  204. package/src/utils/addProperty.js +0 -65
  205. package/src/utils/appendChild.js +0 -14
  206. package/src/utils/buff2hex.js +0 -5
  207. package/src/utils/contains.js +0 -33
  208. package/src/utils/createElement.js +0 -24
  209. package/src/utils/each.js +0 -34
  210. package/src/utils/escapeHTML.js +0 -8
  211. package/src/utils/existy.js +0 -4
  212. package/src/utils/extend.js +0 -17
  213. package/src/utils/filter.js +0 -16
  214. package/src/utils/find.js +0 -11
  215. package/src/utils/findIndex.js +0 -20
  216. package/src/utils/first.js +0 -5
  217. package/src/utils/get.js +0 -19
  218. package/src/utils/has.js +0 -5
  219. package/src/utils/hasClass.js +0 -6
  220. package/src/utils/head.js +0 -11
  221. package/src/utils/inRange.js +0 -16
  222. package/src/utils/index.js +0 -73
  223. package/src/utils/isArray.js +0 -4
  224. package/src/utils/isBoolean.js +0 -3
  225. package/src/utils/isElement.js +0 -7
  226. package/src/utils/isEmpty.js +0 -6
  227. package/src/utils/isEqual.js +0 -33
  228. package/src/utils/isEqualBuffer.js +0 -13
  229. package/src/utils/isFunction.js +0 -3
  230. package/src/utils/isNotEmpty.js +0 -5
  231. package/src/utils/isObject.js +0 -5
  232. package/src/utils/isString.js +0 -9
  233. package/src/utils/last.js +0 -4
  234. package/src/utils/map.js +0 -11
  235. package/src/utils/negate.js +0 -8
  236. package/src/utils/noop.js +0 -1
  237. package/src/utils/notExisty.js +0 -5
  238. package/src/utils/reduce.js +0 -8
  239. package/src/utils/remove.js +0 -7
  240. package/src/utils/removeClass.js +0 -8
  241. package/src/utils/removeEvent.js +0 -7
  242. package/src/utils/toArray.js +0 -7
  243. package/src/utils/toggleClass.js +0 -16
  244. package/src/utils/uidGenerator.js +0 -8
  245. package/src/utils/upperFirst.js +0 -4
  246. package/tests/extensions/__snapshots__/download.spec.js.snap +0 -226
  247. package/tests/extensions/__snapshots__/fullscreen.spec.js.snap +0 -30
  248. package/tests/extensions/__snapshots__/title.spec.js.snap +0 -16
  249. package/tests/extensions/download.spec.js +0 -111
  250. package/tests/extensions/fullscreen.spec.js +0 -56
  251. package/tests/extensions/title.spec.js +0 -35
  252. package/tests/mocks/assets/BaseM.mp4 +0 -0
  253. package/tests/mocks/assets/hls.min.js +0 -5
  254. package/tests/mocks/assets/styleMock.js +0 -1
  255. package/tests/mocks/base-player-options.js +0 -47
  256. package/tests/mocks/sources.js +0 -58
  257. package/tests/mocks/timedata/cc_en.vtt +0 -171
  258. package/tests/mocks/timedata/cc_ge.vtt +0 -178
  259. package/tests/utils/wait.js +0 -1
  260. package/webpack.config.js +0 -78
@@ -1,37 +0,0 @@
1
- import Base from './base';
2
-
3
- export default class Resizer extends Base {
4
- _w;
5
- _h;
6
-
7
- constructor(player, state, options) {
8
- super(player, state, options);
9
-
10
- this.onResize = this.onResize.bind(this);
11
-
12
- setTimeout(this.onResize);
13
- this.addEvent(window, 'resize', () => setTimeout(this.onResize) );
14
- this.bus.on('fullscreenchanged', () => setTimeout(this.onResize, 500) );
15
- this.bus.on('cclayoutchange', () => setTimeout(this.onResize) );
16
- }
17
-
18
- onResize() {
19
- const element = this.player.getElement();
20
-
21
- if (!element) {
22
- return;
23
- }
24
-
25
- const $el = element.parentNode ? element.parentNode : element;
26
-
27
- const width = Math.max(element.offsetWidth, $el.offsetWidth);
28
- const height = Math.max(element.offsetHeight, $el.offsetHeight, $el.parentNode.offsetHeight);
29
- const outerWidth = Math.max(element.offsetWidth, $el.parentNode.offsetWidth);
30
-
31
- if ( width !== this._w || height !== this._h ) {
32
- this._h = height;
33
- this._w = width;
34
- setTimeout(() => this.bus.emit('resizeplayer', { width, height, outerWidth }));
35
- }
36
- }
37
- }
@@ -1,367 +0,0 @@
1
- import BaseExtension from './base';
2
-
3
- import {
4
- createElement, addClass, removeClass, each, toArray, existy, isEqual, get, has, isFunction,
5
- find
6
- } from '../utils';
7
-
8
- import { storeData, getStoredData } from './helpers/storage';
9
-
10
- import opener from './helpers/clickOpener';
11
- import popover from './helpers/popover';
12
- import openerHeightChecker from './helpers/openerHeightChecker';
13
- import createSvg, { GEARS, BACK, NEXT } from '../svgs';
14
-
15
- const CN = 'rmp-ext-settings';
16
- const BUTTON_CN = `${CN}__button`;
17
- const SELECTOR_CN = `${CN}__selector`;
18
- const SELECTOR_OPEN_CN = `${SELECTOR_CN}--open`;
19
- const SELECTOR_SHOW_ADDITIONAL_CN = `${SELECTOR_CN}--additional`;
20
-
21
- const MAIN_STEP_CN = `${CN}__main-step`;
22
- const ADDITIONAL_STEP_CN = `${CN}__additional-step`;
23
-
24
- const ANNOTATIONS_CN = `${CN}__annotations`;
25
-
26
- const QUALITY_CN = `${CN}__quality`;
27
- const PLAYBACK_RATE_CN = `${CN}__playback-rate`;
28
-
29
- const BACK_BTN_CN = `${CN}__back`;
30
-
31
- const MORE_CN = `${CN}__more`;
32
- const CURRENT_VALUE_CN = `${CN}__current-value`;
33
-
34
- const ITEM_CN = `${CN}__item`;
35
- const ITEM_CHECKED_CN = `${ITEM_CN}--checked`;
36
-
37
- const ANNOTATIONS_STORAGE_KEY = 'annotationslang';
38
- const OFF_ITEM = { label: 'None', srclang: '' };
39
-
40
- const DEFAULT_RATES = [
41
- { rate: 0.5 },
42
- { rate: 0.8 },
43
- { rate: 1, labelKey: 'standard-playbackrate' },
44
- { rate: 1.5 },
45
- { rate: 2 },
46
- { rate: 3, hide: options => options.isLive },
47
- { rate: 5, hide: options => options.isAudio || options.isLive }
48
- ];
49
-
50
- export default class SettingsExtension extends BaseExtension {
51
- playbackRate = 1
52
- annLang = ''
53
-
54
- constructor(player, state, options) {
55
- super(player, state, options, ['loadedmetadata', 'annotationslang', 'qualitychange', 'timeupdate']);
56
- this.logger.debug('settings:extension:creating');
57
-
58
- this.render();
59
- this.init();
60
-
61
- this.logger.debug('settings:extension:created');
62
- }
63
-
64
- render() {
65
- /** @type {HTMLMediaElement} */
66
- this.$el = createElement('div', { class: CN });
67
-
68
- this.$button = createElement('button', { type: 'button', class: BUTTON_CN }, this.$el);
69
-
70
- this.$selector = createElement('div', { class: SELECTOR_CN }, this.$el);
71
-
72
- this.$mainStep = createElement('div', { class: MAIN_STEP_CN }, this.$selector);
73
-
74
- createSvg(this.$button, GEARS);
75
-
76
- if (this.options.showAnnotations) {
77
- this.$annotations = createElement('button', { type: 'button', class: ANNOTATIONS_CN }, this.$mainStep);
78
-
79
- const text = createElement('span', { }, this.$annotations);
80
- text.textContent = this.$t('annotations');
81
- addClass(this.$annotations, MORE_CN);
82
-
83
- _createMore(this.$annotations);
84
- this.$currentAnnotation = createElement('span', { class: CURRENT_VALUE_CN }, this.$annotations);
85
- }
86
-
87
- if (this.options.showQuality) {
88
- this.$quality = createElement('button', { type: 'button', class: QUALITY_CN }, this.$mainStep);
89
- const text = createElement('span', { }, this.$quality);
90
- text.textContent = this.$t('quality');
91
- addClass(this.$quality, MORE_CN);
92
-
93
- _createMore(this.$quality);
94
- this.$currentQuality = createElement('span', { class: CURRENT_VALUE_CN }, this.$quality);
95
- }
96
-
97
- if (this.options.showPlaybackRate) {
98
- this.$speed = createElement('button', { type: 'button', class: PLAYBACK_RATE_CN }, this.$mainStep);
99
- const text = createElement('span', { }, this.$speed);
100
- text.textContent = this.$t('playback-rate');
101
- addClass(this.$speed, MORE_CN);
102
- _createMore(this.$speed);
103
- this.$currentSpeed = createElement('span', { class: CURRENT_VALUE_CN }, this.$speed);
104
- this.$currentSpeed.textContent = this.$t('standard-playbackrate');
105
- }
106
-
107
- this.$additionalStep = createElement('div', { class: ADDITIONAL_STEP_CN }, this.$selector);
108
-
109
- this.$back = createElement('button', { type: 'button', class: BACK_BTN_CN }, this.$additionalStep);
110
- const $backSpan = createElement('span', { class: 'arrow' }, this.$back);
111
- createSvg($backSpan, BACK);
112
-
113
- this.$backText = createElement('span', {}, this.$back);
114
-
115
- this.$additional = createElement('div', { class: 'tab-content' }, this.$additionalStep);
116
- }
117
-
118
- init() {
119
- const $button = this.$button, $selector = this.$selector, reposition = false, closeOnClick = false;
120
- opener(this, {
121
- $button,
122
- $selector,
123
- SELECTOR_OPEN_CN,
124
- reposition,
125
- closeOnClick,
126
- firstFocusItemSelector: `.${MORE_CN}`,
127
- toMainFn: this._toMain.bind(this)
128
- });
129
-
130
- if (this.options.showAnnotations) {
131
- this.addEvent(this.$annotations, 'click', e => {
132
- e.preventDefault();
133
- e.stopPropagation();
134
- this._toAdditional(this.$t('annotations'));
135
- this._renderAnnotationsLanguages();
136
- });
137
-
138
- const sources = [OFF_ITEM].concat(this.options.annotations);
139
-
140
- const lang = getStoredData(ANNOTATIONS_STORAGE_KEY);
141
- let source = find(sources, s => s.srclang === lang);
142
-
143
- if (!source) {
144
- source = find(sources, s => s.default);
145
- }
146
- // 1 - because OFF is the first
147
- source = source || sources[1];
148
- this.bus.emit('annotationslang', source.srclang);
149
- }
150
-
151
- if (this.options.showQuality) {
152
- this.addEvent(this.$quality, 'click', e => {
153
- e.preventDefault();
154
- e.stopPropagation();
155
- this._toAdditional(this.$t('quality'));
156
- this._renderQualities();
157
- });
158
- }
159
-
160
- if (this.options.showPlaybackRate) {
161
- this.addEvent(this.$speed, 'click', () => {
162
- this._toAdditional(this.$t('playback-rate'));
163
- this._renderPlaybackRate();
164
- });
165
- }
166
-
167
- this.addEvent(this.$back, 'click', () => this._toMain() );
168
-
169
- popover(this, { $button, text: this.$t('settings') } );
170
- }
171
-
172
- _toAdditional(text) {
173
- const items = toArray(this.$additional.childNodes);
174
- each(items, btn => this.$additional.removeChild(btn) );
175
- addClass(this.$selector, SELECTOR_SHOW_ADDITIONAL_CN);
176
- this.$backText.textContent = text;
177
-
178
- openerHeightChecker(this.player, this.$additionalStep);
179
-
180
- // Accessability: Focus on first menu item
181
- this.$back.focus();
182
- }
183
-
184
- _renderQualities() {
185
- // fix RAV-411
186
- each(toArray(this.$additional.childNodes), btn => this.$additional.removeChild(btn) );
187
-
188
- const currentLevel = this.player.getLevel();
189
-
190
- const items = [];
191
- const levels = this.player.getLevels();
192
- levels.sort((a, b) => b.height - a.height);
193
-
194
- each(levels, level => {
195
- if (!(level.name || level.height)) {
196
- return;
197
- }
198
-
199
- const item = createElement('button', { type: 'button', class: ITEM_CN }, this.$additional);
200
- item.textContent = level.name || `${level.height}p`;
201
-
202
- // fuck ie
203
- if ( isEqual(level, currentLevel) || get(level, 'index', -1) === get(currentLevel, 'index', -2)) {
204
- addClass(item, ITEM_CHECKED_CN);
205
- if (!this.$currentQuality.textContent) {
206
- this.bus.emit('qualitychange', item.textContent);
207
- }
208
- }
209
-
210
- this.addEvent(item, 'click', () => {
211
- this.bus.emit('qualitychange', item.textContent);
212
- this.bus.emit('manualquality', item.textContent);
213
- each(items, el => removeClass(el, ITEM_CHECKED_CN) );
214
- addClass(item, ITEM_CHECKED_CN);
215
-
216
- this.player.setLevel(level);
217
- this._toMain();
218
- });
219
-
220
- items.push(item);
221
- });
222
- }
223
-
224
- _renderAnnotationsLanguages() {
225
- const items = [];
226
- const lang = this.annLang; // getStoredData(ANNOTATIONS_STORAGE_KEY);
227
- each([OFF_ITEM].concat(this.options.annotations), source => {
228
- const item = createElement('button', { type: 'button', class: ITEM_CN }, this.$additional);
229
- item.textContent = source.label;
230
-
231
- if (lang === source.srclang) {
232
- addClass(item, ITEM_CHECKED_CN);
233
- }
234
- this.addEvent(item, 'click', () => {
235
- storeData(ANNOTATIONS_STORAGE_KEY, source.srclang);
236
- this.bus.emit('annotationslang', source.srclang);
237
- this._toMain();
238
- });
239
- items.push(item);
240
- });
241
- }
242
-
243
- _mapRates() {
244
- const customRates = this.options.playbackRates;
245
-
246
- // Always keep standart rate
247
- if (customRates.indexOf(1) === -1) {
248
- customRates.push(1);
249
- }
250
-
251
- let rates = customRates.map(r => {
252
- const rate = Math.round(r * 100) / 100;
253
-
254
- if (rate === 1) {
255
- return { rate, labelKey: 'standard-playbackrate' };
256
- }
257
-
258
- if (rate === 5) {
259
- return { rate, hide: options => options.isAudio };
260
- }
261
-
262
- return { rate };
263
- });
264
-
265
- rates = rates.filter((r, i) => r.rate <= 5 && r.rate > 0).sort((a, b) => a.rate - b.rate);
266
-
267
- return rates;
268
- }
269
-
270
- _renderPlaybackRate() {
271
- const items = [];
272
- const rates = Array.isArray(this.options.playbackRates) ? this._mapRates() : DEFAULT_RATES;
273
-
274
- each(rates, rate => {
275
- if ( has(rate, 'hide') && isFunction(rate.hide) && rate.hide(this.options) ) {
276
- return;
277
- }
278
-
279
- const item = createElement('button', { type: 'button', class: ITEM_CN }, this.$additional);
280
- item.textContent = existy(rate.labelKey) ? this.$t(rate.labelKey) : rate.rate;
281
- if ( rate.rate === this.playbackRate ) {
282
- addClass(item, ITEM_CHECKED_CN);
283
- this.$currentSpeed.textContent = item.textContent;
284
- }
285
-
286
- this.addEvent(item, 'click', () => {
287
- each(items, el => removeClass(el, ITEM_CHECKED_CN) );
288
- addClass(item, ITEM_CHECKED_CN);
289
-
290
- this.player.setPlaybackRate(rate.rate);
291
- this.playbackRate = rate.rate;
292
- this.$currentSpeed.textContent = item.textContent;
293
- this._toMain();
294
- });
295
- items.push(item);
296
- });
297
- }
298
-
299
- _toMain() {
300
- removeClass(this.$selector, SELECTOR_SHOW_ADDITIONAL_CN);
301
- openerHeightChecker(this.player, this.$mainStep);
302
-
303
- // Accessability: Focus on first item of main page
304
- const mainStepItems = document.querySelectorAll(`.${MAIN_STEP_CN} > .${MORE_CN}`);
305
- if (mainStepItems[0]) mainStepItems[0].focus();
306
- }
307
-
308
- onAnnotationslang(lang) {
309
- const source = find([OFF_ITEM].concat(this.options.annotations), s => s.srclang === lang) || OFF_ITEM;
310
- this.annLang = source.srclang;
311
- this.$currentAnnotation.textContent = source.label;
312
- }
313
-
314
- onLoadedmetadata() {
315
- if (!this.options.showQuality) {
316
- return;
317
- }
318
-
319
- if (this.player.isMultiQuality()) {
320
- this._renderQualities();
321
- } else {
322
- this.$quality.style.display = 'none';
323
- }
324
- }
325
-
326
- onQualitychange(label) {
327
- if (this.$currentQuality) {
328
- this.$currentQuality.textContent = label;
329
- }
330
- }
331
-
332
- onTimeupdate() {
333
- if (!this.player.isLive?.()) {
334
- return;
335
- }
336
-
337
- this.player.setPlaybackRate(1);
338
- this.playbackRate = 1;
339
-
340
- if (this.options.showPlaybackRate) {
341
- this.$currentSpeed.textContent = this.$t('standard-playbackrate');
342
- }
343
- }
344
-
345
- getElement() {
346
- return this.$el;
347
- }
348
-
349
- destroy() {
350
- super.destroy();
351
-
352
- const parent = this.$el.parentNode;
353
-
354
- parent.removeChild(this.$el);
355
-
356
- this.$el = null;
357
- this.$button = null;
358
- this.$selector = null;
359
- }
360
-
361
- }
362
-
363
- function _createMore($parent) {
364
- const span = createElement('span', { class: 'arrow' }, $parent);
365
- createSvg(span, NEXT);
366
- return span;
367
- }
@@ -1,56 +0,0 @@
1
- // @flow
2
-
3
- import BaseExtension from './base';
4
-
5
- import BaseController from '../players/base';
6
- import StateEntity from '../state';
7
-
8
- import { createElement, toggleClass } from '../utils';
9
-
10
- import popover from './helpers/popover';
11
- import createSvg, { THEATER_MODE, EXIT_THEATER_MODE } from '../svgs';
12
-
13
- import type { Player$ExtensionOptions } from '../types/Options';
14
- import type { Player$State } from '../types/State';
15
-
16
- const CN = 'rmp-ext-theater';
17
- const EXIT_CN = `${CN}--exit`;
18
- const HIDDEN_CN = `${CN}--hidden`;
19
-
20
- export default class TheaterExtensions extends BaseExtension {
21
- $el: HTMLElement
22
-
23
- constructor(player: BaseController, state: StateEntity, options: Player$ExtensionOptions) {
24
- super(player, state, options, ['statechanged']);
25
- this.logger.debug('theater:extension:creating');
26
-
27
- this.render();
28
- this.addEvent(this.$el, 'click', this.toggle.bind(this));
29
- toggleClass(this.$el, EXIT_CN, state.isTheaterMode());
30
-
31
- this.logger.debug('theater:extension:created');
32
- }
33
-
34
- render() {
35
- this.$el = createElement('button', { type: 'button', class: CN });
36
-
37
- createSvg(this.$el, THEATER_MODE, { class: `${CN}__icon`});
38
- createSvg(this.$el, EXIT_THEATER_MODE, { class: `${CN}__exit-icon`});
39
-
40
- const text = () => this.$t(this.state.isTheaterMode() ? 'exit-theater' : 'theater');
41
- setTimeout(() => popover(this, { $button: this.$el, text }) );
42
- }
43
-
44
- toggle() {
45
- this.bus.emit('theaterchanging');
46
- }
47
-
48
- onStatechanged(state: Player$State) {
49
- toggleClass(this.$el, EXIT_CN, state.isTheaterMode);
50
- toggleClass(this.$el, HIDDEN_CN, state.isFullScreen);
51
- }
52
-
53
- getElement() {
54
- return this.$el;
55
- }
56
- }
@@ -1,38 +0,0 @@
1
- import BaseExtension from './base';
2
-
3
- import createElement from '../utils/createElement';
4
-
5
- const CN = 'rmp-ext-title';
6
- const TITLE_CN = `${CN}__title`;
7
-
8
- export default class TitleExtension extends BaseExtension {
9
- /** @type {HTMLElement} */
10
- $outer;
11
- constructor(player, state, options) {
12
- super(player, state, options);
13
- this.logger.debug('title:extension:creating');
14
-
15
- this.render();
16
-
17
- this.logger.debug('title:extension:created');
18
- }
19
-
20
- render() {
21
- this.$outer = createElement('div', { class: CN, 'data-testid': 'title' });
22
- const span = createElement('span', { class: TITLE_CN, title: this.options.title, tabindex: 0 }, this.$outer);
23
- span.textContent = this.options.title || '';
24
- }
25
-
26
- getOuter() {
27
- return this.$outer;
28
- }
29
-
30
- destroy() {
31
- super.destroy();
32
- if (this.$outer) {
33
- const parent = this.$outer.parentNode;
34
- parent.removeChild(this.$outer);
35
- this.$outer = null;
36
- }
37
- }
38
- }