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