@x-edu/live-player 0.0.19 → 0.0.21
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/.browserslistrc +10 -10
- package/.eslintignore +8 -8
- package/.eslintrc.js +26 -26
- package/.gem-mine +11 -11
- package/.postcssrc.js +6 -6
- package/README.md +145 -145
- package/babel.config.js +33 -33
- package/dist/XEduLivePlayer.common.js +12161 -1154
- package/dist/XEduLivePlayerPre.common.js +12369 -1358
- package/doc/develop.md +23 -23
- package/gem-mine.config.js +86 -86
- package/jest.config.js +9 -9
- package/jsconfig.json +15 -15
- package/mock/helper.js +8 -8
- package/mock/index.js +34 -34
- package/package.json +99 -99
- package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
- package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
- package/public/3rd/ali-player/aliplayer-min.js +1 -1
- package/public/3rd/im-web-push/index.umd.js +14 -14
- package/public/JsBridge.js +1602 -1602
- package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
- package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
- package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
- package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
- package/public/fish/editor/ueditor.all.min.js +16 -16
- package/public/fish/editor/ueditor.config.js +467 -467
- package/public/fish/icon/umd-4.1.2.js +1 -1
- package/public/fish/video/videoplayer.min.css +6 -6
- package/public/fish/video/videoplayer.min.js +31 -31
- package/public/fish/video/zh-CN.js +82 -82
- package/public/icon/demo.css +539 -539
- package/public/icon/demo_index.html +2189 -2189
- package/public/icon/iconfont.css +363 -363
- package/public/icon/iconfont.json +618 -618
- package/public/index.html +50 -50
- package/script/image/readme.md +77 -77
- package/script/postcss.js +48 -48
- package/src/App.jsx +24 -24
- package/src/asset/img/course/playing.svg +21 -21
- package/src/asset/img/icon-course-white.svg +3 -3
- package/src/asset/img/icon-course.svg +3 -3
- package/src/asset/img/icon-eye-white.svg +4 -4
- package/src/asset/img/icon-eye.svg +4 -4
- package/src/asset/img/icon-school-white.svg +3 -3
- package/src/asset/img/icon-school.svg +3 -3
- package/src/asset/img/loading.svg +52 -52
- package/src/asset/img/video-play.svg +6 -6
- package/src/asset/style/background.less +19 -19
- package/src/asset/style/banner.less +36 -36
- package/src/asset/style/base.less +74 -74
- package/src/asset/style/index.less +114 -114
- package/src/asset/style/reset-theme.less +141 -141
- package/src/asset/style/theme/index.less +55 -55
- package/src/asset/style/theme/party/global.less +20 -20
- package/src/asset/style/theme/party/override.less +57 -57
- package/src/asset/style/theme/test/global.less +18 -18
- package/src/asset/style/theme/test/override.less +45 -45
- package/src/asset/style/variable.less +12 -12
- package/src/component/AliPlayer/index.jsx +49 -49
- package/src/component/Avatar/index.jsx +50 -50
- package/src/component/Empty/index.jsx +34 -34
- package/src/component/Empty/index.module.less +37 -37
- package/src/component/IMChatroom/component/status/403.jsx +13 -13
- package/src/component/IMChatroom/component/status/404.jsx +13 -13
- package/src/component/IMChatroom/component/status/Error.jsx +23 -23
- package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
- package/src/component/IMChatroom/config/app/config.js +118 -118
- package/src/component/IMChatroom/config/app/index.js +60 -60
- package/src/component/IMChatroom/config/env.js +5 -5
- package/src/component/IMChatroom/config/index.js +3 -3
- package/src/component/IMChatroom/config/request/config/base.js +124 -124
- package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
- package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
- package/src/component/IMChatroom/config/request/index.js +21 -21
- package/src/component/IMChatroom/config/request/proxy.js +39 -39
- package/src/component/IMChatroom/config/url.js +7 -7
- package/src/component/IMChatroom/constants/errorCode.js +9 -9
- package/src/component/IMChatroom/constants/index.js +84 -84
- package/src/component/IMChatroom/constants/origin.js +27 -27
- package/src/component/IMChatroom/context/chatroom.js +154 -154
- package/src/component/IMChatroom/context/connect.js +28 -28
- package/src/component/IMChatroom/i18n/en/index.json +73 -73
- package/src/component/IMChatroom/i18n/index.jsx +14 -14
- package/src/component/IMChatroom/i18n/language.js +9 -9
- package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
- package/src/component/IMChatroom/index.jsx +49 -49
- package/src/component/IMChatroom/page/chat/index.jsx +27 -27
- package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
- package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
- package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
- package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
- package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
- package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
- package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
- package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
- package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
- package/src/component/IMChatroom/page/home/index.jsx +164 -164
- package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
- package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
- package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
- package/src/component/IMChatroom/page/member/index.jsx +15 -15
- package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
- package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
- package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
- package/src/component/IMChatroom/sdk/bridge.js +39 -39
- package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
- package/src/component/IMChatroom/sdk/cs/index.js +101 -101
- package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
- package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
- package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
- package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
- package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
- package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
- package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
- package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
- package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
- package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
- package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
- package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
- package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
- package/src/component/IMChatroom/sdk/oms.js +18 -18
- package/src/component/IMChatroom/sdk/uc.js +3 -3
- package/src/component/IMChatroom/subscription/channel/app.js +5 -5
- package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
- package/src/component/IMChatroom/subscription/channel/member.js +40 -40
- package/src/component/IMChatroom/subscription/channel/message.js +13 -13
- package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
- package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
- package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
- package/src/component/IMChatroom/subscription/event.js +37 -37
- package/src/component/IMChatroom/subscription/index.js +19 -19
- package/src/component/IMChatroom/util/account.js +8 -8
- package/src/component/IMChatroom/util/chatroom.js +255 -255
- package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
- package/src/component/IMChatroom/util/location.js +12 -12
- package/src/component/Icon/index.jsx +16 -16
- package/src/component/Icon/index.module.less +2 -2
- package/src/component/Pagination/LocalPagination.jsx +27 -27
- package/src/component/Pagination/RemotePagination.jsx +32 -32
- package/src/component/Pagination/index.jsx +31 -31
- package/src/component/Pagination/index.module.less +110 -110
- package/src/component/PlayerTip/index.jsx +34 -34
- package/src/component/VideoBase/index.jsx +242 -242
- package/src/component/VideoBase/style.less +65 -65
- package/src/component/VideoBase/utils.js +81 -81
- package/src/component/mixin.less +9 -9
- package/src/component/status/403.jsx +15 -15
- package/src/component/status/404/index.jsx +73 -73
- package/src/component/status/404/index.module.less +36 -36
- package/src/component/status/Error/error.module.less +13 -13
- package/src/component/status/Error/index.jsx +47 -47
- package/src/component/status/Loading/img/loading.svg +52 -52
- package/src/component/status/Loading/index.jsx +31 -31
- package/src/component/status/Loading/index.less +56 -56
- package/src/component/status/None/index.jsx +20 -20
- package/src/component/status/None/index.module.less +35 -35
- package/src/component/status/Status/index.jsx +26 -26
- package/src/component/status/Status/index.module.less +8 -8
- package/src/config/constant/commonUrl.js +2 -2
- package/src/config/constant/user.js +6 -6
- package/src/config/context/site-config.js +48 -48
- package/src/config/env/index.js +5 -5
- package/src/config/env/local/index.js +13 -13
- package/src/config/env/ncet-xedu/api.js +175 -175
- package/src/config/env/ncet-xedu/app.js +12 -12
- package/src/config/env/ncet-xedu/cs.js +8 -8
- package/src/config/env/ncet-xedu/index.js +14 -14
- package/src/config/env/ncet-xedu/push.js +5 -5
- package/src/config/env/preproduction/api.js +144 -144
- package/src/config/env/preproduction/app.js +12 -12
- package/src/config/env/preproduction/cs.js +8 -8
- package/src/config/env/preproduction/index.js +14 -14
- package/src/config/env/preproduction/push.js +5 -5
- package/src/config/env/product/api.js +113 -113
- package/src/config/env/product/app.js +12 -12
- package/src/config/env/product/cs.js +5 -5
- package/src/config/env/product/index.js +14 -14
- package/src/config/env/product/push.js +5 -5
- package/src/config/live.js +80 -80
- package/src/config/publicLive.js +53 -53
- package/src/config/request/assessments.js +24 -24
- package/src/config/request/config-center.js +8 -8
- package/src/config/request/helper.js +166 -166
- package/src/config/request/im-broadcasts.js +12 -12
- package/src/config/request/live-activity-gateway.js +8 -8
- package/src/config/request/live-activity.js +13 -13
- package/src/config/request/raw.js +6 -6
- package/src/config/request/x-cloud-web.js +13 -13
- package/src/config/request/x-proxy.js +34 -34
- package/src/demo/Detail.jsx +11 -11
- package/src/demo/List.jsx +64 -64
- package/src/demo/index.jsx +17 -17
- package/src/detail/LineSwitch/index.jsx +71 -71
- package/src/detail/LiveCountDown/index.jsx +44 -44
- package/src/detail/LiveCountDown/index.module.less +31 -31
- package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
- package/src/detail/LiveOnlineCount/index.jsx +68 -68
- package/src/detail/LiveOnlineCount/index.module.less +34 -34
- package/src/detail/LiveOnlineCount/util.js +74 -74
- package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
- package/src/detail/LiveStatus/index.jsx +202 -202
- package/src/detail/LiveStatus/index.module.less +192 -192
- package/src/detail/LiveVideo/config.js +37 -37
- package/src/detail/LiveVideo/index.jsx +188 -188
- package/src/detail/LiveVideo/index.module.less +41 -41
- package/src/detail/NotLoginChatroom/index.jsx +37 -37
- package/src/detail/NotLoginChatroom/index.module.less +46 -46
- package/src/detail/RecordVideo/index.jsx +150 -150
- package/src/detail/RecordVideo/index.module.less +31 -31
- package/src/detail/ReplayVideo/index.jsx +93 -93
- package/src/detail/ReplayVideo/index.module.less +65 -65
- package/src/detail/const.js +20 -20
- package/src/detail/hook/usePullSource.js +82 -82
- package/src/detail/hook/usePullState.js +51 -51
- package/src/detail/index.jsx +482 -482
- package/src/detail/index.module.less +188 -188
- package/src/hook/useAsync.js +84 -84
- package/src/hook/useGoToPage.js +83 -83
- package/src/hook/useInterval.js +28 -28
- package/src/hook/useIsMounted.js +17 -17
- package/src/hook/useModuleByRole.js +53 -53
- package/src/hook/usePageScrollable.js +52 -52
- package/src/hook/usePortal.js +83 -83
- package/src/hook/useScrollRestore/index.js +32 -32
- package/src/hook/useScrollRestore/scrollContext.js +20 -20
- package/src/hook/useTrackRef.js +11 -11
- package/src/hook/useWindowSize.js +28 -28
- package/src/hook/useZoom.js +47 -47
- package/src/index.js +10 -10
- package/src/lib/getLiveOnlineCount.js +10 -10
- package/src/lib/getServiceConfig.js +102 -102
- package/src/list/Empty/index.jsx +20 -20
- package/src/list/Empty/index.module.less +23 -23
- package/src/list/ListItem/Action/index.jsx +98 -98
- package/src/list/ListItem/Action/index.module.less +21 -21
- package/src/list/ListItem/img/dianzan.svg +4 -0
- package/src/list/ListItem/img/play.svg +15 -15
- package/src/list/ListItem/img/yiguankan.svg +3 -0
- package/src/list/ListItem/index.jsx +24 -1
- package/src/list/ListItem/index.module.less +146 -123
- package/src/list/index.jsx +80 -0
- package/src/list/index.module.less +35 -35
- package/src/service/common.js +73 -73
- package/src/service/content-mgr.js +73 -73
- package/src/service/im-group.js +12 -12
- package/src/service/im.js +7 -7
- package/src/service/imBroadcasts.js +33 -33
- package/src/service/like.js +134 -134
- package/src/service/manageApi.js +7 -7
- package/src/service/managePortal.js +6 -6
- package/src/service/myStudyRecord.js +93 -93
- package/src/service/navigation.js +47 -47
- package/src/service/ndMeeting.js +10 -10
- package/src/service/ndr.js +122 -122
- package/src/service/news.js +93 -93
- package/src/service/personalCenter.js +270 -270
- package/src/service/qualityCourse.js +31 -31
- package/src/service/recommend.js +81 -81
- package/src/service/school.js +323 -323
- package/src/service/search.js +170 -170
- package/src/service/site-config.js +7 -7
- package/src/service/socialCensor.js +45 -45
- package/src/service/specialEdu.js +31 -31
- package/src/service/suggestion.js +85 -85
- package/src/service/syncClassroom.js +321 -321
- package/src/service/tCourse.js +204 -204
- package/src/service/tchTraining.js +37 -37
- package/src/service/uc.js +45 -45
- package/src/util/app.js +1 -1
- package/src/util/array.js +3 -3
- package/src/util/auth/func.js +57 -57
- package/src/util/date.js +53 -53
- package/src/util/env.js +9 -9
- package/src/util/getTimestamp.js +10 -10
- package/src/util/hof.js +105 -105
- package/src/util/live/index.js +42 -42
- package/src/util/liveCountUtil.js +52 -0
- package/src/util/netUrl.js +35 -35
- package/src/util/object.js +13 -13
- package/src/util/push/index.js +58 -58
- package/src/util/request.js +227 -227
- package/src/util/type.js +17 -17
- package/src/util/url.js +203 -203
- package/src/util/video.js +26 -26
- package/test/setup.js +21 -21
- package/test/unit/component/header/logo.spec.jsx +8 -8
- package/test/unit/helper.jsx +25 -25
- package/test/unit/util/date.spec.js +40 -40
package/src/util/auth/func.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import buildURL from 'axios/lib/helpers/buildURL'
|
|
2
|
-
|
|
3
|
-
let uc
|
|
4
|
-
let userInfo
|
|
5
|
-
|
|
6
|
-
export function getUCInstance() {
|
|
7
|
-
return uc
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function setUC(currentUC, _userInfo) {
|
|
11
|
-
if (!uc) {
|
|
12
|
-
uc = currentUC
|
|
13
|
-
}
|
|
14
|
-
userInfo = _userInfo
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function getAvatarURL(userId) {
|
|
18
|
-
return uc.getAvatarURL({
|
|
19
|
-
userId
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function logout() {
|
|
24
|
-
try {
|
|
25
|
-
await uc.logout()
|
|
26
|
-
} catch {
|
|
27
|
-
uc._ucToken.clearToken()
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export async function getSessionUserInfo() {
|
|
32
|
-
const account = uc.getCurrentAccount()
|
|
33
|
-
if (account) {
|
|
34
|
-
const curUserInfo = await account.getAccountInfo({
|
|
35
|
-
force: true
|
|
36
|
-
})
|
|
37
|
-
return curUserInfo
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export async function getAuthHeader(c) {
|
|
42
|
-
const hasLogin = !!userInfo
|
|
43
|
-
if (hasLogin) {
|
|
44
|
-
const {
|
|
45
|
-
url: _url,
|
|
46
|
-
method,
|
|
47
|
-
params,
|
|
48
|
-
paramsSerializer
|
|
49
|
-
} = c
|
|
50
|
-
const url = buildURL(_url, params, paramsSerializer).replace(/@/g, '%40').replace(/'/g, '%27')
|
|
51
|
-
const auth = await uc.getAuthHeaderAsync({
|
|
52
|
-
url,
|
|
53
|
-
method
|
|
54
|
-
})
|
|
55
|
-
return auth
|
|
56
|
-
}
|
|
57
|
-
}
|
|
1
|
+
import buildURL from 'axios/lib/helpers/buildURL'
|
|
2
|
+
|
|
3
|
+
let uc
|
|
4
|
+
let userInfo
|
|
5
|
+
|
|
6
|
+
export function getUCInstance() {
|
|
7
|
+
return uc
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function setUC(currentUC, _userInfo) {
|
|
11
|
+
if (!uc) {
|
|
12
|
+
uc = currentUC
|
|
13
|
+
}
|
|
14
|
+
userInfo = _userInfo
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function getAvatarURL(userId) {
|
|
18
|
+
return uc.getAvatarURL({
|
|
19
|
+
userId
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function logout() {
|
|
24
|
+
try {
|
|
25
|
+
await uc.logout()
|
|
26
|
+
} catch {
|
|
27
|
+
uc._ucToken.clearToken()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function getSessionUserInfo() {
|
|
32
|
+
const account = uc.getCurrentAccount()
|
|
33
|
+
if (account) {
|
|
34
|
+
const curUserInfo = await account.getAccountInfo({
|
|
35
|
+
force: true
|
|
36
|
+
})
|
|
37
|
+
return curUserInfo
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function getAuthHeader(c) {
|
|
42
|
+
const hasLogin = !!userInfo
|
|
43
|
+
if (hasLogin) {
|
|
44
|
+
const {
|
|
45
|
+
url: _url,
|
|
46
|
+
method,
|
|
47
|
+
params,
|
|
48
|
+
paramsSerializer
|
|
49
|
+
} = c
|
|
50
|
+
const url = buildURL(_url, params, paramsSerializer).replace(/@/g, '%40').replace(/'/g, '%27')
|
|
51
|
+
const auth = await uc.getAuthHeaderAsync({
|
|
52
|
+
url,
|
|
53
|
+
method
|
|
54
|
+
})
|
|
55
|
+
return auth
|
|
56
|
+
}
|
|
57
|
+
}
|
package/src/util/date.js
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import dayjs from 'dayjs'
|
|
2
|
-
|
|
3
|
-
export const formatTimeDisplay = (timeKey) => {
|
|
4
|
-
const time = dayjs(timeKey)
|
|
5
|
-
const dayInWeekTexts = ['周天', '周一', '周二', '周三', '周四', '周五', '周六']
|
|
6
|
-
const dayInWeek = dayInWeekTexts[time.day()]
|
|
7
|
-
|
|
8
|
-
// 如果是同一天则显示今天 + 周几
|
|
9
|
-
if (time.isSame(dayjs(), 'day')) {
|
|
10
|
-
return `今天 ${dayInWeek}`
|
|
11
|
-
}
|
|
12
|
-
if (time.isSame(dayjs(), 'year')) {
|
|
13
|
-
return `${time.format('MM月DD日')} ${dayInWeek}`
|
|
14
|
-
}
|
|
15
|
-
return `${time.format('YYYY年MM月DD日')} ${dayInWeek}`
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function formatSeconds(value) {
|
|
19
|
-
let theTime = parseInt(value, 10) // 需要转换的时间秒
|
|
20
|
-
let theTime1 = 0 // 分
|
|
21
|
-
let theTime2 = 0 // 小时
|
|
22
|
-
if (theTime > 60) {
|
|
23
|
-
theTime1 = parseInt(theTime / 60, 10)
|
|
24
|
-
theTime = parseInt(theTime % 60, 10)
|
|
25
|
-
if (theTime1 > 60) {
|
|
26
|
-
theTime2 = parseInt(theTime1 / 60, 10)
|
|
27
|
-
theTime1 = parseInt(theTime1 % 60, 10)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
let result = `${theTime1.toString().padStart(2, 0)}:${theTime.toString().padStart(2, 0)}`
|
|
31
|
-
if (theTime2 > 0) {
|
|
32
|
-
result = `${theTime2.toString().padStart(2, 0)}:${result}`
|
|
33
|
-
}
|
|
34
|
-
return result
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const parseAdapter = (option, dayjsClass) => {
|
|
38
|
-
const proto = dayjsClass.prototype
|
|
39
|
-
const oldParse = proto.parse
|
|
40
|
-
proto.parse = function parse(cfg) {
|
|
41
|
-
const { date } = cfg
|
|
42
|
-
const params = {
|
|
43
|
-
...cfg
|
|
44
|
-
}
|
|
45
|
-
// ie 2019-03-13T13:33:00.000+0000 下解析有问题,全部转化下
|
|
46
|
-
if (date && typeof date === 'string') {
|
|
47
|
-
const validDate = date.replace(/(\+\d{2})(\d{2})$/, '$1:$2')
|
|
48
|
-
params.date = validDate
|
|
49
|
-
params.args[0] = validDate
|
|
50
|
-
}
|
|
51
|
-
oldParse.call(this, params)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
|
|
3
|
+
export const formatTimeDisplay = (timeKey) => {
|
|
4
|
+
const time = dayjs(timeKey)
|
|
5
|
+
const dayInWeekTexts = ['周天', '周一', '周二', '周三', '周四', '周五', '周六']
|
|
6
|
+
const dayInWeek = dayInWeekTexts[time.day()]
|
|
7
|
+
|
|
8
|
+
// 如果是同一天则显示今天 + 周几
|
|
9
|
+
if (time.isSame(dayjs(), 'day')) {
|
|
10
|
+
return `今天 ${dayInWeek}`
|
|
11
|
+
}
|
|
12
|
+
if (time.isSame(dayjs(), 'year')) {
|
|
13
|
+
return `${time.format('MM月DD日')} ${dayInWeek}`
|
|
14
|
+
}
|
|
15
|
+
return `${time.format('YYYY年MM月DD日')} ${dayInWeek}`
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function formatSeconds(value) {
|
|
19
|
+
let theTime = parseInt(value, 10) // 需要转换的时间秒
|
|
20
|
+
let theTime1 = 0 // 分
|
|
21
|
+
let theTime2 = 0 // 小时
|
|
22
|
+
if (theTime > 60) {
|
|
23
|
+
theTime1 = parseInt(theTime / 60, 10)
|
|
24
|
+
theTime = parseInt(theTime % 60, 10)
|
|
25
|
+
if (theTime1 > 60) {
|
|
26
|
+
theTime2 = parseInt(theTime1 / 60, 10)
|
|
27
|
+
theTime1 = parseInt(theTime1 % 60, 10)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
let result = `${theTime1.toString().padStart(2, 0)}:${theTime.toString().padStart(2, 0)}`
|
|
31
|
+
if (theTime2 > 0) {
|
|
32
|
+
result = `${theTime2.toString().padStart(2, 0)}:${result}`
|
|
33
|
+
}
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const parseAdapter = (option, dayjsClass) => {
|
|
38
|
+
const proto = dayjsClass.prototype
|
|
39
|
+
const oldParse = proto.parse
|
|
40
|
+
proto.parse = function parse(cfg) {
|
|
41
|
+
const { date } = cfg
|
|
42
|
+
const params = {
|
|
43
|
+
...cfg
|
|
44
|
+
}
|
|
45
|
+
// ie 2019-03-13T13:33:00.000+0000 下解析有问题,全部转化下
|
|
46
|
+
if (date && typeof date === 'string') {
|
|
47
|
+
const validDate = date.replace(/(\+\d{2})(\d{2})$/, '$1:$2')
|
|
48
|
+
params.date = validDate
|
|
49
|
+
params.args[0] = validDate
|
|
50
|
+
}
|
|
51
|
+
oldParse.call(this, params)
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/util/env.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const ua = window.navigator.userAgent.toLowerCase()
|
|
2
|
-
|
|
3
|
-
export function isInWX() {
|
|
4
|
-
return ua.indexOf('micromessenger') > -1
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
// 判断是否在electron环境中
|
|
8
|
-
export const { xElectron } = window
|
|
9
|
-
export const isInElectron = !!xElectron
|
|
1
|
+
const ua = window.navigator.userAgent.toLowerCase()
|
|
2
|
+
|
|
3
|
+
export function isInWX() {
|
|
4
|
+
return ua.indexOf('micromessenger') > -1
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// 判断是否在electron环境中
|
|
8
|
+
export const { xElectron } = window
|
|
9
|
+
export const isInElectron = !!xElectron
|
package/src/util/getTimestamp.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 获取时间戳
|
|
3
|
-
* @param {number} second 时间间隔,以秒为单位,超过
|
|
4
|
-
* @returns {string} 时间戳
|
|
5
|
-
*/
|
|
6
|
-
export function getTimestamp(second) {
|
|
7
|
-
// 转换毫秒
|
|
8
|
-
const now = Math.floor(Date.now() / 1000)
|
|
9
|
-
return Math.floor(now / second) * second
|
|
10
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 获取时间戳
|
|
3
|
+
* @param {number} second 时间间隔,以秒为单位,超过
|
|
4
|
+
* @returns {string} 时间戳
|
|
5
|
+
*/
|
|
6
|
+
export function getTimestamp(second) {
|
|
7
|
+
// 转换毫秒
|
|
8
|
+
const now = Math.floor(Date.now() / 1000)
|
|
9
|
+
return Math.floor(now / second) * second
|
|
10
|
+
}
|
package/src/util/hof.js
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
import MutexLock from 'mutex-lock'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 并发fn
|
|
5
|
-
* @param {(...args: any[]) => Promise<any>} fn
|
|
6
|
-
* @param {any} context
|
|
7
|
-
* @returns
|
|
8
|
-
*/
|
|
9
|
-
export function withCo(fn, context) {
|
|
10
|
-
const lock = new MutexLock()
|
|
11
|
-
const newFn = async (...args) => {
|
|
12
|
-
const lockId = await lock.request()
|
|
13
|
-
let result
|
|
14
|
-
try {
|
|
15
|
-
result = await context
|
|
16
|
-
? await fn.bind(context)(...args)
|
|
17
|
-
: await fn(...args)
|
|
18
|
-
} catch (e) {
|
|
19
|
-
lock.release(lockId)
|
|
20
|
-
throw e
|
|
21
|
-
}
|
|
22
|
-
lock.release(lockId)
|
|
23
|
-
return result
|
|
24
|
-
}
|
|
25
|
-
return newFn
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* once 支持Asynchronous并发
|
|
30
|
-
* @param {(...args: any[]) => Promise<any>} fn
|
|
31
|
-
* @param {object?} option
|
|
32
|
-
* @param {any?} option.context 执行context
|
|
33
|
-
* @param {(...args) => string} option.getKey 从args中获取mutexlock key
|
|
34
|
-
* @returns
|
|
35
|
-
*/
|
|
36
|
-
export function withOnce(fn, {
|
|
37
|
-
context,
|
|
38
|
-
getKey,
|
|
39
|
-
timeout
|
|
40
|
-
} = {}) {
|
|
41
|
-
const cacheObject = createCacheObject()
|
|
42
|
-
const lockPool = createLockPool()
|
|
43
|
-
const newFn = async (...args) => {
|
|
44
|
-
const key = getKey
|
|
45
|
-
? getKey(...args)
|
|
46
|
-
: '__internal__key'
|
|
47
|
-
if (!cacheObject.hasKey(key)) {
|
|
48
|
-
const lock = lockPool.getLock(key)
|
|
49
|
-
const lockId = await lock.request()
|
|
50
|
-
if (!cacheObject.hasKey(key)) {
|
|
51
|
-
let result
|
|
52
|
-
try {
|
|
53
|
-
result = context
|
|
54
|
-
? await fn.bind(context)(...args)
|
|
55
|
-
: await fn(...args)
|
|
56
|
-
} catch (e) {
|
|
57
|
-
lock.release(lockId)
|
|
58
|
-
throw e
|
|
59
|
-
}
|
|
60
|
-
cacheObject.set(key, result, timeout)
|
|
61
|
-
}
|
|
62
|
-
lock.release(lockId)
|
|
63
|
-
}
|
|
64
|
-
return cacheObject.get(key)
|
|
65
|
-
}
|
|
66
|
-
return newFn
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* lock池,根据key返回对应的lock
|
|
71
|
-
*/
|
|
72
|
-
function createLockPool() {
|
|
73
|
-
const lockObject = {}
|
|
74
|
-
return {
|
|
75
|
-
getLock(key) {
|
|
76
|
-
if (!lockObject[key]) {
|
|
77
|
-
lockObject[key] = new MutexLock()
|
|
78
|
-
}
|
|
79
|
-
return lockObject[key]
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* key/value缓存对象
|
|
86
|
-
*/
|
|
87
|
-
function createCacheObject() {
|
|
88
|
-
const cacheObject = {}
|
|
89
|
-
return {
|
|
90
|
-
hasKey(key) {
|
|
91
|
-
return Object.prototype.hasOwnProperty.call(cacheObject, key)
|
|
92
|
-
},
|
|
93
|
-
set(key, value, timeout) {
|
|
94
|
-
cacheObject[key] = value
|
|
95
|
-
if (timeout) {
|
|
96
|
-
setTimeout(() => {
|
|
97
|
-
delete cacheObject[key]
|
|
98
|
-
}, timeout)
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
get(key) {
|
|
102
|
-
return cacheObject[key]
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
1
|
+
import MutexLock from 'mutex-lock'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 并发fn
|
|
5
|
+
* @param {(...args: any[]) => Promise<any>} fn
|
|
6
|
+
* @param {any} context
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export function withCo(fn, context) {
|
|
10
|
+
const lock = new MutexLock()
|
|
11
|
+
const newFn = async (...args) => {
|
|
12
|
+
const lockId = await lock.request()
|
|
13
|
+
let result
|
|
14
|
+
try {
|
|
15
|
+
result = await context
|
|
16
|
+
? await fn.bind(context)(...args)
|
|
17
|
+
: await fn(...args)
|
|
18
|
+
} catch (e) {
|
|
19
|
+
lock.release(lockId)
|
|
20
|
+
throw e
|
|
21
|
+
}
|
|
22
|
+
lock.release(lockId)
|
|
23
|
+
return result
|
|
24
|
+
}
|
|
25
|
+
return newFn
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* once 支持Asynchronous并发
|
|
30
|
+
* @param {(...args: any[]) => Promise<any>} fn
|
|
31
|
+
* @param {object?} option
|
|
32
|
+
* @param {any?} option.context 执行context
|
|
33
|
+
* @param {(...args) => string} option.getKey 从args中获取mutexlock key
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export function withOnce(fn, {
|
|
37
|
+
context,
|
|
38
|
+
getKey,
|
|
39
|
+
timeout
|
|
40
|
+
} = {}) {
|
|
41
|
+
const cacheObject = createCacheObject()
|
|
42
|
+
const lockPool = createLockPool()
|
|
43
|
+
const newFn = async (...args) => {
|
|
44
|
+
const key = getKey
|
|
45
|
+
? getKey(...args)
|
|
46
|
+
: '__internal__key'
|
|
47
|
+
if (!cacheObject.hasKey(key)) {
|
|
48
|
+
const lock = lockPool.getLock(key)
|
|
49
|
+
const lockId = await lock.request()
|
|
50
|
+
if (!cacheObject.hasKey(key)) {
|
|
51
|
+
let result
|
|
52
|
+
try {
|
|
53
|
+
result = context
|
|
54
|
+
? await fn.bind(context)(...args)
|
|
55
|
+
: await fn(...args)
|
|
56
|
+
} catch (e) {
|
|
57
|
+
lock.release(lockId)
|
|
58
|
+
throw e
|
|
59
|
+
}
|
|
60
|
+
cacheObject.set(key, result, timeout)
|
|
61
|
+
}
|
|
62
|
+
lock.release(lockId)
|
|
63
|
+
}
|
|
64
|
+
return cacheObject.get(key)
|
|
65
|
+
}
|
|
66
|
+
return newFn
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* lock池,根据key返回对应的lock
|
|
71
|
+
*/
|
|
72
|
+
function createLockPool() {
|
|
73
|
+
const lockObject = {}
|
|
74
|
+
return {
|
|
75
|
+
getLock(key) {
|
|
76
|
+
if (!lockObject[key]) {
|
|
77
|
+
lockObject[key] = new MutexLock()
|
|
78
|
+
}
|
|
79
|
+
return lockObject[key]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* key/value缓存对象
|
|
86
|
+
*/
|
|
87
|
+
function createCacheObject() {
|
|
88
|
+
const cacheObject = {}
|
|
89
|
+
return {
|
|
90
|
+
hasKey(key) {
|
|
91
|
+
return Object.prototype.hasOwnProperty.call(cacheObject, key)
|
|
92
|
+
},
|
|
93
|
+
set(key, value, timeout) {
|
|
94
|
+
cacheObject[key] = value
|
|
95
|
+
if (timeout) {
|
|
96
|
+
setTimeout(() => {
|
|
97
|
+
delete cacheObject[key]
|
|
98
|
+
}, timeout)
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
get(key) {
|
|
102
|
+
return cacheObject[key]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
package/src/util/live/index.js
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import dayjs from 'dayjs'
|
|
2
|
-
import { PUBLIC_LIVE_STATUS, LIVING_STATUS_ADVANCE } from '@/config/publicLive'
|
|
3
|
-
|
|
4
|
-
// 获取录播状态
|
|
5
|
-
export const getRecordLiveStatus = (originStatus, visitTime, beginTime, endTime) => {
|
|
6
|
-
const current = dayjs(visitTime).valueOf()
|
|
7
|
-
const begin = dayjs(beginTime).valueOf()
|
|
8
|
-
const end = dayjs(endTime).valueOf()
|
|
9
|
-
if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
|
|
10
|
-
return originStatus
|
|
11
|
-
}
|
|
12
|
-
if (current < begin) {
|
|
13
|
-
return PUBLIC_LIVE_STATUS.NOSTARTED
|
|
14
|
-
}
|
|
15
|
-
if (begin <= current && end > current) {
|
|
16
|
-
return PUBLIC_LIVE_STATUS.LIVEING
|
|
17
|
-
}
|
|
18
|
-
return PUBLIC_LIVE_STATUS.COMPLETEED
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// 我的公开课堂本地状态,直播前60分钟可以发起直播
|
|
22
|
-
export const getTeacherLiveLocalStatus = (originStatus, beginTime) => {
|
|
23
|
-
if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
|
|
24
|
-
return originStatus
|
|
25
|
-
}
|
|
26
|
-
const current = dayjs()
|
|
27
|
-
const advanceTime = dayjs(beginTime).subtract(LIVING_STATUS_ADVANCE, 'minute')
|
|
28
|
-
return current.isBefore(advanceTime) ? PUBLIC_LIVE_STATUS.NOSTARTED : PUBLIC_LIVE_STATUS.LIVEING
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const getLocalHlsLiveStatus = (visitTime, beginTime, endTime) => {
|
|
32
|
-
const current = dayjs(visitTime).valueOf()
|
|
33
|
-
const begin = dayjs(beginTime).valueOf()
|
|
34
|
-
const end = dayjs(endTime).valueOf()
|
|
35
|
-
if (current < begin) {
|
|
36
|
-
return PUBLIC_LIVE_STATUS.NOSTARTED
|
|
37
|
-
}
|
|
38
|
-
if (begin <= current && end > current) {
|
|
39
|
-
return PUBLIC_LIVE_STATUS.LIVEING
|
|
40
|
-
}
|
|
41
|
-
return PUBLIC_LIVE_STATUS.COMPLETEED
|
|
42
|
-
}
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
import { PUBLIC_LIVE_STATUS, LIVING_STATUS_ADVANCE } from '@/config/publicLive'
|
|
3
|
+
|
|
4
|
+
// 获取录播状态
|
|
5
|
+
export const getRecordLiveStatus = (originStatus, visitTime, beginTime, endTime) => {
|
|
6
|
+
const current = dayjs(visitTime).valueOf()
|
|
7
|
+
const begin = dayjs(beginTime).valueOf()
|
|
8
|
+
const end = dayjs(endTime).valueOf()
|
|
9
|
+
if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
|
|
10
|
+
return originStatus
|
|
11
|
+
}
|
|
12
|
+
if (current < begin) {
|
|
13
|
+
return PUBLIC_LIVE_STATUS.NOSTARTED
|
|
14
|
+
}
|
|
15
|
+
if (begin <= current && end > current) {
|
|
16
|
+
return PUBLIC_LIVE_STATUS.LIVEING
|
|
17
|
+
}
|
|
18
|
+
return PUBLIC_LIVE_STATUS.COMPLETEED
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// 我的公开课堂本地状态,直播前60分钟可以发起直播
|
|
22
|
+
export const getTeacherLiveLocalStatus = (originStatus, beginTime) => {
|
|
23
|
+
if (originStatus === PUBLIC_LIVE_STATUS.COMPLETEED || originStatus === PUBLIC_LIVE_STATUS.OFFLINE) {
|
|
24
|
+
return originStatus
|
|
25
|
+
}
|
|
26
|
+
const current = dayjs()
|
|
27
|
+
const advanceTime = dayjs(beginTime).subtract(LIVING_STATUS_ADVANCE, 'minute')
|
|
28
|
+
return current.isBefore(advanceTime) ? PUBLIC_LIVE_STATUS.NOSTARTED : PUBLIC_LIVE_STATUS.LIVEING
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const getLocalHlsLiveStatus = (visitTime, beginTime, endTime) => {
|
|
32
|
+
const current = dayjs(visitTime).valueOf()
|
|
33
|
+
const begin = dayjs(beginTime).valueOf()
|
|
34
|
+
const end = dayjs(endTime).valueOf()
|
|
35
|
+
if (current < begin) {
|
|
36
|
+
return PUBLIC_LIVE_STATUS.NOSTARTED
|
|
37
|
+
}
|
|
38
|
+
if (begin <= current && end > current) {
|
|
39
|
+
return PUBLIC_LIVE_STATUS.LIVEING
|
|
40
|
+
}
|
|
41
|
+
return PUBLIC_LIVE_STATUS.COMPLETEED
|
|
42
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化数值8
|
|
3
|
+
* @param {*} count
|
|
4
|
+
* @param {*} digit 上限位数
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
export function formatCount(count, digit) {
|
|
8
|
+
const countStr = count.toString()
|
|
9
|
+
if (countStr.length < 5) {
|
|
10
|
+
return countStr
|
|
11
|
+
} else if (countStr.length < digit) {
|
|
12
|
+
// 四舍五入w
|
|
13
|
+
const decimal = (count / 10000).toFixed(1)
|
|
14
|
+
return `${
|
|
15
|
+
decimal.endsWith('.0')
|
|
16
|
+
? decimal.substr(0, decimal.length - 2)
|
|
17
|
+
: decimal
|
|
18
|
+
}万`
|
|
19
|
+
} else {
|
|
20
|
+
return `${
|
|
21
|
+
'1'.padEnd(digit - 4, '0')
|
|
22
|
+
}万${
|
|
23
|
+
countStr === '1'.padEnd(digit, '0')
|
|
24
|
+
? ''
|
|
25
|
+
: '+'
|
|
26
|
+
}`
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 格式化点赞数
|
|
32
|
+
* a. < 10000 => 原样输出
|
|
33
|
+
* b. >= 10000 => 以万(w)为单位,保留一位小数 10000-10999 => 1w+ 11000-11999 => 1.1w+
|
|
34
|
+
* c. >= 1000000 => 100w+
|
|
35
|
+
* @param {number} count 点赞数量
|
|
36
|
+
* @return {string} 格式化后的点赞数
|
|
37
|
+
*/
|
|
38
|
+
export function formatLikesCount(count) {
|
|
39
|
+
return formatCount(count, 7)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 格式化UV数
|
|
44
|
+
* a. < 10000 => 原样输出
|
|
45
|
+
* b. >= 10000 => 以万(w)为单位,保留一位小数 10000-10999 => 1w+ 11000-11999 => 1.1w+
|
|
46
|
+
* c. >= 10000000 => 1000w+
|
|
47
|
+
* @param {number} count 点赞数量
|
|
48
|
+
* @return {string} 格式化后的点赞数
|
|
49
|
+
*/
|
|
50
|
+
export function formatUVCount(count) {
|
|
51
|
+
return formatCount(count, 8)
|
|
52
|
+
}
|
package/src/util/netUrl.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import memoize from 'lodash/memoize'
|
|
2
|
-
|
|
3
|
-
export const isSupportWebp = memoize(() => {
|
|
4
|
-
try {
|
|
5
|
-
return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
|
|
6
|
-
} catch (err) {
|
|
7
|
-
return false
|
|
8
|
-
}
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
export default (src, size) => {
|
|
12
|
-
if (!src) {
|
|
13
|
-
return ''
|
|
14
|
-
}
|
|
15
|
-
// TODO 是否一定要encode,如果未来出问题,移除encodeURI
|
|
16
|
-
let imageSrc = src.indexOf('%') === -1
|
|
17
|
-
? encodeURI(decodeURI(src))
|
|
18
|
-
: src
|
|
19
|
-
const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
|
|
20
|
-
const type = isSupportWebp() ? 'auto' : null
|
|
21
|
-
if (size) {
|
|
22
|
-
const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
|
|
23
|
-
const sizeString = {
|
|
24
|
-
1080: `${preStr}w_1080`,
|
|
25
|
-
720: `${preStr}w_720`,
|
|
26
|
-
480: `${preStr}w_480`,
|
|
27
|
-
360: `${preStr}w_360`,
|
|
28
|
-
240: `${preStr}w_240`
|
|
29
|
-
}[size] || ''
|
|
30
|
-
imageSrc += sizeString
|
|
31
|
-
} else if (type) {
|
|
32
|
-
imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
|
|
33
|
-
}
|
|
34
|
-
return imageSrc
|
|
35
|
-
}
|
|
1
|
+
import memoize from 'lodash/memoize'
|
|
2
|
+
|
|
3
|
+
export const isSupportWebp = memoize(() => {
|
|
4
|
+
try {
|
|
5
|
+
return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
|
|
6
|
+
} catch (err) {
|
|
7
|
+
return false
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export default (src, size) => {
|
|
12
|
+
if (!src) {
|
|
13
|
+
return ''
|
|
14
|
+
}
|
|
15
|
+
// TODO 是否一定要encode,如果未来出问题,移除encodeURI
|
|
16
|
+
let imageSrc = src.indexOf('%') === -1
|
|
17
|
+
? encodeURI(decodeURI(src))
|
|
18
|
+
: src
|
|
19
|
+
const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
|
|
20
|
+
const type = isSupportWebp() ? 'auto' : null
|
|
21
|
+
if (size) {
|
|
22
|
+
const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
|
|
23
|
+
const sizeString = {
|
|
24
|
+
1080: `${preStr}w_1080`,
|
|
25
|
+
720: `${preStr}w_720`,
|
|
26
|
+
480: `${preStr}w_480`,
|
|
27
|
+
360: `${preStr}w_360`,
|
|
28
|
+
240: `${preStr}w_240`
|
|
29
|
+
}[size] || ''
|
|
30
|
+
imageSrc += sizeString
|
|
31
|
+
} else if (type) {
|
|
32
|
+
imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
|
|
33
|
+
}
|
|
34
|
+
return imageSrc
|
|
35
|
+
}
|