source: extensions/webmail/templates/index.html @ 117:46e0f085f4ef

Revision 117:46e0f085f4ef, 9.8 KB checked in by tonio, 6 months ago (diff)

Email forwarding.

Line 
1{% extends "common/email_listing.html" %}
2{% load i18n %}
3{% block css %}
4#leftcol {
5  float: left;
6  width: 150px;
7}
8
9thead tr {
10  position: relative;
11  top: expression(offsetParent.scrollTop); /*IE5+ only*/
12  z-index: 1;
13}
14
15table#emails > tbody {
16  position: fixed;
17  bottom: 35px;
18  top: 155px;
19  left: 155px;
20  right: 0px;
21  overflow-x: hidden;
22  overflow-y: auto;
23}
24
25#emails th {
26  /*text-align: center;*/
27}
28
29#emails tr {
30  width: 100%;
31}
32
33.box h3 {
34  font-size: small;
35  margin: 2px 0px 2px 0px;
36  text-align: center;
37}
38
39.box ul {
40  list-style: none;
41  padding: 5px 5px;
42  margin: 0;
43}
44
45.box li {
46  clear: both;
47  margin-bottom: 4px;
48}
49
50.box li.selected {
51  background: #ffffcc;
52}
53
54.box a:link, .box a:visited {
55  background: transparent;
56  color: black;
57  font-weight: bold;
58  text-decoration: none;
59}
60
61.box a:hover {
62  color: #6AB0C5;
63  text-decoration: none;
64}
65
66.box img {
67  float: left;
68  margin-right: 2px;
69  border: 0;
70}
71
72th {
73  /*-moz-box-shadow: 0px -15px 10px -10px rgba(0,0,0,0.6) inset;
74  -webkit-box-shadow: 0px -15px 10px -10px rgba(0,0,0,0.6) inset;*/
75}
76
77th.selected {
78  background: #EEEEEE;
79}
80
81.draggable {2
82  cursor: move;
83}
84
85.dragging {
86  background: #6AB0C5;
87}
88
89tr {
90  position: relative;
91  border-bottom: 1px solid #C8D6E8;
92}
93
94tr.selected {
95  background: #ffffcc;
96}
97
98{% endblock %}
99{% block js %}
100  navparams = new Hash({
101  {% for k, v in navparams.items %}
102  {{ k }} : "{{ v }}",
103  {% endfor %}
104  });
105
106  updatelisting = function(resp) {
107    if ($defined(resp.menu)) {
108      $("menubar").set("html", resp.menu);
109      parse_menubar("menubar");
110    }
111    $("listing").set("html", resp.listing);
112    if ($defined(resp.navbar)) {
113      $("navbar").set("html", resp.navbar);
114      $("navbar").getChildren("a").addEvent("click", navbarcallback);
115    }
116    $$("a[name=compose]").addEvent("click", loadCompose);
117    $$("a[name=empty]").addEvent("click", empty);
118    if (!checkSelection()) {
119      select($$("a[href=INBOX]"));
120    }
121  }
122
123  empty = function(event) {
124    event.stop();
125    new Request.JSON({url : event.target.get("href"), onSuccess : function(resp) {
126      updatelisting(resp);
127    }}).get();
128  }
129
130  checkSelection = function() {
131    var selection = false;
132
133    $$("a[name=loadfolder]").each(function(item) {
134      if (!selection) {
135        selection = item.getParent().hasClass("selected");
136      }
137    });
138    return selection;
139  }
140
141  select = function(obj) {
142    $$("a[name=loadfolder]").each(function(item) {
143      item.getParent().removeClass("selected");
144      item.getParent().addClass("droppable");
145    });
146    obj.getParent().removeClass("droppable");
147    obj.getParent().addClass("selected");
148  }
149
150  {% url extensions.webmail.main.folder as view_url %}
151  viewmail = function(event) {
152    event.stop();
153    if (event.target.parentNode.id) {
154      var url = event.target.parentNode.id + "/";
155      event.target.parentNode.setStyle("background", "#ffffcc");
156      current_anchor.baseurl(url).update();
157    }
158  }
159  register_callback("viewmail", function(resp) {
160    updatelisting(resp, "hidden");
161    $$("a[name=back]").addEvent("click", loadFolder);
162    $$("a[name=reply]").addEvent("click", reply);
163    $$("a[name=replyall]").addEvent("click", replyall);
164    $$("a[name=forward]").addEvent("click", forward);
165    $$("a[name=delete]").addEvent("click", function(event) {
166      var lnk = event.target;
167
168      event.stop();
169      new Request.JSON({url: lnk.get("href"),
170                        onSuccess: get_callback("folder")}).get();
171    });
172    setDivHeight("mailcontent", 5, 0);
173  });
174
175  compose_callback = function(resp) {
176    updatelisting(resp);
177    window.addEvent("resize", function(evt) {
178      setDivHeight("id_body", $("mailheader").getSize().y, 0);
179    });
180    $$("a[name=back]").addEvent("click", loadFolder);
181    $$("a[name=sendmail]").addEvent("click", function(evt) {
182      evt.stop();
183      $("composemail").set("send", {
184        onSuccess: function(resp) {
185          resp = JSON.decode(resp);
186          if (resp.status == "ko") {
187            updatelisting(resp);
188            window.fireEvent("resize");
189            return;
190          }
191          current_anchor.parse_string(resp.url, true).setparams(navparams);
192          current_anchor.update();
193        }
194      });
195      $("composemail").send();
196    });
197    window.fireEvent("resize");
198  }
199
200  loadCompose = function(event) {
201    event.stop();
202    current_anchor.baseurl("compose/").update();
203  }
204  register_callback("compose", compose_callback);
205
206  reply = function(event) {
207    event.stop();
208    location.hash += event.target.get("href");
209  }
210  register_callback("reply", compose_callback);
211  replyall = function(event) {
212    event.stop();
213    location.hash += event.target.get("href") + "?all=1";
214  }
215  register_callback("replyall", compose_callback);
216  forward = function(event) {
217    event.stop();
218    location.hash += event.target.get("href");
219  }
220  register_callback("forward", compose_callback);
221
222  loadFolder = function(event, obj) {
223    if (!$defined(obj)) {
224      obj = event.target;
225    }
226    event.stop();
227    current_anchor.parse_string(obj.get("href"), true).setparams(navparams);
228    current_anchor.update();
229  }
230  register_callback("folder", function(resp) {
231    updatelisting(resp);
232    if (navparams.has("order")) {
233      src = navparams.get("order").charAt(0) == "-" ? "down_arrow.png" : "up_arrow.png";
234      th = $$("th[id=" + navparams.get("order").substring(1) + "]");
235      th.getElement("img").set("src", "/static/pics/" + src);
236      th.addClass("selected");
237    }
238    var selectedRows = new Array();
239    $$("tr").addEvent("click", function(event) {
240      var tr = event.target.getParent();
241      if (!tr.hasClass("selected")) {
242        tr.addClass("selected");
243        selectedRows.include(tr);
244      } else {
245        tr.removeClass("selected");
246        selectedRows.erase(tr);
247      }
248    });
249
250    $$("tr").each(function(item) {
251      new Drag.Move(item, {
252        droppables: ".droppable",
253      }).addEvents({
254        "start" : function(item) {
255          if (!item.hasClass("selected")) {
256            selectedRows.each(function(item, index) {
257              item.removeClass("selected");
258            });
259            selectedRows.empty();
260            item.addClass("selected");
261            selectedRows.include(item);
262          }
263          var block = new Element("div", {id: "draggeditems"})
264            .setStyles({"position" : "absolute",
265                        "opacity" : 0.8,
266                        "width" : "200px",
267                        "padding" : "5px",
268                        "text-align" : "center",
269                        "height" : "25px",
270                        "border" : "1px solid #333",
271                        "background" : "white"})
272            .setStyles(item.getPosition())
273            .inject(document.body);
274          block.set("html", "Moving " + selectedRows.length + " messages");
275          this.oldelement = this.element;
276          this.element = block;
277        },
278        "cancel" : function(item) {
279          if ($defined(this.oldelement)) {
280            item.dispose();
281            delete(item);
282            this.element = this.oldelement;
283          }
284        },
285        "enter" : function(item, droppable) {
286          droppable.addClass("dragging");
287        },
288        "leave" : function(item, droppable) {
289          droppable.removeClass("dragging");
290        },
291        "drop" : function(item, droppable, event) {
292          item.dispose();
293          delete(item);
294          if (!droppable) {
295            this.element = this.oldelement;
296            return;
297          }
298          droppable.removeClass("dragging");
299          dest = droppable.getFirst("a").get("href");
300          msgset = new Array();
301          selectedRows.each(function(item, index) {
302            msgset.include(item.get("id"));
303          });
304          {% url extensions.webmail.main.move as moveurl %}
305          new Request.JSON({url: "{{ moveurl }}",
306                            onSuccess: get_callback("folder")}
307          ).get({msgset : msgset.join(), to : dest});
308        },
309      });
310    });
311    $("toggleselect").addEvent("click", function(evt) {
312       var checked = evt.target.get("checked");
313       if (checked) {
314         $$("tbody>tr").each(function(item) {
315           item.addClass("selected");
316           selectedRows.include(item);
317         });
318       } else {
319         $$("tr").each(function(item) { item.removeClass("selected"); });
320         selectedRows.empty();
321       }
322    });
323
324
325    $$("tr").addEvent("dblclick", viewmail);
326    $$("th[class*=sortable]").addEvent("click", function(evt) {
327        var tmp = "?";
328        var order = (navparams.has("order")) ? navparams.get("order") : "";
329       
330        if (order == "") {
331            order = current_anchor.getparam("order");
332        }
333        if (order.substring(1) == evt.target.id) {
334            var sign = (order.charAt(0) == '+') ? '-' : '+';
335            order = sign + evt.target.id;
336        } else {
337            order = "-" + evt.target.id;
338        }
339        navparams.set("order", order);
340        current_anchor.setparams(navparams).update();
341    });
342  });
343
344  navbarcallback = function(event) {
345   event.stop();
346   current_anchor.setparams(navparams);
347   current_anchor.parse_string(event.target.getParent().get("href")).update();
348  }
349
350  foldercallback = function(event) {
351    select(event.target);
352    loadFolder(event, event.target);
353  }
354
355  ajaxListener("INBOX/", updatelisting);
356  $$("a[name=loadfolder]").addEvent("click", foldercallback);
357{% endblock %}
358{% block middletitle %}{% trans "Webmail" %}{% endblock %}
359{% block leftcol %}
360<div id="leftcol" class="box">
361  <h3>{% trans "Folders" %}</h3>
362  <ul>
363  {% for fd in folders %}
364  {% url extensions.webmail.main.folder fd.name as fdurl %}
365  <li class="droppable">
366    <a href="{{ fd.name }}" name="loadfolder">
367      {% if fd.icon %}<img src="/static/pics/{{ fd.icon }}" />
368      {% else %}<img src="/static/pics/folder.png" />
369      {% endif %}
370    {{ fd.name }}
371    </a>
372  </li>
373  {% endfor %}
374  </ul>
375</div>
376{% endblock %}
Note: See TracBrowser for help on using the repository browser.