diff --git a/main.py b/main.py index d048d0b..d28dac9 100644 --- a/main.py +++ b/main.py @@ -1,17 +1,40 @@ -from flask import Flask, render_template +import logging +from flask import Flask, render_template, request from flask_socketio import SocketIO, emit app = Flask(__name__) -app.config['SECRET_KEY'] = 'dein_geheimer_schluessel' +app.config['SECRET_KEY'] = 'geheimeschluessel' socketio = SocketIO(app) +# Beispiel-Datenquelle +table_data = [ + {"id": 1, "name": "Alice", "age": 25}, + {"id": 2, "name": "Bob", "age": 30}, + {"id": 3, "name": "Charlie", "age": 35} +] + +# Konfiguriere das Logging +logging.basicConfig(level=logging.DEBUG) +logger = logging.getLogger(__name__) + @app.route('/') def index(): - return render_template('index.html') + return render_template('index.html', table_data=table_data) + +@app.route('/update_table', methods=['POST']) +def update_table(): + updated_data = request.json + for row in updated_data: + row_id = row['id'] + for entry in table_data: + if entry['id'] == row_id: + entry['name'] = row['name'] + entry['age'] = row['age'] + break -@socketio.on('connect') -def handle_connect(): - emit('message', {'data': 'Verbunden'}) + socketio.emit('table_update', table_data, broadcast=True) + logger.info('Daten aktualisiert: %s', table_data) # Logge die aktualisierten Daten + return 'Daten aktualisiert' if __name__ == '__main__': socketio.run(app) diff --git a/static/css/styles.css b/static/css/styles.css index 9b3cfa6..cca8e1f 100644 --- a/static/css/styles.css +++ b/static/css/styles.css @@ -1,185 +1,71 @@ -/* Reset CSS */ -* { - box-sizing: border-box; - margin: 0; - padding: 0; - } - - body { - font-family: Arial, sans-serif; - font-size: 16px; - line-height: 1.6; - color: #333; - } - - header { - background-color: #333; - padding: 20px; - color: #fff; - text-align: center; - } - - nav ul { - list-style: none; - margin-top: 20px; - } - - nav ul li { - display: inline-block; - margin-right: 10px; - } - - nav ul li a { - color: #fff; - text-decoration: none; - } - - main { - padding: 20px; - } - - h2 { - margin-bottom: 10px; - } - - section { - margin-bottom: 40px; - } - - #hero { - background-image: url("img/hero-bg.jpg"); - background-size: cover; - background-position: center; - color: #fff; - padding: 80px 0; - text-align: center; - transform-style: preserve-3d; - perspective: 1000px; - } - - .hero-content { - max-width: 600px; - margin: 0 auto; - transform: rotateY(10deg) rotateX(-10deg); - transition: transform 0.5s ease; - } - - #hero:hover .hero-content { - transform: rotateY(0) rotateX(0); - } - - #features { - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; - } - - .feature { - flex-basis: 300px; - margin: 20px; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - text-align: center; - transform-style: preserve-3d; - perspective: 1000px; - } - - .feature:hover { - transform: rotateY(10deg) rotateX(-10deg); - transition: transform 0.5s ease; - } - - #portfolio { - text-align: center; - } - - .portfolio-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - grid-gap: 20px; - margin-top: 20px; - } - - .portfolio-item { - border: 1px solid #ccc; - border-radius: 5px; - overflow: hidden; - transform-style: preserve-3d; - perspective: 1000px; - } - - .portfolio-item:hover { - transform: rotateY(10deg) rotateX(-10deg); - transition: transform 0.5s ease; - } - - .portfolio-item img { - width: 100%; - height: auto; - } - - #contact { - text-align: center; - } - - .form-group { - margin-bottom: 20px; - } - - label { - display: block; - margin-bottom: 5px; - } - - input[type="text"], - input[type="email"], - textarea { - width: 100%; - padding: 10px; - border-radius: 5px; - border: 1px solid #ccc; - } - - button[type="submit"] { - background-color: #333; - color: #fff; - border: none; - padding: 10px 20px; - border-radius: 5px; - cursor: pointer; - transform-style: preserve-3d; - perspective: 1000px; - } - - button[type="submit"]:hover { - transform: rotateY(10deg) rotateX(-10deg); - transition: transform 0.5s ease; - } - - footer { - background-color: #333; - color: #fff; - padding: 20px; - text-align: center; - } - - footer p { - margin: 0; - } - - .container { - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; - } - - /* Media Queries */ - @media (max-width: 768px) { - nav ul li { - display: block; - margin-bottom: 10px; - } - } - \ No newline at end of file +/* styles.css */ +body { + background-color: #f5f7fa; + font-family: Arial, sans-serif; + margin: 0; + padding: 0; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +h1 { + font-size: 2rem; + text-align: center; + margin-bottom: 20px; +} + +.table { + width: 100%; + border-collapse: collapse; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 10px; + border: 1px solid #ddd; + text-align: left; +} + +.table th { + background-color: #f2f2f2; +} + +.table tr:nth-child(even) td { + background-color: #fff; +} + +.table td.editable { + cursor: pointer; +} + +.button { + padding: 8px 16px; + background-color: #4a86e8; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; +} + +.category { + margin-bottom: 20px; +} + +.category-name { + font-size: 1.2rem; + margin-bottom: 10px; +} + +.new-table-button { + padding: 8px 16px; + background-color: #6ab04c; + color: #fff; + border: none; + border-radius: 4px; + cursor: pointer; +} diff --git a/templates/index.html b/templates/index.html index a5c2ce9..1964dab 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,18 +1,123 @@ + -
-| Name | +Alter | ++ |
|---|---|---|
| {{ row.name }} | +{{ row.age }} | ++ |