diff --git a/app/assets/javascripts/gfm_auto_complete.js.coffee b/app/assets/javascripts/gfm_auto_complete.js.coffee index 6c0c88861c5c7fc25ae307c628a463865a3904ff..9e7c3c89f2ea55508159ff6c27dfa6f2c72f6598 100644 --- a/app/assets/javascripts/gfm_auto_complete.js.coffee +++ b/app/assets/javascripts/gfm_auto_complete.js.coffee @@ -1,47 +1,51 @@ # Creates the variables for setting up GFM auto-completion +window.GitLab ?= {} +window.GitLab.AutoComplete ?= {} + # Emoji data = [] template = "<li data-value='${insert}'>${name} <img alt='${name}' height='20' src='${image}' width='20' /></li>" -window.autocompleteEmoji = {data, template} +window.GitLab.AutoComplete.Emoji = {data, template} # Team Members url = ''; params = {private_token: '', page: 1} -window.autocompleteMembers = {data, url, params} +window.GitLab.AutoComplete.Members = {data, url, params} # Add GFM auto-completion to all input fields, that accept GFM input. window.setupGfmAutoComplete = -> - $input = $('.js-gfm-input') + input = $('.js-gfm-input') # Emoji - $input.atWho ':', - data: autocompleteEmoji.data, - tpl: autocompleteEmoji.template + input.atWho ':', + data: GitLab.AutoComplete.Emoji.data, + tpl: GitLab.AutoComplete.Emoji.template # Team Members - $input.atWho '@', (query, callback) -> + input.atWho '@', (query, callback) -> (getMoreMembers = -> - $.getJSON(autocompleteMembers.url, autocompleteMembers.params).success (members) -> - # pick the data we need - newMembersData = $.map members, (m) -> m.name - - # add the new page of data to the rest - $.merge autocompleteMembers.data, newMembersData - - # show the pop-up with a copy of the current data - callback autocompleteMembers.data[..] - - # are we past the last page? - if newMembersData.length is 0 - # set static data and stop callbacks - $input.atWho '@', - data: autocompleteMembers.data - callback: null - else - # get next page - getMoreMembers() + $.getJSON(GitLab.AutoComplete.Members.url, GitLab.AutoComplete.Members.params) + .success (members) -> + # pick the data we need + newMembersData = $.map(members, (m) -> m.name ) + + # add the new page of data to the rest + $.merge(GitLab.AutoComplete.Members.data, newMembersData) + + # show the pop-up with a copy of the current data + callback(GitLab.AutoComplete.Members.data[..]) + + # are we past the last page? + if newMembersData.length is 0 + # set static data and stop callbacks + input.atWho '@', + data: GitLab.AutoComplete.Members.data + callback: null + else + # get next page + getMoreMembers() # so the next request gets the next page - autocompleteMembers.params.page += 1 + GitLab.AutoComplete.Members.params.page += 1 ).call() diff --git a/app/views/layouts/_init_auto_complete.html.haml b/app/views/layouts/_init_auto_complete.html.haml index 9eadc18cbf8eddd7bc18e18b260607f9aed025f2..225c378f626f53f4f2c238982943a883f6dea554 100644 --- a/app/views/layouts/_init_auto_complete.html.haml +++ b/app/views/layouts/_init_auto_complete.html.haml @@ -1,11 +1,11 @@ :javascript $(function() { - autocompleteMembers.url = "#{ "/api/v2/projects/#{@project.code}/members" if @project }"; - autocompleteMembers.params.private_token = "#{current_user.private_token}"; + GitLab.AutoComplete.Members.url = "#{ "/api/v2/projects/#{@project.code}/members" if @project }"; + GitLab.AutoComplete.Members.params.private_token = "#{current_user.private_token}"; - autocompleteEmoji.data = #{raw emoji_autocomplete_source}; + GitLab.AutoComplete.Emoji.data = #{raw emoji_autocomplete_source}; // convert the list so that the items have the right format for completion - autocompleteEmoji.data = $.map(autocompleteEmoji.data, function(value) { + GitLab.AutoComplete.Emoji.data = $.map(GitLab.AutoComplete.Emoji.data, function(value) { return { name: value, insert: value+':',