diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index 86c5b39010..c8c5d6adf4 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -276,11 +276,8 @@ def list_lib_dir(request, repo_id): return HttpResponse(json.dumps({'error': err_msg}), status=500, content_type=content_type) - offset = int(request.GET.get('start', 0)) - limit = 100 dir_list = [] file_list = [] - dirent_more = False try: dir_id = seafile_api.get_dir_id_by_path(repo.id, path) @@ -295,7 +292,8 @@ def list_lib_dir(request, repo_id): return HttpResponse(json.dumps({'error': err_msg}), status=404, content_type=content_type) - dirs = seafserv_threaded_rpc.list_dir_with_perm(repo_id, path, dir_id, username, offset, limit) + dirs = seafserv_threaded_rpc.list_dir_with_perm(repo_id, path, dir_id, + username, -1, -1) starred_files = get_dir_starred_files(username, repo_id, path) for dirent in dirs: @@ -319,11 +317,6 @@ def list_lib_dir(request, repo_id): file_list.append(dirent) - more_start = None - if limit == len(dirs): - dirent_more = True - more_start = offset + 100 - if is_org_context(request): repo_owner = seafile_api.get_org_repo_owner(repo.id) else: @@ -335,9 +328,6 @@ def list_lib_dir(request, repo_id): result["user_perm"] = user_perm result["encrypted"] = repo.encrypted - result["dirent_more"] = dirent_more - result["more_start"] = more_start - dirent_list = [] for d in dir_list: d_ = {} diff --git a/static/scripts/app/views/dir.js b/static/scripts/app/views/dir.js index ac0a688dc8..d5a6714bc8 100644 --- a/static/scripts/app/views/dir.js +++ b/static/scripts/app/views/dir.js @@ -182,7 +182,6 @@ define([ }, /***** private functions *****/ - addOne: function(dirent) { var view; if (this.view_mode == 'list') { @@ -194,13 +193,28 @@ define([ } }, + render_dirents_slice: function(start, limit) { + var dir = this.dir; + _.each(dir.slice(start, start + limit), this.addOne, this); + if (dir.length > start + limit) { + dir.dirent_more = true; + dir.last_start = start + limit; + } else { + dir.dirent_more = false; + } + }, + reset: function() { this.renderPath(); this.renderDirOpBar(); if (this.view_mode == 'list') { this.renderDirentsHd(); } - this.dir.each(this.addOne, this); + + this.dir.last_start = 0; + this.dir.limit = 100; + this.render_dirents_slice(this.dir.last_start, this.dir.limit); + this.fileUploadView.setFileInput(); this.getImageThumbnail(); }, @@ -325,12 +339,8 @@ define([ 'p': dir.path, 'thumbnail_size': thumbnail_size }, - success: function(collection, response, opts) { - dir.last_start = 0; // for 'more' - if (response.dirent_list.length == 0 || // the dir is empty - !response.dirent_more ) { // no 'more' - loading_tip.hide(); - } + success: function() { + loading_tip.hide(); }, error: function(collection, response, opts) { loading_tip.hide(); @@ -641,7 +651,7 @@ define([ }; dirents.sort(); this.$dirent_list_body.empty(); - dirents.each(this.addOne, this); + this.render_dirents_slice(0, this.dir.limit); el.toggleClass('icon-caret-up icon-caret-down').show(); dirents.comparator = null; }, @@ -667,7 +677,7 @@ define([ dirents.sort(); this.$dirent_list_body.empty(); - dirents.each(this.addOne, this); + this.render_dirents_slice(0, this.dir.limit); el.toggleClass('icon-caret-up icon-caret-down').show(); dirents.comparator = null; }, @@ -1057,37 +1067,11 @@ define([ onWindowScroll: function () { // 'more' - var dir = this.dir, - start = dir.more_start; - if (dir.dirent_more && - $(window).scrollTop() + $(window).height() > $(document).height() - $('#footer').outerHeight(true) && - start != dir.last_start) { - var loading_tip = this.$('.loading-tip'), - _this = this; - dir.last_start = start; - var thumbnail_size = app.pageOptions.thumbnail_default_size; - if (this.view_mode == 'grid') { - thumbnail_size = app.pageOptions.thumbnail_size_for_grid; - } - dir.fetch({ - cache: false, - remove: false, - data: { - 'p': dir.path, - 'thumbnail_size': thumbnail_size, - 'start': dir.more_start - }, - success: function (collection, response, opts) { - if (!response.dirent_more ) { // no 'more' - loading_tip.hide(); - } - _this.getImageThumbnail(); - }, - error: function(xhr, textStatus, errorThrown) { - loading_tip.hide(); - Common.ajaxErrorHandler(xhr, textStatus, errorThrown); - } - }); + if (this.dir.dirent_more && + $(window).scrollTop() + $(window).height() > $(document).height() - $('#footer').outerHeight(true)) { + + this.render_dirents_slice(this.dir.last_start, this.dir.limit); + this.getImageThumbnail(); } // fixed 'dir-op-bar' diff --git a/tests/seahub/views/test_list_lib_dir.py b/tests/seahub/views/test_list_lib_dir.py index be46797bd1..e8ba1aaa6e 100644 --- a/tests/seahub/views/test_list_lib_dir.py +++ b/tests/seahub/views/test_list_lib_dir.py @@ -19,6 +19,5 @@ class ListLibDirTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 8 assert self.folder_name == json_resp['dirent_list'][0]['obj_name'] assert self.repo.name == json_resp['repo_name']