Skip to content

Commit e776056

Browse files
committed
Updated distributables
1 parent 28755be commit e776056

File tree

4 files changed

+445
-264
lines changed

4 files changed

+445
-264
lines changed

build/jquery.runner-min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/jquery.runner-min.js.gz

1.52 KB
Binary file not shown.

build/jquery.runner.coffee

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
meta =
2+
version: "<%= pkg.version %>"
3+
name: "<%= pkg.title %>"
4+
5+
runners = {}
6+
_uid = 1
7+
8+
pad = (num) -> (if num < 10 then '0' else '') + num
9+
uid = -> 'runner' + _uid++
10+
11+
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+
21+
if time < 0
22+
time = Math.abs(time)
23+
prefix = '-'
24+
25+
for step, i in steps
26+
value = 0
27+
if time >= step
28+
value = Math.floor(time / step)
29+
time -= value * step
30+
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)
33+
34+
prefix + output
35+
36+
class Runner
37+
constructor: (items, options, start) ->
38+
return new Runner(items, options, start) unless (@ instanceof Runner)
39+
40+
@items = items
41+
id = @id = uid()
42+
@settings = $.extend({}, @settings, options)
43+
44+
runners[id] = @
45+
items.each (index, element) ->
46+
$(element).data 'runner', id
47+
return
48+
49+
@value @settings.startAt
50+
@start() if start or @settings.autostart
51+
52+
running: false
53+
updating: false
54+
finished: false
55+
interval: null
56+
total: 0
57+
lastTime: 0
58+
startTime: 0
59+
lastLap: 0
60+
lapTime: 0
61+
62+
settings:
63+
autostart: false
64+
interval: 20
65+
countdown: false
66+
stopAt: null
67+
startAt: 0
68+
milliseconds: true
69+
format: null
70+
71+
value: (value) ->
72+
@items.each (item, element) =>
73+
item = $(element)
74+
action = if item.is('input') then 'val' else 'text'
75+
item[action](@format(value))
76+
return
77+
return
78+
79+
format: (value) ->
80+
format = @settings.format
81+
format = if $.isFunction(format) then format else formatTime
82+
format(value, @settings)
83+
84+
update: ->
85+
unless @updating
86+
@updating = true
87+
settings = @settings
88+
time = $.now()
89+
stopAt = settings.stopAt
90+
countdown = settings.countdown
91+
delta = time - @lastTime
92+
@lastTime = time
93+
if countdown then @total -= delta else @total += delta
94+
if stopAt isnt null and ((countdown and @total <= stopAt) or (not countdown and @total >= stopAt))
95+
@total = stopAt
96+
@finished = true
97+
@stop()
98+
@fire 'runnerFinish'
99+
100+
@value @total
101+
@updating = false
102+
return
103+
104+
fire: (event) ->
105+
@items.trigger event, @info()
106+
return
107+
108+
start: ->
109+
unless @running
110+
@running = true
111+
@reset() if not @startTime or @finished
112+
@lastTime = $.now()
113+
@interval = setInterval(=>
114+
@update()
115+
return
116+
, @settings.interval)
117+
118+
@fire 'runnerStart'
119+
return
120+
121+
stop: ->
122+
if @running
123+
@running = false
124+
clearInterval @interval
125+
@update()
126+
@fire 'runnerStop'
127+
return
128+
129+
toggle: ->
130+
if @running then @stop() else @start()
131+
return
132+
133+
lap: ->
134+
last = @lastTime
135+
lap = last - @lapTime
136+
137+
if @settings.countdown
138+
lap = -lap
139+
140+
if @running or lap
141+
@lastLap = lap
142+
@lapTime = last
143+
144+
last = @format @lastLap
145+
@fire 'runnerLap'
146+
147+
return last
148+
149+
reset: (stop) ->
150+
@stop() if stop
151+
152+
nowTime = $.now()
153+
if typeof @settings.startAt is 'number' and not @settings.countdown
154+
nowTime -= @settings.startAt
155+
156+
@startTime = @lapTime = @lastTime = nowTime
157+
@total = @settings.startAt
158+
@value @total
159+
@finished = false
160+
@fire 'runnerReset'
161+
return
162+
163+
info: ->
164+
lap = @lastLap or 0
165+
{
166+
running: @running
167+
finished: @finished
168+
time: @total
169+
formattedTime: @format(@total)
170+
startTime: @startTime
171+
lapTime: lap
172+
formattedLapTime: @format(lap)
173+
settings: @settings
174+
}
175+
176+
if @$
177+
@$.fn.runner = (method, options, start) ->
178+
if not method
179+
method = 'init'
180+
181+
if typeof method is 'object'
182+
start = options
183+
options = method
184+
method = 'init'
185+
186+
id = @data('runner')
187+
runner = if id then runners[id] else false
188+
switch method
189+
when 'init' then new Runner(@, options, start)
190+
when 'info' then return runner.info() if runner
191+
when 'reset' then runner.reset(options) if runner
192+
when 'lap' then return runner.lap() if runner
193+
when 'start', 'stop', 'toggle' then return runner[method]() if runner
194+
when 'version' then return meta.version
195+
else $.error '[' + meta.name + '] Method ' + method + ' does not exist'
196+
return @
197+
@$.fn.runner.format = formatTime
198+
else
199+
throw '[' + meta.name + '] jQuery library is required for this plugin to work'

0 commit comments

Comments
 (0)