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