tuiHoneyPot

front and back end of my TUI honeypot
Log | Files | Refs | README

attr.js (3272B)


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