Merge pull request #168 from ZeusWPI/fix-multiple-css

Fix multiple css
This commit is contained in:
redfast00 2019-12-19 05:36:23 +01:00 committed by GitHub
commit c20702b299
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 80 additions and 40 deletions

View 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();
}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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")