diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 2a497c2e804a39d8b322db6e91207d5835d284d9..5e09823b2d932ccc44040fd59cbffe4e218d3ffe 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -25,11 +25,9 @@ class @LabelsSelect $newLabelError = $('.js-label-error') $colorPreview = $('.js-dropdown-label-color-preview') $newLabelCreateButton = $('.js-new-label-btn') - selectedLabels = [] - - $("input[name='#{$dropdown.data('field-name')}']").each -> - title = $(this).data('title') - selectedLabels.push($(this).data('title')) if title + fieldName = $dropdown.data('field-name') + useId = $dropdown.hasClass('js-issuable-form-dropdown') or $dropdown.hasClass('js-filter-bulk-update') + propertyName = if useId then "id" else "title" $newLabelError.hide() $loading = $block.find('.block-loading').fadeOut() @@ -125,7 +123,7 @@ class @LabelsSelect saveLabelData = -> selected = $dropdown .closest('.selectbox') - .find("input[name='#{$dropdown.data('field-name')}']") + .find("input[name='#{fieldName}']") .map(-> @value ).get() @@ -278,63 +276,21 @@ class @LabelsSelect fields: ['title'] selectable: true filterable: true - toggleLabel: (selected, $el, glDropdownInstance) -> - # When comes from a triggered event handle it VERY differently - if selected instanceof jQuery.Event - $dropdownParent = $dropdown.closest '.labels-filter' - $labelInputs = $dropdownParent.find "input[name='#{@fieldName}']" - numberSelectedLabels = $labelInputs.length - firstLabel = _.pluck($labelInputs, 'value')[0] - - if numberSelectedLabels is 1 - firstLabel - else if numberSelectedLabels > 1 - "#{firstLabel} +#{numberSelectedLabels - 1} more" - else - defaultLabel - # when clicking on a dropdown option - else - # Return when clicking "No Label" - return if selected.id is 0 - return 'Any Label' if selected.isAny is true - - if glDropdownInstance? - $dropdownParent = glDropdownInstance.dropdown.closest '.issuable-form-select-holder, .labels-filter' - else - $dropdownParent = $() + toggleLabel: (selected, el, glDropdown) -> + if glDropdown? + selectedIds = $("input[name='#{fieldName}']").map(-> $(this).val()).get() - $labelInputs = $dropdownParent.find "input[name='#{@fieldName}']" + selected = _.filter glDropdown.fullData, (label) -> + selectedIds.indexOf("#{label[propertyName]}") >= 0 if label[propertyName]? - # Find the label by its attribute according the dropdown settings - if $dropdown.hasClass('js-issuable-form-dropdown') or $dropdown.hasClass('js-filter-bulk-update') - # When settings labels to a issuable we find the label for its ID - whereQuery = { id: parseInt $labelInputs.first().val() } + if selected.length is 1 + selected[0].title + else if selected.length > 1 + "#{selected[0].title} +#{selected.length - 1} more" else - # When filtering issuables we find the label for its title - whereQuery = { title: $labelInputs.first().val() } - - firstLabel = _.findWhere glDropdownInstance.fullData, whereQuery - - # Better rely on inputs since filtering may returns invalid number of active labels - numberSelectedLabels = $labelInputs.length - - # If we are adding a label - if $el.is '.is-active' - if numberSelectedLabels is 1 - selected.title - else - "#{selected.title} +#{numberSelectedLabels - 1} more" - - # otherwise we are removing a label - else - if numberSelectedLabels is 1 - firstLabel.title - else if numberSelectedLabels > 1 - "#{firstLabel.title} +#{numberSelectedLabels - 1} more" - else - defaultLabel + defaultLabel defaultLabel: defaultLabel - fieldName: $dropdown.data('field-name') + fieldName: fieldName id: (label) -> if $dropdown.hasClass('js-issuable-form-dropdown') if label.id is 0 diff --git a/app/assets/javascripts/milestone_select.js.coffee b/app/assets/javascripts/milestone_select.js.coffee index 0d71f3b623a75bdd07a582b423b522f67af41290..56e9a18e7ffc91ee60af0f18321d385431ce769b 100644 --- a/app/assets/javascripts/milestone_select.js.coffee +++ b/app/assets/javascripts/milestone_select.js.coffee @@ -70,8 +70,8 @@ class @MilestoneSelect search: fields: ['title'] selectable: true - toggleLabel: (selected, el, e, added) -> - if selected and 'id' of selected and added + toggleLabel: (selected, el, e) -> + if selected and 'id' of selected and $(el).hasClass('is-active') selected.title else defaultLabel @@ -80,7 +80,7 @@ class @MilestoneSelect text: (milestone) -> _.escape(milestone.title) id: (milestone) -> - if !useId and not $dropdown.is('.js-issuable-form-dropdown') + if not useId and not $dropdown.is('.js-issuable-form-dropdown') milestone.name else milestone.id diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index 5acfae753b905b3d9d9528a5066c3bb9b8c18cba..b9f3d6c75c2882f311af60d5fe9caf3cd2fa6f0f 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -116,7 +116,7 @@ module LabelsHelper def labels_filter_path project = @target_project || @project - if @project + if project namespace_project_labels_path(project.namespace, project, :json) else dashboard_labels_path(:json) diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index bc87ac32e3eecfd7928aa0a1d8890bb0486dbbb1..90f83f5fde5f0043ecd5c8c930a5c692315f90c8 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -48,7 +48,7 @@ module MilestonesHelper def milestones_filter_dropdown_path project = @target_project || @project - if @project + if project namespace_project_milestones_path(project.namespace, project, :json) else dashboard_milestones_path(:json) diff --git a/app/views/shared/issuable/_label_dropdown.html.haml b/app/views/shared/issuable/_label_dropdown.html.haml index b52fa6fa8c2dcde80d9be36d56e7538dbce8b1e3..666372b95a6644a2001cbce55f0dea4393e33d62 100644 --- a/app/views/shared/issuable/_label_dropdown.html.haml +++ b/app/views/shared/issuable/_label_dropdown.html.haml @@ -22,7 +22,7 @@ - selected.each do |label| - id = label.try(:id) || label - title = label.try(:title) || label - = hidden_field_tag data_options[:field_name], useId ? id : title, id: nil, data: { title: title } + = hidden_field_tag data_options[:field_name], useId ? id : title, id: nil .dropdown %button.dropdown-menu-toggle.js-label-select.js-multiselect{class: classes.join(' '), type: "button", data: dropdown_data} %span.dropdown-toggle-text{ class: ("is-default" if selected.nil? || selected.to_a.size == 0) }