diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 3bc9ac450e327992394236c92a4a246dbe5ee1ef..6313ad837f05e5c2aaff0d19e704fdf55d82c8bc 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -617,7 +617,14 @@ class GitLabDropdown $dropdownContent.scrollTop(listItemTop - dropdownContentTop) updateLabel: (selected = null, el = null, instance = null, added = false) => - $(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selected, el, instance, added) + $toggleText = $(@el).find(".dropdown-toggle-text") + $toggleText.text @options.toggleLabel(selected, el, instance, added) + + if @options.defaultLabel + if $toggleText.text().trim() is @options.defaultLabel + $toggleText.addClass('is-default') + else + $toggleText.removeClass('is-default') $.fn.glDropdown = (opts) -> return @.each -> diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index ce030a8c07b1eade01217103a8b804c6d9ac0384..d1225eb0851d86679741a164d50eea61fb6d5394 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -4,6 +4,7 @@ class @LabelsSelect $('.js-label-select').each (i, dropdown) -> $dropdown = $(dropdown) + $toggleText = $dropdown.find('.dropdown-toggle-text') projectId = $dropdown.data('project-id') labelUrl = $dropdown.data('labels') issueUpdateURL = $dropdown.data('issueUpdate') @@ -280,12 +281,16 @@ class @LabelsSelect index = selectedLabels.indexOf selected.title selectedLabels.splice index, 1 + if selected.id? and selected.id is 0 + selectedLabels = [] + if selectedLabels.length > 1 "#{selectedLabels[0]} +#{selectedLabels.length - 1} more" else if selectedLabels.length is 1 selectedLabels[0] else defaultLabel + defaultLabel: defaultLabel fieldName: $dropdown.data('field-name') id: (label) -> if $dropdown.hasClass('js-issuable-form-dropdown') diff --git a/app/assets/javascripts/milestone_select.js.coffee b/app/assets/javascripts/milestone_select.js.coffee index c4dd97d2c612ac3e7c3634a70da235dfb3e7a836..0d71f3b623a75bdd07a582b423b522f67af41290 100644 --- a/app/assets/javascripts/milestone_select.js.coffee +++ b/app/assets/javascripts/milestone_select.js.coffee @@ -70,11 +70,12 @@ class @MilestoneSelect search: fields: ['title'] selectable: true - toggleLabel: (selected) -> - if selected && 'id' of selected + toggleLabel: (selected, el, e, added) -> + if selected and 'id' of selected and added selected.title else defaultLabel + defaultLabel: defaultLabel fieldName: $dropdown.data('field-name') text: (milestone) -> _.escape(milestone.title) diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee index e061f042ca93e553bbfd8605a0bd561d66b0648a..bf551430999a28dc1a75b25e0f9fbfba2b76739f 100644 --- a/app/assets/javascripts/users_select.js.coffee +++ b/app/assets/javascripts/users_select.js.coffee @@ -142,12 +142,12 @@ class @UsersSelect selectable: true fieldName: $dropdown.data('field-name') - toggleLabel: (selected) -> - if selected && 'id' of selected + toggleLabel: (selected, el, e, added) -> + if selected and 'id' of selected and added if selected.text then selected.text else selected.name else defaultLabel - + defaultLabel: defaultLabel inputId: 'issue_assignee_id' hidden: (e) -> diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 3fd0e12568db0b60954889316d618de5a0982eca..8fd09cabaff500b04fb4a3d0bf1819ee9e1aa397 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -562,3 +562,9 @@ display: block; color: $gl-placeholder-color; } + +.dropdown-toggle-text { + &.is-default { + color: $gl-placeholder-color; + } +} diff --git a/app/helpers/dropdowns_helper.rb b/app/helpers/dropdowns_helper.rb index 4566f3782ccfb0858235226e9b5e1e5354f6d2f7..cc2a5a7b134729b7c7417aff22d1f2281bd1b9dd 100644 --- a/app/helpers/dropdowns_helper.rb +++ b/app/helpers/dropdowns_helper.rb @@ -40,8 +40,9 @@ module DropdownsHelper end def dropdown_toggle(toggle_text, data_attr, options = {}) + default_label = options[:data][:default_label] 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 = content_tag(:span, toggle_text, class: "dropdown-toggle-text #{'is-default' if toggle_text == default_label}") output << icon('chevron-down') output.html_safe end diff --git a/app/views/shared/issuable/_label_dropdown.html.haml b/app/views/shared/issuable/_label_dropdown.html.haml index 1e238811657e696a1384c4409e9b6ac1b5c8638e..670c2db47950469f217ed2066f81517247cba462 100644 --- a/app/views/shared/issuable/_label_dropdown.html.haml +++ b/app/views/shared/issuable/_label_dropdown.html.haml @@ -18,7 +18,7 @@ = hidden_field_tag data_options[:field_name], label, id: nil .dropdown %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{ class: ("is-default" if selected_toggle) } = h(multi_label_name(selected_toggle || selected, "Label")) = icon('chevron-down') .dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable diff --git a/app/views/shared/issuable/_milestone_dropdown.html.haml b/app/views/shared/issuable/_milestone_dropdown.html.haml index c19e0674246ffc7cd59a7c3f1645af8db258f3c3..ec1864b5536784da49345ad9394faab42e47ecd2 100644 --- a/app/views/shared/issuable/_milestone_dropdown.html.haml +++ b/app/views/shared/issuable/_milestone_dropdown.html.haml @@ -1,5 +1,5 @@ - project = @target_project || @project -- selected_text = project.milestones.find(selected).try(:name) +- selected_text = project.milestones.find_by_id(selected).try(:name) - if selected.present? = hidden_field_tag(name, selected) = dropdown_tag(milestone_dropdown_label(selected_text), options: { title: "Filter by milestone", toggle_class: "js-milestone-select js-filter-submit #{extra_class}", filter: true, dropdown_class: "dropdown-menu-selectable",