mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-28 16:08:25 +00:00
205 lines
6.6 KiB
JavaScript
205 lines
6.6 KiB
JavaScript
define([
|
|
'jquery',
|
|
'underscore',
|
|
'backbone',
|
|
'common'
|
|
], function($, _, Backbone, Common) {
|
|
'use strict';
|
|
|
|
var View = Backbone.View.extend({
|
|
id: 'dirent-details',
|
|
className: 'details-panel',
|
|
|
|
template: _.template($('#dirent-details-tmpl').html()),
|
|
|
|
initialize: function(options) {
|
|
this.dirView = options.dirView;
|
|
|
|
var _this = this;
|
|
$(document).on('keydown', function(e) {
|
|
// ESCAPE key pressed
|
|
if (e.which == 27) {
|
|
_this.hide();
|
|
}
|
|
});
|
|
},
|
|
|
|
events: {
|
|
'click .js-close': 'close',
|
|
'click .tags-edit-icon': 'switchToEditTags',
|
|
'click .tags-submit-btn': 'submitTags'
|
|
},
|
|
|
|
render: function() {
|
|
this.$el.html(this.template(this.data));
|
|
|
|
var _this = this;
|
|
this.$('.details-panel-img-container img').on('load', function() {
|
|
_this.showImg();
|
|
});
|
|
this.$('.thumbnail').on('error', function() {
|
|
_this.getBigIcon();
|
|
});
|
|
},
|
|
|
|
// for dir
|
|
update: function(part_data) {
|
|
var $container = this.$('.details-panel-text-info-container');
|
|
$('.loading-tip', $container).hide();
|
|
if (part_data.error_msg) {
|
|
$('.error', $container).html(part_data.error_msg).show();
|
|
} else {
|
|
this.$('.dir-folder-counts').html(part_data.dir_count);
|
|
this.$('.dir-file-counts').html(part_data.file_count);
|
|
this.$('.dir-size').html(part_data.size);
|
|
$('table', $container).show();
|
|
}
|
|
},
|
|
|
|
updateTags: function(part_data) {
|
|
var $container = this.$('.tags-container');
|
|
|
|
$('.loading-icon', $container).hide();
|
|
if (part_data.error_msg) {
|
|
$('.error', $container).html(part_data.error_msg).show();
|
|
} else {
|
|
var tags = part_data.tags;
|
|
var str = '';
|
|
var s2_tags = [];
|
|
for (var i = 0, len = tags.length; i < len; i++) {
|
|
str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>';
|
|
s2_tags.push({
|
|
'id': tags[i].name,
|
|
'text': tags[i].name
|
|
});
|
|
}
|
|
this.s2_tags = s2_tags;
|
|
$('.cur-tags', $container).html(str).show();
|
|
$('.tags-edit-icon', $container).show();
|
|
}
|
|
},
|
|
|
|
switchToEditTags: function() {
|
|
this.$('.cur-tags, .tags-edit-icon').hide();
|
|
this.$('.tags-submit-btn').show();
|
|
|
|
var $input = this.$('input.tags-input');
|
|
var $s2_container = this.$('.tags-input.select2-container');
|
|
if ($s2_container.length) {
|
|
$input.select2('data', this.s2_tags);
|
|
$s2_container.show();
|
|
} else {
|
|
$input.show()
|
|
.select2({
|
|
tags: [],
|
|
formatNoMatches: gettext("No matches")
|
|
})
|
|
.select2('data', this.s2_tags);
|
|
}
|
|
return false;
|
|
},
|
|
|
|
submitTags: function() {
|
|
var _this = this;
|
|
var $input = this.$('.tags-input');
|
|
var tags = $input.select2('val');
|
|
var $submit = this.$('.tags-submit-btn');
|
|
var $error = this.$('.tags-container .error');
|
|
var error_msg;
|
|
|
|
for (var i = 0, len = tags.length; i < len; i++) {
|
|
if (tags[i].indexOf(',') != -1) {
|
|
error_msg = gettext("Tag should not include ','.");
|
|
break;
|
|
}
|
|
}
|
|
if (error_msg) {
|
|
$error.html(error_msg).show();
|
|
return false;
|
|
}
|
|
|
|
Common.disableButton($submit);
|
|
$.ajax({
|
|
url: Common.getUrl({
|
|
'name': 'tags',
|
|
'repo_id': this.data.repo_id
|
|
}),
|
|
type: 'PUT',
|
|
cache: false,
|
|
dataType: 'json',
|
|
beforeSend: Common.prepareCSRFToken,
|
|
data: {
|
|
'path': Common.pathJoin([this.data.dir_path, this.data.dirent.obj_name]),
|
|
'is_dir': this.data.dirent.is_dir ? true : false,
|
|
'names': tags.join(',')
|
|
},
|
|
success: function(data) {
|
|
var tags = data.tags;
|
|
var str = '';
|
|
var s2_tags = [];
|
|
for (var i = 0, len = tags.length; i < len; i++) {
|
|
str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>';
|
|
s2_tags.push({
|
|
'id': tags[i].name,
|
|
'text': tags[i].name
|
|
});
|
|
}
|
|
_this.s2_tags = s2_tags;
|
|
|
|
_this.$('.tags-input').hide();
|
|
$submit.hide();
|
|
_this.$('.cur-tags').html(str).show();
|
|
_this.$('.tags-edit-icon').show();
|
|
},
|
|
error: function(xhr) {
|
|
var error_msg = Common.prepareAjaxErrorMsg(xhr);
|
|
$error.html(error_msg).show();
|
|
},
|
|
complete: function() {
|
|
Common.enableButton($submit);
|
|
}
|
|
});
|
|
},
|
|
|
|
hide: function() {
|
|
this.$el.hide();
|
|
},
|
|
|
|
close: function() {
|
|
this.hide();
|
|
return false;
|
|
},
|
|
|
|
show: function(options) {
|
|
var _this = this;
|
|
this.data = options;
|
|
this.render();
|
|
|
|
if ($('#' + this.id).length == 0) {
|
|
this.dirView.$mainCon.append(this.$el);
|
|
if (!this.$el.is(':visible')) {
|
|
this.$el.show();
|
|
}
|
|
} else {
|
|
this.$el.show();
|
|
}
|
|
},
|
|
|
|
showImg: function() {
|
|
var $container = this.$('.details-panel-img-container');
|
|
$('.loading-icon', $container).hide();
|
|
$('img', $container).show();
|
|
},
|
|
|
|
getBigIcon: function() {
|
|
this.$('.thumbnail').attr({
|
|
'src': this.data.big_icon_url,
|
|
'width': 96
|
|
}).removeClass('thumbnail');
|
|
}
|
|
|
|
});
|
|
|
|
return View;
|
|
});
|