mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-22 20:08:19 +00:00
[repo] auto open cur_dir in jstree for mv/cp
This commit is contained in:
@@ -1187,8 +1187,80 @@ $('.file-cp, .file-mv, .dir-cp, .dir-mv', context).click(function () {
|
|||||||
|
|
||||||
form.data('op_obj', dirent);
|
form.data('op_obj', dirent);
|
||||||
|
|
||||||
var file_tree = new FileTree();
|
$.ajax({
|
||||||
file_tree.renderDirTree($('#current-repo-dirs').data('site_root', '{{SITE_ROOT}}'), form, current_repo);
|
url: '{% url 'get_dirents' repo.id %}?path=' + e(cur_path) + '&dir_only=true&all_dir=true',
|
||||||
|
cache: false,
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(data) {
|
||||||
|
var json_data = [];
|
||||||
|
var repo_data = {
|
||||||
|
'data': '{{ repo.props.name }}',
|
||||||
|
'attr': {'repo_id': '{{ repo.props.id }}'},
|
||||||
|
'state': 'open'
|
||||||
|
};
|
||||||
|
|
||||||
|
var path_eles = cur_path.split('/');
|
||||||
|
path_eles.pop();
|
||||||
|
/* e.g.
|
||||||
|
* path: '/xx/'
|
||||||
|
* path_eles: ['', 'xx']
|
||||||
|
* data: [["xxx", "xx", "test1022"], ["lkjj", "kjhkhi"]]
|
||||||
|
*/
|
||||||
|
var len = data.length;
|
||||||
|
var children = [];
|
||||||
|
if (len == 1) {
|
||||||
|
if (data[0].length > 0) {
|
||||||
|
children[0] = [];
|
||||||
|
for (var i = 0, len_0 = data[0].length; i < len_0; i++) {
|
||||||
|
children[0].push({
|
||||||
|
'data': data[0][i],
|
||||||
|
'attr': {'repo_id': '{{ repo.props.id }}'},
|
||||||
|
'state': 'closed'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$.extend(repo_data, {'children': children[0]});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (var i = len - 1; i > -1; i-- ) {
|
||||||
|
children[i] = [];
|
||||||
|
if (i == len - 1) {
|
||||||
|
for (var j = 0, j_len = data[i].length; j < j_len; j++) {
|
||||||
|
children[i].push({
|
||||||
|
'data': data[i][j],
|
||||||
|
'attr': {'repo_id': '{{ repo.props.id }}'},
|
||||||
|
'state': 'closed'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (var j = 0, j_len = data[i].length; j < j_len; j++) {
|
||||||
|
if (data[i][j] == path_eles[i+1]) {
|
||||||
|
children[i].push({
|
||||||
|
'data': data[i][j],
|
||||||
|
'attr': {'repo_id': '{{ repo.props.id }}'},
|
||||||
|
'state': 'open',
|
||||||
|
'children': children[i+1]
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
children[i].push({
|
||||||
|
'data': data[i][j],
|
||||||
|
'attr': {'repo_id': '{{ repo.props.id }}'},
|
||||||
|
'state': 'closed'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$.extend(repo_data, {'children': children[0]});
|
||||||
|
}
|
||||||
|
json_data.push(repo_data);
|
||||||
|
var file_tree = new FileTree();
|
||||||
|
file_tree.renderDirTree($('#current-repo-dirs').data('site_root', '{{SITE_ROOT}}'), form, json_data);
|
||||||
|
},
|
||||||
|
error: function() {
|
||||||
|
var file_tree = new FileTree();
|
||||||
|
file_tree.renderDirTree($('#current-repo-dirs').data('site_root', '{{SITE_ROOT}}'), form, current_repo);
|
||||||
|
}
|
||||||
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -106,7 +106,7 @@ urlpatterns = patterns('',
|
|||||||
url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"),
|
url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"),
|
||||||
|
|
||||||
### Ajax ###
|
### Ajax ###
|
||||||
(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/$', get_dirents),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/$', get_dirents, name="get_dirents"),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/delete/$', delete_dirents, name='delete_dirents'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/delete/$', delete_dirents, name='delete_dirents'),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/move/$', mv_dirents, name='mv_dirents'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/move/$', mv_dirents, name='mv_dirents'),
|
||||||
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/copy/$', cp_dirents, name='cp_dirents'),
|
url(r'^ajax/repo/(?P<repo_id>[-0-9a-f]{36})/dirents/copy/$', cp_dirents, name='cp_dirents'),
|
||||||
|
@@ -68,17 +68,35 @@ def get_dirents(request, repo_id):
|
|||||||
|
|
||||||
path = request.GET.get('path', '')
|
path = request.GET.get('path', '')
|
||||||
dir_only = request.GET.get('dir_only', False)
|
dir_only = request.GET.get('dir_only', False)
|
||||||
|
all_dir = request.GET.get('all_dir', False)
|
||||||
if not path:
|
if not path:
|
||||||
err_msg = _(u"No path.")
|
err_msg = _(u"No path.")
|
||||||
return HttpResponse(json.dumps({"err_msg": err_msg}), status=400,
|
return HttpResponse(json.dumps({"err_msg": err_msg}), status=400,
|
||||||
content_type=content_type)
|
content_type=content_type)
|
||||||
|
|
||||||
|
# get dirents for every path element
|
||||||
|
if all_dir:
|
||||||
|
all_dirents = []
|
||||||
|
path_eles = path.split('/')[:-1]
|
||||||
|
for i, x in enumerate(path_eles):
|
||||||
|
ele_path = '/'.join(path_eles[:i+1]) + '/'
|
||||||
|
try:
|
||||||
|
ele_path_dirents = seafile_api.list_dir_by_path(repo_id, ele_path.encode('utf-8'))
|
||||||
|
except SearpcError, e:
|
||||||
|
ele_path_dirents = []
|
||||||
|
ds = []
|
||||||
|
for d in ele_path_dirents:
|
||||||
|
if stat.S_ISDIR(d.mode):
|
||||||
|
ds.append(d.obj_name)
|
||||||
|
all_dirents.append(ds)
|
||||||
|
return HttpResponse(json.dumps(all_dirents), content_type=content_type)
|
||||||
|
|
||||||
|
# get dirents in path
|
||||||
try:
|
try:
|
||||||
dirents = seafile_api.list_dir_by_path(repo_id, path.encode('utf-8'))
|
dirents = seafile_api.list_dir_by_path(repo_id, path.encode('utf-8'))
|
||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
return HttpResponse(json.dumps({"err_msg": e.msg}), status=500,
|
return HttpResponse(json.dumps({"err_msg": e.msg}), status=500,
|
||||||
content_type=content_type)
|
content_type=content_type)
|
||||||
|
|
||||||
dirent_list = []
|
dirent_list = []
|
||||||
for dirent in dirents:
|
for dirent in dirents:
|
||||||
if stat.S_ISDIR(dirent.mode):
|
if stat.S_ISDIR(dirent.mode):
|
||||||
|
Reference in New Issue
Block a user