forked from jeresig/env-js
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added basic cookie framework, needs work. added global JSON.parse (re…
…quired for default cookie implementation). Finally found subtle, but big bug in default xhr implementation which can cause escape characters to be escaped twice.
- Loading branch information
thatcher
committed
Apr 27, 2010
1 parent
be24b19
commit bf44a07
Showing
10 changed files
with
514 additions
and
144 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,23 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<projectDescription> | ||
<name>env-js</name> | ||
<comment></comment> | ||
<projects> | ||
</projects> | ||
<buildSpec> | ||
<buildCommand> | ||
<name>org.rubypeople.rdt.core.rubybuilder</name> | ||
<arguments> | ||
</arguments> | ||
</buildCommand> | ||
</buildSpec> | ||
<natures> | ||
<nature>org.rubypeople.rdt.core.rubynature</nature> | ||
</natures> | ||
</projectDescription> | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<projectDescription> | ||
<name>env-js</name> | ||
<comment></comment> | ||
<projects> | ||
</projects> | ||
<buildSpec> | ||
<buildCommand> | ||
<name>org.python.pydev.PyDevBuilder</name> | ||
<arguments> | ||
</arguments> | ||
</buildCommand> | ||
<buildCommand> | ||
<name>org.rubypeople.rdt.core.rubybuilder</name> | ||
<arguments> | ||
</arguments> | ||
</buildCommand> | ||
</buildSpec> | ||
<natures> | ||
<nature>org.rubypeople.rdt.core.rubynature</nature> | ||
<nature>org.python.pydev.pythonNature</nature> | ||
</natures> | ||
</projectDescription> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,5 @@ | |
* @author envjs team | ||
*/ | ||
var Console, | ||
JSON, | ||
console; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
/* | ||
http://www.JSON.org/json2.js | ||
2008-07-15 | ||
Public Domain. | ||
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. | ||
See http://www.JSON.org/js.html | ||
This code should be minified before deployment. | ||
See http://javascript.crockford.com/jsmin.html | ||
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO | ||
NOT CONTROL. | ||
*/ | ||
JSON = function () { | ||
|
||
function f(n) { | ||
// Format integers to have at least two digits. | ||
return n < 10 ? '0' + n : n; | ||
} | ||
|
||
Date.prototype.toJSON = function (key) { | ||
|
||
return this.getUTCFullYear() + '-' + | ||
f(this.getUTCMonth() + 1) + '-' + | ||
f(this.getUTCDate()) + 'T' + | ||
f(this.getUTCHours()) + ':' + | ||
f(this.getUTCMinutes()) + ':' + | ||
f(this.getUTCSeconds()) + 'Z'; | ||
}; | ||
|
||
String.prototype.toJSON = function (key) { | ||
return String(this); | ||
}; | ||
Number.prototype.toJSON = | ||
Boolean.prototype.toJSON = function (key) { | ||
return this.valueOf(); | ||
}; | ||
|
||
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, | ||
escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, | ||
gap, | ||
indent, | ||
meta = { // table of character substitutions | ||
'\b': '\\b', | ||
'\t': '\\t', | ||
'\n': '\\n', | ||
'\f': '\\f', | ||
'\r': '\\r', | ||
'"' : '\\"', | ||
'\\': '\\\\' | ||
}, | ||
rep; | ||
|
||
|
||
function quote(string) { | ||
|
||
escapeable.lastIndex = 0; | ||
return escapeable.test(string) ? | ||
'"' + string.replace(escapeable, function (a) { | ||
var c = meta[a]; | ||
if (typeof c === 'string') { | ||
return c; | ||
} | ||
return '\\u' + ('0000' + | ||
(+(a.charCodeAt(0))).toString(16)).slice(-4); | ||
}) + '"' : | ||
'"' + string + '"'; | ||
} | ||
|
||
|
||
function str(key, holder) { | ||
|
||
var i, // The loop counter. | ||
k, // The member key. | ||
v, // The member value. | ||
length, | ||
mind = gap, | ||
partial, | ||
value = holder[key]; | ||
|
||
if (value && typeof value === 'object' && | ||
typeof value.toJSON === 'function') { | ||
value = value.toJSON(key); | ||
} | ||
if (typeof rep === 'function') { | ||
value = rep.call(holder, key, value); | ||
} | ||
|
||
switch (typeof value) { | ||
case 'string': | ||
return quote(value); | ||
|
||
case 'number': | ||
return isFinite(value) ? String(value) : 'null'; | ||
|
||
case 'boolean': | ||
case 'null': | ||
|
||
return String(value); | ||
|
||
case 'object': | ||
|
||
if (!value) { | ||
return 'null'; | ||
} | ||
gap += indent; | ||
partial = []; | ||
|
||
if (typeof value.length === 'number' && | ||
!(value.propertyIsEnumerable('length'))) { | ||
|
||
length = value.length; | ||
for (i = 0; i < length; i += 1) { | ||
partial[i] = str(i, value) || 'null'; | ||
} | ||
|
||
v = partial.length === 0 ? '[]' : | ||
gap ? '[\n' + gap + | ||
partial.join(',\n' + gap) + '\n' + | ||
mind + ']' : | ||
'[' + partial.join(',') + ']'; | ||
gap = mind; | ||
return v; | ||
} | ||
|
||
if (rep && typeof rep === 'object') { | ||
length = rep.length; | ||
for (i = 0; i < length; i += 1) { | ||
k = rep[i]; | ||
if (typeof k === 'string') { | ||
v = str(k, value); | ||
if (v) { | ||
partial.push(quote(k) + (gap ? ': ' : ':') + v); | ||
} | ||
} | ||
} | ||
} else { | ||
|
||
for (k in value) { | ||
if (Object.hasOwnProperty.call(value, k)) { | ||
v = str(k, value); | ||
if (v) { | ||
partial.push(quote(k) + (gap ? ': ' : ':') + v); | ||
} | ||
} | ||
} | ||
} | ||
|
||
v = partial.length === 0 ? '{}' : | ||
gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + | ||
mind + '}' : '{' + partial.join(',') + '}'; | ||
gap = mind; | ||
return v; | ||
} | ||
} | ||
|
||
return { | ||
stringify: function (value, replacer, space) { | ||
|
||
var i; | ||
gap = ''; | ||
indent = ''; | ||
|
||
if (typeof space === 'number') { | ||
for (i = 0; i < space; i += 1) { | ||
indent += ' '; | ||
} | ||
|
||
} else if (typeof space === 'string') { | ||
indent = space; | ||
} | ||
|
||
rep = replacer; | ||
if (replacer && typeof replacer !== 'function' && | ||
(typeof replacer !== 'object' || | ||
typeof replacer.length !== 'number')) { | ||
throw new Error('JSON.stringify'); | ||
} | ||
|
||
return str('', {'': value}); | ||
}, | ||
|
||
|
||
parse: function (text, reviver) { | ||
var j; | ||
function walk(holder, key) { | ||
var k, v, value = holder[key]; | ||
if (value && typeof value === 'object') { | ||
for (k in value) { | ||
if (Object.hasOwnProperty.call(value, k)) { | ||
v = walk(value, k); | ||
if (v !== undefined) { | ||
value[k] = v; | ||
} else { | ||
delete value[k]; | ||
} | ||
} | ||
} | ||
} | ||
return reviver.call(holder, key, value); | ||
} | ||
|
||
cx.lastIndex = 0; | ||
if (cx.test(text)) { | ||
text = text.replace(cx, function (a) { | ||
return '\\u' + ('0000' + | ||
(+(a.charCodeAt(0))).toString(16)).slice(-4); | ||
}); | ||
} | ||
|
||
|
||
if (/^[\],:{}\s]*$/. | ||
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). | ||
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). | ||
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { | ||
|
||
j = eval('(' + text + ')'); | ||
|
||
return typeof reviver === 'function' ? | ||
walk({'': j}, '') : j; | ||
} | ||
|
||
throw new SyntaxError('JSON.parse'); | ||
} | ||
}; | ||
}(); |
Oops, something went wrong.