diff options
Diffstat (limited to 'app/assets/javascripts/gfm_auto_complete.js')
-rw-r--r-- | app/assets/javascripts/gfm_auto_complete.js | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js index c5ea4cc92fd..22f88b1caa7 100644 --- a/app/assets/javascripts/gfm_auto_complete.js +++ b/app/assets/javascripts/gfm_auto_complete.js @@ -1,6 +1,6 @@ import $ from 'jquery'; import '~/lib/utils/jquery_at_who'; -import { escape, template } from 'lodash'; +import { escape, sortBy, template } from 'lodash'; import * as Emoji from '~/emoji'; import axios from '~/lib/utils/axios_utils'; import { s__, __, sprintf } from '~/locale'; @@ -325,25 +325,7 @@ class GfmAutoComplete { return items; } - const lowercaseQuery = query.toLowerCase(); - const members = items.slice(); - const { nameOrUsernameStartsWith, nameOrUsernameIncludes } = GfmAutoComplete.Members; - - return members.sort((a, b) => { - if (nameOrUsernameStartsWith(a, lowercaseQuery)) { - return -1; - } - if (nameOrUsernameStartsWith(b, lowercaseQuery)) { - return 1; - } - if (nameOrUsernameIncludes(a, lowercaseQuery)) { - return -1; - } - if (nameOrUsernameIncludes(b, lowercaseQuery)) { - return 1; - } - return 0; - }); + return GfmAutoComplete.Members.sort(query, items); }, }, }); @@ -837,6 +819,15 @@ GfmAutoComplete.Members = { // `member.search` is a name:username string like `MargeSimpson msimpson` return member.search.toLowerCase().includes(query); }, + sort(query, members) { + const lowercaseQuery = query.toLowerCase(); + const { nameOrUsernameStartsWith, nameOrUsernameIncludes } = GfmAutoComplete.Members; + + return sortBy(members, [ + (member) => (nameOrUsernameStartsWith(member, lowercaseQuery) ? -1 : 0), + (member) => (nameOrUsernameIncludes(member, lowercaseQuery) ? -1 : 0), + ]); + }, }; GfmAutoComplete.Labels = { templateFunction(color, title) { |