updates for cookies storage processing, and other refinements.

This commit is contained in:
kunw 2016-05-20 17:43:47 +08:00
parent 4f34bba18f
commit 09db2d04d0
17 changed files with 103 additions and 127 deletions

View File

@ -20,8 +20,6 @@
} }
vm.retrieve = retrieve; vm.retrieve = retrieve;
vm.retrieve();
vm.checkProjectMember = checkProjectMember; vm.checkProjectMember = checkProjectMember;
$scope.$watch('vm.selectedProject', function(current, origin) { $scope.$watch('vm.selectedProject', function(current, origin) {
@ -34,7 +32,7 @@
vm.selectItem = selectItem; vm.selectItem = selectItem;
$scope.$watch('vm.publicity', function(current, origin) { $scope.$watch('vm.publicity', function(current, origin) {
vm.publicity = current ? 1 : 0; vm.publicity = current ? true : false;
vm.isPublic = vm.publicity ? 1 : 0; vm.isPublic = vm.publicity ? 1 : 0;
vm.projectType = (vm.isPublic === 1) ? 'public_projects' : 'my_projects'; vm.projectType = (vm.isPublic === 1) ? 'public_projects' : 'my_projects';
vm.retrieve(); vm.retrieve();
@ -65,9 +63,8 @@
} }
}); });
} }
$location.search('project_id', vm.selectedProject.ProjectId);
vm.checkProjectMember(vm.selectedProject.ProjectId); vm.checkProjectMember(vm.selectedProject.ProjectId);
$location.search('project_id', vm.selectedProject.ProjectId);
vm.resultCount = vm.projects.length; vm.resultCount = vm.projects.length;
$scope.$watch('vm.filterInput', function(current, origin) { $scope.$watch('vm.filterInput', function(current, origin) {

View File

@ -1,16 +1,6 @@
<div ng-if="!vm.isLoggedIn" class="dropdown">
<a id="dLabel" role="button" data-toggle="dropdown" class="btn btn-link" data-target="#" href="">
<span class="glyphicon glyphicon-globe"></span> //vm.languageName//
</a>
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('en-US')">English</a></li>
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('zh-CN')">中文</a></li>
</ul>
</div>
<div ng-if="vm.isLoggedIn" class="dropdown"> <div ng-if="vm.isLoggedIn" class="dropdown">
<a id="dLabel" role="button" data-toggle="dropdown" class="btn btn-link" data-target="#" href=""> <a role="button" data-toggle="dropdown" class="btn btn-link" data-target="#" href="">
<span class="glyphicon glyphicon-user"></span> //vm.username// <span class="glyphicon glyphicon-user"></span> //vm.user.username//
</a> </a>
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu"> <ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
<li><a href="/ng/account_setting"><span class="glyphicon glyphicon-pencil"></span> // 'account_setting' | tr //</a></li> <li><a href="/ng/account_setting"><span class="glyphicon glyphicon-pencil"></span> // 'account_setting' | tr //</a></li>
@ -25,3 +15,12 @@
<li><a href="javascript:void(0)" ng-click="vm.logOut()"><span class="glyphicon glyphicon-log-out"></span> // 'log_out' | tr //</a></li> <li><a href="javascript:void(0)" ng-click="vm.logOut()"><span class="glyphicon glyphicon-log-out"></span> // 'log_out' | tr //</a></li>
</ul> </ul>
</div> </div>
<div ng-if="!vm.isLoggedIn" class="dropdown">
<a role="button" data-toggle="dropdown" class="btn btn-link" data-target="#" href="">
<span class="glyphicon glyphicon-globe"></span> //vm.languageName//
</a>
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('en-US')">English</a></li>
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('zh-CN')">中文</a></li>
</ul>
</div>

View File

@ -6,15 +6,24 @@
.module('harbor.optional.menu') .module('harbor.optional.menu')
.directive('optionalMenu', optionalMenu); .directive('optionalMenu', optionalMenu);
OptionalMenuController.$inject = ['$scope', '$window', '$cookies', 'I18nService', 'LogOutService']; OptionalMenuController.$inject = ['$window', 'I18nService', 'LogOutService', 'currentUser', '$timeout'];
function OptionalMenuController($scope, $window, $cookies, I18nService, LogOutService) { function OptionalMenuController($window, I18nService, LogOutService, currentUser, $timeout) {
var vm = this; var vm = this;
vm.currentLanguage = I18nService().getCurrentLanguage(); vm.currentLanguage = I18nService().getCurrentLanguage();
vm.setLanguage = setLanguage;
vm.languageName = I18nService().getLanguageName(vm.currentLanguage); vm.languageName = I18nService().getLanguageName(vm.currentLanguage);
console.log('current language:' + I18nService().getCurrentLanguage()); console.log('current language:' + I18nService().getCurrentLanguage());
vm.isLoggedIn = false;
$timeout(function() {
vm.user = currentUser.get();
if(angular.isDefined(vm.user)) {
vm.isLoggedIn = true;
}
});
vm.setLanguage = setLanguage;
vm.logOut = logOut; vm.logOut = logOut;
function setLanguage(name) { function setLanguage(name) {
@ -28,6 +37,7 @@
.error(logOutFailed); .error(logOutFailed);
} }
function logOutSuccess(data, status) { function logOutSuccess(data, status) {
currentUser.unset();
$window.location.href= '/ng'; $window.location.href= '/ng';
} }
function logOutFailed(data, status) { function logOutFailed(data, status) {
@ -39,23 +49,12 @@
var directive = { var directive = {
'restrict': 'E', 'restrict': 'E',
'templateUrl': '/static/ng/resources/js/components/optional-menu/optional-menu.directive.html', 'templateUrl': '/static/ng/resources/js/components/optional-menu/optional-menu.directive.html',
'link': link,
'scope': true, 'scope': true,
'controller': OptionalMenuController, 'controller': OptionalMenuController,
'controllerAs': 'vm', 'controllerAs': 'vm',
'bindToController': true 'bindToController': true
}; };
return directive; return directive;
function link(scope, element, attrs, ctrl) {
ctrl.isLoggedIn = false;
scope.$on('currentUser', function(e, val) {
if(val != null) {
ctrl.isLoggedIn = true;
ctrl.username = val.username;
}
scope.$apply();
});
}
} }
})(); })();

View File

@ -74,16 +74,11 @@
'projectId': '=', 'projectId': '=',
'reload': '&' 'reload': '&'
}, },
'link': link,
'controller': EditProjectMemberController, 'controller': EditProjectMemberController,
'controllerAs': 'vm', 'controllerAs': 'vm',
'bindToController': true 'bindToController': true
}; };
return directive; return directive;
function link(scope, element, attrs, ctrl) {
}
} }
})(); })();

