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