/** * DNA Component * Copyright (c) 2016 Chia Lab s.r.l. * All rights reserved. * * @name audio-media-player * @author Chialab s.r.l. <*****@*****.**> (http://www.chialab.com) * @description A set of components to handle media sources. */ import { register } from 'dna/components'; import { AudioVideoBaseComponent } from '../common/audio-video-base.js'; import css from './audio.css'; export class AudioMediaPlayerComponent extends AudioVideoBaseComponent { static get css() { return css; } createMedia() { return new Audio(); } _validateMedia(media) { return (media instanceof Audio || media.tagName === 'AUDIO'); } } export const AudioMediaPlayer = register('audio-media-player', { prototype: AudioMediaPlayerComponent, });
} } bindPlayer(player) { player = player || this.getPlayer() || this.setPlayer(); if (!player._containsMedia(this) && this.parentNode && !this.isAttached()) { if (this.nextElementSibling) { this.parentNode.insertBefore(player, this.nextElementSibling); } else { this.parentNode.appendChild(player); } } player.media = this; } detachedCallback() { let player = this.getPlayer(); if (!player.creating && !player.attachingMedia) { if (player && player.player && !player._containsMedia(this)) { if (player.parentNode) { player.parentNode.removeChild(player); } this.setPlayer(); } } } } export const DNAVideoPlayer = register('dna-video-player', { prototype: VideoMediaPlayerLinkComponent, extends: 'video', });
} } bindPlayer(player) { player = player || this.getPlayer() || this.setPlayer(); if (!player._containsMedia(this)) { if (this.nextElementSibling) { this.parentNode.insertBefore(player, this.nextElementSibling); } else { this.parentNode.appendChild(player); } } player.media = this; } detachedCallback() { let player = this.getPlayer(); if (!player.creating && !player.attachingMedia) { if (player && player.player && !player._containsMedia(this)) { if (player.parentNode) { player.parentNode.removeChild(player); } this.setPlayer(); } } } } export const DNAAudioPlayer = register('dna-audio-player', { prototype: AudioMediaPlayerLinkComponent, extends: 'audio', });
if (body.firstElementChild) { body.insertBefore(this, body.firstElementChild); } else { body.appendChild(this); } } this.classList.remove(this.dropHiddenClass); } hide() { this.__hidingAnimation = UI.animationEnd(this, () => { if (this.parentNode) { this.parentNode.removeChild(this); } }); this.classList.add(this.dropHiddenClass); } onTap(callback) { if (callback) { Gestures.addEventListener(this, 'tap', callback); } else { Gestures.removeEventListener(this, 'tap'); } } } export const BackDrop = register('back-drop', { prototype: BackDropComponent, });
/** * DNA Component * Copyright (c) 2016 Chia Lab s.r.l. * All rights reserved. * * @name vjs-media-source * @author Chialab s.r.l. <*****@*****.**> (http://www.chialab.com) * @description A set of components to handle media sources. */ import { register } from 'dna/components'; import { MediaSourceComponent } from '../../media-source/media-source.js'; export class VideoJSMediaSourceComponent extends MediaSourceComponent { getMimeByUrl(url) { if (VideoJSMediaSourceComponent.isYouTubeUrl(url)) { return 'video/youtube'; } return super.getMimeByUrl(url); } static isYouTubeUrl(url) { return url && url.match(/^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/); } } export const VideoJSMediaSource = register('vjs-media-source', { prototype: VideoJSMediaSourceComponent, });