Skip to content

Commit 0f8f7e8

Browse files
committed
Make clock able to change start move clicking on face
1 parent cbcd661 commit 0f8f7e8

File tree

5 files changed

+26
-13
lines changed

5 files changed

+26
-13
lines changed

components/clock/face.cjsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module.exports = React.createClass
2020

2121
# -- Render
2222
render: ->
23-
<div ref="root" className={css.face} style={@_faceStyle()}>
23+
<div ref="root" className={css.face} onMouseDown={@props.onMouseDown} style={@_faceStyle()}>
2424
{ for i, k in @props.numbers
2525
<span className={css.number + (if parseInt(i) == @props.activeNumber then ' active' else '')}
2626
style={@_numberStyle(@props.radius - @props.spacing, k + 1)}

components/clock/hand.cjsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,28 @@ module.exports = React.createClass
3232
@props.onHandChange(nextState.angle)
3333

3434
# -- Event handlers
35-
_onKnobMouseDown: ->
36-
_addEventsToDocument(@_getMouseEventMap())
37-
3835
_getMouseEventMap: ->
3936
mousemove : @onMouseMove
4037
mouseup : @onMouseUp
4138

4239
onMouseMove: (event) ->
43-
position = _getMousePosition(event)
44-
@props.onHandMouseMove(@_getPositionRadius(position)) if @props.onHandMouseMove
45-
newDegrees = @_trimAngleToValue(@_positionToAngle(position))
46-
newDegrees = if newDegrees == 360 then 0 else newDegrees
47-
@setState(angle: newDegrees) if @state.angle != newDegrees
40+
@_move(_getMousePosition(event))
4841

4942
onMouseUp: ->
5043
@_end(@_getMouseEventMap())
5144

45+
# -- Public API
46+
mouseStart: (event) ->
47+
_addEventsToDocument(@_getMouseEventMap())
48+
@_move(_getMousePosition(event))
49+
5250
# -- Internal methods
51+
_move: (position) ->
52+
@props.onHandMouseMove(@_getPositionRadius(position)) if @props.onHandMouseMove
53+
newDegrees = @_trimAngleToValue(@_positionToAngle(position))
54+
newDegrees = if newDegrees == 360 then 0 else newDegrees
55+
@setState(angle: newDegrees) if @state.angle != newDegrees
56+
5357
_getPositionRadius: (position) ->
5458
x = @props.origin.x - position.x
5559
y = @props.origin.y - position.y
@@ -71,7 +75,7 @@ module.exports = React.createClass
7175
style.height = @props.length - @state.knobWidth/2
7276

7377
<div className={css.hand + ' ' + @props.className} style={style}>
74-
<div ref='knob' className={css.knob} onMouseDown={@_onKnobMouseDown}></div>
78+
<div ref='knob' className={css.knob}></div>
7579
</div>
7680

7781
# -- Static Helper functions

components/clock/hours.cjsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ module.exports = React.createClass
2222
_onHandChange: (degrees) ->
2323
@props.onChange(@_valueFromDegrees(degrees))
2424

25+
_onMouseDown: (event)->
26+
@refs.hand.mouseStart(event)
27+
2528
# -- Internal Methods
2629
_valueFromDegrees: (degrees) ->
2730
if @props.format == 'ampm' || @props.format == '24hr' && @state.innerNumber
@@ -37,19 +40,21 @@ module.exports = React.createClass
3740

3841
<div>
3942
<Face
43+
onMouseDown={@_onMouseDown}
4044
numbers={if @props.format == '24hr' then OUTER_NUMBERS else INNER_NUMBERS}
4145
spacing={@props.spacing}
4246
radius={@props.radius}
4347
activeNumber={@props.selected} />
4448
{
4549
if @props.format == '24hr'
4650
<Face
51+
onMouseDown={@_onMouseDown}
4752
numbers={INNER_NUMBERS}
4853
spacing={@props.spacing}
4954
radius={innerRadius}
5055
activeNumber={@props.selected} />
5156
}
52-
<Hand
57+
<Hand ref='hand'
5358
degrees={@state.degrees}
5459
initialAngle={@props.selected * STEP}
5560
length={handLength}

components/clock/minutes.cjsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,21 @@ module.exports = React.createClass
1616
_onHandChange: (degrees) ->
1717
@props.onChange(degrees/STEP)
1818

19+
_onMouseDown: (event)->
20+
@refs.hand.mouseStart(event)
21+
1922
# -- Render
2023
render: ->
2124
handClass = if MINUTES.indexOf(('0' + @props.selected).slice(-2)) == -1 then 'smallKnob' else ''
2225

2326
<div>
2427
<Face
28+
onMouseDown={@_onMouseDown}
2529
numbers={MINUTES}
2630
spacing={@props.spacing}
2731
radius={@props.radius}
2832
activeNumber={@props.selected} />
29-
<Hand
33+
<Hand ref='hand'
3034
className={handClass}
3135
initialAngle={@props.selected * STEP}
3236
length={@props.radius - @props.spacing}

components/clock/style.styl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ SMALL_KNOB_SIZE = 14px
1616

1717
:local(.face)
1818
border-radius : 50%
19-
pointer-events : none
2019
position : relative
2120
z-index : Z_INDEX_HIGH
2221

2322
:local(.number)
2423
height : NUMBER_SIZE
2524
margin-left : -(NUMBER_SIZE/2)
2625
margin-top : -(NUMBER_SIZE/2)
26+
pointer-events : none
2727
position : relative
2828
text-align : center
2929
width : NUMBER_SIZE

0 commit comments

Comments
 (0)