ravnur-player-public 3.4.3 → 3.4.4

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/.eslintignore +7 -0
  2. package/.eslintrc.js +206 -0
  3. package/.flowconfig +3 -0
  4. package/.vscode/extensions.json +7 -0
  5. package/.vscode/launch.json +37 -0
  6. package/.vscode/settings.json +4 -0
  7. package/README-Private.md +54 -0
  8. package/babel.config.js +28 -0
  9. package/bitbucket-pipelines.yml +61 -0
  10. package/cert.pem +23 -0
  11. package/demo/BaseM.mp4 +0 -0
  12. package/demo/HD.mp4 +0 -0
  13. package/demo/annotations.json +50 -0
  14. package/demo/annotations_ge.json +50 -0
  15. package/demo/base.mp3 +0 -0
  16. package/demo/cc_2125en.vtt +4958 -0
  17. package/demo/cc_en.vtt +171 -0
  18. package/demo/cc_ge.vtt +178 -0
  19. package/demo/chapters_en.vtt +38 -0
  20. package/demo/chapters_ge.vtt +5 -0
  21. package/demo/chapters_ge1.json +23 -0
  22. package/demo/hls/audio/stereo/en/128kbit.m3u8 +912 -0
  23. package/demo/hls/audio/stereo/none/128kbit.m3u8 +912 -0
  24. package/demo/hls/audio/surround/en/320kbit.m3u8 +912 -0
  25. package/demo/hls/playlist.m3u8 +31 -0
  26. package/demo/hls/video/10000kbit.m3u8 +894 -0
  27. package/demo/hls/video/1100kbit.m3u8 +894 -0
  28. package/demo/hls/video/1500kbit.m3u8 +894 -0
  29. package/demo/hls/video/250kbit.m3u8 +894 -0
  30. package/demo/hls/video/4000kbit.m3u8 +894 -0
  31. package/demo/hls/video/500kbit.m3u8 +894 -0
  32. package/demo/hls/video/6000kbit.m3u8 +894 -0
  33. package/demo/hls/video/800kbit.m3u8 +894 -0
  34. package/demo/hls.js +5 -0
  35. package/demo/hls.js.map +1 -0
  36. package/demo/hls.min.js +2 -0
  37. package/demo/hls.min.js.map +1 -0
  38. package/demo/playlist.m3u8 +31 -0
  39. package/demo/ravnur-flash-audio.swf +0 -0
  40. package/demo/ravnur-flash-video-hls.swf +0 -0
  41. package/demo/ravnur-flash-video.swf +0 -0
  42. package/demo/shaka/shaka-player.foo.debug.d.ts +4532 -0
  43. package/demo/shaka/shaka-player.foo.debug.externs.js +3886 -0
  44. package/demo/shaka/shaka-player.foo.debug.js +1746 -0
  45. package/demo/shaka/shaka-player.foo.debug.map +8 -0
  46. package/demo/shaka/wrapper.js +7 -0
  47. package/demo/test.html +458 -0
  48. package/dist/RavnurMediaPlayer.min.js +1 -1
  49. package/dist/cdn/RavnurMediaPlayer.min.js +1 -1
  50. package/jest.config.js +4 -0
  51. package/key.pem +27 -0
  52. package/lib/es5.js +344 -0
  53. package/lib/images/Spinner-small.gif +0 -0
  54. package/lib/images/close.png +0 -0
  55. package/lib/images/ic_check_box_black_24dp_1x.png +0 -0
  56. package/lib/images/ic_check_box_outline_blank_black_24dp_1x.png +0 -0
  57. package/lib/images/ic_chevron_left_white_24dp_1x.png +0 -0
  58. package/lib/images/ic_chevron_right_white_24dp_1x.png +0 -0
  59. package/lib/images/ic_closed_caption_white_24dp_1x.png +0 -0
  60. package/lib/images/ic_fast_forward_white_24dp_1x.png +0 -0
  61. package/lib/images/ic_fast_rewind_white_24dp_1x.png +0 -0
  62. package/lib/images/ic_fullscreen_exit_white_24dp_1x.png +0 -0
  63. package/lib/images/ic_fullscreen_white_24dp_1x.png +0 -0
  64. package/lib/images/ic_hd_white_24dp_1x.png +0 -0
  65. package/lib/images/ic_keyboard_arrow_left_black_24dp_1x.png +0 -0
  66. package/lib/images/ic_keyboard_arrow_right_black_24dp_1x.png +0 -0
  67. package/lib/images/ic_pause_white_24dp_1x.png +0 -0
  68. package/lib/images/ic_photo_white_24dp_1x.png +0 -0
  69. package/lib/images/ic_play_arrow_white_24dp_1x.png +0 -0
  70. package/lib/images/ic_refresh_white_24dp_1x.png +0 -0
  71. package/lib/images/ic_settings_white_24dp_1x.png +0 -0
  72. package/lib/images/ic_skip_next_white_24dp_1x.png +0 -0
  73. package/lib/images/ic_skip_previous_white_24dp_1x.png +0 -0
  74. package/lib/images/ic_toc_white_24dp_1x.png +0 -0
  75. package/lib/images/ic_volume_off_white_24dp_1x.png +0 -0
  76. package/lib/images/ic_volume_up_white_24dp_1x.png +0 -0
  77. package/lib/player4ie8.css +225 -0
  78. package/package.json +3 -7
  79. package/server.js +29 -0
  80. package/src/config/cc.js +56 -0
  81. package/src/config/i18n.js +101 -0
  82. package/src/config/options.js +123 -0
  83. package/src/config/playlist.js +9 -0
  84. package/src/config/source.js +23 -0
  85. package/src/config/statuses.js +8 -0
  86. package/src/config/styles.js +16 -0
  87. package/src/entity.js +27 -0
  88. package/src/events.js +5 -0
  89. package/src/extensions/annotations.js +142 -0
  90. package/src/extensions/audio-tarcks.js +115 -0
  91. package/src/extensions/backward.js +45 -0
  92. package/src/extensions/base.js +73 -0
  93. package/src/extensions/bottom-next.js +50 -0
  94. package/src/extensions/bottom-prev.js +50 -0
  95. package/src/extensions/buffering.js +78 -0
  96. package/src/extensions/c2pa.js +350 -0
  97. package/src/extensions/caption-search.js +230 -0
  98. package/src/extensions/cc.js +874 -0
  99. package/src/extensions/crawl.js +118 -0
  100. package/src/extensions/download.js +411 -0
  101. package/src/extensions/error.js +47 -0
  102. package/src/extensions/forward.js +44 -0
  103. package/src/extensions/fullscreen.js +84 -0
  104. package/src/extensions/help.js +201 -0
  105. package/src/extensions/helpers/FileSaver.js +157 -0
  106. package/src/extensions/helpers/clickOpener.js +180 -0
  107. package/src/extensions/helpers/opener.js +30 -0
  108. package/src/extensions/helpers/openerHeightChecker.js +13 -0
  109. package/src/extensions/helpers/popover.js +33 -0
  110. package/src/extensions/helpers/popoverPosition.js +30 -0
  111. package/src/extensions/helpers/scrollIntoView.js +9 -0
  112. package/src/extensions/helpers/storage.js +20 -0
  113. package/src/extensions/helpers/textContent.js +6 -0
  114. package/src/extensions/helpers/timeCodeToSeconds.js +44 -0
  115. package/src/extensions/helpers/transport.js +43 -0
  116. package/src/extensions/helpers/vtt-loader.js +42 -0
  117. package/src/extensions/index.js +87 -0
  118. package/src/extensions/live.js +76 -0
  119. package/src/extensions/mux.js +57 -0
  120. package/src/extensions/next-frame.js +44 -0
  121. package/src/extensions/next.js +48 -0
  122. package/src/extensions/placeholder.js +241 -0
  123. package/src/extensions/play.js +102 -0
  124. package/src/extensions/poster.js +47 -0
  125. package/src/extensions/prev-frame.js +44 -0
  126. package/src/extensions/prev.js +48 -0
  127. package/src/extensions/progress.js +465 -0
  128. package/src/extensions/resizer.js +37 -0
  129. package/src/extensions/settings.js +367 -0
  130. package/src/extensions/theater.js +56 -0
  131. package/src/extensions/title.js +38 -0
  132. package/src/extensions/toc.js +334 -0
  133. package/src/extensions/volume.js +196 -0
  134. package/src/flash/FlashPlugin.js +301 -0
  135. package/src/flash/MediaElement.js +361 -0
  136. package/src/flash/plugins.js +32 -0
  137. package/src/flash-detector.js +66 -0
  138. package/src/helpers/$t.js +10 -0
  139. package/src/helpers/binder.js +11 -0
  140. package/src/helpers/isAndroid.js +5 -0
  141. package/src/helpers/isBlackBerry.js +5 -0
  142. package/src/helpers/isCanvasSupported.js +6 -0
  143. package/src/helpers/isIE.js +21 -0
  144. package/src/helpers/isMobile.js +10 -0
  145. package/src/helpers/isWindows.js +5 -0
  146. package/src/helpers/isWindowsPhone.js +5 -0
  147. package/src/helpers/isiOS.js +5 -0
  148. package/src/html5media.js +19 -0
  149. package/src/index.js +2 -0
  150. package/src/logger.js +31 -0
  151. package/src/microevent.js +65 -0
  152. package/src/normalize-options.js +139 -0
  153. package/src/player.js +864 -0
  154. package/src/players/base.js +209 -0
  155. package/src/players/flash.js +172 -0
  156. package/src/players/hls.js +278 -0
  157. package/src/players/html.js +205 -0
  158. package/src/players/index.js +59 -0
  159. package/src/players/shaka.js +219 -0
  160. package/src/playlist.js +362 -0
  161. package/src/screenfull.js +121 -0
  162. package/src/state.js +474 -0
  163. package/src/static/es5.js +344 -0
  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 +225 -0
  188. package/src/styles/bplaylist.css.js +124 -0
  189. package/src/styles/index.js +1966 -0
  190. package/src/styles/playlist.css.js +84 -0
  191. package/src/styles/rplaylist.css.js +98 -0
  192. package/src/svgs.js +111 -0
  193. package/src/types/Logger.js +10 -0
  194. package/src/types/Options.js +179 -0
  195. package/src/types/Playlist.js +3 -0
  196. package/src/types/Source.js +28 -0
  197. package/src/types/State.js +46 -0
  198. package/src/types/Styles.js +11 -0
  199. package/src/types/TimeData.js +8 -0
  200. package/src/types/Translation.js +69 -0
  201. package/src/utils/absolutizeUrl.js +9 -0
  202. package/src/utils/addClass.js +9 -0
  203. package/src/utils/addEvent.js +31 -0
  204. package/src/utils/addProperty.js +65 -0
  205. package/src/utils/appendChild.js +14 -0
  206. package/src/utils/buff2hex.js +5 -0
  207. package/src/utils/contains.js +33 -0
  208. package/src/utils/createElement.js +24 -0
  209. package/src/utils/each.js +34 -0
  210. package/src/utils/escapeHTML.js +8 -0
  211. package/src/utils/existy.js +4 -0
  212. package/src/utils/extend.js +17 -0
  213. package/src/utils/filter.js +16 -0
  214. package/src/utils/find.js +11 -0
  215. package/src/utils/findIndex.js +20 -0
  216. package/src/utils/first.js +5 -0
  217. package/src/utils/get.js +19 -0
  218. package/src/utils/has.js +5 -0
  219. package/src/utils/hasClass.js +6 -0
  220. package/src/utils/head.js +11 -0
  221. package/src/utils/inRange.js +16 -0
  222. package/src/utils/index.js +73 -0
  223. package/src/utils/isArray.js +4 -0
  224. package/src/utils/isBoolean.js +3 -0
  225. package/src/utils/isElement.js +7 -0
  226. package/src/utils/isEmpty.js +6 -0
  227. package/src/utils/isEqual.js +33 -0
  228. package/src/utils/isEqualBuffer.js +13 -0
  229. package/src/utils/isFunction.js +3 -0
  230. package/src/utils/isNotEmpty.js +5 -0
  231. package/src/utils/isObject.js +5 -0
  232. package/src/utils/isString.js +9 -0
  233. package/src/utils/last.js +4 -0
  234. package/src/utils/map.js +11 -0
  235. package/src/utils/negate.js +8 -0
  236. package/src/utils/noop.js +1 -0
  237. package/src/utils/notExisty.js +5 -0
  238. package/src/utils/reduce.js +8 -0
  239. package/src/utils/remove.js +7 -0
  240. package/src/utils/removeClass.js +8 -0
  241. package/src/utils/removeEvent.js +7 -0
  242. package/src/utils/toArray.js +7 -0
  243. package/src/utils/toggleClass.js +16 -0
  244. package/src/utils/uidGenerator.js +8 -0
  245. package/src/utils/upperFirst.js +4 -0
  246. package/tests/extensions/__snapshots__/download.spec.js.snap +226 -0
  247. package/tests/extensions/__snapshots__/fullscreen.spec.js.snap +30 -0
  248. package/tests/extensions/__snapshots__/title.spec.js.snap +16 -0
  249. package/tests/extensions/download.spec.js +111 -0
  250. package/tests/extensions/fullscreen.spec.js +56 -0
  251. package/tests/extensions/title.spec.js +35 -0
  252. package/tests/mocks/assets/BaseM.mp4 +0 -0
  253. package/tests/mocks/assets/hls.min.js +5 -0
  254. package/tests/mocks/assets/styleMock.js +1 -0
  255. package/tests/mocks/base-player-options.js +47 -0
  256. package/tests/mocks/sources.js +58 -0
  257. package/tests/mocks/timedata/cc_en.vtt +171 -0
  258. package/tests/mocks/timedata/cc_ge.vtt +178 -0
  259. package/tests/utils/wait.js +1 -0
  260. package/webpack.config.js +78 -0
