diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2b0a952..0000000 --- a/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM python:3.11-slim - -WORKDIR /app - -# System dependencies -RUN apt-get update && apt-get install -y \ - gcc \ - python3-dev \ - libffi-dev \ - && rm -rf /var/lib/apt/lists/* - -# Clean up and install requirements -RUN rm -rf /app/* -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt \ - && pip install --no-cache-dir wheel setuptools - -# Copy application files -COPY website/ ./website/ -COPY requirements.txt . - -EXPOSE 6000 - -# Verify installations -RUN pip list - -CMD ["python", "website/app.py"] \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 0519ecb..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website.zip b/archiv_0.1.zip similarity index 100% rename from website.zip rename to archiv_0.1.zip diff --git a/database/systades.db b/database/systades.db deleted file mode 100644 index c8067b8..0000000 Binary files a/database/systades.db and /dev/null differ diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 0d82d19..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: '3.8' - -services: - web: - build: - context: . - dockerfile: Dockerfile - ports: - - "6000:6000" - volumes: - - ./website:/app/website - environment: - - FLASK_ENV=development - - FLASK_DEBUG=1 - command: python website/app.py - restart: always \ No newline at end of file diff --git a/instance/mindmap.db b/instance/mindmap.db deleted file mode 100644 index 907f5c3..0000000 Binary files a/instance/mindmap.db and /dev/null differ diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5963cc4..0000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -Flask -Flask-Login -Flask-SQLAlchemy -Werkzeug -SQLAlchemy -email_validator \ No newline at end of file diff --git a/start-flask-server.py b/start-flask-server.py deleted file mode 100644 index a0f47c8..0000000 --- a/start-flask-server.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import time -import subprocess -import webbrowser -import requests -import socket -import logging -from pathlib import Path - -# Configure logging -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(levelname)s - %(message)s', - datefmt='%Y-%m-%d %H:%M:%S' -) -logger = logging.getLogger(__name__) - -def is_port_in_use(port): - """Check if a port is already in use""" - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - return s.connect_ex(('127.0.0.1', port)) == 0 - -def wait_for_server(url, max_attempts=5, delay=1): - """Wait for the server to start responding""" - for i in range(max_attempts): - try: - response = requests.get(url, timeout=2) - if response.status_code == 200: - logger.info(f"Server is up and running at {url}") - return True - except requests.exceptions.RequestException: - logger.info(f"Waiting for server to start (attempt {i+1}/{max_attempts})...") - time.sleep(delay) - return False - -def main(): - # Get the current directory - current_dir = Path(__file__).parent.absolute() - website_dir = current_dir / 'website' - - # Check if website directory exists - if not website_dir.exists(): - logger.error(f"Website directory not found: {website_dir}") - return False - - # Flask server details - host = "127.0.0.1" - port = 5000 - url = f"http://{host}:{port}" - - # Check if the port is already in use - if is_port_in_use(port): - logger.warning(f"Port {port} is already in use. There might be another server running.") - answer = input("Would you like to try to connect to the existing server? (y/n): ") - if answer.lower() == 'y': - webbrowser.open(url) - return True - else: - logger.info("Please stop the other server and try again.") - return False - - # Path to the run.py script - run_script = website_dir / 'run.py' - - # Check if run.py exists - if not run_script.exists(): - logger.error(f"Run script not found: {run_script}") - return False - - # Start the Flask server in a separate process - logger.info(f"Starting Flask server from {run_script}...") - - try: - # Use Python executable from the current environment - python_exe = sys.executable - - # Start the server as a separate process - server_process = subprocess.Popen( - [python_exe, str(run_script)], - cwd=str(website_dir), - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True, - bufsize=1 - ) - - # Wait for server to start - server_started = wait_for_server(url, max_attempts=10, delay=2) - - if server_started: - logger.info("Opening web browser...") - webbrowser.open(url) - - # Keep the server running and display its output - logger.info("Server is running. Press Ctrl+C to stop.") - try: - for line in server_process.stdout: - print(line.strip()) - except KeyboardInterrupt: - logger.info("Stopping server...") - server_process.terminate() - return True - else: - logger.error("Failed to start the server or server not responding") - server_process.terminate() - return False - - except Exception as e: - logger.error(f"Error starting Flask server: {e}") - return False - -if __name__ == "__main__": - success = main() - if not success: - print("\nPress Enter to exit...") - input() - sys.exit(0 if success else 1) \ No newline at end of file diff --git a/start.sh b/start.sh deleted file mode 100644 index 09409b2..0000000 --- a/start.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -# Farben für die Ausgabe -GREEN='\033[0;32m' -RED='\033[0;31m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# Funktion zum Anzeigen des Hilfetexts -show_help() { - echo -e "${YELLOW}Verwendung: ./start.sh [Option]${NC}" - echo "Optionen:" - echo " start - Startet die Container" - echo " stop - Stoppt die Container" - echo " restart - Neustart der Container" - echo " rebuild - Baut die Container neu" - echo " clean - Entfernt alle Container und Images" - echo " logs - Zeigt die Container-Logs" - echo " help - Zeigt diese Hilfe" -} - -# Prüfen ob Docker läuft -check_docker() { - if ! docker info > /dev/null 2>&1; then - echo -e "${RED}Error: Docker ist nicht gestartet${NC}" - exit 1 - fi -} - -case "$1" in - start) - check_docker - echo -e "${GREEN}Starte Container...${NC}" - docker-compose up -d - echo -e "${GREEN}Container erfolgreich gestartet!${NC}" - ;; - stop) - check_docker - echo -e "${YELLOW}Stoppe Container...${NC}" - docker-compose down - echo -e "${GREEN}Container erfolgreich gestoppt!${NC}" - ;; - restart) - check_docker - echo -e "${YELLOW}Neustart der Container...${NC}" - docker-compose down - docker-compose up -d - echo -e "${GREEN}Container erfolgreich neugestartet!${NC}" - ;; - rebuild) - check_docker - echo -e "${YELLOW}Baue Container neu...${NC}" - docker-compose down --rmi all - docker-compose build --no-cache - docker-compose up -d - echo -e "${GREEN}Container erfolgreich neu gebaut!${NC}" - ;; - clean) - check_docker - echo -e "${RED}Entferne alle Container und Images...${NC}" - docker-compose down --rmi all -v - echo -e "${GREEN}Aufräumen abgeschlossen!${NC}" - ;; - logs) - check_docker - echo -e "${YELLOW}Container-Logs:${NC}" - docker-compose logs -f - ;; - help|*) - show_help - ;; -esac \ No newline at end of file diff --git a/start_server.bat b/start_server.bat deleted file mode 100644 index f8c149e..0000000 --- a/start_server.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off -cd website -echo Starting Flask server on http://127.0.0.1:5000 -python run.py -pause \ No newline at end of file diff --git a/static/neural-network-background.js b/static/neural-network-background.js deleted file mode 100644 index 360a04c..0000000 --- a/static/neural-network-background.js +++ /dev/null @@ -1,88 +0,0 @@ -const canvas = document.getElementById('netcanvas'); -const ctx = canvas.getContext('2d'); - -let w = canvas.width = window.innerWidth; -let h = canvas.height = window.innerHeight; - -// Partikel-Definition -class Node { - constructor() { - this.x = Math.random() * w; - this.y = Math.random() * h; - this.vx = (Math.random() - 0.5) * 0.2; - this.vy = (Math.random() - 0.5) * 0.2; - } - move() { - this.x += this.vx; - this.y += this.vy; - if (this.x < 0 || this.x > w) this.vx *= -1; - if (this.y < 0 || this.y > h) this.vy *= -1; - } - draw() { - ctx.beginPath(); - ctx.arc(this.x, this.y, 2, 0, Math.PI * 2); - ctx.fill(); - } -} - -// Konfiguration -const config = { - nodeCount: 30, - connectDist: 80, - lineAlpha: 0.08, - glowColor: 'rgba(152, 165, 177, 0.4)', - nodeColor: 'rgba(135, 162, 184, 0.6)' -}; - -// Erzeuge Nodes -const nodes = []; -for (let i = 0; i < config.nodeCount; i++) { - nodes.push(new Node()); -} - -// Animation -function animate() { - ctx.clearRect(0, 0, w, h); - - // Linien zeichnen - ctx.strokeStyle = config.glowColor; - ctx.lineWidth = 0.8; - ctx.shadowBlur = 3; - ctx.shadowColor = config.glowColor; - - for (let i = 0; i < nodes.length; i++) { - const a = nodes[i]; - for (let j = i + 1; j < nodes.length; j++) { - const b = nodes[j]; - const dx = a.x - b.x, dy = a.y - b.y; - const dist = Math.hypot(dx, dy); - if (dist < config.connectDist) { - ctx.globalAlpha = config.lineAlpha * (1 - dist / config.connectDist); - ctx.beginPath(); - ctx.moveTo(a.x, a.y); - ctx.lineTo(b.x, b.y); - ctx.stroke(); - } - } - } - - // Nodes zeichnen - ctx.globalAlpha = 1; - ctx.fillStyle = config.nodeColor; - ctx.shadowBlur = 4; - ctx.shadowColor = config.nodeColor; - nodes.forEach(n => { - n.move(); - n.draw(); - }); - - requestAnimationFrame(animate); -} - -animate(); - -// Responsiv -window.addEventListener('resize', () => { - w = canvas.width = window.innerWidth; - h = canvas.height = window.innerHeight; -}); \ No newline at end of file diff --git a/test_server.py b/test_server.py deleted file mode 100644 index 8414ef2..0000000 --- a/test_server.py +++ /dev/null @@ -1,25 +0,0 @@ -import requests -import time - -def test_flask_server(): - """Test if the Flask server is accessible at http://127.0.0.1:5000""" - url = "http://127.0.0.1:5000" - - print(f"Testing connection to Flask server at {url}") - - for i in range(3): - try: - response = requests.get(url, timeout=5) - print(f"SUCCESS! Status code: {response.status_code}") - return True - except requests.exceptions.RequestException as e: - print(f"Attempt {i+1} failed: {e}") - if i < 2: - print("Waiting 2 seconds and trying again...") - time.sleep(2) - - print("Failed to connect to the Flask server after 3 attempts") - return False - -if __name__ == "__main__": - test_flask_server() \ No newline at end of file diff --git a/website/__pycache__/app.cpython-313.pyc b/website/__pycache__/app.cpython-313.pyc deleted file mode 100644 index 459cb20..0000000 Binary files a/website/__pycache__/app.cpython-313.pyc and /dev/null differ diff --git a/website/__pycache__/init_db.cpython-313.pyc b/website/__pycache__/init_db.cpython-313.pyc deleted file mode 100644 index 3803438..0000000 Binary files a/website/__pycache__/init_db.cpython-313.pyc and /dev/null differ diff --git a/website/app.py b/website/app.py deleted file mode 100644 index 8a68fb8..0000000 --- a/website/app.py +++ /dev/null @@ -1,280 +0,0 @@ -import os -from datetime import datetime -from flask import Flask, render_template, request, redirect, url_for, flash, jsonify -from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user -from flask_sqlalchemy import SQLAlchemy -from werkzeug.security import generate_password_hash, check_password_hash -import json - -db = SQLAlchemy() -login_manager = LoginManager() -login_manager.login_view = 'login' - -def create_app(): - app = Flask(__name__) - app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'default-dev-key') - app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mindmap.db' - app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False - - db.init_app(app) - login_manager.init_app(app) - - with app.app_context(): - # Initialize database and create root node - db.create_all() - try: - root = MindMapNode.query.filter_by(parent_id=None).first() - if not root: - root = MindMapNode(name="Wissenschaft") - db.session.add(root) - db.session.commit() - except Exception as e: - print(f"Error initializing database: {str(e)}") - - # Register all routes with the app - @login_manager.user_loader - def load_user(id): - return User.query.get(int(id)) - - @app.route('/login', methods=['GET', 'POST']) - def login(): - if request.method == 'POST': - username = request.form.get('username') - password = request.form.get('password') - - user = User.query.filter_by(username=username).first() - if user and user.check_password(password): - login_user(user) - next_page = request.args.get('next') - return redirect(next_page or url_for('index')) - flash('Ungültiger Benutzername oder Passwort') - return render_template('login.html') - - @app.route('/register', methods=['GET', 'POST']) - def register(): - if request.method == 'POST': - username = request.form.get('username') - email = request.form.get('email') - password = request.form.get('password') - - if User.query.filter_by(username=username).first(): - flash('Benutzername existiert bereits') - return redirect(url_for('register')) - - if User.query.filter_by(email=email).first(): - flash('E-Mail ist bereits registriert') - return redirect(url_for('register')) - - user = User(username=username, email=email) - user.set_password(password) - db.session.add(user) - db.session.commit() - - login_user(user) - return redirect(url_for('index')) - return render_template('register.html') - - @app.route('/logout') - @login_required - def logout(): - logout_user() - return redirect(url_for('index')) - - @app.route('/') - def index(): - return render_template('index.html') - - @app.route('/mindmap') - def mindmap(): - try: - root_node = MindMapNode.query.filter_by(parent_id=None).first() - if not root_node: - root_node = MindMapNode(name="Wissenschaft") - db.session.add(root_node) - db.session.commit() - return render_template('mindmap.html') - except Exception as e: - app.logger.error(f"Error loading mindmap: {str(e)}") - return render_template('mindmap.html', error="Fehler beim Laden der Mindmap. Bitte versuchen Sie es erneut.") - - @app.route('/profile') - @login_required - def profile(): - thoughts = Thought.query.filter_by(user_id=current_user.id).order_by(Thought.timestamp.desc()).all() - return render_template('profile.html', thoughts=thoughts) - - @app.route('/api/mindmap') - def get_mindmap(): - try: - root_nodes = MindMapNode.query.filter_by(parent_id=None).all() - - def build_tree(node): - return { - 'id': node.id, - 'name': node.name, - 'children': [build_tree(child) for child in node.children] - } - - result = [build_tree(node) for node in root_nodes] - if not result: - root = MindMapNode(name="Wissenschaft") - db.session.add(root) - db.session.commit() - result = [build_tree(root)] - - return jsonify(result) - except Exception as e: - app.logger.error(f"Error in get_mindmap: {str(e)}") - return jsonify({'error': 'Fehler beim Laden der Mindmap'}), 500 - - @app.route('/api/thoughts/', methods=['GET']) - def get_thoughts(node_id): - node = MindMapNode.query.get_or_404(node_id) - thoughts = [] - - for thought in node.thoughts: - thoughts.append({ - 'id': thought.id, - 'content': thought.content, - 'author': thought.author.username, - 'timestamp': thought.timestamp.strftime('%d.%m.%Y, %H:%M'), - 'comments_count': len(thought.comments), - 'branch': thought.branch - }) - - return jsonify(thoughts) - - @app.route('/api/thoughts', methods=['POST']) - @login_required - def add_thought(): - data = request.json - node_id = data.get('node_id') - content = data.get('content') - - if not node_id or not content: - return jsonify({'error': 'Fehlende Daten'}), 400 - - node = MindMapNode.query.get_or_404(node_id) - - thought = Thought( - content=content, - branch=node.name, - user_id=current_user.id - ) - - db.session.add(thought) - node.thoughts.append(thought) - db.session.commit() - - return jsonify({ - 'id': thought.id, - 'content': thought.content, - 'author': thought.author.username, - 'timestamp': thought.timestamp.strftime('%d.%m.%Y, %H:%M'), - 'branch': thought.branch - }) - - @app.route('/api/comments/', methods=['GET']) - def get_comments(thought_id): - thought = Thought.query.get_or_404(thought_id) - comments = [ - { - 'id': comment.id, - 'content': comment.content, - 'author': comment.author.username, - 'timestamp': comment.timestamp.strftime('%d.%m.%Y, %H:%M') - } - for comment in thought.comments - ] - return jsonify(comments) - - @app.route('/api/comments', methods=['POST']) - @login_required - def add_comment(): - data = request.json - thought_id = data.get('thought_id') - content = data.get('content') - - if not thought_id or not content: - return jsonify({'error': 'Fehlende Daten'}), 400 - - thought = Thought.query.get_or_404(thought_id) - - comment = Comment( - content=content, - thought_id=thought_id, - user_id=current_user.id - ) - - db.session.add(comment) - db.session.commit() - - return jsonify({ - 'id': comment.id, - 'content': comment.content, - 'author': comment.author.username, - 'timestamp': comment.timestamp.strftime('%d.%m.%Y, %H:%M') - }) - - @app.route('/admin') - @login_required - def admin(): - if not current_user.is_admin: - flash('Zugriff verweigert') - return redirect(url_for('index')) - - users = User.query.all() - nodes = MindMapNode.query.all() - thoughts = Thought.query.all() - - return render_template('admin.html', users=users, nodes=nodes, thoughts=thoughts) - - return app - -# Database Models -class User(UserMixin, db.Model): - id = db.Column(db.Integer, primary_key=True) - username = db.Column(db.String(80), unique=True, nullable=False) - email = db.Column(db.String(120), unique=True, nullable=False) - password_hash = db.Column(db.String(128)) - is_admin = db.Column(db.Boolean, default=False) - thoughts = db.relationship('Thought', backref='author', lazy=True) - - def set_password(self, password): - self.password_hash = generate_password_hash(password) - - def check_password(self, password): - return check_password_hash(self.password_hash, password) - -class Thought(db.Model): - id = db.Column(db.Integer, primary_key=True) - content = db.Column(db.Text, nullable=False) - timestamp = db.Column(db.DateTime, default=datetime.utcnow) - branch = db.Column(db.String(100), nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) - comments = db.relationship('Comment', backref='thought', lazy=True, cascade="all, delete-orphan") - -class Comment(db.Model): - id = db.Column(db.Integer, primary_key=True) - content = db.Column(db.Text, nullable=False) - timestamp = db.Column(db.DateTime, default=datetime.utcnow) - thought_id = db.Column(db.Integer, db.ForeignKey('thought.id'), nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) - author = db.relationship('User', backref='comments') - -class MindMapNode(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(100), nullable=False) - parent_id = db.Column(db.Integer, db.ForeignKey('mind_map_node.id'), nullable=True) - children = db.relationship('MindMapNode', backref=db.backref('parent', remote_side=[id])) - thoughts = db.relationship('Thought', secondary='node_thought_association', backref='nodes') - -# Association table for many-to-many relationship between MindMapNode and Thought -node_thought_association = db.Table('node_thought_association', - db.Column('node_id', db.Integer, db.ForeignKey('mind_map_node.id'), primary_key=True), - db.Column('thought_id', db.Integer, db.ForeignKey('thought.id'), primary_key=True) -) - -if __name__ == '__main__': - app = create_app() - app.run(host="0.0.0.0", port=5000, debug=True) \ No newline at end of file diff --git a/website/init_db.py b/website/init_db.py deleted file mode 100644 index aa75353..0000000 --- a/website/init_db.py +++ /dev/null @@ -1,144 +0,0 @@ -import os -import sys -from pathlib import Path -import shutil - -# Pfade zu möglichen Datenbankdateien -db_paths = [ - Path("instance/mindmap.db"), - Path("mindmap.db"), - Path("website/instance/mindmap.db"), - Path("website/mindmap.db") -] - -# Lösche bestehende Datenbankdateien -for db_path in db_paths: - if db_path.exists(): - try: - print(f"Lösche Datenbank: {db_path}") - os.remove(db_path) - except Exception as e: - print(f"Fehler beim Löschen von {db_path}: {e}") - -# Stelle sicher, dass das instance-Verzeichnis existiert -instance_dir = Path("instance") -if not instance_dir.exists(): - os.makedirs(instance_dir) - -# Importiere Datenbankmodelle und erstelle die Datenbank -from app import db, create_app, User, MindMapNode, Thought, Comment - -app = create_app() - -with app.app_context(): - print("Erstelle neue Datenbank...") - db.drop_all() # Stelle sicher, dass alle Tabellen gelöscht sind - db.create_all() # Erstelle Tabellen basierend auf den Modellen - - # Erstelle einen Admin-Benutzer - admin = User(username="admin", email="admin@example.com", is_admin=True) - admin.set_password("admin123") - db.session.add(admin) - - # Erstelle Root-Node - root = MindMapNode(name="Wissenschaft") - db.session.add(root) - - # Hauptkategorien erstellen - naturwissenschaften = MindMapNode(name="Naturwissenschaften", parent=root) - geisteswissenschaften = MindMapNode(name="Geisteswissenschaften", parent=root) - sozialwissenschaften = MindMapNode(name="Sozialwissenschaften", parent=root) - ingenieurwissenschaften = MindMapNode(name="Ingenieurwissenschaften", parent=root) - medizin = MindMapNode(name="Medizin", parent=root) - informatik = MindMapNode(name="Informatik", parent=root) - - db.session.add_all([naturwissenschaften, geisteswissenschaften, sozialwissenschaften, - ingenieurwissenschaften, medizin, informatik]) - - # Unterkategorien für Naturwissenschaften - physik = MindMapNode(name="Physik", parent=naturwissenschaften) - chemie = MindMapNode(name="Chemie", parent=naturwissenschaften) - biologie = MindMapNode(name="Biologie", parent=naturwissenschaften) - astronomie = MindMapNode(name="Astronomie", parent=naturwissenschaften) - geologie = MindMapNode(name="Geologie", parent=naturwissenschaften) - - # Unterkategorien für Physik - quantenphysik = MindMapNode(name="Quantenphysik", parent=physik) - relativitätstheorie = MindMapNode(name="Relativitätstheorie", parent=physik) - thermodynamik = MindMapNode(name="Thermodynamik", parent=physik) - - # Unterkategorien für Geisteswissenschaften - philosophie = MindMapNode(name="Philosophie", parent=geisteswissenschaften) - geschichte = MindMapNode(name="Geschichte", parent=geisteswissenschaften) - linguistik = MindMapNode(name="Linguistik", parent=geisteswissenschaften) - literaturwissenschaft = MindMapNode(name="Literaturwissenschaft", parent=geisteswissenschaften) - religionswissenschaft = MindMapNode(name="Religionswissenschaft", parent=geisteswissenschaften) - - # Unterkategorien für Sozialwissenschaften - soziologie = MindMapNode(name="Soziologie", parent=sozialwissenschaften) - psychologie = MindMapNode(name="Psychologie", parent=sozialwissenschaften) - politikwissenschaft = MindMapNode(name="Politikwissenschaft", parent=sozialwissenschaften) - wirtschaftswissenschaften = MindMapNode(name="Wirtschaftswissenschaften", parent=sozialwissenschaften) - - # Unterkategorien für Ingenieurwissenschaften - maschinenbau = MindMapNode(name="Maschinenbau", parent=ingenieurwissenschaften) - elektrotechnik = MindMapNode(name="Elektrotechnik", parent=ingenieurwissenschaften) - bauingenieurwesen = MindMapNode(name="Bauingenieurwesen", parent=ingenieurwissenschaften) - verfahrenstechnik = MindMapNode(name="Verfahrenstechnik", parent=ingenieurwissenschaften) - - # Unterkategorien für Medizin - humanmedizin = MindMapNode(name="Humanmedizin", parent=medizin) - zahnmedizin = MindMapNode(name="Zahnmedizin", parent=medizin) - pharmazie = MindMapNode(name="Pharmazie", parent=medizin) - neurologie = MindMapNode(name="Neurologie", parent=medizin) - onkologie = MindMapNode(name="Onkologie", parent=medizin) - - # Unterkategorien für Informatik - künstliche_intelligenz = MindMapNode(name="Künstliche Intelligenz", parent=informatik) - datenbanken = MindMapNode(name="Datenbanken", parent=informatik) - softwareentwicklung = MindMapNode(name="Softwareentwicklung", parent=informatik) - computergrafik = MindMapNode(name="Computergrafik", parent=informatik) - cybersicherheit = MindMapNode(name="Cybersicherheit", parent=informatik) - - # Alle Nodes zur Session hinzufügen - all_nodes = [physik, chemie, biologie, astronomie, geologie, - quantenphysik, relativitätstheorie, thermodynamik, - philosophie, geschichte, linguistik, literaturwissenschaft, religionswissenschaft, - soziologie, psychologie, politikwissenschaft, wirtschaftswissenschaften, - maschinenbau, elektrotechnik, bauingenieurwesen, verfahrenstechnik, - humanmedizin, zahnmedizin, pharmazie, neurologie, onkologie, - künstliche_intelligenz, datenbanken, softwareentwicklung, computergrafik, cybersicherheit] - - db.session.add_all(all_nodes) - - # Füge einen Beispiel-Gedanken hinzu - thought = Thought( - content="Dies ist ein Beispiel-Gedanke zur Wissenschaft allgemein.", - branch="Wissenschaft", - user_id=1 # Admin-Benutzer - ) - db.session.add(thought) - root.thoughts.append(thought) - - # Füge weitere Beispiel-Gedanken hinzu - thought_ai = Thought( - content="Künstliche Intelligenz transformiert viele Bereiche der Wissenschaft und Gesellschaft.", - branch="Künstliche Intelligenz", - user_id=1 - ) - db.session.add(thought_ai) - künstliche_intelligenz.thoughts.append(thought_ai) - - thought_physik = Thought( - content="Die Quantenphysik stellt unser Verständnis der Realität grundlegend in Frage.", - branch="Quantenphysik", - user_id=1 - ) - db.session.add(thought_physik) - quantenphysik.thoughts.append(thought_physik) - - db.session.commit() - - print("Datenbank wurde erfolgreich initialisiert!") - print(f"Admin-Benutzer erstellt: admin/admin123") - print(f"Root-Node 'Wissenschaft' erstellt mit mehreren Hauptkategorien und Unterkategorien") \ No newline at end of file diff --git a/website/instance/mindmap.db b/website/instance/mindmap.db deleted file mode 100644 index 1db9c4d..0000000 Binary files a/website/instance/mindmap.db and /dev/null differ diff --git a/website/requirements.txt b/website/requirements.txt deleted file mode 100644 index dda7386..0000000 --- a/website/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -flask -flask-login -flask-wtf -email-validator -python-dotenv -flask-sqlalchemy \ No newline at end of file diff --git a/website/run.py b/website/run.py deleted file mode 100644 index 986fff9..0000000 --- a/website/run.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import logging -from app import create_app - -# Configure logging -logging.basicConfig(level=logging.DEBUG) -logger = logging.getLogger(__name__) - -app = create_app() - -if __name__ == "__main__": - logger.info("Starting Flask server on http://127.0.0.1:5000") - try: - # Use threaded=True for better request handling - app.run(host="127.0.0.1", port=5000, debug=True, use_reloader=False, threaded=True) - except Exception as e: - logger.error(f"Error starting Flask server: {e}") - sys.exit(1) \ No newline at end of file diff --git a/website/static/background.js b/website/static/background.js deleted file mode 100644 index bbab5ef..0000000 --- a/website/static/background.js +++ /dev/null @@ -1,108 +0,0 @@ -// Background animation with Three.js -let scene, camera, renderer, stars = []; - -function initBackground() { - // Setup scene - scene = new THREE.Scene(); - - // Setup camera - camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000); - camera.position.z = 100; - - // Setup renderer - renderer = new THREE.WebGLRenderer({ alpha: true }); - renderer.setSize(window.innerWidth, window.innerHeight); - renderer.setClearColor(0x000000, 0); // Transparent background - - // Append renderer to DOM - const backgroundContainer = document.getElementById('background-container'); - if (backgroundContainer) { - backgroundContainer.appendChild(renderer.domElement); - } - - // Add stars - for (let i = 0; i < 1000; i++) { - const geometry = new THREE.SphereGeometry(0.2, 8, 8); - const material = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, opacity: Math.random() * 0.5 + 0.1 }); - const star = new THREE.Mesh(geometry, material); - - // Random position - star.position.x = Math.random() * 600 - 300; - star.position.y = Math.random() * 600 - 300; - star.position.z = Math.random() * 600 - 300; - - // Store reference to move in animation - star.velocity = Math.random() * 0.02 + 0.005; - stars.push(star); - - scene.add(star); - } - - // Add large glowing particles - for (let i = 0; i < 15; i++) { - const size = Math.random() * 5 + 2; - const geometry = new THREE.SphereGeometry(size, 16, 16); - - // Create a glowing material - const color = new THREE.Color(); - color.setHSL(Math.random(), 0.7, 0.5); // Random hue - - const material = new THREE.MeshBasicMaterial({ - color: color, - transparent: true, - opacity: 0.2 - }); - - const particle = new THREE.Mesh(geometry, material); - - // Random position but further away - particle.position.x = Math.random() * 1000 - 500; - particle.position.y = Math.random() * 1000 - 500; - particle.position.z = Math.random() * 200 - 400; - - // Store reference to move in animation - particle.velocity = Math.random() * 0.01 + 0.002; - stars.push(particle); - - scene.add(particle); - } - - // Handle window resize - window.addEventListener('resize', onWindowResize); - - // Start animation - animate(); -} - -function animate() { - requestAnimationFrame(animate); - - // Move stars - stars.forEach(star => { - star.position.z += star.velocity; - - // Reset position if star moves too close - if (star.position.z > 100) { - star.position.z = -300; - } - }); - - // Rotate the entire scene slightly for a dreamy effect - scene.rotation.y += 0.0003; - scene.rotation.x += 0.0001; - - renderer.render(scene, camera); -} - -function onWindowResize() { - camera.aspect = window.innerWidth / window.innerHeight; - camera.updateProjectionMatrix(); - renderer.setSize(window.innerWidth, window.innerHeight); -} - -// Initialize background when the DOM is loaded -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initBackground); -} else { - initBackground(); -} \ No newline at end of file diff --git a/website/static/background.mp4 b/website/static/background.mp4 deleted file mode 100644 index 050b743..0000000 --- a/website/static/background.mp4 +++ /dev/null @@ -1 +0,0 @@ -C:\Users\firem\Downloads\background.mp4 diff --git a/website/static/mindmap.js b/website/static/mindmap.js deleted file mode 100644 index 15d2732..0000000 --- a/website/static/mindmap.js +++ /dev/null @@ -1,49 +0,0 @@ -// Erstelle eine einfache Mindmap-Struktur mit D3.js -const data = { - name: "Wissenschaftliche Mindmap", - children: [ - { name: "Forschung", children: [{ name: "Theorie" }, { name: "Experimente" }] }, - { name: "Technologie", children: [{ name: "Datenbanken" }, { name: "Cloud Computing" }] } - ] -}; - -// D3.js-Setup für die Darstellung der Mindmap -const width = 800; -const height = 600; -const margin = 50; - -const svg = d3.select("#mindmap") - .append("svg") - .attr("width", width) - .attr("height", height); - -const root = d3.hierarchy(data); -const treeLayout = d3.tree().size([width - margin, height - margin]); -treeLayout(root); - -const links = svg.selectAll(".link") - .data(root.links()) - .enter() - .append("line") - .attr("class", "link") - .attr("x1", d => d.source.x + margin) - .attr("y1", d => d.source.y + margin) - .attr("x2", d => d.target.x + margin) - .attr("y2", d => d.target.y + margin) - .attr("stroke", "#2c3e50"); - -const nodes = svg.selectAll(".node") - .data(root.descendants()) - .enter() - .append("g") - .attr("class", "node") - .attr("transform", d => `translate(${d.x + margin},${d.y + margin})`); - -nodes.append("circle") - .attr("r", 20) - .attr("fill", "#3498db"); - -nodes.append("text") - .attr("dx", 25) - .attr("dy", 5) - .text(d => d.data.name); \ No newline at end of file diff --git a/website/static/style.css b/website/static/style.css deleted file mode 100644 index 6dc98ff..0000000 --- a/website/static/style.css +++ /dev/null @@ -1,27 +0,0 @@ -/* Grundlegendes Styling für die Seite */ -body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; - background-color: #f0f0f0; -} - -/* Styling für den Header */ -h1 { - text-align: center; - color: #2c3e50; - margin-top: 50px; -} - -/* Button für die Navigation */ -button { - padding: 10px 20px; - background-color: #3498db; - color: white; - border: none; - cursor: pointer; -} - -button:hover { - background-color: #2980b9; -} \ No newline at end of file diff --git a/website/static/three.min.js b/website/static/three.min.js deleted file mode 100644 index e69de29..0000000 diff --git a/website/templates/admin.html b/website/templates/admin.html deleted file mode 100644 index 3726b05..0000000 --- a/website/templates/admin.html +++ /dev/null @@ -1,109 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Admin | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Admin Bereich

