+@Tether.modules.push
+ position: ({top, left}) ->
+ return unless @options.shift
+
+ result = (val) ->
+ if typeof val is 'function'
+ val.call @, {top, left}
+ else
+ val
+
+ shift = result @options.shift
+
+ if typeof shift is 'string'
+ shift = shift.split(' ')
+ shift[1] or= shift[0]
+
+ [shiftTop, shiftLeft] = shift
+
+ shiftTop = parseFloat shiftTop, 10
+ shiftLeft = parseFloat shiftLeft, 10
+ else
+ [shiftTop, shiftLeft] = [shift.top, shift.left]
+
+ top += shiftTop
+ left += shiftLeft
+
+ {top, left}