ransack_advanced_search 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/app/helpers/ransack_advanced_search_helper.rb +38 -3
- data/app/views/ransack_advanced_search/_advanced_search.html.erb +3 -2
- data/app/views/ransack_advanced_search/_attribute_fields.erb +1 -1
- data/app/views/ransack_advanced_search/_condition_fields.erb +2 -2
- data/app/views/ransack_advanced_search/_grouping_fields.erb +19 -6
- data/app/views/ransack_advanced_search/_quick_search.html.erb +65 -0
- data/app/views/ransack_advanced_search/_value_fields.erb +1 -1
- data/config/locales/ransack.en.yml +3 -0
- data/config/locales/ransack.pt-BR.yml +3 -0
- data/lib/ransack_advanced_search/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 709e75317b253464253e2227e66d97ae1120ead2
|
4
|
+
data.tar.gz: 85ec334b704763e7f559041cfbc392ec703513b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 667d4d911afe7cffdc24dc46777adfb5e0ef7114c35abac12c43dabdbf69b888c1368739db65ad7e46df0bd55b4ccc0719f4db4659d41681cdd0e02a024db798
|
7
|
+
data.tar.gz: 47400c50f9d161176080e4d0fd74a02ab5a323313de1370495e49fd1e881b6e7846b053eba9ef86c615aa7928d18bb766668acc80f0717695aabdaf76594a651
|
data/README.md
CHANGED
@@ -101,7 +101,7 @@ In your application layout `app/views/layouts/application.erb`, include a yield
|
|
101
101
|
</body>
|
102
102
|
</html>
|
103
103
|
```
|
104
|
-
In the view that you want the advanced search views, insert the following:
|
104
|
+
In the view that you want the advanced search views you can choose betwenn quick_search and advanced_search views, so insert the following for advanced_search:
|
105
105
|
|
106
106
|
```ruby
|
107
107
|
<%= render partial: 'ransack_advanced_search/advanced_search',
|
@@ -112,6 +112,18 @@ In the view that you want the advanced search views, insert the following:
|
|
112
112
|
%>
|
113
113
|
```
|
114
114
|
|
115
|
+
Or, the following for quick_search:
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
<%= render partial: 'ransack_advanced_search/quick_search',
|
119
|
+
locals: {
|
120
|
+
search_url: advanced_search_your_models_path, # POST route we created above
|
121
|
+
redirect_path: your_models_path # GET redirect path, to return after some actions
|
122
|
+
}
|
123
|
+
%>
|
124
|
+
```
|
125
|
+
|
126
|
+
|
115
127
|
All done! Enjoy the search!
|
116
128
|
|
117
129
|
## Saving Searches
|
@@ -1,15 +1,38 @@
|
|
1
1
|
module RansackAdvancedSearchHelper
|
2
|
-
def setup_search_form(builder)
|
2
|
+
def setup_search_form(builder, search_object)
|
3
3
|
fields = builder.grouping_fields builder.object.new_grouping,
|
4
4
|
object_name: 'new_object_name', child_index: "new_grouping" do |f|
|
5
5
|
render('ransack_advanced_search/grouping_fields', f: f)
|
6
6
|
end
|
7
7
|
content_for :ransack_setup, %Q{
|
8
8
|
var search = new Search({grouping: "#{escape_javascript(fields)}"});
|
9
|
+
search.fieldsType = #{get_fields_data_type(search_object).to_json.html_safe}
|
10
|
+
search.convertFieldType = function (fieldType) {
|
11
|
+
var fieldTypeToHtmlType = {
|
12
|
+
'default': 'text',
|
13
|
+
'integer': 'number',
|
14
|
+
'date' : 'date',
|
15
|
+
'datetime' : 'date'
|
16
|
+
}
|
17
|
+
return (fieldTypeToHtmlType[fieldType] || fieldTypeToHtmlType['default']);
|
18
|
+
}
|
19
|
+
search.changeValueInputsType = function(element, fieldName) {
|
20
|
+
fieldType = search.fieldsType[fieldName];
|
21
|
+
conditionValueInputs = $(element).parents('.ransack-condition-field').find('.ransack-attribute-value');
|
22
|
+
conditionValueInputs.attr('type', search.convertFieldType(fieldType));
|
23
|
+
}
|
9
24
|
$(document).on("click", "button.add_fields", function() {
|
10
25
|
search.add_fields(this, $(this).data('fieldType'), $(this).data('content'));
|
26
|
+
if($(this).hasClass('ransack-add-attribute')) {
|
27
|
+
fieldName = $(this).parents('.ransack-condition-field').find('select.ransack-attribute-select').find('option:selected')[0].value;
|
28
|
+
search.changeValueInputsType(this, fieldName)
|
29
|
+
}
|
11
30
|
return false;
|
12
31
|
});
|
32
|
+
$(document).on('change', 'select.ransack-attribute-select', function(e) {
|
33
|
+
fieldName = $(this).find('option:selected')[0].value;
|
34
|
+
search.changeValueInputsType(this, fieldName)
|
35
|
+
});
|
13
36
|
$(document).on("click", "i.remove_fields", function() {
|
14
37
|
search.remove_fields(this);
|
15
38
|
return false;
|
@@ -21,16 +44,28 @@ module RansackAdvancedSearchHelper
|
|
21
44
|
}.html_safe
|
22
45
|
end
|
23
46
|
|
47
|
+
def get_fields_data_type(search)
|
48
|
+
bases = [''] + search.klass.ransackable_associations
|
49
|
+
fields_type = Hash.new
|
50
|
+
bases.each do |model|
|
51
|
+
model_name = model.present? ? "#{model}_" : ""
|
52
|
+
search.context.traverse(model).columns_hash.each do |field, attributes|
|
53
|
+
fields_type["#{model_name}#{field}"] = attributes.type
|
54
|
+
end
|
55
|
+
end
|
56
|
+
fields_type
|
57
|
+
end
|
58
|
+
|
24
59
|
def button_to_remove_fields
|
25
60
|
content_tag :i, nil, class: 'remove_fields glyphicon glyphicon-remove text-danger'
|
26
61
|
end
|
27
62
|
|
28
|
-
def button_to_add_fields(name, f, type)
|
63
|
+
def button_to_add_fields(name, f, type, custom_class='')
|
29
64
|
new_object = f.object.send "build_#{type}"
|
30
65
|
fields = f.send("#{type}_fields", new_object, child_index: "new_#{type}") do |builder|
|
31
66
|
render('ransack_advanced_search/' + type.to_s + "_fields", f: builder)
|
32
67
|
end
|
33
|
-
content_tag :button, name, :class => 'add_fields btn btn-default btn-sm', :type => 'button', 'data-field-type' => type, 'data-content' => "#{fields}"
|
68
|
+
content_tag :button, name, :class => custom_class + ' add_fields btn btn-default btn-sm', :type => 'button', 'data-field-type' => type, 'data-content' => "#{fields}"
|
34
69
|
end
|
35
70
|
|
36
71
|
def button_to_nest_fields(name, type)
|
@@ -9,9 +9,9 @@
|
|
9
9
|
<% else %>
|
10
10
|
<div class="col-md-12">
|
11
11
|
<% end %>
|
12
|
-
<%= search_form_for(@search, url: search_url, html: { method: :post, class: 'form-
|
12
|
+
<%= search_form_for(@search, url: search_url, html: { method: :post, class: 'form-inline', role: 'form' }) do |f| %>
|
13
13
|
|
14
|
-
<% setup_search_form f %>
|
14
|
+
<% setup_search_form f, @search %>
|
15
15
|
|
16
16
|
<% if RansackAdvancedSearch.enable_saved_searches %>
|
17
17
|
<div class="form-group">
|
@@ -43,6 +43,7 @@
|
|
43
43
|
|
44
44
|
<!-- <%= label_tag :distinct, 'Return distinct records?' %> -->
|
45
45
|
<!-- <%= check_box_tag :distinct, '1', params[:distinct].to_i == 1 %> -->
|
46
|
+
<div class="clearfix"></div>
|
46
47
|
<div class="form-group">
|
47
48
|
<%= f.submit t('ransack.advanced_search.form.submit_text'), class: 'btn btn-primary' %>
|
48
49
|
<% if RansackAdvancedSearch.enable_saved_searches %>
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<%= content_tag(:span,
|
2
|
-
f.attribute_select({associations: @search.klass.ransackable_associations}, {class: 'form-control input-sm'}),
|
2
|
+
f.attribute_select({associations: @search.klass.ransackable_associations}, {class: 'ransack-attribute-select form-control input-sm'}),
|
3
3
|
{ class: 'fields', 'data-object-name' => f.object_name }, false) %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= content_tag :div, {
|
2
|
-
class: 'fields condition', 'data-object-name' => f.object_name
|
2
|
+
class: 'fields condition ransack-condition-field', 'data-object-name' => f.object_name
|
3
3
|
} do %>
|
4
4
|
|
5
5
|
<%= content_tag(:span, button_to_remove_fields,
|
@@ -16,6 +16,6 @@
|
|
16
16
|
<% end %>
|
17
17
|
|
18
18
|
<%= button_to_add_fields t('ransack.advanced_search.attribute_value.add'),
|
19
|
-
f, :value %>
|
19
|
+
f, :value, 'ransack-add-attribute' %>
|
20
20
|
|
21
21
|
<% end %>
|
@@ -1,20 +1,33 @@
|
|
1
1
|
<%= content_tag :div, { class: 'fields',
|
2
2
|
'data-object-name' => f.object_name } do %>
|
3
3
|
|
4
|
+
<% remove_able = true if local_assigns[:remove_able].nil? %>
|
5
|
+
<% if remove_able == false %>
|
6
|
+
<%= content_tag(:span, "#{t('ransack.advanced_search.condition_group.match')}
|
7
|
+
#{f.combinator_select({}, {class: 'form-control input-sm'})}
|
8
|
+
#{t('ransack.advanced_search.condition_group.match_condition')}", nil, false) %>
|
9
|
+
<% else %>
|
10
|
+
<%= content_tag(:span, "#{t('ransack.advanced_search.condition_group.match')}
|
11
|
+
#{f.combinator_select({}, {class: 'form-control input-sm'})} #{t('ransack.advanced_search.condition_group.match_condition')}
|
12
|
+
#{button_to_remove_fields}", nil, false) %>
|
13
|
+
<% end %>
|
4
14
|
|
5
|
-
|
6
|
-
#{f.combinator_select} #{t('ransack.advanced_search.condition_group.match_condition')}
|
7
|
-
#{button_to_remove_fields}", nil, false) %>
|
8
|
-
|
9
|
-
<%= f.condition_fields do |c| %>
|
15
|
+
<% condition_fields = f.condition_fields do |c| %>
|
10
16
|
<%= render 'ransack_advanced_search/condition_fields', f: c %>
|
11
17
|
<% end %>
|
18
|
+
<%= condition_fields %>
|
19
|
+
<% if condition_fields.empty? %>
|
20
|
+
<%= f.send("condition_fields", f.object.send("build_condition"), child_index: "new_condition") do |builder| %>
|
21
|
+
<%= render 'ransack_advanced_search/condition_fields', f: builder %>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
12
24
|
|
13
25
|
<%= button_to_add_fields t('ransack.advanced_search.attribute_field.add'),
|
14
26
|
f, :condition %>
|
15
27
|
|
16
28
|
<%= f.grouping_fields do |g| %>
|
17
|
-
<%= render 'ransack_advanced_search/grouping_fields',
|
29
|
+
<%= render partial: 'ransack_advanced_search/grouping_fields',
|
30
|
+
locals: { f: g, remove_able: true } %>
|
18
31
|
<% end %>
|
19
32
|
|
20
33
|
<% end %>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<div class="ransack-advanced-search">
|
2
|
+
|
3
|
+
<div class="row">
|
4
|
+
<% if RansackAdvancedSearch.enable_saved_searches %>
|
5
|
+
<div class="col-md-4">
|
6
|
+
<%= render 'ransack_advanced_search/saved_searches_list' %>
|
7
|
+
</div>
|
8
|
+
<div class="col-md-8">
|
9
|
+
<% else %>
|
10
|
+
<div class="col-md-12">
|
11
|
+
<% end %>
|
12
|
+
<%= search_form_for(@search, url: search_url, html: { method: :post, class: 'form-inline', role: 'form' }) do |f| %>
|
13
|
+
|
14
|
+
<% setup_search_form f, @search %>
|
15
|
+
|
16
|
+
<% if RansackAdvancedSearch.enable_saved_searches %>
|
17
|
+
<div class="form-group">
|
18
|
+
<%= label_tag 'Descrição da Busca (necessária para salvar a busca)' %>
|
19
|
+
<%= text_field_tag :description, @saved_search.try(:description), class: 'form-control input-sm' %>
|
20
|
+
<% if @saved_search %>
|
21
|
+
<%= hidden_field_tag :saved_search, @saved_search.id %>
|
22
|
+
<%= hidden_field_tag :use_search_params, true %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<h4><%= t('ransack.quick_search.condition_group.title') %></h4>
|
28
|
+
<div class="form-group">
|
29
|
+
<% if f.grouping_fields.empty? %>
|
30
|
+
<%= render partial: 'ransack_advanced_search/grouping_fields',
|
31
|
+
locals: { f: f, remove_able: false } %>
|
32
|
+
<% else %>
|
33
|
+
<%= f.grouping_fields do |g| %>
|
34
|
+
<%= render partial: 'ransack_advanced_search/grouping_fields',
|
35
|
+
locals: { f: f, remove_able: true } %>
|
36
|
+
<% end %>
|
37
|
+
<%= button_to_add_fields t('ransack.advanced_search.condition_group.add'),
|
38
|
+
f, :grouping %>
|
39
|
+
<% end %>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<div class="clearfix"></div>
|
43
|
+
<div class="form-group">
|
44
|
+
<%= f.submit t('ransack.advanced_search.form.submit_text'), class: 'btn btn-primary' %>
|
45
|
+
<% if RansackAdvancedSearch.enable_saved_searches %>
|
46
|
+
<%= f.submit t('ransack.advanced_search.form.save_submit_text'), name: 'save_search', class: 'btn btn-primary' %>
|
47
|
+
<%= f.submit t('ransack.advanced_search.form.save_new_submit_text'), name: 'save_new_search', class: 'btn btn-primary' %>
|
48
|
+
<% end %>
|
49
|
+
<%= link_to t('ransack.advanced_search.form.clear_search_text'), redirect_path, class: 'btn btn-default' %>
|
50
|
+
</div>
|
51
|
+
<% end %>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
|
56
|
+
<% content_for(:ransack_advanced_search_setup) do %>
|
57
|
+
<%= stylesheet_link_tag 'ransack_advanced_search/application', media: 'all' %>
|
58
|
+
<%= javascript_include_tag 'ransack_advanced_search/application' %>
|
59
|
+
|
60
|
+
<script>
|
61
|
+
$(document).ready(function () {
|
62
|
+
<%= yield(:ransack_setup) %>
|
63
|
+
});
|
64
|
+
</script>
|
65
|
+
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
<%= content_tag(:span, f.text_field(:value, {class: 'form-control input-sm'}),
|
1
|
+
<%= content_tag(:span, f.text_field(:value, {class: 'form-control input-sm ransack-attribute-value'}),
|
2
2
|
{ class: 'fields value', 'data-object-name' => f.object_name }, false) %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ransack_advanced_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Brusius
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- app/views/ransack_advanced_search/_attribute_fields.erb
|
86
86
|
- app/views/ransack_advanced_search/_condition_fields.erb
|
87
87
|
- app/views/ransack_advanced_search/_grouping_fields.erb
|
88
|
+
- app/views/ransack_advanced_search/_quick_search.html.erb
|
88
89
|
- app/views/ransack_advanced_search/_saved_searches_list.erb
|
89
90
|
- app/views/ransack_advanced_search/_sort_fields.erb
|
90
91
|
- app/views/ransack_advanced_search/_value_fields.erb
|