##// END OF EJS Templates
Added missing semicolon to the thread update script
Added missing semicolon to the thread update script

File last commit:

r855:cfd5a612 default
r855:cfd5a612 default
Show More
thread_update.js
278 lines | 7.5 KiB | application/javascript | JavascriptLexer
neko259
Decreased anti-flood posting delay. Added lisence text to the thread...
r365 /*
@licstart The following is the entire license notice for the
JavaScript code in this page.
Copyright (C) 2013 neko259
The JavaScript code in this page is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this page.
*/
neko259
Added centrifuge (websocket) support for thread autoupdate. Only websocket version is supported for now
r853 var wsUrl = 'ws://localhost:9090/connection/websocket';
var wsUser = '';
neko259
Added thread autoupdate. Currently has some bugs, not ready for merge with the main branch
r361
var loading = false;
neko259
Update thread by time, not post id. This will help with getting updated posts
r363 var lastUpdateTime = null;
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 var unreadPosts = 0;
neko259
Update thread by time, not post id. This will help with getting updated posts
r363
neko259
Added centrifuge (websocket) support for thread autoupdate. Only websocket version is supported for now
r853 // Thread ID does not change, can be stored one time
var threadId = $('div.thread').children('.post').first().attr('id');
function connectWebsocket() {
var metapanel = $('.metapanel')[0];
var wsHost = metapanel.getAttribute('data-ws-host');
var wsPort = metapanel.getAttribute('data-ws-port');
if (wsHost.length > 0 && wsPort.length > 0)
var centrifuge = new Centrifuge({
"url": 'ws://' + wsHost + ':' + wsPort + "/connection/websocket",
"project": metapanel.getAttribute('data-ws-project'),
"user": wsUser,
"timestamp": metapanel.getAttribute('data-last-update'),
"token": metapanel.getAttribute('data-ws-token'),
neko259
Removed debug settings from the websocket JS script
r854 "debug": false
neko259
Added centrifuge (websocket) support for thread autoupdate. Only websocket version is supported for now
r853 });
centrifuge.on('error', function(error_message) {
alert("Error connecting to websocket server.");
});
centrifuge.on('connect', function() {
var channelName = 'thread:' + threadId;
centrifuge.subscribe(channelName, function(message) {
var postHtml = message.data['html'];
var isAdded = (message.data['diff_type'] === 'added');
if (postHtml) {
updatePost(postHtml, isAdded);
}
});
$('#autoupdate').text('[+]');
});
centrifuge.connect();
}
function updatePost(postHtml, isAdded) {
// This needs to be set on start because the page is scrolled after posts
// are added or updated
var bottom = isPageBottom();
var post = $(postHtml);
var threadPosts = $('div.thread').children('.post');
var lastUpdate = '';
if (isAdded) {
var lastPost = threadPosts.last();
post.appendTo(lastPost.parent());
updateBumplimitProgress(1);
showNewPostsTitle(1);
lastUpdate = post.children('.post-info').first()
.children('.pub_time').first().text();
if (bottom) {
scrollToBottom();
}
} else {
var postId = post.attr('id');
var oldPost = $('div.thread').children('.post[id=' + postId + ']');
oldPost.replaceWith(post);
}
processNewPost(post);
updateMetadataPanel(lastUpdate)
}
neko259
Update thread by time, not post id. This will help with getting updated posts
r363 function blink(node) {
var blinkCount = 2;
var nodeToAnimate = node;
for (var i = 0; i < blinkCount; i++) {
neko259
Made blink effect on thread update more soft
r481 nodeToAnimate = nodeToAnimate.fadeTo('fast', 0.5).fadeTo('fast', 1.0);
neko259
Update thread by time, not post id. This will help with getting updated posts
r363 }
}
neko259
Added thread autoupdate. Currently has some bugs, not ready for merge with the main branch
r361
neko259
Fixed getting precise and synced last update time. Added autoscroll to bottom after updating if user is at the page bottom
r373 function isPageBottom() {
var scroll = $(window).scrollTop() / ($(document).height()
neko259
Added missing semicolon to the thread update script
r855 - $(window).height());
neko259
Fixed getting precise and synced last update time. Added autoscroll to bottom after updating if user is at the page bottom
r373
return scroll == 1
}
neko259
Update thread by time, not post id. This will help with getting updated posts
r363 function initAutoupdate() {
neko259
Added centrifuge (websocket) support for thread autoupdate. Only websocket version is supported for now
r853 connectWebsocket()
neko259
Update thread by time, not post id. This will help with getting updated posts
r363 }
neko259
Update reply and image count after thread update
r391
function getReplyCount() {
neko259
Fixed thread OP id in thread view. Fixed reply count in thread view
r404 return $('.thread').children('.post').length
neko259
Update reply and image count after thread update
r391 }
function getImageCount() {
return $('.thread').find('img').length
}
neko259
Updating bumplimit progress on thread update
r420
neko259
Updating last_update time if the thread in autoupdate
r536 function updateMetadataPanel(lastUpdate) {
var replyCountField = $('#reply-count');
var imageCountField = $('#image-count');
replyCountField.text(getReplyCount());
imageCountField.text(getImageCount());
if (lastUpdate !== '') {
var lastUpdateField = $('#last-update');
lastUpdateField.text(lastUpdate);
blink(lastUpdateField);
}
blink(replyCountField);
blink(imageCountField);
}
neko259
Add dead_post class to the posts when thread reached bumplimit on autoupdate
r429 /**
* Update bumplimit progress bar
*/
neko259
Updating bumplimit progress on thread update
r420 function updateBumplimitProgress(postDelta) {
var progressBar = $('#bumplimit_progress');
if (progressBar) {
var postsToLimitElement = $('#left_to_limit');
var oldPostsToLimit = parseInt(postsToLimitElement.text());
var postCount = getReplyCount();
var bumplimit = postCount - postDelta + oldPostsToLimit;
var newPostsToLimit = bumplimit - postCount;
neko259
Add dead_post class to the posts when thread reached bumplimit on autoupdate
r429 if (newPostsToLimit <= 0) {
$('.bar-bg').remove();
neko259
Fixed adding dead_post class to posts after bumplimit reached
r585 $('.thread').children('.post').addClass('dead_post');
neko259
Updating bumplimit progress on thread update
r420 } else {
postsToLimitElement.text(newPostsToLimit);
progressBar.width((100 - postCount / bumplimit * 100.0) + '%');
}
}
neko259
Updated posts must not affect bumplimit bar
r427 }
neko259
Add dead_post class to the posts when thread reached bumplimit on autoupdate
r429
neko259
Added new posts notification in the not active browser page
r451 var documentOriginalTitle = '';
/**
* Show 'new posts' text in the title if the document is not visible to a user
*/
neko259
Showing unread posts count when new posts appear in the background tab
r468 function showNewPostsTitle(newPostCount) {
neko259
Added new posts notification in the not active browser page
r451 if (document.hidden) {
neko259
Showing unread posts count when new posts appear in the background tab
r468 if (documentOriginalTitle === '') {
documentOriginalTitle = document.title;
}
unreadPosts = unreadPosts + newPostCount;
document.title = '[' + unreadPosts + '] ' + documentOriginalTitle;
neko259
Added new posts notification in the not active browser page
r451
document.addEventListener('visibilitychange', function() {
if (documentOriginalTitle !== '') {
document.title = documentOriginalTitle;
documentOriginalTitle = '';
neko259
Showing unread posts count when new posts appear in the background tab
r468 unreadPosts = 0;
neko259
Added new posts notification in the not active browser page
r451 }
document.removeEventListener('visibilitychange', null);
});
}
neko259
Added a server-side gallery and mode switcher
r458 }
neko259
Added posting over ajax
r533 /**
* Clear all entered values in the form fields
*/
function resetForm(form) {
form.find('input:text, input:password, input:file, select, textarea').val('');
form.find('input:radio, input:checkbox')
.removeAttr('checked').removeAttr('selected');
neko259
Fixed clearing image after posting.
r682 $('.file_wrap').find('.file-thumb').remove();
neko259
Added posting over ajax
r533 }
neko259
Fixed clearing image after posting.
r682 /**
* When the form is posted, this method will be run as a callback
*/
function updateOnPost(response, statusText, xhr, form) {
var json = $.parseJSON(response);
var status = json.status;
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 showAsErrors(form, '');
neko259
Fixed clearing image after posting.
r682
if (status === 'ok') {
resetForm(form);
} else {
var errors = json.errors;
for (var i = 0; i < errors.length; i++) {
var fieldErrors = errors[i];
var error = fieldErrors.errors;
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 showAsErrors(form, error);
neko259
Fixed clearing image after posting.
r682 }
}
}
neko259
Added posting over ajax
r533
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 /**
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 * Show text in the errors row of the form.
* @param form
* @param text
*/
function showAsErrors(form, text) {
form.children('.form-errors').remove();
if (text.length > 0) {
var errorList = $('<div class="form-errors">' + text
+ '<div>');
errorList.appendTo(form);
}
}
/**
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 * Run js methods that are usually run on the document, on the new post
*/
function processNewPost(post) {
neko259
Fixed thread update
r710 addRefLinkPreview(post[0]);
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 highlightCode(post);
neko259
Added centrifuge (websocket) support for thread autoupdate. Only websocket version is supported for now
r853 blink(post);
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 }
neko259
Added a server-side gallery and mode switcher
r458 $(document).ready(function(){
initAutoupdate();
neko259
Fixed form file upload
r534
// Post form data over AJAX
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 var threadId = $('div.thread').children('.post').first().attr('id');
neko259
Fixed form file upload
r534
var form = $('#form');
neko259
Fixed clearing image after posting.
r682
neko259
Fixed form file upload
r534 var options = {
neko259
Added settings to limit posting speed. Added message when the form data is sent and response not yet received
r725 beforeSubmit: function(arr, $form, options) {
showAsErrors($('form'), gettext('Sending message...'));
},
neko259
Fixed form file upload
r534 success: updateOnPost,
neko259
Fixed clearing image after posting.
r682 url: '/api/add_post/' + threadId + '/'
neko259
Fixed form file upload
r534 };
form.ajaxForm(options);
neko259
Fixed clearing image after posting.
r682 resetForm(form);
neko259
Added a server-side gallery and mode switcher
r458 });