| | |
| | | function Ablageort(n, o, u) { |
| | | this.name = n; |
| | | this.ort = o; |
| | | this.url = u; |
| | | } |
| | | |
| | | function Einstellung(k, v) { |
| | | this.key = k; |
| | | this.value = v; |
| | | } |
| | | |
| | | function Abspieler(n, u) { |
| | | this.name = n; |
| | | this.url = u; |
| | | } |
| | | |
| | | function Mediazentrale() { |
| | | var self = this; |
| | | var appMenu; |
| | | var cache; // mustache templates |
| | | var ortPfad; |
| | | var mediaPfad; |
| | | var katUrl; |
| | | var selTitel; |
| | | |
| | | this.init = function () { |
| | | self.mediaPfad = '/'; |
| | | self.ortPfad = '/'; |
| | | self.cache = new Array(); |
| | | self.appMenu = new AppMenu(); |
| | | self.appMenu.init( |
| | | "data/menu/", |
| | | "hauptmenue.json", |
| | | "data/tpl/app-menu.tpl", |
| | | ".west", |
| | | "8em"); |
| | | |
| | | document.querySelector('.hamburger').addEventListener('click', function (e) { |
| | | self.menue_umschalten(); |
| | | }); |
| | | |
| | | self.addEvtListener('#mi-katalog', 'click', self.media_liste); |
| | | self.addEvtListener('#mi-orte', 'click', self.ablageort_liste); |
| | | self.addEvtListener('#mi-prefs', 'click', self.prefs_liste); |
| | | self.addEvtListener('#mi-player', 'click', self.abspieler_liste); |
| | | self.addEvtListener('#mi-listen', 'click', self.abspielliste_liste); |
| | | self.addEvtListener('#mi-list', 'click', self.titel_liste); |
| | | |
| | | self.fusszeile_umschalten(); |
| | | self.seitenleiste_umschalten(); |
| | | self.dialog_unten_zeigen(); |
| | | }; |
| | | |
| | | this.abspieler_auswahl_fuellen = function() { |
| | | self.http_get('../api/store/Abspieler/', function (responseText) { |
| | | /* |
| | | {"ArrayList": [{"name":"Wohnz","url":"http://rpi4-wz:9090/"},{"name":"Arbz","url":"http://rpi4-az:9090/"}]} |
| | | */ |
| | | self.vorlage_laden_und_fuellen("data/tpl/abs_sel.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".abs-sel").innerHTML = html; |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | this.abspielliste_auswahl_fuellen = function() { |
| | | self.http_get('../api/store/Abspielliste/', function (responseText) { |
| | | /* |
| | | ? |
| | | */ |
| | | self.vorlage_laden_und_fuellen("data/tpl/pl_sel.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".pl-sel").innerHTML = html; |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | /* Unterer Einblendbereich */ |
| | | |
| | | this.dialog_unten_zeigen = function() { |
| | | self.vorlage_laden_und_fuellen("data/tpl/ctrl.tpl", "", function (html) { |
| | | var dlg = document.querySelector(".dialog-unten"); |
| | | dlg.style.height = '4.5em'; |
| | | dlg.innerHTML = html; |
| | | self.abspieler_auswahl_fuellen(); |
| | | self.abspielliste_auswahl_fuellen(); |
| | | self.addEvtListener('#dazu-btn', 'click', self.addSelectedTitel); |
| | | self.media_liste(); |
| | | }); |
| | | }; |
| | | |
| | | /* ---------------- Titel einer Abspielliste ----------------- */ |
| | | |
| | | this.titel_liste = function() { |
| | | self.reset_top_buttons(); |
| | | var plname = document.querySelector('#playlist').value; |
| | | self.http_get('../api/alist/' + plname, function (responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/titel_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | | var t = event.target; |
| | | self.removeClassMulti('selected'); |
| | | t.classList.add('selected'); |
| | | |
| | | /* |
| | | self.http_get('../api/store/Ablageort/' + t.textContent, function(responseText){ |
| | | var ablageort = JSON.parse(responseText); |
| | | self.ablageort_form(ablageort); |
| | | }); |
| | | */ |
| | | }); |
| | | /* |
| | | self.addEvtListener('#neu-btn', 'click', function (event) { |
| | | eval("self.ablageort_form" + "(this)"); |
| | | }); |
| | | */ |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | /* ---------------- Entitaets-Listen ----------------- */ |
| | | |
| | | self.reset_top_buttons = function() { |
| | | self.vorlage_laden_und_fuellen("data/tpl/top_btns.tpl", '', function (html) { |
| | | document.querySelector(".top-btns").innerHTML = html; |
| | | }); |
| | | }; |
| | | |
| | | // auf der obersten Ebene werden die Kataloge angezeigt, |
| | | // darunter der Inhalt des aktuellen Pfades |
| | | this.media_liste = function() { |
| | | self.reset_top_buttons(); |
| | | if(self.ortPfad === '/') { |
| | | // Kataloge listen |
| | | self.http_get('../api/store/Ablageort/', function (responseText) { |
| | | self.http_get('../api/store/Ablageort/liste/', function (responseText) { |
| | | //document.querySelector('#top-up-btn').removeEventListener('click', self.media_liste_herauf); |
| | | self.vorlage_laden_und_fuellen("data/tpl/katalog_root_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | |
| | | }); |
| | | }); |
| | | } else { |
| | | // Pfad listen |
| | | self.http_get('..' + self.ortPfad + '/' + self.mediaPfad + '/', function(responseText) { |
| | | //console.log(responseText); |
| | | var url = '..' + self.ortPfad + self.mediaPfad; |
| | | if(!url.endsWith('/')) { |
| | | url = url + '/'; |
| | | } |
| | | self.http_get(url, function(responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/katalog_inhalt_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | | var t = event.target; |
| | | //console.log(t.textContent); |
| | | var tx = t.textContent; |
| | | if(t.classList.contains("entity-typ-folder")) { |
| | | self.mediaPfad = self.mediaPfad + '/' + t.textContent; |
| | | if(self.mediaPfad.endsWith('/')) { |
| | | self.mediaPfad = self.mediaPfad + tx; |
| | | } else { |
| | | self.mediaPfad = self.mediaPfad + '/' + tx; |
| | | } |
| | | self.media_liste(); |
| | | } else { |
| | | console.log("Media-Inhalt auswaehlen oder abspielen"); |
| | | self.removeClassMulti('selected'); |
| | | t.classList.add('selected'); |
| | | //self.selTitel = new Titel(t.textContent, self.ortPfad); |
| | | } |
| | | }); |
| | | self.addEvtListener('#zurueck-btn', 'click', function (event) { |
| | | self.addEvtListener('#top-up-btn', 'click', function(event) { |
| | | if(self.mediaPfad === '/') { |
| | | self.ortPfad = '/'; |
| | | } else { |
| | | var pos = self.mediaPfad.lastIndexOf('/'); |
| | | var parent = self.mediaPfad.substring(0, pos); |
| | | //console.log("Parent: " + parent); |
| | | var parent; |
| | | if(pos > 1) { |
| | | parent = self.mediaPfad.substring(0, pos); |
| | | } else { |
| | | parent = '/'; |
| | | } |
| | | self.mediaPfad = parent; |
| | | } |
| | | self.media_liste(); |
| | | }); |
| | | }); |
| | | }); |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | /* Die folgenden '_liste' Funktionen koennen noch vereinheitlicht werden */ |
| | | this.addSelectedTitel = function() { |
| | | var titelName = document.querySelector(".selected").textContent; |
| | | var titel; |
| | | if(self.mediaPfad.endsWith('/')) { |
| | | titel = new Titel(titelName, self.mediaPfad, self.ortPfad); |
| | | } else { |
| | | titel = new Titel(titelName, self.mediaPfad + '/', self.ortPfad); |
| | | } |
| | | var plname = document.querySelector('#playlist').value; |
| | | self.http_put('../api/alist/' + plname, JSON.stringify(titel), function(responseText) { |
| | | self.meldung_mit_timeout(responseText, 1500); |
| | | }); |
| | | }; |
| | | |
| | | this.ablageort_liste = function() { |
| | | self.http_get('../api/store/Ablageort/', function (responseText) { |
| | | self.reset_top_buttons(); |
| | | self.http_get('../api/store/Ablageort/liste/', function (responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/ablageort_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | |
| | | self.ablageort_form(ablageort); |
| | | }); |
| | | }); |
| | | self.addEvtListener('#neu-btn', 'click', function (event) { |
| | | //self.addEvtListener('#neu-btn', 'click', function (event) { |
| | | self.addEvtListener('#top-neu-btn', 'click', function(event) { |
| | | eval("self.ablageort_form" + "(this)"); |
| | | }); |
| | | }); |
| | |
| | | }; |
| | | |
| | | this.prefs_liste = function() { |
| | | self.http_get('../api/store/Einstellung/', function (responseText) { |
| | | self.reset_top_buttons(); |
| | | self.http_get('../api/store/Einstellung/liste/', function (responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/einstellung_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | |
| | | self.prefs_form(einstellung); |
| | | }); |
| | | }); |
| | | self.addEvtListener('#neu-btn', 'click', function (event) { |
| | | self.addEvtListener('#top-neu-btn', 'click', function(event) { |
| | | eval("self.prefs_form" + "(this)"); |
| | | }); |
| | | }); |
| | |
| | | }; |
| | | |
| | | this.abspieler_liste = function() { |
| | | self.http_get('../api/store/Abspieler/', function (responseText) { |
| | | self.http_get('../api/store/Abspieler/liste/', function (responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/abspieler_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | |
| | | self.abspieler_form(abspieler); |
| | | }); |
| | | }); |
| | | self.addEvtListener('#neu-btn', 'click', function (event) { |
| | | self.addEvtListener('#neu-btn', 'click', function(event) { |
| | | eval("self.abspieler_form" + "(this)"); |
| | | }); |
| | | }); |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | /* Die folgenden '_form' Funktionen koennen noch vereinheitlicht werden */ |
| | | |
| | | this.abspielliste_liste = function() { |
| | | self.http_get('../api/store/Abspielliste/liste/', function (responseText) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/abspielliste_liste.tpl", JSON.parse(responseText), function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('.entity-eintrag', 'click', function (event) { |
| | | var t = event.target; |
| | | self.http_get('../api/store/Abspielliste/' + t.textContent, function(responseText){ |
| | | var abspielliste = JSON.parse(responseText); |
| | | self.abspielliste_form(abspielliste); |
| | | }); |
| | | }); |
| | | self.addEvtListener('#top-neu-btn', 'click', function(event) { |
| | | eval("self.abspielliste_form" + "(this)"); |
| | | }); |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | /* -------------------- Entitaets-Formulare ------------------ */ |
| | | |
| | | this.abspielliste_form = function(al) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/form_abspielliste.tpl", al, function (html) { |
| | | document.querySelector(".zentraler-inhalt").innerHTML = html; |
| | | self.addEvtListener('#ok-btn', 'click', function () { |
| | | var alname = document.querySelector('#abspielliste-name').value; |
| | | alname = alname.replace(' ', '').replace(/[\W]+/g, ''); |
| | | var abspielliste = new Abspielliste( |
| | | alname |
| | | ); |
| | | var daten = JSON.stringify(abspielliste); |
| | | //if(typeof pl === "undefined" || pl.key !== plname) { |
| | | if(typeof al.name === "undefined" || al.name.length < 1) { |
| | | // neu |
| | | self.http_put('../api/store/Abspielliste/' + alname, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.abspielliste_auswahl_fuellen(); |
| | | self.abspielliste_liste(); |
| | | }); |
| | | } else { |
| | | // aendern |
| | | self.http_put('../api/store/Abspielliste/' + al.name, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.abspielliste_auswahl_fuellen(); |
| | | self.abspielliste_liste(); |
| | | }); |
| | | } |
| | | }); |
| | | self.addEvtListener('#cancel-btn', 'click', function () { |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.abspielliste_liste(); |
| | | }); |
| | | self.addEvtListener('#loeschen-btn', 'click', function() { |
| | | var alname = document.querySelector('#abspielliste-name').value; |
| | | var dlgdata = {"del-elem": alname}; |
| | | self.dialog_laden_und_zeigen('data/tpl/dlg-loeschen.tpl', dlgdata, function() { |
| | | self.addEvtListener('#nein-btn', 'click', self.dialog_schliessen); |
| | | self.addEvtListener('#ja-btn', 'click', function() { |
| | | self.http_delete('../api/store/Abspielliste/' + alname, '', function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.dialog_schliessen(); |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.abspielliste_auswahl_fuellen(); |
| | | self.abspielliste_liste(); |
| | | }); |
| | | }); |
| | | }); |
| | | }); |
| | | }); |
| | | }; |
| | | |
| | | this.abspieler_form = function(pl) { |
| | | self.vorlage_laden_und_fuellen("data/tpl/form_abspieler.tpl", pl, function (html) { |
| | |
| | | document.querySelector('#abspieler-url').value |
| | | ); |
| | | var daten = JSON.stringify(abspieler); |
| | | if(typeof pl === "undefined" || pl.key !== plname) { |
| | | //if(typeof pl === "undefined" || pl.key !== plname) { |
| | | if(typeof pl.name === "undefined" || pl.name.length < 1) { |
| | | // neu |
| | | self.http_post('../api/store/Abspieler', daten, function (responseText) { |
| | | self.http_put('../api/store/Abspieler/' + plname, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.abspieler_auswahl_fuellen(); |
| | | self.abspieler_liste(); |
| | | }); |
| | | } else { |
| | | // aendern |
| | | self.http_put('../api/store/Abspieler', daten, function (responseText) { |
| | | self.http_put('../api/store/Abspieler/' + pl.name, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.abspieler_auswahl_fuellen(); |
| | | self.abspieler_liste(); |
| | | }); |
| | | } |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.abspieler_liste(); |
| | | }); |
| | | self.addEvtListener('#cancel-btn', 'click', function () { |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | |
| | | // hier die Antwort verarbeiten |
| | | self.dialog_schliessen(); |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.abspieler_auswahl_fuellen(); |
| | | self.abspieler_liste(); |
| | | }); |
| | | }); |
| | |
| | | document.querySelector('#einstellung-value').value |
| | | ); |
| | | var daten = JSON.stringify(pref); |
| | | if(typeof k === "undefined" || k.key !== pkey) { |
| | | //if(typeof k === "undefined" || k.key !== pkey) { |
| | | if(typeof k.key === "undefined" || k.key.length < 1) { |
| | | // neu |
| | | self.http_post('../api/store/Einstellung', daten, function (responseText) { |
| | | self.http_put('../api/store/Einstellung/' + pkey, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.prefs_liste(); |
| | | }); |
| | | } else { |
| | | // aendern |
| | | self.http_put('../api/store/Einstellung', daten, function (responseText) { |
| | | self.http_put('../api/store/Einstellung/' + k.key, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.prefs_liste(); |
| | | }); |
| | | } |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.prefs_liste(); |
| | | }); |
| | | self.addEvtListener('#cancel-btn', 'click', function () { |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | |
| | | document.querySelector('#ablageort-url').value |
| | | ); |
| | | var daten = JSON.stringify(a); |
| | | if(typeof ort === "undefined" || ort.name !== aName) { |
| | | //if(typeof ort === "undefined" || ort.name !== aName) { |
| | | if(typeof ort.name === "undefined" || ort.name.length < 1) { |
| | | // neu |
| | | self.http_post('../api/store/Ablageort', daten, function (responseText) { |
| | | self.http_put('../api/store/Ablageort/' + aName, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.ablageort_liste(); |
| | | }); |
| | | } else { |
| | | // aendern |
| | | self.http_put('../api/store/Ablageort', daten, function (responseText) { |
| | | self.http_put('../api/store/Ablageort/' + ort.name, daten, function (responseText) { |
| | | // hier die Antwort verarbeiten |
| | | self.ablageort_liste(); |
| | | }); |
| | | } |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | | self.ablageort_liste(); |
| | | }); |
| | | self.addEvtListener('#cancel-btn', 'click', function () { |
| | | //document.querySelector(".zentraler-inhalt").innerHTML = ''; |
| | |
| | | document.querySelectorAll('.' + selector).forEach(elem => { elem.classList.remove(selector); }); |
| | | }; |
| | | |
| | | /* |
| | | this.addEvtListener = function (selector, eventName, func) { |
| | | var elems = document.querySelectorAll(selector); |
| | | var index; |
| | | for (index = 0; index < elems.length; index++) { |
| | | elems[index].addEventListener(eventName, func); |
| | | } |
| | | }; |
| | | */ |
| | | |
| | | // document.querySelectorAll(selector).forEach(elem => { elem.addEventListener(eventName, func); }); |
| | | |
| | | /* asynchroner HTTP Client */ |
| | | /* --------------------- asynchroner HTTP Client ----------------- */ |
| | | |
| | | this.http_get = function (u, cb) { |
| | | self.http_call('GET', u, null, cb); |
| | |
| | | } |
| | | }; |
| | | |
| | | /* Unterer Einblendbereich */ |
| | | |
| | | self.dialog_unten_zeigen = function() { |
| | | self.vorlage_laden_und_fuellen("data/tpl/ctrl.tpl", "", function (html) { |
| | | var dlg = document.querySelector(".dialog-unten"); |
| | | dlg.style.height = '4.5em'; |
| | | dlg.innerHTML = html; |
| | | }); |
| | | }; |
| | | |
| | | /* ab hier aus App-Vorlage */ |
| | | |
| | | this.init = function () { |
| | | //self.vorlagen = new Vorlagen(); |
| | | self.mediaPfad = '/'; |
| | | self.ortPfad = '/'; |
| | | self.cache = new Array(); |
| | | self.appMenu = new AppMenu(); |
| | | self.appMenu.init( |
| | | "data/menu/", |
| | | "hauptmenue.json", |
| | | "data/tpl/app-menu.tpl", |
| | | ".west", |
| | | "8em"); |
| | | |
| | | document.querySelector('.hamburger').addEventListener('click', function (e) { |
| | | self.menue_umschalten(); |
| | | }); |
| | | |
| | | self.addEvtListener('#mi-katalog', 'click', self.media_liste); |
| | | self.addEvtListener('#mi-orte', 'click', self.ablageort_liste); |
| | | self.addEvtListener('#mi-prefs', 'click', self.prefs_liste); |
| | | self.addEvtListener('#mi-player', 'click', self.abspieler_liste); |
| | | //self.addEvtListener('#mi-list', 'click', self.media_liste); |
| | | |
| | | self.fusszeile_umschalten(); |
| | | self.seitenleiste_umschalten(); |
| | | self.dialog_unten_zeigen(); |
| | | }; |
| | | /* ------------------------ aus App-Vorlage ------------------- */ |
| | | |
| | | this.menue_umschalten = function () { |
| | | var ham = document.querySelector(".hamburger"); |
| | |
| | | }, timeout); |
| | | }; |
| | | |
| | | /* Dialog-Funktionen */ |
| | | /* --------------------- Dialog-Funktionen ------------------------ */ |
| | | |
| | | /* |
| | | Einen Dialog aus Vorlagen erzeugen |
| | |
| | | }); |
| | | }; |
| | | |
| | | self.dialog_schliessen = function () { |
| | | this.dialog_schliessen = function () { |
| | | document.querySelector('.close-btn').removeEventListener('click', self.dialog_schliessen); |
| | | var dlg = document.querySelector('.dialog'); |
| | | dlg.style.height = '0'; |
| | | dlg.innerHTML = ''; |
| | | }; |
| | | |
| | | /* Vorlagen */ |
| | | /* --------------------- Vorlagen ---------------------- */ |
| | | |
| | | /* |
| | | Das HTML erzeugen, das entsteht, wenn eine Vorlage mit Inhalt |
| | |
| | | |
| | | } |
| | | |
| | | /* ----------- Objekte ---------------- */ |
| | | |
| | | function Ablageort(n, o, u) { |
| | | this.name = n; |
| | | this.ort = o; |
| | | this.url = u; |
| | | } |
| | | |
| | | function Einstellung(k, v) { |
| | | this.key = k; |
| | | this.value = v; |
| | | } |
| | | |
| | | function Abspieler(n, u) { |
| | | this.name = n; |
| | | this.url = u; |
| | | } |
| | | |
| | | function Abspielliste(n) { |
| | | this.name = n; |
| | | } |
| | | |
| | | function Titel(n, p, u) { |
| | | this.katalogUrl = u; |
| | | this.pfad = p; |
| | | this.name = n; |
| | | } |