@@ -0,0 +1,66 @@
1
+ /* eslint-disable */
2
+
3
+
4
+ const NAV = window.navigator;
5
+
6
+ const PluginDetector = {
7
+ plugins: [],
8
+
9
+ hasPluginVersion: (plugin, v) => {
10
+ const pv = PluginDetector.plugins[plugin];
11
+ v[1] = v[1] || 0;
12
+ v[2] = v[2] || 0;
13
+ return (pv[0] > v[0] || (pv[0] === v[0] && pv[1] > v[1]) || (pv[0] === v[0] && pv[1] === v[1] && pv[2] >= v[2]));
14
+ },
15
+
16
+ addPlugin: (p, pluginName, mimeType, activeX, axDetect) => {
17
+ PluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect);
18
+ },
19
+
20
+ detectPlugin: (pluginName, mimeType, activeX, axDetect) => {
21
+
22
+ let
23
+ version = [0, 0, 0],
24
+ description,
25
+ ax
26
+ ;
27
+
28
+ // Firefox, Webkit, Opera; avoid MS Edge since `plugins` cannot be accessed
29
+ if (NAV.plugins !== null && NAV.plugins !== undefined && typeof NAV.plugins[pluginName] === 'object') {
30
+ description = NAV.plugins[pluginName].description;
31
+ if (description && !(typeof NAV.mimeTypes !== 'undefined' && NAV.mimeTypes[mimeType] && !NAV.mimeTypes[mimeType].enabledPlugin)) {
32
+ version = description.replace(pluginName, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.');
33
+ for (let i = 0, total = version.length; i < total; i++) {
34
+ version[i] = parseInt(version[i].match(/\d+/), 10);
35
+ }
36
+ }
37
+ // Internet Explorer / ActiveX
38
+ } else if (window.ActiveXObject !== undefined) {
39
+ try {
40
+ ax = new ActiveXObject(activeX);
41
+ if (ax) {
42
+ version = axDetect(ax);
43
+ }
44
+ } catch (e) {
45
+ console.log(e);
46
+ }
47
+ }
48
+ return version;
49
+ }
50
+ };
51
+
52
+ PluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', (ax) => {
53
+ // adapted from SWFObject
54
+ let
55
+ version = [],
56
+ d = ax.GetVariable("$version")
57
+ ;
58
+
59
+ if (d) {
60
+ d = d.split(" ")[1].split(",");
61
+ version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
62
+ }
63
+ return version;
64
+ });
65
+
66
+ export default PluginDetector.hasPluginVersion('flash', [10, 0, 0]);
@@ -0,0 +1,10 @@
1
+ // @flow
2
+
3
+ import DEFAULT_I18N from '../config/i18n';
4
+
5
+ import type { Player$Translation } from '../types/Translation';
6
+
7
+ export default function $t(i18n: ?$Shape<Player$Translation> = {}, key: $Keys<Player$Translation>): string {
8
+ const val: ?string = i18n ? i18n[key] : null;
9
+ return val || DEFAULT_I18N[key];
10
+ }
@@ -0,0 +1,11 @@
1
+ // $Flow
2
+
3
+ import Entity from '../entity';
4
+
5
+ import each from '../utils/each';
6
+
7
+ export default function binder(ctx: Entity, funcs: string[]) {
8
+ each(funcs, fn => {
9
+ ctx[fn] = ctx[fn].bind(ctx);
10
+ });
11
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+
3
+ export default function isAndroid() {
4
+ return !!navigator.userAgent.match(/Android/i);
5
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+
3
+ export default function isBlackBerry() {
4
+ return !!navigator.userAgent.match(/(BlackBerry|BB10)/i);
5
+ }
@@ -0,0 +1,6 @@
1
+ // @flow
2
+
3
+ export default function isCanvasSupported() {
4
+ const elem = document.createElement('canvas');
5
+ return !!(elem.getContext && elem.getContext('2d'));
6
+ }
@@ -0,0 +1,21 @@
1
+ // @flow
2
+
3
+ const IE_8 = 8;
4
+ const NOT_FOUND_IDX = -1;
5
+
6
+ export default function isIE(): false | number {
7
+ const na = navigator.userAgent.toLowerCase();
8
+ return na.indexOf('msie') === NOT_FOUND_IDX ? false : parseInt(na.split('msie')[1], 10);
9
+ }
10
+
11
+ export function isIE8() {
12
+ return isIE() === IE_8;
13
+ }
14
+
15
+ export function isEdge() {
16
+ return 'msLaunchUri' in window.navigator && !('documentMode' in document);
17
+ }
18
+
19
+ export function isIE11() {
20
+ return !!window.MSInputMethodContext && !!document.documentMode;
21
+ }
@@ -0,0 +1,10 @@
1
+ // @flow
2
+
3
+ import isAndroid from './isAndroid';
4
+ import isiOS from './isiOS';
5
+ import isBlackBerry from './isBlackBerry';
6
+ import isWindowsPhone from './isWindowsPhone';
7
+
8
+ export default function isMobile() {
9
+ return isAndroid() || isiOS() || isBlackBerry() || isWindowsPhone();
10
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+
3
+ export function isWindows10() {
4
+ return !!navigator.userAgent.match(/(Windows NT 10)/i);
5
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+
3
+ export default function isWindowsPhone() {
4
+ return !!navigator.userAgent.match(/(IEMobile|Windows Phone)/i);
5
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+
3
+ export default function isiOS() {
4
+ return !!navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
5
+ }
@@ -0,0 +1,19 @@
1
+ export const properties = [
2
+ // GET/SET
3
+ 'volume', 'src', 'currentTime', 'muted',
4
+
5
+ // GET only
6
+ 'duration', 'paused', 'ended', 'levels', 'currentLevel',
7
+
8
+ // SET only
9
+ 'level',
10
+
11
+ // OTHERS
12
+ 'error', 'currentSrc', 'networkState', 'preload', 'buffered', 'bufferedBytes', 'bufferedTime',
13
+ 'readyState', 'seeking', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate',
14
+ 'played', 'seekable', 'autoplay', 'loop', 'controls'
15
+ ];
16
+
17
+ export const methods = [
18
+ 'load', 'play', 'pause', 'canPlayType'
19
+ ];
package/src/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import Player from './player';
2
+ export default Player;
package/src/logger.js ADDED
@@ -0,0 +1,31 @@
1
+ // @flow
2
+ import { noop, isFunction } from './utils';
3
+
4
+ import type { Player$Logger } from './types/Logger';
5
+
6
+ /* eslint no-console:0 */
7
+
8
+ export type Level = 0 | 1 | 2 | 3 | 4
9
+
10
+ const DEFAULT_LOG_LEVEL: Level = 2;
11
+
12
+ function _createLog(type: $Keys<Player$Logger>) {
13
+ return window.console ? _inner : noop;
14
+
15
+ function _inner(...args: Array<mixed>) {
16
+ if (type in console && isFunction(console[type])) {
17
+ args.unshift( (new Date()).toString() );
18
+ console[type].apply(console, args);
19
+ }
20
+ }
21
+ }
22
+
23
+ export default function createLogger(level: Level = DEFAULT_LOG_LEVEL): Player$Logger {
24
+ let idx = 1;
25
+ const logger = {};
26
+ logger.debug = ++idx > level ? _createLog('debug') : noop;
27
+ logger.log = ++idx > level ? _createLog('log') : noop;
28
+ logger.warn = ++idx > level ? _createLog('warn' ) : noop;
29
+ logger.error = ++idx > level ? _createLog('error') : noop;
30
+ return logger;
31
+ }
@@ -0,0 +1,65 @@
1
+ // @flow
2
+ import remove from './utils/remove';
3
+
4
+ type Callback = {
5
+ // eslint-disable-next-line
6
+ <T>(...args: Array<T>): mixed,
7
+ _safe_inner?: boolean
8
+ };
9
+
10
+ export default class MicroEvent {
11
+ _events: { [key: string]: Callback[] } = {}
12
+
13
+ on(event: string, fct: Callback) {
14
+ this._events[event] = this._events[event] || [];
15
+ this._events[event].push(fct);
16
+ }
17
+
18
+ off(event: string, fct: Callback) {
19
+ this._events = this._events || {};
20
+ if ( event in this._events === false ) {
21
+ return;
22
+ }
23
+ remove(this._events[event], fct);
24
+ }
25
+
26
+ once(event: string, fct: Callback) {
27
+ const callback = (...args: Array<mixed>) => {
28
+ this._call(fct, args);
29
+ this.off(event, callback);
30
+ };
31
+
32
+ this.on(event, callback);
33
+ }
34
+
35
+ emit(event: string, ...args: Array<mixed>) {
36
+ if ( event !== '*' ) {
37
+ // $FlowFixMe
38
+ this.emit.apply(this, ['*', event].concat(args));
39
+ }
40
+
41
+ this._events = this._events || {};
42
+ if ( event in this._events === false ) {
43
+ return;
44
+ }
45
+ for (var i = this._events[event].length - 1; i >= 0; i--) {
46
+ this._call(this._events[event][i], args);
47
+ }
48
+ }
49
+
50
+ destroy() {
51
+ this._events = {};
52
+ }
53
+
54
+ _call<T>(fnc: Callback, args: Array<T>) {
55
+ if (fnc._safe_inner) {
56
+ fnc.apply(this, args);
57
+ } else {
58
+ try {
59
+ fnc.apply(this, args);
60
+ } catch (e) {
61
+ console.error(e); // eslint-disable-line
62
+ }
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,139 @@
1
+ // @flow
2
+
3
+ import { getPlayerType, FLASH_TYPE } from './players';
4
+
5
+ import { extend, existy, notExisty, isNotEmpty, contains } from './utils';
6
+
7
+ import type { Player$CombineOptions, Player$InputOptions } from './types/Options';
8
+
9
+ import isMobile from './helpers/isMobile';
10
+ import isAndroid from './helpers/isAndroid';
11
+ import isCanvasSupported from './helpers/isCanvasSupported';
12
+ import { isIE8 } from './helpers/isIE';
13
+ import { isWindows10 } from './helpers/isWindows';
14
+ import isiOS from './helpers/isiOS';
15
+
16
+ import SOURCE_OPTIONS from './config/source';
17
+
18
+ const AUDIO_TYPES = [ 'audio/mp3', 'audio/mpeg', 'audio/mp4' ];
19
+
20
+ // eslint-disable-next-line
21
+ export default function normalize(common: $Shape<Player$InputOptions>, options: $Shape<Player$CombineOptions>): $Shape<Player$CombineOptions> {
22
+ options = extend({}, SOURCE_OPTIONS, common, options);
23
+ const custom: $Shape<Player$CombineOptions> = {
24
+ showAnnotations: existy(options.showAnnotations) ? options.showAnnotations : true,
25
+ showQuality: existy(options.showQuality) ? options.showQuality : true,
26
+ showPlaceholder: existy(options.showPlaceholder) ? options.showPlaceholder : true
27
+ };
28
+
29
+ custom.showPoster = options.showPoster && existy(options.poster);
30
+
31
+ if (options.showHelp) {
32
+ custom.showHelp = isCanvasSupported();
33
+ }
34
+
35
+ if (_isAudio(options.type) || options.isAudio) {
36
+ custom.showFullScreen = false;
37
+ custom.showClosedCaptions = false;
38
+ custom.showTOC = false;
39
+ custom.showAnnotations = false;
40
+ custom.showQuality = false;
41
+ custom.isAudio = true;
42
+ // =(
43
+ // options.showSettings = false;
44
+ }
45
+
46
+ if (isMobile()) {
47
+ custom.showVolume = false;
48
+ custom.showQuality = false;
49
+ custom.showHelp = false;
50
+ custom.preview = null;
51
+ custom.showTitle = false;
52
+ custom.showCCLayout = false;
53
+ custom.isMobile = true;
54
+
55
+ custom.extensionsVisibilityTimeout = 4000;
56
+ }
57
+
58
+ if (isAndroid()) {
59
+ custom.showPlaybackRate = false;
60
+ }
61
+
62
+ if (isIE8()) {
63
+ custom.showCCLayout = false;
64
+ custom.useMux = false;
65
+ }
66
+
67
+ if (!options.startTime && isiOS()) {
68
+ custom.startTime = 0.5;
69
+ }
70
+
71
+ if (notExisty(options.annotations)) {
72
+ custom.showAnnotations = false;
73
+ }
74
+
75
+ if (options.startTime && !custom.isAudio) {
76
+ custom.showPoster = false;
77
+ }
78
+
79
+ const type = getPlayerType(options);
80
+ if (type === FLASH_TYPE) {
81
+ custom.showPlaybackRate = false;
82
+ }
83
+
84
+ // if (options.showClosedCaptions) {
85
+ // custom.showClosedCaptions = existy(options.cc) && isNotEmpty(options.cc);
86
+ // }
87
+
88
+ // if (options.showTOC) {
89
+ // custom.showTOC = existy(options.chapters) && isNotEmpty(options.chapters);
90
+ // }
91
+
92
+ if (options.showAnnotations) {
93
+ custom.showAnnotations = existy(options.annotations) && isNotEmpty(options.annotations);
94
+ }
95
+
96
+ if ( custom.showAnnotations === false && custom.showPlaybackRate === false && custom.showQuality === false ) {
97
+ custom.showSettings = false;
98
+ options.showSettings = false;
99
+ }
100
+
101
+ custom.showDownloadCC = options.showDownloadCC && existy(options.cc) && isNotEmpty(options.cc);
102
+
103
+ if (options.showDownloadVideo) {
104
+ custom.showDownloadVideo = isWindows10() && existy(options.downloadURL) && isNotEmpty(options.downloadURL);
105
+ }
106
+
107
+ custom.showDownload = options.showDownload && (custom.showDownloadVideo || custom.showDownloadCC || !!options.downloadVideoURL);
108
+
109
+ custom.showCaptionSearch = options.showCaptionSearch && existy(options.cc) && isNotEmpty(options.cc);
110
+
111
+ if (!options.showExtensions) {
112
+ custom.showPlay = false;
113
+ custom.showProgress = false;
114
+ custom.showVolume = false;
115
+ custom.showFullScreen = false;
116
+ custom.showClosedCaptions = false;
117
+ custom.showTOC = false;
118
+ custom.showAnnotations = false;
119
+ custom.showQuality = false;
120
+ custom.showPoster = false;
121
+ custom.showPlaceholder = false;
122
+ custom.showPlaybackRate = false;
123
+ custom.showForward = false;
124
+ custom.showBackward = false;
125
+ custom.showSettings = false;
126
+ custom.showDownload = false;
127
+ custom.showHelp = false;
128
+ custom.showTitle = false;
129
+ custom.showNext = false;
130
+ }
131
+
132
+ const res = extend(options, custom);
133
+
134
+ return res;
135
+ }
136
+
137
+ function _isAudio(type) {
138
+ return contains(AUDIO_TYPES, type);
139
+ }