-

Verwalte Benutzer, Gedanken und die Mindmap-Struktur.

-
- -
- -
-
-

Benutzer

- {{ users|length }} -
- -
- - - - - - - - - - - {% for user in users %} - - - - - - - {% endfor %} - -
IDBenutzernameEmailRolle
{{ user.id }}{{ user.username }}{{ user.email }} - {% if user.is_admin %} - Admin - {% else %} - Benutzer - {% endif %} -
-
-
- - -
-
-

Mindmap Struktur

- {{ nodes|length }} -
- -
-
- {% for node in nodes %} -
-
- {{ node.name }} - ID: {{ node.id }} -
- {% if node.parent %} -

Eltern: {{ node.parent.name }}

- {% else %} -

Hauptknoten

- {% endif %} -
- {% endfor %} -
-
- -
- -
-
- - -
-
-

Gedanken

- {{ thoughts|length }} -
- -
-
- {% for thought in thoughts %} -
-
- {{ thought.branch }} - {{ thought.timestamp.strftime('%d.%m.%Y') }} -
-

{{ thought.content }}

-
- Von: {{ thought.author.username }} - {{ thought.comments|length }} Kommentar(e) -
-
- {% endfor %} -
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/base.html b/website/templates/base.html deleted file mode 100644 index 5231846..0000000 --- a/website/templates/base.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - {% block title %}Wissenschaftliche Mindmap{% endblock %} - - - - - {% block extra_head %}{% endblock %} - - - -
- -
- - - - - {% with messages = get_flashed_messages() %} - {% if messages %} -
- {% for message in messages %} -
- {{ message }} -
- {% endfor %} -
- {% endif %} - {% endwith %} - - -
- {% block content %}{% endblock %} -
-
- - - - - {% block scripts %}{% endblock %} - - \ No newline at end of file diff --git a/website/templates/index.html b/website/templates/index.html deleted file mode 100644 index 55e5b10..0000000 --- a/website/templates/index.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -
-
-

