diff options
author | Riyad Preukschas <riyad@informatik.uni-bremen.de> | 2012-10-09 14:48:35 +0200 |
---|---|---|
committer | Riyad Preukschas <riyad@informatik.uni-bremen.de> | 2012-10-09 14:48:35 +0200 |
commit | 37e579ce10376ef16f9e9f28b81b0ca788438204 (patch) | |
tree | 486d0f0900ca3c2c7f1e539af090bf7788634367 | |
parent | 3adfbe3e81697f61775d4d08d8eacde5a13a95c4 (diff) | |
download | gitlab-ce-37e579ce10376ef16f9e9f28b81b0ca788438204.tar.gz |
Redo the auto-completion JS for notes
-rw-r--r-- | app/views/notes/_common_form.html.haml | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/app/views/notes/_common_form.html.haml b/app/views/notes/_common_form.html.haml index 260725e9786..4ac26d33e66 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: "<li data-value='${key}'>${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}</li>" - }); + // 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: "<li data-value='${key}'>${name} #{escape_javascript image_tag('emoji/${name}.png', :size => '20x20')}</li>" + }); }); |