From 5cca460986d3f43232d5e5e18f94cdc742cb61dc Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Sat, 13 Jun 2020 19:32:38 +0300 Subject: [PATCH 01/12] Migration mediainfo to ES6 modules --- package.json | 1 + src/components/mediainfo/mediainfo.js | 192 ++++++++++++++------------ 2 files changed, 102 insertions(+), 91 deletions(-) diff --git a/package.json b/package.json index 91d070e04..308979060 100644 --- a/package.json +++ b/package.json @@ -99,6 +99,7 @@ "src/components/images/imageLoader.js", "src/components/indicators/indicators.js", "src/components/lazyLoader/lazyLoaderIntersectionObserver.js", + "src/components/mediainfo/mediainfo.js", "src/components/playback/brightnessosd.js", "src/components/playback/mediasession.js", "src/components/playback/nowplayinghelper.js", diff --git a/src/components/mediainfo/mediainfo.js b/src/components/mediainfo/mediainfo.js index 7de11c42f..f64e67035 100644 --- a/src/components/mediainfo/mediainfo.js +++ b/src/components/mediainfo/mediainfo.js @@ -1,9 +1,18 @@ -define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'material-icons', 'css!./mediainfo.css', 'programStyles', 'emby-button'], function (datetime, globalize, appRouter, itemHelper, indicators) { - 'use strict'; +import datetime from 'datetime'; +import globalize from 'globalize'; +import appRouter from 'appRouter'; +import itemHelper from 'itemHelper'; +import indicators from 'indicators'; +import 'material-icons'; +import 'css!./mediainfo.css'; +import 'programStyles'; +import 'emby-button'; + +/* eslint-disable indent */ function getTimerIndicator(item) { - var status; + let status; if (item.Type === 'SeriesTimer') { return ''; @@ -30,11 +39,11 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater } function getProgramInfoHtml(item, options) { - var html = ''; + let html = ''; - var miscInfo = []; - var text; - var date; + const miscInfo = []; + let text; + let date; if (item.StartDate && options.programTime !== false) { @@ -48,35 +57,35 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater text += datetime.toLocaleDateString(date, { weekday: 'short', month: 'short', day: 'numeric' }); } - text += ' ' + datetime.getDisplayTime(date); + text += ` ${datetime.getDisplayTime(date)}`; if (item.EndDate) { date = datetime.parseISO8601Date(item.EndDate); - text += ' - ' + datetime.getDisplayTime(date); + text += ` - ${datetime.getDisplayTime(date)}`; } miscInfo.push(text); } catch (e) { - console.error('error parsing date: ' + item.StartDate); + console.error(`error parsing date: ${item.StartDate}`); } } if (item.ChannelNumber) { - miscInfo.push('CH ' + item.ChannelNumber); + miscInfo.push(`CH ${item.ChannelNumber}`); } if (item.ChannelName) { if (options.interactive && item.ChannelId) { miscInfo.push({ - html: '' + item.ChannelName + '' + })}">${item.ChannelName}` }); } else { miscInfo.push(item.ChannelName); @@ -84,7 +93,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater } if (options.timerIndicator !== false) { - var timerHtml = getTimerIndicator(item); + const timerHtml = getTimerIndicator(item); if (timerHtml) { miscInfo.push({ html: timerHtml @@ -92,24 +101,24 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater } } - html += miscInfo.map(function (m) { + html += miscInfo.map(m => { return getMediaInfoItem(m); }).join(''); return html; } - function getMediaInfoHtml(item, options) { - var html = ''; + export function getMediaInfoHtml(item, options) { + let html = ''; - var miscInfo = []; + const miscInfo = []; options = options || {}; - var text; - var date; - var minutes; - var count; + let text; + let date; + let minutes; + let count; - var showFolderRuntime = item.Type === 'MusicAlbum' || item.MediaType === 'MusicArtist' || item.MediaType === 'Playlist' || item.MediaType === 'MusicGenre'; + const showFolderRuntime = item.Type === 'MusicAlbum' || item.MediaType === 'MusicArtist' || item.MediaType === 'Playlist' || item.MediaType === 'MusicGenre'; if (showFolderRuntime) { @@ -143,7 +152,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater text = datetime.toLocaleDateString(date); miscInfo.push(text); } catch (e) { - console.error('error parsing date: ' + item.PremiereDate); + console.error(`error parsing date: ${item.PremiereDate}`); } } } @@ -176,7 +185,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater miscInfo.push(text); } } catch (e) { - console.error('error parsing date: ' + item.StartDate); + console.error(`error parsing date: ${item.StartDate}`); } } @@ -193,14 +202,14 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater try { - var endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); + const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); if (endYear !== item.ProductionYear) { - text += '-' + datetime.parseISO8601Date(item.EndDate).getFullYear(); + text += `-${datetime.parseISO8601Date(item.EndDate).getFullYear()}`; } } catch (e) { - console.error('error parsing date: ' + item.EndDate); + console.error(`error parsing date: ${item.EndDate}`); } } @@ -213,19 +222,19 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater if (options.programIndicator !== false) { if (item.IsLive) { miscInfo.push({ - html: '
' + globalize.translate('Live') + '
' + html: `
${globalize.translate('Live')}
` }); } else if (item.IsPremiere) { miscInfo.push({ - html: '
' + globalize.translate('Premiere') + '
' + html: `
${globalize.translate('Premiere')}
` }); } else if (item.IsSeries && !item.IsRepeat) { miscInfo.push({ - html: '
' + globalize.translate('AttributeNew') + '
' + html: `
${globalize.translate('AttributeNew')}
` }); } else if (item.IsSeries && item.IsRepeat) { miscInfo.push({ - html: '
' + globalize.translate('Repeat') + '
' + html: `
${globalize.translate('Repeat')}
` }); } } @@ -248,7 +257,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater text = globalize.translate('OriginalAirDateValue', datetime.toLocaleDateString(date)); miscInfo.push(text); } catch (e) { - console.error('error parsing date: ' + item.PremiereDate); + console.error(`error parsing date: ${item.PremiereDate}`); } } else if (item.ProductionYear) { miscInfo.push(item.ProductionYear); @@ -267,7 +276,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater text = datetime.parseISO8601Date(item.PremiereDate).getFullYear(); miscInfo.push(text); } catch (e) { - console.error('error parsing date: ' + item.PremiereDate); + console.error(`error parsing date: ${item.PremiereDate}`); } } } @@ -284,7 +293,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater minutes = minutes || 1; - miscInfo.push(Math.round(minutes) + ' mins'); + miscInfo.push(`${Math.round(minutes)} mins`); } } @@ -300,14 +309,14 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater } if (item.MediaType === 'Photo' && item.Width && item.Height) { - miscInfo.push(item.Width + 'x' + item.Height); + miscInfo.push(`${item.Width}x${item.Height}`); } if (options.container !== false && item.Type === 'Audio' && item.Container) { miscInfo.push(item.Container); } - html += miscInfo.map(function (m) { + html += miscInfo.map(m => { return getMediaInfoItem(m); }).join(''); @@ -320,15 +329,15 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater if (item.CriticRating && options.criticRating !== false) { if (item.CriticRating >= 60) { - html += '
' + item.CriticRating + '
'; + html += `
${item.CriticRating}
`; } else { - html += '
' + item.CriticRating + '
'; + html += `
${item.CriticRating}
`; } } if (options.endsAt !== false) { - var endsAt = getEndsAt(item); + const endsAt = getEndsAt(item); if (endsAt) { html += getMediaInfoItem(endsAt, 'endsAt'); } @@ -339,15 +348,15 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return html; } - function getEndsAt(item) { + export function getEndsAt(item) { if (item.MediaType === 'Video' && item.RunTimeTicks) { if (!item.StartDate) { - var endDate = new Date().getTime() + (item.RunTimeTicks / 10000); + let endDate = new Date().getTime() + (item.RunTimeTicks / 10000); endDate = new Date(endDate); - var displayTime = datetime.getDisplayTime(endDate); + const displayTime = datetime.getDisplayTime(endDate); return globalize.translate('EndsAtValue', displayTime); } } @@ -355,12 +364,12 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return null; } - function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) { + export function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) { - var endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000); + let endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000); endDate = new Date(endDate); - var displayTime = datetime.getDisplayTime(endDate); + const displayTime = datetime.getDisplayTime(endDate); if (includeText === false) { return displayTime; @@ -370,8 +379,8 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater function getMediaInfoItem(m, cssClass) { - cssClass = cssClass ? (cssClass + ' mediaInfoItem') : 'mediaInfoItem'; - var mediaInfoText = m; + cssClass = cssClass ? (`${cssClass} mediaInfoItem`) : 'mediaInfoItem'; + let mediaInfoText = m; if (typeof (m) !== 'string' && typeof (m) !== 'number') { @@ -379,13 +388,13 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return m.html; } mediaInfoText = m.text; - cssClass += ' ' + m.cssClass; + cssClass += ` ${m.cssClass}`; } - return '
' + mediaInfoText + '
'; + return `
${mediaInfoText}
`; } function getStarIconsHtml(item) { - var html = ''; + let html = ''; if (item.CommunityRating) { html += '
'; @@ -400,7 +409,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater function dynamicEndTime(elem, item) { - var interval = setInterval(function () { + const interval = setInterval(() => { if (!document.body.contains(elem)) { @@ -413,15 +422,15 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater }, 60000); } - function fillPrimaryMediaInfo(elem, item, options) { - var html = getPrimaryMediaInfoHtml(item, options); + export function fillPrimaryMediaInfo(elem, item, options) { + const html = getPrimaryMediaInfoHtml(item, options); elem.innerHTML = html; afterFill(elem, item, options); } - function fillSecondaryMediaInfo(elem, item, options) { - var html = getSecondaryMediaInfoHtml(item, options); + export function fillSecondaryMediaInfo(elem, item, options) { + const html = getSecondaryMediaInfoHtml(item, options); elem.innerHTML = html; afterFill(elem, item, options); @@ -430,13 +439,13 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater function afterFill(elem, item, options) { if (options.endsAt !== false) { - var endsAtElem = elem.querySelector('.endsAt'); + const endsAtElem = elem.querySelector('.endsAt'); if (endsAtElem) { dynamicEndTime(endsAtElem, item); } } - var lnkChannel = elem.querySelector('.lnkChannel'); + const lnkChannel = elem.querySelector('.lnkChannel'); if (lnkChannel) { lnkChannel.addEventListener('click', onChannelLinkClick); } @@ -444,8 +453,8 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater function onChannelLinkClick(e) { - var channelId = this.getAttribute('data-id'); - var serverId = this.getAttribute('data-serverid'); + const channelId = this.getAttribute('data-id'); + const serverId = this.getAttribute('data-serverid'); appRouter.showItem(channelId, serverId); @@ -453,7 +462,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return false; } - function getPrimaryMediaInfoHtml(item, options) { + export function getPrimaryMediaInfoHtml(item, options) { options = options || {}; if (options.interactive == null) { @@ -463,7 +472,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return getMediaInfoHtml(item, options); } - function getSecondaryMediaInfoHtml(item, options) { + export function getSecondaryMediaInfoHtml(item, options) { options = options || {}; if (options.interactive == null) { @@ -476,10 +485,10 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return ''; } - function getResolutionText(i) { + export function getResolutionText(i) { - var width = i.Width; - var height = i.Height; + const width = i.Width; + const height = i.Height; if (width && height) { @@ -522,28 +531,28 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater return null; } - var mediaSource = item.MediaSources[0]; + const mediaSource = item.MediaSources[0]; if (!mediaSource) { return null; } - return (mediaSource.MediaStreams || []).filter(function (i) { + return (mediaSource.MediaStreams || []).filter(i => { return i.Type === 'Audio' && (i.Index === mediaSource.DefaultAudioStreamIndex || mediaSource.DefaultAudioStreamIndex == null); })[0]; } - function getMediaInfoStats(item, options) { + export function getMediaInfoStats(item, options) { options = options || {}; - var list = []; + const list = []; - var mediaSource = (item.MediaSources || [])[0] || {}; + const mediaSource = (item.MediaSources || [])[0] || {}; - var videoStream = (mediaSource.MediaStreams || []).filter(function (i) { + const videoStream = (mediaSource.MediaStreams || []).filter(i => { return i.Type === 'Video'; })[0] || {}; - var audioStream = getAudioStreamForDisplay(item) || {}; + const audioStream = getAudioStreamForDisplay(item) || {}; if (item.VideoType === 'Dvd') { list.push({ @@ -563,7 +572,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater // html += '
' + mediaSource.Container + '
'; //} - var resolutionText = getResolutionText(videoStream); + const resolutionText = getResolutionText(videoStream); if (resolutionText) { list.push({ type: 'mediainfo', @@ -578,8 +587,8 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater }); } - var channels = audioStream.Channels; - var channelText; + const channels = audioStream.Channels; + let channelText; if (channels === 8) { @@ -605,7 +614,7 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater }); } - var audioCodec = (audioStream.Codec || '').toLowerCase(); + const audioCodec = (audioStream.Codec || '').toLowerCase(); if ((audioCodec === 'dca' || audioCodec === 'dts') && audioStream.Profile) { list.push({ @@ -621,27 +630,28 @@ define(['datetime', 'globalize', 'appRouter', 'itemHelper', 'indicators', 'mater if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { - var dateCreated = datetime.parseISO8601Date(item.DateCreated); + const dateCreated = datetime.parseISO8601Date(item.DateCreated); list.push({ type: 'added', - text: globalize.translate('AddedOnValue', datetime.toLocaleDateString(dateCreated) + ' ' + datetime.getDisplayTime(dateCreated)) + text: globalize.translate('AddedOnValue', `${datetime.toLocaleDateString(dateCreated)} ${datetime.getDisplayTime(dateCreated)}`) }); } return list; } - return { - getMediaInfoHtml: getPrimaryMediaInfoHtml, - fill: fillPrimaryMediaInfo, - getEndsAt: getEndsAt, - getEndsAtFromPosition: getEndsAtFromPosition, - getPrimaryMediaInfoHtml: getPrimaryMediaInfoHtml, - getSecondaryMediaInfoHtml: getSecondaryMediaInfoHtml, - fillPrimaryMediaInfo: fillPrimaryMediaInfo, - fillSecondaryMediaInfo: fillSecondaryMediaInfo, - getMediaInfoStats: getMediaInfoStats, - getResolutionText: getResolutionText - }; -}); +/* eslint-enable indent */ + +export default { + getMediaInfoHtml: getPrimaryMediaInfoHtml, + fill: fillPrimaryMediaInfo, + getEndsAt: getEndsAt, + getEndsAtFromPosition: getEndsAtFromPosition, + getPrimaryMediaInfoHtml: getPrimaryMediaInfoHtml, + getSecondaryMediaInfoHtml: getSecondaryMediaInfoHtml, + fillPrimaryMediaInfo: fillPrimaryMediaInfo, + fillSecondaryMediaInfo: fillSecondaryMediaInfo, + getMediaInfoStats: getMediaInfoStats, + getResolutionText: getResolutionText +}; From 1556cc10e1ba94f490d9f902e62fd3b19c736826 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Sat, 13 Jun 2020 19:36:44 +0300 Subject: [PATCH 02/12] remove duplicate code --- src/components/mediainfo/mediainfo.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/mediainfo/mediainfo.js b/src/components/mediainfo/mediainfo.js index f64e67035..724d3462f 100644 --- a/src/components/mediainfo/mediainfo.js +++ b/src/components/mediainfo/mediainfo.js @@ -645,7 +645,6 @@ import 'emby-button'; export default { getMediaInfoHtml: getPrimaryMediaInfoHtml, - fill: fillPrimaryMediaInfo, getEndsAt: getEndsAt, getEndsAtFromPosition: getEndsAtFromPosition, getPrimaryMediaInfoHtml: getPrimaryMediaInfoHtml, From f296eb34750a38d0f185c49fdbe4efe425ef284e Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 17 Jul 2020 11:30:39 +0100 Subject: [PATCH 03/12] Migration of taskbutton and touchHelper to ES6 modules --- package.json | 14 +- src/components/maintabsmanager.js | 2 +- src/controllers/dashboard/mediaLibrary.js | 4 +- src/controllers/livetvstatus.js | 4 +- src/controllers/playback/videoosd.js | 2 +- src/scripts/taskbutton.js | 227 +++++++++++----------- src/scripts/touchHelper.js | 23 ++- 7 files changed, 140 insertions(+), 136 deletions(-) diff --git a/package.json b/package.json index b911778bc..ecf54d2ca 100644 --- a/package.json +++ b/package.json @@ -154,6 +154,9 @@ "src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContents.js", "src/plugins/photoPlayer/plugin.js", + "src/scripts/settings/appSettings.js", + "src/scripts/settings/userSettings.js", + "src/scripts/settings/webSettings.js", "src/scripts/deleteHelper.js", "src/scripts/dfnshelper.js", "src/scripts/dom.js", @@ -161,14 +164,13 @@ "src/scripts/filesystem.js", "src/scripts/imagehelper.js", "src/scripts/inputManager.js", + "src/scripts/keyboardNavigation.js", + "src/scripts/taskbutton.js", + "src/scripts/touchHelper.js", + "src/scripts/themeLoader.js", "src/plugins/backdropScreensaver/plugin.js", "src/components/filterdialog/filterdialog.js", - "src/components/fetchhelper.js", - "src/scripts/keyboardNavigation.js", - "src/scripts/settings/appSettings.js", - "src/scripts/settings/userSettings.js", - "src/scripts/themeLoader.js", - "src/scripts/settings/webSettings.js" + "src/components/fetchhelper.js" ], "plugins": [ "@babel/plugin-transform-modules-amd", diff --git a/src/components/maintabsmanager.js b/src/components/maintabsmanager.js index e1c543436..e50d75bc0 100644 --- a/src/components/maintabsmanager.js +++ b/src/components/maintabsmanager.js @@ -85,7 +85,7 @@ define(['dom', 'browser', 'events', 'emby-tabs', 'emby-button'], function (dom, require(['touchHelper'], function (TouchHelper) { - var touchHelper = new TouchHelper(view.parentNode.parentNode); + var touchHelper = new TouchHelper.default(view.parentNode.parentNode); events.on(touchHelper, 'swipeleft', onSwipeLeft); events.on(touchHelper, 'swiperight', onSwipeRight); diff --git a/src/controllers/dashboard/mediaLibrary.js b/src/controllers/dashboard/mediaLibrary.js index d9b288c62..8e0020f62 100644 --- a/src/controllers/dashboard/mediaLibrary.js +++ b/src/controllers/dashboard/mediaLibrary.js @@ -372,7 +372,7 @@ define(['jQuery', 'apphost', 'scripts/taskbutton', 'loading', 'libraryMenu', 'gl pageIdOn('pageshow', 'mediaLibraryPage', function () { libraryMenu.setTabs('librarysetup', 0, getTabs); var page = this; - taskButton({ + taskButton.default({ mode: 'on', progressElem: page.querySelector('.refreshProgress'), taskKey: 'RefreshLibrary', @@ -381,7 +381,7 @@ define(['jQuery', 'apphost', 'scripts/taskbutton', 'loading', 'libraryMenu', 'gl }); pageIdOn('pagebeforehide', 'mediaLibraryPage', function () { var page = this; - taskButton({ + taskButton.default({ mode: 'off', progressElem: page.querySelector('.refreshProgress'), taskKey: 'RefreshLibrary', diff --git a/src/controllers/livetvstatus.js b/src/controllers/livetvstatus.js index c6daf53a4..efafd5087 100644 --- a/src/controllers/livetvstatus.js +++ b/src/controllers/livetvstatus.js @@ -303,7 +303,7 @@ define(['jQuery', 'globalize', 'scripts/taskbutton', 'dom', 'libraryMenu', 'layo }).on('pageshow', '#liveTvStatusPage', function () { var page = this; reload(page); - taskButton({ + taskButton.default({ mode: 'on', progressElem: page.querySelector('.refreshGuideProgress'), taskKey: 'RefreshGuide', @@ -311,7 +311,7 @@ define(['jQuery', 'globalize', 'scripts/taskbutton', 'dom', 'libraryMenu', 'layo }); }).on('pagehide', '#liveTvStatusPage', function () { var page = this; - taskButton({ + taskButton.default({ mode: 'off', progressElem: page.querySelector('.refreshGuideProgress'), taskKey: 'RefreshGuide', diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/videoosd.js index d6caf24e8..0907a700b 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/videoosd.js @@ -1533,7 +1533,7 @@ define(['playbackManager', 'dom', 'inputManager', 'datetime', 'itemHelper', 'med if (browser.touch) { (function () { require(['touchHelper'], function (TouchHelper) { - self.touchHelper = new TouchHelper(view, { + self.touchHelper = new TouchHelper.default(view, { swipeYThreshold: 30, triggerOnMove: true, preventDefaultOnMove: true, diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index 8facaf890..d2c9d6c91 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -1,119 +1,122 @@ -define(['events', 'userSettings', 'serverNotifications', 'connectionManager', 'globalize', 'emby-button'], function (events, userSettings, serverNotifications, connectionManager, globalize) { - 'use strict'; +import events from 'events'; +import * as userSettings from 'userSettings'; +import serverNotifications from 'serverNotifications'; +import connectionManager from 'connectionManager'; +import globalize from 'globalize'; +import 'emby-button'; - return function (options) { - function pollTasks() { - connectionManager.getApiClient(serverId).getScheduledTasks({ - IsEnabled: true - }).then(updateTasks); - } +export default function (options) { + function pollTasks() { + connectionManager.getApiClient(serverId).getScheduledTasks({ + IsEnabled: true + }).then(updateTasks); + } - function updateTasks(tasks) { - var task = tasks.filter(function (t) { - return t.Key == options.taskKey; - })[0]; - - if (options.panel) { - if (task) { - options.panel.classList.remove('hide'); - } else { - options.panel.classList.add('hide'); - } - } - - if (!task) { - return; - } - - if (task.State == 'Idle') { - button.removeAttribute('disabled'); - } else { - button.setAttribute('disabled', 'disabled'); - } - - button.setAttribute('data-taskid', task.Id); - var progress = (task.CurrentProgressPercentage || 0).toFixed(1); - - if (options.progressElem) { - options.progressElem.value = progress; - - if (task.State == 'Running') { - options.progressElem.classList.remove('hide'); - } else { - options.progressElem.classList.add('hide'); - } - } - - if (options.lastResultElem) { - var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; - - if (lastResult == 'Failed') { - options.lastResultElem.html('(' + globalize.translate('LabelFailed') + ')'); - } else if (lastResult == 'Cancelled') { - options.lastResultElem.html('(' + globalize.translate('LabelCancelled') + ')'); - } else if (lastResult == 'Aborted') { - options.lastResultElem.html('' + globalize.translate('LabelAbortedByServerShutdown') + ''); - } else { - options.lastResultElem.html(lastResult); - } - } - } - - function onScheduledTaskMessageConfirmed(id) { - connectionManager.getApiClient(serverId).startScheduledTask(id).then(pollTasks); - } - - function onButtonClick() { - onScheduledTaskMessageConfirmed(this.getAttribute('data-taskid')); - } - - function onScheduledTasksUpdate(e, apiClient, info) { - if (apiClient.serverId() === serverId) { - updateTasks(info); - } - } - - var pollInterval; - var button = options.button; - var serverId = ApiClient.serverId(); - - function onPollIntervalFired() { - if (!connectionManager.getApiClient(serverId).isMessageChannelOpen()) { - pollTasks(); - } - } - - function startInterval() { - var apiClient = connectionManager.getApiClient(serverId); - - if (pollInterval) { - clearInterval(pollInterval); - } - apiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000'); - pollInterval = setInterval(onPollIntervalFired, 5000); - } - - function stopInterval() { - connectionManager.getApiClient(serverId).sendMessage('ScheduledTasksInfoStop'); - - if (pollInterval) { - clearInterval(pollInterval); - } - } + function updateTasks(tasks) { + var task = tasks.filter(function (t) { + return t.Key == options.taskKey; + })[0]; if (options.panel) { - options.panel.classList.add('hide'); + if (task) { + options.panel.classList.remove('hide'); + } else { + options.panel.classList.add('hide'); + } } - if (options.mode == 'off') { - button.removeEventListener('click', onButtonClick); - events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); - stopInterval(); - } else { - button.addEventListener('click', onButtonClick); - pollTasks(); - startInterval(); - events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); + if (!task) { + return; } - }; -}); + + if (task.State == 'Idle') { + button.removeAttribute('disabled'); + } else { + button.setAttribute('disabled', 'disabled'); + } + + button.setAttribute('data-taskid', task.Id); + var progress = (task.CurrentProgressPercentage || 0).toFixed(1); + + if (options.progressElem) { + options.progressElem.value = progress; + + if (task.State == 'Running') { + options.progressElem.classList.remove('hide'); + } else { + options.progressElem.classList.add('hide'); + } + } + + if (options.lastResultElem) { + var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; + + if (lastResult == 'Failed') { + options.lastResultElem.html('(' + globalize.translate('LabelFailed') + ')'); + } else if (lastResult == 'Cancelled') { + options.lastResultElem.html('(' + globalize.translate('LabelCancelled') + ')'); + } else if (lastResult == 'Aborted') { + options.lastResultElem.html('' + globalize.translate('LabelAbortedByServerShutdown') + ''); + } else { + options.lastResultElem.html(lastResult); + } + } + } + + function onScheduledTaskMessageConfirmed(id) { + connectionManager.getApiClient(serverId).startScheduledTask(id).then(pollTasks); + } + + function onButtonClick() { + onScheduledTaskMessageConfirmed(this.getAttribute('data-taskid')); + } + + function onScheduledTasksUpdate(e, apiClient, info) { + if (apiClient.serverId() === serverId) { + updateTasks(info); + } + } + + var pollInterval; + var button = options.button; + var serverId = ApiClient.serverId(); + + function onPollIntervalFired() { + if (!connectionManager.getApiClient(serverId).isMessageChannelOpen()) { + pollTasks(); + } + } + + function startInterval() { + var apiClient = connectionManager.getApiClient(serverId); + + if (pollInterval) { + clearInterval(pollInterval); + } + apiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000'); + pollInterval = setInterval(onPollIntervalFired, 5000); + } + + function stopInterval() { + connectionManager.getApiClient(serverId).sendMessage('ScheduledTasksInfoStop'); + + if (pollInterval) { + clearInterval(pollInterval); + } + } + + if (options.panel) { + options.panel.classList.add('hide'); + } + + if (options.mode == 'off') { + button.removeEventListener('click', onButtonClick); + events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); + stopInterval(); + } else { + button.addEventListener('click', onButtonClick); + pollTasks(); + startInterval(); + events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); + } +} diff --git a/src/scripts/touchHelper.js b/src/scripts/touchHelper.js index 97455fc96..c3e3b01a1 100644 --- a/src/scripts/touchHelper.js +++ b/src/scripts/touchHelper.js @@ -1,12 +1,12 @@ -define(['dom', 'events'], function (dom, events) { - 'use strict'; +import dom from 'dom'; +import events from 'events'; - function getTouches(e) { +function getTouches(e) { + return e.changedTouches || e.targetTouches || e.touches; +} - return e.changedTouches || e.targetTouches || e.touches; - } - - function TouchHelper(elem, options) { +class TouchHelper { + constructor(elem, options) { options = options || {}; var touchTarget; @@ -138,8 +138,7 @@ define(['dom', 'events'], function (dom, events) { passive: true }); } - - TouchHelper.prototype.destroy = function () { + destroy() { var elem = this.elem; @@ -165,7 +164,7 @@ define(['dom', 'events'], function (dom, events) { this.touchEnd = null; this.elem = null; - }; + } +} - return TouchHelper; -}); +export default TouchHelper; From 0473e549abca7ce5aa449ff9f240f3e3b9cf7fbb Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 17 Jul 2020 11:30:56 +0100 Subject: [PATCH 04/12] update variable declerations for appSettings and userSettings --- src/scripts/settings/appSettings.js | 8 ++++---- src/scripts/settings/userSettings.js | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/scripts/settings/appSettings.js b/src/scripts/settings/appSettings.js index 6f0975e98..ffd63b956 100644 --- a/src/scripts/settings/appSettings.js +++ b/src/scripts/settings/appSettings.js @@ -28,7 +28,7 @@ import events from 'events'; } export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) { - var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork; + const key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork; if (val !== undefined) { if (isInNetwork && mediaType === 'Audio') { val = true; @@ -45,7 +45,7 @@ import events from 'events'; } export function maxStreamingBitrate(isInNetwork, mediaType, val) { - var key = 'maxbitrate-' + mediaType + '-' + isInNetwork; + const key = 'maxbitrate-' + mediaType + '-' + isInNetwork; if (val !== undefined) { if (isInNetwork && mediaType === 'Audio') { // nothing to do, this is always a max value @@ -67,7 +67,7 @@ import events from 'events'; this.set('maxStaticMusicBitrate', val); } - var defaultValue = 320000; + const defaultValue = 320000; return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue; } @@ -118,7 +118,7 @@ import events from 'events'; } export function set(name, value, userId) { - var currentValue = this.get(name, userId); + const currentValue = this.get(name, userId); appStorage.setItem(getKey(name, userId), value); if (currentValue !== value) { diff --git a/src/scripts/settings/userSettings.js b/src/scripts/settings/userSettings.js index 1b5283fa4..bd6050b5f 100644 --- a/src/scripts/settings/userSettings.js +++ b/src/scripts/settings/userSettings.js @@ -2,7 +2,7 @@ import appSettings from 'appSettings'; import events from 'events'; function onSaveTimeout() { - var self = this; + const self = this; self.saveTimeout = null; self.currentApiClient.updateDisplayPreferences('usersettings', self.displayPrefs, self.currentUserId, 'emby'); } @@ -37,7 +37,7 @@ export class UserSettings { return Promise.resolve(); } - var self = this; + const self = this; return apiClient.getDisplayPreferences('usersettings', userId, 'emby').then(function (result) { result.CustomPrefs = result.CustomPrefs || {}; @@ -63,9 +63,9 @@ export class UserSettings { * @param {boolean} enableOnServer - Flag to save preferences on server. */ set(name, value, enableOnServer) { - var userId = this.currentUserId; - var currentValue = this.get(name, enableOnServer); - var result = appSettings.set(name, value, userId); + const userId = this.currentUserId; + const currentValue = this.get(name, enableOnServer); + const result = appSettings.set(name, value, userId); if (enableOnServer !== false && this.displayPrefs) { this.displayPrefs.CustomPrefs[name] = value == null ? value : value.toString(); @@ -86,7 +86,7 @@ export class UserSettings { * @return {string} Value of setting. */ get(name, enableOnServer) { - var userId = this.currentUserId; + const userId = this.currentUserId; if (enableOnServer !== false && this.displayPrefs) { return this.displayPrefs.CustomPrefs[name]; } @@ -100,7 +100,7 @@ export class UserSettings { * @return {Object|Promise} Configuration or Promise. */ serverConfig(config) { - var apiClient = this.currentApiClient; + const apiClient = this.currentApiClient; if (config) { return apiClient.updateUserConfiguration(this.currentUserId, config); } @@ -349,7 +349,7 @@ export class UserSettings { return this.set('libraryPageSize', parseInt(val, 10), false); } - var libraryPageSize = parseInt(this.get('libraryPageSize', false), 10); + const libraryPageSize = parseInt(this.get('libraryPageSize', false), 10); if (libraryPageSize === 0) { // Explicitly return 0 to avoid returning 100 because 0 is falsy. return 0; @@ -378,7 +378,7 @@ export class UserSettings { * @return {Object} Query. */ loadQuerySettings(key, query) { - var values = this.get(key); + let values = this.get(key); if (values) { values = JSON.parse(values); return Object.assign(query, values); @@ -393,7 +393,7 @@ export class UserSettings { * @param {Object} query - Query. */ saveQuerySettings(key, query) { - var values = {}; + const values = {}; if (query.SortBy) { values.SortBy = query.SortBy; } From 46638fb9a9f94b70ad6dea378a22fededf26b5de Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 17 Jul 2020 11:32:23 +0100 Subject: [PATCH 05/12] update Variable declerations for taskbutton and touchHelper --- src/scripts/taskbutton.js | 14 +++++----- src/scripts/touchHelper.js | 52 +++++++++++++++++++------------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index d2c9d6c91..85062fdaa 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -13,7 +13,7 @@ export default function (options) { } function updateTasks(tasks) { - var task = tasks.filter(function (t) { + const task = tasks.filter(function (t) { return t.Key == options.taskKey; })[0]; @@ -36,7 +36,7 @@ export default function (options) { } button.setAttribute('data-taskid', task.Id); - var progress = (task.CurrentProgressPercentage || 0).toFixed(1); + const progress = (task.CurrentProgressPercentage || 0).toFixed(1); if (options.progressElem) { options.progressElem.value = progress; @@ -49,7 +49,7 @@ export default function (options) { } if (options.lastResultElem) { - var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; + const lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : ''; if (lastResult == 'Failed') { options.lastResultElem.html('(' + globalize.translate('LabelFailed') + ')'); @@ -77,9 +77,9 @@ export default function (options) { } } - var pollInterval; - var button = options.button; - var serverId = ApiClient.serverId(); + let pollInterval; + const button = options.button; + const serverId = ApiClient.serverId(); function onPollIntervalFired() { if (!connectionManager.getApiClient(serverId).isMessageChannelOpen()) { @@ -88,7 +88,7 @@ export default function (options) { } function startInterval() { - var apiClient = connectionManager.getApiClient(serverId); + const apiClient = connectionManager.getApiClient(serverId); if (pollInterval) { clearInterval(pollInterval); diff --git a/src/scripts/touchHelper.js b/src/scripts/touchHelper.js index c3e3b01a1..c12cf7951 100644 --- a/src/scripts/touchHelper.js +++ b/src/scripts/touchHelper.js @@ -9,23 +9,23 @@ class TouchHelper { constructor(elem, options) { options = options || {}; - var touchTarget; - var touchStartX; - var touchStartY; - var lastDeltaX; - var lastDeltaY; - var thresholdYMet; - var self = this; + let touchTarget; + let touchStartX; + let touchStartY; + let lastDeltaX; + let lastDeltaY; + let thresholdYMet; + const self = this; - var swipeXThreshold = options.swipeXThreshold || 50; - var swipeYThreshold = options.swipeYThreshold || 50; - var swipeXMaxY = 30; + const swipeXThreshold = options.swipeXThreshold || 50; + const swipeYThreshold = options.swipeYThreshold || 50; + const swipeXMaxY = 30; - var excludeTagNames = options.ignoreTagNames || []; + const excludeTagNames = options.ignoreTagNames || []; - var touchStart = function (e) { + const touchStart = function (e) { - var touch = getTouches(e)[0]; + const touch = getTouches(e)[0]; touchTarget = null; touchStartX = 0; touchStartY = 0; @@ -35,7 +35,7 @@ class TouchHelper { if (touch) { - var currentTouchTarget = touch.target; + const currentTouchTarget = touch.target; if (dom.parentWithTag(currentTouchTarget, excludeTagNames)) { return; @@ -47,18 +47,18 @@ class TouchHelper { } }; - var touchEnd = function (e) { + const touchEnd = function (e) { - var isTouchMove = e.type === 'touchmove'; + const isTouchMove = e.type === 'touchmove'; if (touchTarget) { - var touch = getTouches(e)[0]; + const touch = getTouches(e)[0]; - var deltaX; - var deltaY; + let deltaX; + let deltaY; - var clientX; - var clientY; + let clientX; + let clientY; if (touch) { clientX = touch.clientX || 0; @@ -70,8 +70,8 @@ class TouchHelper { deltaY = 0; } - var currentDeltaX = lastDeltaX == null ? deltaX : (deltaX - lastDeltaX); - var currentDeltaY = lastDeltaY == null ? deltaY : (deltaY - lastDeltaY); + const currentDeltaX = lastDeltaX == null ? deltaX : (deltaX - lastDeltaX); + const currentDeltaY = lastDeltaY == null ? deltaY : (deltaY - lastDeltaY); lastDeltaX = deltaX; lastDeltaY = deltaY; @@ -140,11 +140,11 @@ class TouchHelper { } destroy() { - var elem = this.elem; + const elem = this.elem; if (elem) { - var touchStart = this.touchStart; - var touchEnd = this.touchEnd; + const touchStart = this.touchStart; + const touchEnd = this.touchEnd; dom.removeEventListener(elem, 'touchstart', touchStart, { passive: true From 0b98e7770fea235542a92637826bee833f9cfb1a Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 17 Jul 2020 20:51:01 +0100 Subject: [PATCH 06/12] Migration of alphanumericshortcuts, autobackdrops and youtubeplayer/plugin to ES6 modules --- package.json | 3 + src/components/tabbedview/itemstab.js | 4 +- src/controllers/list.js | 4 +- src/plugins/youtubePlayer/plugin.js | 501 +++++++++++++------------- src/scripts/alphanumericshortcuts.js | 188 +++++----- src/scripts/autoBackdrops.js | 131 +++---- 6 files changed, 409 insertions(+), 422 deletions(-) diff --git a/package.json b/package.json index b911778bc..89d54797f 100644 --- a/package.json +++ b/package.json @@ -154,6 +154,8 @@ "src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContents.js", "src/plugins/photoPlayer/plugin.js", + "src/scripts/alphanumericshortcuts.js", + "src/scripts/autoBackdrops.js", "src/scripts/deleteHelper.js", "src/scripts/dfnshelper.js", "src/scripts/dom.js", @@ -162,6 +164,7 @@ "src/scripts/imagehelper.js", "src/scripts/inputManager.js", "src/plugins/backdropScreensaver/plugin.js", + "src/plugins/youtubePlayer/plugin.js", "src/components/filterdialog/filterdialog.js", "src/components/fetchhelper.js", "src/scripts/keyboardNavigation.js", diff --git a/src/components/tabbedview/itemstab.js b/src/components/tabbedview/itemstab.js index 4aac2f747..d40faef5d 100644 --- a/src/components/tabbedview/itemstab.js +++ b/src/components/tabbedview/itemstab.js @@ -331,7 +331,7 @@ define(['playbackManager', 'userSettings', 'alphaPicker', 'alphaNumericShortcuts } if (this.enableAlphaNumericShortcuts !== false) { - this.alphaNumericShortcuts = new AlphaNumericShortcuts({ + this.alphaNumericShortcuts = new AlphaNumericShortcuts.default({ itemsContainer: this.itemsContainer }); } @@ -561,7 +561,7 @@ define(['playbackManager', 'userSettings', 'alphaPicker', 'alphaNumericShortcuts var alphaNumericShortcuts = this.alphaNumericShortcuts; if (alphaNumericShortcuts) { - alphaNumericShortcuts.destroy(); + alphaNumericShortcuts.default.destroy(); this.alphaNumericShortcuts = null; } }; diff --git a/src/controllers/list.js b/src/controllers/list.js index 73ca93c71..a98869578 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -803,7 +803,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' bindAll(view.querySelectorAll('.btnShuffle'), 'click', shuffle); } - this.alphaNumericShortcuts = new AlphaNumericShortcuts({ + this.alphaNumericShortcuts = new AlphaNumericShortcuts.default({ itemsContainer: self.itemsContainer }); }); @@ -817,7 +817,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' var alphaNumericShortcuts = self.alphaNumericShortcuts; if (alphaNumericShortcuts) { - alphaNumericShortcuts.destroy(); + alphaNumericShortcuts.default.destroy(); self.alphaNumericShortcuts = null; } }); diff --git a/src/plugins/youtubePlayer/plugin.js b/src/plugins/youtubePlayer/plugin.js index 5b5e1b1a3..7612dc8fb 100644 --- a/src/plugins/youtubePlayer/plugin.js +++ b/src/plugins/youtubePlayer/plugin.js @@ -1,199 +1,204 @@ -define(['require', 'events', 'browser', 'appRouter', 'loading'], function (require, events, browser, appRouter, loading) { - 'use strict'; - /* globals YT */ +import require from 'require'; +import events from 'events'; +import browser from 'browser'; +import appRouter from 'appRouter'; +import loading from 'loading'; - function zoomIn(elem, iterations) { - var keyframes = [ - { transform: 'scale3d(.2, .2, .2) ', opacity: '.6', offset: 0 }, - { transform: 'none', opacity: '1', offset: 1 } - ]; +/* globals YT */ - var timing = { duration: 240, iterations: iterations }; - return elem.animate(keyframes, timing); - } +function zoomIn(elem, iterations) { + const keyframes = [ + { transform: 'scale3d(.2, .2, .2) ', opacity: '.6', offset: 0 }, + { transform: 'none', opacity: '1', offset: 1 } + ]; - function createMediaElement(instance, options) { + const timing = { duration: 240, iterations: iterations }; + return elem.animate(keyframes, timing); +} - return new Promise(function (resolve, reject) { +function createMediaElement(instance, options) { - var dlg = document.querySelector('.youtubePlayerContainer'); + return new Promise(function (resolve, reject) { - if (!dlg) { + const dlg = document.querySelector('.youtubePlayerContainer'); - require(['css!./style'], function () { + if (!dlg) { - loading.show(); + require(['css!./style'], function () { - var dlg = document.createElement('div'); + loading.show(); - dlg.classList.add('youtubePlayerContainer'); + const dlg = document.createElement('div'); - if (options.fullscreen) { - dlg.classList.add('onTop'); - } + dlg.classList.add('youtubePlayerContainer'); - dlg.innerHTML = '
'; - var videoElement = dlg.querySelector('#player'); - - document.body.insertBefore(dlg, document.body.firstChild); - instance.videoDialog = dlg; - - if (options.fullscreen && dlg.animate && !browser.slow) { - zoomIn(dlg, 1).onfinish = function () { - resolve(videoElement); - }; - } else { - resolve(videoElement); - } - - }); - - } else { - resolve(dlg.querySelector('#player')); - } - }); - } - - function onVideoResize() { - var instance = this; - var player = instance.currentYoutubePlayer; - var dlg = instance.videoDialog; - if (player && dlg) { - player.setSize(dlg.offsetWidth, dlg.offsetHeight); - } - } - - function clearTimeUpdateInterval(instance) { - if (instance.timeUpdateInterval) { - clearInterval(instance.timeUpdateInterval); - } - instance.timeUpdateInterval = null; - } - - function onEndedInternal(instance) { - - clearTimeUpdateInterval(instance); - var resizeListener = instance.resizeListener; - if (resizeListener) { - window.removeEventListener('resize', resizeListener); - window.removeEventListener('orientationChange', resizeListener); - instance.resizeListener = null; - } - - var stopInfo = { - src: instance._currentSrc - }; - - events.trigger(instance, 'stopped', [stopInfo]); - - instance._currentSrc = null; - if (instance.currentYoutubePlayer) { - instance.currentYoutubePlayer.destroy(); - } - instance.currentYoutubePlayer = null; - } - - // 4. The API will call this function when the video player is ready. - function onPlayerReady(event) { - event.target.playVideo(); - } - - function onTimeUpdate(e) { - - events.trigger(this, 'timeupdate'); - } - - function onPlaying(instance, playOptions, resolve) { - - if (!instance.started) { - - instance.started = true; - resolve(); - clearTimeUpdateInterval(instance); - instance.timeUpdateInterval = setInterval(onTimeUpdate.bind(instance), 500); - - if (playOptions.fullscreen) { - - appRouter.showVideoOsd().then(function () { - instance.videoDialog.classList.remove('onTop'); - }); - - } else { - appRouter.setTransparency('backdrop'); - instance.videoDialog.classList.remove('onTop'); - } - - require(['loading'], function (loading) { - - loading.hide(); - }); - } - } - - function setCurrentSrc(instance, elem, options) { - - return new Promise(function (resolve, reject) { - - require(['queryString'], function (queryString) { - - instance._currentSrc = options.url; - var params = queryString.parse(options.url.split('?')[1]); - // 3. This function creates an