Willkommen zur Wissenschafts-Mindmap

-

Verknüpfe Wissen in neuronalen Strukturen und teile deine Gedanken mit der Community.

- -
- - Zum Netzwerk - - {% if not current_user.is_authenticated %} - - Registrieren - - {% endif %} -
-
- -
-
-

Visualisiere Wissen

-

Erkenne Zusammenhänge zwischen verschiedenen Wissensgebieten durch intuitive Mindmaps.

-
- -
-

Teile Gedanken

-

Füge deine eigenen Gedanken zu bestehenden Themen hinzu und bereichere die Community.

-
- -
-

Interaktive Vernetzung

-

Beteilige dich an Diskussionen und sieh wie sich Ideen gemeinsam entwickeln.

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/login.html b/website/templates/login.html deleted file mode 100644 index 471d79b..0000000 --- a/website/templates/login.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Anmelden | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Anmelden

- -
-
- - -
- -
- - -
- -
- -
-
- -
-

- Noch kein Konto? - - Registrieren - -

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/mindmap.html b/website/templates/mindmap.html deleted file mode 100644 index 5c27249..0000000 --- a/website/templates/mindmap.html +++ /dev/null @@ -1,708 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Mindmap | Wissenschaftliche Mindmap{% endblock %} - -{% block extra_head %} - -{% endblock %} - -{% block content %} -
- -
-
-

