upjs-rails 0.14.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,6 +16,10 @@ up.form = (($) ->
16
16
  Sets default options for form submission and validation.
17
17
 
18
18
  @property up.form.config
19
+ @param {Number} [config.observeDelay=0]
20
+ The number of miliseconds to wait before [`up.observe`](/up.observe) runs the callback
21
+ after the input value changes. Use this to limit how often the callback
22
+ will be invoked for a fast typist.
19
23
  @param {Array} [config.validateTargets=['[up-fieldset]:has(&)', 'fieldset:has(&)', 'label:has(&)', 'form:has(&)']]
20
24
  An array of CSS selectors that are searched around a form field
21
25
  that wants to [validate](/up.validate). The first matching selector
@@ -24,10 +28,14 @@ up.form = (($) ->
24
28
  By default this looks for a `<fieldset>`, `<label>` or `<form>`
25
29
  around the validating input field, or any element with an
26
30
  `up-fieldset` attribute.
31
+ @param {String} [config.fields]
32
+ An array of CSS selectors that represent form fields, such as `input` or `select`.
27
33
  @stable
28
34
  ###
29
35
  config = u.config
30
36
  validateTargets: ['[up-fieldset]:has(&)', 'fieldset:has(&)', 'label:has(&)', 'form:has(&)']
37
+ fields: [':input']
38
+ observeDelay: 0
31
39
 
32
40
  reset = ->
33
41
  config.reset()
@@ -106,8 +114,11 @@ up.form = (($) ->
106
114
  $form = $(formOrSelector).closest('form')
107
115
 
108
116
  options = u.options(options)
109
- successSelector = up.flow.resolveSelector(u.option(options.target, $form.attr('up-target'), 'body'), options)
110
- failureSelector = up.flow.resolveSelector(u.option(options.failTarget, $form.attr('up-fail-target'), -> u.selectorForElement($form)), options)
117
+ successSelector = u.option(options.target, $form.attr('up-target'), 'body')
118
+ successSelector = up.flow.resolveSelector(successSelector, options)
119
+ failureSelector = u.option(options.failTarget, $form.attr('up-fail-target')) || u.selectorForElement($form)
120
+ failureSelector = up.flow.resolveSelector(failureSelector, options)
121
+
111
122
  historyOption = u.option(options.history, u.castedAttr($form, 'up-history'), true)
112
123
  successTransition = u.option(options.transition, u.castedAttr($form, 'up-transition'))
113
124
  failureTransition = u.option(options.failTransition, u.castedAttr($form, 'up-fail-transition'), successTransition)
@@ -174,7 +185,8 @@ up.form = (($) ->
174
185
  up.flow.implant(failureSelector, html, failureOptions)
175
186
 
176
187
  ###*
177
- Observes a form field and runs a callback when its value changes.
188
+ Observes a field or form and runs a callback when a value changes.
189
+
178
190
  This is useful for observing text fields while the user is typing.
179
191
 
180
192
  The UJS variant of this is the [`up-observe`](/up-observe) attribute.
@@ -184,9 +196,9 @@ up.form = (($) ->
184
196
  The following would submit the form whenever the
185
197
  text field value changes:
186
198
 
187
- up.observe('input[name=query]', { change: function(value, $input) {
199
+ up.observe('input[name=query]', function(value, $input) {
188
200
  up.submit($input)
189
- } });
201
+ });
190
202
 
191
203
  \#\#\#\# Preventing concurrency
192
204
 
@@ -204,43 +216,56 @@ up.form = (($) ->
204
216
  load on your server, you can use a `delay` option to wait
205
217
  a few miliseconds before executing the callback:
206
218
 
207
- up.observe('input', {
208
- delay: 100,
209
- change: function(value, $input) { up.submit($input) }
219
+ up.observe('input', { delay: 100 }, function(value, $input) {
220
+ up.submit($input)
210
221
  });
211
222
 
212
223
  @function up.observe
213
224
  @param {Element|jQuery|String} fieldOrSelector
214
- @param {Function(value, $field)|String} options.change
225
+ @param {Number} [options.delay=up.form.config.observeDelay]
226
+ The number of miliseconds to wait before executing the callback
227
+ after the input value changes. Use this to limit how often the callback
228
+ will be invoked for a fast typist.
229
+ @param {Function(value, $field)|String} onChange
215
230
  The callback to execute when the field's value changes.
216
231
  If given as a function, it must take two arguments (`value`, `$field`).
217
232
  If given as a string, it will be evaled as Javascript code in a context where
218
233
  (`value`, `$field`) are set.
219
- @param {Number} [options.delay=0]
220
- The number of miliseconds to wait before executing the callback
221
- after the input value changes. Use this to limit how often the callback
222
- will be invoked for a fast typist.
234
+ @return {Function}
235
+ A destructor function that removes the observe watch when called.
223
236
  @stable
224
237
  ###
225
- observe = (fieldOrSelector, options) ->
238
+ observe = (selectorOrElement, args...) ->
226
239
 
227
- $field = $(fieldOrSelector)
240
+ options = {}
241
+ callbackArg = undefined
242
+ if args.length == 1
243
+ callbackArg = args[0]
244
+ if args.length > 1
245
+ options = u.options(args[0])
246
+ callbackArg = args[1]
247
+
248
+ $element = $(selectorOrElement)
228
249
  options = u.options(options)
229
- delay = u.option($field.attr('up-delay'), options.delay, 0)
250
+ delay = u.option($element.attr('up-delay'), options.delay, config.observeDelay)
230
251
  delay = parseInt(delay)
231
252
 
232
- knownValue = null
233
253
  callback = null
234
- callbackTimer = null
235
254
 
236
- if codeOnChange = $field.attr('up-observe')
237
- callback = (value, $field) ->
238
- eval(codeOnChange)
239
- else if options.change
240
- callback = options.change
255
+ if u.isGiven(options.change)
256
+ up.error('up.observe now takes the change callback as the last argument')
257
+
258
+ rawCallback = u.option(u.presentAttr($element, 'op-observe'), callbackArg)
259
+ if u.isString(rawCallback)
260
+ callback = (value, $field) -> eval(rawCallback)
241
261
  else
242
- u.error('up.observe: No change callback given')
262
+ callback = rawCallback or u.error('up.observe: No change callback given')
263
+
264
+ if $element.is('form')
265
+ return observeForm($element, options, callback)
243
266
 
267
+ knownValue = null
268
+ callbackTimer = null
244
269
  callbackPromise = u.resolvedPromise()
245
270
 
246
271
  # This holds the next callback function, curried with `value` and `$field`.
@@ -256,14 +281,14 @@ up.form = (($) ->
256
281
  returnValue
257
282
 
258
283
  check = ->
259
- value = $field.val()
284
+ value = $element.val()
260
285
  # don't run the callback for the check during initialization
261
286
  skipCallback = u.isNull(knownValue)
262
287
  if knownValue != value
263
288
  knownValue = value
264
289
  unless skipCallback
265
290
  clearTimer()
266
- nextCallback = -> callback.apply($field.get(0), [value, $field])
291
+ nextCallback = -> callback.apply($element.get(0), [value, $element])
267
292
  callbackTimer = setTimeout(
268
293
  ->
269
294
  # Only run the callback once the previous callback's
@@ -288,15 +313,53 @@ up.form = (($) ->
288
313
  'input change'
289
314
  else
290
315
  # Actually we won't ever get `input` from the user in this browser,
291
- # but we want to notice if another script manually triggers `input`
316
+ # but we want to notice if another script manually triggers `input`
292
317
  # on the element.
293
318
  'input change keypress paste cut click propertychange'
294
- $field.on changeEvents, check
319
+ $element.on(changeEvents, check)
295
320
 
296
321
  check()
297
322
 
298
323
  # return destructor
299
- return clearTimer
324
+ return ->
325
+ $element.off(changeEvents, check)
326
+ clearTimer()
327
+
328
+ ###*
329
+ @function observeForm
330
+ @internal
331
+ ###
332
+ observeForm = ($form, options, callback) ->
333
+ $fields = u.multiSelector(config.fields).find($form)
334
+ destructors = u.map $fields, ($field) ->
335
+ observe($field, callback)
336
+ ->
337
+ destructor() for destructor in destructors
338
+
339
+ ###*
340
+ [Observes](/up.observe) a field or form and submits the form when a value changes.
341
+
342
+ The changed form field will be assigned a CSS class [`up-active`](/up-active)
343
+ while the autosubmitted form is processing.
344
+
345
+ The UJS variant of this is the [`up-autosubmit`](/up-autosubmit) attribute.
346
+
347
+ @function up.autosubmit
348
+ @param {String|Element|jQuery} selectorOrElement
349
+ The form field to observe.
350
+ @param {Object} [options]
351
+ See options for [`up.observe`](/up.observe)
352
+ @return {Function}
353
+ A destructor function that removes the observe watch when called.
354
+ @stable
355
+ ###
356
+ autosubmit = (selectorOrElement, options) ->
357
+ console.log("autosubmit %o", selectorOrElement)
358
+ observe(selectorOrElement, options, (value, $field) ->
359
+ $form = $field.closest('form')
360
+ $field.addClass('up-active')
361
+ submit($form).always -> $field.removeClass('up-active')
362
+ )
300
363
 
301
364
  resolveValidateTarget = ($field, options) ->
302
365
  target = u.option(options.target, $field.attr('up-validate'))
@@ -564,7 +627,6 @@ up.form = (($) ->
564
627
  <input type="text" name="email" up-validate=".email-errors">
565
628
  <span class="email-errors"></span>
566
629
 
567
-
568
630
  \#\#\#\# Updating dependent fields
569
631
 
570
632
  The `[up-validate]` behavior is also a great way to partially update a form
@@ -599,21 +661,23 @@ up.form = (($) ->
599
661
  validate($field)
600
662
 
601
663
  ###*
602
- Observes this form field and runs the given script
603
- when its value changes. This is useful for observing text fields
604
- while the user is typing.
664
+ Observes this field or form and runs a callback when a value changes.
665
+
666
+ This is useful for observing text fields while the user is typing.
605
667
 
606
668
  The programmatic variant of this is the [`up.observe`](/up.observe) function.
607
669
 
608
670
  \#\#\#\# Example
609
671
 
610
- For instance, the following would submit the form whenever the
611
- text field value changes:
672
+ The following would run a global `showSuggestions(value)` function
673
+ whenever the `<input>` changes:
612
674
 
613
- <form method="GET" action="/search">
614
- <input type="query" up-observe="up.form.submit(this)">
675
+ <form>
676
+ <input type="query" up-observe="showSuggestions(value)">
615
677
  </form>
616
678
 
679
+ \#\#\#\# Callback context
680
+
617
681
  The script given to `up-observe` runs with the following context:
618
682
 
619
683
  | Name | Type | Description |
@@ -625,21 +689,39 @@ up.form = (($) ->
625
689
  @selector [up-observe]
626
690
  @param {String} up-observe
627
691
  The code to run when the field's value changes.
692
+ @param {String} up-delay
693
+ The number of miliseconds to wait after a change before the code is run.
628
694
  @stable
629
695
  ###
630
- up.compiler '[up-observe]', ($field) ->
631
- return observe($field)
696
+ up.compiler '[up-observe]', ($formOrField) -> observe($formOrField)
697
+
698
+ ###*
699
+ [Observes](/up.observe) this field or form and submits the form when a value changes.
632
700
 
633
- # up.compiler '[up-autosubmit]', ($field) ->
634
- # return observe($field, change: ->
635
- # $form = $field.closest('form')
636
- # $field.addClass('up-active')
637
- # up.submit($form).always ->
638
- # $field.removeClass('up-active')
639
- # )
701
+ The form field will be assigned a CSS class [`up-active`](/up-active)
702
+ while the autosubmitted form is processing.
703
+
704
+ The programmatic variant of this is the [`up.autosubmit`](/up.autosubmit) function.
705
+
706
+ \#\#\#\# Example
707
+
708
+ The following would submit the form whenever the
709
+ text field value changes:
710
+
711
+ <form method="GET" action="/search" up-autosubmit>
712
+ <input type="query">
713
+ </form>
714
+
715
+ @selector [up-autosubmit]
716
+ @param {String} up-delay
717
+ The number of miliseconds to wait after the change before the form is submitted.
718
+ @stable
719
+ ###
720
+ up.compiler '[up-autosubmit]', ($formOrField) -> autosubmit($formOrField)
640
721
 
641
722
  up.on 'up:framework:reset', reset
642
723
 
724
+ knife: eval(Knife?.point)
643
725
  submit: submit
644
726
  observe: observe
645
727
  validate: validate
@@ -648,5 +730,5 @@ up.form = (($) ->
648
730
 
649
731
  up.submit = up.form.submit
650
732
  up.observe = up.form.observe
733
+ up.autosubmit = up.form.autosubmit
651
734
  up.validate = up.form.validate
652
-
@@ -3,7 +3,8 @@ Modal dialogs
3
3
  =============
4
4
 
5
5
  Instead of [linking to a page fragment](/up.link), you can choose
6
- to show a fragment in a modal dialog.
6
+ to show a fragment in a modal dialog. The existing page will remain
7
+ open in the background and reappear once the modal is closed.
7
8
 
8
9
  To open a modal, add an [`up-modal` attribute](/a-up-modal) to a link,
9
10
  or call the Javascript functions [`up.modal.follow`](/up.modal.follow)
@@ -312,7 +313,7 @@ up.modal = (($) ->
312
313
  else
313
314
  # Although someone prevented the destruction, keep a uniform API for
314
315
  # callers by returning a Deferred that will never be resolved.
315
- $.Deferred()
316
+ u.unresolvableDeferred()
316
317
 
317
318
  ###*
318
319
  This event is [emitted](/up.emit) when a modal dialog is starting to open.
@@ -340,6 +341,9 @@ up.modal = (($) ->
340
341
  @function up.modal.close
341
342
  @param {Object} options
342
343
  See options for [`up.animate`](/up.animate)
344
+ @return {Deferred}
345
+ A promise that will be resolved once the modal's close
346
+ animation has finished.
343
347
  @stable
344
348
  ###
345
349
  close = (options) ->
@@ -358,9 +362,10 @@ up.modal = (($) ->
358
362
  up.emit('up:modal:closed')
359
363
  deferred
360
364
  else
361
- # Although someone prevented the destruction, keep a uniform API for
362
- # callers by returning a Deferred that will never be resolved.
363
- $.Deferred()
365
+ # Although someone prevented the destruction,
366
+ # keep a uniform API for callers by returning
367
+ # a Deferred that will never be resolved.
368
+ u.unresolvableDeferred()
364
369
  else
365
370
  u.resolvedDeferred()
366
371
 
@@ -2,7 +2,7 @@
2
2
  Animation
3
3
  =========
4
4
 
5
- Whenever you change a page fragment (through methods like
5
+ Whenever you update a page fragment (through methods like
6
6
  [`up.replace`](/up.replace) or UJS attributes like [`up-target`](/up-target))
7
7
  you can animate the change.
8
8
 
@@ -26,7 +26,6 @@ and [transitions](/up.morph#named-animation).
26
26
  You can also easily [define your own animations](/up.animation)
27
27
  or [transitions](/up.transition) using Javascript or CSS.
28
28
 
29
-
30
29
  @class up.motion
31
30
  ###
32
31
  up.motion = (($) ->
@@ -325,7 +324,7 @@ up.motion = (($) ->
325
324
  parsedOptions = u.only(options, 'reveal', 'restoreScroll', 'source')
326
325
  parsedOptions = u.extend(parsedOptions, animateOptions(options))
327
326
 
328
- if up.browser.canCssAnimation()
327
+ if up.browser.canCssTransition()
329
328
  finish($old)
330
329
  finish($new)
331
330
 
@@ -1,8 +1,8 @@
1
1
  ###*
2
2
  Fast interaction feedback
3
3
  =========================
4
-
5
- This module marks up link elements with classes indicating that
4
+
5
+ Up.js automatically marks up link elements with classes indicating that
6
6
  they are currently loading (class `up-active`) or linking
7
7
  to the current location (class `up-current`).
8
8
 
@@ -3,14 +3,13 @@ Pop-up overlays
3
3
  ===============
4
4
 
5
5
  Instead of [linking to a page fragment](/up.link), you can choose
6
- to show a fragment in a popup overlay.
6
+ to show a fragment in a popup overlay that rolls down from an anchoring element.
7
7
 
8
8
  To open a popup, add an [`up-popup` attribute](/a-up-popup) to a link,
9
9
  or call the Javascript function [`up.popup.attach`](/up.popup.attach).
10
10
 
11
11
  For modal dialogs see [up.modal](/up.modal) instead.
12
12
 
13
-
14
13
  \#\#\#\# Customizing the popup design
15
14
 
16
15
  Loading the Up.js stylesheet will give you a minimal popup design:
@@ -27,7 +26,6 @@ By default the popup uses the following DOM structure:
27
26
  ...
28
27
  </div>
29
28
 
30
-
31
29
  \#\#\#\# Closing behavior
32
30
 
33
31
  The popup closes when the user clicks anywhere outside the popup area.
@@ -42,7 +40,6 @@ To disable this behavior, give the opening link an `up-sticky` attribute:
42
40
 
43
41
  <a href="/settings" up-popup=".options" up-sticky>Settings</a>
44
42
 
45
-
46
43
  @class up.popup
47
44
  ###
48
45
  up.popup = (($) ->
@@ -164,10 +161,14 @@ up.popup = (($) ->
164
161
  updated = ($link, $popup, position, animation, animateOptions) ->
165
162
  $popup.show()
166
163
  setPosition($link, $popup, position)
167
- up.animate($popup, animation, animateOptions)
164
+ deferred = up.animate($popup, animation, animateOptions)
165
+ deferred.then -> up.emit('up:popup:opened')
166
+ deferred
168
167
 
169
168
  ###*
170
169
  Attaches a popup overlay to the given element or selector.
170
+
171
+ Emits events [`up:popup:open`](/up:popup:open) and [`up:popup:opened`](/up:popup:opened).
171
172
 
172
173
  @function up.popup.attach
173
174
  @param {Element|jQuery|String} elementOrSelector
@@ -202,35 +203,89 @@ up.popup = (($) ->
202
203
  animateOptions = up.motion.animateOptions(options, $link)
203
204
 
204
205
  close()
205
- $popup = createHiddenPopup($link, selector, sticky)
206
-
207
- up.replace(selector, url,
208
- history: history
209
- insert: -> updated($link, $popup, position, animation, animateOptions)
210
- )
211
-
206
+
207
+ if up.bus.nobodyPrevents('up:popup:open', url: url)
208
+ $popup = createHiddenPopup($link, selector, sticky)
209
+
210
+ up.replace(selector, url,
211
+ history: history
212
+ insert: -> updated($link, $popup, position, animation, animateOptions)
213
+ )
214
+ else
215
+ # Although someone prevented the destruction, keep a uniform API for
216
+ # callers by returning a Deferred that will never be resolved.
217
+ u.unresolvableDeferred()
218
+
219
+ ###*
220
+ This event is [emitted](/up.emit) when a popup is starting to open.
221
+
222
+ @event up:popup:open
223
+ @param event.preventDefault()
224
+ Event listeners may call this method to prevent the popup from opening.
225
+ @stable
226
+ ###
227
+
228
+ ###*
229
+ This event is [emitted](/up.emit) when a popup has finished opening.
230
+
231
+ @event up:popup:opened
232
+ @stable
233
+ ###
234
+
212
235
  ###*
213
236
  Closes a currently opened popup overlay.
237
+
214
238
  Does nothing if no popup is currently open.
215
-
239
+
240
+ Emits events [`up:popup:close`](/up:popup:close) and [`up:popup:closed`](/up:popup:closed).
241
+
216
242
  @function up.popup.close
217
243
  @param {Object} options
218
244
  See options for [`up.animate`](/up.animate).
245
+ @return {Deferred}
246
+ A promise that will be resolved once the modal's close
247
+ animation has finished.
219
248
  @stable
220
249
  ###
221
250
  close = (options) ->
222
251
  $popup = $('.up-popup')
223
252
  if $popup.length
224
- options = u.options(options,
225
- animation: config.closeAnimation,
226
- url: $popup.attr('up-covered-url'),
227
- title: $popup.attr('up-covered-title')
228
- )
229
- currentUrl = undefined
230
- up.destroy($popup, options)
253
+ if up.bus.nobodyPrevents('up:popup:close', $element: $popup)
254
+ options = u.options(options,
255
+ animation: config.closeAnimation,
256
+ url: $popup.attr('up-covered-url'),
257
+ title: $popup.attr('up-covered-title')
258
+ )
259
+ currentUrl = undefined
260
+ deferred = up.destroy($popup, options)
261
+ deferred.then -> up.emit('up:popup:closed')
262
+ deferred
263
+ else
264
+ # Although someone prevented the destruction,
265
+ # keep a uniform API for callers by returning
266
+ # a Deferred that will never be resolved.
267
+ u.unresolvableDeferred()
231
268
  else
232
- u.resolvedPromise()
233
-
269
+ u.resolvedDeferred()
270
+
271
+ ###*
272
+ This event is [emitted](/up.emit) when a popup dialog
273
+ is starting to [close](/up.popup.close).
274
+
275
+ @event up:popup:close
276
+ @param event.preventDefault()
277
+ Event listeners may call this method to prevent the popup from closing.
278
+ @stable
279
+ ###
280
+
281
+ ###*
282
+ This event is [emitted](/up.emit) when a popup dialog
283
+ is done [closing](/up.popup.close).
284
+
285
+ @event up:popup:closed
286
+ @stable
287
+ ###
288
+
234
289
  autoclose = ->
235
290
  unless $('.up-popup').is('[up-sticky]')
236
291
  discardHistory()
@@ -99,7 +99,6 @@ up.proxy = (($) ->
99
99
  key: cacheKey
100
100
  log: 'up.proxy'
101
101
 
102
-
103
102
  ###*
104
103
  Returns a cached response for the given request.
105
104
 
@@ -304,6 +304,8 @@ up.syntax = (($) ->
304
304
 
305
305
  @function up.hello
306
306
  @param {String|Element|jQuery} selectorOrElement
307
+ @return {jQuery}
308
+ The compiled element
307
309
  @stable
308
310
  ###
309
311
  hello = (selectorOrElement) ->
@@ -667,8 +667,7 @@ up.util = (($) ->
667
667
 
668
668
  ###*
669
669
  Returns the first argument that is considered present.
670
- If an argument is a function, it is called and the value is checked for presence.
671
-
670
+
672
671
  This function is useful when you have multiple option sources and the value can be boolean.
673
672
  In that case you cannot change the sources with a `||` operator
674
673
  (since that doesn't short-circuit at `false`).
@@ -678,15 +677,7 @@ up.util = (($) ->
678
677
  @internal
679
678
  ###
680
679
  option = (args...) ->
681
- # This behavior is subtly different from detect!
682
- match = undefined
683
- for arg in args
684
- value = arg
685
- value = value() if isFunction(value)
686
- if isGiven(value)
687
- match = value
688
- break
689
- match
680
+ detect(args, isGiven)
690
681
 
691
682
  ###*
692
683
  Passes each element in the given array to the given function.
@@ -922,7 +913,7 @@ up.util = (($) ->
922
913
  ###
923
914
  cssAnimate = (elementOrSelector, lastFrame, opts) ->
924
915
  $element = $(elementOrSelector)
925
- if up.browser.canCssAnimation()
916
+ if up.browser.canCssTransition()
926
917
  opts = options(opts,
927
918
  duration: 300,
928
919
  delay: 0,
@@ -1149,6 +1140,16 @@ up.util = (($) ->
1149
1140
  resolvedPromise = ->
1150
1141
  resolvedDeferred().promise()
1151
1142
 
1143
+ ###*
1144
+ Returns a [Deferred object](https://api.jquery.com/category/deferred-object/) that will never be resolved.
1145
+
1146
+ @function up.util.unresolvableDeferred
1147
+ @return {Deferred}
1148
+ @experimental
1149
+ ###
1150
+ unresolvableDeferred = ->
1151
+ $.Deferred()
1152
+
1152
1153
  ###*
1153
1154
  Returns a promise that will never be resolved.
1154
1155
 
@@ -1156,7 +1157,7 @@ up.util = (($) ->
1156
1157
  @experimental
1157
1158
  ###
1158
1159
  unresolvablePromise = ->
1159
- $.Deferred().promise()
1160
+ unresolvableDeferred().promise()
1160
1161
 
1161
1162
  ###*
1162
1163
  Returns an empty jQuery collection.
@@ -1518,6 +1519,7 @@ up.util = (($) ->
1518
1519
  clientSize: clientSize
1519
1520
  only: only
1520
1521
  trim: trim
1522
+ unresolvableDeferred: unresolvableDeferred
1521
1523
  unresolvablePromise: unresolvablePromise
1522
1524
  resolvedPromise: resolvedPromise
1523
1525
  resolvedDeferred: resolvedDeferred
@@ -4,6 +4,6 @@ module Upjs
4
4
  # The current version of the upjs-rails gem.
5
5
  # This version number is also used for releases of the Up.js
6
6
  # frontend code.
7
- VERSION = '0.14.1'
7
+ VERSION = '0.15.0'
8
8
  end
9
9
  end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- upjs-rails (0.14.0)
4
+ upjs-rails (0.14.1)
5
5
  rails (>= 3)
6
6
 
7
7
  GEM
@@ -76,19 +76,21 @@ describe 'up.bus', ->
76
76
 
77
77
  expect(emittedEvent.customField).toEqual('custom-value')
78
78
 
79
- it 'triggers an event on an element given as .$element event property', ->
80
- emittedEvent = undefined
81
- emitted$Target = undefined
79
+ describe 'with .$element option', ->
82
80
 
83
- $element = affix('.element').text('foo')
81
+ it 'triggers an event on the given element', ->
82
+ emittedEvent = undefined
83
+ $emittedTarget = undefined
84
84
 
85
- up.on 'foo', (event, $target) ->
86
- emittedEvent = event
87
- emitted$Target = $target
85
+ $element = affix('.element').text('foo')
88
86
 
89
- up.emit('foo', $element: $element)
87
+ up.on 'foo', (event, $target) ->
88
+ emittedEvent = event
89
+ $emittedTarget = $target
90
90
 
91
- expect(emittedEvent).toBeDefined()
92
- expect(emitted$Target).toEqual($element)
91
+ up.emit('foo', $element: $element)
92
+
93
+ expect(emittedEvent).toBeDefined()
94
+ expect($emittedTarget).toEqual($element)
93
95
 
94
- expect(emittedEvent.$element).toEqual($element)
96
+ expect(emittedEvent.$element).toEqual($element)