diff options
author | Phil Hughes <me@iamphill.com> | 2016-03-07 17:17:11 +0000 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2016-03-10 13:54:54 +0000 |
commit | 11b52e287be32ccd2eed166e4622f1a6b05c9ba7 (patch) | |
tree | 29e64d28d0755d1139ff755ef98cc182ba8d39ff /app | |
parent | cae03f8b2bc13c4bba3a7905776a04580efe300d (diff) | |
download | gitlab-ce-11b52e287be32ccd2eed166e4622f1a6b05c9ba7.tar.gz |
Applied new dropdowns to issue filters
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/api.js.coffee | 13 | ||||
-rw-r--r-- | app/assets/javascripts/gl_dropdown.js.coffee | 7 | ||||
-rw-r--r-- | app/assets/javascripts/labels_select.js.coffee | 25 | ||||
-rw-r--r-- | app/assets/javascripts/users_select.js.coffee | 41 | ||||
-rw-r--r-- | app/assets/stylesheets/framework/dropdowns.scss | 11 | ||||
-rw-r--r-- | app/helpers/dropdowns_helper.rb | 8 | ||||
-rw-r--r-- | app/views/shared/issuable/_filter.html.haml | 24 |
7 files changed, 113 insertions, 16 deletions
diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee index 3e0fdb3f795..466b086259a 100644 --- a/app/assets/javascripts/api.js.coffee +++ b/app/assets/javascripts/api.js.coffee @@ -4,6 +4,7 @@ namespaces_path: "/api/:version/namespaces.json" group_projects_path: "/api/:version/groups/:id/projects.json" projects_path: "/api/:version/projects.json" + labels_path: "/api/:version/projects/:id/labels" group: (group_id, callback) -> url = Api.buildUrl(Api.group_path) @@ -61,6 +62,18 @@ ).done (projects) -> callback(projects) + projectLabels: (project_id, callback) -> + url = Api.buildUrl(Api.labels_path) + url = url.replace(':id', project_id) + + $.ajax( + url: url + data: + private_token: gon.api_token + dataType: "json" + ).done (labels) -> + callback(labels) + # Return group projects list. Filtered by query groupProjects: (group_id, query, callback) -> url = Api.buildUrl(Api.group_projects_path) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index f15d65473c6..10b8fd07a0c 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -185,9 +185,10 @@ class GitLabDropdown # Toggle active class for the tick mark el.toggleClass "is-active" - # Create hidden input for form - input = "<input type='hidden' name='#{fieldName}' value='#{value}' />" - @dropdown.before input + if value isnt 0 + # Create hidden input for form + input = "<input type='hidden' name='#{fieldName}' value='#{value}' />" + @dropdown.before input $.fn.glDropdown = (opts) -> return @.each -> diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee new file mode 100644 index 00000000000..c240af0b048 --- /dev/null +++ b/app/assets/javascripts/labels_select.js.coffee @@ -0,0 +1,25 @@ +class @LabelsSelect + constructor: -> + $('.js-label-select').each (i, dropdown) -> + projectId = $(dropdown).data('project-id') + + $(dropdown).glDropdown( + data: (callback) -> + Api.projectLabels 8, callback + renderRow: (label) -> + "<li> + <a href='#'> + <span class='label' style='background-color: #{label.color}'>#{label.name}</span> + #{label.name} + </a> + </li>" + filterable: true + search: + fields: ['name'] + selectable: true + fieldName: $(dropdown).data('field-name') + id: (label) -> + label.name + clicked: -> + $(dropdown).parents('form').submit() + ) diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee index 9467011799f..2b5c2f43818 100644 --- a/app/assets/javascripts/users_select.js.coffee +++ b/app/assets/javascripts/users_select.js.coffee @@ -3,6 +3,47 @@ class @UsersSelect @usersPath = "/autocomplete/users.json" @userPath = "/autocomplete/users/:id.json" + $('.js-user-search').each (i, dropdown) => + projectId = $(dropdown).data('project-id') + showNullUser = $(dropdown).data('null-user') + selectedId = $(dropdown).data('selected') + + $(dropdown).glDropdown( + data: (callback) => + @users "", (users) => + if showNullUser + users.unshift( + name: 'Unassigned', + id: 0 + ) + + # Send the data back + callback users + filterable: true + search: + fields: ['name', 'username'] + selectable: true + fieldName: $(dropdown).data('field-name') + clicked: -> + $(dropdown).parents('form').submit() + renderRow: (user) -> + username = if user.username then "@#{user.username}" else "" + avatar = if user.avatar_url then user.avatar_url else gon.default_avatar_url + selected = if user.id is selectedId then "is-active" else "" + + "<li> + <a href='#' class='dropdown-menu-user-link #{selected}'> + <img src='#{avatar}' class='avatar avatar-inline' width='30' /> + <strong class='dropdown-menu-user-full-name'> + #{user.name} + </strong> + <span class='dropdown-menu-user-username'> + #{username} + </span> + </a> + </li>" + ) + $('.ajax-users-select').each (i, select) => @projectId = $(select).data('project-id') @groupId = $(select).data('group-id') diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 1ef9d001ed4..770534061b2 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -320,3 +320,14 @@ margin-left: -14px; } } + +.dropdown-menu-labels { + .label { + position: relative; + top: 5px; + width: 30px; + margin-right: 5px; + text-indent: -99999px; + overflow: hidden; + } +} diff --git a/app/helpers/dropdowns_helper.rb b/app/helpers/dropdowns_helper.rb index a5728968ae1..49c40e31176 100644 --- a/app/helpers/dropdowns_helper.rb +++ b/app/helpers/dropdowns_helper.rb @@ -1,14 +1,16 @@ module DropdownsHelper - def dropdown_tag(toggle_text, id: nil, toggle_class: nil, title: false, filter: false, placeholder: "", &block) + def dropdown_tag(toggle_text, id: nil, toggle_class: nil, dropdown_class: nil, title: false, filter: false, placeholder: "", data: {}, &block) content_tag :div, class: "dropdown" do + toggle_hash = data.merge({toggle: "dropdown"}) + dropdown_output = "" - dropdown_output += content_tag :button, class: "dropdown-menu-toggle #{toggle_class}", id: id, type: "button", data: {toggle: "dropdown"} do + dropdown_output += content_tag :button, class: "dropdown-menu-toggle #{toggle_class}", id: id, type: "button", data: toggle_hash do output = toggle_text output << icon('chevron-down') output.html_safe end - dropdown_output += content_tag :div, class: "dropdown-menu dropdown-select dropdown-menu-selectable" do + dropdown_output += content_tag :div, class: "dropdown-menu dropdown-select #{dropdown_class}" do output = "" if title diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index e55159d996b..2be1ee1f727 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -7,22 +7,25 @@ class: "check_all_issues left" .issues-other-filters .filter-item.inline - = users_select_tag(:author_id, selected: params[:author_id], - placeholder: 'Author', class: 'trigger-submit', any_user: "Any Author", first_user: true, current_user: true) + = dropdown_tag("Author", toggle_class: "js-user-search", title: "Filter by author", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable", + placeholder: "Search authors", data: {any_user: "Any Author", first_user: true, current_user: true, project_id: @project.id, selected: params[:author_id], field_name: "author_id"}) .filter-item.inline - = users_select_tag(:assignee_id, selected: params[:assignee_id], - placeholder: 'Assignee', class: 'trigger-submit', any_user: "Any Assignee", null_user: true, first_user: true, current_user: true) + = dropdown_tag("Assignee", toggle_class: "js-user-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable", + placeholder: "Search assignee", data: {any_user: "Any Author", first_user: true, null_user: true, current_user: true, project_id: @project.id, selected: params[:assignee_id], field_name: "assignee_id"}) .filter-item.inline.milestone-filter - = select_tag('milestone_title', projects_milestones_options, - class: 'select2 trigger-submit', include_blank: true, - data: {placeholder: 'Milestone'}) + = dropdown_tag("Milestone", title: "Filter by milestone", filter: true, dropdown_class: "dropdown-menu-selectable", + placeholder: "Search milestones", data: {field_name: "milestone_title"}) do + %ul + - @project.milestones.each do |milestone| + %li + %a{href: "#", data: {id: milestone.id}} + = milestone.name .filter-item.inline.labels-filter - = select_tag('label_name', projects_labels_options, - class: 'select2 trigger-submit', include_blank: true, - data: {placeholder: 'Label'}) + = dropdown_tag("Label", title: "Filter by label", toggle_class: "js-label-select", filter: true, dropdown_class: "dropdown-menu-labels dropdown-menu-selectable", + placeholder: "Search labels", data: {field_name: "label_name", selected: params[:label_name], project_id: @project.id}) .pull-right = render 'shared/sort_dropdown' @@ -47,6 +50,7 @@ :javascript new UsersSelect(); + new LabelsSelect(); $('form.filter-form').on('submit', function (event) { event.preventDefault(); Turbolinks.visit(this.action + '&' + $(this).serialize()); |