Move the repository menu to the sidebar

This commit is contained in:
Naoki Takezoe
2016-03-27 19:05:09 +09:00
parent a581871a89
commit ba61891510
11 changed files with 202 additions and 221 deletions

View File

@@ -5,56 +5,52 @@
@import gitbucket.core.view.helpers._ @import gitbucket.core.view.helpers._
@html.main("Applications"){ @html.main("Applications"){
<div class="container body"> <div class="container body">
<div class="row"> @menu("application", settings.ssh)
<div class="col-md-3"> <div style="margin-left: 260px;">
@menu("application", settings.ssh) <div class="panel panel-default">
</div> <div class="panel-heading strong">Personal access tokens</div>
<div class="col-md-9"> <div class="panel-body">
<div class="panel panel-default"> @if(personalTokens.isEmpty && gneratedToken.isEmpty){
<div class="panel-heading strong">Personal access tokens</div> No tokens.
<div class="panel-body"> } else {
@if(personalTokens.isEmpty && gneratedToken.isEmpty){ Tokens you have generated that can be used to access the GitBucket API.
No tokens. <hr style="margin-top: 10px;">
} else { }
Tokens you have generated that can be used to access the GitBucket API. @gneratedToken.map{ case (token, tokenString) =>
<hr style="margin-top: 10px;"> <div class="alert alert-info">
} Make sure to copy your new personal access token now. You won't be able to see it again!
@gneratedToken.map{ case (token, tokenString) => </div>
<div class="alert alert-info"> <a href="@path/@account.userName/_personalToken/delete/@token.accessTokenId" class="btn btn-sm btn-danger pull-right">Delete</a>
Make sure to copy your new personal access token now. You won't be able to see it again! <div style="width: 50%;">
</div> @helper.html.copy("generated-token-copy", tokenString){
<a href="@path/@account.userName/_personalToken/delete/@token.accessTokenId" class="btn btn-sm btn-danger pull-right">Delete</a> <input type="text" value="@tokenString" class="form-control input-sm" readonly>
<div style="width: 50%;">
@helper.html.copy("generated-token-copy", tokenString){
<input type="text" value="@tokenString" class="form-control input-sm" readonly>
}
</div>
<hr style="margin-top: 10px;">
}
@personalTokens.zipWithIndex.map { case (token, i) =>
@if(i != 0){
<hr>
} }
<strong style="line-height: 30px;">@token.note</strong> </div>
<a href="@path/@account.userName/_personalToken/delete/@token.accessTokenId" class="btn btn-sm btn-danger pull-right">Delete</a> <hr style="margin-top: 10px;">
}
@personalTokens.zipWithIndex.map { case (token, i) =>
@if(i != 0){
<hr>
} }
<strong style="line-height: 30px;">@token.note</strong>
<a href="@path/@account.userName/_personalToken/delete/@token.accessTokenId" class="btn btn-sm btn-danger pull-right">Delete</a>
}
</div>
</div>
<form method="POST" action="@path/@account.userName/_personalToken" validate="true">
<div class="panel panel-default">
<div class="panel-heading strong">Generate new token</div>
<div class="panel-body">
<fieldset>
<label for="note" class="strong">Token description</label>
<div><span id="error-note" class="error"></span></div>
<input type="text" name="note" id="note" class="form-control"/>
<p class="muted">What's this token for?</p>
</fieldset>
<input type="submit" class="btn btn-success" value="Generate token"/>
</div> </div>
</div> </div>
<form method="POST" action="@path/@account.userName/_personalToken" validate="true"> </form>
<div class="panel panel-default">
<div class="panel-heading strong">Generate new token</div>
<div class="panel-body">
<fieldset>
<label for="note" class="strong">Token description</label>
<div><span id="error-note" class="error"></span></div>
<input type="text" name="note" id="note" class="form-control"/>
<p class="muted">What's this token for?</p>
</fieldset>
<input type="submit" class="btn btn-success" value="Generate token"/>
</div>
</div>
</form>
</div>
</div> </div>
</div> </div>
} }

View File

