// Generated by CoffeeScript 1.6.1 /* Copyright 2013 Marco Braak Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ (function() { var $, BorderDropHint, DragAndDropHandler, DragElement, FolderElement, GhostDropHint, JqTreeWidget, MouseWidget, Node, NodeElement, Position, SaveStateHandler, ScrollHandler, SelectNodeHandler, SimpleWidget, TRIANGLE_DOWN, TRIANGLE_RIGHT, html_escape, indexOf, json_escapable, json_meta, json_quote, json_str, _indexOf, __slice = [].slice, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; $ = this.jQuery; SimpleWidget = (function() { SimpleWidget.prototype.defaults = {}; function SimpleWidget(el, options) { this.$el = $(el); this.options = $.extend({}, this.defaults, options); } SimpleWidget.prototype.destroy = function() { return this._deinit(); }; SimpleWidget.prototype._init = function() { return null; }; SimpleWidget.prototype._deinit = function() { return null; }; SimpleWidget.register = function(widget_class, widget_name) { var callFunction, createWidget, destroyWidget, getDataKey; getDataKey = function() { return "simple_widget_" + widget_name; }; createWidget = function($el, options) { var data_key, el, widget, _i, _len; data_key = getDataKey(); for (_i = 0, _len = $el.length; _i < _len; _i++) { el = $el[_i]; widget = new widget_class(el, options); if (!$.data(el, data_key)) { $.data(el, data_key, widget); } widget._init(); } return $el; }; destroyWidget = function($el) { var data_key, el, widget, _i, _len, _results; data_key = getDataKey(); _results = []; for (_i = 0, _len = $el.length; _i < _len; _i++) { el = $el[_i]; widget = $.data(el, data_key); if (widget && (widget instanceof SimpleWidget)) { widget.destroy(); } _results.push($.removeData(el, data_key)); } return _results; }; callFunction = function($el, function_name, args) { var el, result, widget, widget_function, _i, _len; result = null; for (_i = 0, _len = $el.length; _i < _len; _i++) { el = $el[_i]; widget = $.data(el, getDataKey()); if (widget && (widget instanceof SimpleWidget)) { widget_function = widget[function_name]; if (widget_function && (typeof widget_function === 'function')) { result = widget_function.apply(widget, args); } } } return result; }; return $.fn[widget_name] = function() { var $el, args, argument1, function_name, options; argument1 = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; $el = this; if (argument1 === void 0 || typeof argument1 === 'object') { options = argument1; return createWidget($el, options); } else if (typeof argument1 === 'string' && argument1[0] !== '_') { function_name = argument1; if (function_name === 'destroy') { return destroyWidget($el); } else { return callFunction($el, function_name, args); } } }; }; return SimpleWidget; })(); this.SimpleWidget = SimpleWidget; /* This widget does the same a the mouse widget in jqueryui. */ MouseWidget = (function(_super) { __extends(MouseWidget, _super); function MouseWidget() { return MouseWidget.__super__.constructor.apply(this, arguments); } MouseWidget.is_mouse_handled = false; MouseWidget.prototype._init = function() { this.$el.bind('mousedown.mousewidget', $.proxy(this._mouseDown, this)); this.is_mouse_started = false; this.mouse_delay = 0; this._mouse_delay_timer = null; return this._is_mouse_delay_met = true; }; MouseWidget.prototype._deinit = function() { var $document; this.$el.unbind('mousedown.mousewidget'); $document = $(document); $document.unbind('mousemove.mousewidget'); return $document.unbind('mouseup.mousewidget'); }; MouseWidget.prototype._mouseDown = function(e) { var $document; if (MouseWidget.is_mouse_handled) { return; } if (!this.is_mouse_started) { this._mouseUp(e); } if (e.which !== 1) { return; } if (!this._mouseCapture(e)) { return; } this.mouse_down_event = e; $document = $(document); $document.bind('mousemove.mousewidget', $.proxy(this._mouseMove, this)); $document.bind('mouseup.mousewidget', $.proxy(this._mouseUp, this)); if (this.mouse_delay) { this._startMouseDelayTimer(); } e.preventDefault(); this.is_mouse_handled = true; return true; }; MouseWidget.prototype._startMouseDelayTimer = function() { var _this = this; if (this._mouse_delay_timer) { clearTimeout(this._mouse_delay_timer); } this._mouse_delay_timer = setTimeout(function() { return _this._is_mouse_delay_met = true; }, this.mouse_delay); return this._is_mouse_delay_met = false; }; MouseWidget.prototype._mouseMove = function(e) { if (this.is_mouse_started) { this._mouseDrag(e); return e.preventDefault(); } if (this.mouse_delay && !this._is_mouse_delay_met) { return true; } this.is_mouse_started = this._mouseStart(this.mouse_down_event) !== false; if (this.is_mouse_started) { this._mouseDrag(e); } else { this._mouseUp(e); } return !this.is_mouse_started; }; MouseWidget.prototype._mouseUp = function(e) { var $document; $document = $(document); $document.unbind('mousemove.mousewidget'); $document.unbind('mouseup.mousewidget'); if (this.is_mouse_started) { this.is_mouse_started = false; this._mouseStop(e); } return false; }; MouseWidget.prototype._mouseCapture = function(e) { return true; }; MouseWidget.prototype._mouseStart = function(e) { return null; }; MouseWidget.prototype._mouseDrag = function(e) { return null; }; MouseWidget.prototype._mouseStop = function(e) { return null; }; MouseWidget.prototype.setMouseDelay = function(mouse_delay) { return this.mouse_delay = mouse_delay; }; return MouseWidget; })(SimpleWidget); /* Copyright 2013 Marco Braak Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ this.Tree = {}; $ = this.jQuery; _indexOf = function(array, item) { var i, value, _i, _len; for (i = _i = 0, _len = array.length; _i < _len; i = ++_i) { value = array[i]; if (value === item) { return i; } } return -1; }; indexOf = function(array, item) { if (array.indexOf) { return array.indexOf(item); } else { return _indexOf(array, item); } }; this.Tree.indexOf = indexOf; this.Tree._indexOf = _indexOf; if (!((this.JSON != null) && (this.JSON.stringify != null) && typeof this.JSON.stringify === 'function')) { json_escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; json_meta = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }; json_quote = function(string) { json_escapable.lastIndex = 0; if (json_escapable.test(string)) { return '"' + string.replace(json_escapable, function(a) { var c; c = json_meta[a]; return (typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)); }) + '"'; } else { return '"' + string + '"'; } }; json_str = function(key, holder) { var i, k, partial, v, value, _i, _len; value = holder[key]; switch (typeof value) { case 'string': return json_quote(value); case 'number': if (isFinite(value)) { return String(value); } else { return 'null'; } case 'boolean': case 'null': return String(value); case 'object': if (!value) { return 'null'; } partial = []; if (Object.prototype.toString.apply(value) === '[object Array]') { for (i = _i = 0, _len = value.length; _i < _len; i = ++_i) { v = value[i]; partial[i] = json_str(i, value) || 'null'; } return (partial.length === 0 ? '[]' : '[' + partial.join(',') + ']'); } for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = json_str(k, value); if (v) { partial.push(json_quote(k) + ':' + v); } } } return (partial.length === 0 ? '{}' : '{' + partial.join(',') + '}'); } }; if (this.JSON == null) { this.JSON = {}; } this.JSON.stringify = function(value) { return json_str('', { '': value }); }; } html_escape = function(string) { return ('' + string).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/'); }; Position = { getName: function(position) { return Position.strings[position - 1]; }, nameToIndex: function(name) { var i, _i, _ref; for (i = _i = 1, _ref = Position.strings.length; 1 <= _ref ? _i <= _ref : _i >= _ref; i = 1 <= _ref ? ++_i : --_i) { if (Position.strings[i - 1] === name) { return i; } } return 0; } }; Position.BEFORE = 1; Position.AFTER = 2; Position.INSIDE = 3; Position.NONE = 4; Position.strings = ['before', 'after', 'inside', 'none']; this.Tree.Position = Position; Node = (function() { function Node(o, is_root, node_class) { if (is_root == null) { is_root = false; } if (node_class == null) { node_class = Node; } this.setData(o); this.children = []; this.parent = null; if (is_root) { this.id_mapping = {}; this.tree = this; this.node_class = node_class; } } Node.prototype.setData = function(o) { var key, value, _results; if (typeof o !== 'object') { return this.name = o; } else { _results = []; for (key in o) { value = o[key]; if (key === 'label') { _results.push(this.name = value); } else { _results.push(this[key] = value); } } return _results; } }; Node.prototype.initFromData = function(data) { var addChildren, addNode, _this = this; addNode = function(node_data) { _this.setData(node_data); if (node_data.children) { return addChildren(node_data.children); } }; addChildren = function(children_data) { var child, node, _i, _len; for (_i = 0, _len = children_data.length; _i < _len; _i++) { child = children_data[_i]; node = new _this.tree.node_class(''); node.initFromData(child); _this.addChild(node); } return null; }; addNode(data); return null; }; /* Create tree from data. Structure of data is: [ { label: 'node1', children: [ { label: 'child1' }, { label: 'child2' } ] }, { label: 'node2' } ] */ Node.prototype.loadFromData = function(data) { var node, o, _i, _len; this.removeChildren(); for (_i = 0, _len = data.length; _i < _len; _i++) { o = data[_i]; node = new this.tree.node_class(o); this.addChild(node); if (typeof o === 'object' && o.children) { node.loadFromData(o.children); } } return null; }; /* Add child. tree.addChild( new Node('child1') ); */ Node.prototype.addChild = function(node) { this.children.push(node); return node._setParent(this); }; /* Add child at position. Index starts at 0. tree.addChildAtPosition( new Node('abc'), 1 ); */ Node.prototype.addChildAtPosition = function(node, index) { this.children.splice(index, 0, node); return node._setParent(this); }; Node.prototype._setParent = function(parent) { this.parent = parent; this.tree = parent.tree; return this.tree.addNodeToIndex(this); }; /* Remove child. This also removes the children of the node. tree.removeChild(tree.children[0]); */ Node.prototype.removeChild = function(node) { node.removeChildren(); return this._removeChild(node); }; Node.prototype._removeChild = function(node) { this.children.splice(this.getChildIndex(node), 1); return this.tree.removeNodeFromIndex(node); }; /* Get child index. var index = getChildIndex(node); */ Node.prototype.getChildIndex = function(node) { return $.inArray(node, this.children); }; /* Does the tree have children? if (tree.hasChildren()) { // } */ Node.prototype.hasChildren = function() { return this.children.length !== 0; }; Node.prototype.isFolder = function() { return this.hasChildren() || this.load_on_demand; }; /* Iterate over all the nodes in the tree. Calls callback with (node, level). The callback must return true to continue the iteration on current node. tree.iterate( function(node, level) { console.log(node.name); // stop iteration after level 2 return (level <= 2); } ); */ Node.prototype.iterate = function(callback) { var _iterate, _this = this; _iterate = function(node, level) { var child, result, _i, _len, _ref; if (node.children) { _ref = node.children; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; result = callback(child, level); if (_this.hasChildren() && result) { _iterate(child, level + 1); } } return null; } }; _iterate(this, 0); return null; }; /* Move node relative to another node. Argument position: Position.BEFORE, Position.AFTER or Position.Inside // move node1 after node2 tree.moveNode(node1, node2, Position.AFTER); */ Node.prototype.moveNode = function(moved_node, target_node, position) { if (moved_node.isParentOf(target_node)) { return; } moved_node.parent._removeChild(moved_node); if (position === Position.AFTER) { return target_node.parent.addChildAtPosition(moved_node, target_node.parent.getChildIndex(target_node) + 1); } else if (position === Position.BEFORE) { return target_node.parent.addChildAtPosition(moved_node, target_node.parent.getChildIndex(target_node)); } else if (position === Position.INSIDE) { return target_node.addChildAtPosition(moved_node, 0); } }; /* Get the tree as data. */ Node.prototype.getData = function() { var getDataFromNodes, _this = this; getDataFromNodes = function(nodes) { var data, k, node, tmp_node, v, _i, _len; data = []; for (_i = 0, _len = nodes.length; _i < _len; _i++) { node = nodes[_i]; tmp_node = {}; for (k in node) { v = node[k]; if ((k !== 'parent' && k !== 'children' && k !== 'element' && k !== 'tree') && Object.prototype.hasOwnProperty.call(node, k)) { tmp_node[k] = v; } } if (node.hasChildren()) { tmp_node.children = getDataFromNodes(node.children); } data.push(tmp_node); } return data; }; return getDataFromNodes(this.children); }; Node.prototype.getNodeByName = function(name) { var result; result = null; this.iterate(function(node) { if (node.name === name) { result = node; return false; } else { return true; } }); return result; }; Node.prototype.addAfter = function(node_info) { var child_index, node; if (!this.parent) { return null; } else { node = new this.tree.node_class(node_info); child_index = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, child_index + 1); return node; } }; Node.prototype.addBefore = function(node_info) { var child_index, node; if (!this.parent) { return null; } else { node = new this.tree.node_class(node_info); child_index = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, child_index); return node; } }; Node.prototype.addParent = function(node_info) { var child, new_parent, original_parent, _i, _len, _ref; if (!this.parent) { return null; } else { new_parent = new this.tree.node_class(node_info); new_parent._setParent(this.tree); original_parent = this.parent; _ref = original_parent.children; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; new_parent.addChild(child); } original_parent.children = []; original_parent.addChild(new_parent); return new_parent; } }; Node.prototype.remove = function() { if (this.parent) { this.parent.removeChild(this); return this.parent = null; } }; Node.prototype.append = function(node_info) { var node; node = new this.tree.node_class(node_info); this.addChild(node); return node; }; Node.prototype.prepend = function(node_info) { var node; node = new this.tree.node_class(node_info); this.addChildAtPosition(node, 0); return node; }; Node.prototype.isParentOf = function(node) { var parent; parent = node.parent; while (parent) { if (parent === this) { return true; } parent = parent.parent; } return false; }; Node.prototype.getLevel = function() { var level, node; level = 0; node = this; while (node.parent) { level += 1; node = node.parent; } return level; }; Node.prototype.getNodeById = function(node_id) { return this.id_mapping[node_id]; }; Node.prototype.addNodeToIndex = function(node) { if (node.id) { return this.id_mapping[node.id] = node; } }; Node.prototype.removeNodeFromIndex = function(node) { if (node.id) { return delete this.id_mapping[node.id]; } }; Node.prototype.removeChildren = function() { var _this = this; this.iterate(function(child) { _this.tree.removeNodeFromIndex(child); return true; }); return this.children = []; }; return Node; })(); this.Tree.Node = Node; TRIANGLE_RIGHT = '►'; TRIANGLE_DOWN = '▼'; JqTreeWidget = (function(_super) { __extends(JqTreeWidget, _super); function JqTreeWidget() { return JqTreeWidget.__super__.constructor.apply(this, arguments); } JqTreeWidget.prototype.defaults = { autoOpen: false, saveState: false, dragAndDrop: false, selectable: false, onCanSelectNode: null, onSetStateFromStorage: null, onGetStateFromStorage: null, onCreateLi: null, onIsMoveHandle: null, onCanMove: null, onCanMoveTo: null, onLoadFailed: null, autoEscape: true, dataUrl: null, slide: true, nodeClass: Node }; JqTreeWidget.prototype.toggle = function(node, slide) { if (slide == null) { slide = true; } if (node.is_open) { return this.closeNode(node, slide); } else { return this.openNode(node, slide); } }; JqTreeWidget.prototype.getTree = function() { return this.tree; }; JqTreeWidget.prototype.selectNode = function(node) { return this.select_node_handler.selectNode(node); }; JqTreeWidget.prototype.getSelectedNode = function() { return this.selected_node || false; }; JqTreeWidget.prototype.toJson = function() { return JSON.stringify(this.tree.getData()); }; JqTreeWidget.prototype.loadData = function(data, parent_node) { this._loadData(data, parent_node); if (!parent_node) { return this.selected_node = null; } }; JqTreeWidget.prototype.loadDataFromUrl = function(url, parent_node, on_finished) { if ($.type(url) !== 'string') { parent_node = url; on_finished = parent_node; url = null; on_finished = null; } this._loadDataFromUrl(url, parent_node, on_finished); if (!parent_node) { return this.selected_node = null; } }; JqTreeWidget.prototype._loadDataFromUrl = function(url_info, parent_node, on_finished) { var $el, addLoadingClass, parseUrlInfo, removeLoadingClass, _this = this; $el = null; addLoadingClass = function() { var folder_element; if (!parent_node) { $el = _this.element; } else { folder_element = new FolderElement(parent_node, _this); $el = folder_element.getLi(); } return $el.addClass('jqtree-loading'); }; removeLoadingClass = function() { if ($el) { return $el.removeClass('jqtree-loading'); } }; parseUrlInfo = function() { if ($.type(url_info) === 'string') { url_info = { url: url_info }; } if (!url_info.method) { return url_info.method = 'get'; } }; addLoadingClass(); if (!url_info) { url_info = this._getDataUrlInfo(parent_node); } parseUrlInfo(); return $.ajax({ url: url_info.url, data: url_info.data, type: url_info.method.toUpperCase(), cache: false, dataType: 'json', success: function(response) { var data; if ($.isArray(response) || typeof response === 'object') { data = response; } else { data = $.parseJSON(response); } removeLoadingClass(); _this._loadData(data, parent_node); if (on_finished && $.isFunction(on_finished)) { return on_finished(); } }, error: function(response) { removeLoadingClass(); if (_this.options.onLoadFailed) { return _this.options.onLoadFailed(response); } } }); }; JqTreeWidget.prototype._loadData = function(data, parent_node) { this._triggerEvent('tree.load_data', { tree_data: data }); if (!parent_node) { this._initTree(data, false, this.options.nodeClass); } else { if (this.selected_node && parent_node.isParentOf(this.selected_node)) { this.selected_node = null; } parent_node.loadFromData(data); parent_node.load_on_demand = false; this._refreshElements(parent_node.parent); } if (this.is_dragging) { return this.dnd_handler.refreshHitAreas(); } }; JqTreeWidget.prototype.getNodeById = function(node_id) { return this.tree.getNodeById(node_id); }; JqTreeWidget.prototype.getNodeByName = function(name) { return this.tree.getNodeByName(name); }; JqTreeWidget.prototype.openNode = function(node, slide) { if (slide == null) { slide = true; } return this._openNode(node, slide); }; JqTreeWidget.prototype._openNode = function(node, slide, on_finished) { var doOpenNode, parent, _this = this; if (slide == null) { slide = true; } doOpenNode = function(_node, _slide, _on_finished) { var folder_element; folder_element = new FolderElement(_node, _this); return folder_element.open(_on_finished, _slide); }; if (node.isFolder()) { if (node.load_on_demand) { return this._loadFolderOnDemand(node, slide, on_finished); } else { parent = node.parent; while (parent && !parent.is_open) { if (parent.parent) { doOpenNode(parent, false, null); } parent = parent.parent; } doOpenNode(node, slide, on_finished); return this._saveState(); } } }; JqTreeWidget.prototype._loadFolderOnDemand = function(node, slide, on_finished) { var _this = this; if (slide == null) { slide = true; } return this._loadDataFromUrl(null, node, function() { return _this._openNode(node, slide, on_finished); }); }; JqTreeWidget.prototype.closeNode = function(node, slide) { if (slide == null) { slide = true; } if (node.isFolder()) { new FolderElement(node, this).close(slide); return this._saveState(); } }; JqTreeWidget.prototype.isDragging = function() { return this.is_dragging; }; JqTreeWidget.prototype.refreshHitAreas = function() { return this.dnd_handler.refreshHitAreas(); }; JqTreeWidget.prototype.addNodeAfter = function(new_node_info, existing_node) { var new_node; new_node = existing_node.addAfter(new_node_info); this._refreshElements(existing_node.parent); return new_node; }; JqTreeWidget.prototype.addNodeBefore = function(new_node_info, existing_node) { var new_node; new_node = existing_node.addBefore(new_node_info); this._refreshElements(existing_node.parent); return new_node; }; JqTreeWidget.prototype.addParentNode = function(new_node_info, existing_node) { var new_node; new_node = existing_node.addParent(new_node_info); this._refreshElements(new_node.parent); return new_node; }; JqTreeWidget.prototype.removeNode = function(node) { var mustUnselectedNode, parent, _this = this; mustUnselectedNode = function() { var result; if (!_this.selected_node) { return false; } else if (_this.selected_node === node) { return true; } else { result = true; _this.tree.iterate(function(child) { if (node === child) { result = true; return false; } else { return true; } }); return result; } }; parent = node.parent; if (parent) { if (mustUnselectedNode()) { this.selected_node = null; } node.remove(); return this._refreshElements(parent.parent); } }; JqTreeWidget.prototype.appendNode = function(new_node_info, parent_node) { var is_already_root_node, node; if (!parent_node) { parent_node = this.tree; } is_already_root_node = parent_node.isFolder(); node = parent_node.append(new_node_info); if (is_already_root_node) { this._refreshElements(parent_node); } else { this._refreshElements(parent_node.parent); } return node; }; JqTreeWidget.prototype.prependNode = function(new_node_info, parent_node) { var node; if (!parent_node) { parent_node = this.tree; } node = parent_node.prepend(new_node_info); this._refreshElements(parent_node); return node; }; JqTreeWidget.prototype.updateNode = function(node, data) { node.setData(data); this._refreshElements(node.parent); return this.select_node_handler.selectCurrentNode(); }; JqTreeWidget.prototype.moveNode = function(node, target_node, position) { var position_index; position_index = Position.nameToIndex(position); this.tree.moveNode(node, target_node, position_index); return this._refreshElements(); }; JqTreeWidget.prototype.getStateFromStorage = function() { return this.save_state_handler.getStateFromStorage(); }; JqTreeWidget.prototype._init = function() { JqTreeWidget.__super__._init.call(this); this.element = this.$el; this.selected_node = null; this.mouse_delay = 300; this.save_state_handler = new SaveStateHandler(this); this.select_node_handler = new SelectNodeHandler(this); this.dnd_handler = new DragAndDropHandler(this); this.scroll_handler = new ScrollHandler(this); this._initData(); this.element.click($.proxy(this._click, this)); return this.element.bind('contextmenu', $.proxy(this._contextmenu, this)); }; JqTreeWidget.prototype._deinit = function() { this.element.empty(); this.element.unbind(); this.tree = null; return JqTreeWidget.__super__._deinit.call(this); }; JqTreeWidget.prototype._initData = function() { if (this.options.data) { return this._loadData(this.options.data); } else { return this._loadDataFromUrl(this._getDataUrlInfo()); } }; JqTreeWidget.prototype._getDataUrlInfo = function(node) { var data, data_url, url_info; data_url = this.options.dataUrl || this.element.data('url'); if ($.isFunction(data_url)) { return data_url(node); } else if ($.type(data_url) === 'string') { url_info = { url: data_url }; if (node && node.id) { data = { node: node.id }; url_info['data'] = data; } return url_info; } else { return data_url; } }; JqTreeWidget.prototype._initTree = function(data) { this.tree = new this.options.nodeClass(null, true, this.options.nodeClass); this.tree.loadFromData(data); this._openNodes(); this._refreshElements(); return this._triggerEvent('tree.init'); }; JqTreeWidget.prototype._openNodes = function() { var max_level; if (this.options.saveState) { if (this.save_state_handler.restoreState()) { return; } } if (this.options.autoOpen === false) { return; } else if (this.options.autoOpen === true) { max_level = -1; } else { max_level = parseInt(this.options.autoOpen); } return this.tree.iterate(function(node, level) { if (node.hasChildren()) { node.is_open = true; } return level !== max_level; }); }; JqTreeWidget.prototype._refreshElements = function(from_node) { var $element, createFolderLi, createLi, createNodeLi, createUl, doCreateDomElements, escapeIfNecessary, is_root_node, node_element, _this = this; if (from_node == null) { from_node = null; } escapeIfNecessary = function(value) { if (_this.options.autoEscape) { return html_escape(value); } else { return value; } }; createUl = function(is_root_node) { var class_string; if (is_root_node) { class_string = 'jqtree-tree'; } else { class_string = ''; } return $("