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.
225 lines
5.9 KiB
JavaScript
225 lines
5.9 KiB
JavaScript
'use strict';
|
|
|
|
|
|
define('forum/account/header', [
|
|
'coverPhoto',
|
|
'pictureCropper',
|
|
'components',
|
|
'translator',
|
|
'benchpress',
|
|
'accounts/delete',
|
|
'api',
|
|
], function (coverPhoto, pictureCropper, components, translator, Benchpress, AccountsDelete, api) {
|
|
var AccountHeader = {};
|
|
var isAdminOrSelfOrGlobalMod;
|
|
|
|
AccountHeader.init = function () {
|
|
isAdminOrSelfOrGlobalMod = ajaxify.data.isAdmin || ajaxify.data.isSelf || ajaxify.data.isGlobalModerator;
|
|
|
|
hidePrivateLinks();
|
|
selectActivePill();
|
|
|
|
if (isAdminOrSelfOrGlobalMod) {
|
|
setupCoverPhoto();
|
|
}
|
|
|
|
components.get('account/follow').on('click', function () {
|
|
toggleFollow('follow');
|
|
});
|
|
|
|
components.get('account/unfollow').on('click', function () {
|
|
toggleFollow('unfollow');
|
|
});
|
|
|
|
components.get('account/chat').on('click', function () {
|
|
socket.emit('modules.chats.hasPrivateChat', ajaxify.data.uid, function (err, roomId) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
if (roomId) {
|
|
app.openChat(roomId);
|
|
} else {
|
|
app.newChat(ajaxify.data.uid);
|
|
}
|
|
});
|
|
});
|
|
|
|
components.get('account/new-chat').on('click', function () {
|
|
app.newChat(ajaxify.data.uid, function () {
|
|
components.get('account/chat').parent().removeClass('hidden');
|
|
});
|
|
});
|
|
|
|
|
|
components.get('account/ban').on('click', function () {
|
|
banAccount(ajaxify.data.theirid);
|
|
});
|
|
components.get('account/unban').on('click', unbanAccount);
|
|
components.get('account/delete-account').on('click', handleDeleteEvent.bind(null, 'account'));
|
|
components.get('account/delete-content').on('click', handleDeleteEvent.bind(null, 'content'));
|
|
components.get('account/delete-all').on('click', handleDeleteEvent.bind(null, 'purge'));
|
|
components.get('account/flag').on('click', flagAccount);
|
|
components.get('account/block').on('click', toggleBlockAccount);
|
|
};
|
|
|
|
function handleDeleteEvent(type) {
|
|
AccountsDelete[type](ajaxify.data.theirid);
|
|
}
|
|
|
|
// TODO: This exported method is used in forum/flags/detail -- refactor??
|
|
AccountHeader.banAccount = banAccount;
|
|
|
|
function hidePrivateLinks() {
|
|
if (!app.user.uid || app.user.uid !== parseInt(ajaxify.data.theirid, 10)) {
|
|
$('.account-sub-links .plugin-link.private').addClass('hide');
|
|
}
|
|
}
|
|
|
|
function selectActivePill() {
|
|
$('.account-sub-links li').removeClass('active').each(function () {
|
|
var href = $(this).find('a').attr('href');
|
|
|
|
if (decodeURIComponent(href) === decodeURIComponent(window.location.pathname)) {
|
|
$(this).addClass('active');
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
function setupCoverPhoto() {
|
|
coverPhoto.init(
|
|
components.get('account/cover'),
|
|
function (imageData, position, callback) {
|
|
socket.emit('user.updateCover', {
|
|
uid: ajaxify.data.uid,
|
|
imageData: imageData,
|
|
position: position,
|
|
}, callback);
|
|
},
|
|
function () {
|
|
pictureCropper.show({
|
|
title: '[[user:upload_cover_picture]]',
|
|
socketMethod: 'user.updateCover',
|
|
aspectRatio: NaN,
|
|
allowSkippingCrop: true,
|
|
restrictImageDimension: false,
|
|
paramName: 'uid',
|
|
paramValue: ajaxify.data.theirid,
|
|
accept: '.png,.jpg,.bmp',
|
|
}, function (imageUrlOnServer) {
|
|
imageUrlOnServer = (!imageUrlOnServer.startsWith('http') ? config.relative_path : '') + imageUrlOnServer + '?' + Date.now();
|
|
components.get('account/cover').css('background-image', 'url(' + imageUrlOnServer + ')');
|
|
});
|
|
},
|
|
removeCover
|
|
);
|
|
}
|
|
|
|
function toggleFollow(type) {
|
|
api[type === 'follow' ? 'put' : 'delete']('/users/' + ajaxify.data.uid + '/follow', undefined, () => {
|
|
components.get('account/follow').toggleClass('hide', type === 'follow');
|
|
components.get('account/unfollow').toggleClass('hide', type === 'unfollow');
|
|
app.alertSuccess('[[global:alert.' + type + ', ' + ajaxify.data.username + ']]');
|
|
}, 'default');
|
|
|
|
return false;
|
|
}
|
|
|
|
function banAccount(theirid, onSuccess) {
|
|
theirid = theirid || ajaxify.data.theirid;
|
|
|
|
Benchpress.parse('admin/partials/temporary-ban', {}, function (html) {
|
|
bootbox.dialog({
|
|
className: 'ban-modal',
|
|
title: '[[user:ban_account]]',
|
|
message: html,
|
|
show: true,
|
|
buttons: {
|
|
close: {
|
|
label: '[[global:close]]',
|
|
className: 'btn-link',
|
|
},
|
|
submit: {
|
|
label: '[[user:ban_account]]',
|
|
callback: function () {
|
|
var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
|
|
data[cur.name] = cur.value;
|
|
return data;
|
|
}, {});
|
|
|
|
var until = formData.length > 0 ? (Date.now() + (formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1))) : 0;
|
|
|
|
api.put('/users/' + theirid + '/ban', {
|
|
until: until,
|
|
reason: formData.reason || '',
|
|
}).then(() => {
|
|
if (typeof onSuccess === 'function') {
|
|
return onSuccess();
|
|
}
|
|
|
|
ajaxify.refresh();
|
|
});
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
function unbanAccount() {
|
|
api.del('/users/' + ajaxify.data.theirid + '/ban').then(() => {
|
|
ajaxify.refresh();
|
|
});
|
|
}
|
|
|
|
function flagAccount() {
|
|
require(['flags'], function (flags) {
|
|
flags.showFlagModal({
|
|
type: 'user',
|
|
id: ajaxify.data.uid,
|
|
});
|
|
});
|
|
}
|
|
|
|
function toggleBlockAccount() {
|
|
var targetEl = this;
|
|
socket.emit('user.toggleBlock', {
|
|
blockeeUid: ajaxify.data.uid,
|
|
blockerUid: app.user.uid,
|
|
}, function (err, blocked) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
|
|
translator.translate('[[user:' + (blocked ? 'unblock' : 'block') + '_user]]', function (label) {
|
|
$(targetEl).text(label);
|
|
});
|
|
});
|
|
|
|
// Keep dropdown open
|
|
return false;
|
|
}
|
|
|
|
function removeCover() {
|
|
translator.translate('[[user:remove_cover_picture_confirm]]', function (translated) {
|
|
bootbox.confirm(translated, function (confirm) {
|
|
if (!confirm) {
|
|
return;
|
|
}
|
|
|
|
socket.emit('user.removeCover', {
|
|
uid: ajaxify.data.uid,
|
|
}, function (err) {
|
|
if (!err) {
|
|
ajaxify.refresh();
|
|
} else {
|
|
app.alertError(err.message);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
return AccountHeader;
|
|
});
|