summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-05-17 13:00:21 +0200
committerAurélien Bompard <aurelien@bompard.org>2013-05-17 13:00:21 +0200
commitab60a8ea86e2b4d0174a4bcdd6a7c1abdb78f9e5 (patch)
tree48714e22497cf5a3c9d607b6d53e621159f88d28
parent9f7faaf261dab699cb0ab386ad29a650b6c61e08 (diff)
downloadhyperkitty-ab60a8ea86e2b4d0174a4bcdd6a7c1abdb78f9e5.tar.gz
hyperkitty-ab60a8ea86e2b4d0174a4bcdd6a7c1abdb78f9e5.tar.xz
hyperkitty-ab60a8ea86e2b4d0174a4bcdd6a7c1abdb78f9e5.zip
Dynamically insert replies in the thread
Closes: #47
-rw-r--r--hyperkitty/static/css/hyperkitty-message.css6
-rw-r--r--hyperkitty/static/js/hyperkitty.js7
-rw-r--r--hyperkitty/templates/messages/temp_message.html38
-rw-r--r--hyperkitty/views/message.py16
4 files changed, 62 insertions, 5 deletions
diff --git a/hyperkitty/static/css/hyperkitty-message.css b/hyperkitty/static/css/hyperkitty-message.css
index edc5cab..3978015 100644
--- a/hyperkitty/static/css/hyperkitty-message.css
+++ b/hyperkitty/static/css/hyperkitty-message.css
@@ -194,7 +194,7 @@
}
/* The email thread */
-.even, .odd {
+.even, .odd, .temporary {
border-top: 1px solid rgb(179, 179, 179);
padding: 1em;
margin: 20px 0px 20px 0px;
@@ -205,6 +205,10 @@
.odd {
background-color: rgb(238, 238, 238);
}
+.temporary {
+ background-color: rgb(215, 215, 229);
+ display: none;
+}
.email-body {
white-space: pre;
diff --git a/hyperkitty/static/js/hyperkitty.js b/hyperkitty/static/js/hyperkitty.js
index ddebd09..a06aa79 100644
--- a/hyperkitty/static/js/hyperkitty.js
+++ b/hyperkitty/static/js/hyperkitty.js
@@ -202,14 +202,17 @@ function setup_replies(baseElem) {
$.ajax({
type: "POST",
url: form.attr("action"),
- //dataType: "json",
+ dataType: "json",
data: data,
success: function(response) {
+ var reply = $(response.message_html);
+ reply.insertAfter(form.parents(".email").first().parent());
form.parents(".reply-form").first().slideUp(function() {
form.find("textarea").val("");
+ reply.slideDown();
});
$('<div class="reply-result"><div class="alert alert-success">'
- + response + '</div></div>')
+ + response.result + '</div></div>')
.appendTo(form.parents('.email-info').first())
.delay(2000).fadeOut('slow', function() { $(this).remove(); });
},
diff --git a/hyperkitty/templates/messages/temp_message.html b/hyperkitty/templates/messages/temp_message.html
new file mode 100644
index 0000000..f518114
--- /dev/null
+++ b/hyperkitty/templates/messages/temp_message.html
@@ -0,0 +1,38 @@
+{% load url from future %}
+{% load gravatar %}
+{% load hk_generic %}
+
+<div class="temporary"
+ {% if email.level %}style="margin-left:{{ email.level|multiply:"2" }}em;"{% endif %}>
+ <!-- Start email -->
+ <div class="email">
+
+ <div class="email-header">
+ <div class="email-date inline-block pull-right">
+ <span class="date">Sent just now, not yet distributed</span>
+ </div>
+ <div class="gravatar{% if use_mockups %} pull-left{% endif %}">
+ {% gravatar email.sender_email 40 %}
+ </div>
+ <div class="email-author inline-block">
+ <span class="name">{{email.sender_name|escapeemail}}</span>
+ {% if use_mockups %}
+ <br />
+ <span class="rank">
+ Rank 8
+ </span>
+ {% endif %}
+ </div>
+ </div>
+
+ <div class="email-body"
+ >{{ email.content|snip_quoted|wordwrap:90|urlizetrunc:76|escapeemail }}</div>
+
+ <div class="email-info">
+ </div>
+
+ </div>
+ <!-- End of email -->
+</div>
+
+{# vim: set noet: #}
diff --git a/hyperkitty/views/message.py b/hyperkitty/views/message.py
index e526977..25d1e6f 100644
--- a/hyperkitty/views/message.py
+++ b/hyperkitty/views/message.py
@@ -171,8 +171,20 @@ def reply(request, mlist_fqdn, message_id_hash):
post_to_list(request, mlist, subject, form.cleaned_data["message"], headers)
except PostingFailed, e:
return HttpResponse(str(e), content_type="text/plain", status=500)
- return HttpResponse("The reply has been sent successfully.",
- mimetype="text/plain")
+
+ reply = {
+ "sender_name": "%s %s" % (request.user.first_name,
+ request.user.last_name),
+ "sender_email": request.user.email,
+ "content": form.cleaned_data["message"],
+ "level": message.thread_depth, # no need to increment, level = thread_depth - 1
+ }
+ t = loader.get_template('messages/temp_message.html')
+ html = t.render(RequestContext(request, { 'email': reply }))
+ result = {"result": "The reply has been sent successfully.",
+ "message_html": html}
+ return HttpResponse(json.dumps(result),
+ mimetype="application/javascript")
@login_required