Show More
@@ -30,6 +30,13 b' var POST_UPDATED = 1;' | |||||
30 |
|
30 | |||
31 | var JS_AUTOUPDATE_PERIOD = 20000; |
|
31 | var JS_AUTOUPDATE_PERIOD = 20000; | |
32 |
|
32 | |||
|
33 | var ALLOWED_FOR_PARTIAL_UPDATE = [ | |||
|
34 | 'refmap', | |||
|
35 | 'post-info' | |||
|
36 | ]; | |||
|
37 | ||||
|
38 | var ATTR_CLASS = 'class'; | |||
|
39 | ||||
33 | var wsUser = ''; |
|
40 | var wsUser = ''; | |
34 |
|
41 | |||
35 | var unreadPosts = 0; |
|
42 | var unreadPosts = 0; | |
@@ -165,7 +172,8 b' function updatePost(postHtml) {' | |||||
165 | var type; |
|
172 | var type; | |
166 |
|
173 | |||
167 | if (existingPosts.size() > 0) { |
|
174 | if (existingPosts.size() > 0) { | |
168 |
existingPosts.first() |
|
175 | replacePartial(existingPosts.first(), post, false); | |
|
176 | post = existingPosts.first(); | |||
169 |
|
177 | |||
170 | type = POST_UPDATED; |
|
178 | type = POST_UPDATED; | |
171 | } else { |
|
179 | } else { | |
@@ -362,13 +370,16 b' function processNewPost(post) {' | |||||
362 | blink(post); |
|
370 | blink(post); | |
363 | } |
|
371 | } | |
364 |
|
372 | |||
365 | function replacePartial(oldNode, newNode) { |
|
373 | function replacePartial(oldNode, newNode, recursive) { | |
366 | var oldContent = oldNode[0].outerHTML; |
|
374 | if (!equalNodes(oldNode, newNode)) { | |
367 | var newContent = newNode[0].outerHTML; |
|
375 | // Update parent node class attribute | |
|
376 | var oldClass = oldNode.attr(ATTR_CLASS); | |||
|
377 | var newClass = newNode.attr(ATTR_CLASS); | |||
|
378 | if (oldClass != newClass) { | |||
|
379 | oldNode.attr(ATTR_CLASS, newClass); | |||
|
380 | }; | |||
368 |
|
381 | |||
369 | // TODO Handle different children sizes |
|
382 | // Replace children | |
370 |
|
||||
371 | if (oldContent != newContent) { |
|
|||
372 | var children = oldNode.children(); |
|
383 | var children = oldNode.children(); | |
373 | if (children.length == 0) { |
|
384 | if (children.length == 0) { | |
374 | console.log(oldContent); |
|
385 | console.log(oldContent); | |
@@ -377,13 +388,38 b' function replacePartial(oldNode, newNode' | |||||
377 | oldNode.replaceWith(newNode); |
|
388 | oldNode.replaceWith(newNode); | |
378 | } else { |
|
389 | } else { | |
379 | var newChildren = newNode.children(); |
|
390 | var newChildren = newNode.children(); | |
380 |
|
|
391 | newChildren.each(function(i) { | |
381 |
|
|
392 | var newChild = newChildren.eq(i); | |
|
393 | var newChildClass = newChild.attr(ATTR_CLASS); | |||
|
394 | ||||
|
395 | // Update only certain allowed blocks (e.g. not images) | |||
|
396 | if (ALLOWED_FOR_PARTIAL_UPDATE.indexOf(newChildClass) > -1) { | |||
|
397 | var oldChild = oldNode.children('.' + newChildClass); | |||
|
398 | ||||
|
399 | if (oldChild.length == 0) { | |||
|
400 | oldNode.append(newChild); | |||
|
401 | } else { | |||
|
402 | if (!equalNodes(oldChild, newChild)) { | |||
|
403 | if (recursive) { | |||
|
404 | replacePartial(oldChild, newChild, false); | |||
|
405 | } else { | |||
|
406 | oldChild.replaceWith(newChild); | |||
|
407 | } | |||
|
408 | } | |||
|
409 | } | |||
|
410 | } | |||
382 | }); |
|
411 | }); | |
383 | } |
|
412 | } | |
384 | } |
|
413 | } | |
385 | } |
|
414 | } | |
386 |
|
415 | |||
|
416 | /** | |||
|
417 | * Compare nodes by content | |||
|
418 | */ | |||
|
419 | function equalNodes(node1, node2) { | |||
|
420 | return node1[0].outerHTML == node2[0].outerHTML; | |||
|
421 | } | |||
|
422 | ||||
387 | $(document).ready(function(){ |
|
423 | $(document).ready(function(){ | |
388 | if (initAutoupdate()) { |
|
424 | if (initAutoupdate()) { | |
389 | // Post form data over AJAX |
|
425 | // Post form data over AJAX |
General Comments 0
You need to be logged in to leave comments.
Login now