mouseDown = Rx.Observable.fromEvent(document, 'mousedown')
mouseMove = Rx.Observable.fromEvent(document, 'mousemove')
mouseUp = Rx.Observable.fromEvent(document, 'mouseup')
mouseDown
.select( (e) -> { x: e.clientX, y : e.clientY})
.flatMap( (startPoint) ->
mouseMove
.select( (e) -> { x: e.clientX, y : e.clientY})
.do( (currentPoint) -> markArea(startPoint, currentPoint))
.takeUntil(mouseUp)
.last()
.select((endPoint)=>{start:startPoint, end:endPoint})
).subscribe((rect) -> drawRectangle(rect.start, rect.end))