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 # Emoji 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 # Team Members 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 (getMoreMembers = -> 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 # so the next request gets the next page 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 :javascript 1 :javascript
2 $(function() { 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 // convert the list so that the items have the right format for completion 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 return { 9 return {
10 name: value, 10 name: value,
11 insert: value+':', 11 insert: value+':',