summaryrefslogtreecommitdiffstats
path: root/afm-client/bower_components/tether/coffee/abutment.coffee
blob: 5f331e45530417f8ba9d1ff1db3ac42f209afd2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{getBounds, updateClasses, defer} = @Tether.Utils

@Tether.modules.push
  position: ({top, left}) ->
    {height, width} = @cache 'element-bounds', => getBounds @element

    targetPos = @getTargetBounds()

    bottom = top + height
    right = left + width

    abutted = []
    if top <= targetPos.bottom and bottom >= targetPos.top
      for side in ['left', 'right']
        if targetPos[side] in [left, right]
          abutted.push side

    if left <= targetPos.right and right >= targetPos.left
      for side in ['top', 'bottom']
        if targetPos[side] in [top, bottom]
          abutted.push side

    allClasses = []
    addClasses = []
    
    sides = ['left', 'top', 'right', 'bottom']
    allClasses.push @getClass('abutted')
    for side in sides
      allClasses.push "#{ @getClass('abutted') }-#{ side }"

    if abutted.length
      addClasses.push @getClass('abutted')
    for side in abutted
      addClasses.push "#{ @getClass('abutted') }-#{ side }"

    defer =>
      updateClasses @target, addClasses, allClasses
      updateClasses @element, addClasses, allClasses

    true