xgplayer 2.32.1 → 2.32.3

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 (188) hide show
  1. package/browser/controls/danmu.js +3 -1
  2. package/browser/controls/errorRetry.js +1 -1
  3. package/browser/controls/nativeTextTrack.js +1 -1
  4. package/browser/core_player.js +1 -1
  5. package/browser/core_player.js.map +1 -1
  6. package/browser/index.js +7 -5
  7. package/browser/index.js.map +1 -1
  8. package/browser/simple_player.js +1 -1
  9. package/browser/simple_player.js.map +1 -1
  10. package/dist/controls/danmu.js +3 -1
  11. package/dist/controls/errorRetry.js +1 -1
  12. package/dist/controls/nativeTextTrack.js +1 -1
  13. package/dist/core_player.js +6 -7
  14. package/dist/core_player.js.map +1 -1
  15. package/dist/index.js +2882 -1888
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.min.css +1 -0
  18. package/dist/index.min.js +2 -0
  19. package/dist/index.min.js.map +1 -0
  20. package/dist/simple_player.js +6 -7
  21. package/dist/simple_player.js.map +1 -1
  22. package/es/controls/danmu.js +3 -1
  23. package/es/controls/errorRetry.js +1 -1
  24. package/es/controls/nativeTextTrack.js +1 -1
  25. package/es/core_player.js +1 -1
  26. package/es/core_player.js.map +1 -1
  27. package/es/index.js +7 -5
  28. package/es/index.js.map +1 -1
  29. package/es/simple_player.js +1 -1
  30. package/es/simple_player.js.map +1 -1
  31. package/package.json +12 -3
  32. package/types/index.d.ts +0 -11
  33. package/postcss.config.js +0 -7
  34. package/src/bind/airplay.js +0 -10
  35. package/src/bind/cssFullscreen.js +0 -10
  36. package/src/bind/danmu.js +0 -10
  37. package/src/bind/definition.js +0 -10
  38. package/src/bind/download.js +0 -10
  39. package/src/bind/enter.js +0 -8
  40. package/src/bind/error.js +0 -8
  41. package/src/bind/errorRetry.js +0 -8
  42. package/src/bind/flex.js +0 -8
  43. package/src/bind/fullscreen.js +0 -10
  44. package/src/bind/i18n.js +0 -8
  45. package/src/bind/keyboard.js +0 -8
  46. package/src/bind/loading.js +0 -8
  47. package/src/bind/localPreview.js +0 -10
  48. package/src/bind/memoryPlay.js +0 -10
  49. package/src/bind/miniplayer.js +0 -10
  50. package/src/bind/mobile.js +0 -8
  51. package/src/bind/nativeTextTrack.js +0 -8
  52. package/src/bind/pc.js +0 -8
  53. package/src/bind/pip.js +0 -10
  54. package/src/bind/play.js +0 -10
  55. package/src/bind/playNext.js +0 -10
  56. package/src/bind/playbackRate.js +0 -8
  57. package/src/bind/poster.js +0 -8
  58. package/src/bind/progress.js +0 -8
  59. package/src/bind/reload.js +0 -10
  60. package/src/bind/replay.js +0 -10
  61. package/src/bind/rotate.js +0 -10
  62. package/src/bind/screenShot.js +0 -10
  63. package/src/bind/stallCheck.js +0 -8
  64. package/src/bind/start.js +0 -10
  65. package/src/bind/textTrack.js +0 -8
  66. package/src/bind/time.js +0 -8
  67. package/src/bind/volume.js +0 -10
  68. package/src/controls/airplay.js +0 -20
  69. package/src/controls/cssFullscreen.js +0 -49
  70. package/src/controls/danmu.js +0 -75
  71. package/src/controls/definition.js +0 -13
  72. package/src/controls/download.js +0 -28
  73. package/src/controls/errorRetry.js +0 -132
  74. package/src/controls/fullscreen.js +0 -145
  75. package/src/controls/keyboard.js +0 -214
  76. package/src/controls/localPreview.js +0 -32
  77. package/src/controls/memoryPlay.js +0 -14
  78. package/src/controls/miniplayer.js +0 -128
  79. package/src/controls/mobile.js +0 -100
  80. package/src/controls/pc.js +0 -123
  81. package/src/controls/pip.js +0 -52
  82. package/src/controls/play.js +0 -34
  83. package/src/controls/playNext.js +0 -29
  84. package/src/controls/reload.js +0 -24
  85. package/src/controls/replay.js +0 -30
  86. package/src/controls/rotate.js +0 -99
  87. package/src/controls/screenShot.js +0 -65
  88. package/src/controls/stallCheck.js +0 -38
  89. package/src/controls/start.js +0 -60
  90. package/src/controls/textTrack.js +0 -182
  91. package/src/controls/volume.js +0 -178
  92. package/src/controls.js +0 -36
  93. package/src/core_player.js +0 -13
  94. package/src/error.js +0 -74
  95. package/src/index.js +0 -57
  96. package/src/player.js +0 -553
  97. package/src/proxy.js +0 -495
  98. package/src/simple_player.js +0 -42
  99. package/src/skin/assets/airplay.svg +0 -1
  100. package/src/skin/assets/download.svg +0 -14
  101. package/src/skin/assets/exitCssFull.svg +0 -3
  102. package/src/skin/assets/exitFull.svg +0 -3
  103. package/src/skin/assets/loading.svg +0 -3
  104. package/src/skin/assets/panel.svg +0 -4
  105. package/src/skin/assets/pause.svg +0 -3
  106. package/src/skin/assets/play.svg +0 -3
  107. package/src/skin/assets/playNext.svg +0 -3
  108. package/src/skin/assets/reload.svg +0 -3
  109. package/src/skin/assets/replay.svg +0 -3
  110. package/src/skin/assets/requestCssFull.svg +0 -3
  111. package/src/skin/assets/requestFull.svg +0 -3
  112. package/src/skin/assets/rotate.svg +0 -11
  113. package/src/skin/assets/startPause.svg +0 -3
  114. package/src/skin/assets/startPlay.svg +0 -3
  115. package/src/skin/assets/volumeLarge.svg +0 -4
  116. package/src/skin/assets/volumeMuted.svg +0 -4
  117. package/src/skin/assets/volumeSmall.svg +0 -4
  118. package/src/skin/controls/airplay.js +0 -44
  119. package/src/skin/controls/cssFullscreen.js +0 -36
  120. package/src/skin/controls/danmu.js +0 -214
  121. package/src/skin/controls/definition.js +0 -251
  122. package/src/skin/controls/download.js +0 -29
  123. package/src/skin/controls/enter.js +0 -21
  124. package/src/skin/controls/error.js +0 -57
  125. package/src/skin/controls/flex.js +0 -13
  126. package/src/skin/controls/fullscreen.js +0 -43
  127. package/src/skin/controls/i18n.js +0 -168
  128. package/src/skin/controls/loading.js +0 -17
  129. package/src/skin/controls/localPreview.js +0 -18
  130. package/src/skin/controls/memoryPlay.js +0 -39
  131. package/src/skin/controls/miniplayer.js +0 -26
  132. package/src/skin/controls/nativeTextTrack.js +0 -153
  133. package/src/skin/controls/pip.js +0 -26
  134. package/src/skin/controls/play.js +0 -43
  135. package/src/skin/controls/playNext.js +0 -41
  136. package/src/skin/controls/playbackRate.js +0 -141
  137. package/src/skin/controls/poster.js +0 -18
  138. package/src/skin/controls/progress.js +0 -407
  139. package/src/skin/controls/reload.js +0 -29
  140. package/src/skin/controls/replay.js +0 -56
  141. package/src/skin/controls/rotate.js +0 -29
  142. package/src/skin/controls/screenShot.js +0 -27
  143. package/src/skin/controls/start.js +0 -62
  144. package/src/skin/controls/textTrack.js +0 -113
  145. package/src/skin/controls/time.js +0 -40
  146. package/src/skin/controls/volume.js +0 -63
  147. package/src/skin/index.js +0 -63
  148. package/src/skin/style/common/animation.scss +0 -16
  149. package/src/skin/style/common/svg-url.scss +0 -70
  150. package/src/skin/style/controls/airplay.scss +0 -35
  151. package/src/skin/style/controls/controls.scss +0 -40
  152. package/src/skin/style/controls/cssfullscreen.scss +0 -103
  153. package/src/skin/style/controls/danmu.scss +0 -331
  154. package/src/skin/style/controls/definition.scss +0 -76
  155. package/src/skin/style/controls/download.scss +0 -45
  156. package/src/skin/style/controls/enter.scss +0 -55
  157. package/src/skin/style/controls/error.scss +0 -34
  158. package/src/skin/style/controls/fullscreen.scss +0 -60
  159. package/src/skin/style/controls/icon.scss +0 -12
  160. package/src/skin/style/controls/live.scss +0 -9
  161. package/src/skin/style/controls/loading.scss +0 -44
  162. package/src/skin/style/controls/memoryPlay.scss +0 -28
  163. package/src/skin/style/controls/miniplayer.scss +0 -104
  164. package/src/skin/style/controls/pip.scss +0 -42
  165. package/src/skin/style/controls/placeholder.scss +0 -7
  166. package/src/skin/style/controls/play.scss +0 -79
  167. package/src/skin/style/controls/playNext.scss +0 -44
  168. package/src/skin/style/controls/playbackRate.scss +0 -82
  169. package/src/skin/style/controls/poster.scss +0 -19
  170. package/src/skin/style/controls/progress.scss +0 -182
  171. package/src/skin/style/controls/reload.scss +0 -43
  172. package/src/skin/style/controls/replay.scss +0 -46
  173. package/src/skin/style/controls/rotate.scss +0 -41
  174. package/src/skin/style/controls/screenShot.scss +0 -42
  175. package/src/skin/style/controls/start.scss +0 -78
  176. package/src/skin/style/controls/textTrack.scss +0 -87
  177. package/src/skin/style/controls/time.scss +0 -24
  178. package/src/skin/style/controls/tips.scss +0 -24
  179. package/src/skin/style/controls/videoProxy.scss +0 -6
  180. package/src/skin/style/controls/volume.scss +0 -143
  181. package/src/skin/style/index.scss +0 -88
  182. package/src/utils/sniffer.js +0 -47
  183. package/src/utils/url.js +0 -10
  184. package/src/utils/util.js +0 -358
  185. package/src/utils/xgplayerTimeRange.js +0 -17
  186. package/src/version.js +0 -7
  187. package/version.json +0 -3
  188. package/webpack.config.js +0 -163
