From 25528e090797858a53f540f4465abd0edb6f813e Mon Sep 17 00:00:00 2001 From: Fabio Caccamo Date: Mon, 26 Oct 2015 22:36:53 +0100 Subject: [PATCH] Added sources --- admin_interface/__init__.py | 6 + admin_interface/admin.py | 51 +++ admin_interface/apps.py | 13 + admin_interface/data/logo-django.svg | 11 + admin_interface/fixtures/initial_data.json | 1 + admin_interface/models.py | 103 +++++ .../templates/admin/base_site.html | 383 ++++++++++++++++++ admin_interface/templatetags/__init__.py | 0 .../templatetags/admin_interface_tags.py | 25 ++ admin_interface/version.py | 4 + 10 files changed, 597 insertions(+) create mode 100644 admin_interface/__init__.py create mode 100644 admin_interface/admin.py create mode 100644 admin_interface/apps.py create mode 100644 admin_interface/data/logo-django.svg create mode 100644 admin_interface/fixtures/initial_data.json create mode 100644 admin_interface/models.py create mode 100644 admin_interface/templates/admin/base_site.html create mode 100644 admin_interface/templatetags/__init__.py create mode 100644 admin_interface/templatetags/admin_interface_tags.py create mode 100644 admin_interface/version.py diff --git a/admin_interface/__init__.py b/admin_interface/__init__.py new file mode 100644 index 0000000..676811c --- /dev/null +++ b/admin_interface/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- + +from admin_interface.version import __version__ + +default_app_config = 'admin_interface.apps.AdminInterfaceConfig' + diff --git a/admin_interface/admin.py b/admin_interface/admin.py new file mode 100644 index 0000000..f845d05 --- /dev/null +++ b/admin_interface/admin.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +from django.contrib import admin + +from admin_interface.models import Theme + + +class ThemeAdmin(admin.ModelAdmin): + + list_display = ('name', 'active', ) + list_editable = ('active', ) + + fieldsets = ( + (None, { + 'classes': ('wide', ), + 'fields': ('name', 'active', ) + }), + ('Logo', { + 'classes': ('wide', ), + 'fields': ('logo', 'logo_visible', ) + }), + ('Title', { + 'classes': ('wide', ), + 'fields': ('title', 'title_visible', ) + }), + ('Header', { + 'classes': ('wide', ), + 'fields': ('css_header_background_color', 'css_header_title_color', 'css_header_text_color', 'css_header_link_color', 'css_header_link_hover_color', ) + }), + ('Breadcrumbs / Module headers', { + 'classes': ('wide', ), + 'fields': ('css_module_background_color', 'css_module_text_color', 'css_module_link_color', 'css_module_link_hover_color', 'css_module_rounded_corners', ) + }), + ('Generic Links', { + 'classes': ('wide', ), + 'fields': ('css_generic_link_color', 'css_generic_link_hover_color', ) + }), + ('Save Buttons', { + 'classes': ('wide', ), + 'fields': ('css_save_button_background_color', 'css_save_button_background_hover_color', 'css_save_button_text_color', ) + }), + ('Delete Buttons', { + 'classes': ('wide', ), + 'fields': ('css_delete_button_background_color', 'css_delete_button_background_hover_color', 'css_delete_button_text_color', ) + }), + ) + + save_on_top = True + +admin.site.register(Theme, ThemeAdmin) + diff --git a/admin_interface/apps.py b/admin_interface/apps.py new file mode 100644 index 0000000..f0f7a9a --- /dev/null +++ b/admin_interface/apps.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from django.apps import AppConfig + + +class AdminInterfaceConfig(AppConfig): + + name = 'admin_interface' + verbose_name = 'Admin Interface' + + def ready(self): + pass + \ No newline at end of file diff --git a/admin_interface/data/logo-django.svg b/admin_interface/data/logo-django.svg new file mode 100644 index 0000000..75782c0 --- /dev/null +++ b/admin_interface/data/logo-django.svg @@ -0,0 +1,11 @@ + + + logo-django + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + \ No newline at end of file diff --git a/admin_interface/fixtures/initial_data.json b/admin_interface/fixtures/initial_data.json new file mode 100644 index 0000000..fd91d80 --- /dev/null +++ b/admin_interface/fixtures/initial_data.json @@ -0,0 +1 @@ +[{"fields": {"css_save_button_text_color": "#FFFFFF", "css_module_link_hover_color": "#C9F0DD", "css_delete_button_text_color": "#FFFFFF", "css_save_button_background_hover_color": "#0C3C26", "css_module_rounded_corners": true, "logo": "", "css_module_background_color": "#44B78B", "title": "Django administration", "css_header_link_color": "#FFFFFF", "css_delete_button_background_hover_color": "#A41515", "css": "", "css_module_link_color": "#FFFFFF", "css_module_text_color": "#FFFFFF", "css_generic_link_hover_color": "#156641", "css_save_button_background_color": "#0C4B33", "logo_visible": true, "active": false, "css_header_background_color": "#0C4B33", "name": "Django", "css_generic_link_color": "#0C3C26", "css_delete_button_background_color": "#BA2121", "css_header_text_color": "#44B78B", "css_header_link_hover_color": "#C9F0DD", "css_header_title_color": "#F5DD5D", "title_visible": true}, "model": "admin_interface.theme", "pk": 1}] \ No newline at end of file diff --git a/admin_interface/models.py b/admin_interface/models.py new file mode 100644 index 0000000..7595d06 --- /dev/null +++ b/admin_interface/models.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +from django.core.files import File +from django.db import models +from django.db.models.signals import post_delete, post_save + +from colorfield.fields import ColorField + +import os + + +class Theme(models.Model): + + @staticmethod + def post_delete_handler(instance, **kwargs): + Theme.get_or_create_default_theme() + + @staticmethod + def post_save_handler(instance, created, **kwargs): + instance.set_active(instance.active) + Theme.get_or_create_default_theme() + + @staticmethod + def get_or_create_default_theme(): + + obj_active = (True if len(list(Theme.objects.filter(active = True))) == 0 else False) + obj, obj_created = Theme.objects.get_or_create(pk = '1', defaults = { 'active':obj_active }) + + if not obj.logo: + obj.set_default_logo() + + if not obj_created and obj_active: + obj.set_active(True) + + return (obj, obj_created, ) + + name = models.CharField( max_length = 50, default = 'Django' ) + active = models.BooleanField( default = True ) + + 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_visible = models.BooleanField( default = True, verbose_name = 'visible' ) + + css_header_background_color = ColorField( blank = True, default = '#0C4B33', help_text = '#0C4B33', verbose_name = 'background color' ) + css_header_title_color = ColorField( blank = True, default = '#F5DD5D', help_text = '#F5DD5D', verbose_name = 'title color' ) + css_header_text_color = ColorField( blank = True, default = '#44B78B', help_text = '#44B78B', verbose_name = 'text color' ) + css_header_link_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'link color' ) + css_header_link_hover_color = ColorField( blank = True, default = '#C9F0DD', help_text = '#C9F0DD', verbose_name = 'link hover color' ) + + css_module_background_color = ColorField( blank = True, default = '#44B78B', help_text = '#44B78B', verbose_name = 'background color' ) + css_module_text_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'text color' ) + css_module_link_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'link color' ) + css_module_link_hover_color = ColorField( blank = True, default = '#C9F0DD', help_text = '#C9F0DD', verbose_name = 'link hover color' ) + css_module_rounded_corners = models.BooleanField( default = True, verbose_name = 'rounded corners' ) + + css_generic_link_color = ColorField( blank = True, default = '#0C3C26', help_text = '#0C3C26', verbose_name = 'link color' ) + css_generic_link_hover_color = ColorField( blank = True, default = '#156641', help_text = '#156641', verbose_name = 'link hover color' ) + + css_save_button_background_color = ColorField( blank = True, default = '#0C4B33', help_text = '#0C4B33', verbose_name = 'background color' ) + css_save_button_background_hover_color = ColorField( blank = True, default = '#0C3C26', help_text = '#0C3C26', verbose_name = 'background hover color' ) + css_save_button_text_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'text color' ) + + css_delete_button_background_color = ColorField( blank = True, default = '#BA2121', help_text = '#BA2121', verbose_name = 'background color' ) + css_delete_button_background_hover_color = ColorField( blank = True, default = '#A41515', help_text = '#A41515', verbose_name = 'background hover color' ) + css_delete_button_text_color = ColorField( blank = True, default = '#FFFFFF', help_text = '#FFFFFF', verbose_name = 'text color' ) + + css = models.TextField( blank = True ) + + def set_active(self, value): + + if value: + Theme.objects.exclude(pk = self.pk).update(active = False) + Theme.objects.filter(pk = self.pk).update(active = True) + else: + Theme.objects.filter(pk = self.pk).update(active = False) + + def set_default_logo(self): + + logo_path = os.path.normpath(os.path.dirname(__file__) + '/data/logo-django.svg') + logo_file = open(logo_path) + + self.logo = File(logo_file) + self.save() + + logo_file.close() + + class Meta: + + app_label = 'admin_interface' + + verbose_name = 'Theme' + verbose_name_plural = 'Themes' + + def __unicode__(self): + + return unicode(u'%s' % (self.name, )) + + +post_delete.connect(Theme.post_delete_handler, sender = Theme) +post_save.connect(Theme.post_save_handler, sender = Theme) + diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html new file mode 100644 index 0000000..2dc421d --- /dev/null +++ b/admin_interface/templates/admin/base_site.html @@ -0,0 +1,383 @@ +{% extends "admin/base.html" %} +{% load i18n staticfiles admin_interface_tags %} + +{% block extrastyle %} +{% get_admin_interface_theme as theme %} + +{% endblock %} + +{% block extrahead %} +{% endblock %} + +{% block branding %} +{% get_admin_interface_theme as theme %} +

