Realtime work in progress: switch makeNoticeData to async -- next we'll load fresh copies from server, maintaining proper language and plugin enhancements.

This commit is contained in:
Brion Vibber 2011-03-14 12:32:39 -07:00
parent ed2d224df5
commit 1e36593a23

View File

@ -163,50 +163,51 @@ RealtimeUpdate = {
return; return;
} }
var noticeItem = RealtimeUpdate.makeNoticeItem(data); RealtimeUpdate.makeNoticeItem(data, function(noticeItem) {
var noticeItemID = $(noticeItem).attr('id'); var noticeItemID = $(noticeItem).attr('id');
var list = $("#notices_primary .notices:first") var list = $("#notices_primary .notices:first")
var prepend = true; var prepend = true;
var threaded = list.hasClass('threaded-notices'); var threaded = list.hasClass('threaded-notices');
if (threaded && data.in_reply_to_status_id) { if (threaded && data.in_reply_to_status_id) {
// aho! // aho!
var parent = $('#notice-' + data.in_reply_to_status_id); var parent = $('#notice-' + data.in_reply_to_status_id);
if (parent.length == 0) { if (parent.length == 0) {
// @todo fetch the original, insert it, and finish the rest // @todo fetch the original, insert it, and finish the rest
} else { } else {
// Check the parent notice to make sure it's not a reply itself. // Check the parent notice to make sure it's not a reply itself.
// If so, use it's parent as the parent. // If so, use it's parent as the parent.
var parentList = parent.closest('.notices'); var parentList = parent.closest('.notices');
if (parentList.hasClass('threaded-replies')) { if (parentList.hasClass('threaded-replies')) {
parent = parentList.closest('.notice'); parent = parentList.closest('.notice');
}
list = parent.find('.threaded-replies');
if (list.length == 0) {
list = $('<ul class="notices threaded-replies xoxo"></ul>');
parent.append(list);
}
prepend = false;
} }
list = parent.find('.threaded-replies');
if (list.length == 0) {
list = $('<ul class="notices threaded-replies xoxo"></ul>');
parent.append(list);
}
prepend = false;
} }
}
var newNotice = $(noticeItem); var newNotice = $(noticeItem);
if (prepend) { if (prepend) {
list.prepend(newNotice); list.prepend(newNotice);
} else {
var placeholder = list.find('li.notice-reply-placeholder')
if (placeholder.length > 0) {
newNotice.insertBefore(placeholder)
} else { } else {
newNotice.appendTo(list); var placeholder = list.find('li.notice-reply-placeholder')
SN.U.NoticeInlineReplyPlaceholder(parent); if (placeholder.length > 0) {
newNotice.insertBefore(placeholder)
} else {
newNotice.appendTo(list);
SN.U.NoticeInlineReplyPlaceholder(parent);
}
} }
} newNotice.css({display:"none"}).fadeIn(1000);
newNotice.css({display:"none"}).fadeIn(1000);
SN.U.NoticeReplyTo($('#'+noticeItemID)); SN.U.NoticeReplyTo($('#'+noticeItemID));
SN.U.NoticeWithAttachment($('#'+noticeItemID)); SN.U.NoticeWithAttachment($('#'+noticeItemID));
});
}, },
/** /**
@ -263,10 +264,11 @@ RealtimeUpdate = {
}, },
/** /**
* Builds a notice HTML block from JSON API-style data. * Builds a notice HTML block from JSON API-style data;
* loads data from server, so runs async.
* *
* @param {Object} data: extended JSON API-formatted notice * @param {Object} data: extended JSON API-formatted notice
* @return {String} HTML fragment * @param {function} callback: function(str) to receive HTML fragment
* *
* @fixme this replicates core StatusNet code, making maintenance harder * @fixme this replicates core StatusNet code, making maintenance harder
* @fixme sloppy HTML building (raw concat without escaping) * @fixme sloppy HTML building (raw concat without escaping)
@ -275,7 +277,7 @@ RealtimeUpdate = {
* *
* @access private * @access private
*/ */
makeNoticeItem: function(data) makeNoticeItem: function(data, callback)
{ {
if (data.hasOwnProperty('retweeted_status')) { if (data.hasOwnProperty('retweeted_status')) {
original = data['retweeted_status']; original = data['retweeted_status'];
@ -342,7 +344,7 @@ RealtimeUpdate = {
ni = ni+"</div>"; ni = ni+"</div>";
ni = ni+"</li>"; ni = ni+"</li>";
return ni; callback(ni);
}, },
/** /**