@@ -4,14 +4,11 @@
@import gitbucket.core.view.helpers._ @import gitbucket.core.view.helpers._
@html.main("Edit your profile"){ @html.main("Edit your profile"){
<div class="container body"> <div class="container body">
<div class="row"> @menu("profile", settings.ssh)
<div class="col-md-3"> <div style="margin-left: 260px;">
@menu("profile", settings.ssh) @helper.html.information(info)
</div> @if(LDAPUtil.isDummyMailAddress(account)){<div class="alert alert-danger">Please register your mail address.</div>}
<div class="col-md-9"> <form action="@url(account.userName)/_edit" method="POST" validate="true">
@helper.html.information(info)
@if(LDAPUtil.isDummyMailAddress(account)){<div class="alert alert-danger">Please register your mail address.</div>}
<form action="@url(account.userName)/_edit" method="POST" validate="true">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading strong">Profile</div> <div class="panel-heading strong">Profile</div>
<div class="panel-body"> <div class="panel-body">

View File

@@ -4,56 +4,51 @@
@import gitbucket.core.view.helpers._ @import gitbucket.core.view.helpers._
@html.main(account.userName){ @html.main(account.userName){
<div class="container body"> <div class="container body">
<div class="container-fluid"> <div style="float: left; width: 250px;">
<div class="row"> <div class="block">
<div class="col-md-4"> <div class="account-image">@avatar(account.userName, 240)</div>
<div class="block"> <div class="account-fullname">@account.fullName</div>
<div class="account-image">@avatar(account.userName, 270)</div> <div class="account-username">@account.userName</div>
<div class="account-fullname">@account.fullName</div>
<div class="account-username">@account.userName</div>
</div>
<div class="block">
@if(account.url.isDefined){
<div><i class="octicon octicon-home"></i> <a href="@account.url">@account.url</a></div>
}
<div><i class="octicon octicon-clock"></i> <span class="muted">Joined on</span> @date(account.registeredDate)</div>
</div>
@if(groupNames.nonEmpty){
<div>
<div>Groups</div>
@groupNames.map { groupName =>
@avatarLink(groupName, 36, tooltip = true)
}
</div>
}
</div>
<div class="col-md-8">
<ul class="nav nav-tabs" style="margin-bottom: 5px;">
<li@if(active == "repositories"){ class="active"}><a href="@url(account.userName)?tab=repositories">Repositories</a></li>
@if(account.isGroupAccount){
<li@if(active == "members"){ class="active"}><a href="@url(account.userName)?tab=members">Members</a></li>
} else {
<li@if(active == "activity"){ class="active"}><a href="@url(account.userName)?tab=activity">Public Activity</a></li>
}
@if(loginAccount.isDefined && loginAccount.get.userName == account.userName){
<li class="pull-right">
<div class="button-group">
<a href="@url(account.userName)/_edit" class="btn btn-default">Edit Your Profile</a>
</div>
</li>
}
@if(loginAccount.isDefined && account.isGroupAccount && isGroupManager){
<li class="pull-right">
<div class="button-group">
<a href="@url(account.userName)/_editgroup" class="btn btn-default">Edit Group</a>
</div>
</li>
}
</ul>
@body
</div>
</div> </div>
<div class="block">
@if(account.url.isDefined){
<div><i class="octicon octicon-home"></i> <a href="@account.url">@account.url</a></div>
}
<div><i class="octicon octicon-clock"></i> <span class="muted">Joined on</span> @date(account.registeredDate)</div>
</div>
@if(groupNames.nonEmpty){
<div>
<div>Groups</div>
@groupNames.map { groupName =>
@avatarLink(groupName, 36, tooltip = true)
}
</div>
}
</div>
<div style="margin-left: 260px; overflow: hidden;">
<ul class="nav nav-tabs" style="margin-bottom: 5px;">
<li@if(active == "repositories"){ class="active"}><a href="@url(account.userName)?tab=repositories">Repositories</a></li>
@if(account.isGroupAccount){
<li@if(active == "members"){ class="active"}><a href="@url(account.userName)?tab=members">Members</a></li>
} else {
<li@if(active == "activity"){ class="active"}><a href="@url(account.userName)?tab=activity">Public Activity</a></li>
}
@if(loginAccount.isDefined && loginAccount.get.userName == account.userName){
<li class="pull-right">
<div class="button-group">
<a href="@url(account.userName)/_edit" class="btn btn-default">Edit Your Profile</a>
</div>
</li>
}
@if(loginAccount.isDefined && account.isGroupAccount && isGroupManager){
<li class="pull-right">
<div class="button-group">
<a href="@url(account.userName)/_editgroup" class="btn btn-default">Edit Group</a>
</div>
</li>
}
</ul>
@body
</div> </div>
</div> </div>
} }

View File

@@ -1,6 +1,6 @@
@(active: String, ssh: Boolean)(implicit context: gitbucket.core.controller.Context) @(active: String, ssh: Boolean)(implicit context: gitbucket.core.controller.Context)
@import context._ @import context._
<div class="box"> <div style="float: left; width: 250px;">
<ul class="nav nav-pills nav-stacked"> <ul class="nav nav-pills nav-stacked">
<li@if(active=="profile"){ class="active"}> <li@if(active=="profile"){ class="active"}>
<a href="@path/@loginAccount.get.userName/_edit">Profile</a> <a href="@path/@loginAccount.get.userName/_edit">Profile</a>

View File

@@ -4,45 +4,41 @@
@import gitbucket.core.view.helpers._ @import gitbucket.core.view.helpers._
@html.main("SSH Keys"){ @html.main("SSH Keys"){
<div class="container body"> <div class="container body">
<div class="row"> @menu("ssh", settings.ssh)
<div class="col-md-3"> <div style="margin-left: 260px;">
@menu("ssh", settings.ssh) <div class="panel panel-default">
<div class="panel-heading strong">SSH Keys</div>
<div class="panel-body">
@if(sshKeys.isEmpty){
No keys
}
@sshKeys.zipWithIndex.map { case (key, i) =>
@if(i != 0){
<hr>
}
<strong style="line-height: 30px;">@key.title</strong> (@SshUtil.fingerPrint(key.publicKey).getOrElse("Key is invalid."))
<a href="@path/@account.userName/_ssh/delete/@key.sshKeyId" class="btn btn-sm btn-danger pull-right">Delete</a>
}
</div>
</div> </div>
<div class="col-md-9"> <form method="POST" action="@path/@account.userName/_ssh" validate="true">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading strong">SSH Keys</div> <div class="panel-heading strong">Add an SSH Key</div>
<div class="panel-body"> <div class="panel-body">
@if(sshKeys.isEmpty){ <fieldset class="form-group">
No keys <label for="title" class="strong">Title</label>
} <div><span id="error-title" class="error"></span></div>
@sshKeys.zipWithIndex.map { case (key, i) => <input type="text" name="title" id="title" class="form-control"/>
@if(i != 0){ </fieldset>
<hr> <fieldset class="form-group">
} <label for="publicKey" class="strong">Key</label>
<strong style="line-height: 30px;">@key.title</strong> (@SshUtil.fingerPrint(key.publicKey).getOrElse("Key is invalid.")) <div><span id="error-publicKey" class="error"></span></div>
<a href="@path/@account.userName/_ssh/delete/@key.sshKeyId" class="btn btn-sm btn-danger pull-right">Delete</a> <textarea name="publicKey" id="publicKey" class="form-control" style="height: 250px;"></textarea>
} </fieldset>
<input type="submit" class="btn btn-success" value="Add"/>
</div> </div>
</div> </div>
<form method="POST" action="@path/@account.userName/_ssh" validate="true"> </form>
<div class="panel panel-default">
<div class="panel-heading strong">Add an SSH Key</div>
<div class="panel-body">
<fieldset class="form-group">
<label for="title" class="strong">Title</label>
<div><span id="error-title" class="error"></span></div>
<input type="text" name="title" id="title" class="form-control"/>
</fieldset>
<fieldset class="form-group">
<label for="publicKey" class="strong">Key</label>
<div><span id="error-publicKey" class="error"></span></div>
<textarea name="publicKey" id="publicKey" class="form-control" style="height: 250px;"></textarea>
</fieldset>
<input type="submit" class="btn btn-success" value="Add"/>
</div>
</div>
</form>
</div>
</div> </div>
</div> </div>
} }

View File

@@ -1,25 +1,23 @@
@(active: String)(body: Html)(implicit context: gitbucket.core.controller.Context) @(active: String)(body: Html)(implicit context: gitbucket.core.controller.Context)
@import context._ @import context._
<div class="container body"> <div class="container body">
<div class="row"> <div style="width: 250px; float: left;">
<div class="col-md-3"> <ul class="nav nav-pills nav-stacked" id="system-admin-menu-container">
<ul class="nav nav-pills nav-stacked" id="system-admin-menu-container"> <li@if(active=="users"){ class="active"}>
<li@if(active=="users"){ class="active"}> <a href="@path/admin/users">User Management</a>
<a href="@path/admin/users">User Management</a> </li>
</li> <li@if(active=="system"){ class="active"}>
<li@if(active=="system"){ class="active"}> <a href="@path/admin/system">System Settings</a>
<a href="@path/admin/system">System Settings</a> </li>
</li> <li@if(active=="plugins"){ class="active"}>
<li@if(active=="plugins"){ class="active"}> <a href="@path/admin/plugins">Plugins</a>
<a href="@path/admin/plugins">Plugins</a> </li>
</li> <li>
<li> <a href="@path/console/login.jsp">H2 Console</a>
<a href="@path/console/login.jsp">H2 Console</a> </li>
</li> </ul>
</ul> </div>
</div> <div style="margin-left: 260px;">
<div class="col-md-9"> @body
@body
</div>
</div> </div>
</div> </div>

View File

@@ -44,7 +44,7 @@
<body> <body>
<form id="search" action="@path/search" method="POST" class="form-inline"> <form id="search" action="@path/search" method="POST" class="form-inline">
<nav class="navbar navbar-default"> <nav class="navbar navbar-default">
<div class="container" style="width: 980px;"> <div class="container">
@* TODO: for plugi-ins? @* TODO: for plugi-ins?
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span> <span class="icon-bar"></span>

View File

@@ -56,24 +56,27 @@
} }
} }
</div> </div>
<ul class="nav nav-tabs">
@menuitem("" ,"files" ,"Files")
@if(repository.commitCount != 0) {
@menuitem("/branches" ,"branches" ,"Branches", repository.branchList.length)
@menuitem("/tags" ,"tags" ,"Tags", repository.tags.length)
}
@menuitem("/issues" ,"issues" ,"Issues", repository.issueCount)
@menuitem("/pulls" ,"pulls" ,"Pull Requests", repository.pullCount)
@menuitem("/issues/labels" ,"labels" ,"Labels")
@menuitem("/issues/milestones" ,"milestones" ,"Milestones")
@menuitem("/wiki" ,"wiki" ,"Wiki")
@if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){
@menuitem("/settings" , "settings" , "Settings")
}
@menuitem("/network/members", "fork", "Forks", repository.forkedCount)
</ul>
</div> </div>
</div> </div>
<div class="container body"> <div class="container body">
@body <ul class="nav nav-pills nav-stacked" style="width: 250px; float: left;">
@menuitem("" ,"files" ,"Files")
@if(repository.commitCount != 0) {
@menuitem("/branches" ,"branches" ,"Branches", repository.branchList.length)
@menuitem("/tags" ,"tags" ,"Tags", repository.tags.length)
}
@menuitem("/issues" ,"issues" ,"Issues", repository.issueCount)
@menuitem("/pulls" ,"pulls" ,"Pull Requests", repository.pullCount)
@menuitem("/issues/labels" ,"labels" ,"Labels")
@menuitem("/issues/milestones" ,"milestones" ,"Milestones")
@menuitem("/wiki" ,"wiki" ,"Wiki")
@menuitem("/network/members", "fork", "Forks", repository.forkedCount)
@if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){
@menuitem("/settings" , "settings" , "Settings")
}
</ul>
<div style="margin-left: 260px;">
@body
</div>
</div> </div>

