active_scaffold 3.7.12 → 4.0.0.rc1
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.rdoc +9 -23
- data/README.md +3 -2
- data/app/assets/config/active_scaffold_manifest.js +3 -0
- data/app/assets/javascripts/active_scaffold.js.erb +24 -34
- data/app/assets/javascripts/jquery/active_scaffold.js +41 -58
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +1 -1
- data/app/assets/stylesheets/active_scaffold_colors.scss +0 -7
- data/app/assets/stylesheets/active_scaffold_extensions.css.erb +2 -2
- data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +7 -7
- data/app/assets/stylesheets/active_scaffold_layout.css +57 -30
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +10 -10
- data/app/views/active_scaffold_overrides/_base_form.html.erb +21 -21
- data/app/views/active_scaffold_overrides/_create_form.html.erb +10 -7
- data/app/views/active_scaffold_overrides/_create_form_on_list.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_form.html.erb +11 -14
- data/app/views/active_scaffold_overrides/_form_association.html.erb +21 -12
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +19 -10
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +15 -21
- data/app/views/active_scaffold_overrides/_form_messages.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +7 -6
- data/app/views/active_scaffold_overrides/_human_conditions.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +15 -8
- data/app/views/active_scaffold_overrides/_list_calculations.html.erb +2 -3
- data/app/views/active_scaffold_overrides/_list_header.html.erb +2 -2
- data/app/views/active_scaffold_overrides/_list_inline_adapter.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_list_messages.html.erb +12 -3
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_record.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_list_with_header.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_render_field.js.erb +4 -4
- data/app/views/active_scaffold_overrides/_row.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +6 -5
- data/app/views/active_scaffold_overrides/_show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_show_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_show_horizontal_record.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_actions.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_calculations.js.erb +2 -2
- data/app/views/active_scaffold_overrides/_update_column.js.erb +8 -7
- data/app/views/active_scaffold_overrides/_update_form.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_update_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/_vertical_subform.html.erb +4 -3
- data/app/views/active_scaffold_overrides/action_confirmation.html.erb +3 -3
- data/app/views/active_scaffold_overrides/add_existing.js.erb +6 -6
- data/app/views/active_scaffold_overrides/add_existing_form.html.erb +1 -1
- data/app/views/active_scaffold_overrides/add_tab.js.erb +15 -0
- data/app/views/active_scaffold_overrides/create.html.erb +1 -1
- data/app/views/active_scaffold_overrides/delete.html.erb +4 -4
- data/app/views/active_scaffold_overrides/destroy.js.erb +15 -13
- data/app/views/active_scaffold_overrides/edit_associated.js.erb +3 -3
- data/app/views/active_scaffold_overrides/field_search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/form_messages.js.erb +1 -1
- data/app/views/active_scaffold_overrides/list.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_action_update.js.erb +13 -8
- data/app/views/active_scaffold_overrides/on_create.js.erb +34 -6
- data/app/views/active_scaffold_overrides/on_mark.js.erb +3 -3
- data/app/views/active_scaffold_overrides/on_update.js.erb +9 -9
- data/app/views/active_scaffold_overrides/render_field.js.erb +1 -1
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +2 -2
- data/app/views/active_scaffold_overrides/search.html.erb +1 -1
- data/app/views/active_scaffold_overrides/show.html.erb +3 -3
- data/app/views/active_scaffold_overrides/update.html.erb +2 -2
- data/app/views/active_scaffold_overrides/update_column.js.erb +4 -4
- data/app/views/active_scaffold_overrides/update_row.js.erb +1 -1
- data/lib/active_scaffold/actions/common_search.rb +5 -3
- data/lib/active_scaffold/actions/core.rb +57 -32
- data/lib/active_scaffold/actions/create.rb +19 -17
- data/lib/active_scaffold/actions/delete.rb +10 -12
- data/lib/active_scaffold/actions/field_search.rb +28 -13
- data/lib/active_scaffold/actions/list.rb +34 -34
- data/lib/active_scaffold/actions/mark.rb +5 -5
- data/lib/active_scaffold/actions/nested.rb +64 -56
- data/lib/active_scaffold/actions/search.rb +2 -2
- data/lib/active_scaffold/actions/show.rb +5 -5
- data/lib/active_scaffold/actions/subform.rb +15 -4
- data/lib/active_scaffold/actions/update.rb +20 -20
- data/lib/active_scaffold/active_record_permissions.rb +4 -3
- data/lib/active_scaffold/attribute_params.rb +51 -50
- data/lib/active_scaffold/bridges/active_storage/active_storage_bridge.rb +4 -4
- data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +6 -2
- data/lib/active_scaffold/bridges/active_storage.rb +1 -1
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +3 -3
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +4 -1
- data/lib/active_scaffold/bridges/bitfields.rb +1 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/cancan.rb +8 -8
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +4 -3
- data/lib/active_scaffold/bridges/carrierwave.rb +2 -2
- data/lib/active_scaffold/bridges/chosen.rb +1 -5
- data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +4 -2
- data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -12
- data/lib/active_scaffold/bridges/date_picker/helper.rb +37 -33
- data/lib/active_scaffold/bridges/date_picker.rb +1 -4
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +3 -2
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +2 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +4 -9
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +6 -3
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +3 -3
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +1 -4
- data/lib/active_scaffold/bridges/file_column.rb +1 -0
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -2
- data/lib/active_scaffold/bridges/paper_trail/config.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +2 -1
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +3 -2
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +10 -9
- data/lib/active_scaffold/bridges/paperclip.rb +2 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +10 -11
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +3 -1
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -7
- data/lib/active_scaffold/bridges/tiny_mce.rb +2 -7
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +7 -7
- data/lib/active_scaffold/bridges.rb +7 -5
- data/lib/active_scaffold/config/base.rb +20 -24
- data/lib/active_scaffold/config/core.rb +27 -39
- data/lib/active_scaffold/config/create.rb +1 -1
- data/lib/active_scaffold/config/delete.rb +9 -9
- data/lib/active_scaffold/config/field_search.rb +4 -9
- data/lib/active_scaffold/config/form.rb +3 -1
- data/lib/active_scaffold/config/list.rb +19 -15
- data/lib/active_scaffold/config/nested.rb +2 -2
- data/lib/active_scaffold/config/search.rb +5 -5
- data/lib/active_scaffold/config/show.rb +1 -1
- data/lib/active_scaffold/config/subform.rb +1 -1
- data/lib/active_scaffold/config/update.rb +4 -5
- data/lib/active_scaffold/configurable.rb +2 -1
- data/lib/active_scaffold/constraints.rb +16 -11
- data/lib/active_scaffold/core.rb +25 -27
- data/lib/active_scaffold/data_structures/action_columns.rb +10 -3
- data/lib/active_scaffold/data_structures/action_link.rb +19 -9
- data/lib/active_scaffold/data_structures/action_links.rb +20 -26
- data/lib/active_scaffold/data_structures/actions.rb +3 -3
- data/lib/active_scaffold/data_structures/association/abstract.rb +8 -4
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +1 -0
- data/lib/active_scaffold/data_structures/association/active_record.rb +1 -4
- data/lib/active_scaffold/data_structures/column.rb +368 -327
- data/lib/active_scaffold/data_structures/columns.rb +3 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
- data/lib/active_scaffold/data_structures/proxy_column.rb +68 -0
- data/lib/active_scaffold/data_structures/set.rb +7 -4
- data/lib/active_scaffold/data_structures/sorting.rb +21 -12
- data/lib/active_scaffold/engine.rb +12 -12
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +5 -5
- data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +29 -31
- data/lib/active_scaffold/extensions/ice_nine.rb +2 -1
- data/lib/active_scaffold/extensions/localize.rb +2 -2
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
- data/lib/active_scaffold/extensions/routing_mapper.rb +5 -4
- data/lib/active_scaffold/extensions/unsaved_associated.rb +3 -2
- data/lib/active_scaffold/finder.rb +71 -78
- data/lib/active_scaffold/helpers/action_link_helpers.rb +37 -49
- data/lib/active_scaffold/helpers/association_helpers.rb +3 -2
- data/lib/active_scaffold/helpers/controller_helpers.rb +18 -16
- data/lib/active_scaffold/helpers/form_column_helpers.rb +69 -53
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +17 -15
- data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
- data/lib/active_scaffold/helpers/list_column_helpers.rb +35 -38
- data/lib/active_scaffold/helpers/pagination_helpers.rb +4 -4
- data/lib/active_scaffold/helpers/search_column_helpers.rb +25 -34
- data/lib/active_scaffold/helpers/show_column_helpers.rb +7 -4
- data/lib/active_scaffold/helpers/tabs_helpers.rb +88 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +15 -13
- data/lib/active_scaffold/marked_model.rb +1 -2
- data/lib/active_scaffold/orm_checks.rb +6 -4
- data/lib/active_scaffold/paginator.rb +3 -2
- data/lib/active_scaffold/registry.rb +5 -0
- data/lib/active_scaffold/tableless.rb +24 -14
- data/lib/active_scaffold/version.rb +4 -4
- data/lib/active_scaffold.rb +8 -34
- data/lib/generators/active_scaffold/controller_generator.rb +20 -20
- data/lib/generators/active_scaffold/install_generator.rb +4 -8
- data/lib/generators/active_scaffold/resource_generator.rb +31 -31
- data/lib/tasks/brakeman.rake +1 -1
- data/shoulda_macros/macros.rb +14 -14
- metadata +11 -232
- data/app/assets/javascripts/prototype/active_scaffold.js +0 -1249
- data/app/assets/javascripts/prototype/active_scaffold_chosen.js +0 -0
- data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
- data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
- data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -17
- data/app/views/active_scaffold_overrides/_list_messages_content.html.erb +0 -8
- data/app/views/active_scaffold_overrides/_new_record.js.erb +0 -15
- data/app/views/active_scaffold_overrides/_popup_adapter.html.erb +0 -20
- data/app/views/active_scaffold_overrides/_refresh_create_form.js.erb +0 -12
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -58
- data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -17
- data/lib/active_scaffold/data_structures/action_link_separator.rb +0 -13
- data/lib/active_scaffold/extensions/cow_proxy.rb +0 -102
- data/test/active_scaffold_config_mock.rb +0 -33
- data/test/bridges/bridge_test.rb +0 -88
- data/test/bridges/date_picker_test.rb +0 -31
- data/test/bridges/paper_trail_test.rb +0 -16
- data/test/bridges/paperclip_test.rb +0 -85
- data/test/bridges/tiny_mce_test.rb +0 -61
- data/test/class_with_finder.rb +0 -42
- data/test/company.rb +0 -97
- data/test/config/base_test.rb +0 -17
- data/test/config/core_test.rb +0 -66
- data/test/config/create_test.rb +0 -72
- data/test/config/delete_test.rb +0 -35
- data/test/config/field_search_test.rb +0 -49
- data/test/config/list_test.rb +0 -134
- data/test/config/nested_test.rb +0 -55
- data/test/config/search_test.rb +0 -62
- data/test/config/show_test.rb +0 -45
- data/test/config/subform_test.rb +0 -19
- data/test/config/update_test.rb +0 -52
- data/test/const_mocker.rb +0 -32
- data/test/data_structures/action_columns_test.rb +0 -112
- data/test/data_structures/action_link_test.rb +0 -79
- data/test/data_structures/action_links_test.rb +0 -78
- data/test/data_structures/actions_test.rb +0 -25
- data/test/data_structures/association_column_test.rb +0 -41
- data/test/data_structures/column_test.rb +0 -186
- data/test/data_structures/columns_test.rb +0 -68
- data/test/data_structures/set_test.rb +0 -84
- data/test/data_structures/sorting_test.rb +0 -148
- data/test/data_structures/standard_column_test.rb +0 -23
- data/test/data_structures/validation_reflection_test.rb +0 -69
- data/test/data_structures/virtual_column_test.rb +0 -23
- data/test/extensions/action_view_rendering_test.rb +0 -20
- data/test/extensions/active_record_test.rb +0 -44
- data/test/extensions/routing_mapper_test.rb +0 -73
- data/test/helpers/form_column_helpers_test.rb +0 -34
- data/test/helpers/list_column_helpers_test.rb +0 -53
- data/test/helpers/pagination_helpers_test.rb +0 -65
- data/test/helpers/search_column_helpers_test.rb +0 -15
- data/test/misc/active_record_permissions_test.rb +0 -193
- data/test/misc/attribute_params_test.rb +0 -460
- data/test/misc/calculation_test.rb +0 -39
- data/test/misc/configurable_test.rb +0 -97
- data/test/misc/constraints_test.rb +0 -209
- data/test/misc/convert_numbers_format_test.rb +0 -171
- data/test/misc/finder_test.rb +0 -124
- data/test/misc/lang_test.rb +0 -10
- data/test/misc/parse_datetime_test.rb +0 -159
- data/test/misc/render_test.rb +0 -9
- data/test/misc/tableless_test.rb +0 -56
- data/test/mock_app/.gitignore +0 -2
- data/test/mock_app/Rakefile +0 -7
- data/test/mock_app/app/assets/config/manifest.js +0 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +0 -4
- data/test/mock_app/app/controllers/application_controller.rb +0 -10
- data/test/mock_app/app/controllers/buildings_controller.rb +0 -4
- data/test/mock_app/app/controllers/cars_controller.rb +0 -5
- data/test/mock_app/app/controllers/contacts_controller.rb +0 -4
- data/test/mock_app/app/controllers/floors_controller.rb +0 -6
- data/test/mock_app/app/controllers/people_controller.rb +0 -8
- data/test/mock_app/app/controllers/roles_controller.rb +0 -4
- data/test/mock_app/app/helpers/application_helper.rb +0 -3
- data/test/mock_app/app/models/address.rb +0 -3
- data/test/mock_app/app/models/building.rb +0 -9
- data/test/mock_app/app/models/car.rb +0 -3
- data/test/mock_app/app/models/contact.rb +0 -3
- data/test/mock_app/app/models/file_model.rb +0 -31
- data/test/mock_app/app/models/floor.rb +0 -8
- data/test/mock_app/app/models/person.rb +0 -12
- data/test/mock_app/app/models/role.rb +0 -3
- data/test/mock_app/app/views/active_scaffold_overrides/_form.html.erb +0 -2
- data/test/mock_app/app/views/active_scaffold_overrides/list.html.erb +0 -2
- data/test/mock_app/app/views/people/_first_name_form_column.html.erb +0 -2
- data/test/mock_app/app/views/people/_form.html.erb +0 -2
- data/test/mock_app/app/views/people/list.html.erb +0 -2
- data/test/mock_app/config/application.rb +0 -14
- data/test/mock_app/config/boot.rb +0 -7
- data/test/mock_app/config/database.yml +0 -16
- data/test/mock_app/config/environment.rb +0 -6
- data/test/mock_app/config/environments/development.rb +0 -24
- data/test/mock_app/config/environments/production.rb +0 -49
- data/test/mock_app/config/environments/test.rb +0 -34
- data/test/mock_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/mock_app/config/initializers/inflections.rb +0 -10
- data/test/mock_app/config/initializers/mime_types.rb +0 -5
- data/test/mock_app/config/initializers/secret_token.rb +0 -11
- data/test/mock_app/config/initializers/session_store.rb +0 -8
- data/test/mock_app/config/initializers/wrap_parameters.rb +0 -14
- data/test/mock_app/config/locales/en.yml +0 -5
- data/test/mock_app/config/routes.rb +0 -17
- data/test/mock_app/config.ru +0 -4
- data/test/mock_app/db/schema.rb +0 -68
- data/test/mock_app/db/test.sqlite3 +0 -1
- data/test/model_stub.rb +0 -64
- data/test/performance/list_cars_performance_test.rb +0 -34
- data/test/performance/list_people_performance_test.rb +0 -31
- data/test/performance_test_help.rb +0 -3
- data/test/run_all.rb +0 -6
- data/test/test_helper.rb +0 -71
- data/vendor/assets/javascripts/getprototypeof.js +0 -12
@@ -2,7 +2,7 @@ module ActiveScaffold::Bridges
|
|
2
2
|
class CountrySelect
|
3
3
|
module FormColumnHelpers
|
4
4
|
def active_scaffold_input_country(column, options, ui_options: column.options)
|
5
|
-
select_options = {:
|
5
|
+
select_options = {prompt: as_(:_select_), priority_countries: ui_options[:priority] || [:us]}
|
6
6
|
select_options[:format] = ui_options[:format] if ui_options[:format]
|
7
7
|
select_options.merge!(options)
|
8
8
|
options.reverse_merge!(ui_options).except!(:prompt, :priority, :format)
|
@@ -15,15 +15,17 @@ module ActiveScaffold::Bridges
|
|
15
15
|
def active_scaffold_column_country(record, column, ui_options: column.options)
|
16
16
|
country_code = record.send(column.name)
|
17
17
|
return if country_code.blank?
|
18
|
+
|
18
19
|
country = ISO3166::Country[country_code]
|
19
20
|
return country_code unless country
|
21
|
+
|
20
22
|
country.translations[I18n.locale.to_s] || country.name
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
26
|
module SearchColumnHelpers
|
25
27
|
def active_scaffold_search_country(column, options, ui_options: column.options)
|
26
|
-
active_scaffold_input_country(column, options.merge!(:
|
28
|
+
active_scaffold_input_country(column, options.merge!(selected: options.delete(:value)), ui_options: ui_options)
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
@@ -1,18 +1,11 @@
|
|
1
|
-
class File #:nodoc:
|
2
|
-
unless File.respond_to?(:binread)
|
3
|
-
def self.binread(file)
|
4
|
-
File.open(file, 'rb', &:read)
|
5
|
-
end
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
1
|
class ActiveScaffold::Bridges::DatePicker
|
10
2
|
module DatePickerBridge
|
11
3
|
def initialize(model_id)
|
12
4
|
super
|
13
5
|
return unless ActiveScaffold::Bridges::DatePicker.default_ui
|
14
6
|
|
15
|
-
|
7
|
+
types = %i[date datetime]
|
8
|
+
date_picker_fields = _columns.filter_map { |c| {name: c.name.to_sym, type: c.type} if types.include?(c.type) }
|
16
9
|
# check to see if file column was used on the model
|
17
10
|
return if date_picker_fields.empty?
|
18
11
|
|
@@ -41,8 +34,23 @@ class ActiveScaffold::Bridges::DatePicker
|
|
41
34
|
end
|
42
35
|
end
|
43
36
|
|
44
|
-
def format_for_date(column, value,
|
45
|
-
|
37
|
+
def format_for_date(column, value, ui_name, ui_options)
|
38
|
+
ui_options = ui_options.reverse_merge(format: :default) if ui_name == :date_picker
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def format_for_datetime(column, value, ui_name, ui_options)
|
43
|
+
format = I18n.t "time.formats.#{ui_options[:format] || :picker}", default: '' if ui_name == :datetime_picker
|
44
|
+
return super if format.blank?
|
45
|
+
|
46
|
+
parts = Date._parse(value)
|
47
|
+
[[:hour, '%H'], [:min, ':%M'], [:sec, ':%S']].each do |part, f|
|
48
|
+
format.gsub!(f, '') if parts[part].blank?
|
49
|
+
end
|
50
|
+
format += ' %z' if parts[:offset].present? && format !~ /%z/i
|
51
|
+
|
52
|
+
format.gsub!(/.*(?=%H)/, '') if !parts[:year] && !parts[:month] && !parts[:mday]
|
53
|
+
[format, parts[:offset]]
|
46
54
|
end
|
47
55
|
end
|
48
56
|
|
@@ -57,7 +65,7 @@ class ActiveScaffold::Bridges::DatePicker
|
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
60
|
-
ActiveScaffold::Config::Core.
|
68
|
+
ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::DatePicker::DatePickerBridge
|
61
69
|
ActionView::Base.class_eval do
|
62
70
|
alias_method :active_scaffold_search_date_picker, :active_scaffold_search_datetime
|
63
71
|
alias_method :active_scaffold_search_datetime_picker, :active_scaffold_search_datetime
|
@@ -24,32 +24,32 @@ module ActiveScaffold::Bridges
|
|
24
24
|
}.freeze
|
25
25
|
|
26
26
|
def self.date_options_for_locales
|
27
|
-
I18n.available_locales.
|
27
|
+
I18n.available_locales.filter_map do |locale|
|
28
28
|
locale_date_options = date_options(locale)
|
29
29
|
"$.datepicker.regional['#{locale}'] = #{locale_date_options.to_json};" if locale_date_options
|
30
|
-
end.
|
30
|
+
end.join
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.date_options(locale)
|
34
34
|
date_picker_options = {
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
38
|
-
:
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
43
|
-
:
|
44
|
-
:
|
45
|
-
:
|
35
|
+
closeText: as_(:close),
|
36
|
+
prevText: as_(:previous),
|
37
|
+
nextText: as_(:next),
|
38
|
+
currentText: as_(:today),
|
39
|
+
monthNames: I18n.translate!('date.month_names', locale: locale)[1..],
|
40
|
+
monthNamesShort: I18n.translate!('date.abbr_month_names', locale: locale)[1..],
|
41
|
+
dayNames: I18n.translate!('date.day_names', locale: locale),
|
42
|
+
dayNamesShort: I18n.translate!('date.abbr_day_names', locale: locale),
|
43
|
+
dayNamesMin: I18n.translate!('date.abbr_day_names', locale: locale),
|
44
|
+
changeYear: true,
|
45
|
+
changeMonth: true
|
46
46
|
}
|
47
47
|
|
48
|
-
as_date_picker_options = I18n.translate! :date_picker_options, :
|
48
|
+
as_date_picker_options = I18n.translate! :date_picker_options, scope: :active_scaffold, locale: locale, default: ''
|
49
49
|
date_picker_options.merge!(as_date_picker_options) if as_date_picker_options.is_a? Hash
|
50
50
|
Rails.logger.warn "ActiveScaffold: Missing date picker localization for your locale: #{locale}" if as_date_picker_options.blank?
|
51
51
|
|
52
|
-
js_format = to_datepicker_format(I18n.translate!('date.formats.default', :
|
52
|
+
js_format = to_datepicker_format(I18n.translate!('date.formats.default', locale: locale, default: ''))
|
53
53
|
date_picker_options[:dateFormat] = js_format if js_format.present?
|
54
54
|
date_picker_options
|
55
55
|
rescue StandardError
|
@@ -57,22 +57,22 @@ module ActiveScaffold::Bridges
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.datetime_options_for_locales
|
60
|
-
I18n.available_locales.
|
60
|
+
I18n.available_locales.filter_map do |locale|
|
61
61
|
locale_datetime_options = datetime_options(locale)
|
62
62
|
"$.timepicker.regional['#{locale}'] = #{locale_datetime_options.to_json};" if locale_datetime_options
|
63
|
-
end.
|
63
|
+
end.join
|
64
64
|
end
|
65
65
|
|
66
66
|
def self.datetime_options(locale)
|
67
|
-
rails_time_format = I18n.translate! 'time.formats.picker', :
|
67
|
+
rails_time_format = I18n.translate! 'time.formats.picker', locale: locale, default: '%a, %d %b %Y %H:%M:%S'
|
68
68
|
datetime_picker_options = {
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
69
|
+
ampm: false,
|
70
|
+
hourText: I18n.translate!('datetime.prompts.hour', locale: locale),
|
71
|
+
minuteText: I18n.translate!('datetime.prompts.minute', locale: locale),
|
72
|
+
secondText: I18n.translate!('datetime.prompts.second', locale: locale)
|
73
73
|
}
|
74
74
|
|
75
|
-
as_datetime_picker_options = I18n.translate! :datetime_picker_options, :
|
75
|
+
as_datetime_picker_options = I18n.translate! :datetime_picker_options, scope: :active_scaffold, locale: locale, default: ''
|
76
76
|
datetime_picker_options.merge!(as_datetime_picker_options) if as_datetime_picker_options.is_a? Hash
|
77
77
|
Rails.logger.warn "ActiveScaffold: Missing datetime picker localization for your locale: #{locale}" if as_datetime_picker_options.blank?
|
78
78
|
|
@@ -84,11 +84,12 @@ module ActiveScaffold::Bridges
|
|
84
84
|
|
85
85
|
def self.to_datepicker_format(rails_format)
|
86
86
|
return nil if rails_format.nil?
|
87
|
+
|
87
88
|
if rails_format.match?(UNSUPPORTED_FORMAT_OPTIONS)
|
88
89
|
options = UNSUPPORTED_FORMAT_OPTIONS.to_s.scan(/\[(.*)\]/).dig(0, 0)&.each_char&.map { |c| "%#{c}" }
|
89
90
|
Rails.logger.warn(
|
90
|
-
"AS DatePicker::Helper: rails date format #{rails_format} includes options "\
|
91
|
-
"which can't be converted to jquery datepicker format. "\
|
91
|
+
"AS DatePicker::Helper: rails date format #{rails_format} includes options " \
|
92
|
+
"which can't be converted to jquery datepicker format. " \
|
92
93
|
"Options #{options.join(', ')} are not supported by datepicker and will be removed"
|
93
94
|
)
|
94
95
|
end
|
@@ -133,6 +134,7 @@ module ActiveScaffold::Bridges
|
|
133
134
|
|
134
135
|
def datepicker_format_options(column, format)
|
135
136
|
return {} if format == :default
|
137
|
+
|
136
138
|
if column.form_ui == :date_picker
|
137
139
|
js_format = to_datepicker_format(I18n.translate!("date.formats.#{format}"))
|
138
140
|
js_format.nil? ? {} : {dateFormat: js_format}
|
@@ -142,8 +144,8 @@ module ActiveScaffold::Bridges
|
|
142
144
|
end
|
143
145
|
end
|
144
146
|
|
145
|
-
def datepicker_format(options,
|
146
|
-
options.delete(:format) || (
|
147
|
+
def datepicker_format(options, ui_name)
|
148
|
+
options.delete(:format) || (ui_name == :date_picker ? :default : :picker)
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
@@ -151,7 +153,8 @@ module ActiveScaffold::Bridges
|
|
151
153
|
def active_scaffold_search_date_picker_field(column, options, current_search, name, ui_options: column.options)
|
152
154
|
value =
|
153
155
|
if current_search.is_a? Hash
|
154
|
-
|
156
|
+
conversion = column.search_ui == :date_picker ? :to_date : :to_time
|
157
|
+
controller.class.condition_value_for_datetime(column, current_search[name], conversion, ui_method: :search_ui, ui_options: ui_options)
|
155
158
|
else
|
156
159
|
current_search
|
157
160
|
end
|
@@ -161,8 +164,8 @@ module ActiveScaffold::Bridges
|
|
161
164
|
options[:class] << " #{column.search_ui}"
|
162
165
|
options[:style] = 'display: none' if options[:show] == false # hide only if asked to hide
|
163
166
|
options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
|
164
|
-
value = l(value, :
|
165
|
-
options = options.merge(:
|
167
|
+
value = l(value, format: format) if value
|
168
|
+
options = options.merge(id: "#{options[:id]}_#{name}", name: "#{options[:name]}[#{name}]", object: nil)
|
166
169
|
text_field_tag("#{options[:name]}[#{name}]", value, options)
|
167
170
|
end
|
168
171
|
end
|
@@ -173,10 +176,11 @@ module ActiveScaffold::Bridges
|
|
173
176
|
options = active_scaffold_input_text_options(options.merge(ui_options))
|
174
177
|
options[:class] << " #{column.form_ui}"
|
175
178
|
|
176
|
-
format = datepicker_format(
|
177
|
-
|
179
|
+
format = datepicker_format(ui_options, column.form_ui)
|
180
|
+
conversion = column.form_ui == :date_picker ? :to_date : :to_time
|
181
|
+
value = controller.class.condition_value_for_datetime(column, record.send(column.name), conversion, ui_method: :form_ui, ui_options: ui_options)
|
178
182
|
options[:data] = datepicker_format_options(column, format).reverse_merge!(options[:data] || {})
|
179
|
-
options[:value] = (value ? l(value, :
|
183
|
+
options[:value] = (value ? l(value, format: format) : nil)
|
180
184
|
text_field(:record, column.name, options)
|
181
185
|
end
|
182
186
|
end
|
@@ -6,12 +6,9 @@ module ActiveScaffold::Bridges
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.install?
|
9
|
-
ActiveScaffold.js_framework == :jquery && jquery_ui_included?
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.jquery_ui_included?
|
13
9
|
ActiveScaffold.jquery_ui_included?
|
14
10
|
end
|
11
|
+
|
15
12
|
mattr_accessor :default_ui
|
16
13
|
@@default_ui = true
|
17
14
|
|
@@ -4,13 +4,14 @@ module ActiveScaffold
|
|
4
4
|
def active_scaffold_column_dragonfly(record, column, ui_options: column.options)
|
5
5
|
attachment = record.send(column.name.to_s)
|
6
6
|
return nil if attachment.blank?
|
7
|
+
|
7
8
|
content =
|
8
9
|
if attachment.image?
|
9
|
-
image_tag(attachment.thumb(ui_options[:thumb] || ActiveScaffold::Bridges::Dragonfly::DragonflyBridgeHelpers.thumbnail_style).url, :
|
10
|
+
image_tag(attachment.thumb(ui_options[:thumb] || ActiveScaffold::Bridges::Dragonfly::DragonflyBridgeHelpers.thumbnail_style).url, border: 0)
|
10
11
|
else
|
11
12
|
attachment.name
|
12
13
|
end
|
13
|
-
link_to(content, dragonfly_url_for_attachment(attachment, record, column, ui_options: ui_options), :
|
14
|
+
link_to(content, dragonfly_url_for_attachment(attachment, record, column, ui_options: ui_options), target: '_blank', rel: 'noopener noreferrer')
|
14
15
|
end
|
15
16
|
|
16
17
|
def dragonfly_url_for_attachment(attachment, record, column, ui_options: column.options)
|
@@ -4,6 +4,6 @@ class ActiveScaffold::Bridges::Dragonfly < ActiveScaffold::DataStructures::Bridg
|
|
4
4
|
require File.join(File.dirname(__FILE__), 'dragonfly/list_ui')
|
5
5
|
require File.join(File.dirname(__FILE__), 'dragonfly/dragonfly_bridge_helpers')
|
6
6
|
require File.join(File.dirname(__FILE__), 'dragonfly/dragonfly_bridge')
|
7
|
-
ActiveScaffold::Config::Core.
|
7
|
+
ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::Dragonfly::DragonflyBridge
|
8
8
|
end
|
9
9
|
end
|
@@ -5,6 +5,7 @@ end
|
|
5
5
|
class ActiveScaffold::Bridges::FileColumn
|
6
6
|
module FileColumnBridge
|
7
7
|
attr_accessor :file_column_fields
|
8
|
+
|
8
9
|
def initialize(model_id)
|
9
10
|
super
|
10
11
|
|
@@ -32,10 +33,10 @@ class ActiveScaffold::Bridges::FileColumn
|
|
32
33
|
|
33
34
|
# set null to false so active_scaffold wont set it to null
|
34
35
|
# delete_file_column will take care of deleting a file or not.
|
35
|
-
_columns_hash[field.to_s].instance_variable_set(
|
36
|
+
_columns_hash[field.to_s].instance_variable_set(:@null, false)
|
36
37
|
rescue StandardError
|
37
38
|
false
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
41
|
-
ActiveScaffold::Config::Core.
|
42
|
+
ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::FileColumn::FileColumnBridge
|
@@ -33,13 +33,14 @@ module ActiveScaffold
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def options_for_file_column_field(field)
|
36
|
-
allocate.send("#{field}_options")
|
36
|
+
allocate.send(:"#{field}_options")
|
37
37
|
end
|
38
38
|
|
39
39
|
def field_has_image_version?(field, version = 'thumb')
|
40
40
|
options = options_for_file_column_field(field)
|
41
41
|
versions = options[:magick][:versions]
|
42
42
|
raise unless versions.stringify_keys[version]
|
43
|
+
|
43
44
|
true
|
44
45
|
rescue StandardError
|
45
46
|
false
|
@@ -6,21 +6,16 @@ module ActiveScaffold
|
|
6
6
|
record = options[:object]
|
7
7
|
if record.send(column.name)
|
8
8
|
# we already have a value? display the form for deletion.
|
9
|
-
|
10
|
-
when :jquery
|
11
|
-
remove_file_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
|
12
|
-
when :prototype
|
13
|
-
remove_file_js = "$(this).previous().value='true'; p=$(this).up(); p.hide(); p.next().show(); return false;"
|
14
|
-
end
|
9
|
+
remove_file_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
|
15
10
|
|
16
|
-
hidden_options = options.merge(:
|
11
|
+
hidden_options = options.merge(id: "#{options[:id]}_delete", name: options[:name].sub("[#{column.name}]", "[delete_#{column.name}]"), value: 'false')
|
17
12
|
custom_hidden_field_tag = hidden_field(:record, column.name, hidden_options)
|
18
13
|
|
19
14
|
content_tag(:div) do
|
20
15
|
content_tag(:div) do
|
21
16
|
safe_join [get_column_value(record, column), custom_hidden_field_tag, '|',
|
22
|
-
content_tag(:a, as_(:remove_file), :
|
23
|
-
content_tag(:div, 'test', :
|
17
|
+
content_tag(:a, as_(:remove_file), href: '#', onclick: remove_file_js),
|
18
|
+
content_tag(:div, 'test', style: 'display: none')], ' '
|
24
19
|
end
|
25
20
|
end
|
26
21
|
else
|
@@ -4,21 +4,24 @@ module ActiveScaffold
|
|
4
4
|
module ListColumnHelpers
|
5
5
|
def active_scaffold_column_download_link_with_filename(record, column, ui_options: column.options)
|
6
6
|
return nil if record.send(column.name).nil?
|
7
|
+
|
7
8
|
active_scaffold_column_download_link(record, column, File.basename(record.send(column.name)))
|
8
9
|
end
|
9
10
|
|
10
11
|
def active_scaffold_column_download_link(record, column, label = nil, ui_options: column.options)
|
11
12
|
return nil if record.send(column.name).nil?
|
13
|
+
|
12
14
|
label ||= as_(:download)
|
13
|
-
link_to(label, url_for_file_column(record, column.name.to_s), :
|
15
|
+
link_to(label, url_for_file_column(record, column.name.to_s), popup: true)
|
14
16
|
end
|
15
17
|
|
16
18
|
def active_scaffold_column_thumbnail(record, column, ui_options: column.options)
|
17
19
|
return nil if record.send(column.name).nil?
|
20
|
+
|
18
21
|
link_to(
|
19
|
-
image_tag(url_for_file_column(record, column.name.to_s, 'thumb'), :
|
22
|
+
image_tag(url_for_file_column(record, column.name.to_s, 'thumb'), border: 0),
|
20
23
|
url_for_file_column(record, column.name.to_s),
|
21
|
-
:
|
24
|
+
popup: true
|
22
25
|
)
|
23
26
|
end
|
24
27
|
end
|
@@ -26,17 +26,17 @@ class DeleteFileColumnTest < Minitest::Test
|
|
26
26
|
|
27
27
|
def test__delete_band_image__boolean_false__shouldnt_delete
|
28
28
|
@model.delete_band_image = false
|
29
|
-
|
29
|
+
assert_not_nil @model.band_image
|
30
30
|
end
|
31
31
|
|
32
32
|
def test__delete_band_image__string_false__shouldnt_delete
|
33
33
|
@model.delete_band_image = 'false'
|
34
|
-
|
34
|
+
assert_not_nil @model.band_image
|
35
35
|
end
|
36
36
|
|
37
37
|
def test__just_uploaded__shouldnt_delete
|
38
38
|
@model.band_image_just_uploaded = true
|
39
39
|
@model.delete_band_image = 'true'
|
40
|
-
|
40
|
+
assert_not_nil(@model.band_image)
|
41
41
|
end
|
42
42
|
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
class MockModel
|
2
|
-
attr_accessor :name
|
3
|
-
attr_accessor :bio
|
2
|
+
attr_accessor :name, :bio, :band_image, :band_image_just_uploaded
|
4
3
|
|
5
|
-
attr_accessor :band_image
|
6
|
-
attr_accessor :band_image_just_uploaded
|
7
4
|
def band_image_just_uploaded?
|
8
5
|
band_image_just_uploaded
|
9
6
|
end
|
@@ -3,6 +3,7 @@ class ActiveScaffold::Bridges::FileColumn < ActiveScaffold::DataStructures::Brid
|
|
3
3
|
if ActiveScaffold::Config::Core.method_defined?(:initialize_with_file_column)
|
4
4
|
raise "We've detected that you have active_scaffold_file_column_bridge installed. This plugin has been moved to core. Please remove active_scaffold_file_column_bridge to prevent any conflicts"
|
5
5
|
end
|
6
|
+
|
6
7
|
require File.join(File.dirname(__FILE__), 'file_column/as_file_column_bridge')
|
7
8
|
require File.join(File.dirname(__FILE__), 'file_column/form_ui')
|
8
9
|
require File.join(File.dirname(__FILE__), 'file_column/list_ui')
|
@@ -4,13 +4,15 @@ module ActiveScaffold::Actions
|
|
4
4
|
base.class_eval do
|
5
5
|
config = active_scaffold_config
|
6
6
|
if config.actions.include?(:nested) && config.deleted_records.nested_link_group
|
7
|
-
config.configure
|
7
|
+
config.configure do
|
8
|
+
nested.add_link :versions, label: config.deleted_records.nested_link_label, action_group: config.deleted_records.nested_link_group
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
14
|
def deleted
|
13
|
-
query = PaperTrail::Version.destroys.where(:
|
15
|
+
query = PaperTrail::Version.destroys.where(item_type: active_scaffold_config.model.name)
|
14
16
|
if nested? && nested.child_association&.belongs_to? && PaperTrail::Version.respond_to?(:where_object)
|
15
17
|
foreign_key = nested.child_association.foreign_key
|
16
18
|
parent_id = nested.parent_id
|
@@ -10,7 +10,7 @@ module ActiveScaffold::Config
|
|
10
10
|
|
11
11
|
# the ActionLink for this action
|
12
12
|
cattr_accessor :link
|
13
|
-
@@link = ActiveScaffold::DataStructures::ActionLink.new(:deleted, :
|
13
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new(:deleted, label: :deleted_records, type: :collection)
|
14
14
|
|
15
15
|
# label for versions nested link
|
16
16
|
cattr_accessor :nested_link_label
|
@@ -5,10 +5,11 @@ module ActiveScaffold
|
|
5
5
|
def initialize(model_id)
|
6
6
|
super
|
7
7
|
return unless model < ::PaperTrail::Model::InstanceMethods
|
8
|
+
|
8
9
|
actions << :deleted_records
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
14
|
-
ActiveScaffold::Config::Core.
|
15
|
+
ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::PaperTrail::PaperTrailBridge
|
@@ -4,13 +4,14 @@ module ActiveScaffold
|
|
4
4
|
def active_scaffold_column_paperclip(record, column, ui_options: column.options)
|
5
5
|
paperclip = record.send(column.name.to_s)
|
6
6
|
return nil unless paperclip.file?
|
7
|
+
|
7
8
|
content =
|
8
9
|
if paperclip.styles.include?(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style)
|
9
|
-
image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style), :
|
10
|
+
image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style), border: 0, alt: nil)
|
10
11
|
else
|
11
12
|
paperclip.original_filename
|
12
13
|
end
|
13
|
-
link_to(content, paperclip.url, :
|
14
|
+
link_to(content, paperclip.url, target: '_blank', rel: 'noopener')
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
@@ -7,15 +7,16 @@ module ActiveScaffold
|
|
7
7
|
|
8
8
|
def self.generate_delete_helper(klass, field)
|
9
9
|
klass.class_eval <<-CODE, __FILE__, __LINE__ + 1 unless klass.method_defined?(:"delete_#{field}=")
|
10
|
-
attr_reader :delete_#{field}
|
11
|
-
|
12
|
-
def delete_#{field}=(value)
|
13
|
-
value = (value == "true") if String === value
|
14
|
-
return unless value
|
15
|
-
|
16
|
-
# passing nil to the file column causes the file
|
17
|
-
|
18
|
-
|
10
|
+
attr_reader :delete_#{field} # attr_reader :delete_file
|
11
|
+
#
|
12
|
+
def delete_#{field}=(value) # def delete_file=(value)
|
13
|
+
value = (value == "true") if String === value # value = (value == "true") if String === value
|
14
|
+
return unless value # return unless value
|
15
|
+
#
|
16
|
+
# passing nil to the file column causes the file # # passing nil to the file column causes the file
|
17
|
+
# to be deleted. Don't delete if we just uploaded a file! # # to be deleted. Don't delete if we just uploaded a file!
|
18
|
+
self.#{field} = nil unless self.#{field}.dirty? # self.file = nil unless self.file.dirty?
|
19
|
+
end # end
|
19
20
|
CODE
|
20
21
|
end
|
21
22
|
end
|
@@ -3,10 +3,11 @@ class ActiveScaffold::Bridges::Paperclip < ActiveScaffold::DataStructures::Bridg
|
|
3
3
|
if ActiveScaffold::Config::Core.method_defined?(:initialize_with_paperclip)
|
4
4
|
raise "We've detected that you have active_scaffold_paperclip_bridge installed. This plugin has been moved to core. Please remove active_scaffold_paperclip_bridge to prevent any conflicts"
|
5
5
|
end
|
6
|
+
|
6
7
|
require File.join(File.dirname(__FILE__), 'paperclip/form_ui')
|
7
8
|
require File.join(File.dirname(__FILE__), 'paperclip/list_ui')
|
8
9
|
require File.join(File.dirname(__FILE__), 'paperclip/paperclip_bridge_helpers')
|
9
10
|
require File.join(File.dirname(__FILE__), 'paperclip/paperclip_bridge')
|
10
|
-
ActiveScaffold::Config::Core.
|
11
|
+
ActiveScaffold::Config::Core.prepend ActiveScaffold::Bridges::Paperclip::PaperclipBridge
|
11
12
|
end
|
12
13
|
end
|
@@ -26,22 +26,20 @@ class ActiveScaffold::Bridges::RecordSelect
|
|
26
26
|
|
27
27
|
def active_scaffold_record_select(record, column, options, value, multiple, ui_options: column.options)
|
28
28
|
unless column.association
|
29
|
-
raise ArgumentError, "record_select can only work against associations (and #{column.name} is not). "\
|
30
|
-
|
29
|
+
raise ArgumentError, "record_select can only work against associations (and #{column.name} is not). " \
|
30
|
+
'A common mistake is to specify the foreign key field (like :user_id), instead of the association (:user).'
|
31
31
|
end
|
32
32
|
klass = column.association.klass(record)
|
33
|
-
return content_tag :span, '', :
|
33
|
+
return content_tag :span, '', class: options[:class] unless klass
|
34
34
|
|
35
35
|
remote_controller = active_scaffold_controller_for(klass).controller_path
|
36
36
|
|
37
|
-
# if the opposite association is a :belongs_to (in that case association in this class must be has_one or
|
38
|
-
# then only show records that have not been associated yet
|
39
|
-
if column.association.has_one? || column.association.has_many?
|
40
|
-
params[column.association.foreign_key] = ''
|
41
|
-
end
|
37
|
+
# if the opposite association is a :belongs_to (in that case association in this class must be has_one or
|
38
|
+
# has_many) then only show records that have not been associated yet
|
39
|
+
params[column.association.foreign_key] = '' if column.association.has_one? || column.association.has_many?
|
42
40
|
|
43
41
|
record_select_options = active_scaffold_input_text_options(options).merge(
|
44
|
-
:
|
42
|
+
controller: remote_controller
|
45
43
|
)
|
46
44
|
record_select_options.merge!(ui_options)
|
47
45
|
|
@@ -57,7 +55,7 @@ class ActiveScaffold::Bridges::RecordSelect
|
|
57
55
|
|
58
56
|
def active_scaffold_record_select_autocomplete(record, column, options, ui_options: column.options)
|
59
57
|
record_select_options = active_scaffold_input_text_options(options).reverse_merge(
|
60
|
-
:
|
58
|
+
controller: active_scaffold_controller_for(record.class).controller_path
|
61
59
|
).merge(ui_options)
|
62
60
|
html = record_select_autocomplete(options[:name], record, record_select_options)
|
63
61
|
html = instance_exec(html, self, &self.class.field_error_proc) if record.errors[column.name].any?
|
@@ -73,8 +71,9 @@ class ActiveScaffold::Bridges::RecordSelect
|
|
73
71
|
|
74
72
|
def field_search_record_select_value(column, value, ui_options: column.options)
|
75
73
|
return if value.blank?
|
74
|
+
|
76
75
|
if ui_options[:multiple]
|
77
|
-
column.association.klass.find value.
|
76
|
+
column.association.klass.find value.compact_blank.collect!(&:to_i)
|
78
77
|
else
|
79
78
|
column.association.klass.find(value.to_i)
|
80
79
|
end
|
@@ -3,9 +3,11 @@ class ActiveScaffold::Bridges::SemanticAttributes
|
|
3
3
|
def initialize(name, active_record_class)
|
4
4
|
super
|
5
5
|
self.required = !active_record_class.semantic_attributes[self.name].predicates.find { |p| p.allow_empty? == false }.nil?
|
6
|
+
ignored_types = %i[required association]
|
6
7
|
active_record_class.semantic_attributes[self.name].predicates.find do |p|
|
7
8
|
sem_type = p.class.to_s.split('::')[1].underscore.to_sym
|
8
|
-
next if
|
9
|
+
next if ignored_types.include?(sem_type)
|
10
|
+
|
9
11
|
@form_ui = sem_type
|
10
12
|
end
|
11
13
|
end
|
@@ -17,16 +17,12 @@ class ActiveScaffold::Bridges::TinyMce
|
|
17
17
|
def active_scaffold_input_text_editor(column, options, ui_options: column.options)
|
18
18
|
options[:class] = "#{options[:class]} mceEditor #{ui_options[:class]}".strip
|
19
19
|
|
20
|
-
settings = tinymce_configuration(ui_options[:tinymce_config] || :default)
|
21
|
-
|
22
|
-
|
23
|
-
options['data-tinymce'] = settings.to_json if ActiveScaffold.js_framework != :prototype
|
20
|
+
settings = tinymce_configuration(ui_options[:tinymce_config] || :default)
|
21
|
+
.options.except('selector').merge(ui_options[:tinymce] || {})
|
22
|
+
options['data-tinymce'] = settings.to_json
|
24
23
|
|
25
24
|
html = []
|
26
25
|
html << send(override_input(:textarea), column, options, ui_options: ui_options)
|
27
|
-
if ActiveScaffold.js_framework == :prototype && (request.xhr? || params[:iframe])
|
28
|
-
html << javascript_tag("tinyMCE.settings = #{settings.to_json}; tinyMCE.execCommand('mceAddEditor', false, '#{options[:id]}');")
|
29
|
-
end
|
30
26
|
safe_join html
|
31
27
|
end
|
32
28
|
|