spec_app/spec/javascripts/up/modal_spec.js.coffee in unpoly-rails-0.28.1 vs spec_app/spec/javascripts/up/modal_spec.js.coffee in unpoly-rails-0.29.0
- old
+ new
@@ -418,70 +418,58 @@
expect(@lastRequest().method).toEqual 'POST'
describe '[up-close]', ->
+ backgroundClicked = undefined
+
+ beforeEach ->
+ up.motion.config.enabled = false
+ backgroundClicked = jasmine.createSpy('background clicked')
+ up.on 'click', backgroundClicked
+
describe 'when clicked inside a modal', ->
- it 'closes the open modal and prevents the default action', (done) ->
+ it 'closes the open modal and halts the event chain', (done) ->
up.modal.extract('.target', '<div class="target"><a up-close>text</a></div>', animation: false)
$link = $('.up-modal a[up-close]') # link is within the modal
- wasDefaultPrevented = false
- wasClosed = false
- up.on 'click', 'a[up-close]', (event) ->
- wasDefaultPrevented = event.isDefaultPrevented()
- true # the line above might return false and cancel propagation / prevent default
- up.on 'up:modal:close', ->
- wasClosed = true
- $link.click()
+ Trigger.clickSequence($link)
u.nextFrame ->
- expect(wasClosed).toBe(true)
- expect(wasDefaultPrevented).toBe(true)
+ expect(up.modal.isOpen()).toBe(false)
+ expect(backgroundClicked).not.toHaveBeenCalled()
done()
describe 'when no modal is open', ->
- it 'does neither close the modal nor prevent the default action', ->
+ it 'does nothing and allows the event chain to continue', (done) ->
$link = affix('a[up-close]') # link is outside the modal
up.hello($link)
- wasDefaultPrevented = false
- wasClosed = false
- up.on 'click', 'a[up-close]', (event) ->
- wasDefaultPrevented = event.isDefaultPrevented()
- true # the line above might return false and cancel propagation / prevent default
- up.on 'up:modal:close', ->
- wasClosed = true
- $link.click()
- expect(wasClosed).toBe(false)
- expect(wasDefaultPrevented).toBe(false)
+ Trigger.clickSequence($link)
+ u.nextFrame ->
+ expect(backgroundClicked).toHaveBeenCalled()
+ done()
describe 'template behavior', ->
it 'closes the modal on close icon click', (done) ->
- wasClosed = false
up.modal.extract('.modal', '<div class="modal">Modal content</div>', animation: false)
- closeIcon = $('.up-modal-close')
- up.on 'up:modal:close', ->
- wasClosed = true
+ $closeIcon = $('.up-modal-close')
- closeIcon.click()
+ Trigger.clickSequence($closeIcon)
u.nextFrame ->
- expect(wasClosed).toBe(true)
+ expect(up.modal.isOpen()).toBe(false)
done()
it 'closes the modal on backdrop click', (done) ->
- wasClosed = false
up.modal.extract('.modal', '<div class="modal">Modal content</div>', animation: false)
- backdrop = $('.up-modal-backdrop')
- up.on 'up:modal:close', ->
- wasClosed = true
+ $backdrop = $('.up-modal-backdrop')
- backdrop.click()
+ Trigger.clickSequence($backdrop)
u.nextFrame ->
- expect(wasClosed).toBe(true)
+ expect(up.modal.isOpen()).toBe(false)
done()
it 'closes the modal when the user presses the escape key', (done) ->
wasClosed = false
up.modal.extract('.modal', '<div class="modal">Modal content</div>', animation: false)
@@ -501,32 +489,26 @@
modal = $('.up-modal')
expect(modal).not.toContainElement('.up-modal-close')
it 'does not close the modal on backdrop click', (done) ->
- wasClosed = false
up.modal.extract('.modal', '<div class="modal">Modal content</div>', animation: false, closable: false)
- backdrop = $('.up-modal-backdrop')
- up.on 'up:modal:close', ->
- wasClosed = true
+ $backdrop = $('.up-modal-backdrop')
- backdrop.click()
+ Trigger.clickSequence($backdrop)
u.nextFrame ->
- expect(wasClosed).toBe(false)
+ expect(up.modal.isOpen()).toBe(true)
done()
it 'does not close the modal when the user presses the escape key', (done) ->
- wasClosed = false
up.modal.extract('.modal', '<div class="modal">Modal content</div>', animation: false, closable: false)
- up.on 'up:modal:close', ->
- wasClosed = true
escapeEvent = $.Event('keydown', keyCode: 27)
$('body').trigger(escapeEvent)
u.nextFrame ->
- expect(wasClosed).toBe(false)
+ expect(up.modal.isOpen()).toBe(true)
done()
describe 'when replacing content', ->
beforeEach ->
@@ -595,5 +577,32 @@
@respondWith("<div class='modal-content'></div>")
up.popup.attach('.modal-content', url: '/popup', target: '.popup-content')
@respondWith("<div class='popup-content'></div>")
expect($('.up-modal')).toExist()
expect($('.up-popup')).toExist()
+
+ it 'does not close the modal when a clicked [up-target] link within the modal links to cached content (bugfix)', (done) ->
+
+ up.modal.extract '.content', """
+ <div class="content">
+ <a href="/foo" up-target=".content">link</a>
+ </div>
+ """
+ $link = $('.up-modal .content a')
+ expect($link).toExist()
+ whenPreloaded = up.proxy.preload($link)
+
+ @respondWith """
+ <div class="content">
+ new text
+ </div>
+ """
+
+ whenPreloaded.then ->
+
+ Trigger.clickSequence($link)
+
+ u.nextFrame ->
+ expect($('.up-modal')).toExist()
+ expect($('.up-modal .content')).toHaveText('new text')
+
+ done()