Commit 3cdac0b93440db5a3b0871a06be53bf8767b7dc8

Authored by Dmitriy Zaporozhets
1 parent a163135c

Use Api.js to handle api calls to gitlab

app/assets/javascripts/api.js.coffee 0 → 100644
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
  1 +@Api =
  2 + users_path: "/api/:version/users.json"
  3 + user_path: "/api/:version/users/:id.json"
  4 + notes_path: "/api/:version/projects/:id/notes.json"
  5 +
  6 + # Get 20 (depends on api) recent notes
  7 + # and sort the ascending from oldest to newest
  8 + notes: (project_id, callback) ->
  9 + url = Api.buildUrl(Api.notes_path)
  10 + url = url.replace(':id', project_id)
  11 +
  12 + $.ajax(
  13 + url: url,
  14 + data:
  15 + private_token: gon.api_token
  16 + gfm: true
  17 + recent: true
  18 + dataType: "json"
  19 + ).done (notes) ->
  20 + notes.sort (a, b) ->
  21 + return a.id - b.id
  22 + callback(notes)
  23 +
  24 + user: (user_id, callback) ->
  25 + url = Api.buildUrl(Api.user_path)
  26 + url = url.replace(':id', user_id)
  27 +
  28 + $.ajax(
  29 + url: url
  30 + data:
  31 + private_token: gon.api_token
  32 + dataType: "json"
  33 + ).done (user) ->
  34 + callback(user)
  35 +
  36 + # Return users list. Filtered by query
  37 + # Only active users retrieved
  38 + users: (query, callback) ->
  39 + url = Api.buildUrl(Api.users_path)
  40 +
  41 + $.ajax(
  42 + url: url
  43 + data:
  44 + private_token: gon.api_token
  45 + search: query
  46 + per_page: 20
  47 + active: true
  48 + dataType: "json"
  49 + ).done (users) ->
  50 + callback(users)
  51 +
  52 + buildUrl: (url) ->
  53 + return url.replace(':version', gon.api_version)
app/assets/javascripts/users_select.js.coffee
@@ -18,34 +18,19 @@ $ -> @@ -18,34 +18,19 @@ $ ->
18 placeholder: "Search for a user" 18 placeholder: "Search for a user"
19 multiple: $('.ajax-users-select').hasClass('multiselect') 19 multiple: $('.ajax-users-select').hasClass('multiselect')
20 minimumInputLength: 0 20 minimumInputLength: 0
21 - ajax: # instead of writing the function to execute the request we use Select2's convenient helper  
22 - url: "/api/" + gon.api_version + "/users.json"  
23 - dataType: "json"  
24 - data: (term, page) ->  
25 - search: term # search term  
26 - per_page: 10  
27 - active: true  
28 - private_token: gon.api_token  
29 -  
30 - results: (data, page) -> # parse the results into the format expected by Select2.  
31 - # since we are using custom formatting functions we do not need to alter remote JSON data  
32 - results: data 21 + query: (query) ->
  22 + Api.users query.term, (users) ->
  23 + data = { results: users }
  24 + query.callback(data)
33 25
34 initSelection: (element, callback) -> 26 initSelection: (element, callback) ->
35 id = $(element).val() 27 id = $(element).val()
36 if id isnt "" 28 if id isnt ""
37 - $.ajax(  
38 - "/api/" + gon.api_version + "/users/" + id + ".json",  
39 - dataType: "json"  
40 - data:  
41 - private_token: gon.api_token  
42 - ).done (data) ->  
43 - callback data 29 + Api.user(id, callback)
44 30
45 31
46 - formatResult: userFormatResult # omitted for brevity, see the source of this page  
47 - formatSelection: userFormatSelection # omitted for brevity, see the source of this page  
48 - dropdownCssClass: "ajax-users-dropdown" # apply css that makes the dropdown taller 32 + formatResult: userFormatResult
  33 + formatSelection: userFormatSelection
  34 + dropdownCssClass: "ajax-users-dropdown"
49 escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results 35 escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results
50 m 36 m
51 -  
app/assets/javascripts/wall.js.coffee
1 @Wall = 1 @Wall =
2 note_ids: [] 2 note_ids: []
3 - notes_path: null  
4 - notes_params: null  
5 project_id: null 3 project_id: null
6 4
7 init: (project_id) -> 5 init: (project_id) ->
8 Wall.project_id = project_id 6 Wall.project_id = project_id
9 - Wall.notes_path = "/api/" + gon.api_version + "/projects/" + project_id + "/notes.json"  
10 Wall.getContent() 7 Wall.getContent()
11 Wall.initRefresh() 8 Wall.initRefresh()
12 Wall.initForm() 9 Wall.initForm()
@@ -15,22 +12,15 @@ @@ -15,22 +12,15 @@
15 # Gets an initial set of notes. 12 # Gets an initial set of notes.
16 # 13 #
17 getContent: -> 14 getContent: ->
18 - $.ajax  
19 - url: Wall.notes_path,  
20 - data:  
21 - private_token: gon.api_token  
22 - gfm: true  
23 - recent: true  
24 - dataType: "json"  
25 - success: (notes) ->  
26 - notes.sort (a, b) ->  
27 - return a.id - b.id  
28 - $.each notes, (i, note)->  
29 - if $.inArray(note.id, Wall.note_ids) == -1  
30 - Wall.note_ids.push(note.id)  
31 - Wall.renderNote(note)  
32 - Wall.scrollDown()  
33 - $("abbr.timeago").timeago() 15 + Api.notes Wall.project_id, (notes) ->
  16 + $.each notes, (i, note) ->
  17 + # render note if it not present in loaded list
  18 + # or skip if rendered
  19 + if $.inArray(note.id, Wall.note_ids) == -1
  20 + Wall.note_ids.push(note.id)
  21 + Wall.renderNote(note)
  22 + Wall.scrollDown()
  23 + $("abbr.timeago").timeago()
34 24
35 initRefresh: -> 25 initRefresh: ->
36 setInterval("Wall.refresh()", 10000) 26 setInterval("Wall.refresh()", 10000)