1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-06-27 23:48:48 +00:00
seahub/static/scripts/app/views/repo-folder-perm.js
2016-04-12 15:53:51 +08:00

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;
});