|  |  | 
 |  |  | var TPL_ABSPIELER = 'abspieler'; | 
 |  |  | var templateCache = {}; // mustache templates | 
 |  |  | var prefsRendered = false; | 
 |  |  | var senderKlickModus = "0"; // 1=abspielen, 2=bearbeiten, 3=loeschen | 
 |  |  | var senderKlickModus = "1"; // 1=abspielen, 2=bearbeiten, 3=loeschen | 
 |  |  | var ID_UNDEFINED = -1; | 
 |  |  | var suchTimeout; | 
 |  |  |  | 
 |  |  | function app_init() { | 
 |  |  |   $('.sued').text('Initialisieren..'); | 
 |  |  |   $('.dialog').hide(); | 
 |  |  |   $('.ost').hide(); | 
 |  |  |  | 
 |  |  |   // Menü initialisieren | 
 |  |  |   app_menu_init( | 
 |  |  |     "data/menu/", | 
 |  |  |     "hauptmenue.json", | 
 |  |  |     "../jslib/app-menu/app-menu.tpl", | 
 |  |  |     ".west", | 
 |  |  |     "8em"); | 
 |  |  |  | 
 |  |  |   // Templates laden | 
 |  |  |   app_get_template('data/tpl/dlg-msg.tpl', TPL_DLG_MSG); | 
 |  |  |   app_get_template('data/tpl/dlg-info.tpl', TPL_DLG_INFO); | 
 |  |  |   app_get_template('data/tpl/sender.tpl', TPL_SENDER); | 
 |  |  | 
 |  |  |   app_get_template('data/tpl/kachel.tpl', TPL_SENDER_KACHEL); | 
 |  |  |   app_get_template('data/tpl/abspieler.tpl', TPL_ABSPIELER); | 
 |  |  |  | 
 |  |  |   var $hamburger = $(".hamburger"); | 
 |  |  |   $hamburger.on("click", function(e) { | 
 |  |  |   // Klicks auf das Hamburger-Menü-Icon an eine Funktion leiten | 
 |  |  |   $(".hamburger").on("click", function(e) { | 
 |  |  |     app_menue_umschalten(); | 
 |  |  |   }); | 
 |  |  |  | 
 |  |  |   // Eingaben ins Suchfeld an eine Funktion leiten | 
 |  |  |   $(".sendersuche-eingabe").on('keyup', function() { | 
 |  |  |     clearTimeout(suchTimeout); | 
 |  |  |     suchTimeout = setTimeout('app_sendersuche()', 500); | 
 |  |  |   }); | 
 |  |  |   $('.sued').text('Bereit.'); | 
 |  |  |  | 
 |  |  |   // Abspieler und Sender laden | 
 |  |  |   setTimeout(function() { | 
 |  |  |     app_get_abspieler(); | 
 |  |  |     app_get_sender(); | 
 |  |  |     $('.sued').text('Bereit.'); | 
 |  |  |   }, 200); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_menue_umschalten() { | 
 |  |  |   var $hamburger = $(".hamburger"); | 
 |  |  |   $hamburger.toggleClass("is-active"); // hamburger-icon umschalten | 
 |  |  |   $(".hamburger").toggleClass("is-active"); // hamburger-icon umschalten | 
 |  |  |   app_menu_toggle(); // menue oeffnen/schliessen | 
 |  |  | } | 
 |  |  | /* Abspieler und abspielen */ | 
 |  |  |  | 
 |  |  | function app_get_abspiel_ziel() { | 
 |  |  |   var opt = $(".abspieler-auswahl :selected"); | 
 |  |  |   var atyp = opt.attr("atyp"); | 
 |  |  |   var aname = opt.text(); | 
 |  |  |   var aurl = opt.attr("aurl"); | 
 |  |  |   return new Abspieler(-1, aname, aurl, atyp, "", "selected"); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /* | 
 |  |  |   Abspiel-URL für Raspi: | 
 |  |  |   http://raspi:8080/pirc/sys/rpc?c=de.uhilger.pirc.App&m=abspielen&p=http://bob.hoerradar.de/radiobob-live-mp3-hq&p= | 
 |  |  | */ | 
 |  |  | function app_abspielen(sender, abspieler) { | 
 |  |  |   if(abspieler.typ === 'pirc') { | 
 |  |  |     var url = | 
 |  |  |       abspieler.url + | 
 |  |  |       '/sys/rpc?c=de.uhilger.pirc.App&m=abspielen&p=' + | 
 |  |  |       sender.url + | 
 |  |  |       '&p='; | 
 |  |  |     app_radio_kommando_senden(url); | 
 |  |  |   } else { | 
 |  |  |     // 'hier abspielen' muss noch gebaut werden | 
 |  |  |   } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_abspielen_stoppen() { | 
 |  |  |   var abspieler = app_get_abspiel_ziel(); | 
 |  |  |   if(abspieler.typ === 'pirc') { | 
 |  |  |     var url = | 
 |  |  |       abspieler.url + | 
 |  |  |       '/sys/rpc?c=de.uhilger.pirc.App&m=kommando&p=q'; | 
 |  |  |     app_radio_kommando_senden(url); | 
 |  |  |   } else { | 
 |  |  |     // 'hier abspielen' stoppen muss noch gebaut werden | 
 |  |  |   } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /* Senderliste */ | 
 |  |  |  | 
 |  |  | function app_kachel_anpassen(sender) { | 
 |  |  |   var kachel = $( "div[sid='" + sender.id + "']" ); | 
 |  |  |   $(kachel).find(".sender-name").text(sender.name); | 
 |  |  |   $(kachel).attr("data-verweis", sender.url); | 
 |  |  |   $(kachel).find("img").attr("src", sender.logo); | 
 |  |  |   kachel.find(".sender-name").text(sender.name); | 
 |  |  |   kachel.attr("data-verweis", sender.url); | 
 |  |  |   kachel.find("img").attr("src", sender.logo); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_kachel_neu(sender) { | 
 |  |  |   var html = Mustache.render(templateCache[TPL_SENDER_KACHEL], sender); | 
 |  |  |   $("#sender").append(html); | 
 |  |  |   var kachel = $( "div[sid='" + sender.id + "']" ); | 
 |  |  |   $(kachel).on('click', app_kachel_klick); | 
 |  |  |   kachel.on('click', app_kachel_klick); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_kachel_klick() { | 
 |  |  |   var kachel = $( this ); | 
 |  |  |   var senderId = $(kachel).attr("sid"); | 
 |  |  |   var senderName = $(kachel).find(".sender-name").text(); | 
 |  |  |   var senderUrl = $(kachel).attr("data-verweis"); | 
 |  |  |   var senderLogo = $(kachel).find("img").attr("src"); | 
 |  |  |   var senderId = kachel.attr("sid"); | 
 |  |  |   var senderName = kachel.find(".sender-name").text(); | 
 |  |  |   var senderUrl = kachel.attr("data-verweis"); | 
 |  |  |   var senderLogo = kachel.find("img").attr("src"); | 
 |  |  |   var s = new Sender(senderId, senderName, senderUrl, senderLogo); | 
 |  |  |   switch (senderKlickModus) { | 
 |  |  |       case "1": | 
 |  |  |         app_abspielen(s, app_get_abspiel_ziel()); | 
 |  |  |         break; | 
 |  |  |       case "2": | 
 |  |  |         $(".dlg-behaelter").html( | 
 |  |  | 
 |  |  |         ); | 
 |  |  |         break; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /* --- Menüfunktionen --- */ | 
 |  |  | 
 |  |  | /* --- Dialogfunktionen --- */ | 
 |  |  |  | 
 |  |  | function app_dialog_zeigen(vorlage, inhalt) { | 
 |  |  |   $(".dialog").html(Mustache.render(vorlage, inhalt)); | 
 |  |  |   var dlg = $(".dialog"); | 
 |  |  |   dlg.html(Mustache.render(vorlage, inhalt)); | 
 |  |  |   $(".close-btn").on('click', function() { | 
 |  |  |     app_dialog_schliessen(); | 
 |  |  |   }); | 
 |  |  |   $('.dialog').slideDown(300); | 
 |  |  |   dlg.slideDown(300); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_sender_dialog_lesen(senderId) { | 
 |  |  | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_dialog_schliessen() { | 
 |  |  |   senderKlickModus = "0"; | 
 |  |  |   senderKlickModus = "1"; | 
 |  |  |   $('.close-btn').off('click'); | 
 |  |  |   $('.dialog').slideUp(300); | 
 |  |  | } | 
 |  |  | 
 |  |  |   timeout - die Anzahl Millisekunden, die eine Meldung zu sehen sein soll | 
 |  |  | */ | 
 |  |  | function app_meldung_mit_timeout(meldung, timeout) { | 
 |  |  |   $('.sued').text(meldung); | 
 |  |  |   var s = $('.sued'); | 
 |  |  |   s.text(meldung); | 
 |  |  |   setTimeout(function() { | 
 |  |  |     $('.sued').text('Bereit.'); | 
 |  |  |     s.text('Bereit.'); | 
 |  |  |   }, timeout); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | 
 |  |  |   }).done(function( abspielerliste ) { | 
 |  |  |     $(".abspieler-behaelter").html( | 
 |  |  |       Mustache.render(templateCache[TPL_ABSPIELER], abspielerliste)); | 
 |  |  |     $("#abspielen-stoppen").on('click', app_abspielen_stoppen); | 
 |  |  |   }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | 
 |  |  |   } else { | 
 |  |  |     app_dialog_zeigen(vorlage, ''); | 
 |  |  |   } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function app_radio_kommando_senden(kommando) { | 
 |  |  |   $.ajax({ | 
 |  |  |     url: kommando, | 
 |  |  |     type: "GET", | 
 |  |  |     dataType : "text", | 
 |  |  |     crossDomain: true | 
 |  |  |   }).done(function( antwort ) { | 
 |  |  |     /* | 
 |  |  |       der folgende Schritt wird nicht erreicht, weil beim Aufruf | 
 |  |  |       aus dem Browser heraus keine Adresse aufgerufen werden darf, | 
 |  |  |       die nicht von der Domain kommt, von der aus das radio-ui | 
 |  |  |       ausgeliefert wird. | 
 |  |  |  | 
 |  |  |       Kommt das radio-ui z.B. von der Domain uhilger.de, wird ein Aufruf | 
 |  |  |       zur Domain raspi-az blockiert. | 
 |  |  |  | 
 |  |  |       Das laesst sich vermeiden, wenn der Server den Aufruf zum Raspi | 
 |  |  |       uebernimmt. | 
 |  |  |  | 
 |  |  |       Interessanterweise kommt der Aufruf zum Raspi durch und löst auch | 
 |  |  |       das Abspielen des Radiosenders aus. Nur die Antwort vom Raspi wird | 
 |  |  |       blockiert und hier nicht ausgegeben. | 
 |  |  |     */ | 
 |  |  |     app_meldung_mit_timeout(antwort, 2000); | 
 |  |  |   }).fail(function(xhr, status, errorThrown ) { | 
 |  |  |     app_meldung_mit_timeout(errorThrown + " " + status, 2000); | 
 |  |  |   }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /* | 
 |  |  | 
 |  |  |   this.url = u; | 
 |  |  |   this.logo = l; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function Abspieler(i, n, u, t, b, z) { | 
 |  |  |   this.id = i; | 
 |  |  |   this.name = n; | 
 |  |  |   this.url = u; | 
 |  |  |   this.typ = t; | 
 |  |  |   this.bild = b; | 
 |  |  |   this.zustand = z; | 
 |  |  | } |