scratch – Blame information for rev 125
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
125 | office | 1 | define([ |
58 | office | 2 | "../core", |
125 | office | 3 | "../var/rnotwhite", |
4 | "../var/strundefined", |
||
58 | office | 5 | "../core/access", |
6 | "./support", |
||
7 | "../selector" |
||
125 | office | 8 | ], function( jQuery, rnotwhite, strundefined, access, support ) { |
58 | office | 9 | |
125 | office | 10 | var nodeHook, boolHook, |
58 | office | 11 | attrHandle = jQuery.expr.attrHandle; |
12 | |||
125 | office | 13 | jQuery.fn.extend({ |
58 | office | 14 | attr: function( name, value ) { |
15 | return access( this, jQuery.attr, name, value, arguments.length > 1 ); |
||
16 | }, |
||
17 | |||
18 | removeAttr: function( name ) { |
||
125 | office | 19 | return this.each(function() { |
58 | office | 20 | jQuery.removeAttr( this, name ); |
125 | office | 21 | }); |
58 | office | 22 | } |
125 | office | 23 | }); |
58 | office | 24 | |
125 | office | 25 | jQuery.extend({ |
58 | office | 26 | attr: function( elem, name, value ) { |
125 | office | 27 | var hooks, ret, |
58 | office | 28 | nType = elem.nodeType; |
29 | |||
125 | office | 30 | // don't get/set attributes on text, comment and attribute nodes |
31 | if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { |
||
58 | office | 32 | return; |
33 | } |
||
34 | |||
35 | // Fallback to prop when attributes are not supported |
||
125 | office | 36 | if ( typeof elem.getAttribute === strundefined ) { |
58 | office | 37 | return jQuery.prop( elem, name, value ); |
38 | } |
||
39 | |||
125 | office | 40 | // All attributes are lowercase |
58 | office | 41 | // Grab necessary hook if one is defined |
42 | if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { |
||
125 | office | 43 | name = name.toLowerCase(); |
44 | hooks = jQuery.attrHooks[ name ] || |
||
45 | ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); |
||
58 | office | 46 | } |
47 | |||
48 | if ( value !== undefined ) { |
||
125 | office | 49 | |
58 | office | 50 | if ( value === null ) { |
51 | jQuery.removeAttr( elem, name ); |
||
52 | |||
125 | office | 53 | } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { |
58 | office | 54 | return ret; |
125 | office | 55 | |
56 | } else { |
||
57 | elem.setAttribute( name, value + "" ); |
||
58 | return value; |
||
58 | office | 59 | } |
60 | |||
125 | office | 61 | } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { |
62 | return ret; |
||
58 | office | 63 | |
125 | office | 64 | } else { |
65 | ret = jQuery.find.attr( elem, name ); |
||
66 | |||
67 | // Non-existent attributes return null, we normalize to undefined |
||
68 | return ret == null ? |
||
69 | undefined : |
||
70 | ret; |
||
58 | office | 71 | } |
125 | office | 72 | }, |
58 | office | 73 | |
125 | office | 74 | removeAttr: function( elem, value ) { |
75 | var name, propName, |
||
76 | i = 0, |
||
77 | attrNames = value && value.match( rnotwhite ); |
||
58 | office | 78 | |
125 | office | 79 | if ( attrNames && elem.nodeType === 1 ) { |
80 | while ( (name = attrNames[i++]) ) { |
||
81 | propName = jQuery.propFix[ name ] || name; |
||
82 | |||
83 | // Boolean attributes get special treatment (#10870) |
||
84 | if ( jQuery.expr.match.bool.test( name ) ) { |
||
85 | // Set corresponding property to false |
||
86 | elem[ propName ] = false; |
||
87 | } |
||
88 | |||
89 | elem.removeAttribute( name ); |
||
90 | } |
||
91 | } |
||
58 | office | 92 | }, |
93 | |||
94 | attrHooks: { |
||
95 | type: { |
||
96 | set: function( elem, value ) { |
||
97 | if ( !support.radioValue && value === "radio" && |
||
98 | jQuery.nodeName( elem, "input" ) ) { |
||
99 | var val = elem.value; |
||
100 | elem.setAttribute( "type", value ); |
||
101 | if ( val ) { |
||
102 | elem.value = val; |
||
103 | } |
||
104 | return value; |
||
105 | } |
||
106 | } |
||
107 | } |
||
108 | } |
||
125 | office | 109 | }); |
58 | office | 110 | |
111 | // Hooks for boolean attributes |
||
112 | boolHook = { |
||
113 | set: function( elem, value, name ) { |
||
114 | if ( value === false ) { |
||
115 | // Remove boolean attributes when set to false |
||
116 | jQuery.removeAttr( elem, name ); |
||
117 | } else { |
||
118 | elem.setAttribute( name, name ); |
||
119 | } |
||
120 | return name; |
||
121 | } |
||
122 | }; |
||
123 | jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { |
||
124 | var getter = attrHandle[ name ] || jQuery.find.attr; |
||
125 | |||
126 | attrHandle[ name ] = function( elem, name, isXML ) { |
||
125 | office | 127 | var ret, handle; |
58 | office | 128 | if ( !isXML ) { |
129 | // Avoid an infinite loop by temporarily removing this function from the getter |
||
125 | office | 130 | handle = attrHandle[ name ]; |
131 | attrHandle[ name ] = ret; |
||
58 | office | 132 | ret = getter( elem, name, isXML ) != null ? |
125 | office | 133 | name.toLowerCase() : |
58 | office | 134 | null; |
125 | office | 135 | attrHandle[ name ] = handle; |
58 | office | 136 | } |
137 | return ret; |
||
138 | }; |
||
125 | office | 139 | }); |
58 | office | 140 | |
125 | office | 141 | }); |