unpoly-rails 0.61.1 → 1.0.1

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.

Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -1
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +1 -7
  5. data/README.md +7 -6
  6. data/Rakefile +10 -1
  7. data/dist/unpoly.js +85 -55
  8. data/dist/unpoly.min.js +4 -4
  9. data/lib/assets/javascripts/unpoly/classes/body_shifter.coffee +21 -12
  10. data/lib/assets/javascripts/unpoly/classes/follow_variant.coffee +11 -3
  11. data/lib/assets/javascripts/unpoly/classes/params.coffee.erb +1 -0
  12. data/lib/assets/javascripts/unpoly/classes/request.coffee +1 -0
  13. data/lib/assets/javascripts/unpoly/element.coffee.erb +8 -5
  14. data/lib/assets/javascripts/unpoly/event.coffee.erb +1 -1
  15. data/lib/assets/javascripts/unpoly/form.coffee.erb +16 -1
  16. data/lib/assets/javascripts/unpoly/fragment.coffee.erb +1 -0
  17. data/lib/assets/javascripts/unpoly/framework.coffee +7 -9
  18. data/lib/assets/javascripts/unpoly/log.coffee +7 -2
  19. data/lib/assets/javascripts/unpoly/modal.coffee.erb +2 -0
  20. data/lib/assets/javascripts/unpoly/motion.coffee.erb +1 -1
  21. data/lib/assets/javascripts/unpoly/protocol.coffee +2 -0
  22. data/lib/assets/javascripts/unpoly/syntax.coffee.erb +2 -3
  23. data/lib/assets/javascripts/unpoly/util.coffee.erb +2 -1
  24. data/lib/unpoly/rails/version.rb +1 -1
  25. data/package.json +1 -1
  26. data/spec_app/Gemfile +0 -1
  27. data/spec_app/Gemfile.lock +1 -7
  28. data/spec_app/app/views/compiler_test/timestamp.erb +1 -0
  29. data/spec_app/app/views/css_test/modal.erb +1 -1
  30. data/spec_app/app/views/css_test/popup.erb +1 -1
  31. data/spec_app/spec/javascripts/up/fragment_spec.js.coffee +27 -1
  32. data/spec_app/spec/javascripts/up/link_spec.js.coffee +7 -2
  33. data/spec_app/spec/javascripts/up/modal_spec.js.coffee +23 -1
  34. data/spec_app/spec/javascripts/up/popup_spec.js.coffee +2 -1
  35. data/spec_app/spec/javascripts/up/proxy_spec.js.coffee +8 -0
  36. data/spec_app/spec/javascripts/up/util_spec.js.coffee +14 -0
  37. metadata +3 -3
@@ -928,9 +928,14 @@ describe 'up.link', ->
928
928
  Trigger.mouseup(@$link)
929
929
  next => expect(@followSpy).not.toHaveBeenCalled()
930
930
 
931
- it 'does nothing on click', asyncSpec (next)->
931
+ it 'does nothing on click if there was an earlier mousedown event', asyncSpec (next)->
932
+ Trigger.mousedown(@$link)
932
933
  Trigger.click(@$link)
933
- next => expect(@followSpy).not.toHaveBeenCalled()
934
+ next => expect(@followSpy.calls.count()).toBe(1)
935
+
936
+ it 'does follow a link on click if there was never a mousedown event (e.g. if the user pressed enter)', asyncSpec (next) ->
937
+ Trigger.click(@$link)
938
+ next => expect(@followSpy.calls.mostRecent().args[0]).toEqual(@$link[0])
934
939
 
935
940
  # IE does not call JavaScript and always performs the default action on right clicks
936
941
  unless AgentDetector.isIE() || AgentDetector.isEdge()
@@ -532,8 +532,9 @@ describe 'up.modal', ->
532
532
  next => expect(@followSpy).not.toHaveBeenCalled()
533
533
 
534
534
  it 'does nothing on click', asyncSpec (next) ->
535
+ Trigger.mousedown(@$link)
535
536
  Trigger.click(@$link)
