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