Edit in JSFiddle

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))