Initial commit
This commit is contained in:
5
alt/actions/connection-test.php
Normal file
5
alt/actions/connection-test.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
print("true");
|
||||
|
||||
?>
|
||||
32
alt/index.php
Normal file
32
alt/index.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="/vendor/jquery.min.js"></script>
|
||||
<script src="script.js"></script>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body onload="pageload(), checkConnection(), applySettings('plug')" onhashchange="pageload()">
|
||||
<div class="main">
|
||||
<div class="navigation">
|
||||
<div class="navigation-header" onclick="secondaryNavigation('open','plug-select')">
|
||||
Steckerauswahl
|
||||
<div>Wird geladen...</div>
|
||||
</div>
|
||||
<div id="index" id="start" onclick="window.location.href='#index'; pageload();"><img src="/vendor/icons/electric-plug-icon.svg" />Federleiste prüfen</div>
|
||||
<div id="cable-check" onclick="window.location.href='#cable-check'; pageload();"><img src="/vendor/icons/fiber-cable-icon.svg" />Spurkabel prüfen</div>
|
||||
<div id="index" class="navigation-footer">
|
||||
<div class="connection-indicator unknown"></div>Verbinde...<br>
|
||||
<img class="infrago-logo" src="/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg" width="100%" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="navigation secondary" id="navigation-secondary">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div id="message-box" style="display: none;position: absolute; bottom: 10px; left: 260px; right: 10px; background-color:grey;height:auto;padding:20px;box-sizing:border-box;transform: translateY(calc(100% + 5px));transition-duration:.5s; border-radius: 10px;background-color: #d2d2d2;z-index: 502;"></div>
|
||||
<div class="content" id="content">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
24
alt/pagecontent/index.php
Normal file
24
alt/pagecontent/index.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
session_start();
|
||||
|
||||
header('Content-Type: text/plain');
|
||||
header('Cache-Control: no-cache');
|
||||
ob_implicit_flush(true);
|
||||
ob_end_flush();
|
||||
|
||||
$view = $_GET["view"];
|
||||
$meta = $_GET["meta"];
|
||||
|
||||
$_SESSION["meta"]=$meta;
|
||||
|
||||
|
||||
?>
|
||||
<div class="content-header">Federleiste prüfen</div>
|
||||
<hr />
|
||||
<p>Automatische Erkennung</p>
|
||||
<i>Verbinden Sie den zu messenden Stecker mit dem Gerät. Vermeiden Sie Bewegungen während der Messung.</i>
|
||||
|
||||
<div class="save-button" onclick="window.location.href='#start';$('.save-button').html('<img src=\'/vendor/icons/load.gif\' \>Initialisieren...'); "><img src="/vendor/icons/play.svg" \>Jetzt prüfen</div>
|
||||
|
||||
|
||||
339
alt/pagecontent/start.php
Normal file
339
alt/pagecontent/start.php
Normal file
@@ -0,0 +1,339 @@
|
||||
<?php
|
||||
|
||||
|
||||
session_start();
|
||||
|
||||
|
||||
header('Content-Type: text/plain');
|
||||
header('Cache-Control: no-cache');
|
||||
ob_implicit_flush(true);
|
||||
ob_end_flush();
|
||||
|
||||
|
||||
|
||||
$translationMap = [
|
||||
"A" => "30",
|
||||
"B" => "20",
|
||||
"C" => "10",
|
||||
"D" => "39",
|
||||
"E" => "29",
|
||||
"F" => "19",
|
||||
"G" => "38",
|
||||
"H" => "28",
|
||||
"I" => "18",
|
||||
"J" => "37",
|
||||
"K" => "27",
|
||||
"L" => "17",
|
||||
"M" => "36",
|
||||
"N" => "26",
|
||||
"O" => "16",
|
||||
"P" => "35",
|
||||
"Q" => "25",
|
||||
"R" => "15",
|
||||
"S" => "34",
|
||||
"T" => "24",
|
||||
"U" => "14",
|
||||
"V" => "33",
|
||||
"W" => "23",
|
||||
"X" => "13",
|
||||
"Y" => "32",
|
||||
"Z" => "22",
|
||||
"AA" => "12",
|
||||
"AB" => "31",
|
||||
"AC" => "21",
|
||||
"AD" => "11"
|
||||
];
|
||||
|
||||
function translateArray($inputArray, $translationMap) {
|
||||
return array_map(function($subArray) use ($translationMap) {
|
||||
return array_map(function($item) use ($translationMap) {
|
||||
return $translationMap[$item] ?? $item; // Falls kein Mapping existiert, bleibt das Original erhalten
|
||||
}, $subArray);
|
||||
}, $inputArray);
|
||||
}
|
||||
|
||||
|
||||
|
||||
flush();
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<style>
|
||||
|
||||
div.check-loading-screen {
|
||||
width: 250px;
|
||||
height: auto;
|
||||
background-color: #ebebeb;
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
padding: 5px;
|
||||
border-radius: 25px;
|
||||
}
|
||||
div.check-loading-screen div {
|
||||
|
||||
padding: 5px;
|
||||
margin: 10px;
|
||||
line-height: 30px;
|
||||
transition-duration: .4s;
|
||||
cursor: pointer;
|
||||
border-radius: 10px;
|
||||
|
||||
}
|
||||
div.check-loading-screen div img {
|
||||
width: 30px;
|
||||
margin-right: 20px;
|
||||
vertical-align: middle;
|
||||
filter: contrast(0.3);
|
||||
line-height: 30px;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="check-loading-screen" id="_1">
|
||||
<div>
|
||||
<img src="/vendor/icons/load.gif">Initialisieren
|
||||
</div>
|
||||
<div>
|
||||
<img src="/vendor/icons/clock-rotate-right.svg">Prüfung 1/2
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<img src="/vendor/icons/clock-rotate-right.svg">Prüfung 2/2
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
flush();
|
||||
|
||||
|
||||
|
||||
|
||||
// To Run the Python program
|
||||
$command = escapeshellcmd('python3 /var/www/html/alt/python/plug-check.py');
|
||||
|
||||
// Use shell_exec to execute the command and capture the output
|
||||
$output0 = shell_exec($command);
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<style>
|
||||
#_1 {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="check-loading-screen" id="_2">
|
||||
<div>
|
||||
<img src="/vendor/icons/check.svg">Initialisieren
|
||||
</div>
|
||||
<div>
|
||||
<img src="/vendor/icons/load.gif">Prüfung 1/2
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<img src="/vendor/icons/clock-rotate-right.svg">Prüfung 2/2
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
$command = escapeshellcmd('python3 /var/www/html/alt/python/plug-check.py');
|
||||
|
||||
|
||||
// Use shell_exec to execute the command and capture the output
|
||||
$bridges1 = shell_exec($command);
|
||||
|
||||
|
||||
$number_bridges1 = count(json_decode($bridges1, true));
|
||||
|
||||
?>
|
||||
<style>
|
||||
#_2 {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="check-loading-screen" id="_3">
|
||||
<div>
|
||||
<img src="/vendor/icons/check.svg">Initialisieren
|
||||
</div>
|
||||
<div>
|
||||
<img src="/vendor/icons/check.svg">Prüfung 1/2 (<?php echo $number_bridges1; ?>x)
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<img src="/vendor/icons/load.gif">Prüfung 2/2
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
$command = escapeshellcmd('python3 /var/www/html/alt/python/plug-check.py');
|
||||
|
||||
// Use shell_exec to execute the command and capture the output
|
||||
$bridges2 = shell_exec($command);
|
||||
|
||||
?>
|
||||
<style>
|
||||
#_3 {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
$bridges1 = $bridges2;
|
||||
|
||||
if($bridges1 == $bridges2) {
|
||||
|
||||
|
||||
$output = translateArray(json_decode($bridges1, true), $translationMap);
|
||||
|
||||
|
||||
if($output == "error") {
|
||||
die("Fehler");
|
||||
}
|
||||
|
||||
//$output = [ ["16", "30"], ["30", "16"]];
|
||||
|
||||
$array = $output;
|
||||
|
||||
|
||||
$doubles = []; // Array zur Verfolgung von Doppelungen
|
||||
$errors = []; // Array für fehlende Doppelungen
|
||||
|
||||
// Schritt 1: Prüfung auf Doppelungen
|
||||
foreach ($array as $pair) {
|
||||
|
||||
// Sortiere die Paare, um `[23,14]` und `[14,23]` gleich zu behandeln
|
||||
sort($pair);
|
||||
$key = implode("-", $pair);
|
||||
|
||||
if (isset($doubles[$key])) {
|
||||
$doubles[$key]++; // Verbindung erneut gefunden
|
||||
} else {
|
||||
$doubles[$key] = 1; // Erstmaliges Auftreten
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Schritt 2: Bereinigung der doppelten Einträge
|
||||
$unique = []; // Array für eindeutige Verbindungen
|
||||
$seen = []; // Array zur Verfolgung bereits bearbeiteter Verbindungen
|
||||
|
||||
foreach ($array as $pair) {
|
||||
// Sortiere das Paar
|
||||
sort($pair);
|
||||
$key = implode("-", $pair);
|
||||
|
||||
// Füge nur ein Exemplar hinzu
|
||||
if (!isset($seen[$key])) {
|
||||
$unique[] = $pair;
|
||||
$seen[$key] = true; // Markiere als verarbeitet
|
||||
}
|
||||
}
|
||||
|
||||
$cleaned_output = json_encode($unique);
|
||||
|
||||
|
||||
$url = '../stecker.php?data=' . urlencode($cleaned_output); // Kodiert es für die URL
|
||||
|
||||
?>
|
||||
|
||||
<div class="content-header">Ergebnis</div>
|
||||
<hr />
|
||||
<div class="toggle-switch">
|
||||
<div align="right"><p>Gesamtergebnis</p></div>
|
||||
<div><label class="switch"><input type="checkbox" onchange='$("#op-1").toggle(this.unchecked);$("#op-2").toggle(this.checked);'><span class="slider"></span></label></div>
|
||||
<div align="left"><p>Einzelbrücken</p></div>
|
||||
</div>
|
||||
<div id="op-1">
|
||||
<img src="<?php echo $url; ?>" />
|
||||
</div>
|
||||
<div id="op-2" style="display: none;">
|
||||
<?php
|
||||
|
||||
foreach($unique as $unique_element) {
|
||||
$cleaned_output = "[" . json_encode($unique_element) . "]";
|
||||
$url = 'stecker.php?data=' . urlencode($cleaned_output); // Kodiert es für die URL
|
||||
?>
|
||||
<img style="margin-bottom: 5px;" src="<?php echo $url; ?>" />
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<?php
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
$output = "error";
|
||||
|
||||
/*
|
||||
$url1 = 'stecker.php?data=' . urlencode(translateArray($bridges1, $translationMap)); // Kodiert es für die URL
|
||||
$url2 = 'stecker.php?data=' . urlencode(translateArray($bridges2, $translationMap)); // Kodiert es für die URL
|
||||
*/
|
||||
|
||||
?>
|
||||
<style>
|
||||
#_3 {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="check-loading-screen" id="_4">
|
||||
<div>
|
||||
<img src="/vendor/icons/check.svg">Initialisieren
|
||||
</div>
|
||||
<div>
|
||||
<img src="/vendor/icons/xmark.svg">Prüfung 1/2
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<img src="/vendor/icons/xmark.svg">Prüfung 2/2
|
||||
</div>
|
||||
</div>
|
||||
<p>Es gab einen Fehler bei der Messung!</br>Messung 1 und Messung 2 lieferten keine übereinstimmenden Ergebnisse.<br>Bitte prüfen Sie, ob alle Steckverbindungen fest sitzen und vermeiden Sie Bewegungen, welche die Messung beeinträchtigen können.</br>Stellen Sie sicher, dass keine der Verbindungen gegen Erde kurzgeschlossen ist, da dies die Messung beeinträchtigt.<br>Erwägen Sie, eine erneute Messung zurchzuführen.</p>
|
||||
<br>
|
||||
<p>Ergebnis Messung 1:</p>
|
||||
<i><?php echo $bridges1; ?><i>
|
||||
<img src="<?php echo $url1; ?>" />
|
||||
<p>Ergebnis Messung 2:</p>
|
||||
<i><?php echo $bridges2; ?><i>
|
||||
<img src="<?php echo $url2; ?>" />
|
||||
<div class="save-button" onclick="window.location.href='#index'; pageload();$('.save-button').html('<img src=\'load.gif\' \>Bitte warten...');"><img src="/vendor/icons/nav-arrow-left.svg" \>Zurück</div>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
||||
144
alt/python/plug-check.py
Normal file
144
alt/python/plug-check.py
Normal file
@@ -0,0 +1,144 @@
|
||||
import smbus
|
||||
import time
|
||||
import json
|
||||
|
||||
# Adressen der beiden MCP23017 Chips
|
||||
AusgangRechts = 0x20 # Ausgang rechte Hälfte
|
||||
AusgangLinks = 0x21 # Ausgang linke Hälfte
|
||||
EingangRechts = 0x24 # Eingang rechte Hälfte
|
||||
EingangLinks = 0x23 # Eingang linke Hälfte
|
||||
|
||||
# Register-Adressen für den MCP23017
|
||||
IODIRA = 0x00 # Eingang / Ausgang A
|
||||
IODIRB = 0x01 # Eingang / Ausgang B
|
||||
GPIOA = 0x12 # GPIO A
|
||||
GPIOB = 0x13 # GPIO B
|
||||
|
||||
# Initialisiere den I2C Bus
|
||||
bus = smbus.SMBus(1)
|
||||
|
||||
RechtsA_ausgang = ["Z", "AA", "W", "AB", "AC", "AD", "AE", "AF"]
|
||||
RechtsB_ausgang = ["Q", "U", "V", "T", "S", "R", "Y", "X"]
|
||||
|
||||
RechtsA_eingang = ["R", "T", "V", "X", "Z", "AB", "AD", "AE"]
|
||||
RechtsB_eingang = ["Q", "S", "W", "U", "AA", "Y", "AC", "AF"]
|
||||
|
||||
LinksA_ausgang = ["C", "D", "E", "J", "F", "G", "H", "I"]
|
||||
LinksB_ausgang = ["A", "B", "P", "O", "K", "L", "M", "N"]
|
||||
|
||||
LinksA_eingang = ["B", "D", "F", "H", "J", "K", "M", "I"]
|
||||
LinksB_eingang = ["A", "C", "E", "G", "L", "N", "O", "P"]
|
||||
|
||||
|
||||
array = []
|
||||
|
||||
def default():
|
||||
adressen = [AusgangRechts, AusgangLinks, EingangRechts, EingangLinks]
|
||||
|
||||
# Schleife für alle Registeradressen (0x00 bis 0x15)
|
||||
for register in range(0x00, 0x16):
|
||||
for adresse in adressen:
|
||||
bus.write_byte_data(adresse, register, 0x00)
|
||||
|
||||
# Konfiguriere alle Pins auf Chip 1 als Ausgang (A und B)
|
||||
def configure_chip1_as_output():
|
||||
bus.write_byte_data(AusgangRechts, IODIRA, 0x00) # Setze alle Pins von A als Ausgang
|
||||
bus.write_byte_data(AusgangRechts, IODIRB, 0x00) # Setze alle Pins von B als Ausgang
|
||||
|
||||
bus.write_byte_data(AusgangLinks, IODIRA, 0x00) # Setze alle Pins von A als Ausgang
|
||||
bus.write_byte_data(AusgangLinks, IODIRB, 0x00) # Setze alle Pins von B als Ausgang
|
||||
|
||||
# Konfiguriere alle Pins auf Chip 2 als Eingang (A und B)
|
||||
def configure_chip2_as_input():
|
||||
bus.write_byte_data(EingangRechts, IODIRA, 0xFF) # Setze alle Pins von A als Eingang
|
||||
bus.write_byte_data(EingangRechts, IODIRB, 0xFF) # Setze alle Pins von B als Eingang
|
||||
|
||||
bus.write_byte_data(EingangLinks, IODIRA, 0xFF) # Setze alle Pins von A als Eingang
|
||||
bus.write_byte_data(EingangLinks, IODIRB, 0xFF) # Setze alle Pins von B als Eingang
|
||||
|
||||
|
||||
# Hauptprogramm
|
||||
def main():
|
||||
default()
|
||||
time.sleep(0.5)
|
||||
configure_chip1_as_output()
|
||||
configure_chip2_as_input()
|
||||
|
||||
# Teste alle Pins auf Chip 1 (A0-A7, B0-B7)
|
||||
for pin in range(32): # 0 bis 31
|
||||
#print(f"Setze Pin {pin} auf HIGH auf Chip 1")
|
||||
|
||||
|
||||
bus.write_byte_data(AusgangRechts, GPIOA, 0x00)
|
||||
bus.write_byte_data(AusgangRechts, GPIOB, 0x00)
|
||||
|
||||
bus.write_byte_data(AusgangLinks, GPIOA, 0x00)
|
||||
bus.write_byte_data(AusgangLinks, GPIOB, 0x00)
|
||||
|
||||
|
||||
if pin < 16:
|
||||
# Setze den gewählten Pin auf HIGH
|
||||
if pin < 8: # Pins A0-A7
|
||||
bus.write_byte_data(AusgangRechts, GPIOA, 1 << pin)
|
||||
aktuellAn = RechtsA_ausgang[pin]
|
||||
else: # Pins B0-B7
|
||||
bus.write_byte_data(AusgangRechts, GPIOB, 1 << (pin - 8))
|
||||
aktuellAn = RechtsB_ausgang[pin - 8]
|
||||
else:
|
||||
# Setze den gewählten Pin auf HIGH
|
||||
if pin < 24: # Pins A0-A7
|
||||
bus.write_byte_data(AusgangLinks, GPIOA, 1 << pin - 16)
|
||||
aktuellAn = LinksA_ausgang[pin - 16]
|
||||
else: # Pins B0-B7
|
||||
bus.write_byte_data(AusgangLinks, GPIOB, 1 << (pin - 24))
|
||||
aktuellAn = LinksB_ausgang[pin - 24]
|
||||
|
||||
#print("====================" + aktuellAn + "==========================")
|
||||
|
||||
time.sleep(0.02) # Kurze Pause, damit die Änderung sichtbar wird
|
||||
|
||||
Wert_Rechts_A = bus.read_byte_data(EingangRechts, GPIOA)
|
||||
Wert_Links_A = bus.read_byte_data(EingangLinks, GPIOA)
|
||||
|
||||
Wert_Rechts_B = bus.read_byte_data(EingangRechts, GPIOB)
|
||||
Wert_Links_B = bus.read_byte_data(EingangLinks, GPIOB)
|
||||
|
||||
|
||||
|
||||
for j in range(8): # Lese 4*8=32 Pins
|
||||
bitmaske = 1 << j # Erstelle eine Maske: 1, 2, 4, 8, 16, ...
|
||||
|
||||
Bit_Rechts_A = bool(Wert_Rechts_A & bitmaske) # Isoliere das entsprechende Bit
|
||||
Bit_Links_A = bool(Wert_Links_A & bitmaske) # Isoliere das entsprechende Bit
|
||||
Bit_Rechts_B = bool(Wert_Rechts_B & bitmaske) # Isoliere das entsprechende Bit
|
||||
Bit_Links_B = bool(Wert_Links_B & bitmaske) # Isoliere das entsprechende Bit
|
||||
|
||||
if Bit_Rechts_A == True:
|
||||
if aktuellAn != RechtsA_eingang[j]:
|
||||
array.append([aktuellAn ,RechtsA_eingang[j]])
|
||||
#print("Gefunden: " + RechtsA_eingang[j])
|
||||
|
||||
if Bit_Links_A == True:
|
||||
if aktuellAn != LinksA_eingang[j]:
|
||||
array.append([aktuellAn ,LinksA_eingang[j]])
|
||||
#print("Gefunden: " + LinksA_eingang[j])
|
||||
|
||||
if Bit_Rechts_B == True:
|
||||
if aktuellAn != RechtsB_eingang[j]:
|
||||
array.append([aktuellAn ,RechtsB_eingang[j]])
|
||||
#print("Gefunden: " + RechtsB_eingang[j])
|
||||
|
||||
if Bit_Links_B == True:
|
||||
if aktuellAn != LinksB_eingang[j]:
|
||||
array.append([aktuellAn ,LinksB_eingang[j]])
|
||||
#print("Gefunden: " + LinksB_eingang[j])
|
||||
|
||||
|
||||
|
||||
|
||||
json_output = json.dumps(array)
|
||||
print(json_output)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
117
alt/script.js
Normal file
117
alt/script.js
Normal file
@@ -0,0 +1,117 @@
|
||||
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)
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: "pagecontent/" + page + ".php?view=" + view + "&meta=" + meta, // Pfad der zu ladenden Seite aufbauen
|
||||
success: function(result){ // Abfrage erfolgreich
|
||||
$("#content").html(result);
|
||||
$("div.navigation>div").removeClass("active"); // Alle Buttons inaktiv
|
||||
$("#" + page).addClass("active"); // Button mit Klasse "page" wird aktiv geschaltet (im Menü)
|
||||
}});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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('<div class="connection-indicator false"></div>Keine Verbindung<img class="infrago-logo" src="/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg" width="100%" />');
|
||||
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('<div class="connection-indicator true"></div>Verbunden<img class="infrago-logo" src="/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg" width="100%" />');
|
||||
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('<div class="connection-indicator false"></div>Keine Verbindung<img class="infrago-logo" src="/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg" width="100%" />');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
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 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?';
|
||||
|
||||
});
|
||||
120
alt/stecker.php
Normal file
120
alt/stecker.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
// Setze den Content-Type-Header für SVG
|
||||
header('Content-Type: image/svg+xml');
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>';
|
||||
?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" height="100">
|
||||
|
||||
<defs>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: LexendDecaBold;
|
||||
src: url(http://192.168.37.103/vendor/fonts/LexendDeca-Bold.ttf);
|
||||
}
|
||||
* {
|
||||
font-family: LexendDecaBold;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<text x="30" y="5" fill="black" text-anchor="middle" transform="translate(50,50) rotate(-90)">30</text>
|
||||
|
||||
<text x="-30" y="5" fill="black" text-anchor="middle" transform="translate(50,50) rotate(-90)">10</text>
|
||||
|
||||
<text x="30" y="405" fill="black" text-anchor="middle" transform="translate(50,50) rotate(-90)">31</text>
|
||||
|
||||
<text x="-30" y="405" fill="black" text-anchor="middle" transform="translate(50,50) rotate(-90)">11</text>
|
||||
|
||||
<path d="M500 0 L50 0" style="stroke:black;stroke-width:5; fill:none;" />
|
||||
<path d="M50 0 L0 25" style="stroke:black;stroke-width:3; fill:none;" />
|
||||
<path d="M0 25 L0 75" style="stroke:black;stroke-width:5; fill:none;" />
|
||||
<path d="M0 75 L50 100" style="stroke:black;stroke-width:3; fill:none;" />
|
||||
<path d="M50 100 L500 100" style="stroke:black;stroke-width:5; fill:none;" />
|
||||
<path d="M500 100 L500 0" style="stroke:black;stroke-width:5; fill:none;" />
|
||||
|
||||
<rect width="35" height="35" x="452" y="32" rx="5" ry="5" style="stroke:black;stroke-width:3;fill:none" />
|
||||
<circle r="8" cx="470" cy="50" fill="none" style="stroke:black;stroke-width:3;" />
|
||||
|
||||
<rect width="35" height="35" x="13" y="32" rx="5" ry="5" style="stroke:black;stroke-width:3;fill:none" />
|
||||
<circle r="8" cx="30" cy="50" fill="none" style="stroke:black;stroke-width:3;" />
|
||||
|
||||
|
||||
<rect width="380" height="80" x="60" y="10" rx="5" ry="5" style="stroke:black;stroke-width:3;fill:none" />
|
||||
|
||||
<?php
|
||||
$pin_coordinates = [
|
||||
10 => [70, 68],
|
||||
20 => [70, 44],
|
||||
30 => [70, 20],
|
||||
11 => [405, 68],
|
||||
12 => [370, 68],
|
||||
13 => [335, 68],
|
||||
14 => [300, 68],
|
||||
15 => [265, 68],
|
||||
16 => [230, 68],
|
||||
17 => [195, 68],
|
||||
18 => [160, 68],
|
||||
19 => [125, 68],
|
||||
21 => [405, 44],
|
||||
22 => [370, 44],
|
||||
23 => [335, 44],
|
||||
24 => [300, 44],
|
||||
25 => [265, 44],
|
||||
26 => [220, 44],
|
||||
27 => [185, 44],
|
||||
28 => [150, 44],
|
||||
29 => [115, 44],
|
||||
31 => [405, 20],
|
||||
32 => [370, 20],
|
||||
33 => [335, 20],
|
||||
34 => [300, 20],
|
||||
35 => [265, 20],
|
||||
36 => [230, 20],
|
||||
37 => [195, 20],
|
||||
38 => [160, 20],
|
||||
39 => [125, 20],
|
||||
];
|
||||
|
||||
foreach ($pin_coordinates as $coordinates) {
|
||||
echo '<rect width="25" height="10" x="' . $coordinates[0] . '" y="' . $coordinates[1] . '" rx="1" ry="1" style="stroke:black;stroke-width:3;fill:none" />';
|
||||
}
|
||||
|
||||
if (empty($_GET['data'])) {
|
||||
print "</svg>";
|
||||
die();
|
||||
}
|
||||
|
||||
$inputArray = json_decode($_GET['data'], true); // JSON in ein PHP-Array umwandeln
|
||||
|
||||
// Neues Array mit übersetzten Koordinaten
|
||||
$translatedArray = array_map(function ($pair) use ($pin_coordinates) {
|
||||
return [
|
||||
$pin_coordinates[$pair[0]], // Übersetze den ersten Wert
|
||||
$pin_coordinates[$pair[1]], // Übersetze den zweiten Wert
|
||||
];
|
||||
}, $inputArray);
|
||||
|
||||
$colors = ["#1a5fb4", "#26a269", "#e5a50a", "#c64600", "#a51d2d", "#613583", "#63452c", "#3d3846"];
|
||||
|
||||
// Schleife durch das übersetzte Array
|
||||
$colorNumber = 0;
|
||||
foreach ($translatedArray as $line) {
|
||||
$point1 = $line[0]; // Erster Punkt [x, y]
|
||||
$point2 = $line[1]; // Zweiter Punkt [x, y]
|
||||
|
||||
$point1x = $point1[0] + 10;
|
||||
$point1y = $point1[1] + 5;
|
||||
$point2x = $point2[0] + 10;
|
||||
$point2y = $point2[1] + 5;
|
||||
|
||||
// Ausgabe eines Pfades (Linie zwischen zwei Punkten)
|
||||
echo '<path d="M' . $point1x . " " . $point1y . " L" . $point2x . " " . $point2y . '" style="stroke:' . $colors[$colorNumber] . ';stroke-width:3; fill:none;" />';
|
||||
|
||||
$colorNumber++;
|
||||
if ($colorNumber > 7) {
|
||||
$colorNumber = 0;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</svg>
|
||||
241
alt/style.css
Normal file
241
alt/style.css
Normal file
@@ -0,0 +1,241 @@
|
||||
@font-face {
|
||||
font-family: LexendDecaBold;
|
||||
src: url(/vendor/fonts/LexendDeca-Bold.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: LexendDecaMedium;
|
||||
src: url(/vendor/fonts/LexendDeca-Medium.ttf);
|
||||
}
|
||||
body {
|
||||
height: 100%;
|
||||
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: LexendDecaBold;
|
||||
font-weight: light;
|
||||
color: #2e3436;
|
||||
}
|
||||
div.main {
|
||||
width: 100%;
|
||||
max-width: 900px;
|
||||
height: auto;
|
||||
border-radius: 15px;
|
||||
overflow: hidden;
|
||||
margin: 0 auto;
|
||||
border: 5px solid #c3c3c3;
|
||||
position: relative;
|
||||
}
|
||||
div.navigation {
|
||||
width: 250px;
|
||||
height: 600px;
|
||||
background-color: #ebebeb;
|
||||
float: left;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
z-index: 501;
|
||||
}
|
||||
div.navigation.secondary {
|
||||
position: absolute;
|
||||
left: -250px;
|
||||
top: 0;
|
||||
overflow-y: auto;
|
||||
z-index: 500;
|
||||
transition-duration: .6s;
|
||||
width: 500px;
|
||||
backdrop-filter: blur(10px);
|
||||
background-color: #ebebeb8c;
|
||||
|
||||
}
|
||||
div.navigation.secondary img {
|
||||
width: 100px !important;
|
||||
}
|
||||
div.navigation>div, div.save-button {
|
||||
padding: 5px;
|
||||
margin: 10px;
|
||||
line-height: 30px;
|
||||
transition-duration: .4s;
|
||||
cursor: pointer;
|
||||
border-radius: 10px;
|
||||
}
|
||||
div.navigation>div:hover,div.navigation>div.active,div.navigation-footer,div.navigation-header,div.save-button:hover {
|
||||
background-color: #d2d2d2;
|
||||
}
|
||||
div.navigation div.navigation-header {
|
||||
text-align: center;
|
||||
}
|
||||
div.navigation div.navigation-header>div {
|
||||
background-color: #fff;
|
||||
border-radius: 0 0 7px 7px;
|
||||
color: grey;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
div.navigation>div>img:not(.infrago-logo),div.content div.save-button>img {
|
||||
width: 30px;
|
||||
max-height: 30px;
|
||||
margin-right:20px;
|
||||
vertical-align:middle;
|
||||
filter: contrast(0.3);
|
||||
}
|
||||
div.navigation>div>img.infrago-logo {
|
||||
width: 100%;
|
||||
display:block;
|
||||
margin-top: 15px;
|
||||
}
|
||||
div.content {
|
||||
width: calc(100% - 250px);
|
||||
float: right;
|
||||
display: inline-block;
|
||||
padding: 15px 20px;
|
||||
height: 600px;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.content div.content-header {
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
padding: 0;
|
||||
margin-bottom: 20px;
|
||||
display: block;
|
||||
font-size: 2em;
|
||||
margin-block-start: 0.67em;
|
||||
margin-block-end: 0.67em;
|
||||
margin-inline-start: 0px;
|
||||
margin-inline-end: 0px;
|
||||
font-weight: bold;
|
||||
unicode-bidi: isolate;
|
||||
}
|
||||
|
||||
div.content img {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
div.navigation-footer {
|
||||
position: absolute;
|
||||
bottom:0;
|
||||
width: calc(100% - 40px);
|
||||
padding: 10px !important;
|
||||
cursor: auto !important;
|
||||
}
|
||||
div.connection-indicator {
|
||||
height: 15px;
|
||||
width: 15px;
|
||||
border-radius: 100%;
|
||||
float: left;
|
||||
vertical-align:middle;
|
||||
margin: 7.5px;
|
||||
}
|
||||
div.connection-indicator.true {
|
||||
background-color: #2ec27e;
|
||||
}
|
||||
div.connection-indicator.unknown {
|
||||
background-color: #f6d32d;
|
||||
}
|
||||
div.connection-indicator.false {
|
||||
background-color: #ed333b;
|
||||
}
|
||||
|
||||
|
||||
|
||||
div.save-button img {
|
||||
display: inline-block;
|
||||
}
|
||||
div.save-button {
|
||||
background-color: #ebebeb
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
/* Track */
|
||||
::-webkit-scrollbar-track {
|
||||
background: #ebebeb;
|
||||
}
|
||||
|
||||
/* Handle */
|
||||
::-webkit-scrollbar-thumb, ::-webkit-scrollbar-thumb:hover {
|
||||
background: #d2d2d2;
|
||||
}
|
||||
|
||||
|
||||
div.toggle-switch {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
}
|
||||
div.toggle-switch div {
|
||||
display: inline-block;
|
||||
}
|
||||
div.toggle-switch div:nth-child(1), div.toggle-switch div:nth-child(3) {
|
||||
width: 39%;
|
||||
}
|
||||
div.toggle-switch div:nth-child(2) {
|
||||
width: 20%;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
.switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
|
||||
}
|
||||
|
||||
.switch input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #ccc;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
/* Rounded sliders */
|
||||
.slider.round {
|
||||
border-radius: 34px;
|
||||
}
|
||||
|
||||
.slider.round:before {
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
table.simple-devider th,table.simple-devider td {
|
||||
padding: 15px;
|
||||
|
||||
}
|
||||
table.simple-devider * {
|
||||
margin: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
77
alt/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg
vendored
Normal file
77
alt/vendor/DB_InfraGo_logo_red_black_100px_rgb.svg
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="DB_InfraGO_logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 316.5 70"><desc>Das ist das Firmenlogo der gemeinwohlorientierten Infrastrukturgesellschaft DB InfraGO AG.</desc>
|
||||
<metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 9.1-c001 79.a8d4753, 2023/03/23-08:56:37 ">
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<rdf:Description rdf:about=""
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/"
|
||||
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
||||
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
||||
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
||||
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
|
||||
<dc:creator>
|
||||
<rdf:Seq>
|
||||
<rdf:li>Deutsche Bahn</rdf:li>
|
||||
</rdf:Seq>
|
||||
</dc:creator>
|
||||
<dc:description>
|
||||
<rdf:Alt>
|
||||
<rdf:li xml:lang="x-default">Das ist das Firmenlogo der gemeinwohlorientierten Infrastrukturgesellschaft DB InfraGO AG.</rdf:li>
|
||||
</rdf:Alt>
|
||||
</dc:description>
|
||||
<Iptc4xmpCore:AltTextAccessibility>
|
||||
<rdf:Alt>
|
||||
<rdf:li xml:lang="x-default">Das ist das Firmenlogo der gemeinwohlorientierten Infrastrukturgesellschaft DB InfraGO AG.</rdf:li>
|
||||
</rdf:Alt>
|
||||
</Iptc4xmpCore:AltTextAccessibility>
|
||||
<Iptc4xmpCore:ExtDescrAccessibility>
|
||||
<rdf:Alt>
|
||||
<rdf:li xml:lang="x-default">Das ist das Firmenlogo der gemeinwohlorientierten Infrastrukturgesellschaft DB InfraGO AG.</rdf:li>
|
||||
</rdf:Alt>
|
||||
</Iptc4xmpCore:ExtDescrAccessibility>
|
||||
<xmp:MetadataDate>2023-12-20T16:18:38+01:00</xmp:MetadataDate>
|
||||
<xmpMM:InstanceID>xmp.iid:f4896118-a5fc-4ec6-884b-265e34b1ca9a</xmpMM:InstanceID>
|
||||
<xmpMM:DocumentID>xmp.did:8feca862-1f36-49d9-a283-4022945ab9e2</xmpMM:DocumentID>
|
||||
<xmpMM:OriginalDocumentID>xmp.did:8feca862-1f36-49d9-a283-4022945ab9e2</xmpMM:OriginalDocumentID>
|
||||
<xmpMM:History>
|
||||
<rdf:Seq>
|
||||
<rdf:li>
|
||||
<rdf:Description>
|
||||
<stEvt:action>saved</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:8feca862-1f36-49d9-a283-4022945ab9e2</stEvt:instanceID>
|
||||
<stEvt:when>2023-12-20T16:13:32+01:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Bridge 2024</stEvt:softwareAgent>
|
||||
<stEvt:changed>/metadata</stEvt:changed>
|
||||
</rdf:Description>
|
||||
</rdf:li>
|
||||
<rdf:li>
|
||||
<rdf:Description>
|
||||
<stEvt:action>saved</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:f4896118-a5fc-4ec6-884b-265e34b1ca9a</stEvt:instanceID>
|
||||
<stEvt:when>2023-12-20T16:18:38+01:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Bridge 2024</stEvt:softwareAgent>
|
||||
<stEvt:changed>/metadata</stEvt:changed>
|
||||
</rdf:Description>
|
||||
</rdf:li>
|
||||
</rdf:Seq>
|
||||
</xmpMM:History>
|
||||
<photoshop:CaptionWriter>Deutsche Bahn</photoshop:CaptionWriter>
|
||||
</rdf:Description>
|
||||
</rdf:RDF>
|
||||
</x:xmpmeta>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<?xpacket end="w"?></metadata>
|
||||
<g id="DB_Logo"><path d="M90,0H10C4.6,0,0,4.3,0,10v50c0,5.5,4.6,10,10,10h80c5.5,0,10-4.5,10-10.1V10c0-5.7-4.6-10-10-10ZM92.7,59.9c0,1.6-1.2,2.9-2.7,2.9H10c-1.6,0-2.7-1.3-2.7-2.9V10c0-1.6,1.2-2.9,2.7-2.9h80c1.6,0,2.7,1.3,2.7,2.9v49.9Z" style="fill:#ec0016; stroke-width:0px;"/><path d="M30.6,57.9H13.8V12.1h16.8c11.9,0,18.4,7.4,18.4,22.7,0,13.2-4.5,23-18.4,23.1ZM37.9,35.7c0-9.2-1-16.4-10.9-16.4h-2.2v31.2h3.9c5.8,0,9.2-4.7,9.2-14.8Z" style="fill:#ec0016; stroke-width:0px;"/><path d="M78,33.9c3.2-.9,8-4.6,8-10.7,0-1-.2-11.2-13.1-11.2h-19.1v45.8h16.2c4.3,0,17.7,0,17.7-12.9,0-3.1-1.4-9.1-9.7-11ZM64.7,19.2h3.5c4.9,0,6.9,1.7,6.9,5.5,0,3-2.2,5.5-6,5.5h-4.4v-11ZM69.2,50.5h-4.5v-11.8h4.8c5.7,0,7.1,3.3,7.1,5.9,0,5.9-5.6,5.9-7.4,5.9Z" style="fill:#ec0016; stroke-width:0px;"/></g><g id="InfraGo"><path d="M125,19.1h10v38.9h-10V19.1Z" style="stroke-width:0px;"/><path d="M148.3,28.5h2.2v5.2c3.1-3.5,6.2-5.1,9.9-5.1,4.9,0,7.7,3.3,7.7,9v20.3h-9.3v-18.2c0-2.4-1.1-3.5-3.4-3.5-1.6,0-2.8.4-4.9,1.5v20.2h-9.3v-27.6c3.7-.1,6-.7,7.1-1.8Z" style="stroke-width:0px;"/><path d="M175,37.2h-3.6v-6.6h3.6v-2c0-6.3,3.8-10.2,11.3-10.2,1.9,0,3.3.2,4.6.3v6.4c-.7-.1-1.3-.2-2-.2-3.2,0-4.5,1.2-4.5,4v1.7h4.8v6.6h-4.8v20.7h-9.4v-20.7Z" style="stroke-width:0px;"/><path d="M199.3,28.6h2.2v5.7c2.4-3.8,4.9-5.6,7.6-5.6.3,0,.5.1.7.1v8.3l-.6.1c-2.5.2-5.3.8-7.7,1.9v18.9h-9.3v-27.6c3.6-.1,5.9-.7,7.1-1.8Z" style="stroke-width:0px;"/><path d="M226.7,54.2c-2.1,3-4.9,4.5-8.4,4.5-5.3,0-8.4-3-8.4-8.6,0-8.1,7-8.6,16.3-9v-1.5c0-3-1.4-4.1-4.2-4.1s-5.9.5-9.8,1.2v-7.2c4.1-.9,7.2-1.3,10.8-1.3,8.9,0,12.5,3.3,12.5,11.2v11.7c0,3.2.3,4.3,1.2,5v1.6h-9l-1-3.5ZM222.1,52.6c1.5,0,2.9-.5,4.2-1.6v-5.7c-5.3.2-7.2.5-7.2,4-.1,2.3.8,3.3,3,3.3Z" style="stroke-width:0px;"/><path d="M240.1,39v-.2c0-13.6,7.2-20.3,20.4-20.3,4.3,0,7.6.5,11.6,1.7v7.9c-3.9-1.3-7.3-1.9-11.1-1.9-7.9,0-10,4-10,12.6v.3c0,8.8,2.4,12.2,9.4,12.2,1.6,0,2.7-.2,4.2-.6v-6.5h-6.2v-7.4h15.6v19c-4.8,1.8-9,2.8-13.9,2.8-13.6,0-20-5-20-19.6Z" style="stroke-width:0px;"/><path d="M278.7,38.6v-.2c0-12.5,7.1-20,18.9-20,11.9,0,18.9,7.6,18.9,20.1v.2c0,12.5-7,19.9-18.9,19.9-12,0-18.9-7.5-18.9-20ZM305.6,38.7v-.3c0-9-2.4-12.7-8-12.7-5.7,0-8,3.7-8,12.8v.3c0,8.8,2.4,12.4,8,12.4,5.7,0,8-3.6,8-12.5Z" style="stroke-width:0px;"/></g></svg>
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
BIN
alt/vendor/fonts/LexendDeca-Bold.ttf
vendored
Normal file
BIN
alt/vendor/fonts/LexendDeca-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
alt/vendor/fonts/LexendDeca-Medium.ttf
vendored
Normal file
BIN
alt/vendor/fonts/LexendDeca-Medium.ttf
vendored
Normal file
Binary file not shown.
1
alt/vendor/icons/electric-plug-icon.svg
vendored
Normal file
1
alt/vendor/icons/electric-plug-icon.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 99.15 123.38" style="enable-background:new 0 0 99.15 123.38" xml:space="preserve"><style type="text/css">.st0{fill-rule:evenodd;clip-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-miterlimit:2.6131;}</style><g><path class="st0" d="M5.44,40.34h15.84V8.47c0-4.52,3.7-8.22,8.22-8.22l0,0c4.52,0,8.22,3.7,8.22,8.22v31.87h24.13V8.47 c0-4.52,3.7-8.22,8.22-8.22l0,0c4.52,0,8.22,3.7,8.22,8.22v31.87h15.42c2.86,0,5.19,2.34,5.19,5.19v6.02 c0,2.86-2.34,5.19-5.19,5.19l-88.27,0c-2.86,0-5.19-2.34-5.19-5.19v-6.02C0.25,42.67,2.59,40.34,5.44,40.34L5.44,40.34z M9.52,56.84l0,12.58c-0.01,22.06,9.79,32.85,32.27,35.56v18.15h16.44v-18.35c22.25-2.14,32.27-15.22,32.27-36.59V56.84H9.52 L9.52,56.84z M28.11,61.42H71.9v6.51H28.11V61.42L28.11,61.42z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 919 B |
1
alt/vendor/icons/fiber-cable-icon.svg
vendored
Normal file
1
alt/vendor/icons/fiber-cable-icon.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 85.74 122.88" style="enable-background:new 0 0 85.74 122.88" xml:space="preserve"><style type="text/css">.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><g><path class="st0" d="M78.27,38.12c3.55-0.53,6.86,1.91,7.4,5.46c0.53,3.55-1.91,6.86-5.46,7.39c-2.5,0.38-4.89-0.73-6.26-2.66 c-3.57,0.93-6.69,2.33-9.49,4.22c-2.45,1.65-4.67,3.69-6.77,6.13c0.49,0.44,0.97,0.92,1.42,1.43c-0.01,0.55-0.42,1.34-0.8,1.79 c-10.22,12.67-19.42,32.79-22.49,54.84c-0.28,2.04-0.51,4.09-0.69,6.15h-5.2c0.19-2.3,0.44-4.58,0.76-6.85 c3-21.46,11.58-41.2,21.41-54.56l-0.14-0.1c-0.43-0.33-0.74-0.75-0.92-1.22l-4.97-2.97c-0.27-0.09-0.54-0.23-0.78-0.4 c-0.1-0.07-0.19-0.15-0.27-0.23l-13.19-7.89C18.9,63.78,11.24,82.96,7.6,102.58c-1.26,6.77-2.05,13.58-2.41,20.3H0 c0.37-7.03,1.18-14.16,2.5-21.24C6.43,80.5,14.85,59.81,29.27,43.69c0.81-0.99,2.23-1.27,3.35-0.6l0.35,0.21 c1.31-2.91,2.24-5.92,2.85-9c0.58-2.95,0.87-5.96,0.89-9.02c-2.35-0.79-4.18-2.83-4.58-5.45c-0.56-3.72,2-7.2,5.73-7.76 c3.72-0.56,7.2,2,7.76,5.73c0.42,2.81-0.94,5.48-3.23,6.86c0.02,3.67-0.29,7.25-0.98,10.73c-0.73,3.71-1.89,7.33-3.54,10.86 l1.64,0.99c3.86-4.82,7.05-10.17,9.59-16c2.5-5.73,4.39-11.93,5.71-18.58c-1.67-1.01-2.9-2.73-3.21-4.82 c-0.56-3.72,2-7.2,5.73-7.76c3.72-0.56,7.2,2,7.76,5.73c0.5,3.34-1.51,6.48-4.62,7.5c-1.41,7.23-3.44,13.98-6.16,20.2 c-2.65,6.07-5.93,11.65-9.88,16.69l0.87,0.52l0.62,0.37c3.14-4.22,6.38-8.37,9.69-12.45c3.6-4.42,7.29-8.77,11.06-13.05 c-0.05-0.22-0.1-0.43-0.13-0.66c-0.55-3.66,1.97-7.08,5.63-7.63c3.66-0.55,7.08,1.97,7.63,5.63c0.55,3.66-1.97,7.08-5.63,7.63 c-1.35,0.2-2.67-0.01-3.82-0.55c-3.48,3.96-6.92,8.03-10.32,12.21c-3.11,3.82-6.17,7.75-9.18,11.78l1.21,0.72l1,0.6 c2.52-2.99,5.21-5.49,8.22-7.51c3.46-2.33,7.31-4.03,11.75-5.13C73.71,40.35,75.7,38.5,78.27,38.12L78.27,38.12z M19.21,122.88 c0.13-1.7,0.29-3.39,0.48-5.07c2.53-21.67,10.92-41.79,20.71-55.55c0.52-0.72,1.53-0.9,2.27-0.38c0.72,0.52,0.9,1.53,0.38,2.27 c-9.51,13.37-17.65,32.94-20.12,54.03c-0.18,1.56-0.33,3.12-0.45,4.69H19.21L19.21,122.88z M78.86,42 c1.41-0.21,2.72,0.76,2.93,2.17c0.21,1.41-0.76,2.72-2.17,2.93c-1.41,0.21-2.72-0.76-2.93-2.17C76.48,43.52,77.45,42.21,78.86,42 L78.86,42z M57.97,4.27c1.41-0.21,2.72,0.76,2.93,2.17c0.21,1.41-0.76,2.72-2.17,2.93c-1.41,0.21-2.72-0.76-2.93-2.17 C55.59,5.8,56.56,4.48,57.97,4.27L57.97,4.27z M38.5,16.26c1.41-0.21,2.72,0.76,2.93,2.17c0.21,1.41-0.76,2.72-2.17,2.93 c-1.41,0.21-2.72-0.76-2.93-2.17C36.12,17.79,37.09,16.48,38.5,16.26L38.5,16.26z M72.79,21.38c1.41-0.21,2.72,0.76,2.93,2.17 c0.21,1.41-0.76,2.72-2.17,2.93c-1.41,0.21-2.72-0.76-2.93-2.17C70.41,22.9,71.38,21.59,72.79,21.38L72.79,21.38z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
1
alt/vendor/icons/play.svg
vendored
Normal file
1
alt/vendor/icons/play.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#000000"><path d="M6.90588 4.53682C6.50592 4.2998 6 4.58808 6 5.05299V18.947C6 19.4119 6.50592 19.7002 6.90588 19.4632L18.629 12.5162C19.0211 12.2838 19.0211 11.7162 18.629 11.4838L6.90588 4.53682Z" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
|
||||
|
After Width: | Height: | Size: 458 B |
2
alt/vendor/jquery.min.js
vendored
Normal file
2
alt/vendor/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user