536
- next => expect(@followSpy).not.toHaveBeenCalled()
537
+ next => expect(@followSpy.calls.count()).toBe(1)
537
538
 
538
539
  # IE does not call JavaScript and always performs the default action on right clicks
539
540
  unless AgentDetector.isIE() || AgentDetector.isEdge()
@@ -562,6 +563,27 @@ describe 'up.modal', ->
562
563
  next =>
563
564
  expect(@lastRequest().method).toEqual 'POST'
564
565
 
566
+ describe 'with [up-cache] modifier', ->
567
+ it 'honours the given setting', asyncSpec (next) ->
568
+ $link = $fixture('a[href="/path"][up-modal=".target"][up-cache="false"]')
569
+ Trigger.clickSequence($link)
570
+
571
+ next =>
572
+ @respondWith('<div class="target">modal content 1</div>')
573
+
574
+ next =>
575
+ expect('.up-modal .target').toHaveText('modal content 1')
576
+ history.back()
577
+
578
+ next =>
579
+ Trigger.clickSequence($link)
580
+
581
+ next =>
582
+ @respondWith('<div class="target">modal content 2</div>')
583
+
584
+ next =>
585
+ expect('.up-modal .target').toHaveText('modal content 2')
586
+
565
587
  it 'adds a history entry and allows the user to use the back button', asyncSpec (next) ->
566
588
  up.motion.config.enabled = false
567
589
  up.history.config.enabled = true
@@ -232,8 +232,9 @@ describe 'up.popup', ->
232
232
  next => expect(@attachSpy).not.toHaveBeenCalled()
233
233
 
234
234
  it 'does nothing on click', asyncSpec (next) ->
235
+ Trigger.mousedown(@$link)
235
236
  Trigger.click(@$link)
236
- next => expect(@attachSpy).not.toHaveBeenCalled()
237
+ next => expect(@attachSpy.calls.count()).toBe(1)
237
238
 
238
239
  # IE does not call JavaScript and always performs the default action on right clicks
239
240
  unless AgentDetector.isIE() || AgentDetector.isEdge()
@@ -38,6 +38,14 @@ describe 'up.proxy', ->
38
38
  expect(request.requestHeaders['X-Up-Target']).toEqual('.target')
39
39
  expect(request.requestHeaders['X-Up-Fail-Target']).toEqual('.fail-target')
40
40
 
41
+ it "sends Unpoly's version as an X-Up-Version request header", asyncSpec (next) ->
42
+ up.request(url: '/foo')
43
+
44
+ next =>
45
+ versionHeader = @lastRequest().requestHeaders['X-Up-Version']
46
+ expect(versionHeader).toBePresent()
47
+ expect(versionHeader).toEqual(up.version)
48
+
41
49
  it 'resolves to a Response object that contains information about the response and request', (done) ->
42
50
  promise = up.request(
43
51
  url: '/url'
@@ -1418,3 +1418,17 @@ describe 'up.util', ->
1418
1418
  it 'returns false (and does not crash) for undefined', ->
1419
1419
  value = undefined
1420
1420
  expect(up.util.isJQuery(value)).toBe(false)
1421
+
1422
+ describe 'up.util.escapeHtml', ->
1423
+
1424
+ it 'escapes double quotes', ->
1425
+ result = up.util.escapeHtml('before"after')
1426
+ expect(result).toEqual('before&quot;after')
1427
+
1428
+ it 'escapes single quotes', ->
1429
+ result = up.util.escapeHtml("before'after")
1430
+ expect(result).toEqual('before&#x27;after')
1431
+
1432
+ it 'escapes angle brackets', ->
1433
+ result = up.util.escapeHtml('before<script>after')
1434
+ expect(result).toEqual('before&lt;script&gt;after')
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.61.1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-04 00:00:00.000000000 Z
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -400,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
400
400
  - !ruby/object:Gem::Version
401
401
  version: '0'
402
402
  requirements: []
403
- rubygems_version: 3.1.2
403
+ rubygems_version: 3.2.16
404
404
  signing_key:
405
405
  specification_version: 4
406
406
  summary: Rails bindings for Unpoly, the unobtrusive JavaScript framework