| author | Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com> |
| Tue, 14 Feb 2012 14:35:09 +0100 | |
| changeset 516 | 819a9cd7679c |
| parent 266 | bb7a2f8202b9 |
| permissions | -rwxr-xr-x |
|
266
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
1 |
// cycle.js |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
2 |
// 2011-02-23 |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
3 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
4 |
/*jslint evil: true, regexp: false */ |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
5 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
6 |
/*members $ref, apply, call, decycle, hasOwnProperty, length, prototype, push, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
7 |
retrocycle, stringify, test, toString |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
8 |
*/ |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
9 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
10 |
if (typeof JSON.decycle !== 'function') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
11 |
JSON.decycle = function decycle(object) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
12 |
"use strict"; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
13 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
14 |
// Make a deep copy of an object or array, assuring that there is at most |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
15 |
// one instance of each object or array in the resulting structure. The |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
16 |
// duplicate references (which might be forming cycles) are replaced with |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
17 |
// an object of the form |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
18 |
// {$ref: PATH} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
19 |
// where the PATH is a JSONPath string that locates the first occurance. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
20 |
// So, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
21 |
// var a = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
22 |
// a[0] = a; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
23 |
// return JSON.stringify(JSON.decycle(a)); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
24 |
// produces the string '[{"$ref":"$"}]'. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
25 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
26 |
// JSONPath is used to locate the unique object. $ indicates the top level of |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
27 |
// the object or array. [NUMBER] or [STRING] indicates a child member or |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
28 |
// property. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
29 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
30 |
var objects = [], // Keep a reference to each unique object or array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
31 |
paths = []; // Keep the path to each unique object or array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
32 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
33 |
return (function derez(value, path) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
34 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
35 |
// The derez recurses through the object, producing the deep copy. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
36 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
37 |
var i, // The loop counter |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
38 |
name, // Property name |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
39 |
nu; // The new object or array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
40 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
41 |
switch (typeof value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
42 |
case 'object': |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
43 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
44 |
// typeof null === 'object', so get out if this value is not really an object. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
45 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
46 |
if (!value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
47 |
return null; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
48 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
49 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
50 |
// If the value is an object or array, look to see if we have already |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
51 |
// encountered it. If so, return a $ref/path object. This is a hard way, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
52 |
// linear search that will get slower as the number of unique objects grows. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
53 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
54 |
for (i = 0; i < objects.length; i += 1) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
55 |
if (objects[i] === value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
56 |
return {$ref: paths[i]}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
57 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
58 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
59 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
60 |
// Otherwise, accumulate the unique value and its path. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
61 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
62 |
objects.push(value); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
63 |
paths.push(path); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
64 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
65 |
// If it is an array, replicate the array. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
66 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
67 |
if (Object.prototype.toString.apply(value) === '[object Array]') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
68 |
nu = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
69 |
for (i = 0; i < value.length; i += 1) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
70 |
nu[i] = derez(value[i], path + '[' + i + ']'); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
71 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
72 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
73 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
74 |
// If it is an object, replicate the object. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
75 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
76 |
nu = {}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
77 |
for (name in value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
78 |
if (Object.prototype.hasOwnProperty.call(value, name)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
79 |
nu[name] = derez(value[name], |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
80 |
path + '[' + JSON.stringify(name) + ']'); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
81 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
82 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
83 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
84 |
return nu; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
85 |
case 'number': |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
86 |
case 'string': |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
87 |
case 'boolean': |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
88 |
return value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
89 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
90 |
}(object, '$')); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
91 |
}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
92 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
93 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
94 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
95 |
if (typeof JSON.retrocycle !== 'function') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
96 |
JSON.retrocycle = function retrocycle($) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
97 |
"use strict"; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
98 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
99 |
// Restore an object that was reduced by decycle. Members whose values are |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
100 |
// objects of the form |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
101 |
// {$ref: PATH} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
102 |
// are replaced with references to the value found by the PATH. This will |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
103 |
// restore cycles. The object will be mutated. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
104 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
105 |
// The eval function is used to locate the values described by a PATH. The |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
106 |
// root object is kept in a $ variable. A regular expression is used to |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
107 |
// assure that the PATH is extremely well formed. The regexp contains nested |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
108 |
// * quantifiers. That has been known to have extremely bad performance |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
109 |
// problems on some browsers for very long strings. A PATH is expected to be |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
110 |
// reasonably short. A PATH is allowed to belong to a very restricted subset of |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
111 |
// Goessner's JSONPath. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
112 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
113 |
// So, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
114 |
// var s = '[{"$ref":"$"}]'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
115 |
// return JSON.retrocycle(JSON.parse(s)); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
116 |
// produces an array containing a single element which is the array itself. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
117 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
118 |
var px = |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
119 |
/^\$(?:\[(?:\d?|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
120 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
121 |
(function rez(value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
122 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
123 |
// The rez function walks recursively through the object looking for $ref |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
124 |
// properties. When it finds one that has a value that is a path, then it |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
125 |
// replaces the $ref object with a reference to the value that is found by |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
126 |
// the path. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
127 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
128 |
var i, item, name, path; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
129 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
130 |
if (value && typeof value === 'object') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
131 |
if (Object.prototype.toString.apply(value) === '[object Array]') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
132 |
for (i = 0; i < value.length; i += 1) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
133 |
item = value[i]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
134 |
if (item && typeof item === 'object') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
135 |
path = item.$ref; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
136 |
if (typeof path === 'string' && px.test(path)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
137 |
value[i] = eval(path); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
138 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
139 |
rez(item); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
140 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
141 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
142 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
143 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
144 |
for (name in value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
145 |
if (typeof value[name] === 'object') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
146 |
item = value[name]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
147 |
if (item) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
148 |
path = item.$ref; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
149 |
if (typeof path === 'string' && px.test(path)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
150 |
value[name] = eval(path); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
151 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
152 |
rez(item); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
153 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
154 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
155 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
156 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
157 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
158 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
159 |
}($)); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
160 |
return $; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
161 |
}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
162 |
} |