Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
f63cc080e05b
Commit
338072cc
authored
May 26, 2016
by
Alfredo Sumaran
Browse files
Layout for Users Groups and Projects on admin area
parent
55f27f307272
Changes
21
Hide whitespace changes
Inline
Side-by-side
CHANGELOG
View file @
f63cc080
...
...
@@ -21,6 +21,7 @@ v 8.10.0 (unreleased)
- Fix pagination when sorting by columns with lots of ties (like priority)
- Updated project header design
- Exclude email check from the standard health check
- Updated layout for Projects, Groups, Users on Admin area !4424
- Fix changing issue state columns in milestone view
- Add notification settings dropdown for groups
- Allow importing from Github using Personal Access Tokens. (Eric K Idema)
...
...
app/assets/javascripts/dispatcher.js.coffee
View file @
f63cc080
...
...
@@ -127,7 +127,7 @@ class Dispatcher
when
'groups'
new
UsersSelect
()
when
'projects'
new
NamespaceSelect
()
new
NamespaceSelect
s
()
when
'dashboard'
,
'root'
shortcut_handler
=
new
ShortcutsDashboardNavigation
()
when
'profiles'
...
...
app/assets/javascripts/namespace_select.js.coffee
View file @
f63cc080
class
@
NamespaceSelect
constructor
:
->
namespaceFormatResult
=
(
namespace
)
->
markup
=
"<div class='namespace-result'>"
markup
+=
"<span class='namespace-kind'>"
+
namespace
.
kind
+
"</span>"
markup
+=
"<span class='namespace-path'>"
+
namespace
.
path
+
"</span>"
markup
+=
"</div>"
markup
formatSelection
=
(
namespace
)
->
namespace
.
kind
+
": "
+
namespace
.
path
$
(
'.ajax-namespace-select'
).
each
(
i
,
select
)
->
$
(
select
).
select2
placeholder
:
"Search for namespace"
multiple
:
$
(
select
).
hasClass
(
'multiselect'
)
minimumInputLength
:
0
query
:
(
query
)
->
Api
.
namespaces
query
.
term
,
(
namespaces
)
->
data
=
{
results
:
namespaces
}
query
.
callback
(
data
)
dropdownCssClass
:
"ajax-namespace-dropdown"
formatResult
:
namespaceFormatResult
formatSelection
:
formatSelection
constructor
:
(
opts
)
->
{
@
dropdown
}
=
opts
showAny
=
true
fieldName
=
'namespace_id'
if
@
dropdown
.
data
'fieldName'
fieldName
=
@
dropdown
.
data
'fieldName'
@
dropdown
.
glDropdown
(
filterable
:
true
selectable
:
true
search
:
fields
:
[
'path'
]
fieldName
:
fieldName
toggleLabel
:
(
selected
)
->
return
if
not
selected
.
id
?
then
selected
.
text
else
"
#{
selected
.
kind
}
:
#{
selected
.
path
}
"
data
:
(
term
,
dataCallback
)
->
Api
.
namespaces
term
,
(
namespaces
)
->
if
showAny
anyNamespace
=
text
:
'Any namespace'
id
:
null
namespaces
.
unshift
(
anyNamespace
)
namespaces
.
splice
1
,
0
,
'divider'
dataCallback
(
namespaces
)
text
:
(
namespace
)
->
return
if
not
namespace
.
id
?
then
namespace
.
text
else
"
#{
namespace
.
kind
}
:
#{
namespace
.
path
}
"
renderRow
:
@
renderRow
clicked
:
@
onSelectItem
)
onSelectItem
:
(
item
,
el
,
e
)
=>
e
.
preventDefault
()
class
@
NamespaceSelects
constructor
:
(
opts
=
{})
->
{
@
$dropdowns
=
$
(
'.js-namespace-select'
)
}
=
opts
@
$dropdowns
.
each
(
i
,
dropdown
)
->
$dropdown
=
$
(
dropdown
)
new
NamespaceSelect
(
dropdown
:
$dropdown
)
app/assets/stylesheets/framework/dropdowns.scss
View file @
f63cc080
...
...
@@ -68,6 +68,10 @@
color
:
$dropdown-toggle-hover-icon-color
;
}
}
&
.large
{
width
:
200px
;
}
}
.dropdown-menu
,
...
...
app/assets/stylesheets/framework/nav.scss
View file @
f63cc080
...
...
@@ -134,6 +134,11 @@
margin-bottom
:
0
;
border-bottom
:
none
;
&
.wide
{
width
:
100%
;
display
:
block
;
}
li
a
{
padding
:
16px
10px
11px
;
}
...
...
@@ -164,6 +169,7 @@
>
.btn
{
margin-right
:
$gl-padding-top
;
display
:
inline-block
;
vertical-align
:
top
;
&
:last-child
{
margin-right
:
0
;
...
...
app/assets/stylesheets/pages/admin.scss
View file @
f63cc080
...
...
@@ -71,3 +71,36 @@
@extend
.broadcast-message
;
margin-bottom
:
20px
;
}
// Users List
.users-list
{
.user-row
{
display
:
-
webkit-flex
;
display
:
-
ms-flexbox
;
display
:
flex
;
}
.user-details
{
flex
:
1
1
auto
;
}
.user-name
{
display
:
inline-block
;
font-weight
:
bold
;
}
.controls
{
>
.btn
,
>
.dropdown
{
margin-left
:
5px
;
}
}
.dropdown
{
.btn-block
{
margin-bottom
:
0
;
line-height
:
inherit
;
}
}
}
app/assets/stylesheets/pages/groups.scss
View file @
f63cc080
...
...
@@ -38,6 +38,39 @@
margin-right
:
15px
;
}
}
&
.group-admin
{
display
:
-
webkit-flex
;
display
:
-
ms-flexbox
;
display
:
flex
;
.group-avatar
,
.group-details
,
.group-controls
{
display
:
-
webkit-flex
;
display
:
-
ms-flexbox
;
display
:
flex
;
}
.group-details
{
flex
:
1
1
auto
;
flex-direction
:
column
;
min-width
:
0
;
}
.group-controls
{
align-items
:
center
;
a
{
margin-left
:
5px
;
}
}
}
}
.ldap-group-links
{
.form-actions
{
margin-bottom
:
$gl-padding
;
}
}
.groups-cover-block
{
...
...
app/assets/stylesheets/pages/projects.scss
View file @
f63cc080
...
...
@@ -475,10 +475,6 @@ pre.light-well {
a
:hover
{
text-decoration
:
none
;
}
>
span
{
margin-left
:
10px
;
}
}
}
...
...
app/assets/stylesheets/pages/search.scss
View file @
f63cc080
...
...
@@ -208,7 +208,7 @@
margin-top
:
5px
;
@media
(
min-width
:
$screen-sm-min
)
{
width
:
1
6
0px
;
width
:
1
8
0px
;
margin-top
:
0
;
}
}
...
...
app/controllers/admin/projects_controller.rb
View file @
f63cc080
...
...
@@ -5,11 +5,12 @@ class Admin::ProjectsController < Admin::ApplicationController
def
index
@projects
=
Project
.
all
@projects
=
@projects
.
in_namespace
(
params
[
:namespace_id
])
if
params
[
:namespace_id
].
present?
@projects
=
@projects
.
where
(
"projects.
visibility_level
IN (?)"
,
params
[
:visibility_level
s
])
if
params
[
:visibility_level
s
].
present?
@projects
=
@projects
.
where
(
visibility_level
:
params
[
:visibility_level
])
if
params
[
:visibility_level
].
present?
@projects
=
@projects
.
with_push
if
params
[
:with_push
].
present?
@projects
=
@projects
.
abandoned
if
params
[
:abandoned
].
present?
@projects
=
@projects
.
where
(
last_repository_check_failed:
true
)
if
params
[
:last_repository_check_failed
].
present?
@projects
=
@projects
.
non_archived
unless
params
[
:with_archived
].
present?
@projects
=
@projects
.
non_archived
unless
params
[
:archived
].
present?
@projects
=
@projects
.
personal
(
current_user
)
if
params
[
:personal
].
present?
@projects
=
@projects
.
search
(
params
[
:name
])
if
params
[
:name
].
present?
@projects
=
@projects
.
sort
(
@sort
=
params
[
:sort
])
@projects
=
@projects
.
includes
(
:namespace
).
order
(
"namespaces.path, projects.name ASC"
).
page
(
params
[
:page
])
...
...
app/helpers/dropdowns_helper.rb
View file @
f63cc080
...
...
@@ -39,7 +39,7 @@ def dropdown_tag(toggle_text, options: {}, &block)
end
end
def
dropdown_toggle
(
toggle_text
,
data_attr
,
options
)
def
dropdown_toggle
(
toggle_text
,
data_attr
,
options
=
{}
)
content_tag
(
:button
,
class:
"dropdown-menu-toggle
#{
options
[
:toggle_class
]
if
options
.
has_key?
(
:toggle_class
)
}
"
,
id:
(
options
[
:id
]
if
options
.
has_key?
(
:id
)),
type:
"button"
,
data:
data_attr
)
do
output
=
content_tag
(
:span
,
toggle_text
,
class:
"dropdown-toggle-text"
)
output
<<
icon
(
'chevron-down'
)
...
...
app/views/admin/groups/_group.html.haml
View file @
f63cc080
-
css_class
=
''
unless
local_assigns
[
:css_class
]
-
css_class
+=
' no-description'
if
group
.
description
.
blank?
%li
.group-row
{
class:
css_class
}
.controls.hidden-xs
=
link_to
'Edit'
,
edit_admin_group_path
(
group
),
id:
"edit_
#{
dom_id
(
group
)
}
"
,
class:
'btn btn-grouped btn-sm'
=
link_to
'Destroy'
,
[
:admin
,
group
],
data:
{
confirm:
"REMOVE
#{
group
.
name
}
? Are you sure?"
},
method: :delete
,
class:
'btn btn-grouped btn-sm btn-remove'
%li
.group-row.group-admin
{
class:
css_class
}
.group-avatar
=
image_tag
group_icon
(
group
),
class:
'avatar hidden-xs'
.group-details
.title
=
link_to
[
:admin
,
group
],
class:
'group-name'
do
=
group
.
name
.group-stats
%span
>=
pluralize
(
number_with_delimiter
(
group
.
projects
.
count
),
'project'
)
,
%span
=
pluralize
(
number_with_delimiter
(
group
.
users
.
count
),
'member'
)
.stats
%span
=
icon
(
'bookmark'
)
=
number_with_delimiter
(
group
.
projects
.
count
)
%span
=
icon
(
'users'
)
=
number_with_delimiter
(
group
.
users
.
count
)
%span
.visibility-icon.has-tooltip
{
data:
{
container:
'body'
,
placement:
'left'
},
title:
visibility_icon_description
(
group
)}
=
visibility_level_icon
(
group
.
visibility_level
,
fw:
false
)
=
image_tag
group_icon
(
group
),
class:
'avatar s40 hidden-xs'
.title
=
link_to
[
:admin
,
group
],
class:
'group-name'
do
=
group
.
name
-
if
group
.
description
.
present?
.description
=
markdown
(
group
.
description
,
pipeline: :description
)
-
if
group
.
description
.
present?
.description
=
markdown
(
group
.
description
,
pipeline: :description
)
.group-controls.hidden-xs
=
link_to
'Edit'
,
edit_admin_group_path
(
group
),
id:
"edit_
#{
dom_id
(
group
)
}
"
,
class:
'btn'
=
link_to
'Delete'
,
[
:admin
,
group
],
data:
{
confirm:
"Are you sure you want to remove
#{
group
.
name
}
?"
},
method: :delete
,
class:
'btn btn-remove'
app/views/admin/groups/index.html.haml
View file @
f63cc080
...
...
@@ -3,41 +3,32 @@
=
render
"admin/dashboard/head"
%div
{
class:
container_class
}
%h3
.page-title
Groups (
#{
number_with_delimiter
(
@groups
.
total_count
)
}
)
%p
.light
Group allows you to keep projects organized.
Use groups for uniting related projects.
.top-area
.
nav-search
=
form_tag
admin_groups_path
,
method: :get
,
class:
'
form-inline'
do
.
prepend-top-default.append-bottom-default
=
form_tag
admin_groups_path
,
method: :get
,
class:
'
js-search-form'
do
|
f
|
=
hidden_field_tag
:sort
,
@sort
=
text_field_tag
:name
,
params
[
:name
],
class:
"form-control"
=
button_tag
"Search"
,
class:
"btn submit btn-primary"
.nav-controls
.dropdown.inline
%a
.dropdown-toggle.btn
{
href:
'#'
,
"data-toggle"
=>
"dropdown"
}
%span
.light
-
if
@sort
.
present?
=
sort_options_hash
[
@sort
]
-
else
=
sort_title_recently_created
%b
.caret
%ul
.dropdown-menu
%li
=
link_to
admin_groups_path
(
sort:
sort_value_recently_created
)
do
=
sort_title_recently_created
=
link_to
admin_groups_path
(
sort:
sort_value_oldest_created
)
do
=
sort_title_oldest_created
=
link_to
admin_groups_path
(
sort:
sort_value_recently_updated
)
do
=
sort_title_recently_updated
=
link_to
admin_groups_path
(
sort:
sort_value_oldest_updated
)
do
=
sort_title_oldest_updated
=
link_to
'New Group'
,
new_admin_group_path
,
class:
"btn btn-new"
.search-holder
-
project_name
=
params
[
:name
].
present?
?
params
[
:name
]
:
nil
.search-field-holder
=
search_field_tag
:name
,
project_name
,
class:
"form-control search-text-input js-search-input"
,
autofocus:
true
,
spellcheck:
false
,
placeholder:
'Search by name'
=
icon
(
"search"
,
class:
"search-icon"
)
.dropdown
-
toggle_text
=
@sort
.
present?
?
sort_options_hash
[
@sort
]
:
sort_title_recently_created
=
dropdown_toggle
(
toggle_text
,
{
toggle:
'dropdown'
})
%ul
.dropdown-menu.dropdown-menu-align-right
%li
.dropdown-header
Sort by
%li
=
link_to
admin_groups_path
(
sort:
sort_value_recently_created
,
name:
project_name
)
do
=
sort_title_recently_created
=
link_to
admin_groups_path
(
sort:
sort_value_oldest_created
,
name:
project_name
)
do
=
sort_title_oldest_created
=
link_to
admin_groups_path
(
sort:
sort_value_recently_updated
,
name:
project_name
)
do
=
sort_title_recently_updated
=
link_to
admin_groups_path
(
sort:
sort_value_oldest_updated
,
name:
project_name
)
do
=
sort_title_oldest_updated
=
link_to
new_admin_group_path
,
class:
"btn btn-new"
do
New Group
%ul
.content-list
=
render
@groups
...
...
app/views/admin/projects/index.html.haml
View file @
f63cc080
-
@no_container
=
true
-
page_title
"Projects"
=
render
'shared/show_aside'
-
params
[
:visibility_level
]
||=
[]
=
render
"admin/dashboard/head"
%div
{
class:
container_class
}
.row.prepend-top-default
%aside
.col-md-3
.panel.admin-filter
=
form_tag
admin_namespaces_projects_path
,
method: :get
,
class:
''
do
.form-group
=
label_tag
:name
,
'Name:'
=
text_field_tag
:name
,
params
[
:name
],
class:
"form-control"
.top-area
.prepend-top-default
=
form_tag
admin_namespaces_projects_path
,
method: :get
do
|
f
|
.search-holder
.search-field-holder
=
search_field_tag
:name
,
params
[
:name
],
class:
"form-control search-text-input js-search-input"
,
id:
"dashboard_search"
,
autofocus:
true
,
spellcheck:
false
,
placeholder:
'Search by name'
-
if
params
[
:visibility_level
].
present?
=
hidden_field_tag
'visibility_level'
,
params
[
:visibility_level
]
-
if
params
[
:sort
].
present?
=
hidden_field_tag
'sort'
,
params
[
:sort
]
-
if
params
[
:personal
].
present?
=
hidden_field_tag
'visibility_level'
,
'true'
-
if
params
[
:archived
].
present?
=
hidden_field_tag
'archived'
,
'true'
=
icon
(
"search"
,
class:
"search-icon"
)
.dropdown
-
toggle_text
=
'Search for Namespace'
-
if
params
[
:namespace_id
].
present?
-
namespace
=
Namespace
.
find
(
params
[
:namespace_id
])
-
toggle_text
=
"
#{
namespace
.
kind
}
:
#{
namespace
.
path
}
"
=
dropdown_toggle
(
toggle_text
,
{
toggle:
'dropdown'
},
{
toggle_class:
'js-namespace-select large'
})
.dropdown-menu.dropdown-select.dropdown-menu-align-right
=
dropdown_title
(
'Namespaces'
)
=
dropdown_filter
(
"Search for Namespace"
)
=
dropdown_content
=
dropdown_loading
=
button_tag
"Search"
,
class:
"btn btn-primary btn-search"
%ul
.nav-links
-
opts
=
params
[
:visibility_level
].
present?
?
{}
:
{
page:
admin_namespaces_projects_path
}
=
nav_link
(
opts
)
do
=
link_to
admin_namespaces_projects_path
do
All
.form-group
=
label_tag
:namespace_id
,
"Namespace"
=
namespace_select_tag
:namespace_id
,
selected:
params
[
:namespace_id
],
class:
'input-large'
=
nav_link
(
html_options:
{
class:
params
[
:visibility_level
]
==
Gitlab
::
VisibilityLevel
::
PRIVATE
.
to_s
?
'active'
:
''
})
do
=
link_to
admin_namespaces_projects_path
(
visibility_level:
Gitlab
::
VisibilityLevel
::
PRIVATE
)
do
Private
=
nav_link
(
html_options:
{
class:
params
[
:visibility_level
]
==
Gitlab
::
VisibilityLevel
::
INTERNAL
.
to_s
?
'active'
:
''
})
do
=
link_to
admin_namespaces_projects_path
(
visibility_level:
Gitlab
::
VisibilityLevel
::
INTERNAL
)
do
Internal
=
nav_link
(
html_options:
{
class:
params
[
:visibility_level
]
==
Gitlab
::
VisibilityLevel
::
PUBLIC
.
to_s
?
'active'
:
''
})
do
=
link_to
admin_namespaces_projects_path
(
visibility_level:
Gitlab
::
VisibilityLevel
::
PUBLIC
)
do
Public
.form-group
%strong
Activity
.checkbox
=
label_tag
:with_push
do
=
check_box_tag
:with_push
,
1
,
params
[
:with_push
]
%span
Projects with push events
.checkbox
=
label_tag
:abandoned
do
=
check_box_tag
:abandoned
,
1
,
params
[
:abandoned
]
%span
No activity over 6 month
.checkbox
=
label_tag
:with_archived
do
=
check_box_tag
:with_archived
,
1
,
params
[
:with_archived
]
%span
Show archived projects
.nav-controls
=
render
'shared/projects/dropdown'
=
link_to
new_project_path
,
class:
'btn btn-new'
do
New Project
%fieldset
%strong
Visibility level:
.visibility-levels
-
Project
.
visibility_levels
.
each
do
|
label
,
level
|
.checkbox
%label
=
check_box_tag
'visibility_levels[]'
,
level
,
params
[
:visibility_levels
].
present?
&&
params
[
:visibility_levels
].
include?
(
level
.
to_s
)
%span
.descr
=
visibility_level_icon
(
level
)
=
label
%fieldset
%strong
Problems
.checkbox
=
label_tag
:last_repository_check_failed
do
=
check_box_tag
:last_repository_check_failed
,
1
,
params
[
:last_repository_check_failed
]
%span
Last repository check failed
.projects-list-holder
-
if
@projects
.
any?
%ul
.projects-list.content-list
-
@projects
.
each_with_index
do
|
project
|
%li
.project-row
.controls.pull-right
-
if
project
.
archived
%span
.label.label-warning
archived
%span
.label.label-gray
=
repository_size
(
project
)
=
link_to
'Edit'
,
edit_namespace_project_path
(
project
.
namespace
,
project
),
id:
"edit_
#{
dom_id
(
project
)
}
"
,
class:
"btn"
=
link_to
'Delete'
,
[
project
.
namespace
.
becomes
(
Namespace
),
project
],
data:
{
confirm:
remove_project_message
(
project
)
},
method: :delete
,
class:
"btn btn-remove"
.title
=
link_to
[
:admin
,
project
.
namespace
.
becomes
(
Namespace
),
project
]
do
.dash-project-avatar
=
project_icon
(
project
,
alt:
''
,
class:
'avatar project-avatar s40'
)
%span
.project-full-name
%span
.namespace-name
-
if
project
.
namespace
=
project
.
namespace
.
human_name
\/
%span
.project-name.filter-title
=
project
.
name
=
hidden_field_tag
:sort
,
params
[
:sort
]
=
button_tag
"Search"
,
class:
"btn submit btn-primary"
=
link_to
"Reset"
,
admin_namespaces_projects_path
,
class:
"btn btn-cancel"
-
if
project
.
description
.
present?
.description
=
markdown
(
project
.
description
,
pipeline: :description
)
%section
.col-md-9
.panel.panel-default
.panel-heading
Projects (
#{
@projects
.
total_count
}
)
.controls
.dropdown.inline
%button
.dropdown-toggle.btn.btn-sm
{
type:
'button'
,
'data-toggle'
=>
'dropdown'
}
%span
.light
-
if
@sort
.
present?
=
sort_options_hash
[
@sort
]
-
else
=
sort_title_recently_created
%b
.caret
%ul
.dropdown-menu
%li
=
link_to
admin_namespaces_projects_path
(
sort:
sort_value_recently_created
)
do
=
sort_title_recently_created
=
link_to
admin_namespaces_projects_path
(
sort:
sort_value_oldest_created
)
do
=
sort_title_oldest_created
=
link_to
admin_namespaces_projects_path
(
sort:
sort_value_recently_updated
)
do
=
sort_title_recently_updated
=
link_to
admin_namespaces_projects_path
(
sort:
sort_value_oldest_updated
)
do
=
sort_title_oldest_updated
=
link_to
admin_namespaces_projects_path
(
sort:
sort_value_largest_repo
)
do
=
sort_title_largest_repo
=
link_to
'New Project'
,
new_project_path
,
class:
"btn btn-sm btn-success"
%ul
.well-list
-
@projects
.
each
do
|
project
|
%li
.list-item-name
%span
{
class:
visibility_level_color
(
project
.
visibility_level
)
}
=
visibility_level_icon
(
project
.
visibility_level
)
=
link_to
project
.
name_with_namespace
,
[
:admin
,
project
.
namespace
.
becomes
(
Namespace
),
project
]
.pull-right
-
if
project
.
archived
%span
.label.label-warning
archived
%span
.label.label-gray
=
repository_size
(
project
)
=
link_to
'Edit'
,
edit_namespace_project_path
(
project
.
namespace
,
project
),
id:
"edit_
#{
dom_id
(
project
)
}
"
,
class:
"btn btn-sm"
=
link_to
'Destroy'
,
[
project
.
namespace
.
becomes
(
Namespace
),
project
],
data:
{
confirm:
remove_project_message
(
project
)
},
method: :delete
,
class:
"btn btn-sm btn-remove"
-
if
@projects
.
blank?
.nothing-here-block
0 projects matches
=
paginate
@projects
,
theme:
"gitlab"
=
paginate
@projects
,
theme:
'gitlab'
-
else
.nothing-here-block
No projects found
app/views/admin/projects/show.html.haml
View file @
f63cc080
...
...
@@ -99,7 +99,13 @@
.form-group
=
f
.
label
:new_namespace_id
,
"Namespace"
,
class:
'control-label'
.col-sm-10
=
namespace_select_tag
:new_namespace_id
,
selected:
params
[
:namespace_id
],
class:
'input-large'
.dropdown
=
dropdown_toggle
(
'Search for Namespace'
,
{
toggle:
'dropdown'
,
field_name:
'new_namespace_id'
},
{
toggle_class:
'js-namespace-select large'
})
.dropdown-menu.dropdown-select
=
dropdown_title
(
'Namespaces'
)
=
dropdown_filter
(
"Search for Namespace"
)
=
dropdown_content
=
dropdown_loading
.form-group
.col-sm-offset-2.col-sm-10
...
...
app/views/admin/users/_user.html.haml
0 → 100644
View file @
f63cc080
%li
.user-row
.user-avatar
=
image_tag
avatar_icon
(
user
),
class:
"avatar"
,
alt:
''
.user-details
.user-name
=
link_to
user
.
name
,
[
:admin
,
user
]
-
if
user
.
blocked?
%span
.label.label-danger
blocked
-
if
user
.
admin?
%span
.label.label-success
Admin
-
if
user
.
external?
%span
.label.label-default
External
-
if
user
==
current_user
%span
It's you!
.user-email
=
mail_to
user
.
email
,
user
.
email
.controls.pull-right
=
link_to
'Edit'
,
edit_admin_user_path
(
user
),
id:
"edit_
#{
dom_id
(
user
)
}
"
,
class:
'btn'
-
unless
user
==
current_user
.dropdown.inline
%a
.dropdown-new.btn.btn-default
#project-settings-button
{
href:
'#'
,
data:
{
toggle:
'dropdown'
}
}
=
icon
(
'cog'
)
=
icon
(
'caret-down'
)
%ul
.dropdown-menu.dropdown-menu-align-right
%li
.dropdown-header
Settings