summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2016-04-26 13:05:21 -0500
committerAlfredo Sumaran <alfredo@gitlab.com>2016-06-03 17:10:20 -0500
commit4ab6bfcef50b5e3a8c879ad06161bbc8b56bfb9a (patch)
treeeef11b6d12c6993e37becc83306ff4f7ee7e749d
parent243e51325536ca8468a9d2692cc68aa5f466b5e3 (diff)
downloadgitlab-ce-4ab6bfcef50b5e3a8c879ad06161bbc8b56bfb9a.tar.gz
Set indeterminated items
-rw-r--r--app/assets/javascripts/gl_dropdown.js.coffee14
-rw-r--r--app/assets/javascripts/labels_select.js.coffee32
-rw-r--r--app/assets/stylesheets/framework/dropdowns.scss11
-rw-r--r--app/helpers/issuables_helper.rb5
-rw-r--r--app/views/projects/issues/_issue.html.haml2
5 files changed, 58 insertions, 6 deletions
diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index d263faa287a..7a23a3cf881 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -11,6 +11,8 @@ class GitLabDropdownFilter
$inputContainer = @input.parent()
$clearButton = $inputContainer.find('.js-dropdown-input-clear')
+ @indeterminatedIds = []
+
# Clear click
$clearButton.on 'click', (e) =>
e.preventDefault()
@@ -298,6 +300,13 @@ class GitLabDropdown
opened: =>
@addArrowKeyEvent()
+ if @options.setIndeterminatedIds
+ @options.setIndeterminatedIds.call(@)
+
+ # Makes indeterminated items effective
+ if @fullData and @dropdown.find('.dropdown-menu-toggle').hasClass('js-filter-bulk-update')
+ @parseData @fullData
+
contentHtml = $('.dropdown-content', @dropdown).html()
if @remote && contentHtml is ""
@remote.execute()
@@ -309,6 +318,9 @@ class GitLabDropdown
hidden: (e) =>
@removeArrayKeyEvent()
+
+ return if @dropdown.find('.dropdown-menu-toggle').hasClass('js-filter-bulk-update')
+
if @options.filterable
@dropdown
.find(".dropdown-input-field")
@@ -358,7 +370,7 @@ class GitLabDropdown
if @options.renderRow
# Call the render function
- html = @options.renderRow(data)
+ html = @options.renderRow.call(@options, data, @)
else
if not selected
value = if @options.id then @options.id(data) else data.id
diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee
index b8205565dbc..0aedc7a5f0b 100644
--- a/app/assets/javascripts/labels_select.js.coffee
+++ b/app/assets/javascripts/labels_select.js.coffee
@@ -1,5 +1,7 @@
class @LabelsSelect
constructor: ->
+ _this = @
+
$('.js-label-select').each (i, dropdown) ->
$dropdown = $(dropdown)
projectId = $dropdown.data('project-id')
@@ -196,15 +198,25 @@ class @LabelsSelect
callback data
- renderRow: (label) ->
+ renderRow: (label, instance) ->
+ selectedClass = []
removesAll = label.id is 0 or not label.id?
- selectedClass = []
+ if $dropdown.hasClass('js-filter-bulk-update')
+ indeterminated = instance.indeterminatedIds
+ if indeterminated.indexOf(label.id) isnt -1
+ selectedClass.push 'indeterminated'
+
if $form.find("input[type='hidden']\
[name='#{$dropdown.data('fieldName')}']\
[value='#{this.id(label)}']").length
selectedClass.push 'is-active'
+ index = selectedClass.indexOf('indeterminated')
+
+ if index isnt -1
+ selectedClass.splice(index, 1)
+
if $dropdown.hasClass('js-multiselect') and removesAll
selectedClass.push 'dropdown-clear-active'
@@ -264,6 +276,8 @@ class @LabelsSelect
label.id
hidden: ->
+ return if $dropdown.hasClass('js-filter-bulk-update')
+
page = $('body').data 'page'
isIssueIndex = page is 'projects:issues:index'
isMRIndex = page is 'projects:merge_requests:index'
@@ -301,4 +315,18 @@ class @LabelsSelect
return
else
saveLabelData()
+
+ setIndeterminatedIds: ->
+ if @dropdown.find('.dropdown-menu-toggle').hasClass('js-filter-bulk-update')
+ console.log 'options.setIndeterminatedIds'
+ @indeterminatedIds = _this.getIndeterminatedIds()
)
+
+ getIndeterminatedIds: ->
+ label_ids = []
+
+ $('.selected_issue:checked').each (i, el) ->
+ issue_id = $(el).data('id')
+ label_ids.push $("#issue_#{issue_id}").data('labels')
+
+ _.flatten(label_ids)
diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss
index 93c63c69843..a77c19bf2a7 100644
--- a/app/assets/stylesheets/framework/dropdowns.scss
+++ b/app/assets/stylesheets/framework/dropdowns.scss
@@ -232,9 +232,8 @@
a {
padding-left: 25px;
- &.is-active {
+ &.indeterminated, &.is-active{
&::before {
- content: "\f00c";
position: absolute;
left: 5px;
top: 50%;
@@ -246,6 +245,14 @@
-moz-osx-font-smoothing: grayscale;
}
}
+
+ &.indeterminated::before {
+ content: "\f068";
+ }
+
+ &.is-active::before {
+ content: "\f00c";
+ }
}
}
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index fe84ee3de44..b1ff95f6208 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -97,4 +97,9 @@ module IssuablesHelper
end
end
+ def label_ids(issuable)
+ return nil if !issuable.labels.any?
+ issuable.labels.pluck :id
+ end
+
end
diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml
index 4701429215b..ebaa34f4fff 100644
--- a/app/views/projects/issues/_issue.html.haml
+++ b/app/views/projects/issues/_issue.html.haml
@@ -1,4 +1,4 @@
-%li{ id: dom_id(issue), class: issue_css_classes(issue), url: issue_path(issue) }
+%li{ id: dom_id(issue), class: issue_css_classes(issue), url: issue_path(issue), :'data-labels' => label_ids(issue) }
- if controller.controller_name == 'issues' && can?(current_user, :admin_issue, @project)
.issue-check
= check_box_tag dom_id(issue,"selected"), nil, false, 'data-id' => issue.id, class: "selected_issue"