js.cookie.js
148 lines
| 1 | /*! js-cookie v3.0.5 | MIT */ |
| 2 | ; |
| 3 | (function (global, factory) { |
| 4 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : |
| 5 | typeof define === 'function' && define.amd ? define(factory) : |
| 6 | (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { |
| 7 | var current = global.Cookies; |
| 8 | var exports = global.Cookies = factory(); |
| 9 | exports.noConflict = function () { global.Cookies = current; return exports; }; |
| 10 | })()); |
| 11 | })(this, (function () { 'use strict'; |
| 12 | |
| 13 | /* eslint-disable no-var */ |
| 14 | function assign (target) { |
| 15 | for (var i = 1; i < arguments.length; i++) { |
| 16 | var source = arguments[i]; |
| 17 | for (var key in source) { |
| 18 | target[key] = source[key]; |
| 19 | } |
| 20 | } |
| 21 | return target |
| 22 | } |
| 23 | /* eslint-enable no-var */ |
| 24 | |
| 25 | /* eslint-disable no-var */ |
| 26 | var defaultConverter = { |
| 27 | read: function (value) { |
| 28 | if (value[0] === '"') { |
| 29 | value = value.slice(1, -1); |
| 30 | } |
| 31 | return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent) |
| 32 | }, |
| 33 | write: function (value) { |
| 34 | return encodeURIComponent(value).replace( |
| 35 | /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, |
| 36 | decodeURIComponent |
| 37 | ) |
| 38 | } |
| 39 | }; |
| 40 | /* eslint-enable no-var */ |
| 41 | |
| 42 | /* eslint-disable no-var */ |
| 43 | |
| 44 | function init (converter, defaultAttributes) { |
| 45 | function set (name, value, attributes) { |
| 46 | if (typeof document === 'undefined') { |
| 47 | return |
| 48 | } |
| 49 | |
| 50 | attributes = assign({}, defaultAttributes, attributes); |
| 51 | |
| 52 | if (typeof attributes.expires === 'number') { |
| 53 | attributes.expires = new Date(Date.now() + attributes.expires * 864e5); |
| 54 | } |
| 55 | if (attributes.expires) { |
| 56 | attributes.expires = attributes.expires.toUTCString(); |
| 57 | } |
| 58 | |
| 59 | name = encodeURIComponent(name) |
| 60 | .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent) |
| 61 | .replace(/[()]/g, escape); |
| 62 | |
| 63 | var stringifiedAttributes = ''; |
| 64 | for (var attributeName in attributes) { |
| 65 | if (!attributes[attributeName]) { |
| 66 | continue |
| 67 | } |
| 68 | |
| 69 | stringifiedAttributes += '; ' + attributeName; |
| 70 | |
| 71 | if (attributes[attributeName] === true) { |
| 72 | continue |
| 73 | } |
| 74 | |
| 75 | // Considers RFC 6265 section 5.2: |
| 76 | // ... |
| 77 | // 3. If the remaining unparsed-attributes contains a %x3B (";") |
| 78 | // character: |
| 79 | // Consume the characters of the unparsed-attributes up to, |
| 80 | // not including, the first %x3B (";") character. |
| 81 | // ... |
| 82 | stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; |
| 83 | } |
| 84 | |
| 85 | return (document.cookie = |
| 86 | name + '=' + converter.write(value, name) + stringifiedAttributes) |
| 87 | } |
| 88 | |
| 89 | function get (name) { |
| 90 | if (typeof document === 'undefined' || (arguments.length && !name)) { |
| 91 | return |
| 92 | } |
| 93 | |
| 94 | // To prevent the for loop in the first place assign an empty array |
| 95 | // in case there are no cookies at all. |
| 96 | var cookies = document.cookie ? document.cookie.split('; ') : []; |
| 97 | var jar = {}; |
| 98 | for (var i = 0; i < cookies.length; i++) { |
| 99 | var parts = cookies[i].split('='); |
| 100 | var value = parts.slice(1).join('='); |
| 101 | |
| 102 | try { |
| 103 | var found = decodeURIComponent(parts[0]); |
| 104 | jar[found] = converter.read(value, found); |
| 105 | |
| 106 | if (name === found) { |
| 107 | break |
| 108 | } |
| 109 | } catch (e) {} |
| 110 | } |
| 111 | |
| 112 | return name ? jar[name] : jar |
| 113 | } |
| 114 | |
| 115 | return Object.create( |
| 116 | { |
| 117 | set, |
| 118 | get, |
| 119 | remove: function (name, attributes) { |
| 120 | set( |
| 121 | name, |
| 122 | '', |
| 123 | assign({}, attributes, { |
| 124 | expires: -1 |
| 125 | }) |
| 126 | ); |
| 127 | }, |
| 128 | withAttributes: function (attributes) { |
| 129 | return init(this.converter, assign({}, this.attributes, attributes)) |
| 130 | }, |
| 131 | withConverter: function (converter) { |
| 132 | return init(assign({}, this.converter, converter), this.attributes) |
| 133 | } |
| 134 | }, |
| 135 | { |
| 136 | attributes: { value: Object.freeze(defaultAttributes) }, |
| 137 | converter: { value: Object.freeze(converter) } |
| 138 | } |
| 139 | ) |
| 140 | } |
| 141 | |
| 142 | var api = init(defaultConverter, { path: '/' }); |
| 143 | /* eslint-enable no-var */ |
| 144 | |
| 145 | return api; |
| 146 | |
| 147 | })); |
| 148 |