Es scheint, dass es sich um eine Reihe von Dateien und Logs handelt, die wahrscheinlich mit einem großen, komplexen System zu tun haben. Hier ist ein zusammenfassender Überblick über die Dateien und ihre möglichen Funktionen:

This commit is contained in:
Tomczak
2025-06-19 10:24:03 +02:00
parent de0729e559
commit c16bcca9e6
186 changed files with 948 additions and 11 deletions

View File

@ -207,17 +207,87 @@
}
.dark .mercedes-form-input {
background: rgba(30, 41, 59, 0.8);
background: rgba(30, 41, 59, 0.9);
border-color: #475569;
color: #f8fafc;
backdrop-filter: blur(10px);
}
.dark .mercedes-form-input:focus {
border-color: #0ea5e9;
box-shadow:
0 0 0 3px rgba(14, 165, 233, 0.1),
0 4px 6px -1px rgba(0, 0, 0, 0.3);
background: rgba(30, 41, 59, 1);
box-shadow:
0 0 0 3px rgba(14, 165, 233, 0.15),
0 4px 6px -1px rgba(0, 0, 0, 0.4);
transform: translateY(-1px);
}
/* Dark Mode Select Arrows */
.dark .mercedes-form-input select {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23f8fafc' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
}
/* Dark Mode Option Elements */
.dark .mercedes-form-input option {
background: #1e293b;
color: #f8fafc;
border: none;
}
/* Printer Control Buttons */
.printer-action-btn {
padding: 0.5rem 1rem;
border-radius: 0.5rem;
font-size: 0.875rem;
font-weight: 500;
display: inline-flex;
align-items: center;
transition: all 0.2s ease;
border: none;
cursor: pointer;
}
.btn-success {
background: #10b981;
color: white;
}
.btn-success:hover:not(:disabled) {
background: #059669;
transform: translateY(-1px);
}
.btn-danger {
background: #ef4444;
color: white;
}
.btn-danger:hover:not(:disabled) {
background: #dc2626;
transform: translateY(-1px);
}
.printer-action-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none !important;
}
/* Dark Mode Button Styles */
.dark .btn-success {
background: #047857;
}
.dark .btn-success:hover:not(:disabled) {
background: #065f46;
}
.dark .btn-danger {
background: #dc2626;
}
.dark .btn-danger:hover:not(:disabled) {
background: #b91c1c;
}
/* Enhanced Modals */
@ -743,7 +813,11 @@
</label>
<select id="filterLocation" class="mercedes-form-input block w-full px-4 py-3 rounded-lg">
<option value="">Alle Standorte</option>
<!-- Wird dynamisch gefüllt -->
{% if locations %}
{% for location in locations %}
<option value="{{ location }}">{{ location }}</option>
{% endfor %}
{% endif %}
</select>
</div>
@ -757,7 +831,11 @@
</label>
<select id="filterModel" class="mercedes-form-input block w-full px-4 py-3 rounded-lg">
<option value="">Alle Modelle</option>
<!-- Wird dynamisch gefüllt -->
{% if models %}
{% for model in models %}
<option value="{{ model }}">{{ model }}</option>
{% endfor %}
{% endif %}
</select>
</div>
</div>
@ -829,7 +907,7 @@
</div>
<!-- Loading State -->
<div id="loading-state" class="space-y-6">
<div id="loading-state" class="{% if no_javascript %}hidden{% else %}space-y-6{% endif %}">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="printer-card p-6">
<div class="flex items-center gap-4 mb-4">
@ -900,9 +978,92 @@
</div>
<!-- Printers Grid Container -->
<div id="printers-container" class="hidden">
<div id="printers-container" class="{% if no_javascript %}block{% else %}hidden{% endif %}">
<div id="printers-grid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<!-- Printers will be loaded here -->
{% if no_javascript and printers %}
<!-- Server-Side Rendered Printers (No JavaScript Mode) -->
{% for printer in printers %}
<div class="printer-card p-6 border-l-4 {% if printer.plug_status == 'on' %}border-green-500{% elif printer.plug_status == 'off' %}border-gray-400{% else %}border-red-500{% endif %}" data-printer-id="{{ printer.id }}">
<!-- Printer Header -->
<div class="flex items-center justify-between mb-4">
<div class="flex items-center gap-3">
<div class="{% if printer.plug_status == 'on' %}bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200{% elif printer.plug_status == 'off' %}bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200{% else %}bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200{% endif %} w-12 h-12 rounded-xl flex items-center justify-center">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/>
</svg>
</div>
<div>
<h3 class="font-semibold text-lg text-mercedes-black dark:text-white">{{ printer.name }}</h3>
<p class="text-sm text-mercedes-gray dark:text-slate-400">{{ printer.model }}</p>
</div>
</div>
<span class="{% if printer.plug_status == 'on' %}bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200{% elif printer.plug_status == 'off' %}bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200{% else %}bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200{% endif %} px-3 py-1 rounded-full text-xs font-medium">
{{ printer.status_display.text }}
</span>
</div>
<!-- Printer Details -->
<div class="space-y-2 mb-4 text-sm">
<div class="flex justify-between">
<span class="text-mercedes-gray dark:text-slate-400">Standort:</span>
<span class="text-mercedes-black dark:text-white">{{ printer.location }}</span>
</div>
{% if printer.plug_ip %}
<div class="flex justify-between">
<span class="text-mercedes-gray dark:text-slate-400">Steckdose:</span>
<span class="text-mercedes-black dark:text-white">{{ printer.plug_ip }}</span>
</div>
{% endif %}
{% if printer.last_checked %}
<div class="flex justify-between">
<span class="text-mercedes-gray dark:text-slate-400">Letzter Check:</span>
<span class="text-mercedes-black dark:text-white text-xs">{{ printer.last_checked[:19] }}</span>
</div>
{% endif %}
</div>
<!-- Control Buttons (No JavaScript) -->
{% if printer.can_control %}
<div class="flex gap-2">
<form method="POST" action="{{ url_for('printer_control') }}" class="inline">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="printer_id" value="{{ printer.id }}"/>
<input type="hidden" name="action" value="on"/>
<button type="submit"
class="printer-action-btn btn-success"
{% if printer.plug_status == 'on' %}disabled{% endif %}>
<svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/>
</svg>
An
</button>
</form>
<form method="POST" action="{{ url_for('printer_control') }}" class="inline">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input type="hidden" name="printer_id" value="{{ printer.id }}"/>
<input type="hidden" name="action" value="off"/>
<button type="submit"
class="printer-action-btn btn-danger"
{% if printer.plug_status == 'off' %}disabled{% endif %}>
<svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 12l12.728 6.364M6 12l6.364-6.364"/>
</svg>
Aus
</button>
</form>
</div>
{% else %}
<div class="text-center py-2">
<span class="text-sm text-mercedes-gray dark:text-slate-400">
{% if printer.plug_ip %}Steckdose nicht erreichbar{% else %}Keine Steckdose konfiguriert{% endif %}
</span>
</div>
{% endif %}
</div>
{% endfor %}
{% else %}
<!-- JavaScript Printers will be loaded here -->
{% endif %}
</div>
<!-- Empty State -->