Browse Source

Initial themes implementation

master
Dirk Alders 4 years ago
parent
commit
a24e772083
100 changed files with 359 additions and 0 deletions
  1. 163
    0
      __init__.py
  2. 5
    0
      admin.py
  3. 8
    0
      apps.py
  4. BIN
      locale/de/LC_MESSAGES/django.mo
  5. 33
    0
      locale/de/LC_MESSAGES/django.po
  6. 34
    0
      migrations/0001_initial.py
  7. 0
    0
      migrations/__init__.py
  8. 42
    0
      models.py
  9. 74
    0
      signals.py
  10. BIN
      static/themes/clear-blue/1st-color/0.png
  11. BIN
      static/themes/clear-blue/1st-color/1.png
  12. BIN
      static/themes/clear-blue/1st-color/2.png
  13. BIN
      static/themes/clear-blue/1st-color/3.png
  14. BIN
      static/themes/clear-blue/1st-color/4.png
  15. BIN
      static/themes/clear-blue/1st-color/5.png
  16. BIN
      static/themes/clear-blue/1st-color/6.png
  17. BIN
      static/themes/clear-blue/1st-color/7.png
  18. BIN
      static/themes/clear-blue/1st-color/8.png
  19. BIN
      static/themes/clear-blue/1st-color/9.png
  20. BIN
      static/themes/clear-blue/1st-color/admin.png
  21. BIN
      static/themes/clear-blue/1st-color/back.png
  22. BIN
      static/themes/clear-blue/1st-color/delete.png
  23. BIN
      static/themes/clear-blue/1st-color/display.png
  24. BIN
      static/themes/clear-blue/1st-color/download.png
  25. BIN
      static/themes/clear-blue/1st-color/edit.png
  26. BIN
      static/themes/clear-blue/1st-color/edit2.png
  27. BIN
      static/themes/clear-blue/1st-color/favourite.png
  28. BIN
      static/themes/clear-blue/1st-color/filter.png
  29. BIN
      static/themes/clear-blue/1st-color/folder.png
  30. BIN
      static/themes/clear-blue/1st-color/gps.png
  31. BIN
      static/themes/clear-blue/1st-color/help.png
  32. BIN
      static/themes/clear-blue/1st-color/info.png
  33. BIN
      static/themes/clear-blue/1st-color/is_favourite.png
  34. BIN
      static/themes/clear-blue/1st-color/login.png
  35. BIN
      static/themes/clear-blue/1st-color/logout.png
  36. BIN
      static/themes/clear-blue/1st-color/permission.png
  37. BIN
      static/themes/clear-blue/1st-color/play.png
  38. BIN
      static/themes/clear-blue/1st-color/plus.png
  39. BIN
      static/themes/clear-blue/1st-color/print.png
  40. BIN
      static/themes/clear-blue/1st-color/register.png
  41. BIN
      static/themes/clear-blue/1st-color/save.png
  42. BIN
      static/themes/clear-blue/1st-color/search.png
  43. BIN
      static/themes/clear-blue/1st-color/settings.png
  44. BIN
      static/themes/clear-blue/1st-color/shuffle.png
  45. BIN
      static/themes/clear-blue/1st-color/sort.png
  46. BIN
      static/themes/clear-blue/1st-color/staging.png
  47. BIN
      static/themes/clear-blue/1st-color/stop.png
  48. BIN
      static/themes/clear-blue/1st-color/task.png
  49. BIN
      static/themes/clear-blue/1st-color/upload.png
  50. BIN
      static/themes/clear-blue/1st-color/user.png
  51. BIN
      static/themes/clear-blue/1st-color/view.png
  52. BIN
      static/themes/clear-blue/2nd-color/0.png
  53. BIN
      static/themes/clear-blue/2nd-color/1.png
  54. BIN
      static/themes/clear-blue/2nd-color/2.png
  55. BIN
      static/themes/clear-blue/2nd-color/3.png
  56. BIN
      static/themes/clear-blue/2nd-color/4.png
  57. BIN
      static/themes/clear-blue/2nd-color/5.png
  58. BIN
      static/themes/clear-blue/2nd-color/6.png
  59. BIN
      static/themes/clear-blue/2nd-color/7.png
  60. BIN
      static/themes/clear-blue/2nd-color/8.png
  61. BIN
      static/themes/clear-blue/2nd-color/9.png
  62. BIN
      static/themes/clear-blue/2nd-color/admin.png
  63. BIN
      static/themes/clear-blue/2nd-color/back.png
  64. BIN
      static/themes/clear-blue/2nd-color/delete.png
  65. BIN
      static/themes/clear-blue/2nd-color/display.png
  66. BIN
      static/themes/clear-blue/2nd-color/download.png
  67. BIN
      static/themes/clear-blue/2nd-color/download_flat.png
  68. BIN
      static/themes/clear-blue/2nd-color/edit.png
  69. BIN
      static/themes/clear-blue/2nd-color/edit2.png
  70. BIN
      static/themes/clear-blue/2nd-color/favourite.png
  71. BIN
      static/themes/clear-blue/2nd-color/filter.png
  72. BIN
      static/themes/clear-blue/2nd-color/folder.png
  73. BIN
      static/themes/clear-blue/2nd-color/gps.png
  74. BIN
      static/themes/clear-blue/2nd-color/home.png
  75. BIN
      static/themes/clear-blue/2nd-color/info.png
  76. BIN
      static/themes/clear-blue/2nd-color/login.png
  77. BIN
      static/themes/clear-blue/2nd-color/logout.png
  78. BIN
      static/themes/clear-blue/2nd-color/permission.png
  79. BIN
      static/themes/clear-blue/2nd-color/play.png
  80. BIN
      static/themes/clear-blue/2nd-color/plus.png
  81. BIN
      static/themes/clear-blue/2nd-color/print.png
  82. BIN
      static/themes/clear-blue/2nd-color/register.png
  83. BIN
      static/themes/clear-blue/2nd-color/save.png
  84. BIN
      static/themes/clear-blue/2nd-color/search.png
  85. BIN
      static/themes/clear-blue/2nd-color/settings.png
  86. BIN
      static/themes/clear-blue/2nd-color/shuffle.png
  87. BIN
      static/themes/clear-blue/2nd-color/sort.png
  88. BIN
      static/themes/clear-blue/2nd-color/staging.png
  89. BIN
      static/themes/clear-blue/2nd-color/stop.png
  90. BIN
      static/themes/clear-blue/2nd-color/task.png
  91. BIN
      static/themes/clear-blue/2nd-color/upload.png
  92. BIN
      static/themes/clear-blue/2nd-color/user.png
  93. BIN
      static/themes/clear-blue/2nd-color/view.png
  94. BIN
      static/themes/clear-blue/search.png
  95. BIN
      static/themes/clear-blue/transparency.png
  96. BIN
      static/themes/clear-green/1st-color/0.png
  97. BIN
      static/themes/clear-green/1st-color/1.png
  98. BIN
      static/themes/clear-green/1st-color/2.png
  99. BIN
      static/themes/clear-green/1st-color/3.png
  100. 0
    0
      static/themes/clear-green/1st-color/4.png

