summaryrefslogtreecommitdiffstats
path: root/hyperkitty/static/js/hyperkitty.js
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-05-14 13:44:42 +0200
committerAurélien Bompard <aurelien@bompard.org>2013-05-14 13:44:42 +0200
commitfb6423fd8d2e0068c9c5b5bb8a643ea991e59739 (patch)
tree5b8e07532ca7763052017e3027eb8db8affa06e6 /hyperkitty/static/js/hyperkitty.js
parent4b1df7bbdb0f0fa35cf738235aff8170a37b7d04 (diff)
downloadhyperkitty-fb6423fd8d2e0068c9c5b5bb8a643ea991e59739.tar.gz
hyperkitty-fb6423fd8d2e0068c9c5b5bb8a643ea991e59739.tar.xz
hyperkitty-fb6423fd8d2e0068c9c5b5bb8a643ea991e59739.zip
Speed up page loading on long threads
Speed up page loading on threads with many replies by loading the replies asynchronously. Preserve search engine indexation by detecting bots and serving the usual page in one go.
Diffstat (limited to 'hyperkitty/static/js/hyperkitty.js')
-rw-r--r--hyperkitty/static/js/hyperkitty.js100
1 files changed, 72 insertions, 28 deletions
diff --git a/hyperkitty/static/js/hyperkitty.js b/hyperkitty/static/js/hyperkitty.js
index 79cec43..ddebd09 100644
--- a/hyperkitty/static/js/hyperkitty.js
+++ b/hyperkitty/static/js/hyperkitty.js
@@ -147,8 +147,43 @@ function setup_favorites() {
* Replies
*/
-function setup_replies() {
- $("a.reply").click(function(e) {
+function setup_emails_list(baseElem) {
+ if (!baseElem) {
+ baseElem = document;
+ }
+ // Attachements
+ $(baseElem).find(".email-info .attachments a.attachments").each(function() {
+ var att_list = $(this).next("ul.attachments-list");
+ var pos = $(this).position();
+ att_list.css("left", pos.left);
+ $(this).click(function() {
+ att_list.slideToggle('fast');
+ });
+ });
+ // Quotes
+ $(baseElem).find('div.email-body .quoted-switch a')
+ .click(function(e) {
+ e.preventDefault();
+ $(this).parent().next(".quoted-text").slideToggle('fast');
+ });
+ setup_replies(baseElem);
+}
+
+function fold_quotes(baseElem) {
+ $(baseElem).find('div.email-body .quoted-text').each(function() {
+ var linescount = $(this).text().split("\n").length;
+ if (linescount > 3) {
+ // hide if the quote is more than 3 lines long
+ $(this).hide();
+ }
+ });
+}
+
+function setup_replies(baseElem) {
+ if (!baseElem) {
+ baseElem = document;
+ }
+ $(baseElem).find("a.reply").click(function(e) {
e.preventDefault();
if (!$(this).hasClass("disabled")) {
$(this).next().slideToggle("fast", function() {
@@ -158,7 +193,7 @@ function setup_replies() {
});
}
});
- $(".reply-form button[type='submit']").click(function(e) {
+ $(baseElem).find(".reply-form button[type='submit']").click(function(e) {
e.preventDefault();
var form = $(this).parents("form").first();
// remove previous error messages
@@ -186,11 +221,11 @@ function setup_replies() {
}
});
});
- $(".reply-form a.cancel").click(function(e) {
+ $(baseElem).find(".reply-form a.cancel").click(function(e) {
e.preventDefault();
$(this).parents(".reply-form").first().slideUp();
});
- $(".reply-form a.quote").click(function(e) {
+ $(baseElem).find(".reply-form a.quote").click(function(e) {
e.preventDefault();
var quoted = $(this).parents(".email").first()
.find(".email-body").clone()
@@ -220,7 +255,7 @@ function setup_replies() {
this_form.find("textarea").focus();
}
}
- $(".reply-form input[name='newthread']").change(function() {
+ $(baseElem).find(".reply-form input[name='newthread']").change(function() {
set_new_thread($(this));
}).change();
}
@@ -312,28 +347,36 @@ function activity_graph(elem_id, dates, counts, baseurl) {
.text("Messages");
}
+
/*
- * Misc.
+ * Thread replies list
*/
-
-function setup_attachments() {
- $(".email-info .attachments a.attachments").each(function() {
- var att_list = $(this).next("ul.attachments-list");
- var pos = $(this).position();
- att_list.css("left", pos.left);
- $(this).click(function() {
- att_list.slideToggle('fast');
- });
+function update_thread_replies(url) {
+ $.ajax({
+ dataType: "json",
+ url: url,
+ success: function(data) {
+ // replies
+ var newcontent = $(data.replies_html);
+ $(".replies").html(newcontent);
+ // re-bind events
+ setup_emails_list(newcontent);
+ fold_quotes(newcontent);
+ setup_disabled_tooltips(newcontent);
+ setup_vote(newcontent);
+ // participants list
+ $("#participants").html(data.participants_html);
+ },
+ error: function(jqXHR, textStatus, errorThrown) {
+ alert(jqXHR.responseText);
+ }
});
}
-function setup_quotes() {
- $('div.email-body .quoted-switch a')
- .click(function(e) {
- e.preventDefault();
- $(this).parent().next(".quoted-text").slideToggle('fast');
- });
-}
+
+/*
+ * Misc.
+ */
function setup_months_list() {
var current = $("#months-list li.current").parent().prev();
@@ -345,8 +388,11 @@ function setup_months_list() {
$("#months-list").accordion({ collapsible: true, active: current });
}
-function setup_disabled_tooltips() {
- $("a.disabled").tooltip().click(function (e) {
+function setup_disabled_tooltips(baseElem) {
+ if (!baseElem) {
+ baseElem = document;
+ }
+ $(baseElem).find("a.disabled").tooltip().click(function (e) {
e.preventDefault();
});
}
@@ -362,12 +408,10 @@ function setup_flash_messages() {
$(document).ready(function() {
setup_vote();
- setup_attachments();
setup_add_tag();
- setup_quotes();
setup_months_list();
setup_favorites();
- setup_replies();
+ setup_emails_list();
setup_disabled_tooltips();
setup_flash_messages();
});