diff --git a/app/views/notes/_common_form.html.haml b/app/views/notes/_common_form.html.haml index 260725e97869584bfe9431386d31ec231369ce8d..4ac26d33e668514b26c5d261a2d60dc10bf2791a 100644 --- a/app/views/notes/_common_form.html.haml +++ b/app/views/notes/_common_form.html.haml @@ -39,12 +39,46 @@ :javascript $(function(){ - var names = #{@project.users.pluck(:name)}, emoji = ['+1', '-1']; - var emoji = $.map(emoji, function(value, i) {return {key:value + ':', name:value}}); - $('#note_note, .per_line_form .line-note-text'). - atWho('@', { data: names }). - atWho(':', { - data: emoji, - tpl: "
  • ${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}
  • " - }); + // init auto-completion of team members + var membersUrl = "#{root_url}/api/v2/projects/#{@project.code}/members"; + var membersParams = { + private_token: "#{current_user.authentication_token}", + page: 1, + }; + var membersData = []; + $('.gfm-input').atWho('@', function(query, callback) { + (function getMoreMembers() { + $.getJSON(membersUrl, membersParams). + success(function(members) { + // pick the data we need + var newMembersData = $.map(members, function(member) { return member.name }); + + // add the new page of data to the rest + $.merge(membersData, newMembersData); + + // show the pop-up with a copy of the current data + callback(membersData.slice(0)); + + // are we past the last page? + if (newMembersData.length == 0) { + // set static data and stop callbacks + $('.gfm-input').atWho('@', { data: membersData, callback: null }); + } else { + // get next page + getMoreMembers(); + } + }); + // next request will get the next page + membersParams.page += 1; + })(); + }); + + // init auto-completion of emoji + var emoji = #{emoji_for_completion}; + // convert the list so that the items have the right format for completion + emoji = $.map(emoji, function(value) {return { key: value+':', name: value }}); + $('.gfm-input').atWho(':', { + data: emoji, + tpl: "
  • ${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}
  • " + }); });