data_tables 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
data/data_tables.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'data_tables'
5
- s.version = '0.1.9'
5
+ s.version = '0.1.10'
6
6
  s.date = Time.now.strftime("%Y-%m-%d")
7
7
  s.summary = "Rails friendly interface into DataTables"
8
8
  s.description = "DataTables for Rails"
data/lib/data_tables.rb CHANGED
@@ -44,7 +44,7 @@ module DataTablesController
44
44
  scope = options[:scope] || :domain
45
45
  named_scope = options[:named_scope]
46
46
  named_scope_args = options[:named_scope_args]
47
- except = options[:except]
47
+ except = options[:except] || []
48
48
  es_block = options[:es_block]
49
49
 
50
50
  #
@@ -79,20 +79,23 @@ module DataTablesController
79
79
  elastic_index_name = "#{Tire::Model::Search.index_prefix}#{modelCls.to_s.underscore}"
80
80
  logger.debug "*** (datatable:#{__LINE__}) Using tire for search #{modelCls} (#{elastic_index_name})"
81
81
 
82
- search_condition = elasticsearch_sanitation(search_condition, except)
83
- just_excepts = except ? elasticsearch_sanitation(nil, except) : "*"
84
- logger.debug "*** search_condition = #{search_condition}; sort by #{column_name_sym}:#{sort_dir}; domain=`#{domain.inspect}'"
85
-
86
82
  retried = 0
87
83
  if Tire.index(elastic_index_name){exists?}.response.code != 404
88
84
  begin
89
85
  controller_instance = self
90
86
  results = Tire.search(elastic_index_name) do
91
- # retry #2 exclude search terms (and sorting) from search query
92
- if retried < 2
93
- query { string search_condition }
94
- else
95
- query { string just_excepts }
87
+ query do
88
+ boolean do
89
+ if search_condition && retried < 2
90
+ must { match :_all, search_condition, type: 'phrase_prefix' }
91
+ else
92
+ must { all }
93
+ end
94
+
95
+ except.each do |expt|
96
+ must_not { term expt[0].to_sym, expt[1].to_s }
97
+ end
98
+ end
96
99
  end
97
100
 
98
101
  # retry #1 exclude sorting from search query
@@ -111,9 +114,15 @@ module DataTablesController
111
114
  objects = results.map{ |r| modelCls[r._id] }.compact
112
115
  total_display_records = results.total
113
116
 
114
-
115
117
  total_records = Tire.search(elastic_index_name, search_type: 'count') do
116
- query { string just_excepts }
118
+ query do
119
+ boolean do
120
+ must { all }
121
+ except.each do |expt|
122
+ must_not { term expt[0].to_sym, expt[1].to_s }
123
+ end
124
+ end
125
+ end
117
126
  filter(:term, domain: domain) unless domain.blank?
118
127
  es_block.call(self) if es_block.respond_to?(:call)
119
128
  end.results.total
@@ -181,10 +190,10 @@ module DataTablesController
181
190
  #
182
191
  define_method action.to_sym do
183
192
  domain_name = ActiveRecord::Base.connection.schema_search_path.to_s.split(",")[0]
184
- logger.debug "*** Using ElasticSearch for #{modelCls.name}"
193
+ logger.debug "*** (datatables:#{__LINE__}) Using ElasticSearch for #{modelCls.name}"
185
194
  objects = []
186
195
 
187
- condstr = ""
196
+ condstr = nil
188
197
  unless params[:sSearch].blank?
189
198
  sort_column_id = params[:iSortCol_0].to_i
190
199
  sort_column_id = 1 if sort_column_id == 0
@@ -200,11 +209,20 @@ module DataTablesController
200
209
  column_name = columns[sort_column][:name] || 'message'
201
210
  sort_dir = params[:sSortDir_0] || 'desc'
202
211
 
203
- condstr = elasticsearch_sanitation(condstr, except)
204
-
205
212
  begin
206
213
  query = Proc.new do
207
- query { string(condstr) }
214
+ query do
215
+ boolean do
216
+ if condstr
217
+ must { match :_all, condstr, type: 'phrase_prefix' }
218
+ else
219
+ must { all }
220
+ end
221
+ except.each do |expt|
222
+ must_not { term expt[0].to_sym, expt[1].to_s }
223
+ end
224
+ end
225
+ end
208
226
  filter(:term, domain: domain_name) unless domain_name.blank?
