Read about our upcoming Code of Conduct on this issue

This instance was upgraded to Heptapod 0.28.1 today

Commit fa325ce9 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Merge pull request #1597 from riyad/add-completion-for-all-emoji

Improve completion of emoji and team members 
......@@ -14,4 +14,10 @@ def note_vote_class(note)
"vote downvote"
end
end
def emoji_for_completion
# should be an array of strings
# so to_s can be called, because it is sufficient and to_json is too slow
Emoji::NAMES
end
end
......@@ -8,7 +8,7 @@
= f.hidden_field :noteable_id
= f.hidden_field :noteable_type
= f.text_area :note, size: 255, class: 'note-text'
= f.text_area :note, size: 255, class: 'note-text gfm-input'
#preview-note.preview_note.hide
.hint
.right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
......@@ -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>"
});
});
......@@ -13,7 +13,7 @@
= f.hidden_field :noteable_id
= f.hidden_field :noteable_type
= f.hidden_field :line_code
= f.text_area :note, size: 255, class: 'line-note-text'
= f.text_area :note, size: 255, class: 'line-note-text gfm-input'
.note_actions
.buttons
= f.submit 'Add note', class: "btn save-btn submit_note submit_inline_note", id: "submit_note"
......
require 'spec_helper'
describe NotesHelper do
describe "#emoji_for_completion" do
it "should be an Array of Strings" do
emoji_for_completion.should be_a(Array)
emoji_for_completion.each { |emoji| emoji.should be_a(String) }
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment