@@ -324,9 +324,10 @@ form.name_pattern_not_allowed = Repository name pattern '%s' is not allowed. | |||
need_auth = Need Authorization | |||
migrate_type = Migration Type | |||
migrate_type_helper = This repository will be a <span class="label label-blue label-radius">mirror</span> | |||
migrate_type_helper = This repository will be a <span class="text blue">mirror</span> | |||
migrate_repo = Migrate Repository | |||
migrate.clone_address = Clone Address | |||
migrate.clone_address_desc = This can be a HTTP/HTTPS/GIT URL or local server path. | |||
migrate.invalid_local_path = Invalid local path, it does not exist or not a directory. | |||
forked_from = forked from |
@@ -118,7 +118,6 @@ function initCommentForm() { | |||
$(this).removeClass('selected active') | |||
}); | |||
if (has_update_action) { | |||
updateIssueMeta($menu.data('update-url'), '', ''); | |||
} | |||
@@ -173,6 +172,15 @@ function initRepository() { | |||
return; | |||
} | |||
// New migrate | |||
if ($('.repository.new.migrate').length > 0) { | |||
// Clear browser autocomplete. | |||
if ($('#auth_username').data('need-clear')) { | |||
$('#auth_username').val(''); | |||
$('#auth_password').val(''); | |||
} | |||
} | |||
// Labels | |||
if ($('.repository.labels').length > 0) { | |||
// Create label |
@@ -74,6 +74,9 @@ img { | |||
&.red { | |||
color: #d95c5c!important; | |||
} | |||
&.blue { | |||
color: #428bca!important; | |||
} | |||
&.grey { | |||
color: #767676!important; | |||
a { |
@@ -12,39 +12,45 @@ | |||
margin-top: -5px; | |||
} | |||
} | |||
.repository.new.fork { | |||
form { | |||
margin: auto; | |||
width: 800px!important; | |||
.ui.message { | |||
text-align: center; | |||
} | |||
@input-padding: 250px !important; | |||
.header { | |||
padding-left: @input-padding+30px; | |||
} | |||
.inline.field > label { | |||
text-align: right; | |||
width: @input-padding; | |||
word-wrap: break-word; | |||
} | |||
.help { | |||
margin-left: @input-padding+10px; | |||
} | |||
.dropdown { | |||
.dropdown.icon { | |||
margin-top: -7px!important; | |||
.repository { | |||
&.new.migrate, | |||
&.new.fork { | |||
form { | |||
margin: auto; | |||
width: 800px!important; | |||
.ui.message { | |||
text-align: center; | |||
} | |||
@input-padding: 250px !important; | |||
.header { | |||
padding-left: @input-padding+30px; | |||
} | |||
.inline.field > label { | |||
text-align: right; | |||
width: @input-padding; | |||
word-wrap: break-word; | |||
} | |||
.text { | |||
margin-right: 0!important; | |||
i { | |||
.help { | |||
margin-left: @input-padding+15px; | |||
} | |||
.dropdown { | |||
.dropdown.icon { | |||
margin-top: -7px!important; | |||
} | |||
.text { | |||
margin-right: 0!important; | |||
i { | |||
margin-right: 0!important; | |||
} | |||
} | |||
} | |||
} | |||
input, | |||
textarea { | |||
width: 50%!important; | |||
.optional .title { | |||
margin-left: @input-padding; | |||
} | |||
input, | |||
textarea { | |||
width: 50%!important; | |||
} | |||
} | |||
} | |||
} |
@@ -216,7 +216,7 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) { | |||
if strings.Contains(err.Error(), "Authentication failed") { | |||
ctx.Data["Err_Auth"] = true | |||
ctx.RenderWithErr(ctx.Tr("form.auth_failed", err), MIGRATE, &form) | |||
ctx.RenderWithErr(ctx.Tr("form.auth_failed", strings.Replace(err.Error(), ":"+form.AuthPassword+"@", ":<password>@", 1)), MIGRATE, &form) | |||
return | |||
} | |||
@@ -108,7 +108,7 @@ | |||
<!-- Optional Settings --> | |||
<h4 class="ui dividing header">{{.i18n.Tr "install.optional_title"}}</h4> | |||
<div class="ui accordion optional field"> | |||
<div class="title {{if .Err_SMTP}}text-error{{end}}"> | |||
<div class="title {{if .Err_SMTP}}text red{{end}}"> | |||
<i class="icon dropdown"></i> | |||
{{.i18n.Tr "install.email_title"}} | |||
</div> | |||
@@ -173,7 +173,7 @@ | |||
</div> | |||
<div class="ui accordion optional field"> | |||
<div class="title {{if .Err_Admin}}text-error{{end}}"> | |||
<div class="title {{if .Err_Admin}}text red{{end}}"> | |||
<i class="icon dropdown"></i> | |||
{{.i18n.Tr "install.admin_title"}} | |||
</div> |
@@ -1,82 +1,97 @@ | |||
{{template "ng/base/head" .}} | |||
{{template "ng/base/header" .}} | |||
<div id="repo-wrapper"> | |||
<form id="repo-migrate-form" class="form form-align panel panel-radius" action="{{AppSubUrl}}/repo/migrate" method="post"> | |||
{{.CsrfTokenHtml}} | |||
<div class="panel-header"><h2>{{.i18n.Tr "new_migrate"}}</h2></div> | |||
<div class="panel-content"> | |||
{{template "ng/base/alert" .}} | |||
<div class="field"> | |||
<label class="req" for="clone_addr">{{.i18n.Tr "repo.migrate.clone_address"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_CloneAddr}}ipt-error{{end}}" id="clone_addr" name="clone_addr" type="text" value="{{.clone_addr}}" required /> | |||
{{template "base/head" .}} | |||
<div class="repository new migrate"> | |||
<div class="ui middle very relaxed page grid"> | |||
<div class="column"> | |||
<form class="ui form" action="{{.Link}}" method="post"> | |||
{{.CsrfTokenHtml}} | |||
<h3 class="ui top attached header"> | |||
{{.i18n.Tr "new_migrate"}} | |||
</h3> | |||
<div class="ui attached segment"> | |||
{{template "base/alert" .}} | |||
<div class="inline required field {{if .Err_CloneAddr}}error{{end}}"> | |||
<label for="clone_addr">{{.i18n.Tr "repo.migrate.clone_address"}}</label> | |||
<input id="clone_addr" name="clone_addr" value="{{.clone_addr}}" autofocus required> | |||
<span class="help">{{.i18n.Tr "repo.migrate.clone_address_desc"}}</span> | |||
</div> | |||
<div class="ui accordion optional field"> | |||
<div class="title {{if .Err_Auth}}text red active{{end}}"> | |||
<i class="icon dropdown"></i> | |||
{{.i18n.Tr "repo.need_auth"}} | |||
</div> | |||
<div class="field"> | |||
<span class="form-label"></span> | |||
<button class="btn btn-large btn-gray btn-radius" id="auth-button" data-toggle="collapse" data-target="#repo-import-auth">{{.i18n.Tr "repo.need_auth"}}</button> | |||
<div id="repo-migrate-auth" {{if not .Err_Auth}}class="hide"{{end}}> | |||
<div class="field"> | |||
<label for="auth_username">{{.i18n.Tr "username"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_Auth}}ipt-error{{end}}" id="auth_username" name="auth_username" type="text" value="{{.auth_username}}" /> | |||
</div> | |||
<div class="field"> | |||
<label for="auth_password">{{.i18n.Tr "password"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_Auth}}ipt-error{{end}}" id="auth_password" name="auth_password" type="password" value="{{.auth_password}}" /> | |||
</div> | |||
</div> | |||
<div class="content {{if .Err_Auth}}active{{end}}"> | |||
<div class="inline field {{if .Err_Auth}}error{{end}}"> | |||
<label for="auth_username">{{.i18n.Tr "username"}}</label> | |||
<input id="auth_username" name="auth_username" value="{{.auth_username}}123" {{if not .auth_username}}data-need-clear="true"{{end}}> | |||
</div> | |||
<div class="inline field {{if .Err_Auth}}error{{end}}"> | |||
<label for="auth_password">{{.i18n.Tr "password"}}</label> | |||
<input id="auth_password" name="auth_password" type="password" value="{{.auth_password}}"> | |||
</div> | |||
</div> | |||
<hr/> | |||
<div class="field"> | |||
<label for="owner" class="req">{{.i18n.Tr "repo.owner"}}</label> | |||
<input id="repo-owner-id" type="hidden" name="uid" value="{{.ContextUser.Id}}" /> | |||
<div class="inline-block drop"> | |||
<a href="#" class="drop-bottom"> | |||
<img class="avatar" src="{{.ContextUser.AvatarLink}}" id="repo-owner-avatar" alt="user-avatar"> | |||
<strong id="repo-owner-name">{{.ContextUser.Name}}</strong> | |||
</a> | |||
<ul class="drop-down menu menu-vertical menu-radius switching-list" id="repo-create-owner-list"> | |||
<li {{if eq $.ContextUser.Id .SignedUser.Id}}class="checked"{{end}} data-uid="{{.SignedUser.Id}}"> | |||
<a> | |||
<i class="octicon octicon-check"></i> | |||
<img class="avatar" src="{{.SignedUser.AvatarLink}}" alt="user-avatar"> | |||
<strong>{{.SignedUser.Name}}</strong> | |||
</a> | |||
</li> | |||
{{range .Orgs}} | |||
<li {{if eq $.ContextUser.Id .Id}}class="checked"{{end}} data-uid="{{.Id}}"> | |||
<a> | |||
<i class="octicon octicon-check"></i> | |||
<img class="avatar" src="{{.AvatarLink}}" alt="user-avatar"> | |||
<strong>{{.Name}}</strong> | |||
</a> | |||
</li> | |||
{{end}} | |||
</ul> | |||
</div> | |||
</div> | |||
<div class="field"> | |||
<label class="req" for="repo-name">{{.i18n.Tr "repo.repo_name"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_RepoName}}ipt-error{{end}}" id="repo-name" name="repo_name" type="text" value="{{.repo_name}}" required /> | |||
</div> | |||
<div class="field"> | |||
<label for="visibility">{{.i18n.Tr "repo.visibility"}}</label> | |||
<input class="ipt-chk" id="visibility" name="private" type="checkbox" {{if .private}}checked{{end}} /> | |||
<span>{{.i18n.Tr "repo.visiblity_helper" | Str2html}}</span> | |||
</div> | |||
<div class="field"> | |||
<label for="migrate_type">{{.i18n.Tr "repo.migrate_type"}}</label> | |||
<input class="ipt-chk" id="migrate_type" name="mirror" type="checkbox" {{if .mirror}}checked{{end}} /> | |||
<span>{{.i18n.Tr "repo.migrate_type_helper" | Str2html}}</span> | |||
</div> | |||
<div class="field clear"> | |||
<label class="left" for="description">{{.i18n.Tr "repo.repo_desc"}}</label> | |||
<textarea class="ipt ipt-large ipt-radius {{if .Err_Description}}ipt-error{{end}}" id="description" name="description">{{.description}}</textarea> | |||
</div> | |||
<div class="field"> | |||
<label for="repo-create-submit"></label> | |||
<button class="btn btn-large btn-blue btn-radius" id="repo-create-submit">{{.i18n.Tr "repo.migrate_repo"}}</button> | |||
<a class="btn btn-small btn-gray btn-radius" id="repo-create-cancel" href="{{AppSubUrl}}/"><strong>{{.i18n.Tr "cancel"}}</strong></a> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
<div class="ui divider"></div> | |||
<div class="inline required field {{if .Err_Owner}}error{{end}}"> | |||
<label>{{.i18n.Tr "repo.owner"}}</label> | |||
<div class="ui selection dropdown"> | |||
<input type="hidden" id="uid" name="uid" value="{{.ContextUser.Id}}" required> | |||
<span class="text"> | |||
<img class="ui mini image" src="{{.ContextUser.AvatarLink}}"> | |||
{{.ContextUser.Name}} | |||
</span> | |||
<i class="dropdown icon"></i> | |||
<div class="menu"> | |||
<div class="item" data-value="{{.SignedUser.Id}}"> | |||
<img class="ui mini image" src="{{.SignedUser.AvatarLink}}"> | |||
{{.SignedUser.Name}} | |||
</div> | |||
{{range .Orgs}} | |||
{{if .IsOwnedBy $.SignedUser.Id}} | |||
<div class="item" data-value="{{.Id}}"> | |||
<img class="ui mini image" src="{{.AvatarLink}}"> | |||
{{.Name}} | |||
</div> | |||
{{end}} | |||
{{end}} | |||
</div> | |||
</div> | |||
</div> | |||
<div class="inline required field {{if .Err_RepoName}}error{{end}}"> | |||
<label for="repo_name">{{.i18n.Tr "repo.repo_name"}}</label> | |||
<input id="repo_name" name="repo_name" value="{{.repo_name}}" required> | |||
</div> | |||
<div class="inline field"> | |||
<label>{{.i18n.Tr "repo.visibility"}}</label> | |||
<div class="ui toggle checkbox"> | |||
<input name="private" type="checkbox" {{if .private}}checked{{end}}> | |||
<label>{{.i18n.Tr "repo.visiblity_helper" | Safe}}</label> | |||
</div> | |||
</div> | |||
<div class="inline field"> | |||
<label>{{.i18n.Tr "repo.migrate_type"}}</label> | |||
<div class="ui toggle checkbox"> | |||
<input name="mirror" type="checkbox" {{if .mirror}}checked{{end}}> | |||
<label>{{.i18n.Tr "repo.migrate_type_helper" | Safe}}</label> | |||
</div> | |||
</div> | |||
<div class="inline field {{if .Err_Description}}error{{end}}"> | |||
<label for="description">{{.i18n.Tr "repo.repo_desc"}}</label> | |||
<textarea id="description" name="description">{{.description}}</textarea> | |||
</div> | |||
<div class="inline field"> | |||
<label></label> | |||
<button class="ui green button"> | |||
{{.i18n.Tr "repo.migrate_repo"}} | |||
</button> | |||
<a class="ui button" href="{{AppSubUrl}}/">{{.i18n.Tr "cancel"}}</a> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
</div> | |||
{{template "ng/base/footer" .}} | |||
{{template "base/footer" .}} |
@@ -0,0 +1,82 @@ | |||
{{template "ng/base/head" .}} | |||
{{template "ng/base/header" .}} | |||
<div id="repo-wrapper"> | |||
<form id="repo-migrate-form" class="form form-align panel panel-radius" action="{{AppSubUrl}}/repo/migrate" method="post"> | |||
{{.CsrfTokenHtml}} | |||
<div class="panel-header"><h2>{{.i18n.Tr "new_migrate"}}</h2></div> | |||
<div class="panel-content"> | |||
{{template "ng/base/alert" .}} | |||
<div class="field"> | |||
<label class="req" for="clone_addr">{{.i18n.Tr "repo.migrate.clone_address"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_CloneAddr}}ipt-error{{end}}" id="clone_addr" name="clone_addr" type="text" value="{{.clone_addr}}" required /> | |||
</div> | |||
<div class="field"> | |||
<span class="form-label"></span> | |||
<button class="btn btn-large btn-gray btn-radius" id="auth-button" data-toggle="collapse" data-target="#repo-import-auth">{{.i18n.Tr "repo.need_auth"}}</button> | |||
<div id="repo-migrate-auth" {{if not .Err_Auth}}class="hide"{{end}}> | |||
<div class="field"> | |||
<label for="auth_username">{{.i18n.Tr "username"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_Auth}}ipt-error{{end}}" id="auth_username" name="auth_username" type="text" value="{{.auth_username}}" /> | |||
</div> | |||
<div class="field"> | |||
<label for="auth_password">{{.i18n.Tr "password"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_Auth}}ipt-error{{end}}" id="auth_password" name="auth_password" type="password" value="{{.auth_password}}" /> | |||
</div> | |||
</div> | |||
</div> | |||
<hr/> | |||
<div class="field"> | |||
<label for="owner" class="req">{{.i18n.Tr "repo.owner"}}</label> | |||
<input id="repo-owner-id" type="hidden" name="uid" value="{{.ContextUser.Id}}" /> | |||
<div class="inline-block drop"> | |||
<a href="#" class="drop-bottom"> | |||
<img class="avatar" src="{{.ContextUser.AvatarLink}}" id="repo-owner-avatar" alt="user-avatar"> | |||
<strong id="repo-owner-name">{{.ContextUser.Name}}</strong> | |||
</a> | |||
<ul class="drop-down menu menu-vertical menu-radius switching-list" id="repo-create-owner-list"> | |||
<li {{if eq $.ContextUser.Id .SignedUser.Id}}class="checked"{{end}} data-uid="{{.SignedUser.Id}}"> | |||
<a> | |||
<i class="octicon octicon-check"></i> | |||
<img class="avatar" src="{{.SignedUser.AvatarLink}}" alt="user-avatar"> | |||
<strong>{{.SignedUser.Name}}</strong> | |||
</a> | |||
</li> | |||
{{range .Orgs}} | |||
<li {{if eq $.ContextUser.Id .Id}}class="checked"{{end}} data-uid="{{.Id}}"> | |||
<a> | |||
<i class="octicon octicon-check"></i> | |||
<img class="avatar" src="{{.AvatarLink}}" alt="user-avatar"> | |||
<strong>{{.Name}}</strong> | |||
</a> | |||
</li> | |||
{{end}} | |||
</ul> | |||
</div> | |||
</div> | |||
<div class="field"> | |||
<label class="req" for="repo-name">{{.i18n.Tr "repo.repo_name"}}</label> | |||
<input class="ipt ipt-large ipt-radius {{if .Err_RepoName}}ipt-error{{end}}" id="repo-name" name="repo_name" type="text" value="{{.repo_name}}" required /> | |||
</div> | |||
<div class="field"> | |||
<label for="visibility">{{.i18n.Tr "repo.visibility"}}</label> | |||
<input class="ipt-chk" id="visibility" name="private" type="checkbox" {{if .private}}checked{{end}} /> | |||
<span>{{.i18n.Tr "repo.visiblity_helper" | Str2html}}</span> | |||
</div> | |||
<div class="field"> | |||
<label for="migrate_type">{{.i18n.Tr "repo.migrate_type"}}</label> | |||
<input class="ipt-chk" id="migrate_type" name="mirror" type="checkbox" {{if .mirror}}checked{{end}} /> | |||
<span>{{.i18n.Tr "repo.migrate_type_helper" | Str2html}}</span> | |||
</div> | |||
<div class="field clear"> | |||
<label class="left" for="description">{{.i18n.Tr "repo.repo_desc"}}</label> | |||
<textarea class="ipt ipt-large ipt-radius {{if .Err_Description}}ipt-error{{end}}" id="description" name="description">{{.description}}</textarea> | |||
</div> | |||
<div class="field"> | |||
<label for="repo-create-submit"></label> | |||
<button class="btn btn-large btn-blue btn-radius" id="repo-create-submit">{{.i18n.Tr "repo.migrate_repo"}}</button> | |||
<a class="btn btn-small btn-gray btn-radius" id="repo-create-cancel" href="{{AppSubUrl}}/"><strong>{{.i18n.Tr "cancel"}}</strong></a> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
{{template "ng/base/footer" .}} |