Repository: ambari Updated Branches: refs/heads/trunk d8ebf2d67 -> e8b355412
AMBARI-6785. Admin View: various bug fixes and UI improvements. (yusaku) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e8b35541 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e8b35541 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e8b35541 Branch: refs/heads/trunk Commit: e8b3554124adcee975309f9b39487ec1803f11c7 Parents: d8ebf2d Author: Yusaku Sako <yus...@hortonworks.com> Authored: Thu Aug 7 15:57:51 2014 -0700 Committer: Yusaku Sako <yus...@hortonworks.com> Committed: Thu Aug 7 16:22:21 2014 -0700 ---------------------------------------------------------------------- .../main/resources/ui/admin-web/app/index.html | 13 ++--- .../app/scripts/controllers/LDAPModalCtrl.js | 57 -------------------- .../app/scripts/controllers/NavbarCtrl.js | 20 ++++++- .../ambariViews/CreateViewInstanceCtrl.js | 50 ++++++++++------- .../controllers/groups/GroupsListCtrl.js | 12 ----- .../app/scripts/controllers/mainCtrl.js | 20 ++++++- .../scripts/controllers/users/UsersListCtrl.js | 12 ----- .../scripts/controllers/users/UsersShowCtrl.js | 19 +++++-- .../ui/admin-web/app/scripts/services/Auth.js | 30 +++++++++++ .../ui/admin-web/app/scripts/services/User.js | 20 ++++--- .../ui/admin-web/app/scripts/services/View.js | 21 +++++++- .../ui/admin-web/app/scripts/services/ldap.js | 30 ++++++----- .../resources/ui/admin-web/app/styles/main.css | 34 ++++++++++++ .../admin-web/app/views/ambariViews/create.html | 2 +- .../admin-web/app/views/ambariViews/edit.html | 2 +- .../admin-web/app/views/ambariViews/list.html | 7 ++- .../ui/admin-web/app/views/groups/edit.html | 2 +- .../ui/admin-web/app/views/groups/list.html | 1 - .../ui/admin-web/app/views/ldapModal.html | 47 ---------------- .../ui/admin-web/app/views/leftNavbar.html | 12 ++++- .../admin-web/app/views/modals/AboutModal.html | 42 +++++++++++++++ .../ui/admin-web/app/views/users/list.html | 1 - .../ui/admin-web/app/views/users/show.html | 2 +- .../src/main/resources/ui/admin-web/gulpfile.js | 1 + .../main/resources/ui/admin-web/package.json | 3 +- 25 files changed, 267 insertions(+), 193 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/index.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/index.html b/ambari-admin/src/main/resources/ui/admin-web/app/index.html index f201d06..9aef85b 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/index.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/index.html @@ -40,16 +40,13 @@ <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]--> - <div id="top-nav"> + <div id="top-nav" ng-controller="MainCtrl"> <header class="navbar navbar-static-top navbar-inverse"> <div class="navbar-inner"> <div class="container"> <a href="#/" class="logo"><img src="/img/logo-white.png" alt="Apache Ambari" title="Apache Ambari"></a> <a href="#/" class="brand" title="Apache Ambari">Ambari</a> - <a href="" class="brand cluster-name">Ambari Admin Console</a> - <!-- <div class="navbar-header"> - <a href="#/" class="navbar-brand">Ambari Admin Console</a> - </div> --> + <a href="" class="brand cluster-name">Admin Console</a> <ul class="nav navbar-nav navbar-right"> <li> <div class="btn-group" dropdown is-open="status.isopen"> @@ -57,9 +54,9 @@ Admin <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> - <li><a href="#">About</a></li> + <li><a href ng-click="about()">About</a></li> <li class="divider"></li> - <li><a href="#">Sign Out</a></li> + <li><a href ng-click="signOut()">Sign Out</a></li> </ul> </div> </li> @@ -114,7 +111,6 @@ <script src="scripts/routes.js"></script> <script src="scripts/controllers/mainCtrl.js"></script> <script src="scripts/controllers/NavbarCtrl.js"></script> - <script src="scripts/controllers/LDAPModalCtrl.js"></script> <script src="scripts/controllers/users/UsersCreateCtrl.js"></script> <script src="scripts/controllers/users/UsersListCtrl.js"></script> <script src="scripts/controllers/users/UsersShowCtrl.js"></script> @@ -136,6 +132,7 @@ <script src="scripts/services/PermissionLoader.js"></script> <script src="scripts/services/PermissionsSaver.js"></script> <script src="scripts/services/ConfirmationModal.js"></script> + <script src="scripts/services/Auth.js"></script> <!-- endbuild --> </body> </html> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/LDAPModalCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/LDAPModalCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/LDAPModalCtrl.js deleted file mode 100644 index 3698e16..0000000 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/LDAPModalCtrl.js +++ /dev/null @@ -1,57 +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. - */ -'use strict'; - -angular.module('ambariAdminConsole') -.controller('LDAPModalCtrl',['$scope', 'LDAP', 'resourceType', '$modalInstance', 'uiAlert', function($scope, LDAP, resourceType, $modalInstance, uiAlert) { - $scope.resourceType = resourceType; - $scope.isConfigured = false; - $scope.isDataLoaded = false; - - $scope.items = [ - ]; - - - LDAP.get(resourceType).then(function(data) { - $scope.isConfigured = data['LDAP']['configured']; - $scope.items = data['LDAP'][resourceType]; - $scope.isDataLoaded = true; - }).catch(function(data) { - uiAlert.danger(data.data.status, data.data.message); - $modalInstance.dismiss(); - }); - - $scope.sync = function() { - if($scope.items){ - var itemsToSync = $scope.items.filter(function(item) {return item.selected}).map(function(item) { - return item.name - }); - - LDAP.sync(resourceType, itemsToSync).then(function() { - $modalInstance.close(); - }).catch(function(data) { - uiAlert.danger(data.data.status, data.data.message); - $modalInstance.close(); - }); - } - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; -}]); http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/NavbarCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/NavbarCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/NavbarCtrl.js index 0e0c5c8..1255f3b 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/NavbarCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/NavbarCtrl.js @@ -18,7 +18,7 @@ 'use strict'; angular.module('ambariAdminConsole') -.controller('NavbarCtrl',['$scope', 'Cluster', '$location', 'uiAlert', 'ROUTES', function($scope, Cluster, $location, uiAlert, ROUTES) { +.controller('NavbarCtrl',['$scope', 'Cluster', '$location', 'uiAlert', 'ROUTES', 'LDAP', 'ConfirmationModal', function($scope, Cluster, $location, uiAlert, ROUTES, LDAP, ConfirmationModal) { $scope.cluster = null; Cluster.getStatus().then(function(cluster) { $scope.cluster = cluster; @@ -26,7 +26,6 @@ angular.module('ambariAdminConsole') uiAlert.danger(data.status, data.message); }); - // console.log($state); $scope.isActive = function(path) { var route = ROUTES; angular.forEach(path.split('.'), function(routeObj) { @@ -35,4 +34,21 @@ angular.module('ambariAdminConsole') var r = new RegExp( route.url.replace(/(:\w+)/, '\\w+')); return r.test($location.path()); }; + + $scope.isLDAPConfigured = false; + $scope.ldapData = {}; + LDAP.get().then(function(data) { + $scope.ldapData = data; + $scope.isLDAPConfigured = data['LDAP']['configured']; + }); + + $scope.syncLDAP = function() { + ConfirmationModal.show('Sync LDAP', 'Are you sure you want to sync LDAP?').then(function() { + LDAP.sync($scope.ldapData.groups, $scope.ldapData.users).then(function() { + uiAlert.success('LDAP synced successful'); + }).catch(function(data) { + uiAlert.danger(data.data.status, data.data.message); + }); + }); + }; }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js index 44e2807..cb8dda0 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/ambariViews/CreateViewInstanceCtrl.js @@ -21,26 +21,45 @@ angular.module('ambariAdminConsole') .controller('CreateViewInstanceCtrl',['$scope', 'View', 'uiAlert', '$routeParams', '$location', function($scope, View, uiAlert, $routeParams, $location) { $scope.form = {}; - View.getMeta($routeParams.viewId, $routeParams.version).then(function(data) { - var viewVersion = data.data; - $scope.view = viewVersion; + function loadMeta(){ + View.getMeta($routeParams.viewId, $scope.version).then(function(data) { + var viewVersion = data.data; + $scope.view = viewVersion; - $scope.instance = { - view_name: viewVersion.ViewVersionInfo.view_name, - version: viewVersion.ViewVersionInfo.version, - instance_name: '', - label: '', - visible: true, - icon_path: '', - icon64_path: '', - properties: viewVersion.ViewVersionInfo.parameters - }; + $scope.instance = { + view_name: viewVersion.ViewVersionInfo.view_name, + version: viewVersion.ViewVersionInfo.version, + instance_name: '', + label: '', + visible: true, + icon_path: '', + icon64_path: '', + properties: viewVersion.ViewVersionInfo.parameters + }; + }); + } + + + $scope.$watch(function(scope) { + return scope.version; + }, function(version) { + if( version ){ + loadMeta(); + } }); // $scope.view = viewVersion; $scope.isAdvancedClosed = true; $scope.instanceExists = false; + $scope.versions = []; + $scope.version = null; + + View.getVersions($routeParams.viewId).then(function(versions) { + $scope.versions = versions; + $scope.version = $scope.versions[$scope.versions.length-1]; + }); + $scope.nameValidationPattern = /^\s*\w*\s*$/; @@ -66,9 +85,4 @@ angular.module('ambariAdminConsole') }); } }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/groups/GroupsListCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/groups/GroupsListCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/groups/GroupsListCtrl.js index eb6c869..dea8b3c 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/groups/GroupsListCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/groups/GroupsListCtrl.js @@ -40,16 +40,4 @@ angular.module('ambariAdminConsole') .catch(function(data) { console.error('Get groups list error'); }); - - $scope.syncLDAP = function() { - var modaInstance = $modal.open({ - templateUrl: 'views/ldapModal.html', - controller: 'LDAPModalCtrl', - resolve:{ - resourceType: function() { - return 'groups'; - } - } - }); - }; }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js index 0755c09..d253eb1 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js @@ -18,5 +18,23 @@ 'use strict'; angular.module('ambariAdminConsole') -.controller('MainCtrl',[function() { +.controller('MainCtrl',['$scope', 'Auth', 'uiAlert', '$modal', function($scope, Auth, uiAlert, $modal) { + $scope.signOut = function() { + Auth.signout().then(function() { + window.location.pathname = ''; // Change location hard, because Angular works only with relative urls + }).catch(function(data) { + uiAlert.danger(data.data.status, data.data.message); + }); + }; + + $scope.about = function() { + var modalInstance = $modal.open({ + templateUrl:'views/modals/AboutModal.html', + controller: ['$scope', function($scope) { + $scope.ok = function() { + modalInstance.close(); + }; + }] + }); + }; }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersListCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersListCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersListCtrl.js index c34f26b..0c93ff6 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersListCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersListCtrl.js @@ -49,16 +49,4 @@ angular.module('ambariAdminConsole') return user; } }; - - $scope.syncLDAP = function() { - var modaInstance = $modal.open({ - templateUrl: 'views/ldapModal.html', - controller: 'LDAPModalCtrl', - resolve:{ - resourceType: function() { - return 'users'; - } - } - }); - }; }]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersShowCtrl.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersShowCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersShowCtrl.js index 75f7095..2911b68 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersShowCtrl.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/users/UsersShowCtrl.js @@ -18,7 +18,7 @@ 'use strict'; angular.module('ambariAdminConsole') -.controller('UsersShowCtrl', ['$scope', '$routeParams', 'User', '$modal', '$location', 'ConfirmationModal', function($scope, $routeParams, User, $modal, $location, ConfirmationModal) { +.controller('UsersShowCtrl', ['$scope', '$routeParams', 'User', '$modal', '$location', 'ConfirmationModal', 'uiAlert', function($scope, $routeParams, User, $modal, $location, ConfirmationModal, uiAlert) { $scope.user = {}; $scope.isGroupEditing = false; @@ -37,7 +37,8 @@ angular.module('ambariAdminConsole') templateUrl: 'views/users/modals/changePassword.html', controller: ['$scope', function($scope) { $scope.passwordData = { - password: '' + password: '', + currentUserPassword: '' }; $scope.form = {}; @@ -45,7 +46,11 @@ angular.module('ambariAdminConsole') $scope.ok = function() { $scope.form.passwordChangeForm.submitted = true; if($scope.form.passwordChangeForm.$valid){ - modalInstance.close($scope.passwordData.password, $scope.passwordData.currentUserPassword); + + modalInstance.close({ + password: $scope.passwordData.password, + currentUserPassword: $scope.passwordData.currentUserPassword + }); } }; $scope.cancel = function() { @@ -54,8 +59,12 @@ angular.module('ambariAdminConsole') }] }); - modalInstance.result.then(function(newPassword, currentUserPassword) { - User.setPassword($scope.user, newPassword, currentUserPassword); + modalInstance.result.then(function(data) { + User.setPassword($scope.user, data.password, data.currentUserPassword).then(function() { + uiAlert.success('Password changed.'); + }).catch(function(data) { + uiAlert.danger(data.data.status, data.data.message); + }); }); }; http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js new file mode 100644 index 0000000..bffd5c7 --- /dev/null +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js @@ -0,0 +1,30 @@ +/** + * 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. + */ +'use strict'; + +angular.module('ambariAdminConsole') +.factory('Auth',['$http', 'Settings', function($http, Settings) { + return { + signout: function() { + return $http({ + method: 'GET', + url: Settings.baseUrl + '/logout' + }); + } + }; +}]); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/User.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/User.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/User.js index 4f3e51c..47afce5 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/User.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/User.js @@ -18,7 +18,7 @@ 'use strict'; angular.module('ambariAdminConsole') -.factory('User', ['Restangular', function(Restangular) { +.factory('User', ['Restangular', '$http', 'Settings', function(Restangular, $http, Settings) { Restangular.addResponseInterceptor(function(data, operation, what, url, response, deferred) { var extractedData; if(operation === 'getList'){ @@ -48,12 +48,20 @@ angular.module('ambariAdminConsole') return Restangular.one('users', userId).customPUT({'Users/active':isActive}); }, setPassword: function(user, password, currentUserPassword) { - - return Restangular.one('users', user.user_name).customPUT({ - 'Users/password': password, - 'Users/old_password': currentUserPassword, - 'Users/roles': user.roles[0] || 'user' + return $http({ + method: 'PUT', + url: Settings.baseUrl + '/users/' + user.user_name, + data: { + 'Users/password': password, + 'Users/old_password': currentUserPassword, + 'Users/roles': user.roles[0] || 'user' + } }); + // return Restangular.one('users', user.user_name).customPUT({ + // 'Users/password': password, + // 'Users/old_password': currentUserPassword, + // 'Users/roles': user.roles[0] || 'user' + // }); }, delete: function(userId) { return Restangular.one('users', userId).remove(); http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/View.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/View.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/View.js index 2b7656a..f0f6011 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/View.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/View.js @@ -126,7 +126,26 @@ angular.module('ambariAdminConsole') }); return deferred.promise; - } + }; + + View.getVersions = function(viewName) { + var deferred = $q.defer(); + + $http({ + method: 'GET', + url: Settings.baseUrl + '/views/'+viewName + }).success(function(data) { + var versions = []; + angular.forEach(data.versions, function(version) { + versions.push(version.ViewVersionInfo.version); + }); + + deferred.resolve(versions); + }).catch(function(data) { + deferred.reject(data); + }); + return deferred.promise; + }; View.createInstance = function(instanceInfo) { var deferred = $q.defer(); http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/ldap.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/ldap.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/ldap.js index bedf33a..26d5c2e 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/ldap.js +++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/ldap.js @@ -18,27 +18,29 @@ 'use strict'; angular.module('ambariAdminConsole') -.factory('LDAP', ['$http', '$q', function($http, $q) { +.factory('LDAP', ['$http', '$q', 'Settings', function($http, $q, Settings) { return { - get: function(resourceType) { - var deferred = $q.defer(); - - $http({ + get: function() { + return $http({ method: 'GET', url: '/api/v1/controllers/ldap' - }) - .success(function(data) { - deferred.resolve(data); - }) - .catch(function(data) { - deferred.reject(data); }); - - return deferred.promise; }, - sync: function(resourceType, items) { + sync: function(groupsList, usersList) { + return $http({ + method: 'POST', + url: Settings.baseUrl + '/controllers/ldap', + data:{ + LDAP:{ + "synced_groups": groupsList.join(','), + "synced_users": usersList.join(',') + } + } + }); + }, + syncResource: function(resourceType, items) { var items = items.map(function(item) { var name = 'LDAP/synced_' + resourceType; var obj = {}; http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css b/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css index 8771ca3..4104ccb 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css +++ b/ambari-admin/src/main/resources/ui/admin-web/app/styles/main.css @@ -17,6 +17,40 @@ */ +.views-list-pane .glyphicon.glyphicon-chevron-right{ + -webkit-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} +.views-list-pane .glyphicon.glyphicon-chevron-right.opened{ + -webkit-transform: rotateZ(90deg); + -ms-transform: rotateZ(90deg); + -o-transform: rotateZ(90deg); + transform: rotateZ(90deg); +} + +.pulldown2{ + -webkit-transform: translateY(2px); + -ms-transform: translateY(2px); + -o-transform: translateY(2px); + transform: translateY(2px); +} +.btn.disabled.syncldapbtn{ + pointer-events: auto; + background-color: #0044cc; +} + +.about .logo{ + float: left; + width: 20%; +} +.about .content{ + float: left; +} +.about .content .project{ + font-weight: bold; + font-size: 2em; +} /* Style topnav menu */ http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html index 216018f..1b11d65 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/create.html @@ -27,7 +27,7 @@ <img src="http://placehold.it/32x32" alt="" class="icon-small"> <div class="description"> <h3>{{view.ViewVersionInfo.view_name}}</h3> - <span>{{view.ViewVersionInfo.label}} | Version: {{view.ViewVersionInfo.version}}</span> + <span>{{view.ViewVersionInfo.label}} | Version: <select ng-model="version" ng-change="versionChanged()" ng-options="o as o for o in versions"></select></span> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html index 0e3b9a1..9bfcffd 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/edit.html @@ -17,7 +17,7 @@ --> <ol class="breadcrumb"> <li><a href="#/views">Views</a></li> - <li class="active">Edit instance</li> + <li class="active">Edit {{instance.ViewInstanceInfo.label}}</li> </ol> <h2>Edit {{instance.ViewInstanceInfo.view_name}}: {{instance.ViewInstanceInfo.label}}</h2> <hr> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/list.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/list.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/list.html index 23290d4..aad6665 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/list.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/ambariViews/list.html @@ -38,10 +38,13 @@ <div class="col-sm-3"><h4>Descirption</h4></div> </div> <accordion> - <accordion-group ng-repeat="view in filteredViews"> + <accordion-group ng-repeat="view in filteredViews" is-open="open"> <accordion-heading> <div class="row"> - <div class="col-sm-3">{{view.view_name}}</div> + <div class="col-sm-3"> + <i class="glyphicon glyphicon-chevron-right" ng-class="{'opened': open}"></i> + {{view.view_name}} + </div> <div class="col-sm-3">{{view.versions}}</div> <div class="col-sm-3">{{view.instances.length ? view.instances.length : 'No'}} instances</div> <div class="col-sm-3">This is a description</div> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/edit.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/edit.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/edit.html index 1a242e9..8e8476b 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/edit.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/edit.html @@ -17,7 +17,7 @@ --> <ol class="breadcrumb"> <li><a href="#/groups">Groups</a></li> - <li class="active">Edit group</li> + <li class="active">Edit {{group.group_name}}</li> </ol> <div class="clearfix"> <h3 class="pull-left">Edit {{group.group_name}}</h3> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/list.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/list.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/list.html index baa7038..12f990a 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/list.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/groups/list.html @@ -23,7 +23,6 @@ <h3 class="pull-left">Groups management</h3> <div class="pull-right top-buffer"> <link-to route="groups.create" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Create Local Group</link-to> - <button class="btn btn-default" ng-click="syncLDAP()">Sync LDAP</button> </div> </div> <hr> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/ldapModal.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/ldapModal.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/ldapModal.html deleted file mode 100644 index e9c790a..0000000 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/ldapModal.html +++ /dev/null @@ -1,47 +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. ---> -<div class="modal-header"> - <h3 class="modal-title">LDAP {{resourceType}}</h3> -</div> -<div class="modal-body"> - <div class="alert alert-danger" ng-show="isDataLoaded && !isConfigured"> - LDAP is not configured. - </div> - <table class="table table-hover table-striped ldap-table" ng-show="isDataLoaded"> - <tbody> - <tr ng-repeat="item in items"> - <td class="col-sm-10">{{item.name}}</td> - <td class="col-sm-2"> - <div class="checkbox"> - <label> - <input type="checkbox" ng-model="item.selected"> - </label> - </div> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info" ng-show="isConfigured && isDataLoaded && !items"> - No {{resourceType}} to sync. - </div> - <progressbar ng-hide="isDataLoaded" class="progress-striped active" max="200" value="200" type="default"></progressbar> -</div> -<div class="modal-footer"> - <button class="btn btn-primary" ng-click="sync()">Sync</button> - <button class="btn btn-warning" ng-click="cancel()">Cancel</button> -</div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/leftNavbar.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/leftNavbar.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/leftNavbar.html index f59931b..9f5b116 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/leftNavbar.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/leftNavbar.html @@ -22,7 +22,7 @@ <h5>{{cluster.Clusters.cluster_name}}</h5> <ul class="nav nav-pills nav-stacked"> <li ng-class="{active: isActive('clusters.manageAccess')}"> - <link-to route="clusters.manageAccess" id="{{cluster.Clusters.cluster_name}}">Permissions</link-to> + <a href="#/clusters/{{cluster.Clusters.cluster_name}}/manageAccess">Permissions</a> </li> <li><a href="/#/main/dashboard">Go to Dashboard</a></li> </ul> @@ -54,5 +54,15 @@ <li ng-class="{active: isActive('users.list')}"><link-to route="users.list">Users</link-to></li> <li ng-class="{active: isActive('groups.list')}"><link-to route="groups.list">Groups</link-to></li> </ul> + <hr> + <div ng-switch="isLDAPConfigured"> + <a ng-switch-when="true" href class="btn btn-primary btn-block syncldapbtn" ng-click="syncLDAP()"> + <span class="glyphicon glyphicon-transfer pulldown2"></span> Sync LDAP + </a> + <a ng-switch-default href class="btn btn-primary btn-block syncldapbtn disabled" popover="LDAP is not configured. To configure LDAP, run ambari-server setup-ldap from the command line." popover-trigger="mouseenter"> + <span class="glyphicon glyphicon-transfer pulldown2"></span> Sync LDAP + </a> + </div> + </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/AboutModal.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/AboutModal.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/AboutModal.html new file mode 100644 index 0000000..4f02eba --- /dev/null +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/AboutModal.html @@ -0,0 +1,42 @@ +<!-- +* 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. +--> +<div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" ng-click="ok()"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> + <h3 class="modal-title">About</h3> +</div> +<div class="modal-body"> + <div class="about clearfix"> + <div class="logo"> + <img src="/img/logo.png" alt="Apache Ambari" title="Apache Ambari"> + </div> + <div class="content"> + <div class="project">Apache Ambari</div> + <br> + <span id="i18n-33">Version</span> + <script id="metamorph-199-start" type="text/x-placeholder"></script>1.7.0<script id="metamorph-199-end" type="text/x-placeholder"></script> + <br> + <br> + <a href="http://ambari.apache.org/" target="_blank"><span id="i18n-34">Get involved!</span></a> + <br> + <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank"><span id="i18n-35">Licensed under the Apache License, Version 2.0</span></a> + </div> + </div> +</div> +<div class="modal-footer"> + <button class="btn btn-success" ng-click="ok()">OK</button> +</div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/users/list.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/users/list.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/users/list.html index c281c70..45c3a4f 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/users/list.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/users/list.html @@ -23,7 +23,6 @@ <h3 class="pull-left">Users management</h3> <div class="pull-right top-buffer"> <link-to route="users.create" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Create Local User</link-to> - <button class="btn btn-default" ng-click="syncLDAP()">Sync LDAP</button> </div> </div> <hr> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/app/views/users/show.html ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/users/show.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/users/show.html index dadb32f..e171d0c 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/app/views/users/show.html +++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/users/show.html @@ -17,7 +17,7 @@ --> <ol class="breadcrumb"> <li><a href="#/users">Users</a></li> - <li class="active">Edit user</li> + <li class="active">Edit {{user.user_name}}</li> </ol> <div ng-show="user.user_name"> <div class="clearfix"> http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/gulpfile.js ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/gulpfile.js b/ambari-admin/src/main/resources/ui/admin-web/gulpfile.js index 8e5e9e8..3655d6b 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/gulpfile.js +++ b/ambari-admin/src/main/resources/ui/admin-web/gulpfile.js @@ -42,6 +42,7 @@ gulp.task('html', ['styles'], function () { var cssFilter = $.filter('**/*.css'); return gulp.src('app/*.html') + .pipe($.plumber()) .pipe($.useref.assets({searchPath: '{.tmp,app}'})) .pipe(jsFilter) .pipe($.uglify()) http://git-wip-us.apache.org/repos/asf/ambari/blob/e8b35541/ambari-admin/src/main/resources/ui/admin-web/package.json ---------------------------------------------------------------------- diff --git a/ambari-admin/src/main/resources/ui/admin-web/package.json b/ambari-admin/src/main/resources/ui/admin-web/package.json index 331c7a4..a091584 100644 --- a/ambari-admin/src/main/resources/ui/admin-web/package.json +++ b/ambari-admin/src/main/resources/ui/admin-web/package.json @@ -24,7 +24,8 @@ "gulp-useref": "^0.4.2", "jshint-stylish": "^0.2.0", "opn": "^0.1.1", - "wiredep": "^1.4.3" + "wiredep": "^1.4.3", + "gulp-plumber": "*" }, "engines": { "node": ">=0.10.0"