Browse Source

Settings group select.

Rafał Pitoń 11 years ago
parent
commit
cd0221cc67

+ 3 - 2
misago/conf/defaults.py

@@ -59,8 +59,9 @@ PIPELINE_JS = {
     },
     },
     'misago_admin': {
     'misago_admin': {
         'source_filenames': (
         'source_filenames': (
-            'misago/adminjs/jquery.js',
-            'misago/adminjs/bootstrap.js',
+            'misago/admin/js/jquery.js',
+            'misago/admin/js/bootstrap.js',
+            'misago/admin/js/misago.js',
         ),
         ),
         'output_filename': 'misago_admin.js',
         'output_filename': 'misago_admin.js',
     },
     },

+ 5 - 3
misago/conf/migrationutils.py

@@ -56,7 +56,8 @@ def migrate_settings_group(orm, group_fixture, old_group_key=None):
 
 
     group.key = group_fixture['key']
     group.key = group_fixture['key']
     group.name = original_message(group_fixture['name'])
     group.name = original_message(group_fixture['name'])
-    group.description = original_message(group_fixture.get('description'))
+    if group_fixture.get('description'):
+        group.description = original_message(group_fixture.get('description'))
     group.save()
     group.save()
 
 
     # Delete groups settings and make new ones
     # Delete groups settings and make new ones
@@ -69,8 +70,9 @@ def migrate_settings_group(orm, group_fixture, old_group_key=None):
         setting_fixture['order'] = order
         setting_fixture['order'] = order
 
 
         setting_fixture['name'] = original_message(setting_fixture['name'])
         setting_fixture['name'] = original_message(setting_fixture['name'])
-        setting_fixture['description'] = original_message(
-            setting_fixture.get('description'))
+        if setting_fixture.get('description'):
+            setting_fixture['description'] = original_message(
+                setting_fixture.get('description'))
 
 
         if (setting_fixture.get('field_extra') and
         if (setting_fixture.get('field_extra') and
                 setting_fixture.get('field_extra').get('choices')):
                 setting_fixture.get('field_extra').get('choices')):

+ 17 - 0
misago/conf/models.py

@@ -8,11 +8,28 @@ except ImportError:
     import pickle
     import pickle
 
 
 
 
+class SettingsGroupsManager(models.Manager):
+    def ordered_alphabetically(self):
+        from django.utils.translation import ugettext as _
+
+        groups_dict = {}
+
+        for group in self.all():
+            groups_dict[_(group.name)] = group
+
+        ordered_groups = []
+        for key in groups_dict.keys():
+            ordered_groups.append(groups_dict[key])
+        return ordered_groups
+
+
 class SettingsGroup(models.Model):
 class SettingsGroup(models.Model):
     key = models.CharField(max_length=255, unique=True)
     key = models.CharField(max_length=255, unique=True)
     name = models.CharField(max_length=255)
     name = models.CharField(max_length=255)
     description = models.TextField(null=True, blank=True)
     description = models.TextField(null=True, blank=True)
 
 
+    objects = SettingsGroupsManager()
+
 
 
 class Setting(models.Model):
 class Setting(models.Model):
     group = models.ForeignKey(SettingsGroup)
     group = models.ForeignKey(SettingsGroup)

+ 1 - 0
misago/conf/urls.py