+ {% if theme.active %} + {% if theme.logo_visible and theme.logo %} + + {% endif %} + {% if theme.title_visible %} + {% if theme.title %}{% trans theme.title %}{% else %}{% trans 'Django administration' %}{% endif %} + {% endif %} + {% else %} + {% trans 'Django administration' %} + {% endif %} +

+{% endblock %} + +{% block sidebar %} +{% endblock %} diff --git a/admin_interface/templatetags/__init__.py b/admin_interface/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin_interface/templatetags/admin_interface_tags.py b/admin_interface/templatetags/admin_interface_tags.py new file mode 100644 index 0000000..54fc272 --- /dev/null +++ b/admin_interface/templatetags/admin_interface_tags.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from django import template + +from admin_interface.models import Theme + + +register = template.Library() + + +@register.assignment_tag(takes_context = True) +def get_admin_interface_theme(context): + + obj_qs = Theme.objects.filter(active = True)[:1] + obj_ls = list(obj_qs) + obj = None + + if len(obj_ls): + obj = obj_ls[0] + else: + obj, obj_created = Theme.get_or_create_default_theme() + + return obj + + \ No newline at end of file diff --git a/admin_interface/version.py b/admin_interface/version.py new file mode 100644 index 0000000..7865512 --- /dev/null +++ b/admin_interface/version.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +__version__ = '0.1.0' +