Commit 57c134c39a106a3e9b9de776c06fe971b83a8224

Authored by Nihad Abbasov
1 parent ec1bccb2

cleanup coffeescript code for mentions auto-complete

app/assets/javascripts/gfm_auto_complete.js.coffee
  1 +# Creates the variables for setting up GFM auto-completion
1 2  
2   -###
3   - Creates the variables for setting up GFM auto-completion
4   -###
5 3 # Emoji
6   -window.autocompleteEmojiData = [];
7   -window.autocompleteEmojiTemplate = "<li data-value='${insert}'>${name} <img alt='${name}' height='20' src='${image}' width='20' /></li>";
  4 +data = []
  5 +template = "<li data-value='${insert}'>${name} <img alt='${name}' height='20' src='${image}' width='20' /></li>"
  6 +window.autocompleteEmoji = {data, template}
8 7  
9 8 # Team Members
10   -window.autocompleteMembersUrl = "";
11   -window.autocompleteMembersParams =
12   - private_token: ""
13   - page: 1
14   -window.autocompleteMembersData = [];
  9 +url = '';
  10 +params = {private_token: '', page: 1}
  11 +window.autocompleteMembers = {data, url, params}
15 12  
  13 +# Add GFM auto-completion to all input fields, that accept GFM input.
  14 +window.setupGfmAutoComplete = ->
  15 + $input = $('.js-gfm-input')
16 16  
  17 + # Emoji
  18 + $input.atWho ':',
  19 + data: autocompleteEmoji.data,
  20 + tpl: autocompleteEmoji.template
17 21  
18   -###
19   - Add GFM auto-completion to all input fields, that accept GFM input.
20   -###
21   -window.setupGfmAutoComplete = ->
22   - ###
23   - Emoji
24   - ###
25   - $('.js-gfm-input').atWho ':',
26   - data: autocompleteEmojiData,
27   - tpl: autocompleteEmojiTemplate
28   -
29   - ###
30   - Team Members
31   - ###
32   - $('.js-gfm-input').atWho '@', (query, callback) ->
  22 + # Team Members
  23 + $input.atWho '@', (query, callback) ->
33 24 (getMoreMembers = ->
34   - $.getJSON(autocompleteMembersUrl, autocompleteMembersParams)
35   - .success (members) ->
36   - # pick the data we need
37   - newMembersData = $.map members, (m) -> m.name
38   -
39   - # add the new page of data to the rest
40   - $.merge autocompleteMembersData, newMembersData
41   -
42   - # show the pop-up with a copy of the current data
43   - callback autocompleteMembersData[..]
44   -
45   - # are we past the last page?
46   - if newMembersData.length == 0
47   - # set static data and stop callbacks
48   - $('.js-gfm-input').atWho '@',
49   - data: autocompleteMembersData
50   - callback: null
51   - else
52   - # get next page
53   - getMoreMembers()
  25 + $.getJSON(autocompleteMembers.url, autocompleteMembers.params).success (members) ->
  26 + # pick the data we need
  27 + newMembersData = $.map members, (m) -> m.name
  28 +
  29 + # add the new page of data to the rest
  30 + $.merge autocompleteMembers.data, newMembersData
  31 +
  32 + # show the pop-up with a copy of the current data
  33 + callback autocompleteMembers.data[..]
  34 +
  35 + # are we past the last page?
  36 + if newMembersData.length is 0
  37 + # set static data and stop callbacks
  38 + $input.atWho '@',
  39 + data: autocompleteMembers.data
  40 + callback: null
  41 + else
  42 + # get next page
  43 + getMoreMembers()
54 44  
55 45 # so the next request gets the next page
56   - autocompleteMembersParams.page += 1;
57   - ).call();
  46 + autocompleteMembers.params.page += 1
  47 + ).call()
... ...
app/views/layouts/_init_auto_complete.html.haml
1 1 :javascript
2 2 $(function() {
3   - autocompleteMembersUrl = "#{ "/api/v2/projects/#{@project.code}/members" if @project }";
4   - autocompleteMembersParams.private_token = "#{current_user.authentication_token}";
  3 + autocompleteMembers.url = "#{ "/api/v2/projects/#{@project.code}/members" if @project }";
  4 + autocompleteMembers.params.private_token = "#{current_user.private_token}";
5 5  
6   - autocompleteEmojiData = #{raw emoji_autocomplete_source};
  6 + autocompleteEmoji.data = #{raw emoji_autocomplete_source};
7 7 // convert the list so that the items have the right format for completion
8   - autocompleteEmojiData = $.map(autocompleteEmojiData, function(value) {
  8 + autocompleteEmoji.data = $.map(autocompleteEmoji.data, function(value) {
9 9 return {
10 10 name: value,
11 11 insert: value+':',
... ...