From f33751a6236e366a25b3856eb221705471e4c8dd Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 21 Jan 2023 12:40:10 +0400 Subject: [PATCH] Move ComponentVideoView to TS --- src/dom_components/model/ComponentVideo.ts | 4 +- ...nentVideoView.js => ComponentVideoView.ts} | 65 +++++++++++-------- 2 files changed, 40 insertions(+), 29 deletions(-) rename src/dom_components/view/{ComponentVideoView.js => ComponentVideoView.ts} (65%) diff --git a/src/dom_components/model/ComponentVideo.ts b/src/dom_components/model/ComponentVideo.ts index fdf216e91..5af27ff73 100644 --- a/src/dom_components/model/ComponentVideo.ts +++ b/src/dom_components/model/ComponentVideo.ts @@ -295,7 +295,7 @@ export default class ComponentVideo extends ComponentImage { */ getYoutubeSrc() { const id = this.get('videoId'); - let url = this.get('ytUrl'); + let url = this.get('ytUrl') as string; const list = this.get('list'); url += id + (id.indexOf('?') < 0 ? '?' : ''); url += list ? `&list=${list}` : ''; @@ -326,7 +326,7 @@ export default class ComponentVideo extends ComponentImage { * @private */ getVimeoSrc() { - var url = this.get('viUrl'); + let url = this.get('viUrl') as string; url += this.get('videoId') + '?'; url += this.get('autoplay') ? '&autoplay=1' : ''; url += this.get('loop') ? '&loop=1' : ''; diff --git a/src/dom_components/view/ComponentVideoView.js b/src/dom_components/view/ComponentVideoView.ts similarity index 65% rename from src/dom_components/view/ComponentVideoView.js rename to src/dom_components/view/ComponentVideoView.ts index 3f1b75b10..e555b2f46 100644 --- a/src/dom_components/view/ComponentVideoView.js +++ b/src/dom_components/view/ComponentVideoView.ts @@ -1,17 +1,23 @@ -import ComponentView from './ComponentImageView'; -import OComponentView from './ComponentView'; +import ComponentVideo from '../model/ComponentVideo'; +import ComponentImageView from './ComponentImageView'; +import ComponentView from './ComponentView'; + +export default class ComponentVideoView extends ComponentImageView { + videoEl?: HTMLVideoElement | HTMLIFrameElement; + model!: ComponentVideo; -export default class ComponentVideoView extends ComponentView { tagName() { return 'div'; } + // @ts-ignore events() { return {}; } - initialize(o) { - OComponentView.prototype.initialize.apply(this, arguments); + initialize() { + // @ts-ignore + ComponentView.prototype.initialize.apply(this, arguments); const { model } = this; const props = ['loop', 'autoplay', 'controls', 'color', 'rel', 'modestbranding', 'poster']; const events = props.map(p => `change:${p}`).join(' '); @@ -60,25 +66,29 @@ export default class ComponentVideoView extends ComponentView { * @private */ updateVideo() { - var prov = this.model.get('provider'); - var videoEl = this.videoEl; - var md = this.model; + const { model, videoEl } = this; + const prov = model.get('provider'); switch (prov) { case 'yt': case 'ytnc': case 'vi': - this.model.trigger('change:videoId'); + model.trigger('change:videoId'); break; - default: - videoEl.loop = md.get('loop'); - videoEl.autoplay = md.get('autoplay'); - videoEl.controls = md.get('controls'); - videoEl.poster = md.get('poster'); + default: { + if (videoEl) { + const el = videoEl as HTMLVideoElement; + el.loop = model.get('loop'); + el.autoplay = model.get('autoplay'); + el.controls = model.get('controls'); + el.poster = model.get('poster'); + } + } } } - renderByProvider(prov) { - var videoEl; + renderByProvider(prov: string) { + let videoEl; + switch (prov) { case 'yt': videoEl = this.renderYoutube(); @@ -92,22 +102,23 @@ export default class ComponentVideoView extends ComponentView { default: videoEl = this.renderSource(); } + this.videoEl = videoEl; return videoEl; } renderSource() { - var el = document.createElement('video'); + const el = document.createElement('video'); el.src = this.model.get('src'); this.initVideoEl(el); return el; } renderYoutube() { - var el = document.createElement('iframe'); + const el = document.createElement('iframe'); el.src = this.model.getYoutubeSrc(); - el.frameBorder = 0; - el.setAttribute('allowfullscreen', true); + el.frameBorder = '0'; + el.setAttribute('allowfullscreen', 'true'); this.initVideoEl(el); return el; } @@ -115,8 +126,8 @@ export default class ComponentVideoView extends ComponentView { renderYoutubeNoCookie() { var el = document.createElement('iframe'); el.src = this.model.getYoutubeNoCookieSrc(); - el.frameBorder = 0; - el.setAttribute('allowfullscreen', true); + el.frameBorder = '0'; + el.setAttribute('allowfullscreen', 'true'); this.initVideoEl(el); return el; } @@ -124,20 +135,20 @@ export default class ComponentVideoView extends ComponentView { renderVimeo() { var el = document.createElement('iframe'); el.src = this.model.getVimeoSrc(); - el.frameBorder = 0; - el.setAttribute('allowfullscreen', true); + el.frameBorder = '0'; + el.setAttribute('allowfullscreen', 'true'); this.initVideoEl(el); return el; } - initVideoEl(el) { + initVideoEl(el: HTMLElement) { el.className = this.ppfx + 'no-pointer'; el.style.height = '100%'; el.style.width = '100%'; } - render(...args) { - ComponentView.prototype.render.apply(this, args); + render() { + ComponentView.prototype.render.apply(this); this.updateClasses(); var prov = this.model.get('provider'); this.el.appendChild(this.renderByProvider(prov));