$ = jQuery class SelectNodeHandler constructor: (tree_widget) -> @tree_widget = tree_widget @clear() getSelectedNode: -> selected_nodes = @getSelectedNodes() if selected_nodes.length return selected_nodes[0] else return false getSelectedNodes: -> if @selected_single_node return [@selected_single_node] else selected_nodes = [] for id of @selected_nodes node = @tree_widget.getNodeById(id) if node selected_nodes.push(node) return selected_nodes getSelectedNodesUnder: (parent) -> if @selected_single_node if parent.isParentOf(@selected_single_node) return [@selected_single_node] else return [] else selected_nodes = [] for id of @selected_nodes node = @tree_widget.getNodeById(id) if node and parent.isParentOf(node) selected_nodes.push(node) return selected_nodes isNodeSelected: (node) -> if not node return false else if node.id if @selected_nodes[node.id] return true else return false else if @selected_single_node return @selected_single_node.element == node.element else return false clear: -> @selected_nodes = {} @selected_single_node = null removeFromSelection: (node, include_children=false) -> if not node.id if @selected_single_node && node.element == @selected_single_node.element @selected_single_node = null else delete @selected_nodes[node.id] if include_children node.iterate( (n) => delete @selected_nodes[node.id] return true ) addToSelection: (node) -> if node.id @selected_nodes[node.id] = true else @selected_single_node = node module.exports = SelectNodeHandler