Merge "Add qtip job to pod zte-virtual6"
[releng.git] / utils / test / testapi / 3rd_party / static / testapi-ui / assets / lib / jquery / src / core / access.js
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 } );