modified exec_body_scripts to load external scripts. finally moved all the js files out of tpls into their own js
todo: still need to organize the individual scripts client side,v1.18.x
parent
9c546c92ad
commit
34131ad46c
@ -0,0 +1,42 @@
|
||||
(function() {
|
||||
var yourid = templates.get('yourid'),
|
||||
theirid = templates.get('theirid');
|
||||
|
||||
var isFriend = {isFriend};
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
var rep = $('#reputation');
|
||||
rep.html(app.addCommas(rep.html()));
|
||||
|
||||
var postcount = $('#postcount');
|
||||
postcount.html(app.addCommas(postcount.html()));
|
||||
|
||||
var editLink = $('#editLink');
|
||||
var addFriendBtn = $('#add-friend-btn');
|
||||
|
||||
|
||||
if( yourid !== theirid) {
|
||||
editLink.hide();
|
||||
if(isFriend)
|
||||
addFriendBtn.hide();
|
||||
else
|
||||
addFriendBtn.show();
|
||||
}
|
||||
else {
|
||||
addFriendBtn.hide();
|
||||
}
|
||||
|
||||
addFriendBtn.on('click', function() {
|
||||
$.post('/users/addfriend', {uid: theirid},
|
||||
function(data) {
|
||||
addFriendBtn.remove();
|
||||
$('#user-action-alert').html('Friend Added!').show();
|
||||
}
|
||||
);
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}());
|
@ -0,0 +1,218 @@
|
||||
|
||||
|
||||
var gravatarPicture = templates.get('gravatarpicture');
|
||||
var uploadedPicture = templates.get('uploadedpicture');
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
|
||||
|
||||
$('#uploadForm').submit(function() {
|
||||
status('uploading the file ...');
|
||||
|
||||
$('#upload-progress-bar').css('width', '0%');
|
||||
$('#upload-progress-box').show();
|
||||
|
||||
if(!$('#userPhotoInput').val()) {
|
||||
error('select an image to upload!');
|
||||
return false;
|
||||
}
|
||||
|
||||
$(this).ajaxSubmit({
|
||||
|
||||
error: function(xhr) {
|
||||
error('Error: ' + xhr.status);
|
||||
},
|
||||
|
||||
uploadProgress : function(event, position, total, percent) {
|
||||
$('#upload-progress-bar').css('width', percent+'%');
|
||||
},
|
||||
|
||||
|
||||
success: function(response) {
|
||||
if(response.error) {
|
||||
error(response.error);
|
||||
return;
|
||||
}
|
||||
|
||||
var imageUrlOnServer = response.path;
|
||||
|
||||
$('#user-current-picture').attr('src', imageUrlOnServer);
|
||||
$('#user-uploaded-picture').attr('src', imageUrlOnServer);
|
||||
|
||||
uploadedPicture = imageUrlOnServer;
|
||||
|
||||
setTimeout(function() {
|
||||
hideAlerts();
|
||||
$('#upload-picture-modal').modal('hide');
|
||||
}, 750);
|
||||
|
||||
socket.emit('api:updateHeader', { fields: ['username', 'picture'] });
|
||||
success('File uploaded successfully!');
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function hideAlerts() {
|
||||
$('#alert-status').hide();
|
||||
$('#alert-success').hide();
|
||||
$('#alert-error').hide();
|
||||
$('#upload-progress-box').hide();
|
||||
}
|
||||
|
||||
function status(message) {
|
||||
hideAlerts();
|
||||
$('#alert-status').text(message).show();
|
||||
}
|
||||
|
||||
function success(message) {
|
||||
hideAlerts();
|
||||
$('#alert-success').text(message).show();
|
||||
}
|
||||
|
||||
function error(message) {
|
||||
hideAlerts();
|
||||
$('#alert-error').text(message).show();
|
||||
}
|
||||
|
||||
function changeUserPicture(type) {
|
||||
var userData = {
|
||||
uid: $('#inputUID').val(),
|
||||
type: type
|
||||
};
|
||||
|
||||
$.post('/users/changepicture',
|
||||
userData,
|
||||
function(data) {
|
||||
socket.emit('api:updateHeader', { fields: ['username', 'picture'] });
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
var selectedImageType = '';
|
||||
|
||||
$('#submitBtn').on('click',function(){
|
||||
|
||||
var userData = {
|
||||
uid:$('#inputUID').val(),
|
||||
email:$('#inputEmail').val(),
|
||||
fullname:$('#inputFullname').val(),
|
||||
website:$('#inputWebsite').val(),
|
||||
birthday:$('#inputBirthday').val(),
|
||||
location:$('#inputLocation').val(),
|
||||
signature:$('#inputSignature').val(),
|
||||
};
|
||||
|
||||
$.post('/users/doedit',
|
||||
userData,
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
app.alert({
|
||||
'alert_id': 'user_profile_updated',
|
||||
type: 'error',
|
||||
title: 'Profile Update Error',
|
||||
message: data.error,
|
||||
timeout: 2000
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
app.alert({
|
||||
'alert_id': 'user_profile_updated',
|
||||
type: 'success',
|
||||
title: 'Profile Updated',
|
||||
message: 'Your profile has been updated successfully',
|
||||
timeout: 2000
|
||||
});
|
||||
}
|
||||
);
|
||||
return false;
|
||||
});
|
||||
|
||||
function updateImages() {
|
||||
var currentPicture = $('#user-current-picture').attr('src');
|
||||
|
||||
if(gravatarPicture) {
|
||||
$('#user-gravatar-picture').attr('src', gravatarPicture);
|
||||
$('#gravatar-box').show();
|
||||
}
|
||||
else
|
||||
$('#gravatar-box').hide();
|
||||
|
||||
if(uploadedPicture) {
|
||||
$('#user-uploaded-picture').attr('src', uploadedPicture);
|
||||
$('#uploaded-box').show();
|
||||
}
|
||||
else
|
||||
$('#uploaded-box').hide();
|
||||
|
||||
|
||||
if(currentPicture == gravatarPicture)
|
||||
$('#gravatar-box .icon-ok').show();
|
||||
else
|
||||
$('#gravatar-box .icon-ok').hide();
|
||||
|
||||
if(currentPicture == uploadedPicture)
|
||||
$('#uploaded-box .icon-ok').show();
|
||||
else
|
||||
$('#uploaded-box .icon-ok').hide();
|
||||
}
|
||||
|
||||
|
||||
$('#changePictureBtn').on('click', function() {
|
||||
selectedImageType = '';
|
||||
updateImages();
|
||||
|
||||
$('#change-picture-modal').modal('show');
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#gravatar-box').on('click', function(){
|
||||
$('#gravatar-box .icon-ok').show();
|
||||
$('#uploaded-box .icon-ok').hide();
|
||||
selectedImageType = 'gravatar';
|
||||
});
|
||||
|
||||
$('#uploaded-box').on('click', function(){
|
||||
$('#gravatar-box .icon-ok').hide();
|
||||
$('#uploaded-box .icon-ok').show();
|
||||
selectedImageType = 'uploaded';
|
||||
});
|
||||
|
||||
$('#savePictureChangesBtn').on('click', function() {
|
||||
$('#change-picture-modal').modal('hide');
|
||||
|
||||
if(selectedImageType) {
|
||||
changeUserPicture(selectedImageType);
|
||||
|
||||
if(selectedImageType == 'gravatar')
|
||||
$('#user-current-picture').attr('src', gravatarPicture);
|
||||
else if(selectedImageType == 'uploaded')
|
||||
$('#user-current-picture').attr('src', uploadedPicture);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$('#upload-picture-modal').on('hide', function() {
|
||||
$('#userPhotoInput').val('');
|
||||
});
|
||||
|
||||
$('#uploadPictureBtn').on('click', function(){
|
||||
|
||||
$('#change-picture-modal').modal('hide');
|
||||
$('#upload-picture-modal').modal('show');
|
||||
|
||||
hideAlerts();
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#pictureUploadSubmitBtn').on('click', function() {
|
||||
$('#uploadForm').submit();
|
||||
});
|
||||
|
||||
|
||||
});
|
@ -0,0 +1,78 @@
|
||||
(function() {
|
||||
var cid = templates.get('category_id'),
|
||||
room = 'category_' + cid;
|
||||
|
||||
app.enter_room(room);
|
||||
|
||||
var new_post = document.getElementById('new_post');
|
||||
new_post.onclick = function() {
|
||||
app.open_post_window('topic', {category_id});
|
||||
}
|
||||
|
||||
ajaxify.register_events([
|
||||
'event:new_topic'
|
||||
]);
|
||||
|
||||
if (jQuery('.category-item').length == 0) {
|
||||
jQuery('#topics-container, .category-sidebar').hide();
|
||||
jQuery('#category-no-topics').show();
|
||||
}
|
||||
|
||||
socket.on('event:new_topic', function(data) {
|
||||
var html = templates.prepare(templates['category'].blocks['topics']).parse({ topics: [data] }),
|
||||
topic = document.createElement('div'),
|
||||
container = document.getElementById('topics-container'),
|
||||
topics = document.querySelectorAll('#topics-container a'),
|
||||
numTopics = topics.length,
|
||||
x;
|
||||
|
||||
jQuery('#topics-container, .category-sidebar').show();
|
||||
jQuery('#category-no-topics').hide();
|
||||
|
||||
topic.innerHTML = html;
|
||||
if (numTopics > 0) {
|
||||
for(x=0;x<numTopics;x++) {
|
||||
if (topics[x].querySelector('.icon-pushpin')) continue;
|
||||
container.insertBefore(topic.querySelector('a'), topics[x]);
|
||||
$(topic).hide().fadeIn('slow');
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
container.insertBefore(topic.querySelector('a'), null);
|
||||
$(topic).hide().fadeIn('slow');
|
||||
}
|
||||
|
||||
// jQuery('<div></div>').appendTo("#topics-container").hide().append(html).fadeIn('slow');
|
||||
// set_up_posts(uniqueid);
|
||||
});
|
||||
|
||||
|
||||
|
||||
socket.emit('api:categories.getRecentReplies', cid);
|
||||
socket.on('api:categories.getRecentReplies', function(replies) {
|
||||
if (replies === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
var users = replies.users,
|
||||
posts = replies.posts,
|
||||
recent_replies = document.getElementById('category_recent_replies');
|
||||
|
||||
recent_replies.innerHTML = '';
|
||||
for (var i=0, ii=posts.pids.length; i<ii; i++) {
|
||||
var a = document.createElement('a'),
|
||||
ul = document.createElement('ul'),
|
||||
username = users[posts.uid[i]].username,
|
||||
picture = users[posts.uid[i]].picture;
|
||||
|
||||
//temp until design finalized
|
||||
ul.innerHTML = '<li><img title="' + username + '" style="width: 48px; height: 48px; /*temporary*/" src="' + picture + '" class="" />'
|
||||
+ '<p><strong>' + username + '</strong>: ' + posts.content[i] + '</p><span>posted ' + utils.relativeTime(posts.timestamp[i]) + ' ago</span></li>';
|
||||
|
||||
a.appendChild(ul);
|
||||
recent_replies.appendChild(a);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
})();
|
@ -0,0 +1,124 @@
|
||||
(function() {
|
||||
var num_users = document.getElementById('number_of_users'),
|
||||
latest_user = document.getElementById('latest_user'),
|
||||
active_users = document.getElementById('active_users'),
|
||||
user_label = document.getElementById('user_label'),
|
||||
active_record = document.getElementById('active_record'),
|
||||
right_menu = document.getElementById('right-menu');
|
||||
|
||||
socket.emit('user.count', {});
|
||||
socket.on('user.count', function(data) {
|
||||
num_users.innerHTML = "We currently have <b>" + data.count + "</b> registered users.";
|
||||
});
|
||||
socket.emit('user.latest', {});
|
||||
socket.on('user.latest', function(data) {
|
||||
if (data.username == '') {
|
||||
latest_user.innerHTML = '';
|
||||
} else {
|
||||
latest_user.innerHTML = "The most recent user to register is <b><a href='/users/"+data.username+"'>" + data.username + "</a></b>.";
|
||||
}
|
||||
});
|
||||
socket.emit('api:user.active.get');
|
||||
socket.on('api:user.active.get', function(data) {
|
||||
var plural_users = parseInt(data.users) !== 1,
|
||||
plural_anon = parseInt(data.anon) !== 1;
|
||||
|
||||
active_users.innerHTML = 'There ' + (plural_users ? 'are' : 'is') + ' <strong>' + data.users + '</strong> user' + (plural_users ? 's' : '') + ' and <strong>' + data.anon + '</strong> guest' + (plural_anon ? 's' : '') + ' online';
|
||||
});
|
||||
socket.emit('api:user.active.get_record');
|
||||
socket.on('api:user.active.get_record', function(data) {
|
||||
active_record.innerHTML = "most users ever online was <strong>" + data.record + "</strong> on <strong>" + (new Date(parseInt(data.timestamp,10))).toUTCString() + "</strong>";
|
||||
});
|
||||
|
||||
socket.emit('api:updateHeader', { fields: ['username', 'picture'] });
|
||||
|
||||
socket.on('api:updateHeader', function(data) {
|
||||
var rightMenu = $('#right-menu');
|
||||
if (data.uid > 0) {
|
||||
var userLabel = rightMenu.find('#user_label');
|
||||
userLabel.attr('href','/users/'+data['username']);
|
||||
|
||||
userLabel.find('img').attr('src',data['picture']+"?s=24");
|
||||
userLabel.find('span').html(data['username']);
|
||||
|
||||
} else {
|
||||
|
||||
rightMenu.html('');
|
||||
|
||||
var registerEl = document.createElement('li'),
|
||||
loginEl = document.createElement('li');
|
||||
|
||||
registerEl.innerHTML = '<a href="/register">Register</a>';
|
||||
loginEl.innerHTML = '<a href="/login">Login</a>';
|
||||
|
||||
right_menu.appendChild(registerEl);
|
||||
right_menu.appendChild(loginEl);
|
||||
}
|
||||
});
|
||||
|
||||
// Post window events
|
||||
var postWindowEl = document.getElementById('post_window'),
|
||||
discardEl = document.getElementById('discard-post');
|
||||
discardEl.addEventListener('click', function() {
|
||||
$(postWindowEl).slideToggle(250);
|
||||
$(document.body).removeClass('composing');
|
||||
}, false);
|
||||
|
||||
// Notifications dropdown
|
||||
var notifContainer = document.getElementsByClassName('notifications')[0],
|
||||
notifTrigger = notifContainer.querySelector('a'),
|
||||
notifList = document.getElementById('notif-list');
|
||||
notifTrigger.addEventListener('click', function() {
|
||||
if (notifContainer.className.indexOf('open') === -1) socket.emit('api:notifications.get');
|
||||
});
|
||||
notifList.addEventListener('click', function(e) {
|
||||
var target;
|
||||
switch(e.target.nodeName) {
|
||||
case 'SPAN': target = e.target.parentNode.parentNode; break;
|
||||
case 'A': target = e.target.parentNode; break;
|
||||
case 'li': target = e.target; break;
|
||||
}
|
||||
if (target) {
|
||||
var nid = parseInt(target.getAttribute('data-nid'));
|
||||
if (nid > 0) socket.emit('api:notifications.mark_read', nid);
|
||||
}
|
||||
})
|
||||
socket.on('api:notifications.get', function(data) {
|
||||
var notifFrag = document.createDocumentFragment(),
|
||||
notifEl = document.createElement('li'),
|
||||
numRead = data.read.length,
|
||||
numUnread = data.unread.length,
|
||||
x;
|
||||
notifList.innerHTML = '';
|
||||
if (data.read.length + data.unread.length > 0) {
|
||||
for(x=0;x<numUnread;x++) {
|
||||
notifEl.setAttribute('data-nid', data.unread[x].nid);
|
||||
notifEl.className = 'unread';
|
||||
notifEl.innerHTML = '<a href="' + data.unread[x].path + '"><span class="pull-right">' + utils.relativeTime(data.unread[x].datetime, true) + '</span>' + data.unread[x].text + '</a>';
|
||||
notifFrag.appendChild(notifEl.cloneNode(true));
|
||||
}
|
||||
for(x=0;x<numRead;x++) {
|
||||
notifEl.setAttribute('data-nid', data.read[x].nid);
|
||||
notifEl.className = '';
|
||||
notifEl.innerHTML = '<a href="' + data.read[x].path + '"><span class="pull-right">' + utils.relativeTime(data.read[x].datetime, true) + '</span>' + data.read[x].text + '</a>';
|
||||
notifFrag.appendChild(notifEl.cloneNode(true));
|
||||
}
|
||||
} else {
|
||||
notifEl.innerHTML = '<a>You have no notifications</a>';
|
||||
notifFrag.appendChild(notifEl);
|
||||
}
|
||||
notifList.appendChild(notifFrag);
|
||||
});
|
||||
socket.on('api:notifications.counts', function(counts) {
|
||||
var notifIcon = document.querySelector('.notifications a i');
|
||||
if(notifIcon) {
|
||||
if (counts.unread > 0) notifIcon.className = 'icon-circle active';
|
||||
else notifIcon.className = 'icon-circle-blank';
|
||||
}
|
||||
});
|
||||
socket.on('event:new_notification', function() {
|
||||
console.log('WOOT');
|
||||
document.querySelector('.notifications a i').className = 'icon-circle active';
|
||||
});
|
||||
socket.emit('api:notifications.counts');
|
||||
}());
|
@ -0,0 +1,44 @@
|
||||
(function() {
|
||||
|
||||
var yourid = templates.get('yourid'),
|
||||
theirid = templates.get('theirid'),
|
||||
friendCount = templates.get('friendCount');
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
if(parseInt(friendCount, 10) === 0) {
|
||||
$('#no-friend-notice').show();
|
||||
}
|
||||
var editLink = $('#editLink');
|
||||
|
||||
if(yourid !== theirid) {
|
||||
editLink.hide();
|
||||
$('.remove-friend-btn').hide();
|
||||
}
|
||||
else {
|
||||
$('.remove-friend-btn').on('click',function(){
|
||||
|
||||
var removeBtn = $(this);
|
||||
var friendid = $(this).attr('friendid');
|
||||
|
||||
$.post('/users/removefriend', {uid: friendid},
|
||||
function(data) {
|
||||
removeBtn.parent().remove();
|
||||
}
|
||||
);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$('.reputation').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
$('.postcount').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}());
|
@ -0,0 +1,9 @@
|
||||
(function() {
|
||||
// Alternate Logins
|
||||
var altLoginEl = document.querySelector('.alt-logins');
|
||||
altLoginEl.addEventListener('click', function(e) {
|
||||
if (e.target.nodeName === 'LI') {
|
||||
document.location.href = e.target.getAttribute('data-url');
|
||||
}
|
||||
});
|
||||
}());
|
@ -0,0 +1,83 @@
|
||||
(function() {
|
||||
var username = document.getElementById('username'),
|
||||
password = document.getElementById('password'),
|
||||
register = document.getElementById('register'),
|
||||
emailEl = document.getElementById('email'),
|
||||
username_notify = document.getElementById('username-notify'),
|
||||
email_notify = document.getElementById('email-notify'),
|
||||
password_notify = document.getElementById('password-notify');
|
||||
|
||||
username.onkeyup = function() {
|
||||
if (username.value.length > 2) socket.emit('user.exists', {username: username.value});
|
||||
else {
|
||||
username_notify.innerHTML = 'Username too short';
|
||||
username_notify.className = 'label label-important';
|
||||
}
|
||||
}
|
||||
emailEl.addEventListener('change', function() {
|
||||
socket.emit('user.email.exists', { email: emailEl.value });
|
||||
}, false);
|
||||
password.addEventListener('keyup', function() {
|
||||
if (password.value.length < 5) {
|
||||
password_notify.innerHTML = 'Password too short';
|
||||
} else {
|
||||
password_notify.innerHTML = '';
|
||||
}
|
||||
}, false);
|
||||
|
||||
ajaxify.register_events(['user.exists', 'user.email.exists']);
|
||||
|
||||
socket.on('user.exists', function(data) {
|
||||
if (data.exists == true) {
|
||||
username_notify.innerHTML = 'Username exists';
|
||||
username_notify.className = 'label label-important';
|
||||
} else {
|
||||
username_notify.innerHTML = 'Not taken';
|
||||
username_notify.className = 'label label-success';
|
||||
}
|
||||
});
|
||||
socket.on('user.email.exists', function(data) {
|
||||
if (data.exists === true) {
|
||||
email_notify.innerHTML = 'Email Address exists';
|
||||
} else {
|
||||
email_notify.innerHTML = '';
|
||||
}
|
||||
});
|
||||
|
||||
// Alternate Logins
|
||||
var altLoginEl = document.querySelector('.alt-logins');
|
||||
altLoginEl.addEventListener('click', function(e) {
|
||||
if (e.target.nodeName === 'LI') {
|
||||
document.location.href = e.target.getAttribute('data-url');
|
||||
}
|
||||
});
|
||||
|
||||
// Form Validation
|
||||
function validateForm() {
|
||||
var validated = true;
|
||||
if (username.value.length < 2) {
|
||||
username_notify.innerHTML = 'Invalid username';
|
||||
username_notify.className = 'label label-important';
|
||||
validated = false;
|
||||
}
|
||||
|
||||
if (password.value.length < 5) {
|
||||
password_notify.innerHTML = 'Password too short';
|
||||
validated = false;
|
||||
} else {
|
||||
password_notify.innerHTML = '';
|
||||
}
|
||||
|
||||
if (email.value.indexOf('@') === -1) {
|
||||
email_notify.innerHTML = 'Invalid email address';
|
||||
validated = false;
|
||||
} else {
|
||||
email_notify.innerHTML = '';
|
||||
}
|
||||
|
||||
return validated;
|
||||
}
|
||||
register.addEventListener('click', function(e) {
|
||||
if (!validateForm()) e.preventDefault();
|
||||
}, false);
|
||||
}());
|
@ -0,0 +1,39 @@
|
||||
(function() {
|
||||
var inputEl = document.getElementById('email'),
|
||||
errorEl = document.getElementById('error'),
|
||||
errorTextEl = errorEl.querySelector('p');
|
||||
|
||||
document.getElementById('reset').onclick = function() {
|
||||
if (inputEl.value.length > 0 && inputEl.value.indexOf('@') !== -1) {
|
||||
socket.emit('user:reset.send', { email: inputEl.value });
|
||||
} else {
|
||||
jQuery('#success').hide();
|
||||
jQuery(errorEl).show();
|
||||
errorTextEl.innerHTML = 'Please enter a valid email';
|
||||
}
|
||||
};
|
||||
|
||||
ajaxify.register_events(['user.send_reset']);
|
||||
|
||||
socket.on('user.send_reset', function(data) {
|
||||
var submitEl = document.getElementById('reset');
|
||||
|
||||
if (data.status === 'ok') {
|
||||
jQuery('#error').hide();
|
||||
jQuery('#success').show();
|
||||
jQuery('#success p').html('An email has been dispatched to "' + data.email + '" with instructions on setting a new password.');
|
||||
inputEl.value = '';
|
||||
} else {
|
||||
jQuery('#success').hide();
|
||||
jQuery(errorEl).show();
|
||||
switch(data.message) {
|
||||
case 'invalid-email':
|
||||
errorTextEl.innerHTML = 'The email you put in (<span>' + data.email + '</span>) is not registered with us. Please try again.';
|
||||
break;
|
||||
case 'send-failed':
|
||||
errorTextEl.innerHTML = 'There was a problem sending the reset code. Please try again later.';
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}());
|
@ -0,0 +1,42 @@
|
||||
(function() {
|
||||
var reset_code = templates.get('reset_code');
|
||||
|
||||
var resetEl = document.getElementById('reset'),
|
||||
password = document.getElementById('password'),
|
||||
repeat = document.getElementById('repeat'),
|
||||
noticeEl = document.getElementById('notice');
|
||||
|
||||
resetEl.addEventListener('click', function() {
|
||||
if (password.value.length < 6) {
|
||||
$('#error').hide();
|
||||
noticeEl.querySelector('strong').innerHTML = 'Invalid Password';
|
||||
noticeEl.querySelector('p').innerHTML = 'The password entered it too short, please pick a different password!';
|
||||
noticeEl.style.display = 'block';
|
||||
} else if (password.value === repeat.value) {
|
||||
socket.emit('user:reset.commit', { code: reset_code, password: password.value });
|
||||
}
|
||||
}, false);
|
||||
|
||||
// Enable the form if the code is valid
|
||||
socket.emit('user:reset.valid', { code: reset_code });
|
||||
|
||||
|
||||
ajaxify.register_events(['user:reset.valid', 'user:reset.commit']);
|
||||
socket.on('user:reset.valid', function(data) {
|
||||
if (!!data.valid) resetEl.disabled = false;
|
||||
else {
|
||||
var formEl = document.getElementById('reset-form');
|
||||
// Show error message
|
||||
$('#error').show();
|
||||
formEl.parentNode.removeChild(formEl);
|
||||
}
|
||||
})
|
||||
|
||||
socket.on('user:reset.commit', function(data) {
|
||||
if (data.status === 'ok') {
|
||||
$('#error').hide();
|
||||
$('#notice').hide();
|
||||
$('#success').show();
|
||||
}
|
||||
});
|
||||
}());
|
@ -0,0 +1,603 @@
|
||||
(function() {
|
||||
var expose_tools = templates.get('expose_tools'),
|
||||
tid = templates.get('topic_id'),
|
||||
postListEl = document.getElementById('post-container'),
|
||||
editBtns = document.querySelectorAll('#post-container .post-buttons .edit, #post-container .post-buttons .edit i'),
|
||||
thread_state = {
|
||||
locked: templates.get('locked'),
|
||||
deleted: templates.get('deleted'),
|
||||
pinned: templates.get('pinned')
|
||||
},
|
||||
topic_name = templates.get('topic_name');
|
||||
|
||||
function addCommasToNumbers() {
|
||||
$('.formatted-number').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
}
|
||||
|
||||
jQuery('document').ready(function() {
|
||||
|
||||
addCommasToNumbers();
|
||||
|
||||
var room = 'topic_' + tid,
|
||||
adminTools = document.getElementById('thread-tools');
|
||||
|
||||
app.enter_room(room);
|
||||
set_up_posts();
|
||||
|
||||
if (thread_state.locked === '1') set_locked_state(true);
|
||||
if (thread_state.deleted === '1') set_delete_state(true);
|
||||
if (thread_state.pinned === '1') set_pinned_state(true);
|
||||
|
||||
if (expose_tools === '1') {
|
||||
var deleteThreadEl = document.getElementById('delete_thread'),
|
||||
lockThreadEl = document.getElementById('lock_thread'),
|
||||
pinThreadEl = document.getElementById('pin_thread'),
|
||||
moveThreadEl = document.getElementById('move_thread'),
|
||||
moveThreadModal = $('#move_thread_modal');
|
||||
|
||||
adminTools.style.visibility = 'inherit';
|
||||
|
||||
// Add events to the thread tools
|
||||
deleteThreadEl.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
if (thread_state.deleted !== '1') {
|
||||
if (confirm('really delete thread? (THIS DIALOG TO BE REPLACED WITH BOOTBOX)')) {
|
||||
socket.emit('api:topic.delete', { tid: tid });
|
||||
}
|
||||
} else {
|
||||
if (confirm('really restore thread? (THIS DIALOG TO BE REPLACED WITH BOOTBOX)')) {
|
||||
socket.emit('api:topic.restore', { tid: tid });
|
||||
}
|
||||
}
|
||||
}, false);
|
||||
|
||||
lockThreadEl.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
if (thread_state.locked !== '1') {
|
||||
socket.emit('api:topic.lock', { tid: tid });
|
||||
} else {
|
||||
socket.emit('api:topic.unlock', { tid: tid });
|
||||
}
|
||||
}, false);
|
||||
|
||||
pinThreadEl.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
if (thread_state.pinned !== '1') {
|
||||
socket.emit('api:topic.pin', { tid: tid });
|
||||
} else {
|
||||
socket.emit('api:topic.unpin', { tid: tid });
|
||||
}
|
||||
}, false);
|
||||
|
||||
moveThreadEl.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
moveThreadModal.modal('show');
|
||||
}, false);
|
||||
|
||||
moveThreadModal.on('shown', function() {
|
||||
var loadingEl = document.getElementById('categories-loading');
|
||||
if (loadingEl) {
|
||||
socket.once('api:categories.get', function(data) {
|
||||
// Render categories
|
||||
var categoriesFrag = document.createDocumentFragment(),
|
||||
categoryEl = document.createElement('li'),
|
||||
numCategories = data.categories.length,
|
||||
modalBody = moveThreadModal.find('.modal-body'),
|
||||
categoriesEl = modalBody[0].getElementsByTagName('ul')[0],
|
||||
confirmDiv = document.getElementById('move-confirm'),
|
||||
confirmCat = confirmDiv.getElementsByTagName('span')[0],
|
||||
commitEl = document.getElementById('move_thread_commit'),
|
||||
cancelEl = document.getElementById('move_thread_cancel'),
|
||||
x, info, targetCid, targetCatLabel;
|
||||
|
||||
categoriesEl.className = 'category-list';
|
||||
for(x=0;x<numCategories;x++) {
|
||||
info = data.categories[x];
|
||||
categoryEl.className = info.blockclass;
|
||||
categoryEl.innerHTML = '<i class="' + info.icon + '"></i> ' + info.name;
|
||||
categoryEl.setAttribute('data-cid', info.cid);
|
||||
categoriesFrag.appendChild(categoryEl.cloneNode(true));
|
||||
}
|
||||
categoriesEl.appendChild(categoriesFrag);
|
||||
modalBody[0].removeChild(loadingEl);
|
||||
|
||||
categoriesEl.addEventListener('click', function(e) {
|
||||
if (e.target.nodeName === 'LI') {
|
||||
confirmCat.innerHTML = e.target.innerHTML;
|
||||
confirmDiv.style.display = 'block';
|
||||
targetCid = e.target.getAttribute('data-cid');
|
||||
targetCatLabel = e.target.innerHTML;
|
||||
commitEl.disabled = false;
|
||||
}
|
||||
}, false);
|
||||
|
||||
commitEl.addEventListener('click', function() {
|
||||
if (!commitEl.disabled && targetCid) {
|
||||
commitEl.disabled = true;
|
||||
$(cancelEl).fadeOut(250);
|
||||
$(moveThreadModal).find('.modal-header button').fadeOut(250);
|
||||
commitEl.innerHTML = 'Moving <i class="icon-spin icon-refresh"></i>';
|
||||
|
||||
socket.once('api:topic.move', function(data) {
|
||||
moveThreadModal.modal('hide');
|
||||
if (data.status === 'ok') {
|
||||
app.alert({
|
||||
'alert_id': 'thread_move',
|
||||
type: 'success',
|
||||
title: 'Topic Successfully Moved',
|
||||
message: 'This topic has been successfully moved to ' + targetCatLabel,
|
||||
timeout: 5000
|
||||
});
|
||||
} else {
|
||||
app.alert({
|
||||
'alert_id': 'thread_move',
|
||||
type: 'error',
|
||||
title: 'Unable to Move Topic',
|
||||
message: 'This topic could not be moved to ' + targetCatLabel + '.<br />Please try again later',
|
||||
timeout: 5000
|
||||
});
|
||||
}
|
||||
});
|
||||
socket.emit('api:topic.move', { tid: tid, cid: targetCid });
|
||||
}
|
||||
});
|
||||
});
|
||||
socket.emit('api:categories.get');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Fix delete state for this thread's posts
|
||||
var postEls = document.querySelectorAll('#post-container li[data-deleted]');
|
||||
for(var x=0,numPosts=postEls.length;x<numPosts;x++) {
|
||||
if (postEls[x].getAttribute('data-deleted') === '1') toggle_post_delete_state(postEls[x].getAttribute('data-pid'));
|
||||
postEls[x].removeAttribute('data-deleted');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('.post-container').delegate('.edit', 'click', function(e) {
|
||||
var pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1];
|
||||
|
||||
var main = $(this).parents('.main-post');
|
||||
if(main.length > 0)
|
||||
app.open_post_window('edit', tid, topic_name, pid);
|
||||
else
|
||||
app.open_post_window('edit', tid, "", pid);
|
||||
|
||||
});
|
||||
|
||||
$('.post-container').delegate('.delete', 'click', function(e) {
|
||||
var pid = ($(this).attr('id') || $(this.parentNode).attr('id')).split('_')[1],
|
||||
postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')),
|
||||
deleteAction = !postEl.hasClass('deleted') ? true : false,
|
||||
confirmDel = confirm((deleteAction ? 'Delete' : 'Restore') + ' this post?');
|
||||
|
||||
if (confirmDel) {
|
||||
deleteAction ?
|
||||
socket.emit('api:posts.delete', { pid: pid }) :
|
||||
socket.emit('api:posts.restore', { pid: pid });
|
||||
}
|
||||
});
|
||||
|
||||
// CHAT, move to chat.js later?
|
||||
|
||||
$('.post-container').delegate('.chat', 'click', function(e){
|
||||
|
||||
var username = $(this).parents('li').attr('data-username');
|
||||
var touid = $(this).parents('li').attr('data-uid');
|
||||
|
||||
var chatModal = createModalIfDoesntExist(username, touid);
|
||||
|
||||
chatModal.show();
|
||||
bringModalToTop(chatModal);
|
||||
|
||||
});
|
||||
|
||||
function bringModalToTop(chatModal) {
|
||||
var topZ = 0;
|
||||
$('.modal').each(function(){
|
||||
var thisZ = parseInt($(this).css('zIndex'), 10);
|
||||
if (thisZ > topZ){
|
||||
topZ = thisZ;
|
||||
}
|
||||
});
|
||||
chatModal.css('zIndex', topZ+1);
|
||||
}
|
||||
|
||||
function createModalIfDoesntExist(username, touid) {
|
||||
var chatModal = $('#chat-modal-'+touid);
|
||||
|
||||
if(!chatModal.length) {
|
||||
var chatModal = $('#chat-modal').clone();
|
||||
chatModal.attr('id','chat-modal-'+touid);
|
||||
chatModal.appendTo($('body'));
|
||||
chatModal.draggable({
|
||||
start:function(){
|
||||
bringModalToTop(chatModal);
|
||||
}
|
||||
});
|
||||
chatModal.find('#chat-with-name').html(username);
|
||||
|
||||
chatModal.find('.close').on('click',function(e){
|
||||
chatModal.hide();
|
||||
});
|
||||
|
||||
chatModal.on('click', function(e){
|
||||
bringModalToTop(chatModal);
|
||||
});
|
||||
|
||||
addSendHandler(chatModal, touid);
|
||||
}
|
||||
|
||||
return chatModal;
|
||||
}
|
||||
|
||||
function addSendHandler(chatModal, touid) {
|
||||
chatModal.find('#chat-message-input').off('keypress');
|
||||
chatModal.find('#chat-message-input').on('keypress', function(e) {
|
||||
if(e.which === 13) {
|
||||
sendMessage(chatModal, touid);
|
||||
}
|
||||
});
|
||||
|
||||
chatModal.find('#chat-message-send-btn').off('click');
|
||||
chatModal.find('#chat-message-send-btn').on('click', function(e){
|
||||
sendMessage(chatModal, touid);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function sendMessage(chatModal, touid) {
|
||||
var msg = app.strip_tags(chatModal.find('#chat-message-input').val());
|
||||
if(msg.length) {
|
||||
msg = msg +'\n';
|
||||
socket.emit('sendChatMessage', { touid:touid, message:msg});
|
||||
chatModal.find('#chat-message-input').val('');
|
||||
appendChatMessage(chatModal, 'You : ' + msg);
|
||||
}
|
||||
}
|
||||
|
||||
socket.on('chatMessage', function(data){
|
||||
var username = data.username;
|
||||
var fromuid = data.fromuid;
|
||||
var message = data.message;
|
||||
|
||||
var chatModal = createModalIfDoesntExist(username, fromuid);
|
||||
chatModal.show();
|
||||
bringModalToTop(chatModal);
|
||||
|
||||
appendChatMessage(chatModal, message)
|
||||
});
|
||||
|
||||
function appendChatMessage(chatModal, message){
|
||||
var chatContent = chatModal.find('#chat-content');
|
||||
chatContent.append(message);
|
||||
chatContent.scrollTop(
|
||||
chatContent[0].scrollHeight - chatContent.height()
|
||||
);
|
||||
}
|
||||
//end of chat
|
||||
|
||||
|
||||
ajaxify.register_events([
|
||||
'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room',
|
||||
'event:topic_deleted', 'event:topic_restored', 'event:topic:locked',
|
||||
'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned',
|
||||
'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored',
|
||||
'api:posts.favourite', 'chatMessage'
|
||||
]);
|
||||
|
||||
|
||||
socket.on('api:get_users_in_room', function(users) {
|
||||
var anonymous = users.anonymous,
|
||||
usernames = users.usernames,
|
||||
usercount = usernames.length;
|
||||
|
||||
for (var i = 0, ii=usercount; i<ii; i++) {
|
||||
usernames[i] = '<strong>' + '<a href="/users/'+usernames[i]+'">' + usernames[i] + '</a></strong>';
|
||||
}
|
||||
|
||||
// headexplosion.gif for fun, to see if I could do this in one line of code. feel free to refactor haha
|
||||
var active =
|
||||
((usercount === 1) ? usernames[0] : '')
|
||||
+ ((usercount === 2 && anonymous === 0) ? usernames[0] + ' and ' + usernames[1] : '')
|
||||
+ ((usercount > 2 && anonymous === 0) ? usernames.join(', ').replace(/,([^,]*)$/, ", and$1") : '')
|
||||
+ (usercount > 1 && anonymous > 0 ? usernames.join(', ') : '')
|
||||
+ ((anonymous > 0) ? (usercount > 0 ? ' and ': '') + anonymous + ' guest' + (anonymous > 1 ? 's are': ' is') : '')
|
||||
+ (anonymous === 0 ? (usercount > 1 ? ' are' : ' is') : '') + ' browsing this thread';
|
||||
|
||||
document.getElementById('thread_active_users').innerHTML = active;
|
||||
});
|
||||
|
||||
socket.on('event:rep_up', function(data) {
|
||||
adjust_rep(1, data.pid, data.uid);
|
||||
});
|
||||
|
||||
socket.on('event:rep_down', function(data) {
|
||||
adjust_rep(-1, data.pid, data.uid);
|
||||
});
|
||||
|
||||
socket.on('event:new_post', function(data) {
|
||||
var html = templates.prepare(templates['topic'].blocks['posts']).parse(data),
|
||||
uniqueid = new Date().getTime();
|
||||
|
||||
jQuery('<div id="' + uniqueid + '"></div>')
|
||||
.appendTo("#post-container")
|
||||
.hide()
|
||||
.append(html)
|
||||
.fadeIn('slow');
|
||||
|
||||
set_up_posts(uniqueid);
|
||||
|
||||
addCommasToNumbers();
|
||||
});
|
||||
|
||||
socket.on('event:topic_deleted', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_locked_state(true);
|
||||
set_delete_state(true);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_restored', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_locked_state(false);
|
||||
set_delete_state(false);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_locked', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_locked_state(true, 1);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_unlocked', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_locked_state(false, 1);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_pinned', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_pinned_state(true, 1);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_unpinned', function(data) {
|
||||
if (data.tid === tid && data.status === 'ok') {
|
||||
set_pinned_state(false, 1);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:topic_moved', function(data) {
|
||||
if (data && data.tid > 0) ajaxify.go('topic/' + data.tid);
|
||||
});
|
||||
|
||||
socket.on('event:post_edited', function(data) {
|
||||
var editedPostEl = document.getElementById('content_' + data.pid);
|
||||
|
||||
var editedPostTitle = $('#topic_title_'+data.pid);
|
||||
|
||||
if(editedPostTitle.length > 0) {
|
||||
editedPostTitle.fadeOut(250, function() {
|
||||
editedPostTitle.html(data.title);
|
||||
editedPostTitle.fadeIn(250);
|
||||
});
|
||||
}
|
||||
|
||||
$(editedPostEl).fadeOut(250, function() {
|
||||
this.innerHTML = data.content;
|
||||
$(this).fadeIn(250);
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('api:posts.favourite', function(data) {
|
||||
if (data.status !== 'ok' && data.pid) {
|
||||
var favEl = document.querySelector('.post_rep_' + data.pid).nextSibling;
|
||||
if (favEl) favEl.className = 'icon-star-empty';
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('event:post_deleted', function(data) {
|
||||
if (data.pid) toggle_post_delete_state(data.pid, true);
|
||||
});
|
||||
|
||||
socket.on('event:post_restored', function(data) {
|
||||
if (data.pid) toggle_post_delete_state(data.pid, true);
|
||||
});
|
||||
|
||||
function adjust_rep(value, pid, uid) {
|
||||
var post_rep = jQuery('.post_rep_' + pid),
|
||||
user_rep = jQuery('.user_rep_' + uid);
|
||||
|
||||
var ptotal = parseInt(post_rep.html(), 10),
|
||||
utotal = parseInt(user_rep.html(), 10);
|
||||
|
||||
ptotal += value;
|
||||
utotal += value;
|
||||
|
||||
post_rep.html(ptotal);
|
||||
user_rep.html(utotal);
|
||||
}
|
||||
|
||||
|
||||
function set_up_posts(div) {
|
||||
if (div == null) div = '';
|
||||
else div = '#' + div;
|
||||
|
||||
jQuery(div + ' .post_reply').click(function() {
|
||||
if (thread_state.locked !== '1') app.open_post_window('reply', tid, topic_name);
|
||||
});
|
||||
|
||||
jQuery(div + ' .quote').click(function() {
|
||||
if (thread_state.locked !== '1') app.open_post_window('quote', tid, topic_name);
|
||||
|
||||
var pid = $(this).parents('li').attr('data-pid');
|
||||
|
||||
$('#post_content').val('> ' + $('#content_' + pid).html() + '\n');
|
||||
console.log("POST ID "+pid);
|
||||
});
|
||||
|
||||
jQuery(div + ' .edit, ' + div + ' .delete').each(function() {
|
||||
var ids = this.id.replace('ids_', '').split('_'),
|
||||
pid = ids[0],
|
||||
uid = ids[1];
|
||||
|
||||
});
|
||||
|
||||
jQuery(div + ' .favourite').click(function() {
|
||||
var ids = this.id.replace('favs_', '').split('_'),
|
||||
pid = ids[0],
|
||||
uid = ids[1];
|
||||
|
||||
if (thread_state.locked !== '1') {
|
||||
if (this.children[1].className == 'icon-star-empty') {
|
||||
this.children[1].className = 'icon-star';
|
||||
socket.emit('api:posts.favourite', {pid: pid, room_id: app.current_room});
|
||||
}
|
||||
else {
|
||||
this.children[1].className = 'icon-star-empty';
|
||||
socket.emit('api:posts.unfavourite', {pid: pid, room_id: app.current_room});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function set_locked_state(locked, alert) {
|
||||
var threadReplyBtn = document.getElementById('post_reply'),
|
||||
postReplyBtns = document.querySelectorAll('#post-container .post_reply'),
|
||||
quoteBtns = document.querySelectorAll('#post-container .quote'),
|
||||
editBtns = document.querySelectorAll('#post-container .edit'),
|
||||
deleteBtns = document.querySelectorAll('#post-container .delete'),
|
||||
numReplyBtns = postReplyBtns.length,
|
||||
lockThreadEl = document.getElementById('lock_thread'),
|
||||
x;
|
||||
|
||||
if (locked === true) {
|
||||
lockThreadEl.innerHTML = '<i class="icon-unlock"></i> Unlock Thread';
|
||||
threadReplyBtn.disabled = true;
|
||||
threadReplyBtn.innerHTML = 'Locked <i class="icon-lock"></i>';
|
||||
for(x=0;x<numReplyBtns;x++) {
|
||||
postReplyBtns[x].innerHTML = 'Locked <i class="icon-lock"></i>';
|
||||
quoteBtns[x].style.display = 'none';
|
||||
editBtns[x].style.display = 'none';
|
||||
deleteBtns[x].style.display = 'none';
|
||||
}
|
||||
|
||||
if (alert) {
|
||||
app.alert({
|
||||
'alert_id': 'thread_lock',
|
||||
type: 'success',
|
||||
title: 'Thread Locked',
|
||||
message: 'Thread has been successfully locked',
|
||||
timeout: 5000
|
||||
});
|
||||
}
|
||||
|
||||
thread_state.locked = '1';
|
||||
} else {
|
||||
lockThreadEl.innerHTML = '<i class="icon-lock"></i> Lock Thread';
|
||||
threadReplyBtn.disabled = false;
|
||||
threadReplyBtn.innerHTML = 'Reply';
|
||||
for(x=0;x<numReplyBtns;x++) {
|
||||
postReplyBtns[x].innerHTML = 'Reply <i class="icon-reply"></i>';
|
||||
quoteBtns[x].style.display = 'inline-block';
|
||||
editBtns[x].style.display = 'inline-block';
|
||||
deleteBtns[x].style.display = 'inline-block';
|
||||
}
|
||||
|
||||
if (alert) {
|
||||
app.alert({
|
||||
'alert_id': 'thread_lock',
|
||||
type: 'success',
|
||||
title: 'Thread Unlocked',
|
||||
message: 'Thread has been successfully unlocked',
|
||||
timeout: 5000
|
||||
});
|
||||
}
|
||||
|
||||
thread_state.locked = '0';
|
||||
}
|
||||
}
|
||||
|
||||
function set_delete_state(deleted) {
|
||||
var deleteThreadEl = document.getElementById('delete_thread'),
|
||||
deleteTextEl = deleteThreadEl.getElementsByTagName('span')[0],
|
||||
threadEl = document.querySelector('.post-container'),
|
||||
deleteNotice = document.getElementById('thread-deleted') || document.createElement('div');
|
||||
|
||||
if (deleted) {
|
||||
deleteTextEl.innerHTML = '<i class="icon-comment"></i> Restore Thread';
|
||||
$(threadEl).addClass('deleted');
|
||||
|
||||
// Spawn a 'deleted' notice at the top of the page
|
||||
deleteNotice.setAttribute('id', 'thread-deleted');
|
||||
deleteNotice.className = 'alert';
|
||||
deleteNotice.innerHTML = 'This thread has been deleted. Only users with thread management privileges can see it.';
|
||||
document.getElementById('content').insertBefore(deleteNotice, threadEl);
|
||||
|
||||
thread_state.deleted = '1';
|
||||
} else {
|
||||
deleteTextEl.innerHTML = '<i class="icon-trash"></i> Delete Thread';
|
||||
$(threadEl).removeClass('deleted');
|
||||
deleteNotice.parentNode.removeChild(deleteNotice);
|
||||
|
||||
thread_state.deleted = '0';
|
||||
}
|
||||
}
|
||||
|
||||
function set_pinned_state(pinned, alert) {
|
||||
var pinEl = document.getElementById('pin_thread');
|
||||
|
||||
if (pinned) {
|
||||
pinEl.innerHTML = '<i class="icon-pushpin"></i> Unpin Thread';
|
||||
if (alert) {
|
||||
app.alert({
|
||||
'alert_id': 'thread_pin',
|
||||
type: 'success',
|
||||
title: 'Thread Pinned',
|
||||
message: 'Thread has been successfully pinned',
|
||||
timeout: 5000
|
||||
});
|
||||
}
|
||||
|
||||
thread_state.pinned = '1';
|
||||
} else {
|
||||
pinEl.innerHTML = '<i class="icon-pushpin"></i> Pin Thread';
|
||||
if (alert) {
|
||||
app.alert({
|
||||
'alert_id': 'thread_pin',
|
||||
type: 'success',
|
||||
title: 'Thread Unpinned',
|
||||
message: 'Thread has been successfully unpinned',
|
||||
timeout: 5000
|
||||
});
|
||||
}
|
||||
|
||||
thread_state.pinned = '0';
|
||||
}
|
||||
}
|
||||
|
||||
function toggle_post_delete_state(pid) {
|
||||
var postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]'));
|
||||
quoteEl = $(postEl[0].querySelector('.quote')),
|
||||
favEl = $(postEl[0].querySelector('.favourite')),
|
||||
replyEl = $(postEl[0].querySelector('.post_reply'));
|
||||
|
||||
if (!postEl.hasClass('deleted')) {
|
||||
quoteEl.addClass('none');
|
||||
favEl.addClass('none');
|
||||
replyEl.addClass('none');
|
||||
} else {
|
||||
quoteEl.removeClass('none');
|
||||
favEl.removeClass('none');
|
||||
replyEl.removeClass('none');
|
||||
}
|
||||
|
||||
postEl.toggleClass('deleted');
|
||||
}
|
||||
})();
|
@ -0,0 +1,15 @@
|
||||
(function() {
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.reputation').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
$('.postcount').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}());
|
Loading…
Reference in New Issue