unpoly-rails 1.0.3 → 2.0.0.pre.rc2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of unpoly-rails might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/CHANGELOG.md +43 -25
- data/README.md +5 -6
- data/README_RAILS.md +295 -14
- data/dist/unpoly-bootstrap3.css +9 -14
- data/dist/unpoly-bootstrap3.js +4 -18
- data/dist/unpoly-bootstrap3.min.css +1 -1
- data/dist/unpoly-bootstrap3.min.js +1 -1
- data/dist/unpoly-bootstrap4.css +9 -0
- data/dist/unpoly-bootstrap4.js +16 -0
- data/dist/unpoly-bootstrap4.min.css +1 -0
- data/dist/unpoly-bootstrap4.min.js +1 -0
- data/dist/unpoly-bootstrap5.css +9 -0
- data/dist/unpoly-bootstrap5.js +14 -0
- data/dist/unpoly-bootstrap5.min.css +1 -0
- data/dist/unpoly-bootstrap5.min.js +1 -0
- data/dist/unpoly-migrate.js +1213 -0
- data/dist/unpoly-migrate.min.js +1 -0
- data/dist/unpoly.css +109 -140
- data/dist/unpoly.js +15376 -10484
- data/dist/unpoly.min.css +1 -1
- data/dist/unpoly.min.js +6 -4
- data/lib/unpoly/rails/change/cache.rb +26 -0
- data/lib/unpoly/rails/change/context.rb +80 -0
- data/lib/unpoly/rails/change/field.rb +117 -0
- data/lib/unpoly/rails/change/field_definition.rb +74 -0
- data/lib/unpoly/rails/change/layer.rb +60 -0
- data/lib/unpoly/rails/change.rb +372 -0
- data/lib/unpoly/rails/controller.rb +47 -0
- data/lib/unpoly/rails/error.rb +5 -0
- data/lib/unpoly/rails/request_echo_headers.rb +2 -2
- data/lib/unpoly/rails/version.rb +1 -1
- data/lib/unpoly/tasks.rb +45 -0
- data/lib/unpoly-rails.rb +9 -3
- metadata +42 -316
- data/.gitignore +0 -10
- data/.ruby-version +0 -1
- data/Gemfile +0 -7
- data/Gemfile.lock +0 -39
- data/Rakefile +0 -154
- data/bower.json +0 -27
- data/design/animation-ghosting.txt +0 -72
- data/design/design.txt +0 -34
- data/design/draft.html.erb +0 -48
- data/design/draft.rb +0 -9
- data/design/es6.js +0 -32
- data/design/ghost-debugging.txt +0 -118
- data/design/homepage.txt +0 -236
- data/design/ie11.txt +0 -9
- data/design/measure_import_node.js +0 -330
- data/design/measure_jquery/element_list.js +0 -41
- data/design/measure_jquery/up.on_vs_addEventListener.js +0 -56
- data/design/positioning.txt +0 -28
- data/design/query-params-in-form-actions/cases.html +0 -125
- data/design/rename.txt +0 -0
- data/design/test_rejected_promise.txt +0 -5
- data/design/unpoly errors.txt +0 -19
- data/lib/assets/javascripts/unpoly/browser.coffee.erb +0 -240
- data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +0 -45
- data/lib/assets/javascripts/unpoly/classes/cache.coffee +0 -127
- data/lib/assets/javascripts/unpoly/classes/compile_pass.coffee +0 -93
- data/lib/assets/javascripts/unpoly/classes/config.coffee +0 -9
- data/lib/assets/javascripts/unpoly/classes/css_transition.coffee +0 -118
- data/lib/assets/javascripts/unpoly/classes/divertible_chain.coffee +0 -39
- data/lib/assets/javascripts/unpoly/classes/event_listener.coffee +0 -116
- data/lib/assets/javascripts/unpoly/classes/extract_cascade.coffee +0 -86
- data/lib/assets/javascripts/unpoly/classes/extract_plan.coffee +0 -111
- data/lib/assets/javascripts/unpoly/classes/field_observer.coffee +0 -80
- data/lib/assets/javascripts/unpoly/classes/focus_follower.coffee +0 -29
- data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +0 -64
- data/lib/assets/javascripts/unpoly/classes/html_parser.coffee +0 -46
- data/lib/assets/javascripts/unpoly/classes/motion_controller.coffee +0 -157
- data/lib/assets/javascripts/unpoly/classes/params.coffee.erb +0 -544
- data/lib/assets/javascripts/unpoly/classes/record.coffee +0 -22
- data/lib/assets/javascripts/unpoly/classes/rect.js +0 -21
- data/lib/assets/javascripts/unpoly/classes/request.coffee +0 -247
- data/lib/assets/javascripts/unpoly/classes/response.coffee +0 -157
- data/lib/assets/javascripts/unpoly/classes/reveal_motion.coffee +0 -102
- data/lib/assets/javascripts/unpoly/classes/scroll_motion.coffee +0 -67
- data/lib/assets/javascripts/unpoly/classes/selector.coffee +0 -60
- data/lib/assets/javascripts/unpoly/classes/store/memory.coffee +0 -26
- data/lib/assets/javascripts/unpoly/classes/store/session.coffee +0 -59
- data/lib/assets/javascripts/unpoly/classes/tether.coffee +0 -105
- data/lib/assets/javascripts/unpoly/classes/url_set.coffee +0 -32
- data/lib/assets/javascripts/unpoly/cookie.coffee +0 -56
- data/lib/assets/javascripts/unpoly/element.coffee.erb +0 -1129
- data/lib/assets/javascripts/unpoly/event.coffee.erb +0 -445
- data/lib/assets/javascripts/unpoly/feedback.coffee +0 -353
- data/lib/assets/javascripts/unpoly/form.coffee.erb +0 -1084
- data/lib/assets/javascripts/unpoly/fragment.coffee.erb +0 -928
- data/lib/assets/javascripts/unpoly/framework.coffee +0 -65
- data/lib/assets/javascripts/unpoly/history.coffee +0 -268
- data/lib/assets/javascripts/unpoly/legacy.coffee +0 -60
- data/lib/assets/javascripts/unpoly/link.coffee.erb +0 -622
- data/lib/assets/javascripts/unpoly/log.coffee +0 -253
- data/lib/assets/javascripts/unpoly/modal.coffee.erb +0 -827
- data/lib/assets/javascripts/unpoly/motion.coffee.erb +0 -668
- data/lib/assets/javascripts/unpoly/namespace.coffee.erb +0 -5
- data/lib/assets/javascripts/unpoly/popup.coffee.erb +0 -515
- data/lib/assets/javascripts/unpoly/protocol.coffee +0 -300
- data/lib/assets/javascripts/unpoly/proxy.coffee +0 -672
- data/lib/assets/javascripts/unpoly/radio.coffee +0 -60
- data/lib/assets/javascripts/unpoly/rails.coffee +0 -24
- data/lib/assets/javascripts/unpoly/syntax.coffee.erb +0 -476
- data/lib/assets/javascripts/unpoly/toast.coffee +0 -67
- data/lib/assets/javascripts/unpoly/tooltip.coffee +0 -276
- data/lib/assets/javascripts/unpoly/util.coffee.erb +0 -1677
- data/lib/assets/javascripts/unpoly/viewport.coffee.erb +0 -830
- data/lib/assets/javascripts/unpoly-bootstrap3/feedback-ext.coffee +0 -5
- data/lib/assets/javascripts/unpoly-bootstrap3/form-ext.coffee +0 -1
- data/lib/assets/javascripts/unpoly-bootstrap3/modal-ext.coffee +0 -14
- data/lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee +0 -5
- data/lib/assets/javascripts/unpoly-bootstrap3.coffee +0 -2
- data/lib/assets/javascripts/unpoly.coffee +0 -28
- data/lib/assets/stylesheets/unpoly/close.sass +0 -2
- data/lib/assets/stylesheets/unpoly/dom.sass +0 -5
- data/lib/assets/stylesheets/unpoly/layout.sass +0 -2
- data/lib/assets/stylesheets/unpoly/link.sass +0 -2
- data/lib/assets/stylesheets/unpoly/modal.sass +0 -116
- data/lib/assets/stylesheets/unpoly/popup.sass +0 -7
- data/lib/assets/stylesheets/unpoly/toast.sass +0 -33
- data/lib/assets/stylesheets/unpoly/tooltip.sass +0 -62
- data/lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.sass +0 -27
- data/lib/assets/stylesheets/unpoly-bootstrap3.sass +0 -1
- data/lib/assets/stylesheets/unpoly.sass +0 -1
- data/lib/unpoly/rails/inspector.rb +0 -149
- data/lib/unpoly/rails/inspector_accessor.rb +0 -30
- data/package.json +0 -38
- data/spec_app/.firefox-version +0 -1
- data/spec_app/.gitignore +0 -17
- data/spec_app/.rspec +0 -2
- data/spec_app/Gemfile +0 -29
- data/spec_app/Gemfile.lock +0 -223
- data/spec_app/README.rdoc +0 -28
- data/spec_app/Rakefile +0 -6
- data/spec_app/app/assets/images/.keep +0 -0
- data/spec_app/app/assets/images/favicon.png +0 -0
- data/spec_app/app/assets/images/grid.png +0 -0
- data/spec_app/app/assets/javascripts/bootstrap_manifest.coffee +0 -6
- data/spec_app/app/assets/javascripts/integration_test.coffee +0 -5
- data/spec_app/app/assets/javascripts/jasmine_specs.coffee +0 -6
- data/spec_app/app/assets/stylesheets/_helpers.sass +0 -5
- data/spec_app/app/assets/stylesheets/bootstrap_manifest.sass +0 -2
- data/spec_app/app/assets/stylesheets/integration_test.sass +0 -88
- data/spec_app/app/assets/stylesheets/jasmine_specs.sass +0 -20
- data/spec_app/app/controllers/application_controller.rb +0 -14
- data/spec_app/app/controllers/binding_test_controller.rb +0 -51
- data/spec_app/app/controllers/boot_test_controller.rb +0 -31
- data/spec_app/app/controllers/compiler_test_controller.rb +0 -5
- data/spec_app/app/controllers/css_test_controller.rb +0 -5
- data/spec_app/app/controllers/error_test_controller.rb +0 -5
- data/spec_app/app/controllers/form_test/basics_controller.rb +0 -14
- data/spec_app/app/controllers/form_test/redirects_controller.rb +0 -17
- data/spec_app/app/controllers/form_test/uploads_controller.rb +0 -15
- data/spec_app/app/controllers/hash_test_controller.rb +0 -5
- data/spec_app/app/controllers/method_test_controller.rb +0 -16
- data/spec_app/app/controllers/motion_test_controller.rb +0 -5
- data/spec_app/app/controllers/pages_controller.rb +0 -17
- data/spec_app/app/controllers/replace_test_controller.rb +0 -5
- data/spec_app/app/controllers/reveal_test_controller.rb +0 -5
- data/spec_app/app/controllers/scroll_test_controller.rb +0 -5
- data/spec_app/app/helpers/application_helper.rb +0 -11
- data/spec_app/app/mailers/.keep +0 -0
- data/spec_app/app/models/concerns/.keep +0 -0
- data/spec_app/app/views/boot_test/defer.erb +0 -18
- data/spec_app/app/views/boot_test/module.erb +0 -18
- data/spec_app/app/views/boot_test/sync.erb +0 -17
- data/spec_app/app/views/compiler_test/timestamp.erb +0 -10
- data/spec_app/app/views/css_test/modal.erb +0 -47
- data/spec_app/app/views/css_test/modal_contents.erb +0 -5
- data/spec_app/app/views/css_test/modal_contents_wide.erb +0 -5
- data/spec_app/app/views/css_test/popup.erb +0 -81
- data/spec_app/app/views/css_test/popup_contents.erb +0 -5
- data/spec_app/app/views/css_test/tooltip.erb +0 -48
- data/spec_app/app/views/error_test/trigger.erb +0 -80
- data/spec_app/app/views/error_test/unexpected_response.erb +0 -3
- data/spec_app/app/views/form_test/basics/new.erb +0 -60
- data/spec_app/app/views/form_test/redirects/new.erb +0 -27
- data/spec_app/app/views/form_test/redirects/target.erb +0 -6
- data/spec_app/app/views/form_test/submission_result.erb +0 -30
- data/spec_app/app/views/form_test/uploads/new.erb +0 -44
- data/spec_app/app/views/hash_test/unpoly.erb +0 -30
- data/spec_app/app/views/hash_test/vanilla.erb +0 -13
- data/spec_app/app/views/layouts/integration_test.erb +0 -22
- data/spec_app/app/views/layouts/jasmine_rails/spec_runner.html.erb +0 -20
- data/spec_app/app/views/method_test/form_target.erb +0 -17
- data/spec_app/app/views/method_test/page1.erb +0 -11
- data/spec_app/app/views/method_test/page2.erb +0 -6
- data/spec_app/app/views/motion_test/animations.erb +0 -16
- data/spec_app/app/views/motion_test/transitions.erb +0 -13
- data/spec_app/app/views/pages/start.erb +0 -82
- data/spec_app/app/views/replace_test/_nav.erb +0 -6
- data/spec_app/app/views/replace_test/page1.erb +0 -14
- data/spec_app/app/views/replace_test/page2.erb +0 -14
- data/spec_app/app/views/replace_test/table.erb +0 -16
- data/spec_app/app/views/reveal_test/long1.erb +0 -17
- data/spec_app/app/views/reveal_test/long2.erb +0 -17
- data/spec_app/app/views/reveal_test/within_document_viewport.erb +0 -24
- data/spec_app/app/views/reveal_test/within_overflowing_div_viewport.erb +0 -28
- data/spec_app/app/views/scroll_test/long1.erb +0 -30
- data/spec_app/bin/bundle +0 -3
- data/spec_app/bin/rails +0 -8
- data/spec_app/bin/rake +0 -8
- data/spec_app/bin/setup +0 -29
- data/spec_app/bin/spring +0 -18
- data/spec_app/config/application.rb +0 -28
- data/spec_app/config/boot.rb +0 -3
- data/spec_app/config/database.yml +0 -25
- data/spec_app/config/environment.rb +0 -5
- data/spec_app/config/environments/development.rb +0 -41
- data/spec_app/config/environments/production.rb +0 -79
- data/spec_app/config/environments/test.rb +0 -42
- data/spec_app/config/initializers/assets.rb +0 -19
- data/spec_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec_app/config/initializers/bower_rails.rb +0 -16
- data/spec_app/config/initializers/cookies_serializer.rb +0 -3
- data/spec_app/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec_app/config/initializers/inflections.rb +0 -16
- data/spec_app/config/initializers/mime_types.rb +0 -4
- data/spec_app/config/initializers/session_store.rb +0 -3
- data/spec_app/config/initializers/wrap_parameters.rb +0 -14
- data/spec_app/config/locales/en.yml +0 -23
- data/spec_app/config/routes.rb +0 -33
- data/spec_app/config/secrets.yml +0 -22
- data/spec_app/config.ru +0 -4
- data/spec_app/db/schema.rb +0 -23
- data/spec_app/db/seeds.rb +0 -7
- data/spec_app/lib/assets/.keep +0 -0
- data/spec_app/lib/tasks/.keep +0 -0
- data/spec_app/lib/tasks/cucumber.rake +0 -65
- data/spec_app/log/.keep +0 -0
- data/spec_app/public/404.html +0 -67
- data/spec_app/public/422.html +0 -67
- data/spec_app/public/500.html +0 -66
- data/spec_app/public/favicon.ico +0 -0
- data/spec_app/public/robots.txt +0 -5
- data/spec_app/script/cucumber +0 -10
- data/spec_app/spec/controllers/binding_test_controller_spec.rb +0 -248
- data/spec_app/spec/javascripts/helpers/agent_detector.coffee +0 -20
- data/spec_app/spec/javascripts/helpers/async_sequence.js.coffee +0 -103
- data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +0 -21
- data/spec_app/spec/javascripts/helpers/enable_logging.js.coffee +0 -2
- data/spec_app/spec/javascripts/helpers/fixture.js.coffee +0 -25
- data/spec_app/spec/javascripts/helpers/index.js.coffee +0 -1
- data/spec_app/spec/javascripts/helpers/jquery_no_conflict.js +0 -1
- data/spec_app/spec/javascripts/helpers/knife.js.coffee +0 -69
- data/spec_app/spec/javascripts/helpers/last_request.js.coffee +0 -25
- data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/mock_clock.js.coffee +0 -2
- data/spec_app/spec/javascripts/helpers/parse_form_data.js.coffee +0 -24
- data/spec_app/spec/javascripts/helpers/promise_state.js +0 -18
- data/spec_app/spec/javascripts/helpers/protect_jasmine_runner.coffee +0 -12
- data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/reset_history.js.coffee +0 -23
- data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +0 -2
- data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +0 -25
- data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +0 -5
- data/spec_app/spec/javascripts/helpers/show_lib_versions.coffee +0 -12
- data/spec_app/spec/javascripts/helpers/spec_util.coffee +0 -47
- data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_array.coffee +0 -5
- data/spec_app/spec/javascripts/helpers/to_be_attached.coffee +0 -9
- data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_detached.coffee +0 -9
- data/spec_app/spec/javascripts/helpers/to_be_element.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_error.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_hidden.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_jquery.js.coffee +0 -5
- data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_be_scrolled_to.coffee +0 -11
- data/spec_app/spec/javascripts/helpers/to_be_visible.js.coffee +0 -9
- data/spec_app/spec/javascripts/helpers/to_contain.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +0 -11
- data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_equal_node_list.coffee +0 -7
- data/spec_app/spec/javascripts/helpers/to_equal_via_is_equal.js.coffee +0 -7
- data/spec_app/spec/javascripts/helpers/to_have_class.js.coffee +0 -10
- data/spec_app/spec/javascripts/helpers/to_have_descendant.js.coffee +0 -10
- data/spec_app/spec/javascripts/helpers/to_have_length.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_have_opacity.coffee +0 -15
- data/spec_app/spec/javascripts/helpers/to_have_own_property.js.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +0 -16
- data/spec_app/spec/javascripts/helpers/to_have_text.js.coffee +0 -9
- data/spec_app/spec/javascripts/helpers/to_have_unhandled_rejections.coffee +0 -18
- data/spec_app/spec/javascripts/helpers/to_match_list.coffee +0 -14
- data/spec_app/spec/javascripts/helpers/to_match_selector.coffee +0 -8
- data/spec_app/spec/javascripts/helpers/to_match_text.js.coffee +0 -13
- data/spec_app/spec/javascripts/helpers/to_match_url.coffee +0 -14
- data/spec_app/spec/javascripts/helpers/trigger.js.coffee +0 -200
- data/spec_app/spec/javascripts/helpers/wait_until_dom_ready.js.coffee +0 -5
- data/spec_app/spec/javascripts/support/jasmine.yml +0 -51
- data/spec_app/spec/javascripts/up/browser_spec.js.coffee +0 -150
- data/spec_app/spec/javascripts/up/classes/cache_spec.js.coffee +0 -82
- data/spec_app/spec/javascripts/up/classes/config_spec.coffee +0 -24
- data/spec_app/spec/javascripts/up/classes/divertible_chain_spec.coffee +0 -45
- data/spec_app/spec/javascripts/up/classes/focus_tracker_spec.coffee +0 -34
- data/spec_app/spec/javascripts/up/classes/params_spec.coffee +0 -557
- data/spec_app/spec/javascripts/up/classes/request_spec.coffee +0 -50
- data/spec_app/spec/javascripts/up/classes/scroll_motion_spec.js.coffee +0 -51
- data/spec_app/spec/javascripts/up/classes/store/memory_spec.js.coffee +0 -70
- data/spec_app/spec/javascripts/up/classes/store/session_spec.js.coffee +0 -114
- data/spec_app/spec/javascripts/up/element_spec.coffee +0 -897
- data/spec_app/spec/javascripts/up/event_spec.js.coffee +0 -530
- data/spec_app/spec/javascripts/up/feedback_spec.js.coffee +0 -401
- data/spec_app/spec/javascripts/up/form_spec.js.coffee +0 -1527
- data/spec_app/spec/javascripts/up/fragment_spec.js.coffee +0 -2624
- data/spec_app/spec/javascripts/up/history_spec.js.coffee +0 -340
- data/spec_app/spec/javascripts/up/jquery_spec.js.coffee +0 -4
- data/spec_app/spec/javascripts/up/legacy_spec.js.coffee +0 -27
- data/spec_app/spec/javascripts/up/link_spec.js.coffee +0 -1098
- data/spec_app/spec/javascripts/up/log_spec.js.coffee +0 -119
- data/spec_app/spec/javascripts/up/modal_spec.js.coffee +0 -939
- data/spec_app/spec/javascripts/up/motion_spec.js.coffee +0 -582
- data/spec_app/spec/javascripts/up/popup_spec.js.coffee +0 -508
- data/spec_app/spec/javascripts/up/protocol_spec.js.coffee +0 -39
- data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +0 -1145
- data/spec_app/spec/javascripts/up/radio_spec.js.coffee +0 -212
- data/spec_app/spec/javascripts/up/rails_spec.js.coffee +0 -118
- data/spec_app/spec/javascripts/up/spec_spec.js.coffee +0 -9
- data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +0 -304
- data/spec_app/spec/javascripts/up/toast_spec.js.coffee +0 -37
- data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +0 -163
- data/spec_app/spec/javascripts/up/util_spec.js.coffee +0 -1434
- data/spec_app/spec/javascripts/up/viewport_spec.js.coffee +0 -655
- data/spec_app/spec/spec_helper.rb +0 -62
- data/spec_app/test/controllers/.keep +0 -0
- data/spec_app/test/fixtures/.keep +0 -0
- data/spec_app/test/helpers/.keep +0 -0
- data/spec_app/test/integration/.keep +0 -0
- data/spec_app/test/mailers/.keep +0 -0
- data/spec_app/test/models/.keep +0 -0
- data/spec_app/test/test_helper.rb +0 -10
- data/spec_app/vendor/asset-libs/es6-promise-4.1.6/es6-promise.auto.js +0 -1159
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.bower.json +0 -43
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.gitignore +0 -6
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.npmignore +0 -10
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs +0 -6
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml +0 -56
- data/spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js +0 -790
- data/spec_app/vendor/assets/.keep +0 -0
- data/unpoly-rails.gemspec +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e123573f3acd82d20b58f2d570d1766ef956876772a4d088677d8e64651c80e0
|
4
|
+
data.tar.gz: 441e8457e27007896df9dbcc35a2c3bacfff0877ba52f970aa746747874c49f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a48ef185c79706b17187d8c6e95f343d91dc6ac4a21a15c205db8328e10f1448a1d68f39f8e1d3465dec6c0e2894c7df870dbd37cdf6e9f91d7fe918a2d6ea14
|
7
|
+
data.tar.gz: a0f8d07f0273e049beac32d1648e71250d3915cb9a68313b8ee1e69ae1b503af64835a91a80114e6230b82e2189da834c2373847bd36b0e4fc73eb4f269b81bd
|
data/.yardopts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--markup=markdown --main=README_RAILS.md
|
1
|
+
--markup=markdown --main=README_RAILS.md --exclude .
|
data/CHANGELOG.md
CHANGED
@@ -6,38 +6,57 @@ Changes to this project will be documented in this file.
|
|
6
6
|
You may browse a formatted and hyperlinked version of this file at <https://unpoly.com/changes>.
|
7
7
|
|
8
8
|
|
9
|
-
|
9
|
+
2.0.0
|
10
10
|
-----
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
-
|
15
|
-
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
-
|
24
|
-
-
|
12
|
+
- up.network.config.slowDelay is now 800 (up from 300)
|
13
|
+
- up.network.config.cacheSize is now 50 (down from 70)
|
14
|
+
- up.network.isBusy() / isIdle() takes preload events into account
|
15
|
+
- up.observe() callback may return a promise that will prevent callback calls while running
|
16
|
+
- `[aria-label]` attributes are no longer used to build a target selector
|
17
|
+
- Options removed form modals: up-width, up-max-width, up-height. Use up-size or up-class.
|
18
|
+
- Failed responses now change the URL
|
19
|
+
- TODO ...
|
20
|
+
- up.history.config.restoreScroll has been removed.
|
21
|
+
- Feedback works when a layer has no history
|
22
|
+
- Layer A11Y
|
23
|
+
- inert
|
24
|
+
- aria-hidden
|
25
|
+
- focus new
|
26
|
+
- focus return on close
|
27
|
+
- up.nav sets [aria-current]
|
28
|
+
- up.history.config.enabled
|
29
|
+
- Requests sent by Unpoly no longer have a `X-Requested-With: XMLHttpRequest` header.
|
30
|
+
If you need that old behavior: up.on('up:request:load', function(event) { event.request.headers['X-Requested-With'] = 'XMLHttpRequest' })
|
31
|
+
- up.network.config.requestMetaKeys
|
32
|
+
- up:link:follow is no longer sent when preloading, up:link:preload still is
|
33
|
+
- Preserve focus when validating forms; Add { focus } option for fragment update
|
34
|
+
- up.Request.prototype.isFatalError() has been removed without replacement. Network errors now reject with an error, and not a response.
|
35
|
+
- [up-main], [up-main=overlay], [up-main=modal]
|
36
|
+
- parseSelector can parse attribute selectors with prefix, infix, suffix, space-separated, dash-separated
|
37
|
+
- up.validate() may now be called with a form element
|
38
|
+
- validating emits up:form:validate instead of up:form:submit
|
39
|
+
- When a compiler throws an error, other compilers will now run anyway
|
40
|
+
- When a destructor throws an error, other destructors will now run anyway
|
41
|
+
- Bootstrap integration
|
42
|
+
- Minimal: active, nav, navbar
|
43
|
+
- Bootstrap modal styles are no longer used for Unpoly modals
|
44
|
+
- Now supports three major Bootstrap versions:
|
45
|
+
- unpoly-bootstrap3.js
|
46
|
+
- unpoly-bootstrap4.js
|
47
|
+
- unpoly-bootstrap5.js
|
48
|
+
- Hungry elements no longer get the transition by default. You need to set [up-transition] on the hungry element.
|
49
|
+
- Rejections are now shown if the log is enabled
|
50
|
+
- up.on() can passive: true
|
51
|
+
- Preloads on touchstart and mousedown
|
52
|
+
- Digit groups separators (`60_000`) are a stage 3 ES6 feature and also supported in number attributes.
|
25
53
|
|
26
54
|
|
27
55
|
1.0.0
|
28
56
|
-----
|
29
57
|
|
30
|
-
|
31
|
-
|
32
|
-
There are only three changes from 0.62.1:
|
33
|
-
|
34
|
-
- Fix a bug where `up.util.escapeHTML()` would not escape single quotes.
|
35
|
-
- Unpoly will no longer wait a JavaScript execution task to boot after `DOMContentLoaded`. This may improve the stability of test suites that previously interacted with the page too soon.
|
36
|
-
- You may now disable the Unpoly banner in the development console with `up.log.config.banner = false`. (change by @hfjallemark).
|
58
|
+
- TODO
|
37
59
|
|
38
|
-
This is the last release of the 0.x API line. We're tracking its code in the [`1.x-stable`](https://github.com/unpoly/unpoly/tree/1.x-stable), but expect little to no changes in the future.
|
39
|
-
|
40
|
-
The next release will be [Unpoly 2](https://triskweline.de/unpoly2-slides). It will include major (but mostly backwards compatible) renovations to its API, unlocking many use cases that were not possible with Unpoly 1.
|
41
60
|
|
42
61
|
|
43
62
|
0.62.1
|
@@ -107,7 +126,6 @@ This release also exposes some convenience functions and selectors:
|
|
107
126
|
[`input[up-validate]`](/input-up-validate) was supported.
|
108
127
|
|
109
128
|
|
110
|
-
|
111
129
|
0.60.3
|
112
130
|
------
|
113
131
|
|
data/README.md
CHANGED
@@ -33,7 +33,6 @@ Install dependencies for tests:
|
|
33
33
|
|
34
34
|
- Install Ruby 2.3.8
|
35
35
|
- Install Bundler by running `gem install bundler`
|
36
|
-
- Install Node.js (required for building the library)
|
37
36
|
- `cd` into `spec_app`
|
38
37
|
- Install dependencies by running `bundle install`
|
39
38
|
|
@@ -51,9 +50,11 @@ To run RSpec tests for the `unpoly-rails` gem:
|
|
51
50
|
|
52
51
|
### Making a new release
|
53
52
|
|
54
|
-
We are currently feeding
|
53
|
+
We are currently feeding four release channels:
|
55
54
|
|
55
|
+
- Manual download from GitHub
|
56
56
|
- npm
|
57
|
+
- Bower (which is based on Git and version tags)
|
57
58
|
- Rubygems (as the `unpoly-rails` gem)
|
58
59
|
|
59
60
|
We always release to all channel simultaneously.
|
@@ -63,7 +64,6 @@ To prepare a new version:
|
|
63
64
|
1. Edit `lib/unpoly/rails/version.rb` and bump the version number. Use [semantic versioning](http://semver.org/).
|
64
65
|
2. Add an entry to `CHANGELOG.md`
|
65
66
|
3. Commit and push the version bump and `CHANGELOG.md`
|
66
|
-
4. Merge the relevant `CHANGEOG.md` entries to the `master` branch (since [unpoly.com](https://unpoly.com) builds from there)
|
67
67
|
|
68
68
|
Now we can release a new version. **This requires your to be logged into Rubygems and npm**:
|
69
69
|
|
@@ -78,9 +78,8 @@ If you have done this process a few times and know what you're doing, you can ca
|
|
78
78
|
|
79
79
|
After you have published all release channels, remember to:
|
80
80
|
|
81
|
-
1.
|
82
|
-
2.
|
83
|
-
3. Send a message to the [E-mail group](https://groups.google.com/group/unpoly) with the title "Unpoly X.Y.Z released". You can copy the relevant CHANGELOG part from [here](http://localhost:4567/changes_google_groups).
|
81
|
+
1. Update [unpoly.com](https://unpoly.com/) so users see the new version, CDN link and CHANGELOG.
|
82
|
+
2. Send a message to the [E-mail group](https://groups.google.com/group/unpoly) with the title "Unpoly X.Y.Z released". You can copy the relevant CHANGELOG part from [here](http://localhost:4567/changes_google_groups).
|
84
83
|
|
85
84
|
|
86
85
|
Credits
|
data/README_RAILS.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
unpoly-rails: Ruby on Rails bindings for Unpoly
|
2
2
|
===============================================
|
3
3
|
|
4
|
-
[Unpoly](https://unpoly.com) is a backend-agnostic [unobtrusive JavaScript](https://en.wikipedia.org/wiki/Unobtrusive_JavaScript) framework. `unpoly-rails` gives
|
4
|
+
[Unpoly](https://unpoly.com) is a backend-agnostic [unobtrusive JavaScript](https://en.wikipedia.org/wiki/Unobtrusive_JavaScript) framework. `unpoly-rails` gives a [Ruby on Rails](http://rubyonrails.org/) application some convenience methods to communicate with an Unpoly-enhanced frontend.
|
5
|
+
|
6
|
+
Note that the bindings provided by `unpoly-rails` are entirely optional. You are free to use Unpoly with Rails without the `unpoly-rails` gem.
|
5
7
|
|
6
8
|
|
7
9
|
Features
|
@@ -11,28 +13,78 @@ The methods documented below are available in all controllers, views and helpers
|
|
11
13
|
|
12
14
|
### Detecting a fragment update
|
13
15
|
|
14
|
-
|
16
|
+
Use `up?` to test whether the current request is a [fragment update](https://unpoly.com/up.link):
|
15
17
|
|
16
18
|
```ruby
|
17
|
-
up?
|
19
|
+
up? # => true or false
|
18
20
|
```
|
19
21
|
|
20
|
-
To retrieve the CSS selector that is being [updated](https://unpoly.com/up.link)
|
22
|
+
To retrieve the CSS selector that is being [updated](https://unpoly.com/up.link), use `up.target`:
|
21
23
|
|
22
24
|
```ruby
|
23
|
-
up.target
|
25
|
+
up.target # => '.content'
|
24
26
|
```
|
25
27
|
|
26
|
-
The Unpoly frontend will expect an HTML response containing an element that matches this selector.
|
27
|
-
|
28
|
-
Server-side code is free to optimize its response by only returning HTML that matches this selector:
|
28
|
+
The Unpoly frontend will expect an HTML response containing an element that matches this selector. Your Rails app is free to render a smaller response that only contains HTML matching the targeted selector. You may call `up.target?` to test whether a given CSS selector has been targeted:
|
29
29
|
|
30
30
|
```ruby
|
31
31
|
if up.target?('.sidebar')
|
32
|
-
|
32
|
+
render('expensive_sidebar_partial')
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
Fragment updates may target different selectors for successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
|
37
|
+
Use these methods to inspect the target for failed responses:
|
38
|
+
|
39
|
+
- `up.fail_target`: The CSS selector targeted for a failed response
|
40
|
+
- `up.fail_target?(selector)`: Whether the given selector is targeted for a failed response
|
41
|
+
- `up.any_target?(selector)`: Whether the given selector is targeted for either a successful or a failed response
|
42
|
+
|
43
|
+
### Changing the render target
|
44
|
+
|
45
|
+
The server may instruct the frontend to render a different target by assigning a new CSS selector to the `up.target` property:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
unless signed_in?
|
49
|
+
up.target = 'body'
|
50
|
+
render 'sign_in'
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
The frontend will use the server-provided target for both successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
|
55
|
+
|
56
|
+
|
57
|
+
### Rendering nothing
|
58
|
+
|
59
|
+
Sometimes it's OK to render nothing, e.g. when you know that the current layer is to be closed.
|
60
|
+
|
61
|
+
In this case you may call `up.render_nothing`:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
class NotesController < ApplicationController
|
65
|
+
def create
|
66
|
+
@note = Note.new(note_params)
|
67
|
+
if @note.save
|
68
|
+
if up.layer.overlay?
|
69
|
+
up.accept_layer(@note.id)
|
70
|
+
up.render_nothing
|
71
|
+
else
|
72
|
+
redirect_to @note
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
33
76
|
end
|
34
77
|
```
|
35
78
|
|
79
|
+
This will render a 200 OK response with a header `X-Up-Target: none` and an empty body.
|
80
|
+
|
81
|
+
You may render nothing with a different HTTP status by passing a `:status` option:
|
82
|
+
|
83
|
+
```
|
84
|
+
up.render_nothing(status: :bad_request)
|
85
|
+
```
|
86
|
+
|
87
|
+
|
36
88
|
### Pushing a document title to the client
|
37
89
|
|
38
90
|
To force Unpoly to set a document title when processing the response:
|
@@ -43,6 +95,36 @@ up.title = 'Title from server'
|
|
43
95
|
|
44
96
|
This is useful when you skip rendering the `<head>` in an Unpoly request.
|
45
97
|
|
98
|
+
### Emitting events on the frontend
|
99
|
+
|
100
|
+
You may use `up.emit` to emit an event on the `document` after the
|
101
|
+
fragment was updated:
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
class UsersController < ApplicationController
|
105
|
+
|
106
|
+
def show
|
107
|
+
@user = User.find(params[:id])
|
108
|
+
up.emit('user:selected', id: @user.id)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
```
|
113
|
+
|
114
|
+
If you wish to emit an event on the current [layer](https://unpoly.com/up.layer)
|
115
|
+
instead of the `document`, use `up.layer.emit`:
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
class UsersController < ApplicationController
|
119
|
+
|
120
|
+
def show
|
121
|
+
@user = User.find(params[:id])
|
122
|
+
up.layer.emit('user:selected', id: @user.id)
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
46
128
|
### Detecting an Unpoly form validation
|
47
129
|
|
48
130
|
To test whether the current request is a [form validation](https://unpoly.com/input-up-validate):
|
@@ -72,12 +154,211 @@ class UsersController < ApplicationController
|
|
72
154
|
end
|
73
155
|
```
|
74
156
|
|
157
|
+
### Detecting a fragment reload
|
158
|
+
|
159
|
+
To test whether the current request was made to [reload](https://unpoly.com/up.reload) or [poll](https://unpoly.com/up-poll) a fragment:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
up.reload?
|
163
|
+
```
|
164
|
+
|
165
|
+
You also retrieve the time when the fragment being reloaded was previously inserted into the DOM:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
up.reload_from_time # returns a Time object
|
169
|
+
```
|
170
|
+
|
171
|
+
The server can compare the time from the request with the time of the last data update.
|
172
|
+
If no more recent data is available, the server can [render nothing](/X-Up-Target):
|
173
|
+
|
174
|
+
```ruby
|
175
|
+
class MessagesController < ApplicationController
|
176
|
+
|
177
|
+
def index
|
178
|
+
if up.reload_from_time == current_user.last_message_at
|
179
|
+
up.render_nothing
|
180
|
+
else
|
181
|
+
@messages = current_user.messages.order(time: :desc).to_a
|
182
|
+
render 'index'
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
```
|
188
|
+
|
189
|
+
Only rendering when needed saves <b>CPU time</b> on your server, which spends most of its response time rendering HTML.
|
190
|
+
|
191
|
+
This also reduces the <b>bandwidth cost</b> for a request/response exchange to **~1 KB**.
|
192
|
+
|
193
|
+
|
194
|
+
### Working with context
|
195
|
+
|
196
|
+
Calling `up.context` will return the [context](https://unpoly.com/up.context) object of the targeted layer.
|
197
|
+
|
198
|
+
The context is a JSON object shared between the frontend and the server.
|
199
|
+
It persists for a series of Unpoly navigation, but is cleared when the user makes a full page load.
|
200
|
+
Different Unpoly [layers](https://unpoly.com/up.layer) will usually have separate context objects,
|
201
|
+
although layers may choose to share their context scope.
|
202
|
+
|
203
|
+
You may read and change the context object. Changes will be sent to the frontend with your response.
|
204
|
+
|
205
|
+
```ruby
|
206
|
+
class GamesController < ApplicationController
|
207
|
+
|
208
|
+
def restart
|
209
|
+
up.context[:lives] = 3
|
210
|
+
render 'stage1'
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
```
|
215
|
+
|
216
|
+
Keys can be accessed as either strings or symbols:
|
217
|
+
|
218
|
+
```ruby
|
219
|
+
puts "You have " + up.layer.context[:lives] + " lives left"
|
220
|
+
puts "You have " + up.layer.context['lives'] + " lives left"
|
221
|
+
````
|
222
|
+
|
223
|
+
You may delete a key from the frontend by calling `up.context.delete`:
|
224
|
+
|
225
|
+
```ruby
|
226
|
+
up.context.delete(:foo)
|
227
|
+
````
|
228
|
+
|
229
|
+
You may replace the entire context by calling `up.context.replace`:
|
230
|
+
|
231
|
+
```
|
232
|
+
context_from_file = JSON.parse(File.read('context.json))
|
233
|
+
up.context.replace(context_from_file)
|
234
|
+
```
|
235
|
+
|
236
|
+
`up.context` is an alias for `up.layer.context`.
|
237
|
+
|
238
|
+
|
239
|
+
### Accessing the targeted layer
|
240
|
+
|
241
|
+
Use the methods below to interact with the [layer](/up.layer) of the fragment being targeted.
|
242
|
+
|
243
|
+
Note that fragment updates may target different layers for successful (HTTP status `200 OK`) and failed (status `4xx` or `5xx`) responses.
|
244
|
+
|
245
|
+
#### `up.layer.mode`
|
246
|
+
|
247
|
+
Returns the [mode](https://unpoly.com/up.layer.mode) of the targeted layer (e.g. `"root"` or `"modal"`).
|
248
|
+
|
249
|
+
#### `up.layer.root?`
|
250
|
+
|
251
|
+
Returns whether the targeted layer is the root layer.
|
252
|
+
|
253
|
+
#### `up.layer.overlay?`
|
254
|
+
|
255
|
+
Returns whether the targeted layer is an overlay (not the root layer).
|
256
|
+
|
257
|
+
#### `up.layer.context`
|
258
|
+
|
259
|
+
Returns the [context](https://unpoly.com/up.context) object of the targeted layer.
|
260
|
+
See documentation for `up.context`, which is an alias for `up.layer.context`.
|
261
|
+
|
262
|
+
#### `up.layer.accept(value)`
|
263
|
+
|
264
|
+
[Accepts](https://unpoly.com/up.layer.accept) the current overlay.
|
265
|
+
|
266
|
+
Does nothing if the root layer is targeted.
|
267
|
+
|
268
|
+
Note that Rails expects every controller action to render or redirect.
|
269
|
+
Your action should either call `up.render_nothing` or respond with `text/html` content matching the requested target.
|
270
|
+
|
271
|
+
#### `up.layer.dismiss(value)`
|
272
|
+
|
273
|
+
[Dismisses](https://unpoly.com/up.layer.dismisses) the current overlay.
|
274
|
+
|
275
|
+
Does nothing if the root layer is targeted.
|
276
|
+
|
277
|
+
Note that Rails expects every controller action to render or redirect.
|
278
|
+
Your action should either call `up.render_nothing` or respond with `text/html` content matching the requested target.
|
279
|
+
|
280
|
+
#### `up.layer.emit(type, options)`
|
281
|
+
|
282
|
+
[Emits an event](https://unpoly.com/up.layer.emit) on the targeted layer.
|
283
|
+
|
284
|
+
#### `up.fail_layer.mode`
|
285
|
+
|
286
|
+
Returns the [mode](https://unpoly.com/up.layer.mode) of the layer targeted for a failed response.
|
287
|
+
|
288
|
+
#### `up.fail_layer.root?`
|
289
|
+
|
290
|
+
Returns whether the layer targeted for a failed response is the root layer.
|
291
|
+
|
292
|
+
#### `up.fail_layer.overlay?`
|
293
|
+
|
294
|
+
Returns whether the layer targeted for a failed response is an overlay.
|
295
|
+
|
296
|
+
#### `up.fail_layer.context`
|
297
|
+
|
298
|
+
Returns the [context](https://unpoly.com/up.context) object of the layer targeted for a failed response.
|
299
|
+
|
300
|
+
|
301
|
+
### Managing the client-side cache
|
302
|
+
|
303
|
+
The Unpoly frontend caches server responses for a few minutes, making requests to these URLs return instantly.
|
304
|
+
Only `GET` requests are cached. The *entire* cache is cleared after every non-`GET` request (like `POST` or `PUT`).
|
305
|
+
|
306
|
+
The server may override these defaults. For instance, the server can clear Unpoly's client-side response cache, even for `GET` requests:
|
307
|
+
|
308
|
+
```ruby
|
309
|
+
up.cache.clear
|
310
|
+
```
|
311
|
+
|
312
|
+
You may also clear a single page:
|
313
|
+
|
314
|
+
```ruby
|
315
|
+
up.cache.clear('/notes/1034')
|
316
|
+
```
|
317
|
+
|
318
|
+
You may also clear all entries matching a URL pattern:
|
319
|
+
|
320
|
+
```ruby
|
321
|
+
up.cache.clear('/notes/*')
|
322
|
+
```
|
323
|
+
|
324
|
+
You may also prevent cache clearing for an unsafe request:
|
325
|
+
|
326
|
+
```ruby
|
327
|
+
up.cache.keep
|
328
|
+
```
|
329
|
+
|
330
|
+
Here is an longer example where the server uses careful cache management to keep as much of the client-side cache as possible:
|
331
|
+
|
332
|
+
```ruby
|
333
|
+
def NotesController < ApplicationController
|
334
|
+
|
335
|
+
def create
|
336
|
+
@note = Note.create!(params[:note].permit(...))
|
337
|
+
if @note.save
|
338
|
+
up.cache.clear('/notes/*') # Only clear affected entries
|
339
|
+
redirect_to(@note)
|
340
|
+
else
|
341
|
+
up.cache.keep # Keep the cache because we haven't saved
|
342
|
+
render 'new'
|
343
|
+
end
|
344
|
+
end
|
345
|
+
...
|
346
|
+
end
|
347
|
+
```
|
348
|
+
|
349
|
+
|
350
|
+
### Preserving Unpoly-related request information through redirects
|
351
|
+
|
352
|
+
`unpoly-rails` patches [`redirect_to`](https://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to)
|
353
|
+
so Unpoly-related request information (like the CSS selector being targeted for a fragment
|
354
|
+
update) will be preserved for the action you redirect to.
|
355
|
+
|
356
|
+
|
75
357
|
### Automatic redirect detection
|
76
358
|
|
77
|
-
`unpoly-rails` installs a `before_action` into all controllers which echoes the request's URL as a response header `X-Up-Location` and the request's
|
359
|
+
`unpoly-rails` installs a [`before_action`](https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-before_action) into all controllers which echoes the request's URL as a response header `X-Up-Location` and the request's
|
78
360
|
HTTP method as `X-Up-Method`.
|
79
361
|
|
80
|
-
The Unpoly frontend [requires these headers to detect redirects](https://unpoly.com/form-up-target#redirects), which are otherwise undetectable for an AJAX client.
|
81
362
|
|
82
363
|
### Automatic method detection for initial page load
|
83
364
|
|
@@ -93,7 +374,7 @@ What you still need to do manually
|
|
93
374
|
|
94
375
|
### Failed form submissions must return a non-200 status code
|
95
376
|
|
96
|
-
Unpoly lets you submit forms via AJAX by using the [`form[up-
|
377
|
+
Unpoly lets you submit forms via AJAX by using the [`form[up-follow]`](https://unpoly.com/form-up-submit) selector or [`up.submit()`](https://unpoly.com/up.submit) function.
|
97
378
|
|
98
379
|
For Unpoly to be able to detect a failed form submission,
|
99
380
|
the form must be re-rendered with a non-200 HTTP status code.
|
@@ -122,11 +403,11 @@ Development
|
|
122
403
|
|
123
404
|
### Before you make a PR
|
124
405
|
|
125
|
-
Before you
|
406
|
+
Before you create a pull request, please have some discussion about the proposed change by [opening an issue on GitHub](https://github.com/unpoly/unpoly/issues/new).
|
126
407
|
|
127
408
|
### Running tests
|
128
409
|
|
129
|
-
- Install Ruby 2.
|
410
|
+
- Install Ruby 2.3.8
|
130
411
|
- Install Bundler by running `gem install bundler`
|
131
412
|
- `cd` into `spec_app`
|
132
413
|
- Install dependencies by running `bundle install`
|
data/dist/unpoly-bootstrap3.css
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
border-bottom: none; }
|
11
|
-
.up-modal[up-flavor='drawer'][up-position='left'] .up-modal-content {
|
12
|
-
border-left: none; }
|
13
|
-
.up-modal[up-flavor='drawer'][up-position='right'] .up-modal-content {
|
14
|
-
border-right: none; }
|
1
|
+
up-modal .container,
|
2
|
+
up-modal .container-fluid,
|
3
|
+
up-drawer .container,
|
4
|
+
up-drawer .container-fluid,
|
5
|
+
up-popup .container,
|
6
|
+
up-popup .container-fluid {
|
7
|
+
padding-left: 0;
|
8
|
+
padding-right: 0;
|
9
|
+
max-width: none; }
|
data/dist/unpoly-bootstrap3.js
CHANGED
@@ -1,30 +1,16 @@
|
|
1
1
|
(function() {
|
2
2
|
up.feedback.config.currentClasses.push('active');
|
3
3
|
|
4
|
-
up.feedback.config.
|
4
|
+
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
5
5
|
|
6
|
-
|
7
|
-
(function() {
|
8
|
-
up.form.config.validateTargets.unshift('.form-group:has(&)');
|
9
|
-
|
10
|
-
}).call(this);
|
11
|
-
(function() {
|
12
|
-
up.modal.config.template = "<div class=\"up-modal\">\n <div class=\"up-modal-backdrop\"></div>\n <div class=\"up-modal-viewport\">\n <div class=\"up-modal-dialog modal-dialog\">\n <div class=\"up-modal-content modal-content\"></div>\n </div>\n </div>\n</div>";
|
6
|
+
up.form.config.validateTargets.unshift('.form-group:has(:origin)');
|
13
7
|
|
14
|
-
}).call(this);
|
15
|
-
(function() {
|
16
8
|
up.viewport.config.fixedTop.push('.navbar-fixed-top');
|
17
9
|
|
18
10
|
up.viewport.config.fixedBottom.push('.navbar-fixed-bottom');
|
19
11
|
|
20
|
-
up.viewport.config.anchoredRight.push('.navbar-fixed-top');
|
21
|
-
|
22
|
-
up.viewport.config.anchoredRight.push('.navbar-fixed-bottom');
|
23
|
-
|
24
|
-
up.viewport.config.anchoredRight.push('.footer');
|
25
|
-
|
26
|
-
}).call(this);
|
27
|
-
(function() {
|
12
|
+
up.viewport.config.anchoredRight.push('.navbar-fixed-top', '.navbar-fixed-bottom');
|
28
13
|
|
14
|
+
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg)?(-\d+)?$/);
|
29
15
|
|
30
16
|
}).call(this);
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
up-modal .container,up-modal .container-fluid,up-drawer .container,up-drawer .container-fluid,up-popup .container,up-popup .container-fluid{padding-left:0;padding-right:0;max-width:none}
|
@@ -1 +1 @@
|
|
1
|
-
(function(){up.feedback.config.currentClasses.push("active"),up.feedback.config.
|
1
|
+
(function(){up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.form.config.validateTargets.unshift(".form-group:has(:origin)"),up.viewport.config.fixedTop.push(".navbar-fixed-top"),up.viewport.config.fixedBottom.push(".navbar-fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar-fixed-top",".navbar-fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg)?(-\d+)?$/)}).call(this);
|
@@ -0,0 +1,16 @@
|
|
1
|
+
(function() {
|
2
|
+
up.feedback.config.currentClasses.push('active');
|
3
|
+
|
4
|
+
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
5
|
+
|
6
|
+
up.form.config.validateTargets.unshift('.form-group:has(:origin)');
|
7
|
+
|
8
|
+
up.viewport.config.fixedTop.push('.navbar.fixed-top');
|
9
|
+
|
10
|
+
up.viewport.config.fixedBottom.push('.navbar.fixed-bottom');
|
11
|
+
|
12
|
+
up.viewport.config.anchoredRight.push('.navbar.fixed-top', '.navbar.fixed-bottom');
|
13
|
+
|
14
|
+
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg|-xl)?(-\d+)?$/, /^[mp][tblrxy]?-\d+$/);
|
15
|
+
|
16
|
+
}).call(this);
|
@@ -0,0 +1 @@
|
|
1
|
+
up-modal .container,up-modal .container-fluid,up-drawer .container,up-drawer .container-fluid,up-popup .container,up-popup .container-fluid{padding-left:0;padding-right:0;max-width:none}
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(){up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.form.config.validateTargets.unshift(".form-group:has(:origin)"),up.viewport.config.fixedTop.push(".navbar.fixed-top"),up.viewport.config.fixedBottom.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl)?(-\d+)?$/,/^[mp][tblrxy]?-\d+$/)}).call(this);
|
@@ -0,0 +1,14 @@
|
|
1
|
+
(function() {
|
2
|
+
up.feedback.config.currentClasses.push('active');
|
3
|
+
|
4
|
+
up.feedback.config.navSelectors.push('.nav', '.navbar');
|
5
|
+
|
6
|
+
up.viewport.config.fixedTop.push('.navbar.fixed-top');
|
7
|
+
|
8
|
+
up.viewport.config.fixedBottom.push('.navbar.fixed-bottom');
|
9
|
+
|
10
|
+
up.viewport.config.anchoredRight.push('.navbar.fixed-top', '.navbar.fixed-bottom');
|
11
|
+
|
12
|
+
up.fragment.config.badTargetClasses.push('row', /^col(-xs|-sm|-md|-lg|-xl|-xxl)?(-\d+)?$/, /^[mp][tbsexy]?-\d+$/);
|
13
|
+
|
14
|
+
}).call(this);
|
@@ -0,0 +1 @@
|
|
1
|
+
up-modal .container,up-modal .container-fluid,up-drawer .container,up-drawer .container-fluid,up-popup .container,up-popup .container-fluid{padding-left:0;padding-right:0;max-width:none}
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(){up.feedback.config.currentClasses.push("active"),up.feedback.config.navSelectors.push(".nav",".navbar"),up.viewport.config.fixedTop.push(".navbar.fixed-top"),up.viewport.config.fixedBottom.push(".navbar.fixed-bottom"),up.viewport.config.anchoredRight.push(".navbar.fixed-top",".navbar.fixed-bottom"),up.fragment.config.badTargetClasses.push("row",/^col(-xs|-sm|-md|-lg|-xl|-xxl)?(-\d+)?$/,/^[mp][tbsexy]?-\d+$/)}).call(this);
|