209
227
  es_block.call(self) if es_block.respond_to?(:call)
210
228
  end
@@ -355,18 +373,6 @@ module DataTablesController
355
373
  end
356
374
  end
357
375
 
358
- def elasticsearch_sanitation(search_string, except)
359
- logger.debug "*** elasticsearch_sanitation.before = `#{search_string}'"
360
- search_string = '*' if search_string.blank?
361
- search_string.strip!
362
- numerical_search = (search_string.split.count > 1) ? "" : "OR *#{search_string.gsub(":","\\:")}*"
363
- search_string = "(\"*#{search_string}*\" #{numerical_search}) " unless search_string =~ /(\*|\")/
364
- exceptions = except.map { |f| "NOT #{f[0]}:\"#{f[1]}\""}.join(" AND ") if except
365
- search_string += " AND " + exceptions if exceptions
366
- logger.debug "*** elasticsearch_sanitation.after = `#{search_string}'"
367
- search_string
368
- end
369
-
370
376
  # gets the value for a column and row
371
377
  def datatables_instance_get_value(instance, column)
372
378
  if column[:special]
@@ -7,6 +7,12 @@ module DataTablesHelper
7
7
  options[:bServerSide] = true unless options.has_key?(:bServerSide)
8
8
  options[:bAutoWidth] = false unless options.has_key?(:bAutoWidth)
9
9
  options[:bStateSave] = true unless options.has_key?(:bStateSave)
10
+ options[:sScrollY] = "200px"
11
+ options[:sScrollX] = '100%'
12
+ options[:bScrollCollapse] = true
13
+ options[:bDeferRender] = true
14
+ options[:bScrollInfinite] = true
15
+ options[:iDisplayLength] = 100
10
16
  options[:oColVis] ||= {}
11
17
  options[:bFilter] = true
12
18
  options[:oColVis][:aiExclude] ||= []
@@ -22,6 +28,25 @@ module DataTablesHelper
22
28
  }
23
29
  }"
24
30
 
31
+ options[:fnServerData] ||= "function ( sSource, aoData, fnCallback ) {
32
+ var init_sSearch = $('#init_sSearch');
33
+ if(init_sSearch != undefined && init_sSearch.val() != '' && init_sSearch.size() != 0) {
34
+ $('.dataTables_filter input').val(init_sSearch.val());
35
+ aoData.push( { name:'sSearch', value: init_sSearch.val() });
36
+ $('#init_sSearch').remove();
37
+ }
38
+ $.ajax( {
39
+ 'dataType': 'json',
40
+ 'url': sSource,
41
+ 'data': aoData,
42
+ 'success': fnCallback
43
+ });
44
+ }"
45
+
46
+ options[:fnDrawCallback] = "function() {
47
+ change_scrollY();
48
+ }"
49
+
25
50
  sdom = options[:bFilter] ? '<"#datatables_search_hint">lfrtip' : 'lrtip'
26
51
  sdom = "C<\"clear\">" + sdom if options[:oColVis]
27
52
  sdom = 'T' + sdom if options[:oTableTools]
@@ -71,6 +96,28 @@ $(document).ready(function() {
71
96
  } );
72
97
 
73
98
  });
99
+
100
+ function change_scrollY() {
101
+ resize_column_width();
102
+ h = $('##{source}').height();
103
+ if( h > $(window).height() *55/100 )
104
+ {
105
+ $('.dataTables_scrollBody').css('height', ($(window).height() *55/100));
106
+ }
107
+ else
108
+ {
109
+ $('.dataTables_scrollBody').css('height', h+20);
110
+ }
111
+ }
112
+
113
+ function resize_column_width() {
114
+ $('.dataTables_scrollHeadInner').width('100%');
115
+ $('.dataTable').width('100%');
116
+ $('##{datatable[:action]}').dataTable().fnAdjustColumnSizing(false);
117
+ }
118
+
119
+ $(window).resize(change_scrollY);
120
+
74
121
  </script>
75
122
  <table id=\"#{datatable[:action]}\" #{html_opts}>
76
123
  <thead>
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: data_tables
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.9
5
+ version: 0.1.10
6
6
  platform: ruby
7
7
  authors:
8
8
  - Duane Compton
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-07-03 00:00:00.000000000 Z
16
+ date: 2013-07-31 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  type: :development