source: Dev/branches/jQueryUI/js/jquery/ui/jquery.ui.selectable.js @ 244

Last change on this file since 244 was 244, checked in by hendrikvanantwerpen, 13 years ago

Inlogscherm werkt met jQuery UI! Woot!

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