source: trunk/themes/default/js/ui/jquery.ui.selectable.js @ 12525

Last change on this file since 12525 was 12525, checked in by patdenice, 12 years ago

feature:2487
Update jQuery to 1.6.4 and jQuery UI to 1.8.16

File size: 6.7 KB
Line 
1/*
2 * jQuery UI Selectable 1.8.16
3 *
4 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT or GPL Version 2 licenses.
6 * http://jquery.org/license
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( $, undefined ) {
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 = $("<div class='ui-selectable-helper'></div>");
60        },
61
62        destroy: function() {
63                this.selectees
64                        .removeClass("ui-selectee")
65                        .removeData("selectable-item");
66                this.element
67                        .removeClass("ui-selectable ui-selectable-disabled")
68                        .removeData("selectable")
69                        .unbind(".selectable");
70                this._mouseDestroy();
71
72                return this;
73        },
74
75        _mouseStart: function(event) {
76                var self = this;
77
78                this.opos = [event.pageX, event.pageY];
79
80                if (this.options.disabled)
81                        return;
82
83                var options = this.options;
84
85                this.selectees = $(options.filter, this.element[0]);
86
87                this._trigger("start", event);
88
89                $(options.appendTo).append(this.helper);
90                // position helper (lasso)
91                this.helper.css({
92                        "left": event.clientX,
93                        "top": event.clientY,
94                        "width": 0,
95                        "height": 0
96                });
97
98                if (options.autoRefresh) {
99                        this.refresh();
100                }
101
102                this.selectees.filter('.ui-selected').each(function() {
103                        var selectee = $.data(this, "selectable-item");
104                        selectee.startselected = true;
105                        if (!event.metaKey) {
106                                selectee.$element.removeClass('ui-selected');
107                                selectee.selected = false;
108                                selectee.$element.addClass('ui-unselecting');
109                                selectee.unselecting = true;
110                                // selectable UNSELECTING callback
111                                self._trigger("unselecting", event, {
112                                        unselecting: selectee.element
113                                });
114                        }
115                });
116
117                $(event.target).parents().andSelf().each(function() {
118                        var selectee = $.data(this, "selectable-item");
119                        if (selectee) {
120                                var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected');
121                                selectee.$element
122                                        .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
123                                        .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
124                                selectee.unselecting = !doSelect;
125                                selectee.selecting = doSelect;
126                                selectee.selected = doSelect;
127                                // selectable (UN)SELECTING callback
128                                if (doSelect) {
129                                        self._trigger("selecting", event, {
130                                                selecting: selectee.element
131                                        });
132                                } else {
133                                        self._trigger("unselecting", event, {
134                                                unselecting: selectee.element
135                                        });
136                                }
137                                return false;
138                        }
139                });
140
141        },
142
143        _mouseDrag: function(event) {
144                var self = this;
145                this.dragged = true;
146
147                if (this.options.disabled)
148                        return;
149
150                var options = this.options;
151
152                var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;
153                if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
154                if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
155                this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
156
157                this.selectees.each(function() {
158                        var selectee = $.data(this, "selectable-item");
159                        //prevent helper from being selected if appendTo: selectable
160                        if (!selectee || selectee.element == self.element[0])
161                                return;
162                        var hit = false;
163                        if (options.tolerance == 'touch') {
164                                hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
165                        } else if (options.tolerance == 'fit') {
166                                hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
167                        }
168
169                        if (hit) {
170                                // SELECT
171                                if (selectee.selected) {
172                                        selectee.$element.removeClass('ui-selected');
173                                        selectee.selected = false;
174                                }
175                                if (selectee.unselecting) {
176                                        selectee.$element.removeClass('ui-unselecting');
177                                        selectee.unselecting = false;
178                                }
179                                if (!selectee.selecting) {
180                                        selectee.$element.addClass('ui-selecting');
181                                        selectee.selecting = true;
182                                        // selectable SELECTING callback
183                                        self._trigger("selecting", event, {
184                                                selecting: selectee.element
185                                        });
186                                }
187                        } else {
188                                // UNSELECT
189                                if (selectee.selecting) {
190                                        if (event.metaKey && selectee.startselected) {
191                                                selectee.$element.removeClass('ui-selecting');
192                                                selectee.selecting = false;
193                                                selectee.$element.addClass('ui-selected');
194                                                selectee.selected = true;
195                                        } else {
196                                                selectee.$element.removeClass('ui-selecting');
197                                                selectee.selecting = false;
198                                                if (selectee.startselected) {
199                                                        selectee.$element.addClass('ui-unselecting');
200                                                        selectee.unselecting = true;
201                                                }
202                                                // selectable UNSELECTING callback
203                                                self._trigger("unselecting", event, {
204                                                        unselecting: selectee.element
205                                                });
206                                        }
207                                }
208                                if (selectee.selected) {
209                                        if (!event.metaKey && !selectee.startselected) {
210                                                selectee.$element.removeClass('ui-selected');
211                                                selectee.selected = false;
212
213                                                selectee.$element.addClass('ui-unselecting');
214                                                selectee.unselecting = true;
215                                                // selectable UNSELECTING callback
216                                                self._trigger("unselecting", event, {
217                                                        unselecting: selectee.element
218                                                });
219                                        }
220                                }
221                        }
222                });
223
224                return false;
225        },
226
227        _mouseStop: function(event) {
228                var self = this;
229
230                this.dragged = false;
231
232                var options = this.options;
233
234                $('.ui-unselecting', this.element[0]).each(function() {
235                        var selectee = $.data(this, "selectable-item");
236                        selectee.$element.removeClass('ui-unselecting');
237                        selectee.unselecting = false;
238                        selectee.startselected = false;
239                        self._trigger("unselected", event, {
240                                unselected: selectee.element
241                        });
242                });
243                $('.ui-selecting', this.element[0]).each(function() {
244                        var selectee = $.data(this, "selectable-item");
245                        selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
246                        selectee.selecting = false;
247                        selectee.selected = true;
248                        selectee.startselected = true;
249                        self._trigger("selected", event, {
250                                selected: selectee.element
251                        });
252                });
253                this._trigger("stop", event);
254
255                this.helper.remove();
256
257                return false;
258        }
259
260});
261
262$.extend($.ui.selectable, {
263        version: "1.8.16"
264});
265
266})(jQuery);
Note: See TracBrowser for help on using the repository browser.