class PopupWindow { DocumentID:string = "popup-custom" InteractionID:string = "interaction" doc = document.getElementById(this.DocumentID) createTitle(title:string):any { var td = document.createElement("TD") td.className = "left" td.innerHTML = title + ":" return td } createContent(element):any { var td = document.createElement("TD") td.appendChild(element) return td } createInteraction():any { var div = document.createElement("div") div.setAttribute("id", "popup-interaction") div.className = "interaction" this.doc.appendChild(div) } } class PopupContent extends PopupWindow{ table = document.createElement("TABLE") createHeadline(headline):void { this.doc.innerHTML = "" var element = document.createElement("H3") element.innerHTML = headline.toUpperCase() this.doc.appendChild(element) // Tabelle erstellen this.table = document.createElement("TABLE") this.doc.appendChild(this.table) } appendRow(title:string, element:any):void { var tr = document.createElement("TR") // Bezeichnung if (title.length != 0) { tr.appendChild(this.createTitle(title)) } // Content tr.appendChild(this.createContent(element)) this.table.appendChild(tr) } createInput(type:string, name:string, value:string):any { var input = document.createElement("INPUT") if (value == undefined) { value = "" } input.setAttribute("type", type) input.setAttribute("name", name) input.setAttribute("value", value) return input } createCheckbox(name:string):any { var input = document.createElement("INPUT") input.setAttribute("type", "checkbox") input.setAttribute("name", name) return input } createSelect(text:string[], values:string[], set:string, dbKey:string):any { var select = document.createElement("SELECT") select.setAttribute("name", dbKey) for (let i = 0; i < text.length; i++) { var option = document.createElement("OPTION") option.setAttribute("value", values[i]) option.innerText = text[i] select.appendChild(option) } if(set != "") { (select as HTMLSelectElement).value = set } if (set == undefined) { (select as HTMLSelectElement).value = values[0] } return select } selectOption(select:any, value:string):any { //select.selectedOptions = value var s:HTMLSelectElement = (select as HTMLSelectElement) s.options[s.selectedIndex].value = value return select } // isHTML must only be true for static text written in the source; never for data. description(value:string, isHTML:boolean = false):any { var tr = document.createElement("TR") var td = document.createElement("TD") var span = document.createElement("PRE") if (isHTML) { span.innerHTML = value } else { span.textContent = value } tr.appendChild(td) tr.appendChild(this.createContent(span)) this.table.appendChild(tr) } // Interaktion addInteraction(element:any) { var interaction = document.getElementById("popup-interaction") interaction.appendChild(element) } } // Buffer choices a playlist can make; "default" means the global setting. const PLAYLIST_BUFFER_OPTIONS = [ { text: "Default (global setting)", value: "default" }, { text: "No buffer (pass the URL through)", value: "-" }, { text: "xTeVe", value: "xteve" }, { text: "FFmpeg", value: "ffmpeg" }, { text: "VLC", value: "vlc" } ] function createBufferSelect(content:PopupContent, data:object):HTMLSelectElement { var text:string[] = PLAYLIST_BUFFER_OPTIONS.map(function(o) { return o.text }) var values:string[] = PLAYLIST_BUFFER_OPTIONS.map(function(o) { return o.value }) var current:string = data["buffer"] if (values.indexOf(current) == -1) { current = "default" } return content.createSelect(text, values, current, "buffer") } // playlistBufferActive: is a buffer in use for this playlist (its own choice, // or the global setting when it has none)? Decides whether the tuner count // can be edited. function playlistBufferActive(data:object):boolean { var own:string = data["buffer"] if (own != undefined && own != "default" && own != "") { return own != "-" } return SERVER["settings"]["buffer"] != "-" } function openPopUp(dataType, element?) { var data:object = new Object(); var id:any switch (element) { case undefined: switch (dataType) { case "group-title": if (id == undefined) { id = -1 } data = getLocalData("filter", id) data["type"] = "group-title" break; case "custom-filter": if (id == undefined) { id = -1 } data = getLocalData("filter", id) data["type"] = "custom-filter" break; case "regex-filter": if (id == undefined) { id = -1 } data = getLocalData("filter", id) data["type"] = "regex-filter" break; default: data["id.provider"] = "-" data["type"] = dataType id = "-" break; } break default: id = element.id data = getLocalData(dataType, id) break; } var content:PopupContent = new PopupContent() switch (dataType) { case "playlist": content.createHeadline("Playlist type") // Type var text:string[] = ["M3U", "HDHomeRun"] var values:string[] = ["m3u", "hdhr"] var select = content.createSelect(text, values, "", "type") select.setAttribute("id", "type") content.appendRow("Type", select) const typeSelect:HTMLSelectElement = select // Interaktion content.createInteraction() // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Weiter var input = content.createInput("button", "next", "Next") input.addEventListener("click", function() { openPopUp(typeSelect.value) }) input.setAttribute("id", 'next') content.addInteraction(input) break case "m3u": content.createHeadline(dataType) // Name var dbKey:string = "name" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Playlist name") content.appendRow("Name", input) // Beschreibung var dbKey:string = "description" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Description") content.appendRow("Description", input) // URL var dbKey:string = "file.source" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "File path or URL of the M3U") content.appendRow("M3U File", input) // Buffer (per playlist override of the global setting) var bufferSelect = createBufferSelect(content, data) content.appendRow("Buffer", bufferSelect) // Tuner if (playlistBufferActive(data)) { var text:string[] = new Array() var values:string[] = new Array() for (var i = 1; i <= 100; i++) { text.push(i.toString()) values.push(i.toString()) } var dbKey:string = "tuner" var select = content.createSelect(text, values, data[dbKey], dbKey) content.appendRow("Tuner / Streams", select) } else { var dbKey:string = "tuner" if (data[dbKey] == undefined) { data[dbKey] = 1 } var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("readonly", "true") input.className = "notAvailable" content.appendRow("Tuner / Streams", input) } content.description("Number of parallel connections that can be established to the provider.
Only available with activated buffer.
New settings will only be applied after quitting all streams.", true) // Interaktion content.createInteraction() // Löschen if (data["id.provider"]!= "-") { var input = content.createInput("button", "delete", "Delete") input.className = "delete" input.addEventListener("click", function() { savePopupData("m3u", String(id), true, 0) }) content.addInteraction(input) } else { var input = content.createInput("button", "back", "Back") input.addEventListener("click", function() { openPopUp("playlist") }) content.addInteraction(input) } // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Aktualisieren if (data["id.provider"]!= "-") { var input = content.createInput("button", "update", "Update") input.addEventListener("click", function() { savePopupData("m3u", String(id), false, 1) }) content.addInteraction(input) } // Speichern var input = content.createInput("button", "save", "Save") input.addEventListener("click", function() { savePopupData("m3u", String(id), false, 0) }) content.addInteraction(input) break case "hdhr": content.createHeadline(dataType) // Name var dbKey:string = "name" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Playlist name") content.appendRow("Name", input) // Beschreibung var dbKey:string = "description" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Description") content.appendRow("Description", input) // URL var dbKey:string = "file.source" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "IP address and port (192.168.1.10:5004)") content.appendRow("HDHomeRun IP", input) // Buffer (per playlist override of the global setting) var bufferSelect = createBufferSelect(content, data) content.appendRow("Buffer", bufferSelect) // Tuner if (playlistBufferActive(data)) { var text:string[] = new Array() var values:string[] = new Array() for (var i = 1; i <= 100; i++) { text.push(i.toString()) values.push(i.toString()) } var dbKey:string = "tuner" var select = content.createSelect(text, values, data[dbKey], dbKey) content.appendRow("Tuner / Streams", select) } else { var dbKey:string = "tuner" if (data[dbKey] == undefined) { data[dbKey] = 1 } var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("readonly", "true") input.className = "notAvailable" content.appendRow("Tuner / Streams", input) } content.description("Number of parallel connections that can be established to the provider.
Only available with activated buffer.
New settings will only be applied after quitting all streams.", true) // Interaktion content.createInteraction() // Löschen if (data["id.provider"]!= "-") { var input = content.createInput("button", "delete", "Delete") input.addEventListener("click", function() { savePopupData("hdhr", String(id), true, 0) }) input.className = "delete" content.addInteraction(input) } else { var input = content.createInput("button", "back", "Back") input.addEventListener("click", function() { openPopUp("playlist") }) content.addInteraction(input) } // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Aktualisieren if (data["id.provider"]!= "-") { var input = content.createInput("button", "update", "Update") input.addEventListener("click", function() { savePopupData("hdhr", String(id), false, 1) }) content.addInteraction(input) } // Speichern var input = content.createInput("button", "save", "Save") input.addEventListener("click", function() { savePopupData("hdhr", String(id), false, 0) }) content.addInteraction(input) break case "filter": content.createHeadline(dataType) // Type var dbKey:string = "type" var text:string[] = ["M3U: " + "Group Title", "xTeVe: " + "Custom Filter", "xTeVe: " + "Regular Expression"] var values:string[] = ["group-title", "custom-filter", "regex-filter"] var select = content.createSelect(text, values, "group-title", dbKey) select.setAttribute("id", id) content.appendRow("Type", select) const filterTypeSelect:HTMLSelectElement = select // Interaktion content.createInteraction() // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Weiter var input = content.createInput("button", "next", "Next") input.addEventListener("click", function() { openPopUp(filterTypeSelect.value) }) input.setAttribute("id", 'next') content.addInteraction(input) break case "custom-filter": case "group-title": case "regex-filter": switch (dataType) { case "custom-filter": content.createHeadline("Custom") break; case "group-title": content.createHeadline("Group") break; case "regex-filter": content.createHeadline("Regular Expression") break; } // Name var dbKey:string = "name" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Filter name") content.appendRow("Filter Name", input) // Beschreibung var dbKey:string = "description" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Description") content.appendRow("Description", input) // Typ var dbKey:string = "type" var input = content.createInput("hidden", dbKey, data[dbKey]) content.appendRow("", input) var filterType = data[dbKey] switch (filterType) { case "custom-filter": // Groß- Kleinschreibung beachten var dbKey:string = "caseSensitive" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("Case Sensitive", input) // Filterregel (Benutzerdefiniert) var dbKey:string = "filter" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Sport {HD} !{ES,IT}") content.appendRow("Filter Rule", input) break; case "regex-filter": // Groß- Kleinschreibung beachten var dbKey:string = "caseSensitive" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("Case Sensitive", input) // Regulärer Ausdruck var dbKey:string = "filter" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "^(BBC|ITV) \\d+$") content.appendRow("Regular Expression", input) content.description("Go regular expression, tried against the channel name, then the group title, then the raw M3U attributes. Case-insensitive unless Case Sensitive is checked. Invalid patterns are rejected on save.") break; case "group-title": //alert(dbKey + " " + filterType) // Filter basierend auf den Gruppen in der M3U var dbKey:string = "filter" var groupsM3U = getLocalData("m3uGroups", "") var text:string[] = groupsM3U["text"] var values:string[] = groupsM3U["value"] var select = content.createSelect(text, values, data[dbKey], dbKey) markChangedOnChange(select) content.appendRow("Group Title", select) content.description("Select a M3U group. (Counter)
Changing the group title in the M3U invalidates the filter.", true) // Groß- Kleinschreibung beachten var dbKey:string = "caseSensitive" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("Case Sensitive", input) var dbKey:string = "include" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "FHD,UHD") content.appendRow("Include", input) content.description("Channel name must include.
(Comma separated) Comma means or", true) var dbKey:string = "exclude" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "ES,IT") content.appendRow("Exclude", input) content.description("Channel name must not contain.
(Comma separated) Comma means or", true) break default: break; } // Interaktion content.createInteraction() // Löschen var input = content.createInput("button", "delete", "Delete") input.addEventListener("click", function() { savePopupData("filter", String(id), true, 0) }) input.className = "delete" content.addInteraction(input) // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Speichern var input = content.createInput("button", "save", "Save") input.addEventListener("click", function() { savePopupData("filter", String(id), false, 0) }) content.addInteraction(input) break case "xmltv": content.createHeadline(dataType) // Name var dbKey:string = "name" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Guide name") content.appendRow("Name", input) // Beschreibung var dbKey:string = "description" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Description") content.appendRow("Description", input) // URL var dbKey:string = "file.source" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "File path or URL of the XMLTV") content.appendRow("XMLTV File", input) // Interaktion content.createInteraction() // Löschen if (data["id.provider"]!= "-") { var input = content.createInput("button", "delete", "Delete") input.addEventListener("click", function() { savePopupData("xmltv", String(id), true, 0) }) input.className = "delete" content.addInteraction(input) } // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Aktualisieren if (data["id.provider"]!= "-") { var input = content.createInput("button", "update", "Update") input.addEventListener("click", function() { savePopupData("xmltv", String(id), false, 1) }) content.addInteraction(input) } // Speichern var input = content.createInput("button", "save", "Save") input.addEventListener("click", function() { savePopupData("xmltv", String(id), false, 0) }) content.addInteraction(input) break case "users": content.createHeadline("Users") // Benutzername var dbKey:string = "username" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Username") content.appendRow("Username", input) // Neues Passwort var dbKey:string = "password" var input = content.createInput("password", dbKey, "") input.setAttribute("placeholder", "Password") content.appendRow("Password", input) // Bestätigung var dbKey:string = "confirm" var input = content.createInput("password", dbKey, "") input.setAttribute("placeholder", "Password confirm") content.appendRow("Confirm", input) // Berechtigung WEB var dbKey:string = "authentication.web" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] if (data["defaultUser"] == true) { input.addEventListener("click", function(event) { event.preventDefault() }) } content.appendRow("Web Access", input) // Berechtigung PMS var dbKey:string = "authentication.pms" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("PMS Access", input) // Berechtigung M3U var dbKey:string = "authentication.m3u" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("M3U Access", input) // Berechtigung XML var dbKey:string = "authentication.xml" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("XML Access", input) // Berechtigung API var dbKey:string = "authentication.api" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] content.appendRow("API Access", input) // Interaktion content.createInteraction() // Löschen if (data["defaultUser"]!= true && id != "-") { var input = content.createInput("button", "delete", "Delete") input.className = "delete" input.addEventListener("click", function() { savePopupData(dataType, String(id), true, 0) }) content.addInteraction(input) } // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Speichern var input = content.createInput("button", "save", "Save") input.addEventListener("click", function() { savePopupData(dataType, String(id), false, 0) }) content.addInteraction(input) break case "mapping": content.createHeadline("Mapping") // Aktiv var dbKey:string = "x-active" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] input.id = "active" //markChangedOnChange(input) input.addEventListener("change", function() { toggleChannelStatus(id) }) content.appendRow("Active", input) // Kanalname var dbKey:string = "x-name" var input = content.createInput("text", dbKey, data[dbKey]) markChangedOnChange(input) if (BULK_EDIT == true) { input.style.border = "solid 1px red" input.setAttribute("readonly", "true") } content.appendRow("Channel Name", input) content.description(data["name"]) // Beschreibung var dbKey:string = "x-description" var input = content.createInput("text", dbKey, data[dbKey]) input.setAttribute("placeholder", "Used by the Dummy as an XML description") markChangedOnChange(input) content.appendRow("Channel Description", input) // Aktualisierung des Kanalnamens if (data.hasOwnProperty("_uuid.key")) { if (data["_uuid.key"] != "") { var dbKey:string = "x-update-channel-name" var input = content.createCheckbox(dbKey) markChangedOnChange(input) input.checked = data[dbKey] content.appendRow("Update Channel Name", input) } } // Logo URL (Kanal) var dbKey:string = "tvg-logo" var input = content.createInput("text", dbKey, data[dbKey]) markChangedOnChange(input) input.setAttribute("id", "channel-icon") content.appendRow("Logo URL", input) // Aktualisierung des Kanallogos var dbKey:string = "x-update-channel-icon" var input = content.createCheckbox(dbKey) input.checked = data[dbKey] input.setAttribute("id", "update-icon") markChangedOnChange(input, function() { changeChannelLogo(id) }) content.appendRow("Update Channel Logo", input) // Erweitern der EPG Kategorie var dbKey:string = "x-category" var text:string[] = ["-", "Kids (Emby only)", "News", "Movie", "Series", "Sports"] var values:string[] = ["", "Kids", "News", "Movie", "Series", "Sports"] var select = content.createSelect(text, values, data[dbKey], dbKey) markChangedOnChange(select) content.appendRow("EPG Category", select) // M3U Gruppentitel var dbKey:string = "x-group-title" var input = content.createInput("text", dbKey, data[dbKey]) markChangedOnChange(input) content.appendRow("Group Title (xteve.m3u)", input) if (data["group-title"] != undefined) { content.description(data["group-title"]) } // XMLTV Datei var dbKey:string = "x-xmltv-file" var xmlFile = data[dbKey] var xmltv:XMLTVFile = new XMLTVFile() var select = xmltv.getFiles(data[dbKey]) select.setAttribute("name", dbKey) select.setAttribute("id", "popup-xmltv") markChangedOnChange(select, function(element) { setXmltvChannel(id, element) }) content.appendRow("XMLTV File", select) var file = data[dbKey] // XMLTV Mapping var dbKey:string = "x-mapping" var xmltv:XMLTVFile = new XMLTVFile() var select = xmltv.getPrograms(file, data[dbKey]) select.setAttribute("name", dbKey) select.setAttribute("id", "popup-mapping") markChangedOnChange(select, function(element) { checkXmltvChannel(id, element, xmlFile) }) sortSelect(select) content.appendRow("XMLTV Channel", select) // Interaktion content.createInteraction() // Logo hochladen var input = content.createInput("button", "cancel", "Upload Logo") input.addEventListener("click", function() { uploadLogo() }) content.addInteraction(input) // Abbrechen var input = content.createInput("button", "cancel", "Cancel") input.addEventListener("click", function() { showElement("popup", false) }) content.addInteraction(input) // Fertig var ids:string[] = new Array() ids = getAllSelectedChannels() if (ids.length == 0) { ids.push(id) } var input = content.createInput("button", "save", "Done") input.addEventListener("click", function() { donePopupData(dataType, ids.join(",")) }) content.addInteraction(input) break default: break; } showPopUpElement('popup-custom'); } function savePopupData(dataType:string, id:string, remove:Boolean, option:number) { if (dataType == "mapping") { var data = new Object() console.log("Save mapping data") cmd = "saveEpgMapping" data["epgMapping"] = SERVER["xepg"]["epgMapping"] console.log("SEND TO SERVER"); var server:Server = new Server(cmd) server.request(data) delete UNDO["epgMapping"] return } console.log("Save popup data") var div = document.getElementById("popup-custom") var inputs = div.getElementsByTagName("TABLE")[0].getElementsByTagName("INPUT"); var selects = div.getElementsByTagName("TABLE")[0].getElementsByTagName("SELECT"); var input = new Object(); var confirmMsg: string for (let i = 0; i < selects.length; i++) { var name:string name = (selects[i] as HTMLSelectElement).name var value = (selects[i] as HTMLSelectElement).value switch (name) { case "tuner": input[name] = parseInt(value) break; default: input[name] = value break; } } for (let i = 0; i < inputs.length; i++) { switch ((inputs[i] as HTMLInputElement).type) { case "checkbox": name = (inputs[i] as HTMLInputElement).name input[name] = (inputs[i] as HTMLInputElement).checked break case "text": case "hidden": case "password": name = (inputs[i] as HTMLInputElement).name switch (name) { case "tuner": input[name] = parseInt((inputs[i] as HTMLInputElement).value) break; default: input[name] = (inputs[i] as HTMLInputElement).value break; } break } } var data = new Object() var cmd:string if (remove == true) { input["delete"] = true } switch (dataType) { case "users": confirmMsg = "Delete this user?" if (id == "-") { cmd = "saveNewUser" data["userData"] = input } else { cmd = "saveUserData" var d = new Object() d[id] = input data["userData"] = d } break; case "m3u": confirmMsg = "Delete this playlist?" switch (option) { // Popup: Save case 0: cmd = "saveFilesM3U" break // Popup: Update case 1: cmd = "updateFileM3U" break } data["files"] = new Object data["files"][dataType] = new Object data["files"][dataType][id] = input break case "hdhr": confirmMsg = "Delete this HDHomeRun tuner?" switch (option) { // Popup: Save case 0: cmd = "saveFilesHDHR" break // Popup: Update case 1: cmd = "updateFileHDHR" break } data["files"] = new Object data["files"][dataType] = new Object data["files"][dataType][id] = input break case "xmltv": confirmMsg = "Delete this XMLTV file?" switch (option) { // Popup: Save case 0: cmd = "saveFilesXMLTV" break // Popup: Update case 1: cmd = "updateFileXMLTV" break } data["files"] = new Object data["files"][dataType] = new Object data["files"][dataType][id] = input break case "filter": confirmMsg = "Delete this filter?" cmd = "saveFilter" data["filter"] = new Object data["filter"][id] = input break default: console.log(dataType, id); return break; } if (remove == true) { if (!confirm(confirmMsg)) { showElement("popup", false) return } } console.log("SEND TO SERVER"); console.log(data); var server:Server = new Server(cmd) server.request(data) } function donePopupData(dataType:string, idsStr:string) { var ids:string[] = idsStr.split(','); var div = document.getElementById("popup-custom") var inputs = div.getElementsByClassName("changed") ids.forEach(id => { var input = new Object(); input = SERVER["xepg"]["epgMapping"][id] console.log(input); for (let i = 0; i < inputs.length; i++) { var name:string var value:any switch (inputs[i].tagName) { case "INPUT": switch ((inputs[i] as HTMLInputElement).type) { case "checkbox": name = (inputs[i] as HTMLInputElement).name value = (inputs[i] as HTMLInputElement).checked input[name] = value break case "text": name = (inputs[i] as HTMLInputElement).name value = (inputs[i] as HTMLInputElement).value input[name] = value break } break case "SELECT": name = (inputs[i] as HTMLSelectElement).name value = (inputs[i] as HTMLSelectElement).value input[name] = value break } switch (name) { case "tvg-logo": //(document.getElementById(id).childNodes[2].firstChild as HTMLElement).setAttribute("src", value) break case "x-name": (document.getElementById(id).childNodes[3].firstChild as HTMLElement).textContent = value break case "x-category": (document.getElementById(id).childNodes[3].firstChild as HTMLElement).className = value break case "x-group-title": (document.getElementById(id).childNodes[5].firstChild as HTMLElement).textContent = value break case "x-xmltv-file": if (value != "xTeVe Dummy" && value != "-") { value = getValueFromProviderFile(value, "xmltv", "name") } if (value == "-") { input["x-active"] = false } (document.getElementById(id).childNodes[6].firstChild as HTMLElement).textContent = value break case "x-mapping": if (value == "-") { input["x-active"] = false } (document.getElementById(id).childNodes[7].firstChild as HTMLElement).textContent = value break default: } createSearchObj() searchInMapping() } if (input["x-active"] == false) { document.getElementById(id).className = "notActiveEPG" } else { document.getElementById(id).className = "activeEPG" } console.log(input["tvg-logo"]); (document.getElementById(id).childNodes[2].firstChild as HTMLElement).setAttribute("src", input["tvg-logo"]) }); showElement("popup", false); return } function showPreview(element:boolean) { var div = document.getElementById("myStreamsBox") switch (element) { case false: div.className = "notVisible" return break; } var streams:string[] = ["activeStreams", "inactiveStreams"] streams.forEach(preview => { var table = document.getElementById(preview) table.innerHTML = "" var obj:string[] = SERVER["data"]["StreamPreviewUI"][preview] obj.forEach(channel => { var tr = document.createElement("TR") var tdKey = document.createElement("TD") var tdVal = document.createElement("TD") tdKey.className = "tdKey" tdVal.className = "tdVal" switch (preview) { case "activeStreams": tdKey.innerText = "Channel: (+)" break; case "inactiveStreams": tdKey.innerText = "Channel: (-)" break; } tdVal.innerText = channel tr.appendChild(tdKey) tr.appendChild(tdVal) table.appendChild(tr) }); }); showElement("loading", false) div.className = "visible" return }