mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 20:15:59 +01:00 
			
		
		
		
	(refs #1370)Search repository by name
This commit is contained in:
		@@ -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))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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){
 | 
			
		||||
 
 | 
			
		||||
@@ -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 =>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								src/main/twirl/gitbucket/core/search/repositories.scala.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/main/twirl/gitbucket/core/search/repositories.scala.html
									
									
									
									
									
										Normal 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>
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -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 =>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user