From d25c366c11cba031412aa78faa375ee6d7ba4cba Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Fri, 15 Jul 2016 18:26:54 -0500 Subject: [PATCH 1/4] =?UTF-8?q?Restore=20=E2=80=9CAssign=20to=20me?= =?UTF-8?q?=E2=80=9D=20link=20below=20assignee=20dropdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/shared/issuable/_form.html.haml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index a8a8426df521..316f2a1f1444 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -57,6 +57,8 @@ = hidden_field_tag("#{issuable.class.model_name.param_key}[assignee_id]", issuable.assignee_id) = dropdown_tag(user_dropdown_label(issuable.assignee_id, "Assignee"), options: { toggle_class: "js-user-search js-issuable-form-dropdown js-assignee-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee js-filter-submit", 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 = 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) } -- GitLab From 13c588b902c7e7912cc41ea8332e67228a9b41c6 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Fri, 15 Jul 2016 18:31:18 -0500 Subject: [PATCH 2/4] Initialize dropdowns on Merge Request views --- app/assets/javascripts/dispatcher.js.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index b5da15e9e499..148ba394353a 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -46,6 +46,8 @@ class Dispatcher shortcut_handler = new ShortcutsNavigation() new GLForm($('.merge-request-form')) new IssuableForm($('.merge-request-form')) + new LabelsSelect() + new MilestoneSelect() when 'projects:tags:new' new ZenMode() new GLForm($('.tag-form')) -- GitLab From 9bbbad6c0121d7360c02c1d87f9637174fa0d023 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Fri, 15 Jul 2016 18:33:22 -0500 Subject: [PATCH 3/4] =?UTF-8?q?Place=20=E2=80=9CAssign=20to=20me=E2=80=9D?= =?UTF-8?q?=20next=20to=20dropdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/shared/issuable/_form.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 316f2a1f1444..a525761c9e33 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -57,8 +57,8 @@ = hidden_field_tag("#{issuable.class.model_name.param_key}[assignee_id]", issuable.assignee_id) = dropdown_tag(user_dropdown_label(issuable.assignee_id, "Assignee"), options: { toggle_class: "js-user-search js-issuable-form-dropdown js-assignee-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee js-filter-submit", 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' +   + = link_to 'Assign to me', '#', class: 'assign-to-me-link' .form-group.issue-milestone = 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) } -- GitLab From 49e91c07a19e574e3f7508bc232ae16e758a3d26 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Fri, 15 Jul 2016 21:07:32 -0500 Subject: [PATCH 4/4] Fixes label when unselecting an item from dropdown list --- app/assets/javascripts/gl_dropdown.js.coffee | 7 ++- .../javascripts/labels_select.js.coffee | 63 +++++++++++++++---- 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 1b0d0db89542..dc1ac00c3c99 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -511,9 +511,6 @@ class GitLabDropdown # Toggle active class for the tick mark el.addClass ACTIVE_CLASS - # Toggle the dropdown label - if @options.toggleLabel - @updateLabel(selectedObject, el, @) if value? if !field.length and fieldName @addInput(fieldName, value) @@ -522,6 +519,10 @@ class GitLabDropdown .val value .trigger 'change' + # Toggle the dropdown label + if @options.toggleLabel + @updateLabel(selectedObject, el, @) + return selectedObject addInput: (fieldName, value)-> diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 1a802b814529..896a0b374011 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -272,21 +272,58 @@ class @LabelsSelect fields: ['title'] selectable: true filterable: true - toggleLabel: (selected, el) -> - selected_labels = $('.js-label-select').siblings('.dropdown-menu-labels').find('.is-active') - - if selected and selected.title? - if selected_labels.length > 1 - "#{selected.title} +#{selected_labels.length - 1} more" + 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] + + # We are removing a label + if numberSelectedLabels is 1 + firstLabel + else if numberSelectedLabels > 1 + "#{firstLabel} +#{numberSelectedLabels - 1} more" else - selected.title - else if not selected and selected_labels.length isnt 0 - if selected_labels.length > 1 - "#{$(selected_labels[0]).text()} +#{selected_labels.length - 1} more" - else if selected_labels.length is 1 - $(selected_labels).text() + defaultLabel + # when clicking on a dropdown option else - defaultLabel + if glDropdownInstance? + $dropdownParent = glDropdownInstance.dropdown.closest '.issuable-form-select-holder, .labels-filter' + else + $dropdownParent = $() + + $labelInputs = $dropdownParent.find "input[name='#{@fieldName}']" + + # Find the label by its attribute according the dropdown settings + if $dropdown.hasClass 'js-issuable-form-dropdown' + # When settings labels to a issuable we find the label for its ID + whereQuery = { id: parseInt $labelInputs.first().val() } + 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 when filtering 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" + + # else we are removing a label + else + if numberSelectedLabels is 1 + firstLabel.title + else if numberSelectedLabels > 1 + "#{firstLabel.title} +#{numberSelectedLabels - 1} more" + else + defaultLabel fieldName: $dropdown.data('field-name') id: (label) -> if $dropdown.hasClass('js-issuable-form-dropdown') -- GitLab