source: main/trunk/greenstone3/web/interfaces/oran/js/jquery-ui-1.8rc1/ui/jquery.ui.selectable.js@ 24245

Last change on this file since 24245 was 24245, checked in by sjb48, 13 years ago

Oran code for supporting format changes to document.

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