diff --git a/extensions/webmail/static/css/webmail.css b/extensions/webmail/static/css/webmail.css index 8e861793f..f89ad4ac2 100644 --- a/extensions/webmail/static/css/webmail.css +++ b/extensions/webmail/static/css/webmail.css @@ -42,6 +42,9 @@ html > body #listing { width: 100%; /*position: relative;*/ border-bottom: 1px solid #C8D6E8; + user-select: none; /* CSS3 */ + -moz-user-select: none; /* Gecko (Firefox) */ + -khtml-user-select:none; /* Webkit (Safari, Chrome) */ } tr.selected { diff --git a/extensions/webmail/templates/webmail/index.html b/extensions/webmail/templates/webmail/index.html index d8b3f79a1..aa3b7c9f5 100644 --- a/extensions/webmail/templates/webmail/index.html +++ b/extensions/webmail/templates/webmail/index.html @@ -208,15 +208,57 @@ } var selectedRows = new Array(); + var fromrow = -1; + var torow = -1; + + $(document.body).addEvent("keydown", function(event) { + if (event.shift) { + event.stop(); + } + }); + + /* The IE way for disabling default selection */ + $$("tbody>tr").set("unselectable", "on"); $$("tbody>tr").addEvent("click", function(event) { var tr = $(event.target).getParent(); + + if (event.shift && fromrow != -1) { + var currentrow = parseInt(tr.get("name")); + + if (fromrow < currentrow) { + rangeUp2Down(fromrow, currentrow); + } else { + rangeDown2Up(fromrow, currentrow); + } + fromrow = currentrow; + return; + } + fromrow = parseInt(tr.get("name")); + toggleSelectRow(tr); + }); + + rangeUp2Down = function(start, end) { + for (var i = start + 1; i <= end; i++) { + var tr = $$("tr[name=" + i + "]")[0]; + toggleSelectRow(tr) + } + } + + rangeDown2Up = function(start, end) { + for (var i = start - 1; i >= end; i--) { + var tr = $$("tr[name=" + i + "]")[0]; + toggleSelectRow(tr) + } + } + + toggleSelectRow = function(tr) { if (!tr.hasClass("selected")) { selectRow(tr); } else { unselectRow(tr, true); } - }); + } selectRow = function(tr) { tr.addClass("selected"); diff --git a/lib/tables.py b/lib/tables.py index 58a44fcca..86b5e8be0 100644 --- a/lib/tables.py +++ b/lib/tables.py @@ -54,8 +54,9 @@ class Table(object): except AttributeError: self.columns += [m[1]] self.rows = [] + trcpt = 0 for row in rows: - nrow = {"id" : row[self.idkey], "cols" : []} + nrow = {"id" : row[self.idkey], "cols" : [], "trcpt" : trcpt} for c in self.columns: newcol = {"name" : c.name} for key in ["width", "align", "cssclass"]: @@ -82,6 +83,7 @@ class Table(object): newcol["value"] = row[c.name] nrow["cols"] += [newcol] self.rows += [nrow] + trcpt += 1 def render(self, request): if len(self.rows): diff --git a/templates/common/table_body.html b/templates/common/table_body.html index c218d8902..25e368bd8 100644 --- a/templates/common/table_body.html +++ b/templates/common/table_body.html @@ -1,6 +1,6 @@
{% for row in table.rows %} -