themes/__init__.py

162 líneas
4.7 KiB
Python

from django.conf import settings
from django.templatetags.static import static
from django.forms.models import model_to_dict
from django.utils.translation import gettext as _
import time
available_themes = [
('default', 'Default'),
('clear-red', 'Clear Red'),
('clear-green', 'Clear Green'),
('clear-blue', 'Clear Blue'),
('clear-digits', 'Clear Digits'),
]
default_theme = 'default'
class ThemeSettings(object):
def __init__(self):
from .models import GetSettings
s = GetSettings()
for attr_name in model_to_dict(s):
attr = getattr(s, attr_name)
if attr_name == 'page_theme' and attr == 'default':
setattr(self, attr_name, settings.DEFAULT_THEME)
else:
setattr(self, attr_name, attr)
class bar(list):
def __init__(self, turn_around=False):
self.time_measurement = time_measurement()
list.__init__(self)
self.turn_around = turn_around
self.debug = False
def index(self, entry_uid):
for i in range(0, len(self)):
if self[i].uid == entry_uid:
return i
raise ValueError('not in list')
def append_entry(self, *args, **kwargs):
self.append(entry(*args, **kwargs))
def replace_entry(self, entry_uid, *args, **kwargs):
i = self.index(entry_uid)
self[i] = entry(*args, **kwargs)
def append_entry_to_entry(self, entry_uid, *args, **kwargs):
i = self.index(entry_uid)
self[i].append(entry(*args, **kwargs))
@property
def entries(self):
rv = self[:]
if self.turn_around is True:
rv.reverse()
if self.debug is True:
rv.append(entry('time_measurement', self.time_measurement.time_str, None, None, True, False))
return rv
class Context(dict):
ACTIONBAR = 'actionbar'
BOTTOMBAR = 'bottombar'
MENUBAR = 'menubar'
NAVIGATIONBAR = 'navigationbar'
SETTINGS = 'settings'
TITLE = 'title'
def __init__(self, request):
from .models import BottomBar
#
dict.__init__(
self,
bottombar=bar(),
actionbar=bar(),
navigationbar=bar(turn_around=True),
menubar=bar(),
settings=ThemeSettings(),
title=ThemeSettings().page_title,
)
#
for i in range(1, 6):
for e in BottomBar.objects.filter(sequence_number=i):
if e.icon:
icon_url = e.icon.url
else:
icon_url = None
self[self.BOTTOMBAR].append(entry(
'bootombar-%d' % e.id,
e.name,
icon_url,
e.url,
e.left,
False
))
if settings.DEBUG:
self[self.BOTTOMBAR].debug = True
self[self.BOTTOMBAR].append(entry('bottombar-w3-validator', _('W3-Validator'), None, 'https://validator.w3.org/nu/?doc=' + request.build_absolute_uri(), False, False))
def set_additional_title(self, at):
if self[self.SETTINGS].page_title and at:
self[self.TITLE] = self[self.SETTINGS].page_title + ' - ' + at
else:
self[self.TITLE] = self[self.SETTINGS].page_title + at
class entry(list):
def __init__(self, uid, name, icon, url, left, active):
list.__init__(self)
self.uid = uid
self.name = name
self.icon = icon
self.url = url
self.left = left
self.active = active
@property
def is_dropdownmenu(self):
return len(self) > 0
def __str__(self):
return 'barentry: %s' % self.uid
def empty_entry_parameters(request):
return (
'empty', # uid
'', # name
transparency_icon_url(request), # icon
None, # url
True, # left
False # active
)
def get_themename(request):
return ThemeSettings().page_theme
class time_measurement(object):
def __init__(self):
self._start_time = time.time()
@property
def time_str(self):
return _('Time consumption') + ': %.2fs' % (time.time() - self._start_time)
def transparency_icon_url(request):
return static('themes/' + get_themename(request) + '/transparency.png')
def color_icon_url(request, icon_filename):
return static('themes/' + get_themename(request) + '/1st-color/%s' % icon_filename)
def gray_icon_url(request, icon_filename):
return static('themes/' + get_themename(request) + '/2nd-color/%s' % icon_filename)