diff --git a/package.json b/package.json index 6e2480ca05..9d0bbacc68 100644 --- a/package.json +++ b/package.json @@ -172,6 +172,7 @@ "src/components/tvproviders/schedulesdirect.js", "src/components/tvproviders/xmltv.js", "src/components/toast/toast.js", + "src/components/tunerPicker.js", "src/components/upnextdialog/upnextdialog.js", "src/components/viewContainer.js", "src/components/castSenderApi.js", diff --git a/src/components/tunerPicker.js b/src/components/tunerPicker.js index 4e78030a2a..4ad5fd816d 100644 --- a/src/components/tunerPicker.js +++ b/src/components/tunerPicker.js @@ -1,181 +1,190 @@ -define(['dialogHelper', 'dom', 'layoutManager', 'connectionManager', 'globalize', 'loading', 'browser', 'focusManager', 'scrollHelper', 'material-icons', 'formDialogStyle', 'emby-button', 'emby-itemscontainer', 'cardStyle'], function (dialogHelper, dom, layoutManager, connectionManager, globalize, loading, browser, focusManager, scrollHelper) { - 'use strict'; +import dialogHelper from 'dialogHelper'; +import dom from 'dom'; +import layoutManager from 'layoutManager'; +import connectionManager from 'connectionManager'; +import globalize from 'globalize'; +import loading from 'loading'; +import browser from 'browser'; +import focusManager from 'focusManager'; +import scrollHelper from 'scrollHelper'; +import 'material-icons'; +import 'formDialogStyle'; +import 'emby-button'; +import 'emby-itemscontainer'; +import 'cardStyle'; - browser = browser.default || browser; - loading = loading.default || loading; - focusManager = focusManager.default || focusManager; +/*eslint prefer-const: "error"*/ - var enableFocusTransform = !browser.slow && !browser.edge; +const enableFocusTransform = !browser.slow && !browser.edge; - function getEditorHtml() { - var html = ''; - html += '
'; - html += '
'; - html += '
'; - html += '

' + globalize.translate('DetectingDevices') + '...

'; - html += '

' + globalize.translate('MessagePleaseWait') + '

'; - html += '
'; - html += '

' + globalize.translate('HeaderNewDevices') + '

'; - html += '
'; - html += '
'; - html += '
'; - return html += '
'; - } +function getEditorHtml() { + let html = ''; + html += '
'; + html += '
'; + html += '
'; + html += '

' + globalize.translate('DetectingDevices') + '...

'; + html += '

' + globalize.translate('MessagePleaseWait') + '

'; + html += '
'; + html += '

' + globalize.translate('HeaderNewDevices') + '

'; + html += '
'; + html += '
'; + html += '
'; + return html += '
'; +} - function getDeviceHtml(device) { - var padderClass; - var html = ''; - var cssClass = 'card scalableCard'; - var cardBoxCssClass = 'cardBox visualCardBox'; - cssClass += ' backdropCard backdropCard-scalable'; - padderClass = 'cardPadder-backdrop'; +function getDeviceHtml(device) { + let html = ''; + let cssClass = 'card scalableCard'; + const cardBoxCssClass = 'cardBox visualCardBox'; + cssClass += ' backdropCard backdropCard-scalable'; + const padderClass = 'cardPadder-backdrop'; - // TODO move card creation code to Card component + // TODO move card creation code to Card component - if (layoutManager.tv) { - cssClass += ' show-focus'; + if (layoutManager.tv) { + cssClass += ' show-focus'; - if (enableFocusTransform) { - cssClass += ' show-animation'; - } - } - - html += ''; - } - - function getTunerName(providerId) { - switch (providerId = providerId.toLowerCase()) { - case 'm3u': - return 'M3U'; - - case 'hdhomerun': - return 'HDHomerun'; - - case 'hauppauge': - return 'Hauppauge'; - - case 'satip': - return 'DVB'; - - default: - return 'Unknown'; + if (enableFocusTransform) { + cssClass += ' show-animation'; } } - function renderDevices(view, devices) { - var i; - var length; - var html = ''; + html += ''; +} - for (i = 0, length = devices.length; i < length; i++) { - html += getDeviceHtml(devices[i]); - } +function getTunerName(providerId) { + switch (providerId = providerId.toLowerCase()) { + case 'm3u': + return 'M3U'; - if (devices.length) { - view.querySelector('.devicesHeader').classList.remove('hide'); - } else { - html = '


' + globalize.translate('NoNewDevicesFound') + '

'; - view.querySelector('.devicesHeader').classList.add('hide'); - } + case 'hdhomerun': + return 'HDHomerun'; - var elem = view.querySelector('.results'); - elem.innerHTML = html; + case 'hauppauge': + return 'Hauppauge'; - if (layoutManager.tv) { - focusManager.autoFocus(elem); - } + case 'satip': + return 'DVB'; + + default: + return 'Unknown'; + } +} + +function renderDevices(view, devices) { + let i; + let length; + let html = ''; + + for (i = 0, length = devices.length; i < length; i++) { + html += getDeviceHtml(devices[i]); } - function discoverDevices(view, apiClient) { - loading.show(); - view.querySelector('.loadingContent').classList.remove('hide'); - return ApiClient.getJSON(ApiClient.getUrl('LiveTv/Tuners/Discvover', { - NewDevicesOnly: true - })).then(function (devices) { - currentDevices = devices; - renderDevices(view, devices); - view.querySelector('.loadingContent').classList.add('hide'); - loading.hide(); - }); + if (devices.length) { + view.querySelector('.devicesHeader').classList.remove('hide'); + } else { + html = '


' + globalize.translate('NoNewDevicesFound') + '

'; + view.querySelector('.devicesHeader').classList.add('hide'); } - function tunerPicker() { - this.show = function (options) { - var dialogOptions = { - removeOnClose: true, - scrollY: false - }; + const elem = view.querySelector('.results'); + elem.innerHTML = html; - if (layoutManager.tv) { - dialogOptions.size = 'fullscreen'; - } else { - dialogOptions.size = 'small'; - } + if (layoutManager.tv) { + focusManager.autoFocus(elem); + } +} - var dlg = dialogHelper.createDialog(dialogOptions); - dlg.classList.add('formDialog'); - var html = ''; - html += '
'; - html += ''; - html += '

'; - html += globalize.translate('HeaderLiveTvTunerSetup'); - html += '

'; - html += '
'; - html += getEditorHtml(); - dlg.innerHTML = html; - dlg.querySelector('.btnCancel').addEventListener('click', function () { - dialogHelper.close(dlg); - }); - var deviceResult; - dlg.querySelector('.results').addEventListener('click', function (e) { - var tunerCard = dom.parentWithClass(e.target, 'card'); +function discoverDevices(view, apiClient) { + loading.show(); + view.querySelector('.loadingContent').classList.remove('hide'); + return ApiClient.getJSON(ApiClient.getUrl('LiveTv/Tuners/Discvover', { + NewDevicesOnly: true + })).then(function (devices) { + currentDevices = devices; + renderDevices(view, devices); + view.querySelector('.loadingContent').classList.add('hide'); + loading.hide(); + }); +} - if (tunerCard) { - var deviceId = tunerCard.getAttribute('data-id'); - deviceResult = currentDevices.filter(function (d) { - return d.DeviceId === deviceId; - })[0]; - dialogHelper.close(dlg); - } - }); - - if (layoutManager.tv) { - scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); - } - - var apiClient = connectionManager.getApiClient(options.serverId); - discoverDevices(dlg, apiClient); - - if (layoutManager.tv) { - scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); - } - - return dialogHelper.open(dlg).then(function () { - if (deviceResult) { - return Promise.resolve(deviceResult); - } - - return Promise.reject(); - }); +function tunerPicker() { + this.show = function (options) { + const dialogOptions = { + removeOnClose: true, + scrollY: false }; - } - var currentDevices = []; - return tunerPicker; -}); + if (layoutManager.tv) { + dialogOptions.size = 'fullscreen'; + } else { + dialogOptions.size = 'small'; + } + + const dlg = dialogHelper.createDialog(dialogOptions); + dlg.classList.add('formDialog'); + let html = ''; + html += '
'; + html += ''; + html += '

'; + html += globalize.translate('HeaderLiveTvTunerSetup'); + html += '

'; + html += '
'; + html += getEditorHtml(); + dlg.innerHTML = html; + dlg.querySelector('.btnCancel').addEventListener('click', function () { + dialogHelper.close(dlg); + }); + let deviceResult; + dlg.querySelector('.results').addEventListener('click', function (e) { + const tunerCard = dom.parentWithClass(e.target, 'card'); + + if (tunerCard) { + const deviceId = tunerCard.getAttribute('data-id'); + deviceResult = currentDevices.filter(function (d) { + return d.DeviceId === deviceId; + })[0]; + dialogHelper.close(dlg); + } + }); + + if (layoutManager.tv) { + scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); + } + + const apiClient = connectionManager.getApiClient(options.serverId); + discoverDevices(dlg, apiClient); + + if (layoutManager.tv) { + scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); + } + + return dialogHelper.open(dlg).then(function () { + if (deviceResult) { + return Promise.resolve(deviceResult); + } + + return Promise.reject(); + }); + }; +} + +let currentDevices = []; + +export default tunerPicker;