             delete @_p
             return
 
-      defined: () ->
+      clip: ->
+        p = @p
+        if p > 1
+          @p = Infinity
+        if p < 0
+          @p = -Infinity
+        this
+
+      defined: ->
         isFinite(@o)
 
       minus: (t) ->

            else
              p = @p
              @_o =
                if p >= 0 && p < 1
                  Math.round(ruler.range.l + p * (ruler.range.u - ruler.range.l))
                else if p < 0
                  -Infinity
                else if p >= 1
                  Infinity
          set: (o) ->
            return if o == @_o
            @_o = o

            return

      drag: (event, which) ->
        x = new TimePoint(event.clientX, 'x')
        p = this[if which then 'ut' else 'lt'] =
          if which && x.p > 1
            new TimePoint(Infinity)
          else if !which && x.p < 0
            new TimePoint(-Infinity)
          else
            @snapping(x)
        if event.type != 'mousemove'
          $scope.form.position.$setDirty()
        return
