commit
c20702b299
4 changed files with 80 additions and 40 deletions
11
app/static/js/customThemes.js
Normal file
11
app/static/js/customThemes.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
function changeTheme() {
|
||||||
|
// Get the selected theme for the dropdown
|
||||||
|
var themes_select = document.getElementById("themes_select");
|
||||||
|
var selected_theme = themes_select.options[themes_select.selectedIndex].text;
|
||||||
|
|
||||||
|
// Update the theme cookie
|
||||||
|
document.cookie = "theme=" + escape(selected_theme) + "; Path=/;"
|
||||||
|
|
||||||
|
// Finally reload the page to let the new theme take effect
|
||||||
|
location.reload();
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ Haldis - {{ active_page|capitalize }}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
<script type="text/javascript" src="{{ url_for('static', filename='js/theme.js') }}"></script>
|
<script type="text/javascript" src="{{ url_for('static', filename='js/theme.js') }}"></script>
|
||||||
<script type="text/javascript" src="{{ url_for('static', filename='js/timer.js') }}"></script>
|
<script type="text/javascript" src="{{ url_for('static', filename='js/timer.js') }}"></script>
|
||||||
|
<script type="text/javascript" src="{{ url_for('static', filename='js/customThemes.js') }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block navbar %}
|
{% block navbar %}
|
||||||
|
|
|
@ -6,4 +6,13 @@
|
||||||
<h3>Themes</h3>
|
<h3>Themes</h3>
|
||||||
<p><a class="changeThemeButton" id="customTheme">enable custom themes</a></p>
|
<p><a class="changeThemeButton" id="customTheme">enable custom themes</a></p>
|
||||||
<p><a class="changePerformance" id="highPerformance">enable high performance</a></p>
|
<p><a class="changePerformance" id="highPerformance">enable high performance</a></p>
|
||||||
|
<p>
|
||||||
|
<!-- Style attribute due to missing css -->
|
||||||
|
<select name="themes" id="themes_select" onchange="changeTheme()" style="width: 300px;">
|
||||||
|
<option disabled selected value> -- select a theme -- </option>
|
||||||
|
{% for theme in themes_list %}
|
||||||
|
<option value="{{ theme.optid }}">{{ theme }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -5,7 +5,7 @@ from datetime import datetime, timedelta
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from flask import Flask, render_template, make_response
|
from flask import Flask, render_template, make_response
|
||||||
from flask import request
|
from flask import request, jsonify
|
||||||
from flask import Blueprint, abort
|
from flask import Blueprint, abort
|
||||||
from flask import current_app as app
|
from flask import current_app as app
|
||||||
from flask import send_from_directory, url_for
|
from flask import send_from_directory, url_for
|
||||||
|
@ -30,54 +30,73 @@ def home() -> str:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_css_dict(css_path):
|
||||||
|
themes_dict = dict()
|
||||||
|
|
||||||
|
# Open the YAML file with all the themes.
|
||||||
|
path = os.path.join(app.root_path, "views/themes.yml")
|
||||||
|
with open(path, 'r') as stream:
|
||||||
|
data = yaml.safe_load(stream)
|
||||||
|
# Build a dictionary from the YAML file with all the themes and their attributes.
|
||||||
|
themes = {}
|
||||||
|
for item in data:
|
||||||
|
key = list(item.keys())[0]
|
||||||
|
themes[key] = item[key]
|
||||||
|
|
||||||
|
# Get the current date.
|
||||||
|
current_date = datetime.now()
|
||||||
|
current_year = current_date.year
|
||||||
|
|
||||||
|
# Check each theme in the dictionary and return the first one that is "correct"
|
||||||
|
for key, theme in themes.items():
|
||||||
|
if theme['type'] == 'static-date':
|
||||||
|
start_day, start_month = theme['start'].split('/')
|
||||||
|
start_date = datetime(year=current_year, day=int(
|
||||||
|
start_day), month=int(start_month))
|
||||||
|
|
||||||
|
end_day, end_month = theme['end'].split('/')
|
||||||
|
if int(start_month) > int(end_month):
|
||||||
|
current_year += 1
|
||||||
|
end_date = datetime(
|
||||||
|
year=current_year, day=int(end_day), month=int(end_month))
|
||||||
|
|
||||||
|
if start_date <= current_date <= end_date:
|
||||||
|
path = os.path.join(app.root_path, css_path, theme['file'])
|
||||||
|
themes_dict[key] = path
|
||||||
|
themes_dict['darkmode'] = os.path.join(
|
||||||
|
app.root_path, "static/css/themes/lowPerformance/darkmode.css")
|
||||||
|
themes_dict['lightmode'] = os.path.join(
|
||||||
|
app.root_path, "static/css/themes/lowPerformance/lightmode.css")
|
||||||
|
|
||||||
|
return themes_dict
|
||||||
|
|
||||||
|
|
||||||
|
# @general_bp.route("/css-list")
|
||||||
|
def css_list():
|
||||||
|
if request.cookies.get('performance', '') == 'highPerformance':
|
||||||
|
css_path = 'static/css/themes/highPerformance/'
|
||||||
|
else:
|
||||||
|
css_path = 'static/css/themes/lowPerformance/'
|
||||||
|
return list(get_css_dict(css_path).keys())
|
||||||
|
|
||||||
|
|
||||||
@general_bp.route("/css")
|
@general_bp.route("/css")
|
||||||
def css():
|
def css():
|
||||||
"Generate the css"
|
"Generate the css"
|
||||||
if request.cookies.get('performance', '') == 'highPerformance':
|
if request.cookies.get('performance', '') == 'highPerformance':
|
||||||
cssPath = 'static/css/themes/highPerformance/'
|
css_path = 'static/css/themes/highPerformance/'
|
||||||
else:
|
else:
|
||||||
cssPath = 'static/css/themes/lowPerformance/'
|
css_path = 'static/css/themes/lowPerformance/'
|
||||||
|
|
||||||
cookie_theme = request.cookies.get('theme', '')
|
cookie_theme = request.cookies.get('theme', '')
|
||||||
if cookie_theme == 'customTheme':
|
|
||||||
# Here seasonal themes will be returned; matching the current date.
|
|
||||||
|
|
||||||
# Open the YAML file with all the themes.
|
themes_dict = get_css_dict(css_path)
|
||||||
path = os.path.join(app.root_path, "views/themes.yml")
|
|
||||||
with open(path, 'r') as stream:
|
|
||||||
data = yaml.safe_load(stream)
|
|
||||||
# Build a dictionary from the YAML file with all the themes and their attributes.
|
|
||||||
themes = {}
|
|
||||||
for item in data:
|
|
||||||
key = list(item.keys())[0]
|
|
||||||
themes[key] = item[key]
|
|
||||||
|
|
||||||
# Get the current date.
|
# TODO: Fix to work with default cookie value [customTheme]
|
||||||
current_date = datetime.now()
|
if cookie_theme == "customTheme":
|
||||||
current_year = current_date.year
|
path = f"{css_path}ligtmode.css"
|
||||||
|
|
||||||
# Check each theme in the dictionary and return the first one that is "correct"
|
|
||||||
for theme in themes.values():
|
|
||||||
if theme['type'] == 'static-date':
|
|
||||||
start_day, start_month = theme['start'].split('/')
|
|
||||||
start_date = datetime(year=current_year, day=int(
|
|
||||||
start_day), month=int(start_month))
|
|
||||||
|
|
||||||
end_day, end_month = theme['end'].split('/')
|
|
||||||
if int(start_month) > int(end_month):
|
|
||||||
current_year += 1
|
|
||||||
end_date = datetime(
|
|
||||||
year=current_year, day=int(end_day), month=int(end_month))
|
|
||||||
|
|
||||||
if start_date <= current_date <= end_date:
|
|
||||||
path = os.path.join(app.root_path, cssPath, theme['file'])
|
|
||||||
break
|
|
||||||
elif cookie_theme == 'darkmode':
|
|
||||||
path = os.path.join(
|
|
||||||
app.root_path, "static/css/themes/lowPerformance/darkmode.css")
|
|
||||||
else:
|
else:
|
||||||
path = os.path.join(
|
path = themes_dict[cookie_theme]
|
||||||
app.root_path, "static/css/themes/lowPerformance/lightmode.css")
|
|
||||||
|
|
||||||
f = open(path)
|
f = open(path)
|
||||||
response = make_response(f.read())
|
response = make_response(f.read())
|
||||||
|
@ -119,7 +138,7 @@ def about() -> str:
|
||||||
@login_required
|
@login_required
|
||||||
def profile() -> str:
|
def profile() -> str:
|
||||||
"Generate the profile view"
|
"Generate the profile view"
|
||||||
return render_template("profile.html")
|
return render_template("profile.html", themes_list=css_list())
|
||||||
|
|
||||||
|
|
||||||
@general_bp.route("/favicon.ico")
|
@general_bp.route("/favicon.ico")
|
||||||
|
|
Loading…
Reference in a new issue