+ 163
- 0
__init__.py View File

@@ -0,0 +1,163 @@
1
+from django.conf import settings
2
+from django.contrib.staticfiles.templatetags.staticfiles import static
3
+from django.forms.models import model_to_dict
4
+from django.utils.translation import gettext as _
5
+import time
6
+
7
+
8
+available_themes = [
9
+    ('default', 'Default'),
10
+    ('clear-red', 'Clear Red'),
11
+    ('clear-green', 'Clear Green'),
12
+    ('clear-blue', 'Clear Blue'),
13
+]
14
+default_theme = 'default'
15
+
16
+
17
+class ThemeSettings(object):
18
+    def __init__(self):
19
+        from .models import Setting
20
+        s = Setting.objects.filter(id=1).first()
21
+        if s is None:
22
+            s = Setting(id=1)
23
+            s.save()
24
+        for attr_name in model_to_dict(s):
25
+            attr = getattr(s, attr_name)
26
+            if attr_name == 'page_theme' and attr == 'default':
27
+                setattr(self, attr_name, settings.DEFAULT_THEME)
28
+            else:
29
+                setattr(self, attr_name, attr)
30
+
31
+
32
+class bar(list):
33
+    def __init__(self, turn_around=False):
34
+        self.time_measurement = time_measurement()
35
+        list.__init__(self)
36
+        self.turn_around = turn_around
37
+        self.debug = False
38
+
39
+    def index(self, entry_uid):
40
+        for i in range(0, len(self)):
41
+            if self[i].uid == entry_uid:
42
+                return i
43
+        raise ValueError('not in list')
44
+
45
+    def append_entry(self, *args, **kwargs):
46
+        self.append(entry(*args, **kwargs))
47
+
48
+    def replace_entry(self, entry_uid, *args, **kwargs):
49
+        i = self.index(entry_uid)
50
+        self[i] = entry(*args, **kwargs)
51
+
52
+    def append_entry_to_entry(self, entry_uid, *args, **kwargs):
53
+        i = self.index(entry_uid)
54
+        self[i].append(entry(*args, **kwargs))
55
+
56
+    @property
57
+    def entries(self):
58
+        rv = self[:]
59
+        if self.turn_around is True:
60
+            rv.reverse()
61
+        if self.debug is True:
62
+            rv.append(entry('time_measurement', self.time_measurement.time_str, None, None, True, False))
63
+        return rv
64
+
65
+
66
+class Context(dict):
67
+    ACTIONBAR = 'actionbar'
68
+    BOTTOMBAR = 'bottombar'
69
+    MENUBAR = 'menubar'
70
+    NAVIGATIONBAR = 'navigationbar'
71
+    SETTINGS = 'settings'
72
+    TITLE = 'title'
73
+
74
+    def __init__(self, request):
75
+        from .models import BottomBar
76
+        #
77
+        dict.__init__(
78
+            self,
79
+            bottombar=bar(),
80
+            actionbar=bar(),
81
+            navigationbar=bar(turn_around=True),
82
+            menubar=bar(),
83
+            settings=ThemeSettings(),
84
+            title=ThemeSettings().page_title,
85
+        )
86
+        #
87
+        for i in range(1, 6):
88
+            for e in BottomBar.objects.filter(sequence_number=i):
89
+                if e.icon:
90
+                    icon_url = e.icon.url
91
+                else:
92
+                    icon_url = None
93
+                self[self.BOTTOMBAR].append(entry(
94
+                    'bootombar-%d' % e.id,
95
+                    e.name,
96
+                    icon_url,
97
+                    e.url,
98
+                    e.left,
99
+                    False
100
+                ))
101
+        if settings.DEBUG:
102
+            self[self.BOTTOMBAR].debug = True
103
+            self[self.BOTTOMBAR].append(entry('bottombar-w3-validator', _('W3-Validator'), None, 'https://validator.w3.org/nu/?doc=' + request.build_absolute_uri(), False, False))
104
+
105
+    def set_additional_title(self, at):
106
+        if self[self.SETTINGS].page_title and at:
107
+            self[self.TITLE] = self[self.SETTINGS].page_title + ' - ' + at
108
+        else:
109
+            self[self.TITLE] = self[self.SETTINGS].page_title + at
110
+
111
+
112
+class entry(list):
113
+    def __init__(self, uid, name, icon, url, left, active):
114
+        list.__init__(self)
115
+        self.uid = uid
116
+        self.name = name
117
+        self.icon = icon
118
+        self.url = url
119
+        self.left = left
120
+        self.active = active
121
+
122
+    @property
123
+    def is_dropdownmenu(self):
124
+        return len(self) > 0
125
+
126
+    def __str__(self):
127
+        return 'barentry: %s' % self.uid
128
+
129
+
130
+def empty_entry_parameters(request):
131
+    return (
132
+        'empty',                                    # uid
133
+        '',                                         # name
134
+        transparency_icon_url(request),             # icon
135
+        None,                                       # url
136
+        True,                                       # left
137
+        False                                       # active
138
+    )
139
+
140
+
141
+def get_themename(request):
142
+    return ThemeSettings().page_theme
143
+
144
+
145
+class time_measurement(object):
146
+    def __init__(self):
147
+        self._start_time = time.time()
148
+
149
+    @property
150
+    def time_str(self):
151
+        return _('Time consumption') + ': %.2fs' % (time.time() - self._start_time)
152
+
153
+
154
+def transparency_icon_url(request):
155
+    return static('themes/' + get_themename(request) + '/transparency.png')
156
+
157
+
158
+def color_icon_url(request, icon_filename):
159
+    return static('themes/' + get_themename(request) + '/1st-color/%s' % icon_filename)
160
+
161
+
162
+def gray_icon_url(request, icon_filename):
163
+    return static('themes/' + get_themename(request) + '/2nd-color/%s' % icon_filename)

