Commit 57c134c39a106a3e9b9de776c06fe971b83a8224
1 parent
ec1bccb2
Exists in
master
and in
4 other branches
cleanup coffeescript code for mentions auto-complete
Showing
2 changed files
with
41 additions
and
51 deletions
Show diff stats
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+':', | ... | ... |