|
|
@ -1,17 +1,23 @@ |
|
|
import ComponentView from './ComponentImageView'; |
|
|
import ComponentVideo from '../model/ComponentVideo'; |
|
|
import OComponentView from './ComponentView'; |
|
|
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() { |
|
|
tagName() { |
|
|
return 'div'; |
|
|
return 'div'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
events() { |
|
|
events() { |
|
|
return {}; |
|
|
return {}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
initialize(o) { |
|
|
initialize() { |
|
|
OComponentView.prototype.initialize.apply(this, arguments); |
|
|
// @ts-ignore
|
|
|
|
|
|
ComponentView.prototype.initialize.apply(this, arguments); |
|
|
const { model } = this; |
|
|
const { model } = this; |
|
|
const props = ['loop', 'autoplay', 'controls', 'color', 'rel', 'modestbranding', 'poster']; |
|
|
const props = ['loop', 'autoplay', 'controls', 'color', 'rel', 'modestbranding', 'poster']; |
|
|
const events = props.map(p => `change:${p}`).join(' '); |
|
|
const events = props.map(p => `change:${p}`).join(' '); |
|
|
@ -60,25 +66,29 @@ export default class ComponentVideoView extends ComponentView { |
|
|
* @private |
|
|
* @private |
|
|
*/ |
|
|
*/ |
|
|
updateVideo() { |
|
|
updateVideo() { |
|
|
var prov = this.model.get('provider'); |
|
|
const { model, videoEl } = this; |
|
|
var videoEl = this.videoEl; |
|
|
const prov = model.get('provider'); |
|
|
var md = this.model; |
|
|
|
|
|
switch (prov) { |
|
|
switch (prov) { |
|
|
case 'yt': |
|
|
case 'yt': |
|
|
case 'ytnc': |
|
|
case 'ytnc': |
|
|
case 'vi': |
|
|
case 'vi': |
|
|
this.model.trigger('change:videoId'); |
|
|
model.trigger('change:videoId'); |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: { |
|
|
videoEl.loop = md.get('loop'); |
|
|
if (videoEl) { |
|
|
videoEl.autoplay = md.get('autoplay'); |
|
|
const el = videoEl as HTMLVideoElement; |
|
|
videoEl.controls = md.get('controls'); |
|
|
el.loop = model.get('loop'); |
|
|
videoEl.poster = md.get('poster'); |
|
|
el.autoplay = model.get('autoplay'); |
|
|
|
|
|
el.controls = model.get('controls'); |
|
|
|
|
|
el.poster = model.get('poster'); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
renderByProvider(prov) { |
|
|
renderByProvider(prov: string) { |
|
|
var videoEl; |
|
|
let videoEl; |
|
|
|
|
|
|
|
|
switch (prov) { |
|
|
switch (prov) { |
|
|
case 'yt': |
|
|
case 'yt': |
|
|
videoEl = this.renderYoutube(); |
|
|
videoEl = this.renderYoutube(); |
|
|
@ -92,22 +102,23 @@ export default class ComponentVideoView extends ComponentView { |
|
|
default: |
|
|
default: |
|
|
videoEl = this.renderSource(); |
|
|
videoEl = this.renderSource(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
this.videoEl = videoEl; |
|
|
this.videoEl = videoEl; |
|
|
return videoEl; |
|
|
return videoEl; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
renderSource() { |
|
|
renderSource() { |
|
|
var el = document.createElement('video'); |
|
|
const el = document.createElement('video'); |
|
|
el.src = this.model.get('src'); |
|
|
el.src = this.model.get('src'); |
|
|
this.initVideoEl(el); |
|
|
this.initVideoEl(el); |
|
|
return el; |
|
|
return el; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
renderYoutube() { |
|
|
renderYoutube() { |
|
|
var el = document.createElement('iframe'); |
|
|
const el = document.createElement('iframe'); |
|
|
el.src = this.model.getYoutubeSrc(); |
|
|
el.src = this.model.getYoutubeSrc(); |
|
|
el.frameBorder = 0; |
|
|
el.frameBorder = '0'; |
|
|
el.setAttribute('allowfullscreen', true); |
|
|
el.setAttribute('allowfullscreen', 'true'); |
|
|
this.initVideoEl(el); |
|
|
this.initVideoEl(el); |
|
|
return el; |
|
|
return el; |
|
|
} |
|
|
} |
|
|
@ -115,8 +126,8 @@ export default class ComponentVideoView extends ComponentView { |
|
|
renderYoutubeNoCookie() { |
|
|
renderYoutubeNoCookie() { |
|
|
var el = document.createElement('iframe'); |
|
|
var el = document.createElement('iframe'); |
|
|
el.src = this.model.getYoutubeNoCookieSrc(); |
|
|
el.src = this.model.getYoutubeNoCookieSrc(); |
|
|
el.frameBorder = 0; |
|
|
el.frameBorder = '0'; |
|
|
el.setAttribute('allowfullscreen', true); |
|
|
el.setAttribute('allowfullscreen', 'true'); |
|
|
this.initVideoEl(el); |
|
|
this.initVideoEl(el); |
|
|
return el; |
|
|
return el; |
|
|
} |
|
|
} |
|
|
@ -124,20 +135,20 @@ export default class ComponentVideoView extends ComponentView { |
|
|
renderVimeo() { |
|
|
renderVimeo() { |
|
|
var el = document.createElement('iframe'); |
|
|
var el = document.createElement('iframe'); |
|
|
el.src = this.model.getVimeoSrc(); |
|
|
el.src = this.model.getVimeoSrc(); |
|
|
el.frameBorder = 0; |
|
|
el.frameBorder = '0'; |
|
|
el.setAttribute('allowfullscreen', true); |
|
|
el.setAttribute('allowfullscreen', 'true'); |
|
|
this.initVideoEl(el); |
|
|
this.initVideoEl(el); |
|
|
return el; |
|
|
return el; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
initVideoEl(el) { |
|
|
initVideoEl(el: HTMLElement) { |
|
|
el.className = this.ppfx + 'no-pointer'; |
|
|
el.className = this.ppfx + 'no-pointer'; |
|
|
el.style.height = '100%'; |
|
|
el.style.height = '100%'; |
|
|
el.style.width = '100%'; |
|
|
el.style.width = '100%'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
render(...args) { |
|
|
render() { |
|
|
ComponentView.prototype.render.apply(this, args); |
|
|
ComponentView.prototype.render.apply(this); |
|
|
this.updateClasses(); |
|
|
this.updateClasses(); |
|
|
var prov = this.model.get('provider'); |
|
|
var prov = this.model.get('provider'); |
|
|
this.el.appendChild(this.renderByProvider(prov)); |
|
|
this.el.appendChild(this.renderByProvider(prov)); |