This commit is contained in:
Naoki Takezoe
2017-06-05 20:02:51 +09:00
parent 6c5777801f
commit bf7c93cd91
10 changed files with 98 additions and 136 deletions

View File

@@ -412,30 +412,4 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
*/ */
def readableSize(size: Option[Long]): String = FileUtil.readableSize(size.getOrElse(0)) def readableSize(size: Option[Long]): String = FileUtil.readableSize(size.getOrElse(0))
/**
*
* @param icon icon name: fa-* or octicon-*, for compatibility, it accepts name of octicon without octicon- prefix.
* @return icon tag String
*/
def menuicon(icon:String): Html = {
icon match {
case i if i.startsWith("fa-") =>
Html(s"""<i class="menu-icon fa ${i}"></i>""")
case i if i.startsWith("octicon-") =>
Html(s"""<i class="menu-icon octicon ${i}"></i>""")
case i =>
Html(s"""<i class="menu-icon octicon octicon-${i}"></i>""")
}
}
/**
* make menu icon with octicon/font-awesome with Option[String]
* @param icon icon name: fa-* or octicon-*, for compatibility, it accepts name of octicon without octicon- prefix.
* @param defaultIcon default name for icon == None
* @return icon tag String
*/
def menuicon(icon: Option[String], defaultIcon: String): Html = {
menuicon(icon.getOrElse(defaultIcon))
}
} }

View File

@@ -2,7 +2,6 @@
personalTokens: List[gitbucket.core.model.AccessToken], personalTokens: List[gitbucket.core.model.AccessToken],
gneratedToken: Option[(gitbucket.core.model.AccessToken, String)])(implicit context: gitbucket.core.controller.Context) gneratedToken: Option[(gitbucket.core.model.AccessToken, String)])(implicit context: gitbucket.core.controller.Context)
@gitbucket.core.html.main("Applications"){ @gitbucket.core.html.main("Applications"){
<div class="container body">
@gitbucket.core.account.html.menu("application", context.settings.ssh){ @gitbucket.core.account.html.menu("application", context.settings.ssh){
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading strong">Personal access tokens</div> <div class="panel-heading strong">Personal access tokens</div>
@@ -49,5 +48,4 @@
</div> </div>
</form> </form>
} }
</div>
} }

View File

