Persoenliche Mediazentrale
ulrich
2021-04-07 f45e203a66a5471a0dd05e0362566ef96a2b6b31
www/ui/js/app.js
@@ -1,32 +1,65 @@
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;
  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.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;
      });
    });
  };
  /* 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();
    });
  };
  
  // auf der obersten Ebene werden die Kataloge angezeigt,
  // darunter der Inhalt des aktuellen Pfades
  this.media_liste = function() {
    if(self.ortPfad === '/') {
      // Kataloge listen
      self.http_get('../api/store/Ablageort/', function (responseText) {
      self.http_get('../api/store/Ablageort/liste/', function (responseText) {
        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) {
@@ -76,7 +109,7 @@
  /* Die folgenden '_liste' Funktionen koennen noch vereinheitlicht werden */
  this.ablageort_liste = function() {
    self.http_get('../api/store/Ablageort/', function (responseText) {
    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) {
@@ -94,7 +127,7 @@
  };
  this.prefs_liste = function() {
    self.http_get('../api/store/Einstellung/', function (responseText) {
    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) {
@@ -112,7 +145,7 @@
  };
  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) {
@@ -301,7 +334,7 @@
  
  // 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);
@@ -337,45 +370,7 @@
    }
  };
  
  /* 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");
@@ -452,7 +447,7 @@
    }, timeout);
  };
  
  /* Dialog-Funktionen */
  /* --------------------- Dialog-Funktionen ------------------------ */
  /*
   Einen Dialog aus Vorlagen erzeugen
@@ -486,14 +481,14 @@
    });
  };
  
  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
@@ -547,3 +542,21 @@
}
/* ----------- 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;
}