2014-10-03 17:24:27 -04:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
/*globals define*/
|
|
|
|
|
|
2014-10-10 16:37:58 -04:00
|
|
|
define('admin/modules/selectable', function() {
|
2014-10-03 17:24:27 -04:00
|
|
|
var selectable = {};
|
|
|
|
|
|
2014-10-03 17:55:54 -04:00
|
|
|
// modified from http://threedubmedia.com/code/event/drop/demo/selection
|
2014-10-03 18:08:57 -04:00
|
|
|
selectable.enable = function(parentElement, elementsToSelect, events) {
|
|
|
|
|
function selected(element) {
|
2014-10-04 01:45:46 -04:00
|
|
|
var $element = $(element).toggleClass('selected');
|
2014-10-03 18:08:57 -04:00
|
|
|
|
|
|
|
|
if (events && typeof events.onSelected === 'function') {
|
|
|
|
|
events.onSelected($element);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function unselected(element) {
|
2014-10-03 18:43:05 -04:00
|
|
|
var $element = $(element).removeClass('selected');
|
2014-10-03 18:08:57 -04:00
|
|
|
|
|
|
|
|
if (events && typeof events.onUnselected === 'function') {
|
|
|
|
|
events.onUnselected($element);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-03 17:24:27 -04:00
|
|
|
parentElement = $(parentElement);
|
2014-11-07 16:16:32 -05:00
|
|
|
elementsToSelect = $(elementsToSelect).not('.selection');
|
2014-10-03 17:24:27 -04:00
|
|
|
|
|
|
|
|
var offset = parentElement.offset();
|
|
|
|
|
|
|
|
|
|
parentElement
|
|
|
|
|
.addClass('selectable')
|
2014-10-03 18:01:50 -04:00
|
|
|
.on('mousedown', function(ev) {
|
2014-10-03 17:24:27 -04:00
|
|
|
if (!ev.shiftKey) {
|
2014-10-03 18:08:57 -04:00
|
|
|
unselected(elementsToSelect);
|
2014-10-03 17:24:27 -04:00
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.drag('start',function(ev, dd) {
|
|
|
|
|
if (!ev.shiftKey) {
|
2014-10-03 18:08:57 -04:00
|
|
|
unselected(elementsToSelect);
|
2014-10-03 17:24:27 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $('<div class="selector" />')
|
|
|
|
|
.css('opacity', 0.65 )
|
2014-10-03 18:26:13 -04:00
|
|
|
.appendTo(parentElement);
|
2014-10-03 17:24:27 -04:00
|
|
|
})
|
|
|
|
|
.drag(function(ev, dd){
|
|
|
|
|
$(dd.proxy).css({
|
|
|
|
|
top: Math.min(ev.pageY - offset.top, dd.startY - offset.top),
|
2014-10-03 17:55:54 -04:00
|
|
|
left: Math.min(ev.pageX - offset.left, dd.startX - offset.left),
|
2014-10-03 17:24:27 -04:00
|
|
|
height: Math.abs(ev.pageY - dd.startY),
|
|
|
|
|
width: Math.abs(ev.pageX - dd.startX)
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
.drag('end',function(ev, dd){
|
|
|
|
|
$(dd.proxy).remove();
|
2014-10-03 18:26:13 -04:00
|
|
|
});
|
2014-10-03 17:24:27 -04:00
|
|
|
|
|
|
|
|
elementsToSelect
|
|
|
|
|
.addClass('selection')
|
2014-10-03 18:01:50 -04:00
|
|
|
.on('mouseup', function(ev) {
|
2014-10-03 18:08:57 -04:00
|
|
|
selected(this);
|
2014-10-03 18:01:50 -04:00
|
|
|
})
|
2014-10-03 17:24:27 -04:00
|
|
|
.drop('start',function(){
|
|
|
|
|
$(this).addClass('active');
|
|
|
|
|
})
|
|
|
|
|
.drop(function( ev, dd ){
|
2014-10-03 18:08:57 -04:00
|
|
|
selected(this);
|
2014-10-03 17:24:27 -04:00
|
|
|
})
|
|
|
|
|
.drop('end',function(){
|
|
|
|
|
$(this).removeClass('active');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$.drop({
|
|
|
|
|
multi: true
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return selectable;
|
|
|
|
|
});
|