All checks were successful
continuous-integration/drone/push Build is passing
2379 lines
68 KiB
TypeScript
2379 lines
68 KiB
TypeScript
|
|
class MainMenu {
|
|
DocumentID:string = "main-menu"
|
|
HTMLTag:string = "LI"
|
|
ImagePath:string = "img/"
|
|
|
|
createIMG(src):any {
|
|
var element = document.createElement("IMG")
|
|
element.setAttribute("src", this.ImagePath + src)
|
|
return element
|
|
}
|
|
|
|
createValue(value):any {
|
|
var element = document.createElement("P")
|
|
element.innerHTML = value
|
|
return element
|
|
}
|
|
}
|
|
|
|
class MainMenuItem extends MainMenu {
|
|
menuKey:string
|
|
value:string
|
|
imgSrc:string
|
|
headline:string
|
|
id:string
|
|
tableHeader:string[]
|
|
|
|
constructor(menuKey:string, value:string, image:string, headline:string) {
|
|
super()
|
|
this.menuKey = menuKey
|
|
this.value = value
|
|
this.imgSrc = image
|
|
this.headline = headline
|
|
}
|
|
|
|
createItem():void {
|
|
var item = document.createElement("LI")
|
|
item.setAttribute("onclick", "javascript: openThisMenu(this)")
|
|
item.setAttribute("id", this.id)
|
|
item.setAttribute("data-menu", this.menuKey)
|
|
var img = this.createIMG(this.imgSrc)
|
|
var value = this.createValue(this.value)
|
|
|
|
item.appendChild(img)
|
|
item.appendChild(value)
|
|
|
|
var doc = document.getElementById(this.DocumentID)
|
|
doc.appendChild(item)
|
|
|
|
switch(this.menuKey) {
|
|
case "playlist":
|
|
this.tableHeader = ["{{.playlist.table.playlist}}", "{{.playlist.table.tuner}}", "{{.playlist.table.lastUpdate}}", "{{.playlist.table.availability}} %", "{{.playlist.table.type}}", "{{.playlist.table.streams}}", "{{.playlist.table.groupTitle}} %", "{{.playlist.table.tvgID}} %", "{{.playlist.table.uniqueID}} %"]
|
|
break
|
|
|
|
case "xmltv":
|
|
this.tableHeader = ["{{.xmltv.table.guide}}", "{{.xmltv.table.lastUpdate}}", "{{.xmltv.table.availability}} %", "{{.xmltv.table.channels}}", "{{.xmltv.table.programs}}"]
|
|
break
|
|
|
|
case "filter":
|
|
this.tableHeader = ["{{.filter.table.name}}", "{{.filter.table.type}}", "{{.filter.table.filter}}"]
|
|
break
|
|
|
|
case "users":
|
|
this.tableHeader = ["{{.users.table.username}}", "{{.users.table.password}}", "{{.users.table.web}}", "{{.users.table.pms}}", "{{.users.table.m3u}}", "{{.users.table.xml}}", "{{.users.table.api}}"]
|
|
break
|
|
|
|
case "mapping":
|
|
this.tableHeader = ["BULK", "{{.mapping.table.chNo}}", "{{.mapping.table.logo}}", "{{.mapping.table.channelName}}", "{{.mapping.table.playlist}}", "{{.mapping.table.groupTitle}}", "{{.mapping.table.xmltvFile}}", "{{.mapping.table.xmltvID}}"]
|
|
break
|
|
|
|
}
|
|
|
|
//console.log(this.menuKey, this.tableHeader);
|
|
|
|
}
|
|
}
|
|
|
|
class Content {
|
|
|
|
DocumentID:string = "content"
|
|
TableID:string = "content_table"
|
|
DivID:string
|
|
headerClass:string = "content_table_header"
|
|
interactionID:string = "content-interaction"
|
|
|
|
createHeadline(value):any {
|
|
var element = document.createElement("H3")
|
|
element.innerHTML = value
|
|
return element
|
|
}
|
|
|
|
createHR():any {
|
|
var element = document.createElement("HR")
|
|
return element
|
|
}
|
|
|
|
createInteraction():any {
|
|
var element = document.createElement("DIV")
|
|
element.setAttribute("id", this.interactionID)
|
|
return element
|
|
}
|
|
|
|
createDIV():any {
|
|
var element = document.createElement("DIV")
|
|
element.id = this.DivID
|
|
return element
|
|
}
|
|
|
|
createTABLE():any {
|
|
var element = document.createElement("TABLE")
|
|
element.id = this.TableID
|
|
return element
|
|
}
|
|
|
|
createTableRow():any {
|
|
var element = document.createElement("TR")
|
|
element.className = this.headerClass
|
|
return element
|
|
}
|
|
|
|
createTableContent(menuKey:string):string[] {
|
|
|
|
var data = new Object()
|
|
var rows = new Array()
|
|
|
|
switch(menuKey) {
|
|
case "playlist":
|
|
var fileTypes = new Array("m3u", "hdhr")
|
|
|
|
fileTypes.forEach(fileType => {
|
|
|
|
data = SERVER["settings"]["files"][fileType]
|
|
|
|
var keys = getObjKeys(data)
|
|
|
|
keys.forEach(key => {
|
|
var tr = document.createElement("TR")
|
|
tr.id = key
|
|
|
|
tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)')
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["name"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (SERVER["settings"]["buffer"] != "-") {
|
|
cell.value = data[key]["tuner"]
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["last.update"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["provider.availability"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["type"].toUpperCase();
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["streams"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["group.title"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["tvg.id"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["stream.id"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
rows.push(tr)
|
|
});
|
|
|
|
});
|
|
break
|
|
|
|
case "filter":
|
|
delete SERVER["settings"]["filter"][-1]
|
|
data = SERVER["settings"]["filter"]
|
|
var keys = getObjKeys(data)
|
|
keys.forEach(key => {
|
|
var tr = document.createElement("TR")
|
|
tr.id = key
|
|
|
|
tr.setAttribute('onclick', 'javascript: openPopUp("' + data[key]["type"] + '", this)')
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["name"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
switch (data[key]["type"]) {
|
|
case "custom-filter":
|
|
cell.value = "{{.filter.custom}}"
|
|
break;
|
|
|
|
case "group-title":
|
|
cell.value = "{{.filter.group}}"
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["filter"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
rows.push(tr)
|
|
|
|
});
|
|
break
|
|
|
|
case "xmltv":
|
|
var fileTypes = new Array("xmltv")
|
|
|
|
fileTypes.forEach(fileType => {
|
|
|
|
data = SERVER["settings"]["files"][fileType]
|
|
|
|
var keys = getObjKeys(data)
|
|
|
|
keys.forEach(key => {
|
|
var tr = document.createElement("TR")
|
|
|
|
tr.id = key
|
|
tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)')
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["name"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["last.update"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["provider.availability"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["xmltv.channels"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["compatibility"]["xmltv.programs"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
rows.push(tr)
|
|
});
|
|
|
|
});
|
|
break
|
|
|
|
case "users":
|
|
var fileTypes = new Array("users")
|
|
|
|
fileTypes.forEach(fileType => {
|
|
data = SERVER[fileType]
|
|
|
|
var keys = getObjKeys(data)
|
|
|
|
keys.forEach(key => {
|
|
var tr = document.createElement("TR")
|
|
tr.id = key
|
|
tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)')
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["data"]["username"]
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = "******"
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (data[key]["data"]["authentication.web"] == true) {
|
|
cell.value = "✓"
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (data[key]["data"]["authentication.pms"] == true) {
|
|
cell.value = "✓"
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (data[key]["data"]["authentication.m3u"] == true) {
|
|
cell.value = "✓"
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (data[key]["data"]["authentication.xml"] == true) {
|
|
cell.value = "✓"
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
tr.appendChild(cell.createCell())
|
|
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
if (data[key]["data"]["authentication.api"] == true) {
|
|
cell.value = "✓"
|
|
} else {
|
|
cell.value = "-"
|
|
}
|
|
tr.appendChild(cell.createCell())
|
|
|
|
rows.push(tr)
|
|
});
|
|
|
|
});
|
|
break
|
|
|
|
case "mapping":
|
|
BULK_EDIT = false
|
|
createSearchObj()
|
|
checkUndo("epgMapping")
|
|
console.log("MAPPING")
|
|
data = SERVER["xepg"]["epgMapping"]
|
|
|
|
var keys = getObjKeys(data)
|
|
keys.forEach(key => {
|
|
var tr = document.createElement("TR")
|
|
tr.id = key
|
|
|
|
//tr.setAttribute('oncontextmenu', 'javascript: rightClick(this)')
|
|
|
|
switch (data[key]["x-active"]) {
|
|
case true:
|
|
tr.className = "activeEPG"
|
|
break;
|
|
|
|
case false:
|
|
tr.className = "notActiveEPG"
|
|
break;
|
|
}
|
|
|
|
// Bulk
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "BULK"
|
|
cell.value = false
|
|
tr.appendChild(cell.createCell())
|
|
|
|
// Kanalnummer
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "INPUTCHANNEL"
|
|
cell.value = data[key]["x-channelID"]
|
|
//td.setAttribute('onclick', 'javascript: changeChannelNumber("' + key + '", this)')
|
|
tr.appendChild(cell.createCell())
|
|
|
|
// Logo
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "IMG"
|
|
cell.imageURL = data[key]["tvg-logo"]
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
|
|
tr.appendChild(td)
|
|
|
|
// Kanalname
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.className = data[key]["x-category"]
|
|
cell.value = data[key]["x-name"]
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
tr.appendChild(td)
|
|
|
|
|
|
// Playlist
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
//cell.value = data[key]["_file.m3u.name"]
|
|
cell.value = getValueFromProviderFile(data[key]["_file.m3u.id"], "m3u", "name")
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
tr.appendChild(td)
|
|
|
|
|
|
// Gruppe (group-title)
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = data[key]["x-group-title"]
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
tr.appendChild(td)
|
|
|
|
// XMLTV Datei
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
|
|
if (data[key]["x-xmltv-file"] != "-") {
|
|
cell.value = getValueFromProviderFile(data[key]["x-xmltv-file"], "xmltv", "name")
|
|
} else {
|
|
cell.value = data[key]["x-xmltv-file"]
|
|
}
|
|
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
tr.appendChild(td)
|
|
|
|
// XMLTV Kanal
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
//var value = str.substring(1, 4);
|
|
var value = data[key]["x-mapping"]
|
|
if (value.length > 20) {
|
|
value = data[key]["x-mapping"].substring(0, 20) + "..."
|
|
}
|
|
cell.value = value
|
|
var td = cell.createCell()
|
|
td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)')
|
|
td.id = key
|
|
|
|
tr.appendChild(td)
|
|
|
|
rows.push(tr)
|
|
});
|
|
|
|
break
|
|
|
|
case "settings":
|
|
alert()
|
|
break
|
|
|
|
default:
|
|
console.log("Table content (menuKey):", menuKey);
|
|
|
|
break
|
|
|
|
}
|
|
|
|
return rows
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
class Cell {
|
|
child:Boolean
|
|
childType:string
|
|
value:any
|
|
className:string
|
|
tdClassName:string
|
|
imageURL:string
|
|
onclick:boolean
|
|
onclickFunktion:string
|
|
|
|
createCell():any {
|
|
var td = document.createElement("TD")
|
|
|
|
|
|
if (this.child == true) {
|
|
var element:any
|
|
|
|
switch(this.childType){
|
|
case "P":
|
|
element = document.createElement(this.childType);
|
|
element.innerHTML = this.value
|
|
element.className = this.className
|
|
break
|
|
|
|
case "INPUT":
|
|
element = document.createElement(this.childType);
|
|
(element as HTMLInputElement).value = this.value;
|
|
(element as HTMLInputElement).type = "text";
|
|
break
|
|
|
|
case "INPUTCHANNEL":
|
|
element = document.createElement("INPUT");
|
|
(element as HTMLInputElement).setAttribute("onchange", "javscript: changeChannelNumber(this)");
|
|
(element as HTMLInputElement).value = this.value;
|
|
(element as HTMLInputElement).type = "text";
|
|
break
|
|
|
|
case "BULK":
|
|
element = document.createElement("INPUT");
|
|
(element as HTMLInputElement).checked = this.value;
|
|
(element as HTMLInputElement).type = "checkbox";
|
|
(element as HTMLInputElement).className = "bulk hideBulk";
|
|
(element as HTMLInputElement).setAttribute("onclick", "javascript: selectChannelRange(this, event)")
|
|
break
|
|
|
|
case "BULK_HEAD":
|
|
element = document.createElement("INPUT");
|
|
(element as HTMLInputElement).checked = this.value;
|
|
(element as HTMLInputElement).type = "checkbox";
|
|
(element as HTMLInputElement).className = "bulk hideBulk";
|
|
(element as HTMLInputElement).setAttribute("onclick", "javascript: selectAllChannels()")
|
|
break
|
|
|
|
case "IMG":
|
|
element = document.createElement(this.childType);
|
|
element.setAttribute("src", this.imageURL)
|
|
if (this.imageURL != "") {
|
|
element.setAttribute("onerror", "javascript: this.onerror=null;this.src=''" )
|
|
//onerror="this.onerror=null;this.src='missing.gif';"
|
|
}
|
|
}
|
|
|
|
td.appendChild(element)
|
|
|
|
} else {
|
|
td.innerHTML = this.value
|
|
}
|
|
|
|
if (this.onclick == true) {
|
|
td.setAttribute("onclick", this.onclickFunktion)
|
|
td.className = "pointer"
|
|
}
|
|
|
|
if (this.tdClassName != undefined) {
|
|
td.className = this.tdClassName
|
|
}
|
|
|
|
return td
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
class ShowContent extends Content {
|
|
menuID:number
|
|
|
|
constructor(menuID:number) {
|
|
super()
|
|
this.menuID = menuID
|
|
}
|
|
|
|
createInput(type:string, name:string, value:string,):any {
|
|
|
|
var input = document.createElement("INPUT")
|
|
input.setAttribute("type", type)
|
|
input.setAttribute("name", name)
|
|
input.setAttribute("value", value)
|
|
return input
|
|
}
|
|
|
|
show():void {
|
|
COLUMN_TO_SORT = -1
|
|
// Alten Inhalt löschen
|
|
var doc = document.getElementById(this.DocumentID)
|
|
doc.innerHTML = ""
|
|
showPreview(false)
|
|
|
|
// Überschrift
|
|
var headline:string[] = menuItems[this.menuID].headline
|
|
|
|
var menuKey = menuItems[this.menuID].menuKey
|
|
var h = this.createHeadline(headline)
|
|
doc.appendChild(h)
|
|
|
|
var hr = this.createHR()
|
|
doc.appendChild(hr)
|
|
|
|
// Interaktion
|
|
var div =this.createInteraction()
|
|
doc.appendChild(div)
|
|
var interaction = document.getElementById(this.interactionID)
|
|
switch (menuKey) {
|
|
case "playlist":
|
|
var input = this.createInput("button", menuKey, "{{.button.new}}")
|
|
input.setAttribute("id", "-")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("playlist")')
|
|
interaction.appendChild(input)
|
|
break;
|
|
|
|
case "filter":
|
|
var input = this.createInput("button", menuKey, "{{.button.new}}")
|
|
input.setAttribute("id", -1)
|
|
input.setAttribute("onclick", 'javascript: openPopUp("filter", this)')
|
|
interaction.appendChild(input)
|
|
break;
|
|
|
|
|
|
case "xmltv":
|
|
var input = this.createInput("button", menuKey, "{{.button.new}}")
|
|
input.setAttribute("id", "xmltv")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("xmltv")')
|
|
interaction.appendChild(input)
|
|
break;
|
|
|
|
case "users":
|
|
var input = this.createInput("button", menuKey, "{{.button.new}}")
|
|
input.setAttribute("id", "users")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("users")')
|
|
interaction.appendChild(input)
|
|
break;
|
|
|
|
case "mapping":
|
|
showElement("loading", true)
|
|
var input = this.createInput("button", menuKey, "{{.button.save}}")
|
|
input.setAttribute("onclick", 'javascript: savePopupData("mapping", "", "")')
|
|
interaction.appendChild(input)
|
|
|
|
var input = this.createInput("button", menuKey, "{{.button.bulkEdit}}")
|
|
input.setAttribute("onclick", 'javascript: bulkEdit()')
|
|
interaction.appendChild(input)
|
|
|
|
var input = this.createInput("search", "search", "")
|
|
input.setAttribute("id", "searchMapping")
|
|
input.setAttribute("placeholder", "{{.button.search}}")
|
|
input.className = "search"
|
|
input.setAttribute("oninput", 'javascript: searchInMapping()')
|
|
interaction.appendChild(input)
|
|
break;
|
|
|
|
case "settings":
|
|
var input = this.createInput("button", menuKey, "{{.button.save}}")
|
|
input.setAttribute("onclick", 'javascript: saveSettings();')
|
|
interaction.appendChild(input)
|
|
|
|
var input = this.createInput("button", menuKey, "{{.button.backup}}")
|
|
input.setAttribute("onclick", 'javascript: backup();')
|
|
interaction.appendChild(input)
|
|
|
|
var input = this.createInput("button", menuKey, "{{.button.restore}}")
|
|
input.setAttribute("onclick", 'javascript: restore();')
|
|
interaction.appendChild(input)
|
|
|
|
var wrapper = document.createElement("DIV")
|
|
wrapper.setAttribute("id", "box-wrapper")
|
|
doc.appendChild(wrapper)
|
|
|
|
this.DivID = "content_settings"
|
|
var settings = this.createDIV()
|
|
wrapper.appendChild(settings)
|
|
|
|
showSettings()
|
|
|
|
return
|
|
break
|
|
|
|
case "log":
|
|
var input = this.createInput("button", menuKey, "{{.button.resetLogs}}")
|
|
input.setAttribute("onclick", 'javascript: resetLogs();')
|
|
interaction.appendChild(input)
|
|
|
|
var wrapper = document.createElement("DIV")
|
|
wrapper.setAttribute("id", "box-wrapper")
|
|
doc.appendChild(wrapper)
|
|
|
|
this.DivID = "content_log"
|
|
var logs = this.createDIV()
|
|
wrapper.appendChild(logs)
|
|
|
|
showLogs(true)
|
|
|
|
return
|
|
break
|
|
|
|
case "logout":
|
|
location.reload()
|
|
document.cookie = "Token= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"
|
|
break
|
|
|
|
default:
|
|
console.log("Show content (menuKey):", menuKey);
|
|
break;
|
|
}
|
|
|
|
// Tabelle erstellen (falls benötigt)
|
|
var tableHeader:string[] = menuItems[this.menuID].tableHeader
|
|
if (tableHeader.length > 0) {
|
|
var wrapper = document.createElement("DIV")
|
|
doc.appendChild(wrapper)
|
|
wrapper.setAttribute("id", "box-wrapper")
|
|
|
|
var table = this.createTABLE()
|
|
wrapper.appendChild(table)
|
|
|
|
var header = this.createTableRow()
|
|
table.appendChild(header)
|
|
|
|
// Kopfzeile der Tablle
|
|
tableHeader.forEach(element => {
|
|
var cell:Cell = new Cell()
|
|
cell.child = true
|
|
cell.childType = "P"
|
|
cell.value = element
|
|
if (element == "BULK") {
|
|
cell.childType = "BULK_HEAD";
|
|
cell.value = false
|
|
}
|
|
|
|
if (menuKey == "mapping") {
|
|
|
|
if (element == "{{.mapping.table.chNo}}") {
|
|
cell.onclick = true
|
|
cell.onclickFunktion = "javascript: sortTable(1);"
|
|
cell.tdClassName = "sortThis"
|
|
}
|
|
|
|
if (element == "{{.mapping.table.channelName}}") {
|
|
cell.onclick = true
|
|
cell.onclickFunktion = "javascript: sortTable(3);"
|
|
}
|
|
|
|
if (element == "{{.mapping.table.playlist}}") {
|
|
cell.onclick = true
|
|
cell.onclickFunktion = "javascript: sortTable(4);"
|
|
}
|
|
|
|
if (element == "{{.mapping.table.groupTitle}}") {
|
|
cell.onclick = true
|
|
cell.onclickFunktion = "javascript: sortTable(5);"
|
|
}
|
|
|
|
}
|
|
|
|
header.appendChild(cell.createCell())
|
|
});
|
|
|
|
table.appendChild(header)
|
|
|
|
// Inhalt der Tabelle
|
|
var rows:any = this.createTableContent(menuKey)
|
|
rows.forEach(tr => {
|
|
table.appendChild(tr)
|
|
});
|
|
|
|
}
|
|
|
|
switch (menuKey) {
|
|
case "mapping":
|
|
sortTable(1)
|
|
break;
|
|
|
|
case "filter":
|
|
showPreview(true)
|
|
sortTable(0)
|
|
break
|
|
|
|
default:
|
|
COLUMN_TO_SORT = -1
|
|
sortTable(0)
|
|
break;
|
|
}
|
|
|
|
showElement("loading", false)
|
|
}
|
|
|
|
}
|
|
|
|
var SHELL_LAYOUT_READY:boolean = false
|
|
|
|
function setLayoutMenuState(open:boolean) {
|
|
if (document.body == null) {
|
|
return
|
|
}
|
|
|
|
if (open == true) {
|
|
document.body.classList.add("menu-open")
|
|
} else {
|
|
document.body.classList.remove("menu-open")
|
|
}
|
|
}
|
|
|
|
function toggleLayoutMenu() {
|
|
if (document.body == null) {
|
|
return
|
|
}
|
|
|
|
var isOpen:boolean = document.body.classList.contains("menu-open")
|
|
setLayoutMenuState(!isOpen)
|
|
}
|
|
|
|
function closeLayoutMenuIfMobile() {
|
|
if (window.innerWidth <= 900) {
|
|
setLayoutMenuState(false)
|
|
}
|
|
}
|
|
|
|
function setActiveMenu(menuID:string) {
|
|
|
|
ACTIVE_MENU_ID = menuID.toString()
|
|
var menu = document.getElementById("main-menu")
|
|
if (menu == null) {
|
|
return
|
|
}
|
|
|
|
var items = menu.getElementsByTagName("LI")
|
|
for (var i = 0; i < items.length; i++) {
|
|
items[i].classList.remove("menu-active")
|
|
}
|
|
|
|
var activeItem = document.getElementById(ACTIVE_MENU_ID)
|
|
if (activeItem != null) {
|
|
activeItem.classList.add("menu-active")
|
|
}
|
|
}
|
|
|
|
function renderStatusCards() {
|
|
var wrapper = document.getElementById("status-cards")
|
|
if (wrapper == null || SERVER.hasOwnProperty("clientInfo") == false) {
|
|
return
|
|
}
|
|
|
|
var info = SERVER["clientInfo"]
|
|
var errors:number = parseInt(info["errors"], 10)
|
|
var warnings:number = parseInt(info["warnings"], 10)
|
|
var cards:any[] = [
|
|
{label: "Streams", value: info["streams"], tone: "ok"},
|
|
{label: "EPG Source", value: info["epgSource"], tone: "neutral"},
|
|
{label: "XEPG Channels", value: info["xepg"], tone: "ok"},
|
|
{label: "Errors", value: info["errors"], tone: errors > 0 ? "error" : "ok"},
|
|
{label: "Warnings", value: info["warnings"], tone: warnings > 0 ? "warn" : "ok"},
|
|
{label: "DVR", value: info["DVR"], tone: "neutral"},
|
|
]
|
|
|
|
wrapper.innerHTML = ""
|
|
cards.forEach(card => {
|
|
|
|
var box = document.createElement("DIV")
|
|
box.className = "status-card status-card-" + card.tone
|
|
|
|
var label = document.createElement("P")
|
|
label.className = "status-card-label"
|
|
label.innerText = card.label
|
|
|
|
var value = document.createElement("P")
|
|
value.className = "status-card-value"
|
|
if (card.value == undefined || card.value == "") {
|
|
value.innerText = "-"
|
|
} else {
|
|
value.innerText = card.value
|
|
}
|
|
|
|
box.appendChild(label)
|
|
box.appendChild(value)
|
|
wrapper.appendChild(box)
|
|
});
|
|
|
|
}
|
|
|
|
function initShellLayout() {
|
|
|
|
if (SHELL_LAYOUT_READY == true) {
|
|
return
|
|
}
|
|
|
|
var toggle = document.getElementById("menu-toggle")
|
|
if (toggle != null) {
|
|
toggle.onclick = function() {
|
|
toggleLayoutMenu()
|
|
}
|
|
}
|
|
|
|
var overlay = document.getElementById("layout-overlay")
|
|
if (overlay != null) {
|
|
overlay.onclick = function() {
|
|
setLayoutMenuState(false)
|
|
}
|
|
}
|
|
|
|
document.addEventListener("keydown", function(event) {
|
|
|
|
if (event.key == "Escape") {
|
|
setLayoutMenuState(false)
|
|
showElement("popup", false)
|
|
return
|
|
}
|
|
|
|
if (event.key == "/") {
|
|
var target = event.target as HTMLElement
|
|
var onInput = target.tagName == "INPUT" || target.tagName == "TEXTAREA" || target.tagName == "SELECT"
|
|
|
|
if (onInput == true) {
|
|
return
|
|
}
|
|
|
|
var search = document.getElementById("searchMapping")
|
|
if (search != null) {
|
|
event.preventDefault()
|
|
(search as HTMLInputElement).focus()
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
setConnectionState("idle")
|
|
SHELL_LAYOUT_READY = true
|
|
}
|
|
|
|
function PageReady() {
|
|
|
|
initShellLayout()
|
|
|
|
var server:Server = new Server("getServerConfig")
|
|
server.request(new Object())
|
|
|
|
window.addEventListener("resize", function(){
|
|
if (window.innerWidth > 900) {
|
|
setLayoutMenuState(false)
|
|
}
|
|
calculateWrapperHeight();
|
|
}, true);
|
|
|
|
setInterval(function(){
|
|
updateLog()
|
|
}, 10000);
|
|
|
|
|
|
return
|
|
}
|
|
|
|
function createLayout() {
|
|
|
|
// Client Info
|
|
var obj = SERVER["clientInfo"]
|
|
var keys = getObjKeys(obj);
|
|
for (var i = 0; i < keys.length; i++) {
|
|
|
|
if (document.getElementById(keys[i])) {
|
|
document.getElementById(keys[i]).innerHTML = obj[keys[i]];
|
|
}
|
|
|
|
}
|
|
renderStatusCards()
|
|
|
|
if (!document.getElementById("main-menu")) {
|
|
return
|
|
}
|
|
|
|
|
|
|
|
// Menü erstellen
|
|
document.getElementById("main-menu").innerHTML = ""
|
|
for (let i = 0; i < menuItems.length; i++) {
|
|
|
|
menuItems[i].id = i
|
|
|
|
switch (menuItems[i]["menuKey"]) {
|
|
|
|
case "users":
|
|
case "logout":
|
|
if (SERVER["settings"]["authentication.web"] == true) {
|
|
menuItems[i].createItem()
|
|
}
|
|
break
|
|
|
|
case "mapping":
|
|
case "xmltv":
|
|
if (SERVER["clientInfo"]["epgSource"] == "XEPG") {
|
|
menuItems[i].createItem()
|
|
}
|
|
break
|
|
|
|
default:
|
|
menuItems[i].createItem()
|
|
break
|
|
}
|
|
|
|
}
|
|
|
|
if (ACTIVE_MENU_ID.length > 0 && document.getElementById(ACTIVE_MENU_ID)) {
|
|
setActiveMenu(ACTIVE_MENU_ID)
|
|
}
|
|
|
|
var content = document.getElementById("content")
|
|
var menu = document.getElementById("main-menu")
|
|
if (ACTIVE_MENU_ID.length == 0 && content != null && menu != null) {
|
|
|
|
if (content.innerHTML.replace(/\\s/g, "").length == 0) {
|
|
var firstItem = menu.getElementsByTagName("LI")[0]
|
|
if (firstItem != undefined) {
|
|
firstItem.click()
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
function openThisMenu(element) {
|
|
var id = element.id
|
|
var content:ShowContent = new ShowContent(id)
|
|
setActiveMenu(id)
|
|
content.show()
|
|
closeLayoutMenuIfMobile()
|
|
calculateWrapperHeight()
|
|
|
|
return
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
description(value:string):any {
|
|
var tr = document.createElement("TR")
|
|
var td = document.createElement("TD")
|
|
var span = document.createElement("PRE")
|
|
|
|
span.innerHTML = 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)
|
|
}
|
|
}
|
|
|
|
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;
|
|
|
|
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.playlistType.title}}")
|
|
// Type
|
|
var text:string[] = ["M3U", "HDHomeRun"]
|
|
var values:string[] = ["javascript: openPopUp('m3u')", "javascript: openPopUp('hdhr')"]
|
|
var select = content.createSelect(text, values, "", "type")
|
|
select.setAttribute("id", "type")
|
|
select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick")') // changeButtonAction
|
|
content.appendRow("{{.playlist.type.title}}", select)
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Weiter
|
|
var input = content.createInput("button", "next", "{{.button.next}}")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("m3u")')
|
|
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.placeholder}}")
|
|
content.appendRow("{{.playlist.name.title}}", input)
|
|
|
|
// Beschreibung
|
|
var dbKey:string = "description"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.playlist.description.placeholder}}")
|
|
content.appendRow("{{.playlist.description.title}}", input)
|
|
|
|
// URL
|
|
var dbKey:string = "file.source"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.playlist.fileM3U.placeholder}}")
|
|
content.appendRow("{{.playlist.fileM3U.title}}", input)
|
|
|
|
// Tuner
|
|
if (SERVER["settings"]["buffer"] != "-") {
|
|
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)
|
|
select.setAttribute("onfocus", "javascript: return;")
|
|
content.appendRow("{{.playlist.tuner.title}}", 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("{{.playlist.tuner.title}}", input)
|
|
}
|
|
|
|
content.description("{{.playlist.tuner.description}}")
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
// Löschen
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "delete", "{{.button.delete}}")
|
|
input.className = "delete"
|
|
input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", true, 0)')
|
|
content.addInteraction(input)
|
|
} else {
|
|
var input = content.createInput("button", "back", "{{.button.back}}")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("playlist")')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Aktualisieren
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "update", "{{.button.update}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", false, 1)')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Speichern
|
|
var input = content.createInput("button", "save", "{{.button.save}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + 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.placeholder}}")
|
|
content.appendRow("{{.playlist.name.title}}", input)
|
|
|
|
// Beschreibung
|
|
var dbKey:string = "description"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.playlist.description.placeholder}}")
|
|
content.appendRow("{{.playlist.description.placeholder}}", input)
|
|
|
|
// URL
|
|
var dbKey:string = "file.source"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.playlist.fileHDHR.placeholder}}")
|
|
content.appendRow("{{.playlist.fileHDHR.title}}", input)
|
|
|
|
// Tuner
|
|
if (SERVER["settings"]["buffer"] != "-") {
|
|
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)
|
|
select.setAttribute("onfocus", "javascript: return;")
|
|
content.appendRow("{{.playlist.tuner.title}}", 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("{{.playlist.tuner.title}}", input)
|
|
}
|
|
|
|
content.description("{{.playlist.tuner.description}}")
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
// Löschen
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "delete", "{{.button.delete}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", true, 0)')
|
|
input.className = "delete"
|
|
content.addInteraction(input)
|
|
} else {
|
|
var input = content.createInput("button", "back", "{{.button.back}}")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("playlist")')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Aktualisieren
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "update", "{{.button.update}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 1)')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Speichern
|
|
var input = content.createInput("button", "save", "{{.button.save}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 0)')
|
|
content.addInteraction(input)
|
|
break
|
|
|
|
case "filter":
|
|
content.createHeadline(dataType)
|
|
|
|
// Type
|
|
var dbKey:string = "type"
|
|
var text:string[] = ["M3U: " + "{{.filter.type.groupTitle}}", "xTeVe: " + "{{.filter.type.customFilter}}"]
|
|
var values:string[] = ["javascript: openPopUp('group-title')", "javascript: openPopUp('custom-filter')"]
|
|
var select = content.createSelect(text, values, "javascript: openPopUp('group-title')", dbKey)
|
|
select.setAttribute("id", id)
|
|
select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick");') // changeButtonAction
|
|
content.appendRow("{{.filter.type.title}}", select)
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Weiter
|
|
var input = content.createInput("button", "next", "{{.button.next}}")
|
|
input.setAttribute("onclick", 'javascript: openPopUp("group-title")')
|
|
input.setAttribute("id", 'next')
|
|
content.addInteraction(input)
|
|
break
|
|
|
|
case "custom-filter":
|
|
case "group-title":
|
|
|
|
switch (dataType) {
|
|
case "custom-filter":
|
|
content.createHeadline("{{.filter.custom}}")
|
|
break;
|
|
|
|
case "group-title":
|
|
content.createHeadline("{{.filter.group}}")
|
|
break;
|
|
}
|
|
|
|
// Name
|
|
var dbKey:string = "name"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.filter.name.placeholder}}")
|
|
content.appendRow("{{.filter.name.title}}", input)
|
|
|
|
// Beschreibung
|
|
var dbKey:string = "description"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.filter.description.placeholder}}")
|
|
content.appendRow("{{.filter.description.title}}", 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("{{.filter.caseSensitive.title}}", input)
|
|
|
|
// Filterregel (Benutzerdefiniert)
|
|
var dbKey:string = "filter"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.filter.filterRule.placeholder}}")
|
|
content.appendRow("{{.filter.filterRule.title}}", input)
|
|
|
|
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)
|
|
select.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
content.appendRow("{{.filter.filterGroup.title}}", select)
|
|
content.description("{{.filter.filterGroup.description}}")
|
|
|
|
// Groß- Kleinschreibung beachten
|
|
var dbKey:string = "caseSensitive"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.filter.caseSensitive.title}}", input)
|
|
|
|
|
|
var dbKey:string = "include"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.filter.include.placeholder}}")
|
|
|
|
content.appendRow("{{.filter.include.title}}", input)
|
|
content.description("{{.filter.include.description}}")
|
|
|
|
var dbKey:string = "exclude"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.filter.exclude.placeholder}}")
|
|
content.appendRow("{{.filter.exclude.title}}", input)
|
|
content.description("{{.filter.exclude.description}}")
|
|
|
|
break
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
|
|
// Löschen
|
|
var input = content.createInput("button", "delete", "{{.button.delete}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + id + '", true, 0)')
|
|
input.className = "delete"
|
|
content.addInteraction(input)
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Speichern
|
|
var input = content.createInput("button", "save", "{{.button.save}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + 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", "{{.xmltv.name.placeholder}}")
|
|
content.appendRow("{{.xmltv.name.title}}", input)
|
|
|
|
// Beschreibung
|
|
var dbKey:string = "description"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.xmltv.description.placeholder}}")
|
|
content.appendRow("{{.xmltv.description.title}}", input)
|
|
|
|
// URL
|
|
var dbKey:string = "file.source"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.xmltv.fileXMLTV.placeholder}}")
|
|
content.appendRow("{{.xmltv.fileXMLTV.title}}", input)
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
// Löschen
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "delete", "{{.button.delete}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", true, 0)')
|
|
input.className = "delete"
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Aktualisieren
|
|
if (data["id.provider"]!= "-") {
|
|
var input = content.createInput("button", "update", "{{.button.update}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 1)')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Speichern
|
|
var input = content.createInput("button", "save", "{{.button.save}}")
|
|
input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 0)')
|
|
content.addInteraction(input)
|
|
break
|
|
|
|
case "users":
|
|
content.createHeadline("{{.mainMenu.item.users}}")
|
|
// Benutzername
|
|
var dbKey:string = "username"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.users.username.placeholder}}")
|
|
content.appendRow("{{.users.username.title}}", input)
|
|
|
|
// Neues Passwort
|
|
var dbKey:string = "password"
|
|
var input = content.createInput("password", dbKey, "")
|
|
input.setAttribute("placeholder", "{{.users.password.placeholder}}")
|
|
content.appendRow("{{.users.password.title}}", input)
|
|
|
|
// Bestätigung
|
|
var dbKey:string = "confirm"
|
|
var input = content.createInput("password", dbKey, "")
|
|
input.setAttribute("placeholder", "{{.users.confirm.placeholder}}")
|
|
content.appendRow("{{.users.confirm.title}}", input)
|
|
|
|
// Berechtigung WEB
|
|
var dbKey:string = "authentication.web"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
if (data["defaultUser"] == true) {
|
|
input.setAttribute("onclick", "javascript: return false")
|
|
}
|
|
content.appendRow("{{.users.web.title}}", input)
|
|
|
|
// Berechtigung PMS
|
|
var dbKey:string = "authentication.pms"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.users.pms.title}}", input)
|
|
|
|
// Berechtigung M3U
|
|
var dbKey:string = "authentication.m3u"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.users.m3u.title}}", input)
|
|
|
|
// Berechtigung XML
|
|
var dbKey:string = "authentication.xml"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.users.xml.title}}", input)
|
|
|
|
// Berechtigung API
|
|
var dbKey:string = "authentication.api"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.users.api.title}}", input)
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
|
|
// Löschen
|
|
if (data["defaultUser"]!= true && id != "-") {
|
|
var input = content.createInput("button", "delete", "{{.button.delete}}")
|
|
input.className = "delete"
|
|
input.setAttribute('onclick', 'javascript: savePopupData("' + dataType + '", "' + id + '", true, 0)')
|
|
content.addInteraction(input)
|
|
}
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: showElement("popup", false);')
|
|
content.addInteraction(input)
|
|
|
|
// Speichern
|
|
var input = content.createInput("button", "save", "{{.button.save}}")
|
|
input.setAttribute("onclick", 'javascript: savePopupData("' + dataType + '", "' + id + '", "false");')
|
|
content.addInteraction(input)
|
|
|
|
break
|
|
|
|
case "mapping":
|
|
content.createHeadline("{{.mainMenu.item.mapping}}")
|
|
// Aktiv
|
|
var dbKey:string = "x-active"
|
|
var input = content.createCheckbox(dbKey)
|
|
input.checked = data[dbKey]
|
|
input.id = "active"
|
|
//input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
input.setAttribute("onchange", "javascript: toggleChannelStatus('" + id + "', this)")
|
|
content.appendRow("{{.mapping.active.title}}", input)
|
|
|
|
// Kanalname
|
|
var dbKey:string = "x-name"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
if (BULK_EDIT == true) {
|
|
input.style.border = "solid 1px red"
|
|
input.setAttribute("readonly", "true")
|
|
}
|
|
content.appendRow("{{.mapping.channelName.title}}", input)
|
|
|
|
content.description(data["name"])
|
|
|
|
// Beschreibung
|
|
var dbKey:string = "x-description"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("placeholder", "{{.mapping.description.placeholder}}")
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
content.appendRow("{{.mapping.description.title}}", 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)
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
input.checked = data[dbKey]
|
|
content.appendRow("{{.mapping.updateChannelName.title}}", input)
|
|
}
|
|
}
|
|
|
|
// Logo URL (Kanal)
|
|
var dbKey:string = "tvg-logo"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
input.setAttribute("id", "channel-icon")
|
|
content.appendRow("{{.mapping.channelLogo.title}}", 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")
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'; changeChannelLogo('" + id + "');")
|
|
content.appendRow("{{.mapping.updateChannelLogo.title}}", 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)
|
|
select.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
content.appendRow("{{.mapping.epgCategory.title}}", select)
|
|
|
|
// M3U Gruppentitel
|
|
var dbKey:string = "x-group-title"
|
|
var input = content.createInput("text", dbKey, data[dbKey])
|
|
input.setAttribute("onchange", "javascript: this.className = 'changed'")
|
|
content.appendRow("{{.mapping.m3uGroupTitle.title}}", 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")
|
|
select.setAttribute("onchange", "javascript: this.className = 'changed'; setXmltvChannel('" + id + "',this);")
|
|
content.appendRow("{{.mapping.xmltvFile.title}}", 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")
|
|
select.setAttribute("onchange", "javascript: this.className = 'changed'; checkXmltvChannel('" + id + "',this,'" + xmlFile + "');")
|
|
|
|
sortSelect(select)
|
|
content.appendRow("{{.mapping.xmltvChannel.title}}", select)
|
|
|
|
// Interaktion
|
|
content.createInteraction()
|
|
|
|
// Logo hochladen
|
|
var input = content.createInput("button", "cancel", "{{.button.uploadLogo}}")
|
|
input.setAttribute("onclick", 'javascript: uploadLogo();')
|
|
content.addInteraction(input)
|
|
|
|
// Abbrechen
|
|
var input = content.createInput("button", "cancel", "{{.button.cancel}}")
|
|
input.setAttribute("onclick", 'javascript: 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", "{{.button.done}}")
|
|
input.setAttribute("onclick", 'javascript: donePopupData("' + dataType + '", "' + ids + '", "false");')
|
|
content.addInteraction(input)
|
|
break
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
showPopUpElement('popup-custom');
|
|
}
|
|
|
|
class XMLTVFile {
|
|
File:string
|
|
|
|
getFiles(set:string):any {
|
|
var fileIDs:string[] = getObjKeys(SERVER["xepg"]["xmltvMap"])
|
|
var values = new Array("-");
|
|
var text = new Array("-");
|
|
|
|
for (let i = 0; i < fileIDs.length; i++) {
|
|
if (fileIDs[i] != "xTeVe Dummy") {
|
|
values.push(getValueFromProviderFile(fileIDs[i], "xmltv", "file.xteve"))
|
|
text.push(getValueFromProviderFile(fileIDs[i], "xmltv", "name"))
|
|
} else {
|
|
values.push(fileIDs[i])
|
|
text.push(fileIDs[i])
|
|
}
|
|
|
|
}
|
|
|
|
var select = document.createElement("SELECT")
|
|
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
|
|
}
|
|
|
|
return select
|
|
}
|
|
|
|
getPrograms(file:string, set:string):any {
|
|
//var fileIDs:string[] = getObjKeys(SERVER["xepg"]["xmltvMap"])
|
|
var values = getObjKeys(SERVER["xepg"]["xmltvMap"][file]);
|
|
var text = new Array()
|
|
var displayName:string
|
|
|
|
for (let i = 0; i < values.length; i++) {
|
|
if (SERVER["xepg"]["xmltvMap"][file][values[i]].hasOwnProperty('display-name') == true) {
|
|
displayName = SERVER["xepg"]["xmltvMap"][file][values[i]]["display-name"];
|
|
} else {
|
|
displayName = "-"
|
|
}
|
|
|
|
text[i] = displayName + " (" + values[i] + ")";
|
|
}
|
|
|
|
text.unshift("-");
|
|
values.unshift("-");
|
|
|
|
var select = document.createElement("SELECT")
|
|
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 ((select as HTMLSelectElement).value != set) {
|
|
(select as HTMLSelectElement).value = "-"
|
|
}
|
|
|
|
return select
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
function getValueFromProviderFile(file:string, fileType, key) {
|
|
|
|
if (file == "xTeVe Dummy") {
|
|
return file
|
|
}
|
|
|
|
var fileID:string
|
|
var indicator = file.charAt(0)
|
|
|
|
switch (indicator) {
|
|
case "M":
|
|
fileType = "m3u"
|
|
fileID = file
|
|
break;
|
|
|
|
case "H":
|
|
fileType = "hdhr"
|
|
fileID = file
|
|
break;
|
|
|
|
case "X":
|
|
fileType = "xmltv"
|
|
fileID = file.substring(0, file.lastIndexOf('.'))
|
|
break;
|
|
|
|
}
|
|
|
|
if (SERVER["settings"]["files"][fileType].hasOwnProperty(fileID) == true) {
|
|
var data = SERVER["settings"]["files"][fileType][fileID];
|
|
return data[key]
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
function setXmltvChannel(id, element) {
|
|
|
|
var xmltv:XMLTVFile = new XMLTVFile()
|
|
var xmlFile = element.value
|
|
|
|
var tvgId:string = SERVER["xepg"]["epgMapping"][id]["tvg-id"]
|
|
var td = document.getElementById("popup-mapping").parentElement
|
|
td.innerHTML = ""
|
|
|
|
var select = xmltv.getPrograms(element.value, tvgId)
|
|
select.setAttribute("name", "x-mapping")
|
|
select.setAttribute("id", "popup-mapping")
|
|
select.setAttribute("onchange", "javascript: this.className = 'changed'; checkXmltvChannel('" + id + "',this,'" + xmlFile + "');")
|
|
select.className = "changed"
|
|
sortSelect(select)
|
|
td.appendChild(select);
|
|
|
|
checkXmltvChannel(id, select, xmlFile)
|
|
}
|
|
|
|
function checkXmltvChannel(id:string, element:any, xmlFile) {
|
|
|
|
var value = (element as HTMLSelectElement).value
|
|
var bool:boolean
|
|
var checkbox = document.getElementById('active')
|
|
var channel:any = SERVER["xepg"]["epgMapping"][id]
|
|
var updateLogo:boolean
|
|
|
|
|
|
if (value == "-") {
|
|
bool = false
|
|
} else {
|
|
bool = true
|
|
}
|
|
|
|
(checkbox as HTMLInputElement).checked = bool
|
|
checkbox.className = "changed"
|
|
console.log(xmlFile);
|
|
|
|
// Kanallogo aktualisieren
|
|
/*
|
|
updateLogo = (document.getElementById("update-icon") as HTMLInputElement).checked
|
|
console.log(updateLogo);
|
|
*/
|
|
|
|
if(xmlFile != "xTeVe Dummy" && bool == true) {
|
|
|
|
//(document.getElementById("update-icon") as HTMLInputElement).checked = true;
|
|
//(document.getElementById("update-icon") as HTMLInputElement).className = "changed";
|
|
|
|
console.log("ID", id)
|
|
changeChannelLogo(id)
|
|
|
|
return
|
|
}
|
|
|
|
if (xmlFile == "xTeVe Dummy") {
|
|
(document.getElementById("update-icon") as HTMLInputElement).checked = false;
|
|
(document.getElementById("update-icon") as HTMLInputElement).className = "changed";
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
function changeChannelLogo(id:string) {
|
|
|
|
var updateLogo:boolean
|
|
var channel:any = SERVER["xepg"]["epgMapping"][id]
|
|
|
|
var f = (document.getElementById("popup-xmltv") as HTMLSelectElement);
|
|
var xmltvFile = f.options[f.selectedIndex].value;
|
|
|
|
var m = (document.getElementById("popup-mapping") as HTMLSelectElement);
|
|
var xMapping = m.options[m.selectedIndex].value;
|
|
|
|
var xmltvLogo = SERVER["xepg"]["xmltvMap"][xmltvFile][xMapping]["icon"]
|
|
updateLogo = (document.getElementById("update-icon") as HTMLInputElement).checked
|
|
|
|
if (updateLogo == true && xmltvFile != "xTeVe Dummy") {
|
|
|
|
if (SERVER["xepg"]["xmltvMap"][xmltvFile].hasOwnProperty(xMapping)) {
|
|
var logo = xmltvLogo
|
|
} else {
|
|
logo = channel["tvg-logo"]
|
|
}
|
|
|
|
var logoInput = (document.getElementById("channel-icon") as HTMLInputElement);
|
|
logoInput.value = logo
|
|
if (BULK_EDIT == false) {
|
|
logoInput.className = "changed"
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
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).innerHTML = 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).innerHTML = 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).innerHTML = value
|
|
break
|
|
|
|
case "x-mapping":
|
|
if (value == "-") {
|
|
input["x-active"] = false
|
|
}
|
|
|
|
(document.getElementById(id).childNodes[7].firstChild as HTMLElement).innerHTML = 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
|
|
}
|