PageSourceSearch

https://www.alfredstreet.org/wp-includes/js/jquery/ui/selectable.js?ver=1.13.3

js alfredstreet.org collected 2026-09-24 09:56:46 UTC 8,129 bytes, 317 lines download raw bytes

vendor: 8,129 bytes, lines 1-317
1/*!
2 * jQuery UI Selectable 1.13.3
3 * https://jqueryui.com
4 *
5 * Copyright OpenJS Foundation and other contributors
6 * Released under the MIT license.
7 * https://jquery.org/license
8 */
9
10//>>label: Selectable
11//>>group: Interactions
12//>>description: Allows groups of elements to be selected with the mouse.
13//>>docs: https://api.jqueryui.com/selectable/
14//>>demos: https://jqueryui.com/selectable/
15//>>css.structure: ../../themes/base/selectable.css
16
17( function( factory ) {
18	"use strict";
19
20	if ( typeof define === "function" && define.amd ) {
21
22		// AMD. Register as an anonymous module.
23		define( [
24			"jquery",
25			"./mouse",
26			"../version",
27			"../widget"
28		], factory );
29	} else {
30
31		// Browser globals
32		factory( jQuery );
33	}
34} )( function( $ ) {
35"use strict";
36
37return $.widget( "ui.selectable", $.ui.mouse, {
38	version: "1.13.3",
39	options: {
40		appendTo: "body",
41		autoRefresh: true,
42		distance: 0,
43		filter: "*",
44		tolerance: "touch",
45
46		// Callbacks
47		selected: null,
48		selecting: null,
49		start: null,
50		stop: null,
51		unselected: null,
52		unselecting: null
53	},
54	_create: function() {
55		var that = this;
56
57		this._addClass( "ui-selectable" );
58
59		this.dragged = false;
60
61		// Cache selectee children based on filter
62		this.refresh = function() {
63			that.elementPos = $( that.element[ 0 ] ).offset();
64			that.selectees = $( that.options.filter, that.element[ 0 ] );
65			that._addClass( that.selectees, "ui-selectee" );
66			that.selectees.each( function() {
67				var $this = $( this ),
68					selecteeOffset = $this.offset(),
69					pos = {
70						left: selecteeOffset.left - that.elementPos.left,
71						top: selecteeOffset.top - that.elementPos.top
72					};
73				$.data( this, "selectable-item", {
74					element: this,
75					$element: $this,
76					left: pos.left,
77					top: pos.top,
78					right: pos.left + $this.outerWidth(),
79					bottom: pos.top + $this.outerHeight(),
80					startselected: false,
81					selected: $this.hasClass( "ui-selected" ),
82					selecting: $this.hasClass( "ui-selecting" ),
83					unselecting: $this.hasClass( "ui-unselecting" )
84				} );
85			} );
86		};
87		this.refresh();
88
89		this._mouseInit();
90
91		this.helper = $( "<div>" );
92		this._addClass( this.helper, "ui-selectable-helper" );
93	},
94
95	_destroy: function() {
96		this.selectees.removeData( "selectable-item" );
97		this._mouseDestroy();
98	},
99
100	_mouseStart: function( event ) {
101		var that = this,
102			options = this.options;
103
104		this.opos = [ event.pageX, event.pageY ];
105		this.elementPos = $( this.element[ 0 ] ).offset();
106
107		if ( this.options.disabled ) {
108			return;
109		}
110
111		this.selectees = $( options.filter, this.element[ 0 ] );
112
113		this._trigger( "start", event );
114
115		$( options.appendTo ).append( this.helper );
116
117		// position helper (lasso)
118		this.helper.css( {
119			"left": event.pageX,
120			"top": event.pageY,
121			"width": 0,
122			"height": 0
123		} );
124
125		if ( options.autoRefresh ) {
126			this.refresh();
127		}
128
129		this.selectees.filter( ".ui-selected" ).each( function() {
130			var selectee = $.data( this, "selectable-item" );
131			selectee.startselected = true;
132			if ( !event.metaKey && !event.ctrlKey ) {
133				that._removeClass( selectee.$element, "ui-selected" );
134				selectee.selected = false;
135				that._addClass( selectee.$element, "ui-unselecting" );
136				selectee.unselecting = true;
137
138				// selectable UNSELECTING callback
139				that._trigger( "unselecting", event, {
140					unselecting: selectee.element
141				} );
142			}
143		} );
144
145		$( event.target ).parents().addBack().each( function() {
146			var doSelect,
147				selectee = $.data( this, "selectable-item" );
148			if ( selectee ) {
149				doSelect = ( !event.metaKey && !event.ctrlKey ) ||
150					!selectee.$element.hasClass( "ui-selected" );
151				that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )
152					._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );
153				selectee.unselecting = !doSelect;
154				selectee.selecting = doSelect;
155				selectee.selected = doSelect;
156
157				// selectable (UN)SELECTING callback
158				if ( doSelect ) {
159					that._trigger( "selecting", event, {
160						selecting: selectee.element
161					} );
162				} else {
163					that._trigger( "unselecting", event, {
164						unselecting: selectee.element
165					} );
166				}
167				return false;
168			}
169		} );
170
171	},
172
173	_mouseDrag: function( event ) {
174
175		this.dragged = true;
176
177		if ( this.options.disabled ) {
178			return;
179		}
180
181		var tmp,
182			that = this,
183			options = this.options,
184			x1 = this.opos[ 0 ],
185			y1 = this.opos[ 1 ],
186			x2 = event.pageX,
187			y2 = event.pageY;
188
189		if ( x1 > x2 ) {
190			tmp = x2; x2 = x1; x1 = tmp;
191		}
192		if ( y1 > y2 ) {
193			tmp = y2; y2 = y1; y1 = tmp;
194		}
195		this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );
196
197		this.selectees.each( function() {
198			var selectee = $.data( this, "selectable-item" ),
199				hit = false,
200				offset = {};
201
202			//prevent helper from being selected if appendTo: selectable
203			if ( !selectee || selectee.element === that.element[ 0 ] ) {
204				return;
205			}
206
207			offset.left   = selectee.left   + that.elementPos.left;
208			offset.right  = selectee.right  + that.elementPos.left;
209			offset.top    = selectee.top    + that.elementPos.top;
210			offset.bottom = selectee.bottom + that.elementPos.top;
211
212			if ( options.tolerance === "touch" ) {
213				hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
214                    offset.bottom < y1 ) );
215			} else if ( options.tolerance === "fit" ) {
216				hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
217                    offset.bottom < y2 );
218			}
219
220			if ( hit ) {
221
222				// SELECT
223				if ( selectee.selected ) {
224					that._removeClass( selectee.$element, "ui-selected" );
225					selectee.selected = false;
226				}
227				if ( selectee.unselecting ) {
228					that._removeClass( selectee.$element, "ui-unselecting" );
229					selectee.unselecting = false;
230				}
231				if ( !selectee.selecting ) {
232					that._addClass( selectee.$element, "ui-selecting" );
233					selectee.selecting = true;
234
235					// selectable SELECTING callback
236					that._trigger( "selecting", event, {
237						selecting: selectee.element
238					} );
239				}
240			} else {
241
242				// UNSELECT
243				if ( selectee.selecting ) {
244					if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {
245						that._removeClass( selectee.$element, "ui-selecting" );
246						selectee.selecting = false;
247						that._addClass( selectee.$element, "ui-selected" );
248						selectee.selected = true;
249					} else {
250						that._removeClass( selectee.$element, "ui-selecting" );
251						selectee.selecting = false;
252						if ( selectee.startselected ) {
253							that._addClass( selectee.$element, "ui-unselecting" );
254							selectee.unselecting = true;
255						}
256
257						// selectable UNSELECTING callback
258						that._trigger( "unselecting", event, {
259							unselecting: selectee.element
260						} );
261					}
262				}
263				if ( selectee.selected ) {
264					if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {
265						that._removeClass( selectee.$element, "ui-selected" );
266						selectee.selected = false;
267
268						that._addClass( selectee.$element, "ui-unselecting" );
269						selectee.unselecting = true;
270
271						// selectable UNSELECTING callback
272						that._trigger( "unselecting", event, {
273							unselecting: selectee.element
274						} );
275					}
276				}
277			}
278		} );
279
280		return false;
281	},
282
283	_mouseStop: function( event ) {
284		var that = this;
285
286		this.dragged = false;
287
288		$( ".ui-unselecting", this.element[ 0 ] ).each( function() {
289			var selectee = $.data( this, "selectable-item" );
290			that._removeClass( selectee.$element, "ui-unselecting" );
291			selectee.unselecting = false;
292			selectee.startselected = false;
293			that._trigger( "unselected", event, {
294				unselected: selectee.element
295			} );
296		} );
297		$( ".ui-selecting", this.element[ 0 ] ).each( function() {
298			var selectee = $.data( this, "selectable-item" );
299			that._removeClass( selectee.$element, "ui-selecting" )
300				._addClass( selectee.$element, "ui-selected" );
301			selectee.selecting = false;
302			selectee.selected = true;
303			selectee.startselected = true;
304			that._trigger( "selected", event, {
305				selected: selectee.element
306			} );
307		} );
308		this._trigger( "stop", event );
309
310		this.helper.remove();
311
312		return false;
313	}
314
315} );
316
317} );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.