ransack_ui 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/images/ransack_ui/calendar.png +0 -0
- data/app/assets/images/{delete.png → ransack_ui/delete.png} +0 -0
- data/app/assets/javascripts/ransack_ui_jquery.js +1 -2
- data/app/assets/javascripts/ransack_ui_jquery/{search_form.js.coffee → search_form.js.coffee.erb} +32 -29
- data/app/views/{ransack → ransack_ui}/_condition_fields.html.haml +0 -0
- data/app/views/{ransack → ransack_ui}/_grouping_fields.html.haml +1 -1
- data/app/views/{ransack/_advanced_search.html.haml → ransack_ui/_search.html.haml} +2 -2
- data/lib/ransack_ui/controller_helpers.rb +14 -0
- data/lib/ransack_ui/rails/engine.rb +7 -1
- data/lib/ransack_ui/version.rb +1 -1
- data/lib/ransack_ui/view_helpers.rb +4 -4
- metadata +11 -12
- data/app/assets/javascripts/ransack_ui_jquery/search_tabs.js.coffee +0 -31
- data/app/views/ransack/_basic_search.html.haml +0 -2
- data/app/views/ransack/_search.html.haml +0 -13
Binary file
|
File without changes
|
data/app/assets/javascripts/ransack_ui_jquery/{search_form.js.coffee → search_form.js.coffee.erb}
RENAMED
@@ -8,7 +8,6 @@
|
|
8
8
|
el.on 'click', '.remove_fields', $.proxy(this.remove_fields, this)
|
9
9
|
el.on 'change', 'select.ransack_predicate', $.proxy(this.predicate_changed, this)
|
10
10
|
el.on 'change', 'select.ransack_attribute', $.proxy(this.attribute_changed, this)
|
11
|
-
el.on 'click focus', 'input.ransack_query', $.proxy(this.query_focus, this)
|
12
11
|
|
13
12
|
# Set up Select2 on select lists in .filters
|
14
13
|
this.init_select2(this.element.find('.filters'))
|
@@ -47,8 +46,8 @@
|
|
47
46
|
predicate_select2 = this.element.find('#s2id_' + base_id + 'p')
|
48
47
|
query_input = $('input#' + base_id + "v_0_value")
|
49
48
|
|
50
|
-
#
|
51
|
-
|
49
|
+
# Initialize datepicker if column is date/datetime/time
|
50
|
+
$.proxy(this.init_datetimepicker, this)(base_id)
|
52
51
|
|
53
52
|
if selected.data('ajax-url') and Select2?
|
54
53
|
controller = selected.data('controller')
|
@@ -108,31 +107,6 @@
|
|
108
107
|
|
109
108
|
return true
|
110
109
|
|
111
|
-
query_focus: (e) ->
|
112
|
-
if $.ui?.timepicker?
|
113
|
-
target = $(e.currentTarget)
|
114
|
-
base_id = target.attr('id').slice(0, -9)
|
115
|
-
query_input = $('input#' + base_id + "v_0_value")
|
116
|
-
|
117
|
-
# Only set up new datepicker if not already initialized
|
118
|
-
if query_input.not('.hasDatePicker')
|
119
|
-
selected_attr = this.element.find('select#' + base_id + 'a_0_name option:selected')
|
120
|
-
|
121
|
-
datepicker_options =
|
122
|
-
changeMonth: true
|
123
|
-
constrainInput: false
|
124
|
-
dateFormat: 'yy-mm-dd'
|
125
|
-
# Always prefer custom input text over selected date
|
126
|
-
onClose: (date) -> $(this).val(date)
|
127
|
-
|
128
|
-
switch selected_attr.data('type')
|
129
|
-
when "date"
|
130
|
-
query_input.datepicker(datepicker_options)
|
131
|
-
when "datetime"
|
132
|
-
query_input.datetimepicker(datepicker_options)
|
133
|
-
when "time"
|
134
|
-
query_input.datetimepicker $.extend(datepicker_options, {timeOnly: true})
|
135
|
-
|
136
110
|
# Attempts to find a predicate translation for the specific column type,
|
137
111
|
# or returns the default label.
|
138
112
|
# For example, 'lt' on an integer column will be translated to 'is less than',
|
@@ -195,7 +169,7 @@
|
|
195
169
|
container.find('select.ransack_predicate').select2
|
196
170
|
width: '130px'
|
197
171
|
formatNoMatches: (term) ->
|
198
|
-
"
|
172
|
+
"Select a field first"
|
199
173
|
|
200
174
|
container.find('select.ransack_attribute').select2
|
201
175
|
width: '220px'
|
@@ -212,4 +186,33 @@
|
|
212
186
|
object.text
|
213
187
|
else
|
214
188
|
$(object.element).parent().attr('label') + ': ' + object.text
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
init_datetimepicker: (base_id) ->
|
193
|
+
if $.ui?.timepicker?
|
194
|
+
query_input = this.element.find('input#' + base_id + "v_0_value")
|
195
|
+
selected_attr = this.element.find('select#' + base_id + 'a_0_name option:selected')
|
196
|
+
|
197
|
+
# Clear any datepicker from query input first
|
198
|
+
query_input.datepicker('destroy')
|
199
|
+
|
200
|
+
datepicker_options =
|
201
|
+
changeMonth: true
|
202
|
+
constrainInput: false
|
203
|
+
dateFormat: 'yy-mm-dd'
|
204
|
+
buttonImage: "<%= asset_path('ransack_ui/calendar.png') %>"
|
205
|
+
buttonImageOnly: true
|
206
|
+
showOn: 'button'
|
207
|
+
# Always prefer custom input text over selected date
|
208
|
+
onClose: (date) -> $(this).val(date)
|
209
|
+
|
210
|
+
# Show datepicker button for dates
|
211
|
+
switch selected_attr.data('type')
|
212
|
+
when "date"
|
213
|
+
query_input.datepicker(datepicker_options)
|
214
|
+
when "datetime"
|
215
|
+
query_input.datetimepicker(datepicker_options)
|
216
|
+
when "time"
|
217
|
+
query_input.datetimepicker $.extend(datepicker_options, {timeOnly: true})
|
215
218
|
) jQuery
|
File without changes
|
@@ -6,7 +6,7 @@
|
|
6
6
|
.filters
|
7
7
|
- f.object.build_condition unless f.object.conditions.any?
|
8
8
|
= f.condition_fields do |c|
|
9
|
-
= render '
|
9
|
+
= render 'ransack_ui/condition_fields', :f => c
|
10
10
|
|
11
11
|
%p
|
12
12
|
= link_to_add_fields t(:advanced_search_add_condition), f, :condition
|
@@ -1,11 +1,11 @@
|
|
1
|
-
= search_form_for
|
1
|
+
= search_form_for @ransack_search, :url => url_for(:action => :index), :html => {:method => :get, :class => "ransack_search"}, :remote => true do |f|
|
2
2
|
|
3
3
|
:javascript
|
4
4
|
if (window.Ransack == null) { window.Ransack = {}; }
|
5
5
|
Ransack.alt_predicates_i18n = #{I18n.translate(:"ransack.predicates.alt", :default => {}).to_json}
|
6
6
|
|
7
7
|
= f.grouping_fields do |g|
|
8
|
-
= render '
|
8
|
+
= render 'ransack_ui/grouping_fields', :f => g
|
9
9
|
|
10
10
|
%p
|
11
11
|
= link_to_add_fields t(:advanced_search_add_group), f, :grouping
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module RansackUI
|
2
|
+
module ControllerHelpers
|
3
|
+
# Builds @ransack_search object from params[:q]
|
4
|
+
# Infers model class from controller name.
|
5
|
+
#
|
6
|
+
# Should be used as a before_filter, e.g.:
|
7
|
+
# before_filter :load_ransack_search, :only => :index
|
8
|
+
def load_ransack_search
|
9
|
+
klass = controller_name.classify.constantize
|
10
|
+
@ransack_search = klass.search(params[:q])
|
11
|
+
@ransack_search.build_grouping unless @ransack_search.groupings.any?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ransack_ui/view_helpers'
|
2
|
+
require 'ransack_ui/controller_helpers'
|
2
3
|
|
3
4
|
module RansackUI
|
4
5
|
module Rails
|
@@ -7,8 +8,13 @@ module RansackUI
|
|
7
8
|
ActionView::Base.send :include, ViewHelpers
|
8
9
|
end
|
9
10
|
|
11
|
+
initializer "ransack_ui.controller_helpers" do
|
12
|
+
ActionController::Base.send :include, ControllerHelpers
|
13
|
+
end
|
14
|
+
|
10
15
|
initializer :assets do
|
11
|
-
|
16
|
+
# Add images to be precompiled
|
17
|
+
::Rails.application.config.assets.precompile += %w(ransack_ui/delete.png ransack_ui/calendar.png)
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
data/lib/ransack_ui/version.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
module RansackUI
|
2
2
|
module ViewHelpers
|
3
|
-
def
|
4
|
-
render '
|
3
|
+
def ransack_ui_search
|
4
|
+
render 'ransack_ui/search'
|
5
5
|
end
|
6
6
|
|
7
7
|
def link_to_add_fields(name, f, type)
|
8
8
|
new_object = f.object.send "build_#{type}"
|
9
9
|
fields = f.send("#{type}_fields", new_object, :child_index => "new_#{type}") do |builder|
|
10
|
-
render "
|
10
|
+
render "ransack_ui/#{type.to_s}_fields", :f => builder
|
11
11
|
end
|
12
12
|
link_to name, nil, :class => "add_fields", "data-field-type" => type, "data-content" => "#{fields}"
|
13
13
|
end
|
14
14
|
|
15
15
|
def link_to_remove_fields(name, f)
|
16
|
-
link_to image_tag('delete.png', :size => '16x16', :alt => name), nil, :class => "remove_fields"
|
16
|
+
link_to image_tag('ransack_ui/delete.png', :size => '16x16', :alt => name), nil, :class => "remove_fields"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ransack_ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
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: 2012-11-
|
12
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chronic
|
@@ -39,20 +39,19 @@ files:
|
|
39
39
|
- LICENSE.txt
|
40
40
|
- README.md
|
41
41
|
- Rakefile
|
42
|
-
- app/assets/images/
|
42
|
+
- app/assets/images/ransack_ui/calendar.png
|
43
|
+
- app/assets/images/ransack_ui/delete.png
|
43
44
|
- app/assets/javascripts/ransack/predicates.js.coffee
|
44
45
|
- app/assets/javascripts/ransack_ui_jquery.js
|
45
|
-
- app/assets/javascripts/ransack_ui_jquery/search_form.js.coffee
|
46
|
-
- app/
|
47
|
-
- app/views/
|
48
|
-
- app/views/
|
49
|
-
- app/views/ransack/_condition_fields.html.haml
|
50
|
-
- app/views/ransack/_grouping_fields.html.haml
|
51
|
-
- app/views/ransack/_search.html.haml
|
46
|
+
- app/assets/javascripts/ransack_ui_jquery/search_form.js.coffee.erb
|
47
|
+
- app/views/ransack_ui/_condition_fields.html.haml
|
48
|
+
- app/views/ransack_ui/_grouping_fields.html.haml
|
49
|
+
- app/views/ransack_ui/_search.html.haml
|
52
50
|
- config/locales/en-US.yml
|
53
51
|
- config/locales/en.yml
|
54
52
|
- lib/core_ext/enumerable.rb
|
55
53
|
- lib/ransack_ui.rb
|
54
|
+
- lib/ransack_ui/controller_helpers.rb
|
56
55
|
- lib/ransack_ui/rails/engine.rb
|
57
56
|
- lib/ransack_ui/ransack_overrides/adapters/active_record/base.rb
|
58
57
|
- lib/ransack_ui/ransack_overrides/configuration.rb
|
@@ -77,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
76
|
version: '0'
|
78
77
|
segments:
|
79
78
|
- 0
|
80
|
-
hash:
|
79
|
+
hash: -2183248768965735638
|
81
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
81
|
none: false
|
83
82
|
requirements:
|
@@ -86,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
85
|
version: '0'
|
87
86
|
segments:
|
88
87
|
- 0
|
89
|
-
hash:
|
88
|
+
hash: -2183248768965735638
|
90
89
|
requirements: []
|
91
90
|
rubyforge_project:
|
92
91
|
rubygems_version: 1.8.24
|
@@ -1,31 +0,0 @@
|
|
1
|
-
(($) ->
|
2
|
-
$ ->
|
3
|
-
# Search tabs
|
4
|
-
# -----------------------------------------------------
|
5
|
-
activate_search_form = (search_form) ->
|
6
|
-
# Hide all
|
7
|
-
$('#search .search_form').hide()
|
8
|
-
$('#search .tabs li a').removeClass('active')
|
9
|
-
# Show selected
|
10
|
-
$('#' + search_form).show()
|
11
|
-
$('a[data-search-form=' + search_form + ']').addClass('active')
|
12
|
-
# Run search for current query
|
13
|
-
switch search_form
|
14
|
-
when 'basic_search'
|
15
|
-
query_input = $('#basic_search input#query')
|
16
|
-
if !query_input.is('.defaultTextActive')
|
17
|
-
value = query_input.val()
|
18
|
-
else
|
19
|
-
value = ""
|
20
|
-
crm.search(value, window.controller)
|
21
|
-
$('#filters').enable() # Enable filters panel (if present)
|
22
|
-
|
23
|
-
when 'advanced_search'
|
24
|
-
$("#advanced_search form input:submit").click()
|
25
|
-
$('#filters').disable() # Disable filters panel (if present)
|
26
|
-
|
27
|
-
return
|
28
|
-
$("#search .tabs a").click ->
|
29
|
-
activate_search_form($(this).data('search-form'))
|
30
|
-
|
31
|
-
) jQuery
|
@@ -1,13 +0,0 @@
|
|
1
|
-
#search
|
2
|
-
.tabs
|
3
|
-
%ul
|
4
|
-
%li
|
5
|
-
= link_to 'Basic Search', '#', :"data-search-form" => "basic_search", :class => (params[:q] ? "" : " active")
|
6
|
-
%li
|
7
|
-
= link_to 'Advanced Search', '#', :"data-search-form" => "advanced_search", :class => (!params[:q] ? "" : " active")
|
8
|
-
|
9
|
-
.search_form#basic_search{ :style => (params[:q] ? 'display: none;' : '') }
|
10
|
-
= render "ransack/basic_search"
|
11
|
-
|
12
|
-
.search_form#advanced_search{ :style => (!params[:q] ? 'display: none;' : '') }
|
13
|
-
= render "ransack/advanced_search"
|