Commit 37e579ce10376ef16f9e9f28b81b0ca788438204

Authored by Riyad Preukschas
1 parent 3adfbe3e

Redo the auto-completion JS for notes

Showing 1 changed file with 42 additions and 8 deletions   Show diff stats
app/views/notes/_common_form.html.haml
@@ -39,12 +39,46 @@ @@ -39,12 +39,46 @@
39 39
40 :javascript 40 :javascript
41 $(function(){ 41 $(function(){
42 - var names = #{@project.users.pluck(:name)}, emoji = ['+1', '-1'];  
43 - var emoji = $.map(emoji, function(value, i) {return {key:value + ':', name:value}});  
44 - $('#note_note, .per_line_form .line-note-text').  
45 - atWho('@', { data: names }).  
46 - atWho(':', {  
47 - data: emoji,  
48 - tpl: "<li data-value='${key}'>${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}</li>"  
49 - }); 42 + // init auto-completion of team members
  43 + var membersUrl = "#{root_url}/api/v2/projects/#{@project.code}/members";
  44 + var membersParams = {
  45 + private_token: "#{current_user.authentication_token}",
  46 + page: 1,
  47 + };
  48 + var membersData = [];
  49 + $('.gfm-input').atWho('@', function(query, callback) {
  50 + (function getMoreMembers() {
  51 + $.getJSON(membersUrl, membersParams).
  52 + success(function(members) {
  53 + // pick the data we need
  54 + var newMembersData = $.map(members, function(member) { return member.name });
  55 +
  56 + // add the new page of data to the rest
  57 + $.merge(membersData, newMembersData);
  58 +
  59 + // show the pop-up with a copy of the current data
  60 + callback(membersData.slice(0));
  61 +
  62 + // are we past the last page?
  63 + if (newMembersData.length == 0) {
  64 + // set static data and stop callbacks
  65 + $('.gfm-input').atWho('@', { data: membersData, callback: null });
  66 + } else {
  67 + // get next page
  68 + getMoreMembers();
  69 + }
  70 + });
  71 + // next request will get the next page
  72 + membersParams.page += 1;
  73 + })();
  74 + });
  75 +
  76 + // init auto-completion of emoji
  77 + var emoji = #{emoji_for_completion};
  78 + // convert the list so that the items have the right format for completion
  79 + emoji = $.map(emoji, function(value) {return { key: value+':', name: value }});
  80 + $('.gfm-input').atWho(':', {
  81 + data: emoji,
  82 + tpl: "<li data-value='${key}'>${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}</li>"
  83 + });
50 }); 84 });