define(["dialogHelper", "loading", "connectionManager", "globalize", "actionsheet", "emby-input", "paper-icon-button-light", "emby-button", "listViewStyle", "material-icons", "formDialogStyle"], function(dialogHelper, loading, connectionManager, globalize, actionsheet) { "use strict"; return function(options) { function parentWithClass(elem, className) { for (; !elem.classList || !elem.classList.contains(className);) if (!(elem = elem.parentNode)) return null; return elem } function mapChannel(button, channelId, providerChannelId) { loading.show(); var providerId = options.providerId; connectionManager.getApiClient(options.serverId).ajax({ type: "POST", url: ApiClient.getUrl("LiveTv/ChannelMappings"), data: { providerId: providerId, tunerChannelId: channelId, providerChannelId: providerChannelId }, dataType: "json" }).then(function(mapping) { var listItem = parentWithClass(button, "listItem"); button.setAttribute("data-providerid", mapping.ProviderChannelId), listItem.querySelector(".secondary").innerHTML = getMappingSecondaryName(mapping, currentMappingOptions.ProviderName), loading.hide() }) } function onChannelsElementClick(e) { var btnMap = parentWithClass(e.target, "btnMap"); if (btnMap) { var channelId = btnMap.getAttribute("data-id"), providerChannelId = btnMap.getAttribute("data-providerid"), menuItems = currentMappingOptions.ProviderChannels.map(function(m) { return { name: m.Name, id: m.Id, selected: m.Id.toLowerCase() === providerChannelId.toLowerCase() } }); actionsheet.show({ positionTo: btnMap, items: menuItems }).then(function(newChannelId) { mapChannel(btnMap, channelId, newChannelId) }) } } function getChannelMappingOptions(serverId, providerId) { var apiClient = connectionManager.getApiClient(serverId); return apiClient.getJSON(apiClient.getUrl("LiveTv/ChannelMappingOptions", { providerId: providerId })) } function getMappingSecondaryName(mapping, providerName) { return (mapping.ProviderChannelName || "") + " - " + providerName } function getTunerChannelHtml(channel, providerName) { var html = ""; return html += '
', html += 'dvr', html += '
', html += '

', html += channel.Name, html += "

", html += '
', channel.ProviderChannelName && (html += getMappingSecondaryName(channel, providerName)), html += "
", html += "
", html += '', html += "
" } function getEditorHtml() { var html = ""; return html += '
', html += '
', html += '
', html += "

" + globalize.translate("HeaderChannels") + "

", html += '
', html += "
", html += "
", html += "
", html += "
" } function initEditor(dlg, options) { getChannelMappingOptions(options.serverId, options.providerId).then(function(result) { currentMappingOptions = result; var channelsElement = dlg.querySelector(".channels"); channelsElement.innerHTML = result.TunerChannels.map(function(channel) { return getTunerChannelHtml(channel, result.ProviderName) }).join(""), channelsElement.addEventListener("click", onChannelsElementClick) }) } var currentMappingOptions, self = this; self.show = function() { var dialogOptions = { removeOnClose: !0 }; dialogOptions.size = "small"; var dlg = dialogHelper.createDialog(dialogOptions); dlg.classList.add("formDialog"), dlg.classList.add("ui-body-a"), dlg.classList.add("background-theme-a"); var html = "", title = globalize.translate("MapChannels"); return html += '
', html += '', html += '

', html += title, html += "

", html += "
", html += getEditorHtml(), dlg.innerHTML = html, initEditor(dlg, options), dlg.querySelector(".btnCancel").addEventListener("click", function() { dialogHelper.close(dlg) }), new Promise(function(resolve, reject) { dlg.addEventListener("close", resolve), dialogHelper.open(dlg) }) } } });