|
/*jshint asi:true, browser:true */ |
|
|
|
define(function (require, exports) { |
|
|
|
var extend = function (obj) { |
|
each(slice.call(arguments, 1), function (source) { |
|
for (var prop in source) { |
|
obj[prop] = source[prop] |
|
} |
|
}) |
|
return obj |
|
} |
|
|
|
var cookie = function (key, value, options) { |
|
|
|
if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) { |
|
options = extend({}, options) |
|
|
|
if (value === null || value === undefined) { |
|
options.expires = -1 |
|
} |
|
|
|
if (typeof options.expires === 'number') { |
|
var days = options.expires |
|
var t = options.expires = new Date() |
|
t.setDate(t.getDate() + days) |
|
} |
|
|
|
value = String(value) |
|
|
|
return (document.cookie = [ |
|
encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(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('')) |
|
} |
|
|
|
// key and possibly options given, get cookie... |
|
options = value || {} |
|
var decode = options.raw ? function (s) { |
|
return s |
|
} : decodeURIComponent |
|
|
|
var pairs = document.cookie.split('; ') |
|
for (var i = 0, pair; i < pairs.length; i++) { |
|
pair = pairs[i].split('=') |
|
if (decode(pair[0]) === key) { |
|
// IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined |
|
return decode(pair[1] || '') |
|
} |
|
} |
|
|
|
return null |
|
|
|
} |
|
|
|
exports = cookies |
|
|
|
}) |