From cc7da3f5d60f9c6af97df94c861068aa29aa15f8 Mon Sep 17 00:00:00 2001 From: tonio Date: Thu, 5 Aug 2010 17:49:29 +0200 Subject: [PATCH] wip: replacing "/static/" occurences with something more flexible. --- admin/templatetags/admin_extras.py | 24 +++++++------- extensions/amavis_quarantine/main.py | 4 +-- .../templatetags/amextras.py | 22 +++++++------ extensions/postfix_autoreply/main.py | 4 +-- extensions/stats/main.py | 6 ++-- extensions/webmail/lib.py | 4 +-- extensions/webmail/main.py | 4 +-- extensions/webmail/templates/index.html | 8 ++--- extensions/webmail/templatetags/webextras.py | 31 ++++++++++--------- lib/__init__.py | 10 ++++++ lib/email_listing.py | 6 ++-- templates/nlayout.html | 6 ++-- 12 files changed, 72 insertions(+), 57 deletions(-) diff --git a/admin/templatetags/admin_extras.py b/admin/templatetags/admin_extras.py index 36c48d0e5..b0aa589d4 100644 --- a/admin/templatetags/admin_extras.py +++ b/admin/templatetags/admin_extras.py @@ -3,7 +3,7 @@ from django.template.loader import render_to_string from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse from modoboa import admin -from modoboa.lib import events +from modoboa.lib import events, static_url register = template.Library() @@ -17,16 +17,16 @@ def domain_menu(domain_id, selection, user): {"name" : "", "url" : reverse(admin.views.newmailbox, args=[domain_id]), "label" : _("New mailbox"), - "img" : "/static/pics/add.png", + "img" : static_url("pics/add.png"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:300,y:280}}"}, {"name" : "mailboxes", "url" : reverse(admin.views.mailboxes, args=[domain_id]), - "img" : "/static/pics/mailbox.png", + "img" : static_url("pics/mailbox.png"), "label" : _("Mailboxes")}, {"name" : "aliases", "url" : reverse("full-aliases", args=[domain_id]), - "img" : "/static/pics/alias.png", + "img" : static_url("/pics/alias.png"), "label" : _("Aliases")}, ] @@ -35,7 +35,7 @@ def domain_menu(domain_id, selection, user): {"name" : "", "url" : reverse(admin.views.editdomain, args=[domain_id]), "label" : _("Properties"), - "img" : "/static/pics/edit.png", + "img" : static_url("pics/edit.png"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:300,y:180}}"} ] @@ -51,16 +51,16 @@ def settings_menu(selection, user): {"name" : "permissions", "url" : reverse(admin.views.settings), "label" : _("Permissions"), - "img" : "/static/pics/permissions.png"}, + "img" : static_url("pics/permissions.png"}), {"name" : "addperm", "url" : reverse(admin.views.addpermission), - "img" : "/static/pics/add.png", + "img" : static_url("pics/add.png"), "label" : _("Add permission"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:320,y:210}}"}, {"name" : "parameters", "url" : reverse(admin.views.viewparameters), - "img" : "/static/pics/domains.png", + "img" : static_url("pics/domains.png"), "label" : _("Parameters")}, ] return render_to_string('common/menu.html', @@ -73,13 +73,13 @@ def domains_menu(selection, user): {"name" : "newdomain", "url" : reverse(admin.views.newdomain), "label" : _("New domain"), - "img" : "/static/pics/add.png", + "img" : static_url("pics/add.png"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:300,y:200}}"}, {"name" : "domains", "url" : reverse(admin.views.domains), "label" : _("Domains"), - "img" : "/static/pics/domains.png"} + "img" : static_url("pics/domains.png")} ] entries += events.raiseQueryEvent("AdminMenuDisplay", target="admin_menu_box", user=user) @@ -131,8 +131,8 @@ def param(app, definition): if definition.has_key("help"): result += """ - - """ % (definition["help"], _("Help")) + + """ % (definition["help"], _("Help"), static_url("pics/info.png")) result += """ """ diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index 79b5b1bd7..3b5b7f3c7 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -5,7 +5,7 @@ from django.conf.urls.defaults import * from django.utils.translation import ugettext as _, ungettext from django.core.urlresolvers import reverse -from modoboa.lib import events, parameters +from modoboa.lib import events, parameters, static_url def infos(): return { @@ -49,7 +49,7 @@ def menu(**kwargs): {"name" : "quarantine", "label" : _("Quarantine"), "url" : reverse(views.index), - "img" : "/static/pics/quarantine.png"} + "img" : static_url("pics/quarantine.png")} ] return [] diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/extensions/amavis_quarantine/templatetags/amextras.py index 1591d4e8a..b92813a72 100644 --- a/extensions/amavis_quarantine/templatetags/amextras.py +++ b/extensions/amavis_quarantine/templatetags/amextras.py @@ -2,6 +2,8 @@ from django import template from django.template.loader import render_to_string from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse +from django.conf import settings +from modoboa.lib import static_url from modoboa.extensions import amavis_quarantine register = template.Library() @@ -23,27 +25,27 @@ def viewm_menu(selection, backurl, mail_id, perms): entries = [ {"name" : "back", "url" : backurl, - "img" : "/static/pics/back.png", + "img" : static_url("pics/back.png"), "label" : _("Back to list")}, {"name" : "headers", "url" : reverse(amavis_quarantine.views.viewheaders, args=[mail_id]), - "img" : "/static/pics/add.png", + "img" : static_url("pics/add.png"), "label" : _("View full headers"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:600,y:500}}"}, {"name" : "release", "url" : reverse(amavis_quarantine.views.release, args=[mail_id]), - "img" : "/static/pics/release.png", + "img" : static_url("pics/release.png"), "label" : _("Release"), "confirm" : _("Release this message?")}, {"name" : "delete", "url" : reverse(amavis_quarantine.views.delete, args=[mail_id]), - "img" : "/static/pics/remove.png", + "img" : static_url("pics/remove.png"), "label" : _("Delete"), "confirm" : _("Delete this message?")}, {"name" : "options", "label" : _("Options"), - "img" : "/static/pics/settings.png", + "img" : static_url("pics/settings.png"), "class" : "menubardropdown", "menu" : options_menu} ] @@ -57,15 +59,15 @@ def quar_menu(selection, perms): entries = [ {"name" : "release", "url" : "", - "img" : "/static/pics/release.png", + "img" : static_url("pics/release.png"), "label" : _("Release")}, {"name" : "delete", "url" : "", - "img" : "/static/pics/remove.png", + "img" : static_url("pics/remove.png"), "label" : _("Delete")}, {"name" : "select", "url" : "", - "img" : "/static/pics/domains.png", + "img" : static_url("pics/domains.png"), "label" : _("Select"), "class" : "menubardropdown", "menu" : [ @@ -88,5 +90,7 @@ def quar_menu(selection, perms): menu = render_to_string('common/menu.html', {"selection" : selection, "entries" : entries, "perms" : perms}) - searchbar = render_to_string('common/email_searchbar.html', {}) + searchbar = render_to_string('common/email_searchbar.html', { + "MEDIA_URL" : settings.MEDIA_URL + }) return menu + searchbar diff --git a/extensions/postfix_autoreply/main.py b/extensions/postfix_autoreply/main.py index 36f16161f..b21eea112 100644 --- a/extensions/postfix_autoreply/main.py +++ b/extensions/postfix_autoreply/main.py @@ -10,7 +10,7 @@ functionality into Postfix. from django.conf.urls.defaults import include from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ -from modoboa.lib import events, parameters +from modoboa.lib import events, parameters, static_url from models import * def infos(): @@ -53,7 +53,7 @@ def menu(**kwargs): return [ {"name" : "autoreply", "url" : reverse(views.autoreply), - "img" : "/static/pics/auto-reply.png", + "img" : static_url("pics/auto-reply.png"), "class" : "boxed", "rel" : "{handler:'iframe',size:{x:440,y:400}}", "label" : _("Auto-reply message")} diff --git a/extensions/stats/main.py b/extensions/stats/main.py index b5001c923..653ec23a1 100644 --- a/extensions/stats/main.py +++ b/extensions/stats/main.py @@ -10,7 +10,7 @@ sent, received, bounced, rejected from django.core.urlresolvers import reverse from django.utils.translation import ugettext as _ from django.conf.urls.defaults import * -from modoboa.lib import events, parameters +from modoboa.lib import events, parameters, static_url def infos(): return { @@ -45,13 +45,13 @@ def menu(**kwargs): {"label" : _("Statistics"), "name" : "stats", "url" : reverse('domindex', args=[domain_id]), - "img" : "/static/pics/graph.png"} + "img" : static_url("pics/graph.png")} ] if kwargs["target"] == "admin_menu_box": return [ {"name" : "stats", "label" : _("Statistics"), "url" : reverse('fullindex'), - "img" : "/static/pics/graph.png"} + "img" : static_url("pics/graph.png")} ] return [] diff --git a/extensions/webmail/lib.py b/extensions/webmail/lib.py index 17344db98..3e4e993b8 100644 --- a/extensions/webmail/lib.py +++ b/extensions/webmail/lib.py @@ -16,7 +16,7 @@ from django.utils.translation import ugettext as _ from django.conf import settings from modoboa.lib import decode, tables, imap_utf7, Singleton from modoboa.lib.email_listing import MBconnector, EmailListing, Email -from modoboa.lib import tables, imap_utf7, parameters +from modoboa.lib import tables, imap_utf7, parameters, static_url class WMtable(tables.Table): @@ -369,7 +369,7 @@ class IMAPconnector(object): if not "\\Seen" in flags: msg["class"] = "unseen" if "\\Answered" in flags: - msg["img_flags"] = "/static/pics/answered.png" + msg["img_flags"] = static_url("pics/answered.png") tmpdict[imapid] = msg for id in submessages: result += [tmpdict[id]] diff --git a/extensions/webmail/main.py b/extensions/webmail/main.py index 962aed6ee..b81733ca6 100644 --- a/extensions/webmail/main.py +++ b/extensions/webmail/main.py @@ -2,7 +2,7 @@ from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse from django.conf.urls.defaults import include -from modoboa.lib import events, parameters +from modoboa.lib import events, parameters, static_url def init(): events.register("UserMenuDisplay", menu) @@ -69,7 +69,7 @@ def menu(**kwargs): {"name" : "webmail", "label" : _("Webmail"), "url" : reverse(views.index), - "img" : "/static/pics/webmail.png"} + "img" : static_url("pics/webmail.png")} ] def userlogin(**kwargs): diff --git a/extensions/webmail/templates/index.html b/extensions/webmail/templates/index.html index 06700ab80..6427dfcf5 100644 --- a/extensions/webmail/templates/index.html +++ b/extensions/webmail/templates/index.html @@ -40,7 +40,7 @@ item.removeClass("hidden"); item.addClass("visible"); $$("li[name=" + item.get("name") + "]").each(function(item) { - item.setStyle("background", "url('/static/pics/folder-open.png') no-repeat"); + item.setStyle("background", "url('{{ MEDIA_URL }}pics/folder-open.png') no-repeat"); }); }); } @@ -157,10 +157,10 @@ $$("li[class*=clickable]").addEvent("click", function(evt) { $$("ul[name=" + evt.target.get("name") + "]").each(function(item) { if (item.hasClass("hidden")) { - evt.target.setStyle("background", "url('/static/pics/folder-open.png') no-repeat"); + evt.target.setStyle("background", "url('{{ MEDIA_URL }}pics/folder-open.png') no-repeat"); item.removeClass("hidden").addClass("visible"); } else { - evt.target.setStyle("background", "url('/static/pics/subfolders.png') no-repeat"); + evt.target.setStyle("background", "url('{{ MEDIA_URL }}pics/subfolders.png') no-repeat"); item.removeClass("visible").addClass("hidden"); } }); @@ -170,7 +170,7 @@ if (navparams.has("order")) { src = navparams.get("order").charAt(0) == "-" ? "down_arrow.png" : "up_arrow.png"; th = $$("th[id=" + navparams.get("order").substring(1) + "]"); - th.getElement("img").set("src", "/static/pics/" + src); + th.getElement("img").set("src", "{{ MEDIA_URL }}pics/" + src); th.getElement("img").setStyle("display", "block"); th.addClass("selected"); } diff --git a/extensions/webmail/templatetags/webextras.py b/extensions/webmail/templatetags/webextras.py index c52d3dea2..90939ab57 100644 --- a/extensions/webmail/templatetags/webextras.py +++ b/extensions/webmail/templatetags/webextras.py @@ -2,9 +2,10 @@ from django import template from django.template.loader import render_to_string from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse +from django.conf import settings from modoboa.extensions import webmail from modoboa.extensions.webmail.lib import IMAPheader -from modoboa.lib import parameters +from modoboa.lib import parameters, static_url register = template.Library() @@ -13,22 +14,22 @@ def viewm_menu(selection, backurl, folder, mail_id, user): entries = [ {"name" : "back", "url" : backurl, - "img" : "/static/pics/back.png", + "img" : static_url("pics/back.png"), "label" : _("Back")}, {"name" : "reply", "url" : "reply/", - "img" : "/static/pics/reply.png", + "img" : static_url("pics/reply.png"), "label" : _("Reply")}, {"name" : "replyall", "url" : "reply/", - "img" : "/static/pics/reply-all.png", + "img" : static_url("pics/reply-all.png"), "label" : _("Reply all")}, {"name" : "forward", "url" : "forward/", - "img" : "/static/pics/alias.png", + "img" : static_url("pics/alias.png"), "label" : _("Forward")}, {"name" : "delete", - "img" : "/static/pics/remove.png", + "img" : static_url("pics/remove.png"), "url" : reverse(webmail.views.delete, args=[folder, mail_id]), "label" : _("Delete")}, ] @@ -42,11 +43,11 @@ def compose_menu(selection, backurl, user): entries = [ {"name" : "back", "url" : backurl, - "img" : "/static/pics/back.png", + "img" : static_url("pics/back.png"), "label" : _("Back")}, {"name" : "sendmail", "url" : "", - "img" : "/static/pics/send-receive.png", + "img" : static_url("pics/send-receive.png"), "label" : _("Send")}, ] return render_to_string('common/menu.html', @@ -58,10 +59,10 @@ def listing_menu(selection, folder, user): entries = [ {"name" : "compose", "url" : reverse(webmail.views.compose), - "img" : "/static/pics/edit.png", + "img" : static_url("pics/edit.png"), "label" : _("New message")}, {"name" : "mark", - "img" : "/static/pics/domains.png", + "img" : static_url("pics/domains.png"), "label" : _("Mark messages"), "class" : "menubardropdown", "menu" : [ @@ -74,14 +75,14 @@ def listing_menu(selection, folder, user): ] }, {"name" : "actions", - "img" : "/static/pics/settings.png", + "img" : static_url("pics/settings.png"), "label" : _("Actions"), "class" : "menubardropdown", "width" : "150", "menu" : [ {"name" : "fdaction", "label" : _("Compress folder"), - "img" : "/static/pics/compress.png", + "img" : static_url("pics/compress.png"), "url" : "compact/%s/" % folder}, ] } @@ -90,13 +91,15 @@ def listing_menu(selection, folder, user): entries[2]["menu"] += [ {"name" : "fdaction", "label" : _("Empty folder"), - "img" : "/static/pics/clear.png", + "img" : static_url("pics/clear.png"), "url" : reverse(webmail.views.empty, args=[folder])} ] menu = render_to_string("common/menu.html", {"selection" : selection, "entries" : entries, "user" : user}) - searchbar = render_to_string("common/email_searchbar.html", {}) + searchbar = render_to_string("common/email_searchbar.html", { + "MEDIA_URL" : settings.MEDIA_URL + }) return menu + searchbar @register.simple_tag diff --git a/lib/__init__.py b/lib/__init__.py index 01bd03888..a74d4ef36 100644 --- a/lib/__init__.py +++ b/lib/__init__.py @@ -2,6 +2,7 @@ import os import sys import time +from django.conf import settings from django.template import RequestContext from django.shortcuts import render_to_response from django.template.loader import render_to_string @@ -37,6 +38,15 @@ def _ctx_ok(url): def _ctx_ko(tpl, ctx): return {"status" : "ko", "content" : render_to_string(tpl, ctx)} +def static_url(path): + """Returns the correct static url for a given file + + :param path: the targeted static media + """ + if path.startswith("/"): + path = path[1:] + return "%s%s" % (settings.MEDIA_URL, path) + def getctx(status, level=1, callback=None, **kwargs): if not callback: callername = sys._getframe(level).f_code.co_name diff --git a/lib/email_listing.py b/lib/email_listing.py index 088385b3b..b1cb9c326 100644 --- a/lib/email_listing.py +++ b/lib/email_listing.py @@ -4,9 +4,9 @@ import re import os import time, random, hashlib from email.header import decode_header -import lxml import lxml.html from lxml import etree +from django.conf import settings from django.template.loader import render_to_string from django.template import Template, Context from django.utils.translation import ugettext as _ @@ -103,7 +103,7 @@ class EmailListing: def render_navbar(self, page): if page is None: return "" - context = {"page" : page} + context = {"page" : page, "MEDIA_URL" : settings.MEDIA_URL} return render_to_string("common/navbar.html", context) def fetch(self, request, id_start, id_stop): @@ -213,8 +213,6 @@ class Email(object): :param fname: the image associated filename :param part: the email part that contains the image payload """ - from django.conf import settings - if re.search("\.\.", fname): return None path = "/static/tmp/" + fname diff --git a/templates/nlayout.html b/templates/nlayout.html index 6a5fce49b..a8288ba22 100644 --- a/templates/nlayout.html +++ b/templates/nlayout.html @@ -6,9 +6,9 @@ Modoboa - {%block pagetitle %}{% endblock %} - - - + + +