updates of I18n refinement and add confirm dialog when deleting project member.

This commit is contained in:
kunw 2016-06-20 16:05:14 +08:00
parent 5bb80bfb5c
commit 58487ed06c
11 changed files with 62 additions and 45 deletions

View File

@ -3,7 +3,7 @@ runmode = dev
[lang]
types = en-US|zh-CN
names = English|中文
names = en-US|zh-CN
[dev]
httpport = 80

View File

@ -35,6 +35,7 @@ const (
)
var supportLanguages map[string]langType
var mappingLangNames map[string]string
// Prepare extracts the language information from request and populate data for rendering templates.
func (b *BaseController) Prepare() {
@ -49,35 +50,22 @@ func (b *BaseController) Prepare() {
}
}
if _, exist := supportLanguages[lang]; exist == false { //Check if support the request language.
lang = defaultLang //Set default language if not supported.
}
sessionLang := b.GetSession("lang")
if sessionLang != nil {
b.SetSession("Lang", lang)
lang = sessionLang.(string)
}
if _, exist := supportLanguages[lang]; !exist { //Check if support the request language.
lang = defaultLang //Set default language if not supported.
}
curLang := langType{
Lang: lang,
}
restLangs := make([]*langType, 0, len(langTypes)-1)
for _, v := range langTypes {
if lang != v.Lang {
restLangs = append(restLangs, v)
} else {
curLang.Name = v.Name
}
}
// Set language properties.
b.Lang = lang
b.Data["Lang"] = curLang.Lang
b.Data["CurLang"] = curLang.Name
b.Data["RestLangs"] = restLangs
b.Data["SupportLanguages"] = supportLanguages
authMode := strings.ToLower(os.Getenv("AUTH_MODE"))
if authMode == "" {
@ -143,10 +131,11 @@ func (cc *CommonController) LogOut() {
// SwitchLanguage User can swith to prefered language
func (cc *CommonController) SwitchLanguage() {
lang := cc.GetString("lang")
if _, exist := supportLanguages[lang]; exist {
cc.SetSession("lang", lang)
cc.Data["Lang"] = lang
if _, exist := supportLanguages[lang]; !exist {
lang = defaultLang
}
cc.SetSession("lang", lang)
cc.Data["Lang"] = lang
cc.Redirect(cc.Ctx.Request.Header.Get("Referer"), http.StatusFound)
}
@ -184,8 +173,6 @@ func init() {
}
}
beego.AddFuncMap("i18n", i18n.Tr)
langs := strings.Split(beego.AppConfig.String("lang::types"), "|")
names := strings.Split(beego.AppConfig.String("lang::names"), "|")

View File

@ -14,8 +14,9 @@
vm.currentLanguage = I18nService().getCurrentLanguage();
vm.languageName = I18nService().getLanguageName(vm.currentLanguage);
console.log('current language:' + I18nService().getCurrentLanguage());
console.log('current language:' + vm.languageName);
vm.supportLanguages = I18nService().getSupportLanguages();
vm.user = currentUser.get();
vm.setLanguage = setLanguage;
vm.logOut = logOut;

View File

@ -7,5 +7,5 @@
<a ng-show="vm.userId != vm.currentUserId" href="javascript:void(0);" ng-click="vm.cancelUpdate()" title="Cancel">
<span ng-if="vm.editMode" class="glyphicon glyphicon-repeat"></span>
</a>
<a ng-show="vm.userId != vm.currentUserId && !vm.editMode" href="javascript:void(0);" ng-click="vm.deleteProjectMember({projectId: vm.projectId, userId: vm.userId})" title="Delete"><span class="glyphicon glyphicon-trash"></span></a>
<a ng-show="vm.userId != vm.currentUserId && !vm.editMode" href="javascript:void(0);" data-toggle="modal" data-target="#myModal" ng-click="vm.deleteProjectMember()" title="Delete"><span class="glyphicon glyphicon-trash"></span></a>
</td>

View File

@ -6,9 +6,9 @@
.module('harbor.project.member')
.directive('editProjectMember', editProjectMember);
EditProjectMemberController.$inject = ['$scope', 'roles', 'getRole','EditProjectMemberService', 'DeleteProjectMemberService'];
EditProjectMemberController.$inject = ['$scope', 'roles', 'getRole','EditProjectMemberService'];
function EditProjectMemberController($scope, roles, getRole, EditProjectMemberService, DeleteProjectMemberService) {
function EditProjectMemberController($scope, roles, getRole, EditProjectMemberService) {
var vm = this;
vm.roles = roles();
@ -37,10 +37,8 @@
}
}
function deleteProjectMember(e) {
DeleteProjectMemberService(e.projectId, e.userId)
.success(editProjectMemberComplete)
.error(editProjectMemberFailed);
function deleteProjectMember() {
vm.delete();
}
function editProjectMemberComplete(data, status, headers) {
@ -71,6 +69,7 @@
'currentUserId': '=',
'roleName': '=',
'projectId': '=',
'delete': '&',
'reload': '&'
},
'controller': EditProjectMemberController,

View File

@ -12,13 +12,14 @@
</div>
<div class="pane">
<add-project-member ng-show="vm.isOpen" is-open="vm.isOpen" project-id="//vm.projectId//" reload='vm.search({projectId: vm.projectId, username: vm.username})'></add-project-member>
<modal-dialog title="// 'confirm_to_delete_member_title' | tr //" message="// 'confirm_to_delete_member' | tr //" action="vm.deleteProjectMember()"></modal-dialog>
<div class="sub-pane">
<table class="table table-pane" >
<thead>
<th width="30%">// 'username' | tr //</th><th width="40%">// 'role' | tr //</th><th width="30%">// 'operation' | tr //</th>
</thead>
<tbody>
<tr ng-repeat="pr in vm.projectMembers" edit-project-member username="pr.username" project-id="vm.projectId" user-id="pr.user_id" current-user-id="vm.user.user_id" role-name="pr.role_name" 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.user_id" delete="vm.deleteMember({projectId: vm.projectId, userId: pr.user_id})" current-user-id="vm.user.user_id" role-name="pr.role_name" reload='vm.search({projectId: vm.projectId, username: vm.username})'></tr>
</tbody>
</table>
</div>

View File

@ -6,17 +6,19 @@
.module('harbor.project.member')
.directive('listProjectMember', listProjectMember);
ListProjectMemberController.$inject = ['$scope', 'ListProjectMemberService', 'getParameterByName', '$location', 'currentUser'];
ListProjectMemberController.$inject = ['$scope', 'ListProjectMemberService', 'DeleteProjectMemberService', 'getParameterByName', '$location', 'currentUser'];
function ListProjectMemberController($scope, ListProjectMemberService, getParameterByName, $location, currentUser) {
function ListProjectMemberController($scope, ListProjectMemberService, DeleteProjectMemberService, getParameterByName, $location, currentUser) {
var vm = this;
vm.isOpen = false;
vm.search = search;
vm.addProjectMember = addProjectMember;
vm.deleteProjectMember = deleteProjectMember;
vm.deleteMember = deleteMember
vm.retrieve = retrieve;
vm.username = '';
vm.projectId = getParameterByName('project_id', $location.absUrl());
vm.retrieve();
@ -38,6 +40,30 @@
vm.isOpen = true;
}
}
function deleteProjectMember() {
DeleteProjectMemberService(vm.selectedProjectId, vm.selectedUserId)
.success(deleteProjectMemberSuccess)
.error(deleteProjectMemberFailed);
}
function deleteMember(e) {
vm.selectedProjectId = e.projectId;
vm.selectedUserId = e.userId;
vm.modalTitle = 'Delete project member';
vm.modalMessage = 'Are you sure to delete the current member?';
}
function deleteProjectMemberSuccess(data, status) {
console.log('Successful delete project member complete.');
vm.retrieve();
}
function deleteProjectMemberFailed(e) {
console.log('Failed to edit project member:' + e);
}
function retrieve() {
ListProjectMemberService(vm.projectId, {'username': vm.username})

View File

@ -128,5 +128,7 @@ var locale_messages = {
'to_harbor': ' to Harbor!',
'continue' : 'Continue',
'no_projects_add_new_project': 'No projects, add new project now.',
'no_repositories': 'No repositories found, please use "docker push" to upload images.'
'no_repositories': 'No repositories found, please use "docker push" to upload images.',
'confirm_to_delete_member_title': 'Delete project member',
'confirm_to_delete_member': 'Are you sure to delete the current project member?'
};

View File

@ -126,5 +126,7 @@ var locale_messages = {
'to_harbor': ' 使用Harbor!',
'continue' : '继续',
'no_projects_add_new_project': '当前没有项目,请新增项目。',
'no_repositories': '未发现镜像,请用"docker push"命令上传镜像。'
'no_repositories': '未发现镜像,请用"docker push"命令上传镜像。',
'confirm_to_delete_member_title': '删除项目成员',
'confirm_to_delete_member': '确认删除当前项目成员吗?'
};

View File

@ -18,7 +18,7 @@
};
var isSupportLanguage = function(language) {
for (var i in supportLanguages) {
if(language === i) {
if(language === String(i)) {
return true;
}
}
@ -47,6 +47,9 @@
}
return supportLanguages[language];
},
'getSupportLanguages': function() {
return supportLanguages;
},
'unset': function(){
$cookies.put('language', defaultLanguage, cookieOptions);
},

View File

@ -8,9 +8,7 @@
<li class="dropdown-submenu">
<a tabindex="-1" href="#"><span class="glyphicon glyphicon-globe"></span> //vm.languageName//</a>
<ul class="dropdown-menu">
{{ range $key, $value := .SupportLanguages }}
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('{{ $key }}')">{{ $value.Name }}</a></li>
{{ end }}
<li ng-repeat="(key, value) in vm.supportLanguages"><a href="javascript:void(0);" ng-click="vm.setLanguage(key)">// value //</a></li>
</ul>
</li>
<li class="divider"></li>
@ -23,9 +21,7 @@
<span class="glyphicon glyphicon-globe"></span> //vm.languageName//
</a>
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
{{ range $key, $value := .SupportLanguages }}
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('{{ $key }}')">{{ $value.Name }}</a></li>
{{ end }}
<li ng-repeat="(key, value) in vm.supportLanguages"><a href="javascript:void(0);" ng-click="vm.setLanguage(key)">// value //</a></li>
</ul>
</div>
{{ end }}