From 8a9842c2196b3dbb0594ef2078d6d9b1516ac3f1 Mon Sep 17 00:00:00 2001 From: Fabio Caccamo Date: Wed, 24 May 2017 11:44:46 +0200 Subject: [PATCH] Added possibility to customize the default logo color --- admin_interface/admin.py | 2 +- admin_interface/data/logo-django.svg | 11 ------- .../migrations/0003_add_logo_color.py | 25 +++++++++++++++ admin_interface/models.py | 31 ++----------------- .../templates/admin/base_site.html | 8 +++-- .../admin_interface/css/admin-interface.css | 7 +++++ tests/tests.py | 19 ------------ 7 files changed, 42 insertions(+), 61 deletions(-) delete mode 100644 admin_interface/data/logo-django.svg create mode 100644 admin_interface/migrations/0003_add_logo_color.py diff --git a/admin_interface/admin.py b/admin_interface/admin.py index 78656aa..60eba78 100644 --- a/admin_interface/admin.py +++ b/admin_interface/admin.py @@ -17,7 +17,7 @@ class ThemeAdmin(admin.ModelAdmin): }), ('Logo', { 'classes': ('wide', ), - 'fields': ('logo', 'logo_visible', ) + 'fields': ('logo', 'logo_color', 'logo_visible', ) }), ('Title', { 'classes': ('wide', ), diff --git a/admin_interface/data/logo-django.svg b/admin_interface/data/logo-django.svg deleted file mode 100644 index 75782c0..0000000 --- a/admin_interface/data/logo-django.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - logo-django - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - - - \ No newline at end of file diff --git a/admin_interface/migrations/0003_add_logo_color.py b/admin_interface/migrations/0003_add_logo_color.py new file mode 100644 index 0000000..2c1ab17 --- /dev/null +++ b/admin_interface/migrations/0003_add_logo_color.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import colorfield.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('admin_interface', '0002_add_related_modal'), + ] + + operations = [ + migrations.AddField( + model_name='theme', + name='logo_color', + field=colorfield.fields.ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', max_length=10, verbose_name='logo color'), + ), + migrations.AlterField( + model_name='theme', + name='logo', + field=models.FileField(blank=True, help_text='(leave blank to use the default Django logo)', upload_to='admin-interface/logo/'), + ), + ] diff --git a/admin_interface/models.py b/admin_interface/models.py index c9e7fc1..2810e61 100644 --- a/admin_interface/models.py +++ b/admin_interface/models.py @@ -1,15 +1,13 @@ # -*- coding: utf-8 -*- + from __future__ import unicode_literals -from django.core.files import File from django.db import models from django.db.models.signals import post_delete, post_save from django.utils.encoding import python_2_unicode_compatible, force_text from colorfield.fields import ColorField -import os - @python_2_unicode_compatible class Theme(models.Model): @@ -41,8 +39,6 @@ class Theme(models.Model): if not default_obj_created and default_obj_active: default_obj.set_active() - default_obj.set_default_logo() - obj = objs_active_qs.last() objs_active_count = objs_active_qs.count() @@ -57,7 +53,8 @@ class Theme(models.Model): title = models.CharField( max_length = 50, default = 'Django administration', blank = True ) title_visible = models.BooleanField( default = True, verbose_name = 'visible' ) - logo = models.FileField( upload_to = 'admin-interface/logo/', blank = True ) + logo = models.FileField( upload_to = 'admin-interface/logo/', blank = True, help_text = '(leave blank to use the default Django logo)' ) + logo_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'logo color' ) logo_visible = models.BooleanField( default = True, verbose_name = 'visible' ) css_header_background_color = ColorField( blank = True, default = '#0C4B33', help_text = '#0C4B33', verbose_name = 'background color' ) @@ -108,28 +105,6 @@ class Theme(models.Model): self.active = True self.save() - def set_default_logo(self): - - if self.logo: - # django-storages compatibility - try: - if os.path.isfile(self.logo.path): - return - except NotImplementedError: - return - - logo_filename = 'logo-django.svg' - logo_path = os.path.normpath(os.path.dirname(__file__) + '/data/' + logo_filename) - logo_file = open(logo_path) - - self.logo = File(logo_file, logo_filename) - - post_save.disconnect(Theme.post_save_handler, sender = Theme) - self.save() - post_save.connect(Theme.post_save_handler, sender = Theme) - - logo_file.close() - class Meta: app_label = 'admin_interface' diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html index 284487f..0c5d20c 100644 --- a/admin_interface/templates/admin/base_site.html +++ b/admin_interface/templates/admin/base_site.html @@ -44,8 +44,12 @@ {% block branding %} {% get_admin_interface_theme as theme %}

- {% if theme.logo_visible and theme.logo %} - + {% if theme.logo_visible %} + {% if theme.logo %} + + {% else %} + + {% endif %} {% endif %} {% if theme.title_visible %} {% if theme.title %}{% trans theme.title %}{% else %}{% trans 'Django administration' %}{% endif %} diff --git a/admin_interface/templates/admin_interface/css/admin-interface.css b/admin_interface/templates/admin_interface/css/admin-interface.css index 7c2a096..e586840 100644 --- a/admin_interface/templates/admin_interface/css/admin-interface.css +++ b/admin_interface/templates/admin_interface/css/admin-interface.css @@ -5,6 +5,13 @@ .admin-interface #branding h1 { color:{{ theme.css_header_title_color }}; + +.admin-interface #branding h1 .logo.default { + background-color: transparent; + background-repeat: no-repeat; + background-position: center center; + background-size: 104px 36px; + background-image: url("data:image/svg+xml;utf8,"); } .admin-interface #header #user-tools a { diff --git a/tests/tests.py b/tests/tests.py index b0caeb0..baddbd2 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -4,7 +4,6 @@ from django.conf import settings from django.test import TestCase from django.template import Context, Template -import os import random import shutil @@ -77,24 +76,6 @@ class AdminInterfaceTestCase(TestCase): Theme.objects.filter( pk = Theme.get_active_theme().pk ).delete() self.__test_active_theme() - def test_default_theme_logo_created_if_deleted(self): - - Theme.objects.all().delete() - theme = Theme.get_active_theme() - theme.logo = '' - theme.save() - theme = Theme.get_active_theme() - self.assertNotEqual( theme.logo, None ) - - def test_default_theme_logo_not_created_if_not_deleted(self): - - Theme.objects.all().delete() - theme = Theme.get_active_theme() - self.assertNotEqual( theme.logo, None ) - logo_url = theme.logo.url - theme = Theme.get_active_theme() - self.assertEqual( theme.logo.url, logo_url ) - def test_last_theme_activated_on_multiple_themes_created(self): Theme.objects.all().delete()