Commit dcea191314c778331305d0926d6852fe04477115
1 parent
0759dd45
Exists in
master
and in
4 other branches
Select2 tag for namespaces with ajax loading
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
3 changed files
with
48 additions
and
0 deletions
Show diff stats
app/assets/javascripts/api.js.coffee
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | users_path: "/api/:version/users.json" | 2 | users_path: "/api/:version/users.json" |
3 | user_path: "/api/:version/users/:id.json" | 3 | user_path: "/api/:version/users/:id.json" |
4 | notes_path: "/api/:version/projects/:id/notes.json" | 4 | notes_path: "/api/:version/projects/:id/notes.json" |
5 | + namespaces_path: "/api/:version/namespaces.json" | ||
5 | 6 | ||
6 | # Get 20 (depends on api) recent notes | 7 | # Get 20 (depends on api) recent notes |
7 | # and sort the ascending from oldest to newest | 8 | # and sort the ascending from oldest to newest |
@@ -49,6 +50,20 @@ | @@ -49,6 +50,20 @@ | ||
49 | ).done (users) -> | 50 | ).done (users) -> |
50 | callback(users) | 51 | callback(users) |
51 | 52 | ||
53 | + # Return namespaces list. Filtered by query | ||
54 | + namespaces: (query, callback) -> | ||
55 | + url = Api.buildUrl(Api.namespaces_path) | ||
56 | + | ||
57 | + $.ajax( | ||
58 | + url: url | ||
59 | + data: | ||
60 | + private_token: gon.api_token | ||
61 | + search: query | ||
62 | + per_page: 20 | ||
63 | + dataType: "json" | ||
64 | + ).done (namespaces) -> | ||
65 | + callback(namespaces) | ||
66 | + | ||
52 | buildUrl: (url) -> | 67 | buildUrl: (url) -> |
53 | url = gon.relative_url_root + url if gon.relative_url_root? | 68 | url = gon.relative_url_root + url if gon.relative_url_root? |
54 | return url.replace(':version', gon.api_version) | 69 | return url.replace(':version', gon.api_version) |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +$ -> | ||
2 | + namespaceFormatResult = (namespace) -> | ||
3 | + markup = "<div class='namespace-result'>" | ||
4 | + markup += "<span class='namespace-kind'>" + namespace.kind + "</span>" | ||
5 | + markup += "<span class='namespace-path'>" + namespace.path + "</span>" | ||
6 | + markup += "</div>" | ||
7 | + markup | ||
8 | + | ||
9 | + formatSelection = (namespace) -> | ||
10 | + namespace.kind + ": " + namespace.path | ||
11 | + | ||
12 | + $('.ajax-namespace-select').each (i, select) -> | ||
13 | + $(select).select2 | ||
14 | + placeholder: "Search for namespace" | ||
15 | + multiple: $(select).hasClass('multiselect') | ||
16 | + minimumInputLength: 0 | ||
17 | + query: (query) -> | ||
18 | + Api.namespaces query.term, (namespaces) -> | ||
19 | + data = { results: namespaces } | ||
20 | + query.callback(data) | ||
21 | + | ||
22 | + dropdownCssClass: "ajax-namespace-dropdown" | ||
23 | + formatResult: namespaceFormatResult | ||
24 | + formatSelection: formatSelection |
app/helpers/namespaces_helper.rb
@@ -16,4 +16,13 @@ module NamespacesHelper | @@ -16,4 +16,13 @@ module NamespacesHelper | ||
16 | 16 | ||
17 | grouped_options_for_select(options, selected) | 17 | grouped_options_for_select(options, selected) |
18 | end | 18 | end |
19 | + | ||
20 | + def namespace_select_tag(id, opts = {}) | ||
21 | + css_class = "ajax-namespace-select " | ||
22 | + css_class << "multiselect " if opts[:multiple] | ||
23 | + css_class << (opts[:class] || '') | ||
24 | + value = opts[:selected] || '' | ||
25 | + | ||
26 | + hidden_field_tag(id, value, class: css_class) | ||
27 | + end | ||
19 | end | 28 | end |