aboutsummaryrefslogtreecommitdiffstats
path: root/ui/source/ui.selectable.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/source/ui.selectable.js')
-rw-r--r--ui/source/ui.selectable.js124
1 files changed, 63 insertions, 61 deletions
diff --git a/ui/source/ui.selectable.js b/ui/source/ui.selectable.js
index 1e4aa8428..8486e44e2 100644
--- a/ui/source/ui.selectable.js
+++ b/ui/source/ui.selectable.js
@@ -14,9 +14,9 @@
*/
;(function($) {
- $.widget("ui.selectable", {
+ $.widget("ui.selectable", $.extend($.ui.mouse, {
init: function() {
- var instance = this;
+ var self = this;
this.element.addClass("ui-selectable");
@@ -25,7 +25,7 @@
// cache selectee children based on filter
var selectees;
this.refresh = function() {
- selectees = $(instance.options.filter, instance.element[0]);
+ selectees = $(self.options.filter, self.element[0]);
selectees.each(function() {
var $this = $(this);
var pos = $this.offset();
@@ -46,25 +46,8 @@
this.refresh();
this.selectees = selectees.addClass("ui-selectee");
-
- //Initialize mouse interaction
- this.element.mouse({
- executor: this,
- appendTo: 'body',
- delay: 0,
- distance: 0,
- dragPrevention: ['input','textarea','button','select','option'],
- start: this.start,
- stop: this.stop,
- drag: this.drag,
- condition: function(e) {
- var isSelectee = false;
- $(e.target).parents().andSelf().each(function() {
- if($.data(this, "selectable-item")) isSelectee = true;
- });
- return this.options.keyboard ? !isSelectee : true;
- }
- });
+
+ this.mouseInit();
this.helper = $(document.createElement('div')).css({border:'1px dotted black'});
},
@@ -79,8 +62,8 @@
this.element
.removeClass("ui-selectable ui-selectable-disabled")
.removeData("selectable")
- .unbind(".selectable")
- .mouse("destroy");
+ .unbind(".selectable");
+ this.mouseDestroy();
},
enable: function() {
this.element.removeClass("ui-selectable-disabled");
@@ -90,20 +73,21 @@
this.element.addClass("ui-selectable-disabled");
this.disabled = true;
},
- start: function(ev, element) {
+ mouseStart: function(e) {
+ var self = this;
- this.opos = [ev.pageX, ev.pageY];
+ this.opos = [e.pageX, e.pageY];
if (this.disabled)
return;
var options = this.options;
- this.selectees = $(options.filter, element);
+ this.selectees = $(options.filter, this.element[0]);
// selectable START callback
- this.element.triggerHandler("selectablestart", [ev, {
- "selectable": element,
+ this.element.triggerHandler("selectablestart", [e, {
+ "selectable": this.element[0],
"options": options
}], options.start);
@@ -112,8 +96,8 @@
this.helper.css({
"z-index": 100,
"position": "absolute",
- "left": ev.clientX,
- "top": ev.clientY,
+ "left": e.clientX,
+ "top": e.clientY,
"width": 0,
"height": 0
});
@@ -125,21 +109,28 @@
this.selectees.filter('.ui-selected').each(function() {
var selectee = $.data(this, "selectable-item");
selectee.startselected = true;
- if (!ev.ctrlKey) {
+ if (!e.ctrlKey) {
selectee.$element.removeClass('ui-selected');
selectee.selected = false;
selectee.$element.addClass('ui-unselecting');
selectee.unselecting = true;
// selectable UNSELECTING callback
- $(this.element).triggerHandler("selectableunselecting", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableunselecting", [e, {
+ selectable: self.element[0],
unselecting: selectee.element,
options: options
}], options.unselecting);
}
});
+
+ var isSelectee = false;
+ $(e.target).parents().andSelf().each(function() {
+ if($.data(this, "selectable-item")) isSelectee = true;
+ });
+ return this.options.keyboard ? !isSelectee : true;
},
- drag: function(ev, element) {
+ mouseDrag: function(e) {
+ var self = this;
this.dragged = true;
if (this.disabled)
@@ -147,7 +138,7 @@
var options = this.options;
- var x1 = this.opos[0], y1 = this.opos[1], x2 = ev.pageX, y2 = ev.pageY;
+ var x1 = this.opos[0], y1 = this.opos[1], x2 = e.pageX, y2 = e.pageY;
if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
@@ -155,7 +146,7 @@
this.selectees.each(function() {
var selectee = $.data(this, "selectable-item");
//prevent helper from being selected if appendTo: selectable
- if (!selectee || selectee.element == element)
+ if (!selectee || selectee.element == self.element[0])
return;
var hit = false;
if (options.tolerance == 'touch') {
@@ -178,8 +169,8 @@
selectee.$element.addClass('ui-selecting');
selectee.selecting = true;
// selectable SELECTING callback
- $(this.element).triggerHandler("selectableselecting", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableselecting", [e, {
+ selectable: self.element[0],
selecting: selectee.element,
options: options
}], options.selecting);
@@ -187,7 +178,7 @@
} else {
// UNSELECT
if (selectee.selecting) {
- if (ev.ctrlKey && selectee.startselected) {
+ if (e.ctrlKey && selectee.startselected) {
selectee.$element.removeClass('ui-selecting');
selectee.selecting = false;
selectee.$element.addClass('ui-selected');
@@ -200,23 +191,23 @@
selectee.unselecting = true;
}
// selectable UNSELECTING callback
- $(this.element).triggerHandler("selectableunselecting", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableunselecting", [e, {
+ selectable: self.element[0],
unselecting: selectee.element,
options: options
}], options.unselecting);
}
}
if (selectee.selected) {
- if (!ev.ctrlKey && !selectee.startselected) {
+ if (!e.ctrlKey && !selectee.startselected) {
selectee.$element.removeClass('ui-selected');
selectee.selected = false;
selectee.$element.addClass('ui-unselecting');
selectee.unselecting = true;
// selectable UNSELECTING callback
- $(this.element).triggerHandler("selectableunselecting", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableunselecting", [e, {
+ selectable: self.element[0],
unselecting: selectee.element,
options: options
}], options.unselecting);
@@ -224,49 +215,60 @@
}
}
});
+
+ return false;
},
- stop: function(ev, element) {
+ mouseStop: function(e) {
+ var self = this;
+
this.dragged = false;
var options = this.options;
- $('.ui-unselecting', this.element).each(function() {
+ $('.ui-unselecting', this.element[0]).each(function() {
var selectee = $.data(this, "selectable-item");
selectee.$element.removeClass('ui-unselecting');
selectee.unselecting = false;
selectee.startselected = false;
- $(this.element).triggerHandler("selectableunselected", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableunselected", [e, {
+ selectable: self.element[0],
unselected: selectee.element,
options: options
}], options.unselected);
});
- $('.ui-selecting', this.element).each(function() {
+ $('.ui-selecting', this.element[0]).each(function() {
var selectee = $.data(this, "selectable-item");
selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
selectee.selecting = false;
selectee.selected = true;
selectee.startselected = true;
- $(this.element).triggerHandler("selectableselected", [ev, {
- selectable: element,
+ self.element.triggerHandler("selectableselected", [e, {
+ selectable: self.element[0],
selected: selectee.element,
options: options
}], options.selected);
});
- $(this.element).triggerHandler("selectablestop", [ev, {
- selectable: element,
+ this.element.triggerHandler("selectablestop", [e, {
+ selectable: self.element[0],
options: this.options
}], this.options.stop);
this.helper.remove();
+
+ return false;
}
- });
+ }));
- $.ui.selectable.defaults = {
- appendTo: 'body',
- autoRefresh: true,
- filter: '*',
- tolerance: 'touch'
- };
+ $.extend($.ui.selectable, {
+ defaults: {
+ distance: 0,
+ delay: 0,
+ cancel: ":input,button",
+ appendTo: 'body',
+ autoRefresh: true,
+ filter: '*',
+ tolerance: 'touch'
+ }
+ });
})(jQuery);