go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/milo/frontend/static/common/third_party/js/js.cookie.js (about)

     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  }));