1/** 2 * jQuery JSON plugin 2.4.0 3 * 4 * @author Brantley Harris, 2009-2011 5 * @author Timo Tijhof, 2011-2012 6 * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is 7 * copyrighted 2005 by Bob Ippolito. 8 * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org 9 * website's http://www.json.org/json2.js, which proclaims: 10 * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that 11 * I uphold. 12 * @license MIT License <http://www.opensource.org/licenses/mit-license.php> 13 */ 14(function ($) { 15 'use strict'; 16 17 var escape = /["\\\x00-\x1f\x7f-\x9f]/g, 18 meta = { 19 '\b': '\\b', 20 '\t': '\\t', 21 '\n': '\\n', 22 '\f': '\\f', 23 '\r': '\\r', 24 '"' : '\\"', 25 '\\': '\\\\' 26 }, 27 hasOwn = Object.prototype.hasOwnProperty; 28 29 /** 30 * jQuery.toJSON 31 * Converts the given argument into a JSON representation. 32 * 33 * @param o {Mixed} The json-serializable *thing* to be converted 34 * 35 * If an object has a toJSON prototype, that will be used to get the representation. 36 * Non-integer/string keys are skipped in the object, as are keys that point to a 37 * function. 38 * 39 */ 40 $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { 41 if (o === null) { 42 return 'null'; 43 } 44 45 var pairs, k, name, val, 46 type = $.type(o); 47 48 if (type === 'undefined') { 49 return undefined; 50 } 51 52 // Also covers instantiated Number and Boolean objects, 53 // which are typeof 'object' but thanks to $.type, we 54 // catch them here. I don't know whether it is right 55 // or wrong that instantiated primitives are not 56 // exported to JSON as an {"object":..}. 57 // We choose this path because that's what the browsers did. 58 if (type === 'number' || type === 'boolean') { 59 return String(o); 60 } 61 if (type === 'string') { 62 return $.quoteString(o); 63 } 64 if (typeof o.toJSON === 'function') { 65 return $.toJSON(o.toJSON()); 66 } 67 if (type === 'date') { 68 var month = o.getUTCMonth() + 1, 69 day = o.getUTCDate(), 70 year = o.getUTCFullYear(), 71 hours = o.getUTCHours(), 72 minutes = o.getUTCMinutes(), 73 seconds = o.getUTCSeconds(), 74 milli = o.getUTCMilliseconds(); 75 76 if (month < 10) { 77 month = '0' + month; 78 } 79 if (day < 10) { 80 day = '0' + day; 81 } 82 if (hours < 10) { 83 hours = '0' + hours; 84 } 85 if (minutes < 10) { 86 minutes = '0' + minutes; 87 } 88 if (seconds < 10) { 89 seconds = '0' + seconds; 90 } 91 if (milli < 100) { 92 milli = '0' + milli; 93 } 94 if (milli < 10) { 95 milli = '0' + milli; 96 } 97 return '"' + year + '-' + month + '-' + day + 'T' + 98 hours + ':' + minutes + ':' + seconds + 99 '.' + milli + 'Z"'; 100 } 101 102 pairs = []; 103 104 if ($.isArray(o)) { 105 for (k = 0; k < o.length; k++) { 106 pairs.push($.toJSON(o[k]) || 'null'); 107 } 108 return '[' + pairs.join(',') + ']'; 109 } 110 111 // Any other object (plain object, RegExp, ..) 112 // Need to do typeof instead of $.type, because we also 113 // want to catch non-plain objects. 114 if (typeof o === 'object') { 115 for (k in o) { 116 // Only include own properties, 117 // Filter out inherited prototypes 118 if (hasOwn.call(o, k)) { 119 // Keys must be numerical or string. Skip others 120 type = typeof k; 121 if (type === 'number') { 122 name = '"' + k + '"'; 123 } else if (type === 'string') { 124 name = $.quoteString(k); 125 } else { 126 continue; 127 } 128 type = typeof o[k]; 129 130 // Invalid values like these return undefined 131 // from toJSON, however those object members 132 // shouldn't be included in the JSON string at all. 133 if (type !== 'function' && type !== 'undefined') { 134 val = $.toJSON(o[k]); 135 pairs.push(name + ':' + val); 136 } 137 } 138 } 139 return '{' + pairs.join(',') + '}'; 140 } 141 }; 142 143 /** 144 * jQuery.evalJSON 145 * Evaluates a given json string. 146 * 147 * @param str {String} 148 */ 149 $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { 150 /*jshint evil: true */ 151 return eval('(' + str + ')'); 152 }; 153 154 /** 155 * jQuery.secureEvalJSON 156 * Evals JSON in a way that is *more* secure. 157 * 158 * @param str {String} 159 */ 160 $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { 161 var filtered = 162 str 163 .replace(/\\["\\\/bfnrtu]/g, '@') 164 .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') 165 .replace(/(?:^|:|,)(?:\s*\[)+/g, ''); 166 167 if (/^[\],:{}\s]*$/.test(filtered)) { 168 /*jshint evil: true */ 169 return eval('(' + str + ')'); 170 }
171 throw new SyntaxError('Error parsing JSON, source is not valid.'); 172 }; 173 174 /** 175 * jQuery.quoteString 176 * Returns a string-repr of a string, escaping quotes intelligently. 177 * Mostly a support function for toJSON. 178 * Examples: 179 * >>> jQuery.quoteString('apple') 180 * "apple" 181 * 182 * >>> jQuery.quoteString('"Where are we going?", she asked.') 183 * "\"Where are we going?\", she asked." 184 */ 185 $.quoteString = function (str) { 186 if (str.match(escape)) { 187 return '"' + str.replace(escape, function (a) { 188 var c = meta[a]; 189 if (typeof c === 'string') { 190 return c; 191 } 192 c = a.charCodeAt(); 193 return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); 194 }) + '"'; 195 } 196 return '"' + str + '"'; 197 }; 198 199}(jQuery)); 200; 201/*! 202 * jQuery Cookie Plugin v1.4.0 203 * https://github.com/carhartl/jquery-cookie 204 * 205 * Copyright 2013 Klaus Hartl 206 * Released under the MIT license 207 */ 208(function (factory) { 209 if (typeof define === 'function' && define.amd) { 210 // AMD. Register as anonymous module. 211 define(['jquery'], factory); 212 } else { 213 // Browser globals. 214 factory(jQuery); 215 } 216}(function ($) { 217 218 var pluses = /\+/g; 219 220 function encode(s) { 221 return config.raw ? s : encodeURIComponent(s); 222 } 223 224 function decode(s) { 225 return config.raw ? s : decodeURIComponent(s); 226 } 227 228 function stringifyCookieValue(value) { 229 return encode(config.json ? JSON.stringify(value) : String(value)); 230 } 231 232 function parseCookieValue(s) { 233 if (s.indexOf('"') === 0) { 234 // This is a quoted cookie as according to RFC2068, unescape... 235 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 236 } 237 238 try { 239 // Replace server-side written pluses with spaces. 240 // If we can't decode the cookie, ignore it, it's unusable. 241 s = decodeURIComponent(s.replace(pluses, ' ')); 242 } catch(e) { 243 return; 244 } 245 246 try { 247 // If we can't parse the cookie, ignore it, it's unusable. 248 return config.json ? JSON.parse(s) : s; 249 } catch(e) {} 250 } 251 252 function read(s, converter) { 253 var value = config.raw ? s : parseCookieValue(s); 254 return $.isFunction(converter) ? converter(value) : value; 255 } 256 257 var config = $.cookie = function (key, value, options) { 258 259 // Write 260 if (value !== undefined && !$.isFunction(value)) { 261 options = $.extend({}, config.defaults, options); 262 263 if (typeof options.expires === 'number') { 264 var days = options.expires, t = options.expires = new Date(); 265 t.setDate(t.getDate() + days); 266 } 267 268 return (document.cookie = [ 269 encode(key), '=', stringifyCookieValue(value), 270 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 271 options.path ? '; path=' + options.path : '', 272 options.domain ? '; domain=' + options.domain : '', 273 options.secure ? '; secure' : '' 274 ].join('')); 275 } 276 277 // Read 278 279 var result = key ? undefined : {}; 280 281 // To prevent the for loop in the first place assign an empty array 282 // in case there are no cookies at all. Also prevents odd result when 283 // calling $.cookie(). 284 var cookies = document.cookie ? document.cookie.split('; ') : []; 285 286 for (var i = 0, l = cookies.length; i < l; i++) { 287 var parts = cookies[i].split('='); 288 var name = decode(parts.shift()); 289 var cookie = parts.join('='); 290 291 if (key && key === name) { 292 // If second argument (value) is a function it's a converter... 293 result = read(cookie, value); 294 break; 295 } 296 297 // Prevent storing a cookie that we couldn't decode. 298 if (!key && (cookie = read(cookie)) !== undefined) { 299 result[name] = cookie; 300 } 301 } 302 303 return result; 304 }; 305 306 config.defaults = {}; 307 308 $.removeCookie = function (key, options) { 309 if ($.cookie(key) !== undefined) { 310 // Must not alter options, thus extending a fresh object... 311 $.cookie(key, '', $.extend({}, options, { expires: -1 })); 312 return true; 313 } 314 return false; 315 }; 316 317})); 318;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.