PluginProbe
RSVP and Event Management / 1.3.0
RSVP and Event Management v1.3.0
trunk 0.5.0 0.6.0 0.7.0 0.8.0 0.9.0 0.9.5 1.0.0 1.1.0 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.5.0 1.6.0 1.6.1 1.6.2 1.6.5 1.7.0 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 All 136 releases
rsvp / jquery-ui-1.7.2.custom / development-bundle / ui / ui.selectable.js

ui.selectable.js in RSVP and Event Management 1.3.0, at jquery-ui-1.7.2.custom/development-bundle/ui/ui.selectable.js

258 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*
2 * jQuery UI Selectable 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Selectables
9 *
10 * Depends:
11 * ui.core.js
12 */
13 (function($) {
14
15 $.widget("ui.selectable", $.extend({}, $.ui.mouse, {
16
17 _init: function() {
18 var self = this;
19
20 this.element.addClass("ui-selectable");
21
22 this.dragged = false;
23
24 // cache selectee children based on filter
25 var selectees;
26 this.refresh = function() {
27 selectees = $(self.options.filter, self.element[0]);
28 selectees.each(function() {
29 var $this = $(this);
30 var pos = $this.offset();
31 $.data(this, "selectable-item", {
32 element: this,
33 $element: $this,
34 left: pos.left,
35 top: pos.top,
36 right: pos.left + $this.outerWidth(),
37 bottom: pos.top + $this.outerHeight(),
38 startselected: false,
39 selected: $this.hasClass('ui-selected'),
40 selecting: $this.hasClass('ui-selecting'),
41 unselecting: $this.hasClass('ui-unselecting')
42 });
43 });
44 };
45 this.refresh();
46
47 this.selectees = selectees.addClass("ui-selectee");
48
49 this._mouseInit();
50
51 this.helper = $(document.createElement('div'))
52 .css({border:'1px dotted black'})
53 .addClass("ui-selectable-helper");
54 },
55
56 destroy: function() {
57 this.element
58 .removeClass("ui-selectable ui-selectable-disabled")
59 .removeData("selectable")
60 .unbind(".selectable");
61 this._mouseDestroy();
62 },
63
64 _mouseStart: function(event) {
65 var self = this;
66
67 this.opos = [event.pageX, event.pageY];
68
69 if (this.options.disabled)
70 return;
71
72 var options = this.options;
73
74 this.selectees = $(options.filter, this.element[0]);
75
76 this._trigger("start", event);
77
78 $(options.appendTo).append(this.helper);
79 // position helper (lasso)
80 this.helper.css({
81 "z-index": 100,
82 "position": "absolute",
83 "left": event.clientX,
84 "top": event.clientY,
85 "width": 0,
86 "height": 0
87 });
88
89 if (options.autoRefresh) {
90 this.refresh();
91 }
92
93 this.selectees.filter('.ui-selected').each(function() {
94 var selectee = $.data(this, "selectable-item");
95 selectee.startselected = true;
96 if (!event.metaKey) {
97 selectee.$element.removeClass('ui-selected');
98 selectee.selected = false;
99 selectee.$element.addClass('ui-unselecting');
100 selectee.unselecting = true;
101 // selectable UNSELECTING callback
102 self._trigger("unselecting", event, {
103 unselecting: selectee.element
104 });
105 }
106 });
107
108 $(event.target).parents().andSelf().each(function() {
109 var selectee = $.data(this, "selectable-item");
110 if (selectee) {
111 selectee.$element.removeClass("ui-unselecting").addClass('ui-selecting');
112 selectee.unselecting = false;
113 selectee.selecting = true;
114 selectee.selected = true;
115 // selectable SELECTING callback
116 self._trigger("selecting", event, {
117 selecting: selectee.element
118 });
119 return false;
120 }
121 });
122
123 },
124
125 _mouseDrag: function(event) {
126 var self = this;
127 this.dragged = true;
128
129 if (this.options.disabled)
130 return;
131
132 var options = this.options;
133
134 var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
135 if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
136 if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
137 this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
138
139 this.selectees.each(function() {
140 var selectee = $.data(this, "selectable-item");
141 //prevent helper from being selected if appendTo: selectable
142 if (!selectee || selectee.element == self.element[0])
143 return;
144 var hit = false;
145 if (options.tolerance == 'touch') {
146 hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
147 } else if (options.tolerance == 'fit') {
148 hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
149 }
150
151 if (hit) {
152 // SELECT
153 if (selectee.selected) {
154 selectee.$element.removeClass('ui-selected');
155 selectee.selected = false;
156 }
157 if (selectee.unselecting) {
158 selectee.$element.removeClass('ui-unselecting');
159 selectee.unselecting = false;
160 }
161 if (!selectee.selecting) {
162 selectee.$element.addClass('ui-selecting');
163 selectee.selecting = true;
164 // selectable SELECTING callback
165 self._trigger("selecting", event, {
166 selecting: selectee.element
167 });
168 }
169 } else {
170 // UNSELECT
171 if (selectee.selecting) {
172 if (event.metaKey && selectee.startselected) {
173 selectee.$element.removeClass('ui-selecting');
174 selectee.selecting = false;
175 selectee.$element.addClass('ui-selected');
176 selectee.selected = true;
177 } else {
178 selectee.$element.removeClass('ui-selecting');
179 selectee.selecting = false;
180 if (selectee.startselected) {
181 selectee.$element.addClass('ui-unselecting');
182 selectee.unselecting = true;
183 }
184 // selectable UNSELECTING callback
185 self._trigger("unselecting", event, {
186 unselecting: selectee.element
187 });
188 }
189 }
190 if (selectee.selected) {
191 if (!event.metaKey && !selectee.startselected) {
192 selectee.$element.removeClass('ui-selected');
193 selectee.selected = false;
194
195 selectee.$element.addClass('ui-unselecting');
196 selectee.unselecting = true;
197 // selectable UNSELECTING callback
198 self._trigger("unselecting", event, {
199 unselecting: selectee.element
200 });
201 }
202 }
203 }
204 });
205
206 return false;
207 },
208
209 _mouseStop: function(event) {
210 var self = this;
211
212 this.dragged = false;
213
214 var options = this.options;
215
216 $('.ui-unselecting', this.element[0]).each(function() {
217 var selectee = $.data(this, "selectable-item");
218 selectee.$element.removeClass('ui-unselecting');
219 selectee.unselecting = false;
220 selectee.startselected = false;
221 self._trigger("unselected", event, {
222 unselected: selectee.element
223 });
224 });
225 $('.ui-selecting', this.element[0]).each(function() {
226 var selectee = $.data(this, "selectable-item");
227 selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
228 selectee.selecting = false;
229 selectee.selected = true;
230 selectee.startselected = true;
231 self._trigger("selected", event, {
232 selected: selectee.element
233 });
234 });
235 this._trigger("stop", event);
236
237 this.helper.remove();
238
239 return false;
240 }
241
242 }));
243
244 $.extend($.ui.selectable, {
245 version: "1.7.2",
246 defaults: {
247 appendTo: 'body',
248 autoRefresh: true,
249 cancel: ":input,option",
250 delay: 0,
251 distance: 0,
252 filter: '*',
253 tolerance: 'touch'
254 }
255 });
256
257 })(jQuery);
258