jquery.cookie.js
3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
( function( factory ) {
if ( typeof define === 'function' && define.amd ) {
// AMD
define( [ 'jquery' ], factory );
} else if ( typeof exports === 'object' ) {
// CommonJS
factory( require( 'jquery' ) );
} else {
// Browser globals
factory( jQuery );
}
}( function( $ ) {
var pluses = /\+/g;
function encode( s ) {
return config.raw ? s : encodeURIComponent( s );
}
function decode( s ) {
return config.raw ? s : decodeURIComponent( s );
}
function stringifyCookieValue( value ) {
return encode( config.json ? JSON.stringify( value ) : String( value ) );
}
function parseCookieValue( s ) {
if ( s.indexOf( '"' ) === 0 ) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice( 1, -1 ).replace( /\\"/g, '"' ).replace( /\\\\/g, '\\' );
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent( s.replace( pluses, ' ' ) );
return config.json ? JSON.parse( s ) : s;
} catch ( e ) {}
}
function read( s, converter ) {
var value = config.raw ? s : parseCookieValue( s );
return $.isFunction( converter ) ? converter( value ) : value;
}
var config = $.cookie = function( key, value, options ) {
// Write
if ( value !== undefined && ! $.isFunction( value ) ) {
options = $.extend( {}, config.defaults, options );
if ( typeof options.expires === 'number' ) {
var days = options.expires,
t = options.expires = new Date();
t.setTime( +t + days * 864e+5 );
}
return ( document.cookie = [
encode( key ), '=', stringifyCookieValue( value ),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : '',
].join( '' ) );
}
// Read
var result = key ? undefined : {};
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
var cookies = document.cookie ? document.cookie.split( '; ' ) : [];
for ( var i = 0, l = cookies.length; i < l; i++ ) {
var parts = cookies[i].split( '=' );
var name = decode( parts.shift() );
var cookie = parts.join( '=' );
if ( key && key === name ) {
// If second argument (value) is a function it's a converter...
result = read( cookie, value );
break;
}
// Prevent storing a cookie that we couldn't decode.
if ( ! key && ( cookie = read( cookie ) ) !== undefined ) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function( key, options ) {
if ( $.cookie( key ) === undefined ) {
return false;
}
// Must not alter options, thus extending a fresh object...
$.cookie( key, '', $.extend( {}, options, { expires: -1 } ) );
return ! $.cookie( key );
};
} ) );