melonjs 14.0.1 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +2 -0
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
  4. package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
  5. package/dist/melonjs.mjs/_virtual/howler.js +10 -0
  6. package/dist/melonjs.mjs/_virtual/index.js +10 -0
  7. package/dist/melonjs.mjs/_virtual/index2.js +10 -0
  8. package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
  10. package/dist/melonjs.mjs/application/application.js +240 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +732 -0
  13. package/dist/melonjs.mjs/entity/entity.js +248 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +275 -0
  16. package/dist/melonjs.mjs/geometries/line.js +116 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +319 -0
  18. package/dist/melonjs.mjs/geometries/point.js +89 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +500 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +375 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +168 -0
  22. package/dist/melonjs.mjs/index.js +248 -0
  23. package/dist/melonjs.mjs/input/gamepad.js +501 -0
  24. package/dist/melonjs.mjs/input/input.js +26 -0
  25. package/dist/melonjs.mjs/input/keyboard.js +470 -0
  26. package/dist/melonjs.mjs/input/pointer.js +393 -0
  27. package/dist/melonjs.mjs/input/pointerevent.js +818 -0
  28. package/dist/melonjs.mjs/lang/deprecated.js +157 -0
  29. package/dist/melonjs.mjs/level/level.js +297 -0
  30. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
  31. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +448 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +194 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +639 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +311 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +83 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +506 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +220 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +157 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +125 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +109 -0
  43. package/dist/melonjs.mjs/loader/loader.js +801 -0
  44. package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
  45. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
  46. package/dist/melonjs.mjs/math/color.js +618 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +503 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +681 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +471 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +561 -0
  52. package/dist/melonjs.mjs/math/vector2.js +528 -0
  53. package/dist/melonjs.mjs/math/vector3.js +569 -0
  54. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
  55. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
  56. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
  57. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
  58. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
  59. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
  60. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
  61. package/dist/melonjs.mjs/particles/emitter.js +267 -0
  62. package/dist/melonjs.mjs/particles/particle.js +188 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +704 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +460 -0
  66. package/dist/melonjs.mjs/physics/collision.js +132 -0
  67. package/dist/melonjs.mjs/physics/detector.js +194 -0
  68. package/dist/melonjs.mjs/physics/quadtree.js +391 -0
  69. package/dist/melonjs.mjs/physics/response.js +57 -0
  70. package/dist/melonjs.mjs/physics/sat.js +483 -0
  71. package/dist/melonjs.mjs/physics/world.js +221 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +62 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +80 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1018 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +306 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +156 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +247 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +783 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +654 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +157 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +213 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +226 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +128 -0
  86. package/dist/melonjs.mjs/state/stage.js +237 -0
  87. package/dist/melonjs.mjs/state/state.js +596 -0
  88. package/dist/melonjs.mjs/system/device.js +909 -0
  89. package/dist/melonjs.mjs/system/dom.js +78 -0
  90. package/dist/melonjs.mjs/system/event.js +537 -0
  91. package/dist/melonjs.mjs/system/platform.js +41 -0
  92. package/dist/melonjs.mjs/system/pooling.js +209 -0
  93. package/dist/melonjs.mjs/system/save.js +157 -0
  94. package/dist/melonjs.mjs/system/timer.js +286 -0
  95. package/dist/melonjs.mjs/text/bitmaptext.js +364 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +199 -0
  97. package/dist/melonjs.mjs/text/glyph.js +66 -0
  98. package/dist/melonjs.mjs/text/text.js +453 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +176 -0
  100. package/dist/melonjs.mjs/text/textstyle.js +23 -0
  101. package/dist/melonjs.mjs/tweens/easing.js +336 -0
  102. package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
  103. package/dist/melonjs.mjs/tweens/tween.js +480 -0
  104. package/dist/melonjs.mjs/utils/agent.js +76 -0
  105. package/dist/melonjs.mjs/utils/array.js +63 -0
  106. package/dist/melonjs.mjs/utils/file.js +42 -0
  107. package/dist/melonjs.mjs/utils/function.js +70 -0
  108. package/dist/melonjs.mjs/utils/string.js +82 -0
  109. package/dist/melonjs.mjs/utils/utils.js +173 -0
  110. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +807 -0
  111. package/dist/melonjs.mjs/video/renderer.js +411 -0
  112. package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
  113. package/dist/melonjs.mjs/video/texture/cache.js +143 -0
  114. package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
  115. package/dist/melonjs.mjs/video/video.js +462 -0
  116. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +143 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +168 -0
  118. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
  119. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
  120. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
  121. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
  122. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
  123. package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
  124. package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
  125. package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
  126. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
  127. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +495 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1036 -0
  129. package/dist/melonjs.module.d.ts +1163 -1163
  130. package/dist/melonjs.module.js +1903 -3274
  131. package/package.json +22 -17
  132. package/src/application/application.js +3 -3
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +31 -31
  135. package/src/entity/entity.js +17 -17
  136. package/src/geometries/ellipse.js +16 -16
  137. package/src/geometries/line.js +5 -5
  138. package/src/geometries/path2d.js +32 -32
  139. package/src/geometries/poly.js +15 -15
  140. package/src/geometries/rectangle.js +18 -18
  141. package/src/geometries/roundrect.js +8 -8
  142. package/src/input/gamepad.js +15 -15
  143. package/src/input/keyboard.js +12 -12
  144. package/src/input/pointer.js +6 -6
  145. package/src/input/pointerevent.js +12 -12
  146. package/src/lang/deprecated.js +12 -12
  147. package/src/level/level.js +25 -25
  148. package/src/level/tiled/TMXLayer.js +22 -22
  149. package/src/level/tiled/TMXTile.js +5 -5
  150. package/src/level/tiled/TMXTileMap.js +6 -6
  151. package/src/level/tiled/TMXTileset.js +2 -2
  152. package/src/level/tiled/TMXUtils.js +5 -5
  153. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -2
  154. package/src/level/tiled/renderer/TMXIsometricRenderer.js +2 -2
  155. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  156. package/src/level/tiled/renderer/TMXRenderer.js +19 -19
  157. package/src/loader/loader.js +20 -20
  158. package/src/math/color.js +20 -20
  159. package/src/math/math.js +16 -16
  160. package/src/math/matrix2.js +16 -16
  161. package/src/math/matrix3.js +25 -25
  162. package/src/math/observable_vector2.js +14 -14
  163. package/src/math/observable_vector3.js +16 -16
  164. package/src/math/vector2.js +9 -9
  165. package/src/math/vector3.js +10 -10
  166. package/src/particles/emitter.js +6 -6
  167. package/src/particles/particle.js +2 -2
  168. package/src/physics/body.js +28 -28
  169. package/src/physics/bounds.js +8 -8
  170. package/src/physics/collision.js +2 -2
  171. package/src/physics/detector.js +6 -6
  172. package/src/physics/quadtree.js +11 -11
  173. package/src/physics/sat.js +31 -31
  174. package/src/physics/world.js +5 -5
  175. package/src/plugin/plugin.js +5 -5
  176. package/src/renderable/collectable.js +3 -3
  177. package/src/renderable/colorlayer.js +5 -5
  178. package/src/renderable/container.js +21 -21
  179. package/src/renderable/dragndrop.js +14 -14
  180. package/src/renderable/imagelayer.js +13 -13
  181. package/src/renderable/light2d.js +3 -3
  182. package/src/renderable/nineslicesprite.js +16 -16
  183. package/src/renderable/renderable.js +23 -23
  184. package/src/renderable/sprite.js +28 -28
  185. package/src/renderable/trigger.js +15 -15
  186. package/src/renderable/ui/uibaseelement.js +7 -7
  187. package/src/renderable/ui/uispriteelement.js +6 -6
  188. package/src/renderable/ui/uitextbutton.js +13 -13
  189. package/src/state/stage.js +7 -7
  190. package/src/state/state.js +17 -17
  191. package/src/system/device.js +11 -11
  192. package/src/system/event.js +10 -10
  193. package/src/system/pooling.js +9 -9
  194. package/src/system/save.js +2 -2
  195. package/src/system/timer.js +10 -10
  196. package/src/text/bitmaptext.js +18 -18
  197. package/src/text/bitmaptextdata.js +2 -2
  198. package/src/text/text.js +23 -23
  199. package/src/text/textmetrics.js +8 -8
  200. package/src/tweens/tween.js +19 -19
  201. package/src/utils/agent.js +5 -5
  202. package/src/utils/array.js +4 -4
  203. package/src/utils/file.js +2 -2
  204. package/src/utils/function.js +6 -6
  205. package/src/utils/string.js +5 -5
  206. package/src/utils/utils.js +4 -4
  207. package/src/video/canvas/canvas_renderer.js +70 -70
  208. package/src/video/renderer.js +26 -26
  209. package/src/video/texture/atlas.js +22 -22
  210. package/src/video/texture/canvas_texture.js +9 -9
  211. package/src/video/video.js +17 -17
  212. package/src/video/webgl/glshader.js +10 -10
  213. package/src/video/webgl/webgl_compositor.js +41 -41
  214. package/src/video/webgl/webgl_renderer.js +75 -75