@@ -1,43 +0,0 @@
1
- import { createDom, createImgBtn } from '../../utils/util'
2
- import RequestFullIcon from '../assets/requestFull.svg'
3
- import ExitFullIcon from '../assets/exitFull.svg'
4
- import '../style/controls/fullscreen.scss'
5
-
6
- let s_fullscreen = function () {
7
- let player = this
8
- let fullscreenBtn = player.config.fullscreenBtn ? player.config.fullscreenBtn : {}
9
- let btn
10
- if (fullscreenBtn.type === 'img') {
11
- btn = createImgBtn('fullscreen', fullscreenBtn.url.request, fullscreenBtn.width, fullscreenBtn.height)
12
- } else {
13
- btn = createDom('xg-fullscreen', `<xg-icon class="xgplayer-icon">
14
- <div class="xgplayer-icon-requestfull">${RequestFullIcon}</div>
15
- <div class="xgplayer-icon-exitfull">${ExitFullIcon}</div>
16
- </xg-icon>`, {}, 'xgplayer-fullscreen')
17
- }
18
-
19
- let tipsText = {}
20
- tipsText.requestfull = player.lang.FULLSCREEN_TIPS
21
- tipsText.exitfull = player.lang.EXITFULLSCREEN_TIPS
22
- let tips = createDom('xg-tips', `<span class="xgplayer-tip-requestfull">${tipsText.requestfull}</span>
23
- <span class="xgplayer-tip-exitfull">${tipsText.exitfull}</span>`, {}, 'xgplayer-tips')
24
- btn.appendChild(tips)
25
- player.once('ready', () => {
26
- if(player.controls) {
27
- player.controls.appendChild(btn)
28
- }
29
- });
30
-
31
- ['click', 'touchend'].forEach(item => {
32
- btn.addEventListener(item, function (e) {
33
- e.preventDefault()
34
- e.stopPropagation()
35
- player.userGestureTrigEvent('fullscreenBtnClick')
36
- })
37
- })
38
- }
39
-
40
- export default {
41
- name: 's_fullscreen',
42
- method: s_fullscreen
43
- }
@@ -1,168 +0,0 @@
1
- import { typeOf } from '../../utils/util'
2
-
3
- let s_i18n = function () {
4
- let player = this; let lang = {};
5
- lang.en = {
6
- HAVE_NOTHING: 'There is no information on whether audio/video is ready',
7
- HAVE_METADATA: 'Audio/video metadata is ready ',
8
- HAVE_CURRENT_DATA: 'Data about the current play location is available, but there is not enough data to play the next frame/millisecond',
9
- HAVE_FUTURE_DATA: 'Current and at least one frame of data is available',
10
- HAVE_ENOUGH_DATA: 'The available data is sufficient to start playing',
11
- NETWORK_EMPTY: 'Audio/video has not been initialized',
12
- NETWORK_IDLE: 'Audio/video is active and has been selected for resources, but no network is used',
13
- NETWORK_LOADING: 'The browser is downloading the data',
14
- NETWORK_NO_SOURCE: 'No audio/video source was found',
15
- MEDIA_ERR_ABORTED: 'The fetch process is aborted by the user',
16
- MEDIA_ERR_NETWORK: 'An error occurred while downloading',
17
- MEDIA_ERR_DECODE: 'An error occurred while decoding',
18
- MEDIA_ERR_SRC_NOT_SUPPORTED: 'Audio/video is not supported',
19
- REPLAY: 'Replay',
20
- ERROR: 'Network is offline',
21
- PLAY_TIPS: 'Play',
22
- PAUSE_TIPS: 'Pause',
23
- PLAYNEXT_TIPS: 'Play next',
24
- DOWNLOAD_TIPS: 'Download',
25
- ROTATE_TIPS: 'Rotate',
26
- RELOAD_TIPS: 'Reload',
27
- FULLSCREEN_TIPS: "Fullscreen",
28
- EXITFULLSCREEN_TIPS: 'Exit fullscreen',
29
- CSSFULLSCREEN_TIPS: 'Cssfullscreen',
30
- EXITCSSFULLSCREEN_TIPS: 'Exit cssfullscreen',
31
- TEXTTRACK: 'Caption',
32
- PIP: 'Pip',
33
- MINIPLAYER: 'Miniplayer',
34
- SCREENSHOT: 'Screenshot',
35
- LIVE: 'LIVE',
36
- OFF: 'Off',
37
- MINIPLAYER_DRAG: 'Click and hold to drag',
38
- AIRPLAY_TIPS: 'Airplay',
39
- }
40
- lang['zh-cn'] = {
41
- HAVE_NOTHING: '没有关于音频/视频是否就绪的信息',
42
- HAVE_METADATA: '音频/视频的元数据已就绪',
43
- HAVE_CURRENT_DATA: '关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/毫秒',
44
- HAVE_FUTURE_DATA: '当前及至少下一帧的数据是可用的',
45
- HAVE_ENOUGH_DATA: '可用数据足以开始播放',
46
- NETWORK_EMPTY: '音频/视频尚未初始化',
47
- NETWORK_IDLE: '音频/视频是活动的且已选取资源,但并未使用网络',
48
- NETWORK_LOADING: '浏览器正在下载数据',
49
- NETWORK_NO_SOURCE: '未找到音频/视频来源',
50
- MEDIA_ERR_ABORTED: '取回过程被用户中止',
51
- MEDIA_ERR_NETWORK: '当下载时发生错误',
52
- MEDIA_ERR_DECODE: '当解码时发生错误',
53
- MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音频/视频格式',
54
- REPLAY: '重播',
55
- ERROR: '网络连接似乎出现了问题',
56
- PLAY_TIPS: '播放',
57
- PAUSE_TIPS: '暂停',
58
- PLAYNEXT_TIPS: '下一集',
59
- DOWNLOAD_TIPS: '下载',
60
- ROTATE_TIPS: '旋转',
61
- RELOAD_TIPS: '重新载入',
62
- FULLSCREEN_TIPS: "进入全屏",
63
- EXITFULLSCREEN_TIPS: '退出全屏',
64
- CSSFULLSCREEN_TIPS: '进入样式全屏',
65
- EXITCSSFULLSCREEN_TIPS: '退出样式全屏',
66
- TEXTTRACK: '字幕',
67
- PIP: '画中画',
68
- MINIPLAYER: '迷你播放器',
69
- SCREENSHOT: '截图',
70
- LIVE: '正在直播',
71
- OFF: '关闭',
72
- MINIPLAYER_DRAG: '点击按住可拖动视频',
73
- AIRPLAY_TIPS: '隔空播放',
74
- }
75
- lang['zh-hk'] = {
76
- HAVE_NOTHING: '沒有關於音頻/視頻是否就緒的信息',
77
- HAVE_METADATA: '音頻/視頻的元數據已就緒',
78
- HAVE_CURRENT_DATA: '關於當前播放位置的數據是可用的,但沒有足夠的數據來播放下壹幀/毫秒',
79
- HAVE_FUTURE_DATA: '當前及至少下壹幀的數據是可用的',
80
- HAVE_ENOUGH_DATA: '可用數據足以開始播放',
81
- NETWORK_EMPTY: '音頻/視頻尚未初始化',
82
- NETWORK_IDLE: '音頻/視頻是活動的且已選取資源,但並未使用網絡',
83
- NETWORK_LOADING: '瀏覽器正在下載數據',
84
- NETWORK_NO_SOURCE: '未找到音頻/視頻來源',
85
- MEDIA_ERR_ABORTED: '取回過程被用戶中止',
86
- MEDIA_ERR_NETWORK: '當下載時發生錯誤',
87
- MEDIA_ERR_DECODE: '當解碼時發生錯誤',
88
- MEDIA_ERR_SRC_NOT_SUPPORTED: '不支持的音頻/視頻格式',
89
- REPLAY: '重播',
90
- ERROR: '網絡連接似乎出現了問題',
91
- PLAY_TIPS: '播放',
92
- PAUSE_TIPS: '暫停',
93
- PLAYNEXT_TIPS: '下壹集',
94
- DOWNLOAD_TIPS: '下載',
95
- ROTATE_TIPS: '旋轉',
96
- RELOAD_TIPS: '重新載入',
97
- FULLSCREEN_TIPS: "進入全屏",
98
- EXITFULLSCREEN_TIPS: '退出全屏',
99
- CSSFULLSCREEN_TIPS: '進入樣式全屏',
100
- EXITCSSFULLSCREEN_TIPS: '退出樣式全屏',
101
- TEXTTRACK: '字幕',
102
- PIP: '畫中畫',
103
- MINIPLAYER: '迷妳播放器',
104
- SCREENSHOT: '截圖',
105
- LIVE: '正在直播',
106
- OFF: '關閉',
107
- MINIPLAYER_DRAG: '點擊按住可拖動視頻',
108
- AIRPLAY_TIPS: '隔空播放',
109
- }
110
- lang['jp'] = {
111
- HAVE_NOTHING: 'オーディオ/ビデオが準備できているか情報がありません',
112
- HAVE_METADATA: 'オーディオ/ビデオのメタデータは準備できています',
113
- HAVE_CURRENT_DATA: '現在の再生位置に関するデータは利用可能ですが、次のフレーム/ミリ秒を再生するのに十分なデータがありません',
114
- HAVE_FUTURE_DATA: '現在、少なくとも次のフレームのデータが利用可能です',
115
- HAVE_ENOUGH_DATA: '利用可能なデータは再生を開始するのに十分です',
116
- NETWORK_EMPTY: 'オーディオ/ビデオが初期化されていません',
117
- NETWORK_IDLE: 'オーディオ/ビデオはアクティブでリソースが選択されていますが、ネットワークが使用されていません',
118
- NETWORK_LOADING: 'ブラウザーはデータをダウンロードしています',
119
- NETWORK_NO_SOURCE: 'オーディオ/ビデオ のソースが見つかりません',
120
- MEDIA_ERR_ABORTED: 'ユーザーによってフェッチプロセスが中止されました',
121
- MEDIA_ERR_NETWORK: 'ダウンロード中にエラーが発生しました',
122
- MEDIA_ERR_DECODE: 'デコード中にエラーが発生しました',
123
- MEDIA_ERR_SRC_NOT_SUPPORTED: 'オーディオ/ビデオ の形式がサポートされていません',
124
- REPLAY: 'リプレイ',
125
- ERROR: 'ネットワークの接続に問題が発生しました',
126
- PLAY_TIPS: 'プレイ',
127
- PAUSE_TIPS: '一時停止',
128
- PLAYNEXT_TIPS: '次をプレイ',
129
- DOWNLOAD_TIPS: 'ダウンロード',
130
- ROTATE_TIPS: '回転',
131
- RELOAD_TIPS: '再読み込み',
132
- FULLSCREEN_TIPS: "フルスクリーン",
133
- EXITFULLSCREEN_TIPS: 'フルスクリーンを終了',
134
- CSSFULLSCREEN_TIPS: 'シアターモード',
135
- EXITCSSFULLSCREEN_TIPS: 'シアターモードを終了',
136
- TEXTTRACK: '字幕',
137
- PIP: 'ミニプレーヤー',
138
- MINIPLAYER: 'ミニプレーヤー',
139
- SCREENSHOT: 'スクリーンショット',
140
- LIVE: '生放送',
141
- OFF: 'オフ',
142
- MINIPLAYER_DRAG: 'ボタンを押して働画をドラッグする',
143
- AIRPLAY_TIPS: '隔空放送',
144
- }
145
-
146
- Object.defineProperty(player, 'lang', {
147
- get: function () {
148
- if (player.config) {
149
- return lang[player.config.lang] || lang['en']
150
- } else {
151
- return lang['en']
152
- }
153
- },
154
- set: function (value) {
155
- if (typeOf(value) === 'Object') {
156
- Object.keys(value).forEach(key => {
157
- lang[key] = value[key]
158
- })
159
- }
160
- }
161
- })
162
-
163
- }
164
-
165
- export default {
166
- name: 's_i18n',
167
- method: s_i18n
168
- }
@@ -1,17 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import Loading from '../assets/loading.svg'
3
- import '../style/controls/loading.scss'
4
-
5
- let s_loading = function () {
6
- let player = this
7
- let root = player.root
8
- let container = createDom('xg-loading', `${Loading}`, {}, 'xgplayer-loading')
9
- player.once('ready', () => {
10
- root.appendChild(container)
11
- })
12
- }
13
-
14
- export default {
15
- name: 's_loading',
16
- method: s_loading
17
- }
@@ -1,18 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
-
3
- let s_localPreview = function () {
4
- let player = this
5
- if (player.config.preview && player.config.preview.uploadEl) {
6
- let preview = createDom('xg-preview', '<input type="file">', {}, 'xgplayer-preview')
7
- let upload = preview.querySelector('input')
8
- player.config.preview.uploadEl.appendChild(preview)
9
- upload.onchange = function () {
10
- player.emit('upload', upload)
11
- }
12
- }
13
- }
14
-
15
- export default {
16
- name: 's_localPreview',
17
- method: s_localPreview
18
- }
@@ -1,39 +0,0 @@
1
- import { createDom, format } from '../../utils/util'
2
- import '../style/controls/memoryPlay.scss'
3
-
4
- let s_memoryPlay = function () {
5
- let player = this
6
- let lastPlayTime = player.config.lastPlayTime || 0
7
- let lastPlayTimeHideDelay = player.config.lastPlayTimeHideDelay || 0
8
- let dom = null
9
- if (lastPlayTime <= 0) {
10
- return
11
- }
12
- dom = createDom('xg-memoryplay', `<div class="xgplayer-memoryplay-spot"><div class="xgplayer-progress-tip">您上次观看到 <span class="xgplayer-lasttime">${format(lastPlayTime)}</span> ,为您自动续播 <span class="btn-close"><svg viewBox="64 64 896 896" focusable="false" class="" data-icon="close" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 0 0 203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path></svg></span></div></div>`, {}, 'xgplayer-memoryplay');
13
- dom.addEventListener('mouseover', (e) => {
14
- e.stopPropagation();
15
- });
16
- const removeFunc = () => {
17
- dom && dom.parentNode && dom.parentNode.removeChild(dom)
18
- dom = null
19
- }
20
- dom.querySelector('.xgplayer-progress-tip .btn-close').addEventListener('click', removeFunc)
21
- const handlePlay = () => {
22
- if(lastPlayTimeHideDelay > 0) {
23
- player.root.appendChild(dom);
24
- }
25
- player.emit('memoryPlayStart', lastPlayTime);
26
- if (lastPlayTimeHideDelay > 0) {
27
- setTimeout(() => {
28
- removeFunc()
29
- }, lastPlayTimeHideDelay * 1000)
30
- }
31
- }
32
- player.once('playing', handlePlay)
33
- player.once('ended', removeFunc)
34
- }
35
-
36
- export default {
37
- name: 's_memoryPlay',
38
- method: s_memoryPlay
39
- }
@@ -1,26 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import '../style/controls/miniplayer.scss'
3
-
4
- let s_miniplayer = function () {
5
- let player = this
6
- if (!player.config.miniplayer) { return }
7
- let miniplayer = player.lang.MINIPLAYER
8
- let btn = createDom('xg-miniplayer', `<p class="name"><span>${miniplayer}</span></p>`, {tabindex: 9}, 'xgplayer-miniplayer')
9
-
10
- player.once('ready', () => {
11
- player.controls.appendChild(btn);
12
- });
13
-
14
- ['click', 'touchend'].forEach(item => {
15
- btn.addEventListener(item, e => {
16
- e.preventDefault()
17
- e.stopPropagation()
18
- player.userGestureTrigEvent('miniplayerBtnClick')
19
- })
20
- })
21
- }
22
-
23
- export default {
24
- name: 's_miniplayer',
25
- method: s_miniplayer
26
- }
@@ -1,153 +0,0 @@
1
- import Player from '../../player'
2
- import '../style/controls/textTrack.scss'
3
-
4
- let s_nativeTextTrack = function () {
5
- if (!this.config.nativeTextTrack) {
6
- return
7
- }
8
- let player = this
9
- let root = player.root
10
- let util = Player.util
11
- let container = util.createDom('xg-texttrack', '', {tabindex: 7}, 'xgplayer-texttrack')
12
- let list = player.config.nativeTextTrack
13
- if (list && Array.isArray(list) && list.length > 0) {
14
- util.addClass(player.root, 'xgplayer-is-texttrack')
15
- player.once('canplay', function () {
16
- let tmp = ['<ul>']
17
- tmp.push(`<li class='${this.textTrackShowDefault ? '' : 'selected'}'}'>${player.lang.OFF}</li>`)
18
- list.forEach(item => {
19
- tmp.push(`<li class='${item.default && this.textTrackShowDefault ? 'selected' : ''}'>${item.label}</li>`)
20
- })
21
- let controlText = player.lang.TEXTTRACK
22
- tmp.push(`</ul><p class="name">${controlText}</p>`)
23
-
24
- let urlInRoot = root.querySelector('.xgplayer-texttrack')
25
- if (urlInRoot) {
26
- urlInRoot.innerHTML = tmp.join('')
27
- let cur = urlInRoot.querySelector('.name')
28
- if (!player.config.textTrackActive || player.config.textTrackActive === 'hover') {
29
- cur.addEventListener('mouseenter', e => {
30
- e.preventDefault()
31
- e.stopPropagation()
32
- util.addClass(root, 'xgplayer-texttrack-active')
33
- urlInRoot.focus()
34
- })
35
- }
36
- } else {
37
- container.innerHTML = tmp.join('')
38
- let cur = container.querySelector('.name')
39
- if (!player.config.textTrackActive || player.config.textTrackActive === 'hover') {
40
- cur.addEventListener('mouseenter', e => {
41
- e.preventDefault()
42
- e.stopPropagation()
43
- util.addClass(player.root, 'xgplayer-texttrack-active')
44
- container.focus()
45
- })
46
- }
47
- player.controls.appendChild(container)
48
- }
49
- })
50
- };
51
-
52
- ['touchend', 'click'].forEach(item => {
53
- container.addEventListener(item, function (e) {
54
- e.preventDefault()
55
- e.stopPropagation()
56
- let li = e.target || e.srcElement
57
- if (li && li.tagName.toLocaleLowerCase() === 'li') {
58
- Array.prototype.forEach.call(li.parentNode.childNodes, item => {
59
- util.removeClass(item, 'selected')
60
- })
61
- util.addClass(li, 'selected')
62
- let trackDoms = player.root.getElementsByTagName('Track')
63
- if (li.innerHTML === player.lang.OFF) {
64
- trackDoms[0].track.mode = 'hidden'
65
- trackDoms[0].src = ''
66
- util.removeClass(player.root, 'xgplayer-texttrack-active')
67
- } else {
68
- trackDoms[0].style.display = 'block'
69
- util.addClass(player.root, 'xgplayer-texttrack-active')
70
- trackDoms[0].track.mode = 'showing'
71
-
72
- list.some(item => {
73
- if (item.label === li.innerHTML) {
74
- trackDoms[0].src = item.src
75
- if (item.kind) {
76
- trackDoms[0].kind = item.kind
77
- }
78
- trackDoms[0].label = item.label
79
- if (item.srclang) {
80
- trackDoms[0].srclang = item.srclang
81
- }
82
- return true
83
- }
84
- })
85
- player.emit('textTrackChange', li.innerHTML)
86
- }
87
- } else if (player.config.textTrackActive === 'click' && li && (li.tagName.toLocaleLowerCase() === 'p' || li.tagName.toLocaleLowerCase() === 'em')) {
88
- util.addClass(player.root, 'xgplayer-texttrack-active')
89
- container.focus()
90
- }
91
- }, false)
92
- })
93
-
94
- player.on('play', () => {
95
- let ul = root.querySelector('.xgplayer-texttrack ul')
96
- let trackDoms = root.getElementsByTagName('Track')
97
- if (!player['hls'] || !ul || !trackDoms) return
98
- trackDoms[0].src = ''
99
- Array.prototype.forEach.call(ul.childNodes, li => {
100
- if (util.hasClass(li, 'selected')) {
101
- if (li.innerHTML === player.lang.OFF) {
102
- trackDoms[0].track.mode = 'hidden'
103
- trackDoms[0].src = ''
104
- } else {
105
- trackDoms[0].track.mode = 'hidden'
106
-
107
- list.some(item => {
108
- if (item.label !== li.innerHTML) {
109
- trackDoms[0].src = item.src
110
- if (item.kind) {
111
- trackDoms[0].kind = item.kind
112
- }
113
- trackDoms[0].label = item.label
114
- if (item.srclang) {
115
- trackDoms[0].srclang = item.srclang
116
- }
117
- return true
118
- }
119
- })
120
-
121
- list.some(item => {
122
- if (item.label === li.innerHTML) {
123
- setTimeout(() => {
124
- trackDoms[0].src = item.src
125
- if (item.kind) {
126
- trackDoms[0].kind = item.kind
127
- }
128
- trackDoms[0].label = item.label
129
- if (item.srclang) {
130
- trackDoms[0].srclang = item.srclang
131
- }
132
- trackDoms[0].track.mode = 'showing'
133
- })
134
- return true
135
- }
136
- })
137
- }
138
- }
139
- })
140
- util.removeClass(player.root, 'xgplayer-texttrack-active')
141
- })
142
-
143
- container.addEventListener('mouseleave', e => {
144
- e.preventDefault()
145
- e.stopPropagation()
146
- util.removeClass(player.root, 'xgplayer-texttrack-active')
147
- })
148
- }
149
-
150
- export default {
151
- name: 's_nativeTextTrack',
152
- method: s_nativeTextTrack
153
- }
@@ -1,26 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import '../style/controls/pip.scss'
3
-
4
- let s_pip = function () {
5
- let player = this
6
- if (!player.config.pip || typeof player.video.requestPictureInPicture !== 'function') { return }
7
- let pip = player.lang.PIP
8
- let btn = createDom('xg-pip', `<p class="name"><span>${pip}</span></p>`, {tabindex: 9}, 'xgplayer-pip')
9
-
10
- player.once('ready', () => {
11
- player.controls.appendChild(btn);
12
- });
13
-
14
- ['click', 'touchend'].forEach(item => {
15
- btn.addEventListener(item, e => {
16
- e.preventDefault()
17
- e.stopPropagation()
18
- player.userGestureTrigEvent('pipBtnClick')
19
- })
20
- })
21
- }
22
-
23
- export default {
24
- name: 's_pip',
25
- method: s_pip
26
- }
@@ -1,43 +0,0 @@
1
- import { createDom, createImgBtn } from '../../utils/util'
2
- import PlayIcon from '../assets/play.svg'
3
- import PauseIcon from '../assets/pause.svg'
4
- import '../style/controls/play.scss'
5
-
6
- let s_play = function () {
7
- let player = this
8
- let playBtn = player.config.playBtn ? player.config.playBtn : {}
9
- let btn
10
- if (playBtn.type === 'img') {
11
- btn = createImgBtn('play', playBtn.url.play, playBtn.width, playBtn.height)
12
- } else {
13
- btn = createDom('xg-play', `<xg-icon class="xgplayer-icon">
14
- <div class="xgplayer-icon-play">${PlayIcon}</div>
15
- <div class="xgplayer-icon-pause">${PauseIcon}</div>
16
- </xg-icon>`, {}, 'xgplayer-play')
17
- }
18
-
19
- let tipsText = {}
20
- tipsText.play = player.lang.PLAY_TIPS
21
- tipsText.pause = player.lang.PAUSE_TIPS
22
- let tips = createDom('xg-tips', `<span class="xgplayer-tip-play">${tipsText.play}</span>
23
- <span class="xgplayer-tip-pause">${tipsText.pause}</span>`, {}, 'xgplayer-tips')
24
- btn.appendChild(tips)
25
- player.once('ready', () => {
26
- if(player.controls) {
27
- player.controls.appendChild(btn)
28
- }
29
- });
30
-
31
- ['click', 'touchend'].forEach(item => {
32
- btn.addEventListener(item, function (e) {
33
- e.preventDefault()
34
- e.stopPropagation()
35
- player.userGestureTrigEvent('playBtnClick')
36
- })
37
- })
38
- }
39
-
40
- export default {
41
- name: 's_play',
42
- method: s_play
43
- }
@@ -1,41 +0,0 @@
1
- import { createDom, addClass } from '../../utils/util'
2
- import PlayNextIcon from '../assets/playNext.svg'
3
- import '../style/controls/playNext.scss'
4
-
5
- let s_playNext = function () {
6
- let player = this
7
- let nextBtn = player.config.playNext
8
- if (!nextBtn || !nextBtn.urlList) { return }
9
- let btn = createDom('xg-playnext', `<xg-icon class="xgplayer-icon">${PlayNextIcon}</xg-icon>`, {}, 'xgplayer-playnext')
10
- let tipsText = player.lang.PLAYNEXT_TIPS
11
- let tips = createDom('xg-tips', `<span class="xgplayer-tip-playnext">${tipsText}</span>`, {}, 'xgplayer-tips')
12
- btn.appendChild(tips)
13
- player.once('ready', () => {
14
- player.controls.appendChild(btn)
15
- });
16
-
17
- ['click', 'touchend'].forEach(item => {
18
- btn.addEventListener(item, e => {
19
- e.preventDefault()
20
- e.stopPropagation()
21
- addClass(player.root, 'xgplayer-is-enter')
22
- player.userGestureTrigEvent('playNextBtnClick')
23
- })
24
- })
25
-
26
- let onUrlListEnd = function () {
27
- addClass(player.root, 'xgplayer-playnext-inactive')
28
- }
29
- player.on('urlListEnd', onUrlListEnd)
30
-
31
- function onDestroy () {
32
- player.off('urlListEnd', onUrlListEnd)
33
- player.off('destroy', onDestroy)
34
- }
35
- player.once('destroy', onDestroy)
36
- }
37
-
38
- export default {
39
- name: 's_playNext',
40
- method: s_playNext
41
- }