1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-06-28 16:08:25 +00:00
seahub/static/scripts/app/views/folder-share-item.js

205 lines
7.0 KiB
JavaScript

define([
'jquery',
'underscore',
'backbone',
'common'
], function($, _, Backbone, Common) {
'use strict';
var FolderShareItemView = Backbone.View.extend({
tagName: 'tr',
template: _.template($('#folder-perm-item-tmpl').html()),
initialize: function(options) {
if (options.item_data.show_folder_path === undefined) {
$.extend(options.item_data, {'show_folder_path': false})
}
this.item_data = options.item_data;
this.repo_id = options.repo_id;
this.path = options.path;
// show info about 'is_admin'
this.show_admin = false;
if (app.pageOptions.is_pro &&
this.path == '/' &&
!this.item_data.is_group_owned_repo) { // not for group owned repo
this.show_admin = true;
}
this.render();
},
render: function () {
this.$el.html(this.template($.extend({}, this.item_data, {'show_admin': this.show_admin})));
return this;
},
events: {
'mouseenter': 'showOpIcons',
'mouseleave': 'hideOpIcons',
'click .perm-edit-icon': 'editIconClick',
'change .perm-toggle-select': 'editPerm',
'click .delete-icon': 'del'
},
showOpIcons: function () {
this.$el.find('.op-icon').removeClass('vh');
},
hideOpIcons: function () {
this.$el.find('.op-icon').addClass('vh');
},
editIconClick: function (e) {
$(e.currentTarget).closest('td')
.find('.perm').addClass('hide').end()
.find('.perm-toggle-select').removeClass('hide');
return false;
},
editPerm: function (e) {
var _this = this;
var perm = $(e.currentTarget).val();
var item_data = this.item_data;
var url, method, data;
if (item_data.is_group_owned_repo) { // group owned repo
if (item_data.for_user) {
url = Common.getUrl({
name: 'group_owned_repo_user_share',
repo_id: this.repo_id
});
data = {
'username': item_data.user_email,
'permission': perm,
'path': this.path
};
} else {
url = Common.getUrl({
name: 'group_owned_repo_group_share',
repo_id: this.repo_id
});
data = {
'group_id': item_data.group_id,
'permission': perm,
'path': this.path
};
}
method = 'PUT';
} else {
url = Common.getUrl({
name: 'dir_shared_items',
repo_id: this.repo_id
}) + '?p=' + encodeURIComponent(this.path);
if (item_data.for_user) {
url += '&share_type=user&username=' + encodeURIComponent(item_data.user_email);
} else {
url += '&share_type=group&group_id=' + encodeURIComponent(item_data.group_id);
}
data = {
'permission': perm
};
method = 'POST';
}
$.ajax({
url: url,
dataType: 'json',
method: method,
beforeSend: Common.prepareCSRFToken,
data: data,
success: function () {
if (perm == 'admin') {
item_data.is_admin = true;
item_data.permission = 'rw';
} else {
item_data.permission = perm;
item_data.is_admin = false;
}
_this.render();
},
error: function(xhr) {
var err_msg;
if (xhr.responseText) {
err_msg = gettext("Edit failed");
} else {
err_msg = gettext("Failed. Please check the network.");
}
if (item_data.for_user) {
$('#dir-user-share .error').html(err_msg).removeClass('hide');
} else {
$('#dir-group-share .error').html(err_msg).removeClass('hide');
}
}
});
},
del: function () {
var _this = this;
var item_data = this.item_data;
var url, data = {};
if (item_data.is_group_owned_repo) { // group owned repo
if (item_data.for_user) {
url = Common.getUrl({
name: 'group_owned_repo_user_share',
repo_id: this.repo_id
});
data = {
'username': item_data.user_email,
'path': this.path
};
} else {
url = Common.getUrl({
name: 'group_owned_repo_group_share',
repo_id: this.repo_id
});
data = {
'group_id': item_data.group_id,
'path': this.path
};
}
} else {
url = Common.getUrl({
name: 'dir_shared_items',
repo_id: this.repo_id
}) + '?p=' + encodeURIComponent(this.path);
if (item_data.for_user) {
url += '&share_type=user&username=' + encodeURIComponent(item_data.user_email);
} else {
url += '&share_type=group&group_id=' + encodeURIComponent(item_data.group_id);
}
}
$.ajax({
url: url,
dataType: 'json',
method: 'DELETE',
beforeSend: Common.prepareCSRFToken,
data: data,
success: function () {
_this.remove();
},
error: function(xhr) {
var err_msg;
if (xhr.responseText) {
err_msg = gettext("Delete failed");
} else {
err_msg = gettext("Failed. Please check the network.");
}
if (item_data.for_user) {
$('#dir-user-share .error').html(err_msg).removeClass('hide');
} else {
$('#dir-group-share .error').html(err_msg).removeClass('hide');
}
}
});
return false;
}
});
return FolderShareItemView;
});