Skip to content

Commit 34d6bc5

Browse files
committed
Allow to pause the clock
1 parent eb0d4b7 commit 34d6bc5

7 files changed

+41
-2
lines changed

index.html

+3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ <h4>Select blinds</h4>
4949
<span data-tooltip class="has-tip" title="Restart">
5050
<i class="icon-refresh" data-role="restart"></i>
5151
</span>
52+
<span data-tooltip class="has-tip" title="Pause">
53+
<i class="icon-pause" data-role="pause"></i>
54+
</span>
5255
</div>
5356
</div>
5457
<div class="row">

sass/styles.scss

+2
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@
66
}
77
}
88
.main .controls {
9+
margin-bottom: 1em;
10+
span { margin-right: 30px; }
911
i[class^="icon-"] { font-size: 60px; }
1012
}

src/clock.coffee

+11-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@ class Clock
22
constructor: ->
33

44
start: ->
5-
@interval = setInterval((=> @tick()), @oneSecondInMilliseconds())
5+
unless @interval
6+
@interval = setInterval((=> @tick()), @oneSecondInMilliseconds())
67

78
stop: ->
8-
clearInterval(@interval)
9+
if @interval
10+
clearInterval(@interval)
11+
@interval = null
912

1013
tick: ->
1114

15+
toggle: ->
16+
if @interval
17+
@stop()
18+
else
19+
@start()
20+
1221
oneSecondInMilliseconds: ->
1322
1000

src/glue.coffee

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class Glue
1919
@clock.stop()
2020
@gui.switchToSetup())
2121

22+
After(@useCase, 'pause', => @clock.toggle())
23+
2224
After(@useCase, 'secondElapsed', => @gui.updateTimeLeft(@useCase.round.timeLeft()))
2325
After(@useCase, 'switchToNextRound', => @gui.updateBlinds(@useCase.currentBlind()))
2426
AfterAll(@useCase, [
@@ -36,6 +38,7 @@ class Glue
3638

3739
After(@gui, 'startClicked', => @useCase.start())
3840
After(@gui, 'restartClicked', => @useCase.restart())
41+
After(@gui, 'pauseClicked', => @useCase.pause())
3942
After(@gui, 'increaseRoundLengthClicked', => @useCase.increaseRoundLength())
4043
After(@gui, 'decreaseRoundLengthClicked', => @useCase.decreaseRoundLength())
4144
After(@gui, 'addBlindClicked', (blind) => @useCase.addBlind(blind))

src/gui.coffee

+3
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ class Gui
22
constructor: ->
33
$('[data-role=start]').click => @startClicked()
44
$('[data-role=restart]').click => @restartClicked()
5+
$('[data-role=pause]').click => @pauseClicked()
56
$('[data-role=increase-round-length]').click => @increaseRoundLengthClicked()
67
$('[data-role=decrease-round-length]').click => @decreaseRoundLengthClicked()
78

89
startClicked: ->
910

1011
restartClicked: ->
1112

13+
pauseClicked: ->
14+
1215
increaseRoundLengthClicked: ->
1316

1417
decreaseRoundLengthClicked: ->

src/spec/clock_spec.coffee

+17
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,20 @@ describe "Clock", =>
1717
@clock.stop()
1818
jasmine.Clock.tick(1000)
1919
expect(@clock.tick).not.toHaveBeenCalled()
20+
21+
describe "toggle when clock is stopped", =>
22+
it "starts it", =>
23+
spyOn(@clock, 'tick')
24+
@clock.stop()
25+
@clock.toggle()
26+
jasmine.Clock.tick(1000)
27+
expect(@clock.tick).toHaveBeenCalled()
28+
29+
describe "toggle when clock is running", =>
30+
it "stops it", =>
31+
spyOn(@clock, 'tick')
32+
@clock.start()
33+
@clock.toggle()
34+
jasmine.Clock.tick(1000)
35+
expect(@clock.tick).not.toHaveBeenCalled()
36+

src/use_case.coffee

+2
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,7 @@ class UseCase
3838
@round.reset()
3939
@enabledBlinds.reset()
4040

41+
pause: =>
42+
4143
currentBlind: =>
4244
@enabledBlinds.current()

0 commit comments

Comments
 (0)