239 lines
3.8 KiB
JavaScript
239 lines
3.8 KiB
JavaScript
//= require jaaulde.cookies
|
|
/**
|
|
* jquery.cookies.js
|
|
*
|
|
* Copyright (c) 2005 - 2011, James Auldridge
|
|
* All rights reserved.
|
|
*
|
|
* Licensed under the BSD, MIT, and GPL (your choice!) Licenses:
|
|
* @link http://code.google.com/p/cookies/wiki/License
|
|
*
|
|
*/
|
|
( function( global )
|
|
{
|
|
"use strict";
|
|
|
|
/* localize 3rd party support */
|
|
var $ = global.jQuery,
|
|
/* localize first party support */
|
|
jaaulde = global.jaaulde,
|
|
cookies = jaaulde.utils.cookies,
|
|
/* declarations */
|
|
NameTokenAttrResolver;
|
|
|
|
/* alias cookies lib under jQ to meet general audience expectations */
|
|
$.cookies = cookies;
|
|
|
|
NameTokenAttrResolver = function()
|
|
{
|
|
var nameTokenAttrs = ['name', 'id'];
|
|
this.current = null;
|
|
this.nextAttrName = function()
|
|
{
|
|
this.current = nameTokenAttrs.shift();
|
|
return !! this.current;
|
|
};
|
|
};
|
|
|
|
$.each( {
|
|
/**
|
|
* $( 'selector' ).cookify - set the value of an input field, or the innerHTML of an element, to a cookie by the name or id of the field or element
|
|
* (field or element MUST have name or id attribute)
|
|
*
|
|
* @access public
|
|
* @param options OBJECT - list of cookie options to specify
|
|
* @return jQuery
|
|
*/
|
|
cookify: function( options )
|
|
{
|
|
this
|
|
.not( ':input' )
|
|
/*
|
|
Iterate non input elements
|
|
*/
|
|
.each( function()
|
|
{
|
|
var $this, NTAR, nameToken, value;
|
|
|
|
$this = $( this );
|
|
|
|
NTAR = new NameTokenAttrResolver();
|
|
|
|
while( NTAR.nextAttrName() )
|
|
{
|
|
nameToken = $this.attr( NTAR.current );
|
|
if( typeof nameToken === 'string' && nameToken !== '' )
|
|
{
|
|
value = $this.html();
|
|
|
|
cookies.set(
|
|
nameToken,
|
|
( typeof value === 'string' && value !== '' ) ? value : null,
|
|
options
|
|
);
|
|
|
|
break;
|
|
}
|
|
}
|
|
} )
|
|
.end()
|
|
.filter( ':input')
|
|
.filter( ':radio' )
|
|
/*
|
|
Iterate radio inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
|
|
} )
|
|
.end()
|
|
.filter( ':checkbox' )
|
|
/*
|
|
Iterate checkbox inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
|
|
} )
|
|
.end()
|
|
.not( ':radio, :checkbox' )
|
|
/*
|
|
Iterate all other inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
var $this, NTAR, nameToken, value;
|
|
|
|
$this = $( this );
|
|
|
|
NTAR = new NameTokenAttrResolver();
|
|
|
|
while( NTAR.nextAttrName() )
|
|
{
|
|
nameToken = $this.attr( NTAR.current );
|
|
if( typeof nameToken === 'string' && nameToken !== '' )
|
|
{
|
|
value = $this.val();
|
|
|
|
cookies.set(
|
|
nameToken,
|
|
( typeof value === 'string' && value !== '' ) ? value : null,
|
|
options
|
|
);
|
|
|
|
break;
|
|
}
|
|
}
|
|
} );
|
|
|
|
return this;
|
|
},
|
|
/**
|
|
* $( 'selector' ).cookieFill - set the value of an input field or the innerHTML of an element from a cookie by the name or id of the field or element
|
|
*
|
|
* @access public
|
|
* @return jQuery
|
|
*/
|
|
cookieFill: function()
|
|
{
|
|
this
|
|
.not( ':input' )
|
|
/*
|
|
Iterate non input elements
|
|
*/
|
|
.each( function()
|
|
{
|
|
var $this, NTAR, nameToken, value;
|
|
|
|
$this = $( this );
|
|
|
|
NTAR = new NameTokenAttrResolver();
|
|
|
|
while( NTAR.nextAttrName() )
|
|
{
|
|
nameToken = $this.attr( NTAR.current );
|
|
if( typeof nameToken === 'string' && nameToken !== '' )
|
|
{
|
|
value = cookies.get( nameToken );
|
|
if( value !== null )
|
|
{
|
|
$this.html( value );
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
} )
|
|
.end()
|
|
.filter( ':input')
|
|
.filter( ':radio' )
|
|
/*
|
|
Iterate radio inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
|
|
} )
|
|
.end()
|
|
.filter( ':checkbox' )
|
|
/*
|
|
Iterate checkbox inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
|
|
} )
|
|
.end()
|
|
.not( ':radio, :checkbox' )
|
|
/*
|
|
Iterate all other inputs
|
|
*/
|
|
.each( function()
|
|
{
|
|
var $this, NTAR, nameToken, value;
|
|
|
|
$this = $( this );
|
|
|
|
NTAR = new NameTokenAttrResolver();
|
|
|
|
while( NTAR.nextAttrName() )
|
|
{
|
|
nameToken = $this.attr( NTAR.current );
|
|
if( typeof nameToken === 'string' && nameToken !== '' )
|
|
{
|
|
value = cookies.get( nameToken );
|
|
if( value !== null )
|
|
{
|
|
$this.val( value );
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
} );
|
|
|
|
return this;
|
|
},
|
|
/**
|
|
* $( 'selector' ).cookieBind - call cookie fill on matching elements, and bind their change events to cookify()
|
|
*
|
|
* @access public
|
|
* @param options OBJECT - list of cookie options to specify
|
|
* @return jQuery
|
|
*/
|
|
cookieBind: function( options )
|
|
{
|
|
return this.each( function()
|
|
{
|
|
var $this = $( this );
|
|
$this.cookieFill().change( function()
|
|
{
|
|
$this.cookify( options );
|
|
} );
|
|
} );
|
|
}
|
|
}, function( i )
|
|
{
|
|
$.fn[i] = this;
|
|
} );
|
|
}( window ) ); |