Extending Tether

Tether has a module system which can be used to modify Tether’s positioning, or just do something each time the Tether is moved.

Tether has an array called Tether.modules, push onto it to add a module:

  position: ({top, left}) ->
    top += 10

    {top, left}


Your position function can either return a new object with top and left, null/undefined to leave the coordinates unchanged, or false to cancel the positioning.

The position function is passed an object with the following elements:

  left, // The element's new position, from the top left corner of the page
  targetAttachment, // The targetAttachment, with 'auto' resolved to an actual attachment
  targetPos, // The coordinates of the target
  attachment, // The attachment, as passed in the option
  elementPos, // The coordinates of the element
  offset, // The offset, after it's converted into pixels and the manual offset is added
  targetOffset, // The attachment is converted into an offset and is included in these values
  manualOffset, // The manual offset, in pixels

It is called with the Tether instance as its context (this).


Modules can also have an initialize function which will be called when a new tether is created. The initialize function is also called with the Tether instance as its context.

  initialize: ->
    console.log "New Tether Created!", @


Constraints and shift are both implemented as modules. Mark Attachment is used by the docs.