|
1 /*! |
|
2 * JavaScript Cookie v2.2.0 |
|
3 * https://github.com/js-cookie/js-cookie |
|
4 * |
|
5 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack |
|
6 * Released under the MIT license |
|
7 */ |
|
8 ;(function (factory) { |
|
9 var registeredInModuleLoader = false; |
|
10 if (typeof define === 'function' && define.amd) { |
|
11 define(factory); |
|
12 registeredInModuleLoader = true; |
|
13 } |
|
14 if (typeof exports === 'object') { |
|
15 module.exports = factory(); |
|
16 registeredInModuleLoader = true; |
|
17 } |
|
18 if (!registeredInModuleLoader) { |
|
19 var OldCookies = window.Cookies; |
|
20 var api = window.Cookies = factory(); |
|
21 api.noConflict = function () { |
|
22 window.Cookies = OldCookies; |
|
23 return api; |
|
24 }; |
|
25 } |
|
26 }(function () { |
|
27 function extend () { |
|
28 var i = 0; |
|
29 var result = {}; |
|
30 for (; i < arguments.length; i++) { |
|
31 var attributes = arguments[ i ]; |
|
32 for (var key in attributes) { |
|
33 result[key] = attributes[key]; |
|
34 } |
|
35 } |
|
36 return result; |
|
37 } |
|
38 |
|
39 function init (converter) { |
|
40 function api (key, value, attributes) { |
|
41 var result; |
|
42 if (typeof document === 'undefined') { |
|
43 return; |
|
44 } |
|
45 |
|
46 // Write |
|
47 |
|
48 if (arguments.length > 1) { |
|
49 attributes = extend({ |
|
50 path: '/' |
|
51 }, api.defaults, attributes); |
|
52 |
|
53 if (typeof attributes.expires === 'number') { |
|
54 var expires = new Date(); |
|
55 expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); |
|
56 attributes.expires = expires; |
|
57 } |
|
58 |
|
59 // We're using "expires" because "max-age" is not supported by IE |
|
60 attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; |
|
61 |
|
62 try { |
|
63 result = JSON.stringify(value); |
|
64 if (/^[\{\[]/.test(result)) { |
|
65 value = result; |
|
66 } |
|
67 } catch (e) {} |
|
68 |
|
69 if (!converter.write) { |
|
70 value = encodeURIComponent(String(value)) |
|
71 .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); |
|
72 } else { |
|
73 value = converter.write(value, key); |
|
74 } |
|
75 |
|
76 key = encodeURIComponent(String(key)); |
|
77 key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); |
|
78 key = key.replace(/[\(\)]/g, escape); |
|
79 |
|
80 var stringifiedAttributes = ''; |
|
81 |
|
82 for (var attributeName in attributes) { |
|
83 if (!attributes[attributeName]) { |
|
84 continue; |
|
85 } |
|
86 stringifiedAttributes += '; ' + attributeName; |
|
87 if (attributes[attributeName] === true) { |
|
88 continue; |
|
89 } |
|
90 stringifiedAttributes += '=' + attributes[attributeName]; |
|
91 } |
|
92 return (document.cookie = key + '=' + value + stringifiedAttributes); |
|
93 } |
|
94 |
|
95 // Read |
|
96 |
|
97 if (!key) { |
|
98 result = {}; |
|
99 } |
|
100 |
|
101 // To prevent the for loop in the first place assign an empty array |
|
102 // in case there are no cookies at all. Also prevents odd result when |
|
103 // calling "get()" |
|
104 var cookies = document.cookie ? document.cookie.split('; ') : []; |
|
105 var rdecode = /(%[0-9A-Z]{2})+/g; |
|
106 var i = 0; |
|
107 |
|
108 for (; i < cookies.length; i++) { |
|
109 var parts = cookies[i].split('='); |
|
110 var cookie = parts.slice(1).join('='); |
|
111 |
|
112 if (!this.json && cookie.charAt(0) === '"') { |
|
113 cookie = cookie.slice(1, -1); |
|
114 } |
|
115 |
|
116 try { |
|
117 var name = parts[0].replace(rdecode, decodeURIComponent); |
|
118 cookie = converter.read ? |
|
119 converter.read(cookie, name) : converter(cookie, name) || |
|
120 cookie.replace(rdecode, decodeURIComponent); |
|
121 |
|
122 if (this.json) { |
|
123 try { |
|
124 cookie = JSON.parse(cookie); |
|
125 } catch (e) {} |
|
126 } |
|
127 |
|
128 if (key === name) { |
|
129 result = cookie; |
|
130 break; |
|
131 } |
|
132 |
|
133 if (!key) { |
|
134 result[name] = cookie; |
|
135 } |
|
136 } catch (e) {} |
|
137 } |
|
138 |
|
139 return result; |
|
140 } |
|
141 |
|
142 api.set = api; |
|
143 api.get = function (key) { |
|
144 return api.call(api, key); |
|
145 }; |
|
146 api.getJSON = function () { |
|
147 return api.apply({ |
|
148 json: true |
|
149 }, [].slice.call(arguments)); |
|
150 }; |
|
151 api.defaults = {}; |
|
152 |
|
153 api.remove = function (key, attributes) { |
|
154 api(key, '', extend(attributes, { |
|
155 expires: -1 |
|
156 })); |
|
157 }; |
|
158 |
|
159 api.withConverter = init; |
|
160 |
|
161 return api; |
|
162 } |
|
163 |
|
164 return init(function () {}); |
|
165 })); |