View File

@@ -1,31 +1,25 @@
@(active: String, repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(body: Html)(implicit context: gitbucket.core.controller.Context) @(active: String, repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(body: Html)(implicit context: gitbucket.core.controller.Context)
@import context._ @import context._
@import gitbucket.core.view.helpers._ @import gitbucket.core.view.helpers._
<div class="row"> <div style="overflow: hidden;">
<div class="col-md-3"> <ul class="nav nav-tabs" style="margin-bottom: 20px;">
<div class="box"> <li@if(active=="options"){ class="active"}>
<ul class="nav nav-pills nav-stacked"> <a href="@url(repository)/settings/options">Options</a>
<li@if(active=="options"){ class="active"}> </li>
<a href="@url(repository)/settings/options">Options</a> <li@if(active=="collaborators"){ class="active"}>
</li> <a href="@url(repository)/settings/collaborators">Collaborators</a>
<li@if(active=="collaborators"){ class="active"}> </li>
<a href="@url(repository)/settings/collaborators">Collaborators</a> @if(!repository.branchList.isEmpty){
</li> <li@if(active=="branches"){ class="active"}>
@if(!repository.branchList.isEmpty){ <a href="@url(repository)/settings/branches">Branches</a>
<li@if(active=="branches"){ class="active"}> </li>
<a href="@url(repository)/settings/branches">Branches</a> }
</li> <li@if(active=="hooks"){ class="active"}>
} <a href="@url(repository)/settings/hooks">Service Hooks</a>
<li@if(active=="hooks"){ class="active"}> </li>
<a href="@url(repository)/settings/hooks">Service Hooks</a> <li@if(active=="danger"){ class="active"}>
</li> <a href="@url(repository)/settings/danger">Danger Zone</a>
<li@if(active=="danger"){ class="active"}> </li>
<a href="@url(repository)/settings/danger">Danger Zone</a> </ul>
</li> @body
</ul> </div>
</div>
</div>
<div class="col-md-9">
@body
</div>
</div>

View File

@@ -10,23 +10,20 @@
@import gitbucket.core.service.WikiService.{wikiHttpUrl, wikiSshUrl} @import gitbucket.core.service.WikiService.{wikiHttpUrl, wikiSshUrl}
@html.main(s"${pageName} - ${repository.owner}/${repository.name}", Some(repository)){ @html.main(s"${pageName} - ${repository.owner}/${repository.name}", Some(repository)){
@html.menu("wiki", repository){ @html.menu("wiki", repository){
<ul class="nav nav-tabs fill-width"> <div>
<li> @if(hasWritePermission){
<h1 class="wiki-title">@pageName</h1> <div class="pull-right">
<div> <a class="btn btn-default" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a>
<span class="muted"><strong>@page.committer</strong> edited this page @helper.html.datetimeago(page.time)</span> <a class="btn btn-success" href="@url(repository)/wiki/_new">New Page</a>
</div> </div>
</li> }
<li class="pull-right"> <h1 class="wiki-title">@pageName</h1>
@if(hasWritePermission){ <div>
<div> <span class="muted"><strong>@page.committer</strong> edited this page @helper.html.datetimeago(page.time)</span>
<a class="btn btn-default" href="@url(repository)/wiki/@urlEncode(pageName)/_edit">Edit Page</a> </div>
<a class="btn btn-success" href="@url(repository)/wiki/_new">New Page</a> <hr>
</div> </div>
} <div style="width: 250px; margin-top: 20px;" class="pull-right pc">
</li>
</ul>
<div style="width: 200px; margin-top: 20px;" class="pull-right pc">
@defining(15){ max => @defining(15){ max =>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading strong"> <div class="panel-heading strong">
@@ -76,7 +73,7 @@
</div> </div>
} }
</div> </div>
<div style="width: 740px;" class="pull-left"> <div style="margin-right: 260px;">
<div class="markdown-body"> <div class="markdown-body">
@markdown( @markdown(
markdown = page.content, markdown = page.content,

View File

@@ -180,7 +180,12 @@ div.head div.forked {
} }
div.container { div.container {
/*
width: 980px; width: 980px;
*/
width: 100%;
padding-left: 10px;
padding-right: 10px;
} }
div.container-wide { div.container-wide {