216 lines
7.8 KiB
JavaScript
216 lines
7.8 KiB
JavaScript
$(document).ready(function(){
|
|
|
|
var getSelected = function(){
|
|
|
|
var id_list = new Array();
|
|
var elements = $('#responses input:checked').parent();
|
|
|
|
elements.each(function(index, element){
|
|
var id = $(element).attr('id').replace(/^re_/,'');
|
|
id_list.push(id);
|
|
});
|
|
|
|
if (id_list.length === 0){
|
|
alert(gettext('Please select at least one item'));
|
|
}
|
|
|
|
return {id_list: id_list, elements: elements};
|
|
};
|
|
|
|
var submit = function(id_list, elements, action_type){
|
|
if (action_type == 'delete' || action_type == 'mark_new' || action_type == 'mark_seen' || action_type == 'remove_flag' || action_type == 'close' || action_type == 'delete_post'){
|
|
$.ajax({
|
|
type: 'POST',
|
|
cache: false,
|
|
dataType: 'json',
|
|
data: JSON.stringify({memo_list: id_list, action_type: action_type}),
|
|
url: askbot['urls']['manageInbox'],
|
|
success: function(response_data){
|
|
if (response_data['success'] === true){
|
|
if (action_type == 'delete' || action_type == 'remove_flag' || action_type == 'close' || action_type == 'delete_post'){
|
|
elements.remove();
|
|
}
|
|
else if (action_type == 'mark_new'){
|
|
elements.addClass('highlight');
|
|
elements.addClass('new');
|
|
elements.removeClass('seen');
|
|
}
|
|
else if (action_type == 'mark_seen'){
|
|
elements.removeClass('highlight');
|
|
elements.addClass('seen');
|
|
elements.removeClass('new');
|
|
}
|
|
}
|
|
else {
|
|
showMessage($('#responses'), response_data['message']);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
var startAction = function(action_type){
|
|
var data = getSelected();
|
|
if (data['id_list'].length === 0){
|
|
return;
|
|
}
|
|
if (action_type == 'delete'){
|
|
msg = ngettext('Delete this notification?',
|
|
'Delete these notifications?', data['id_list'].length);
|
|
if (confirm(msg) === false){
|
|
return;
|
|
}
|
|
}
|
|
if (action_type == 'close'){
|
|
msg = ngettext('Close this entry?',
|
|
'Close these entries?', data['id_list'].length);
|
|
if (confirm(msg) === false){
|
|
return;
|
|
}
|
|
}
|
|
if (action_type == 'remove_flag'){
|
|
msg = ngettext('Remove all flags on this entry?',
|
|
'Remove all flags on these entries?', data['id_list'].length);
|
|
if (confirm(msg) === false){
|
|
return;
|
|
}
|
|
}
|
|
if (action_type == 'delete_post'){
|
|
msg = ngettext('Delete this entry?',
|
|
'Delete these entries?', data['id_list'].length);
|
|
if (confirm(msg) === false){
|
|
return;
|
|
}
|
|
}
|
|
submit(data['id_list'], data['elements'], action_type);
|
|
};
|
|
setupButtonEventHandlers($('#re_mark_seen'), function(){startAction('mark_seen')});
|
|
setupButtonEventHandlers($('#re_mark_new'), function(){startAction('mark_new')});
|
|
setupButtonEventHandlers($('#re_dismiss'), function(){startAction('delete')});
|
|
setupButtonEventHandlers($('#re_remove_flag'), function(){startAction('remove_flag')});
|
|
setupButtonEventHandlers($('#re_close'), function(){startAction('close')});
|
|
setupButtonEventHandlers($('#re_delete_post'), function(){startAction('delete_post')});
|
|
setupButtonEventHandlers(
|
|
$('#sel_all'),
|
|
function(){
|
|
setCheckBoxesIn('#responses .new', true);
|
|
setCheckBoxesIn('#responses .seen', true);
|
|
}
|
|
);
|
|
setupButtonEventHandlers(
|
|
$('#sel_seen'),
|
|
function(){
|
|
setCheckBoxesIn('#responses .seen', true);
|
|
}
|
|
);
|
|
setupButtonEventHandlers(
|
|
$('#sel_new'),
|
|
function(){
|
|
setCheckBoxesIn('#responses .new', true);
|
|
}
|
|
);
|
|
setupButtonEventHandlers(
|
|
$('#sel_none'),
|
|
function(){
|
|
setCheckBoxesIn('#responses .new', false);
|
|
setCheckBoxesIn('#responses .seen', false);
|
|
}
|
|
);
|
|
|
|
setupButtonEventHandlers($('.re_expand'),
|
|
function(e){
|
|
e.preventDefault();
|
|
var re_snippet = $(this).find(".re_snippet:first")
|
|
var re_content = $(this).find(".re_content:first")
|
|
$(re_snippet).slideToggle();
|
|
$(re_content).slideToggle();
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* @constructor
|
|
* allows to follow/unfollow users
|
|
*/
|
|
var FollowUser = function(){
|
|
WrappedElement.call(this);
|
|
this._user_id = null;
|
|
this._user_name = null;
|
|
};
|
|
inherits(FollowUser, WrappedElement);
|
|
|
|
/**
|
|
* @param {string} user_name
|
|
*/
|
|
FollowUser.prototype.setUserName = function(user_name){
|
|
this._user_name = user_name;
|
|
};
|
|
|
|
FollowUser.prototype.decorate = function(element){
|
|
this._element = element;
|
|
this._user_id = parseInt(element.attr('id').split('-').pop());
|
|
this._available_action = element.children().hasClass('follow') ? 'follow':'unfollow';
|
|
var me = this;
|
|
setupButtonEventHandlers(this._element, function(){ me.go() });
|
|
};
|
|
|
|
FollowUser.prototype.go = function(){
|
|
if (askbot['data']['userIsAuthenticated'] === false){
|
|
var message = gettext('Please <a href="%(signin_url)s">signin</a> to follow %(username)s');
|
|
var message_data = {
|
|
signin_url: askbot['urls']['user_signin'] + '?next=' + window.location.href,
|
|
username: this._user_name
|
|
}
|
|
message = interpolate(message, message_data, true);
|
|
showMessage(this._element, message);
|
|
return;
|
|
}
|
|
var user_id = this._user_id;
|
|
if (this._available_action === 'follow'){
|
|
var url = askbot['urls']['follow_user'];
|
|
} else {
|
|
var url = askbot['urls']['unfollow_user'];
|
|
}
|
|
var me = this;
|
|
$.ajax({
|
|
type: 'POST',
|
|
cache: false,
|
|
dataType: 'json',
|
|
url: url.replace('{{userId}}', user_id),
|
|
success: function(){ me.toggleState() }
|
|
});
|
|
};
|
|
|
|
FollowUser.prototype.toggleState = function(){
|
|
if (this._available_action === 'follow'){
|
|
this._available_action = 'unfollow';
|
|
var unfollow_div = document.createElement('div');
|
|
unfollow_div.setAttribute('class', 'unfollow');
|
|
var red_div = document.createElement('div');
|
|
red_div.setAttribute('class', 'unfollow-red');
|
|
red_div.innerHTML = interpolate(gettext('unfollow %s'), [this._user_name]);
|
|
var green_div = document.createElement('div');
|
|
green_div.setAttribute('class', 'unfollow-green');
|
|
green_div.innerHTML = interpolate(gettext('following %s'), [this._user_name]);
|
|
unfollow_div.appendChild(red_div);
|
|
unfollow_div.appendChild(green_div);
|
|
this._element.html(unfollow_div);
|
|
} else {
|
|
var follow_div = document.createElement('div');
|
|
follow_div.innerHTML = interpolate(gettext('follow %s'), [this._user_name]);
|
|
follow_div.setAttribute('class', 'follow');
|
|
this._available_action = 'follow';
|
|
this._element.html(follow_div);
|
|
}
|
|
};
|
|
|
|
(function(){
|
|
var fbtn = $('.follow-toggle');
|
|
if (fbtn.length === 1){
|
|
var follow_user = new FollowUser();
|
|
follow_user.decorate(fbtn);
|
|
follow_user.setUserName(askbot['data']['viewUserName']);
|
|
}
|
|
})();
|
|
|