Skip to content

Commit 93021c4

Browse files
committed
Improvements and fixes + indentation changes
1 parent f309a70 commit 93021c4

File tree

3 files changed

+179
-168
lines changed

3 files changed

+179
-168
lines changed

lib/expose.coffee

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
21
if $
3-
$.fn.runner = (method, options, start) ->
4-
if not method
5-
method = 'init'
2+
$.fn.runner = (method, options, start) ->
3+
if not method
4+
method = 'init'
65

7-
if typeof method is 'object'
8-
start = options
9-
options = method
10-
method = 'init'
6+
if typeof method is 'object'
7+
start = options
8+
options = method
9+
method = 'init'
1110

12-
id = @data('runner')
13-
runner = if id then runners[id] else false
14-
switch method
15-
when 'init' then new Runner(@, options, start)
16-
when 'info' then return runner.info() if runner
17-
when 'reset' then runner.reset(options) if runner
18-
when 'lap' then return runner.lap() if runner
19-
when 'start', 'stop', 'toggle' then return runner[method]() if runner
20-
when 'version' then return meta.version
21-
else $.error '[' + meta.name + '] Method ' + method + ' does not exist'
22-
return @
23-
$.fn.runner.format = formatTime
11+
id = @data('runner')
12+
runner = if id then runners[id] else false
13+
switch method
14+
when 'init' then new Runner(@, options, start)
15+
when 'info' then return runner.info() if runner
16+
when 'reset' then runner.reset(options) if runner
17+
when 'lap' then return runner.lap() if runner
18+
when 'start', 'stop', 'toggle' then return runner[method]() if runner
19+
when 'version' then return meta.version
20+
else $.error '[' + meta.name + '] Method ' + method + ' does not exist'
21+
return @
22+
$.fn.runner.format = formatTime
2423
else
25-
throw '[' + meta.name + '] jQuery library is required for this plugin to work'
24+
throw '[' + meta.name + '] jQuery library is required for this plugin to work'

lib/runner.coffee

