implement history for AJAX
This commit is contained in:
99
Netdisco/public/javascripts/jquery-deserialize.js
vendored
Normal file
99
Netdisco/public/javascripts/jquery-deserialize.js
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* @author Kyle Florence <kyle[dot]florence[at]gmail[dot]com>
|
||||
* @website https://github.com/kflorence/jquery-deserialize/
|
||||
* @version 1.1.0
|
||||
*
|
||||
* Dual licensed under the MIT and GPLv2 licenses.
|
||||
*/
|
||||
|
||||
(function( jQuery ) {
|
||||
|
||||
var push = Array.prototype.push,
|
||||
rcheck = /^(radio|checkbox)$/i,
|
||||
rselect = /^(option|select-one|select-multiple)$/i,
|
||||
rvalue = /^(hidden|text|search|tel|url|email|password|datetime|date|month|week|time|datetime-local|number|range|color|submit|image|reset|button|textarea)$/i;
|
||||
|
||||
jQuery.fn.extend({
|
||||
deserialize: function( data, callback ) {
|
||||
if ( !this.length || !data ) {
|
||||
return this;
|
||||
}
|
||||
|
||||
var i, length,
|
||||
elements = this[ 0 ].elements || this.find( ":input" ).get(),
|
||||
normalized = [];
|
||||
|
||||
if ( !elements ) {
|
||||
return this;
|
||||
}
|
||||
|
||||
if ( jQuery.isArray( data ) ) {
|
||||
normalized = data;
|
||||
} else if ( jQuery.isPlainObject( data ) ) {
|
||||
var key, value;
|
||||
|
||||
for ( key in data ) {
|
||||
jQuery.isArray( value = data[ key ] ) ?
|
||||
push.apply( normalized, jQuery.map( value, function( v ) {
|
||||
return { name: key, value: v };
|
||||
})) : push.call( normalized, { name: key, value: value } );
|
||||
}
|
||||
} else if ( typeof data === "string" ) {
|
||||
var parts;
|
||||
|
||||
data = decodeURIComponent( data ).split( "&" );
|
||||
|
||||
for ( i = 0, length = data.length; i < length; i++ ) {
|
||||
parts = data[ i ].split( "=" );
|
||||
push.call( normalized, { name: parts[ 0 ], value: parts[ 1 ] } );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !( length = normalized.length ) ) {
|
||||
return this;
|
||||
}
|
||||
|
||||
var current, element, item, j, len, property, type;
|
||||
|
||||
for ( i = 0; i < length; i++ ) {
|
||||
current = normalized[ i ];
|
||||
|
||||
if ( !( element = elements[ current.name ] ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
type = ( len = element.length ) ? element[ 0 ] : element;
|
||||
type = type.type || type.nodeName;
|
||||
property = null;
|
||||
|
||||
if ( rvalue.test( type ) ) {
|
||||
property = "value";
|
||||
} else if ( rcheck.test( type ) ) {
|
||||
property = "checked";
|
||||
} else if ( rselect.test( type ) ) {
|
||||
property = "selected";
|
||||
}
|
||||
|
||||
// Handle element group
|
||||
if ( len ) {
|
||||
for ( j = 0; j < len; j++ ) {
|
||||
item = element [ j ];
|
||||
|
||||
if ( item.value == current.value ) {
|
||||
item[ property ] = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
element[ property ] = current.value;
|
||||
}
|
||||
}
|
||||
|
||||
if ( jQuery.isFunction( callback ) ) {
|
||||
callback.call( this );
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
})( jQuery );
|
||||
Reference in New Issue
Block a user