BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
bf40aab4
Commit
bf40aab4
authored
Jun 28, 2016
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GL dropdowns in issuable form
This allows labels to be created on whilst creating/editing an issuable Closes #12574
parent
ecfbb963
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
58 additions
and
50 deletions
+58
-50
dispatcher.js.coffee
app/assets/javascripts/dispatcher.js.coffee
+2
-0
labels_select.js.coffee
app/assets/javascripts/labels_select.js.coffee
+21
-10
milestone_select.js.coffee
app/assets/javascripts/milestone_select.js.coffee
+1
-1
users_select.js.coffee
app/assets/javascripts/users_select.js.coffee
+6
-2
merge_requests.scss
app/assets/stylesheets/pages/merge_requests.scss
+4
-0
_filter.html.haml
app/views/shared/issuable/_filter.html.haml
+2
-2
_form.html.haml
app/views/shared/issuable/_form.html.haml
+10
-25
_label_dropdown.html.haml
app/views/shared/issuable/_label_dropdown.html.haml
+8
-6
_milestone_dropdown.html.haml
app/views/shared/issuable/_milestone_dropdown.html.haml
+4
-4
No files found.
app/assets/javascripts/dispatcher.js.coffee
View file @
bf40aab4
...
@@ -39,6 +39,8 @@ class Dispatcher
...
@@ -39,6 +39,8 @@ class Dispatcher
shortcut_handler
=
new
ShortcutsNavigation
()
shortcut_handler
=
new
ShortcutsNavigation
()
new
GLForm
(
$
(
'.issue-form'
))
new
GLForm
(
$
(
'.issue-form'
))
new
IssuableForm
(
$
(
'.issue-form'
))
new
IssuableForm
(
$
(
'.issue-form'
))
new
LabelsSelect
()
new
MilestoneSelect
()
when
'projects:merge_requests:new'
,
'projects:merge_requests:edit'
when
'projects:merge_requests:new'
,
'projects:merge_requests:edit'
new
Diff
()
new
Diff
()
shortcut_handler
=
new
ShortcutsNavigation
()
shortcut_handler
=
new
ShortcutsNavigation
()
...
...
app/assets/javascripts/labels_select.js.coffee
View file @
bf40aab4
...
@@ -184,20 +184,22 @@ class @LabelsSelect
...
@@ -184,20 +184,22 @@ class @LabelsSelect
.
value
()
.
value
()
if
$dropdown
.
hasClass
'js-extra-options'
if
$dropdown
.
hasClass
'js-extra-options'
if
showNo
extraData
=
[]
data
.
unshift
(
id
:
0
title
:
'No Label'
)
if
showAny
if
showAny
data
.
unshift
(
extraData
.
push
(
isAny
:
true
isAny
:
true
title
:
'Any Label'
title
:
'Any Label'
)
)
if
data
.
length
>
2
if
showNo
data
.
splice
2
,
0
,
'divider'
extraData
.
push
(
id
:
0
title
:
'No Label'
)
if
extraData
.
length
extraData
.
push
'divider'
data
=
extraData
.
concat
(
data
)
callback
data
callback
data
...
@@ -287,6 +289,12 @@ class @LabelsSelect
...
@@ -287,6 +289,12 @@ class @LabelsSelect
defaultLabel
defaultLabel
fieldName
:
$dropdown
.
data
(
'field-name'
)
fieldName
:
$dropdown
.
data
(
'field-name'
)
id
:
(
label
)
->
id
:
(
label
)
->
if
$dropdown
.
hasClass
(
'js-issuable-form-dropdown'
)
if
label
.
id
is
0
return
else
return
label
.
id
if
$dropdown
.
hasClass
(
"js-filter-submit"
)
and
not
label
.
isAny
?
if
$dropdown
.
hasClass
(
"js-filter-submit"
)
and
not
label
.
isAny
?
label
.
title
label
.
title
else
else
...
@@ -300,6 +308,9 @@ class @LabelsSelect
...
@@ -300,6 +308,9 @@ class @LabelsSelect
$selectbox
.
hide
()
$selectbox
.
hide
()
# display:block overrides the hide-collapse rule
# display:block overrides the hide-collapse rule
$value
.
removeAttr
(
'style'
)
$value
.
removeAttr
(
'style'
)
return
if
$dropdown
.
hasClass
(
'js-issuable-form-dropdown'
)
if
$dropdown
.
hasClass
'js-multiselect'
if
$dropdown
.
hasClass
'js-multiselect'
if
$dropdown
.
hasClass
(
'js-filter-submit'
)
and
(
isIssueIndex
or
isMRIndex
)
if
$dropdown
.
hasClass
(
'js-filter-submit'
)
and
(
isIssueIndex
or
isMRIndex
)
selectedLabels
=
$dropdown
selectedLabels
=
$dropdown
...
@@ -321,7 +332,7 @@ class @LabelsSelect
...
@@ -321,7 +332,7 @@ class @LabelsSelect
clicked
:
(
label
)
->
clicked
:
(
label
)
->
_this
.
enableBulkLabelDropdown
()
_this
.
enableBulkLabelDropdown
()
if
$dropdown
.
hasClass
(
'js-filter-bulk-update'
)
if
$dropdown
.
hasClass
(
'js-filter-bulk-update'
)
or
$dropdown
.
hasClass
(
'js-issuable-form-dropdown'
)
return
return
page
=
$
(
'body'
).
data
'page'
page
=
$
(
'body'
).
data
'page'
...
...
app/assets/javascripts/milestone_select.js.coffee
View file @
bf40aab4
...
@@ -62,7 +62,7 @@ class @MilestoneSelect
...
@@ -62,7 +62,7 @@ class @MilestoneSelect
title
:
'Upcoming'
title
:
'Upcoming'
)
)
if
extraOptions
.
length
>
2
if
extraOptions
.
length
>
0
extraOptions
.
push
'divider'
extraOptions
.
push
'divider'
callback
(
extraOptions
.
concat
(
data
))
callback
(
extraOptions
.
concat
(
data
))
...
...
app/assets/javascripts/users_select.js.coffee
View file @
bf40aab4
...
@@ -151,11 +151,13 @@ class @UsersSelect
...
@@ -151,11 +151,13 @@ class @UsersSelect
# display:block overrides the hide-collapse rule
# display:block overrides the hide-collapse rule
$value
.
css
(
'display'
,
''
)
$value
.
css
(
'display'
,
''
)
clicked
:
(
user
)
->
clicked
:
(
user
,
$el
,
e
)
->
page
=
$
(
'body'
).
data
'page'
page
=
$
(
'body'
).
data
'page'
isIssueIndex
=
page
is
'projects:issues:index'
isIssueIndex
=
page
is
'projects:issues:index'
isMRIndex
=
page
is
page
is
'projects:merge_requests:index'
isMRIndex
=
page
is
page
is
'projects:merge_requests:index'
if
$dropdown
.
hasClass
(
'js-filter-bulk-update'
)
if
$dropdown
.
hasClass
(
'js-filter-bulk-update'
)
e
.
preventDefault
()
selectedId
=
user
.
id
return
return
if
$dropdown
.
hasClass
(
'js-filter-submit'
)
and
(
isIssueIndex
or
isMRIndex
)
if
$dropdown
.
hasClass
(
'js-filter-submit'
)
and
(
isIssueIndex
or
isMRIndex
)
...
@@ -168,7 +170,9 @@ class @UsersSelect
...
@@ -168,7 +170,9 @@ class @UsersSelect
.
closest
(
'.selectbox'
)
.
closest
(
'.selectbox'
)
.
find
(
"input[name='
#{
$dropdown
.
data
(
'field-name'
)
}
']"
).
val
()
.
find
(
"input[name='
#{
$dropdown
.
data
(
'field-name'
)
}
']"
).
val
()
assignTo
(
selected
)
assignTo
(
selected
)
id
:
(
user
)
->
return
if
user
.
id
is
0
user
.
id
renderRow
:
(
user
)
->
renderRow
:
(
user
)
->
username
=
if
user
.
username
then
"@
#{
user
.
username
}
"
else
""
username
=
if
user
.
username
then
"@
#{
user
.
username
}
"
else
""
avatar
=
if
user
.
avatar_url
then
user
.
avatar_url
else
false
avatar
=
if
user
.
avatar_url
then
user
.
avatar_url
else
false
...
...
app/assets/stylesheets/pages/merge_requests.scss
View file @
bf40aab4
...
@@ -321,6 +321,10 @@
...
@@ -321,6 +321,10 @@
.issuable-form-select-holder
{
.issuable-form-select-holder
{
display
:
inline-block
;
display
:
inline-block
;
width
:
250px
;
width
:
250px
;
.dropdown-menu-toggle
{
width
:
100%
;
}
}
}
.table-holder
{
.table-holder
{
...
...
app/views/shared/issuable/_filter.html.haml
View file @
bf40aab4
...
@@ -21,10 +21,10 @@
...
@@ -21,10 +21,10 @@
placeholder:
"Search assignee"
,
data:
{
any_user:
"Any Assignee"
,
first_user:
(
current_user
.
username
if
current_user
),
null_user:
true
,
current_user:
true
,
project_id:
(
@project
.
id
if
@project
),
selected:
params
[
:assignee_id
],
field_name:
"assignee_id"
,
default_label:
"Assignee"
}
})
placeholder:
"Search assignee"
,
data:
{
any_user:
"Any Assignee"
,
first_user:
(
current_user
.
username
if
current_user
),
null_user:
true
,
current_user:
true
,
project_id:
(
@project
.
id
if
@project
),
selected:
params
[
:assignee_id
],
field_name:
"assignee_id"
,
default_label:
"Assignee"
}
})
.filter-item.inline.milestone-filter
.filter-item.inline.milestone-filter
=
render
"shared/issuable/milestone_dropdown"
=
render
"shared/issuable/milestone_dropdown"
,
selected:
params
[
:milestone_title
],
name: :milestone_title
,
show_any:
true
,
show_upcoming:
true
.filter-item.inline.labels-filter
.filter-item.inline.labels-filter
=
render
"shared/issuable/label_dropdown"
=
render
"shared/issuable/label_dropdown"
,
selected:
params
[
:label_name
],
data_options:
{
field_name:
"label_name[]"
}
.pull-right
.pull-right
=
render
'shared/sort_dropdown'
=
render
'shared/sort_dropdown'
...
...
app/views/shared/issuable/_form.html.haml
View file @
bf40aab4
...
@@ -52,38 +52,23 @@
...
@@ -52,38 +52,23 @@
=
f
.
label
:assignee_id
,
"Assignee"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
=
f
.
label
:assignee_id
,
"Assignee"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
.col-sm-10
{
class:
(
"col-lg-8"
if
has_due_date
)
}
.col-sm-10
{
class:
(
"col-lg-8"
if
has_due_date
)
}
.issuable-form-select-holder
.issuable-form-select-holder
=
users_select_tag
(
"
#{
issuable
.
class
.
model_name
.
param_key
}
[assignee_id]"
,
-
if
issuable
.
assignee_id
placeholder:
'Select assignee'
,
class:
'custom-form-control'
,
null_user:
true
,
=
hidden_field_tag
(
"
#{
issuable
.
class
.
model_name
.
param_key
}
[assignee_id]"
,
issuable
.
assignee_id
)
selected:
issuable
.
assignee_id
,
project:
@target_project
||
@project
,
=
dropdown_tag
(
user_dropdown_label
(
issuable
.
assignee_id
,
"Assignee"
),
options:
{
toggle_class:
"js-user-search js-filter-bulk-update js-assignee-search"
,
title:
"Filter by assignee"
,
filter:
true
,
dropdown_class:
"dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee js-filter-submit"
,
first_user:
true
,
current_user:
true
,
include_blank:
true
)
placeholder:
"Search assignee"
,
data:
{
first_user:
(
current_user
.
username
if
current_user
),
null_user:
true
,
current_user:
true
,
project_id:
(
@project
.
id
if
@project
),
selected:
issuable
.
assignee_id
,
field_name:
"
#{
issuable
.
class
.
model_name
.
param_key
}
[assignee_id]"
,
default_label:
"Assignee"
}
})
%div
=
link_to
'Assign to me'
,
'#'
,
class:
'assign-to-me-link prepend-top-5 inline'
.form-group.issue-milestone
.form-group.issue-milestone
=
f
.
label
:milestone_id
,
"Milestone"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
=
f
.
label
:milestone_id
,
"Milestone"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
.col-sm-10
{
class:
(
"col-lg-8"
if
has_due_date
)
}
.col-sm-10
{
class:
(
"col-lg-8"
if
has_due_date
)
}
-
if
milestone_options
(
issuable
).
present?
.issuable-form-select-holder
.issuable-form-select-holder
=
render
"shared/issuable/milestone_dropdown"
,
selected:
issuable
.
milestone_id
,
name:
"
#{
issuable
.
class
.
model_name
.
param_key
}
[milestone_id]"
,
show_any:
false
,
show_upcoming:
false
=
f
.
select
(
:milestone_id
,
milestone_options
(
issuable
),
{
include_blank:
true
},
{
class:
'select2'
,
data:
{
placeholder:
'Select milestone'
}
})
-
else
.prepend-top-10
%span
.light
No open milestones available.
-
if
can?
current_user
,
:admin_milestone
,
issuable
.
project
%div
=
link_to
'Create new milestone'
,
new_namespace_project_milestone_path
(
issuable
.
project
.
namespace
,
issuable
.
project
),
target: :blank
,
class:
"prepend-top-5 inline"
.form-group
.form-group
-
has_labels
=
issuable
.
project
.
labels
.
any?
-
has_labels
=
issuable
.
project
.
labels
.
any?
-
selected_labels
=
issuable
.
label_ids
.
any?
?
issuable
.
label_ids
:
nil
-
label_dropdown_toggle
=
issuable
.
labels
.
map
{
|
label
|
label
.
title
}
=
f
.
label
:label_ids
,
"Labels"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
=
f
.
label
:label_ids
,
"Labels"
,
class:
"control-label
#{
"col-lg-4"
if
has_due_date
}
"
.col-sm-10
{
class:
"#{"
col
-
lg
-
8
" if has_due_date} #{'issuable-form-padding-top' if !has_labels}"
}
.col-sm-10
{
class:
"#{"
col
-
lg
-
8
" if has_due_date} #{'issuable-form-padding-top' if !has_labels}"
}
-
if
has_labels
.issuable-form-select-holder
.issuable-form-select-holder
=
render
"shared/issuable/label_dropdown"
,
classes:
[
"js-issuable-form-dropdown"
],
selected:
selected_labels
,
selected_toggle:
label_dropdown_toggle
,
data_options:
{
field_name:
"
#{
issuable
.
class
.
model_name
.
param_key
}
[label_ids][]"
,
show_any:
"false"
}
=
f
.
collection_select
:label_ids
,
issuable
.
project
.
labels
.
all
,
:id
,
:name
,
{
selected:
issuable
.
label_ids
},
multiple:
true
,
class:
'select2'
,
data:
{
placeholder:
"Select labels"
}
-
else
%span
.light
No labels yet.
-
if
can?
current_user
,
:admin_label
,
issuable
.
project
%div
=
link_to
'Create new label'
,
new_namespace_project_label_path
(
issuable
.
project
.
namespace
,
issuable
.
project
),
target: :blank
,
class:
"prepend-top-5 inline"
-
if
has_due_date
-
if
has_due_date
.col-lg-6
.col-lg-6
.form-group
.form-group
...
...
app/views/shared/issuable/_label_dropdown.html.haml
View file @
bf40aab4
...
@@ -4,19 +4,21 @@
...
@@ -4,19 +4,21 @@
-
show_footer
=
local_assigns
.
fetch
(
:show_footer
,
true
)
-
show_footer
=
local_assigns
.
fetch
(
:show_footer
,
true
)
-
data_options
=
local_assigns
.
fetch
(
:data_options
,
{})
-
data_options
=
local_assigns
.
fetch
(
:data_options
,
{})
-
classes
=
local_assigns
.
fetch
(
:classes
,
[])
-
classes
=
local_assigns
.
fetch
(
:classes
,
[])
-
dropdown_data
=
{
toggle:
'dropdown'
,
field_name:
'label_name[]'
,
show_no:
"true"
,
show_any:
"true"
,
selected:
params
[
:label_name
],
project_id:
@project
.
try
(
:id
),
labels:
labels_filter_path
,
default_label:
"Label"
}
-
selected
=
local_assigns
.
fetch
(
:selected
,
nil
)
-
selected_toggle
=
local_assigns
.
fetch
(
:selected_toggle
,
nil
)
-
dropdown_data
=
{
toggle:
'dropdown'
,
field_name:
"label_name[]"
,
show_no:
"true"
,
show_any:
"true"
,
selected:
selected
,
project_id:
@project
.
try
(
:id
),
labels:
labels_filter_path
,
default_label:
"Label"
}
-
dropdown_data
.
merge!
(
data_options
)
-
dropdown_data
.
merge!
(
data_options
)
-
classes
<<
'js-extra-options'
if
extra_options
-
classes
<<
'js-extra-options'
if
extra_options
-
classes
<<
'js-filter-submit'
if
filter_submit
-
classes
<<
'js-filter-submit'
if
filter_submit
-
if
params
[
:label_name
]
.
present?
-
if
selected
.
present?
-
if
params
[
:label_name
]
.
respond_to?
(
'any?'
)
-
if
selected
.
respond_to?
(
'any?'
)
-
params
[
:label_name
]
.
each
do
|
label
|
-
selected
.
each
do
|
label
|
=
hidden_field_tag
"label_name[]"
,
label
,
id:
nil
=
hidden_field_tag
data_options
[
:field_name
]
,
label
,
id:
nil
.dropdown
.dropdown
%button
.dropdown-menu-toggle.js-label-select.js-multiselect
{
class:
classes
.
join
(
' '
),
type:
"button"
,
data:
dropdown_data
}
%button
.dropdown-menu-toggle.js-label-select.js-multiselect
{
class:
classes
.
join
(
' '
),
type:
"button"
,
data:
dropdown_data
}
%span
.dropdown-toggle-text
%span
.dropdown-toggle-text
=
h
(
multi_label_name
(
params
[
:label_name
]
,
"Label"
))
=
h
(
multi_label_name
(
selected_toggle
||
selected
,
"Label"
))
=
icon
(
'chevron-down'
)
=
icon
(
'chevron-down'
)
.dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable
.dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable
=
render
partial:
"shared/issuable/label_page_default"
,
locals:
{
title:
"Filter by label"
,
show_footer:
show_footer
,
show_create:
show_create
}
=
render
partial:
"shared/issuable/label_page_default"
,
locals:
{
title:
"Filter by label"
,
show_footer:
show_footer
,
show_create:
show_create
}
...
...
app/views/shared/issuable/_milestone_dropdown.html.haml
View file @
bf40aab4
-
if
params
[
:milestone_title
]
.
present?
-
if
selected
.
present?
=
hidden_field_tag
(
:milestone_title
,
params
[
:milestone_title
]
)
=
hidden_field_tag
(
name
,
selected
)
=
dropdown_tag
(
milestone_dropdown_label
(
params
[
:milestone_title
]
),
options:
{
title:
"Filter by milestone"
,
toggle_class:
'js-milestone-select js-filter-submit'
,
filter:
true
,
dropdown_class:
"dropdown-menu-selectable"
,
=
dropdown_tag
(
milestone_dropdown_label
(
selected
),
options:
{
title:
"Filter by milestone"
,
toggle_class:
'js-milestone-select js-filter-submit'
,
filter:
true
,
dropdown_class:
"dropdown-menu-selectable"
,
placeholder:
"Search milestones"
,
footer_content:
@project
.
present?
,
data:
{
show_no:
true
,
show_any:
true
,
show_upcoming:
true
,
field_name:
"milestone_title"
,
selected:
params
[
:milestone_title
]
,
project_id:
@project
.
try
(
:id
),
milestones:
milestones_filter_dropdown_path
,
default_label:
"Milestone"
}
})
do
placeholder:
"Search milestones"
,
footer_content:
@project
.
present?
,
data:
{
show_no:
true
,
show_any:
show_any
,
show_upcoming:
show_upcoming
,
field_name:
name
,
selected:
selected
,
project_id:
@project
.
try
(
:id
),
milestones:
milestones_filter_dropdown_path
,
default_label:
"Milestone"
}
})
do
-
if
@project
-
if
@project
%ul
.dropdown-footer-list
%ul
.dropdown-footer-list
-
if
can?
current_user
,
:admin_milestone
,
@project
-
if
can?
current_user
,
:admin_milestone
,
@project
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment