diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index 8eb26d97d..d84ccbd46 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -78,7 +78,7 @@ + style="{{ theme_values.sticky_nav }}; background-color: {{ theme_values.nav_bg_color }}"> {% if not request.user.userpreference.left_handed %} {% if not request.user.is_authenticated or request.user.userpreference.nav_show_logo %} diff --git a/cookbook/templatetags/theming_tags.py b/cookbook/templatetags/theming_tags.py index eb3d5ca63..f35096fd5 100644 --- a/cookbook/templatetags/theming_tags.py +++ b/cookbook/templatetags/theming_tags.py @@ -10,6 +10,17 @@ register = template.Library() @register.simple_tag def theme_values(request): + space = None + if request.space: + space = request.space + if not request.user.is_authenticated and UNAUTHENTICATED_THEME_FROM_SPACE > 0: + with scopes_disabled(): + space = Space.objects.filter(id=UNAUTHENTICATED_THEME_FROM_SPACE).first() + + return get_theming_values(space, request.user) + + +def get_theming_values(space, user): themes = { UserPreference.BOOTSTRAP: 'themes/bootstrap.min.css', UserPreference.FLATLY: 'themes/flatly.min.css', @@ -34,21 +45,19 @@ def theme_values(request): 'nav_logo': static('assets/brand_logo.png'), 'nav_bg_color': '#ddbf86', 'nav_text_class': 'navbar-light', + 'sticky_nav': 'position: sticky; top: 0; left: 0; z-index: 1000;', } - space = None - if request.space: - space = request.space - if not request.user.is_authenticated and UNAUTHENTICATED_THEME_FROM_SPACE > 0: - with scopes_disabled(): - space = Space.objects.filter(id=UNAUTHENTICATED_THEME_FROM_SPACE).first() - if request.user.is_authenticated: - if request.user.userpreference.theme in themes: - tv['theme'] = static(themes[request.user.userpreference.theme]) - if request.user.userpreference.nav_bg_color: - tv['nav_bg_color'] = request.user.userpreference.nav_bg_color - if request.user.userpreference.nav_text_color and request.user.userpreference.nav_text_color in nav_text_type_mapping: - tv['nav_text_class'] = request.user.userpreference.nav_text_color + + if user.is_authenticated: + if user.userpreference.theme in themes: + tv['theme'] = static(themes[user.userpreference.theme]) + if user.userpreference.nav_bg_color: + tv['nav_bg_color'] = user.userpreference.nav_bg_color + if user.userpreference.nav_text_color and user.userpreference.nav_text_color in nav_text_type_mapping: + tv['nav_text_class'] = nav_text_type_mapping[user.userpreference.nav_text_color] + if not user.userpreference.nav_sticky: + tv['sticky_nav'] = '' if space: for logo in list(tv.keys()): @@ -65,12 +74,3 @@ def theme_values(request): if space.nav_text_color and space.nav_text_color in nav_text_type_mapping: tv['nav_text_class'] = nav_text_type_mapping[space.nav_text_color] return tv - - -@register.simple_tag -def sticky_nav(request): - if (not request.user.is_authenticated and STICKY_NAV_PREF_DEFAULT) or ( - request.user.is_authenticated and request.user.userpreference.nav_sticky): - return 'position: sticky; top: 0; left: 0; z-index: 1000;' - else: - return '' diff --git a/cookbook/tests/other/test_theming.py b/cookbook/tests/other/test_theming.py new file mode 100644 index 000000000..d9aa0189b --- /dev/null +++ b/cookbook/tests/other/test_theming.py @@ -0,0 +1,36 @@ +from django.contrib import auth +from django.templatetags.static import static + +from cookbook.models import Space, UserPreference, UserFile +from cookbook.templatetags.theming_tags import theme_values, get_theming_values + + +def test_theming_function(space_1, u1_s1): + user = auth.get_user(u1_s1) + # uf = UserFile.objects.create(name='test', space=space_1, created_by=user) #TODO add file tests + + assert get_theming_values(space_1, user)['theme'] == static('themes/tandoor.min.css') + assert get_theming_values(space_1, user)['nav_bg_color'] == '#ddbf86' + assert get_theming_values(space_1, user)['nav_text_class'] == 'navbar-light' + assert get_theming_values(space_1, user)['nav_logo'] == static('assets/brand_logo.png') + assert get_theming_values(space_1, user)['sticky_nav'] == 'position: sticky; top: 0; left: 0; z-index: 1000;' + + user.userpreference.theme = UserPreference.TANDOOR_DARK + user.userpreference.nav_bg_color = '#ffffff' + user.userpreference.nav_text_color = UserPreference.LIGHT + user.userpreference.nav_sticky = False + user.userpreference.save() + + assert get_theming_values(space_1, user)['theme'] == static('themes/tandoor_dark.min.css') + assert get_theming_values(space_1, user)['nav_bg_color'] == '#ffffff' + assert get_theming_values(space_1, user)['nav_text_class'] == 'navbar-dark' + assert get_theming_values(space_1, user)['sticky_nav'] == '' + + space_1.space_theme = Space.BOOTSTRAP + space_1.nav_bg_color = '#000000' + space_1.nav_text_color = UserPreference.DARK + space_1.save() + + assert get_theming_values(space_1, user)['theme'] == static('themes/bootstrap.min.css') + assert get_theming_values(space_1, user)['nav_bg_color'] == '#000000' + assert get_theming_values(space_1, user)['nav_text_class'] == 'navbar-light'