1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#= 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}))