Wissenschaftliche Mindmap

-
- - -
- - - -
- - -
-

Kategorien

-
-
- - Naturwissenschaften -
-
- - Geisteswissenschaften -
-
- - Technologie -
-
- - Künste -
-
-
- - -
-
- - -
-
-
-

Keine Auswahl

- -
- - {% if current_user.is_authenticated %} -
-

Teile deinen Gedanken

- - -
- {% else %} -
-

Melde dich an, um deine Gedanken zu teilen

- Anmelden -
- {% endif %} - -

Community Gedanken

-
-
-

Wähle einen Knoten aus, um Gedanken zu sehen

-
-
-
-
-
- - - -{% endblock %} - -{% block scripts %} - - -{% endblock %} \ No newline at end of file diff --git a/website/templates/profile.html b/website/templates/profile.html deleted file mode 100644 index da208e1..0000000 --- a/website/templates/profile.html +++ /dev/null @@ -1,131 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Profil | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-
-
-

Hallo, {{ current_user.username }}

-

{{ current_user.email }}

-
- - -
-
- -
-

Deine Gedanken

- - {% if thoughts %} -
- {% for thought in thoughts %} -
-
- {{ thought.branch }} - {{ thought.timestamp.strftime('%d.%m.%Y, %H:%M') }} -
-