@@ -2,7 +2,6 @@
@import gitbucket.core.util.LDAPUtil @import gitbucket.core.util.LDAPUtil
@import gitbucket.core.view.helpers @import gitbucket.core.view.helpers
@gitbucket.core.html.main("Edit your profile"){ @gitbucket.core.html.main("Edit your profile"){
<div class="container body">
@gitbucket.core.account.html.menu("profile", context.settings.ssh){ @gitbucket.core.account.html.menu("profile", context.settings.ssh){
@gitbucket.core.helper.html.information(info) @gitbucket.core.helper.html.information(info)
@gitbucket.core.helper.html.error(error) @gitbucket.core.helper.html.error(error)
@@ -61,7 +60,6 @@
</div> </div>
</form> </form>
} }
</div>
} }
<script> <script>
$(function(){ $(function(){

View File

@@ -1,33 +1,32 @@
@(active: String, ssh: Boolean)(body: Html)(implicit context: gitbucket.core.controller.Context) @(active: String, ssh: Boolean)(body: Html)(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.view.helpers
<div class="main-sidebar"> <div class="main-sidebar">
<div class="sidebar"> <div class="sidebar">
<ul class="sidebar-menu"> <ul class="sidebar-menu">
<li@if(active=="profile"){ class="active"}> <li class="menu-item-hover @if(active=="profile"){active}">
<a href="@context.path/@context.loginAccount.get.userName/_edit"> <a href="@context.path/@context.loginAccount.get.userName/_edit">
@helpers.menuicon("octicon-person") <i class="menu-icon octicon octicon-person"></i>
<span>Profile</span> <span>Profile</span>
</a> </a>
</li> </li>
@if(ssh){ @if(ssh){
<li@if(active=="ssh"){ class="active"}> <li class="menu-item-hover @if(active=="ssh"){active}">
<a href="@context.path/@context.loginAccount.get.userName/_ssh"> <a href="@context.path/@context.loginAccount.get.userName/_ssh">
@helpers.menuicon("key") <i class="menu-icon octicon octicon-key"></i>
<span>SSH Keys</span> <span>SSH Keys</span>
</a> </a>
</li> </li>
} }
<li@if(active=="application"){ class="active"}> <li class="menu-item-hover @if(active=="application"){active}">
<a href="@context.path/@context.loginAccount.get.userName/_application"> <a href="@context.path/@context.loginAccount.get.userName/_application">
@helpers.menuicon("rocket") <i class="menu-icon octicon octicon-rocket"></i>
<span>Applications</span> <span>Applications</span>
</a> </a>
</li> </li>
@gitbucket.core.plugin.PluginRegistry().getAccountSettingMenus.map { menu => @gitbucket.core.plugin.PluginRegistry().getAccountSettingMenus.map { menu =>
@menu(context).map { link => @menu(context).map { link =>
<li@if(active==link.id){ class="active"}> <li class="menu-item-hover @if(active==link.id){active}">
<a href="@context.path/@link.path"> <a href="@context.path/@link.path">
@helpers.menuicon(link.icon, "octicon-plug") <i class="menu-icon octicon octicon-plug"></i>
<span>@link.label</span> <span>@link.label</span>
</a> </a>
</li> </li>

View File

@@ -1,7 +1,6 @@
@(account: gitbucket.core.model.Account, sshKeys: List[gitbucket.core.model.SshKey])(implicit context: gitbucket.core.controller.Context) @(account: gitbucket.core.model.Account, sshKeys: List[gitbucket.core.model.SshKey])(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.ssh.SshUtil @import gitbucket.core.ssh.SshUtil
@gitbucket.core.html.main("SSH Keys"){ @gitbucket.core.html.main("SSH Keys"){
<div class="container body">
@gitbucket.core.account.html.menu("ssh", context.settings.ssh){ @gitbucket.core.account.html.menu("ssh", context.settings.ssh){
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading strong">SSH Keys</div> <div class="panel-heading strong">SSH Keys</div>
@@ -37,5 +36,4 @@
</div> </div>
</form> </form>
} }
</div>
} }

View File

@@ -1,37 +1,42 @@
@(active: String)(body: Html)(implicit context: gitbucket.core.controller.Context) @(active: String)(body: Html)(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.view.helpers
<div class="main-sidebar"> <div class="main-sidebar">
<div class="sidebar"> <div class="sidebar">
<ul class="sidebar-menu" id="system-admin-menu-container"> <ul class="sidebar-menu" id="system-admin-menu-container">
<li@if(active=="users"){ class="active"}> <li class="menu-item-hover @if(active=="users"){active}">
<a href="@context.path/admin/users"> <a href="@context.path/admin/users">
@helpers.menuicon("octicon-person")<span>User management</span> <i class="menu-icon octicon octicon-person"></i>
<span>User management</span>
</a> </a>
</li> </li>
<li@if(active=="system"){ class="active"}> <li class="menu-item-hover @if(active=="system"){active}">
<a href="@context.path/admin/system"> <a href="@context.path/admin/system">
@helpers.menuicon("octicon-gear")<span>System settings</span></a> <i class="menu-icon octicon octicon-gear"></i>
<span>System settings</span></a>
</li> </li>
<li@if(active=="plugins"){ class="active"}> <li class="menu-item-hover @if(active=="plugins"){active}">
<a href="@context.path/admin/plugins"> <a href="@context.path/admin/plugins">
@helpers.menuicon("octicon-plug")<span>Plugins</span> <i class="menu-icon octicon octicon-plug"></i>
<span>Plugins</span>
</a> </a>
</li> </li>
<li@if(active=="data"){ class="active"}> <li class="menu-item-hover @if(active=="data"){active}">
<a href="@context.path/admin/data"> <a href="@context.path/admin/data">
@helpers.menuicon("octicon-database")<span>Data export / import</span> <i class="menu-icon octicon octicon-database"></i>
<span>Data export / import</span>
</a> </a>
</li> </li>
<li> <li class="menu-item-hover">
<a href="@context.path/console/login.jsp" target="_blank"> <a href="@context.path/console/login.jsp" target="_blank">
@helpers.menuicon("octicon-database")<span>H2 console</span> <i class="menu-icon octicon octicon-database"></i>
<span>H2 console</span>
</a> </a>
</li> </li>
@gitbucket.core.plugin.PluginRegistry().getSystemSettingMenus.map { menu => @gitbucket.core.plugin.PluginRegistry().getSystemSettingMenus.map { menu =>
@menu(context).map { link => @menu(context).map { link =>
<li@if(active==link.id){ class="active"}> <li@if(active==link.id){ class="active"}>
<a href="@context.path/@link.path"> <a href="@context.path/@link.path">
@helpers.menuicon(link.icon, "octicon-plug")<span>@link.label</span> <i class="menu-icon octicon octicon-plug"></i>
<span>@link.label</span>
</a> </a>
</li> </li>
} }

View File

@@ -14,7 +14,7 @@
} else { } else {
<li><form class="sidebar-form"><input type="text" id="filter-box" class="form-control input-sm" placeholder="Find repository"/></form></li> <li><form class="sidebar-form"><input type="text" id="filter-box" class="form-control input-sm" placeholder="Find repository"/></form></li>
@userRepositories.zipWithIndex.map { case (repository, i) => @userRepositories.zipWithIndex.map { case (repository, i) =>
<li class="repo-link treeview"> <li class="menu-item-hover">
@if(repository.owner == context.loginAccount.get.userName){ @if(repository.owner == context.loginAccount.get.userName){
<a href="@helpers.url(repository)">@gitbucket.core.helper.html.repositoryicon(repository, false) <span class="strong">@repository.name</span></a> <a href="@helpers.url(repository)">@gitbucket.core.helper.html.repositoryicon(repository, false) <span class="strong">@repository.name</span></a>
} else { } else {
@@ -30,7 +30,7 @@
} else { } else {
<li><form class="sidebar-form"><input type="text" id="filter-box" class="form-control input-sm" placeholder="Find repository"/></form></li> <li><form class="sidebar-form"><input type="text" id="filter-box" class="form-control input-sm" placeholder="Find repository"/></form></li>
@recentRepositories.zipWithIndex.map { case (repository, i) => @recentRepositories.zipWithIndex.map { case (repository, i) =>
<li class="repo-link treeview"> <li class="menu-item-hover">
<a href="@helpers.url(repository)">@gitbucket.core.helper.html.repositoryicon(repository, false) <span>@repository.owner/<span class="strong">@repository.name</span></span></a> <a href="@helpers.url(repository)">@gitbucket.core.helper.html.repositoryicon(repository, false) <span>@repository.owner/<span class="strong">@repository.name</span></span></a>
</li> </li>
} }

View File

@@ -38,7 +38,7 @@
} }
<script src="@helpers.assets("/vendors/AdminLTE-2.3.8/js/app.js")" type="text/javascript"></script> <script src="@helpers.assets("/vendors/AdminLTE-2.3.8/js/app.js")" type="text/javascript"></script>
</head> </head>
<body class="skin-blue page-load sidebar-mini @if(context.sidebarCollapse){sidebar-collapse}"> <body class="skin-blue page-load @if(body.toString.contains("menu-item-hover")){sidebar-mini} @if(context.sidebarCollapse){sidebar-collapse}">
<div class="wrapper"> <div class="wrapper">
<header class="main-header"> <header class="main-header">
<a href="@context.path/" class="logo"> <a href="@context.path/" class="logo">

View File

@@ -6,85 +6,90 @@
@import gitbucket.core.view.helpers @import gitbucket.core.view.helpers
@menuitem(path: String, name: String, label: String, icon: String, count: Int = 0) = { @menuitem(path: String, name: String, label: String, icon: String, count: Int = 0) = {
<li class = "treeview @if(active == name){active}"> <li class = "menu-item-hover @if(active == name){active}">
@if(path.startsWith("http")){ @if(path.startsWith("http")){
<a href="@path" target="_blank"> <a href="@path" target="_blank">
@helpers.menuicon(icon) <i class="menu-icon octicon octicon-@icon"></i>
<span>@label</span> @if(count > 0){ <span class="label label-primary pull-right-container">@count</span> } <span>@label</span>
@if(count > 0){
<span class="pull-right-container"><span class="label label-primary pull-right-container">@count</span></span>
}
</a> </a>
} else { } else {
<a href="@helpers.url(repository)@path"> <a href="@helpers.url(repository)@path">
@helpers.menuicon(icon) <i class="menu-icon octicon octicon-@icon"></i>
<span>@label</span> @if(count > 0) { <span class="label label-primary pull-right-container">@count</span> } <span>@label</span>
@if(count > 0) {
<span class="pull-right-container"><span class="label label-primary pull-right">@count</span></span>
}
</a> </a>
} }
</li> </li>
} }
<div class="main-sidebar"> <div class="main-sidebar">
<div class="sidebar"> <div class="sidebar">
<ul class="sidebar-menu"> <ul class="sidebar-menu">
@menuitem("", "files", "Files", "code") @menuitem("", "files", "Files", "code")
@if(repository.branchList.nonEmpty) { @if(repository.branchList.nonEmpty) {
@menuitem("/branches", "branches", "Branches", "git-branch", repository.branchList.length) @menuitem("/branches", "branches", "Branches", "git-branch", repository.branchList.length)
@menuitem("/tags", "tags", "Tags", "tag", repository.tags.length) @menuitem("/tags", "tags", "Tags", "tag", repository.tags.length)
}
@if(repository.repository.options.issuesOption != "DISABLE") {
@menuitem("/issues", "issues", "Issues", "issue-opened", repository.issueCount)
@menuitem("/pulls", "pulls", "Pull requests", "git-pull-request", repository.pullCount)
@menuitem("/issues/labels", "labels", "Labels", "tag")
@menuitem("/issues/milestones", "milestones", "Milestones", "milestone")
} else {
@repository.repository.options.externalIssuesUrl.map { externalIssuesUrl =>
@menuitem(externalIssuesUrl, "issues", "Issues", "issue-opened")
} }
@if(repository.repository.options.issuesOption != "DISABLE") { }
@menuitem("/issues", "issues", "Issues", "issue-opened", repository.issueCount) @if(repository.repository.options.wikiOption != "DISABLE") {
@menuitem("/pulls", "pulls", "Pull requests", "git-pull-request", repository.pullCount) @menuitem("/wiki", "wiki", "Wiki", "book")
@menuitem("/issues/labels", "labels", "Labels", "tag") } else {
@menuitem("/issues/milestones", "milestones", "Milestones", "milestone") @repository.repository.options.externalWikiUrl.map { externalWikiUrl =>
} else { @menuitem(externalWikiUrl, "wiki", "Wiki", "book")
@repository.repository.options.externalIssuesUrl.map { externalIssuesUrl =>
@menuitem(externalIssuesUrl, "issues", "Issues", "issue-opened")
}
} }
@if(repository.repository.options.wikiOption != "DISABLE") { }
@menuitem("/wiki", "wiki", "Wiki", "book") @if(repository.repository.options.allowFork) {
} else { @menuitem("/network/members", "fork", "Forks", "repo-forked", repository.forkedCount)
@repository.repository.options.externalWikiUrl.map { externalWikiUrl => }
@menuitem(externalWikiUrl, "wiki", "Wiki", "book") @if(context.loginAccount.isDefined && (context.loginAccount.get.isAdmin || repository.managers.contains(context.loginAccount.get.userName))){
} @menuitem("/settings", "settings", "Settings", "tools")
}
@gitbucket.core.plugin.PluginRegistry().getRepositoryMenus.map { menu =>
@menu(repository, context).map { link =>
@menuitem(link.path, link.id, link.label, link.icon.getOrElse("ruby"))
} }
@if(repository.repository.options.allowFork) { }
@menuitem("/network/members", "fork", "Forks", "repo-forked", repository.forkedCount) </ul>
}
@if(context.loginAccount.isDefined && (context.loginAccount.get.isAdmin || repository.managers.contains(context.loginAccount.get.userName))){
@menuitem("/settings", "settings", "Settings", "tools")
}
@gitbucket.core.plugin.PluginRegistry().getRepositoryMenus.map { menu =>
@menu(repository, context).map { link =>
@menuitem(link.path, link.id, link.label, link.icon.getOrElse("ruby"))
}
}
</ul>
</div>
</div> </div>
<div class="content-wrapper"> </div>
<div class="content body clearfix"> <div class="content-wrapper">
<div class="headbar"> <div class="content body clearfix">
<div class="container"> <div class="headbar">
@gitbucket.core.helper.html.information(info) <div class="container">
@gitbucket.core.helper.html.error(error) @gitbucket.core.helper.html.information(info)
<div class="head"> @gitbucket.core.helper.html.error(error)
@gitbucket.core.helper.html.repositoryicon(repository, true) <div class="head">
<a href="@helpers.url(repository.owner)">@repository.owner</a> / <a href="@helpers.url(repository)" class="strong">@repository.name</a> @gitbucket.core.helper.html.repositoryicon(repository, true)
<a href="@helpers.url(repository.owner)">@repository.owner</a> / <a href="@helpers.url(repository)" class="strong">@repository.name</a>
@defining(repository.repository){ x => @defining(repository.repository){ x =>
@if(repository.repository.originRepositoryName.isDefined){ @if(repository.repository.originRepositoryName.isDefined){
<div class="forked"> <div class="forked">
forked from <a href="@context.path/@x.parentUserName/@x.parentRepositoryName">@x.parentUserName/@x.parentRepositoryName</a> forked from <a href="@context.path/@x.parentUserName/@x.parentRepositoryName">@x.parentUserName/@x.parentRepositoryName</a>
</div> </div>
}
@x.description.map { description =>
<div class="normal muted" style="margin-left: 36px; font-size: 80%;">@Html(helpers.detectAndRenderLinks(description, repository))</div>
}
} }
</div> @x.description.map { description =>
<div class="normal muted" style="margin-left: 36px; font-size: 80%;">@Html(helpers.detectAndRenderLinks(description, repository))</div>
}
}
</div> </div>
</div> </div>
@body
</div> </div>
@body
</div> </div>
</div> </div>

View File

@@ -264,16 +264,6 @@ div.box-content {
border-radius: 3px; border-radius: 3px;
} }
li.repo-link, li.page-link {
padding-top: 4px;
padding-bottom: 4px;
white-space: nowrap;
text-overflow: ellipsis;
}
body:not(.sidebar-collapse) li.repo-link, li.page-link{
overflow: hidden;
}
div.box-content-bottom { div.box-content-bottom {
background-color: white; background-color: white;
border: 1px solid #d8d8d8; border: 1px solid #d8d8d8;
@@ -1845,19 +1835,14 @@ body.page-load * {
transition: none !important; transition: none !important;
} }
body.sidebar-collapse .main-sidebar li.treeview:not(:hover) span.label.pull-right-container { body.sidebar-collapse .main-sidebar li.menu-item-hover:not(:hover) span.pull-right-container {
display: inline !important; display: inline !important;
position: absolute; position: absolute;
top: 9px; top: 8px;
right: 7px; right: 0px;
text-align: center;
font-size: 9px; font-size: 9px;
padding: 2px 3px;
line-height: .9;
} }
body.sidebar-collapse .main-sidebar li.treeview:hover span.label.pull-right-container { body.sidebar-collapse .main-sidebar li.treeview:not(:hover) span.pull-right-container span.label {
left: 180px !important; padding: 2px 4px;
margin-left: 0px;
padding: 12px 20px 12px 20px;
} }