actionpack 2.3.18 → 3.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- data/CHANGELOG +15 -64
- data/README +39 -48
- data/lib/abstract_controller.rb +22 -0
- data/lib/abstract_controller/base.rb +191 -0
- data/lib/abstract_controller/callbacks.rb +113 -0
- data/lib/abstract_controller/collector.rb +30 -0
- data/lib/abstract_controller/compatibility.rb +18 -0
- data/lib/abstract_controller/helpers.rb +163 -0
- data/lib/abstract_controller/layouts.rb +413 -0
- data/lib/abstract_controller/localized_cache.rb +49 -0
- data/lib/abstract_controller/logger.rb +13 -0
- data/lib/abstract_controller/rendering.rb +238 -0
- data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
- data/lib/action_controller.rb +68 -102
- data/lib/action_controller/base.rb +77 -1409
- data/lib/action_controller/caching.rb +58 -45
- data/lib/action_controller/caching/actions.rb +100 -114
- data/lib/action_controller/caching/fragments.rb +17 -19
- data/lib/action_controller/caching/pages.rb +12 -6
- data/lib/action_controller/caching/sweeping.rb +42 -0
- data/lib/action_controller/deprecated.rb +5 -0
- data/lib/action_controller/deprecated/dispatcher.rb +28 -0
- data/lib/action_controller/deprecated/integration_test.rb +2 -0
- data/lib/action_controller/deprecated/performance_test.rb +1 -0
- data/lib/action_controller/metal.rb +125 -0
- data/lib/action_controller/metal/compatibility.rb +141 -0
- data/lib/action_controller/metal/conditional_get.rb +86 -0
- data/lib/action_controller/metal/configuration.rb +28 -0
- data/lib/action_controller/metal/cookies.rb +17 -0
- data/lib/action_controller/metal/exceptions.rb +46 -0
- data/lib/action_controller/metal/flash.rb +28 -0
- data/lib/action_controller/metal/head.rb +33 -0
- data/lib/action_controller/metal/helpers.rb +116 -0
- data/lib/action_controller/metal/hide_actions.rb +50 -0
- data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
- data/lib/action_controller/metal/instrumentation.rb +99 -0
- data/lib/action_controller/metal/mime_responds.rb +300 -0
- data/lib/action_controller/metal/rack_delegation.rb +35 -0
- data/lib/action_controller/metal/redirecting.rb +90 -0
- data/lib/action_controller/metal/renderers.rb +95 -0
- data/lib/action_controller/metal/rendering.rb +69 -0
- data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
- data/lib/action_controller/metal/rescue.rb +13 -0
- data/lib/action_controller/metal/responder.rb +220 -0
- data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
- data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
- data/lib/action_controller/metal/testing.rb +42 -0
- data/lib/action_controller/metal/url_for.rb +157 -0
- data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
- data/lib/action_controller/middleware.rb +38 -0
- data/lib/action_controller/polymorphic_routes.rb +20 -26
- data/lib/action_controller/railtie.rb +30 -0
- data/lib/action_controller/railties/subscriber.rb +63 -0
- data/lib/action_controller/record_identifier.rb +3 -16
- data/lib/action_controller/test_case.rb +156 -18
- data/lib/action_controller/url_rewriter.rb +47 -200
- data/lib/action_controller/vendor/html-scanner.rb +16 -12
- data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
- data/lib/action_dispatch.rb +88 -0
- data/lib/action_dispatch/http/cache.rb +123 -0
- data/lib/action_dispatch/http/filter_parameters.rb +98 -0
- data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
- data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
- data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
- data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
- data/lib/action_dispatch/http/parameters.rb +49 -0
- data/lib/action_dispatch/http/request.rb +223 -0
- data/lib/action_dispatch/http/response.rb +209 -0
- data/lib/action_dispatch/http/upload.rb +48 -0
- data/lib/action_dispatch/http/url.rb +129 -0
- data/lib/action_dispatch/middleware/callbacks.rb +50 -0
- data/lib/action_dispatch/middleware/cascade.rb +29 -0
- data/lib/action_dispatch/middleware/cookies.rb +216 -0
- data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
- data/lib/action_dispatch/middleware/head.rb +18 -0
- data/lib/action_dispatch/middleware/params_parser.rb +78 -0
- data/lib/action_dispatch/middleware/rescue.rb +26 -0
- data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
- data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
- data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
- data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
- data/lib/action_dispatch/middleware/static.rb +44 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
- data/lib/action_dispatch/railtie.rb +15 -0
- data/lib/action_dispatch/routing.rb +217 -0
- data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
- data/lib/action_dispatch/routing/mapper.rb +649 -0
- data/lib/action_dispatch/routing/route.rb +55 -0
- data/lib/action_dispatch/routing/route_set.rb +445 -0
- data/lib/action_dispatch/testing/assertions.rb +21 -0
- data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
- data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
- data/lib/action_dispatch/testing/assertions/response.rb +154 -0
- data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
- data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
- data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
- data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
- data/lib/action_dispatch/testing/performance_test.rb +17 -0
- data/lib/action_dispatch/testing/test_process.rb +42 -0
- data/lib/action_dispatch/testing/test_request.rb +83 -0
- data/lib/action_dispatch/testing/test_response.rb +136 -0
- data/lib/action_pack/version.rb +3 -3
- data/lib/action_view.rb +29 -26
- data/lib/action_view/base.rb +101 -148
- data/lib/action_view/context.rb +44 -0
- data/lib/action_view/helpers.rb +6 -4
- data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
- data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
- data/lib/action_view/helpers/cache_helper.rb +1 -1
- data/lib/action_view/helpers/capture_helper.rb +40 -8
- data/lib/action_view/helpers/csrf_helper.rb +2 -4
- data/lib/action_view/helpers/date_helper.rb +14 -15
- data/lib/action_view/helpers/form_helper.rb +121 -24
- data/lib/action_view/helpers/form_options_helper.rb +26 -25
- data/lib/action_view/helpers/form_tag_helper.rb +42 -33
- data/lib/action_view/helpers/javascript_helper.rb +1 -109
- data/lib/action_view/helpers/number_helper.rb +4 -1
- data/lib/action_view/helpers/prototype_helper.rb +75 -499
- data/lib/action_view/helpers/raw_output_helper.rb +1 -1
- data/lib/action_view/helpers/record_tag_helper.rb +3 -3
- data/lib/action_view/helpers/sanitize_helper.rb +3 -2
- data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
- data/lib/action_view/helpers/tag_helper.rb +12 -13
- data/lib/action_view/helpers/text_helper.rb +33 -38
- data/lib/action_view/helpers/translation_helper.rb +11 -35
- data/lib/action_view/helpers/url_helper.rb +140 -134
- data/lib/action_view/locale/en.yml +34 -28
- data/lib/action_view/paths.rb +27 -24
- data/lib/action_view/railtie.rb +17 -0
- data/lib/action_view/railties/subscriber.rb +24 -0
- data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
- data/lib/action_view/render/rendering.rb +117 -0
- data/lib/action_view/template.rb +88 -217
- data/lib/action_view/template/error.rb +105 -0
- data/lib/action_view/template/handler.rb +41 -0
- data/lib/action_view/template/handlers.rb +54 -0
- data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
- data/lib/action_view/template/handlers/erb.rb +58 -0
- data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
- data/lib/action_view/template/resolver.rb +164 -0
- data/lib/action_view/template/text.rb +40 -0
- data/lib/action_view/test_case.rb +18 -18
- metadata +165 -420
- data/RUNNING_UNIT_TESTS +0 -24
- data/Rakefile +0 -158
- data/install.rb +0 -30
- data/lib/action_controller/assertions/dom_assertions.rb +0 -55
- data/lib/action_controller/assertions/response_assertions.rb +0 -169
- data/lib/action_controller/benchmarking.rb +0 -107
- data/lib/action_controller/caching/sweeper.rb +0 -45
- data/lib/action_controller/cgi_ext.rb +0 -15
- data/lib/action_controller/cgi_ext/cookie.rb +0 -112
- data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
- data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
- data/lib/action_controller/cgi_process.rb +0 -77
- data/lib/action_controller/cookies.rb +0 -197
- data/lib/action_controller/dispatcher.rb +0 -133
- data/lib/action_controller/failsafe.rb +0 -87
- data/lib/action_controller/filters.rb +0 -680
- data/lib/action_controller/helpers.rb +0 -225
- data/lib/action_controller/layout.rb +0 -286
- data/lib/action_controller/middlewares.rb +0 -14
- data/lib/action_controller/mime_responds.rb +0 -193
- data/lib/action_controller/params_parser.rb +0 -77
- data/lib/action_controller/performance_test.rb +0 -15
- data/lib/action_controller/rack_lint_patch.rb +0 -36
- data/lib/action_controller/reloader.rb +0 -54
- data/lib/action_controller/request.rb +0 -518
- data/lib/action_controller/request_forgery_protection.rb +0 -116
- data/lib/action_controller/rescue.rb +0 -183
- data/lib/action_controller/resources.rb +0 -682
- data/lib/action_controller/response.rb +0 -237
- data/lib/action_controller/routing.rb +0 -388
- data/lib/action_controller/routing/builder.rb +0 -197
- data/lib/action_controller/routing/optimisations.rb +0 -130
- data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
- data/lib/action_controller/routing/route.rb +0 -265
- data/lib/action_controller/routing/route_set.rb +0 -503
- data/lib/action_controller/routing/routing_ext.rb +0 -49
- data/lib/action_controller/routing/segments.rb +0 -343
- data/lib/action_controller/session/abstract_store.rb +0 -276
- data/lib/action_controller/session/mem_cache_store.rb +0 -60
- data/lib/action_controller/status_codes.rb +0 -88
- data/lib/action_controller/string_coercion.rb +0 -29
- data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
- data/lib/action_controller/test_process.rb +0 -580
- data/lib/action_controller/uploaded_file.rb +0 -44
- data/lib/action_view/helpers/benchmark_helper.rb +0 -54
- data/lib/action_view/inline_template.rb +0 -19
- data/lib/action_view/reloadable_template.rb +0 -117
- data/lib/action_view/renderable.rb +0 -109
- data/lib/action_view/renderable_partial.rb +0 -53
- data/lib/action_view/template_error.rb +0 -99
- data/lib/action_view/template_handler.rb +0 -34
- data/lib/action_view/template_handlers.rb +0 -48
- data/lib/action_view/template_handlers/erb.rb +0 -25
- data/lib/actionpack.rb +0 -2
- data/test/abstract_unit.rb +0 -78
- data/test/active_record_unit.rb +0 -104
- data/test/activerecord/active_record_store_test.rb +0 -221
- data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
- data/test/adv_attr_test.rb +0 -20
- data/test/controller/action_pack_assertions_test.rb +0 -545
- data/test/controller/addresses_render_test.rb +0 -37
- data/test/controller/assert_select_test.rb +0 -735
- data/test/controller/base_test.rb +0 -217
- data/test/controller/benchmark_test.rb +0 -32
- data/test/controller/caching_test.rb +0 -743
- data/test/controller/capture_test.rb +0 -66
- data/test/controller/content_type_test.rb +0 -178
- data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
- data/test/controller/cookie_test.rb +0 -208
- data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
- data/test/controller/dispatcher_test.rb +0 -144
- data/test/controller/dom_assertions_test.rb +0 -53
- data/test/controller/failsafe_test.rb +0 -60
- data/test/controller/fake_controllers.rb +0 -33
- data/test/controller/fake_models.rb +0 -19
- data/test/controller/filter_params_test.rb +0 -52
- data/test/controller/filters_test.rb +0 -885
- data/test/controller/flash_test.rb +0 -174
- data/test/controller/header_test.rb +0 -14
- data/test/controller/helper_test.rb +0 -224
- data/test/controller/html-scanner/cdata_node_test.rb +0 -15
- data/test/controller/html-scanner/document_test.rb +0 -148
- data/test/controller/html-scanner/node_test.rb +0 -89
- data/test/controller/html-scanner/sanitizer_test.rb +0 -300
- data/test/controller/html-scanner/tag_node_test.rb +0 -238
- data/test/controller/html-scanner/text_node_test.rb +0 -50
- data/test/controller/html-scanner/tokenizer_test.rb +0 -131
- data/test/controller/http_basic_authentication_test.rb +0 -113
- data/test/controller/http_digest_authentication_test.rb +0 -254
- data/test/controller/integration_test.rb +0 -526
- data/test/controller/layout_test.rb +0 -215
- data/test/controller/localized_templates_test.rb +0 -24
- data/test/controller/logging_test.rb +0 -46
- data/test/controller/middleware_stack_test.rb +0 -90
- data/test/controller/mime_responds_test.rb +0 -536
- data/test/controller/mime_type_test.rb +0 -93
- data/test/controller/output_escaping_test.rb +0 -19
- data/test/controller/polymorphic_routes_test.rb +0 -297
- data/test/controller/rack_test.rb +0 -308
- data/test/controller/record_identifier_test.rb +0 -139
- data/test/controller/redirect_test.rb +0 -285
- data/test/controller/reloader_test.rb +0 -125
- data/test/controller/render_test.rb +0 -1783
- data/test/controller/request/json_params_parsing_test.rb +0 -65
- data/test/controller/request/multipart_params_parsing_test.rb +0 -177
- data/test/controller/request/query_string_parsing_test.rb +0 -129
- data/test/controller/request/test_request_test.rb +0 -35
- data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
- data/test/controller/request/xml_params_parsing_test.rb +0 -103
- data/test/controller/request_forgery_protection_test.rb +0 -233
- data/test/controller/request_test.rb +0 -398
- data/test/controller/rescue_test.rb +0 -541
- data/test/controller/resources_test.rb +0 -1393
- data/test/controller/routing_test.rb +0 -2592
- data/test/controller/selector_test.rb +0 -628
- data/test/controller/send_file_test.rb +0 -171
- data/test/controller/session/abstract_store_test.rb +0 -64
- data/test/controller/session/cookie_store_test.rb +0 -354
- data/test/controller/session/mem_cache_store_test.rb +0 -187
- data/test/controller/session/test_session_test.rb +0 -58
- data/test/controller/test_test.rb +0 -700
- data/test/controller/translation_test.rb +0 -26
- data/test/controller/url_rewriter_test.rb +0 -395
- data/test/controller/verification_test.rb +0 -270
- data/test/controller/view_paths_test.rb +0 -141
- data/test/controller/webservice_test.rb +0 -273
- data/test/fixtures/_top_level_partial.html.erb +0 -1
- data/test/fixtures/_top_level_partial_only.erb +0 -1
- data/test/fixtures/addresses/list.erb +0 -1
- data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
- data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
- data/test/fixtures/companies.yml +0 -24
- data/test/fixtures/company.rb +0 -10
- data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
- data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
- data/test/fixtures/customers/_customer.html.erb +0 -1
- data/test/fixtures/db_definitions/sqlite.sql +0 -49
- data/test/fixtures/developer.rb +0 -9
- data/test/fixtures/developers.yml +0 -21
- data/test/fixtures/developers/_developer.erb +0 -1
- data/test/fixtures/developers_projects.yml +0 -13
- data/test/fixtures/failsafe/500.html +0 -1
- data/test/fixtures/fun/games/_game.erb +0 -1
- data/test/fixtures/fun/games/hello_world.erb +0 -1
- data/test/fixtures/fun/serious/games/_game.erb +0 -1
- data/test/fixtures/functional_caching/_partial.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
- data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
- data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
- data/test/fixtures/helpers/abc_helper.rb +0 -5
- data/test/fixtures/helpers/fun/games_helper.rb +0 -3
- data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
- data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
- data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
- data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
- data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
- data/test/fixtures/layouts/_column.html.erb +0 -2
- data/test/fixtures/layouts/block_with_layout.erb +0 -3
- data/test/fixtures/layouts/builder.builder +0 -3
- data/test/fixtures/layouts/default_html.html.erb +0 -1
- data/test/fixtures/layouts/partial_with_layout.erb +0 -3
- data/test/fixtures/layouts/standard.erb +0 -1
- data/test/fixtures/layouts/talk_from_action.erb +0 -2
- data/test/fixtures/layouts/xhr.html.erb +0 -2
- data/test/fixtures/layouts/yield.erb +0 -2
- data/test/fixtures/localized/hello_world.de.html +0 -1
- data/test/fixtures/localized/hello_world.en.html +0 -1
- data/test/fixtures/mascot.rb +0 -3
- data/test/fixtures/mascots.yml +0 -4
- data/test/fixtures/mascots/_mascot.html.erb +0 -1
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/boundary_problem_file +0 -10
- data/test/fixtures/multipart/bracketed_param +0 -5
- data/test/fixtures/multipart/empty +0 -10
- data/test/fixtures/multipart/hello.txt +0 -1
- data/test/fixtures/multipart/large_text_file +0 -10
- data/test/fixtures/multipart/mixed_files +0 -0
- data/test/fixtures/multipart/mona_lisa.jpg +0 -0
- data/test/fixtures/multipart/none +0 -9
- data/test/fixtures/multipart/single_parameter +0 -5
- data/test/fixtures/multipart/text_file +0 -10
- data/test/fixtures/override/test/hello_world.erb +0 -1
- data/test/fixtures/override2/layouts/test/sub.erb +0 -1
- data/test/fixtures/post_test/layouts/post.html.erb +0 -1
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
- data/test/fixtures/post_test/post/index.html.erb +0 -1
- data/test/fixtures/post_test/post/index.iphone.erb +0 -1
- data/test/fixtures/post_test/super_post/index.html.erb +0 -1
- data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
- data/test/fixtures/project.rb +0 -3
- data/test/fixtures/projects.yml +0 -7
- data/test/fixtures/projects/_project.erb +0 -1
- data/test/fixtures/public/404.html +0 -1
- data/test/fixtures/public/500.da.html +0 -1
- data/test/fixtures/public/500.html +0 -1
- data/test/fixtures/public/absolute/test.css +0 -23
- data/test/fixtures/public/absolute/test.js +0 -63
- data/test/fixtures/public/images/rails.png +0 -0
- data/test/fixtures/public/javascripts/application.js +0 -1
- data/test/fixtures/public/javascripts/bank.js +0 -1
- data/test/fixtures/public/javascripts/controls.js +0 -1
- data/test/fixtures/public/javascripts/dragdrop.js +0 -1
- data/test/fixtures/public/javascripts/effects.js +0 -1
- data/test/fixtures/public/javascripts/prototype.js +0 -1
- data/test/fixtures/public/javascripts/robber.js +0 -1
- data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
- data/test/fixtures/public/javascripts/version.1.0.js +0 -1
- data/test/fixtures/public/stylesheets/bank.css +0 -1
- data/test/fixtures/public/stylesheets/robber.css +0 -1
- data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
- data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
- data/test/fixtures/quiz/questions/_question.html.erb +0 -1
- data/test/fixtures/replies.yml +0 -15
- data/test/fixtures/replies/_reply.erb +0 -1
- data/test/fixtures/reply.rb +0 -7
- data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
- data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
- data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
- data/test/fixtures/scope/test/modgreet.erb +0 -1
- data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
- data/test/fixtures/shared.html.erb +0 -1
- data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
- data/test/fixtures/test/_counter.html.erb +0 -1
- data/test/fixtures/test/_customer.erb +0 -1
- data/test/fixtures/test/_customer_counter.erb +0 -1
- data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
- data/test/fixtures/test/_customer_greeting.erb +0 -1
- data/test/fixtures/test/_customer_with_var.erb +0 -1
- data/test/fixtures/test/_form.erb +0 -1
- data/test/fixtures/test/_from_helper.erb +0 -1
- data/test/fixtures/test/_hash_greeting.erb +0 -1
- data/test/fixtures/test/_hash_object.erb +0 -2
- data/test/fixtures/test/_hello.builder +0 -1
- data/test/fixtures/test/_labelling_form.erb +0 -1
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
- data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
- data/test/fixtures/test/_local_inspector.html.erb +0 -1
- data/test/fixtures/test/_one.html.erb +0 -1
- data/test/fixtures/test/_partial.erb +0 -1
- data/test/fixtures/test/_partial.html.erb +0 -1
- data/test/fixtures/test/_partial.js.erb +0 -1
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
- data/test/fixtures/test/_partial_only.erb +0 -1
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
- data/test/fixtures/test/_person.erb +0 -2
- data/test/fixtures/test/_raise.html.erb +0 -1
- data/test/fixtures/test/_two.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
- data/test/fixtures/test/action_talk_to_layout.erb +0 -2
- data/test/fixtures/test/array_translation.erb +0 -1
- data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
- data/test/fixtures/test/capturing.erb +0 -4
- data/test/fixtures/test/content_for.erb +0 -2
- data/test/fixtures/test/content_for_concatenated.erb +0 -3
- data/test/fixtures/test/content_for_with_parameter.erb +0 -2
- data/test/fixtures/test/delete_with_js.rjs +0 -2
- data/test/fixtures/test/dont_pick_me +0 -1
- data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/enum_rjs_test.rjs +0 -6
- data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.builder +0 -1
- data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
- data/test/fixtures/test/greeting.erb +0 -1
- data/test/fixtures/test/greeting.js.rjs +0 -1
- data/test/fixtures/test/hello.builder +0 -4
- data/test/fixtures/test/hello_world.da.html.erb +0 -1
- data/test/fixtures/test/hello_world.erb +0 -1
- data/test/fixtures/test/hello_world.erb~ +0 -1
- data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
- data/test/fixtures/test/hello_world_container.builder +0 -3
- data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
- data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
- data/test/fixtures/test/hello_xml_world.builder +0 -11
- data/test/fixtures/test/hyphen-ated.erb +0 -1
- data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
- data/test/fixtures/test/list.erb +0 -1
- data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
- data/test/fixtures/test/nested_layout.erb +0 -3
- data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
- data/test/fixtures/test/potential_conflicts.erb +0 -4
- data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_file_from_template.html.erb +0 -1
- data/test/fixtures/test/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/render_file_with_locals.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
- data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
- data/test/fixtures/test/render_to_string_test.erb +0 -1
- data/test/fixtures/test/scoped_array_translation.erb +0 -1
- data/test/fixtures/test/sub_template_raise.html.erb +0 -1
- data/test/fixtures/test/template.erb +0 -1
- data/test/fixtures/test/translation.erb +0 -1
- data/test/fixtures/test/update_element_with_capture.erb +0 -9
- data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
- data/test/fixtures/test/utf8.html.erb +0 -4
- data/test/fixtures/test/utf8_magic.html.erb +0 -5
- data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
- data/test/fixtures/topic.rb +0 -3
- data/test/fixtures/topics.yml +0 -22
- data/test/fixtures/topics/_topic.html.erb +0 -1
- data/test/template/active_record_helper_i18n_test.rb +0 -51
- data/test/template/active_record_helper_test.rb +0 -302
- data/test/template/asset_tag_helper_test.rb +0 -770
- data/test/template/atom_feed_helper_test.rb +0 -315
- data/test/template/benchmark_helper_test.rb +0 -86
- data/test/template/compiled_templates_test.rb +0 -204
- data/test/template/date_helper_i18n_test.rb +0 -121
- data/test/template/date_helper_test.rb +0 -2603
- data/test/template/erb_util_test.rb +0 -36
- data/test/template/form_helper_test.rb +0 -1447
- data/test/template/form_options_helper_i18n_test.rb +0 -27
- data/test/template/form_options_helper_test.rb +0 -811
- data/test/template/form_tag_helper_test.rb +0 -356
- data/test/template/javascript_helper_test.rb +0 -106
- data/test/template/number_helper_i18n_test.rb +0 -69
- data/test/template/number_helper_test.rb +0 -132
- data/test/template/prototype_helper_test.rb +0 -639
- data/test/template/raw_output_helper_test.rb +0 -21
- data/test/template/record_tag_helper_test.rb +0 -58
- data/test/template/render_test.rb +0 -329
- data/test/template/sanitize_helper_test.rb +0 -57
- data/test/template/scriptaculous_helper_test.rb +0 -90
- data/test/template/tag_helper_test.rb +0 -98
- data/test/template/template_test.rb +0 -32
- data/test/template/test_test.rb +0 -54
- data/test/template/text_helper_test.rb +0 -601
- data/test/template/translation_helper_test.rb +0 -95
- data/test/template/url_helper_test.rb +0 -641
- data/test/testing_sandbox.rb +0 -15
- data/test/view/test_case_test.rb +0 -176
@@ -15,7 +15,7 @@ module ActionView
|
|
15
15
|
def div_for(record, *args, &block)
|
16
16
|
content_tag_for(:div, record, *args, &block)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
# content_tag_for creates an HTML element with id and class parameters
|
20
20
|
# that relate to the specified Active Record object. For example:
|
21
21
|
#
|
@@ -34,7 +34,7 @@ module ActionView
|
|
34
34
|
# <% content_tag_for(:tr, @person, :foo) do %> ...
|
35
35
|
#
|
36
36
|
# produces:
|
37
|
-
#
|
37
|
+
#
|
38
38
|
# <tr id="foo_person_123" class="person">...
|
39
39
|
#
|
40
40
|
# content_tag_for also accepts a hash of options, which will be converted to
|
@@ -50,7 +50,7 @@ module ActionView
|
|
50
50
|
def content_tag_for(tag_name, record, *args, &block)
|
51
51
|
prefix = args.first.is_a?(Hash) ? nil : args.shift
|
52
52
|
options = args.extract_options!
|
53
|
-
options.merge!({ :class => "#{dom_class(record)} #{options[:class]}".strip, :id => dom_id(record, prefix) })
|
53
|
+
options.merge!({ :class => "#{dom_class(record, prefix)} #{options[:class]}".strip, :id => dom_id(record, prefix) })
|
54
54
|
content_tag(tag_name, options, &block)
|
55
55
|
end
|
56
56
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'action_controller/vendor/html-scanner'
|
1
2
|
require 'action_view/helpers/tag_helper'
|
2
3
|
|
3
4
|
module ActionView
|
@@ -21,7 +22,7 @@ module ActionView
|
|
21
22
|
#
|
22
23
|
# Custom Use (only the mentioned tags and attributes are allowed, nothing else)
|
23
24
|
#
|
24
|
-
# <%= sanitize @article.body, :tags => %w(table tr td), :attributes => %w(id class style)
|
25
|
+
# <%= sanitize @article.body, :tags => %w(table tr td), :attributes => %w(id class style) %>
|
25
26
|
#
|
26
27
|
# Add table tags to the default allowed tags
|
27
28
|
#
|
@@ -72,7 +73,7 @@ module ActionView
|
|
72
73
|
# strip_tags("<div id='top-bar'>Welcome to my website!</div>")
|
73
74
|
# # => Welcome to my website!
|
74
75
|
def strip_tags(html)
|
75
|
-
self.class.full_sanitizer.sanitize(html)
|
76
|
+
self.class.full_sanitizer.sanitize(html).try(:html_safe)
|
76
77
|
end
|
77
78
|
|
78
79
|
# Strips all link tags from +text+ leaving just the link text.
|
@@ -3,11 +3,11 @@ require 'active_support/json'
|
|
3
3
|
|
4
4
|
module ActionView
|
5
5
|
module Helpers
|
6
|
-
# Provides a set of helpers for calling Scriptaculous JavaScript
|
6
|
+
# Provides a set of helpers for calling Scriptaculous JavaScript
|
7
7
|
# functions, including those which create Ajax controls and visual effects.
|
8
8
|
#
|
9
|
-
# To be able to use these helpers, you must include the Prototype
|
10
|
-
# JavaScript framework and the Scriptaculous JavaScript library in your
|
9
|
+
# To be able to use these helpers, you must include the Prototype
|
10
|
+
# JavaScript framework and the Scriptaculous JavaScript library in your
|
11
11
|
# pages. See the documentation for ActionView::Helpers::JavaScriptHelper
|
12
12
|
# for more information on including the necessary JavaScript.
|
13
13
|
#
|
@@ -18,22 +18,17 @@ module ActionView
|
|
18
18
|
unless const_defined? :TOGGLE_EFFECTS
|
19
19
|
TOGGLE_EFFECTS = [:toggle_appear, :toggle_slide, :toggle_blind]
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# Returns a JavaScript snippet to be used on the Ajax callbacks for
|
23
23
|
# starting visual effects.
|
24
24
|
#
|
25
|
-
# Example:
|
26
|
-
# <%= link_to_remote "Reload", :update => "posts",
|
27
|
-
# :url => { :action => "reload" },
|
28
|
-
# :complete => visual_effect(:highlight, "posts", :duration => 0.5)
|
29
|
-
#
|
30
25
|
# If no +element_id+ is given, it assumes "element" which should be a local
|
31
|
-
# variable in the generated JavaScript execution context. This can be
|
26
|
+
# variable in the generated JavaScript execution context. This can be
|
32
27
|
# used for example with +drop_receiving_element+:
|
33
28
|
#
|
34
29
|
# <%= drop_receiving_element (...), :loading => visual_effect(:fade) %>
|
35
30
|
#
|
36
|
-
# This would fade the element that was dropped on the drop receiving
|
31
|
+
# This would fade the element that was dropped on the drop receiving
|
37
32
|
# element.
|
38
33
|
#
|
39
34
|
# For toggling visual effects, you can use <tt>:toggle_appear</tt>, <tt>:toggle_slide</tt>, and
|
@@ -44,13 +39,13 @@ module ActionView
|
|
44
39
|
# http://script.aculo.us for more documentation.
|
45
40
|
def visual_effect(name, element_id = false, js_options = {})
|
46
41
|
element = element_id ? ActiveSupport::JSON.encode(element_id) : "element"
|
47
|
-
|
42
|
+
|
48
43
|
js_options[:queue] = if js_options[:queue].is_a?(Hash)
|
49
44
|
'{' + js_options[:queue].map {|k, v| k == :limit ? "#{k}:#{v}" : "#{k}:'#{v}'" }.join(',') + '}'
|
50
45
|
elsif js_options[:queue]
|
51
46
|
"'#{js_options[:queue]}'"
|
52
47
|
end if js_options[:queue]
|
53
|
-
|
48
|
+
|
54
49
|
[:endcolor, :direction, :startcolor, :scaleMode, :restorecolor].each do |option|
|
55
50
|
js_options[option] = "'#{js_options[option]}'" if js_options[option]
|
56
51
|
end
|
@@ -61,7 +56,7 @@ module ActionView
|
|
61
56
|
"new Effect.#{name.to_s.camelize}(#{element},#{options_for_javascript(js_options)});"
|
62
57
|
end
|
63
58
|
end
|
64
|
-
|
59
|
+
|
65
60
|
# Makes the element with the DOM ID specified by +element_id+ sortable
|
66
61
|
# by drag-and-drop and make an Ajax call whenever the sort order has
|
67
62
|
# changed. By default, the action called gets the serialized sortable
|
@@ -71,84 +66,84 @@ module ActionView
|
|
71
66
|
#
|
72
67
|
# <%= sortable_element("my_list", :url => { :action => "order" }) %>
|
73
68
|
#
|
74
|
-
# In the example, the action gets a "my_list" array parameter
|
75
|
-
# containing the values of the ids of elements the sortable consists
|
69
|
+
# In the example, the action gets a "my_list" array parameter
|
70
|
+
# containing the values of the ids of elements the sortable consists
|
76
71
|
# of, in the current order.
|
77
72
|
#
|
78
73
|
# Important: For this to work, the sortable elements must have id
|
79
74
|
# attributes in the form "string_identifier". For example, "item_1". Only
|
80
75
|
# the identifier part of the id attribute will be serialized.
|
81
|
-
#
|
76
|
+
#
|
82
77
|
# Additional +options+ are:
|
83
78
|
#
|
84
79
|
# * <tt>:format</tt> - A regular expression to determine what to send as the
|
85
80
|
# serialized id to the server (the default is <tt>/^[^_]*_(.*)$/</tt>).
|
86
|
-
#
|
81
|
+
#
|
87
82
|
# * <tt>:constraint</tt> - Whether to constrain the dragging to either
|
88
83
|
# <tt>:horizontal</tt> or <tt>:vertical</tt> (or false to make it unconstrained).
|
89
|
-
#
|
84
|
+
#
|
90
85
|
# * <tt>:overlap</tt> - Calculate the item overlap in the <tt>:horizontal</tt>
|
91
86
|
# or <tt>:vertical</tt> direction.
|
92
|
-
#
|
87
|
+
#
|
93
88
|
# * <tt>:tag</tt> - Which children of the container element to treat as
|
94
89
|
# sortable (default is <tt>li</tt>).
|
95
|
-
#
|
90
|
+
#
|
96
91
|
# * <tt>:containment</tt> - Takes an element or array of elements to treat as
|
97
92
|
# potential drop targets (defaults to the original target element).
|
98
|
-
#
|
93
|
+
#
|
99
94
|
# * <tt>:only</tt> - A CSS class name or array of class names used to filter
|
100
95
|
# out child elements as candidates.
|
101
|
-
#
|
96
|
+
#
|
102
97
|
# * <tt>:scroll</tt> - Determines whether to scroll the list during drag
|
103
98
|
# operations if the list runs past the visual border.
|
104
|
-
#
|
99
|
+
#
|
105
100
|
# * <tt>:tree</tt> - Determines whether to treat nested lists as part of the
|
106
101
|
# main sortable list. This means that you can create multi-layer lists,
|
107
102
|
# and not only sort items at the same level, but drag and sort items
|
108
103
|
# between levels.
|
109
|
-
#
|
104
|
+
#
|
110
105
|
# * <tt>:hoverclass</tt> - If set, the Droppable will have this additional CSS class
|
111
|
-
# when an accepted Draggable is hovered over it.
|
112
|
-
#
|
106
|
+
# when an accepted Draggable is hovered over it.
|
107
|
+
#
|
113
108
|
# * <tt>:handle</tt> - Sets whether the element should only be draggable by an
|
114
109
|
# embedded handle. The value may be a string referencing a CSS class value
|
115
110
|
# (as of script.aculo.us V1.5). The first child/grandchild/etc. element
|
116
111
|
# found within the element that has this CSS class value will be used as
|
117
112
|
# the handle.
|
118
|
-
#
|
113
|
+
#
|
119
114
|
# * <tt>:ghosting</tt> - Clones the element and drags the clone, leaving
|
120
115
|
# the original in place until the clone is dropped (default is <tt>false</tt>).
|
121
|
-
#
|
116
|
+
#
|
122
117
|
# * <tt>:dropOnEmpty</tt> - If true the Sortable container will be made into
|
123
118
|
# a Droppable, that can receive a Draggable (as according to the containment
|
124
119
|
# rules) as a child element when there are no more elements inside (default
|
125
120
|
# is <tt>false</tt>).
|
126
|
-
#
|
121
|
+
#
|
127
122
|
# * <tt>:onChange</tt> - Called whenever the sort order changes while dragging. When
|
128
123
|
# dragging from one Sortable to another, the callback is called once on each
|
129
124
|
# Sortable. Gets the affected element as its parameter.
|
130
|
-
#
|
125
|
+
#
|
131
126
|
# * <tt>:onUpdate</tt> - Called when the drag ends and the Sortable's order is
|
132
127
|
# changed in any way. When dragging from one Sortable to another, the callback
|
133
128
|
# is called once on each Sortable. Gets the container as its parameter.
|
134
|
-
#
|
129
|
+
#
|
135
130
|
# See http://script.aculo.us for more documentation.
|
136
131
|
def sortable_element(element_id, options = {})
|
137
132
|
javascript_tag(sortable_element_js(element_id, options).chop!)
|
138
133
|
end
|
139
|
-
|
134
|
+
|
140
135
|
def sortable_element_js(element_id, options = {}) #:nodoc:
|
141
136
|
options[:with] ||= "Sortable.serialize(#{ActiveSupport::JSON.encode(element_id)})"
|
142
137
|
options[:onUpdate] ||= "function(){" + remote_function(options) + "}"
|
143
138
|
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
144
|
-
|
139
|
+
|
145
140
|
[:tag, :overlap, :constraint, :handle].each do |option|
|
146
141
|
options[option] = "'#{options[option]}'" if options[option]
|
147
142
|
end
|
148
|
-
|
143
|
+
|
149
144
|
options[:containment] = array_or_string_for_javascript(options[:containment]) if options[:containment]
|
150
145
|
options[:only] = array_or_string_for_javascript(options[:only]) if options[:only]
|
151
|
-
|
146
|
+
|
152
147
|
%(Sortable.create(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
|
153
148
|
end
|
154
149
|
|
@@ -156,24 +151,24 @@ module ActionView
|
|
156
151
|
#
|
157
152
|
# Example:
|
158
153
|
# <%= draggable_element("my_image", :revert => true)
|
159
|
-
#
|
154
|
+
#
|
160
155
|
# You can change the behaviour with various options, see
|
161
156
|
# http://script.aculo.us for more documentation.
|
162
157
|
def draggable_element(element_id, options = {})
|
163
158
|
javascript_tag(draggable_element_js(element_id, options).chop!)
|
164
159
|
end
|
165
|
-
|
160
|
+
|
166
161
|
def draggable_element_js(element_id, options = {}) #:nodoc:
|
167
162
|
%(new Draggable(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
|
168
163
|
end
|
169
164
|
|
170
165
|
# Makes the element with the DOM ID specified by +element_id+ receive
|
171
166
|
# dropped draggable elements (created by +draggable_element+).
|
172
|
-
# and make an AJAX call. By default, the action called gets the DOM ID
|
167
|
+
# and make an AJAX call. By default, the action called gets the DOM ID
|
173
168
|
# of the element as parameter.
|
174
169
|
#
|
175
170
|
# Example:
|
176
|
-
# <%= drop_receiving_element("my_cart", :url =>
|
171
|
+
# <%= drop_receiving_element("my_cart", :url =>
|
177
172
|
# { :controller => "cart", :action => "add" }) %>
|
178
173
|
#
|
179
174
|
# You can change the behaviour with various options, see
|
@@ -181,46 +176,87 @@ module ActionView
|
|
181
176
|
#
|
182
177
|
# Some of these +options+ include:
|
183
178
|
# * <tt>:accept</tt> - Set this to a string or an array of strings describing the
|
184
|
-
# allowable CSS classes that the +draggable_element+ must have in order
|
179
|
+
# allowable CSS classes that the +draggable_element+ must have in order
|
185
180
|
# to be accepted by this +drop_receiving_element+.
|
186
|
-
#
|
181
|
+
#
|
187
182
|
# * <tt>:confirm</tt> - Adds a confirmation dialog. Example:
|
188
|
-
#
|
183
|
+
#
|
189
184
|
# :confirm => "Are you sure you want to do this?"
|
190
|
-
#
|
185
|
+
#
|
191
186
|
# * <tt>:hoverclass</tt> - If set, the +drop_receiving_element+ will have
|
192
187
|
# this additional CSS class when an accepted +draggable_element+ is
|
193
|
-
# hovered over it.
|
194
|
-
#
|
188
|
+
# hovered over it.
|
189
|
+
#
|
195
190
|
# * <tt>:onDrop</tt> - Called when a +draggable_element+ is dropped onto
|
196
|
-
# this element. Override this callback with a JavaScript expression to
|
191
|
+
# this element. Override this callback with a JavaScript expression to
|
197
192
|
# change the default drop behaviour. Example:
|
198
|
-
#
|
193
|
+
#
|
199
194
|
# :onDrop => "function(draggable_element, droppable_element, event) { alert('I like bananas') }"
|
200
|
-
#
|
195
|
+
#
|
201
196
|
# This callback gets three parameters: The Draggable element, the Droppable
|
202
197
|
# element and the Event object. You can extract additional information about
|
203
198
|
# the drop - like if the Ctrl or Shift keys were pressed - from the Event object.
|
204
|
-
#
|
199
|
+
#
|
205
200
|
# * <tt>:with</tt> - A JavaScript expression specifying the parameters for
|
206
201
|
# the XMLHttpRequest. Any expressions should return a valid URL query string.
|
207
202
|
def drop_receiving_element(element_id, options = {})
|
208
203
|
javascript_tag(drop_receiving_element_js(element_id, options).chop!)
|
209
204
|
end
|
210
|
-
|
205
|
+
|
211
206
|
def drop_receiving_element_js(element_id, options = {}) #:nodoc:
|
212
207
|
options[:with] ||= "'id=' + encodeURIComponent(element.id)"
|
213
208
|
options[:onDrop] ||= "function(element){" + remote_function(options) + "}"
|
214
209
|
options.delete_if { |key, value| PrototypeHelper::AJAX_OPTIONS.include?(key) }
|
215
210
|
|
216
|
-
options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]
|
211
|
+
options[:accept] = array_or_string_for_javascript(options[:accept]) if options[:accept]
|
217
212
|
options[:hoverclass] = "'#{options[:hoverclass]}'" if options[:hoverclass]
|
218
|
-
|
213
|
+
|
219
214
|
# Confirmation happens during the onDrop callback, so it can be removed from the options
|
220
215
|
options.delete(:confirm) if options[:confirm]
|
221
216
|
|
222
217
|
%(Droppables.add(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
|
223
218
|
end
|
219
|
+
|
220
|
+
protected
|
221
|
+
def array_or_string_for_javascript(option)
|
222
|
+
if option.kind_of?(Array)
|
223
|
+
"['#{option.join('\',\'')}']"
|
224
|
+
elsif !option.nil?
|
225
|
+
"'#{option}'"
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
module PrototypeHelper
|
231
|
+
class JavaScriptGenerator
|
232
|
+
module GeneratorMethods
|
233
|
+
# Starts a script.aculo.us visual effect. See
|
234
|
+
# ActionView::Helpers::ScriptaculousHelper for more information.
|
235
|
+
def visual_effect(name, id = nil, options = {})
|
236
|
+
record @context.send(:visual_effect, name, id, options)
|
237
|
+
end
|
238
|
+
|
239
|
+
# Creates a script.aculo.us sortable element. Useful
|
240
|
+
# to recreate sortable elements after items get added
|
241
|
+
# or deleted.
|
242
|
+
# See ActionView::Helpers::ScriptaculousHelper for more information.
|
243
|
+
def sortable(id, options = {})
|
244
|
+
record @context.send(:sortable_element_js, id, options)
|
245
|
+
end
|
246
|
+
|
247
|
+
# Creates a script.aculo.us draggable element.
|
248
|
+
# See ActionView::Helpers::ScriptaculousHelper for more information.
|
249
|
+
def draggable(id, options = {})
|
250
|
+
record @context.send(:draggable_element_js, id, options)
|
251
|
+
end
|
252
|
+
|
253
|
+
# Creates a script.aculo.us drop receiving element.
|
254
|
+
# See ActionView::Helpers::ScriptaculousHelper for more information.
|
255
|
+
def drop_receiving(id, options = {})
|
256
|
+
record @context.send(:drop_receiving_element_js, id, options)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
224
260
|
end
|
225
261
|
end
|
226
262
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'active_support/multibyte'
|
2
|
-
require 'active_support/core_ext/string/output_safety'
|
3
1
|
require 'set'
|
4
2
|
|
5
3
|
module ActionView
|
@@ -9,8 +7,11 @@ module ActionView
|
|
9
7
|
module TagHelper
|
10
8
|
include ERB::Util
|
11
9
|
|
12
|
-
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked
|
13
|
-
|
10
|
+
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
|
11
|
+
autoplay controls loop selected hidden scoped async
|
12
|
+
defer reversed ismap seemless muted required
|
13
|
+
autofocus novalidate formnovalidate open).to_set
|
14
|
+
BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map {|attr| attr.to_sym })
|
14
15
|
|
15
16
|
# Returns an empty HTML tag of type +name+ which by default is XHTML
|
16
17
|
# compliant. Set +open+ to true to create an open tag compatible
|
@@ -132,16 +133,14 @@ module ActionView
|
|
132
133
|
def tag_options(options, escape = true)
|
133
134
|
unless options.blank?
|
134
135
|
attrs = []
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
136
|
+
options.each_pair do |key, value|
|
137
|
+
if BOOLEAN_ATTRIBUTES.include?(key)
|
138
|
+
attrs << %(#{key}="#{key}") if value
|
139
|
+
elsif !value.nil?
|
140
|
+
final_value = value.is_a?(Array) ? value.join(" ") : value
|
141
|
+
final_value = escape_once(final_value) if escape
|
142
|
+
attrs << %(#{key}="#{final_value}")
|
142
143
|
end
|
143
|
-
else
|
144
|
-
attrs = options.map { |key, value| %(#{key}="#{value}") }
|
145
144
|
end
|
146
145
|
" #{attrs.sort * ' '}".html_safe unless attrs.empty?
|
147
146
|
end
|
@@ -24,11 +24,11 @@ module ActionView
|
|
24
24
|
# end
|
25
25
|
# # will either display "Logged in!" or a login link
|
26
26
|
# %>
|
27
|
-
def concat(string
|
28
|
-
|
29
|
-
|
30
|
-
end
|
27
|
+
def concat(string)
|
28
|
+
output_buffer << string
|
29
|
+
end
|
31
30
|
|
31
|
+
def safe_concat(string)
|
32
32
|
output_buffer.safe_concat(string)
|
33
33
|
end
|
34
34
|
|
@@ -36,11 +36,16 @@ module ActionView
|
|
36
36
|
# (defaults to 30). The last characters will be replaced with the <tt>:omission</tt> (defaults to "...")
|
37
37
|
# for a total length not exceeding <tt>:length</tt>.
|
38
38
|
#
|
39
|
+
# Pass a <tt>:separator</tt> to truncate +text+ at a natural break.
|
40
|
+
#
|
39
41
|
# ==== Examples
|
40
42
|
#
|
41
43
|
# truncate("Once upon a time in a world far far away")
|
42
44
|
# # => Once upon a time in a world...
|
43
45
|
#
|
46
|
+
# truncate("Once upon a time in a world far far away", :separator => ' ')
|
47
|
+
# # => Once upon a time in a world...
|
48
|
+
#
|
44
49
|
# truncate("Once upon a time in a world far far away", :length => 14)
|
45
50
|
# # => Once upon a...
|
46
51
|
#
|
@@ -72,7 +77,8 @@ module ActionView
|
|
72
77
|
if text
|
73
78
|
l = options[:length] - options[:omission].mb_chars.length
|
74
79
|
chars = text.mb_chars
|
75
|
-
|
80
|
+
stop = options[:separator] ? (chars.rindex(options[:separator].mb_chars, l) || l) : l
|
81
|
+
(chars.length > options[:length] ? chars[0...stop] + options[:omission] : text).to_s
|
76
82
|
end
|
77
83
|
end
|
78
84
|
|
@@ -181,7 +187,7 @@ module ActionView
|
|
181
187
|
# pluralize(0, 'person')
|
182
188
|
# # => 0 people
|
183
189
|
def pluralize(count, singular, plural = nil)
|
184
|
-
"#{count || 0} " + ((count == 1 || count
|
190
|
+
"#{count || 0} " + ((count == 1 || count == '1') ? singular : (plural || singular.pluralize))
|
185
191
|
end
|
186
192
|
|
187
193
|
# Wraps the +text+ into lines no longer than +line_width+ width. This method
|
@@ -220,8 +226,7 @@ module ActionView
|
|
220
226
|
# Returns the text with all the Textile[http://www.textism.com/tools/textile] codes turned into HTML tags.
|
221
227
|
#
|
222
228
|
# You can learn more about Textile's syntax at its website[http://www.textism.com/tools/textile].
|
223
|
-
# <i>This method is only available if RedCloth[http://
|
224
|
-
# is available</i>.
|
229
|
+
# <i>This method is only available if RedCloth[http://redcloth.org/] is available</i>.
|
225
230
|
#
|
226
231
|
# ==== Examples
|
227
232
|
# textilize("*This is Textile!* Rejoice!")
|
@@ -257,8 +262,7 @@ module ActionView
|
|
257
262
|
# but without the bounding <p> tag that RedCloth adds.
|
258
263
|
#
|
259
264
|
# You can learn more about Textile's syntax at its website[http://www.textism.com/tools/textile].
|
260
|
-
# <i>This method is
|
261
|
-
# to be available</i>.
|
265
|
+
# <i>This method is only available if RedCloth[http://redcloth.org/] is available</i>.
|
262
266
|
#
|
263
267
|
# ==== Examples
|
264
268
|
# textilize_without_paragraph("*This is Textile!* Rejoice!")
|
@@ -280,8 +284,8 @@ module ActionView
|
|
280
284
|
end
|
281
285
|
|
282
286
|
# Returns the text with all the Markdown codes turned into HTML tags.
|
283
|
-
# <i>This method requires BlueCloth[http://www.deveiate.org/projects/BlueCloth]
|
284
|
-
#
|
287
|
+
# <i>This method requires BlueCloth[http://www.deveiate.org/projects/BlueCloth]
|
288
|
+
# to be available</i>.
|
285
289
|
#
|
286
290
|
# ==== Examples
|
287
291
|
# markdown("We are using __Markdown__ now!")
|
@@ -297,7 +301,7 @@ module ActionView
|
|
297
301
|
# markdown('![The ROR logo](http://rubyonrails.com/images/rails.png "Ruby on Rails")')
|
298
302
|
# # => '<p><img src="http://rubyonrails.com/images/rails.png" alt="The ROR logo" title="Ruby on Rails" /></p>'
|
299
303
|
def markdown(text)
|
300
|
-
text.blank? ? "" :
|
304
|
+
text.blank? ? "" : BlueCloth.new(text).to_html
|
301
305
|
end
|
302
306
|
|
303
307
|
# Returns +text+ transformed into HTML using simple formatting rules.
|
@@ -328,12 +332,12 @@ module ActionView
|
|
328
332
|
text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}") # 2+ newline -> paragraph
|
329
333
|
text.gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
|
330
334
|
text.insert 0, start_tag
|
331
|
-
text
|
335
|
+
text << "</p>"
|
332
336
|
end
|
333
337
|
|
334
338
|
# Turns all URLs and e-mail addresses into clickable links. The <tt>:link</tt> option
|
335
339
|
# will limit what should be linked. You can add HTML attributes to the links using
|
336
|
-
# <tt>:
|
340
|
+
# <tt>:html</tt>. Possible values for <tt>:link</tt> are <tt>:all</tt> (default),
|
337
341
|
# <tt>:email_addresses</tt>, and <tt>:urls</tt>. If a block is given, each URL and
|
338
342
|
# e-mail address is yielded and the result is used as the link text.
|
339
343
|
#
|
@@ -350,7 +354,7 @@ module ActionView
|
|
350
354
|
# # => "Visit http://www.loudthinking.com/ or e-mail <a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a>"
|
351
355
|
#
|
352
356
|
# post_body = "Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com."
|
353
|
-
# auto_link(post_body, :
|
357
|
+
# auto_link(post_body, :html => { :target => '_blank' }) do |text|
|
354
358
|
# truncate(text, 15)
|
355
359
|
# end
|
356
360
|
# # => "Welcome to my new blog at <a href=\"http://www.myblog.com/\" target=\"_blank\">http://www.m...</a>.
|
@@ -368,7 +372,7 @@ module ActionView
|
|
368
372
|
# auto_link(post_body, :all, :target => "_blank") # => Once upon\na time
|
369
373
|
# # => "Welcome to my new blog at <a href=\"http://www.myblog.com/\" target=\"_blank\">http://www.myblog.com</a>.
|
370
374
|
# Please e-mail me at <a href=\"mailto:me@email.com\">me@email.com</a>."
|
371
|
-
def auto_link(text, *args, &block)#link = :all,
|
375
|
+
def auto_link(text, *args, &block)#link = :all, html = {}, &block)
|
372
376
|
return '' if text.blank?
|
373
377
|
|
374
378
|
options = args.size == 2 ? {} : args.extract_options! # this is necessary because the old auto_link API has a Hash as its last parameter
|
@@ -440,7 +444,7 @@ module ActionView
|
|
440
444
|
end
|
441
445
|
|
442
446
|
# Returns the current cycle string after a cycle has been started. Useful
|
443
|
-
# for complex table
|
447
|
+
# for complex table highlighting or any other design need which requires
|
444
448
|
# the current cycle string in more than one place.
|
445
449
|
#
|
446
450
|
# ==== Example
|
@@ -532,14 +536,9 @@ module ActionView
|
|
532
536
|
end
|
533
537
|
|
534
538
|
AUTO_LINK_RE = %r{
|
535
|
-
(
|
539
|
+
( https?:// | www\. )
|
536
540
|
[^\s<]+
|
537
|
-
}x
|
538
|
-
|
539
|
-
# regexps for determining context, used high-volume
|
540
|
-
AUTO_LINK_CRE = [/<[^>]+$/, /^[^>]*>/, /<a\b.*?>/i, /<\/a>/i]
|
541
|
-
|
542
|
-
AUTO_EMAIL_RE = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/
|
541
|
+
}x unless const_defined?(:AUTO_LINK_RE)
|
543
542
|
|
544
543
|
BRACKETS = { ']' => '[', ')' => '(', '}' => '{' }
|
545
544
|
|
@@ -548,10 +547,11 @@ module ActionView
|
|
548
547
|
def auto_link_urls(text, html_options = {})
|
549
548
|
link_attributes = html_options.stringify_keys
|
550
549
|
text.gsub(AUTO_LINK_RE) do
|
551
|
-
|
550
|
+
href = $&
|
552
551
|
punctuation = []
|
553
|
-
|
554
|
-
|
552
|
+
left, right = $`, $'
|
553
|
+
# detect already linked URLs and URLs in the middle of a tag
|
554
|
+
if left =~ /<[^>]+$/ && right =~ /^[^>]*>/
|
555
555
|
# do not change string; URL is already linked
|
556
556
|
href
|
557
557
|
else
|
@@ -565,7 +565,7 @@ module ActionView
|
|
565
565
|
end
|
566
566
|
|
567
567
|
link_text = block_given?? yield(href) : href
|
568
|
-
href = 'http://' + href unless
|
568
|
+
href = 'http://' + href unless href =~ %r{^[a-z]+://}i
|
569
569
|
|
570
570
|
content_tag(:a, h(link_text), link_attributes.merge('href' => href)) + punctuation.reverse.join('')
|
571
571
|
end
|
@@ -575,10 +575,11 @@ module ActionView
|
|
575
575
|
# Turns all email addresses into clickable links. If a block is given,
|
576
576
|
# each email is yielded and the result is used as the link text.
|
577
577
|
def auto_link_email_addresses(text, html_options = {})
|
578
|
-
text.
|
579
|
-
|
578
|
+
body = text.dup
|
579
|
+
text.gsub(/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do
|
580
|
+
text = $1
|
580
581
|
|
581
|
-
if
|
582
|
+
if body.match(/<a\b[^>]*>(.*)(#{Regexp.escape(text)})(.*)<\/a>/)
|
582
583
|
text
|
583
584
|
else
|
584
585
|
display_text = (block_given?) ? yield(text) : text
|
@@ -586,12 +587,6 @@ module ActionView
|
|
586
587
|
end
|
587
588
|
end
|
588
589
|
end
|
589
|
-
|
590
|
-
# Detects already linked context or position in the middle of a tag
|
591
|
-
def auto_linked?(left, right)
|
592
|
-
(left =~ AUTO_LINK_CRE[0] and right =~ AUTO_LINK_CRE[1]) or
|
593
|
-
(left.rindex(AUTO_LINK_CRE[2]) and $' !~ AUTO_LINK_CRE[3])
|
594
|
-
end
|
595
590
|
end
|
596
591
|
end
|
597
592
|
end
|