UNPKG

3.87 kBJavaScriptView Raw
1"use strict";
2
3// 'http://www.web3d.org/specifications/x3d-namespace'
4
5// Load X3D JSON into web page
6
7function ConvertChildren(object, indent, parentkey, element) {
8 var key;
9 for (key in object) {
10 if (typeof object[key] === 'object') {
11 ConvertToX3DOM(object[key], indent, key, element);
12 }
13 }
14}
15
16function ConvertToX3DOM(object, indent, parentkey, element) {
17 var key;
18 var localArray = [];
19 var isArray = false;
20 var arrayOfStrings = false;
21 for (key in object) {
22 if (isNaN(parseInt(key))) {
23 isArray = false;
24 } else {
25 isArray = true;
26 }
27 if (isArray) {
28 if (typeof object[key] === 'number') {
29 localArray.push(object[key]);
30 } else if (typeof object[key] === 'string') {
31 localArray.push(object[key]);
32 arrayOfStrings = true;
33 } else if (typeof object[key] === 'boolean') {
34 localArray.push(object[key]);
35 } else if (typeof object[key] === 'object') {
36 ConvertToX3DOM(object[key], indent, key, element);
37 } else {
38 console.log("Unknown type found in array " + typeof object[key]);
39 }
40 } else if (typeof object[key] === 'object') {
41 if (key.substr(0, 1) === '@') {
42 ConvertToX3DOM(object[key], indent, key, element);
43 } else if (key.substr(0, 1) === '-') {
44 ConvertChildren(object[key], indent, key, element);
45 } else {
46 var createKey = key;
47 var child = document.createElement(createKey);
48 ConvertToX3DOM(object[key], indent, key, child);
49 element.appendChild(child);
50 }
51 } else if (typeof object[key] === 'number') {
52 element.setAttribute(key.substr(1), object[key]);
53 } else if (typeof object[key] === 'string') {
54 if (key !== '#comment') {
55 element.setAttribute(key.substr(1), object[key]);
56 }
57 } else if (typeof object[key] === 'boolean') {
58 element.setAttribute(key.substr(1), object[key]);
59 } else {
60 console.log("Unknown type found in object " + typeof object[key]);
61 }
62 }
63 if (isArray) {
64 if (parentkey.substr(0, 1) === '@') {
65 if (arrayOfStrings) {
66 arrayOfStrings = false;
67 if (parentkey === '@url') {
68 var url;
69 for (url in localArray) {
70 /*
71 if (localArray[url].indexOf("..") === 0) {
72 localArray[url] = '/'+localArray[url].substring(3);
73 } else if (localArray[url].indexOf("http://") < 0) {
74 localArray[url] = '/'+localArray[url];
75 }
76 */
77 // console.log(localArray[url]);
78 }
79 }
80 element.setAttribute(parentkey.substr(1), '"' + localArray.join('" "') + '"');
81 } else {
82 element.setAttribute(parentkey.substr(1), localArray.join(" "));
83 }
84 }
85 isArray = false;
86 }
87 return element;
88}
89
90function loadX3DJS(selector, json) {
91 var element = document.querySelector(selector);
92 if (element === null) {
93 console.log("selector found nothing in document", selector);
94 } else {
95 ConvertToX3DOM(json, "", "", element);
96 x3dom.reload();
97 }
98}
99
100//function loadX3DJSON(selector, url) {
101// $.getJSON(url, function (json) {
102// loadX3DJS(selector, json);
103// })
104// .fail(function (jqXHR, textStatus, errorThrown) {
105// alert('getJSON request failed! ' + textStatus + ' ' + errorThrown);
106// });
107//}