From 72421249c5103d3482b87aa7ee00bffd1a66f4ac Mon Sep 17 00:00:00 2001 From: llj Date: Tue, 31 Mar 2015 17:42:18 +0800 Subject: [PATCH] [sub-lib] added 'createRepo' --- media/scripts/app/views/myhome-sub-repos.js | 77 +++++++++++++++++++-- media/scripts/common.js | 2 + seahub/templates/myhome.html | 14 +--- seahub/views/ajax.py | 1 + 4 files changed, 77 insertions(+), 17 deletions(-) diff --git a/media/scripts/app/views/myhome-sub-repos.js b/media/scripts/app/views/myhome-sub-repos.js index 2962963d93..8ebb5bf008 100644 --- a/media/scripts/app/views/myhome-sub-repos.js +++ b/media/scripts/app/views/myhome-sub-repos.js @@ -3,17 +3,18 @@ define([ 'underscore', 'backbone', 'common', + 'file-tree', 'app/collections/repos', 'app/views/sub-lib', 'app/views/add-repo', -], function($, _, Backbone, Common, RepoCollection, RepoView, AddRepoView) { +], function($, _, Backbone, Common, FileTree, RepoCollection, RepoView, AddRepoView) { 'use strict'; var ReposView = Backbone.View.extend({ el: $('#repo-tabs'), events: { - 'click #sub-lib-create': 'createRepo', // TODO + 'click #sub-lib-create': 'createRepo', }, initialize: function(options) { @@ -73,9 +74,75 @@ define([ }, createRepo: function() { - var addRepoView = new AddRepoView(this.repos); - addRepoView.render(); - }, + var _this = this; + + var sublib_create_form = $('#sublib-create-form'); + + var dir_tree_cont = $('.dir-tree-cont', sublib_create_form); + sublib_create_form.modal(); + + $.ajax({ + url: Common.getUrl({'name': 'get_my_unenc_repos'}), + cache: false, + dataType: 'json', + success: function(data) { + var repos = FileTree.formatRepoData(data); + if (repos.length > 0) { + FileTree.renderDirTree(dir_tree_cont, sublib_create_form, repos); + } else { + dir_tree_cont.html('

' + gettext("You don't have any library at present.") + '

'); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + var error; + if (jqXHR.responseText) { + error = $.parseJSON(jqXHR.responseText).error; + } else { + error = gettext("Failed. Please check the network."); + } + dir_tree_cont.html('

' + error + '

'); + } + }); + + $('.submit', sublib_create_form).click(function() { + var ori_repo_id = $('[name="dst_repo"]', sublib_create_form).val(); + var path = $('[name="dst_path"]', sublib_create_form).val(); + + if (!path || path == '/') { + $('.error', sublib_create_form).html(gettext("Please choose a directory")).removeClass('hide'); + return false; + } + + // path ends with '/', rm it here + path = path.substr(0, path.length - 1); + $.ajax({ + url: Common.getUrl({'name':'sub_repo', 'repo_id':ori_repo_id}) + '?p=' + encodeURIComponent(path), + dataType: 'json', + success: function(data) { + $.modal.close(); + _this.repos.add({ + 'id': data["sub_repo_id"], + 'name': data["name"], + 'origin_repo_id': ori_repo_id, + 'origin_path': path, + 'abbrev_origin_path': '', // TODO + 'mtime': new Date().getTime() / 1000, + 'mtime_relative': gettext("Just now") + }, {prepend: true}); + }, + error: function(xhr, textStatus, errorThrown) { + var err; + if (xhr.responseText) { + err = jQuery.parseJSON(xhr.responseText).error; + } else { + err = gettext("Failed. Please check the network."); + } + $('.error', sublib_create_form).html(err).removeClass('hide'); + } + }); + return false; + }); + } }); diff --git a/media/scripts/common.js b/media/scripts/common.js index 24b5f2f064..4c24e611a0 100644 --- a/media/scripts/common.js +++ b/media/scripts/common.js @@ -76,9 +76,11 @@ define([ case 'get_file_op_url': return siteRoot + 'ajax/repo/' + options.repo_id + '/file_op_url/'; case 'get_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/'; case 'repo_del': return siteRoot + 'ajax/repo/' + options.repo_id + '/remove/'; + case 'sub_repo': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/sub_repo/'; case 'thumbnail_create': return siteRoot + 'thumbnail/' + options.repo_id + '/create/'; + case 'get_my_unenc_repos': return siteRoot + 'ajax/my-unenc-repos/'; case 'unenc_rw_repos': return siteRoot + 'ajax/unenc-rw-repos/'; case 'get_cp_progress': return siteRoot + 'ajax/cp_progress/'; case 'cancel_cp': return siteRoot + 'ajax/cancel_cp/'; diff --git a/seahub/templates/myhome.html b/seahub/templates/myhome.html index 5f906eac2a..415bcf56b0 100644 --- a/seahub/templates/myhome.html +++ b/seahub/templates/myhome.html @@ -84,7 +84,7 @@
- +
@@ -96,11 +96,6 @@
-
-

- - -

{% trans "You have not created any libraries" %}

{% trans "You can create a library to organize your files. For example, you can create one for each of your projects. Each library can be synchronized and shared separately." %}

@@ -108,7 +103,7 @@
- +
@@ -168,11 +163,6 @@
-{% url 'share_repo' as repo_share_url %} -{% with post_url=repo_share_url %} -{% include "snippets/repo_share_form.html" %} -{% endwith %} - {% include "snippets/repo_create_form.html" %} {% if need_guide %} diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index bee03f3d56..220e07a607 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -1293,6 +1293,7 @@ def sub_repo(request, repo_id): name, name, username) result['sub_repo_id'] = sub_repo_id + result['name'] = name except SearpcError, e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type)