|
22 | 22 | is-on: -> return @running |
23 | 23 | on: (delay=0) -> @toggle true, delay |
24 | 24 | off: (delay=0, force = false) -> @toggle false, delay, force |
| 25 | + # if v defined, force state to v. |
| 26 | + cancel: (v) -> clearTimeout @handle; if v? => @toggle v |
25 | 27 | flash: (dur=1000, delay=0) -> @toggle(true, delay).then ~> @toggle false, dur + delay |
26 | 28 | render: -> |
27 | 29 | if !(@running and @opt.ctrl and @opt.ctrl.step) => return @render.runid = -1 |
|
36 | 38 | ret = requestAnimationFrame -> _ it |
37 | 39 | toggle: (v, delay=0, force = false) -> |
38 | 40 | d = (if !(v?) => (if @root.0.classList.contains @opt.active-class => -1 else 1) else if v => 1 else -1) |
| 41 | + if @handle => @cancel! |
39 | 42 | if delay => return new Promise (res, rej) ~> |
40 | | - if d > 0 => @toggle(v)then ~> setTimeout (~> res!), delay # if is on : resolve after on |
41 | | - else => setTimeout (~> @toggle(v)then ~> res!), delay # if is off: off after resolve |
| 43 | + # new approach - treat delay directly as a simple delay before action. |
| 44 | + @handle = setTimeout (~> @toggle(v)then ~> res!), delay |
| 45 | + # old approach |
| 46 | + # if is on: resolve after on |
| 47 | + #if d > 0 => @toggle(v)then ~> setTimeout (~> res!), delay |
| 48 | + # if is off: off after resolve |
| 49 | + #else => setTimeout (~> @toggle(v)then ~> res!), delay |
42 | 50 | new Promise (res, rej) ~> |
43 | 51 | @count += d |
44 | 52 | if !force and !@opt.atomic and ( @count >= 2 or (@count == 1 and d < 0)) => return res! |
|
0 commit comments