Lines changed: 137 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,139 @@
11
class Runner
2-
constructor: (items, options, start) ->
3-
return new Runner(items, options, start) if !(@ instanceof Runner)
4-
5-
@items = items
6-
id = @id = uid()
7-
@settings = $.extend({}, @settings, options)
8-
9-
runners[id] = @
10-
items.each (index, element) ->
11-
$(element).data 'runner', id
12-
return
13-
14-
@value @settings.startAt
15-
16-
@start() if start or @settings.autostart
17-
18-
running: false
19-
updating: false
20-
finished: false
21-
interval: null
22-
total: 0
23-
lastTime: 0
24-
startTime: 0
25-
lastLap: 0
26-
lapTime: 0
27-
28-
settings:
29-
autostart: false
30-
interval: 20
31-
countdown: false
32-
stopAt: null
33-
startAt: 0
34-
milliseconds: true
35-
format: null
36-
37-
value: (value) ->
38-
@items.each (item, element) =>
39-
item = $(element)
40-
action = if item.is('input') then 'val' else 'text'
41-
item[action](@format(value))
42-
return
2+
constructor: (items, options, start) ->
3+
return new Runner(items, options, start) unless (@ instanceof Runner)
4+
5+
@items = items
6+
id = @id = uid()
7+
@settings = $.extend({}, @settings, options)
8+
9+
runners[id] = @
10+
items.each (index, element) ->
11+
$(element).data 'runner', id
12+
return
13+
14+
@value @settings.startAt
15+
@start() if start or @settings.autostart
16+
17+
running: false
18+
updating: false
19+
finished: false
20+
interval: null
21+
total: 0
22+
lastTime: 0
23+
startTime: 0
24+
lastLap: 0
25+
lapTime: 0
26+
27+
settings:
28+
autostart: false
29+
interval: 20
30+
countdown: false
31+
stopAt: null
32+
startAt: 0
33+
milliseconds: true
34+
format: null
35+
36+
value: (value) ->
37+
@items.each (item, element) =>
38+
item = $(element)
39+
action = if item.is('input') then 'val' else 'text'
40+
item[action](@format(value))
41+
return
42+
return
43+
44+
format: (value) ->
45+
format = @settings.format
46+
format = if $.isFunction(format) then format else formatTime
47+
format(value, @settings)
48+
49+
update: ->
50+
unless @updating
51+
@updating = true
52+
settings = @settings
53+
time = $.now()
54+
stopAt = settings.stopAt
55+
countdown = settings.countdown
56+
delta = time - @lastTime
57+
@lastTime = time
58+
if countdown then @total -= delta else @total += delta
59+
if stopAt isnt null and ((countdown and @total <= stopAt) or (not countdown and @total >= stopAt))
60+
@total = stopAt
61+
@finished = true
62+
@stop()
63+
@fire 'runnerFinish'
64+
65+
@value @total
66+
@updating = false
67+
return
68+
69+
fire: (event) ->
70+
@items.trigger event, @info()
71+
return
72+
73+
start: ->
74+
unless @running
75+
@running = true
76+
@reset() if not @startTime or @finished
77+
@lastTime = $.now()
78+
@interval = setInterval(=>
79+
@update()
4380
return
44-
45-
format: (value) ->
46-
format = @settings.format
47-
format = if $.isFunction(format) then format else formatTime
48-
format(value, @settings)
49-
50-
update: ->
51-
unless @updating
52-
@updating = true
53-
settings = @settings
54-
time = $.now()
55-
stopAt = settings.stopAt
56-
countdown = settings.countdown
57-
delta = time - @lastTime
58-
@lastTime = time
59-
if countdown then @total -= delta else @total += delta
60-
if stopAt isnt null and ((countdown and @total <= stopAt) or (not countdown and @total >= stopAt))
61-
@total = stopAt
62-
@finished = true
63-
@stop()
64-
@fire 'runnerFinish'
65-
66-
@value @total
67-
@updating = false
68-
return
69-
70-
fire: (event) ->
71-
@items.trigger event, @info()
72-
return
73-
74-
start: ->
75-
unless @running
76-
@running = true
77-
@reset() if not @startTime or @finished
78-
@lastTime = $.now()
79-
@interval = setInterval(=>
80-
@update()
81-
return
82-
, @settings.interval)
83-
84-
@fire 'runnerStart'
85-
return
86-
87-
stop: ->
88-
if @running
89-
@running = false
90-
clearInterval @interval
91-
@update()
92-
@fire 'runnerStop'
93-
return
94-
95-
toggle: ->
96-
if @running then @stop() else @start()
97-
return
98-
99-
lap: ->
100-
last = @lastTime
101-
lap = last - @lapTime
102-
if @running or lap
103-
@lastLap = lap
104-
@lapTime = last
105-
last = @format @lastLap
106-
@fire 'runnerLap'
107-
return last
108-
109-
reset: (stop) ->
110-
@stop() if stop
111-
@startTime = @lapTime = @lastTime = $.now()
112-
@total = @settings.startAt
113-
@value @total
114-
@finished = false
115-
@fire 'runnerReset'
116-
return
117-
118-
info: ->
119-
lap = @lastLap or 0
120-
{
121-
running: @running
122-
finished: @finished
123-
time: @total
124-
formattedTime: @format(@total)
125-
startTime: @startTime
126-
lapTime: lap
127-
formattedLapTime: @format(lap)
128-
settings: @settings
129-
}
81+
, @settings.interval)
82+
83+
@fire 'runnerStart'
84+
return
85+
86+
stop: ->
87+
if @running
88+
@running = false
89+
clearInterval @interval
90+
@update()
91+
@fire 'runnerStop'
92+
return
93+
94+
toggle: ->
95+
if @running then @stop() else @start()
96+
return
97+
98+
lap: ->
99+
last = @lastTime
100+
lap = last - @lapTime
101+
102+
if @settings.countdown
103+
lap = -lap
104+
105+
if @running or lap
106+
@lastLap = lap
107+
@lapTime = last
108+
109+
last = @format @lastLap
110+
@fire 'runnerLap'
111+
112+
return last
113+
114+
reset: (stop) ->
115+
@stop() if stop
116+
117+
nowTime = $.now()
118+
if typeof @settings.startAt is 'number' and not @settings.countdown
119+
nowTime -= @settings.startAt
120+
121+
@startTime = @lapTime = @lastTime = nowTime
122+
@total = @settings.startAt
123+
@value @total
124+
@finished = false
125+
@fire 'runnerReset'
126+
return
127+
128+
info: ->
129+
lap = @lastLap or 0
130+
{
131+
running: @running
132+
finished: @finished
133+
time: @total
134+
formattedTime: @format(@total)
135+
startTime: @startTime
136+
lapTime: lap
137+
formattedLapTime: @format(lap)
138+
settings: @settings
139+
}

lib/utils.coffee

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
meta =
2-
version: "<%= pkg.version %>"
3-
name: "<%= pkg.title %>"
2+
version: "<%= pkg.version %>"
3+
name: "<%= pkg.title %>"
44

55
runners = {}
66
_uid = 1
@@ -9,24 +9,26 @@ pad = (num) -> (if num < 10 then '0' else '') + num
99
uid = -> 'runner' + _uid++
1010

1111
formatTime = (time, settings) ->
12-
settings = settings or {}
13-
steps = [3600000, 60000, 1000, 10]
14-
separator = ['', ':', ':', '.']
15-
prefix = ''
16-
output = ''
17-
ms = settings.milliseconds
18-
len = steps.length
19-
value = 0
20-
if time < 0
21-
time = Math.abs(time)
22-
prefix = '-'
12+
settings = settings or {}
13+
steps = [3600000, 60000, 1000, 10]
14+
separator = ['', ':', ':', '.']
15+
prefix = ''
16+
output = ''
17+
ms = settings.milliseconds
18+
len = steps.length
19+
value = 0
20+
21+
if time < 0
22+
time = Math.abs(time)
23+
prefix = '-'
2324

24-
for step, i in steps
25-
if time >= step
26-
value = Math.floor(time / step)
27-
time -= value * step
25+
for step, i in steps
26+
value = 0
27+
if time >= step
28+
value = Math.floor(time / step)
29+
time -= value * step
2830

29-
if (value or i > 1 or output) and (i isnt len - 1 or ms)
30-
output += (if output then separator[i] else '') + pad(value)
31+
if (value or i > 1 or output) and (i isnt len - 1 or ms)
32+
output += (if output then separator[i] else '') + pad(value)
3133

32-
prefix + output
34+
prefix + output

0 commit comments

Comments
 (0)