mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-27 23:48:48 +00:00
147 lines
4.4 KiB
JavaScript
147 lines
4.4 KiB
JavaScript
define([
|
|
'jquery',
|
|
'underscore',
|
|
'backbone',
|
|
'common'
|
|
], function($, _, Backbone, Common) {
|
|
'use strict';
|
|
|
|
var View = Backbone.View.extend({
|
|
tagName: 'tr',
|
|
|
|
template: _.template($('#repo-folder-perm-item-tmpl').html()),
|
|
|
|
events: {
|
|
'mouseenter': 'highlight',
|
|
'mouseleave': 'rmHighlight',
|
|
'click .edit-icon': 'showEdit',
|
|
'change .perm-toggle-select': 'edit',
|
|
'click .rm': 'rm'
|
|
},
|
|
|
|
initialize: function(options) {
|
|
this.data = {};
|
|
$.extend(this.data, options);
|
|
|
|
this.listenTo(this.model, 'change', this.render);
|
|
},
|
|
|
|
render: function() {
|
|
var obj = {};
|
|
|
|
$.extend(obj, this.model.attributes, {
|
|
'perm_type': this.data.perm_type,
|
|
'repo_id': this.data.repo_id,
|
|
'encoded_path': Common.encodePath(this.model.get('folder_path'))
|
|
});
|
|
|
|
this.$el.html(this.template(obj));
|
|
return this;
|
|
},
|
|
|
|
highlight: function() {
|
|
this.$el.addClass('hl').find('.op-icon').removeClass('vh');
|
|
},
|
|
|
|
rmHighlight: function() {
|
|
this.$el.removeClass('hl').find('.op-icon').addClass('vh');
|
|
},
|
|
|
|
showEdit: function(e) {
|
|
var $td = $(e.currentTarget).closest('td');
|
|
$('.cur-perm, .edit-icon', $td).hide();
|
|
$('.perm-toggle-select', $td).show();
|
|
|
|
return false;
|
|
},
|
|
|
|
edit: function(e) {
|
|
var url = Common.getUrl({
|
|
name: this.data.perm_type == 'user' ? 'repo_user_folder_perm' : 'repo_group_folder_perm',
|
|
repo_id: this.data.repo_id
|
|
});
|
|
|
|
var new_perm = $(e.currentTarget).val();
|
|
var post_data = {
|
|
'folder_path': this.model.get('folder_path'),
|
|
'permission': new_perm
|
|
};
|
|
if (this.data.perm_type == 'user') {
|
|
$.extend(post_data, {
|
|
'user_email': this.model.get('user_email')
|
|
});
|
|
} else {
|
|
$.extend(post_data, {
|
|
'group_id': this.model.get('group_id')
|
|
});
|
|
}
|
|
|
|
var _this = this;
|
|
$.ajax({
|
|
url: url,
|
|
type: 'put',
|
|
dataType: 'json',
|
|
beforeSend: Common.prepareCSRFToken,
|
|
data: post_data,
|
|
success: function() {
|
|
_this.model.set({'permission': new_perm});
|
|
},
|
|
error: function(xhr) {
|
|
var err_msg;
|
|
if (xhr.responseText) {
|
|
err_msg = $.parseJSON(response.responseText).error_msg;
|
|
} else {
|
|
err_msg = gettext('Please check the network.');
|
|
}
|
|
_this.data.$error.html(err_msg).show();
|
|
}
|
|
});
|
|
},
|
|
|
|
rm: function() {
|
|
var url = Common.getUrl({
|
|
name: this.data.perm_type == 'user' ? 'repo_user_folder_perm' : 'repo_group_folder_perm',
|
|
repo_id: this.data.repo_id
|
|
});
|
|
var post_data = {
|
|
'folder_path': this.model.get('folder_path')
|
|
};
|
|
if (this.data.perm_type == 'user') {
|
|
$.extend(post_data, {
|
|
'user_email': this.model.get('user_email')
|
|
});
|
|
} else {
|
|
$.extend(post_data, {
|
|
'group_id': this.model.get('group_id')
|
|
});
|
|
}
|
|
|
|
var _this = this;
|
|
$.ajax({
|
|
url: url,
|
|
type: 'delete',
|
|
dataType: 'json',
|
|
beforeSend: Common.prepareCSRFToken,
|
|
data: post_data,
|
|
success: function() {
|
|
_this.remove();
|
|
},
|
|
error: function(xhr) {
|
|
var err_msg;
|
|
if (xhr.responseText) {
|
|
err_msg = $.parseJSON(response.responseText).error_msg;
|
|
} else {
|
|
err_msg = gettext('Please check the network.');
|
|
}
|
|
_this.data.$error.html(err_msg).show();
|
|
}
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
});
|
|
|
|
return View;
|
|
});
|