mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 23:48:47 +00:00
[dirent details] add 'tags'
This commit is contained in:
@@ -3860,3 +3860,13 @@ img.thumbnail {
|
|||||||
width:800px;
|
width:800px;
|
||||||
overflow:auto;
|
overflow:auto;
|
||||||
}
|
}
|
||||||
|
/* tags in detail panel */
|
||||||
|
.tags-label {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.cur-tag {
|
||||||
|
padding:1px 5px;
|
||||||
|
background:#eee;
|
||||||
|
border-radius:3px;
|
||||||
|
margin:0 8px 8px 0;
|
||||||
|
}
|
||||||
|
@@ -811,6 +811,19 @@
|
|||||||
<td><%= dirent.last_update %></td>
|
<td><%= dirent.last_update %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
<% if (dirent.perm == 'rw') { %>
|
||||||
|
<tr>
|
||||||
|
<th class="tags-label">{% trans "Tags" %}</th>
|
||||||
|
<td class="tags-container">
|
||||||
|
<span class="loading-icon"></span>
|
||||||
|
<ul class="cur-tags hide ovhd"></ul>
|
||||||
|
<span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span>
|
||||||
|
<input type="hidden" class="w100 hide tags-input" />
|
||||||
|
<button class="submit tags-submit-btn hide">{% trans "Submit" %}</button>
|
||||||
|
<p class="error hide"></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% } %>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
@@ -844,6 +857,19 @@
|
|||||||
<td><%= dirent.last_update %></td>
|
<td><%= dirent.last_update %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
<% if (dirent.perm == 'rw') { %>
|
||||||
|
<tr>
|
||||||
|
<th class="tags-label">{% trans "Tags" %}</th>
|
||||||
|
<td class="tags-container">
|
||||||
|
<span class="loading-icon"></span>
|
||||||
|
<ul class="cur-tags hide ovhd"></ul>
|
||||||
|
<span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span>
|
||||||
|
<input type="hidden" class="w100 hide tags-input" />
|
||||||
|
<button class="submit tags-submit-btn hide">{% trans "Submit" %}</button>
|
||||||
|
<p class="error hide"></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% } %>
|
||||||
</table>
|
</table>
|
||||||
<% } %>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -29,7 +29,9 @@ define([
|
|||||||
},
|
},
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
'click .js-close': 'close'
|
'click .js-close': 'close',
|
||||||
|
'click .tags-edit-icon': 'switchToEditTags',
|
||||||
|
'click .tags-submit-btn': 'submitTags'
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
@@ -44,9 +46,10 @@ define([
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// for dir
|
||||||
update: function(part_data) {
|
update: function(part_data) {
|
||||||
var $container = this.$('.details-panel-text-info-container');
|
var $container = this.$('.details-panel-text-info-container');
|
||||||
$('.loading-icon', $container).hide();
|
$('.loading-tip', $container).hide();
|
||||||
if (part_data.error_msg) {
|
if (part_data.error_msg) {
|
||||||
$('.error', $container).html(part_data.error_msg).show();
|
$('.error', $container).html(part_data.error_msg).show();
|
||||||
} else {
|
} else {
|
||||||
@@ -57,6 +60,116 @@ define([
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
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: []
|
||||||
|
})
|
||||||
|
.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;
|
||||||
|
if (xhr.responseText) {
|
||||||
|
var parsed_resp = $.parseJSON(xhr.responseText);
|
||||||
|
error_msg = parsed_resp.error_msg || parsed_resp.detail;
|
||||||
|
} else {
|
||||||
|
error_msg = gettext("Failed. Please check the network.");
|
||||||
|
}
|
||||||
|
$error.html(error_msg).show();
|
||||||
|
},
|
||||||
|
complete: function() {
|
||||||
|
Common.enableButton($submit);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
setConMaxHeight: function() {
|
setConMaxHeight: function() {
|
||||||
this.$('.right-side-panel-con').css({
|
this.$('.right-side-panel-con').css({
|
||||||
'height': $(window).height() - // this.$el `position:fixed; top:0;`
|
'height': $(window).height() - // this.$el `position:fixed; top:0;`
|
||||||
|
@@ -282,8 +282,12 @@ define([
|
|||||||
},
|
},
|
||||||
|
|
||||||
viewDetails: function() {
|
viewDetails: function() {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
var file_icon_size = Common.isHiDPI() ? 48 : 24;
|
var file_icon_size = Common.isHiDPI() ? 48 : 24;
|
||||||
var data = {
|
var data = {
|
||||||
|
repo_id: this.dir.repo_id,
|
||||||
|
dir_path: this.dir.path,
|
||||||
icon_url: this.model.getIconUrl(file_icon_size),
|
icon_url: this.model.getIconUrl(file_icon_size),
|
||||||
big_icon_url: this.model.getIconUrl(192),
|
big_icon_url: this.model.getIconUrl(192),
|
||||||
dirent: this.model.attributes,
|
dirent: this.model.attributes,
|
||||||
@@ -304,6 +308,40 @@ define([
|
|||||||
var detailsView = this.dirView.direntDetailsView;
|
var detailsView = this.dirView.direntDetailsView;
|
||||||
detailsView.show(data);
|
detailsView.show(data);
|
||||||
|
|
||||||
|
if (this.model.get('perm') == 'rw') {
|
||||||
|
this.getTags = function() {
|
||||||
|
$.ajax({
|
||||||
|
url: Common.getUrl({
|
||||||
|
'name': 'tags',
|
||||||
|
'repo_id': this.dir.repo_id
|
||||||
|
}),
|
||||||
|
cache: false,
|
||||||
|
data: {
|
||||||
|
'path': Common.pathJoin([this.dir.path, this.model.get('obj_name')]),
|
||||||
|
'is_dir': this.model.get('is_dir') ? true : false
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(data) {
|
||||||
|
detailsView.updateTags(data);
|
||||||
|
},
|
||||||
|
error: function(xhr) {
|
||||||
|
var error_msg;
|
||||||
|
if (xhr.responseText) {
|
||||||
|
var parsed_resp = $.parseJSON(xhr.responseText);
|
||||||
|
error_msg = parsed_resp.error_msg || parsed_resp.detail;
|
||||||
|
} else {
|
||||||
|
error_msg = gettext("Failed. Please check the network.");
|
||||||
|
}
|
||||||
|
detailsView.updateTags({'error_msg': error_msg});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (this.model.get('is_file')) {
|
||||||
|
this.getTags();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// fetch other data for dir
|
// fetch other data for dir
|
||||||
if (this.model.get('is_dir')) {
|
if (this.model.get('is_dir')) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -322,6 +360,10 @@ define([
|
|||||||
'file_count': data.file_count,
|
'file_count': data.file_count,
|
||||||
'size': Common.fileSizeFormat(data.size, 1)
|
'size': Common.fileSizeFormat(data.size, 1)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (_this.model.get('perm') == 'rw') {
|
||||||
|
_this.getTags();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
error: function(xhr) {
|
error: function(xhr) {
|
||||||
var error_msg;
|
var error_msg;
|
||||||
|
@@ -564,8 +564,12 @@ define([
|
|||||||
},
|
},
|
||||||
|
|
||||||
viewDetails: function() {
|
viewDetails: function() {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
var file_icon_size = Common.isHiDPI() ? 48 : 24;
|
var file_icon_size = Common.isHiDPI() ? 48 : 24;
|
||||||
var data = {
|
var data = {
|
||||||
|
repo_id: this.dir.repo_id,
|
||||||
|
dir_path: this.dir.path,
|
||||||
icon_url: this.model.getIconUrl(file_icon_size),
|
icon_url: this.model.getIconUrl(file_icon_size),
|
||||||
big_icon_url: this.model.getIconUrl(192),
|
big_icon_url: this.model.getIconUrl(192),
|
||||||
dirent: this.model.attributes,
|
dirent: this.model.attributes,
|
||||||
@@ -586,6 +590,40 @@ define([
|
|||||||
var detailsView = this.dirView.direntDetailsView;
|
var detailsView = this.dirView.direntDetailsView;
|
||||||
detailsView.show(data);
|
detailsView.show(data);
|
||||||
|
|
||||||
|
if (this.model.get('perm') == 'rw') {
|
||||||
|
this.getTags = function() {
|
||||||
|
$.ajax({
|
||||||
|
url: Common.getUrl({
|
||||||
|
'name': 'tags',
|
||||||
|
'repo_id': this.dir.repo_id
|
||||||
|
}),
|
||||||
|
cache: false,
|
||||||
|
data: {
|
||||||
|
'path': Common.pathJoin([this.dir.path, this.model.get('obj_name')]),
|
||||||
|
'is_dir': this.model.get('is_dir') ? true : false
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(data) {
|
||||||
|
detailsView.updateTags(data);
|
||||||
|
},
|
||||||
|
error: function(xhr) {
|
||||||
|
var error_msg;
|
||||||
|
if (xhr.responseText) {
|
||||||
|
var parsed_resp = $.parseJSON(xhr.responseText);
|
||||||
|
error_msg = parsed_resp.error_msg || parsed_resp.detail;
|
||||||
|
} else {
|
||||||
|
error_msg = gettext("Failed. Please check the network.");
|
||||||
|
}
|
||||||
|
detailsView.updateTags({'error_msg': error_msg});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (this.model.get('is_file')) {
|
||||||
|
this.getTags();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// fetch other data for dir
|
// fetch other data for dir
|
||||||
if (this.model.get('is_dir')) {
|
if (this.model.get('is_dir')) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@@ -604,6 +642,10 @@ define([
|
|||||||
'file_count': data.file_count,
|
'file_count': data.file_count,
|
||||||
'size': Common.fileSizeFormat(data.size, 1)
|
'size': Common.fileSizeFormat(data.size, 1)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (_this.model.get('perm') == 'rw') {
|
||||||
|
_this.getTags();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
error: function(xhr) {
|
error: function(xhr) {
|
||||||
var error_msg;
|
var error_msg;
|
||||||
|
@@ -97,6 +97,7 @@ define([
|
|||||||
case 'get_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/';
|
case 'get_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/';
|
||||||
|
|
||||||
case 'dir-details': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dir/detail/';
|
case 'dir-details': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dir/detail/';
|
||||||
|
case 'tags': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/tags/';
|
||||||
|
|
||||||
// Repos
|
// Repos
|
||||||
case 'repos': return siteRoot + 'api2/repos/';
|
case 'repos': return siteRoot + 'api2/repos/';
|
||||||
|
Reference in New Issue
Block a user