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
@@ -1,117 +0,0 @@
|
|
1
|
-
|
2
|
-
// TODO Change to dropping the name property off the input element when in example mode
|
3
|
-
TextFieldWithExample = Class.create();
|
4
|
-
TextFieldWithExample.prototype = {
|
5
|
-
initialize: function(inputElementId, defaultText, options) {
|
6
|
-
this.setOptions(options);
|
7
|
-
|
8
|
-
this.input = $(inputElementId);
|
9
|
-
this.name = this.input.name;
|
10
|
-
this.defaultText = defaultText;
|
11
|
-
this.createHiddenInput();
|
12
|
-
|
13
|
-
if (options.focus) this.input.focus();
|
14
|
-
this.checkAndShowExample();
|
15
|
-
if (options.focus) {
|
16
|
-
this.input.selectionStart = 0;
|
17
|
-
this.input.selectionEnd = 0;
|
18
|
-
}
|
19
|
-
|
20
|
-
Event.observe(this.input, "blur", this.onBlur.bindAsEventListener(this));
|
21
|
-
Event.observe(this.input, "focus", this.onFocus.bindAsEventListener(this));
|
22
|
-
Event.observe(this.input, "select", this.onFocus.bindAsEventListener(this));
|
23
|
-
Event.observe(this.input, "keydown", this.onKeyPress.bindAsEventListener(this));
|
24
|
-
Event.observe(this.input, "click", this.onClick.bindAsEventListener(this));
|
25
|
-
},
|
26
|
-
createHiddenInput: function() {
|
27
|
-
this.hiddenInput = document.createElement("input");
|
28
|
-
this.hiddenInput.type = "hidden";
|
29
|
-
this.hiddenInput.value = "";
|
30
|
-
this.input.parentNode.appendChild(this.hiddenInput);
|
31
|
-
},
|
32
|
-
setOptions: function(options) {
|
33
|
-
this.options = { exampleClassName: 'example' };
|
34
|
-
Object.extend(this.options, options || {});
|
35
|
-
},
|
36
|
-
onKeyPress: function(event) {
|
37
|
-
if (!event) var event = window.event;
|
38
|
-
var code = (event.which) ? event.which : event.keyCode
|
39
|
-
if (this.isAlphanumeric(code)) {
|
40
|
-
this.removeExample();
|
41
|
-
}
|
42
|
-
},
|
43
|
-
onBlur: function(event) {
|
44
|
-
this.checkAndShowExample();
|
45
|
-
},
|
46
|
-
onFocus: function(event) {
|
47
|
-
this.removeExample();
|
48
|
-
},
|
49
|
-
onClick: function(event) {
|
50
|
-
this.removeExample();
|
51
|
-
},
|
52
|
-
isAlphanumeric: function(keyCode) {
|
53
|
-
return keyCode >= 40 && keyCode <= 90;
|
54
|
-
},
|
55
|
-
checkAndShowExample: function() {
|
56
|
-
if (this.input.value == '') {
|
57
|
-
this.input.value = this.defaultText;
|
58
|
-
this.input.name = null;
|
59
|
-
this.hiddenInput.name = this.name;
|
60
|
-
Element.addClassName(this.input, this.options.exampleClassName);
|
61
|
-
}
|
62
|
-
},
|
63
|
-
removeExample: function() {
|
64
|
-
if (this.exampleShown()) {
|
65
|
-
this.input.value = '';
|
66
|
-
this.input.name = this.name;
|
67
|
-
this.hiddenInput.name = null;
|
68
|
-
Element.removeClassName(this.input, this.options.exampleClassName);
|
69
|
-
}
|
70
|
-
},
|
71
|
-
exampleShown: function() {
|
72
|
-
return Element.hasClassName(this.input, this.options.exampleClassName);
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
|
-
Form.disable = function(form) {
|
77
|
-
var elements = this.getElements(form);
|
78
|
-
for (var i = 0; i < elements.length; i++) {
|
79
|
-
var element = elements[i];
|
80
|
-
try { element.blur(); } catch (e) {}
|
81
|
-
element.disabled = 'disabled';
|
82
|
-
Element.addClassName(element, 'disabled');
|
83
|
-
}
|
84
|
-
}
|
85
|
-
Form.enable = function(form) {
|
86
|
-
var elements = this.getElements(form);
|
87
|
-
for (var i = 0; i < elements.length; i++) {
|
88
|
-
var element = elements[i];
|
89
|
-
element.disabled = '';
|
90
|
-
Element.removeClassName(element, 'disabled');
|
91
|
-
}
|
92
|
-
}
|
93
|
-
|
94
|
-
DraggableLists = Class.create({
|
95
|
-
initialize: function(list) {
|
96
|
-
list = $(list).addClassName('draggable-list');
|
97
|
-
var list_selected = list.cloneNode(false).addClassName('selected');
|
98
|
-
list_selected.id += '_seleted';
|
99
|
-
list.select('input[type=checkbox]').each(function(item) {
|
100
|
-
var li = item.up('li');
|
101
|
-
li.down('label').htmlFor = null;
|
102
|
-
new Draggable(li, {revert: 'failure', ghosting: true});
|
103
|
-
if (item.checked) list_selected.insert(li.remove());
|
104
|
-
});
|
105
|
-
list.insert({after: list_selected});
|
106
|
-
Droppables.add(list, {hoverclass: 'hover', containment: list_selected.id, onDrop: this.drop_to_list});
|
107
|
-
Droppables.add(list_selected, {hoverclass: 'hover', containment: list.id, onDrop: this.drop_to_list});
|
108
|
-
list.undoPositioned(); // undo positioned to fix dragging from elements with overflow auto
|
109
|
-
list_selected.undoPositioned();
|
110
|
-
},
|
111
|
-
|
112
|
-
drop_to_list: function(draggable, droppable, event) {
|
113
|
-
droppable.insert(draggable.remove());
|
114
|
-
draggable.setStyle({left: '0px', top: '0px'});
|
115
|
-
draggable.down('input').checked = droppable.hasClassName('selected');
|
116
|
-
}
|
117
|
-
});
|
@@ -1,17 +0,0 @@
|
|
1
|
-
var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
|
2
|
-
ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
|
3
|
-
this.adapter.select('textarea.mceEditor').each(function(elem) {
|
4
|
-
tinymce.remove('#'+elem.id);
|
5
|
-
});
|
6
|
-
action_link_close.apply(this);
|
7
|
-
};
|
8
|
-
document.on('submit', 'form.as_form', function() {
|
9
|
-
tinymce.triggerSave();
|
10
|
-
this.select('textarea.mceEditor').each(function(elem) { tinymce.remove('#'+elem.id); });
|
11
|
-
});
|
12
|
-
/* for persistent update forms */
|
13
|
-
document.on('ajax:complete', 'form.as_form', function(event) {
|
14
|
-
this.select('textarea.mceEditor').each(function(elem) {
|
15
|
-
tinyMCE.execCommand('mceAddEditor', false, elem.id);
|
16
|
-
});
|
17
|
-
});
|
@@ -1,8 +0,0 @@
|
|
1
|
-
<p class="error-message message server-error" style="display:none;">
|
2
|
-
<%= as_(:internal_error).html_safe %>
|
3
|
-
<span class="error-500"><%= as_(:error_500).html_safe %></span>
|
4
|
-
<a href="#" class="close" title="<%= as_(:close).html_safe %>"><%= as_(:close).html_safe %></a>
|
5
|
-
</p>
|
6
|
-
<div id="<%= active_scaffold_messages_id -%>" class="action-messages">
|
7
|
-
<%= render 'messages' %>
|
8
|
-
</div>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
<% if render_parent? %>
|
2
|
-
<% if nested_singular_association? %>
|
3
|
-
if (action_link) action_link.close(true);
|
4
|
-
<% elsif params[:parent_sti] && render_parent_action == :row %>
|
5
|
-
ActiveScaffold.create_record_row_from_url(action_link, '<%= url_for(render_parent_options) %>', <%= {insert_at: insert_at}.to_json.html_safe %>);
|
6
|
-
<% else %>
|
7
|
-
ActiveScaffold.reload('<%= url_for render_parent_options %>');
|
8
|
-
<% end %>
|
9
|
-
<% elsif active_scaffold_config.create.refresh_list %>
|
10
|
-
<%= render 'refresh_list', no_history: true %>
|
11
|
-
<% elsif params[:parent_controller].nil? %>
|
12
|
-
<% new_row = render list_record_view, record: @saved_record || @record %>
|
13
|
-
ActiveScaffold.create_record_row(action_link ? action_link.scaffold() : '<%= active_scaffold_id %>', '<%= escape_javascript(new_row) %>', <%= {insert_at: insert_at}.to_json.html_safe %>);
|
14
|
-
<%= render 'update_calculations' %>
|
15
|
-
<% end %>
|
@@ -1,20 +0,0 @@
|
|
1
|
-
<%# nested_id, allows us to remove a nested scaffold programmatically %>
|
2
|
-
<div class="active-scaffold" id="<%= nested_id = element_row_id action: :nested %>">
|
3
|
-
<% if successful? %>
|
4
|
-
<div class="<%= "#{params[:action]}-view" if params[:action] %> <%= "#{nested? ? nested.name : id_from_controller(params[:controller])}-view" %> view">
|
5
|
-
<%= payload -%>
|
6
|
-
</div>
|
7
|
-
<% end %>
|
8
|
-
<%= javascript_tag do %>
|
9
|
-
setTimeout(function() {
|
10
|
-
var action_link = ActiveScaffold.ActionLink.get('<%= nested_id %>');
|
11
|
-
if (action_link) {
|
12
|
-
action_link.update_flash_messages('<%= escape_javascript(render('messages').strip) %>');
|
13
|
-
<% unless successful? %>
|
14
|
-
action_link.close();
|
15
|
-
ActiveScaffold.scroll_to(action_link.scaffold(), ActiveScaffold.config.scroll_on_close == "checkInViewport");
|
16
|
-
<% end %>
|
17
|
-
}
|
18
|
-
}, 10);
|
19
|
-
<% end %>
|
20
|
-
</div>
|
@@ -1,12 +0,0 @@
|
|
1
|
-
<% if always_show_create %>
|
2
|
-
ActiveScaffold.reset_form('<%= form_selector %>');
|
3
|
-
<% elsif params[:dont_close] %>
|
4
|
-
ActiveScaffold.replace('<%= form_selector %>','<%= escape_javascript(render('create_form', xhr: true)) %>');
|
5
|
-
ActiveScaffold.focus_first_element_of_form('<%= form_selector %>');
|
6
|
-
<% else %>
|
7
|
-
if (action_link) action_link.close();
|
8
|
-
<% end %>
|
9
|
-
<% if active_scaffold_config.create.action_after_create %>
|
10
|
-
var link = ActiveScaffold.find_action_link('<%= action_link_id active_scaffold_config.create.action_after_create, @record.id || @saved_record.id %>');
|
11
|
-
if (link) (function() { link.open() })<%= '.defer' if ActiveScaffold.js_framework == :prototype %>();
|
12
|
-
<% end %>
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module ActiveScaffold
|
2
|
-
module Bridges
|
3
|
-
class CalendarDateSelect
|
4
|
-
module CalendarDateSelectBridge
|
5
|
-
def initialize(model_id)
|
6
|
-
initialize_without_calendar_date_select(model_id)
|
7
|
-
|
8
|
-
calendar_date_select_fields = _columns.collect { |c| c.name.to_sym if %i[date datetime].include?(c.type) }.compact
|
9
|
-
# check to see if file column was used on the model
|
10
|
-
return if calendar_date_select_fields.empty?
|
11
|
-
|
12
|
-
# automatically set the forum_ui to a file column
|
13
|
-
calendar_date_select_fields.each { |field| columns[field].form_ui = :calendar_date_select }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# Helpers that assist with the rendering of a Form Column
|
18
|
-
module FormColumnHelpers
|
19
|
-
def active_scaffold_input_calendar_date_select(column, options, ui_options: column.options)
|
20
|
-
options[:class] = "#{options[:class]} text-input".strip
|
21
|
-
calendar_date_select('record', column.name, options.merge(ui_options))
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
module SearchColumnHelpers
|
26
|
-
def active_scaffold_search_calendar_date_select_field(column, options, current_search, name, ui_options: column.options)
|
27
|
-
value =
|
28
|
-
if current_search.is_a? Hash
|
29
|
-
controller.class.condition_value_for_datetime(column, current_search[name], column.column_type == :date ? :to_date : :to_time)
|
30
|
-
else
|
31
|
-
current_search
|
32
|
-
end
|
33
|
-
calendar_date_select(
|
34
|
-
'record', column.name,
|
35
|
-
:name => "#{options[:name]}[#{name}]",
|
36
|
-
:value => (value ? l(value) : nil),
|
37
|
-
:class => 'text-input',
|
38
|
-
:id => "#{options[:id]}_#{name}",
|
39
|
-
:time => column_datetime?(column) ? true : false,
|
40
|
-
:style => ('display: none' if options[:show] == false) # hide only if asked to hide
|
41
|
-
)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
ActionView::Base.class_eval do
|
49
|
-
include ActiveScaffold::Bridges::CalendarDateSelect::FormColumnHelpers
|
50
|
-
alias_method :active_scaffold_search_calendar_date_select, :active_scaffold_search_datetime
|
51
|
-
alias_method :active_scaffold_human_condition_calendar_date_select, :active_scaffold_human_condition_datetime
|
52
|
-
include ActiveScaffold::Bridges::CalendarDateSelect::SearchColumnHelpers
|
53
|
-
end
|
54
|
-
|
55
|
-
ActiveScaffold::Finder::ClassMethods.module_eval do
|
56
|
-
alias_method :condition_for_calendar_date_select_type, :condition_for_datetime
|
57
|
-
end
|
58
|
-
ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::CalendarDateSelect::CalendarDateSelectBridge
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class ActiveScaffold::Bridges::CalendarDateSelect < ActiveScaffold::DataStructures::Bridge
|
2
|
-
def self.install
|
3
|
-
require File.join(File.dirname(__FILE__), 'calendar_date_select/as_cds_bridge.rb')
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.install?
|
7
|
-
super && ActiveScaffold.js_framework == :prototype
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.stylesheets
|
11
|
-
calendar_date_select_stylesheets
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.javascripts
|
15
|
-
calendar_date_select_javascripts
|
16
|
-
end
|
17
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'cow_proxy'
|
2
|
-
|
3
|
-
module CowProxy
|
4
|
-
module ActiveScaffold
|
5
|
-
module DataStructures
|
6
|
-
class Column < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::Column)
|
7
|
-
# readonly and called many times in list action
|
8
|
-
delegate :name, :cache_key, :delegated_association, :association, to: :__getobj__
|
9
|
-
|
10
|
-
def link
|
11
|
-
return @link if defined?(@link)
|
12
|
-
if __getobj__.frozen?
|
13
|
-
link_var = __getobj__.instance_variable_get(:@link)
|
14
|
-
if link_var.is_a?(Proc)
|
15
|
-
@link = link_var.call self
|
16
|
-
return @link
|
17
|
-
end
|
18
|
-
end
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Set < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::Set)
|
24
|
-
protected
|
25
|
-
|
26
|
-
# Copy wrapped values to duplicated wrapped object
|
27
|
-
# @see CowProxy::Base#__copy_on_write__
|
28
|
-
# @return duplicated wrapped object
|
29
|
-
def __copy_on_write__(*)
|
30
|
-
super.tap do
|
31
|
-
new_set = __getobj__.instance_variable_get(:@set).dup
|
32
|
-
__getobj__.instance_variable_set(:@set, new_set)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class ActionColumns < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::ActionColumns)
|
38
|
-
def each_column(options = {})
|
39
|
-
__getobj__.each_column(options.reverse_merge(core_columns: action.core.columns)) do |column|
|
40
|
-
if column.is_a?(::ActiveScaffold::DataStructures::ActionColumns)
|
41
|
-
yield ::CowProxy.wrap(column).tap { |group| group.action = action }
|
42
|
-
else
|
43
|
-
yield column
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class ActionLinks < ::CowProxy::WrapClass(::ActiveScaffold::DataStructures::ActionLinks)
|
50
|
-
def method_missing(name, *args, &block)
|
51
|
-
CowProxy.debug { "method missing #{name} in #{__getobj__.name}" }
|
52
|
-
return super if name.match?(/[!?]$/)
|
53
|
-
subgroup =
|
54
|
-
if _instance_variable_defined?("@#{name}")
|
55
|
-
_instance_variable_get("@#{name}")
|
56
|
-
else
|
57
|
-
__copy_on_write__ if __getobj__.frozen?
|
58
|
-
group = __getobj__.subgroup(name, args.first)
|
59
|
-
if group.frozen?
|
60
|
-
group = __wrap__(group)
|
61
|
-
else
|
62
|
-
CowProxy.debug { "created subgroup #{group.name}" }
|
63
|
-
end
|
64
|
-
_instance_variable_set("@#{name}", group)
|
65
|
-
end
|
66
|
-
yield subgroup if block
|
67
|
-
subgroup
|
68
|
-
end
|
69
|
-
|
70
|
-
def respond_to_missing?(name, *)
|
71
|
-
name !~ /[!?]$/
|
72
|
-
end
|
73
|
-
|
74
|
-
def each(options = {}, &block)
|
75
|
-
super(options) do |item|
|
76
|
-
item = __wrap__(item) || item unless item.is_a?(ActiveScaffold::DataStructures::ActionLinks)
|
77
|
-
if options[:include_set]
|
78
|
-
yield item, __getobj__.instance_variable_get(:@set)
|
79
|
-
else
|
80
|
-
yield item
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
protected
|
86
|
-
|
87
|
-
# Copy wrapped values to duplicated wrapped object
|
88
|
-
# @see CowProxy::Base#__copy_on_write__
|
89
|
-
# @return duplicated wrapped object
|
90
|
-
def __copy_on_write__(*)
|
91
|
-
index = @parent_proxy.instance_variable_get(:@set).index(__getobj__) if @parent_proxy
|
92
|
-
super.tap do
|
93
|
-
CowProxy.debug { "replace #{index} with proxy obj in parent #{@parent_proxy.name}" } if index
|
94
|
-
@parent_proxy.instance_variable_get(:@set)[index] = self if index
|
95
|
-
new_set = __getobj__.instance_variable_get(:@set).dup
|
96
|
-
__getobj__.instance_variable_set(:@set, new_set)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module ActiveScaffoldConfigMock
|
2
|
-
module ClassMethods
|
3
|
-
class Config
|
4
|
-
def active_record?
|
5
|
-
@type == :active_record
|
6
|
-
end
|
7
|
-
|
8
|
-
def mongoid?
|
9
|
-
@type == :mongoid
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(type = :active_record)
|
13
|
-
@type = type
|
14
|
-
end
|
15
|
-
|
16
|
-
def primary_key
|
17
|
-
mongoid? ? '_id' : 'id'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def active_scaffold_config
|
22
|
-
@active_scaffold_config ||= Config.new
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.included(klass)
|
27
|
-
klass.extend ClassMethods
|
28
|
-
end
|
29
|
-
|
30
|
-
def active_scaffold_config
|
31
|
-
self.class.active_scaffold_config
|
32
|
-
end
|
33
|
-
end
|
data/test/bridges/bridge_test.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class BridgeTest < Minitest::Test
|
4
|
-
def setup
|
5
|
-
@const_store = {}
|
6
|
-
end
|
7
|
-
|
8
|
-
def teardown; end
|
9
|
-
|
10
|
-
def test__shouldnt_throw_errors
|
11
|
-
ActiveScaffold::Bridges.run_all
|
12
|
-
end
|
13
|
-
|
14
|
-
def test__cds_bridge
|
15
|
-
with_js_framework :prototype do
|
16
|
-
ConstMocker.mock('CalendarDateSelect') do |cm|
|
17
|
-
cm.remove
|
18
|
-
assert(!bridge_will_be_installed('CalendarDateSelect'))
|
19
|
-
cm.declare
|
20
|
-
assert(bridge_will_be_installed('CalendarDateSelect'))
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def test__file_column_bridge
|
26
|
-
ConstMocker.mock('FileColumn') do |cm|
|
27
|
-
cm.remove
|
28
|
-
assert(!bridge_will_be_installed('FileColumn'))
|
29
|
-
cm.declare
|
30
|
-
assert(bridge_will_be_installed('FileColumn'))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test__paperclip_bridge
|
35
|
-
ConstMocker.mock('Paperclip') do |cm|
|
36
|
-
cm.remove
|
37
|
-
assert(!bridge_will_be_installed('Paperclip'))
|
38
|
-
cm.declare
|
39
|
-
assert(bridge_will_be_installed('Paperclip'))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def test__date_picker_bridge
|
44
|
-
ConstMocker.mock('Jquery') do |jquery|
|
45
|
-
jquery.declare
|
46
|
-
ConstMocker.mock('Rails', jquery.const) do |rails|
|
47
|
-
rails.declare
|
48
|
-
ConstMocker.mock('Ui', jquery.const) do |cm|
|
49
|
-
cm.remove
|
50
|
-
assert(!bridge_will_be_installed('DatePicker'))
|
51
|
-
cm.declare
|
52
|
-
assert(bridge_will_be_installed('DatePicker'))
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
ActiveScaffold.js_framework = nil
|
57
|
-
end
|
58
|
-
|
59
|
-
def test__semantic_attributes_bridge
|
60
|
-
ConstMocker.mock('SemanticAttributes') do |cm|
|
61
|
-
cm.remove
|
62
|
-
assert(!bridge_will_be_installed('SemanticAttributes'))
|
63
|
-
cm.declare
|
64
|
-
assert(bridge_will_be_installed('SemanticAttributes'))
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def test__paper_trail_bridge
|
69
|
-
ConstMocker.mock('PaperTrail') do |cm|
|
70
|
-
cm.remove
|
71
|
-
assert(!bridge_will_be_installed('PaperTrail'))
|
72
|
-
cm.declare
|
73
|
-
assert(bridge_will_be_installed('PaperTrail'))
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
protected
|
78
|
-
|
79
|
-
def find_bridge(name)
|
80
|
-
ActiveScaffold::Bridges[name.to_s.underscore.to_sym]
|
81
|
-
end
|
82
|
-
|
83
|
-
def bridge_will_be_installed(name)
|
84
|
-
assert bridge = find_bridge(name), "No bridge found matching #{name}"
|
85
|
-
|
86
|
-
bridge.install?
|
87
|
-
end
|
88
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'active_scaffold_config_mock'
|
3
|
-
require File.expand_path('../../lib/active_scaffold/bridges/date_picker/ext', __dir__)
|
4
|
-
|
5
|
-
class DatePickerTest < ActionView::TestCase
|
6
|
-
include ActiveScaffold::Helpers::ViewHelpers
|
7
|
-
include ActiveScaffold::Bridges::DatePicker::Helper::FormColumnHelpers
|
8
|
-
include ActiveScaffold::Bridges::DatePicker::Helper::DatepickerColumnHelpers
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@controller.class.class_eval do
|
12
|
-
include ActiveScaffoldConfigMock
|
13
|
-
include ActiveScaffold::Finder
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_set_form_ui
|
18
|
-
config = ActiveScaffold::Config::Core.new(:company)
|
19
|
-
assert_nil config.columns[:name].form_ui, 'form_ui for name'
|
20
|
-
assert_equal :date_picker, config.columns[:date].form_ui, 'form_ui for date'
|
21
|
-
assert_equal :datetime_picker, config.columns[:datetime].form_ui, 'form_ui for datetime'
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_form_ui
|
25
|
-
config = ActiveScaffold::Config::Core.new(:company)
|
26
|
-
@record = Company.new
|
27
|
-
opts = {object: @record}
|
28
|
-
assert active_scaffold_input_date_picker(config.columns[:date], opts.merge(id: 'record_date', name: 'record[date]'))
|
29
|
-
assert active_scaffold_input_date_picker(config.columns[:datetime], opts.merge(id: 'record_date', name: 'record[datetime]'))
|
30
|
-
end
|
31
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
ActiveScaffold::Bridges::PaperTrail.prepare
|
3
|
-
|
4
|
-
class PaperTrailTest < ActionController::TestCase
|
5
|
-
tests AddressesController
|
6
|
-
|
7
|
-
def test_deleted_route
|
8
|
-
with_routing do |map|
|
9
|
-
map.draw do
|
10
|
-
concern :active_scaffold, ActiveScaffold::Routing::Basic.new
|
11
|
-
resources :addresses, concerns: :active_scaffold
|
12
|
-
end
|
13
|
-
assert_routing '/addresses/deleted', :controller => 'addresses', :action => 'deleted'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge', __dir__)
|
3
|
-
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers', __dir__)
|
4
|
-
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/form_ui', __dir__)
|
5
|
-
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/list_ui', __dir__)
|
6
|
-
|
7
|
-
class PaperclipCore < ActiveScaffold::Config::Core
|
8
|
-
include ActiveScaffold::Bridges::Paperclip::PaperclipBridge
|
9
|
-
end
|
10
|
-
|
11
|
-
class PaperclipTest < ActionView::TestCase
|
12
|
-
include ActiveScaffold::Helpers::ViewHelpers
|
13
|
-
|
14
|
-
def test_initialization_without_paperclip
|
15
|
-
Company.expects(:attachment_definitions)
|
16
|
-
config = PaperclipCore.new(:company)
|
17
|
-
refute config.create.multipart?
|
18
|
-
refute config.update.multipart?
|
19
|
-
refute(config.columns.any? { |column| column.form_ui == :paperclip })
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_initialization
|
23
|
-
config = PaperclipCore.new(:company)
|
24
|
-
assert config.create.multipart?
|
25
|
-
assert config.update.multipart?
|
26
|
-
assert_equal :paperclip, config.columns[:logo].form_ui
|
27
|
-
assert_equal [:delete_logo], config.columns[:logo].params.to_a
|
28
|
-
%w[logo_file_name logo_file_size logo_updated_at logo_content_type].each do |attr|
|
29
|
-
refute config.columns._inheritable.include?(attr.to_sym)
|
30
|
-
end
|
31
|
-
assert Company.method_defined?(:delete_logo)
|
32
|
-
assert Company.method_defined?(:'delete_logo=')
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_delete
|
36
|
-
PaperclipCore.new(:company)
|
37
|
-
company = Company.new
|
38
|
-
company.expects(:logo=).never
|
39
|
-
company.delete_logo = 'false'
|
40
|
-
|
41
|
-
company.expects(:logo).returns(stub(:dirty? => false))
|
42
|
-
company.expects(:logo=)
|
43
|
-
company.delete_logo = 'true' # rubocop:disable Lint/UselessSetterCall
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_list_ui
|
47
|
-
config = PaperclipCore.new(:company)
|
48
|
-
company = Company.new
|
49
|
-
|
50
|
-
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
|
51
|
-
assert_dom_equal '<a href="/system/file" target="_blank">file</a>', active_scaffold_column_paperclip(company, config.columns[:logo])
|
52
|
-
|
53
|
-
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => {:thumbnail => '40x40'}))
|
54
|
-
assert_dom_equal '<a href="/system/file" target="_blank"><img src="/system/file" border="0"/></a>', active_scaffold_column_paperclip(company, config.columns[:logo])
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_form_ui
|
58
|
-
with_js_framework :jquery do
|
59
|
-
config = PaperclipCore.new(:company)
|
60
|
-
@record = Company.new
|
61
|
-
opts = {name: 'record[logo]', id: 'record_logo', object: @record}
|
62
|
-
|
63
|
-
@record.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
|
64
|
-
click_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
|
65
|
-
change_js = "jQuery(this).parents('div.paperclip_controls').find('input.remove_file').val('false'); return false;"
|
66
|
-
@document = Nokogiri::HTML::Document.parse(active_scaffold_input_paperclip(config.columns[:logo], opts))
|
67
|
-
assert_select 'div.paperclip_controls input[type=file]' do |match|
|
68
|
-
assert_equal match[0]['onchange'], change_js
|
69
|
-
end
|
70
|
-
assert_select 'div.paperclip_controls a[href="#"][onclick]' do |match|
|
71
|
-
assert_equal match[0]['onclick'], click_js
|
72
|
-
end
|
73
|
-
assert_select 'div.paperclip_controls input.remove_file[type=hidden][value=false]'
|
74
|
-
|
75
|
-
@record.stubs(:logo).returns(stub(:file? => false))
|
76
|
-
assert_dom_equal '<input name="record[logo]" class="text-input" autocomplete="off" type="file" id="record_logo" />', active_scaffold_input_paperclip(config.columns[:logo], opts)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
protected
|
81
|
-
|
82
|
-
def document_root_element
|
83
|
-
@document.root
|
84
|
-
end
|
85
|
-
end
|