active_scaffold 3.4.37 → 3.4.38
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/CHANGELOG +8 -0
- data/app/assets/javascripts/jquery/active_scaffold.js +10 -0
- data/app/assets/stylesheets/active_scaffold-ie.scss +4 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +12 -0
- data/lib/active_scaffold/actions/field_search.rb +2 -1
- data/lib/active_scaffold/actions/list.rb +27 -6
- data/lib/active_scaffold/actions/nested.rb +1 -2
- data/lib/active_scaffold/actions/search.rb +5 -5
- data/lib/active_scaffold/data_structures/column.rb +2 -1
- data/lib/active_scaffold/engine.rb +11 -3
- data/lib/active_scaffold/extensions/connection_adapter.rb +15 -0
- data/lib/active_scaffold/finder.rb +0 -5
- data/lib/active_scaffold/helpers/id_helpers.rb +2 -2
- data/lib/active_scaffold/helpers/list_column_helpers.rb +21 -11
- data/lib/active_scaffold/helpers/view_helpers.rb +4 -0
- data/lib/active_scaffold/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: f85e22fd8b8ed0d15b333d211f081e24ee2484d6
|
|
4
|
+
data.tar.gz: 8b490194e7d7adc60a00d0a3c14d718948078c69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4e238be107e91bde560a8eef3e60ce62d5018c3918a03779c3782f12f770e47ee68bafa96253b520629f437630e2e828f5e88266eb545117378024435fef4099
|
|
7
|
+
data.tar.gz: faf799e2a71c5c80fa71f6c8bd0f2fe84b580e01b793f52ac259520d90b2a5bc4e890383553e560a596f0c2388677c2935fa44febc3e97da9dd69f398fc7de1f
|
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
= 3.4.38
|
|
2
|
+
- ensure add_existing and delete_existing are removed when list is not nested
|
|
3
|
+
- add :percentage list_ui, use jquery ui slider, set slider options on column.options[:slider], :value_method (default to column name), :min_method and :max_method to get value, min and max options from record
|
|
4
|
+
- fix default required for column with :checkbox form_ui and inclusion validator on rails 3.2
|
|
5
|
+
- fix search on habtm column on postgresql
|
|
6
|
+
- fix for format_number_value with nil
|
|
7
|
+
- add includes for sorting columns only if columns is not displayed, add to includes for postgresql, to outer_joins for others
|
|
8
|
+
|
|
1
9
|
= 3.4.37
|
|
2
10
|
- return valid css class for subgroups, e.g. when name with dot is used for translation scopes
|
|
3
11
|
- check permissions for add existing and delete existing, use nested parent record authorized for update nested association column
|
|
@@ -296,12 +296,14 @@ jQuery(document).ready(function($) {
|
|
|
296
296
|
ActiveScaffold.live_search(document);
|
|
297
297
|
ActiveScaffold.auto_paginate(document);
|
|
298
298
|
ActiveScaffold.draggable_lists('.draggable-lists', document);
|
|
299
|
+
ActiveScaffold.sliders(document);
|
|
299
300
|
if (ActiveScaffold.config.warn_changes) ActiveScaffold.setup_warn_changes();
|
|
300
301
|
jQuery(document).on('as:element_updated', function(e) {
|
|
301
302
|
ActiveScaffold.load_embedded(e.target);
|
|
302
303
|
ActiveScaffold.enable_js_form_buttons(e.target);
|
|
303
304
|
ActiveScaffold.live_search(e.target);
|
|
304
305
|
ActiveScaffold.draggable_lists('.draggable-lists', e.target);
|
|
306
|
+
ActiveScaffold.sliders(e.target);
|
|
305
307
|
});
|
|
306
308
|
jQuery(document).on('as:element_updated', '.active-scaffold', function(e) {
|
|
307
309
|
if (e.target != this) return;
|
|
@@ -314,6 +316,7 @@ jQuery(document).ready(function($) {
|
|
|
314
316
|
ActiveScaffold.live_search(action_link.adapter);
|
|
315
317
|
ActiveScaffold.auto_paginate(action_link.adapter);
|
|
316
318
|
ActiveScaffold.draggable_lists('.draggable-lists', action_link.adapter);
|
|
319
|
+
ActiveScaffold.sliders(action_link.adapter);
|
|
317
320
|
});
|
|
318
321
|
});
|
|
319
322
|
|
|
@@ -443,6 +446,13 @@ var ActiveScaffold = {
|
|
|
443
446
|
enable_js_form_buttons: function(element) {
|
|
444
447
|
jQuery('.as-js-button', element).show();
|
|
445
448
|
},
|
|
449
|
+
sliders: function(element) {
|
|
450
|
+
$('.as-slider', element).each(function() {
|
|
451
|
+
var opts = $(this).data('slider');
|
|
452
|
+
$(this).slider(opts);
|
|
453
|
+
if (opts.disabled) $(this).find('.ui-slider-handle').hide();
|
|
454
|
+
});
|
|
455
|
+
},
|
|
446
456
|
load_embedded: function(element) {
|
|
447
457
|
jQuery('.active-scaffold-component .load-embedded', element).each(function(index, item) {
|
|
448
458
|
item = jQuery(item);
|
|
@@ -212,6 +212,18 @@ display:inline;
|
|
|
212
212
|
text-align: right;
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
+
.as-slider { display: block; }
|
|
216
|
+
.as-slider .ui-slider-range {
|
|
217
|
+
border: 0;
|
|
218
|
+
height: 100%;
|
|
219
|
+
border-radius: 5px;
|
|
220
|
+
border-top-right-radius: 0;
|
|
221
|
+
border-bottom-right-radius: 0;
|
|
222
|
+
}
|
|
223
|
+
.as-slider.ui-state-disabled {
|
|
224
|
+
opacity: 1;
|
|
225
|
+
}
|
|
226
|
+
|
|
215
227
|
/* Table :: Actions (Edit, Delete)
|
|
216
228
|
============================= */
|
|
217
229
|
.active-scaffold tr.record td.actions {
|
|
@@ -47,13 +47,14 @@ module ActiveScaffold::Actions
|
|
|
47
47
|
filtered_columns = []
|
|
48
48
|
text_search = active_scaffold_config.field_search.text_search
|
|
49
49
|
columns = active_scaffold_config.field_search.columns
|
|
50
|
+
count_includes = active_scaffold_config.list.user.count_includes
|
|
50
51
|
search_params.each do |key, value|
|
|
51
52
|
next unless columns.include? key
|
|
52
53
|
column = active_scaffold_config.columns[key]
|
|
53
54
|
search_condition = self.class.condition_for_column(column, value, text_search)
|
|
54
55
|
next if search_condition.blank?
|
|
55
56
|
|
|
56
|
-
if
|
|
57
|
+
if count_includes.nil? && column.includes.present? && list_columns.include?(column)
|
|
57
58
|
active_scaffold_references << column.includes
|
|
58
59
|
elsif column.search_joins.present?
|
|
59
60
|
active_scaffold_outer_joins << column.search_joins
|
|
@@ -64,7 +64,7 @@ module ActiveScaffold::Actions
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
# The actual algorithm to prepare for the list view
|
|
67
|
-
def set_includes_for_columns(action = :list)
|
|
67
|
+
def set_includes_for_columns(action = :list, sorting = active_scaffold_config.list.user.sorting)
|
|
68
68
|
@cache_associations = true
|
|
69
69
|
columns =
|
|
70
70
|
if respond_to?(:"#{action}_columns", true)
|
|
@@ -72,12 +72,33 @@ module ActiveScaffold::Actions
|
|
|
72
72
|
else
|
|
73
73
|
active_scaffold_config.send(action).columns.collect_visible(:flatten => true)
|
|
74
74
|
end
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
sorting.sorts_on?(c) || (c.plural_association? && c.association.macro == :has_and_belongs_to_many && c.association.respond_to?(:scope) && c.association.scope)
|
|
75
|
+
joins_cols, preload_cols = columns.select { |c| c.includes.present? }.partition do |col|
|
|
76
|
+
includes_need_join?(col, sorting)
|
|
78
77
|
end
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
active_scaffold_references.concat joins_cols.map(&:includes).flatten.uniq
|
|
79
|
+
active_scaffold_preload.concat preload_cols.map(&:includes).flatten.uniq
|
|
80
|
+
set_includes_for_sorting(columns, sorting) if Rails::VERSION::MAJOR >= 4 && sorting.sorts_by_sql?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def set_includes_for_sorting(columns, sorting)
|
|
84
|
+
sorting.each do |col, _|
|
|
85
|
+
if col.includes.present? && !columns.include?(col)
|
|
86
|
+
if active_scaffold_config.model.connection.needs_order_expressions_in_select?
|
|
87
|
+
active_scaffold_references << col.includes
|
|
88
|
+
else
|
|
89
|
+
active_scaffold_outer_joins << col.includes
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def includes_need_join?(column, sorting = active_scaffold_config.list.user.sorting)
|
|
96
|
+
sorting.sorts_on?(column) || scoped_habtm?(column)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def scoped_habtm?(column)
|
|
100
|
+
assoc = column.association if column.plural_association?
|
|
101
|
+
assoc && assoc.macro == :has_and_belongs_to_many && assoc.respond_to?(:scope) && assoc.scope
|
|
81
102
|
end
|
|
82
103
|
|
|
83
104
|
def get_row(crud_type_or_security_options = :read)
|
|
@@ -53,8 +53,7 @@ module ActiveScaffold::Actions
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def include_habtm_actions
|
|
56
|
-
|
|
57
|
-
if nested.habtm?
|
|
56
|
+
if nested? && nested.habtm?
|
|
58
57
|
# Production mode is ok with adding a link everytime the scaffold is nested - we are not ok with that.
|
|
59
58
|
active_scaffold_config.action_links.add('new_existing', :label => :add_existing, :type => :collection, :security_method => :add_existing_authorized?) unless active_scaffold_config.action_links['new_existing']
|
|
60
59
|
if active_scaffold_config.nested.shallow_delete
|
|
@@ -26,11 +26,11 @@ module ActiveScaffold::Actions
|
|
|
26
26
|
@filtered = !search_conditions.blank?
|
|
27
27
|
active_scaffold_conditions.concat search_conditions if @filtered
|
|
28
28
|
|
|
29
|
-
references, outer_joins = columns.partition
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
references, outer_joins = columns.partition do |column|
|
|
30
|
+
column.includes.present? && list_columns.include?(column)
|
|
31
|
+
end
|
|
32
|
+
active_scaffold_references.concat references.map(&:includes).flatten.uniq.compact
|
|
33
|
+
active_scaffold_outer_joins.concat outer_joins.map(&:search_joins).flatten.uniq.compact
|
|
34
34
|
|
|
35
35
|
active_scaffold_config.list.user.page = nil
|
|
36
36
|
else
|
|
@@ -426,7 +426,8 @@ module ActiveScaffold::DataStructures
|
|
|
426
426
|
end
|
|
427
427
|
|
|
428
428
|
def inclusion_validator_for_checkbox?(val)
|
|
429
|
-
@form_ui == :checkbox &&
|
|
429
|
+
@form_ui == :checkbox &&
|
|
430
|
+
[[true, false], [false, true]].include?(val.options[:with] || val.options[:within] || val.options[:in])
|
|
430
431
|
end
|
|
431
432
|
|
|
432
433
|
def default_select_columns
|
|
@@ -20,9 +20,17 @@ module ActiveScaffold
|
|
|
20
20
|
initializer 'active_scaffold.active_record' do
|
|
21
21
|
ActiveSupport.on_load :active_record do
|
|
22
22
|
include ActiveScaffold::ActiveRecordPermissions::ModelUserAccess::Model
|
|
23
|
-
ActiveRecord::Associations
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
module ActiveRecord::Associations
|
|
24
|
+
Association.send :include, ActiveScaffold::Tableless::Association
|
|
25
|
+
CollectionAssociation.send :include, ActiveScaffold::Tableless::CollectionAssociation
|
|
26
|
+
SingularAssociation.send :include, ActiveScaffold::Tableless::SingularAssociation
|
|
27
|
+
end
|
|
28
|
+
module ActiveRecord::ConnectionAdapters
|
|
29
|
+
AbstractAdapter.send :include, ActiveScaffold::ConnectionAdapters::AbstractAdapter
|
|
30
|
+
if defined?(PostgreSQLAdapter)
|
|
31
|
+
PostgreSQLAdapter.send :include, ActiveScaffold::ConnectionAdapters::PostgreSQLAdapter
|
|
32
|
+
end
|
|
33
|
+
end
|
|
26
34
|
end
|
|
27
35
|
end
|
|
28
36
|
|
|
@@ -352,11 +352,6 @@ module ActiveScaffold
|
|
|
352
352
|
:select => options[:select]
|
|
353
353
|
}
|
|
354
354
|
if Rails::VERSION::MAJOR >= 4
|
|
355
|
-
if options[:sorting].try(:sorts_by_sql?)
|
|
356
|
-
options[:sorting].each do |col, _|
|
|
357
|
-
finder_options[:outer_joins] << col.includes if col.includes.present?
|
|
358
|
-
end
|
|
359
|
-
end
|
|
360
355
|
finder_options.merge!(:references => active_scaffold_references)
|
|
361
356
|
end
|
|
362
357
|
|
|
@@ -14,8 +14,8 @@ module ActiveScaffold
|
|
|
14
14
|
nested_parent_record.id
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def nested_id
|
|
18
|
-
"#{nested.parent_scaffold.controller_path}-#{nested_parent_id}-#{
|
|
17
|
+
def nested_id(controller = params[:controller])
|
|
18
|
+
"#{nested.parent_scaffold.controller_path}-#{nested_parent_id}-#{controller}" if nested?
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def active_scaffold_id
|
|
@@ -84,6 +84,14 @@ module ActiveScaffold
|
|
|
84
84
|
options.delete(:disabled) if inplace_edit?(record, column)
|
|
85
85
|
check_box(:record, column.name, options)
|
|
86
86
|
end
|
|
87
|
+
|
|
88
|
+
def active_scaffold_column_percentage(record, column)
|
|
89
|
+
options = column.options[:slider] || {}
|
|
90
|
+
options = options.merge(min: record.send(options[:min_method])) if options[:min_method]
|
|
91
|
+
options = options.merge(max: record.send(options[:max_method])) if options[:max_method]
|
|
92
|
+
value = record.send(options[:value_method]) if options[:value_method]
|
|
93
|
+
as_slider options.merge(value: value || record.send(column.name))
|
|
94
|
+
end
|
|
87
95
|
|
|
88
96
|
def column_override(column)
|
|
89
97
|
override_helper column, 'column'
|
|
@@ -124,17 +132,19 @@ module ActiveScaffold
|
|
|
124
132
|
end
|
|
125
133
|
|
|
126
134
|
def format_number_value(value, options = {})
|
|
127
|
-
value
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
if value
|
|
136
|
+
value = case options[:format]
|
|
137
|
+
when :size
|
|
138
|
+
number_to_human_size(value, options[:i18n_options] || {})
|
|
139
|
+
when :percentage
|
|
140
|
+
number_to_percentage(value, options[:i18n_options] || {})
|
|
141
|
+
when :currency
|
|
142
|
+
number_to_currency(value, options[:i18n_options] || {})
|
|
143
|
+
when :i18n_number
|
|
144
|
+
send("number_with_#{value.is_a?(Integer) ? 'delimiter' : 'precision'}", value, options[:i18n_options] || {})
|
|
145
|
+
else
|
|
146
|
+
value
|
|
147
|
+
end
|
|
138
148
|
end
|
|
139
149
|
clean_column_value(value)
|
|
140
150
|
end
|
|
@@ -541,6 +541,10 @@ module ActiveScaffold
|
|
|
541
541
|
def format_column_calculation(column, calculation)
|
|
542
542
|
"#{"#{as_(column.calculate)}: " unless column.calculate.is_a? Proc}#{format_column_value nil, column, calculation}"
|
|
543
543
|
end
|
|
544
|
+
|
|
545
|
+
def as_slider(options)
|
|
546
|
+
content_tag(:span, '', class: 'as-slider', data: {slider: options})
|
|
547
|
+
end
|
|
544
548
|
|
|
545
549
|
def clean_column_name(name)
|
|
546
550
|
name.to_s.gsub('?', '')
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_scaffold
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.4.
|
|
4
|
+
version: 3.4.38
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Many, see README
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-05-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -302,6 +302,7 @@ files:
|
|
|
302
302
|
- lib/active_scaffold/extensions/action_controller_rendering.rb
|
|
303
303
|
- lib/active_scaffold/extensions/action_controller_rescueing.rb
|
|
304
304
|
- lib/active_scaffold/extensions/action_view_rendering.rb
|
|
305
|
+
- lib/active_scaffold/extensions/connection_adapter.rb
|
|
305
306
|
- lib/active_scaffold/extensions/left_outer_joins.rb
|
|
306
307
|
- lib/active_scaffold/extensions/localize.rb
|
|
307
308
|
- lib/active_scaffold/extensions/name_option_for_datetime.rb
|