{{ thought.content }}

- -
-
- {{ thought.comments|length }} Kommentar(e) -
- - Details anzeigen -
-
- {% endfor %} -
- {% else %} -
-

Du hast noch keine Gedanken geteilt.

- Zur Mindmap gehen und mitmachen -
- {% endif %} -
-
- - - -{% endblock %} - -{% block scripts %} - -{% endblock %} \ No newline at end of file diff --git a/website/templates/register.html b/website/templates/register.html deleted file mode 100644 index b4d6671..0000000 --- a/website/templates/register.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Registrieren | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Registrieren

- -
-
- - -
- -
- - -
- -
- - -
- -
- -
-
- -
-

- Bereits registriert? - - Anmelden - -

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/test_app.py b/website/test_app.py deleted file mode 100644 index 0f9cdc0..0000000 --- a/website/test_app.py +++ /dev/null @@ -1,35 +0,0 @@ -from flask import Flask - -app = Flask(__name__) - -@app.route('/') -def hello(): - return """ - - - - Test Seite - - - -
-

Test Seite funktioniert!

-

Wenn Sie diese Seite sehen können, funktioniert der grundlegende Flask-Server korrekt.

-

Server-Status:

-
    -
  • Flask läuft auf Port 5000
  • -
  • Keine Datenbankverbindung erforderlich
  • -
  • Keine Templates erforderlich
  • -
-

Versuchen Sie, diese URL in verschiedenen Browsern zu öffnen.

-
- - - """ - -if __name__ == '__main__': - app.run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file