source: trunk/template-common/lib/ui/ui.selectable.js @ 4918

Last change on this file since 4918 was 4918, checked in by nikrou, 14 years ago

Feature 1442 : update jquery

  • update jquery to 1.4.1
  • update jquery ui to 1.7.2
  • Property svn:eol-style set to LF
File size: 6.4 KB
Line 
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);
Note: See TracBrowser for help on using the repository browser.