mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-19 21:32:24 +01:00
updates of I18n refinement and add confirm dialog when deleting project member.
This commit is contained in:
parent
5bb80bfb5c
commit
58487ed06c
@ -3,7 +3,7 @@ runmode = dev
|
|||||||
|
|
||||||
[lang]
|
[lang]
|
||||||
types = en-US|zh-CN
|
types = en-US|zh-CN
|
||||||
names = English|中文
|
names = en-US|zh-CN
|
||||||
|
|
||||||
[dev]
|
[dev]
|
||||||
httpport = 80
|
httpport = 80
|
||||||
|
@ -35,6 +35,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var supportLanguages map[string]langType
|
var supportLanguages map[string]langType
|
||||||
|
var mappingLangNames map[string]string
|
||||||
|
|
||||||
// Prepare extracts the language information from request and populate data for rendering templates.
|
// Prepare extracts the language information from request and populate data for rendering templates.
|
||||||
func (b *BaseController) Prepare() {
|
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")
|
sessionLang := b.GetSession("lang")
|
||||||
if sessionLang != nil {
|
if sessionLang != nil {
|
||||||
b.SetSession("Lang", lang)
|
b.SetSession("Lang", lang)
|
||||||
lang = sessionLang.(string)
|
lang = sessionLang.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, exist := supportLanguages[lang]; !exist { //Check if support the request language.
|
||||||
|
lang = defaultLang //Set default language if not supported.
|
||||||
|
}
|
||||||
|
|
||||||
curLang := langType{
|
curLang := langType{
|
||||||
Lang: lang,
|
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.
|
// Set language properties.
|
||||||
b.Lang = lang
|
|
||||||
b.Data["Lang"] = curLang.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"))
|
authMode := strings.ToLower(os.Getenv("AUTH_MODE"))
|
||||||
if authMode == "" {
|
if authMode == "" {
|
||||||
@ -143,10 +131,11 @@ func (cc *CommonController) LogOut() {
|
|||||||
// SwitchLanguage User can swith to prefered language
|
// SwitchLanguage User can swith to prefered language
|
||||||
func (cc *CommonController) SwitchLanguage() {
|
func (cc *CommonController) SwitchLanguage() {
|
||||||
lang := cc.GetString("lang")
|
lang := cc.GetString("lang")
|
||||||
if _, exist := supportLanguages[lang]; exist {
|
if _, exist := supportLanguages[lang]; !exist {
|
||||||
cc.SetSession("lang", lang)
|
lang = defaultLang
|
||||||
cc.Data["Lang"] = lang
|
|
||||||
}
|
}
|
||||||
|
cc.SetSession("lang", lang)
|
||||||
|
cc.Data["Lang"] = lang
|
||||||
cc.Redirect(cc.Ctx.Request.Header.Get("Referer"), http.StatusFound)
|
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"), "|")
|
langs := strings.Split(beego.AppConfig.String("lang::types"), "|")
|
||||||
names := strings.Split(beego.AppConfig.String("lang::names"), "|")
|
names := strings.Split(beego.AppConfig.String("lang::names"), "|")
|
||||||
|
|
||||||
|
@ -14,8 +14,9 @@
|
|||||||
vm.currentLanguage = I18nService().getCurrentLanguage();
|
vm.currentLanguage = I18nService().getCurrentLanguage();
|
||||||
vm.languageName = I18nService().getLanguageName(vm.currentLanguage);
|
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.user = currentUser.get();
|
||||||
vm.setLanguage = setLanguage;
|
vm.setLanguage = setLanguage;
|
||||||
vm.logOut = logOut;
|
vm.logOut = logOut;
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
<a ng-show="vm.userId != vm.currentUserId" href="javascript:void(0);" ng-click="vm.cancelUpdate()" title="Cancel">
|
<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>
|
<span ng-if="vm.editMode" class="glyphicon glyphicon-repeat"></span>
|
||||||
</a>
|
</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>
|
</td>
|
@ -6,9 +6,9 @@
|
|||||||
.module('harbor.project.member')
|
.module('harbor.project.member')
|
||||||
.directive('editProjectMember', editProjectMember);
|
.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;
|
var vm = this;
|
||||||
|
|
||||||
vm.roles = roles();
|
vm.roles = roles();
|
||||||
@ -37,10 +37,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteProjectMember(e) {
|
function deleteProjectMember() {
|
||||||
DeleteProjectMemberService(e.projectId, e.userId)
|
vm.delete();
|
||||||
.success(editProjectMemberComplete)
|
|
||||||
.error(editProjectMemberFailed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function editProjectMemberComplete(data, status, headers) {
|
function editProjectMemberComplete(data, status, headers) {
|
||||||
@ -71,6 +69,7 @@
|
|||||||
'currentUserId': '=',
|
'currentUserId': '=',
|
||||||
'roleName': '=',
|
'roleName': '=',
|
||||||
'projectId': '=',
|
'projectId': '=',
|
||||||
|
'delete': '&',
|
||||||
'reload': '&'
|
'reload': '&'
|
||||||
},
|
},
|
||||||
'controller': EditProjectMemberController,
|
'controller': EditProjectMemberController,
|
||||||
|
@ -12,13 +12,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="pane">
|
<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>
|
<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">
|
<div class="sub-pane">
|
||||||
<table class="table table-pane" >
|
<table class="table table-pane" >
|
||||||
<thead>
|
<thead>
|
||||||
<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.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>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,17 +6,19 @@
|
|||||||
.module('harbor.project.member')
|
.module('harbor.project.member')
|
||||||
.directive('listProjectMember', listProjectMember);
|
.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;
|
var vm = this;
|
||||||
|
|
||||||
vm.isOpen = false;
|
vm.isOpen = false;
|
||||||
vm.search = search;
|
vm.search = search;
|
||||||
vm.addProjectMember = addProjectMember;
|
vm.addProjectMember = addProjectMember;
|
||||||
|
vm.deleteProjectMember = deleteProjectMember;
|
||||||
|
vm.deleteMember = deleteMember
|
||||||
vm.retrieve = retrieve;
|
vm.retrieve = retrieve;
|
||||||
vm.username = '';
|
vm.username = '';
|
||||||
|
|
||||||
vm.projectId = getParameterByName('project_id', $location.absUrl());
|
vm.projectId = getParameterByName('project_id', $location.absUrl());
|
||||||
vm.retrieve();
|
vm.retrieve();
|
||||||
|
|
||||||
@ -38,6 +40,30 @@
|
|||||||
vm.isOpen = true;
|
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() {
|
function retrieve() {
|
||||||
ListProjectMemberService(vm.projectId, {'username': vm.username})
|
ListProjectMemberService(vm.projectId, {'username': vm.username})
|
||||||
|
@ -128,5 +128,7 @@ var locale_messages = {
|
|||||||
'to_harbor': ' to Harbor!',
|
'to_harbor': ' to Harbor!',
|
||||||
'continue' : 'Continue',
|
'continue' : 'Continue',
|
||||||
'no_projects_add_new_project': 'No projects, add new project now.',
|
'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?'
|
||||||
};
|
};
|
@ -126,5 +126,7 @@ var locale_messages = {
|
|||||||
'to_harbor': ' 使用Harbor!',
|
'to_harbor': ' 使用Harbor!',
|
||||||
'continue' : '继续',
|
'continue' : '继续',
|
||||||
'no_projects_add_new_project': '当前没有项目,请新增项目。',
|
'no_projects_add_new_project': '当前没有项目,请新增项目。',
|
||||||
'no_repositories': '未发现镜像,请用"docker push"命令上传镜像。'
|
'no_repositories': '未发现镜像,请用"docker push"命令上传镜像。',
|
||||||
|
'confirm_to_delete_member_title': '删除项目成员',
|
||||||
|
'confirm_to_delete_member': '确认删除当前项目成员吗?'
|
||||||
};
|
};
|
@ -18,7 +18,7 @@
|
|||||||
};
|
};
|
||||||
var isSupportLanguage = function(language) {
|
var isSupportLanguage = function(language) {
|
||||||
for (var i in supportLanguages) {
|
for (var i in supportLanguages) {
|
||||||
if(language === i) {
|
if(language === String(i)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,6 +47,9 @@
|
|||||||
}
|
}
|
||||||
return supportLanguages[language];
|
return supportLanguages[language];
|
||||||
},
|
},
|
||||||
|
'getSupportLanguages': function() {
|
||||||
|
return supportLanguages;
|
||||||
|
},
|
||||||
'unset': function(){
|
'unset': function(){
|
||||||
$cookies.put('language', defaultLanguage, cookieOptions);
|
$cookies.put('language', defaultLanguage, cookieOptions);
|
||||||
},
|
},
|
||||||
|
@ -8,9 +8,7 @@
|
|||||||
<li class="dropdown-submenu">
|
<li class="dropdown-submenu">
|
||||||
<a tabindex="-1" href="#"><span class="glyphicon glyphicon-globe"></span> //vm.languageName//</a>
|
<a tabindex="-1" href="#"><span class="glyphicon glyphicon-globe"></span> //vm.languageName//</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
{{ range $key, $value := .SupportLanguages }}
|
<li ng-repeat="(key, value) in vm.supportLanguages"><a href="javascript:void(0);" ng-click="vm.setLanguage(key)">// value //</a></li>
|
||||||
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('{{ $key }}')">{{ $value.Name }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
@ -23,9 +21,7 @@
|
|||||||
<span class="glyphicon glyphicon-globe"></span> //vm.languageName//
|
<span class="glyphicon glyphicon-globe"></span> //vm.languageName//
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
|
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
|
||||||
{{ range $key, $value := .SupportLanguages }}
|
<li ng-repeat="(key, value) in vm.supportLanguages"><a href="javascript:void(0);" ng-click="vm.setLanguage(key)">// value //</a></li>
|
||||||
<li><a href="javascript:void(0);" ng-click="vm.setLanguage('{{ $key }}')">{{ $value.Name }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
Loading…
Reference in New Issue
Block a user