+ 5
- 0
admin.py View File

@@ -0,0 +1,5 @@
1
+from django.contrib import admin
2
+from .models import Setting, BottomBar
3
+
4
+admin.site.register(Setting)
5
+admin.site.register(BottomBar)

+ 8
- 0
apps.py View File

@@ -0,0 +1,8 @@
1
+from django.apps import AppConfig
2
+
3
+
4
+class ThemesConfig(AppConfig):
5
+    name = 'themes'
6
+
7
+    def ready(self):
8
+        import themes.signals

BIN
locale/de/LC_MESSAGES/django.mo View File


+ 33
- 0
locale/de/LC_MESSAGES/django.po View File

@@ -0,0 +1,33 @@
1
+# SOME DESCRIPTIVE TITLE.
2
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+# This file is distributed under the same license as the PACKAGE package.
4
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+#
6
+#, fuzzy
7
+msgid ""
8
+msgstr ""
9
+"Project-Id-Version: PACKAGE VERSION\n"
10
+"Report-Msgid-Bugs-To: \n"
11
+"POT-Creation-Date: 2019-09-19 09:24+0200\n"
12
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+"Language-Team: LANGUAGE <LL@li.org>\n"
15
+"Language: \n"
16
+"MIME-Version: 1.0\n"
17
+"Content-Type: text/plain; charset=UTF-8\n"
18
+"Content-Transfer-Encoding: 8bit\n"
19
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+
21
+#: __init__.py:41
22
+msgid "W3-Validator"
23
+msgstr "W3-Validator"
24
+
25
+#: __init__.py:107
26
+msgid "Time consumption"
27
+msgstr "Zeit"
28
+
29
+#: templates/themes/clear-blue/base.html:23
30
+#: templates/themes/clear-green/base.html:23
31
+#: templates/themes/clear-red/base.html:23
32
+msgid "Search..."
33
+msgstr "Suche..."

