You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.3 KiB
JavaScript
171 lines
4.3 KiB
JavaScript
'use strict';
|
|
|
|
/* globals define, ajaxify, app, socket, bootbox */
|
|
|
|
define('forum/account/profile', [
|
|
'forum/account/header',
|
|
'forum/infinitescroll',
|
|
'translator',
|
|
'components'
|
|
], function(header, infinitescroll, translator) {
|
|
var Account = {},
|
|
yourid,
|
|
theirid,
|
|
isFollowing;
|
|
|
|
Account.init = function() {
|
|
header.init();
|
|
|
|
yourid = ajaxify.data.yourid;
|
|
theirid = ajaxify.data.theirid;
|
|
isFollowing = ajaxify.data.isFollowing;
|
|
|
|
app.enterRoom('user/' + theirid);
|
|
|
|
processPage();
|
|
|
|
updateButtons();
|
|
|
|
$('#follow-btn').on('click', function() {
|
|
return toggleFollow('follow');
|
|
});
|
|
|
|
$('#unfollow-btn').on('click', function() {
|
|
return toggleFollow('unfollow');
|
|
});
|
|
|
|
$('#chat-btn').on('click', function() {
|
|
app.openChat($('.account-username').html(), theirid);
|
|
});
|
|
|
|
$('#banAccountBtn').on('click', banAccount);
|
|
$('#unbanAccountBtn').on('click', unbanAccount);
|
|
$('#deleteAccountBtn').on('click', deleteAccount);
|
|
|
|
socket.removeListener('event:user_status_change', onUserStatusChange);
|
|
socket.on('event:user_status_change', onUserStatusChange);
|
|
|
|
infinitescroll.init(loadMorePosts);
|
|
};
|
|
|
|
function processPage() {
|
|
$('[component="posts"] img:not(.not-responsive), [component="aboutme"] img:not(.not-responsive)').addClass('img-responsive');
|
|
}
|
|
|
|
function updateButtons() {
|
|
var isSelfOrNotLoggedIn = yourid === theirid || parseInt(yourid, 10) === 0;
|
|
$('#follow-btn').toggleClass('hide', isFollowing || isSelfOrNotLoggedIn);
|
|
$('#unfollow-btn').toggleClass('hide', !isFollowing || isSelfOrNotLoggedIn);
|
|
$('#chat-btn').toggleClass('hide', isSelfOrNotLoggedIn);
|
|
}
|
|
|
|
function toggleFollow(type) {
|
|
socket.emit('user.' + type, {
|
|
uid: theirid
|
|
}, function(err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
|
|
$('#follow-btn').toggleClass('hide', type === 'follow');
|
|
$('#unfollow-btn').toggleClass('hide', type === 'unfollow');
|
|
app.alertSuccess('[[global:alert.' + type + ', ' + $('.account-username').html() + ']]');
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function onUserStatusChange(data) {
|
|
if (parseInt(ajaxify.data.theirid, 10) !== parseInt(data.uid, 10)) {
|
|
return;
|
|
}
|
|
|
|
app.updateUserStatus($('.account [component="user/status"]'), data.status);
|
|
}
|
|
|
|
function loadMorePosts(direction) {
|
|
if (direction < 0 || !$('[component="posts"]').length) {
|
|
return;
|
|
}
|
|
|
|
$('[component="posts/loading"]').removeClass('hidden');
|
|
|
|
infinitescroll.loadMore('posts.loadMoreUserPosts', {
|
|
after: $('[component="posts"]').attr('data-nextstart'),
|
|
uid: theirid
|
|
}, function(data, done) {
|
|
if (data.posts && data.posts.length) {
|
|
onPostsLoaded(data.posts, done);
|
|
} else {
|
|
done();
|
|
}
|
|
$('[component="posts"]').attr('data-nextstart', data.nextStart);
|
|
$('[component="posts/loading"]').addClass('hidden');
|
|
});
|
|
}
|
|
|
|
function onPostsLoaded(posts, callback) {
|
|
posts = posts.filter(function(post) {
|
|
return !$('[component="posts"] [data-pid=' + post.pid + ']').length;
|
|
});
|
|
|
|
if (!posts.length) {
|
|
return callback();
|
|
}
|
|
|
|
infinitescroll.parseAndTranslate('account/profile', 'posts', {posts: posts}, function(html) {
|
|
|
|
$('[component="posts"]').append(html);
|
|
html.find('.timeago').timeago();
|
|
|
|
callback();
|
|
});
|
|
}
|
|
|
|
function banAccount() {
|
|
translator.translate('[[user:ban_account_confirm]]', function(translated) {
|
|
bootbox.confirm(translated, function(confirm) {
|
|
if (!confirm) {
|
|
return;
|
|
}
|
|
socket.emit('admin.user.banUsers', [ajaxify.data.theirid], function(err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
$('#banAccountBtn').toggleClass('hide', true);
|
|
$('#banLabel, #unbanAccountBtn').toggleClass('hide', false);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function unbanAccount() {
|
|
socket.emit('admin.user.unbanUsers', [ajaxify.data.theirid], function(err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
$('#banAccountBtn').toggleClass('hide', false);
|
|
$('#banLabel, #unbanAccountBtn').toggleClass('hide', true);
|
|
});
|
|
}
|
|
|
|
function deleteAccount() {
|
|
translator.translate('[[user:delete_this_account_confirm]]', function(translated) {
|
|
bootbox.confirm(translated, function(confirm) {
|
|
if (!confirm) {
|
|
return;
|
|
}
|
|
|
|
socket.emit('admin.user.deleteUsers', [ajaxify.data.theirid], function(err) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
app.alertSuccess('[[user:account-deleted]]');
|
|
history.back();
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
return Account;
|
|
});
|