yootd 0.0.54 → 0.0.56
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/LICENSE +21 -21
- package/README.md +43 -43
- package/dist/Preview/components/preview/phone.scss +8 -8
- package/dist/Preview/index.scss +35 -35
- package/dist/Preview/types/type.d.ts +22 -22
- package/dist/anchor/index.scss +23 -23
- package/dist/approval-process/index.scss +95 -95
- package/dist/areas/index.scss +21 -21
- package/dist/areas/types/types.d.ts +40 -40
- package/dist/areas-treeSelect/index.scss +6 -6
- package/dist/areas-treeSelect/types/type.d.ts +39 -39
- package/dist/aside/components/SortableItem.scss +93 -93
- package/dist/aside/index.scss +25 -25
- package/dist/aside/types/types.d.ts +44 -44
- package/dist/badge/index.scss +5 -5
- package/dist/buildings/types/types.d.ts +21 -21
- package/dist/button/index.scss +30 -30
- package/dist/cascader/index.scss +5 -5
- package/dist/courses/types/types.d.ts +18 -18
- package/dist/department/types/types.d.ts +23 -23
- package/dist/dictionary/types/types.d.ts +14 -14
- package/dist/drawer-modal/index.scss +39 -39
- package/dist/drawer-modal/types/types.d.ts +3 -3
- package/dist/dropdown/assets/arrow-down.svg +5 -5
- package/dist/dropdown-select/index.scss +6 -6
- package/dist/dropdown-select/types/type.d.ts +18 -18
- package/dist/empty/index.scss +15 -15
- package/dist/go-back/components/index.scss +5 -5
- package/dist/go-back/index.scss +24 -24
- package/dist/group-title/index.scss +31 -31
- package/dist/hooks/useBem.js +10 -10
- package/dist/image/index.scss +26 -26
- package/dist/index.d.ts +1 -1
- package/dist/input/index.scss +5 -5
- package/dist/job-title/types/types.d.ts +17 -17
- package/dist/modal/index.scss +76 -76
- package/dist/pagination/index.scss +47 -47
- package/dist/role/types/types.d.ts +22 -22
- package/dist/school/index.scss +21 -21
- package/dist/school/types/types.d.ts +85 -85
- package/dist/state/index.scss +89 -89
- package/dist/steps/index.scss +32 -32
- package/dist/student-dropdown/types/types.d.ts +44 -44
- package/dist/table/components/primary-header-row/index.scss +58 -58
- package/dist/table/components/primary-tbody-row/index.scss +5 -5
- package/dist/table/index.module.scss +9 -9
- package/dist/table/index.scss +33 -33
- package/dist/tabs/index.scss +86 -86
- package/dist/tag/index.scss +4 -4
- package/dist/teacher/types/types.d.ts +33 -33
- package/dist/tree/index.scss +25 -25
- package/dist/upload/index.scss +115 -115
- package/dist/user-dropdown/types/types.d.ts +45 -45
- package/dist/video-player/index.d.ts +6 -2
- package/dist/video-player/index.js +53 -38
- package/dist/video-player/index.scss +310 -310
- package/dist/year-term/index.scss +21 -21
- package/dist/year-term/types/types.d.ts +35 -35
- package/dist/zones/index.module.scss +23 -23
- package/dist/zones/types/types.d.ts +26 -26
- package/package.json +1 -1
package/dist/upload/index.scss
CHANGED
@@ -1,115 +1,115 @@
|
|
1
|
-
.yot-upload {
|
2
|
-
.ant-upload-list-item {
|
3
|
-
padding: 0;
|
4
|
-
}
|
5
|
-
.ant-upload-list-item.ant-upload-list-item-done {
|
6
|
-
.ant-upload-icon {
|
7
|
-
.anticon.anticon-paper-clip {
|
8
|
-
color: var(--ant-color-primary);
|
9
|
-
}
|
10
|
-
}
|
11
|
-
}
|
12
|
-
.ant-upload-list-item-name {
|
13
|
-
display: flex;
|
14
|
-
align-items: center;
|
15
|
-
}
|
16
|
-
|
17
|
-
&-file {
|
18
|
-
&-btn {
|
19
|
-
&__icon {
|
20
|
-
width: 16px;
|
21
|
-
height: 16px;
|
22
|
-
}
|
23
|
-
&:hover &{
|
24
|
-
&__icon {
|
25
|
-
.path-1 {
|
26
|
-
fill: var(--ant-color-primary);
|
27
|
-
width: 20px;
|
28
|
-
}
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|
33
|
-
&__icon {
|
34
|
-
&--success {
|
35
|
-
width: 16px;
|
36
|
-
height: 16px;
|
37
|
-
position: absolute;
|
38
|
-
top: 0px;
|
39
|
-
right: 24px;
|
40
|
-
}
|
41
|
-
&--again {
|
42
|
-
width: 16px;
|
43
|
-
height: 16px;
|
44
|
-
position: absolute;
|
45
|
-
top: 0px;
|
46
|
-
right: 24px;
|
47
|
-
}
|
48
|
-
&--delete {
|
49
|
-
width: 16px;
|
50
|
-
height: 16px;
|
51
|
-
position: absolute;
|
52
|
-
top: 0px;
|
53
|
-
right: 2px;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
|
57
|
-
&-image {
|
58
|
-
&-btn {
|
59
|
-
width: 100px;
|
60
|
-
height: 100px;
|
61
|
-
border-radius: 8px;
|
62
|
-
background-color: var(--ant-color-border-secondary);
|
63
|
-
display: flex;
|
64
|
-
align-items: center;
|
65
|
-
justify-content: center;
|
66
|
-
flex-direction: column;
|
67
|
-
&__text {
|
68
|
-
font-size: 12px;
|
69
|
-
color: var(--ant-color-text-quaternary);
|
70
|
-
margin-top: 8px;
|
71
|
-
}
|
72
|
-
}
|
73
|
-
}
|
74
|
-
&-video {
|
75
|
-
&-content {
|
76
|
-
position: relative;
|
77
|
-
width: 102px;
|
78
|
-
height: 102px;
|
79
|
-
border-radius: 4px;
|
80
|
-
cursor: pointer;
|
81
|
-
padding: 8px;
|
82
|
-
box-sizing: border-box;
|
83
|
-
border: 1px solid var(--ant-color-border-secondary);
|
84
|
-
&__video {
|
85
|
-
width: 100%;
|
86
|
-
height: 100%;
|
87
|
-
}
|
88
|
-
&:hover &{
|
89
|
-
&-icon {
|
90
|
-
z-index: 10;
|
91
|
-
transition: all;
|
92
|
-
box-sizing: border-box;
|
93
|
-
position: absolute;
|
94
|
-
top: 8px;
|
95
|
-
left: 8px;
|
96
|
-
height: 86px;
|
97
|
-
width: 86px;
|
98
|
-
/* 这里的背景色根据需求设置 */
|
99
|
-
background: rgba(0, 0, 0, 0.6) !important;
|
100
|
-
background-color: #000;
|
101
|
-
filter: Alpha(Opacity=60);
|
102
|
-
opacity: 0.6;
|
103
|
-
&--delete {
|
104
|
-
width: 16px;
|
105
|
-
height: 16px;
|
106
|
-
position: absolute;
|
107
|
-
top: 36px;
|
108
|
-
left: 40%;
|
109
|
-
cursor: pointer;
|
110
|
-
}
|
111
|
-
}
|
112
|
-
}
|
113
|
-
}
|
114
|
-
}
|
115
|
-
}
|
1
|
+
.yot-upload {
|
2
|
+
.ant-upload-list-item {
|
3
|
+
padding: 0;
|
4
|
+
}
|
5
|
+
.ant-upload-list-item.ant-upload-list-item-done {
|
6
|
+
.ant-upload-icon {
|
7
|
+
.anticon.anticon-paper-clip {
|
8
|
+
color: var(--ant-color-primary);
|
9
|
+
}
|
10
|
+
}
|
11
|
+
}
|
12
|
+
.ant-upload-list-item-name {
|
13
|
+
display: flex;
|
14
|
+
align-items: center;
|
15
|
+
}
|
16
|
+
|
17
|
+
&-file {
|
18
|
+
&-btn {
|
19
|
+
&__icon {
|
20
|
+
width: 16px;
|
21
|
+
height: 16px;
|
22
|
+
}
|
23
|
+
&:hover &{
|
24
|
+
&__icon {
|
25
|
+
.path-1 {
|
26
|
+
fill: var(--ant-color-primary);
|
27
|
+
width: 20px;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
&__icon {
|
34
|
+
&--success {
|
35
|
+
width: 16px;
|
36
|
+
height: 16px;
|
37
|
+
position: absolute;
|
38
|
+
top: 0px;
|
39
|
+
right: 24px;
|
40
|
+
}
|
41
|
+
&--again {
|
42
|
+
width: 16px;
|
43
|
+
height: 16px;
|
44
|
+
position: absolute;
|
45
|
+
top: 0px;
|
46
|
+
right: 24px;
|
47
|
+
}
|
48
|
+
&--delete {
|
49
|
+
width: 16px;
|
50
|
+
height: 16px;
|
51
|
+
position: absolute;
|
52
|
+
top: 0px;
|
53
|
+
right: 2px;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
&-image {
|
58
|
+
&-btn {
|
59
|
+
width: 100px;
|
60
|
+
height: 100px;
|
61
|
+
border-radius: 8px;
|
62
|
+
background-color: var(--ant-color-border-secondary);
|
63
|
+
display: flex;
|
64
|
+
align-items: center;
|
65
|
+
justify-content: center;
|
66
|
+
flex-direction: column;
|
67
|
+
&__text {
|
68
|
+
font-size: 12px;
|
69
|
+
color: var(--ant-color-text-quaternary);
|
70
|
+
margin-top: 8px;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
&-video {
|
75
|
+
&-content {
|
76
|
+
position: relative;
|
77
|
+
width: 102px;
|
78
|
+
height: 102px;
|
79
|
+
border-radius: 4px;
|
80
|
+
cursor: pointer;
|
81
|
+
padding: 8px;
|
82
|
+
box-sizing: border-box;
|
83
|
+
border: 1px solid var(--ant-color-border-secondary);
|
84
|
+
&__video {
|
85
|
+
width: 100%;
|
86
|
+
height: 100%;
|
87
|
+
}
|
88
|
+
&:hover &{
|
89
|
+
&-icon {
|
90
|
+
z-index: 10;
|
91
|
+
transition: all;
|
92
|
+
box-sizing: border-box;
|
93
|
+
position: absolute;
|
94
|
+
top: 8px;
|
95
|
+
left: 8px;
|
96
|
+
height: 86px;
|
97
|
+
width: 86px;
|
98
|
+
/* 这里的背景色根据需求设置 */
|
99
|
+
background: rgba(0, 0, 0, 0.6) !important;
|
100
|
+
background-color: #000;
|
101
|
+
filter: Alpha(Opacity=60);
|
102
|
+
opacity: 0.6;
|
103
|
+
&--delete {
|
104
|
+
width: 16px;
|
105
|
+
height: 16px;
|
106
|
+
position: absolute;
|
107
|
+
top: 36px;
|
108
|
+
left: 40%;
|
109
|
+
cursor: pointer;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
@@ -1,45 +1,45 @@
|
|
1
|
-
import { SelectProps } from 'yootd';
|
2
|
-
|
3
|
-
export interface PageData<T> {
|
4
|
-
content: T[];
|
5
|
-
page: {
|
6
|
-
number: number;
|
7
|
-
size: number;
|
8
|
-
totalElements: number;
|
9
|
-
totalPages: number;
|
10
|
-
};
|
11
|
-
}
|
12
|
-
type LabelOptions =
|
13
|
-
| 'uniqueNumber'
|
14
|
-
| 'personalName'
|
15
|
-
| 'majorName'
|
16
|
-
| 'collegeMajorName'
|
17
|
-
| 'className'
|
18
|
-
| 'gradeName'
|
19
|
-
| 'genderName'
|
20
|
-
| 'deptName'
|
21
|
-
| 'credentialsNo'
|
22
|
-
| 'personalMobile';
|
23
|
-
export type UserDropdownProps = SelectProps & {
|
24
|
-
type?: number; // 1:学生2:教师3:职工
|
25
|
-
label?: LabelOptions[];
|
26
|
-
connectors?: string;
|
27
|
-
teacher_id?: number;
|
28
|
-
};
|
29
|
-
export interface IuserItem {
|
30
|
-
userId: string; // ID
|
31
|
-
uniqueNumber?: string; // 学号/工号
|
32
|
-
personalName: string; // 姓名
|
33
|
-
personalPhoto?: string; // 照片
|
34
|
-
userFaceType?: number; // 人脸类型(1白名单2黑名单3红名单)
|
35
|
-
majorName?: string; // 专业名称
|
36
|
-
collegeMajorName?: string; // 院系名称
|
37
|
-
className?: string; // 班级名称
|
38
|
-
gradeName?: string; // 年级名称
|
39
|
-
genderName?: string; // 性别
|
40
|
-
deptId?: number; // 部门ID
|
41
|
-
deptName?: string; // 部门名称
|
42
|
-
gender?: number; // 性别
|
43
|
-
credentialsNo?: string; // 证件号
|
44
|
-
personalMobile?: string; // 手机号
|
45
|
-
}
|
1
|
+
import { SelectProps } from 'yootd';
|
2
|
+
|
3
|
+
export interface PageData<T> {
|
4
|
+
content: T[];
|
5
|
+
page: {
|
6
|
+
number: number;
|
7
|
+
size: number;
|
8
|
+
totalElements: number;
|
9
|
+
totalPages: number;
|
10
|
+
};
|
11
|
+
}
|
12
|
+
type LabelOptions =
|
13
|
+
| 'uniqueNumber'
|
14
|
+
| 'personalName'
|
15
|
+
| 'majorName'
|
16
|
+
| 'collegeMajorName'
|
17
|
+
| 'className'
|
18
|
+
| 'gradeName'
|
19
|
+
| 'genderName'
|
20
|
+
| 'deptName'
|
21
|
+
| 'credentialsNo'
|
22
|
+
| 'personalMobile';
|
23
|
+
export type UserDropdownProps = SelectProps & {
|
24
|
+
type?: number; // 1:学生2:教师3:职工
|
25
|
+
label?: LabelOptions[];
|
26
|
+
connectors?: string;
|
27
|
+
teacher_id?: number;
|
28
|
+
};
|
29
|
+
export interface IuserItem {
|
30
|
+
userId: string; // ID
|
31
|
+
uniqueNumber?: string; // 学号/工号
|
32
|
+
personalName: string; // 姓名
|
33
|
+
personalPhoto?: string; // 照片
|
34
|
+
userFaceType?: number; // 人脸类型(1白名单2黑名单3红名单)
|
35
|
+
majorName?: string; // 专业名称
|
36
|
+
collegeMajorName?: string; // 院系名称
|
37
|
+
className?: string; // 班级名称
|
38
|
+
gradeName?: string; // 年级名称
|
39
|
+
genderName?: string; // 性别
|
40
|
+
deptId?: number; // 部门ID
|
41
|
+
deptName?: string; // 部门名称
|
42
|
+
gender?: number; // 性别
|
43
|
+
credentialsNo?: string; // 证件号
|
44
|
+
personalMobile?: string; // 手机号
|
45
|
+
}
|
@@ -1,5 +1,9 @@
|
|
1
|
-
import { CSSProperties
|
1
|
+
import React, { CSSProperties } from 'react';
|
2
2
|
import './index.scss';
|
3
|
+
export interface VideoPlayerRef {
|
4
|
+
play: () => void;
|
5
|
+
pause: () => void;
|
6
|
+
}
|
3
7
|
export interface VideoPlayerProps {
|
4
8
|
/**
|
5
9
|
* 视频地址
|
@@ -67,4 +71,4 @@ export interface VideoPlayerProps {
|
|
67
71
|
*/
|
68
72
|
onPlayStateChange?: (isPlaying: boolean) => void;
|
69
73
|
}
|
70
|
-
export declare const VideoPlayer:
|
74
|
+
export declare const VideoPlayer: React.ForwardRefExoticComponent<VideoPlayerProps & React.RefAttributes<VideoPlayerRef>>;
|
@@ -15,7 +15,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
15
15
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
16
16
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
17
17
|
import * as faceapi from '@vladmandic/face-api';
|
18
|
-
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
18
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
19
19
|
import { EndPoint } from 'yootd-webrtc-sdk';
|
20
20
|
import { useBem } from "../hooks/useBem";
|
21
21
|
import "./index.scss";
|
@@ -27,7 +27,7 @@ var MIN_SCORE = 0.5; // minimum score
|
|
27
27
|
var MAX_RESULTS = 20; // maximum number of results to return
|
28
28
|
|
29
29
|
var speeds = ['2.0', '1.75', '1.5', '1.25', '1.0', '0.75', '0.5'];
|
30
|
-
export var VideoPlayer = function
|
30
|
+
export var VideoPlayer = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
31
31
|
var src = _ref.src,
|
32
32
|
isLive = _ref.isLive,
|
33
33
|
controls = _ref.controls,
|
@@ -135,6 +135,18 @@ export var VideoPlayer = function VideoPlayer(_ref) {
|
|
135
135
|
_useState36 = _slicedToArray(_useState35, 2),
|
136
136
|
videoEleSize = _useState36[0],
|
137
137
|
setVideoEleSize = _useState36[1];
|
138
|
+
useImperativeHandle(ref, function () {
|
139
|
+
return {
|
140
|
+
play: function play() {
|
141
|
+
var _videoRef$current;
|
142
|
+
void ((_videoRef$current = videoRef.current) === null || _videoRef$current === void 0 ? void 0 : _videoRef$current.play());
|
143
|
+
},
|
144
|
+
pause: function pause() {
|
145
|
+
var _videoRef$current2;
|
146
|
+
(_videoRef$current2 = videoRef.current) === null || _videoRef$current2 === void 0 || _videoRef$current2.pause();
|
147
|
+
}
|
148
|
+
};
|
149
|
+
});
|
138
150
|
var handleFullScreen = function handleFullScreen() {
|
139
151
|
if (containerRef.current != null) {
|
140
152
|
void containerRef.current.requestFullscreen();
|
@@ -148,7 +160,7 @@ export var VideoPlayer = function VideoPlayer(_ref) {
|
|
148
160
|
var handleCanPlay = function handleCanPlay(e) {
|
149
161
|
var video = e.target;
|
150
162
|
try {
|
151
|
-
var _video$audioTracks
|
163
|
+
var _video$audioTracks;
|
152
164
|
setHasAudio(
|
153
165
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
154
166
|
// @ts-ignore
|
@@ -159,27 +171,29 @@ export var VideoPlayer = function VideoPlayer(_ref) {
|
|
159
171
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
160
172
|
// @ts-ignore
|
161
173
|
Boolean((_video$audioTracks = video.audioTracks) === null || _video$audioTracks === void 0 ? void 0 : _video$audioTracks.length));
|
162
|
-
console.log(
|
163
|
-
//
|
164
|
-
// @ts-
|
165
|
-
|
166
|
-
//
|
167
|
-
// @ts-
|
168
|
-
|
169
|
-
//
|
170
|
-
// @ts-
|
171
|
-
|
174
|
+
// console.log(
|
175
|
+
// '是否包含音频: ',
|
176
|
+
// // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
177
|
+
// // @ts-expect-error
|
178
|
+
// video.mozHasAudio ||
|
179
|
+
// // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
180
|
+
// // @ts-expect-error
|
181
|
+
// Boolean(video.webkitAudioDecodedByteCount) ||
|
182
|
+
// // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
183
|
+
// // @ts-expect-error
|
184
|
+
// Boolean(video.audioTracks?.length),
|
185
|
+
// );
|
172
186
|
} catch (e) {
|
173
187
|
console.log(e);
|
174
188
|
}
|
175
189
|
};
|
176
190
|
var handlePlayAndStop = function handlePlayAndStop() {
|
177
191
|
if (isPlaying) {
|
178
|
-
var _videoRef$
|
179
|
-
(_videoRef$
|
192
|
+
var _videoRef$current3;
|
193
|
+
(_videoRef$current3 = videoRef.current) === null || _videoRef$current3 === void 0 || _videoRef$current3.pause();
|
180
194
|
} else {
|
181
|
-
var _videoRef$
|
182
|
-
void ((_videoRef$
|
195
|
+
var _videoRef$current4;
|
196
|
+
void ((_videoRef$current4 = videoRef.current) === null || _videoRef$current4 === void 0 ? void 0 : _videoRef$current4.play());
|
183
197
|
}
|
184
198
|
};
|
185
199
|
var handleOnPlay = function handleOnPlay() {
|
@@ -522,26 +536,26 @@ export var VideoPlayer = function VideoPlayer(_ref) {
|
|
522
536
|
useEffect(function () {
|
523
537
|
var handler = null;
|
524
538
|
// let lastTime = Date.now();
|
525
|
-
/* const start = () => {
|
526
|
-
if (
|
527
|
-
!faceFeature.anchor &&
|
528
|
-
!faceFeature.emotion &&
|
529
|
-
!faceFeature.character
|
530
|
-
) {
|
531
|
-
return;
|
532
|
-
}
|
533
|
-
if (lastTime + 1000 <= Date.now()) {
|
534
|
-
lastTime = Date.now();
|
535
|
-
detect()
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
} else {
|
543
|
-
handler = requestAnimationFrame(start);
|
544
|
-
}
|
539
|
+
/* const start = () => {
|
540
|
+
if (
|
541
|
+
!faceFeature.anchor &&
|
542
|
+
!faceFeature.emotion &&
|
543
|
+
!faceFeature.character
|
544
|
+
) {
|
545
|
+
return;
|
546
|
+
}
|
547
|
+
if (lastTime + 1000 <= Date.now()) {
|
548
|
+
lastTime = Date.now();
|
549
|
+
detect()
|
550
|
+
.catch((e) => {
|
551
|
+
console.log("error", e);
|
552
|
+
})
|
553
|
+
.finally(() => {
|
554
|
+
handler = requestAnimationFrame(start);
|
555
|
+
});
|
556
|
+
} else {
|
557
|
+
handler = requestAnimationFrame(start);
|
558
|
+
}
|
545
559
|
}; */
|
546
560
|
|
547
561
|
var start = function start() {
|
@@ -872,4 +886,5 @@ export var VideoPlayer = function VideoPlayer(_ref) {
|
|
872
886
|
transform: "scale(".concat(canvasSize.width / videoEleSize.width, ")")
|
873
887
|
}
|
874
888
|
}) : null));
|
875
|
-
};
|
889
|
+
});
|
890
|
+
VideoPlayer.displayName = 'VideoPlayer';
|