From c773faeea93fe5db2eb493c79c0c82f46336493c Mon Sep 17 00:00:00 2001
From: Karan Jayachandra
Date: Sun, 6 Jul 2025 13:31:37 +0200
Subject: Running application
---
app/templates/controls.j2 | 47 ++++++++++++++++++++++
app/templates/games.j2 | 21 ++++++++++
app/templates/index.j2 | 13 +++++++
app/templates/macros.j2 | 99 +++++++++++++++++++++++++++++++++++++++++++++++
app/templates/players.j2 | 31 +++++++++++++++
5 files changed, 211 insertions(+)
create mode 100644 app/templates/controls.j2
create mode 100644 app/templates/games.j2
create mode 100644 app/templates/index.j2
create mode 100644 app/templates/macros.j2
create mode 100644 app/templates/players.j2
(limited to 'app/templates')
diff --git a/app/templates/controls.j2 b/app/templates/controls.j2
new file mode 100644
index 0000000..0183c97
--- /dev/null
+++ b/app/templates/controls.j2
@@ -0,0 +1,47 @@
+{% from "macros.j2" import court_button %}
+
+
+ {% for key, value in courts.items() %}
+ {{ court_button(key, value) }}
+ {% endfor %}
+
+
+
+
+
+
+ 10 Levels
+ 8 Levels
+ 6 Levels
+ 4 Levels
+ 2 Levels
+ 0 Levels
+
+
+
+
+
+
+ Random
+ Teams
+
+
+
+
+ Generate
+
+
+
+ Confirm
+
+
+ RESET!
+
+
\ No newline at end of file
diff --git a/app/templates/games.j2 b/app/templates/games.j2
new file mode 100644
index 0000000..46150f7
--- /dev/null
+++ b/app/templates/games.j2
@@ -0,0 +1,21 @@
+
+
+ {{ title }}
+
+
+ Court
+ Team 1
+ Team 2
+
+
+{% for game in games %}
+
+ {{ game.court }}
+ {{ game.team1.player1.first }} {{ " " + game.team1.player1.last }}
+ {{ game.team1.player2.first }} {{ " " + game.team1.player2.last }}
+ {{ game.team2.player1.first }} {{ " " + game.team2.player1.last }}
+ {{ game.team2.player2.first }} {{ " " + game.team2.player2.last }}
+
+{% endfor %}
+
+
\ No newline at end of file
diff --git a/app/templates/index.j2 b/app/templates/index.j2
new file mode 100644
index 0000000..ce0d531
--- /dev/null
+++ b/app/templates/index.j2
@@ -0,0 +1,13 @@
+{% from "macros.j2" import header, footer, navbar %}
+
+
+ {{ header(url_for) }}
+
+
+ {{ navbar(url_for) }}
+
+
+ {{ footer() }}
+
+
+
diff --git a/app/templates/macros.j2 b/app/templates/macros.j2
new file mode 100644
index 0000000..2974744
--- /dev/null
+++ b/app/templates/macros.j2
@@ -0,0 +1,99 @@
+{% macro court_button(id, status) -%}
+ Court {{ id }}
+{%- endmacro %}
+
+{% macro player_button(player) -%}
+ {{ player.first + " " + player.last}}
+{%- endmacro %}
+
+{% macro guest_control(level, value) -%}
+
+{%- endmacro %}
+
+{% macro header(url_for) -%}
+
+
+
+ Match Up!
+
+
+
+
+
+
+
+
+
+{%- endmacro %}
+
+{% macro footer() -%}
+Made by
Karan using
Flask ,
HTMX ,
Notyf and
Bulma
+{%- endmacro %}
+
+{% macro navbar(url_for) -%}
+
+
+ Games
+
+
+ Players
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{%- endmacro %}
\ No newline at end of file
diff --git a/app/templates/players.j2 b/app/templates/players.j2
new file mode 100644
index 0000000..0beeee9
--- /dev/null
+++ b/app/templates/players.j2
@@ -0,0 +1,31 @@
+{% from "macros.j2" import header, navbar, footer, player_button, guest_control %}
+
+
+ {{ header(url_for) }}
+
+
+ {{ navbar(url_for) }}
+ Members
+
+
+ {% for regular in regulars %}
+
{{ player_button(regular) }}
+ {% endfor %}
+
+
Guests
+
+
+ {% for guest in guests %}
+
{{ player_button(guest) }}
+ {% endfor %}
+
+
+
+
+ RESET!
+
+ {{ footer() }}
+
+
+
\ No newline at end of file
--
cgit v1.3.1
From ceb264b6bdfed8c51e54deed2b6132fecff3934d Mon Sep 17 00:00:00 2001
From: Karan Jayachandra
Date: Sun, 6 Jul 2025 15:13:27 +0200
Subject: Added the basic login
---
app/__init__.py | 2 ++
app/config.py | 4 ++++
app/forms.py | 9 +++++++++
app/routes.py | 10 +++++++++-
app/templates/index.j2 | 9 +++++++++
app/templates/login.j2 | 25 +++++++++++++++++++++++++
6 files changed, 58 insertions(+), 1 deletion(-)
create mode 100644 app/config.py
create mode 100644 app/forms.py
create mode 100644 app/templates/login.j2
(limited to 'app/templates')
diff --git a/app/__init__.py b/app/__init__.py
index 96c8ef5..7b0c03d 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -1,5 +1,7 @@
from flask import Flask
+from app.config import Config
app = Flask(__name__)
+app.config.from_object(Config)
from app import routes
diff --git a/app/config.py b/app/config.py
new file mode 100644
index 0000000..aeb2840
--- /dev/null
+++ b/app/config.py
@@ -0,0 +1,4 @@
+from os import environ
+
+class Config:
+ SECRET_KEY = environ.get("SECRET_KEY") or "you-will-never-guess"
\ No newline at end of file
diff --git a/app/forms.py b/app/forms.py
new file mode 100644
index 0000000..504824a
--- /dev/null
+++ b/app/forms.py
@@ -0,0 +1,9 @@
+from flask_wtf import FlaskForm
+from wtforms.validators import DataRequired
+from wtforms import StringField, PasswordField, BooleanField, SubmitField
+
+class LoginForm(FlaskForm):
+ username = StringField("Username", validators=[DataRequired()])
+ password = PasswordField("Password", validators=[DataRequired()])
+ remember_me = BooleanField("Remember Me")
+ submit = SubmitField("Sign In")
\ No newline at end of file
diff --git a/app/routes.py b/app/routes.py
index c18d93b..b943e16 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -1,6 +1,7 @@
from app import app
+from app.forms import LoginForm
from app.controller import RoundGenerator
-from flask import render_template, request, url_for, Response
+from flask import render_template, request, url_for, Response, flash, redirect
rg = RoundGenerator()
@@ -8,6 +9,13 @@ rg = RoundGenerator()
def home():
return render_template("index.j2", url_for=url_for)
+@app.route("/login", methods=["GET", "POST"])
+def login():
+ form = LoginForm()
+ if form.validate_on_submit():
+ flash(f"User {form.username} is requesting to login.")
+ return redirect("/")
+ return render_template("login.j2", form=form)
@app.route("/control", methods=["GET"])
def get_controls():
diff --git a/app/templates/index.j2 b/app/templates/index.j2
index ce0d531..656b187 100644
--- a/app/templates/index.j2
+++ b/app/templates/index.j2
@@ -7,6 +7,15 @@
{{ navbar(url_for) }}
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+
+ {% for message in messages %}
+ {{ message }}
+ {% endfor %}
+
+ {% endif %}
+ {% endwith %}
{{ footer() }}
+
+ {{ navbar(url_for) }}
+ Sign In
+
+ {{ footer() }}
+
+
+