Repository: ambari Updated Branches: refs/heads/trunk e2b0e2ae7 -> 9c7dc7785
AMBARI-5375 Views: Dynamic Views menu (query views from server). (ababiichuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9c7dc778 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9c7dc778 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9c7dc778 Branch: refs/heads/trunk Commit: 9c7dc7785e7a13f2c7bf47f535ad5689cdbf8af7 Parents: e2b0e2a Author: aBabiichuk <ababiic...@cybervisiontech.com> Authored: Mon Apr 7 19:01:54 2014 +0300 Committer: aBabiichuk <ababiic...@cybervisiontech.com> Committed: Mon Apr 7 19:01:54 2014 +0300 ---------------------------------------------------------------------- ambari-web/app/controllers.js | 2 +- .../controllers/global/cluster_controller.js | 36 ++++++++++++++++ ambari-web/app/controllers/main/views.js | 23 ---------- .../app/controllers/main/views_controller.js | 32 ++++++++++++++ ambari-web/app/templates/main/menu_item.hbs | 36 +++++++++------- ambari-web/app/utils/ajax.js | 8 ++++ ambari-web/app/views.js | 2 +- ambari-web/app/views/main/menu.js | 7 +++- ambari-web/app/views/main/views.js | 44 -------------------- ambari-web/app/views/main/views_view.js | 34 +++++++++++++++ 10 files changed, 140 insertions(+), 84 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/controllers.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js index 598279b..75348ae 100644 --- a/ambari-web/app/controllers.js +++ b/ambari-web/app/controllers.js @@ -117,7 +117,7 @@ require('controllers/main/mirroring/edit_dataset_controller'); require('controllers/main/mirroring/datasets_controller'); require('controllers/main/mirroring/jobs_controller'); require('controllers/main/mirroring/manage_clusters_controller'); -require('controllers/main/views'); +require('controllers/main/views_controller'); require('controllers/wizard/slave_component_groups_controller'); require('controllers/wizard/step0_controller'); require('controllers/wizard/step1_controller'); http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/controllers/global/cluster_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js index 2109248..7a1304f 100644 --- a/ambari-web/app/controllers/global/cluster_controller.js +++ b/ambari-web/app/controllers/global/cluster_controller.js @@ -24,6 +24,7 @@ App.ClusterController = Em.Controller.extend({ isLoaded:false, ambariProperties: null, ambariVersion: null, + ambariViews: [], clusterDataLoadedPercent: 'width:0', // 0 to 1 /** * Whether we need to update statuses automatically or not @@ -279,6 +280,7 @@ App.ClusterController = Em.Controller.extend({ loadClusterData:function () { var self = this; this.loadAmbariProperties(); + this.loadAmbariViews(); if (!this.get('clusterName')) { return; } @@ -382,6 +384,40 @@ App.ClusterController = Em.Controller.extend({ }, callback) }, + loadAmbariViews: function() { + App.ajax.send({ + name: 'views.info', + sender: this, + success: 'loadAmbariViewsSuccess' + }); + }, + + loadAmbariViewsSuccess: function(data) { + this.set('ambariViews',[]); + data.items.forEach(function(item){ + App.ajax.send({ + name: 'views.instances', + data: { + viewName: item.ViewInfo.view_name + }, + sender: this, + success: 'loadViewInstancesSuccess' + }); + }, this) + }, + + loadViewInstancesSuccess: function(data) { + data.instances.forEach(function(instance){ + var view = Em.Object.create({ + label: data.ViewInfo.label, + viewName: instance.ViewInstanceInfo.view_name, + instanceName: instance.ViewInstanceInfo.instance_name, + href: "/views/" + instance.ViewInstanceInfo.view_name + "/" + instance.ViewInstanceInfo.instance_name + }); + this.get('ambariViews').push(view); + }, this); + }, + loadAmbariProperties: function() { App.ajax.send({ name: 'ambari.service', http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/controllers/main/views.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/views.js b/ambari-web/app/controllers/main/views.js deleted file mode 100644 index ce10081..0000000 --- a/ambari-web/app/controllers/main/views.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var App = require('app'); - -App.MainViewsController = Em.Controller.extend({ - name:'mainViewsController' -}) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/controllers/main/views_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/views_controller.js b/ambari-web/app/controllers/main/views_controller.js new file mode 100644 index 0000000..242d989 --- /dev/null +++ b/ambari-web/app/controllers/main/views_controller.js @@ -0,0 +1,32 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var App = require('app'); + +App.MainViewsController = Em.Controller.extend({ + name:'mainViewsController', + + selectedView: null, + + setView: function(event) { + if(event.context){ + this.set('selectedView', event.context); + App.router.transitionTo('views'); + } + } +}) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/templates/main/menu_item.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/main/menu_item.hbs b/ambari-web/app/templates/main/menu_item.hbs index f185886..5031e76 100644 --- a/ambari-web/app/templates/main/menu_item.hbs +++ b/ambari-web/app/templates/main/menu_item.hbs @@ -15,17 +15,25 @@ * See the License for the specific language governing permissions and * limitations under the License. }} - -<a href="#/main/{{unbound view.content.routing}}"> - {{unbound view.content.label}} - {{#if view.alertsCount}} - <span class="label label-important alerts-count"> - {{view.alertsCount}} - </span> - {{/if}} - <!--{{#if view.hostDetailsOperationsCount}}--> - <!--<span class="label operations-count" {{action "showBackgroundOperationsPopup" target="App.router.mainHostDetailsController"}}>--> - <!--{{view.hostDetailsOperationsCount}}--> - <!--</span>--> - <!--{{/if}}--> -</a> +{{#if view.content.isView}} + <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{view.content.label}}<b class="caret pull-right"></b></a> + <ul class="dropdown-menu pull-right"> + {{#each v in view.content.views}} + <li><a href="#" class="align-right" {{action "setView" v target="App.router.mainViewsController"}}>{{v.label}}</a></li> + {{/each}} + </ul> +{{else}} + <a href="#/main/{{unbound view.content.routing}}"> + {{unbound view.content.label}} + {{#if view.alertsCount}} + <span class="label label-important alerts-count"> + {{view.alertsCount}} + </span> + {{/if}} + <!--{{#if view.hostDetailsOperationsCount}}--> + <!--<span class="label operations-count" {{action "showBackgroundOperationsPopup" target="App.router.mainHostDetailsController"}}>--> + <!--{{view.hostDetailsOperationsCount}}--> + <!--</span>--> + <!--{{/if}}--> + </a> +{{/if}} http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/utils/ajax.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js index 339a27c..4f25d93 100644 --- a/ambari-web/app/utils/ajax.js +++ b/ambari-web/app/utils/ajax.js @@ -1756,6 +1756,14 @@ var urls = { 'real': '/proxy?url=http://{historyServerHostName}:{ahsWebPort}/ws/v1/timeline/TEZ_VERTEX_ID/{tezDagVertexId}?fields=otherinfo', 'mock': '/data/jobs/tezDagVertex.json', 'apiPrefix': '' + }, + 'views.info': { + 'real': '/views', + 'mock':'' + }, + 'views.instances': { + 'real': '/views/{viewName}', + 'mock':'' } }; /** http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/views.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js index 2988e33..c08dd10 100644 --- a/ambari-web/app/views.js +++ b/ambari-web/app/views.js @@ -236,7 +236,7 @@ require('views/main/mirroring/datasets_view'); require('views/main/mirroring/jobs_view'); require('views/main/mirroring/manage_clusters_view'); -require('views/main/views'); +require('views/main/views_view'); require('views/installer'); require('views/wizard/controls_view'); http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/views/main/menu.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js index b59c2da..c2a4e21 100644 --- a/ambari-web/app/views/main/menu.js +++ b/ambari-web/app/views/main/menu.js @@ -25,6 +25,11 @@ var App = require('app'); App.MainMenuView = Em.CollectionView.extend({ tagName:'ul', classNames:['nav'], + + views: function() { + return App.router.get('clusterController.ambariViews'); + }.property('App.ClusterController.ambariViews'), + content:function(){ var result = [ { label:Em.I18n.t('menu.item.dashboard'), routing:'dashboard', active:'active'}, @@ -49,7 +54,7 @@ App.MainMenuView = Em.CollectionView.extend({ } if (App.supports.views) { - result.push({ label:Em.I18n.t('menu.item.views'), routing:'views'}); + result.push({ label:Em.I18n.t('menu.item.views'), routing:'views', isView:true, views: this.get('views')}); } return result; }.property(), http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/views/main/views.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/views.js b/ambari-web/app/views/main/views.js deleted file mode 100644 index e009486..0000000 --- a/ambari-web/app/views/main/views.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var App = require('app'); - -App.MainViewsView = Em.View.extend({ - - tagName: "iframe", - - classNames: ["views_sizes"], - - attributeBindings: ['src','seamless'], - - seamless: "seamless", - - src: function() { - return window.location.origin + this.get('views')[1].link; - }.property("views"), - - views: [{ - name: "filebrowser", - link: "/views/FILE_BROWSER/FILEBROWSER_1/#/?path=/" - }, - { - name: "pig", - link: "/views/PIG/PIG_1/" - }] - -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/9c7dc778/ambari-web/app/views/main/views_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/views_view.js b/ambari-web/app/views/main/views_view.js new file mode 100644 index 0000000..dac54c0 --- /dev/null +++ b/ambari-web/app/views/main/views_view.js @@ -0,0 +1,34 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var App = require('app'); + +App.MainViewsView = Em.View.extend({ + + tagName: "iframe", + + classNames: ["views_sizes"], + + attributeBindings: ['src','seamless'], + + seamless: "seamless", + + src: function() { + return window.location.origin + this.get('controller.selectedView.href'); + }.property('controller.selectedView') +}); \ No newline at end of file