function distinctlyInput(input) { // Wenn das aktuell gewählte Feld gefüllt wird if ($('#distinctlyInput' + input).val().length >= 1) { input++; // Fahre fort mit dem nächsten Feld if ($('#distinctlyInput' + input).length) { $('#distinctlyInput' + input).focus().select(); // Fokus auf das nächste Feld setzen } } // Wenn das aktuell gewählte Feld geleert wird else if ($('#distinctlyInput' + input).val().length === 0 && input > 1) { input--; // Gehe zum vorherigen Feld $('#distinctlyInput' + input).focus().select(); // Fokus auf das vorherige Feld setzen } } function pageload(view, meta) { // Funktion zum Laden des Inhalts secondaryNavigation("close"); // Schließe das Stecker-Menü page = window.location.hash.substr(1); // Hole die aufzurufende Seite über den URL-Hash (#xy) if(page.length === 0) { page = "index"; } var loadingTimer = setTimeout(function() { $("#content").addClass("loading"); message("Die Seite befindet sich im Aufbau..."); }, 2000); // 2 Sekunden warten $.ajax({ url: "/pagecontent/" + page + ".php?view=" + view + "&meta=" + meta, // Pfad der zu ladenden Seite aufbauen error: function(jqXHR, textStatus, errorThrown) { // Wenn ein Fehler bei der Anfrage auftritt (z.B. Netzwerkprobleme) message("Es ist ein unerwarteter Fehler aufgetreten. Der Seiteninhalt konnte nicht geladen werden!"); }, success: function(result){ // Abfrage erfolgreich clearTimeout(loadingTimer); $("#content").removeClass("loading"); $("#content").html(result); $("div.navigation>div").removeClass("active"); // Alle Buttons inaktiv $("#" + page).addClass("active"); // Button mit Klasse "page" wird aktiv geschaltet (im Menü) }}); } function checkForReload(page) { page_hash = window.location.hash.substr(1); if(page_hash == page) { pageload(); } } function checkConnection(last) { // Verbindunsstatus überwachen // Last ist der letzte gemessene Netzwerkzustand $.ajax({ url: "/actions/connection-test.php?a=" + Date.now(), // verändere idr URL leicht, damit der Server nicht cached timeout: 5000, // maximale Wartezeit sind 5 Sekunden; alles darüber wird als zu unzuverlässig angesehen error: function(jqXHR, textStatus, errorThrown) { // Wenn ein Fehler bei der Anfrage auftritt (z.B. Netzwerkprobleme) $(".navigation-footer").html('
Keine Verbindung'); console.error("Fehler bei der Anfrage:", textStatus, errorThrown); if (last != 1) { // letzter Zustand war "online" // Vermeiden von ständigen Nachrichten message("Keine Verbindung"); // Werfe eine Nachricht } setTimeout(function() { // nächste Prüfung in 5 Sekunden checkConnection(1); // der Status offline wird mit übertragen }, 5000); }, success: function(data) { // Verbindung iO setTimeout(function() { // nächste Prüfung in 5 Sekunden checkConnection(); }, 5000); if (data == 'true') { // der Rückgabewert ist true, alles IO $(".navigation-footer").html('
Verbunden'); if (last == 1) { // war der letzte Status noch "offline", wird der Nutzer benachrichtigt message("Verbindung wiederhergestellt!"); } } else { // außergewöhnlicher Fehler, aber möglich message("Keine Verbindung"); // Verbindung dennoch unbrauchbar, wenn keine Daten geladen werden $(".navigation-footer").html('
Keine Verbindung'); } } }); } var pinRowNumber = 0; function connectPins(startPoint, endPoint, origin) { const encoded = $('#bridge-editor-img').attr("meta"); const decoded = decodeURIComponent(encoded); let myArray = JSON.parse(decoded); console.log(myArray); length = myArray.length; lengthNext = length + 1; lengthPrev = length -1 ; myArray[length] = []; myArray[length][0] = startPoint; myArray[length][1] = endPoint; $(".pin-table").append('
' + startPoint + '' + endPoint + '
'); var myJsonStringURL = encodeURI(JSON.stringify(myArray)); $('#bridge-editor-img').attr("meta", myJsonStringURL); $('#bridge-editor-img').attr("style", "background-image: url('../stecker.php?data=" + myJsonStringURL + "')"); $('#bridge-editor-edit').attr("value", pinRowNumber); } function removePin(row) { const encoded = $('#bridge-editor-img').attr("meta"); const decoded = decodeURIComponent(encoded); let myArray = JSON.parse(decoded); myArray[row] = []; myArray[row][0] = ""; myArray[row][1] = ""; $("#pinRow_" + row).hide(); var myJsonStringURL = encodeURI(JSON.stringify(myArray)); $('#bridge-editor-img').attr("meta", myJsonStringURL); $('#bridge-editor-img').attr("style", "background-image: url('../stecker.php?data=" + myJsonStringURL + "')"); $('#bridge-editor-edit').attr("value", pinRowNumber); } function programBridge(number) { // Checkboxen für die Auswahl der Brücken im Programm-Editor let myArray = []; // initialisiere Array index = 0; for (i = 0; i <= number; i++) { // iteriere durch alle Checkboxen if ($('#programSelect_' + i).is(":checked")) { // wenn gesetzt myArray[index] = $('#programSelect_' + i).val(); // Hänge die Brücken-ID dem Programm an index++; } } var myJsonString = JSON.stringify(myArray); // kreiere URL $('#program-editor-img').attr("src", "stecker.php?translate=true&data=" + myJsonString); // aktualisiere das Bild console.log("OK"); } function excludeBridge(number) { // Checkboxen für die Auswahl der Brücken im Programm-Editor let myArray = []; // initialisiere Array let myArraySubtrahend = []; // initialisiere Array index = 0; indexSubtrahend = 0; for (i = 0; i < number; i++) { // iteriere durch alle Checkboxen if ($('#programSelect_' + i).is(":checked")) { // wenn gesetzt myArray[index] = JSON.parse($('#programSelect_' + i).val()); index++; } else { myArraySubtrahend[indexSubtrahend] = JSON.parse($('#programSelect_' + i).val()); indexSubtrahend++; } } var myJsonString = JSON.stringify(myArray); // kreiere URL var myJsonStringSubtrahend = JSON.stringify(myArraySubtrahend); // kreiere URL $('#result-editor-result').attr("src", "stecker.php?data=" + myJsonString); // aktualisiere das Bild $('#database-bridges-hidden').attr("value", encodeURI(myJsonStringSubtrahend)); console.log("OK"); } function search(page,special) { // Datenbanksuche value = $('#database-search-term').val(); // Suchbegriff, wenn die Datenbank durchsucht wird if(page == 'results') { if (special == "x") { // die Vorschläge werden ignoriert value = ""; // Lösche Eingabe virtuell } } $.get("/pagecontent/database-search.php", { meta: value, // Suchbegriff view: page // je nachdem, von wo aus die Suche ausgelöst wurde }, function(data, status) { if (status == "success") { if(page == 'results') { // je nachdem, von wo aus die Suche ausgelöst wurde, anderen Container verändern $("div.search-container div.results").html(data); } if(page == 'program') { $("div.inventory-table").html(data); } } }); } function save(page, action, meta) { // prinzipiell gleiche Funktion wie getcontent, jedoch mit Abfragen von JS-Werten suppress_page_reload = 0; if (page == "bridge-editor") { if (action == "edit" || action == "add") { number_entry = $('#bridge-editor-edit').val(); // von PHP fixierter Wert (Anzahl der zu Beginn vorhandenen Felder) let myArray = {}; // Initialisiere myArray als Objekt const encoded = $('#bridge-editor-img').attr("meta"); const decoded = decodeURIComponent(encoded); myArray["pins"] = JSON.parse(decoded); if (action == "add") { // wird die Brücke neu angelegt, muss ein Name gewählt werden myArray["name"] = prompt("Bitte noch einen Namen festlegen (nur Zahlen):"); } var myJsonString = JSON.stringify(myArray); // verpacke alle Pin-Brücken als JSON meta = myJsonString; } } if (page == "program-editor") { if (action == "edit" || action == "add") { let myArray = {}; // Initialisiere als leeres, multidimensionales, indexiertes Array myArray["bridges"] = []; // Initialisiere als leeres Array index = 0; for (i = 0; i <= meta; i++) { if ($('#programSelect_' + i).is(":checked")) { myArray["bridges"][index] = $('#programSelect_' + i).val(); index++; } } if (action == "add") { myArray["programID"] = []; for (i = 0; i <= 4; i++) { j = i + 1; myArray["programID"][i] = $('#distinctlyInput' + j).val().toUpperCase(); } } myArray["programDescription"] = $('#program-description').val(); console.log(myArray); var myJsonString = JSON.stringify(myArray); console.log(myJsonString); // Zeigt die JSON-Ausgabe in der Konsole an meta = myJsonString; } } if (page == "inventory" && action == "add") { let myArray = {}; myArray["name"] = $('#database-search-term').val(); myArray["bridges-hidden"] = $('#database-bridges-hidden').val(); myArray["special"] = $('#database-special').val(); myArray["programCache"] = []; for (i = 0; i <= 4; i++) { j = i + 1; myArray["programCache"][i] = $('#distinctlyInput' + j).val().toUpperCase(); } console.log(myArray); var myJsonString = JSON.stringify(myArray); console.log(myJsonString); // Zeigt die JSON-Ausgabe in der Konsole an meta = myJsonString; suppress_page_reload = 1; } console.log("/actions/" + page + ".php?action=" + action + "&meta=" + meta); $.get("/actions/" + page + ".php", { action: action, meta: meta }, function(data, status) { if (status == "success") { data = JSON.parse(data); if (data[0] == true) { if (suppress_page_reload != 1) { window.location.href = "#" + page; pageload(); } message(data[1]); } else { message(data[1]); } } }); } function secondaryNavigation(animation, content) { if (animation == "open") { $.get("/pagecontent/plug-select.php", { }, function(data, status) { if (status == "success") { if (data != 'false') { $("#navigation-secondary").css("left", "250px"); $(".navigation-header").attr("onclick", "secondaryNavigation('close','plug-select')"); setTimeout(function() { $("#navigation-secondary").html(data); console.log(data); }, 200); } else { window.location.href = "#"; alert("Die Inhalte konnten nicht abgerufen werden. Vergewissern Sie sich, dass Sie mit dem WLAN-Netzwerk verbunden sind und laden Sie bei Bedarf die Seite neu."); } } }); } else { $("#navigation-secondary").css("left", "-250px"); $(".navigation-header").attr("onclick", "secondaryNavigation('open','plug-select')"); } } function changeSettings(type, value, meta) { $.get("/actions/save-settings.php", { type: type, value: value, meta: meta }, function(data, status) { if (status == "success") { if (data == 'true') { applySettings(type); pageload(); } else { window.location.href = '#index'; pageload(); alert("Die Inhalte konnten nicht abgerufen werden. Vergewissern Sie sich, dass Sie mit dem WLAN-Netzwerk verbunden sind und laden Sie bei Bedarf die Seite neu."); } } }); } function applySettings(type) { secondaryNavigation('close'); $.get("/actions/apply-settings.php", { type: type }, function(data, status) { if (status == "success") { if (data != 'false') { if (type == "plug") { $(".navigation-header>div").html(data); } } else { window.location.href = "#"; alert("Die Inhalte konnten nicht abgerufen werden. Vergewissern Sie sich, dass Sie mit dem WLAN-Netzwerk verbunden sind und laden Sie bei Bedarf die Seite neu."); } } }); } function message(content) { $("#message-box").html(content); $("#message-box").css("display", "block"); setTimeout(function() { $("#message-box").css("transform", "translateY(0)"); }, 50); setTimeout(function() { setTimeout(function() { $("#message-box").css("display", "none"); }, 500); $("#message-box").css("transform", "translateY(calc(100% + 5px))"); }, 3000); } $(window).bind('beforeunload', function() { $("#warning").css("display", "block"); return 'Are you sure you want to leave?'; });