~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to lib/jquery/jquery.ui-1.7.1/development-bundle/ui/ui.selectable.js

  • Committer: V. Keith Hughitt
  • Date: 2009-03-26 19:20:57 UTC
  • Revision ID: hughitt1@kore-20090326192057-u0x8rf8sf5lmmnwh
nightly build 03-26-2009: Using alpha-channel JPEG 2000 dataset

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * jQuery UI Selectable 1.7.1
 
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.1",
 
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);