scratch – Diff between revs 58 and 125

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