xref: /dokuwiki/lib/scripts/jquery/jquery.cookie.js (revision 08b9e7cabaff74983b2acc2a6bdbf526b17db9dd)
1/*!
2 * jQuery Cookie Plugin v1.3
3 * https://github.com/carhartl/jquery-cookie
4 *
5 * Copyright 2011, Klaus Hartl
6 * Dual licensed under the MIT or GPL Version 2 licenses.
7 * http://www.opensource.org/licenses/mit-license.php
8 * http://www.opensource.org/licenses/GPL-2.0
9 */
10(function ($, document, undefined) {
11
12	var pluses = /\+/g;
13
14	function raw(s) {
15		return s;
16	}
17
18	function decoded(s) {
19		return decodeURIComponent(s.replace(pluses, ' '));
20	}
21
22	var config = $.cookie = function (key, value, options) {
23
24		// write
25		if (value !== undefined) {
26			options = $.extend({}, config.defaults, options);
27
28			if (value === null) {
29				options.expires = -1;
30			}
31
32			if (typeof options.expires === 'number') {
33				var days = options.expires, t = options.expires = new Date();
34				t.setDate(t.getDate() + days);
35			}
36
37			value = config.json ? JSON.stringify(value) : String(value);
38
39			return (document.cookie = [
40				encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
41				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
42				options.path    ? '; path=' + options.path : '',
43				options.domain  ? '; domain=' + options.domain : '',
44				options.secure  ? '; secure' : ''
45			].join(''));
46		}
47
48		// read
49		var decode = config.raw ? raw : decoded;
50		var cookies = document.cookie.split('; ');
51		for (var i = 0, l = cookies.length; i < l; i++) {
52			var parts = cookies[i].split('=');
53			if (decode(parts.shift()) === key) {
54				var cookie = decode(parts.join('='));
55				return config.json ? JSON.parse(cookie) : cookie;
56			}
57		}
58
59		return null;
60	};
61
62	config.defaults = {};
63
64	$.removeCookie = function (key, options) {
65		if ($.cookie(key) !== null) {
66			$.cookie(key, null, options);
67			return true;
68		}
69		return false;
70	};
71
72})(jQuery, document);
73