aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/VideoBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/VideoBox.tsx')
-rw-r--r--src/client/views/nodes/VideoBox.tsx32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index fe7600fa3..4933869a7 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable jsx-a11y/media-has-caption */
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { action, computed, IReactionDisposer, makeObservable, observable, ObservableMap, reaction, runInAction } from 'mobx';
import { observer } from 'mobx-react';
@@ -59,8 +58,8 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
private _marqueeref = React.createRef<MarqueeAnnotator>();
private _mainCont: React.RefObject<HTMLDivElement> = React.createRef(); // outermost div
private _annotationLayer: React.RefObject<HTMLDivElement> = React.createRef();
- private _playRegionTimer: any = null; // timeout for playback
- private _controlsFadeTimer: any = null; // timeout for controls fade
+ private _playRegionTimer: NodeJS.Timeout | undefined; // timeout for playback
+ private _controlsFadeTimer: NodeJS.Timeout | undefined; // timeout for controls fade
private _ffref = React.createRef<CollectionFreeFormView>();
constructor(props: FieldViewProps) {
@@ -126,8 +125,8 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
}
override PlayerTime = () => this.player?.currentTime;
- override Pause = (update: boolean = true) => {
- this.pause(update);
+ override Pause = () => {
+ this.pause(true);
!this._keepCurrentlyPlaying && this.removeCurrentlyPlaying();
};
@@ -142,7 +141,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
switch (e.key) {
case 'ArrowLeft':
case 'ArrowRight':
- clearTimeout(this._controlsFadeTimer);
+ this._controlsFadeTimer && clearTimeout(this._controlsFadeTimer);
this._scrubbing = true;
this._controlsFadeTimer = setTimeout(
action(() => {
@@ -158,7 +157,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
};
// plays video
- @action public Play = (update: boolean = true) => {
+ @action public Play = () => {
if (this._playRegionTimer) return;
this._playing = true;
@@ -173,8 +172,8 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
}
try {
this._audioPlayer && this.player && (this._audioPlayer.currentTime = this.player?.currentTime);
- update && this.player && this.playFrom(start, undefined, true);
- update && this._audioPlayer?.play();
+ this.player && this.playFrom(start, undefined, true);
+ this._audioPlayer?.play();
} catch (e) {
console.log('Video Play Exception:', e);
}
@@ -217,7 +216,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
this._playTimer = undefined;
this.updateTimecode();
if (!this._finished) {
- clearTimeout(this._playRegionTimer); // if paused in the middle of playback, prevents restart on next play
+ this._playRegionTimer && clearTimeout(this._playRegionTimer); // if paused in the middle of playback, prevents restart on next play
}
this._playRegionTimer = undefined;
};
@@ -385,7 +384,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
getVideoThumbnails = () => {
if (this.dataDoc[this.fieldKey + '_thumbnails'] !== undefined) return;
this.dataDoc[this.fieldKey + '_thumbnails'] = new List<string>();
- const thumbnailPromises: Promise<any>[] = [];
+ const thumbnailPromises: Promise<string>[] = [];
const video = document.createElement('video');
video.onloadedmetadata = () => {
@@ -420,7 +419,6 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
this._videoRef = vref;
if (vref) {
this._videoRef!.ontimeupdate = this.updateTimecode;
- // @ts-ignore
// vref.onfullscreenchange = action((e) => this._fullScreen = vref.webkitDisplayingFullscreen);
this._disposers.reactionDisposer?.();
this._disposers.reactionDisposer = reaction(
@@ -469,7 +467,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
runInAction(() => {
this._screenCapture = !this._screenCapture;
});
- this._videoRef!.srcObject = !this._screenCapture ? undefined : await (navigator.mediaDevices as any).getDisplayMedia({ video: true });
+ this._videoRef!.srcObject = !this._screenCapture ? null : await navigator.mediaDevices.getDisplayMedia({ video: true });
},
icon: 'expand-arrows-alt',
});
@@ -559,9 +557,9 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
style={this._fullScreen ? this.fullScreenSize() : this.isCropped ? { width: 'max-content', height: 'max-content', transform: `scale(${1 / NumCast(this.layoutDoc._freeform_scale)})`, transformOrigin: 'top left' } : {}}
onCanPlay={this.videoLoad}
controls={false}
- onPlay={() => this.Play()}
+ onPlay={this.Play}
onSeeked={this.updateTimecode}
- onPause={() => this.Pause()}
+ onPause={this.Pause}
onClick={this._fullScreen ? () => (this.playing() ? this.Pause() : this.Play()) : e => e.preventDefault()}>
<source src={field.url.href} type="video/mp4" />
Not supported.
@@ -877,7 +875,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
return (
<div className="videoBox-stackPanel" style={{ transition: this.transition, height: `${100 - this.heightPercent}%`, display: this.heightPercent === 100 ? 'none' : '' }}>
<CollectionStackedTimeline
- ref={action((r: any) => {
+ ref={action((r: CollectionStackedTimeline) => {
this._stackedTimeline = r;
})}
// eslint-disable-next-line react/jsx-props-no-spreading
@@ -968,7 +966,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
focus = (anchor: Doc, options: FocusViewOptions) => (anchor.type === DocumentType.CONFIG ? undefined : this._ffref.current?.focus(anchor, options));
savedAnnotations = () => this._savedAnnotations;
render() {
- const borderRad = this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BorderRounding);
+ const borderRad = this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BorderRounding) as string;
const borderRadius = borderRad?.includes('px') ? `${Number(borderRad.split('px')[0]) / this.scaling()}px` : borderRad;
return (
<div