causeway-standard-theme
Version:
1,798 lines (1,558 loc) • 92.2 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var DragAndDropHandler, DragElement, HitAreasGenerator, Position, VisibleNodeIterator, node_module,
extend = 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; },
hasProp = {}.hasOwnProperty;
node_module = require('./node');
Position = node_module.Position;
DragAndDropHandler = (function() {
function DragAndDropHandler(tree_widget) {
this.tree_widget = tree_widget;
this.hovered_area = null;
this.$ghost = null;
this.hit_areas = [];
this.is_dragging = false;
this.current_item = null;
}
DragAndDropHandler.prototype.mouseCapture = function(position_info) {
var $element, node_element;
$element = $(position_info.target);
if (!this.mustCaptureElement($element)) {
return null;
}
if (this.tree_widget.options.onIsMoveHandle && !this.tree_widget.options.onIsMoveHandle($element)) {
return null;
}
node_element = this.tree_widget._getNodeElement($element);
if (node_element && this.tree_widget.options.onCanMove) {
if (!this.tree_widget.options.onCanMove(node_element.node)) {
node_element = null;
}
}
this.current_item = node_element;
return this.current_item !== null;
};
DragAndDropHandler.prototype.mouseStart = function(position_info) {
var offset;
this.refresh();
offset = $(position_info.target).offset();
this.drag_element = new DragElement(this.current_item.node, position_info.page_x - offset.left, position_info.page_y - offset.top, this.tree_widget.element);
this.is_dragging = true;
this.current_item.$element.addClass('jqtree-moving');
return true;
};
DragAndDropHandler.prototype.mouseDrag = function(position_info) {
var area, can_move_to;
this.drag_element.move(position_info.page_x, position_info.page_y);
area = this.findHoveredArea(position_info.page_x, position_info.page_y);
can_move_to = this.canMoveToArea(area);
if (can_move_to && area) {
if (!area.node.isFolder()) {
this.stopOpenFolderTimer();
}
if (this.hovered_area !== area) {
this.hovered_area = area;
if (this.mustOpenFolderTimer(area)) {
this.startOpenFolderTimer(area.node);
} else {
this.stopOpenFolderTimer();
}
this.updateDropHint();
}
} else {
this.removeHover();
this.removeDropHint();
this.stopOpenFolderTimer();
}
return true;
};
DragAndDropHandler.prototype.mustCaptureElement = function($element) {
return !$element.is('input,select');
};
DragAndDropHandler.prototype.canMoveToArea = function(area) {
var position_name;
if (!area) {
return false;
} else if (this.tree_widget.options.onCanMoveTo) {
position_name = Position.getName(area.position);
return this.tree_widget.options.onCanMoveTo(this.current_item.node, area.node, position_name);
} else {
return true;
}
};
DragAndDropHandler.prototype.mouseStop = function(position_info) {
this.moveItem(position_info);
this.clear();
this.removeHover();
this.removeDropHint();
this.removeHitAreas();
if (this.current_item) {
this.current_item.$element.removeClass('jqtree-moving');
this.current_item = null;
}
this.is_dragging = false;
return false;
};
DragAndDropHandler.prototype.refresh = function() {
this.removeHitAreas();
if (this.current_item) {
this.generateHitAreas();
this.current_item = this.tree_widget._getNodeElementForNode(this.current_item.node);
if (this.is_dragging) {
return this.current_item.$element.addClass('jqtree-moving');
}
}
};
DragAndDropHandler.prototype.removeHitAreas = function() {
return this.hit_areas = [];
};
DragAndDropHandler.prototype.clear = function() {
this.drag_element.remove();
return this.drag_element = null;
};
DragAndDropHandler.prototype.removeDropHint = function() {
if (this.previous_ghost) {
return this.previous_ghost.remove();
}
};
DragAndDropHandler.prototype.removeHover = function() {
return this.hovered_area = null;
};
DragAndDropHandler.prototype.generateHitAreas = function() {
var hit_areas_generator;
hit_areas_generator = new HitAreasGenerator(this.tree_widget.tree, this.current_item.node, this.getTreeDimensions().bottom);
return this.hit_areas = hit_areas_generator.generate();
};
DragAndDropHandler.prototype.findHoveredArea = function(x, y) {
var area, dimensions, high, low, mid;
dimensions = this.getTreeDimensions();
if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) {
return null;
}
low = 0;
high = this.hit_areas.length;
while (low < high) {
mid = (low + high) >> 1;
area = this.hit_areas[mid];
if (y < area.top) {
high = mid;
} else if (y > area.bottom) {
low = mid + 1;
} else {
return area;
}
}
return null;
};
DragAndDropHandler.prototype.mustOpenFolderTimer = function(area) {
var node;
node = area.node;
return node.isFolder() && !node.is_open && area.position === Position.INSIDE;
};
DragAndDropHandler.prototype.updateDropHint = function() {
var node_element;
if (!this.hovered_area) {
return;
}
this.removeDropHint();
node_element = this.tree_widget._getNodeElementForNode(this.hovered_area.node);
return this.previous_ghost = node_element.addDropHint(this.hovered_area.position);
};
DragAndDropHandler.prototype.startOpenFolderTimer = function(folder) {
var openFolder;
openFolder = (function(_this) {
return function() {
return _this.tree_widget._openNode(folder, _this.tree_widget.options.slide, function() {
_this.refresh();
return _this.updateDropHint();
});
};
})(this);
this.stopOpenFolderTimer();
return this.open_folder_timer = setTimeout(openFolder, this.tree_widget.options.openFolderDelay);
};
DragAndDropHandler.prototype.stopOpenFolderTimer = function() {
if (this.open_folder_timer) {
clearTimeout(this.open_folder_timer);
return this.open_folder_timer = null;
}
};
DragAndDropHandler.prototype.moveItem = function(position_info) {
var doMove, event, moved_node, position, previous_parent, target_node;
if (this.hovered_area && this.hovered_area.position !== Position.NONE && this.canMoveToArea(this.hovered_area)) {
moved_node = this.current_item.node;
target_node = this.hovered_area.node;
position = this.hovered_area.position;
previous_parent = moved_node.parent;
if (position === Position.INSIDE) {
this.hovered_area.node.is_open = true;
}
doMove = (function(_this) {
return function() {
_this.tree_widget.tree.moveNode(moved_node, target_node, position);
_this.tree_widget.element.empty();
return _this.tree_widget._refreshElements();
};
})(this);
event = this.tree_widget._triggerEvent('tree.move', {
move_info: {
moved_node: moved_node,
target_node: target_node,
position: Position.getName(position),
previous_parent: previous_parent,
do_move: doMove,
original_event: position_info.original_event
}
});
if (!event.isDefaultPrevented()) {
return doMove();
}
}
};
DragAndDropHandler.prototype.getTreeDimensions = function() {
var offset;
offset = this.tree_widget.element.offset();
return {
left: offset.left,
top: offset.top,
right: offset.left + this.tree_widget.element.width(),
bottom: offset.top + this.tree_widget.element.height() + 16
};
};
return DragAndDropHandler;
})();
VisibleNodeIterator = (function() {
function VisibleNodeIterator(tree) {
this.tree = tree;
}
VisibleNodeIterator.prototype.iterate = function() {
var _iterateNode, is_first_node;
is_first_node = true;
_iterateNode = (function(_this) {
return function(node, next_node) {
var $element, child, children_length, i, j, len, must_iterate_inside, ref;
must_iterate_inside = (node.is_open || !node.element) && node.hasChildren();
if (node.element) {
$element = $(node.element);
if (!$element.is(':visible')) {
return;
}
if (is_first_node) {
_this.handleFirstNode(node, $element);
is_first_node = false;
}
if (!node.hasChildren()) {
_this.handleNode(node, next_node, $element);
} else if (node.is_open) {
if (!_this.handleOpenFolder(node, $element)) {
must_iterate_inside = false;
}
} else {
_this.handleClosedFolder(node, next_node, $element);
}
}
if (must_iterate_inside) {
children_length = node.children.length;
ref = node.children;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
child = ref[i];
if (i === (children_length - 1)) {
_iterateNode(node.children[i], null);
} else {
_iterateNode(node.children[i], node.children[i + 1]);
}
}
if (node.is_open) {
return _this.handleAfterOpenFolder(node, next_node, $element);
}
}
};
})(this);
return _iterateNode(this.tree, null);
};
VisibleNodeIterator.prototype.handleNode = function(node, next_node, $element) {};
VisibleNodeIterator.prototype.handleOpenFolder = function(node, $element) {};
VisibleNodeIterator.prototype.handleClosedFolder = function(node, next_node, $element) {};
VisibleNodeIterator.prototype.handleAfterOpenFolder = function(node, next_node, $element) {};
VisibleNodeIterator.prototype.handleFirstNode = function(node, $element) {};
return VisibleNodeIterator;
})();
HitAreasGenerator = (function(superClass) {
extend(HitAreasGenerator, superClass);
function HitAreasGenerator(tree, current_node, tree_bottom) {
HitAreasGenerator.__super__.constructor.call(this, tree);
this.current_node = current_node;
this.tree_bottom = tree_bottom;
}
HitAreasGenerator.prototype.generate = function() {
this.positions = [];
this.last_top = 0;
this.iterate();
return this.generateHitAreas(this.positions);
};
HitAreasGenerator.prototype.getTop = function($element) {
return $element.offset().top;
};
HitAreasGenerator.prototype.addPosition = function(node, position, top) {
var area;
area = {
top: top,
node: node,
position: position
};
this.positions.push(area);
return this.last_top = top;
};
HitAreasGenerator.prototype.handleNode = function(node, next_node, $element) {
var top;
top = this.getTop($element);
if (node === this.current_node) {
this.addPosition(node, Position.NONE, top);
} else {
this.addPosition(node, Position.INSIDE, top);
}
if (next_node === this.current_node || node === this.current_node) {
return this.addPosition(node, Position.NONE, top);
} else {
return this.addPosition(node, Position.AFTER, top);
}
};
HitAreasGenerator.prototype.handleOpenFolder = function(node, $element) {
if (node === this.current_node) {
return false;
}
if (node.children[0] !== this.current_node) {
this.addPosition(node, Position.INSIDE, this.getTop($element));
}
return true;
};
HitAreasGenerator.prototype.handleClosedFolder = function(node, next_node, $element) {
var top;
top = this.getTop($element);
if (node === this.current_node) {
return this.addPosition(node, Position.NONE, top);
} else {
this.addPosition(node, Position.INSIDE, top);
if (next_node !== this.current_node) {
return this.addPosition(node, Position.AFTER, top);
}
}
};
HitAreasGenerator.prototype.handleFirstNode = function(node, $element) {
if (node !== this.current_node) {
return this.addPosition(node, Position.BEFORE, this.getTop($(node.element)));
}
};
HitAreasGenerator.prototype.handleAfterOpenFolder = function(node, next_node, $element) {
if (node === this.current_node.node || next_node === this.current_node.node) {
return this.addPosition(node, Position.NONE, this.last_top);
} else {
return this.addPosition(node, Position.AFTER, this.last_top);
}
};
HitAreasGenerator.prototype.generateHitAreas = function(positions) {
var group, hit_areas, j, len, position, previous_top;
previous_top = -1;
group = [];
hit_areas = [];
for (j = 0, len = positions.length; j < len; j++) {
position = positions[j];
if (position.top !== previous_top && group.length) {
if (group.length) {
this.generateHitAreasForGroup(hit_areas, group, previous_top, position.top);
}
previous_top = position.top;
group = [];
}
group.push(position);
}
this.generateHitAreasForGroup(hit_areas, group, previous_top, this.tree_bottom);
return hit_areas;
};
HitAreasGenerator.prototype.generateHitAreasForGroup = function(hit_areas, positions_in_group, top, bottom) {
var area_height, area_top, i, position, position_count;
position_count = Math.min(positions_in_group.length, 4);
area_height = Math.round((bottom - top) / position_count);
area_top = top;
i = 0;
while (i < position_count) {
position = positions_in_group[i];
hit_areas.push({
top: area_top,
bottom: area_top + area_height,
node: position.node,
position: position.position
});
area_top += area_height;
i += 1;
}
return null;
};
return HitAreasGenerator;
})(VisibleNodeIterator);
DragElement = (function() {
function DragElement(node, offset_x, offset_y, $tree) {
this.offset_x = offset_x;
this.offset_y = offset_y;
this.$element = $("<span class=\"jqtree-title jqtree-dragging\">" + node.name + "</span>");
this.$element.css("position", "absolute");
$tree.append(this.$element);
}
DragElement.prototype.move = function(page_x, page_y) {
return this.$element.offset({
left: page_x - this.offset_x,
top: page_y - this.offset_y
});
};
DragElement.prototype.remove = function() {
return this.$element.remove();
};
return DragElement;
})();
module.exports = DragAndDropHandler;
},{"./node":5}],2:[function(require,module,exports){
var ElementsRenderer, NodeElement, html_escape, node_element, util;
node_element = require('./node_element');
NodeElement = node_element.NodeElement;
util = require('./util');
html_escape = util.html_escape;
ElementsRenderer = (function() {
function ElementsRenderer(tree_widget) {
this.tree_widget = tree_widget;
this.opened_icon_element = this.createButtonElement(tree_widget.options.openedIcon);
this.closed_icon_element = this.createButtonElement(tree_widget.options.closedIcon);
}
ElementsRenderer.prototype.render = function(from_node) {
if (from_node && from_node.parent) {
return this.renderFromNode(from_node);
} else {
return this.renderFromRoot();
}
};
ElementsRenderer.prototype.renderFromRoot = function() {
var $element;
$element = this.tree_widget.element;
$element.empty();
return this.createDomElements($element[0], this.tree_widget.tree.children, true, true);
};
ElementsRenderer.prototype.renderFromNode = function(node) {
var $previous_li, li;
$previous_li = $(node.element);
li = this.createLi(node);
this.attachNodeData(node, li);
$previous_li.after(li);
$previous_li.remove();
if (node.children) {
return this.createDomElements(li, node.children, false, false);
}
};
ElementsRenderer.prototype.createDomElements = function(element, children, is_root_node, is_open) {
var child, i, len, li, ul;
ul = this.createUl(is_root_node);
element.appendChild(ul);
for (i = 0, len = children.length; i < len; i++) {
child = children[i];
li = this.createLi(child);
ul.appendChild(li);
this.attachNodeData(child, li);
if (child.hasChildren()) {
this.createDomElements(li, child.children, false, child.is_open);
}
}
return null;
};
ElementsRenderer.prototype.attachNodeData = function(node, li) {
node.element = li;
return $(li).data('node', node);
};
ElementsRenderer.prototype.createUl = function(is_root_node) {
var class_string, ul;
if (is_root_node) {
class_string = 'jqtree-tree';
} else {
class_string = '';
}
ul = document.createElement('ul');
ul.className = "jqtree_common " + class_string;
return ul;
};
ElementsRenderer.prototype.createLi = function(node) {
var li;
if (node.isFolder()) {
li = this.createFolderLi(node);
} else {
li = this.createNodeLi(node);
}
if (this.tree_widget.options.onCreateLi) {
this.tree_widget.options.onCreateLi(node, $(li));
}
return li;
};
ElementsRenderer.prototype.createFolderLi = function(node) {
var button_classes, button_link, div, escaped_name, folder_classes, icon_element, li, title_span;
button_classes = this.getButtonClasses(node);
folder_classes = this.getFolderClasses(node);
escaped_name = this.escapeIfNecessary(node.name);
if (node.is_open) {
icon_element = this.opened_icon_element;
} else {
icon_element = this.closed_icon_element;
}
li = document.createElement('li');
li.className = "jqtree_common " + folder_classes;
div = document.createElement('div');
div.className = "jqtree-element jqtree_common";
li.appendChild(div);
button_link = document.createElement('a');
button_link.className = "jqtree_common " + button_classes;
button_link.appendChild(icon_element.cloneNode(false));
div.appendChild(button_link);
title_span = document.createElement('span');
title_span.className = "jqtree_common jqtree-title jqtree-title-folder";
div.appendChild(title_span);
title_span.innerHTML = escaped_name;
return li;
};
ElementsRenderer.prototype.createNodeLi = function(node) {
var class_string, div, escaped_name, li, li_classes, title_span;
li_classes = ['jqtree_common'];
if (this.tree_widget.select_node_handler && this.tree_widget.select_node_handler.isNodeSelected(node)) {
li_classes.push('jqtree-selected');
}
class_string = li_classes.join(' ');
escaped_name = this.escapeIfNecessary(node.name);
li = document.createElement('li');
li.className = class_string;
div = document.createElement('div');
div.className = "jqtree-element jqtree_common";
li.appendChild(div);
title_span = document.createElement('span');
title_span.className = "jqtree-title jqtree_common";
title_span.innerHTML = escaped_name;
div.appendChild(title_span);
return li;
};
ElementsRenderer.prototype.getButtonClasses = function(node) {
var classes;
classes = ['jqtree-toggler'];
if (!node.is_open) {
classes.push('jqtree-closed');
}
return classes.join(' ');
};
ElementsRenderer.prototype.getFolderClasses = function(node) {
var classes;
classes = ['jqtree-folder'];
if (!node.is_open) {
classes.push('jqtree-closed');
}
if (this.tree_widget.select_node_handler && this.tree_widget.select_node_handler.isNodeSelected(node)) {
classes.push('jqtree-selected');
}
if (node.is_loading) {
classes.push('jqtree-loading');
}
return classes.join(' ');
};
ElementsRenderer.prototype.escapeIfNecessary = function(value) {
if (this.tree_widget.options.autoEscape) {
return html_escape(value);
} else {
return value;
}
};
ElementsRenderer.prototype.createButtonElement = function(value) {
var div;
if (typeof value === 'string') {
div = document.createElement('div');
div.innerHTML = value;
return document.createTextNode(div.innerHTML);
} else {
return $(value)[0];
}
};
return ElementsRenderer;
})();
module.exports = ElementsRenderer;
},{"./node_element":6,"./util":12}],3:[function(require,module,exports){
var KeyHandler,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
KeyHandler = (function() {
var DOWN, LEFT, RIGHT, UP;
LEFT = 37;
UP = 38;
RIGHT = 39;
DOWN = 40;
function KeyHandler(tree_widget) {
this.selectNode = bind(this.selectNode, this);
this.tree_widget = tree_widget;
if (tree_widget.options.keyboardSupport) {
$(document).bind('keydown.jqtree', $.proxy(this.handleKeyDown, this));
}
}
KeyHandler.prototype.deinit = function() {
return $(document).unbind('keydown.jqtree');
};
KeyHandler.prototype.moveDown = function() {
var node;
node = this.tree_widget.getSelectedNode();
if (node) {
return this.selectNode(node.getNextNode());
} else {
return false;
}
};
KeyHandler.prototype.moveUp = function() {
var node;
node = this.tree_widget.getSelectedNode();
if (node) {
return this.selectNode(node.getPreviousNode());
} else {
return false;
}
};
KeyHandler.prototype.moveRight = function() {
var node;
node = this.tree_widget.getSelectedNode();
if (node && node.isFolder() && !node.is_open) {
this.tree_widget.openNode(node);
return false;
} else {
return true;
}
};
KeyHandler.prototype.moveLeft = function() {
var node;
node = this.tree_widget.getSelectedNode();
if (node && node.isFolder() && node.is_open) {
this.tree_widget.closeNode(node);
return false;
} else {
return true;
}
};
KeyHandler.prototype.handleKeyDown = function(e) {
var key;
if (!this.tree_widget.options.keyboardSupport) {
return true;
}
if ($(document.activeElement).is('textarea,input,select')) {
return true;
}
if (!this.tree_widget.getSelectedNode()) {
return true;
}
key = e.which;
switch (key) {
case DOWN:
return this.moveDown();
case UP:
return this.moveUp();
case RIGHT:
return this.moveRight();
case LEFT:
return this.moveLeft();
}
return true;
};
KeyHandler.prototype.selectNode = function(node) {
if (!node) {
return true;
} else {
this.tree_widget.selectNode(node);
if (this.tree_widget.scroll_handler && (!this.tree_widget.scroll_handler.isScrolledIntoView($(node.element).find('.jqtree-element')))) {
this.tree_widget.scrollToNode(node);
}
return false;
}
};
return KeyHandler;
})();
module.exports = KeyHandler;
},{}],4:[function(require,module,exports){
/*
This widget does the same a the mouse widget in jqueryui.
*/
var MouseWidget, SimpleWidget,
extend = 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; },
hasProp = {}.hasOwnProperty;
SimpleWidget = require('./simple.widget');
MouseWidget = (function(superClass) {
extend(MouseWidget, superClass);
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.$el.bind('touchstart.mousewidget', $.proxy(this._touchStart, this));
this.is_mouse_started = false;
this.mouse_delay = 0;
this._mouse_delay_timer = null;
this._is_mouse_delay_met = true;
return this.mouse_down_info = null;
};
MouseWidget.prototype._deinit = function() {
var $document;
this.$el.unbind('mousedown.mousewidget');
this.$el.unbind('touchstart.mousewidget');
$document = $(document);
$document.unbind('mousemove.mousewidget');
return $document.unbind('mouseup.mousewidget');
};
MouseWidget.prototype._mouseDown = function(e) {
var result;
if (e.which !== 1) {
return;
}
result = this._handleMouseDown(e, this._getPositionInfo(e));
if (result) {
e.preventDefault();
}
return result;
};
MouseWidget.prototype._handleMouseDown = function(e, position_info) {
if (MouseWidget.is_mouse_handled) {
return;
}
if (this.is_mouse_started) {
this._handleMouseUp(position_info);
}
this.mouse_down_info = position_info;
if (!this._mouseCapture(position_info)) {
return;
}
this._handleStartMouse();
this.is_mouse_handled = true;
return true;
};
MouseWidget.prototype._handleStartMouse = function() {
var $document;
$document = $(document);
$document.bind('mousemove.mousewidget', $.proxy(this._mouseMove, this));
$document.bind('touchmove.mousewidget', $.proxy(this._touchMove, this));
$document.bind('mouseup.mousewidget', $.proxy(this._mouseUp, this));
$document.bind('touchend.mousewidget', $.proxy(this._touchEnd, this));
if (this.mouse_delay) {
return this._startMouseDelayTimer();
}
};
MouseWidget.prototype._startMouseDelayTimer = function() {
if (this._mouse_delay_timer) {
clearTimeout(this._mouse_delay_timer);
}
this._mouse_delay_timer = setTimeout((function(_this) {
return function() {
return _this._is_mouse_delay_met = true;
};
})(this), this.mouse_delay);
return this._is_mouse_delay_met = false;
};
MouseWidget.prototype._mouseMove = function(e) {
return this._handleMouseMove(e, this._getPositionInfo(e));
};
MouseWidget.prototype._handleMouseMove = function(e, position_info) {
if (this.is_mouse_started) {
this._mouseDrag(position_info);
return e.preventDefault();
}
if (this.mouse_delay && !this._is_mouse_delay_met) {
return true;
}
this.is_mouse_started = this._mouseStart(this.mouse_down_info) !== false;
if (this.is_mouse_started) {
this._mouseDrag(position_info);
} else {
this._handleMouseUp(position_info);
}
return !this.is_mouse_started;
};
MouseWidget.prototype._getPositionInfo = function(e) {
return {
page_x: e.pageX,
page_y: e.pageY,
target: e.target,
original_event: e
};
};
MouseWidget.prototype._mouseUp = function(e) {
return this._handleMouseUp(this._getPositionInfo(e));
};
MouseWidget.prototype._handleMouseUp = function(position_info) {
var $document;
$document = $(document);
$document.unbind('mousemove.mousewidget');
$document.unbind('touchmove.mousewidget');
$document.unbind('mouseup.mousewidget');
$document.unbind('touchend.mousewidget');
if (this.is_mouse_started) {
this.is_mouse_started = false;
this._mouseStop(position_info);
}
};
MouseWidget.prototype._mouseCapture = function(position_info) {
return true;
};
MouseWidget.prototype._mouseStart = function(position_info) {
return null;
};
MouseWidget.prototype._mouseDrag = function(position_info) {
return null;
};
MouseWidget.prototype._mouseStop = function(position_info) {
return null;
};
MouseWidget.prototype.setMouseDelay = function(mouse_delay) {
return this.mouse_delay = mouse_delay;
};
MouseWidget.prototype._touchStart = function(e) {
var touch;
if (e.originalEvent.touches.length > 1) {
return;
}
touch = e.originalEvent.changedTouches[0];
return this._handleMouseDown(e, this._getPositionInfo(touch));
};
MouseWidget.prototype._touchMove = function(e) {
var touch;
if (e.originalEvent.touches.length > 1) {
return;
}
touch = e.originalEvent.changedTouches[0];
return this._handleMouseMove(e, this._getPositionInfo(touch));
};
MouseWidget.prototype._touchEnd = function(e) {
var touch;
if (e.originalEvent.touches.length > 1) {
return;
}
touch = e.originalEvent.changedTouches[0];
return this._handleMouseUp(this._getPositionInfo(touch));
};
return MouseWidget;
})(SimpleWidget);
module.exports = MouseWidget;
},{"./simple.widget":10}],5:[function(require,module,exports){
var Node, Position;
Position = {
getName: function(position) {
return Position.strings[position - 1];
},
nameToIndex: function(name) {
var i, j, ref;
for (i = j = 1, ref = Position.strings.length; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
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'];
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;
if (typeof o !== 'object') {
this.name = o;
} else {
for (key in o) {
value = o[key];
if (key === 'label') {
this.name = value;
} else {
this[key] = value;
}
}
}
return null;
};
Node.prototype.initFromData = function(data) {
var addChildren, addNode;
addNode = (function(_this) {
return function(node_data) {
_this.setData(node_data);
if (node_data.children) {
return addChildren(node_data.children);
}
};
})(this);
addChildren = (function(_this) {
return function(children_data) {
var child, j, len, node;
for (j = 0, len = children_data.length; j < len; j++) {
child = children_data[j];
node = new _this.tree.node_class('');
node.initFromData(child);
_this.addChild(node);
}
return null;
};
})(this);
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 j, len, node, o;
this.removeChildren();
for (j = 0, len = data.length; j < len; j++) {
o = data[j];
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;
_iterate = function(node, level) {
var child, j, len, ref, result;
if (node.children) {
ref = node.children;
for (j = 0, len = ref.length; j < len; j++) {
child = ref[j];
result = callback(child, level);
if (result && child.hasChildren()) {
_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;
getDataFromNodes = (function(_this) {
return function(nodes) {
var data, j, k, len, node, tmp_node, v;
data = [];
for (j = 0, len = nodes.length; j < len; j++) {
node = nodes[j];
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;
};
})(this);
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, j, len, new_parent, original_parent, 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 (j = 0, len = ref.length; j < len; j++) {
child = ref[j];
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 != null) {
return this.id_mapping[node.id] = node;
}
};
Node.prototype.removeNodeFromIndex = function(node) {
if (node.id != null) {
return delete this.id_mapping[node.id];
}
};
Node.prototype.removeChildren = function() {
this.iterate((function(_this) {
return function(child) {
_this.tree.removeNodeFromIndex(child);
return true;
};
})(this));
return this.children = [];
};
Node.prototype.getPreviousSibling = function() {
var previous_index;
if (!this.parent) {
return null;
} else {
previous_index = this.parent.getChildIndex(this) - 1;
if (previous_index >= 0) {
return this.parent.children[previous_index];
} else {
return null;
}
}
};
Node.prototype.getNextSibling = function() {
var next_index;
if (!this.parent) {
return null;
} else {
next_index = this.parent.getChildIndex(this) + 1;
if (next_index < this.parent.children.length) {
return this.parent.children[next_index];
} else {
return null;
}
}
};
Node.prototype.getNodesByProperty = function(key, value) {
return this.filter(function(node) {
return node[key] === value;
});
};
Node.prototype.filter = function(f) {
var result;
result = [];
this.iterate(function(node) {
if (f(node)) {
result.push(node);
}
return true;
});
return result;
};
Node.prototype.getNextNode = function(include_children) {
var next_sibling;
if (include_children == null) {
include_children = true;
}
if (include_children && this.hasChildren() && this.is_open) {
return this.children[0];
} else {
if (!this.parent) {
return null;
} else {
next_sibling = this.getNextSibling();
if (next_sibling) {
return next_sibling;
} else {
return this.parent.getNextNode(false);
}
}
}
};
Node.prototype.getPreviousNode = function() {
var previous_sibling;
if (!this.parent) {
return null;
} else {
previous_sibling = this.getPreviousSibling();
if (previous_sibling) {
if (!previous_sibling.hasChildren() || !previous_sibling.is_open) {
return previous_sibling;
} else {
return previous_sibling.getLastChild();
}
} else {
if (this.parent.parent) {
return this.parent;
} else {
return null;
}
}
}
};
Node.prototype.getLastChild = function() {
var last_child;
if (!this.hasChildren()) {
return null;
} else {
last_child = this.children[this.children.length - 1];
if (!last_child.hasChildren() || !last_child.is_open) {
return last_child;
} else {
return last_child.getLastChild();
}
}
};
return Node;
})();
module.exports = {
Node: Node,
Position: Position
};
},{}],6:[function(require,module,exports){
var BorderDropHint, FolderElement, GhostDropHint, NodeElement, Position, node,
extend = 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; },
hasProp = {}.hasOwnProperty;
node = require('./node');
Position = node.Position;
NodeElement = (function() {
function NodeElement(node, tree_widget) {
this.init(node, tree_widget);
}
NodeElement.prototype.init = function(node, tree_widget) {
this.node = node;
this.tree_widget = tree_widget;
if (!node.element) {
node.element = this.tree_widget.element;
}
return this.$element = $(node.element);
};
NodeElement.prototype.getUl = function() {
return this.$element.children('ul:first');
};
NodeElement.prototype.getSpan = function() {
return this.$element.children('.jqtree-element').find('span.jqtree-title');
};
NodeElement.prototype.getLi = function() {
return this.$element;
};
NodeElement.prototype.addDropHint = function(position) {
if (position === Position.INSIDE) {
return new BorderDropHint(this.$element);
} else {
return new GhostDropHint(this.node, this.$element, position);
}
};
NodeElement.prototype.select = function() {
return this.getLi().addClass('jqtree-selected');
};
NodeElement.prototype.deselect = function() {
return this.getLi().removeClass('jqtree-selected');
};
return NodeElement;
})();
FolderElement = (function(superClass) {
extend(FolderElement, superClass);
function FolderElement() {
return FolderElement.__super__.constructor.apply(this, arguments);
}
FolderElement.prototype.open = function(on_finished, slide) {
var $button, doOpen;
if (slide == null) {
slide = true;
}
if (!this.node.is_open) {
this.node.is_open = true;
$button = this.getButton();
$button.removeClass('jqtree-closed');
$button.html('');
$button.append(this.tree_widget.renderer.opened_icon_element.cloneNode(false));
doOpen = (function(_this) {
return function() {
_this.getLi().removeClass('jqtree-closed');
if (on_finished) {
on_finished();
}
return _this.tree_widget._triggerEvent('tree.open', {
node: _this.node
});
};
})(this);
if (slide) {
return this.getUl().slideDown('fast', doOpen);
} else {
this.getUl().show();
return doOpen();
}
}
};
FolderElement.prototype.close = function(slide) {
var $button, doClose;
if (slide == null) {
slide = true;
}
if (this.node.is_open) {
this.node.is_open = false;
$button = this.getButton();
$button.addClass('jqtree-closed');
$button.html('');
$button.append(this.tree_widget.renderer.closed_icon_element.cloneNode(false));
doClose = (function(_this) {
return function() {
_this.getLi().addClass('jqtree-closed');
return _this.tree_widget._triggerEvent('tree.close', {
node: _this.node
});
};
})(this);
if (slide) {
return this.getUl().slideUp('fast', doClose);
} else {
this.getUl().hide();
return doClose();
}
}
};
FolderElement.prototype.getButton = function() {
return this.$element.children('.jqtree-element').find('a.jqtree-toggler');
};
FolderElement.prototype.addDropHint = function(position) {
if (!this.node.is_open && position === Position.INSIDE) {
return new BorderDropHint(this.$element);
} else {
return new GhostDropHint(this.node, this.$element, position);
}
};
return FolderElement;
})(NodeElement);
BorderDropHint = (function() {
function BorderDropHint($element) {
var $div, width;
$div = $element.children('.jqtree-element');
width = $element.width() - 4;
this.$hint = $('<span class="jqtree-border"></span>');
$div.append(this.$hint);
this.$hint.css({
width: width,
height: $div.outerHeight() - 4
});
}
BorderDropHint.prototype.remove = function() {
return this.$hint.remove();
};
return BorderDropHint;
})();
GhostDropHint = (function() {
function GhostDropHint(node, $element, position) {
this.$element = $element;
this.node = node;
this.$ghost = $('<li class="jqtree_common jqtree-ghost"><span class="jqtree_common jqtree-circle"></span><span class="jqtree_common jqtree-line"></span></li>');
if (position === Position.AFTER) {
this.moveAfter();
} else if (position === Position.BEFORE) {
this.moveBefore();
} else if (position === Position.INSIDE) {
if (node.isFolder() && node.is_open) {
this.moveInsideOpenFolder();
} else {
this.moveInside();
}
}
}
GhostDropHint.prototype.remove = function() {
return this.$ghost.remove();
};
GhostDropHint.prototype.moveAfter = function() {
return this.$element.after(this.$ghost);
};
GhostDropHint.prototype.moveBefore = function() {
return this.$element.before(this.$ghost);
};
GhostDropHint.prototype.moveInsideOpenFolder = function() {
return $(this.node.children[0].element).before(this.$ghost);
};
GhostDropHint.prototype.moveInside = function() {
this.$element.after(this.$ghost);
return this.$ghost.addClass('jqtree-inside');
};
return GhostDropHint;
})();
module.exports = {
FolderElement: FolderElement,
NodeElement: NodeElement
};
},{"./node":5}],7:[function(require,module,exports){
var SaveStateHandler, indexOf, isInt, util;
util = require('./util');
indexOf = util.indexOf;
isInt = util.isInt;
SaveStateHandler = (function() {
function SaveStateHandler(tree_widget) {
this.tree_widget = tree_widget;
}
SaveStateHandler.prototype.saveState = function() {
var state;
state = JSON.stringify(this.getState());
if (this.tree_widget.options.onSetStateFromStorage) {
return this.tree_widget.options.onSetStateFromStorage(state);
} else if (this.supportsLocalStorage()) {
return localStorage.setItem(this.getCookieName(), state);
} else if ($.cookie) {
$.cookie.raw = true;
return $.cookie(this.getCookieName(), state, {
path: '/'
});
}
};
SaveStateHandler.prototype.getStateFromStorage = function() {
var json_data;
json_data = this._loadFromStorage();
if (json_data) {
return this._parseState(json_data);
} else {
return null;
}
};
SaveStateHandler.prototype._parseState = function(json_data) {
var state;
state = $.parseJSON(json_data);
if (state && state.selected_node && isInt(state.selected_node)) {
state.selected_node = [state.selected_node];
}
return state;
};
SaveStateHandler.prototype._loadFromStorage = function() {
if (this.tree_widget.options.onGetStateFromStorage) {
return this.tree_widget.options.onGetStateFromStorage();
} else if (this.supportsLocalStorage()) {
return localStorage.getItem(this.getCookieName());
} else if ($.cookie) {
$.cookie.raw = true;
return $.cookie(this.getCookieName());
} else {
return null;
}
};
SaveStateHandler.prototype.getState = function() {
var getOpenNodeIds, getSelectedNodeIds;
getOpenNodeIds = (function(_this) {
return function() {
var open_nodes;
open_nodes = [];
_this.tree_widget.tree.iterate(function(node) {
if (node.is_open && node.id && node.hasChildren()) {
open_nodes.push(node.id);
}
return true;
});
return open_nodes;
};
})(this);
getSelectedNodeIds = (function(_this) {
return function() {
var n;
return (function() {
var i, len, ref, results;
ref = this.tree_widget.getSelectedNodes();
results = [];
for (i = 0, len = ref.length; i < len; i++) {
n = ref[i];
results.push(n.id);
}
return results;
}).call(_this);
};
})(this);
return {
open_nodes: getOpenNodeIds(),
selected_node: getSelectedNodeIds()
};
};
SaveStateHandler.prototype.setInitialState = function(state) {
var must_load_on_demand;
if (!state) {
return false;
} else {
must_load_on_demand = this._openInitialNodes(state.open_nodes);
t