Name: cockpit/lib/jquery.cookie.js
| 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: | })); |
