From 7a982872e7310ffff979a2842ada88db1f832680 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Mon, 20 Jul 2015 14:42:10 +0200
Subject: [PATCH] Main view does not commands detail and tab views to render.
 Fixes JS tests.

For a predictive behaviour we need to determine who is allowed to call render
methods on the views. Either, the main view is solely allowed to call render
and views do not do anything about output until then. Or, the main view relies
on the concrete views to be ready when things are about to be shown. The latter
approach has the advantage that concrete views know when they have to update
themselves (e.g. new data arrives or information change), but the main view
has now idea of the inner workings.
---
 apps/files/js/detailfileinfoview.js | 9 +++++++++
 apps/files/js/detailsview.js        | 7 ++-----
 apps/files/js/detailtabview.js      | 9 +++++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/apps/files/js/detailfileinfoview.js b/apps/files/js/detailfileinfoview.js
index 9585f57f1e..9a88b5e2d8 100644
--- a/apps/files/js/detailfileinfoview.js
+++ b/apps/files/js/detailfileinfoview.js
@@ -44,6 +44,15 @@
 			this.$el = $('<div class="detailFileInfoView"></div>');
 		},
 
+		/**
+		 * returns the jQuery object for HTML output
+		 *
+		 * @returns {jQuery}
+		 */
+		get$: function() {
+			return this.$el;
+		},
+
 		/**
 		 * Destroy / uninitialize this instance.
 		 */
diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js
index 18cefef45d..d4495cd8da 100644
--- a/apps/files/js/detailsview.js
+++ b/apps/files/js/detailsview.js
@@ -136,16 +136,14 @@
 
 			// render details
 			_.each(this._detailFileInfoViews, function(detailView) {
-				detailView.render();
-				$detailsContainer.append(detailView.$el);
+				$detailsContainer.append(detailView.get$());
 			});
 
 			if (this._tabViews.length > 0) {
 				// render tabs
 				_.each(this._tabViews, function(tabView) {
-					tabView.render();
 					// hidden by default
-					$tabsContainer.append(tabView.$el);
+					$tabsContainer.append(tabView.get$());
 
 					$tabHeadsContainer.append(self._templateTabHeader({
 						tabId: tabView.getId(),
@@ -171,7 +169,6 @@
 		setFileInfo: function(fileInfo) {
 			this._fileInfo = fileInfo;
 
-			// FIXME: this will render panels twice
 			this.render();
 
 			// notify all panels
diff --git a/apps/files/js/detailtabview.js b/apps/files/js/detailtabview.js
index 767ece2297..7e0f9eff16 100644
--- a/apps/files/js/detailtabview.js
+++ b/apps/files/js/detailtabview.js
@@ -90,6 +90,15 @@
 			return 'Tab ' + this._id;
 		},
 
+		/**
+		 * returns the jQuery object for HTML output
+		 *
+		 * @returns {jQuery}
+		 */
+		get$: function() {
+			return this.$el;
+		},
+
 		/**
 		 * Renders this details view
 		 *
-- 
GitLab