Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-01-18 16:16:46 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-01-18 16:16:46 +0400
commit073a269831d5bf6d9b9c55d91826d87721746bc9 (patch)
tree8f25693fc6b18ee11ff8d9e744c81534189e412d /app/helpers/search_helper.rb
parent4d7792bc388d72a8ce6c2f84e102ba68a28dae81 (diff)
Refactor search autocomplete. Use ajax for source
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/helpers/search_helper.rb')
-rw-r--r--app/helpers/search_helper.rb53
1 files changed, 36 insertions, 17 deletions
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index f24156e4d85..20b50debb44 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -1,16 +1,22 @@
module SearchHelper
- def search_autocomplete_source
+ def search_autocomplete_opts(term)
return unless current_user
+
+ resources_results = [
+ groups_autocomplete(term),
+ projects_autocomplete(term),
+ public_projects_autocomplete(term),
+ ].flatten
+
+ generic_results = project_autocomplete + default_autocomplete + help_autocomplete
+ generic_results.select! { |result| result[:label] =~ Regexp.new(term, "i") }
+
[
- groups_autocomplete,
- projects_autocomplete,
- public_projects_autocomplete,
- default_autocomplete,
- project_autocomplete,
- help_autocomplete
+ resources_results,
+ generic_results
].flatten.uniq do |item|
item[:label]
- end.to_json
+ end
end
private
@@ -65,23 +71,36 @@ module SearchHelper
end
# Autocomplete results for the current user's groups
- def groups_autocomplete
- current_user.authorized_groups.map do |group|
- { label: "group: #{simple_sanitize(group.name)}", url: group_path(group) }
+ def groups_autocomplete(term, limit = 5)
+ current_user.authorized_groups.search(term).limit(limit).map do |group|
+ {
+ label: "group: #{simple_sanitize(group.name)}",
+ url: group_path(group)
+ }
end
end
# Autocomplete results for the current user's projects
- def projects_autocomplete
- current_user.authorized_projects.non_archived.map do |p|
- { label: "project: #{simple_sanitize(p.name_with_namespace)}", url: project_path(p) }
+ def projects_autocomplete(term, limit = 5)
+ current_user.authorized_projects.search_by_title(term).non_archived.limit(limit).map do |p|
+ {
+ label: "project: #{simple_sanitize(p.name_with_namespace)}",
+ url: project_path(p)
+ }
end
end
# Autocomplete results for the current user's projects
- def public_projects_autocomplete
- Project.public_or_internal_only(current_user).non_archived.map do |p|
- { label: "project: #{simple_sanitize(p.name_with_namespace)}", url: project_path(p) }
+ def public_projects_autocomplete(term, limit = 5)
+ Project.public_or_internal_only(current_user).search_by_title(term).non_archived.limit(limit).map do |p|
+ {
+ label: "project: #{simple_sanitize(p.name_with_namespace)}",
+ url: project_path(p)
+ }
end
end
+
+ def simple_sanitize(str)
+ Sanitize.clean(str)
+ end
end