Page: destroy detail table and detail form when page is destroyed

243657

Change-Id: I53ab1e6ec4f28495592587bd1d4b5b0e952f3ee7
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
index d6d7ab2..25b8f22 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/Page.js
@@ -77,6 +77,19 @@
   this._internalInitDetailForm();
 };
 
+/**
+ * @override TreeNode.js
+ */
+scout.Page.prototype._destroy = function() {
+  scout.Page.parent.prototype._destroy.call(this);
+  if (this.detailTable) {
+    this.detailTable.destroy();
+  }
+  if (this.detailForm) {
+    this.detailForm.destroy();
+  }
+};
+
 scout.Page.prototype._internalInitTable = function() {
   var table = this.detailTable;
   if (table) {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
index 007dfe7..5317a37 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithNodes.js
@@ -39,9 +39,7 @@
 };
 
 scout.PageWithNodes.prototype._onDetailTableRowAction = function(event) {
-  var clickedRow = event.source.rowsMap[event.row.id];
-  var nodeToSelect = clickedRow.node;
-  this.getOutline().selectNode(nodeToSelect);
+  this.getOutline().mediator.onTableRowAction(event, this);
 };
 
 scout.PageWithNodes.prototype._rebuildDetailTable = function(childPages) {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
index b7fe6bd..5a89b2a 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/desktop/outline/pages/PageWithTable.js
@@ -178,7 +178,12 @@
   this.detailTable.setTableStatus(scout.Status.error({
     message: this.session.text('ErrorWhileLoadingData')
   }));
-  $.log.error('Failed to load tableData. error=', error);
+
+  var handler = scout.create('ErrorHandler', {
+    displayError: false
+  });
+  handler.handle(error);
+  handler.handle('Failed to load tableData, see previous error for details');
 };
 
 scout.PageWithTable.prototype._onLoadTableDataAlways = function() {
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
index 3bd07d0..b3e976b 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/Route.js
@@ -36,5 +36,4 @@
  * to perform clean-up operations.
  */
 scout.Route.prototype.deactivate = function() {
-
 };
diff --git a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
index ace9953..ff79378 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
+++ b/org.eclipse.scout.rt.ui.html/src/main/js/scout/router/router.js
@@ -37,16 +37,7 @@
   },
 
   activate: function(location) {
-    if (!location) {
-      var regexp = new RegExp('[^/]*$'); // match everything after last slash
-      var matches = regexp.exec(document.location.href);
-      location = matches[0];
-    }
-
-    // no route is set in the URL
-    if (scout.strings.empty(location) || '/' === location) {
-      location = this.defaultLocation;
-    }
+    location = location || (window.location.hash || '') || this.defaultLocation;
 
     var i, route = null;
     for (i = 0; i < this.routes.length; i++) {
@@ -100,6 +91,6 @@
 };
 
 window.addEventListener('popstate', function(event) {
-  scout.router.activate(null);
+  scout.router.activate();
   return false;
 });