mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-27 09:50:52 -05:00
updated resurrect.js
This commit is contained in:
parent
a59abed8ec
commit
eee9a7b21b
1 changed files with 21 additions and 6 deletions
|
@ -76,6 +76,8 @@
|
|||
*
|
||||
* * Functions cannot ever be serialized. Resurrect will throw an
|
||||
* error if a function is found when traversing a data structure.
|
||||
*
|
||||
* @see http://nullprogram.com/blog/2013/03/28/
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -98,6 +100,13 @@ function Resurrect(options) {
|
|||
this.valuecode = this.prefix + 'v';
|
||||
}
|
||||
|
||||
/**
|
||||
* Portable access to the global object (window, global).
|
||||
* Uses indirect eval.
|
||||
* @constant
|
||||
*/
|
||||
Resurrect.GLOBAL = (0, eval)('this');
|
||||
|
||||
/* Helper Objects */
|
||||
|
||||
/**
|
||||
|
@ -158,7 +167,8 @@ Resurrect.NamespaceResolver.prototype.getName = function(object) {
|
|||
};
|
||||
|
||||
/* Set the default resolver searches the global object. */
|
||||
Resurrect.prototype.resolver = new Resurrect.NamespaceResolver(window);
|
||||
Resurrect.prototype.resolver =
|
||||
new Resurrect.NamespaceResolver(Resurrect.GLOBAL);
|
||||
|
||||
/**
|
||||
* Create a DOM node from HTML source; behaves like a constructor.
|
||||
|
@ -259,11 +269,12 @@ Resurrect.prototype.builder = function(name, value) {
|
|||
* Build a value from a deserialized builder.
|
||||
* @method
|
||||
* @see http://stackoverflow.com/a/14378462
|
||||
* @see http://nullprogram.com/blog/2013/03/24/
|
||||
*/
|
||||
Resurrect.prototype.build = function(ref) {
|
||||
var type = ref[this.buildcode].split(/\./).reduce(function(object, name) {
|
||||
return object[name];
|
||||
}, window);
|
||||
}, Resurrect.GLOBAL);
|
||||
/* Brilliant hack by kybernetikos: */
|
||||
var args = [null].concat(ref[this.valuecode]);
|
||||
var factory = type.bind.apply(type, args);
|
||||
|
@ -329,6 +340,7 @@ Resurrect.prototype.visit = function(root, f) {
|
|||
* Manage special atom values, possibly returning an encoding.
|
||||
*/
|
||||
Resurrect.prototype.handleAtom = function(atom) {
|
||||
var Node = Resurrect.GLOBAL.Node || function() {};
|
||||
if (Resurrect.isFunction(atom)) {
|
||||
throw new this.Error("Can't serialize functions.");
|
||||
} else if (atom instanceof Node) {
|
||||
|
@ -348,11 +360,14 @@ Resurrect.prototype.handleAtom = function(atom) {
|
|||
|
||||
/**
|
||||
* Serialize an arbitrary JavaScript object, carefully preserving it.
|
||||
* @param object
|
||||
* @param {(Function|Array)} replacer
|
||||
* @param {string} space
|
||||
* @method
|
||||
*/
|
||||
Resurrect.prototype.stringify = function(object) {
|
||||
Resurrect.prototype.stringify = function(object, replacer, space) {
|
||||
if (Resurrect.isAtom(object)) {
|
||||
return JSON.stringify(this.handleAtom(object));
|
||||
return JSON.stringify(this.handleAtom(object), replacer, space);
|
||||
} else {
|
||||
this.table = [];
|
||||
this.visit(object, this.handleAtom.bind(this));
|
||||
|
@ -367,7 +382,7 @@ Resurrect.prototype.stringify = function(object) {
|
|||
}
|
||||
var table = this.table;
|
||||
this.table = null;
|
||||
return JSON.stringify(table);
|
||||
return JSON.stringify(table, replacer, space);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue