diff --git a/extensions/webmail/imap_listing.py b/extensions/webmail/imap_listing.py index 310017911..8656cda15 100644 --- a/extensions/webmail/imap_listing.py +++ b/extensions/webmail/imap_listing.py @@ -17,11 +17,11 @@ class WMtable(tables.Table): tableid = "emails" idkey = "imapid" # selection = tables.SelectionColumn("selection", width="20px", first=True) - _1_flags = tables.ImgColumn("flags", width="5%") + _1_flags = tables.ImgColumn("flags", width="6%") _2_subject = tables.Column("subject", label=_("Subject"), - cssclass="draggable") + cssclass="draggable", width="50%") _3_from_ = tables.Column("from", width="20%", label=_("From")) - _4_date = tables.Column("date", width="10%", label=_("Date")) + _4_date = tables.Column("date", width="20%", label=_("Date")) def parse(self, header, value): diff --git a/extensions/webmail/templates/index.html b/extensions/webmail/templates/index.html index c55de985e..9417c65a6 100644 --- a/extensions/webmail/templates/index.html +++ b/extensions/webmail/templates/index.html @@ -6,6 +6,30 @@ width: 150px; } +thead tr { + position: relative; + top: expression(offsetParent.scrollTop); /*IE5+ only*/ + z-index: 1; +} + +table#emails > tbody { + position: fixed; + bottom: 35px; + top: 155px; + left: 155px; + right: 0px; + overflow-x: hidden; + overflow-y: auto; +} + +#emails th { + text-align: center; +} + +#emails tr { + width: 100%; +} + .box h3 { font-size: small; margin: 2px 0px 2px 0px; @@ -78,21 +102,22 @@ tr { }); updatelisting = function(resp, overflow) { - if (!$defined(overflow)) { + /*if (!$defined(overflow)) { overflow = "auto"; - } + }*/ if ($defined(resp.menu)) { $("menubar").set("html", resp.menu); } $("listing").set("html", resp.listing); - $("listing").setStyle("overflow", overflow); - if ($defined(resp.navbar)) { + /*if ($defined(resp.navbar)) { $("navbar").set("html", resp.navbar); + $("navbar").setStyle("display", "block"); $("navbar").getChildren("a").addEvent("click", navbarcallback); - } + }*/ $$("a[name=compose]").addEvent("click", loadCompose); $$("a[name=empty]").addEvent("click", empty); } + empty = function(event) { event.stop(); new Request.JSON({url : event.target.get("href"), onSuccess : function(resp) { @@ -169,7 +194,7 @@ tr { th.getElement("img").set("src", "/static/pics/" + src); th.addClass("selected"); } - $$("td[class*=draggable]").each(function(item) { + /*$$("td[class*=draggable]").each(function(item) { item.makeDraggable({ droppables: ".droppable", }).addEvents({ @@ -215,7 +240,7 @@ tr { } } }); - }); + });*/ $$("tr").addEvent("dblclick", viewmail); $$("th[class*=sortable]").addEvent("click", function(evt) { var tmp = "?"; @@ -235,20 +260,21 @@ tr { }); }); - navbarcallback = function(event) { + /*navbarcallback = function(event) { event.stop(); current_anchor.setparams(navparams); current_anchor.parse_string(event.target.getParent().get("href")).update(); - } + }*/ foldercallback = function(event) { select(event.target); loadFolder(event, event.target); } - ajaxListener("INBOX", updatelisting); + ajaxListener("INBOX/", updatelisting); $$("a[name=loadfolder]").addEvent("click", foldercallback); - $("navbar").getChildren("a").addEvent("click", navbarcallback); + /*$("navbar").getChildren("a").addEvent("click", navbarcallback);*/ + {% endblock %} {% block middletitle %}{% trans "Webmail" %}{% endblock %} {% block leftcol %} diff --git a/lib/email_listing.py b/lib/email_listing.py index a2d36e11d..c6c827fab 100644 --- a/lib/email_listing.py +++ b/lib/email_listing.py @@ -94,25 +94,25 @@ class EmailListing: def fetch(self, request, id_start, id_stop): table = self.tbltype(self.mbc.fetch(start=id_start, stop=id_stop, - folder=self.folder)).render(request) + folder=self.folder)) tpl = Template("""
""") - return tpl.render(Context({"table" : table})) + return tpl.render(Context({"table" : table.render(request)})) def render(self, request, pageid=1, **kwargs): page = self.paginator.getpage(pageid) + thead = listing = "" if "empty" in kwargs.keys() and not kwargs["empty"]: if not page: listing = "Empty folder" else: listing = self.fetch(request, page.id_start, page.id_stop) - else: - listing = "" elapsed = kwargs.has_key("start") and time.time() - kwargs["start"] or 0 return _render(request, self.tpl, { - "listing" : listing, "elapsed" : elapsed, + "listing" : listing, + "elapsed" : elapsed, "navbar" : self.render_navbar(page), "folders" : self.getfolders(), "selection" : self.folder, diff --git a/lib/tables.py b/lib/tables.py index 8ec897eeb..938df9cad 100644 --- a/lib/tables.py +++ b/lib/tables.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import inspect import lxml +from django.template import Template, Context from django.template.loader import render_to_string class Column: @@ -53,9 +54,9 @@ class Table(object): if isinstance(c, ImgColumn): key = "img_%s" % c.name if key in row.keys(): - nrow["cols"] += [{"value" : c.render(row[key]), "safe" : True}] + nrow["cols"] += [{"value" : c.render(row[key]), "safe" : True, "width" : c.width}] else: - nrow["cols"] += ["."] + nrow["cols"] += [{"width" : c.width}] continue if row.has_key(c.name): try: @@ -66,10 +67,38 @@ class Table(object): cssclass += (cssclass != "") and ", %s" % row["class"] or row["class"] nrow["cols"] += [{"value" : self.parse(c.name, row[c.name]), - "class" : cssclass}] + "class" : cssclass, + "width" : c.width}] self.rows += [nrow] def render(self, request): - return render_to_string("common/tables.html", { - "table" : self, "tableid" : self.tableid - }) + t = Template(""" +