View File

@ -18,7 +18,7 @@
<th width="30%">// 'username' | tr //</th><th width="40%">// 'role' | tr //</th><th width="30%">// 'operation' | tr //</th> <th width="30%">// 'username' | tr //</th><th width="40%">// 'role' | tr //</th><th width="30%">// 'operation' | tr //</th>
</thead> </thead>
<tbody> <tbody>
<tr ng-repeat="pr in vm.projectMembers" edit-project-member username="pr.username" project-id="vm.projectId" user-id="pr.UserId" current-user-id="vm.currentUser.UserId" role-name="pr.Rolename" reload='vm.search({projectId: vm.projectId, username: vm.username})'></tr> <tr ng-repeat="pr in vm.projectMembers" edit-project-member username="pr.username" project-id="vm.projectId" user-id="pr.UserId" current-user-id="vm.user.UserId" role-name="pr.Rolename" reload='vm.search({projectId: vm.projectId, username: vm.username})'></tr>
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -11,23 +11,18 @@
function ListProjectMemberController($scope, ListProjectMemberService, $routeParams, currentUser) { function ListProjectMemberController($scope, ListProjectMemberService, $routeParams, currentUser) {
var vm = this; var vm = this;
vm.isOpen = false; vm.isOpen = false;
vm.search = search; vm.search = search;
vm.addProjectMember = addProjectMember; vm.addProjectMember = addProjectMember;
vm.retrieve = retrieve; vm.retrieve = retrieve;
vm.projectId = $routeParams.project_id; vm.projectId = $routeParams.project_id;
vm.username = ""; vm.username = "";
vm.currentUser = {};
vm.retrieve(); vm.retrieve();
function search(e) { function search(e) {
vm.projectId = e.projectId; vm.projectId = e.projectId;
vm.username = e.username; vm.username = e.username;
console.log('project_id:' + e.projectId);
retrieve(); retrieve();
} }
@ -46,7 +41,7 @@
} }
function getProjectMemberComplete(response) { function getProjectMemberComplete(response) {
vm.currentUser = currentUser.get(); vm.user = currentUser.get();
vm.projectMembers = response.data; vm.projectMembers = response.data;
} }
@ -62,17 +57,11 @@
templateUrl: '/static/ng/resources/js/components/project-member/list-project-member.directive.html', templateUrl: '/static/ng/resources/js/components/project-member/list-project-member.directive.html',
replace: true, replace: true,
scope: true, scope: true,
link: link,
controller: ListProjectMemberController, controller: ListProjectMemberController,
controllerAs: 'vm', controllerAs: 'vm',
bindToController: true bindToController: true
} }
return directive; return directive;
function link(scope, element, attrs, ctrl) {
}
} }
})(); })();