@@ -4,6 +4,7 @@ from django.conf.urls import patterns, include, url
 
 
 _urlpatterns = patterns('misago.conf.views',
 _urlpatterns = patterns('misago.conf.views',
     url(r'^$', 'index', name='index'),
     url(r'^$', 'index', name='index'),
+    url(r'^(?P<group_key>(\w|-)+)/$', 'group', name='group'),
 )
 )
 
 
 adminurlpatterns = patterns('misago.conf.views',
 adminurlpatterns = patterns('misago.conf.views',

+ 26 - 1
misago/conf/views.py

@@ -1,6 +1,31 @@
+from django.contrib import messages
 from django.shortcuts import redirect
 from django.shortcuts import redirect
-from misago.admin.views import render
+from django.utils.translation import ugettext as _
+from misago.admin.views import render as mi_render
+from misago.conf.models import SettingsGroup, Setting
+
+
+def render(request, template, context=None):
+    context = context or {}
+
+    context['settings_groups'] = SettingsGroup.objects.ordered_alphabetically()
+
+    if not 'active_group' in context:
+        context['active_group'] = {'key': None}
+
+    return mi_render(request, template, context)
 
 
 
 
 def index(request):
 def index(request):
     return render(request, 'misago/admin/conf/index.html')
     return render(request, 'misago/admin/conf/index.html')
+
+
+def group(request, group_key):
+    try:
+        active_group = SettingsGroup.objects.get(key=group_key)
+    except SettingsGroup.DoesNotExist:
+        messages.error(request, _("Settings group could not be found."))
+        return redirect('misago:admin:settings:index')
+
+    return render(request, 'misago/admin/conf/group.html',
+                  {'active_group': active_group})

+ 39 - 0
misago/static/misago/admin/css/misago/lists.less

@@ -0,0 +1,39 @@
+//
+// List group
+// --------------------------------------------------
+
+
+.list-panel {
+  border-radius: @border-radius-base;
+  box-shadow: 0px 0px 0px 3px @table-panel-shadow;
+  margin-bottom: @line-height-computed;
+
+  .list-group {
+    margin: 0px;
+
+    .list-group-item {
+      &, &:link, &:visited {
+        h4 {
+          color: @text-color;
+        }
+
+        p {
+          color: @gray-light;
+        }
+      }
+
+      &:active, &:hover {
+        background: #fff;
+        box-shadow: inset 0px 0px 0px 1px @brand-secondary;
+
+        h4 {
+          color: @text-color;
+        }
+      }
+
+      &:active {
+        box-shadow: inset 0px 0px 0px 1px @brand-primary;
+      }
+    }
+  }
+}

+ 1 - 0
misago/static/misago/admin/css/misago/misago.less

@@ -11,6 +11,7 @@ html, body {
 @import "sidenav.less";
 @import "sidenav.less";
 @import "pager.less";
 @import "pager.less";
 @import "tables.less";
 @import "tables.less";
+@import "lists.less";
 
 
 // Layout elements
 // Layout elements
 @import "navbar.less";
 @import "navbar.less";

+ 30 - 0
misago/static/misago/admin/css/style.css

@@ -6263,6 +6263,36 @@ body {
 .table-panel table.table tr td.row-select a.active span {
 .table-panel table.table tr td.row-select a.active span {
   color: #2ecc71;
   color: #2ecc71;
 }
 }
+.list-panel {
+  border-radius: 4px;
+  box-shadow: 0px 0px 0px 3px #ededed;
+  margin-bottom: 20px;
+}
+.list-panel .list-group {
+  margin: 0px;
+}
+.list-panel .list-group .list-group-item h4,
+.list-panel .list-group .list-group-item:link h4,
+.list-panel .list-group .list-group-item:visited h4 {
+  color: #444444;
+}
+.list-panel .list-group .list-group-item p,
+.list-panel .list-group .list-group-item:link p,
+.list-panel .list-group .list-group-item:visited p {
+  color: #999999;
+}
+.list-panel .list-group .list-group-item:active,
+.list-panel .list-group .list-group-item:hover {
+  background: #fff;
+  box-shadow: inset 0px 0px 0px 1px #3498db;
+}
+.list-panel .list-group .list-group-item:active h4,
+.list-panel .list-group .list-group-item:hover h4 {
+  color: #444444;
+}
+.list-panel .list-group .list-group-item:active {
+  box-shadow: inset 0px 0px 0px 1px #c0392b;
+}
 .navbars-container {
 .navbars-container {
   border-bottom: 3px solid #c7c7c7;
   border-bottom: 3px solid #c7c7c7;
 }
 }

+ 1 - 1
misago/templates/misago/admin/base.html

@@ -20,6 +20,6 @@
 {% include "misago/admin/logout.html" %}
 {% include "misago/admin/logout.html" %}
 
 
 {# We include JavaScript at the end of page body so it loads faster #}
 {# We include JavaScript at the end of page body so it loads faster #}
-{% compressed_js 'misago' %}
+{% compressed_js 'misago_admin' %}
 {% block extra_scripts %}{% endblock %}
 {% block extra_scripts %}{% endblock %}
 {% endblock %}
 {% endblock %}

+ 22 - 0
misago/templates/misago/admin/conf/group.html

@@ -0,0 +1,22 @@
+{% extends "misago/admin/conf/index.html" %}
+{% load i18n %}
+
+
+{% block title %}{% trans active_group.name %} | {{ block.super }}{% endblock %}
+
+
+{% block header %}
+  <div class="main">
+    <span class="fa fa-cogs">
+    <a href="{% url 'misago:admin:settings:index' %}">{% trans "Settings" %}</a>
+  </div>
+  <div class="sub">
+    <span class="fa fa-chevron-right"></span>
+    {% trans active_group.name %}
+  </div>
+{% endblock header%}
+
+
+{% block action %}
+  TODO: GROUP VIEW
+{% endblock action %}

+ 42 - 2
misago/templates/misago/admin/conf/index.html

@@ -9,9 +9,49 @@
 <div class="page-header">
 <div class="page-header">
   <div class="container">
   <div class="container">
     <h1>
     <h1>
-      <span class="fa fa-cogs">
-      {% trans "Settings" %}
+      {% block header %}
+        <span class="fa fa-cogs">
+        {% trans "Settings" %}
+      {% endblock %}
     </h1>
     </h1>
   </div>
   </div>
 </div>
 </div>
+
+<div class="container">
+  <div class="row">
+    <div class="col-md-3">
+
+      <ul class="nav nav-side">
+        {% for group in settings_groups %}
+        <li {% if group.key == active_group.key %}class="active"{% endif %}>
+          <a href="{% url 'misago:admin:settings:group' group_key=group.key %}">
+            {% trans group.name %}
+          </a>
+        </li>
+        {% endfor %}
+      </ul>
+
+    </div><!-- /.col-md-3 -->
+    <div class="col-md-9">
+
+      {% block action %}
+      <div class="list-panel">
+        <div class="list-group">
+
+          {% for group in settings_groups %}
+          <a href="{% url 'misago:admin:settings:group' group_key=group.key %}" class="list-group-item">
+            <h4 class="list-group-item-heading">{% trans group.name %}</h4>
+            {% if group.description %}
+            <p class="list-group-item-text">{% trans group.description %}</p>
+            {% endif %}
+          </a>
+          {% endfor %}
+
+        </div><!-- /.list-group -->
+      </div>
+      {% endblock action %}
+
+    </div><!-- /.col-md-9 -->
+  </div>
+</div>
 {% endblock content %}
 {% endblock content %}