unpoly-rails 0.57.0 → 0.60.0
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/CHANGELOG.md +393 -1
- data/Gemfile.lock +5 -2
- data/README.md +1 -1
- data/README_RAILS.md +1 -1
- data/Rakefile +10 -1
- data/design/es6.js +32 -0
- data/design/ie11.txt +9 -0
- data/design/measure_jquery/element_list.js +41 -0
- data/design/measure_jquery/up.on_vs_addEventListener.js +56 -0
- data/design/todo_jquery.txt +13 -0
- data/dist/unpoly-bootstrap3.js +8 -8
- data/dist/unpoly-bootstrap3.min.js +1 -1
- data/dist/unpoly.css +22 -20
- data/dist/unpoly.js +6990 -5336
- data/dist/unpoly.min.css +1 -1
- data/dist/unpoly.min.js +4 -4
- data/lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee +5 -0
- data/lib/assets/javascripts/unpoly.coffee +8 -6
- data/lib/assets/javascripts/unpoly/browser.coffee.erb +23 -118
- data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +36 -0
- data/lib/assets/javascripts/unpoly/classes/cache.coffee +4 -4
- data/lib/assets/javascripts/unpoly/classes/compile_pass.coffee +45 -39
- data/lib/assets/javascripts/unpoly/classes/config.coffee +9 -0
- data/lib/assets/javascripts/unpoly/classes/css_transition.coffee +18 -27
- data/lib/assets/javascripts/unpoly/classes/divertible_chain.coffee +39 -0
- data/lib/assets/javascripts/unpoly/classes/event_listener.coffee +116 -0
- data/lib/assets/javascripts/unpoly/classes/extract_cascade.coffee +8 -8
- data/lib/assets/javascripts/unpoly/classes/extract_plan.coffee +19 -19
- data/lib/assets/javascripts/unpoly/classes/field_observer.coffee +54 -31
- data/lib/assets/javascripts/unpoly/classes/{focus_tracker.coffee → focus_follower.coffee} +2 -2
- data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +25 -25
- data/lib/assets/javascripts/unpoly/classes/html_parser.coffee +4 -11
- data/lib/assets/javascripts/unpoly/classes/motion_controller.coffee +157 -0
- data/lib/assets/javascripts/unpoly/classes/params.coffee.erb +525 -0
- data/lib/assets/javascripts/unpoly/classes/record.coffee +8 -2
- data/lib/assets/javascripts/unpoly/classes/rect.js +21 -0
- data/lib/assets/javascripts/unpoly/classes/request.coffee +41 -35
- data/lib/assets/javascripts/unpoly/classes/response.coffee +7 -3
- data/lib/assets/javascripts/unpoly/classes/reveal_motion.coffee +102 -0
- data/lib/assets/javascripts/unpoly/classes/scroll_motion.coffee +67 -0
- data/lib/assets/javascripts/unpoly/classes/selector.coffee +60 -0
- data/lib/assets/javascripts/unpoly/classes/tether.coffee +105 -0
- data/lib/assets/javascripts/unpoly/classes/url_set.coffee +12 -7
- data/lib/assets/javascripts/unpoly/element.coffee.erb +1126 -0
- data/lib/assets/javascripts/unpoly/event.coffee.erb +437 -0
- data/lib/assets/javascripts/unpoly/feedback.coffee +73 -94
- data/lib/assets/javascripts/unpoly/form.coffee.erb +188 -181
- data/lib/assets/javascripts/unpoly/{dom.coffee.erb → fragment.coffee.erb} +250 -283
- data/lib/assets/javascripts/unpoly/framework.coffee +67 -0
- data/lib/assets/javascripts/unpoly/history.coffee +29 -28
- data/lib/assets/javascripts/unpoly/legacy.coffee +60 -0
- data/lib/assets/javascripts/unpoly/link.coffee.erb +127 -119
- data/lib/assets/javascripts/unpoly/log.coffee +99 -19
- data/lib/assets/javascripts/unpoly/modal.coffee.erb +95 -118
- data/lib/assets/javascripts/unpoly/motion.coffee.erb +158 -138
- data/lib/assets/javascripts/unpoly/namespace.coffee.erb +0 -5
- data/lib/assets/javascripts/unpoly/popup.coffee.erb +119 -102
- data/lib/assets/javascripts/unpoly/protocol.coffee +11 -15
- data/lib/assets/javascripts/unpoly/proxy.coffee +62 -65
- data/lib/assets/javascripts/unpoly/radio.coffee +3 -5
- data/lib/assets/javascripts/unpoly/rails.coffee +8 -9
- data/lib/assets/javascripts/unpoly/syntax.coffee.erb +173 -125
- data/lib/assets/javascripts/unpoly/toast.coffee +25 -24
- data/lib/assets/javascripts/unpoly/tooltip.coffee +89 -79
- data/lib/assets/javascripts/unpoly/util.coffee.erb +579 -1074
- data/lib/assets/javascripts/unpoly/{layout.coffee.erb → viewport.coffee.erb} +334 -264
- data/lib/assets/stylesheets/unpoly/dom.sass +1 -1
- data/lib/assets/stylesheets/unpoly/layout.sass +2 -0
- data/lib/assets/stylesheets/unpoly/popup.sass +0 -1
- data/lib/assets/stylesheets/unpoly/tooltip.sass +17 -12
- data/lib/unpoly/rails/version.rb +1 -1
- data/package.json +1 -2
- data/spec_app/Gemfile +2 -1
- data/spec_app/Gemfile.lock +38 -27
- data/spec_app/app/assets/javascripts/integration_test.coffee +1 -0
- data/spec_app/app/assets/javascripts/jasmine_specs.coffee +1 -2
- data/spec_app/app/assets/stylesheets/integration_test.sass +14 -1
- data/spec_app/app/controllers/scroll_test_controller.rb +5 -0
- data/spec_app/app/views/css_test/modal.erb +6 -6
- data/spec_app/app/views/css_test/popup.erb +44 -18
- data/spec_app/app/views/css_test/tooltip.erb +23 -4
- data/spec_app/app/views/error_test/trigger.erb +1 -1
- data/spec_app/app/views/form_test/basics/new.erb +1 -3
- data/spec_app/app/views/pages/start.erb +9 -2
- data/spec_app/app/views/reveal_test/long1.erb +1 -1
- data/spec_app/app/views/reveal_test/long2.erb +1 -1
- data/spec_app/app/views/reveal_test/within_document_viewport.erb +24 -0
- data/spec_app/app/views/reveal_test/within_overflowing_div_viewport.erb +28 -0
- data/spec_app/app/views/scroll_test/long1.erb +30 -0
- data/spec_app/config/routes.rb +1 -0
- data/spec_app/spec/javascripts/helpers/agent_detector.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/async_sequence.js.coffee +1 -0
- data/spec_app/spec/javascripts/helpers/browser_switches.js.coffee +17 -5
- data/spec_app/spec/javascripts/helpers/enable_logging.js.coffee +1 -1
- data/spec_app/spec/javascripts/helpers/fixture.js.coffee +25 -0
- data/spec_app/spec/javascripts/helpers/jquery_no_conflict.js +1 -0
- data/spec_app/spec/javascripts/helpers/last_request.js.coffee +1 -0
- data/spec_app/spec/javascripts/helpers/mock_ajax.js.coffee +1 -1
- data/spec_app/spec/javascripts/helpers/parse_form_data.js.coffee +2 -2
- data/spec_app/spec/javascripts/helpers/protect_jasmine_runner.coffee +4 -1
- data/spec_app/spec/javascripts/helpers/remove_body_margin.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/reset_history.js.coffee +2 -1
- data/spec_app/spec/javascripts/helpers/reset_knife.js.coffee +2 -2
- data/spec_app/spec/javascripts/helpers/reset_up.js.coffee +18 -11
- data/spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/show_lib_versions.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/spec_util.coffee +47 -0
- data/spec_app/spec/javascripts/helpers/to_be_around.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_array.coffee +5 -0
- data/spec_app/spec/javascripts/helpers/to_be_attached.coffee +6 -2
- data/spec_app/spec/javascripts/helpers/to_be_blank.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_detached.coffee +6 -2
- data/spec_app/spec/javascripts/helpers/to_be_element.js.coffee +8 -0
- data/spec_app/spec/javascripts/helpers/to_be_error.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_given.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_hidden.js.coffee +8 -0
- data/spec_app/spec/javascripts/helpers/to_be_missing.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_present.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_scrolled_to.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_be_visible.js.coffee +9 -0
- data/spec_app/spec/javascripts/helpers/to_contain.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_end_with.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee +1 -2
- data/spec_app/spec/javascripts/helpers/to_equal_node_list.coffee +7 -0
- data/spec_app/spec/javascripts/helpers/to_equal_via_is_equal.js.coffee +7 -0
- data/spec_app/spec/javascripts/helpers/to_have_class.js.coffee +10 -0
- data/spec_app/spec/javascripts/helpers/to_have_descendant.js.coffee +10 -0
- data/spec_app/spec/javascripts/helpers/to_have_length.js.coffee +8 -0
- data/spec_app/spec/javascripts/helpers/to_have_opacity.coffee +7 -3
- data/spec_app/spec/javascripts/helpers/to_have_own_property.js.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee +1 -0
- data/spec_app/spec/javascripts/helpers/to_have_text.js.coffee +9 -0
- data/spec_app/spec/javascripts/helpers/to_have_unhandled_rejections.coffee +0 -21
- data/spec_app/spec/javascripts/helpers/to_match_list.coffee +14 -0
- data/spec_app/spec/javascripts/helpers/to_match_selector.coffee +3 -0
- data/spec_app/spec/javascripts/helpers/to_match_text.js.coffee +4 -1
- data/spec_app/spec/javascripts/helpers/to_match_url.coffee +1 -0
- data/spec_app/spec/javascripts/helpers/trigger.js.coffee +91 -7
- data/spec_app/spec/javascripts/helpers/wait_until_dom_ready.js.coffee +3 -0
- data/spec_app/spec/javascripts/up/browser_spec.js.coffee +23 -90
- data/spec_app/spec/javascripts/up/classes/cache_spec.js.coffee +3 -0
- data/spec_app/spec/javascripts/up/classes/config_spec.coffee +24 -0
- data/spec_app/spec/javascripts/up/classes/divertible_chain_spec.coffee +45 -0
- data/spec_app/spec/javascripts/up/classes/focus_tracker_spec.coffee +5 -2
- data/spec_app/spec/javascripts/up/classes/params_spec.coffee +557 -0
- data/spec_app/spec/javascripts/up/classes/request_spec.coffee +7 -4
- data/spec_app/spec/javascripts/up/classes/scroll_motion_spec.js.coffee +51 -0
- data/spec_app/spec/javascripts/up/classes/store/memory_spec.js.coffee +3 -0
- data/spec_app/spec/javascripts/up/classes/store/session_spec.js.coffee +3 -2
- data/spec_app/spec/javascripts/up/element_spec.coffee +897 -0
- data/spec_app/spec/javascripts/up/event_spec.js.coffee +496 -0
- data/spec_app/spec/javascripts/up/feedback_spec.js.coffee +69 -48
- data/spec_app/spec/javascripts/up/form_spec.js.coffee +252 -194
- data/spec_app/spec/javascripts/up/{dom_spec.js.coffee → fragment_spec.js.coffee} +381 -388
- data/spec_app/spec/javascripts/up/history_spec.js.coffee +21 -19
- data/spec_app/spec/javascripts/up/jquery_spec.js.coffee +4 -0
- data/spec_app/spec/javascripts/up/legacy_spec.js.coffee +27 -0
- data/spec_app/spec/javascripts/up/link_spec.js.coffee +163 -160
- data/spec_app/spec/javascripts/up/log_spec.js.coffee +85 -12
- data/spec_app/spec/javascripts/up/modal_spec.js.coffee +141 -123
- data/spec_app/spec/javascripts/up/motion_spec.js.coffee +117 -113
- data/spec_app/spec/javascripts/up/popup_spec.js.coffee +60 -77
- data/spec_app/spec/javascripts/up/protocol_spec.js.coffee +1 -0
- data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +85 -78
- data/spec_app/spec/javascripts/up/radio_spec.js.coffee +29 -22
- data/spec_app/spec/javascripts/up/rails_spec.js.coffee +14 -13
- data/spec_app/spec/javascripts/up/spec_spec.js.coffee +9 -0
- data/spec_app/spec/javascripts/up/syntax_spec.js.coffee +96 -66
- data/spec_app/spec/javascripts/up/toast_spec.js.coffee +37 -0
- data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +31 -47
- data/spec_app/spec/javascripts/up/util_spec.js.coffee +725 -562
- data/spec_app/spec/javascripts/up/{layout_spec.js.coffee → viewport_spec.js.coffee} +175 -149
- metadata +57 -19
- data/lib/assets/javascripts/unpoly-bootstrap3/layout-ext.coffee +0 -5
- data/lib/assets/javascripts/unpoly/bus.coffee.erb +0 -518
- data/lib/assets/javascripts/unpoly/classes/extract_step.coffee +0 -4
- data/lib/assets/javascripts/unpoly/classes/motion_tracker.coffee +0 -125
- data/lib/assets/javascripts/unpoly/params.coffee.erb +0 -522
- data/spec_app/spec/javascripts/helpers/append_fixture.js.coffee +0 -8
- data/spec_app/spec/javascripts/up/bus_spec.js.coffee +0 -210
- data/spec_app/spec/javascripts/up/namespace_spec.js.coffee +0 -9
- data/spec_app/spec/javascripts/up/params_spec.coffee +0 -768
- data/spec_app/vendor/asset-libs/jasmine-fixture-1.3.4/jasmine-fixture.js +0 -433
- data/spec_app/vendor/asset-libs/jasmine-jquery-2.1.1/.bower.json +0 -26
- data/spec_app/vendor/asset-libs/jasmine-jquery-2.1.1/jasmine-jquery.js +0 -838
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unpoly-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.60.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -74,12 +74,17 @@ files:
|
|
74
74
|
- design/design.txt
|
75
75
|
- design/draft.html.erb
|
76
76
|
- design/draft.rb
|
77
|
+
- design/es6.js
|
77
78
|
- design/ghost-debugging.txt
|
78
79
|
- design/homepage.txt
|
80
|
+
- design/ie11.txt
|
79
81
|
- design/measure_import_node.js
|
82
|
+
- design/measure_jquery/element_list.js
|
83
|
+
- design/measure_jquery/up.on_vs_addEventListener.js
|
80
84
|
- design/positioning.txt
|
81
85
|
- design/rename.txt
|
82
86
|
- design/test_rejected_promise.txt
|
87
|
+
- design/todo_jquery.txt
|
83
88
|
- design/unpoly errors.txt
|
84
89
|
- dist/unpoly-bootstrap3.css
|
85
90
|
- dist/unpoly-bootstrap3.js
|
@@ -92,40 +97,50 @@ files:
|
|
92
97
|
- lib/assets/javascripts/unpoly-bootstrap3.coffee
|
93
98
|
- lib/assets/javascripts/unpoly-bootstrap3/feedback-ext.coffee
|
94
99
|
- lib/assets/javascripts/unpoly-bootstrap3/form-ext.coffee
|
95
|
-
- lib/assets/javascripts/unpoly-bootstrap3/layout-ext.coffee
|
96
100
|
- lib/assets/javascripts/unpoly-bootstrap3/modal-ext.coffee
|
101
|
+
- lib/assets/javascripts/unpoly-bootstrap3/viewport-ext.coffee
|
97
102
|
- lib/assets/javascripts/unpoly.coffee
|
98
103
|
- lib/assets/javascripts/unpoly/browser.coffee.erb
|
99
|
-
- lib/assets/javascripts/unpoly/
|
104
|
+
- lib/assets/javascripts/unpoly/classes/body_shifter.coffee
|
100
105
|
- lib/assets/javascripts/unpoly/classes/cache.coffee
|
101
106
|
- lib/assets/javascripts/unpoly/classes/compile_pass.coffee
|
107
|
+
- lib/assets/javascripts/unpoly/classes/config.coffee
|
102
108
|
- lib/assets/javascripts/unpoly/classes/css_transition.coffee
|
109
|
+
- lib/assets/javascripts/unpoly/classes/divertible_chain.coffee
|
110
|
+
- lib/assets/javascripts/unpoly/classes/event_listener.coffee
|
103
111
|
- lib/assets/javascripts/unpoly/classes/extract_cascade.coffee
|
104
112
|
- lib/assets/javascripts/unpoly/classes/extract_plan.coffee
|
105
|
-
- lib/assets/javascripts/unpoly/classes/extract_step.coffee
|
106
113
|
- lib/assets/javascripts/unpoly/classes/field_observer.coffee
|
107
|
-
- lib/assets/javascripts/unpoly/classes/
|
114
|
+
- lib/assets/javascripts/unpoly/classes/focus_follower.coffee
|
108
115
|
- lib/assets/javascripts/unpoly/classes/follow_variant.coffee
|
109
116
|
- lib/assets/javascripts/unpoly/classes/html_parser.coffee
|
110
|
-
- lib/assets/javascripts/unpoly/classes/
|
117
|
+
- lib/assets/javascripts/unpoly/classes/motion_controller.coffee
|
118
|
+
- lib/assets/javascripts/unpoly/classes/params.coffee.erb
|
111
119
|
- lib/assets/javascripts/unpoly/classes/record.coffee
|
120
|
+
- lib/assets/javascripts/unpoly/classes/rect.js
|
112
121
|
- lib/assets/javascripts/unpoly/classes/request.coffee
|
113
122
|
- lib/assets/javascripts/unpoly/classes/response.coffee
|
123
|
+
- lib/assets/javascripts/unpoly/classes/reveal_motion.coffee
|
124
|
+
- lib/assets/javascripts/unpoly/classes/scroll_motion.coffee
|
125
|
+
- lib/assets/javascripts/unpoly/classes/selector.coffee
|
114
126
|
- lib/assets/javascripts/unpoly/classes/store/memory.coffee
|
115
127
|
- lib/assets/javascripts/unpoly/classes/store/session.coffee
|
128
|
+
- lib/assets/javascripts/unpoly/classes/tether.coffee
|
116
129
|
- lib/assets/javascripts/unpoly/classes/url_set.coffee
|
117
130
|
- lib/assets/javascripts/unpoly/cookie.coffee
|
118
|
-
- lib/assets/javascripts/unpoly/
|
131
|
+
- lib/assets/javascripts/unpoly/element.coffee.erb
|
132
|
+
- lib/assets/javascripts/unpoly/event.coffee.erb
|
119
133
|
- lib/assets/javascripts/unpoly/feedback.coffee
|
120
134
|
- lib/assets/javascripts/unpoly/form.coffee.erb
|
135
|
+
- lib/assets/javascripts/unpoly/fragment.coffee.erb
|
136
|
+
- lib/assets/javascripts/unpoly/framework.coffee
|
121
137
|
- lib/assets/javascripts/unpoly/history.coffee
|
122
|
-
- lib/assets/javascripts/unpoly/
|
138
|
+
- lib/assets/javascripts/unpoly/legacy.coffee
|
123
139
|
- lib/assets/javascripts/unpoly/link.coffee.erb
|
124
140
|
- lib/assets/javascripts/unpoly/log.coffee
|
125
141
|
- lib/assets/javascripts/unpoly/modal.coffee.erb
|
126
142
|
- lib/assets/javascripts/unpoly/motion.coffee.erb
|
127
143
|
- lib/assets/javascripts/unpoly/namespace.coffee.erb
|
128
|
-
- lib/assets/javascripts/unpoly/params.coffee.erb
|
129
144
|
- lib/assets/javascripts/unpoly/popup.coffee.erb
|
130
145
|
- lib/assets/javascripts/unpoly/protocol.coffee
|
131
146
|
- lib/assets/javascripts/unpoly/proxy.coffee
|
@@ -135,11 +150,13 @@ files:
|
|
135
150
|
- lib/assets/javascripts/unpoly/toast.coffee
|
136
151
|
- lib/assets/javascripts/unpoly/tooltip.coffee
|
137
152
|
- lib/assets/javascripts/unpoly/util.coffee.erb
|
153
|
+
- lib/assets/javascripts/unpoly/viewport.coffee.erb
|
138
154
|
- lib/assets/stylesheets/unpoly-bootstrap3.sass
|
139
155
|
- lib/assets/stylesheets/unpoly-bootstrap3/modal-ext.sass
|
140
156
|
- lib/assets/stylesheets/unpoly.sass
|
141
157
|
- lib/assets/stylesheets/unpoly/close.sass
|
142
158
|
- lib/assets/stylesheets/unpoly/dom.sass
|
159
|
+
- lib/assets/stylesheets/unpoly/layout.sass
|
143
160
|
- lib/assets/stylesheets/unpoly/link.sass
|
144
161
|
- lib/assets/stylesheets/unpoly/modal.sass
|
145
162
|
- lib/assets/stylesheets/unpoly/popup.sass
|
@@ -183,6 +200,7 @@ files:
|
|
183
200
|
- spec_app/app/controllers/pages_controller.rb
|
184
201
|
- spec_app/app/controllers/replace_test_controller.rb
|
185
202
|
- spec_app/app/controllers/reveal_test_controller.rb
|
203
|
+
- spec_app/app/controllers/scroll_test_controller.rb
|
186
204
|
- spec_app/app/helpers/application_helper.rb
|
187
205
|
- spec_app/app/mailers/.keep
|
188
206
|
- spec_app/app/models/concerns/.keep
|
@@ -214,6 +232,9 @@ files:
|
|
214
232
|
- spec_app/app/views/replace_test/page2.erb
|
215
233
|
- spec_app/app/views/reveal_test/long1.erb
|
216
234
|
- spec_app/app/views/reveal_test/long2.erb
|
235
|
+
- spec_app/app/views/reveal_test/within_document_viewport.erb
|
236
|
+
- spec_app/app/views/reveal_test/within_overflowing_div_viewport.erb
|
237
|
+
- spec_app/app/views/scroll_test/long1.erb
|
217
238
|
- spec_app/bin/bundle
|
218
239
|
- spec_app/bin/rails
|
219
240
|
- spec_app/bin/rake
|
@@ -253,11 +274,12 @@ files:
|
|
253
274
|
- spec_app/script/cucumber
|
254
275
|
- spec_app/spec/controllers/binding_test_controller_spec.rb
|
255
276
|
- spec_app/spec/javascripts/helpers/agent_detector.coffee
|
256
|
-
- spec_app/spec/javascripts/helpers/append_fixture.js.coffee
|
257
277
|
- spec_app/spec/javascripts/helpers/async_sequence.js.coffee
|
258
278
|
- spec_app/spec/javascripts/helpers/browser_switches.js.coffee
|
259
279
|
- spec_app/spec/javascripts/helpers/enable_logging.js.coffee
|
280
|
+
- spec_app/spec/javascripts/helpers/fixture.js.coffee
|
260
281
|
- spec_app/spec/javascripts/helpers/index.js.coffee
|
282
|
+
- spec_app/spec/javascripts/helpers/jquery_no_conflict.js
|
261
283
|
- spec_app/spec/javascripts/helpers/knife.js.coffee
|
262
284
|
- spec_app/spec/javascripts/helpers/last_request.js.coffee
|
263
285
|
- spec_app/spec/javascripts/helpers/mock_ajax.js.coffee
|
@@ -271,23 +293,35 @@ files:
|
|
271
293
|
- spec_app/spec/javascripts/helpers/reset_up.js.coffee
|
272
294
|
- spec_app/spec/javascripts/helpers/restore_body_scroll.js.coffee
|
273
295
|
- spec_app/spec/javascripts/helpers/show_lib_versions.coffee
|
296
|
+
- spec_app/spec/javascripts/helpers/spec_util.coffee
|
274
297
|
- spec_app/spec/javascripts/helpers/to_be_around.js.coffee
|
298
|
+
- spec_app/spec/javascripts/helpers/to_be_array.coffee
|
275
299
|
- spec_app/spec/javascripts/helpers/to_be_attached.coffee
|
276
300
|
- spec_app/spec/javascripts/helpers/to_be_blank.js.coffee
|
277
301
|
- spec_app/spec/javascripts/helpers/to_be_detached.coffee
|
302
|
+
- spec_app/spec/javascripts/helpers/to_be_element.js.coffee
|
278
303
|
- spec_app/spec/javascripts/helpers/to_be_error.coffee
|
279
304
|
- spec_app/spec/javascripts/helpers/to_be_given.js.coffee
|
305
|
+
- spec_app/spec/javascripts/helpers/to_be_hidden.js.coffee
|
280
306
|
- spec_app/spec/javascripts/helpers/to_be_jquery.js.coffee
|
281
307
|
- spec_app/spec/javascripts/helpers/to_be_missing.js.coffee
|
282
308
|
- spec_app/spec/javascripts/helpers/to_be_present.js.coffee
|
283
309
|
- spec_app/spec/javascripts/helpers/to_be_scrolled_to.coffee
|
310
|
+
- spec_app/spec/javascripts/helpers/to_be_visible.js.coffee
|
284
311
|
- spec_app/spec/javascripts/helpers/to_contain.js.coffee
|
285
312
|
- spec_app/spec/javascripts/helpers/to_end_with.js.coffee
|
286
313
|
- spec_app/spec/javascripts/helpers/to_equal_jquery.js.coffee
|
314
|
+
- spec_app/spec/javascripts/helpers/to_equal_node_list.coffee
|
315
|
+
- spec_app/spec/javascripts/helpers/to_equal_via_is_equal.js.coffee
|
316
|
+
- spec_app/spec/javascripts/helpers/to_have_class.js.coffee
|
317
|
+
- spec_app/spec/javascripts/helpers/to_have_descendant.js.coffee
|
318
|
+
- spec_app/spec/javascripts/helpers/to_have_length.js.coffee
|
287
319
|
- spec_app/spec/javascripts/helpers/to_have_opacity.coffee
|
288
320
|
- spec_app/spec/javascripts/helpers/to_have_own_property.js.coffee
|
289
321
|
- spec_app/spec/javascripts/helpers/to_have_request_method.js.coffee
|
322
|
+
- spec_app/spec/javascripts/helpers/to_have_text.js.coffee
|
290
323
|
- spec_app/spec/javascripts/helpers/to_have_unhandled_rejections.coffee
|
324
|
+
- spec_app/spec/javascripts/helpers/to_match_list.coffee
|
291
325
|
- spec_app/spec/javascripts/helpers/to_match_selector.coffee
|
292
326
|
- spec_app/spec/javascripts/helpers/to_match_text.js.coffee
|
293
327
|
- spec_app/spec/javascripts/helpers/to_match_url.coffee
|
@@ -295,31 +329,38 @@ files:
|
|
295
329
|
- spec_app/spec/javascripts/helpers/wait_until_dom_ready.js.coffee
|
296
330
|
- spec_app/spec/javascripts/support/jasmine.yml
|
297
331
|
- spec_app/spec/javascripts/up/browser_spec.js.coffee
|
298
|
-
- spec_app/spec/javascripts/up/bus_spec.js.coffee
|
299
332
|
- spec_app/spec/javascripts/up/classes/cache_spec.js.coffee
|
333
|
+
- spec_app/spec/javascripts/up/classes/config_spec.coffee
|
334
|
+
- spec_app/spec/javascripts/up/classes/divertible_chain_spec.coffee
|
300
335
|
- spec_app/spec/javascripts/up/classes/focus_tracker_spec.coffee
|
336
|
+
- spec_app/spec/javascripts/up/classes/params_spec.coffee
|
301
337
|
- spec_app/spec/javascripts/up/classes/request_spec.coffee
|
338
|
+
- spec_app/spec/javascripts/up/classes/scroll_motion_spec.js.coffee
|
302
339
|
- spec_app/spec/javascripts/up/classes/store/memory_spec.js.coffee
|
303
340
|
- spec_app/spec/javascripts/up/classes/store/session_spec.js.coffee
|
304
|
-
- spec_app/spec/javascripts/up/
|
341
|
+
- spec_app/spec/javascripts/up/element_spec.coffee
|
342
|
+
- spec_app/spec/javascripts/up/event_spec.js.coffee
|
305
343
|
- spec_app/spec/javascripts/up/feedback_spec.js.coffee
|
306
344
|
- spec_app/spec/javascripts/up/form_spec.js.coffee
|
345
|
+
- spec_app/spec/javascripts/up/fragment_spec.js.coffee
|
307
346
|
- spec_app/spec/javascripts/up/history_spec.js.coffee
|
308
|
-
- spec_app/spec/javascripts/up/
|
347
|
+
- spec_app/spec/javascripts/up/jquery_spec.js.coffee
|
348
|
+
- spec_app/spec/javascripts/up/legacy_spec.js.coffee
|
309
349
|
- spec_app/spec/javascripts/up/link_spec.js.coffee
|
310
350
|
- spec_app/spec/javascripts/up/log_spec.js.coffee
|
311
351
|
- spec_app/spec/javascripts/up/modal_spec.js.coffee
|
312
352
|
- spec_app/spec/javascripts/up/motion_spec.js.coffee
|
313
|
-
- spec_app/spec/javascripts/up/namespace_spec.js.coffee
|
314
|
-
- spec_app/spec/javascripts/up/params_spec.coffee
|
315
353
|
- spec_app/spec/javascripts/up/popup_spec.js.coffee
|
316
354
|
- spec_app/spec/javascripts/up/protocol_spec.js.coffee
|
317
355
|
- spec_app/spec/javascripts/up/proxy_spec.js.coffee
|
318
356
|
- spec_app/spec/javascripts/up/radio_spec.js.coffee
|
319
357
|
- spec_app/spec/javascripts/up/rails_spec.js.coffee
|
358
|
+
- spec_app/spec/javascripts/up/spec_spec.js.coffee
|
320
359
|
- spec_app/spec/javascripts/up/syntax_spec.js.coffee
|
360
|
+
- spec_app/spec/javascripts/up/toast_spec.js.coffee
|
321
361
|
- spec_app/spec/javascripts/up/tooltip_spec.js.coffee
|
322
362
|
- spec_app/spec/javascripts/up/util_spec.js.coffee
|
363
|
+
- spec_app/spec/javascripts/up/viewport_spec.js.coffee
|
323
364
|
- spec_app/spec/spec_helper.rb
|
324
365
|
- spec_app/test/controllers/.keep
|
325
366
|
- spec_app/test/fixtures/.keep
|
@@ -335,9 +376,6 @@ files:
|
|
335
376
|
- spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.pairs
|
336
377
|
- spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/.travis.yml
|
337
378
|
- spec_app/vendor/asset-libs/jasmine-ajax-3.3.1/jasmine-ajax.js
|
338
|
-
- spec_app/vendor/asset-libs/jasmine-fixture-1.3.4/jasmine-fixture.js
|
339
|
-
- spec_app/vendor/asset-libs/jasmine-jquery-2.1.1/.bower.json
|
340
|
-
- spec_app/vendor/asset-libs/jasmine-jquery-2.1.1/jasmine-jquery.js
|
341
379
|
- spec_app/vendor/assets/.keep
|
342
380
|
- unpoly-rails.gemspec
|
343
381
|
homepage: ''
|
@@ -1,5 +0,0 @@
|
|
1
|
-
up.layout.config.fixedTop.push('.navbar-fixed-top')
|
2
|
-
up.layout.config.fixedBottom.push('.navbar-fixed-bottom')
|
3
|
-
up.layout.config.anchoredRight.push('.navbar-fixed-top')
|
4
|
-
up.layout.config.anchoredRight.push('.navbar-fixed-bottom')
|
5
|
-
up.layout.config.anchoredRight.push('.footer')
|
@@ -1,518 +0,0 @@
|
|
1
|
-
###**
|
2
|
-
Events
|
3
|
-
======
|
4
|
-
|
5
|
-
Most Unpoly interactions emit DOM events that are prefixed with `up:`.
|
6
|
-
|
7
|
-
$(document).on('up:modal:opened', function(event) {
|
8
|
-
console.log('A new modal has just opened!');
|
9
|
-
});
|
10
|
-
|
11
|
-
Events often have both present ([`up:modal:open`](/up:modal:open))
|
12
|
-
and past forms ([`up:modal:opened`](/up:modal:opened)).
|
13
|
-
|
14
|
-
|
15
|
-
\#\#\# Preventing events
|
16
|
-
|
17
|
-
You can prevent most present form events by calling `preventDefault()`:
|
18
|
-
|
19
|
-
$(document).on('up:modal:open', function(event) {
|
20
|
-
if (event.url == '/evil') {
|
21
|
-
// Prevent the modal from opening
|
22
|
-
event.preventDefault();
|
23
|
-
}
|
24
|
-
});
|
25
|
-
|
26
|
-
|
27
|
-
\#\#\# A better way to bind event listeners
|
28
|
-
|
29
|
-
Instead of using jQuery to bind an event handler to `document`, you can also
|
30
|
-
use the more convenient [`up.on()`](/up.on):
|
31
|
-
|
32
|
-
up.on('click', 'button', function(event, $button) {
|
33
|
-
// $button is a jQuery collection containing
|
34
|
-
// the clicked <button> element
|
35
|
-
});
|
36
|
-
|
37
|
-
This improves jQuery's [`on`](http://api.jquery.com/on/) in multiple ways:
|
38
|
-
|
39
|
-
- Event listeners on [unsupported browsers](/up.browser.isSupported) are silently discarded,
|
40
|
-
leaving you with an application without JavaScript. This is typically preferable to
|
41
|
-
a soup of randomly broken JavaScript in ancient browsers.
|
42
|
-
- A jQuery object with the target element is automatically passed to the event handler
|
43
|
-
as a second argument. You no longer need to write `$(this)` in the handler function.
|
44
|
-
- You use an [`up-data`](/up-data) attribute to [attach structured data](/up.on#attaching-structured-data)
|
45
|
-
to observed elements.
|
46
|
-
|
47
|
-
@class up.bus
|
48
|
-
###
|
49
|
-
up.bus = (($) ->
|
50
|
-
|
51
|
-
u = up.util
|
52
|
-
|
53
|
-
# We remember which argument lists have been passed to `up.on()`
|
54
|
-
# so we can clean out the listener registry between tests.
|
55
|
-
liveUpDescriptions = {}
|
56
|
-
nextUpDescriptionNumber = 0
|
57
|
-
|
58
|
-
# A hash mapping oldEventName => newEventName
|
59
|
-
renamedEvents = {}
|
60
|
-
|
61
|
-
###**
|
62
|
-
Convert an Unpoly style listener (second argument is the event target
|
63
|
-
as a jQuery collection) to a vanilla jQuery listener
|
64
|
-
|
65
|
-
@function upListenerToJqueryListener
|
66
|
-
@internal
|
67
|
-
###
|
68
|
-
upListenerToJqueryListener = (upListener) ->
|
69
|
-
(event) ->
|
70
|
-
$me = event.$element || $(this)
|
71
|
-
args = [event, $me]
|
72
|
-
|
73
|
-
# Do not retrieve and parse [up-data] unless the listener function
|
74
|
-
# expects a third argument. Note that we must pass data for an argument
|
75
|
-
# count of 0, since then the function might take varargs.
|
76
|
-
expectedArgCount = upListener.length
|
77
|
-
unless expectedArgCount == 1 || expectedArgCount == 2
|
78
|
-
args.push(up.syntax.data($me))
|
79
|
-
|
80
|
-
upListener.apply($me.get(0), args)
|
81
|
-
|
82
|
-
###**
|
83
|
-
Converts an argument list for `up.on()` to an argument list for `jQuery.on`.
|
84
|
-
This involves rewriting the listener signature in the last argument slot.
|
85
|
-
|
86
|
-
@function upDescriptionToJqueryDescription
|
87
|
-
@internal
|
88
|
-
###
|
89
|
-
upDescriptionToJqueryDescription = (upDescription, isNew) ->
|
90
|
-
jqueryDescription = u.copy(upDescription)
|
91
|
-
|
92
|
-
# Prefer to rename events in the copied jQuery description instead of
|
93
|
-
# changing the original up description.
|
94
|
-
fixRenamedEvents(jqueryDescription)
|
95
|
-
|
96
|
-
# We remove the listener function from the end of the description.
|
97
|
-
# We will re-push it to the description at the end.
|
98
|
-
upListener = jqueryDescription.pop()
|
99
|
-
jqueryListener = undefined
|
100
|
-
if isNew
|
101
|
-
jqueryListener = upListenerToJqueryListener(upListener)
|
102
|
-
upListener._asJqueryListener = jqueryListener
|
103
|
-
if upListener._descriptionNumber
|
104
|
-
up.fail('up.on(): The callback %o cannot be registered more than once')
|
105
|
-
upListener._descriptionNumber = ++nextUpDescriptionNumber
|
106
|
-
else
|
107
|
-
jqueryListener = upListener._asJqueryListener
|
108
|
-
jqueryListener or up.fail('up.off(): The callback %o was never registered through up.on()', upListener)
|
109
|
-
jqueryDescription.push(jqueryListener)
|
110
|
-
jqueryDescription
|
111
|
-
|
112
|
-
fixRenamedEvents = (description) ->
|
113
|
-
events = u.splitValues(description[0])
|
114
|
-
events = u.map events, (event) ->
|
115
|
-
if newEvent = renamedEvents[event]
|
116
|
-
up.warn("Deprecated: #{event} has been renamed to #{newEvent}")
|
117
|
-
newEvent
|
118
|
-
else
|
119
|
-
event
|
120
|
-
description[0] = events.join(' ')
|
121
|
-
|
122
|
-
###**
|
123
|
-
Listens to an event on `document`.
|
124
|
-
|
125
|
-
The given event listener which will be executed whenever the
|
126
|
-
given event is [triggered](/up.emit) on the given selector:
|
127
|
-
|
128
|
-
up.on('click', '.button', function(event, $element) {
|
129
|
-
console.log("Someone clicked the button %o", $element);
|
130
|
-
});
|
131
|
-
|
132
|
-
This is roughly equivalent to binding an event listener to `document`:
|
133
|
-
|
134
|
-
$(document).on('click', '.button', function(event) {
|
135
|
-
console.log("Someone clicked the button %o", $(this));
|
136
|
-
});
|
137
|
-
|
138
|
-
Other than jQuery, Unpoly will silently discard event listeners
|
139
|
-
on [unsupported browsers](/up.browser.isSupported).
|
140
|
-
|
141
|
-
\#\#\# Attaching structured data
|
142
|
-
|
143
|
-
In case you want to attach structured data to the event you're observing,
|
144
|
-
you can serialize the data to JSON and put it into an `[up-data]` attribute:
|
145
|
-
|
146
|
-
<span class='person' up-data='{ "age": 18, "name": "Bob" }'>Bob</span>
|
147
|
-
<span class='person' up-data='{ "age": 22, "name": "Jim" }'>Jim</span>
|
148
|
-
|
149
|
-
The JSON will parsed and handed to your event handler as a third argument:
|
150
|
-
|
151
|
-
up.on('click', '.person', function(event, $element, data) {
|
152
|
-
console.log("This is %o who is %o years old", data.name, data.age);
|
153
|
-
});
|
154
|
-
|
155
|
-
\#\#\# Unbinding an event listener
|
156
|
-
|
157
|
-
`up.on()` returns a function that unbinds the event listeners when called:
|
158
|
-
|
159
|
-
// Define the listener
|
160
|
-
var listener = function() { ... };
|
161
|
-
|
162
|
-
// Binding the listener returns an unbind function
|
163
|
-
unbind = up.on('click', listener);
|
164
|
-
|
165
|
-
// Unbind the listener
|
166
|
-
unbind()
|
167
|
-
|
168
|
-
There is also a function [`up.off()`](/up.off) which you can use for the same purpose:
|
169
|
-
|
170
|
-
// Define the listener
|
171
|
-
var listener = function() { ... };
|
172
|
-
|
173
|
-
// Bind the listener
|
174
|
-
up.on('click', listener);
|
175
|
-
|
176
|
-
// Unbind the listener
|
177
|
-
up.off('click', listener)
|
178
|
-
|
179
|
-
\#\#\# Migrating jQuery event handlers to `up.on()`
|
180
|
-
|
181
|
-
Within the event handler, Unpoly will bind `this` to the
|
182
|
-
native DOM element to help you migrate your existing jQuery code to
|
183
|
-
this new syntax.
|
184
|
-
|
185
|
-
So if you had this before:
|
186
|
-
|
187
|
-
$(document).on('click', '.button', function() {
|
188
|
-
$(this).something();
|
189
|
-
});
|
190
|
-
|
191
|
-
... you can simply copy the event handler to `up.on()`:
|
192
|
-
|
193
|
-
up.on('click', '.button', function() {
|
194
|
-
$(this).something();
|
195
|
-
});
|
196
|
-
|
197
|
-
@function up.on
|
198
|
-
@param {string} events
|
199
|
-
A space-separated list of event names to bind.
|
200
|
-
@param {string} [selector]
|
201
|
-
The selector of an element on which the event must be triggered.
|
202
|
-
Omit the selector to listen to all events with that name, regardless
|
203
|
-
of the event target.
|
204
|
-
@param {Function(event, $element, data)} behavior
|
205
|
-
The handler that should be called.
|
206
|
-
The function takes the affected element as the first argument (as a jQuery object).
|
207
|
-
If the element has an [`up-data`](/up-data) attribute, its value is parsed as JSON
|
208
|
-
and passed as a second argument.
|
209
|
-
@return {Function}
|
210
|
-
A function that unbinds the event listeners when called.
|
211
|
-
@stable
|
212
|
-
###
|
213
|
-
live = (upDescription...) ->
|
214
|
-
# Silently discard any event handlers that are registered on unsupported
|
215
|
-
# browsers and return a no-op destructor
|
216
|
-
return (->) unless up.browser.isSupported()
|
217
|
-
|
218
|
-
# Convert the args for up.on to an argument list as expected by jQuery.on.
|
219
|
-
jqueryDescription = upDescriptionToJqueryDescription(upDescription, true)
|
220
|
-
|
221
|
-
# Remember the descriptions we registered, so we can
|
222
|
-
# clean up after ourselves during a `reset`
|
223
|
-
rememberUpDescription(upDescription)
|
224
|
-
|
225
|
-
$(document).on(jqueryDescription...)
|
226
|
-
|
227
|
-
# Return destructor
|
228
|
-
-> unbind(upDescription...)
|
229
|
-
|
230
|
-
###**
|
231
|
-
Unbinds an event listener previously bound with [`up.on()`](/up.on).
|
232
|
-
|
233
|
-
\#\#\# Example
|
234
|
-
|
235
|
-
Let's say you are listing to clicks on `.button` elements:
|
236
|
-
|
237
|
-
var listener = function() { ... };
|
238
|
-
up.on('click', '.button', listener);
|
239
|
-
|
240
|
-
You can stop listening to these events like this:
|
241
|
-
|
242
|
-
up.off('click', '.button', listener);
|
243
|
-
|
244
|
-
Note that you need to pass `up.off()` a reference to the same listener function
|
245
|
-
that was passed to `up.on()` earlier.
|
246
|
-
|
247
|
-
@function up.off
|
248
|
-
@stable
|
249
|
-
###
|
250
|
-
unbind = (upDescription...) ->
|
251
|
-
jqueryDescription = upDescriptionToJqueryDescription(upDescription, false)
|
252
|
-
forgetUpDescription(upDescription)
|
253
|
-
$(document).off(jqueryDescription...)
|
254
|
-
|
255
|
-
rememberUpDescription = (upDescription) ->
|
256
|
-
number = upDescriptionNumber(upDescription)
|
257
|
-
liveUpDescriptions[number] = upDescription
|
258
|
-
|
259
|
-
forgetUpDescription = (upDescription) ->
|
260
|
-
number = upDescriptionNumber(upDescription)
|
261
|
-
upListener = u.last(upDescription)
|
262
|
-
delete upListener._descriptionNumber
|
263
|
-
delete upListener._asJqueryListener
|
264
|
-
delete liveUpDescriptions[number]
|
265
|
-
|
266
|
-
upDescriptionNumber = (upDescription) ->
|
267
|
-
u.last(upDescription)._descriptionNumber
|
268
|
-
|
269
|
-
###**
|
270
|
-
Emits a event with the given name and properties.
|
271
|
-
|
272
|
-
The event will be triggered as a jQuery event on `document`.
|
273
|
-
|
274
|
-
Other code can subscribe to events with that name using
|
275
|
-
[`up.on()`](/up.on) or by [binding a jQuery event listener](http://api.jquery.com/on/) to `document`.
|
276
|
-
|
277
|
-
\#\#\# Example
|
278
|
-
|
279
|
-
up.on('my:event', function(event) {
|
280
|
-
console.log(event.foo);
|
281
|
-
});
|
282
|
-
|
283
|
-
up.emit('my:event', { foo: 'bar' });
|
284
|
-
# Prints "bar" to the console
|
285
|
-
|
286
|
-
@function up.emit
|
287
|
-
@param {string} eventName
|
288
|
-
The name of the event.
|
289
|
-
@param {Object} [eventProps={}]
|
290
|
-
A list of properties to become part of the event object
|
291
|
-
that will be passed to listeners. Note that the event object
|
292
|
-
will by default include properties like `preventDefault()`
|
293
|
-
or `stopPropagation()`.
|
294
|
-
@param {jQuery} [eventProps.$element=$(document)]
|
295
|
-
The element on which the event is triggered.
|
296
|
-
@param {string|Array} [eventProps.message]
|
297
|
-
A message to print to the console when the event is emitted.
|
298
|
-
If omitted, a default message is printed.
|
299
|
-
Set this to `false` to prevent any console output.
|
300
|
-
@experimental
|
301
|
-
###
|
302
|
-
emit = (eventName, eventProps = {}) ->
|
303
|
-
event = $.Event(eventName, eventProps)
|
304
|
-
# Three cases:
|
305
|
-
# - Event is triggered on document (default)
|
306
|
-
# - Event is triggered on { $element }
|
307
|
-
# - Event is triggered on { $target }, but should have an { $element } property
|
308
|
-
$target = eventProps.$target || eventProps.$element || $(document)
|
309
|
-
logEmission(eventName, eventProps)
|
310
|
-
$target.trigger(event)
|
311
|
-
event
|
312
|
-
|
313
|
-
logEmission = (eventName, eventProps) ->
|
314
|
-
if eventProps.hasOwnProperty('message')
|
315
|
-
niceMessage = eventProps.message
|
316
|
-
delete eventProps.message
|
317
|
-
if niceMessage != false
|
318
|
-
if u.isArray(niceMessage)
|
319
|
-
[niceMessage, niceMessageArgs...] = niceMessage
|
320
|
-
else
|
321
|
-
niceMessageArgs = []
|
322
|
-
if niceMessage
|
323
|
-
if u.isPresent(eventProps)
|
324
|
-
up.puts "#{niceMessage} (%s (%o))", niceMessageArgs..., eventName, eventProps
|
325
|
-
else
|
326
|
-
up.puts "#{niceMessage} (%s)", niceMessageArgs..., eventName
|
327
|
-
else
|
328
|
-
if u.isPresent(eventProps)
|
329
|
-
up.puts 'Emitted event %s (%o)', eventName, eventProps
|
330
|
-
else
|
331
|
-
up.puts 'Emitted event %s', eventName
|
332
|
-
|
333
|
-
###**
|
334
|
-
[Emits an event](/up.emit) and returns whether no listener
|
335
|
-
has prevented the default action.
|
336
|
-
|
337
|
-
@function up.bus.nobodyPrevents
|
338
|
-
@param {string} eventName
|
339
|
-
@param {Object} eventProps
|
340
|
-
@param {string|Array} [eventProps.message]
|
341
|
-
@return {boolean}
|
342
|
-
whether no listener has prevented the default action
|
343
|
-
@experimental
|
344
|
-
###
|
345
|
-
nobodyPrevents = (args...) ->
|
346
|
-
event = emit(args...)
|
347
|
-
not event.isDefaultPrevented()
|
348
|
-
|
349
|
-
###**
|
350
|
-
[Emits](/up.emit) the given event and returns a promise
|
351
|
-
that will be fulfilled if no listener has prevented the default action.
|
352
|
-
|
353
|
-
If any listener prevented the default listener
|
354
|
-
the returned promise will never be resolved.
|
355
|
-
|
356
|
-
@function up.bus.whenEmitted
|
357
|
-
@param {string} eventName
|
358
|
-
@param {Object} eventProps
|
359
|
-
@param {string|Array} [eventProps.message]
|
360
|
-
@return {Promise}
|
361
|
-
@internal
|
362
|
-
###
|
363
|
-
whenEmitted = (args...) ->
|
364
|
-
new Promise (resolve, reject) ->
|
365
|
-
if nobodyPrevents(args...)
|
366
|
-
resolve()
|
367
|
-
else
|
368
|
-
reject(new Error("Event #{args[0]} was prevented"))
|
369
|
-
|
370
|
-
###**
|
371
|
-
Registers an event listener to be called when the user
|
372
|
-
presses the `Escape` key.
|
373
|
-
|
374
|
-
@function up.bus.onEscape
|
375
|
-
@param {Function} listener
|
376
|
-
The listener function to register.
|
377
|
-
@return {Function}
|
378
|
-
A function that unbinds the event listeners when called.
|
379
|
-
@experimental
|
380
|
-
###
|
381
|
-
onEscape = (listener) ->
|
382
|
-
live('keydown', 'body', (event) ->
|
383
|
-
if u.escapePressed(event)
|
384
|
-
listener(event)
|
385
|
-
)
|
386
|
-
|
387
|
-
###**
|
388
|
-
Stops the given event from propagating and prevents the default action.
|
389
|
-
|
390
|
-
@function up.bus.haltEvent
|
391
|
-
@internal
|
392
|
-
###
|
393
|
-
haltEvent = (event) ->
|
394
|
-
event.stopImmediatePropagation()
|
395
|
-
event.stopPropagation()
|
396
|
-
event.preventDefault()
|
397
|
-
|
398
|
-
###**
|
399
|
-
@function up.bus.consumeAction
|
400
|
-
@internal
|
401
|
-
###
|
402
|
-
consumeAction = (event) ->
|
403
|
-
# Halt the event chain to stop duplicate processing of this user interaction.
|
404
|
-
haltEvent(event)
|
405
|
-
unless event.type == 'up:action:consumed'
|
406
|
-
# Although we have consumed this action and halted the event chain,
|
407
|
-
# other components might still need to react. E.g. a popup needs to close when
|
408
|
-
# an outside link consumes the user click. So we emit another event for that.
|
409
|
-
emit('up:action:consumed', $element: $(event.target), message: false)
|
410
|
-
|
411
|
-
###**
|
412
|
-
Makes a snapshot of the currently registered event listeners,
|
413
|
-
to later be restored through [`up.bus.reset()`](/up.bus.reset).
|
414
|
-
|
415
|
-
@internal
|
416
|
-
###
|
417
|
-
snapshot = ->
|
418
|
-
for number, description of liveUpDescriptions
|
419
|
-
description.isDefault = true
|
420
|
-
|
421
|
-
resetBus = ->
|
422
|
-
# Resets the list of registered event listeners to the
|
423
|
-
# moment when the framework was booted.
|
424
|
-
|
425
|
-
# Copy a list of the descriptions we're going to unbind and iterate over
|
426
|
-
# them a second time below. This way we avoid manipulate the object we're
|
427
|
-
# iterating over.
|
428
|
-
doomedDescriptions = []
|
429
|
-
for number, description of liveUpDescriptions
|
430
|
-
doomedDescriptions.push(description) unless description.isDefault
|
431
|
-
|
432
|
-
for description in doomedDescriptions
|
433
|
-
unbind(description...)
|
434
|
-
|
435
|
-
###**
|
436
|
-
Resets Unpoly to the state when it was booted.
|
437
|
-
All custom event handlers, animations, etc. that have been registered
|
438
|
-
will be discarded.
|
439
|
-
|
440
|
-
This is an internal method for to enable unit testing.
|
441
|
-
Don't use this in production.
|
442
|
-
|
443
|
-
Emits event [`up:framework:reset`](/up:framework:reset).
|
444
|
-
|
445
|
-
@function up.reset
|
446
|
-
@experimental
|
447
|
-
###
|
448
|
-
emitReset = ->
|
449
|
-
emit('up:framework:reset', message: 'Resetting framework')
|
450
|
-
# Unfortunately we cannot reset up.protocol via event
|
451
|
-
# without introducing cycles in the asset load order
|
452
|
-
up.protocol.reset()
|
453
|
-
|
454
|
-
###**
|
455
|
-
This event is [emitted](/up.emit) when Unpoly is [reset](/up.reset) during unit tests.
|
456
|
-
|
457
|
-
@event up:framework:reset
|
458
|
-
@experimental
|
459
|
-
###
|
460
|
-
|
461
|
-
deprecateRenamedEvent = (oldEvent, newEvent) ->
|
462
|
-
renamedEvents[oldEvent] = newEvent
|
463
|
-
|
464
|
-
###**
|
465
|
-
Boots the Unpoly framework.
|
466
|
-
|
467
|
-
**This is called automatically** by including the Unpoly JavaScript files.
|
468
|
-
|
469
|
-
Unpoly will not boot if the current browser is [not supported](/up.browser.isSupported).
|
470
|
-
This leaves you with a classic server-side application on legacy browsers.
|
471
|
-
|
472
|
-
@function up.boot
|
473
|
-
@internal
|
474
|
-
###
|
475
|
-
boot = ->
|
476
|
-
if up.browser.isSupported()
|
477
|
-
emit('up:framework:boot', message: 'Booting framework')
|
478
|
-
# Unpoly modules now snapshot themselves to support reset()
|
479
|
-
emit('up:framework:booted', message: 'Framework booted')
|
480
|
-
u.nextFrame ->
|
481
|
-
# At this point all user-provided compilers have been registered.
|
482
|
-
u.whenReady().then ->
|
483
|
-
# The following event will cause Unpoly to compile the <body>
|
484
|
-
emit('up:app:boot', message: 'Booting user application')
|
485
|
-
emit('up:app:booted', message: 'User application booted')
|
486
|
-
else
|
487
|
-
console.log?("Unpoly doesn't support this browser. Framework was not booted.")
|
488
|
-
|
489
|
-
###**
|
490
|
-
This event is [emitted](/up.emit) when Unpoly [starts to boot](/up.boot).
|
491
|
-
|
492
|
-
@event up:framework:boot
|
493
|
-
@internal
|
494
|
-
###
|
495
|
-
|
496
|
-
live 'up:framework:booted', snapshot
|
497
|
-
live 'up:framework:reset', resetBus
|
498
|
-
|
499
|
-
<% if ENV['JS_KNIFE'] %>knife: eval(Knife.point)<% end %>
|
500
|
-
on: live # can't name symbols `on` in Coffeescript
|
501
|
-
off: unbind # can't name symbols `off` in Coffeescript
|
502
|
-
emit: emit
|
503
|
-
nobodyPrevents: nobodyPrevents
|
504
|
-
whenEmitted: whenEmitted
|
505
|
-
onEscape: onEscape
|
506
|
-
emitReset: emitReset
|
507
|
-
haltEvent: haltEvent
|
508
|
-
consumeAction: consumeAction
|
509
|
-
deprecateRenamedEvent: deprecateRenamedEvent
|
510
|
-
boot: boot
|
511
|
-
|
512
|
-
)(jQuery)
|
513
|
-
|
514
|
-
up.on = up.bus.on
|
515
|
-
up.off = up.bus.off
|
516
|
-
up.emit = up.bus.emit
|
517
|
-
up.reset = up.bus.emitReset
|
518
|
-
up.boot = up.bus.boot
|