active_scaffold 3.0.0
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.
- data/.autotest +27 -0
- data/CHANGELOG +152 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/README +51 -0
- data/Rakefile +24 -0
- data/active_scaffold.gemspec +24 -0
- data/environment.rb +22 -0
- data/frontends/default/images/add.gif +0 -0
- data/frontends/default/images/arrow_down.gif +0 -0
- data/frontends/default/images/arrow_up.gif +0 -0
- data/frontends/default/images/close.gif +0 -0
- data/frontends/default/images/cross.png +0 -0
- data/frontends/default/images/indicator-small.gif +0 -0
- data/frontends/default/images/indicator.gif +0 -0
- data/frontends/default/images/magnifier.png +0 -0
- data/frontends/default/javascripts/jquery/active_scaffold.js +957 -0
- data/frontends/default/javascripts/jquery/jquery.editinplace.js +726 -0
- data/frontends/default/javascripts/prototype/active_scaffold.js +954 -0
- data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
- data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
- data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
- data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
- data/frontends/default/stylesheets/stylesheet.css +858 -0
- data/frontends/default/views/_add_existing_form.html.erb +30 -0
- data/frontends/default/views/_base_form.html.erb +41 -0
- data/frontends/default/views/_create_form.html.erb +6 -0
- data/frontends/default/views/_create_form_on_list.html.erb +5 -0
- data/frontends/default/views/_field_search.html.erb +32 -0
- data/frontends/default/views/_form.html.erb +24 -0
- data/frontends/default/views/_form_association.html.erb +14 -0
- data/frontends/default/views/_form_association_footer.html.erb +40 -0
- data/frontends/default/views/_form_attribute.html.erb +15 -0
- data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
- data/frontends/default/views/_form_messages.html.erb +5 -0
- data/frontends/default/views/_horizontal_subform.html.erb +19 -0
- data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
- data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
- data/frontends/default/views/_human_conditions.html.erb +1 -0
- data/frontends/default/views/_list.html.erb +18 -0
- data/frontends/default/views/_list_actions.html.erb +16 -0
- data/frontends/default/views/_list_calculations.html.erb +16 -0
- data/frontends/default/views/_list_column_headings.html.erb +12 -0
- data/frontends/default/views/_list_header.html.erb +12 -0
- data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
- data/frontends/default/views/_list_messages.html.erb +32 -0
- data/frontends/default/views/_list_pagination.html.erb +11 -0
- data/frontends/default/views/_list_pagination_links.html.erb +9 -0
- data/frontends/default/views/_list_record.html.erb +14 -0
- data/frontends/default/views/_list_record_columns.html.erb +8 -0
- data/frontends/default/views/_list_with_header.html.erb +32 -0
- data/frontends/default/views/_messages.html.erb +10 -0
- data/frontends/default/views/_render_field.js.rjs +13 -0
- data/frontends/default/views/_row.html.erb +12 -0
- data/frontends/default/views/_search.html.erb +34 -0
- data/frontends/default/views/_search_attribute.html.erb +10 -0
- data/frontends/default/views/_show.html.erb +8 -0
- data/frontends/default/views/_show_columns.html.erb +12 -0
- data/frontends/default/views/_update_actions.html.erb +9 -0
- data/frontends/default/views/_update_form.html.erb +5 -0
- data/frontends/default/views/_vertical_subform.html.erb +12 -0
- data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
- data/frontends/default/views/add_existing.js.rjs +17 -0
- data/frontends/default/views/add_existing_form.html.erb +5 -0
- data/frontends/default/views/create.html.erb +5 -0
- data/frontends/default/views/delete.html.erb +13 -0
- data/frontends/default/views/destroy.js.rjs +5 -0
- data/frontends/default/views/edit_associated.js.rjs +11 -0
- data/frontends/default/views/field_search.html.erb +5 -0
- data/frontends/default/views/form_messages.js.rjs +1 -0
- data/frontends/default/views/list.html.erb +1 -0
- data/frontends/default/views/list.js.rjs +1 -0
- data/frontends/default/views/on_action_update.js.rjs +8 -0
- data/frontends/default/views/on_create.js.rjs +24 -0
- data/frontends/default/views/on_update.js.rjs +15 -0
- data/frontends/default/views/search.html.erb +5 -0
- data/frontends/default/views/show.html.erb +5 -0
- data/frontends/default/views/update.html.erb +8 -0
- data/frontends/default/views/update_column.js.rjs +13 -0
- data/frontends/default/views/update_row.js.rjs +1 -0
- data/init.rb +1 -0
- data/install_assets.rb +44 -0
- data/lib/active_record_permissions.rb +134 -0
- data/lib/active_scaffold.rb +279 -0
- data/lib/active_scaffold/actions/common_search.rb +22 -0
- data/lib/active_scaffold/actions/core.rb +150 -0
- data/lib/active_scaffold/actions/create.rb +152 -0
- data/lib/active_scaffold/actions/delete.rb +72 -0
- data/lib/active_scaffold/actions/field_search.rb +82 -0
- data/lib/active_scaffold/actions/list.rb +128 -0
- data/lib/active_scaffold/actions/mark.rb +50 -0
- data/lib/active_scaffold/actions/nested.rb +241 -0
- data/lib/active_scaffold/actions/search.rb +47 -0
- data/lib/active_scaffold/actions/show.rb +54 -0
- data/lib/active_scaffold/actions/subform.rb +17 -0
- data/lib/active_scaffold/actions/update.rb +134 -0
- data/lib/active_scaffold/attribute_params.rb +207 -0
- data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +38 -0
- data/lib/active_scaffold/bridges/bridge.rb +52 -0
- data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
- data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +79 -0
- data/lib/active_scaffold/bridges/carrierwave/bridge.rb +7 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +38 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +26 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +35 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
- data/lib/active_scaffold/bridges/date_picker/bridge.rb +22 -0
- data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
- data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
- data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
- data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
- data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
- data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
- data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
- data/lib/active_scaffold/bridges/paperclip/bridge.rb +12 -0
- data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
- data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
- data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
- data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
- data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +187 -0
- data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +45 -0
- data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
- data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
- data/lib/active_scaffold/config/base.rb +54 -0
- data/lib/active_scaffold/config/core.rb +229 -0
- data/lib/active_scaffold/config/create.rb +43 -0
- data/lib/active_scaffold/config/delete.rb +25 -0
- data/lib/active_scaffold/config/field_search.rb +74 -0
- data/lib/active_scaffold/config/form.rb +46 -0
- data/lib/active_scaffold/config/list.rb +174 -0
- data/lib/active_scaffold/config/mark.rb +22 -0
- data/lib/active_scaffold/config/nested.rb +43 -0
- data/lib/active_scaffold/config/search.rb +68 -0
- data/lib/active_scaffold/config/show.rb +34 -0
- data/lib/active_scaffold/config/subform.rb +35 -0
- data/lib/active_scaffold/config/update.rb +38 -0
- data/lib/active_scaffold/configurable.rb +29 -0
- data/lib/active_scaffold/constraints.rb +179 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +133 -0
- data/lib/active_scaffold/data_structures/action_link.rb +162 -0
- data/lib/active_scaffold/data_structures/action_links.rb +59 -0
- data/lib/active_scaffold/data_structures/actions.rb +45 -0
- data/lib/active_scaffold/data_structures/column.rb +348 -0
- data/lib/active_scaffold/data_structures/columns.rb +75 -0
- data/lib/active_scaffold/data_structures/error_message.rb +24 -0
- data/lib/active_scaffold/data_structures/nested_info.rb +108 -0
- data/lib/active_scaffold/data_structures/set.rb +62 -0
- data/lib/active_scaffold/data_structures/sorting.rb +168 -0
- data/lib/active_scaffold/finder.rb +333 -0
- data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
- data/lib/active_scaffold/helpers/controller_helpers.rb +40 -0
- data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
- data/lib/active_scaffold/helpers/form_column_helpers.rb +343 -0
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
- data/lib/active_scaffold/helpers/id_helpers.rb +131 -0
- data/lib/active_scaffold/helpers/list_column_helpers.rb +363 -0
- data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
- data/lib/active_scaffold/helpers/search_column_helpers.rb +238 -0
- data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +315 -0
- data/lib/active_scaffold/locale/de.rb +113 -0
- data/lib/active_scaffold/locale/en.rb +118 -0
- data/lib/active_scaffold/locale/es.yml +112 -0
- data/lib/active_scaffold/locale/fr.rb +113 -0
- data/lib/active_scaffold/locale/hu.yml +63 -0
- data/lib/active_scaffold/locale/ja.yml +64 -0
- data/lib/active_scaffold/locale/ru.yml +62 -0
- data/lib/active_scaffold/marked_model.rb +38 -0
- data/lib/dhtml_confirm.rb +54 -0
- data/lib/extensions/action_controller_rendering.rb +20 -0
- data/lib/extensions/action_view_rendering.rb +113 -0
- data/lib/extensions/action_view_resolver.rb +7 -0
- data/lib/extensions/active_record_offset.rb +12 -0
- data/lib/extensions/array.rb +7 -0
- data/lib/extensions/localize.rb +10 -0
- data/lib/extensions/name_option_for_datetime.rb +12 -0
- data/lib/extensions/nil_id_in_url_params.rb +7 -0
- data/lib/extensions/paginator_extensions.rb +26 -0
- data/lib/extensions/reverse_associations.rb +62 -0
- data/lib/extensions/routing_mapper.rb +34 -0
- data/lib/extensions/to_label.rb +8 -0
- data/lib/extensions/unsaved_associated.rb +61 -0
- data/lib/extensions/unsaved_record.rb +20 -0
- data/lib/extensions/usa_state.rb +46 -0
- data/lib/generators/active_scaffold/USAGE +29 -0
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
- data/lib/generators/active_scaffold_controller/USAGE +19 -0
- data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +28 -0
- data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
- data/lib/generators/active_scaffold_setup/USAGE +10 -0
- data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +53 -0
- data/lib/paginator.rb +136 -0
- data/lib/responds_to_parent.rb +70 -0
- data/public/blank.html +33 -0
- data/shoulda_macros/macros.rb +136 -0
- data/test/bridges/bridge_test.rb +47 -0
- data/test/config/base_test.rb +15 -0
- data/test/config/create_test.rb +55 -0
- data/test/config/list_test.rb +74 -0
- data/test/config/show_test.rb +43 -0
- data/test/config/update_test.rb +17 -0
- data/test/const_mocker.rb +36 -0
- data/test/data_structures/action_columns_test.rb +113 -0
- data/test/data_structures/action_link_test.rb +78 -0
- data/test/data_structures/action_links_test.rb +78 -0
- data/test/data_structures/actions_test.rb +25 -0
- data/test/data_structures/association_column_test.rb +42 -0
- data/test/data_structures/column_test.rb +185 -0
- data/test/data_structures/columns_test.rb +69 -0
- data/test/data_structures/error_message_test.rb +28 -0
- data/test/data_structures/set_test.rb +86 -0
- data/test/data_structures/sorting_test.rb +126 -0
- data/test/data_structures/standard_column_test.rb +24 -0
- data/test/data_structures/virtual_column_test.rb +23 -0
- data/test/extensions/active_record_test.rb +45 -0
- data/test/extensions/array_test.rb +12 -0
- data/test/helpers/form_column_helpers_test.rb +31 -0
- data/test/helpers/list_column_helpers_test.rb +31 -0
- data/test/helpers/pagination_helpers_test.rb +55 -0
- data/test/misc/active_record_permissions_test.rb +154 -0
- data/test/misc/attribute_params_test.rb +110 -0
- data/test/misc/configurable_test.rb +96 -0
- data/test/misc/constraints_test.rb +193 -0
- data/test/misc/finder_test.rb +93 -0
- data/test/misc/lang_test.rb +12 -0
- data/test/mock_app/.gitignore +2 -0
- data/test/mock_app/app/controllers/application_controller.rb +10 -0
- data/test/mock_app/app/helpers/application_helper.rb +3 -0
- data/test/mock_app/config/boot.rb +110 -0
- data/test/mock_app/config/database.yml +16 -0
- data/test/mock_app/config/environment.rb +43 -0
- data/test/mock_app/config/environments/development.rb +17 -0
- data/test/mock_app/config/environments/production.rb +28 -0
- data/test/mock_app/config/environments/test.rb +28 -0
- data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/mock_app/config/initializers/inflections.rb +10 -0
- data/test/mock_app/config/initializers/mime_types.rb +5 -0
- data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
- data/test/mock_app/config/initializers/session_store.rb +15 -0
- data/test/mock_app/config/locales/en.yml +5 -0
- data/test/mock_app/config/routes.rb +43 -0
- data/test/mock_app/db/test.sqlite3 +1 -0
- data/test/mock_app/public/blank.html +33 -0
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +839 -0
- data/test/model_stub.rb +55 -0
- data/test/run_all.rb +8 -0
- data/test/test_helper.rb +39 -0
- data/uninstall.rb +13 -0
- metadata +478 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Form < Base
|
|
3
|
+
def initialize(core_config)
|
|
4
|
+
@core = core_config
|
|
5
|
+
|
|
6
|
+
# start with the ActionLink defined globally
|
|
7
|
+
@link = self.class.link.clone
|
|
8
|
+
|
|
9
|
+
# no global setting here because multipart should only be set for specific forms
|
|
10
|
+
@multipart = false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# global level configuration
|
|
14
|
+
# --------------------------
|
|
15
|
+
|
|
16
|
+
# instance-level configuration
|
|
17
|
+
# ----------------------------
|
|
18
|
+
|
|
19
|
+
# the ActionLink for this action
|
|
20
|
+
attr_accessor :link
|
|
21
|
+
|
|
22
|
+
# the label for this Form action. used for the header.
|
|
23
|
+
attr_writer :label
|
|
24
|
+
def label
|
|
25
|
+
as_(@label)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# provides access to the list of columns specifically meant for the Form to use
|
|
29
|
+
def columns
|
|
30
|
+
unless @columns # lazy evaluation
|
|
31
|
+
self.columns = @core.columns._inheritable
|
|
32
|
+
self.columns.exclude :created_on, :created_at, :updated_on, :updated_at, :marked
|
|
33
|
+
self.columns.exclude *@core.columns.collect{|c| c.name if c.polymorphic_association?}.compact
|
|
34
|
+
end
|
|
35
|
+
@columns
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
public :columns=
|
|
39
|
+
|
|
40
|
+
# whether the form should be multipart
|
|
41
|
+
attr_writer :multipart
|
|
42
|
+
def multipart?
|
|
43
|
+
@multipart ? true : false
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class List < Base
|
|
3
|
+
self.crud_type = :read
|
|
4
|
+
|
|
5
|
+
def initialize(core_config)
|
|
6
|
+
@core = core_config
|
|
7
|
+
|
|
8
|
+
# inherit from global scope
|
|
9
|
+
# full configuration path is: defaults => global table => local table
|
|
10
|
+
@per_page = self.class.per_page
|
|
11
|
+
@page_links_window = self.class.page_links_window
|
|
12
|
+
|
|
13
|
+
# originates here
|
|
14
|
+
@sorting = ActiveScaffold::DataStructures::Sorting.new(@core.columns)
|
|
15
|
+
@sorting.set_default_sorting(@core.model)
|
|
16
|
+
|
|
17
|
+
# inherit from global scope
|
|
18
|
+
@empty_field_text = self.class.empty_field_text
|
|
19
|
+
@pagination = self.class.pagination
|
|
20
|
+
@show_search_reset = true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# global level configuration
|
|
24
|
+
# --------------------------
|
|
25
|
+
# how many records to show per page
|
|
26
|
+
cattr_accessor :per_page
|
|
27
|
+
@@per_page = 15
|
|
28
|
+
|
|
29
|
+
# how many page links around current page to show
|
|
30
|
+
cattr_accessor :page_links_window
|
|
31
|
+
@@page_links_window = 2
|
|
32
|
+
|
|
33
|
+
# what string to use when a field is empty
|
|
34
|
+
cattr_accessor :empty_field_text
|
|
35
|
+
@@empty_field_text = '-'
|
|
36
|
+
|
|
37
|
+
# What kind of pagination to use:
|
|
38
|
+
# * true: The usual pagination
|
|
39
|
+
# * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
|
|
40
|
+
# * false: Disable pagination
|
|
41
|
+
cattr_accessor :pagination
|
|
42
|
+
@@pagination = true
|
|
43
|
+
|
|
44
|
+
# instance-level configuration
|
|
45
|
+
# ----------------------------
|
|
46
|
+
|
|
47
|
+
# provides access to the list of columns specifically meant for the Table to use
|
|
48
|
+
def columns
|
|
49
|
+
self.columns = @core.columns._inheritable unless @columns # lazy evaluation
|
|
50
|
+
@columns
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
public :columns=
|
|
54
|
+
|
|
55
|
+
# how many rows to show at once
|
|
56
|
+
attr_accessor :per_page
|
|
57
|
+
|
|
58
|
+
# how many page links around current page to show
|
|
59
|
+
attr_accessor :page_links_window
|
|
60
|
+
|
|
61
|
+
# What kind of pagination to use:
|
|
62
|
+
# * true: The usual pagination
|
|
63
|
+
# * :infinite: Treat the source as having an infinite number of pages (i.e. don't count the records; useful for large tables where counting is slow and we don't really care anyway)
|
|
64
|
+
# * false: Disable pagination
|
|
65
|
+
attr_accessor :pagination
|
|
66
|
+
|
|
67
|
+
# what string to use when a field is empty
|
|
68
|
+
attr_accessor :empty_field_text
|
|
69
|
+
|
|
70
|
+
# show a link to reset the search next to filtered message
|
|
71
|
+
attr_accessor :show_search_reset
|
|
72
|
+
|
|
73
|
+
# the default sorting. should be an array of hashes of {column_name => direction}, e.g. [{:a => 'desc'}, {:b => 'asc'}]. to just sort on one column, you can simply provide a hash, though, e.g. {:a => 'desc'}.
|
|
74
|
+
def sorting=(val)
|
|
75
|
+
val = [val] if val.is_a? Hash
|
|
76
|
+
sorting.clear
|
|
77
|
+
val.each { |clause| sorting.add *Array(clause).first }
|
|
78
|
+
end
|
|
79
|
+
def sorting
|
|
80
|
+
@sorting ||= ActiveScaffold::DataStructures::Sorting.new(@core.columns)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# overwrite the includes used for the count sql query
|
|
84
|
+
attr_accessor :count_includes
|
|
85
|
+
|
|
86
|
+
# the label for this List action. used for the header.
|
|
87
|
+
attr_writer :label
|
|
88
|
+
def label
|
|
89
|
+
@label ? as_(@label, :count => 2) : @core.label(:count => 2)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
attr_writer :no_entries_message
|
|
93
|
+
def no_entries_message
|
|
94
|
+
@no_entries_message ? @no_entries_message : :no_entries
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
attr_writer :filtered_message
|
|
98
|
+
def filtered_message
|
|
99
|
+
@filtered_message ? @filtered_message : :filtered
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
attr_writer :always_show_search
|
|
103
|
+
def always_show_search
|
|
104
|
+
@always_show_search && !search_partial.blank?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def search_partial
|
|
108
|
+
return "search" if @core.actions.include?(:search)
|
|
109
|
+
return "field_search" if @core.actions.include?(:field_search)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# always show create
|
|
113
|
+
attr_writer :always_show_create
|
|
114
|
+
def always_show_create
|
|
115
|
+
@always_show_create && @core.actions.include?(:create)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# might be set to open nested_link automatically in view
|
|
119
|
+
# conf.nested.add_link(:players)
|
|
120
|
+
# conf.list.nested_auto_open = {:players => 2}
|
|
121
|
+
# will open nested players view if there are 2 or less records in parent
|
|
122
|
+
attr_accessor :nested_auto_open
|
|
123
|
+
|
|
124
|
+
class UserSettings < UserSettings
|
|
125
|
+
# This label has alread been localized.
|
|
126
|
+
def label
|
|
127
|
+
@session[:label] ? @session[:label] : @conf.label
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def per_page
|
|
131
|
+
@session['per_page'] = @params['limit'].to_i if @params.has_key? 'limit'
|
|
132
|
+
@session['per_page'] || @conf.per_page
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def page
|
|
136
|
+
@session['page'] = @params['page'] if @params.has_key? 'page'
|
|
137
|
+
@session['page'] || 1
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def page=(value = nil)
|
|
141
|
+
@session['page'] = value
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
attr_reader :nested_default_sorting
|
|
145
|
+
|
|
146
|
+
def nested_default_sorting=(options)
|
|
147
|
+
@nested_default_sorting ||= @conf.sorting.clone
|
|
148
|
+
@nested_default_sorting.set_nested_sorting(options[:table_name], options[:default_sorting])
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def default_sorting
|
|
152
|
+
nested_default_sorting.nil? ? @conf.sorting : nested_default_sorting
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def sorting
|
|
156
|
+
# we want to store as little as possible in the session, but we want to return a Sorting data structure. so we recreate it each page load based on session data.
|
|
157
|
+
@session['sort'] = [@params['sort'], @params['sort_direction']] if @params['sort'] and @params['sort_direction']
|
|
158
|
+
@session['sort'] = nil if @params['sort_direction'] == 'reset'
|
|
159
|
+
|
|
160
|
+
if @session['sort']
|
|
161
|
+
sorting = @conf.sorting.clone
|
|
162
|
+
sorting.set(*@session['sort'])
|
|
163
|
+
return sorting
|
|
164
|
+
else
|
|
165
|
+
return default_sorting
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def count_includes
|
|
170
|
+
@conf.count_includes
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Mark < Base
|
|
3
|
+
self.crud_type = :read
|
|
4
|
+
|
|
5
|
+
def initialize(core_config)
|
|
6
|
+
@core = core_config
|
|
7
|
+
@core.model.send(:include, ActiveScaffold::MarkedModel) unless @core.model.ancestors.include?(ActiveScaffold::MarkedModel)
|
|
8
|
+
add_mark_column
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def add_mark_column
|
|
14
|
+
@core.columns.add :marked
|
|
15
|
+
@core.columns[:marked].label = 'M'
|
|
16
|
+
@core.columns[:marked].form_ui = :checkbox
|
|
17
|
+
@core.columns[:marked].inplace_edit = true
|
|
18
|
+
@core.columns[:marked].sort = false
|
|
19
|
+
@core.list.columns = [:marked] + @core.list.columns.names unless @core.list.columns.include? :marked
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Nested < Base
|
|
3
|
+
self.crud_type = :read
|
|
4
|
+
|
|
5
|
+
def initialize(core_config)
|
|
6
|
+
@core = core_config
|
|
7
|
+
self.shallow_delete = self.class.shallow_delete
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# global level configuration
|
|
11
|
+
# --------------------------
|
|
12
|
+
cattr_accessor :shallow_delete
|
|
13
|
+
@@shallow_delete = true
|
|
14
|
+
|
|
15
|
+
# instance-level configuration
|
|
16
|
+
# ----------------------------
|
|
17
|
+
attr_accessor :shallow_delete
|
|
18
|
+
|
|
19
|
+
# Add a nested ActionLink
|
|
20
|
+
def add_link(attribute, options = {})
|
|
21
|
+
column = @core.columns[attribute.to_sym]
|
|
22
|
+
unless column.nil? || column.association.nil?
|
|
23
|
+
options.reverse_merge! :security_method => :nested_authorized?, :label => column.association.klass.model_name.human({:count => 2, :default => column.association.klass.name.pluralize})
|
|
24
|
+
action_link = @core.link_for_association(column, options)
|
|
25
|
+
@core.action_links.add(action_link) unless action_link.nil?
|
|
26
|
+
else
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def add_scoped_link(named_scope, options = {})
|
|
32
|
+
action_link = @core.link_for_association_as_scope(named_scope.to_sym, options)
|
|
33
|
+
@core.action_links.add(action_link) unless action_link.nil?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# the label for this Nested action. used for the header.
|
|
37
|
+
attr_writer :label
|
|
38
|
+
def label
|
|
39
|
+
@label ? as_(@label) : as_(:add_existing_model, :model => @core.label)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Search < Base
|
|
3
|
+
self.crud_type = :read
|
|
4
|
+
|
|
5
|
+
def initialize(core_config)
|
|
6
|
+
@core = core_config
|
|
7
|
+
|
|
8
|
+
@text_search = self.class.text_search
|
|
9
|
+
@live = self.class.live?
|
|
10
|
+
|
|
11
|
+
# start with the ActionLink defined globally
|
|
12
|
+
@link = self.class.link.clone
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# global level configuration
|
|
17
|
+
# --------------------------
|
|
18
|
+
# the ActionLink for this action
|
|
19
|
+
cattr_accessor :link
|
|
20
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('show_search', :label => :search, :type => :collection, :security_method => :search_authorized?, :ignore_method => :search_ignore?)
|
|
21
|
+
|
|
22
|
+
# A flag for how the search should do full-text searching in the database:
|
|
23
|
+
# * :full: LIKE %?%
|
|
24
|
+
# * :start: LIKE ?%
|
|
25
|
+
# * :end: LIKE %?
|
|
26
|
+
# * false: LIKE ?
|
|
27
|
+
# Default is :full
|
|
28
|
+
cattr_accessor :text_search
|
|
29
|
+
@@text_search = :full
|
|
30
|
+
|
|
31
|
+
# whether submits the search as you type
|
|
32
|
+
cattr_writer :live
|
|
33
|
+
def self.live?
|
|
34
|
+
@@live
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# instance-level configuration
|
|
38
|
+
# ----------------------------
|
|
39
|
+
|
|
40
|
+
# provides access to the list of columns specifically meant for the Search to use
|
|
41
|
+
def columns
|
|
42
|
+
# we want to delay initializing to the @core.columns set for as long as possible. Too soon and .search_sql will not be available to .searchable?
|
|
43
|
+
unless @columns
|
|
44
|
+
self.columns = @core.columns.collect{|c| c.name if c.searchable? and c.column and c.column.text?}.compact
|
|
45
|
+
end
|
|
46
|
+
@columns
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
public :columns=
|
|
50
|
+
|
|
51
|
+
# A flag for how the search should do full-text searching in the database:
|
|
52
|
+
# * :full: LIKE %?%
|
|
53
|
+
# * :start: LIKE ?%
|
|
54
|
+
# * :end: LIKE %?
|
|
55
|
+
# * false: LIKE ?
|
|
56
|
+
# Default is :full
|
|
57
|
+
attr_accessor :text_search
|
|
58
|
+
|
|
59
|
+
# the ActionLink for this action
|
|
60
|
+
attr_accessor :link
|
|
61
|
+
|
|
62
|
+
# whether submits the search as you type
|
|
63
|
+
attr_writer :live
|
|
64
|
+
def live?
|
|
65
|
+
@live
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Show < Base
|
|
3
|
+
self.crud_type = :read
|
|
4
|
+
|
|
5
|
+
def initialize(core_config)
|
|
6
|
+
@core = core_config
|
|
7
|
+
# start with the ActionLink defined globally
|
|
8
|
+
@link = self.class.link.clone
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# global level configuration
|
|
12
|
+
# --------------------------
|
|
13
|
+
cattr_accessor :link
|
|
14
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('show', :label => :show, :type => :member, :security_method => :show_authorized?)
|
|
15
|
+
# instance-level configuration
|
|
16
|
+
# ----------------------------
|
|
17
|
+
|
|
18
|
+
# the ActionLink for this action
|
|
19
|
+
attr_accessor :link
|
|
20
|
+
# the label for this action. used for the header.
|
|
21
|
+
attr_writer :label
|
|
22
|
+
def label
|
|
23
|
+
@label ? as_(@label) : as_(:show_model, :model => @core.label(:count => 1))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# provides access to the list of columns specifically meant for this action to use
|
|
27
|
+
def columns
|
|
28
|
+
self.columns = @core.columns._inheritable unless @columns # lazy evaluation
|
|
29
|
+
@columns
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
public :columns=
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Subform < Base
|
|
3
|
+
def initialize(core_config)
|
|
4
|
+
@core = core_config
|
|
5
|
+
@layout = self.class.layout # default layout
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# global level configuration
|
|
9
|
+
# --------------------------
|
|
10
|
+
|
|
11
|
+
cattr_accessor :layout
|
|
12
|
+
@@layout = :horizontal
|
|
13
|
+
|
|
14
|
+
# instance-level configuration
|
|
15
|
+
# ----------------------------
|
|
16
|
+
|
|
17
|
+
attr_accessor :layout
|
|
18
|
+
|
|
19
|
+
# provides access to the list of columns specifically meant for the Sub-Form to use
|
|
20
|
+
def columns
|
|
21
|
+
# we want to delay initializing to the @core.update.columns set for as long as possible. but we have to eventually clone, or else have a configuration "leak"
|
|
22
|
+
unless @columns
|
|
23
|
+
if @core.actions.include? :update
|
|
24
|
+
@columns = @core.update.columns.clone
|
|
25
|
+
else
|
|
26
|
+
self.columns = @core.columns._inheritable
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@columns
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
public :columns=
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Update < ActiveScaffold::Config::Form
|
|
3
|
+
self.crud_type = :update
|
|
4
|
+
def initialize(*args)
|
|
5
|
+
super
|
|
6
|
+
self.nested_links = self.class.nested_links
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# global level configuration
|
|
10
|
+
# --------------------------
|
|
11
|
+
# the ActionLink for this action
|
|
12
|
+
def self.link
|
|
13
|
+
@@link
|
|
14
|
+
end
|
|
15
|
+
def self.link=(val)
|
|
16
|
+
@@link = val
|
|
17
|
+
end
|
|
18
|
+
@@link = ActiveScaffold::DataStructures::ActionLink.new('edit', :label => :edit, :type => :member, :security_method => :update_authorized?)
|
|
19
|
+
|
|
20
|
+
# instance-level configuration
|
|
21
|
+
# ----------------------------
|
|
22
|
+
|
|
23
|
+
# the label= method already exists in the Form base class
|
|
24
|
+
def label
|
|
25
|
+
@label ? as_(@label) : as_(:update_model, :model => @core.label(:count => 1))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
attr_accessor :nested_links
|
|
29
|
+
cattr_accessor :nested_links
|
|
30
|
+
@@nested_links = false
|
|
31
|
+
|
|
32
|
+
attr_writer :hide_nested_column
|
|
33
|
+
def hide_nested_column
|
|
34
|
+
@hide_nested_column.nil? ? true : @hide_nested_column
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|