This commit is contained in:
Ádám Kovács
2023-11-07 14:00:40 +01:00
parent 36638e2dd1
commit ec52bd7384
7 changed files with 301 additions and 0 deletions

26
components/layout.py Normal file
View File

@@ -0,0 +1,26 @@
html = """<!DOCTYPE html>
<html>
<head>
<title>Thermostate</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript">
window.tailwind = window.tailwind || {};
window.tailwind.config = {
corePlugins: {
preflight: false,
}
};
</script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<script defer src="https://cdn.tailwindcss.com"></script>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<script defer src="https://unpkg.com/htmx.org@1.9.8"></script>
</head>
<body>
<div class="container">
%s
</div>
</body>
</html>
"""

68
components/main.py Normal file
View File

@@ -0,0 +1,68 @@
import constants
import globals
_content = """
<h1>Thermostat</h1>
<div id="header_buttons" class="flex flex-row">
%s
</div>
%s
"""
_header_buttons = """
<button class="btn %s" hx-get="/set_by_week" hx-target="#header_buttons">Same for all days</button>
<button class="btn %s" hx-get="/set_by_day" hx-target="#header_buttons">By day</button>
"""
_by_week_content = """
<form hx-post="/save_by_week" hx-target="#settings">
<h2>Settings for all day</h2>
<div id="settings">
%s
</div>
<div class="flex flex-row">
<button class="btn btn-success" hx-get="/add_by_week" hx-target="#settings">Add</button>
<input class="btn btn-success" type="submit" value="Save" />
<button class="btn btn-danger" hx-get="/reset_by_week" hx-target="#settings">Cancel</button>
</div>
</form>
"""
def _format_edit_line(time, temp, i):
return """
<div class="flex flex-row mb-3">
<input type="time" value="%s" class="form-control mr-10" placeholder="Time" name="time%s" />
<input type="number" value="%s" class="form-control mr-10" placeholder="Temperature (&deg;C)" name="value%s" />
</div>
""" % (time, i, temp, i)
def get_main(day_mode):
return _content % (get_header_buttons(day_mode), get_settings_with_id(day_mode))
def get_header_buttons(day_mode):
return _header_buttons % (
"btn-primary" if day_mode == constants.BY_WEEK else "btn-secondary",
"btn-primary" if day_mode == constants.BY_DAY else "btn-secondary"
)
def _get_settings_container(oob):
return ("""<div id="settings-container">""" if not oob
else """<div id="settings-container" hx-swap-oob="true">""") + "%s</div>"
def get_settings_with_id(day_mode, oob = False):
return _get_settings_container(oob) % get_settings(day_mode)
def get_settings(day_mode):
return get_byweek_settings() if day_mode == constants.BY_WEEK else "WIP"
def get_byweek_settings():
return _by_week_content % get_byweek_settings_content()
def get_byweek_settings_content():
content = ""
i = 0
for setting in globals.by_week_settings:
content += _format_edit_line(setting.time.format(), setting.temp, i)
i += 1
return content