89ca4f04f6
- No longer depends on the "hidden checkbox". - No longer depends on manually storing/restoring the scroll position. Instead, we take advantage of jquery.scrollTo. - Event-based. - Simplifies the state-based styling.
51 lines
1.3 KiB
CoffeeScript
51 lines
1.3 KiB
CoffeeScript
#= require zen_mode
|
|
|
|
describe 'ZenMode', ->
|
|
fixture.preload('zen_mode.html')
|
|
|
|
beforeEach ->
|
|
fixture.load('zen_mode.html')
|
|
|
|
# Stub Dropzone.forElement(...).enable()
|
|
spyOn(Dropzone, 'forElement').and.callFake ->
|
|
enable: -> true
|
|
|
|
@zen = new ZenMode()
|
|
|
|
# Set this manually because we can't actually scroll the window
|
|
@zen.scroll_position = 456
|
|
|
|
describe 'on enter', ->
|
|
it 'pauses Mousetrap', ->
|
|
spyOn(Mousetrap, 'pause')
|
|
enterZen()
|
|
expect(Mousetrap.pause).toHaveBeenCalled()
|
|
|
|
it 'removes textarea styling', ->
|
|
$('textarea').attr('style', 'height: 400px')
|
|
enterZen()
|
|
expect('textarea').not.toHaveAttr('style')
|
|
|
|
describe 'in use', ->
|
|
beforeEach -> enterZen()
|
|
|
|
it 'exits on Escape', ->
|
|
escapeKeydown()
|
|
expect($('.zen-backdrop')).not.toHaveClass('fullscreen')
|
|
|
|
describe 'on exit', ->
|
|
beforeEach -> enterZen()
|
|
|
|
it 'unpauses Mousetrap', ->
|
|
spyOn(Mousetrap, 'unpause')
|
|
exitZen()
|
|
expect(Mousetrap.unpause).toHaveBeenCalled()
|
|
|
|
it 'restores the scroll position', ->
|
|
spyOn(@zen, 'scrollTo')
|
|
exitZen()
|
|
expect(@zen.scrollTo).toHaveBeenCalled()
|
|
|
|
enterZen = -> $('a.js-zen-enter').click() # Ohmmmmmmm
|
|
exitZen = -> $('a.js-zen-leave').click()
|
|
escapeKeydown = -> $('textarea').trigger($.Event('keydown', {keyCode: 27}))
|