aboutsummaryrefslogtreecommitdiff
path: root/static/development-bundle/ui/ui.selectable.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/development-bundle/ui/ui.selectable.js')
-rw-r--r--static/development-bundle/ui/ui.selectable.js257
1 files changed, 257 insertions, 0 deletions
diff --git a/static/development-bundle/ui/ui.selectable.js b/static/development-bundle/ui/ui.selectable.js
new file mode 100644
index 0000000..08f99cf
--- /dev/null
+++ b/static/development-bundle/ui/ui.selectable.js
@@ -0,0 +1,257 @@
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);