(refs #1370)Search repository by name

This commit is contained in:
Naoki Takezoe
2016-12-18 00:41:18 +09:00
parent 4f4afc5686
commit 56a9b7b0f1
7 changed files with 88 additions and 28 deletions

View File

@@ -76,7 +76,7 @@ trait DashboardControllerBase extends ControllerBase {
},
filter,
getGroupNames(userName),
getVisibleRepositories(context.loginAccount, withoutPhysicalInfo = true),
Nil,
getUserRepositories(userName, withoutPhysicalInfo = true))
}
@@ -101,7 +101,7 @@ trait DashboardControllerBase extends ControllerBase {
},
filter,
getGroupNames(userName),
getVisibleRepositories(context.loginAccount, withoutPhysicalInfo = true),
Nil,
getUserRepositories(userName, withoutPhysicalInfo = true))
}

View File

@@ -160,4 +160,18 @@ trait IndexControllerBase extends ControllerBase {
}
}
})
get("/searchrepo"){
val query = params("query").trim.toLowerCase
val visibleRepositories = getVisibleRepositories(context.loginAccount, None)
val repositories = visibleRepositories.filter { repository =>
repository.name.toLowerCase.indexOf(query) >= 0 || repository.owner.toLowerCase.indexOf(query) >= 0
}
context.loginAccount.map { account =>
gitbucket.core.search.html.repositories(query, repositories, Nil, getUserRepositories(account.userName, withoutPhysicalInfo = true))
}.getOrElse {
gitbucket.core.search.html.repositories(query, repositories, visibleRepositories, Nil)
}
}
}

View File

@@ -12,9 +12,9 @@
@if(userRepositories.isEmpty){
<li>No repositories</li>
} else {
@defining(10){ max =>
<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) =>
<li class="repo-link" style="@if(i > max - 1){display:none;}">
<li class="repo-link">
@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>
} else {
@@ -22,30 +22,18 @@
}
</li>
}
@if(userRepositories.size > max){
<li class="show-more">
<a href="javascript:void(0);" id="show-more-repos">Show @{userRepositories.size - max} more repositories...</a>
</li>
}
}
}
} else {
<li class="header">Recent updated repositories</li>
@if(recentRepositories.isEmpty){
<li>No repositories</li>
} else {
@defining(10){ max =>
<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) =>
<li class="repo-link" style="@if(i > max - 1){display:none;}">
<li class="repo-link">
<a href="@helpers.url(repository)">@gitbucket.core.helper.html.repositoryicon(repository, false) @repository.owner/<span class="strong">@repository.name</span></a>
</li>
}
@if(recentRepositories.size > max){
<li class="show-more">
<a href="javascript:void(0);" id="show-more-recent-repos">Show @{recentRepositories.size - max} more repositories...</a>
</li>
}
}
}
}
</ul>
@@ -58,9 +46,21 @@
</div>
<script>
$(function(){
$('#show-more-repos, #show-more-recent-repos').click(function(e){
$(e.target).parents('ul').find('li.repo-link').show();
$(e.target).parents('li.show-more').remove();
$('#filter-box').keyup(function(){
var inputVal = $('#filter-box').val();
$.each($('li.repo-link a'), function(index, elem) {
console.log(inputVal);
console.log(elem.text.trim());
console.log(elem.text.trim().lastIndexOf(inputVal, 0));
if (!inputVal || !elem.text.trim() || elem.text.trim().indexOf(inputVal) >= 0) {
$(elem).parent().show();
} else {
$(elem).parent().hide();
}
});
});
$('form.sidebar-form').submit(function () {
return false;
});
});
</script>

View File

@@ -61,6 +61,12 @@
<input type="hidden" name="repository" value="@repository.name"/>
</div>
</form>
}.getOrElse {
<form id="search" action="@context.path/searchrepo" method="GET" class="pc navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" name="query" id="navbar-search-input" class="form-control" placeholder="Search repository"/>
</div>
</form>
}
<ul class="pc nav navbar-nav">
@if(context.loginAccount.isDefined){

View File

@@ -10,7 +10,7 @@
@if(issues.isEmpty) {
<h4>We couldn't find any code matching '@query'</h4>
} else {
<h4>We've found @issues.size code @helpers.plural(issues.size, "result")</h4>
<h4>We've found @issues.size @helpers.plural(issues.size, "issue")</h4>
}
}
@issues.drop((page - 1) * RepositorySearchService.IssueLimit).take(RepositorySearchService.IssueLimit).map { issue =>

View File

@@ -0,0 +1,40 @@
@(query: String,
repositories: List[gitbucket.core.service.RepositoryService.RepositoryInfo],
recentRepositories: List[gitbucket.core.service.RepositoryService.RepositoryInfo],
userRepositories: List[gitbucket.core.service.RepositoryService.RepositoryInfo])(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.view.helpers
@gitbucket.core.html.main("GitBucket"){
@gitbucket.core.dashboard.html.sidebar(recentRepositories, userRepositories){
<form action="@context.path/searchrepo" method="GET" class="form-inline">
<input type="text" name="query" value="@query" class="form-control" style="width: 250px; margin-bottom: 0px;"/>
<input type="submit" value="Search" class="btn btn-default"/>
</form>
@if(repositories.isEmpty) {
<h4>We couldn't find any repository matching '@query'</h4>
} else {
<h4>We've found @repositories.size @helpers.plural(repositories.size, "repository", "repositories")</h4>
}
@repositories.map { repository =>
<div class="block">
<div class="repository-icon">
@gitbucket.core.helper.html.repositoryicon(repository, true)
</div>
<div class="repository-content">
<div class="block-header">
<a href="@helpers.url(repository)">@repository.owner/@repository.name</a>
@if(repository.repository.isPrivate){
<i class="octicon octicon-lock"></i>
}
</div>
@if(repository.repository.originUserName.isDefined){
<div class="small muted">forked from <a href="@context.path/@repository.repository.parentUserName/@repository.repository.parentRepositoryName">@repository.repository.parentUserName/@repository.repository.parentRepositoryName</a></div>
}
@if(repository.repository.description.isDefined){
<div>@repository.repository.description</div>
}
<div><span class="muted small">Updated @gitbucket.core.helper.html.datetimeago(repository.repository.lastActivityDate)</span></div>
</div>
</div>
}
}
}

View File

@@ -10,7 +10,7 @@
@if(wikis.isEmpty) {
<h4>We couldn't find any code matching '@query'</h4>
} else {
<h4>We've found @wikis.size code @helpers.plural(wikis.size, "result")</h4>
<h4>We've found @wikis.size @helpers.plural(wikis.size, "page")</h4>
}
}
@wikis.drop((page - 1) * RepositorySearchService.CodeLimit).take(RepositorySearchService.CodeLimit).map { file =>