##// END OF EJS Templates
Updated posts must not affect bumplimit bar
neko259 -
r427:8c98a165 default
parent child Browse files
Show More
@@ -1,147 +1,147 b''
1 /*
1 /*
2 @licstart The following is the entire license notice for the
2 @licstart The following is the entire license notice for the
3 JavaScript code in this page.
3 JavaScript code in this page.
4
4
5
5
6 Copyright (C) 2013 neko259
6 Copyright (C) 2013 neko259
7
7
8 The JavaScript code in this page is free software: you can
8 The JavaScript code in this page is free software: you can
9 redistribute it and/or modify it under the terms of the GNU
9 redistribute it and/or modify it under the terms of the GNU
10 General Public License (GNU GPL) as published by the Free Software
10 General Public License (GNU GPL) as published by the Free Software
11 Foundation, either version 3 of the License, or (at your option)
11 Foundation, either version 3 of the License, or (at your option)
12 any later version. The code is distributed WITHOUT ANY WARRANTY;
12 any later version. The code is distributed WITHOUT ANY WARRANTY;
13 without even the implied warranty of MERCHANTABILITY or FITNESS
13 without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
14 FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
15
15
16 As additional permission under GNU GPL version 3 section 7, you
16 As additional permission under GNU GPL version 3 section 7, you
17 may distribute non-source (e.g., minimized or compacted) forms of
17 may distribute non-source (e.g., minimized or compacted) forms of
18 that code without the copy of the GNU GPL normally required by
18 that code without the copy of the GNU GPL normally required by
19 section 4, provided you include this license notice and a URL
19 section 4, provided you include this license notice and a URL
20 through which recipients can access the Corresponding Source.
20 through which recipients can access the Corresponding Source.
21
21
22 @licend The above is the entire license notice
22 @licend The above is the entire license notice
23 for the JavaScript code in this page.
23 for the JavaScript code in this page.
24 */
24 */
25
25
26 var THREAD_UPDATE_DELAY = 10000;
26 var THREAD_UPDATE_DELAY = 10000;
27
27
28 var loading = false;
28 var loading = false;
29 var lastUpdateTime = null;
29 var lastUpdateTime = null;
30
30
31 function blink(node) {
31 function blink(node) {
32 var blinkCount = 2;
32 var blinkCount = 2;
33 var blinkDelay = 250;
33 var blinkDelay = 250;
34
34
35 var nodeToAnimate = node;
35 var nodeToAnimate = node;
36 for (var i = 0; i < blinkCount; i++) {
36 for (var i = 0; i < blinkCount; i++) {
37 nodeToAnimate = nodeToAnimate.fadeOut(blinkDelay).fadeIn(blinkDelay);
37 nodeToAnimate = nodeToAnimate.fadeOut(blinkDelay).fadeIn(blinkDelay);
38 }
38 }
39 }
39 }
40
40
41 function updateThread() {
41 function updateThread() {
42 if (loading) {
42 if (loading) {
43 return;
43 return;
44 }
44 }
45
45
46 loading = true;
46 loading = true;
47
47
48 var threadPosts = $('div.thread').children('.post');
48 var threadPosts = $('div.thread').children('.post');
49
49
50 var lastPost = threadPosts.last();
50 var lastPost = threadPosts.last();
51 var threadId = threadPosts.first().attr('id');
51 var threadId = threadPosts.first().attr('id');
52
52
53 var diffUrl = '/api/diff_thread/' + threadId + '/' + lastUpdateTime + '/';
53 var diffUrl = '/api/diff_thread/' + threadId + '/' + lastUpdateTime + '/';
54 $.getJSON(diffUrl)
54 $.getJSON(diffUrl)
55 .success(function(data) {
55 .success(function(data) {
56 var bottom = isPageBottom();
56 var bottom = isPageBottom();
57
57
58 var addedPosts = data.added;
58 var addedPosts = data.added;
59 for (var i = 0; i < addedPosts.length; i++) {
59 for (var i = 0; i < addedPosts.length; i++) {
60 var postText = addedPosts[i];
60 var postText = addedPosts[i];
61
61
62 var post = $(postText);
62 var post = $(postText);
63 post.appendTo(lastPost.parent());
63 post.appendTo(lastPost.parent());
64 addRefLinkPreview(post[0]);
64 addRefLinkPreview(post[0]);
65
65
66 lastPost = post;
66 lastPost = post;
67 blink(post);
67 blink(post);
68 }
68 }
69
69
70 var updatedPosts = data.updated;
70 var updatedPosts = data.updated;
71 for (var i = 0; i < updatedPosts.length; i++) {
71 for (var i = 0; i < updatedPosts.length; i++) {
72 var postText = updatedPosts[i];
72 var postText = updatedPosts[i];
73
73
74 var post = $(postText);
74 var post = $(postText);
75 var postId = post.attr('id');
75 var postId = post.attr('id');
76
76
77 var oldPost = $('div.thread').children('.post[id=' + postId + ']');
77 var oldPost = $('div.thread').children('.post[id=' + postId + ']');
78
78
79 oldPost.replaceWith(post);
79 oldPost.replaceWith(post);
80 addRefLinkPreview(post[0]);
80 addRefLinkPreview(post[0]);
81
81
82 blink(post);
82 blink(post);
83 }
83 }
84
84
85 // TODO Process deleted posts
85 // TODO Process deleted posts
86
86
87 lastUpdateTime = data.last_update;
87 lastUpdateTime = data.last_update;
88 loading = false;
88 loading = false;
89
89
90 if (bottom) {
90 if (bottom) {
91 var $target = $('html,body');
91 var $target = $('html,body');
92 $target.animate({scrollTop: $target.height()}, 1000);
92 $target.animate({scrollTop: $target.height()}, 1000);
93 }
93 }
94
94
95 $('#reply-count').text(getReplyCount());
95 $('#reply-count').text(getReplyCount());
96 $('#image-count').text(getImageCount());
96 $('#image-count').text(getImageCount());
97
97
98 updateBumplimitProgress(data.added.length + data.updated.length);
98 updateBumplimitProgress(data.added.length);
99 })
99 })
100 .error(function(data) {
100 .error(function(data) {
101 // TODO Show error message that server is unavailable?
101 // TODO Show error message that server is unavailable?
102
102
103 loading = false;
103 loading = false;
104 });
104 });
105 }
105 }
106
106
107 function isPageBottom() {
107 function isPageBottom() {
108 var scroll = $(window).scrollTop() / ($(document).height()
108 var scroll = $(window).scrollTop() / ($(document).height()
109 - $(window).height())
109 - $(window).height())
110
110
111 return scroll == 1
111 return scroll == 1
112 }
112 }
113
113
114 function initAutoupdate() {
114 function initAutoupdate() {
115 loading = false;
115 loading = false;
116
116
117 lastUpdateTime = $('.metapanel').attr('data-last-update');
117 lastUpdateTime = $('.metapanel').attr('data-last-update');
118
118
119 setInterval(updateThread, THREAD_UPDATE_DELAY);
119 setInterval(updateThread, THREAD_UPDATE_DELAY);
120 }
120 }
121
121
122 function getReplyCount() {
122 function getReplyCount() {
123 return $('.thread').children('.post').length
123 return $('.thread').children('.post').length
124 }
124 }
125
125
126 function getImageCount() {
126 function getImageCount() {
127 return $('.thread').find('img').length
127 return $('.thread').find('img').length
128 }
128 }
129
129
130 function updateBumplimitProgress(postDelta) {
130 function updateBumplimitProgress(postDelta) {
131 var progressBar = $('#bumplimit_progress');
131 var progressBar = $('#bumplimit_progress');
132 if (progressBar) {
132 if (progressBar) {
133 var postsToLimitElement = $('#left_to_limit');
133 var postsToLimitElement = $('#left_to_limit');
134
134
135 var oldPostsToLimit = parseInt(postsToLimitElement.text());
135 var oldPostsToLimit = parseInt(postsToLimitElement.text());
136 var postCount = getReplyCount();
136 var postCount = getReplyCount();
137 var bumplimit = postCount - postDelta + oldPostsToLimit;
137 var bumplimit = postCount - postDelta + oldPostsToLimit;
138
138
139 var newPostsToLimit = bumplimit - postCount;
139 var newPostsToLimit = bumplimit - postCount;
140 if (newPostsToLimit < 0) {
140 if (newPostsToLimit < 0) {
141 progressBar.remove();
141 progressBar.remove();
142 } else {
142 } else {
143 postsToLimitElement.text(newPostsToLimit);
143 postsToLimitElement.text(newPostsToLimit);
144 progressBar.width((100 - postCount / bumplimit * 100.0) + '%');
144 progressBar.width((100 - postCount / bumplimit * 100.0) + '%');
145 }
145 }
146 }
146 }
147 } No newline at end of file
147 }
General Comments 0
You need to be logged in to leave comments. Login now