2010-09-08 18:00:29 +02:00
|
|
|
(function( jQuery ) {
|
|
|
|
|
2010-12-01 21:31:22 +01:00
|
|
|
var rclass = /[\n\t\r]/g,
|
2010-09-22 15:46:21 +02:00
|
|
|
rspaces = /\s+/,
|
2009-12-18 17:27:56 +01:00
|
|
|
rreturn = /\r/g,
|
2010-09-22 15:16:28 +02:00
|
|
|
rtype = /^(?:button|input)$/i,
|
|
|
|
rfocusable = /^(?:button|input|object|select|textarea)$/i,
|
|
|
|
rclickable = /^a(?:rea)?$/i,
|
|
|
|
rradiocheck = /^(?:radio|checkbox)$/i;
|
2009-12-14 22:24:28 +01:00
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
jQuery.fn.extend({
|
2009-03-23 00:25:03 +01:00
|
|
|
attr: function( name, value ) {
|
2010-03-23 17:12:16 +01:00
|
|
|
return jQuery.access( this, name, value, true, jQuery.attr );
|
2009-03-18 22:15:38 +01:00
|
|
|
},
|
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
removeAttr: function( name ) {
|
|
|
|
return this.each(function() {
|
2010-01-06 21:08:07 +01:00
|
|
|
if ( this.nodeType === 1 ) {
|
2011-03-12 03:28:42 +01:00
|
|
|
jQuery.removeAttr( this, name );
|
2010-01-06 21:08:07 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2011-03-07 04:47:40 +01:00
|
|
|
|
|
|
|
prop: function( name, value ) {
|
|
|
|
return jQuery.access( this, name, value, true, jQuery.prop );
|
|
|
|
},
|
|
|
|
|
|
|
|
removeProp: function( name ) {
|
|
|
|
return this.each(function() {
|
|
|
|
// try/catch handles cases where IE balks (such as removing a property on window)
|
|
|
|
try {
|
|
|
|
this[ name ] = undefined;
|
|
|
|
delete this[ name ];
|
|
|
|
} catch( e ) {}
|
|
|
|
});
|
|
|
|
},
|
2010-01-06 21:08:07 +01:00
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
addClass: function( value ) {
|
2011-03-08 18:07:05 +01:00
|
|
|
if ( jQuery.isFunction( value ) ) {
|
2010-01-06 21:08:07 +01:00
|
|
|
return this.each(function(i) {
|
|
|
|
var self = jQuery(this);
|
2011-03-08 18:07:05 +01:00
|
|
|
self.addClass( value.call(this, i, self.attr("class") || "") );
|
2009-12-10 06:15:49 +01:00
|
|
|
});
|
|
|
|
}
|
2009-12-10 05:57:19 +01:00
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
if ( value && typeof value === "string" ) {
|
2010-09-22 15:46:21 +02:00
|
|
|
var classNames = (value || "").split( rspaces );
|
2009-09-08 03:07:50 +02:00
|
|
|
|
|
|
|
for ( var i = 0, l = this.length; i < l; i++ ) {
|
|
|
|
var elem = this[i];
|
|
|
|
|
|
|
|
if ( elem.nodeType === 1 ) {
|
|
|
|
if ( !elem.className ) {
|
|
|
|
elem.className = value;
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
} else {
|
2010-11-09 17:09:07 +01:00
|
|
|
var className = " " + elem.className + " ",
|
|
|
|
setClass = elem.className;
|
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
|
|
|
|
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
|
2010-02-13 20:30:27 +01:00
|
|
|
setClass += " " + classNames[c];
|
2009-09-08 03:07:50 +02:00
|
|
|
}
|
|
|
|
}
|
2010-02-13 20:30:27 +01:00
|
|
|
elem.className = jQuery.trim( setClass );
|
2009-09-08 03:07:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
removeClass: function( value ) {
|
2009-12-18 17:27:56 +01:00
|
|
|
if ( jQuery.isFunction(value) ) {
|
2010-01-06 21:08:07 +01:00
|
|
|
return this.each(function(i) {
|
|
|
|
var self = jQuery(this);
|
|
|
|
self.removeClass( value.call(this, i, self.attr("class")) );
|
2009-12-10 06:15:49 +01:00
|
|
|
});
|
|
|
|
}
|
2009-12-10 05:57:19 +01:00
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
if ( (value && typeof value === "string") || value === undefined ) {
|
2010-09-22 15:46:21 +02:00
|
|
|
var classNames = (value || "").split( rspaces );
|
2009-09-08 03:07:50 +02:00
|
|
|
|
|
|
|
for ( var i = 0, l = this.length; i < l; i++ ) {
|
|
|
|
var elem = this[i];
|
|
|
|
|
|
|
|
if ( elem.nodeType === 1 && elem.className ) {
|
|
|
|
if ( value ) {
|
2009-12-14 22:24:28 +01:00
|
|
|
var className = (" " + elem.className + " ").replace(rclass, " ");
|
2009-09-08 03:07:50 +02:00
|
|
|
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
|
|
|
|
className = className.replace(" " + classNames[c] + " ", " ");
|
|
|
|
}
|
2010-02-02 03:33:58 +01:00
|
|
|
elem.className = jQuery.trim( className );
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-09-08 03:07:50 +02:00
|
|
|
} else {
|
|
|
|
elem.className = "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
2010-01-06 21:23:30 +01:00
|
|
|
toggleClass: function( value, stateVal ) {
|
2010-11-09 17:09:07 +01:00
|
|
|
var type = typeof value,
|
|
|
|
isBool = typeof stateVal === "boolean";
|
2010-01-06 21:08:07 +01:00
|
|
|
|
2010-01-06 21:23:30 +01:00
|
|
|
if ( jQuery.isFunction( value ) ) {
|
2010-01-06 21:08:07 +01:00
|
|
|
return this.each(function(i) {
|
|
|
|
var self = jQuery(this);
|
2010-01-07 17:04:21 +01:00
|
|
|
self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
|
2010-01-06 21:08:07 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2010-01-06 21:23:30 +01:00
|
|
|
return this.each(function() {
|
2010-01-06 21:08:07 +01:00
|
|
|
if ( type === "string" ) {
|
|
|
|
// toggle individual class names
|
2010-11-09 17:09:07 +01:00
|
|
|
var className,
|
|
|
|
i = 0,
|
|
|
|
self = jQuery( this ),
|
2010-01-06 21:23:30 +01:00
|
|
|
state = stateVal,
|
2010-09-22 15:46:21 +02:00
|
|
|
classNames = value.split( rspaces );
|
2010-01-06 21:08:07 +01:00
|
|
|
|
|
|
|
while ( (className = classNames[ i++ ]) ) {
|
|
|
|
// check each className given, space seperated list
|
2010-01-06 21:23:30 +01:00
|
|
|
state = isBool ? state : !self.hasClass( className );
|
|
|
|
self[ state ? "addClass" : "removeClass" ]( className );
|
2010-01-06 21:08:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
} else if ( type === "undefined" || type === "boolean" ) {
|
|
|
|
if ( this.className ) {
|
|
|
|
// store className if set
|
2011-01-09 22:52:33 +01:00
|
|
|
jQuery._data( this, "__className__", this.className );
|
2010-01-06 21:08:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// toggle whole className
|
2011-01-09 22:52:33 +01:00
|
|
|
this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
|
2010-01-06 21:08:07 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
hasClass: function( selector ) {
|
2009-09-08 03:07:50 +02:00
|
|
|
var className = " " + selector + " ";
|
|
|
|
for ( var i = 0, l = this.length; i < l; i++ ) {
|
2009-12-14 22:24:28 +01:00
|
|
|
if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
|
2009-09-08 03:07:50 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
2009-03-18 22:15:38 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
val: function( value ) {
|
2010-08-21 04:32:34 +02:00
|
|
|
if ( !arguments.length ) {
|
2009-03-18 22:15:38 +01:00
|
|
|
var elem = this[0];
|
|
|
|
|
|
|
|
if ( elem ) {
|
2009-12-18 17:27:56 +01:00
|
|
|
if ( jQuery.nodeName( elem, "option" ) ) {
|
2010-08-23 23:10:39 +02:00
|
|
|
// attributes.value is undefined in Blackberry 4.7 but
|
|
|
|
// uses .value. See #6932
|
|
|
|
var val = elem.attributes.value;
|
|
|
|
return !val || val.specified ? elem.value : elem.text;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
// We need to handle select boxes special
|
|
|
|
if ( jQuery.nodeName( elem, "select" ) ) {
|
|
|
|
var index = elem.selectedIndex,
|
|
|
|
values = [],
|
|
|
|
options = elem.options,
|
2009-12-18 17:27:56 +01:00
|
|
|
one = elem.type === "select-one";
|
2009-03-18 22:15:38 +01:00
|
|
|
|
|
|
|
// Nothing was selected
|
2009-11-27 20:28:42 +01:00
|
|
|
if ( index < 0 ) {
|
2009-03-18 22:15:38 +01:00
|
|
|
return null;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
// Loop through all the selected options
|
|
|
|
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
|
|
|
|
var option = options[ i ];
|
|
|
|
|
2010-09-24 23:26:22 +02:00
|
|
|
// Don't return options that are disabled or in a disabled optgroup
|
2010-12-30 07:34:48 +01:00
|
|
|
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
|
2010-09-24 23:26:22 +02:00
|
|
|
(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
|
2010-09-27 16:19:55 +02:00
|
|
|
|
2010-09-24 23:26:22 +02:00
|
|
|
// Get the specific value for the option
|
2009-03-18 22:15:38 +01:00
|
|
|
value = jQuery(option).val();
|
|
|
|
|
|
|
|
// We don't need an array for one selects
|
2009-11-27 20:28:42 +01:00
|
|
|
if ( one ) {
|
2009-03-18 22:15:38 +01:00
|
|
|
return value;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
// Multi-Selects return an array
|
|
|
|
values.push( value );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-10 23:50:02 +01:00
|
|
|
// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
|
|
|
|
if ( one && !values.length && options.length ) {
|
|
|
|
return jQuery( options[ index ] ).val();
|
|
|
|
}
|
|
|
|
|
2009-03-23 02:55:17 +01:00
|
|
|
return values;
|
2009-03-18 22:15:38 +01:00
|
|
|
}
|
|
|
|
|
2009-12-22 08:00:46 +01:00
|
|
|
// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
|
|
|
|
if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
|
|
|
|
return elem.getAttribute("value") === null ? "on" : elem.value;
|
|
|
|
}
|
|
|
|
|
2009-03-18 22:15:38 +01:00
|
|
|
// Everything else, we just grab the value
|
2009-12-18 17:27:56 +01:00
|
|
|
return (elem.value || "").replace(rreturn, "");
|
2009-03-18 22:15:38 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
|
2010-01-07 15:53:16 +01:00
|
|
|
var isFunction = jQuery.isFunction(value);
|
2009-03-18 22:15:38 +01:00
|
|
|
|
2010-01-06 21:08:07 +01:00
|
|
|
return this.each(function(i) {
|
2010-01-07 15:53:16 +01:00
|
|
|
var self = jQuery(this), val = value;
|
2010-01-06 21:08:07 +01:00
|
|
|
|
2010-01-07 15:53:16 +01:00
|
|
|
if ( this.nodeType !== 1 ) {
|
|
|
|
return;
|
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2010-01-07 15:53:16 +01:00
|
|
|
if ( isFunction ) {
|
|
|
|
val = value.call(this, i, self.val());
|
2009-07-12 22:19:43 +02:00
|
|
|
}
|
2009-12-10 05:57:19 +01:00
|
|
|
|
2010-08-21 04:32:34 +02:00
|
|
|
// Treat null/undefined as ""; convert numbers to string
|
|
|
|
if ( val == null ) {
|
|
|
|
val = "";
|
|
|
|
} else if ( typeof val === "number" ) {
|
2010-01-07 15:53:16 +01:00
|
|
|
val += "";
|
2010-10-09 05:48:06 +02:00
|
|
|
} else if ( jQuery.isArray(val) ) {
|
|
|
|
val = jQuery.map(val, function (value) {
|
|
|
|
return value == null ? "" : value + "";
|
|
|
|
});
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-12-22 08:00:46 +01:00
|
|
|
if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
|
2010-01-06 21:08:07 +01:00
|
|
|
this.checked = jQuery.inArray( self.val(), val ) >= 0;
|
2009-12-18 17:27:56 +01:00
|
|
|
|
|
|
|
} else if ( jQuery.nodeName( this, "select" ) ) {
|
2009-07-12 22:19:43 +02:00
|
|
|
var values = jQuery.makeArray(val);
|
2009-03-18 22:15:38 +01:00
|
|
|
|
2009-12-22 01:58:13 +01:00
|
|
|
jQuery( "option", this ).each(function() {
|
2010-01-07 15:53:16 +01:00
|
|
|
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
|
2009-03-18 22:15:38 +01:00
|
|
|
});
|
|
|
|
|
2009-11-27 20:28:42 +01:00
|
|
|
if ( !values.length ) {
|
2009-03-18 22:15:38 +01:00
|
|
|
this.selectedIndex = -1;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2009-11-27 20:28:42 +01:00
|
|
|
} else {
|
2009-07-12 22:19:43 +02:00
|
|
|
this.value = val;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-03-18 22:15:38 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
jQuery.extend({
|
2009-12-10 06:28:33 +01:00
|
|
|
attrFn: {
|
|
|
|
val: true,
|
|
|
|
css: true,
|
|
|
|
html: true,
|
|
|
|
text: true,
|
|
|
|
data: true,
|
|
|
|
width: true,
|
|
|
|
height: true,
|
2009-12-17 18:23:04 +01:00
|
|
|
offset: true
|
2009-12-10 06:28:33 +01:00
|
|
|
},
|
2011-03-07 04:47:40 +01:00
|
|
|
|
2011-03-11 20:57:37 +01:00
|
|
|
attrFix: {},
|
|
|
|
|
2009-12-18 18:41:53 +01:00
|
|
|
attr: function( elem, name, value, pass ) {
|
2011-03-18 03:59:05 +01:00
|
|
|
var nType = elem.nodeType;
|
2011-03-10 02:20:53 +01:00
|
|
|
|
2010-12-07 03:17:42 +01:00
|
|
|
// don't get/set attributes on text, comment and attribute nodes
|
2011-03-18 03:59:05 +01:00
|
|
|
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
|
2009-03-18 22:15:38 +01:00
|
|
|
return undefined;
|
2009-11-27 20:28:42 +01:00
|
|
|
}
|
2009-12-10 06:28:33 +01:00
|
|
|
|
2009-12-18 18:41:53 +01:00
|
|
|
if ( pass && name in jQuery.attrFn ) {
|
2009-09-15 19:23:26 +02:00
|
|
|
return jQuery(elem)[name](value);
|
|
|
|
}
|
2011-03-18 03:59:05 +01:00
|
|
|
|
|
|
|
var ret, hooks,
|
|
|
|
notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
|
|
|
|
|
2011-03-11 20:57:37 +01:00
|
|
|
// Normalize the name if needed
|
|
|
|
name = notxml && jQuery.attrFix[ name ] || name;
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
hooks = jQuery.attrHooks[ name ];
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
if ( value !== undefined ) {
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value )) !== undefined ) {
|
|
|
|
return ret;
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-08 18:07:05 +01:00
|
|
|
} else if ( value === null ) {
|
2011-03-12 03:28:42 +01:00
|
|
|
jQuery.removeAttr( elem, name );
|
2011-03-08 18:07:05 +01:00
|
|
|
return undefined;
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
} else {
|
|
|
|
elem.setAttribute( name, value );
|
|
|
|
return value;
|
2010-11-10 00:36:53 +01:00
|
|
|
}
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
} else {
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-13 20:44:51 +01:00
|
|
|
if ( hooks && "get" in hooks && notxml && ((ret = hooks.get( elem )) !== undefined || name === "tabIndex") ) {
|
2011-03-07 04:47:40 +01:00
|
|
|
return ret;
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2011-03-12 03:28:42 +01:00
|
|
|
} else {
|
2011-03-24 05:42:00 +01:00
|
|
|
ret = elem.getAttribute( name );
|
2009-12-18 17:27:56 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
// Non-existent attributes return null, we normalize to undefined
|
2011-03-24 05:42:00 +01:00
|
|
|
return ret === null || ret === "null" ?
|
2011-03-14 02:27:45 +01:00
|
|
|
undefined :
|
2011-03-24 05:42:00 +01:00
|
|
|
ret;
|
2009-03-18 22:15:38 +01:00
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2011-03-12 03:28:42 +01:00
|
|
|
removeAttr: function( elem, name ) {
|
2011-03-13 20:44:51 +01:00
|
|
|
name = jQuery.attrFix[ name ] || name;
|
2011-03-13 21:17:13 +01:00
|
|
|
|
2011-03-14 02:27:45 +01:00
|
|
|
if ( jQuery.support.getSetAttribute ) {
|
2011-03-17 00:00:20 +01:00
|
|
|
elem.removeAttribute( name );
|
2011-03-14 02:27:45 +01:00
|
|
|
} else {
|
2011-03-13 21:17:13 +01:00
|
|
|
// set property to null if getSetAttribute not supported (IE6-7)
|
|
|
|
// setting className to null makes the class "null"
|
2011-03-14 02:27:45 +01:00
|
|
|
if ( name === "className" ) {
|
2011-03-24 05:42:00 +01:00
|
|
|
elem[ name ] = "";
|
2011-03-14 02:27:45 +01:00
|
|
|
} else {
|
|
|
|
elem.setAttribute( name, null );
|
|
|
|
}
|
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
},
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
attrHooks: {
|
|
|
|
type: {
|
|
|
|
set: function( elem, value ) {
|
|
|
|
// We can't allow the type property to be changed (since it causes problems in IE)
|
|
|
|
if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
|
|
|
|
jQuery.error( "type property can't be changed" );
|
2010-11-10 00:36:53 +01:00
|
|
|
}
|
2009-03-23 00:25:03 +01:00
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2011-03-14 02:27:45 +01:00
|
|
|
propFix: {},
|
2011-03-07 04:47:40 +01:00
|
|
|
|
|
|
|
prop: function( elem, name, value ) {
|
2011-03-18 03:59:05 +01:00
|
|
|
var nType = elem.nodeType;
|
2011-03-10 02:20:53 +01:00
|
|
|
|
|
|
|
// don't get/set properties on text, comment and attribute nodes
|
2011-03-18 03:59:05 +01:00
|
|
|
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
|
2011-03-10 02:20:53 +01:00
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
|
2011-03-18 03:59:05 +01:00
|
|
|
var ret, hooks,
|
|
|
|
notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
|
2011-03-07 04:47:40 +01:00
|
|
|
|
|
|
|
// Try to normalize/fix the name
|
|
|
|
name = notxml && jQuery.propFix[ name ] || name;
|
|
|
|
|
|
|
|
hooks = jQuery.propHooks[ name ];
|
|
|
|
|
|
|
|
if ( value !== undefined ) {
|
|
|
|
if ( hooks && "set" in hooks && (ret = hooks.set( elem, value )) !== undefined ) {
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
return (elem[ name ] = value);
|
2010-11-10 00:36:53 +01:00
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
|
|
|
|
} else {
|
|
|
|
if ( hooks && "get" in hooks && (ret = hooks.get( elem )) !== undefined ) {
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
return elem[ name ];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
propHooks: {}
|
|
|
|
});
|
2010-08-24 16:28:47 +02:00
|
|
|
|
2011-03-12 03:28:42 +01:00
|
|
|
// IE6/7 do not support getting/setting some attributes with get/setAttribute
|
|
|
|
if ( !jQuery.support.getSetAttribute ) {
|
|
|
|
jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
|
|
|
|
"for": "htmlFor",
|
|
|
|
"class": "className",
|
|
|
|
readonly: "readOnly",
|
|
|
|
maxlength: "maxLength",
|
|
|
|
cellspacing: "cellSpacing",
|
|
|
|
rowspan: "rowSpan",
|
|
|
|
colspan: "colSpan",
|
|
|
|
tabindex: "tabIndex",
|
|
|
|
usemap: "useMap",
|
|
|
|
frameborder: "frameBorder"
|
|
|
|
});
|
|
|
|
|
2011-03-13 20:44:51 +01:00
|
|
|
// Action attribute in ie6/7 returns form objects
|
2011-03-13 21:29:33 +01:00
|
|
|
jQuery.attrHooks.action = {
|
2011-03-12 03:28:42 +01:00
|
|
|
get: function( elem ) {
|
2011-03-14 02:27:45 +01:00
|
|
|
return elem.nodeName === "FORM" ?
|
|
|
|
elem.getAttributeNode("action").nodeValue :
|
|
|
|
elem.getAttribute("action");
|
2011-03-12 03:28:42 +01:00
|
|
|
},
|
|
|
|
set: function( elem, value ) {
|
2011-03-14 02:27:45 +01:00
|
|
|
elem.nodeName === "FORM" ?
|
|
|
|
elem.getAttributeNode("action").nodeValue = value :
|
|
|
|
elem.setAttribute("action", value);
|
2011-03-12 03:28:42 +01:00
|
|
|
return value;
|
|
|
|
}
|
2011-03-13 21:29:33 +01:00
|
|
|
};
|
2011-03-12 03:28:42 +01:00
|
|
|
}
|
|
|
|
|
2011-03-08 18:07:05 +01:00
|
|
|
// Remove certain attrs if set to false
|
|
|
|
jQuery.each([ "selected", "checked", "readonly", "disabled" ], function( i, name ) {
|
2011-03-12 03:28:42 +01:00
|
|
|
name = jQuery.attrFix[ name ] || name;
|
2011-03-13 20:44:51 +01:00
|
|
|
|
2011-03-08 18:07:05 +01:00
|
|
|
jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
|
|
|
|
set: function( elem, value ) {
|
|
|
|
if ( !value ) { // '', undefined, false, null will remove attr
|
2011-03-12 03:28:42 +01:00
|
|
|
jQuery.removeAttr( elem, name );
|
2011-03-08 18:07:05 +01:00
|
|
|
return false;
|
|
|
|
}
|
2011-03-12 03:28:42 +01:00
|
|
|
|
2011-03-08 18:07:05 +01:00
|
|
|
elem.setAttribute( name, value );
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2011-03-12 03:28:42 +01:00
|
|
|
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
|
|
|
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
|
|
|
jQuery.attrHooks[ jQuery.attrFix.tabindex || "tabindex" ] = {
|
|
|
|
get: function( elem ) {
|
|
|
|
var attributeNode = elem.getAttributeNode("tabIndex");
|
|
|
|
|
|
|
|
return attributeNode && attributeNode.specified ?
|
|
|
|
parseInt( attributeNode.value, 10 ) :
|
|
|
|
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
|
|
|
|
0 :
|
|
|
|
undefined;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
// Some attributes require a special call on IE
|
|
|
|
if ( !jQuery.support.hrefNormalized ) {
|
|
|
|
jQuery.each([ "href", "src", "style" ], function( i, name ) {
|
|
|
|
jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
|
|
|
|
get: function( elem ) {
|
|
|
|
return elem.getAttribute( name, 2 );
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !jQuery.support.style ) {
|
|
|
|
jQuery.attrHooks.style = {
|
|
|
|
get: function( elem ) {
|
|
|
|
return elem.style.cssText;
|
|
|
|
},
|
|
|
|
|
|
|
|
set: function( elem, value ) {
|
|
|
|
return (elem.style.cssText = "" + value);
|
2009-03-18 22:15:38 +01:00
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Safari mis-reports the default selected property of an option
|
|
|
|
// Accessing the parent's selectedIndex property fixes it
|
|
|
|
if ( !jQuery.support.optSelected ) {
|
2011-03-11 20:51:57 +01:00
|
|
|
|
2011-03-10 02:20:53 +01:00
|
|
|
jQuery.propHooks.selected = {
|
2011-03-07 04:47:40 +01:00
|
|
|
get: function( elem ) {
|
|
|
|
var parent = elem.parentNode;
|
|
|
|
|
|
|
|
if ( parent ) {
|
|
|
|
parent.selectedIndex;
|
2011-03-10 02:20:53 +01:00
|
|
|
|
|
|
|
// TODO: We may need an attrHook for selected that simply defers to prop?
|
|
|
|
// The attr is undefined if the option is created with createElement and not on the DOM
|
|
|
|
|
2011-03-07 04:47:40 +01:00
|
|
|
// Make sure that it also works with optgroups, see #5701
|
|
|
|
if ( parent.parentNode ) {
|
|
|
|
parent.parentNode.selectedIndex;
|
|
|
|
}
|
|
|
|
}
|
2010-11-13 14:39:28 +01:00
|
|
|
}
|
2011-03-07 04:47:40 +01:00
|
|
|
};
|
|
|
|
}
|
2010-09-08 18:00:29 +02:00
|
|
|
|
2011-03-11 21:59:34 +01:00
|
|
|
})( jQuery );
|