+++ /dev/null
-(function($)\r
-{\r
- \r
- //Make nodes selectable by expression\r
- $.extend($.expr[':'], { selectable: "(' '+a.className+' ').indexOf(' ui-selectable ')" });\r
- $.extend($.expr[':'], { selectee: "(' '+a.className+' ').indexOf(' ui-selectee ')" });\r
-\r
- $.fn.selectable = function(o) {\r
- return this.each(function() {\r
- if (!$(this).is(".ui-selectable")) new $.ui.selectable(this, o);\r
- });\r
- }\r
-\r
- $.ui.selectable = function(el, o) {\r
- \r
- var options = {\r
- filter: '*'\r
- };\r
- var o = o || {}; $.extend(options, o); //Extend and copy options\r
- this.element = el; var self = this; //Do bindings\r
- self.dragged = false;\r
-\r
- $.extend(options, {\r
- helper: function() { return $(document.createElement('div')).css({border:'1px dotted black'}); },\r
- _start: function(h,p,c,t,e) {\r
- self.start.apply(t, [self, e]); // Trigger the start callback\r
- },\r
- _drag: function(h,p,c,t,e) {\r
- self.dragged = true;\r
- self.drag.apply(t, [self, e]); // Trigger the drag callback\r
- },\r
- _stop: function(h,p,c,t,e) {\r
- self.stop.apply(t, [self, e]); // Trigger the end callback\r
- self.dragged = false;\r
- }\r
- });\r
-\r
- //Initialize mouse interaction\r
- this.mouse = new $.ui.mouseInteraction(el, options);\r
-\r
- //Add the class for themeing\r
- $(this.element).addClass("ui-selectable");\r
- $(this.element).children(options.filter).addClass("ui-selectee");\r
-\r
- }\r
-\r
- $.extend($.ui.selectable.prototype, {\r
- plugins: {},\r
- start: function(self, ev) {\r
- $(self.mouse.helper).css({'z-index': 100, position: 'absolute', left: ev.clientX, top: ev.clientY, width:0, height: 0});\r
- if (ev.ctrlKey) {\r
- if ($(ev.target).is('.ui-selected')) {\r
- $(ev.target).removeClass('ui-selected').addClass('ui-unselecting');\r
- $(self.element).triggerHandler("selectableunselecting", [ev, {\r
- selectable: self.element,\r
- unselecting: ev.target,\r
- options: this.options\r
- }], this.options.unselecting);\r
- }\r
- } else {\r
- self.unselecting(self, ev, this.options);\r
- self.selectingTarget(self, ev, this.options);\r
- }\r
- },\r
- drag: function(self, ev) {\r
- var x1 = self.mouse.opos[0], y1 = self.mouse.opos[1], x2 = ev.pageX, y2 = ev.pageY;\r
- if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }\r
- if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }\r
- $(self.mouse.helper).css({left: x1, top: y1, width: x2-x1, height: y2-y1});\r
- self.selectingTarget(self, ev, this.options);\r
- },\r
- stop: function(self, ev) {\r
- var options = this.options;\r
- $('.ui-selecting', self.element).each(function() {\r
- $(this).removeClass('ui-selecting').addClass('ui-selected');\r
- $(self.element).triggerHandler("selectableselected", [ev, {\r
- selectable: self.element,\r
- selected: this,\r
- options: options\r
- }], options.selected);\r
- });\r
- $('.ui-unselecting', self.element).each(function() {\r
- $(this).removeClass('ui-unselecting');\r
- $(self.element).triggerHandler("selectableunselected", [ev, {\r
- selectable: self.element,\r
- unselected: this,\r
- options: options\r
- }], options.unselected);\r
- });\r
- },\r
- unselecting: function(self, ev, options) {\r
- $('.ui-selected', self.element).each(function() {\r
- if (this != ev.target) {\r
- $(this).removeClass('ui-selected').addClass('ui-unselecting');\r
- $(self.element).triggerHandler("selectableunselecting", [ev, {\r
- selectable: self.element,\r
- unselecting: this,\r
- options: options\r
- }], options.unselecting);\r
- }\r
- });\r
- },\r
- selectingTarget: function(self, ev, options) {\r
- var target = $(ev.target);\r
- if (target.is('.ui-selectee:not(.ui-selecting)')) {\r
- target.removeClass('ui-selected').removeClass('ui-unselecting').addClass('ui-selecting');\r
- $(self.element).triggerHandler("selectableselecting", [ev, {\r
- selectable: self.element,\r
- selecting: ev.target,\r
- options: options\r
- }], options.selecting);\r
- }\r
- }\r
- });\r
- \r
-})(jQuery);
\ No newline at end of file