View File

@ -95,7 +95,6 @@
restrict: 'E', restrict: 'E',
templateUrl: '/static/ng/resources/js/components/repository/list-repository.directive.html', templateUrl: '/static/ng/resources/js/components/repository/list-repository.directive.html',
replace: true, replace: true,
link: 'link',
controller: ListRepositoryController, controller: ListRepositoryController,
controllerAs: 'vm', controllerAs: 'vm',
bindToController: true bindToController: true
@ -103,10 +102,6 @@
return directive; return directive;
function link(scope, element, attrs, ctrl) {
}
} }
})(); })();

View File

@ -1,7 +1,7 @@
<form name="form" class="form-horizontal css-form" ng-submit="form.$valid" novalidate> <form name="form" class="form-horizontal css-form" ng-submit="form.$valid" novalidate>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-1 col-sm-10"> <div class="col-sm-offset-1 col-sm-10">
<input id="username" type="text" class="form-control" placeholder="// 'username_email' | tr //" name="uPrincipal" ng-model-options="{ debounce: 250 }" ng-change="vm.reset()" ng-model="user.principal" required> <input id="username" type="text" class="form-control" placeholder="// 'username_email' | tr //" name="uPrincipal" ng-change="vm.reset()" ng-model="user.principal" required>
<div class="error-message"> <div class="error-message">
<div ng-messages="form.uPrincipal.$error" ng-if="form.uPrincipal.$touched"> <div ng-messages="form.uPrincipal.$error" ng-if="form.uPrincipal.$touched">
<span ng-message="required">// 'username_is_required' | tr //</span> <span ng-message="required">// 'username_is_required' | tr //</span>
@ -11,7 +11,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-1 col-sm-10"> <div class="col-sm-offset-1 col-sm-10">
<input type="password" class="form-control" placeholder="// 'password' | tr //" name="uPassword" ng-model-options="{ debounce: 250 }" ng-change="vm.reset()" ng-model="user.password" required> <input type="password" class="form-control" placeholder="// 'password' | tr //" name="uPassword" ng-change="vm.reset()" ng-model="user.password" required>
<div class="error-message"> <div class="error-message">
<div ng-messages="form.uPassword.$error" ng-if="form.uPassword.$touched"> <div ng-messages="form.uPassword.$error" ng-if="form.uPassword.$touched">
<span ng-message="required">// 'password_is_required' | tr //</span> <span ng-message="required">// 'password_is_required' | tr //</span>
@ -23,7 +23,7 @@
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-1 col-sm-10"> <div class="col-sm-offset-1 col-sm-10">
<div class="pull-right"> <div class="pull-right">
<button class="btn btn-default" ng-disabled="form.$invalid" ng-click="vm.doSignIn(user)">// 'sign_in' | tr //</button> <button class="btn btn-default" ng-click="vm.doSignIn(user)">// 'sign_in' | tr //</button>
<button class="btn btn-success" ng-click="vm.doSignUp()">// 'sign_up' | tr //</button> <button class="btn btn-success" ng-click="vm.doSignUp()">// 'sign_up' | tr //</button>
</div> </div>
</div> </div>

