From dd35de1ad8e6ff8436552666d3f9f9bec0a309d9 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 8 Mar 2016 12:32:04 +0000 Subject: [PATCH] Uses a publicly facing URL so that it allows labels & milestones to be visible when not logged in --- app/assets/javascripts/api.js.coffee | 26 ------------------- app/assets/javascripts/gl_dropdown.js.coffee | 1 - .../javascripts/labels_select.js.coffee | 21 ++++++++++++--- .../javascripts/milestone_select.js.coffee | 26 ++++++++++++++----- app/views/shared/issuable/_filter.html.haml | 6 ++--- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee index 36c6a76e09c..2ddf8612db3 100644 --- a/app/assets/javascripts/api.js.coffee +++ b/app/assets/javascripts/api.js.coffee @@ -5,7 +5,6 @@ group_projects_path: "/api/:version/groups/:id/projects.json" projects_path: "/api/:version/projects.json" labels_path: "/api/:version/projects/:id/labels" - milestones_path: "/api/:version/projects/:id/milestones" group: (group_id, callback) -> url = Api.buildUrl(Api.group_path) @@ -63,18 +62,6 @@ ).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) - newLabel: (project_id, data, callback) -> url = Api.buildUrl(Api.labels_path) url = url.replace(':id', project_id) @@ -88,19 +75,6 @@ ).done (label) -> callback(label) - - milestones: (project_id, callback) -> - url = Api.buildUrl(Api.milestones_path) - url = url.replace(':id', project_id) - - $.ajax( - url: url - data: - private_token: gon.api_token - dataType: "json" - ).done (milestones) -> - callback(milestones) - # 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 c65b3e31450..a714ba3d675 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -220,7 +220,6 @@ class GitLabDropdown if @renderedData selectedObject = @renderedData[selectedIndex] value = if @options.id then @options.id(selectedObject, el) else selectedObject.id - console.log value if @options.multiSelect fieldName = "#{fieldName}[]" diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 0b4e2ad7aa6..14ee529ba35 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -2,6 +2,7 @@ class @LabelsSelect constructor: -> $('.js-label-select').each (i, dropdown) -> projectId = $(dropdown).data('project-id') + labelUrl = $(dropdown).data("labels") selectedLabel = $(dropdown).data('selected') newLabelField = $('#new_label_name') newColorField = $('#new_label_color') @@ -32,13 +33,25 @@ class @LabelsSelect $(dropdown).glDropdown( data: (term, callback) -> - Api.projectLabels 8, callback + # We have to fetch the JS version of the labels list because there is no + # public facing JSON url for labels + $.ajax( + url: labelUrl + ).done (data) -> + html = $(data) + data = [] + html.find('.label-row a').each -> + data.push( + title: $(@).text().trim() + ) + + callback data renderRow: (label) -> - selected = if label.name is selectedLabel then "is-active" else "" + selected = if label.title is selectedLabel then "is-active" else "" "
  • - #{label.name} + #{label.title}
  • " filterable: true @@ -47,7 +60,7 @@ class @LabelsSelect selectable: true fieldName: $(dropdown).data('field-name') id: (label) -> - label.name + label.title clicked: -> if $(dropdown).hasClass "js-filter-submit" $(dropdown).parents('form').submit() diff --git a/app/assets/javascripts/milestone_select.js.coffee b/app/assets/javascripts/milestone_select.js.coffee index 9c45800af6e..92b42bfe864 100644 --- a/app/assets/javascripts/milestone_select.js.coffee +++ b/app/assets/javascripts/milestone_select.js.coffee @@ -2,18 +2,29 @@ class @MilestoneSelect constructor: -> $('.js-milestone-select').each (i, dropdown) -> projectId = $(dropdown).data('project-id') + milestonesUrl = $(dropdown).data('milestones') selectedMilestone = $(dropdown).data('selected') showNo = $(dropdown).data('show-no') showAny = $(dropdown).data('show-any') + useId = $(dropdown).data('use-id') $(dropdown).glDropdown( data: (term, callback) -> - Api.milestones projectId, (data) -> - data = $.map data, (milestone) -> - return milestone if milestone.state isnt "closed" + $.ajax( + url: milestonesUrl + ).done (data) -> + html = $(data) + data = [] + html.find('.milestone strong a').each -> + link = $(@).attr("href").split("/") + data.push( + id: link[link.length - 1] + title: $(@).text().trim() + ) if showNo data.unshift( + id: "0" title: 'No milestone' ) @@ -34,10 +45,13 @@ class @MilestoneSelect text: (milestone) -> milestone.title id: (milestone) -> - if milestone.title isnt "Any milestone" - milestone.title + if !useId + if milestone.title isnt "Any milestone" + milestone.title + else + "" else - "" + milestone.id isSelected: (milestone) -> milestone.title is selectedMilestone clicked: -> diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index b261ca498c6..0e023a68095 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -22,7 +22,7 @@ - if params[:milestone_title] = hidden_field_tag(:milestone_title, params[:milestone_title]) = dropdown_tag("Milestone", title: "Filter by milestone", toggle_class: 'js-milestone-select js-filter-submit', filter: true, dropdown_class: "dropdown-menu-selectable", - placeholder: "Search milestones", footer_content: true, data: {show_no: true, show_any: true, field_name: "milestone_title", selected: params[:milestone_title], project_id: @project.id}) do + placeholder: "Search milestones", footer_content: true, data: {show_no: true, show_any: true, field_name: "milestone_title", selected: params[:milestone_title], project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :js)}) do %ul.dropdown-footer-list - if can? current_user, :admin_milestone, @project %li @@ -39,7 +39,7 @@ - if params[:label_name] = hidden_field_tag(:label_name, params[:label_name]) .dropdown - %button.dropdown-menu-toggle.js-label-select.js-filter-submit{type: "button", data: {toggle: "dropdown", field_name: "label_name", selected: params[:label_name], project_id: @project.id}} + %button.dropdown-menu-toggle.js-label-select.js-filter-submit{type: "button", data: {toggle: "dropdown", field_name: "label_name", selected: params[:label_name], project_id: @project.id, labels: namespace_project_labels_path(@project.namespace, @project, :js)}} %span.dropdown-toggle-text Label = icon('chevron-down') @@ -106,7 +106,7 @@ placeholder: "Search authors", data: {first_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]"}) .filter-item.inline = dropdown_tag("Milestone", title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable", - placeholder: "Search milestones", data: {show_no: true, field_name: "update[milestone_id]", project_id: @project.id}) + placeholder: "Search milestones", data: {show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :js), use_id: true}) = hidden_field_tag 'update[issues_ids]', [] = hidden_field_tag :state_event, params[:state_event] .filter-item.inline