scratch – Diff between revs 58 and 125

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 58 Rev 125
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 ) {
8   -  
9 "use strict"; -  
10   9  
11 var boolHook, 10 var nodeHook, boolHook,
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 ) {
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 );
22 } ); 21 });
23 } 22 }
24 } ); 23 });
25   24  
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;
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;
34 } 33 }
35   34  
36 // Fallback to prop when attributes are not supported 35 // Fallback to prop when attributes are not supported
37 if ( typeof elem.getAttribute === "undefined" ) { 36 if ( typeof elem.getAttribute === strundefined ) {
38 return jQuery.prop( elem, name, value ); 37 return jQuery.prop( elem, name, value );
39 } 38 }
40   39  
41 // Attribute hooks are determined by the lowercase version 40 // All attributes are lowercase
42 // Grab necessary hook if one is defined 41 // Grab necessary hook if one is defined
-   42 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
43 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 43 name = name.toLowerCase();
44 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 44 hooks = jQuery.attrHooks[ name ] ||
45 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 45 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
46 } 46 }
47   47  
48 if ( value !== undefined ) { 48 if ( value !== undefined ) {
-   49  
49 if ( value === null ) { 50 if ( value === null ) {
50 jQuery.removeAttr( elem, name ); 51 jQuery.removeAttr( elem, name );
51 return; -  
52 } -  
53   -  
54 if ( hooks && "set" in hooks && 52  
55 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 53 } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
56 return ret; -  
-   54 return ret;
57 } 55  
58   56 } else {
59 elem.setAttribute( name, value + "" ); 57 elem.setAttribute( name, value + "" );
60 return value; 58 return value;
61 } 59 }
-   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  
-   67 // Non-existent attributes return null, we normalize to undefined
62   68 return ret == null ?
-   69 undefined :
-   70 ret;
-   71 }
-   72 },
-   73  
-   74 removeAttr: function( elem, value ) {
-   75 var name, propName,
-   76 i = 0,
-   77 attrNames = value && value.match( rnotwhite );
-   78  
-   79 if ( attrNames && elem.nodeType === 1 ) {
63 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 80 while ( (name = attrNames[i++]) ) {
-   81 propName = jQuery.propFix[ name ] || name;
-   82  
-   83 // Boolean attributes get special treatment (#10870)
64 return ret; -  
65 } 84 if ( jQuery.expr.match.bool.test( name ) ) {
-   85 // Set corresponding property to false
-   86 elem[ propName ] = false;
66   87 }
67 ret = jQuery.find.attr( elem, name ); 88  
68   89 elem.removeAttribute( name );
69 // Non-existent attributes return null, we normalize to undefined 90 }
70 return ret == null ? undefined : ret; 91 }
71 }, 92 },
72   93  
73 attrHooks: { 94 attrHooks: {
74 type: { 95 type: {
75 set: function( elem, value ) { 96 set: function( elem, value ) {
76 if ( !support.radioValue && value === "radio" && 97 if ( !support.radioValue && value === "radio" &&
77 jQuery.nodeName( elem, "input" ) ) { 98 jQuery.nodeName( elem, "input" ) ) {
78 var val = elem.value; 99 var val = elem.value;
79 elem.setAttribute( "type", value ); 100 elem.setAttribute( "type", value );
80 if ( val ) { 101 if ( val ) {
81 elem.value = val; 102 elem.value = val;
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 });
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 ) { 114 if ( value === false ) {
109   -  
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 }; 122 };
118   -  
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 ) {
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 ) { 126 attrHandle[ name ] = function( elem, name, isXML ) {
123 var ret, handle, 127 var ret, handle;
124 lowercaseName = name.toLowerCase(); -  
125   -  
126 if ( !isXML ) { 128 if ( !isXML ) {
127   -  
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;
137 }; 138 };
138 } ); 139 });
139   140  
140 } ); 141 });
141   142