From 9ad3f8b2400c1310077ced3b1bdb5a1bdc4242d7 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sat, 1 Dec 2012 11:55:43 +0100 Subject: [PATCH] Settings pages are now more responsive. see #315 --- modoboa/admin/static/admin/js/settings.js | 49 +++++++++++++++++++ modoboa/admin/templates/admin/extensions.html | 8 ++- modoboa/admin/templates/admin/parameters.html | 8 ++- .../templates/admin/settings_header.html | 18 ++----- modoboa/admin/templatetags/admin_extras.py | 12 +++-- modoboa/admin/urls.py | 2 +- modoboa/admin/views.py | 24 +++++---- 7 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 modoboa/admin/static/admin/js/settings.js diff --git a/modoboa/admin/static/admin/js/settings.js b/modoboa/admin/static/admin/js/settings.js new file mode 100644 index 000000000..bea2ee05d --- /dev/null +++ b/modoboa/admin/static/admin/js/settings.js @@ -0,0 +1,49 @@ +var Settings = function(options) { + this.initialize(options); +}; + +Settings.prototype = { + constructor: Settings, + + defaults: { + deflocation: "parameters/" + }, + + initialize: function(options) { + this.options = $.extend({}, this.defaults, options); + this.options.defcallback = $.proxy(this.default_cb, this); + this.navobj = new History(this.options); + + this.listen(); + }, + + listen: function() { + $("a.ajaxlink").click($.proxy(this.load_page, this)); + $(document).on("click", "#update", $.proxy(function(e) { + simple_ajax_form_post(e, { + formid: "settings_form", + reload_on_success: false, + success_cb: $.proxy(this.save_cb, this) + }); + }, this)); + }, + + save_cb: function(data) { + if (this.navobj.getbaseurl() == 'extensions') { + window.location.reload(); + } + $("body").notify("success", data.respmsg, 2000); + }, + + load_page: function(e) { + var $link = get_target(e); + e.preventDefault(); + this.navobj.baseurl($link.attr("href")).update(); + }, + + default_cb: function(data) { + $("a.ajaxlink").parent().removeClass("active"); + $("a[name=" + this.navobj.getbaseurl() + "]").parent().addClass("active"); + $("#settings_content").html(data.content); + } +}; \ No newline at end of file diff --git a/modoboa/admin/templates/admin/extensions.html b/modoboa/admin/templates/admin/extensions.html index 1999eeb71..aabf44f81 100644 --- a/modoboa/admin/templates/admin/extensions.html +++ b/modoboa/admin/templates/admin/extensions.html @@ -1,8 +1,6 @@ -{% extends "admin/settings_header.html" %}{% load i18n %} -{% block pagetitle %}{% trans "Extensions" %}{% endblock %} -{% block apparea %} -
+{% load i18n %} +

{% trans "Extensions" %} {% trans "Choose the extension(s) to use" %}


+ {{ extensions|safe }}
{% trans 'Save' %} -{% endblock %} diff --git a/modoboa/admin/templates/admin/parameters.html b/modoboa/admin/templates/admin/parameters.html index 4714658b7..02d48423f 100644 --- a/modoboa/admin/templates/admin/parameters.html +++ b/modoboa/admin/templates/admin/parameters.html @@ -1,10 +1,8 @@ -{% extends "admin/settings_header.html" %}{% load i18n %} -{% block pagetitle %}{% trans "Parameters" %}{% endblock %} -{% block apparea %} +{% load i18n %} {% url modoboa.admin.views.saveparameters as action %} -
+

{% trans "Parameters" %} {% trans "Configure Modoboa" %}


+ {% include "common/parameters.html" %}

