cityuni-webserver/index.js

343 lines
11 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()
SetupJSHPL()
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) {
2022-07-30 23:29:12 +01:00
th.addEventListener("click", CToggleTheme)
2022-07-30 16:19:45 +01:00
} else {
2022-07-30 23:29:12 +01:00
th.setAttribute("onclick", "CToggleTheme();")
th.onclick = CToggleTheme
2022-07-30 16:19:45 +01:00
}
}
2022-07-30 22:29:49 +01:00
function cReplaceHistory() {
ReplaceHistory(window.location.href)
}
function ReplaceHistory(url) {
if (window.history) {
if (window.history.replaceState) {
window.history.replaceState({
light: !!document.getElementById("so-theme"),
order: document.getElementById("so-order").value,
sort: document.getElementById("so-sort").value
}, "", url);
console.log("REPLACE")
}
}
}
2022-07-30 21:21:17 +01:00
function PushHistory(url) {
2022-07-30 21:06:04 +01:00
var s = true
if (window.history) {
2022-07-30 21:21:17 +01:00
if (window.history.pushState) {
2022-07-30 22:29:49 +01:00
window.history.pushState({
2022-07-30 21:03:47 +01:00
light: !!document.getElementById("so-theme"),
order: document.getElementById("so-order").value,
sort: document.getElementById("so-sort").value
2022-07-30 22:29:49 +01:00
}, "", url);
2022-07-30 23:41:13 +01:00
console.log("PUSH")
s = false
}
}
if (s) {
document.location.href = url
}
}
2022-07-30 23:29:12 +01:00
function CToggleTheme() {
ToggleTheme(true)
}
function ToggleTheme(p) {
2022-07-30 23:51:30 +01:00
if (p) {cReplaceHistory();}
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:29:12 +01:00
if (p) {PushHistory(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"
2022-07-30 23:29:12 +01:00
if (p) {
if (TheParameters === "") {
PushHistory(url + "?light#")
} else {
PushHistory(url + "?light&" + TheParameters + "#")
}
}
thsty.href = CssLightURL
2022-07-30 15:07:10 +01:00
}
}
2022-07-30 21:03:47 +01:00
function SetupJSHPL(){
if (window.history) {
2022-07-30 22:40:23 +01:00
if (window.history.pushState && window.history.replaceState) {
2022-07-30 23:45:38 +01:00
//document.addEventListener("DOMContentLoaded", cReplaceHistory)
window.addEventListener("popstate", HandleHistoryPop)
}
2022-07-30 21:03:47 +01:00
}
}
function HandleHistoryPop(event) {
2022-07-30 22:22:40 +01:00
console.log("POP")
console.log(event.state)
2022-07-30 21:03:47 +01:00
if (event.state) {
SortOrderEnabled = false
2022-07-30 21:06:04 +01:00
var isnl = !document.getElementById("so-theme")
2022-07-30 23:29:12 +01:00
if ((event.state.light && isnl) || (!event.state.light && !isnl)) {ToggleTheme(false);}
2022-07-30 21:03:47 +01:00
document.getElementById("so-order").value = event.state.order
document.getElementById("so-sort").value = event.state.sort
2022-07-30 23:29:12 +01:00
EntrySort(event.state.order, event.state.sort, false)
2022-07-30 21:03:47 +01:00
SortOrderEnabled = true
}
}
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() {
2022-07-30 23:29:12 +01:00
if (SortOrderEnabled) {EntrySort(document.getElementById("so-order").value, document.getElementById("so-sort").value, true);}
2022-07-30 21:03:47 +01:00
}
2022-07-30 23:29:12 +01:00
function EntrySort(o, s, p) {
2022-07-30 21:03:47 +01:00
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 23:29:12 +01:00
if (p) {
if (document.getElementById("so-theme")) {
PushHistory(url + "?light&" + TheParameters)
} else {
PushHistory(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
}
}