widget_list 1.1.7 → 1.1.8
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.
- data/README.md +45 -4
- data/app/views/widget_list/_condition_fields.html.erb +10 -0
- data/app/views/widget_list/_ransack_fields.html.erb +14 -0
- data/lib/widget_list.rb +23 -14
- data/lib/widget_list/hash.rb +36 -0
- data/lib/widget_list/utils.rb +5 -1
- data/lib/widget_list/version.rb +1 -1
- data/vendor/assets/javascripts/widget_list.js +18 -0
- data/vendor/assets/stylesheets/widget_list.css +1 -1
- data/widget_list.gemspec +3 -1
- metadata +20 -2
data/README.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# WidgetList
|
2
2
|
====================
|
3
3
|
|
4
|
+
****
|
5
|
+
|
4
6
|
## Introduction
|
5
7
|
|
8
|
+
****
|
9
|
+
|
6
10
|
This is my first gem ever!
|
7
11
|
|
8
12
|
I feel like there are not very good lists in ruby/rails and/or dont care to find any because nothing will compare to widget_list's implementation.
|
@@ -11,31 +15,50 @@ In rails you have will_paginate and other ones like it using the ActiveRecord ap
|
|
11
15
|
|
12
16
|
* A sleek ajaxified list
|
13
17
|
* Supports *ALL Databases (Haven't tested everything yet though, I am sure there are tweaks for each DB). mysql, postgres, oracle and sqllite tested (basic example)
|
14
|
-
* Full sorting ASC/DESC of list via ajax
|
18
|
+
* Full sorting ASC/DESC and paging/limits of list via ajax
|
15
19
|
* Easily add row level buttons for each row
|
16
20
|
* Custom tags to pass to be replaced by actual data from each column/value
|
17
|
-
*
|
21
|
+
* Automatic wildcard search support as well as CSV numeric parsing of when to perform a LIKE search or an IN statement on the primary keys
|
18
22
|
* Column mappings and names
|
23
|
+
* Drill down link helper functions to allow user to click and filter the list by the particular record value
|
19
24
|
* Checkboxes for each row for custom selection and mass actions
|
20
25
|
* Session rememberance for each list/view of what was last sorted, which page the person was on, the limit and search filters
|
21
|
-
* Ability to set a
|
26
|
+
* Ability to set a custom HTML arrow which draws a hidden DIV intended for someone to put custom widgets inside of to pass new filters to the list before it executes
|
22
27
|
* Buttons for each row and areas on the bottom of the grid where you can add "Action buttons"
|
23
28
|
* Export visible data as CSV
|
29
|
+
* Grouping/Predefined report filter feature
|
30
|
+
|
31
|
+
****
|
24
32
|
|
25
33
|
## Screenshots
|
26
34
|
|
35
|
+
****
|
36
|
+
|
27
37
|
Main Example Loaded:
|
28
38
|

|
29
39
|
|
30
40
|
Filter Drop Downs:
|
31
41
|

|
32
42
|
|
33
|
-
Searching a row:
|
43
|
+
Searching a row (with wild card search):
|
34
44
|

|
35
45
|
|
46
|
+
Searching "name=asdf_18" (With ActiveRecord and Ransack hook):
|
47
|
+

|
48
|
+
|
49
|
+
Searching "name=asdf_18" and "sku<9000"(With ActiveRecord and Ransack hook):
|
50
|
+

|
51
|
+
|
52
|
+
Searching "name=asdf_18" and "sku < 9000" and "price > 67" (With ActiveRecord and Ransack hook):
|
53
|
+

|
54
|
+
|
55
|
+
|
56
|
+
****
|
36
57
|
|
37
58
|
## Installation
|
38
59
|
|
60
|
+
****
|
61
|
+
|
39
62
|
Add this line to your application's Gemfile:
|
40
63
|
|
41
64
|
```ruby
|
@@ -49,15 +72,24 @@ Or install it yourself as:
|
|
49
72
|
```ruby
|
50
73
|
$ gem install widget_list
|
51
74
|
```
|
75
|
+
|
76
|
+
****
|
77
|
+
|
52
78
|
## Usage/Examples
|
53
79
|
|
80
|
+
****
|
81
|
+
|
54
82
|
You can either follow the below instructions or take a look at the changes here https://github.com/davidrenne/widget_list_example/commit/e4e8ab54edcf8bc4538b1850ee762c13bc6f5316
|
55
83
|
|
56
84
|
I recommend if you use widget_list in production that you use config.consider_all_requests_local = true as errors will be handled but the base lists will still draw.
|
57
85
|
|
58
86
|
|
87
|
+
****
|
88
|
+
|
59
89
|
## Feature Configurations
|
60
90
|
|
91
|
+
****
|
92
|
+
|
61
93
|
widget_list features and configurations primarily work by a single large hash passed to the constructor with the features you need for the given request which changes how the list is displayed or filtered.
|
62
94
|
|
63
95
|
`name` - The unique name/id's of all the pieces that make up your widget list `default=([*('A'..'Z'),*('0'..'9')]-%w(0 1 I O)).sample(16).join`
|
@@ -154,6 +186,8 @@ widget_list features and configurations primarily work by a single large hash pa
|
|
154
186
|
|
155
187
|
`listSearchForm` - Allows you to pass a custom form for the ARROW drop down for advanced searching `default=''`
|
156
188
|
|
189
|
+
`ransackSearch` - If you pass ModelName.search(params[:q]) ransack will show up in your advanced search `default=false`
|
190
|
+
|
157
191
|
`columnStyle` - Column styles. KEY=column name VALUE= the inline style applied `default={}`
|
158
192
|
|
159
193
|
`columnClass` - Column class. KEY=column name VALUE= the class name `default={}`
|
@@ -246,8 +280,11 @@ Style a row based on the value of the column.
|
|
246
280
|
|
247
281
|
Go To http://localhost:3000/widget_list_examples/ruby_items
|
248
282
|
|
283
|
+
****
|
284
|
+
|
249
285
|
### Example Calling Page That Sets up Config and calls WidgetList.render
|
250
286
|
|
287
|
+
****
|
251
288
|
|
252
289
|
```ruby
|
253
290
|
#
|
@@ -547,8 +584,12 @@ Style a row based on the value of the column.
|
|
547
584
|
end
|
548
585
|
```
|
549
586
|
|
587
|
+
****
|
588
|
+
|
550
589
|
## Contributing
|
551
590
|
|
591
|
+
****
|
592
|
+
|
552
593
|
1. Fork it
|
553
594
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
554
595
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<% local_assigns['ransack'].attribute_fields do |a| %>
|
3
|
+
<%= a.attribute_select %>
|
4
|
+
<% end %>
|
5
|
+
<%= local_assigns['ransack'].predicate_select %>
|
6
|
+
<% local_assigns['ransack'].value_fields do |v| %>
|
7
|
+
<%= v.text_field :value, :size => 10 %>
|
8
|
+
<% end %>
|
9
|
+
<%= link_to "remove", '#', class: "remove_fields" %>
|
10
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= search_form_for local_assigns['search_object'], url: local_assigns['url'], method: :post, :authenticity_token => false do |f| %>
|
2
|
+
|
3
|
+
<%= f.condition_fields do |c| %>
|
4
|
+
<%= raw ActionController::Base.new.render_to_string(:partial => 'widget_list/condition_fields', :locals => { 'ransack' => c }) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%
|
8
|
+
new_object = f.object.send "build_condition"
|
9
|
+
fields = f.send("condition_fields", new_object, child_index: "new_condition") do |c|
|
10
|
+
raw ActionController::Base.new.render_to_string(:partial => 'widget_list/condition_fields', :locals => { 'ransack' => c })
|
11
|
+
end
|
12
|
+
%>
|
13
|
+
<%= link_to("Add Conditions", '#', class: "add_fields", data: {id: "new_condition", fields: fields.gsub("\n", "")}) %>
|
14
|
+
<% end %>
|
data/lib/widget_list.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'ransack'
|
1
2
|
require 'widget_list/version'
|
2
3
|
require 'widget_list/hash'
|
3
4
|
require 'widget_list/string'
|
@@ -192,6 +193,11 @@ module WidgetList
|
|
192
193
|
|
193
194
|
@items = WidgetList::Widgets::populate_items(list,@items)
|
194
195
|
|
196
|
+
# If ransack is used
|
197
|
+
if @items['view'].class.name == 'ActiveRecord::Relation' && @items['ransackSearch'].class.name == 'Ransack::Search'
|
198
|
+
@items['ransackSearch'].build_condition if @items['ransackSearch'].conditions.empty?
|
199
|
+
end
|
200
|
+
|
195
201
|
# current_db is a flag of the last known primary or secondary YML used or defaulted when running a list
|
196
202
|
@current_db_selection = @items['database']
|
197
203
|
|
@@ -586,7 +592,7 @@ module WidgetList
|
|
586
592
|
#
|
587
593
|
# carryOverRequests will allow you to post custom things from request to all sort/paging URLS for each ajax
|
588
594
|
#
|
589
|
-
'carryOverRequsts' => ['switch_grouping','group_row_id'],
|
595
|
+
'carryOverRequsts' => ['switch_grouping','group_row_id','q'],
|
590
596
|
|
591
597
|
#
|
592
598
|
# Head/Foot
|
@@ -632,6 +638,7 @@ module WidgetList
|
|
632
638
|
# Advanced searching
|
633
639
|
#
|
634
640
|
'listSearchForm' => '',
|
641
|
+
'ransackSearch' => false,
|
635
642
|
|
636
643
|
#
|
637
644
|
# Column Specific
|
@@ -814,7 +821,7 @@ module WidgetList
|
|
814
821
|
if key.include?(name)
|
815
822
|
$_SESSION['list_checks'].delete(key)
|
816
823
|
end
|
817
|
-
} if $_SESSION.key?('list_checks')
|
824
|
+
} if $_SESSION.key?('list_checks') && !$_SESSION['list_checks'].nil? && !$_SESSION['list_checks'].empty?
|
818
825
|
|
819
826
|
end
|
820
827
|
|
@@ -1022,9 +1029,6 @@ module WidgetList
|
|
1022
1029
|
@templateFill['<!--HEADER_TXT_COLOR-->'] = @items['headerFontColor']
|
1023
1030
|
@templateFill['<!--FOOTER_TXT_COLOR-->'] = @items['footerFontColor']
|
1024
1031
|
@templateFill['<!--TITLE-->'] = @items['title']
|
1025
|
-
@templateFill['<!--NAME-->'] = @items['name']
|
1026
|
-
@templateFill['<!--JUMP_URL-->'] = WidgetList::Utils::build_url(@items['pageId'],listJumpUrl,(!$_REQUEST.key?('BUTTON_VALUE')))
|
1027
|
-
@templateFill['<!--JUMP_URL_NAME-->'] = @items['name'] + '_jump_url'
|
1028
1032
|
@templateFill['<!--CLASS-->'] = @items['class']
|
1029
1033
|
|
1030
1034
|
if @totalRowCount > 0
|
@@ -1103,6 +1107,10 @@ module WidgetList
|
|
1103
1107
|
@headerPieces['searchBar'] = WidgetList::Widgets::widget_input(list_search)
|
1104
1108
|
@templateFill['<!--FILTER_HEADER-->'] = @headerPieces['searchBar']
|
1105
1109
|
|
1110
|
+
if @items['ransackSearch'] != false
|
1111
|
+
@templateFill['<!--RANSACK-->'] = ActionController::Base.new.render_to_string(:partial => 'widget_list/ransack_fields', :locals => { 'search_object' => @items['ransackSearch'], 'url' => '--JUMP_URL--'})
|
1112
|
+
end
|
1113
|
+
|
1106
1114
|
end
|
1107
1115
|
|
1108
1116
|
#
|
@@ -1171,6 +1179,11 @@ module WidgetList
|
|
1171
1179
|
end
|
1172
1180
|
end
|
1173
1181
|
|
1182
|
+
@templateFill['<!--NAME-->'] = @items['name']
|
1183
|
+
@templateFill['<!--JUMP_URL-->'] = WidgetList::Utils::build_url(@items['pageId'],listJumpUrl,(!$_REQUEST.key?('BUTTON_VALUE')))
|
1184
|
+
@templateFill['--JUMP_URL--'] = @templateFill['<!--JUMP_URL-->']
|
1185
|
+
@templateFill['<!--JUMP_URL_NAME-->'] = @items['name'] + '_jump_url'
|
1186
|
+
|
1174
1187
|
rescue Exception => e
|
1175
1188
|
out = '<tr><td colspan="50"><div id="noListResults">' + generate_error_output(e) + @items['noDataMessage'] + '</div></td></tr>'
|
1176
1189
|
if !@templateFill.key?('<!--DATA-->')
|
@@ -1850,11 +1863,7 @@ module WidgetList
|
|
1850
1863
|
end
|
1851
1864
|
|
1852
1865
|
if WidgetList::List.get_db_type(items[:primary_database]) == 'oracle'
|
1853
|
-
|
1854
|
-
link = "#{items[:column_to_show]} #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}"
|
1855
|
-
else
|
1856
|
-
link = %[q'[<a style='cursor:pointer;color:#{items[:link_color]};' class='#{items[:column_alias]}_drill#{items[:column_class]}' onclick='#{items[:js_function_name]}("#{items[:drill_down_name]}", ListDrillDownGetRowValue(this) ,"#{items[:list_id]}"#{items[:extra_js_func_params]});#{items[:extra_function]}'>]' #{WidgetList::List::concat_string(items[:primary_database])}#{items[:column_to_show]}#{WidgetList::List::concat_string(items[:primary_database])}q'[</a><script class='val-db' type='text'>]' #{WidgetList::List::concat_string(items[:primary_database])} #{items[:data_to_pass_from_view]} #{WidgetList::List::concat_string(items[:primary_database])} q'[</script>]' #{WidgetList::List::concat_outer(items[:primary_database])} #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}]
|
1857
|
-
end
|
1866
|
+
link = %[q'[<a style='cursor:pointer;color:#{items[:link_color]};' class='#{items[:column_alias]}_drill#{items[:column_class]}' onclick='#{items[:js_function_name]}("#{items[:drill_down_name]}", ListDrillDownGetRowValue(this) ,"#{items[:list_id]}"#{items[:extra_js_func_params]});#{items[:extra_function]}'>]' #{WidgetList::List::concat_string(items[:primary_database])}#{items[:column_to_show]}#{WidgetList::List::concat_string(items[:primary_database])}q'[</a><script class='val-db' type='text'>]' #{WidgetList::List::concat_string(items[:primary_database])} #{items[:data_to_pass_from_view]} #{WidgetList::List::concat_string(items[:primary_database])} q'[</script>]' #{WidgetList::List::concat_outer(items[:primary_database])} #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}]
|
1858
1867
|
else
|
1859
1868
|
if WidgetList::List.get_db_type(items[:primary_database]) == 'postgres'
|
1860
1869
|
link = %['<a style="cursor:pointer;color:#{items[:link_color]};" class="#{items[:column_alias]}_drill#{items[:column_class]}" onclick="#{items[:js_function_name]}(''#{items[:drill_down_name]}'', ListDrillDownGetRowValue(this) ,''#{items[:list_id]}''#{items[:extra_js_func_params]});#{items[:extra_function]}">"' #{WidgetList::List::concat_string(items[:primary_database])}#{items[:column_to_show]}#{WidgetList::List::concat_string(items[:primary_database])}'</a><script class="val-db" type="text">' #{WidgetList::List::concat_string(items[:primary_database])} #{items[:data_to_pass_from_view]} #{WidgetList::List::concat_string(items[:primary_database])}'</script>' #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}]
|
@@ -1862,15 +1871,15 @@ module WidgetList
|
|
1862
1871
|
link = %[#{WidgetList::List::concat_inner(items[:primary_database])}"<a style='cursor:pointer;color:#{items[:link_color]};' class='#{items[:column_alias]}_drill#{items[:column_class]}' onclick='#{items[:js_function_name]}(#{WidgetList::List::double_quote(items[:primary_database])}#{items[:drill_down_name]}#{WidgetList::List::double_quote(items[:primary_database])}, ListDrillDownGetRowValue(this) ,#{WidgetList::List::double_quote(items[:primary_database])}#{items[:list_id]}#{WidgetList::List::double_quote(items[:primary_database])}#{items[:extra_js_func_params]});#{items[:extra_function]}'>"#{WidgetList::List::concat_string(items[:primary_database])}#{items[:column_to_show]}#{WidgetList::List::concat_string(items[:primary_database])}"</a><script class='val-db' type='text'>"#{WidgetList::List::concat_string(items[:primary_database])} #{items[:data_to_pass_from_view]} #{WidgetList::List::concat_string(items[:primary_database])}"</script>"#{WidgetList::List::concat_outer(items[:primary_database])} #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}]
|
1863
1872
|
end
|
1864
1873
|
end
|
1865
|
-
|
1874
|
+
|
1866
1875
|
if $_REQUEST.key?('export_widget_list')
|
1867
1876
|
link = "#{items[:column_to_show]} #{WidgetList::List::is_sequel(items[:primary_database]) ? " as #{items[:column_alias]} " : ""}"
|
1868
1877
|
end
|
1869
|
-
|
1878
|
+
|
1870
1879
|
return link
|
1871
1880
|
|
1872
|
-
end
|
1873
|
-
|
1881
|
+
end
|
1882
|
+
|
1874
1883
|
def self.concat_string(primary)
|
1875
1884
|
|
1876
1885
|
case WidgetList::List.get_db_type(primary)
|
data/lib/widget_list/hash.rb
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
class Hash
|
2
2
|
|
3
|
+
def to_params
|
4
|
+
params = ''
|
5
|
+
stack = []
|
6
|
+
|
7
|
+
each do |k, v|
|
8
|
+
if v.is_a?(Hash)
|
9
|
+
stack << [k,v]
|
10
|
+
elsif v.is_a?(Array)
|
11
|
+
stack << [k,Hash.from_array(v)]
|
12
|
+
else
|
13
|
+
params << "#{k}=#{v}&"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
stack.each do |parent, hash|
|
18
|
+
hash.each do |k, v|
|
19
|
+
if v.is_a?(Hash)
|
20
|
+
stack << ["#{parent}[#{k}]", v]
|
21
|
+
else
|
22
|
+
params << "#{parent}[#{k}]=#{v}&"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
params.chop!
|
28
|
+
params
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.from_array(array = [])
|
32
|
+
h = Hash.new
|
33
|
+
array.size.times do |t|
|
34
|
+
h[t] = array[t]
|
35
|
+
end
|
36
|
+
h
|
37
|
+
end
|
38
|
+
|
3
39
|
# Merges self with another hash, recursively.
|
4
40
|
#
|
5
41
|
# This code was lovingly stolen from some random gem:
|
data/lib/widget_list/utils.rb
CHANGED
@@ -23,7 +23,11 @@ module WidgetList
|
|
23
23
|
def self.build_query_string(args)
|
24
24
|
q = []
|
25
25
|
args.each { |k,v|
|
26
|
-
|
26
|
+
if v.class.name == 'Hash'
|
27
|
+
q << {k => v}.to_params
|
28
|
+
else
|
29
|
+
q << k.to_s + '=' + URI.encode(URI.decode(v.to_s))
|
30
|
+
end
|
27
31
|
}
|
28
32
|
q.join('&')
|
29
33
|
end
|
data/lib/widget_list/version.rb
CHANGED
@@ -771,3 +771,21 @@ jQuery(document).ready(function($) {
|
|
771
771
|
});
|
772
772
|
});
|
773
773
|
|
774
|
+
(function() {
|
775
|
+
|
776
|
+
jQuery(function() {
|
777
|
+
$('form').on('click', '.remove_fields', function(event) {
|
778
|
+
$(this).closest('.field').remove();
|
779
|
+
return event.preventDefault();
|
780
|
+
});
|
781
|
+
return $('form').on('click', '.add_fields', function(event) {
|
782
|
+
var regexp, time;
|
783
|
+
time = new Date().getTime();
|
784
|
+
regexp = new RegExp($(this).data('id'), 'g');
|
785
|
+
$(this).before($(this).data('fields').replace(regexp, time));
|
786
|
+
return event.preventDefault();
|
787
|
+
});
|
788
|
+
});
|
789
|
+
|
790
|
+
}).call(this);
|
791
|
+
|
@@ -766,7 +766,7 @@ ul#pagination li div.active
|
|
766
766
|
/**
|
767
767
|
* Search form
|
768
768
|
*/
|
769
|
-
div#advanced-search-container ul.advanced-search-container-inline, div#advanced-search-container ul {list-style:none; margin:0px; padding:3px;
|
769
|
+
div#advanced-search-container ul.advanced-search-container-inline, div#advanced-search-container ul {list-style:none; margin:0px; padding:3px; width:450px}
|
770
770
|
div#advanced-search-container ul.advanced-search-container-inline input.info-input, div#advanced-search-container ul input.info-input {font-size:11px}
|
771
771
|
div#advanced-search-container ul.advanced-search-container-inline li {display:inline-block;width:428px; margin-top:4px;}
|
772
772
|
div#advanced-search-container ul.advanced-search-container-inline li#required_message_inline {font-size:10px}
|
data/widget_list.gemspec
CHANGED
@@ -23,7 +23,9 @@ Gem::Specification.new do |gem|
|
|
23
23
|
# SEQUEL IS NOW OPTIONAL!! I am sure most people will be using ActiveRecord ORM
|
24
24
|
# I am including it as a dependency just because it is easier to pull it down and have it available
|
25
25
|
#
|
26
|
-
gem.add_dependency('sequel', '3.42.0')
|
26
|
+
gem.add_dependency('sequel', '3.42.0')
|
27
|
+
|
28
|
+
gem.add_dependency('ransack', '0.7.2')
|
27
29
|
|
28
30
|
gem.files = `git ls-files`.split($/)
|
29
31
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: widget_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 3.42.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ransack
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.7.2
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.7.2
|
30
46
|
description: An Advanced and flexible ajax data grid. Supports several databases where
|
31
47
|
data is pulled from either using Sequel ORM (optional even though is a dependency),
|
32
48
|
Active Record Models or Raw SQL.
|
@@ -50,6 +66,8 @@ files:
|
|
50
66
|
- LICENSE.txt
|
51
67
|
- README.md
|
52
68
|
- Rakefile
|
69
|
+
- app/views/widget_list/_condition_fields.html.erb
|
70
|
+
- app/views/widget_list/_ransack_fields.html.erb
|
53
71
|
- lib/extensions/action_controller_base.rb
|
54
72
|
- lib/widget_list.rb
|
55
73
|
- lib/widget_list/engine.rb
|