+ 34
- 0
migrations/0001_initial.py View File

@@ -0,0 +1,34 @@
1
+# Generated by Django 2.2.5 on 2019-12-18 20:01
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    initial = True
9
+
10
+    dependencies = [
11
+    ]
12
+
13
+    operations = [
14
+        migrations.CreateModel(
15
+            name='BottomBar',
16
+            fields=[
17
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+                ('name', models.CharField(blank=True, max_length=64)),
19
+                ('icon', models.ImageField(blank=True, upload_to='theme')),
20
+                ('url', models.URLField()),
21
+                ('left', models.BooleanField()),
22
+                ('sequence_number', models.SmallIntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')])),
23
+            ],
24
+        ),
25
+        migrations.CreateModel(
26
+            name='Setting',
27
+            fields=[
28
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
29
+                ('page_image', models.ImageField(default='theme/logo.png', upload_to='theme')),
30
+                ('page_theme', models.CharField(choices=[('default', 'Default'), ('clear-red', 'Clear Red'), ('clear-green', 'Clear Green'), ('clear-blue', 'Clear Blue')], default='default', max_length=64)),
31
+                ('page_title', models.CharField(blank=True, default='MyApp', max_length=32)),
32
+            ],
33
+        ),
34
+    ]

+ 0
- 0
migrations/__init__.py View File


+ 42
- 0
models.py View File

@@ -0,0 +1,42 @@
1
+from django.db import models
2
+from . import available_themes, default_theme
3
+from PIL import Image
4
+
5
+
6
+class Setting(models.Model):
7
+    page_image = models.ImageField(
8
+        upload_to='theme',
9
+        default='theme/logo.png'
10
+    )
11
+    page_theme = models.CharField(
12
+        max_length=64,
13
+        choices=available_themes,
14
+        default=default_theme
15
+    )
16
+    page_title = models.CharField(max_length=32, default='MyApp', blank=True)
17
+
18
+    def save(self, *args, **kwargs):
19
+        super().save(*args, **kwargs)
20
+
21
+        img = Image.open(self.page_image.path)
22
+        if img.height > 50:
23
+            output_size = (int(img.width * 50 / img.height), 50)
24
+            img.thumbnail(output_size)
25
+            img.save(self.page_image.path)
26
+
27
+
28
+class BottomBar(models.Model):
29
+    name = models.CharField(max_length=64, blank=True)
30
+    icon = models.ImageField(upload_to='theme', blank=True)
31
+    url = models.URLField()
32
+    left = models.BooleanField()
33
+    sequence_number = models.SmallIntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')])
34
+
35
+    def save(self, *args, **kwargs):
36
+        super().save(*args, **kwargs)
37
+        if self.icon:
38
+            img = Image.open(self.icon.path)
39
+            if img.height > 40:
40
+                output_size = (int(img.width * 40 / img.height), 40)
41
+                img.thumbnail(output_size)
42
+                img.save(self.icon.path)

+ 74
- 0
signals.py View File

@@ -0,0 +1,74 @@
1
+from django.db.models.signals import pre_delete, pre_save
2
+from django.dispatch import receiver
3
+from .models import BottomBar, Setting
4
+import os
5
+
6
+
7
+@receiver(pre_delete, sender=BottomBar)
8
+def bottombar_auto_delete_file_on_delete(instance: BottomBar, **kwargs):
9
+    """
10
+    Deletes file from filesystem
11
+    when corresponding `BottomBar` object is deleted.
12
+    """
13
+    if instance.icon:
14
+        if os.path.isfile(instance.icon.path):
15
+            os.remove(instance.icon.path)
16
+
17
+
18
+@receiver(pre_save, sender=BottomBar)
19
+def bottombar_auto_delete_file_on_change(instance: BottomBar, **kwargs):
20
+    """
21
+    Deletes old file from filesystem
22
+    when corresponding `icon` object is updated
23
+    with new file.
24
+    """
25
+    if not instance.pk:
26
+        return False
27
+
28
+    try:
29
+        old_file = BottomBar.objects.get(pk=instance.pk).icon
30
+    except BottomBar.DoesNotExist:
31
+        return False
32
+
33
+    new_file = instance.icon
34
+    if not old_file == new_file:
35
+        if os.path.isfile(old_file.path):
36
+            os.remove(old_file.path)
37
+
38
+
39
+@receiver(pre_delete, sender=Setting)
40
+def setting_auto_delete_file_on_delete(instance: Setting, **kwargs):
41
+    """
42
+    Deletes file from filesystem
43
+    when corresponding `Settings` object is deleted.
44
+    """
45
+    if instance.page_image.path.endswith(instance.page_image.field.default):
46
+        return False
47
+
48
+    if instance.page_image:
49
+        if os.path.isfile(instance.page_image.path):
50
+            os.remove(instance.page_image.path)
51
+
52
+
53
+@receiver(pre_save, sender=Setting)
54
+def setting_auto_delete_file_on_change(instance: Setting, **kwargs):
55
+    """
56
+    Deletes old file from filesystem
57
+    when corresponding `page_image` object is updated
58
+    with new file.
59
+    """
60
+    if not instance.pk:
61
+        return False
62
+
63
+    try:
64
+        old_file = Setting.objects.get(pk=instance.pk).page_image
65
+    except Setting.DoesNotExist:
66
+        return False
67
+
68
+    if old_file.path.endswith(instance.page_image.field.default):
69
+        return False
70
+
71
+    new_file = instance.page_image
72
+    if not old_file == new_file:
73
+        if os.path.isfile(old_file.path):
74
+            os.remove(old_file.path)

BIN
static/themes/clear-blue/1st-color/0.png View File


BIN
static/themes/clear-blue/1st-color/1.png View File


BIN
static/themes/clear-blue/1st-color/2.png View File


BIN
static/themes/clear-blue/1st-color/3.png View File


BIN
static/themes/clear-blue/1st-color/4.png View File


BIN
static/themes/clear-blue/1st-color/5.png View File


BIN
static/themes/clear-blue/1st-color/6.png View File


BIN
static/themes/clear-blue/1st-color/7.png View File


BIN
static/themes/clear-blue/1st-color/8.png View File


BIN
static/themes/clear-blue/1st-color/9.png View File


BIN
static/themes/clear-blue/1st-color/admin.png View File


BIN
static/themes/clear-blue/1st-color/back.png View File


BIN
static/themes/clear-blue/1st-color/delete.png View File


BIN
static/themes/clear-blue/1st-color/display.png View File


BIN
static/themes/clear-blue/1st-color/download.png View File


BIN
static/themes/clear-blue/1st-color/edit.png View File


BIN
static/themes/clear-blue/1st-color/edit2.png View File


BIN
static/themes/clear-blue/1st-color/favourite.png View File


BIN
static/themes/clear-blue/1st-color/filter.png View File


BIN
static/themes/clear-blue/1st-color/folder.png View File


BIN
static/themes/clear-blue/1st-color/gps.png View File


BIN
static/themes/clear-blue/1st-color/help.png View File


BIN
static/themes/clear-blue/1st-color/info.png View File


BIN
static/themes/clear-blue/1st-color/is_favourite.png View File


BIN
static/themes/clear-blue/1st-color/login.png View File


BIN
static/themes/clear-blue/1st-color/logout.png View File


BIN
static/themes/clear-blue/1st-color/permission.png View File


BIN
static/themes/clear-blue/1st-color/play.png View File


BIN
static/themes/clear-blue/1st-color/plus.png View File


BIN
static/themes/clear-blue/1st-color/print.png View File


BIN
static/themes/clear-blue/1st-color/register.png View File


BIN
static/themes/clear-blue/1st-color/save.png View File


BIN
static/themes/clear-blue/1st-color/search.png View File


BIN
static/themes/clear-blue/1st-color/settings.png View File


BIN
static/themes/clear-blue/1st-color/shuffle.png View File


BIN
static/themes/clear-blue/1st-color/sort.png View File


BIN
static/themes/clear-blue/1st-color/staging.png View File


BIN
static/themes/clear-blue/1st-color/stop.png View File


BIN
static/themes/clear-blue/1st-color/task.png View File


BIN
static/themes/clear-blue/1st-color/upload.png View File


BIN
static/themes/clear-blue/1st-color/user.png View File


BIN
static/themes/clear-blue/1st-color/view.png View File


BIN
static/themes/clear-blue/2nd-color/0.png View File


BIN
static/themes/clear-blue/2nd-color/1.png View File


BIN
static/themes/clear-blue/2nd-color/2.png View File


BIN
static/themes/clear-blue/2nd-color/3.png View File


BIN
static/themes/clear-blue/2nd-color/4.png View File


BIN
static/themes/clear-blue/2nd-color/5.png View File


BIN
static/themes/clear-blue/2nd-color/6.png View File


BIN
static/themes/clear-blue/2nd-color/7.png View File


BIN
static/themes/clear-blue/2nd-color/8.png View File


BIN
static/themes/clear-blue/2nd-color/9.png View File


BIN
static/themes/clear-blue/2nd-color/admin.png View File


BIN
static/themes/clear-blue/2nd-color/back.png View File


BIN
static/themes/clear-blue/2nd-color/delete.png View File


BIN
static/themes/clear-blue/2nd-color/display.png View File


BIN
static/themes/clear-blue/2nd-color/download.png View File


BIN
static/themes/clear-blue/2nd-color/download_flat.png View File


BIN
static/themes/clear-blue/2nd-color/edit.png View File


BIN
static/themes/clear-blue/2nd-color/edit2.png View File


BIN
static/themes/clear-blue/2nd-color/favourite.png View File


BIN
static/themes/clear-blue/2nd-color/filter.png View File


BIN
static/themes/clear-blue/2nd-color/folder.png View File


BIN
static/themes/clear-blue/2nd-color/gps.png View File


BIN
static/themes/clear-blue/2nd-color/home.png View File


BIN
static/themes/clear-blue/2nd-color/info.png View File


BIN
static/themes/clear-blue/2nd-color/login.png View File


BIN
static/themes/clear-blue/2nd-color/logout.png View File


BIN
static/themes/clear-blue/2nd-color/permission.png View File


BIN
static/themes/clear-blue/2nd-color/play.png View File


BIN
static/themes/clear-blue/2nd-color/plus.png View File


BIN
static/themes/clear-blue/2nd-color/print.png View File


BIN
static/themes/clear-blue/2nd-color/register.png View File


BIN
static/themes/clear-blue/2nd-color/save.png View File


BIN
static/themes/clear-blue/2nd-color/search.png View File


BIN
static/themes/clear-blue/2nd-color/settings.png View File


BIN
static/themes/clear-blue/2nd-color/shuffle.png View File


BIN
static/themes/clear-blue/2nd-color/sort.png View File


BIN
static/themes/clear-blue/2nd-color/staging.png View File


BIN
static/themes/clear-blue/2nd-color/stop.png View File


BIN
static/themes/clear-blue/2nd-color/task.png View File


BIN
static/themes/clear-blue/2nd-color/upload.png View File


BIN
static/themes/clear-blue/2nd-color/user.png View File


BIN
static/themes/clear-blue/2nd-color/view.png View File


BIN
static/themes/clear-blue/search.png View File


BIN
static/themes/clear-blue/transparency.png View File


BIN
static/themes/clear-green/1st-color/0.png View File


BIN
static/themes/clear-green/1st-color/1.png View File


BIN
static/themes/clear-green/1st-color/2.png View File


BIN
static/themes/clear-green/1st-color/3.png View File


+ 0
- 0
static/themes/clear-green/1st-color/4.png View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save