{% trans 'Save' %} -{% endblock %} diff --git a/modoboa/admin/templates/admin/settings_header.html b/modoboa/admin/templates/admin/settings_header.html index 287812511..ad2c246ee 100644 --- a/modoboa/admin/templates/admin/settings_header.html +++ b/modoboa/admin/templates/admin/settings_header.html @@ -1,22 +1,14 @@ {% extends "twocols.html" %} {% load i18n libextras admin_extras %} +{% block pagetitle %}{% trans "Modoboa settings" %}{% endblock %} {% block html_head %} + + {% endblock %} {% block leftcol %}{% endblock %} +{% block apparea %}
{% endblock %} diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py index a7831a741..21ff4f8a9 100644 --- a/modoboa/admin/templatetags/admin_extras.py +++ b/modoboa/admin/templatetags/admin_extras.py @@ -33,7 +33,7 @@ def admin_menu(selection, user): entries += [ {"name" : "settings", "label" : _("Modoboa"), - "url" : reverse(admin.views.viewparameters)} + "url" : reverse(admin.views.viewsettings)} ] if not len(entries): @@ -45,12 +45,14 @@ def admin_menu(selection, user): def settings_menu(selection, user): entries = [ {"name" : "extensions", - "url" : reverse(admin.views.viewextensions), + "class" : "ajaxlink", + "url" : "extensions/", "label" : _("Extensions"), - "img" : static_url("pics/extensions.png")}, + "img" : ""}, {"name" : "parameters", - "url" : reverse(admin.views.viewparameters), - "img" : static_url("pics/domains.png"), + "class" : "ajaxlink", + "url" : "parameters/", + "img" : "", "label" : _("Parameters")}, ] return render_to_string('common/menu.html', { diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py index bd2133c07..bede38e01 100644 --- a/modoboa/admin/urls.py +++ b/modoboa/admin/urls.py @@ -11,7 +11,7 @@ urlpatterns = patterns( (r'^domains/delete/$', 'deldomain'), (r'^domains/import/$', 'import_domains'), - (r'^settings/$', 'viewparameters'), + (r'^settings/$', 'viewsettings'), (r'^settings/parameters/$', 'viewparameters'), (r'^settings/parameters/save/$', 'saveparameters'), (r'^settings/extensions/$', 'viewextensions'), diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index c26ed50dd..01eb2ff95 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -466,6 +466,13 @@ def remove_permission(request): ungrant_access_to_object(domain, account) return ajax_simple_response(dict(status="ok")) +@login_required +@user_passes_test(lambda u: u.is_superuser) +def viewsettings(request, tplname='admin/settings_header.html'): + return render(request, tplname, { + "selection" : "settings" + }) + @login_required @user_passes_test(lambda u: u.is_superuser) def viewparameters(request, tplname='admin/parameters.html'): @@ -486,10 +493,10 @@ def viewparameters(request, tplname='admin/parameters.html'): tmp["params"] += [newdef] gparams += [tmp] - return render(request, tplname, { - "selection" : "settings", + return ajax_simple_response({ + "status" : "ok", "left_selection" : "parameters", - "gparams" : gparams + "content" : render_to_string(tplname, {"gparams" : gparams}) }) @login_required @@ -500,7 +507,7 @@ def saveparameters(request): continue app, name = pname.split('.') parameters.save_admin(name, v, app=app) - return ajax_simple_response(dict(status="ok", message=_("Parameters saved"))) + return ajax_simple_response(dict(status="ok", respmsg=_("Parameters saved"))) @login_required @user_passes_test(lambda u: u.is_superuser) @@ -520,10 +527,9 @@ def viewextensions(request, tplname='admin/extensions.html'): ext["selection"] = False tbl = ExtensionsTable(request, exts) - return render(request, tplname, { - "selection" : "settings", - "left_selection" : "extensions", - "extensions" : tbl + return ajax_simple_response({ + "status" : "ok", + "content" : render_to_string(tplname, {"extensions" : tbl}) }) @login_required @@ -546,7 +552,7 @@ def saveextensions(request): ext.off() return ajax_simple_response(dict( - status="ok", message=_("Modifications applied."), reload=True + status="ok", respmsg=_("Modifications applied.") )) def import_domain(user, row):