From 8909b574facf29ca0a57ab5d75d9904c18cc6338 Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Fri, 4 Apr 2014 16:38:27 +0200
Subject: [PATCH] Make sure there are always enough elements visible on the
 page

---
 apps/files/js/filelist.js           | 10 ++++++++++
 apps/files/tests/js/filelistSpec.js |  8 ++++++++
 2 files changed, 18 insertions(+)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 3bf5b2d967..0847edd02b 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -570,6 +570,7 @@ window.FileList = {
 			this.fileSummary.add(fileData, true);
 			this.updateEmptyContent();
 		}
+
 		return $tr;
 	},
 
@@ -823,6 +824,15 @@ window.FileList = {
 			FileList.updateEmptyContent();
 			this.fileSummary.remove({type: fileEl.attr('data-type'), size: fileEl.attr('data-size')}, true);
 		}
+
+		var lastIndex = this.$fileList.children().length;
+		// if there are less elements visible than one page
+		// but there are still pending elements in the array,
+		// then directly append the next page
+		if (lastIndex < this.files.length && lastIndex < this.pageSize) {
+			this._nextPage(true);
+		}
+
 		return fileEl;
 	},
 	/**
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 7316cb7531..23261759d0 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -701,6 +701,14 @@ describe('FileList tests', function() {
 			FileList._nextPage(true);
 			expect($('#fileList tr').length).toEqual(81);
 		});
+		it('automatically renders next page when there are not enough elements visible', function() {
+			// delete the 15 first elements
+			for (var i = 0; i < 15; i++) {
+				FileList.remove(FileList.files[0].name);
+			}
+			// still makes sure that there are 20 elements visible, if any
+			expect($('#fileList tr').length).toEqual(25);
+		});
 	});
 	describe('file previews', function() {
 		var previewLoadStub;
-- 
GitLab