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.
- package/browser/controls/danmu.js +3 -1
- package/browser/controls/errorRetry.js +1 -1
- package/browser/controls/nativeTextTrack.js +1 -1
- package/browser/core_player.js +1 -1
- package/browser/core_player.js.map +1 -1
- package/browser/index.js +7 -5
- package/browser/index.js.map +1 -1
- package/browser/simple_player.js +1 -1
- package/browser/simple_player.js.map +1 -1
- package/dist/controls/danmu.js +3 -1
- package/dist/controls/errorRetry.js +1 -1
- package/dist/controls/nativeTextTrack.js +1 -1
- package/dist/core_player.js +6 -7
- package/dist/core_player.js.map +1 -1
- package/dist/index.js +2882 -1888
- package/dist/index.js.map +1 -1
- package/dist/index.min.css +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/dist/simple_player.js +6 -7
- package/dist/simple_player.js.map +1 -1
- package/es/controls/danmu.js +3 -1
- package/es/controls/errorRetry.js +1 -1
- package/es/controls/nativeTextTrack.js +1 -1
- package/es/core_player.js +1 -1
- package/es/core_player.js.map +1 -1
- package/es/index.js +7 -5
- package/es/index.js.map +1 -1
- package/es/simple_player.js +1 -1
- package/es/simple_player.js.map +1 -1
- package/package.json +12 -3
- package/types/index.d.ts +0 -11
- package/postcss.config.js +0 -7
- package/src/bind/airplay.js +0 -10
- package/src/bind/cssFullscreen.js +0 -10
- package/src/bind/danmu.js +0 -10
- package/src/bind/definition.js +0 -10
- package/src/bind/download.js +0 -10
- package/src/bind/enter.js +0 -8
- package/src/bind/error.js +0 -8
- package/src/bind/errorRetry.js +0 -8
- package/src/bind/flex.js +0 -8
- package/src/bind/fullscreen.js +0 -10
- package/src/bind/i18n.js +0 -8
- package/src/bind/keyboard.js +0 -8
- package/src/bind/loading.js +0 -8
- package/src/bind/localPreview.js +0 -10
- package/src/bind/memoryPlay.js +0 -10
- package/src/bind/miniplayer.js +0 -10
- package/src/bind/mobile.js +0 -8
- package/src/bind/nativeTextTrack.js +0 -8
- package/src/bind/pc.js +0 -8
- package/src/bind/pip.js +0 -10
- package/src/bind/play.js +0 -10
- package/src/bind/playNext.js +0 -10
- package/src/bind/playbackRate.js +0 -8
- package/src/bind/poster.js +0 -8
- package/src/bind/progress.js +0 -8
- package/src/bind/reload.js +0 -10
- package/src/bind/replay.js +0 -10
- package/src/bind/rotate.js +0 -10
- package/src/bind/screenShot.js +0 -10
- package/src/bind/stallCheck.js +0 -8
- package/src/bind/start.js +0 -10
- package/src/bind/textTrack.js +0 -8
- package/src/bind/time.js +0 -8
- package/src/bind/volume.js +0 -10
- package/src/controls/airplay.js +0 -20
- package/src/controls/cssFullscreen.js +0 -49
- package/src/controls/danmu.js +0 -75
- package/src/controls/definition.js +0 -13
- package/src/controls/download.js +0 -28
- package/src/controls/errorRetry.js +0 -132
- package/src/controls/fullscreen.js +0 -145
- package/src/controls/keyboard.js +0 -214
- package/src/controls/localPreview.js +0 -32
- package/src/controls/memoryPlay.js +0 -14
- package/src/controls/miniplayer.js +0 -128
- package/src/controls/mobile.js +0 -100
- package/src/controls/pc.js +0 -123
- package/src/controls/pip.js +0 -52
- package/src/controls/play.js +0 -34
- package/src/controls/playNext.js +0 -29
- package/src/controls/reload.js +0 -24
- package/src/controls/replay.js +0 -30
- package/src/controls/rotate.js +0 -99
- package/src/controls/screenShot.js +0 -65
- package/src/controls/stallCheck.js +0 -38
- package/src/controls/start.js +0 -60
- package/src/controls/textTrack.js +0 -182
- package/src/controls/volume.js +0 -178
- package/src/controls.js +0 -36
- package/src/core_player.js +0 -13
- package/src/error.js +0 -74
- package/src/index.js +0 -57
- package/src/player.js +0 -553
- package/src/proxy.js +0 -495
- package/src/simple_player.js +0 -42
- package/src/skin/assets/airplay.svg +0 -1
- package/src/skin/assets/download.svg +0 -14
- package/src/skin/assets/exitCssFull.svg +0 -3
- package/src/skin/assets/exitFull.svg +0 -3
- package/src/skin/assets/loading.svg +0 -3
- package/src/skin/assets/panel.svg +0 -4
- package/src/skin/assets/pause.svg +0 -3
- package/src/skin/assets/play.svg +0 -3
- package/src/skin/assets/playNext.svg +0 -3
- package/src/skin/assets/reload.svg +0 -3
- package/src/skin/assets/replay.svg +0 -3
- package/src/skin/assets/requestCssFull.svg +0 -3
- package/src/skin/assets/requestFull.svg +0 -3
- package/src/skin/assets/rotate.svg +0 -11
- package/src/skin/assets/startPause.svg +0 -3
- package/src/skin/assets/startPlay.svg +0 -3
- package/src/skin/assets/volumeLarge.svg +0 -4
- package/src/skin/assets/volumeMuted.svg +0 -4
- package/src/skin/assets/volumeSmall.svg +0 -4
- package/src/skin/controls/airplay.js +0 -44
- package/src/skin/controls/cssFullscreen.js +0 -36
- package/src/skin/controls/danmu.js +0 -214
- package/src/skin/controls/definition.js +0 -251
- package/src/skin/controls/download.js +0 -29
- package/src/skin/controls/enter.js +0 -21
- package/src/skin/controls/error.js +0 -57
- package/src/skin/controls/flex.js +0 -13
- package/src/skin/controls/fullscreen.js +0 -43
- package/src/skin/controls/i18n.js +0 -168
- package/src/skin/controls/loading.js +0 -17
- package/src/skin/controls/localPreview.js +0 -18
- package/src/skin/controls/memoryPlay.js +0 -39
- package/src/skin/controls/miniplayer.js +0 -26
- package/src/skin/controls/nativeTextTrack.js +0 -153
- package/src/skin/controls/pip.js +0 -26
- package/src/skin/controls/play.js +0 -43
- package/src/skin/controls/playNext.js +0 -41
- package/src/skin/controls/playbackRate.js +0 -141
- package/src/skin/controls/poster.js +0 -18
- package/src/skin/controls/progress.js +0 -407
- package/src/skin/controls/reload.js +0 -29
- package/src/skin/controls/replay.js +0 -56
- package/src/skin/controls/rotate.js +0 -29
- package/src/skin/controls/screenShot.js +0 -27
- package/src/skin/controls/start.js +0 -62
- package/src/skin/controls/textTrack.js +0 -113
- package/src/skin/controls/time.js +0 -40
- package/src/skin/controls/volume.js +0 -63
- package/src/skin/index.js +0 -63
- package/src/skin/style/common/animation.scss +0 -16
- package/src/skin/style/common/svg-url.scss +0 -70
- package/src/skin/style/controls/airplay.scss +0 -35
- package/src/skin/style/controls/controls.scss +0 -40
- package/src/skin/style/controls/cssfullscreen.scss +0 -103
- package/src/skin/style/controls/danmu.scss +0 -331
- package/src/skin/style/controls/definition.scss +0 -76
- package/src/skin/style/controls/download.scss +0 -45
- package/src/skin/style/controls/enter.scss +0 -55
- package/src/skin/style/controls/error.scss +0 -34
- package/src/skin/style/controls/fullscreen.scss +0 -60
- package/src/skin/style/controls/icon.scss +0 -12
- package/src/skin/style/controls/live.scss +0 -9
- package/src/skin/style/controls/loading.scss +0 -44
- package/src/skin/style/controls/memoryPlay.scss +0 -28
- package/src/skin/style/controls/miniplayer.scss +0 -104
- package/src/skin/style/controls/pip.scss +0 -42
- package/src/skin/style/controls/placeholder.scss +0 -7
- package/src/skin/style/controls/play.scss +0 -79
- package/src/skin/style/controls/playNext.scss +0 -44
- package/src/skin/style/controls/playbackRate.scss +0 -82
- package/src/skin/style/controls/poster.scss +0 -19
- package/src/skin/style/controls/progress.scss +0 -182
- package/src/skin/style/controls/reload.scss +0 -43
- package/src/skin/style/controls/replay.scss +0 -46
- package/src/skin/style/controls/rotate.scss +0 -41
- package/src/skin/style/controls/screenShot.scss +0 -42
- package/src/skin/style/controls/start.scss +0 -78
- package/src/skin/style/controls/textTrack.scss +0 -87
- package/src/skin/style/controls/time.scss +0 -24
- package/src/skin/style/controls/tips.scss +0 -24
- package/src/skin/style/controls/videoProxy.scss +0 -6
- package/src/skin/style/controls/volume.scss +0 -143
- package/src/skin/style/index.scss +0 -88
- package/src/utils/sniffer.js +0 -47
- package/src/utils/url.js +0 -10
- package/src/utils/util.js +0 -358
- package/src/utils/xgplayerTimeRange.js +0 -17
- package/src/version.js +0 -7
- package/version.json +0 -3
- 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
|
-
}
|
package/src/skin/controls/pip.js
DELETED
|
@@ -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
|
-
}
|