PageRenderTime 18ms CodeModel.GetById 2ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 1ms

/BlogEngine/BlogEngine.NET/Scripts/jquery.cookie.js

#
JavaScript | 117 lines | 75 code | 22 blank | 20 comment | 13 complexity | 1e3faa7fc49484964ecae46ca9494f35 MD5 | raw file
  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}));