| @@ -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" .}} | |||