@cloud-app-dev/vidc 3.2.3 → 3.2.6

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.
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import './index.less';
3
- import '../../../Player/style/iconfont';
4
3
  interface IToolsProps {
5
4
  scale: number;
6
5
  imgDownload: () => void;
@@ -1,10 +1,9 @@
1
1
  import "antd/lib/tooltip/style";
2
2
  import _Tooltip from "antd/lib/tooltip";
3
3
  import React from 'react';
4
- import IconFont from '../../../IconFont';
4
+ import IconFont from '../../../Player/iconfont';
5
5
  import FullScreen from '../../../FullScreen';
6
6
  import "./index.css";
7
- import '../../../Player/style/iconfont';
8
7
  function Tools(_ref) {
9
8
  var scale = _ref.scale,
10
9
  imgDownload = _ref.imgDownload,
@@ -4,16 +4,11 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
5
5
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import React, { useContext } from 'react';
8
- import { Context } from '../context';
7
+ import React from 'react';
9
8
  import { useTimes } from '../timeline';
10
9
  import { timeStamp } from '../util';
11
10
  function Time() {
12
- var _useContext = useContext(Context),
13
- api = _useContext.api,
14
- event = _useContext.event,
15
- isFpsPlay = _useContext.isFpsPlay;
16
- var _useTimes = useTimes(api, event, isFpsPlay),
11
+ var _useTimes = useTimes(),
17
12
  _useTimes2 = _slicedToArray(_useTimes, 3),
18
13
  current = _useTimes2[0],
19
14
  duration = _useTimes2[2];
@@ -1,3 +1,2 @@
1
- import type VideoEventInstance from '../event';
2
- declare function useBarStatus(event: VideoEventInstance): number;
1
+ declare function useBarStatus(): number;
3
2
  export default useBarStatus;
@@ -4,10 +4,13 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
5
5
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import { useState } from 'react';
7
+ import { useContext, useState } from 'react';
8
+ import { Context } from '../context';
8
9
  import { useRegisterPlayerEvents } from '../event';
9
10
  import EventName from '../event/eventName';
10
- function useBarStatus(event) {
11
+ function useBarStatus() {
12
+ var _useContext = useContext(Context),
13
+ event = _useContext.event;
11
14
  var _useState = useState({
12
15
  status: 1
13
16
  }),
@@ -41,7 +41,6 @@ function FrontendPlayer(_a) {
41
41
  var hasReady = api && event;
42
42
  var timeline = customTimeLine !== null && customTimeLine !== void 0 ? customTimeLine : /*#__PURE__*/React.createElement(FrontendTimeLine, {
43
43
  end: end,
44
- url: url,
45
44
  onSeek: onSeek,
46
45
  begin: begin,
47
46
  duration: duration
@@ -5,7 +5,6 @@ interface ITimeLineProps {
5
5
  begin: number;
6
6
  end: number;
7
7
  onSeek?: (time: number) => void;
8
- url?: string;
9
8
  }
10
- declare function FrontendTimeLine({ duration, begin, end, onSeek, url }: ITimeLineProps): JSX.Element;
9
+ declare function FrontendTimeLine({ duration, begin, end, onSeek }: ITimeLineProps): JSX.Element;
11
10
  export default FrontendTimeLine;
@@ -5,22 +5,17 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
5
5
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
6
6
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
7
7
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
- import React, { useMemo, useState, startTransition, useContext } from 'react';
8
+ import React, { useMemo, useState, startTransition } from 'react';
9
9
  import useBarStatus from './contraller_bar/useBarStatus';
10
10
  import { useTimes } from './timeline';
11
11
  import { FMT } from './util';
12
12
  import moment from 'moment';
13
- import { Context } from './context';
14
13
  import "./style/timeline.css";
15
14
  function FrontendTimeLine(_ref) {
16
15
  var duration = _ref.duration,
17
16
  begin = _ref.begin,
18
17
  end = _ref.end,
19
- onSeek = _ref.onSeek,
20
- url = _ref.url;
21
- var _useContext = useContext(Context),
22
- api = _useContext.api,
23
- event = _useContext.event;
18
+ onSeek = _ref.onSeek;
24
19
  // time 是记录seek时跳了多少
25
20
  var _useState = useState({
26
21
  time: 0,
@@ -31,9 +26,9 @@ function FrontendTimeLine(_ref) {
31
26
  _useState2 = _slicedToArray(_useState, 2),
32
27
  state = _useState2[0],
33
28
  setState = _useState2[1];
34
- var status = useBarStatus(event);
29
+ var status = useBarStatus();
35
30
  //获取视频当前播放时长单位s
36
- var _useTimes = useTimes(api, event),
31
+ var _useTimes = useTimes(),
37
32
  _useTimes2 = _slicedToArray(_useTimes, 1),
38
33
  currentTime = _useTimes2[0];
39
34
  var rTime = useMemo(function () {
@@ -1,8 +1,4 @@
1
- import type Api from './api';
2
- import type VideoEventInstance from './event';
3
- declare function useLiveHeart({ api, event, isLive }: {
4
- api: Api;
5
- event: VideoEventInstance;
1
+ declare function useLiveHeart({ isLive }: {
6
2
  isLive: boolean;
7
3
  }): void;
8
4
  export default useLiveHeart;
@@ -1,12 +1,14 @@
1
1
  import _useRafInterval from "ahooks/es/useRafInterval";
2
2
  import _useUpdateEffect from "ahooks/es/useUpdateEffect";
3
3
  import _useDocumentVisibility from "ahooks/es/useDocumentVisibility";
4
- import { useRef } from 'react';
4
+ import { useContext, useRef } from 'react';
5
+ import { Context } from './context';
5
6
  import Events from './event/eventName';
6
7
  function useLiveHeart(_ref) {
7
- var api = _ref.api,
8
- event = _ref.event,
9
- isLive = _ref.isLive;
8
+ var isLive = _ref.isLive;
9
+ var _useContext = useContext(Context),
10
+ api = _useContext.api,
11
+ event = _useContext.event;
10
12
  var documentVisibility = _useDocumentVisibility();
11
13
  var cTimeRef = useRef(null);
12
14
  var run = function run() {
@@ -1,11 +1,5 @@
1
1
  /// <reference types="react" />
2
- import Api from './api';
3
- import VideoEventInstance from './event';
4
2
  import './style/message.less';
5
- interface IVideoMessageProps {
6
- event: VideoEventInstance;
7
- api: Api;
8
- }
9
- declare function VideoMessage({ event, api }: IVideoMessageProps): JSX.Element;
3
+ declare function VideoMessage(): JSX.Element;
10
4
  export declare const NoSource: () => JSX.Element;
11
5
  export default VideoMessage;
@@ -4,17 +4,18 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
5
5
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import React, { useState, useMemo, useRef } from 'react';
7
+ import React, { useState, useMemo, useRef, useContext } from 'react';
8
8
  import IconFont from './iconfont';
9
9
  import { useRegisterPlayerEvent, useVideoEvent } from './event';
10
10
  import EventName from './event/eventName';
11
+ import { Context } from './context';
11
12
  import "./style/message.css";
12
- function VideoMessage(_ref) {
13
- var event = _ref.event,
14
- api = _ref.api;
13
+ function VideoMessage() {
14
+ var _useContext = useContext(Context),
15
+ api = _useContext.api;
15
16
  var _useState = useState({
16
17
  status: null,
17
- errorTimer: null,
18
+ errorTimer: 1,
18
19
  loading: false
19
20
  }),
20
21
  _useState2 = _slicedToArray(_useState, 2),
@@ -6,12 +6,11 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
6
6
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
7
7
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
8
8
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
9
- import React, { startTransition, useContext, useMemo, useState } from 'react';
9
+ import React, { startTransition, useMemo, useState } from 'react';
10
10
  import { useTimes } from './timeline';
11
11
  import useBarStatus from './contraller_bar/useBarStatus';
12
12
  import moment from 'moment';
13
13
  import { FMT } from './util';
14
- import { Context } from './context';
15
14
  import "./style/timeline.css";
16
15
  function SegmentTimeLine(_ref) {
17
16
  var index = _ref.index,
@@ -28,12 +27,8 @@ function SegmentTimeLine(_ref) {
28
27
  _useState2 = _slicedToArray(_useState, 2),
29
28
  state = _useState2[0],
30
29
  setState = _useState2[1];
31
- var _useContext = useContext(Context),
32
- api = _useContext.api,
33
- event = _useContext.event,
34
- isFpsPlay = _useContext.isFpsPlay;
35
- var status = useBarStatus(event);
36
- var _useTimes = useTimes(api, event, isFpsPlay),
30
+ var status = useBarStatus();
31
+ var _useTimes = useTimes(),
37
32
  _useTimes2 = _slicedToArray(_useTimes, 2),
38
33
  currentTime = _useTimes2[0],
39
34
  buffered = _useTimes2[1];
@@ -1,4 +1,5 @@
1
1
  import _useUpdateEffect from "ahooks/es/useUpdateEffect";
2
+ import _useLatest from "ahooks/es/useLatest";
2
3
  import _useToggle3 from "ahooks/es/useToggle";
3
4
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
5
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -85,6 +86,8 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
85
86
  var hasLink = useMemo(function () {
86
87
  return !!url || !!flvConfig.mediaDataSource.segments && vType === 'flv';
87
88
  }, [url, flvConfig.mediaDataSource.segments, vType]);
89
+ var hlsRef = _useLatest(hls);
90
+ var flvRef = _useLatest(flv);
88
91
  // 存储容器
89
92
  useEffect(function () {
90
93
  setState(function (old) {
@@ -100,10 +103,10 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
100
103
  }, [url]);
101
104
  // 特殊接口实现 reload是可能被重写的,但是API只暴露原生的方法
102
105
  var reload = function reload() {
103
- return playReload(video, event, flv, hls, url);
106
+ return playReload(video, event, flvRef.current, hlsRef.current, url);
104
107
  };
105
108
  var unload = function unload() {
106
- return playUnload(video, flv, hls);
109
+ return playUnload(video, flvRef.current, hlsRef.current);
107
110
  };
108
111
  var openFpsPlay = function openFpsPlay() {
109
112
  setState(function (old) {
@@ -165,18 +168,20 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
165
168
  container: state.container,
166
169
  api: playApi,
167
170
  event: playEvent,
168
- plugins: [flv, hls],
171
+ plugins: [flvRef.current, hlsRef.current],
169
172
  fit: fit
170
173
  };
171
- }, [video, state.container, playApi, playEvent, flv, hls, fit]);
174
+ },
175
+ // eslint-disable-next-line react-hooks/exhaustive-deps
176
+ [video, state.container, playApi, playEvent, fit]);
172
177
  _useUpdateEffect(function () {
173
178
  return api && event && video ? onCanPlayerInit === null || onCanPlayerInit === void 0 ? void 0 : onCanPlayerInit() : undefined;
174
179
  }, [api, event, video]);
175
180
  // 补货视频错误,自定义处理
176
181
  useErrorEvent({
177
182
  unload: unload,
178
- flv: flv,
179
- hls: hls,
183
+ flv: flvRef.current,
184
+ hls: hlsRef.current,
180
185
  api: playApi,
181
186
  event: event,
182
187
  reload: reload,
@@ -184,8 +189,6 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
184
189
  });
185
190
  // 直播缓冲追回
186
191
  useLiveHeart({
187
- api: playApi,
188
- event: event,
189
192
  isLive: isLive
190
193
  });
191
194
  var videoProps = {
@@ -228,15 +231,9 @@ var SinglePlayer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
228
231
  event: event,
229
232
  api: playApi,
230
233
  fpsDelay: fpsDelay
231
- }) : /*#__PURE__*/React.createElement(Empty, null)), hasApiEventInit && hasLink ? /*#__PURE__*/React.createElement(VideoMessage, {
232
- api: playApi,
233
- event: event
234
- }) : /*#__PURE__*/React.createElement(Empty, null), hasApiEventInit && hasLink && !hideContrallerBar ? /*#__PURE__*/React.createElement(ContrallerEvent, {
234
+ }) : /*#__PURE__*/React.createElement(Empty, null)), hasApiEventInit && hasLink ? /*#__PURE__*/React.createElement(VideoMessage, null) : /*#__PURE__*/React.createElement(Empty, null), hasApiEventInit && hasLink && !hideContrallerBar ? /*#__PURE__*/React.createElement(ContrallerEvent, {
235
235
  children: /*#__PURE__*/React.createElement(ContrallerBar, Object.assign({}, contrallerProps))
236
- }) : /*#__PURE__*/React.createElement(Empty, null), hasApiEventInit ? customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, {
237
- api: playApi,
238
- event: event
239
- }) : /*#__PURE__*/React.createElement(Empty, null) : /*#__PURE__*/React.createElement(Empty, null), children));
236
+ }) : /*#__PURE__*/React.createElement(Empty, null), hasApiEventInit ? customTimeLine ? customTimeLine : !hideContrallerBar ? /*#__PURE__*/React.createElement(Timeline, null) : /*#__PURE__*/React.createElement(Empty, null) : /*#__PURE__*/React.createElement(Empty, null), children));
240
237
  });
241
238
  function Empty() {
242
239
  return /*#__PURE__*/React.createElement(React.Fragment, null);
@@ -1,11 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type Api from './api';
3
- import type VideoEventInstance from './event';
4
2
  import './style/timeline.less';
5
- interface ITimeLineProps {
6
- api: Api;
7
- event: VideoEventInstance;
8
- }
9
- export declare function useTimes(api: Api, event: VideoEventInstance, isFpsPlay?: boolean): number[];
10
- declare function TimeLine({ api, event }: ITimeLineProps): JSX.Element;
3
+ export declare function useTimes(): number[];
4
+ declare function TimeLine(): JSX.Element;
11
5
  export default TimeLine;
@@ -4,12 +4,15 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
5
5
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
6
6
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import React, { useMemo, useState } from 'react';
7
+ import React, { useContext, useMemo, useState } from 'react';
8
8
  import useBarStatus from './contraller_bar/useBarStatus';
9
9
  import { useVideoEvent } from './event';
10
+ import { Context } from './context';
10
11
  import "./style/timeline.css";
11
- export function useTimes(api, event, isFpsPlay) {
12
- console.log(api, event);
12
+ export function useTimes() {
13
+ var _useContext = useContext(Context),
14
+ api = _useContext.api,
15
+ isFpsPlay = _useContext.isFpsPlay;
13
16
  var _useState = useState({
14
17
  currentTime: 0,
15
18
  buffered: 0
@@ -43,11 +46,11 @@ export function useTimes(api, event, isFpsPlay) {
43
46
  return [state.currentTime, state.buffered, api.getDuration()];
44
47
  }, [state.currentTime, state.buffered, api]);
45
48
  }
46
- function TimeLine(_ref) {
47
- var api = _ref.api,
48
- event = _ref.event;
49
- var status = useBarStatus(event);
50
- var _useTimes = useTimes(api, event),
49
+ function TimeLine() {
50
+ var _useContext2 = useContext(Context),
51
+ api = _useContext2.api;
52
+ var status = useBarStatus();
53
+ var _useTimes = useTimes(),
51
54
  _useTimes2 = _slicedToArray(_useTimes, 3),
52
55
  currentTime = _useTimes2[0],
53
56
  buffered = _useTimes2[1],
package/es/Player/util.js CHANGED
@@ -48,11 +48,9 @@ export function createFlvPlayer(video, url, isLive, flvConfig) {
48
48
  return player;
49
49
  }
50
50
  export var playReload = function playReload(video, event, flv, hls, url) {
51
- video.pause();
52
- video.removeAttribute('src');
51
+ playUnload(video, flv, hls);
53
52
  if (flv) {
54
53
  tryCatch(function () {
55
- flv.unload();
56
54
  flv.load();
57
55
  flv.play();
58
56
  });
@@ -61,7 +59,6 @@ export var playReload = function playReload(video, event, flv, hls, url) {
61
59
  tryCatch(function () {
62
60
  hls.swapAudioCodec();
63
61
  hls.recoverMediaError();
64
- hls.stopLoad();
65
62
  hls.startLoad();
66
63
  hls.loadSource(url);
67
64
  video.play();
@@ -15,6 +15,7 @@ interface ISegmentPlayerWithExtProps extends Omit<ILivePlayerWithExtProps, 'url'
15
15
  fpsDelay?: number;
16
16
  fps?: number;
17
17
  httpLoading: boolean;
18
+ screenIndex?: number;
18
19
  }
19
20
  export declare function SegmentPlayerWithExt({ begin, style, className, segments, mode, fpsDelay, fps, httpLoading, ...props }: ISegmentPlayerWithExtProps): JSX.Element;
20
21
  interface IFrontendPlayerWithExtProps extends Omit<ILivePlayerWithExtProps, 'url'> {
@@ -25,7 +26,9 @@ interface IFrontendPlayerWithExtProps extends Omit<ILivePlayerWithExtProps, 'url
25
26
  url: URL;
26
27
  begin: number;
27
28
  end: number;
29
+ screenIndex: number;
28
30
  }) => Promise<string>;
31
+ screenIndex?: number;
29
32
  }
30
- export declare function FrontendPlayerWithExt({ mode, style, className, segments, pluginDownloadUrl, httpLoading, ...props }: IFrontendPlayerWithExtProps): JSX.Element;
33
+ export declare function FrontendPlayerWithExt({ mode, style, className, segments, pluginDownloadUrl, screenIndex, httpLoading, ...props }: IFrontendPlayerWithExtProps): JSX.Element;
31
34
  export {};
@@ -101,8 +101,9 @@ export function FrontendPlayerWithExt(_a) {
101
101
  className = _a.className,
102
102
  segments = _a.segments,
103
103
  pluginDownloadUrl = _a.pluginDownloadUrl,
104
+ screenIndex = _a.screenIndex,
104
105
  httpLoading = _a.httpLoading,
105
- props = __rest(_a, ["mode", "style", "className", "segments", "pluginDownloadUrl", "httpLoading"]);
106
+ props = __rest(_a, ["mode", "style", "className", "segments", "pluginDownloadUrl", "screenIndex", "httpLoading"]);
106
107
  var _useState = useState({
107
108
  begin: 0,
108
109
  end: 0,
@@ -131,7 +132,8 @@ export function FrontendPlayerWithExt(_a) {
131
132
  props.getLocalRecordUrl({
132
133
  url: videoUrl,
133
134
  begin: moment(begin).unix(),
134
- end: moment(end).unix()
135
+ end: moment(end).unix(),
136
+ screenIndex: screenIndex
135
137
  }).then(function (url) {
136
138
  return setState({
137
139
  begin: begin,
@@ -162,7 +164,8 @@ export function FrontendPlayerWithExt(_a) {
162
164
  props.getLocalRecordUrl({
163
165
  url: videoUrl,
164
166
  begin: begin,
165
- end: end
167
+ end: end,
168
+ screenIndex: screenIndex
166
169
  }).then(function (url) {
167
170
  return setState(function (old) {
168
171
  return Object.assign(Object.assign({}, old), {
@@ -345,7 +345,8 @@ function RecordPlayer(_a) {
345
345
  mode: (_a = state.modes["".concat(item === null || item === void 0 ? void 0 : item.date, "-").concat(item.cid)]) !== null && _a !== void 0 ? _a : item.mode,
346
346
  fps: fps,
347
347
  fpsDelay: fpsDelay,
348
- httpLoading: item.loading
348
+ httpLoading: item.loading,
349
+ screenIndex: index
349
350
  })) : /*#__PURE__*/React.createElement(FrontendPlayerWithExt, Object.assign({}, item, {
350
351
  className: state.selectIndex === index ? 'player-current-index' : '',
351
352
  segments: (item === null || item === void 0 ? void 0 : item.segments) || [],
@@ -367,7 +368,8 @@ function RecordPlayer(_a) {
367
368
  },
368
369
  httpLoading: item.loading,
369
370
  getLocalRecordUrl: props.getLocalRecordUrl,
370
- pluginDownloadUrl: props.pluginDownloadUrl
371
+ pluginDownloadUrl: props.pluginDownloadUrl,
372
+ screenIndex: index
371
373
  }));
372
374
  })), /*#__PURE__*/React.createElement("div", {
373
375
  className: "player-tools-group"
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "@cloud-app-dev/vidc",
4
4
  "description": "Video Image Data Componennts",
5
- "version": "3.2.3",
5
+ "version": "3.2.6",
6
6
  "scripts": {
7
7
  "start": "dumi dev",
8
8
  "docs:build": "dumi build",
package/test.html DELETED
@@ -1,16 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Document</title>
8
- <script src="./test.js"></script>
9
- </head>
10
- <body>
11
- <script>
12
- const html = `<p class=MsoNormal ><span ><font face="仿宋_GB2312" >涉案服装合格证上带有</font><font face="仿宋_GB2312" >“售后服务热线:18928955232”等信息;购物小票显示该店地址为“芙蓉中路一段88号天健芙蓉盛,汇名仓外贸服装店(小门东1门旁)”,并且带有“合作热线:188-1184-0024、13360003040”等信息;店内宣传有“DHC二维码”等信息。涉案服装合格证上带有“‘</font></span><img width="720" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2671.png" ><span ><font face="仿宋_GB2312" >’商标、</font></span><span><a href="http://www.dhcfs.com" ><u><span class="16" ><font face="仿宋_GB2312" >www.dhcfs.com</font></span></u></a></span><span ><font face="仿宋_GB2312" >网址</font><font face="仿宋_GB2312" >”等信息,下方显示地址为“开平市幕沙路70号益华广场B幢131室”;购物小票上显示官网网址为“</font></span><span><a href="http://www.dhcfs.com" ><u><span class="16" ><font face="仿宋_GB2312" >www.dhcfs.com</font></span></u></a></span><span ><font face="仿宋_GB2312" >”;购物塑料袋上带有“‘</font></span><img width="720" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2672.png" ><a href="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2672.png">11111</a><span ><font face="仿宋_GB2312" >’商标、</font></span><span><a href="http://www.dhcfs.com" ><u><span class="16" ><font face="仿宋_GB2312" >www.dhcfs.com</font></span></u></a></span><span ><font face="仿宋_GB2312" >网址</font><font face="仿宋_GB2312" >”等信息。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:同其他实物证据意见一致。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:同上意见。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:出示证据</font><font face="仿宋_GB2312" >12封存实物。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:各被告确认被控侵权产品封存是否完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:当庭开启,发表比对意见。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:(</font><font face="仿宋_GB2312" >1)1件蓝色棒球运动服,正面带有“</font></span><img width="1576" height="1440" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2673.jpg" ><span ><font face="仿宋_GB2312" >” “YANKEES”标识,与原告第4336076号、第4336075号注册商标相同,背面带有“YANKEES”标识,与原告第4336075号注册商标相同,衣袖带有“</font></span><img width="2560" height="1390" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2674.jpg" ><span ><font face="仿宋_GB2312" >”标识,与原告第1800888号注册商标相同,纽扣使用“MLB”标识,与原告第4336063号注册商标相同,水洗标带有“</font></span><img width="1249" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2675.jpg" ><span ><font face="仿宋_GB2312" >” “MLB”标识,与原告第506821号、第4336063号注册商标相同;</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >(</font><font face="仿宋_GB2312" >2)1条紫色裤子,正面带有“</font></span><img width="1440" height="1932" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2676.jpg" ><span ><font face="仿宋_GB2312" >” “</font></span><img width="1280" height="652" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2677.jpg" ><span ><font face="仿宋_GB2312" >”标识,与原告第506820号、第4336084号注册商标相同,裤子的背面带有“</font></span><img width="2560" height="1390" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2678.jpg" ><span ><font face="仿宋_GB2312" >”标识,与原告第1800888号注册商标相同,水洗标带有“</font></span><img width="1249" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2679.jpg" ><span ><font face="仿宋_GB2312" >” “MLB”标识,与原告第506821号、第4336063号注册商标相同。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:真实性、合法性无异议,关联性不认可。该商品并非被告1销售,也没有证据证明该商品属于侵权商品,销售方有可能是从合法途径进货销售的。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:同被告1意见。关于购物袋和卡牌的意见与证据8一致。被告胡拔庆与</font></span><span ><font face="仿宋_GB2312" >大汇仓设计室旗下店铺</font><font face="仿宋_GB2312" >“汇名仓 外贸出口成衣工厂店”(长沙华创店)有其他自有品牌合作,没有授权其在该被控侵权产品上使用,该商品来源我方也不清楚,应当由该店铺经营者自行陈述。涉案产品也不是我方销售给涉案店铺的。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:出示证据</font><font face="仿宋_GB2312" >14封存实物。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:各被告确认被控侵权产品封存是否完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:当庭开启,发表比对意见。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:(</font><font face="仿宋_GB2312" >1)1件深蓝色棒球服,正面带有“</font></span><img width="1576" height="1440" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2680.jpg" ><span ><font face="仿宋_GB2312" >” “YANKEES”标识,与原告第4336076号、第4336075号注册商标相同,背面带有“</font></span><img width="2560" height="1386" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2681.jpg" ><span ><font face="仿宋_GB2312" >”标识,与原告第</font></span><span >1800888</span><span ><font face="仿宋_GB2312" >号注册商标相同,纽扣使用</font><font face="仿宋_GB2312" >“MLB”标识,与原告第4336063号注册商标相同,水洗标带有“</font></span><img width="1241" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2682.jpg" ><span ><font face="仿宋_GB2312" >” “MLB”标识,与原告第</font></span><span >506821</span><span ><font face="仿宋_GB2312" >号、第</font><font face="仿宋_GB2312" >4336063号注册商标相同;</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >(</font><font face="仿宋_GB2312" >2)1件蓝色卫衣,正面带有“</font></span><img width="1440" height="1540" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2683.jpg" ><span ><font face="仿宋_GB2312" >” “YANKEES”标识,与原告第</font></span><span >506836</span><span ><font face="仿宋_GB2312" >号、第</font><font face="仿宋_GB2312" >4336075号注册商标相同,水洗标带有“</font></span><img width="1241" height="720" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2684.jpg" ><span ><font face="仿宋_GB2312" >” “MLB”标识,与原告第</font></span><span >506821</span><span ><font face="仿宋_GB2312" >号、第</font><font face="仿宋_GB2312" >4336063号注册商标相同。蓝色卫衣吊牌“大汇仓”商标以及网站与其他被控侵权产品实物一致,但是吊牌上售后服务热线为4008088140,经销商为南京庆创服饰有限公司。</font></span><span ><o:p></o:p></span></p><table class=MsoTableGrid border=1 cellspacing=0 ><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr><tr><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td><td width=66 valign=top ><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p></td></tr></table><p class=MsoNormal ><span ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:与其他侵权实物证据质证意见一致。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:公证书、实物真实性、合法性无异议,认可蓝色棒球服上的卡牌是被告、4提供,但是蓝色卫衣该吊牌上所显示公司并不存在,该卡牌长的与被告2、4提供的卡牌有部分相似之处,但并不是被告提供,不清楚来源,细看发现字体和颜色是有差异的。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:从蓝色卫衣上的大汇仓商标和网站信息可以将商品来源指向被告</font><font face="仿宋_GB2312" >2、4。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:出示证据</font><font face="仿宋_GB2312" >16封存实物。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:各被告确认被控侵权产品封存是否完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >1:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >被</font><font face="仿宋_GB2312" >2、4:完好。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >?:当庭开启,发表比对意见。</font></span><span ><o:p></o:p></span></p><p class=MsoNormal ><span ><font face="仿宋_GB2312" >原:</font><font face="仿宋_GB2312" >1件蓝色棒球运动服,正面带有“</font></span><img width="1576" height="1440" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2685.jpg" ><span ><font face="仿宋_GB2312" >” “YANKEES”标识,与原告第4336076号、第4336075号注册商标相同,背面带有“</font></span><img width="2560" height="1390" src="file:////private/var/folders/51/wvlmktvs2r3__qp4bg2q5nbm0000gn/T/com.kingsoft.wpsoffice.mac/wps-huang/ksohtml//wps2686.jpg" ><span ><font face="仿宋_GB2312" >”标识,与原告第1800888号注册商标相同,纽扣带有“MLB”标识,与原告第4336063号注册商标相同,水</font></span></p>`
13
- document.body.innerHTML = parseHtml(html)
14
- </script>
15
- </body>
16
- </html>
package/test.js DELETED
@@ -1,96 +0,0 @@
1
- const igrone_tag = ['table', 'ul', 'ol', 'img'];
2
-
3
- /**
4
- *
5
- * @param {string} html
6
- * @returns {HTMLElement}
7
- */
8
- function parseHtml(html) {
9
- let htmlstr = '';
10
- const doc = new DOMParser().parseFromString(html, 'text/html');
11
- Array.from(doc.body.childNodes).forEach((item) => {
12
- const tag = item.tagName ? item.tagName.toLowerCase() : '';
13
- const html_str = getNodeHTML(item);
14
- htmlstr += igrone_tag.includes(tag) ? html_str : `<p class="parse-html-p">${html_str}</p>`;
15
- });
16
- return htmlstr;
17
- }
18
-
19
- const filter_map = {
20
- img: filterImgAttr,
21
- table: filterTableAttr,
22
- };
23
-
24
- /**
25
- *
26
- * @param {HTMLElement} node HTML
27
- * @returns {string}
28
- */
29
- function getNodeHTML(node, html = '') {
30
- if (node.nodeType === 3) {
31
- html += node.textContent.replace(/\s/, '');
32
- return html;
33
- }
34
-
35
- // 过滤其他
36
- if (node.nodeType !== 1) {
37
- return html;
38
- }
39
-
40
- const tag = node.tagName.toLowerCase();
41
-
42
- switch (tag) {
43
- case 'img':
44
- case 'table':
45
- filter_map[tag](node);
46
- html += node.outerHTML;
47
- break;
48
- default:
49
- const childNodes = node.childNodes;
50
- if (childNodes.length > 0) {
51
- Array.from(childNodes).forEach((item) => {
52
- html += getNodeHTML(item); // 合并标签处理,并且递归处理子元素
53
- });
54
- } else {
55
- html += node.innerText.replace(/\s/, '');
56
- }
57
- break;
58
- }
59
- return html;
60
- }
61
-
62
- /**
63
- *
64
- * @param {HTMLElement} node
65
- */
66
- function filterImgAttr(node) {
67
- node.removeAttribute('width');
68
- node.removeAttribute('height');
69
-
70
- // 非顶层的img定义成行内元素,顶层定义为块元素
71
- if (node.parentNode !== document.body) {
72
- node.setAttribute('width', 40);
73
- node.setAttribute('class', 'parse-html-img-inline');
74
- } else {
75
- node.style.display = 'block';
76
- node.setAttribute('class', 'parse-html-img-block');
77
- }
78
- }
79
-
80
- /**
81
- *
82
- * @param {HTMLTableElement} node
83
- */
84
- function filterTableAttr(node) {
85
- // 表格自适应
86
- node.setAttribute('width', '100%');
87
- node.setAttribute('class', 'parse-html-table');
88
- const tds = node.querySelectorAll('td');
89
- Array.from(tds).forEach((item_td) => {
90
- //td 自适应
91
- item_td.removeAttribute('width');
92
-
93
- //格式化td内容
94
- item_td.innerHTML = parseHtml(item_td.innerHTML);
95
- });
96
- }