From 4302dec2e08a42c2de1d1fa85b9b61060b1c6125 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Tue, 20 Aug 2019 19:08:07 +0200 Subject: [PATCH] Implement bootstrap colour theming from settings. Closes: #22. Co-authored-by: mirabilos <thorsten.glaser@teckids.org> --- biscuit/core/settings.py | 23 ++++++++++++++++++++++ biscuit/core/static/bootstrap_colours.scss | 12 +++++++++++ biscuit/core/templates/core/base.html | 3 ++- biscuit/core/util/sass_helpers.py | 8 ++++++++ local.cfg | 9 +++++++++ pyproject.toml | 3 +++ 6 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 biscuit/core/static/bootstrap_colours.scss create mode 100644 biscuit/core/util/sass_helpers.py diff --git a/biscuit/core/settings.py b/biscuit/core/settings.py index 289d3dcd0..34e10eab0 100644 --- a/biscuit/core/settings.py +++ b/biscuit/core/settings.py @@ -26,6 +26,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'django_global_request', + 'sass_processor', 'easyaudit', 'bootstrap4', 'fa', @@ -38,6 +39,20 @@ INSTALLED_APPS = [ INSTALLED_APPS += get_app_packages() +STATICFILES_FINDERS = [ + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'sass_processor.finders.CssFinder' +] + +SASS_PROCESSOR_AUTO_INCLUDE = False +SASS_PROCESSOR_CUSTOM_FUNCTIONS = { + 'get-colour': 'biscuit.core.util.sass_helpers.get_colour', +} +SASS_PROCESSOR_INCLUDE_DIRS = [ + LocalSetting(default='/usr/share/sass/bootstrap') +] + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -150,6 +165,14 @@ ANY_JS = { } } +COLOUR_PRIMARY = LocalSetting(default='#007bff') +COLOUR_SECONDARY = LocalSetting(default='#6c757d') +COLOUR_SUCCESS = LocalSetting(default='#28a745') +COLOUR_INFO = LocalSetting(default='#17a2b8') +COLOUR_WARNING = LocalSetting(default='#ffc107') +COLOUR_DANGER = LocalSetting(default='#dc3545') +COLOUR_LIGHT = LocalSetting(default='#f8f9fa') +COLOUR_DARK = LocalSetting(default='#343a40') _settings = load_and_check_settings(globals()) globals().update(_settings) diff --git a/biscuit/core/static/bootstrap_colours.scss b/biscuit/core/static/bootstrap_colours.scss new file mode 100644 index 000000000..faa508a70 --- /dev/null +++ b/biscuit/core/static/bootstrap_colours.scss @@ -0,0 +1,12 @@ +$theme-colors: ( + "primary": get-colour(get-setting(COLOUR_PRIMARY)), + "secondary": get-colour(get-setting(COLOUR_SECONDARY)), + "success": get-colour(get-setting(COLOUR_SUCCESS)), + "info": get-colour(get-setting(COLOUR_INFO)), + "warning": get-colour(get-setting(COLOUR_WARNING)), + "danger": get-colour(get-setting(COLOUR_DANGER)), + "light": get-colour(get-setting(COLOUR_LIGHT)), + "dark": get-colour(get-setting(COLOUR_DARK)), +); + +@import "bootstrap"; diff --git a/biscuit/core/templates/core/base.html b/biscuit/core/templates/core/base.html index 09124833c..17db1f12e 100644 --- a/biscuit/core/templates/core/base.html +++ b/biscuit/core/templates/core/base.html @@ -1,12 +1,13 @@ {# -*- engine:django -*- #} {% extends "bootstrap4/bootstrap4.html" %} -{% load bootstrap4 menu_generator staticfiles font_awesome any_js %} +{% load bootstrap4 menu_generator staticfiles font_awesome any_js sass_tags %} {% block bootstrap4_title %}BiscuIT School Information System{% endblock %} {% block bootstrap4_extra_head %} {% fa_css %} {% include_css "DataTables-Bootstrap4" %} + <link rel="stylesheet" href="{% sass_src 'bootstrap_colours.scss' %}" /> <link rel="stylesheet" href="{% static 'css/style.css' %}" /> <link rel="shortcut icon" href="#" /> {% endblock %} diff --git a/biscuit/core/util/sass_helpers.py b/biscuit/core/util/sass_helpers.py new file mode 100644 index 000000000..ed864d07f --- /dev/null +++ b/biscuit/core/util/sass_helpers.py @@ -0,0 +1,8 @@ +from colour import web2hex +from sass import SassColor + +def get_colour(html_colour): + rgb = web2hex(html_colour, force_long=True)[1:] + r, g, b = int(rgb[0:2], 16), int(rgb[2:4], 16), int(rgb[4:6], 16) + + return SassColor(r, g, b, 255) diff --git a/local.cfg b/local.cfg index 842f1e4a1..d0c6ff53f 100644 --- a/local.cfg +++ b/local.cfg @@ -16,3 +16,12 @@ BOOTSTRAP4.popper_url = "/javascript/popper.js/umd/popper.min.js" ANY_JS.DataTables-Bootstrap4.css_url = "/javascript/jquery-datatables/css/dataTables.bootstrap4.min.css" ANY_JS.DataTables-Bootstrap4.js_url = "/javascript/jquery-datatables/dataTables.bootstrap4.min.js" ANY_JS.DataTables.js_url = "/javascript/jquery-datatables/jquery.dataTables.js" +COLOUR_PRIMARY = "#007bff" +COLOUR_SECONDARY = "#6c757d" +COLOUR_SUCCESS = "#28a745" +COLOUR_INFO = "#17a2b8" +COLOUR_WARNING = "#ffc107" +COLOUR_DANGER = "#dc3545" +COLOUR_LIGHT = "#f8f9fa" +COLOUR_DARK = "#343a40" +SASS_PROCESSOR_INCLUDE_DIRS.0 = "/usr/share/sass/bootstrap" diff --git a/pyproject.toml b/pyproject.toml index 9205ca115..5d2e5d2ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,9 @@ django-tables2 = "^2.1" Pillow = "^6.1" django-phonenumber-field = {version = "^3.0", extras = ["phonenumbers"]} django-local-settings = {version = "^1.0-alpha.1", allows-prereleases = true} +django-sass-processor = "^0.7.3" +libsass = "^0.19.2" +colour = "^0.1.5" [tool.poetry.dev-dependencies] sphinx = "^2.1" -- GitLab