Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-03-20 23:55:25 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-03-20 23:55:25 +0400
commit3cdac0b93440db5a3b0871a06be53bf8767b7dc8 (patch)
treea04e717183d184e2de6826ec9a099dfa9bd27ade
parenta163135cb5bd9886b634d8026b7adf473b023782 (diff)
Use Api.js to handle api calls to gitlab
-rw-r--r--app/assets/javascripts/api.js.coffee53
-rw-r--r--app/assets/javascripts/users_select.js.coffee31
-rw-r--r--app/assets/javascripts/wall.js.coffee28
3 files changed, 70 insertions, 42 deletions
diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee
new file mode 100644
index 00000000000..ca721517867
--- /dev/null
+++ b/app/assets/javascripts/api.js.coffee
@@ -0,0 +1,53 @@
+@Api =
+ users_path: "/api/:version/users.json"
+ user_path: "/api/:version/users/:id.json"
+ notes_path: "/api/:version/projects/:id/notes.json"
+
+ # Get 20 (depends on api) recent notes
+ # and sort the ascending from oldest to newest
+ notes: (project_id, callback) ->
+ url = Api.buildUrl(Api.notes_path)
+ url = url.replace(':id', project_id)
+
+ $.ajax(
+ url: url,
+ data:
+ private_token: gon.api_token
+ gfm: true
+ recent: true
+ dataType: "json"
+ ).done (notes) ->
+ notes.sort (a, b) ->
+ return a.id - b.id
+ callback(notes)
+
+ user: (user_id, callback) ->
+ url = Api.buildUrl(Api.user_path)
+ url = url.replace(':id', user_id)
+
+ $.ajax(
+ url: url
+ data:
+ private_token: gon.api_token
+ dataType: "json"
+ ).done (user) ->
+ callback(user)
+
+ # Return users list. Filtered by query
+ # Only active users retrieved
+ users: (query, callback) ->
+ url = Api.buildUrl(Api.users_path)
+
+ $.ajax(
+ url: url
+ data:
+ private_token: gon.api_token
+ search: query
+ per_page: 20
+ active: true
+ dataType: "json"
+ ).done (users) ->
+ callback(users)
+
+ buildUrl: (url) ->
+ return url.replace(':version', gon.api_version)
diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee
index f8049384364..f9e523ea49f 100644
--- a/app/assets/javascripts/users_select.js.coffee
+++ b/app/assets/javascripts/users_select.js.coffee
@@ -18,34 +18,19 @@ $ ->
placeholder: "Search for a user"
multiple: $('.ajax-users-select').hasClass('multiselect')
minimumInputLength: 0
- ajax: # instead of writing the function to execute the request we use Select2's convenient helper
- url: "/api/" + gon.api_version + "/users.json"
- dataType: "json"
- data: (term, page) ->
- search: term # search term
- per_page: 10
- active: true
- private_token: gon.api_token
-
- results: (data, page) -> # parse the results into the format expected by Select2.
- # since we are using custom formatting functions we do not need to alter remote JSON data
- results: data
+ query: (query) ->
+ Api.users query.term, (users) ->
+ data = { results: users }
+ query.callback(data)
initSelection: (element, callback) ->
id = $(element).val()
if id isnt ""
- $.ajax(
- "/api/" + gon.api_version + "/users/" + id + ".json",
- dataType: "json"
- data:
- private_token: gon.api_token
- ).done (data) ->
- callback data
+ Api.user(id, callback)
- formatResult: userFormatResult # omitted for brevity, see the source of this page
- formatSelection: userFormatSelection # omitted for brevity, see the source of this page
- dropdownCssClass: "ajax-users-dropdown" # apply css that makes the dropdown taller
+ formatResult: userFormatResult
+ formatSelection: userFormatSelection
+ dropdownCssClass: "ajax-users-dropdown"
escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results
m
-
diff --git a/app/assets/javascripts/wall.js.coffee b/app/assets/javascripts/wall.js.coffee
index e53a9e7798f..a35c8c6004e 100644
--- a/app/assets/javascripts/wall.js.coffee
+++ b/app/assets/javascripts/wall.js.coffee
@@ -1,12 +1,9 @@
@Wall =
note_ids: []
- notes_path: null
- notes_params: null
project_id: null
init: (project_id) ->
Wall.project_id = project_id
- Wall.notes_path = "/api/" + gon.api_version + "/projects/" + project_id + "/notes.json"
Wall.getContent()
Wall.initRefresh()
Wall.initForm()
@@ -15,22 +12,15 @@
# Gets an initial set of notes.
#
getContent: ->
- $.ajax
- url: Wall.notes_path,
- data:
- private_token: gon.api_token
- gfm: true
- recent: true
- dataType: "json"
- success: (notes) ->
- notes.sort (a, b) ->
- return a.id - b.id
- $.each notes, (i, note)->
- if $.inArray(note.id, Wall.note_ids) == -1
- Wall.note_ids.push(note.id)
- Wall.renderNote(note)
- Wall.scrollDown()
- $("abbr.timeago").timeago()
+ Api.notes Wall.project_id, (notes) ->
+ $.each notes, (i, note) ->
+ # render note if it not present in loaded list
+ # or skip if rendered
+ if $.inArray(note.id, Wall.note_ids) == -1
+ Wall.note_ids.push(note.id)
+ Wall.renderNote(note)
+ Wall.scrollDown()
+ $("abbr.timeago").timeago()
initRefresh: ->
setInterval("Wall.refresh()", 10000)