View File

@ -1,36 +1,40 @@
(function() { (function() {
'use strict';
angular angular
.module('harbor.app') .module('harbor.app')
.factory('currentUser', currentUser) .factory('currentUser', currentUser)
.factory('projectMember', projectMember); .factory('currentProjectMember', currentProjectMember);
function currentUser() { currentUser.$inject = ['$cookies', '$timeout'];
var currentUser;
function currentUser($cookies, $timeout) {
return { return {
set: function(user) { set: function(user) {
currentUser = user; $cookies.putObject('user', user, {'path': '/'});
console.log('set currentUser:' + currentUser);
}, },
get: function() { get: function() {
console.log('get currentUser:' + currentUser); return $cookies.getObject('user');
return currentUser; },
unset: function() {
$cookies.remove('user', {'path': '/'});
} }
} }
} }
function projectMember() { currentProjectMember.$inject = ['$cookies'];
var projectMember;
function currentProjectMember($cookies) {
return { return {
set: function(member) { set: function(member) {
projectMember = member; $cookies.putObject('member', member, {'path': '/'});
console.log('set projectMember:');
console.log(projectMember);
}, },
get: function() { get: function() {
console.log('get projectMember:'); return $cookies.getObject('member');
console.log(projectMember); },
return projectMember; unset: function() {
$cookies.remove('member', {'path': '/'});
} }
} }
} }

View File

@ -6,22 +6,16 @@
.module('harbor.details') .module('harbor.details')
.controller('DetailsController', DetailsController); .controller('DetailsController', DetailsController);
DetailsController.$inject = ['$scope', '$location', '$routeParams']; function DetailsController() {
function DetailsController($scope, $location, $routeParams) {
var vm = this; var vm = this;
vm.isOpen = false;
vm.publicity = false; vm.publicity = false;
vm.isProjectMember = true; vm.isProjectMember = false;
vm.closeRetrievePane = closeRetrievePane;
vm.togglePublicity = togglePublicity; vm.togglePublicity = togglePublicity;
function closeRetrievePane() {
$scope.$broadcast('isOpen', false);
}
function togglePublicity(e) { function togglePublicity(e) {
vm.publicity = e.publicity; vm.publicity = e.publicity;
console.log('current project publicity:' + vm.publicity);
} }
} }

View File

@ -6,22 +6,24 @@
.module('harbor.layout.navigation') .module('harbor.layout.navigation')
.directive('navigationHeader', navigationHeader); .directive('navigationHeader', navigationHeader);
NavigationHeaderController.$inject = ['$window', '$scope']; NavigationHeaderController.$inject = ['$window', '$scope', 'currentUser', '$timeout'];
function NavigationHeaderController($window, $scope) { function NavigationHeaderController($window, $scope, currentUser, $timeout) {
var vm = this; var vm = this;
vm.url = $window.location.pathname;
vm.isAdmin = false;
vm.isShow = false; vm.isShow = false;
$scope.$on('currentUser', function(e, val) { vm.isAdmin = false;
if(val) {
vm.isShow = true; $timeout(function() {
vm.user = currentUser.get();
if(angular.isDefined(vm.user)) {
vm.isShow = true;
if(vm.user.HasAdminRole === 1) {
vm.isAdmin = true;
}
} }
if(val.HasAdminRole === 1) {
vm.isAdmin = true;
}
$scope.$apply();
}); });
vm.url = $window.location.pathname;
} }
function navigationHeader() { function navigationHeader() {

View File

@ -6,8 +6,6 @@
.module('harbor.layout.project.member') .module('harbor.layout.project.member')
.controller('ProjectMemberController', ProjectMemberController); .controller('ProjectMemberController', ProjectMemberController);
ProjectMemberController.$inject = ['$scope'];
function ProjectMemberController($scope) { function ProjectMemberController($scope) {
} }

View File

@ -6,9 +6,9 @@
.module('harbor.layout.project') .module('harbor.layout.project')
.controller('ProjectController', ProjectController); .controller('ProjectController', ProjectController);
ProjectController.$inject = ['$scope', 'ListProjectService']; ProjectController.$inject = ['$scope', 'ListProjectService', '$timeout', 'currentUser'];
function ProjectController($scope, ListProjectService) { function ProjectController($scope, ListProjectService, $timeout, currentUser) {
var vm = this; var vm = this;
vm.isOpen = false; vm.isOpen = false;
@ -21,8 +21,8 @@
vm.showAddButton = showAddButton; vm.showAddButton = showAddButton;
vm.togglePublicity = togglePublicity; vm.togglePublicity = togglePublicity;
$scope.$on('currentUser', function(e, val) { $timeout(function() {
vm.currentUser = val; vm.user = currentUser.get();
}); });
vm.retrieve(); vm.retrieve();

View File

@ -12,21 +12,25 @@
var vm = this; var vm = this;
CurrentUserService() if(!angular.isDefined(currentUser.get())) {
.then(getCurrentUserComplete) CurrentUserService()
.catch(getCurrentUserFailed); .then(getCurrentUserComplete)
.catch(getCurrentUserFailed);
}
function getCurrentUserComplete(response) { function getCurrentUserComplete(response) {
console.log('Successful logged in.'); currentUser.set(response.data);
$timeout(function(){
$scope.$broadcast('currentUser', response.data);
currentUser.set(response.data);
}, 50);
} }
function getCurrentUserFailed(e){ function getCurrentUserFailed(e){
var url = location.pathname; var url = location.pathname;
var exclusions = ['/ng', '/ng/forgot_password', '/ng/sign_up', '/ng/reset_password', '/ng/search', '/ng/repository']; var exclusions = [
'/ng',
'/ng/forgot_password',
'/ng/sign_up',
'/ng/reset_password',
'/ng/search'
];
for(var i = 0; i < exclusions.length; i++) { for(var i = 0; i < exclusions.length; i++) {
if(exclusions[i]===url) { if(exclusions[i]===url) {
return; return;

View File

@ -35,7 +35,7 @@
<td>N/A</td> <td>N/A</td>
<td>N/A</td> <td>N/A</td>
<td>//p.CreationTime | dateL : 'YYYY-MM-DD HH:mm:ss'//</td> <td>//p.CreationTime | dateL : 'YYYY-MM-DD HH:mm:ss'//</td>
<td><publicity-button is-public="p.Public" owned="p.OwnerId == vm.currentUser.UserId" project-id="p.ProjectId"></publicity-button></td> <td><publicity-button is-public="p.Public" owned="p.OwnerId == vm.user.UserId" project-id="p.ProjectId"></publicity-button></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -10,7 +10,7 @@
</div> </div>
<!-- Collect the nav links, forms, and other content for toggling --> <!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-harbor-navbar-collapse-1"> <div class="collapse navbar-collapse" id="bs-harbor-navbar-collapse-1">
<optional-menu></optional-menu> <optional-menu login-status="//vm.loginStatus//"></optional-menu>
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
<li> <li>
<navigation-header></navigation-header> <navigation-header></navigation-header>

View File

@ -13,16 +13,16 @@
<script src="/static/ng/vendors/zc/v2.2.0/ZeroClipboard.js"></script> <script src="/static/ng/vendors/zc/v2.2.0/ZeroClipboard.js"></script>
<!-- Latest compiled and minified CSS --> <!-- Latest compiled and minified CSS -->
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">--> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> <!--<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"--->
<!-- Optional theme --> <!-- Optional theme -->
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">--> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous"> <!--<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous"-->
<!-- Latest compiled and minified JavaScript --> <!-- Latest compiled and minified JavaScript -->
<!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>--> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <!--<script src="https://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script-->
<link rel="stylesheet" href="/static/ng/resources/css/header.css"> <link rel="stylesheet" href="/static/ng/resources/css/header.css">
<link rel="stylesheet" href="/static/ng/resources/css/footer.css"> <link rel="stylesheet" href="/static/ng/resources/css/footer.css">