[livejournal] r19060: LJSUP-8748: FriendsTimes: update page na...
Committer: pkornilov
LJSUP-8748: FriendsTimes: update page navigationU trunk/htdocs/js/journal.js
Modified: trunk/htdocs/js/journal.js
===================================================================
--- trunk/htdocs/js/journal.js 2011-05-13 10:29:02 UTC (rev 19059)
+++ trunk/htdocs/js/journal.js 2011-05-16 08:33:37 UTC (rev 19060)
@@ -129,42 +129,71 @@
}
}
-// Friends Times
-jQuery(function($) {
- $("#friendstimes").each(function() {
- var last_unreaded = +$(".b-friendstimes-f5 b").text() || 0,
- $window = $(window)
+FriendsTimes = {
+ prev_page_start: null,
+
+ init: function() {
+ jQuery(function(){
+ FriendsTimes.checkUnreaded({
+ timeout: 5000
+ });
+ FriendsTimes.bindLoadMore({
+ max_load: 4
+ });
+ });
+ },
+
+ checkUnreaded: function(conf) {
setInterval(function() {
- $.getJSON(LiveJournal.getAjaxUrl("ft_unreaded"), {
- after: Site.server_time
- }, function(data) {
- if (data.unreaded) {
- $(".b-friendstimes-f5")
- .show()
- .find("b").text(data.unreaded);
+ jQuery.ajax({
+ url: LiveJournal.getAjaxUrl("ft_unreaded"),
+ data: {
+ after: Site.server_time
+ },
+ dataType: "json",
+ timeout: conf.timeout - 1,
+ success: function(data) {
+ if (+data.unreaded) {
+ jQuery(".b-friendstimes-f5")
+ .show()
+ .find("b").text(data.unreaded);
+ }
}
});
- }, 5000);
+ }, conf.timeout);
+ },
- var more_node = $(".b-friendstimes-loading"),
- skip = +LiveJournal.parseGetArgs(location.search) || 0;
+ bindLoadMore: function(conf) {
+ var $window = jQuery(window),
+ more_node = jQuery(".b-friendstimes-loading"),
+ loaded_count = 0;
function loading_more() {
- if (more_node.offset().top <= ($window.scrollTop() + $window.height())) {
+ if ((more_node.offset().top + more_node.height()) <= ($window.scrollTop() + $window.height())) {
$window.unbind("scroll", loading_more);
+ var start_time = new Date();
jQuery.ajax({
url: LiveJournal.getAjaxUrl("ft_more"),
data: {
- skip: skip + 20
+ to: FriendsTimes.prev_page_start
},
- dataType: 'html',
+ dataType: "html",
success: function(html) {
- if (html) {
- skip += 20;
- more_node.before(html);
- $window.scroll(loading_more);
- } else {
- more_node.remove();
- }
+ // slow hide text, minimum 2sec
+ setTimeout(function() {
+ if (html) {
+ loaded_count++;
+ more_node.before(html);
+ if (loaded_count < conf.max_load) {
+ jQuery(".b-friendstimes-pages").remove();
+ $window.scroll(loading_more);
+ } else {
+ jQuery(".b-friendstimes-pages").show();
+ more_node.remove();
+ }
+ } else {
+ more_node.remove();
+ }
+ }, Math.max(0, start_time - new Date() + 2000));
},
error: function() {
// retry
@@ -173,9 +202,15 @@
});
}
}
-
+
$window.scroll(loading_more);
- });
+ }
+};
+
+jQuery(function($) {
+ if ($("#friendstimes").length) {
+ FriendsTimes.init();
+ }
});
// Share at some S2 styles
