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 | # 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+':', |