Commit a567d596f85b2f2f23e8e6f31f0eb3fa957f2c48
Exists in
master
and in
4 other branches
Merge pull request #2305 from gitlabhq/fix_gfm_auto_complete
Fix and refactoring gfm_autocomplete
Showing
4 changed files
with
22 additions
and
28 deletions
Show diff stats
app/assets/javascripts/gfm_auto_complete.js.coffee
| @@ -13,7 +13,6 @@ GitLab.GfmAutoComplete = | @@ -13,7 +13,6 @@ GitLab.GfmAutoComplete = | ||
| 13 | url: '' | 13 | url: '' |
| 14 | params: | 14 | params: |
| 15 | private_token: '' | 15 | private_token: '' |
| 16 | - page: 1 | ||
| 17 | template: '<li data-value="${username}">${username} <small>${name}</small></li>' | 16 | template: '<li data-value="${username}">${username} <small>${name}</small></li>' |
| 18 | 17 | ||
| 19 | # Add GFM auto-completion to all input fields, that accept GFM input. | 18 | # Add GFM auto-completion to all input fields, that accept GFM input. |
| @@ -29,30 +28,11 @@ GitLab.GfmAutoComplete = | @@ -29,30 +28,11 @@ GitLab.GfmAutoComplete = | ||
| 29 | input.atWho '@', | 28 | input.atWho '@', |
| 30 | tpl: @Members.template | 29 | tpl: @Members.template |
| 31 | callback: (query, callback) => | 30 | callback: (query, callback) => |
| 32 | - (getMoreMembers = => | ||
| 33 | - $.getJSON(@Members.url, @Members.params).done (members) => | ||
| 34 | - # pick the data we need | ||
| 35 | - newMembersData = $.map(members, (m) -> | ||
| 36 | - username: m.username | ||
| 37 | - name: m.name | ||
| 38 | - ) | 31 | + request_params = $.extend({}, @Members.params, query: query) |
| 32 | + $.getJSON(@Members.url, request_params).done (members) => | ||
| 33 | + new_members_data = $.map(members, (m) -> | ||
| 34 | + username: m.username, | ||
| 35 | + name: m.name | ||
| 36 | + ) | ||
| 37 | + callback(new_members_data) | ||
| 39 | 38 | ||
| 40 | - # add the new page of data to the rest | ||
| 41 | - $.merge(@Members.data, newMembersData) | ||
| 42 | - | ||
| 43 | - # show the pop-up with a copy of the current data | ||
| 44 | - callback(@Members.data[..]) | ||
| 45 | - | ||
| 46 | - # are we past the last page? | ||
| 47 | - if newMembersData.length is 0 | ||
| 48 | - # set static data and stop callbacks | ||
| 49 | - input.atWho '@', | ||
| 50 | - data: @Members.data | ||
| 51 | - callback: null | ||
| 52 | - else | ||
| 53 | - # get next page | ||
| 54 | - getMoreMembers() | ||
| 55 | - | ||
| 56 | - # so the next callback requests the next page | ||
| 57 | - @Members.params.page += 1 | ||
| 58 | - ).call() |
doc/api/projects.md
| @@ -126,6 +126,7 @@ GET /projects/:id/members | @@ -126,6 +126,7 @@ GET /projects/:id/members | ||
| 126 | Parameters: | 126 | Parameters: |
| 127 | 127 | ||
| 128 | + `id` (required) - The ID or code name of a project | 128 | + `id` (required) - The ID or code name of a project |
| 129 | ++ `query` - Query string | ||
| 129 | 130 | ||
| 130 | ## Get project team member | 131 | ## Get project team member |
| 131 | 132 |
lib/api/projects.rb
| @@ -57,10 +57,15 @@ module Gitlab | @@ -57,10 +57,15 @@ module Gitlab | ||
| 57 | # | 57 | # |
| 58 | # Parameters: | 58 | # Parameters: |
| 59 | # id (required) - The ID or code name of a project | 59 | # id (required) - The ID or code name of a project |
| 60 | + # query - Query string | ||
| 60 | # Example Request: | 61 | # Example Request: |
| 61 | # GET /projects/:id/members | 62 | # GET /projects/:id/members |
| 62 | get ":id/members" do | 63 | get ":id/members" do |
| 63 | - @members = paginate user_project.users | 64 | + if params[:query].present? |
| 65 | + @members = paginate user_project.users.where("username LIKE ?", "%#{params[:query]}%") | ||
| 66 | + else | ||
| 67 | + @members = paginate user_project.users | ||
| 68 | + end | ||
| 64 | present @members, with: Entities::ProjectMember, project: user_project | 69 | present @members, with: Entities::ProjectMember, project: user_project |
| 65 | end | 70 | end |
| 66 | 71 |
spec/requests/api/projects_spec.rb
| @@ -117,6 +117,14 @@ describe Gitlab::API do | @@ -117,6 +117,14 @@ describe Gitlab::API do | ||
| 117 | json_response.count.should == 2 | 117 | json_response.count.should == 2 |
| 118 | json_response.first['email'].should == user.email | 118 | json_response.first['email'].should == user.email |
| 119 | end | 119 | end |
| 120 | + | ||
| 121 | + it "finds team members with query string" do | ||
| 122 | + get api("/projects/#{project.path}/members", user), query: user.username | ||
| 123 | + response.status.should == 200 | ||
| 124 | + json_response.should be_an Array | ||
| 125 | + json_response.count.should == 1 | ||
| 126 | + json_response.first['email'].should == user.email | ||
| 127 | + end | ||
| 120 | end | 128 | end |
| 121 | 129 | ||
| 122 | describe "GET /projects/:id/members/:user_id" do | 130 | describe "GET /projects/:id/members/:user_id" do |