nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jqTree / src / node_element.coffee
1 node = require './node'
2 Position = node.Position
3
4
5 $ = jQuery
6
7
8 class NodeElement
9     constructor: (node, tree_widget) ->
10         @init(node, tree_widget)
11
12     init: (node, tree_widget) ->
13         @node = node
14         @tree_widget = tree_widget
15
16         if not node.element
17             node.element = @tree_widget.element
18
19         @$element = $(node.element)
20
21     getUl: ->
22         return @$element.children('ul:first')
23
24     getSpan: ->
25         return @$element.children('.jqtree-element').find('span.jqtree-title')
26
27     getLi: ->
28         return @$element
29
30     addDropHint: (position) ->
31         if position == Position.INSIDE
32             return new BorderDropHint(@$element)
33         else
34             return new GhostDropHint(@node, @$element, position)
35
36     select: ->
37         $li = @getLi()
38
39         $li.addClass('jqtree-selected')
40         $li.attr('aria-selected', 'true')
41
42         $span = @getSpan()
43         $span.attr('tabindex', 0)
44
45     deselect: ->
46         $li = @getLi()
47
48         $li.removeClass('jqtree-selected')
49         $li.attr('aria-selected', 'false')
50
51         $span = @getSpan()
52         $span.attr('tabindex', -1)
53
54
55 class FolderElement extends NodeElement
56     open: (on_finished, slide=true) ->
57         if not @node.is_open
58             @node.is_open = true
59             $button = @getButton()
60             $button.removeClass('jqtree-closed')
61             $button.html('')
62             $button.append(@tree_widget.renderer.opened_icon_element.cloneNode(false))
63
64             doOpen = =>
65                 $li = @getLi()
66                 $li.removeClass('jqtree-closed')
67
68                 $span = @getSpan()
69                 $span.attr('aria-expanded', 'true')
70
71                 if on_finished
72                     on_finished(@node)
73
74                 @tree_widget._triggerEvent('tree.open', node: @node)
75
76             if slide
77                 @getUl().slideDown('fast', doOpen)
78             else
79                 @getUl().show()
80                 doOpen()
81
82     close: (slide=true) ->
83         if @node.is_open
84             @node.is_open = false
85             $button = @getButton()
86             $button.addClass('jqtree-closed')
87             $button.html('')
88             $button.append(@tree_widget.renderer.closed_icon_element.cloneNode(false))
89
90             doClose = =>
91                 $li = @getLi()
92                 $li.addClass('jqtree-closed')
93
94                 $span = @getSpan()
95                 $span.attr('aria-expanded', 'false')
96
97                 @tree_widget._triggerEvent('tree.close', node: @node)
98
99             if slide
100                 @getUl().slideUp('fast', doClose)
101             else
102                 @getUl().hide()
103                 doClose()
104
105     getButton: ->
106         return @$element.children('.jqtree-element').find('a.jqtree-toggler')
107
108     addDropHint: (position) ->
109         if not @node.is_open and position == Position.INSIDE
110             return new BorderDropHint(@$element)
111         else
112             return new GhostDropHint(@node, @$element, position)
113
114
115 class BorderDropHint
116     constructor: ($element) ->
117         $div = $element.children('.jqtree-element')
118         width = $element.width() - 4
119
120         @$hint = $('<span class="jqtree-border"></span>')
121         $div.append(@$hint)
122
123         @$hint.css(
124             width: width
125             height: $div.outerHeight() - 4
126         )
127
128     remove: ->
129         @$hint.remove()
130
131
132 class GhostDropHint
133     constructor: (node, $element, position) ->
134         @$element = $element
135
136         @node = node
137         @$ghost = $('<li class="jqtree_common jqtree-ghost"><span class="jqtree_common jqtree-circle"></span><span class="jqtree_common jqtree-line"></span></li>')
138
139         if position == Position.AFTER
140             @moveAfter()
141         else if position == Position.BEFORE
142             @moveBefore()
143         else if position == Position.INSIDE
144             if node.isFolder() and node.is_open
145                 @moveInsideOpenFolder()
146             else
147                 @moveInside()
148
149     remove: ->
150         @$ghost.remove()
151
152     moveAfter: ->
153         @$element.after(@$ghost)
154
155     moveBefore: ->
156         @$element.before(@$ghost)
157
158     moveInsideOpenFolder: ->
159         $(@node.children[0].element).before(@$ghost)
160
161     moveInside: ->
162         @$element.after(@$ghost)
163         @$ghost.addClass('jqtree-inside')
164
165
166 module.exports =
167     BorderDropHint: BorderDropHint
168     FolderElement: FolderElement
169     GhostDropHint: GhostDropHint
170     NodeElement: NodeElement