@@ -0,0 +1,367 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.0
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import { isBoolean, isNumeric } from '../../utils/string.js';
9
+
10
+ /**
11
+ * set and interpret a TMX property value
12
+ * @ignore
13
+ */
14
+ function setTMXValue(name, type, value) {
15
+ var match;
16
+
17
+ if (typeof(value) !== "string") {
18
+ // Value is already normalized (e.g. with JSON maps)
19
+ return value;
20
+ }
21
+
22
+ switch (type) {
23
+
24
+ case "int" :
25
+ case "float" :
26
+ value = Number(value);
27
+ break;
28
+
29
+ case "bool" :
30
+ value = (value === "true");
31
+ break;
32
+
33
+ default :
34
+ // try to parse it anyway
35
+ if (!value || isBoolean(value)) {
36
+ // if value not defined or boolean
37
+ value = value ? (value === "true") : true;
38
+ }
39
+ else if (isNumeric(value)) {
40
+ // check if numeric
41
+ value = Number(value);
42
+ }
43
+ else if (value.search(/^json:/i) === 0) {
44
+ // try to parse it
45
+ match = value.split(/^json:/i)[1];
46
+ try {
47
+ value = JSON.parse(match);
48
+ }
49
+ catch (e) {
50
+ throw new Error("Unable to parse JSON: " + match);
51
+ }
52
+ }
53
+ else if (value.search(/^eval:/i) === 0) {
54
+ // try to evaluate it
55
+ match = value.split(/^eval:/i)[1];
56
+ try {
57
+ // eslint-disable-next-line
58
+ value = Function("'use strict';return (" + match + ")")();
59
+ }
60
+ catch (e) {
61
+ throw new Error("Unable to evaluate: " + match);
62
+ }
63
+ }
64
+ else if (
65
+ ((match = value.match(/^#([\da-fA-F])([\da-fA-F]{3})$/))) ||
66
+ ((match = value.match(/^#([\da-fA-F]{2})([\da-fA-F]{6})$/)))
67
+ ) {
68
+ value = "#" + match[2] + match[1];
69
+ }
70
+
71
+ // normalize values
72
+ if (name.search(/^(ratio|anchorPoint)$/) === 0) {
73
+ // convert number to vector
74
+ if (typeof(value) === "number") {
75
+ value = {
76
+ "x" : value,
77
+ "y" : value
78
+ };
79
+ }
80
+ }
81
+ }
82
+ // return the interpreted value
83
+ return value;
84
+ }
85
+
86
+ /**
87
+ * @ignore
88
+ */
89
+ function parseAttributes(obj, elt) {
90
+ // do attributes
91
+ if (elt.attributes && elt.attributes.length > 0) {
92
+ for (var j = 0; j < elt.attributes.length; j++) {
93
+ var attribute = elt.attributes.item(j);
94
+ if (typeof(attribute.name) !== "undefined") {
95
+ // DOM4 (Attr no longer inherit from Node)
96
+ obj[attribute.name] = attribute.value;
97
+ } else {
98
+ // else use the deprecated ones
99
+ obj[attribute.nodeName] = attribute.nodeValue;
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ /**
106
+ * decompress zlib/gzip data (NOT IMPLEMENTED)
107
+ * @ignore
108
+ * @name decompress
109
+ * @param {number[]} data- - Array of bytes
110
+ * @param {string} format- - compressed data format ("gzip","zlib")
111
+ */
112
+ function decompress() {
113
+ throw new Error("GZIP/ZLIB compressed TMX Tile Map not supported!");
114
+ }
115
+
116
+ /**
117
+ * Decode a CSV encoded array into a binary array
118
+ * @ignore
119
+ * @name decodeCSV
120
+ * @param {string} input- - CSV formatted data (only numbers, everything else will be converted to NaN)
121
+ * @returns {number[]} Decoded data
122
+ */
123
+ function decodeCSV(input) {
124
+ var entries = input.replace("\n", "").trim().split(",");
125
+
126
+ var result = [];
127
+ for (var i = 0; i < entries.length; i++) {
128
+ result.push(+entries[i]);
129
+ }
130
+ return result;
131
+ }
132
+
133
+ /**
134
+ * Decode a base64 encoded string into a byte array
135
+ * @ignore
136
+ * @name decodeBase64AsArray
137
+ * @param {string} input - Base64 encoded data
138
+ * @param {number} [bytes] - number of bytes per array entry
139
+ * @returns {Uint32Array} Decoded data
140
+ */
141
+ function decodeBase64AsArray(input, bytes) {
142
+ bytes = bytes || 1;
143
+
144
+ var i, j, len;
145
+ var dec = globalThis.atob(input.replace(/[^A-Za-z0-9\+\/\=]/g, ""));
146
+ var ar = new Uint32Array(dec.length / bytes);
147
+
148
+ for (i = 0, len = dec.length / bytes; i < len; i++) {
149
+ ar[i] = 0;
150
+ for (j = bytes - 1; j >= 0; --j) {
151
+ ar[i] += dec.charCodeAt((i * bytes) + j) << (j << 3);
152
+ }
153
+ }
154
+ return ar;
155
+ }
156
+
157
+ /**
158
+ * Decode the given data
159
+ * @ignore
160
+ */
161
+ function decode(data, encoding, compression) {
162
+ compression = compression || "none";
163
+ encoding = encoding || "none";
164
+
165
+ switch (encoding) {
166
+ case "csv":
167
+ return decodeCSV(data);
168
+
169
+ case "base64":
170
+ var decoded = decodeBase64AsArray(data, 4);
171
+ return (
172
+ (compression === "none") ?
173
+ decoded :
174
+ decompress()
175
+ );
176
+
177
+ case "none":
178
+ return data;
179
+
180
+ case "xml":
181
+ throw new Error("XML encoding is deprecated, use base64 instead");
182
+
183
+ default:
184
+ throw new Error("Unknown layer encoding: " + encoding);
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Normalize TMX format to Tiled JSON format
190
+ * @ignore
191
+ */
192
+ function normalize(obj, item) {
193
+ var nodeName = item.nodeName;
194
+
195
+ switch (nodeName) {
196
+ case "data":
197
+ var data = parse(item);
198
+ // #956 Support for Infinite map
199
+ // workaround to prevent the parsing code from crashing
200
+ data.text = data.text || data.chunk.text;
201
+ // When no encoding is given, the tiles are stored as individual XML tile elements.
202
+ data.encoding = data.encoding || "xml";
203
+ obj.data = decode(data.text, data.encoding, data.compression);
204
+ obj.encoding = "none";
205
+ break;
206
+
207
+ case "imagelayer":
208
+ case "layer":
209
+ case "objectgroup":
210
+ case "group":
211
+ var layer = parse(item);
212
+ layer.type = (nodeName === "layer" ? "tilelayer" : nodeName);
213
+ if (layer.image) {
214
+ layer.image = layer.image.source;
215
+ }
216
+
217
+ obj.layers = obj.layers || [];
218
+ obj.layers.push(layer);
219
+ break;
220
+
221
+ case "animation":
222
+ obj.animation = parse(item).frames;
223
+ break;
224
+
225
+ case "frame":
226
+ case "object":
227
+ var name = nodeName + "s";
228
+ obj[name] = obj[name] || [];
229
+ obj[name].push(parse(item));
230
+ break;
231
+
232
+ case "tile":
233
+ var tile = parse(item);
234
+ if (tile.image) {
235
+ tile.imagewidth = tile.image.width;
236
+ tile.imageheight = tile.image.height;
237
+ tile.image = tile.image.source;
238
+ }
239
+ obj.tiles = obj.tiles || {};
240
+ obj.tiles[tile.id] = tile;
241
+ break;
242
+
243
+ case "tileset":
244
+ var tileset = parse(item);
245
+ if (tileset.image) {
246
+ tileset.imagewidth = tileset.image.width;
247
+ tileset.imageheight = tileset.image.height;
248
+ tileset.image = tileset.image.source;
249
+ }
250
+
251
+ obj.tilesets = obj.tilesets || [];
252
+ obj.tilesets.push(tileset);
253
+ break;
254
+
255
+ case "polygon":
256
+ case "polyline":
257
+ obj[nodeName] = [];
258
+
259
+ // Get a point array
260
+ var points = parse(item).points.split(" ");
261
+
262
+ // And normalize them into an array of vectors
263
+ for (var i = 0, v; i < points.length; i++) {
264
+ v = points[i].split(",");
265
+ obj[nodeName].push({
266
+ "x" : +v[0],
267
+ "y" : +v[1]
268
+ });
269
+ }
270
+
271
+ break;
272
+
273
+ case "properties":
274
+ obj.properties = parse(item);
275
+ break;
276
+
277
+ case "property":
278
+ var property = parse(item);
279
+ // for custom properties, text is used
280
+ var value = (typeof property.value !== "undefined") ? property.value : property.text;
281
+
282
+ obj[property.name] = setTMXValue(
283
+ property.name,
284
+ // in XML type is undefined for "string" values
285
+ property.type || "string",
286
+ value
287
+ );
288
+ break;
289
+
290
+ default:
291
+ obj[nodeName] = parse(item);
292
+ break;
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Parse a XML TMX object and returns the corresponding javascript object
298
+ * @ignore
299
+ */
300
+ function parse(xml) {
301
+ // Create the return object
302
+ var obj = {};
303
+
304
+ var text = "";
305
+
306
+ if (xml.nodeType === 1) {
307
+ // do attributes
308
+ parseAttributes(obj, xml);
309
+ }
310
+
311
+ // do children
312
+ if (xml.hasChildNodes()) {
313
+ for (var i = 0; i < xml.childNodes.length; i++) {
314
+ var item = xml.childNodes.item(i);
315
+
316
+ switch (item.nodeType) {
317
+ case 1:
318
+ normalize(obj, item);
319
+ break;
320
+
321
+ case 3:
322
+ text += item.nodeValue.trim();
323
+ break;
324
+ }
325
+ }
326
+ }
327
+
328
+ if (text) {
329
+ obj.text = text;
330
+ }
331
+
332
+ return obj;
333
+ }
334
+
335
+ /**
336
+ * Apply TMX Properties to the given object
337
+ * @ignore
338
+ */
339
+ function applyTMXProperties(obj, data) {
340
+ var properties = data.properties;
341
+ var types = data.propertytypes;
342
+ if (typeof(properties) !== "undefined") {
343
+ for (var property in properties) {
344
+ if (properties.hasOwnProperty(property)) {
345
+ var type = "string";
346
+ var name = property;
347
+ var value = properties[property];
348
+ // proof-check for new and old JSON format
349
+ if (typeof properties[property].name !== "undefined") {
350
+ name = properties[property].name;
351
+ }
352
+ if (typeof(types) !== "undefined") {
353
+ type = types[property];
354
+ } else if (typeof properties[property].type !== "undefined") {
355
+ type = properties[property].type;
356
+ }
357
+ if (typeof properties[property].value !== "undefined") {
358
+ value = properties[property].value;
359
+ }
360
+ // set the value
361
+ obj[name] = setTMXValue(name, type, value);
362
+ }
363
+ }
364
+ }
365
+ }
366
+
367
+ export { applyTMXProperties, decode, decodeBase64AsArray, decodeCSV, decompress, normalize, parse };