From 2aa967aba93cb485ea2c4d10615cee505a354d15 Mon Sep 17 00:00:00 2001 From: Albin Larsson Date: Fri, 15 Jun 2018 12:33:30 +0200 Subject: [PATCH] Replace switch in source.js with destructuring --- src/js/source.js | 42 +++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/src/js/source.js b/src/js/source.js index d4a66963..c62db15a 100644 --- a/src/js/source.js +++ b/src/js/source.js @@ -8,6 +8,7 @@ import media from './media'; import support from './support'; import ui from './ui'; import { createElement, insertElement, removeElement } from './utils/elements'; +import { getDeep } from './utils/objects'; import is from './utils/is'; const source = { @@ -27,7 +28,7 @@ const source = { // Update source // Sources are not checked for support so be careful change(input) { - if (!is.object(input) || !('sources' in input) || !input.sources.length) { + if (!getDeep(input, 'sources.length')) { this.debug.warn('Invalid source format'); return; } @@ -52,32 +53,19 @@ const source = { } // Set the type and provider - this.type = input.type; - this.provider = !is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5; + const { sources, type } = input; + const [{ provider = providers.html5, src }] = sources; + const tagName = provider === 'html5' ? type : 'div'; + const attributes = provider === 'html5' ? {} : { src }; - // Check for support - this.supported = support.check(this.type, this.provider, this.config.playsinline); - - // Create new markup - switch (`${this.provider}:${this.type}`) { - case 'html5:video': - this.media = createElement('video'); - break; - - case 'html5:audio': - this.media = createElement('audio'); - break; - - case 'youtube:video': - case 'vimeo:video': - this.media = createElement('div', { - src: input.sources[0].src, - }); - break; - - default: - break; - } + Object.assign(this, { + provider, + type, + // Check for support + supported: support.check(type, provider, this.config.playsinline), + // Create new element + media: createElement(tagName, attributes), + }); // Inject the new element this.elements.container.appendChild(this.media); @@ -114,7 +102,7 @@ const source = { // Set new sources for html5 if (this.isHTML5) { - source.insertElements.call(this, 'source', input.sources); + source.insertElements.call(this, 'source', sources); } // Set video title