cityuni-webserver/index.js

293 lines
8.9 KiB
JavaScript
Raw Normal View History

/*
This file is (C) Captain ALM
Under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License
*/
2022-07-30 21:03:47 +01:00
var EntryData = []
var EntryIndices = []
var SortOrderStateI = true
2022-07-30 18:05:11 +01:00
var SortOrderBStateI = true
2022-07-30 21:03:47 +01:00
var SortOrderEnabled = false
var SortValue = ""
var OrderValue = ""
function SetupJS() {
2022-07-30 21:03:47 +01:00
SetupIndexArray()
SetupJSTheme()
SetupJSHSO()
2022-07-30 21:03:47 +01:00
SetupJSSOI()
}
2022-07-30 16:19:45 +01:00
function CreateEntry(id, name, videourl, videotype, start, end, duration) {
EntryData[id] = {
2022-07-30 15:07:10 +01:00
name: name,
videourl: videourl,
videotype: videotype,
start: Date.parse(start),
end: Date.parse(end),
2022-07-30 16:19:45 +01:00
duration : parseInt(duration, 10)
2022-07-30 15:07:10 +01:00
};
}
function CreateVideoPlaceholder(id) {
2022-07-30 21:06:04 +01:00
var imgPH = document.createElement("img")
2022-07-30 15:07:10 +01:00
imgPH.src = PlayImageURL
imgPH.id = "play-"+id
imgPH.alt = "Play Video"
imgPH.title = "Play"
2022-07-30 15:07:10 +01:00
imgPH.width = 360
imgPH.style.cursor = "pointer"
if (document.addEventListener) {
imgPH.addEventListener("click", function () {ActivateVideo(id);})
} else {
imgPH.setAttribute("onclick", "ActivateVideo("+id+");")
imgPH.onclick = function () {ActivateVideo(id);}
}
document.getElementById("video-" + id).appendChild(imgPH)
}
function ActivateVideo(id) {
2022-07-30 21:06:04 +01:00
var holder = document.getElementById("video-" + id)
2022-07-30 15:07:10 +01:00
holder.removeChild(document.getElementById("play-"+id))
2022-07-30 21:06:04 +01:00
var vid = document.createElement("video")
2022-07-30 15:07:10 +01:00
vid.controls = true
2022-07-30 15:12:43 +01:00
vid.width = 360
2022-07-30 21:06:04 +01:00
var vids = document.createElement("source")
2022-07-30 15:07:10 +01:00
vids.src = EntryData[id].videourl
vids.type = EntryData[id].videotype
2022-07-30 21:06:04 +01:00
var vida = document.createElement("a")
2022-07-30 15:07:10 +01:00
vida.href = EntryData[id].videourl
vida.innerText = "The Video"
vid.appendChild(vids)
vid.appendChild(vida)
holder.appendChild(vid)
2022-07-30 16:19:45 +01:00
if (vid.play) {vid.play();}
}
2022-07-30 21:03:47 +01:00
function SetupIndexArray() {
for (var i = 0; i < EntryData.length; i++) {
EntryIndices[i] = i
}
}
2022-07-30 16:19:45 +01:00
function SetupJSTheme() {
2022-07-30 21:06:04 +01:00
var th = document.getElementById("theme")
2022-07-30 16:19:45 +01:00
th.href = "#"
if (document.addEventListener) {
th.addEventListener("click", ToggleTheme)
2022-07-30 16:19:45 +01:00
} else {
th.setAttribute("onclick", "ToggleTheme();")
th.onclick = ToggleTheme
2022-07-30 16:19:45 +01:00
}
}
2022-07-30 23:58:23 +01:00
function ReplaceHistory(url) {
2022-07-30 21:06:04 +01:00
var s = true
if (window.history) {
2022-07-30 23:58:23 +01:00
if (window.history.replaceState) {
window.history.replaceState({}, "", url);
s = false
}
}
if (s) {
document.location.href = url
}
}
function ToggleTheme() {
2022-07-30 21:06:04 +01:00
var th = document.getElementById("theme")
var thimg = document.getElementById("theme-img")
var thsty = document.getElementById("style-theme")
var logo = document.getElementById("logo")
var url = document.location.href
2022-07-30 17:03:52 +01:00
url = url.split("#", 1)[0].split('?', 1)[0]
2022-07-30 16:19:45 +01:00
if (document.getElementById("so-theme")) {
thimg.src = SunImageURL
thimg.alt = "()"
th.title = "Switch to Light Mode"
document.getElementById("so-form").removeChild(document.getElementById("so-theme"))
logo.href = "?"
2022-07-30 23:58:23 +01:00
ReplaceHistory(url+"?"+TheParameters+"#")
thsty.href = CssDarkURL
2022-07-30 16:19:45 +01:00
} else {
thimg.src = MoonImageURL
thimg.alt = "{"
th.title = "Switch to Dark Mode"
2022-07-30 21:06:04 +01:00
var thi = document.createElement("input")
2022-07-30 16:19:45 +01:00
thi.name = "light"
thi.type = "hidden"
thi.id = "so-theme"
document.getElementById("so-form").appendChild(thi)
logo.href = "?light"
if (TheParameters === "") {
2022-07-30 23:58:23 +01:00
ReplaceHistory(url+"?light#")
} else {
2022-07-30 23:58:23 +01:00
ReplaceHistory(url+"?light&"+TheParameters+"#")
}
thsty.href = CssLightURL
2022-07-30 15:07:10 +01:00
}
}
function SetupJSHSO() {
2022-07-30 21:06:04 +01:00
var pb = document.getElementById("sort-menu-button")
var pane = document.getElementById("so-pane")
if (document.addEventListener) {
document.addEventListener("click", HandleGlobalClick)
2022-07-30 18:05:11 +01:00
pb.addEventListener("mouseover", HandleSortOrderBEnter)
pb.addEventListener("mouseout", HandleSortOrderBLeave)
pane.addEventListener("mouseover", HandleSortOrderEnter)
pane.addEventListener("mouseout", HandleSortOrderLeave)
} else {
document.parentElement.setAttribute("onclick", "HandleGlobalClick();")
2022-07-30 18:05:11 +01:00
pb.setAttribute("onmouseover", "HandleSortOrderBEnter();")
pb.setAttribute("onmouseout", "HandleSortOrderBLeave();")
pane.setAttribute("onmouseover", "HandleSortOrderEnter();")
pane.setAttribute("onmouseout", "HandleSortOrderLeave();")
document.parentElement.onclick = HandleGlobalClick
2022-07-30 18:05:11 +01:00
pb.onmouseover = HandleSortOrderBEnter
pb.onmouseout = HandleSortOrderBLeave
pane.onmouseover = HandleSortOrderEnter
pane.onmouseout = HandleSortOrderLeave
}
}
function HandleGlobalClick() {
2022-07-30 18:05:11 +01:00
if (SortOrderStateI && SortOrderBStateI) {document.getElementById("sort-menu").checked = false;}
}
function HandleSortOrderBEnter() {
SortOrderBStateI = false
}
function HandleSortOrderBLeave(){
SortOrderBStateI = true
}
function HandleSortOrderEnter() {
SortOrderStateI = false
}
function HandleSortOrderLeave(){
SortOrderStateI = true
2022-07-30 21:03:47 +01:00
}
function SetupJSSOI() {
2022-07-30 21:06:04 +01:00
var submit = document.getElementById("so-submit")
2022-07-30 21:03:47 +01:00
if (submit.parentNode) {submit.parentNode.removeChild(submit);}
2022-07-30 21:06:04 +01:00
var oc = document.getElementById("so-order")
2022-07-30 21:03:47 +01:00
OrderValue = oc.value
2022-07-30 21:06:04 +01:00
var sc = document.getElementById("so-sort")
2022-07-30 21:03:47 +01:00
SortValue = sc.value
if (document.addEventListener) {
oc.addEventListener("change", HandleSortOrderChange)
sc.addEventListener("change", HandleSortOrderChange)
} else {
oc.setAttribute("onchange", "HandleSortOrderChange();")
sc.setAttribute("onchange", "HandleSortOrderChange();")
oc.onchange = HandleSortOrderChange
sc.onchange = HandleSortOrderChange
}
SortOrderEnabled = true
}
function HandleSortOrderChange() {
if (SortOrderEnabled) {EntrySort(document.getElementById("so-order").value, document.getElementById("so-sort").value);}
}
function EntrySort(o, s) {
var ts = s.toString().toLowerCase()
var chg = false
if (SortValue !== s) {
chg = true
SortValue = s
}
if (chg || OrderValue !== o) {
if (ts === "desc" || ts === "descending") {
ts = -1
} else {
ts = 1
}
2022-07-30 21:06:04 +01:00
var to = o.toString().toLowerCase()
2022-07-30 21:03:47 +01:00
if (to === "start") {
if (ts < 0) {
EntryIndices = EntryIndices.sort(SortStartD)
} else {
EntryIndices = EntryIndices.sort(SortStartA)
}
} else if (to === "end") {
if (ts < 0) {
EntryIndices = EntryIndices.sort(SortEndD)
} else {
EntryIndices = EntryIndices.sort(SortEndA)
}
} else if (to === "name") {
if (ts < 0) {
EntryIndices = EntryIndices.sort(SortNameD)
} else {
EntryIndices = EntryIndices.sort(SortNameA)
}
} else if (to === "duration") {
if (ts < 0) {
EntryIndices = EntryIndices.sort(SortDurationD)
} else {
EntryIndices = EntryIndices.sort(SortDurationA)
}
}
chg = true
OrderValue = o
}
if (chg) {
TheParameters = "order="+OrderValue+"&sort="+SortValue
2022-07-30 21:07:22 +01:00
var url = document.location.href
url = url.split("#", 1)[0].split('?', 1)[0]
2022-07-30 21:03:47 +01:00
if (document.getElementById("so-theme")) {
2022-07-30 23:58:23 +01:00
ReplaceHistory(url+"?light&"+TheParameters)
2022-07-30 21:03:47 +01:00
} else {
2022-07-30 23:58:23 +01:00
ReplaceHistory(url+"?"+TheParameters)
2022-07-30 21:03:47 +01:00
}
for (var i = 0; i < EntryIndices.length; i++) {
2022-07-30 21:11:29 +01:00
var tNode = document.getElementById("entry-"+EntryIndices[i])
var pNode = tNode.parentNode
tNode = pNode.removeChild(tNode)
pNode.appendChild(tNode)
2022-07-30 21:03:47 +01:00
}
}
}
function SortStartA(a, b) {
if (EntryData[a].start < EntryData[b].start) {
return -1
} else {
return 1
}
}
function SortStartD(a, b) {
if (EntryData[a].start > EntryData[b].start) {
return -1
} else {
return 1
}
}
function SortEndA(a, b) {
if (EntryData[a].end < EntryData[b].end) {
return -1
} else {
return 1
}
}
function SortEndD(a, b) {
if (EntryData[a].end > EntryData[b].end) {
return -1
} else {
return 1
}
}
function SortNameA(a, b) {
if (EntryData[a].name < EntryData[b].name) {
return -1
} else {
return 1
}
}
function SortNameD(a, b) {
if (EntryData[a].name > EntryData[b].name) {
return -1
} else {
return 1
}
}
function SortDurationA(a, b) {
if (EntryData[a].duration < EntryData[b].duration) {
return -1
} else {
return 1
}
}
function SortDurationD(a, b) {
if (EntryData[a].duration > EntryData[b].duration) {
return -1
} else {
return 1
}
}