Improve projects list
* Add search filtering for group projects * Show all user projects on dashboard * Refactor projects list into one view * Hide big list of projects with 'Show all' button
This commit is contained in:
parent
694ac54862
commit
65105ff3bb
10 changed files with 77 additions and 80 deletions
|
@ -1,22 +1,7 @@
|
||||||
class @Dashboard
|
class @Dashboard
|
||||||
constructor: ->
|
constructor: ->
|
||||||
@initSidebarTab()
|
@initSidebarTab()
|
||||||
|
new ProjectsList()
|
||||||
$(".dash-filter").keyup ->
|
|
||||||
terms = $(this).val()
|
|
||||||
uiBox = $(this).parents('.panel').first()
|
|
||||||
if terms == "" || terms == undefined
|
|
||||||
uiBox.find(".dash-list li").show()
|
|
||||||
else
|
|
||||||
uiBox.find(".dash-list li").each (index) ->
|
|
||||||
name = $(this).find(".filter-title").text()
|
|
||||||
|
|
||||||
if name.toLowerCase().search(terms.toLowerCase()) == -1
|
|
||||||
$(this).hide()
|
|
||||||
else
|
|
||||||
$(this).show()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
initSidebarTab: ->
|
initSidebarTab: ->
|
||||||
key = "dashboard_sidebar_filter"
|
key = "dashboard_sidebar_filter"
|
||||||
|
|
|
@ -62,9 +62,13 @@ class Dispatcher
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
when 'projects:commits:show'
|
when 'projects:commits:show'
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
when 'groups:show', 'projects:show'
|
when 'projects:show'
|
||||||
new Activities()
|
new Activities()
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
|
when 'groups:show'
|
||||||
|
new Activities()
|
||||||
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
|
new ProjectsList()
|
||||||
when 'groups:members'
|
when 'groups:members'
|
||||||
new GroupMembers()
|
new GroupMembers()
|
||||||
new UsersSelect()
|
new UsersSelect()
|
||||||
|
|
24
app/assets/javascripts/projects_list.js.coffee
Normal file
24
app/assets/javascripts/projects_list.js.coffee
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
class @ProjectsList
|
||||||
|
constructor: ->
|
||||||
|
$(".projects-list .js-expand").on 'click', (e) ->
|
||||||
|
e.preventDefault()
|
||||||
|
list = $(this).closest('.projects-list')
|
||||||
|
list.find("li").show()
|
||||||
|
list.find("li.bottom").hide()
|
||||||
|
|
||||||
|
$(".projects-list-filter").keyup ->
|
||||||
|
terms = $(this).val()
|
||||||
|
uiBox = $(this).closest('.panel')
|
||||||
|
if terms == "" || terms == undefined
|
||||||
|
uiBox.find(".projects-list li").show()
|
||||||
|
else
|
||||||
|
uiBox.find(".projects-list li").each (index) ->
|
||||||
|
name = $(this).find(".filter-title").text()
|
||||||
|
|
||||||
|
if name.toLowerCase().search(terms.toLowerCase()) == -1
|
||||||
|
$(this).hide()
|
||||||
|
else
|
||||||
|
$(this).show()
|
||||||
|
uiBox.find(".projects-list li.bottom").hide()
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
class @User
|
class @User
|
||||||
constructor: ->
|
constructor: ->
|
||||||
$('.profile-groups-avatars').tooltip("placement": "top")
|
$('.profile-groups-avatars').tooltip("placement": "top")
|
||||||
|
new ProjectsList()
|
||||||
|
|
|
@ -5,15 +5,11 @@ class DashboardController < ApplicationController
|
||||||
before_filter :event_filter, only: :show
|
before_filter :event_filter, only: :show
|
||||||
|
|
||||||
def show
|
def show
|
||||||
# Fetch only 30 projects.
|
@projects_limit = 20
|
||||||
# If user needs more - point to Dashboard#projects page
|
|
||||||
@projects_limit = 30
|
|
||||||
|
|
||||||
@groups = current_user.authorized_groups.order_name_asc
|
@groups = current_user.authorized_groups.order_name_asc
|
||||||
@has_authorized_projects = @projects.count > 0
|
@has_authorized_projects = @projects.count > 0
|
||||||
@projects_count = @projects.count
|
@projects_count = @projects.count
|
||||||
@projects = @projects.includes(:namespace).limit(@projects_limit)
|
@projects = @projects.includes(:namespace)
|
||||||
|
|
||||||
@last_push = current_user.recent_push
|
@last_push = current_user.recent_push
|
||||||
|
|
||||||
@publicish_project_count = Project.publicish(current_user).count
|
@publicish_project_count = Project.publicish(current_user).count
|
||||||
|
|
|
@ -1,25 +1,10 @@
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading.clearfix
|
.panel-heading.clearfix
|
||||||
.input-group
|
.input-group
|
||||||
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'dash-filter form-control'
|
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'projects-list-filter form-control'
|
||||||
- if current_user.can_create_project?
|
- if current_user.can_create_project?
|
||||||
.input-group-addon.dash-new-project
|
.input-group-addon.dash-new-project
|
||||||
= link_to new_project_path do
|
= link_to new_project_path do
|
||||||
%strong New project
|
%strong New project
|
||||||
|
|
||||||
%ul.well-list.dash-list
|
= render 'shared/projects_list', projects: @projects, projects_limit: 20
|
||||||
- projects.each do |project|
|
|
||||||
%li.project-row
|
|
||||||
= render "project", project: project
|
|
||||||
|
|
||||||
- if projects.blank?
|
|
||||||
%li
|
|
||||||
.nothing-here-block There are no projects here.
|
|
||||||
- if @projects_count > @projects_limit
|
|
||||||
%li.bottom
|
|
||||||
%span.light
|
|
||||||
#{@projects_limit} of #{pluralize(@projects_count, 'project')} displayed.
|
|
||||||
.pull-right
|
|
||||||
= link_to projects_dashboard_path do
|
|
||||||
Show all
|
|
||||||
%i.fa.fa-angle-right
|
|
||||||
|
|
|
@ -1,23 +1,10 @@
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading
|
.panel-heading.clearfix
|
||||||
Projects (#{projects.count})
|
.input-group
|
||||||
- if can? current_user, :create_projects, @group
|
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'projects-list-filter form-control'
|
||||||
.panel-head-actions
|
- if current_user.can_create_project?
|
||||||
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-new" do
|
.input-group-addon.dash-new-project
|
||||||
%i.fa.fa-plus
|
= link_to new_project_path(namespace_id: @group.id) do
|
||||||
New project
|
%strong New project
|
||||||
%ul.well-list
|
|
||||||
- if projects.blank?
|
= render 'shared/projects_list', projects: @projects, projects_limit: 20
|
||||||
.nothing-here-block This group has no projects yet
|
|
||||||
- projects.each do |project|
|
|
||||||
%li.project-row
|
|
||||||
= link_to project_path(project), class: dom_class(project) do
|
|
||||||
.dash-project-avatar
|
|
||||||
= project_icon(project, alt: '', class: 'avatar s40')
|
|
||||||
.dash-project-access-icon
|
|
||||||
= visibility_level_icon(project.visibility_level)
|
|
||||||
%span.str-truncated
|
|
||||||
%span.project-name
|
|
||||||
= project.name
|
|
||||||
%span.arrow
|
|
||||||
%i.fa.fa-angle-right
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
= link_to project_path(project), class: dom_class(project) do
|
= link_to project_path(project), class: dom_class(project) do
|
||||||
.dash-project-avatar
|
- if avatar
|
||||||
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
|
.dash-project-avatar
|
||||||
|
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
|
||||||
.dash-project-access-icon
|
.dash-project-access-icon
|
||||||
= visibility_level_icon(project.visibility_level)
|
= visibility_level_icon(project.visibility_level)
|
||||||
%span.str-truncated
|
%span.str-truncated
|
||||||
|
@ -10,5 +11,10 @@
|
||||||
\/
|
\/
|
||||||
%span.project-name.filter-title
|
%span.project-name.filter-title
|
||||||
= project.name
|
= project.name
|
||||||
%span.arrow
|
- if stars
|
||||||
%i.fa.fa-angle-right
|
%span.pull-right.light
|
||||||
|
%i.fa.fa-star
|
||||||
|
= project.star_count
|
||||||
|
- else
|
||||||
|
%span.arrow
|
||||||
|
%i.fa.fa-angle-right
|
17
app/views/shared/_projects_list.html.haml
Normal file
17
app/views/shared/_projects_list.html.haml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
- projects_limit = 20 unless local_assigns[:projects_limit]
|
||||||
|
- avatar = true unless local_assigns[:avatar] == false
|
||||||
|
- stars = false unless local_assigns[:stars] == true
|
||||||
|
%ul.well-list.projects-list
|
||||||
|
- projects.each_with_index do |project, i|
|
||||||
|
%li{class: (i >= projects_limit) ? 'project-row hide' : 'project-row'}
|
||||||
|
= render "shared/project", project: project, avatar: avatar, stars: stars
|
||||||
|
- if projects.blank?
|
||||||
|
%li
|
||||||
|
.nothing-here-block There are no projects here.
|
||||||
|
- if projects.count > projects_limit
|
||||||
|
%li.bottom
|
||||||
|
%span.light
|
||||||
|
#{projects_limit} of #{pluralize(projects.count, 'project')} displayed.
|
||||||
|
%span
|
||||||
|
= link_to '#', class: 'js-expand' do
|
||||||
|
Show all
|
|
@ -1,21 +1,13 @@
|
||||||
- if @contributed_projects.present?
|
- if @contributed_projects.present?
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading Projects contributed to
|
.panel-heading Projects contributed to
|
||||||
%ul.well-list
|
= render 'shared/projects_list',
|
||||||
- @contributed_projects.sort_by(&:star_count).reverse.each do |project|
|
projects: @contributed_projects.sort_by(&:star_count).reverse,
|
||||||
%li
|
projects_limit: 5, stars: true, avatar: false
|
||||||
= link_to_project project
|
|
||||||
%span.pull-right.light
|
|
||||||
%i.fa.fa-star
|
|
||||||
= project.star_count
|
|
||||||
|
|
||||||
- if @projects.present?
|
- if @projects.present?
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading Personal projects
|
.panel-heading Personal projects
|
||||||
%ul.well-list
|
= render 'shared/projects_list',
|
||||||
- @projects.sort_by(&:star_count).reverse.each do |project|
|
projects: @projects.sort_by(&:star_count).reverse,
|
||||||
%li
|
projects_limit: 10, stars: true, avatar: false
|
||||||
= link_to_project project
|
|
||||||
%span.pull-right.light
|
|
||||||
%i.fa.fa-star
|
|
||||||
= project.star_count
|
|
||||||
|
|
Loading…
Reference in a new issue