Project

General

Profile

1
define( [
2
	"../core"
3
], function( jQuery ) {
4

    
5
"use strict";
6

    
7
// Multifunctional method to get and set values of a collection
8
// The value/s can optionally be executed if it's a function
9
var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
10
	var i = 0,
11
		len = elems.length,
12
		bulk = key == null;
13

    
14
	// Sets many values
15
	if ( jQuery.type( key ) === "object" ) {
16
		chainable = true;
17
		for ( i in key ) {
18
			access( elems, fn, i, key[ i ], true, emptyGet, raw );
19
		}
20

    
21
	// Sets one value
22
	} else if ( value !== undefined ) {
23
		chainable = true;
24

    
25
		if ( !jQuery.isFunction( value ) ) {
26
			raw = true;
27
		}
28

    
29
		if ( bulk ) {
30

    
31
			// Bulk operations run against the entire set
32
			if ( raw ) {
33
				fn.call( elems, value );
34
				fn = null;
35

    
36
			// ...except when executing function values
37
			} else {
38
				bulk = fn;
39
				fn = function( elem, key, value ) {
40
					return bulk.call( jQuery( elem ), value );
41
				};
42
			}
43
		}
44

    
45
		if ( fn ) {
46
			for ( ; i < len; i++ ) {
47
				fn(
48
					elems[ i ], key, raw ?
49
					value :
50
					value.call( elems[ i ], i, fn( elems[ i ], key ) )
51
				);
52
			}
53
		}
54
	}
55

    
56
	if ( chainable ) {
57
		return elems;
58
	}
59

    
60
	// Gets
61
	if ( bulk ) {
62
		return fn.call( elems );
63
	}
64

    
65
	return len ? fn( elems[ 0 ], key ) : emptyGet;
66
};
67

    
68
return access;
69

    
70
} );
(2-2/10)