Bläddra i källkod

Merge remote-tracking branch 'upstream/lcs-v0.5'

Nikolay Suslov 4 år sedan
förälder
incheckning
11bd07544a
58 ändrade filer med 2255 tillägg och 1720 borttagningar
  1. 12 193
      package-lock.json
  2. 1 1
      package.json
  3. 10 10
      public/defaults/addon/sonic-pi_osc.txt
  4. 0 18
      public/defaults/worlds/aframe-ar/assets.json
  5. 13 0
      public/defaults/worlds/aframe-ar/index.vwf.config.json
  6. 0 8
      public/defaults/worlds/aframe-ar/index.vwf.config.yaml
  7. 216 0
      public/defaults/worlds/aframe-ar/index.vwf.json
  8. 0 101
      public/defaults/worlds/aframe-ar/index.vwf.yaml
  9. 196 0
      public/defaults/worlds/aframe/index.vwf.json
  10. 0 132
      public/defaults/worlds/aframe/index.vwf.yaml
  11. 0 3
      public/defaults/worlds/aframe2/assets.json
  12. 12 0
      public/defaults/worlds/aframe2/index.vwf.config.json
  13. 0 8
      public/defaults/worlds/aframe2/index.vwf.config.yaml
  14. 339 0
      public/defaults/worlds/aframe2/index.vwf.json
  15. 0 220
      public/defaults/worlds/aframe2/index.vwf.yaml
  16. 0 14
      public/defaults/worlds/gearvr/assets.json
  17. 12 0
      public/defaults/worlds/gearvr/index.vwf.config.json
  18. 0 8
      public/defaults/worlds/gearvr/index.vwf.config.yaml
  19. 115 0
      public/defaults/worlds/gearvr/index.vwf.json
  20. 0 63
      public/defaults/worlds/gearvr/index.vwf.yaml
  21. 0 18
      public/defaults/worlds/multipixel/assets.json
  22. 12 0
      public/defaults/worlds/multipixel/index.vwf.config.json
  23. 0 8
      public/defaults/worlds/multipixel/index.vwf.config.yaml
  24. 362 0
      public/defaults/worlds/multipixel/index.vwf.json
  25. 0 155
      public/defaults/worlds/multipixel/index.vwf.yaml
  26. 0 6
      public/defaults/worlds/ohmlang-calc/assets.json
  27. 12 0
      public/defaults/worlds/ohmlang-calc/index.vwf.config.json
  28. 0 8
      public/defaults/worlds/ohmlang-calc/index.vwf.config.yaml
  29. 140 0
      public/defaults/worlds/ohmlang-calc/index.vwf.json
  30. 0 155
      public/defaults/worlds/ohmlang-calc/index.vwf.yaml
  31. 0 6
      public/defaults/worlds/ohmlang-lsys/assets.json
  32. 12 0
      public/defaults/worlds/ohmlang-lsys/index.vwf.config.json
  33. 0 8
      public/defaults/worlds/ohmlang-lsys/index.vwf.config.yaml
  34. 227 0
      public/defaults/worlds/ohmlang-lsys/index.vwf.json
  35. 0 227
      public/defaults/worlds/ohmlang-lsys/index.vwf.yaml
  36. 0 3
      public/defaults/worlds/orchestra/assets.json
  37. 12 0
      public/defaults/worlds/orchestra/index.vwf.config.json
  38. 0 8
      public/defaults/worlds/orchestra/index.vwf.config.yaml
  39. 371 0
      public/defaults/worlds/orchestra/index.vwf.json
  40. 0 265
      public/defaults/worlds/orchestra/index.vwf.yaml
  41. 1 10
      public/defaults/worlds/osc-example/index.vwf.json
  42. 0 30
      public/defaults/worlds/osc-example/osclang.js
  43. 2 2
      public/defaults/worlds/paint/info.json
  44. BIN
      public/defaults/worlds/paint/webimg.jpg
  45. 1 0
      public/lib/gundb/axe.js
  46. 1 1
      public/lib/gundb/gun.js
  47. 41 0
      public/lib/gundb/lib/ras.js
  48. 8 0
      public/lib/gundb/lib/rfs.js
  49. 1 0
      public/lib/gundb/lib/server.js
  50. 1 3
      public/lib/gundb/lib/store.js
  51. 10 4
      public/lib/gundb/lib/upload.js
  52. 1 2
      public/lib/gundb/lib/wire.js
  53. 50 9
      public/lib/gundb/sea.js
  54. 37 0
      public/lib/gundb/sea/create.js
  55. 10 7
      public/lib/gundb/sea/shim.js
  56. 3 2
      public/lib/gundb/sea/then.js
  57. 4 4
      public/luminary.js
  58. 10 0
      public/vwf/view/editor-new.js

+ 12 - 193
package-lock.json

@@ -5,9 +5,9 @@
   "requires": true,
   "dependencies": {
     "@peculiar/asn1-schema": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.0.3.tgz",
-      "integrity": "sha512-STqC+Tfx2dTiIGRmokjsKOeqsfhoV6WaBwFr7BVicSfHLAVSPrZXiugyD8AELrjQdJ9INWpL3N7YSJyU5a1ZwA==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.0.5.tgz",
+      "integrity": "sha512-VIKJjsgMkv+yyWx3C+D4xo6/NeCg0XFBgNlavtkxELijV+aKAq53du5KkOJbeZtm1nn9CinQKny2PqL8zCfpeA==",
       "optional": true,
       "requires": {
         "@types/asn1js": "^0.0.1",
@@ -58,26 +58,6 @@
       "integrity": "sha512-CgQAm7pjyeF3Gnv78ty4RBVIfluB+Td+2DR8iPaU0prF18pkzptHHP+DoKPfpsJYknKsVZyVsJEu5AuGgAqQ5w==",
       "optional": true
     },
-    "@unimodules/core": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-5.1.2.tgz",
-      "integrity": "sha512-iCWEbzsNHqDfL6p8FyCGPnL2EW7vdgMJsNNSlWtM/gl8kePdqZMI7aOxTC4cdRS2xm0wzxuDBtpfJkzZsKINZg==",
-      "optional": true,
-      "requires": {
-        "compare-versions": "^3.4.0"
-      }
-    },
-    "@unimodules/react-native-adapter": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.2.0.tgz",
-      "integrity": "sha512-S3HMEeQbV6xs7ORRcxXFGMk38DAnxqNcZG9T8JkX/KGY9ILUUqTS/e68+d849B6beEeglNMcOxyjwlqjykN+FA==",
-      "optional": true,
-      "requires": {
-        "invariant": "^2.2.4",
-        "lodash": "^4.5.0",
-        "prop-types": "^15.6.1"
-      }
-    },
     "accepts": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
@@ -122,12 +102,6 @@
       "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
       "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
     },
-    "asmcrypto.js": {
-      "version": "0.22.0",
-      "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz",
-      "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==",
-      "optional": true
-    },
     "asn1js": {
       "version": "2.0.26",
       "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.26.tgz",
@@ -147,35 +121,11 @@
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
     },
-    "b64-lite": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz",
-      "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==",
-      "optional": true,
-      "requires": {
-        "base-64": "^0.1.0"
-      }
-    },
-    "b64u-lite": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz",
-      "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==",
-      "optional": true,
-      "requires": {
-        "b64-lite": "^1.4.0"
-      }
-    },
     "backo2": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
       "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
     },
-    "base-64": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
-      "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=",
-      "optional": true
-    },
     "base64-arraybuffer": {
       "version": "0.1.5",
       "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
@@ -184,7 +134,8 @@
     "base64-js": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+      "optional": true
     },
     "base64id": {
       "version": "1.0.0",
@@ -264,20 +215,12 @@
       "version": "5.6.0",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
       "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+      "optional": true,
       "requires": {
         "base64-js": "^1.0.2",
         "ieee754": "^1.1.4"
       }
     },
-    "bufferutil": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz",
-      "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==",
-      "optional": true,
-      "requires": {
-        "node-gyp-build": "~3.7.0"
-      }
-    },
     "bytes": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@@ -316,12 +259,6 @@
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
-    "compare-versions": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
-      "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
-      "optional": true
-    },
     "component-bind": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
@@ -562,15 +499,6 @@
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
     },
-    "expo-random": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-8.1.0.tgz",
-      "integrity": "sha512-9n2gg83Hpg3ErkKu+a3FFOGmaPIxaHn6RuzjW24xFckdfmnrAKtbs1aU1aAcmoL1kXPvDeufRSEV/3lW93u6ug==",
-      "optional": true,
-      "requires": {
-        "base64-js": "^1.3.0"
-      }
-    },
     "express": {
       "version": "4.16.4",
       "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
@@ -707,16 +635,14 @@
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
     "gun": {
-      "version": "0.2020.514",
-      "resolved": "https://registry.npmjs.org/gun/-/gun-0.2020.514.tgz",
-      "integrity": "sha512-gKOUJUenNhVFmWOij7RjuXsluY8dSsFjX2mOA5MXrfvZP4Lqv6pEpSntnQmDmo3PHfECOaPF955JLLpiLVuLbw==",
+      "version": "0.2020.520",
+      "resolved": "https://registry.npmjs.org/gun/-/gun-0.2020.520.tgz",
+      "integrity": "sha512-hMDmj4QQnejweZEy4njbyNlll+GO7H8XIq/SdQ23kFV29B6HqA0+bQmhLCxWKLwQvfRXx9SgSXG/ImGrER/CqQ==",
       "requires": {
+        "@peculiar/webcrypto": "^1.1.1",
         "buffer": "^5.4.3",
-        "bufferutil": "^4.0.1",
         "emailjs": "^2.2.0",
-        "isomorphic-webcrypto": "^2.3.2",
         "text-encoding": "^0.7.0",
-        "utf-8-validate": "^5.0.2",
         "ws": "^7.2.1"
       }
     },
@@ -762,7 +688,8 @@
     "ieee754": {
       "version": "1.1.13",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+      "optional": true
     },
     "indexof": {
       "version": "0.0.1",
@@ -774,15 +701,6 @@
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
     },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "optional": true,
-      "requires": {
-        "loose-envify": "^1.0.0"
-      }
-    },
     "ipaddr.js": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
@@ -798,31 +716,6 @@
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
       "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
     },
-    "isomorphic-webcrypto": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.6.tgz",
-      "integrity": "sha512-d1prB3b0UMWOao5DK3+O2Dr5ZJCakzB5Q+2kCWNkNuM9ln7VB8TSw2SwUjbnErzg7cgsYja+VPQaeBtXEojpew==",
-      "optional": true,
-      "requires": {
-        "@peculiar/webcrypto": "^1.0.22",
-        "@unimodules/core": "*",
-        "@unimodules/react-native-adapter": "*",
-        "asmcrypto.js": "^0.22.0",
-        "b64-lite": "^1.3.1",
-        "b64u-lite": "^1.0.1",
-        "expo-random": "*",
-        "msrcrypto": "^1.5.6",
-        "react-native-securerandom": "^0.1.1",
-        "str2buf": "^1.3.0",
-        "webcrypto-shim": "^0.1.4"
-      }
-    },
-    "js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "optional": true
-    },
     "lcs-reflector": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/lcs-reflector/-/lcs-reflector-0.5.0.tgz",
@@ -851,21 +744,6 @@
         "p-locate": "^4.1.0"
       }
     },
-    "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
-      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
-      "optional": true
-    },
-    "loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "optional": true,
-      "requires": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      }
-    },
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -916,23 +794,11 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
-    "msrcrypto": {
-      "version": "1.5.8",
-      "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz",
-      "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==",
-      "optional": true
-    },
     "negotiator": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
       "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
     },
-    "node-gyp-build": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz",
-      "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==",
-      "optional": true
-    },
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -1008,17 +874,6 @@
       "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
       "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
     },
-    "prop-types": {
-      "version": "15.7.2",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-      "optional": true,
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.8.1"
-      }
-    },
     "proxy-addr": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@@ -1089,21 +944,6 @@
         }
       }
     },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-      "optional": true
-    },
-    "react-native-securerandom": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz",
-      "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=",
-      "optional": true,
-      "requires": {
-        "base64-js": "*"
-      }
-    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -1415,12 +1255,6 @@
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
       "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
     },
-    "str2buf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz",
-      "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==",
-      "optional": true
-    },
     "string-width": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -1490,15 +1324,6 @@
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
       "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
     },
-    "utf-8-validate": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz",
-      "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==",
-      "optional": true,
-      "requires": {
-        "node-gyp-build": "~3.7.0"
-      }
-    },
     "utils-merge": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -1522,12 +1347,6 @@
         "tslib": "^1.11.2"
       }
     },
-    "webcrypto-shim": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.5.tgz",
-      "integrity": "sha512-mE+E00gulvbLjHaAwl0kph60oOLQRsKyivEFgV9DMM/3Y05F1vZvGq12hAcNzHRnYxyEOABBT/XMtwGSg5xA7A==",
-      "optional": true
-    },
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",

+ 1 - 1
package.json

@@ -20,7 +20,7 @@
     "yargs": "15.3.1",
     "socket.io": "2.2.0",
     "lcs-reflector": "0.5",
-    "gun": "0.2020.514"
+    "gun": "0.2020.520"
   },
   "scripts": {
     "start": "node index.js",

+ 10 - 10
public/defaults/addon/sonic-pi_osc.txt

@@ -5,7 +5,7 @@ oldT2 = 0
 set :tC3, current_time
 oldT3 = 0
 
-latency = 0.2
+latency = 0.3
 
 #use_sched_ahead_time 0.4
 #set_sched_ahead_time! 0.3
@@ -14,8 +14,8 @@ live_loop :sample01 do
   
   use_sched_ahead_time latency
   
-  a = sync "/osc/trigger/sample01"
-  nowT = a[0]
+  a, b, c = sync "/osc*/trigger/sample01"
+  nowT = a
   inc = nowT - oldT1
   oldT1 = nowT
   print inc
@@ -33,7 +33,7 @@ live_loop :sample01 do
   time_warp delta do
     t = current_time
     set :tC1, t
-    sample a[1], amp: a[2]
+    sample b, amp: c
   end
   
 end
@@ -42,8 +42,8 @@ live_loop :sample02 do
   
   use_sched_ahead_time latency
   
-  a = sync "/osc/trigger/sample02"
-  nowT = a[0]
+  a, b, c = sync "/osc*/trigger/sample02"
+  nowT = a
   inc = nowT - oldT2
   oldT2 = nowT
   print inc
@@ -61,7 +61,7 @@ live_loop :sample02 do
     t = current_time
     set :tC2, t
     print current_time
-    sample a[1], amp: a[2]
+    sample b, amp: c
   end
   
 end
@@ -70,8 +70,8 @@ live_loop :synth01 do
   
   use_sched_ahead_time latency
   
-  a = sync "/osc/trigger/synth01"
-  nowT = a[0]
+  a, b, c, d, e, f = sync "/osc*/trigger/synth01"
+  nowT = a
   inc = nowT - oldT3
   oldT3 = nowT
   print inc
@@ -89,7 +89,7 @@ live_loop :synth01 do
     t = current_time
     set :tC3, t
     print current_time
-    synth a[1], note: a[2], cutoff: a[3], sustain: a[4], amp: 0.15
+    synth b, note: c, cutoff: d, sustain: e, amp: f
   end
   
 end

+ 0 - 18
public/defaults/worlds/aframe-ar/assets.json

@@ -1,18 +0,0 @@
-{
-    "bg2":{
-        "tag": "img",
-        "src": "/defaults/assets/checker.jpg"
-    },
-    "sky":{
-        "tag": "img",
-        "src": "/defaults/assets/skyes/sky3.jpg"
-    },
-    "nwtree-obj":{
-        "tag": "a-asset-item",
-        "src": "/defaults/assets/models/nwtree/model.obj"
-    },
-    "nwtree-mtl":{
-        "tag": "a-asset-item",
-        "src": "/defaults/assets/models/nwtree/materials.mtl"
-    }
-}

+ 13 - 0
public/defaults/worlds/aframe-ar/index.vwf.config.json

@@ -0,0 +1,13 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/aframe-ar-driver": null
+  }
+}
+  

+ 0 - 8
public/defaults/worlds/aframe-ar/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "VWF & AFrame Example App - AR"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/aframe-ar-driver:

+ 216 - 0
public/defaults/worlds/aframe-ar/index.vwf.json

@@ -0,0 +1,216 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "transparent": true
+  },
+  "methods": {
+    "initialize": {
+      "body": "    var runModel = vwf_view.kernel.find(\"\", \"/aranchor/model\")[0];\n    vwf_view.kernel.callMethod(runModel, \"run\");\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "assetSky": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "sky",
+        "itemSrc": "/defaults/assets/skyes/sky3.jpg"
+      }
+    },
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "assetNwreeObj": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "nwtree-obj",
+        "itemSrc": "/defaults/assets/models/nwtree/model.obj"
+      }
+    },
+    "assetNwtreeMtl": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "nwtree-mtl",
+        "itemSrc": "/defaults/assets/models/nwtree/materials.mtl"
+      }
+    },
+    "light1": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "ambient",
+        "color": "#BBB"
+      }
+    },
+    "light2": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "directional",
+        "color": "#FFF",
+        "intensity": "0.6",
+        "position": [
+          -0.5,
+          1,
+          1
+        ]
+      }
+    },
+    "arcamera": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          0,
+          0
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "opacity": 0.5,
+        "depth": "0.3",
+        "width": "0.3",
+        "height": "0.5"
+      },
+      "children": {
+        "camera": {
+          "extends": "proxy/aframe/acamera.vwf",
+          "type": "ar",
+          "properties": {
+            "look-controls-enabled": "false",
+            "wasd-controls-enabled": "false",
+            "user-height": "0"
+          }
+        }
+      }
+    },
+    "aranchor": {
+      "extends": "proxy/aframe/a-arjs-anchor.vwf",
+      "properties": {
+        "position": [
+          0,
+          0,
+          -5
+        ],
+        "hit-testing-enabled": "true",
+        "changeMatrixMode": "modelViewMatrix",
+        "preset": "hiro"
+      },
+      "children": {
+        "model": {
+          "extends": "proxy/aframe/aobjmodel.vwf",
+          "properties": {
+            "src": "#nwtree-obj",
+            "mtl": "#nwtree-mtl",
+            "position": [
+              0,
+              0.5,
+              0
+            ],
+            "rotation": [
+              0,
+              2811,
+              0
+            ],
+            "scale": [
+              2,
+              2,
+              2
+            ]
+          },
+          "methods": {
+            "run": {
+              "body": "    var time = vwf.now;\n    let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);\n    this.rotation = [rot[0], rot[1]+2, rot[2]];\n    this.future( 0.05 ).run();\n",
+              "type": "application/javascript"
+            }
+          },
+          "children": {
+            "interpolation": {
+              "extends": "proxy/aframe/interpolation-component.vwf",
+              "properties": {
+                "enabled": true
+              }
+            }
+          }
+        }
+      }
+    },
+    "aranchor2": {
+      "extends": "proxy/aframe/a-arjs-anchor.vwf",
+      "properties": {
+        "position": [
+          -5,
+          0,
+          -5
+        ],
+        "hit-testing-enabled": "true",
+        "changeMatrixMode": "modelViewMatrix",
+        "preset": "kanji"
+      },
+      "children": {
+        "alltext": {
+          "extends": "proxy/aframe/aentity.vwf",
+          "properties": {
+            "position": [
+              0,
+              -1,
+              0
+            ],
+            "rotation": [
+              -15,
+              0,
+              0
+            ]
+          },
+          "children": {
+            "spaceText": {
+              "extends": "proxy/aframe/atext.vwf",
+              "properties": {
+                "value": "Happy New Year 2019!",
+                "color": "#00ffa5",
+                "position": [
+                  -2,
+                  1,
+                  0
+                ],
+                "rotation": [
+                  0,
+                  0,
+                  15
+                ],
+                "scale": [
+                  4,
+                  4,
+                  4
+                ],
+                "side": "double"
+              }
+            },
+            "spaceText2": {
+              "extends": "proxy/aframe/atext.vwf",
+              "properties": {
+                "value": "Project by Krestianstvo.org",
+                "color": "#98b099",
+                "position": [
+                  0,
+                  0.5,
+                  0
+                ],
+                "scale": [
+                  2,
+                  2,
+                  2
+                ],
+                "side": "double"
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 101
public/defaults/worlds/aframe-ar/index.vwf.yaml

@@ -1,101 +0,0 @@
-# A-Frame & VWF simple scene in AR
-# Copyright 2018 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  transparent: true
-  assets: "assets.json"
-children:
-  light1:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "ambient"
-      color: "#BBB"
-  light2:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      color: "#FFF"
-      intensity: 0.6
-      position: "-0.5 1 1"
-  arcamera:    
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "0 0 0"
-      rotation: "0 0 0"
-      opacity: 0.5
-      depth: 0.3
-      width: 0.3
-      height: 0.5
-    children:
-      camera:
-        extends: http://vwf.example.com/aframe/acamera.vwf
-        type: "ar"
-        properties:
-          look-controls-enabled: false
-          wasd-controls-enabled: false
-          user-height: 0
-  aranchor:
-    extends: http://vwf.example.com/aframe/a-arjs-anchor.vwf
-    properties:
-      position: "0 0 -5"
-      hit-testing-enabled: true
-      changeMatrixMode: "modelViewMatrix"
-      preset: "hiro"
-    children:
-      model:
-        extends: http://vwf.example.com/aframe/aobjmodel.vwf
-        properties:
-          src: "#nwtree-obj"
-          mtl: "#nwtree-mtl"
-          position: "0 0.5 0"
-          rotation: "0 -45 0"
-          scale: "2 2 2"
-        children:
-          interpolation:
-            extends: http://vwf.example.com/aframe/interpolation-component.vwf
-            properties:
-              enabled: true
-        methods:
-          run:
-            body: |
-              var time = vwf.now;
-              let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);
-              this.rotation = [rot[0], rot[1]+2, rot[2]];
-              this.future( 0.05 ).run();
-  aranchor2:
-    extends: http://vwf.example.com/aframe/a-arjs-anchor.vwf
-    properties:
-      position: "-5 0 -5"
-      hit-testing-enabled: true
-      changeMatrixMode: "modelViewMatrix"
-      preset: "kanji"
-    children:
-      alltext:
-        extends: http://vwf.example.com/aframe/aentity.vwf
-        properties:
-          position: [0,-1,0]
-          rotation: [-15,0,0]
-        children:
-          spaceText:
-            extends: http://vwf.example.com/aframe/atext.vwf
-            properties:
-              value: "Happy New Year 2019!"
-              color: "#00ffa5"
-              position: [-2,1,0]
-              rotation: "0 0 15"
-              scale: "4 4 4"
-              side: "double"
-          spaceText2:
-            extends: http://vwf.example.com/aframe/atext.vwf
-            properties:
-              value: "Project by Krestianstvo.org"
-              color: "#98b099"
-              position: [0,0.5,0]
-              scale: "2 2 2"
-              side: "double"
-methods:
-  initialize:
-    body: |
-      var runModel = vwf_view.kernel.find("", "/aranchor/model")[0];
-      vwf_view.kernel.callMethod(runModel, "run");

+ 196 - 0
public/defaults/worlds/aframe/index.vwf.json

@@ -0,0 +1,196 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "transparent": true
+  },
+  "methods": {
+    "initialize": {
+      "body": "    var runBox = vwf.find(\"\", \"/sphere/box2\")[0];\n    console.log(runBox);\n    vwf.callMethod(runBox, \"run\");\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "fog": {
+      "extends": "proxy/aframe/aSceneFogComponent.vwf",
+      "type": "component",
+      "properties": {
+        "fogType": "linear",
+        "fogColor": "#ECECEC",
+        "far": 9,
+        "near": 0
+      }
+    },
+    "sky": {
+      "extends": "proxy/aframe/asky.vwf",
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#ECECEC",
+            "side": "back",
+            "fog": false
+          }
+        }
+      }
+    },
+    "light1": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "ambient",
+        "color": "#BBB"
+      }
+    },
+    "light2": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "directional",
+        "color": "#FFF",
+        "intensity": "0.6",
+        "position": [
+          -0.5,
+          1,
+          1
+        ]
+      }
+    },
+    "spaceText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Virtual World Framework & A-Frame",
+        "color": "#b74217",
+        "position": [
+          -2,
+          2.5,
+          -2
+        ]
+      }
+    },
+    "spaceText2": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Project by Krestianstvo.org",
+        "color": "#305b32",
+        "position": [
+          1,
+          3,
+          -4
+        ]
+      }
+    },
+    "box": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          -1,
+          0.5,
+          -3
+        ],
+        "rotation": [
+          0,
+          -30,
+          0
+        ],
+        "depth": "2",
+        "height": "1",
+        "width": "1",
+        "class": "clickable intersectable"
+      },
+      "methods": {
+        "clickEventMethod": {
+          "body": "    let genColor = this.generateColor();\n    this.material.color = genColor\n",
+          "type": "application/javascript"
+        },
+        "intersectEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "clearIntersectEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        },
+        "generateColor": {
+          "body": "    var letters = '0123456789ABCDEF';\n    var color = '#';\n    for (var i = 0; i < 6; i++) {\n    color += letters[Math.floor(this.random() * 16)];\n    } return color\n",
+          "type": "application/javascript"
+        }
+      },
+      "events": {
+        "clickEvent": {},
+        "intersectEvent": {},
+        "clearIntersectEvent": {}
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#3c7249",
+            "transparent": true
+          }
+        },
+        "raycaster-listener": {
+          "extends": "proxy/aframe/app-raycaster-listener-component.vwf",
+          "type": "component"
+        },
+        "cursor-listener": {
+          "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+          "type": "component"
+        }
+      }
+    },
+    "sphere": {
+      "extends": "proxy/aframe/asphere.vwf",
+      "properties": {
+        "position": [
+          1,
+          1.25,
+          -4
+        ],
+        "radius": "1"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#e0e014",
+            "wireframe": true
+          }
+        },
+        "box2": {
+          "extends": "proxy/aframe/abox.vwf",
+          "properties": {
+            "position": [
+              2,
+              -0.75,
+              -0.590282678604126
+            ],
+            "depth": "1",
+            "rotation": [
+              0,
+              0,
+              -59.02826690673828
+            ]
+          },
+          "methods": {
+            "run": {
+              "body": "    var time = vwf.now;\n    let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);\n    let pos = this.position; //AFRAME.utils.coordinates.parse(this.position);\n    this.position = [pos[0], pos[1], Math.sin(time)];\n    this.rotation = [rot[0], rot[1], Math.sin(time)*100];\n    this.future( 0.01 ).run();\n",
+              "type": "application/javascript"
+            }
+          },
+          "children": {
+            "material": {
+              "extends": "proxy/aframe/aMaterialComponent.vwf",
+              "properties": {
+                "color": "#2167a5"
+              }
+            },
+            "interpolation": {
+              "extends": "proxy/aframe/interpolation-component.vwf",
+              "properties": {
+                "enabled": true
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 132
public/defaults/worlds/aframe/index.vwf.yaml

@@ -1,132 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  transparent: true
-children:
-  fog:
-    extends: http://vwf.example.com/aframe/aSceneFogComponent.vwf
-    type: "component"
-    properties:
-      fogType: "linear"
-      fogColor: "#ECECEC"
-      far: 9
-      near: 0
-  sky:
-    extends: http://vwf.example.com/aframe/asky.vwf
-    properties:
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#ECECEC"
-          side: "back"
-          fog: false
-  light1:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "ambient"
-      color: "#BBB"
-  light2:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      color: "#FFF"
-      intensity: 0.6
-      position: "-0.5 1 1"
-  spaceText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Virtual World Framework & A-Frame"
-      color: "#b74217"
-      position: "-2 2.5 -2"
-  spaceText2:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Project by Krestianstvo.org"
-      color: "#305b32"
-      position: "1 3 -4"
-  box:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "-1 0.5 -3"
-      rotation: "0 -30 0"
-      depth: 2
-      height: 1
-      width: 1
-      class: "clickable intersectable"
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#3c7249"
-          transparent: true
-      raycaster-listener:
-        extends: http://vwf.example.com/aframe/app-raycaster-listener-component.vwf
-        type: "component"
-      cursor-listener:
-        extends: http://vwf.example.com/aframe/app-cursor-listener-component.vwf
-        type: "component"
-    events:
-      clickEvent:
-      intersectEvent:
-      clearIntersectEvent:
-    methods:
-      clickEventMethod:
-        body: |
-          let genColor = this.generateColor();
-          this.material.color = genColor 
-      intersectEventMethod:
-        body: |
-          this.material.opacity = 0.7
-      clearIntersectEventMethod:
-        body: |
-          this.material.opacity = 1.0
-      generateColor:
-        body: |
-          var letters = '0123456789ABCDEF';
-          var color = '#';
-          for (var i = 0; i < 6; i++) {
-          color += letters[Math.floor(this.random() * 16)];
-          } return color 
-  sphere:
-    extends: http://vwf.example.com/aframe/asphere.vwf
-    properties:
-      position: "1 1.25 -4"
-      radius: 1
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#e0e014"
-          wireframe: true
-      box2:
-        extends: http://vwf.example.com/aframe/abox.vwf
-        properties:
-          position: "2 -0.75 0"
-          depth: 1
-        children:
-          material:
-            extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-            properties:
-              color: "#2167a5"
-          interpolation:
-            extends: http://vwf.example.com/aframe/interpolation-component.vwf
-            properties:
-              enabled: true
-        methods:
-          run:
-            body: |
-              var time = vwf.now;
-              let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);
-              let pos = this.position; //AFRAME.utils.coordinates.parse(this.position);
-              this.position = [pos[0], pos[1], Math.sin(time)];
-              this.rotation = [rot[0], rot[1], Math.sin(time)*100];
-              this.future( 0.01 ).run();
-methods:
-  initialize:
-    body: |
-      var runBox = vwf.find("", "/sphere/box2")[0];
-      console.log(runBox);
-      vwf.callMethod(runBox, "run");

+ 0 - 3
public/defaults/worlds/aframe2/assets.json

@@ -1,3 +0,0 @@
-{
-    
-}

+ 12 - 0
public/defaults/worlds/aframe2/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/aframe2/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "VWF & AFrame Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 339 - 0
public/defaults/worlds/aframe2/index.vwf.json

@@ -0,0 +1,339 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "transparent": true
+  },
+  "methods": {
+    "initialize": {
+      "body": "    var runBox = vwf.find(\"\", \"/sphere/box2\")[0];\n    console.log(runBox);\n    vwf.callMethod(runBox, \"run\");\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "assetBG": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg",
+        "itemSrc": "/defaults/assets/bg.jpg"
+      }
+    },
+    "assetSky": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "sky",
+        "itemSrc": "/defaults/assets/skyes/sky3.jpg"
+      }
+    },
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "assetPlaneObj": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "plane-obj",
+        "itemSrc": "/defaults/assets/models/plane/PUSHILIN_Plane.obj"
+      }
+    },
+    "assetPlaneMtl": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "plane-mtl",
+        "itemSrc": "/defaults/assets/models/plane/PUSHILIN_Plane.mtl"
+      }
+    },
+    "myLight": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "directional",
+        "intensity": "0.5",
+        "position": [
+          0.5,
+          2,
+          1
+        ],
+        "castShadow": true
+      }
+    },
+    "myLight2": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "ambient",
+        "intensity": "0.5"
+      }
+    },
+    "model": {
+      "extends": "proxy/aframe/aobjmodel.vwf",
+      "properties": {
+        "src": "#plane-obj",
+        "mtl": "#plane-mtl",
+        "position": [
+          -1.2000000476837158,
+          1.7000000476837158,
+          -2.5
+        ],
+        "rotation": [
+          0,
+          -45,
+          0
+        ],
+        "scale": [
+          0.5,
+          0.5,
+          0.5
+        ]
+      },
+      "children": {
+        "shadow": {
+          "extends": "proxy/aframe/shadowComponent.vwf",
+          "properties": {
+            "cast": true
+          }
+        }
+      }
+    },
+    "spaceText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Virtual World Framework & A-Frame",
+        "color": "#ddd",
+        "position": [
+          -2,
+          2.5,
+          -2
+        ]
+      }
+    },
+    "spaceText2": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Project by Krestianstvo.org",
+        "color": "#aaa",
+        "position": [
+          1,
+          3,
+          -4
+        ]
+      }
+    },
+    "boxAnim": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          0,
+          -3
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "depth": "2",
+        "height": "1",
+        "width": "1",
+        "class": "hit"
+      },
+      "methods": {
+        "hitstartEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "hitendEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "aabb-collider-listener": {
+          "extends": "proxy/aframe/app-aabb-collider-listener-component.vwf",
+          "type": "component"
+        },
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#3c7249"
+          }
+        }
+      }
+    },
+    "box": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          -1,
+          0.5,
+          -3
+        ],
+        "rotation": [
+          0,
+          -30,
+          0
+        ],
+        "depth": "2",
+        "height": "1",
+        "width": "1",
+        "class": "clickable intersectable"
+      },
+      "methods": {
+        "clickEventMethod": {
+          "body": "    let genColor = this.generateColor();\n    this.material.color = genColor\n",
+          "type": "application/javascript"
+        },
+        "intersectEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "clearIntersectEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        },
+        "generateColor": {
+          "body": "    var letters = '0123456789ABCDEF';\n    var color = '#';\n    for (var i = 0; i < 6; i++) {\n    color += letters[Math.floor(this.random() * 16)];\n    } return color\n",
+          "type": "application/javascript"
+        }
+      },
+      "events": {
+        "clickEvent": {}
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#3c7249",
+            "transparent": true
+          }
+        },
+        "raycaster-listener": {
+          "extends": "proxy/aframe/app-raycaster-listener-component.vwf",
+          "type": "component"
+        },
+        "cursor-listener": {
+          "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+          "type": "component"
+        },
+        "shadow": {
+          "extends": "proxy/aframe/shadowComponent.vwf",
+          "properties": {
+            "cast": true,
+            "receive": true
+          }
+        }
+      }
+    },
+    "sphere": {
+      "extends": "proxy/aframe/asphere.vwf",
+      "properties": {
+        "position": [
+          1,
+          1.25,
+          -4
+        ],
+        "radius": "1"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#e0e014",
+            "wireframe": true
+          }
+        },
+        "box2": {
+          "extends": "proxy/aframe/abox.vwf",
+          "properties": {
+            "position": [
+              2,
+              -0.75,
+              0.948116660118103
+            ],
+            "depth": "1"
+          },
+          "methods": {
+            "run": {
+              "body": "    var time = vwf.now;\n    let pos = this.position; //AFRAME.utils.coordinates.parse(this.position);\n    this.position = [pos[0], pos[1], Math.sin(time)]\n    this.future( 0.01 ).run();\n",
+              "type": "application/javascript"
+            }
+          },
+          "children": {
+            "raycaster": {
+              "extends": "proxy/aframe/raycasterComponent.vwf",
+              "type": "component",
+              "properties": {
+                "recursive": false,
+                "interval": 10,
+                "far": 2,
+                "objects": ".intersectable"
+              }
+            },
+            "material": {
+              "extends": "proxy/aframe/aMaterialComponent.vwf",
+              "properties": {
+                "color": "#2167a5",
+                "src": "#bg"
+              }
+            },
+            "shadow": {
+              "extends": "proxy/aframe/shadowComponent.vwf",
+              "properties": {
+                "cast": true
+              }
+            },
+            "interpolation": {
+              "extends": "proxy/aframe/interpolation-component.vwf",
+              "properties": {
+                "enabled": true,
+                "deltaPos": 0.001,
+                "deltaRot": 0.1
+              }
+            }
+          }
+        }
+      }
+    },
+    "sky": {
+      "extends": "proxy/aframe/asky.vwf",
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "src": "#sky",
+            "side": "back",
+            "fog": false
+          }
+        }
+      }
+    },
+    "groundPlane": {
+      "extends": "proxy/aframe/aplane.vwf",
+      "properties": {
+        "height": "50",
+        "width": "50",
+        "rotation": [
+          -90,
+          0,
+          0
+        ]
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "repeat": "10 10",
+            "color": "white",
+            "src": "#bg2"
+          }
+        },
+        "shadow": {
+          "extends": "proxy/aframe/shadowComponent.vwf",
+          "properties": {
+            "receive": true
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 220
public/defaults/worlds/aframe2/index.vwf.yaml

@@ -1,220 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  transparent: true
-  assets: "assets.json"
-children:
-  assetBG:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "bg"
-      itemSrc: "/defaults/assets/bg.jpg"
-  assetSky:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "sky"
-      itemSrc: "/defaults/assets/skyes/sky3.jpg"
-  assetBG2:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "bg2"
-      itemSrc: "/defaults/assets/checker.jpg"
-  assetPlaneObj:
-    extends: http://vwf.example.com/aframe/a-asset-item.vwf
-    properties:
-      itemID: "plane-obj"
-      itemSrc: "/defaults/assets/models/plane/PUSHILIN_Plane.obj"
-  assetPlaneMtl:
-    extends: http://vwf.example.com/aframe/a-asset-item.vwf
-    properties:
-      itemID: "plane-mtl"
-      itemSrc: "/defaults/assets/models/plane/PUSHILIN_Plane.mtl"
-  myLight:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      intensity: 0.5
-      position: "0.5 2.0 1.0"
-      castShadow: true
-  myLight2:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "ambient"
-      intensity: 0.5
-  model:
-    extends: http://vwf.example.com/aframe/aobjmodel.vwf
-    properties:
-      src: "#plane-obj"
-      mtl: "#plane-mtl"
-      position: "-1.2 1.7 -2.5"
-      rotation: "0 -45 0"
-      scale: [0.5, 0.5, 0.5]
-    children:
-      shadow:
-        extends: http://vwf.example.com/aframe/shadowComponent.vwf
-        properties:
-          cast: true
-  spaceText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Virtual World Framework & A-Frame"
-      color: "#ddd"
-      position: "-2 2.5 -2"
-  spaceText2:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Project by Krestianstvo.org"
-      color: "#aaa"
-      position: "1 3 -4"
-  boxAnim:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "0 0 -3"
-      rotation: "0 0 0"
-      depth: 2
-      height: 1
-      width: 1
-      class: "hit"
-    methods:
-      hitstartEventMethod:
-        body: |
-          this.material.opacity = 0.7
-      hitendEventMethod:
-        body: |
-          this.material.opacity = 1.0
-    children:
-      aabb-collider-listener:
-        extends: http://vwf.example.com/aframe/app-aabb-collider-listener-component.vwf
-        type: "component"
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#3c7249"
-  box:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "-1 0.5 -3"
-      rotation: "0 -30 0"
-      depth: 2
-      height: 1
-      width: 1
-      class: "clickable intersectable"
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#3c7249"
-          transparent: true
-      raycaster-listener:
-        extends: http://vwf.example.com/aframe/app-raycaster-listener-component.vwf
-        type: "component"
-      cursor-listener:
-        extends: http://vwf.example.com/aframe/app-cursor-listener-component.vwf
-        type: "component"
-      shadow:
-        extends: http://vwf.example.com/aframe/shadowComponent.vwf
-        properties:
-          cast: true
-          receive: true
-    events:
-      clickEvent:
-    methods:
-      clickEventMethod:
-        body: |
-            let genColor = this.generateColor();
-            this.material.color = genColor 
-      intersectEventMethod:
-        body: |
-          this.material.opacity = 0.7
-      clearIntersectEventMethod:
-        body: |
-          this.material.opacity = 1.0
-      generateColor:
-        body: |
-          var letters = '0123456789ABCDEF';
-          var color = '#';
-          for (var i = 0; i < 6; i++) {
-          color += letters[Math.floor(this.random() * 16)];
-          } return color 
-  sphere:
-    extends: http://vwf.example.com/aframe/asphere.vwf
-    properties:
-      position: "1 1.25 -4"
-      radius: 1
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#e0e014"
-          wireframe: true
-      box2:
-        extends: http://vwf.example.com/aframe/abox.vwf
-        properties:
-          position: "2 -0.75 0"
-          depth: 1
-        children:
-          raycaster:
-            extends: http://vwf.example.com/aframe/raycasterComponent.vwf
-            type: "component"
-            properties:
-              recursive: false
-              interval: 10
-              far: 2
-              objects: ".intersectable"  
-          material:
-            extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-            properties:
-              color: "#2167a5"
-              src: "#bg"
-          shadow:
-            extends: http://vwf.example.com/aframe/shadowComponent.vwf
-            properties:
-              cast: true
-          interpolation:
-            extends: http://vwf.example.com/aframe/interpolation-component.vwf
-            properties:
-              enabled: true
-              deltaPos: 0.001
-              deltaRot: 0.1
-        methods:
-          run:
-            body: |
-              var time = vwf.now;
-              let pos = this.position; //AFRAME.utils.coordinates.parse(this.position);
-              this.position = [pos[0], pos[1], Math.sin(time)]
-              this.future( 0.01 ).run();
-  sky:
-    extends: http://vwf.example.com/aframe/asky.vwf
-    properties:
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          src: "#sky"
-          side: "back"
-          fog: false
-  groundPlane:
-    extends: http://vwf.example.com/aframe/aplane.vwf
-    properties:
-      height: 50
-      width: 50
-      rotation: "-90 0 0"
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          repeat: "10 10"
-          color: "white"
-          src: "#bg2"
-      shadow:
-        extends: http://vwf.example.com/aframe/shadowComponent.vwf
-        properties:
-          receive: true
-methods:
-  initialize:
-    body: |
-      var runBox = vwf.find("", "/sphere/box2")[0];
-      console.log(runBox);
-      vwf.callMethod(runBox, "run");

+ 0 - 14
public/defaults/worlds/gearvr/assets.json

@@ -1,14 +0,0 @@
-{
-    "bg":{
-        "tag": "img",
-        "src": "/defaults/assets/bg.jpg"
-    },
-    "sky":{
-        "tag": "img",
-        "src": "/defaults/assets/skyes/sky3.jpg"
-    },
-     "bg2":{
-        "tag": "img",
-        "src": "/defaults/assets/checker.jpg"
-    }
-}

+ 12 - 0
public/defaults/worlds/gearvr/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/gearvr/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "GearVR Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe: {gearvr: true, wmrleft: true, wmrright: true}
-  vwf/view/editor-new:

+ 115 - 0
public/defaults/worlds/gearvr/index.vwf.json

@@ -0,0 +1,115 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "fog": "type: linear; color: #ECECEC; far: 20; near: 0"
+  },
+  "children": {
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "myLight": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "point",
+        "color": "white",
+        "position": [
+          0,
+          10,
+          5
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ]
+      }
+    },
+    "groundPlane": {
+      "extends": "proxy/aframe/aplane.vwf",
+      "properties": {
+        "height": "50",
+        "width": "50",
+        "rotation": [
+          -90,
+          0,
+          0
+        ]
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "wireframe": false,
+            "src": "#bg2",
+            "repeat": "10 10"
+          }
+        }
+      }
+    },
+    "spaceText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Virtual World Framework & VR Controllers",
+        "color": "#2b5d83",
+        "position": [
+          -2,
+          2.5,
+          -3
+        ]
+      }
+    },
+    "cube": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          1,
+          -3
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "depth": "1",
+        "height": "1",
+        "width": "1",
+        "class": "gearvrhit"
+      },
+      "methods": {
+        "hitstartEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "hitendEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#3c7249"
+          }
+        },
+        "aabb-collider-listener": {
+          "extends": "proxy/aframe/app-aabb-collider-listener-component.vwf",
+          "type": "component"
+        }
+      }
+    },
+    "newSky": {
+      "extends": "proxy/aframe/aentity.vwf",
+      "children": {
+        "skyshader": {
+          "extends": "proxy/aframe/app-skyshader-component.vwf"
+        }
+      }
+    }
+  }
+}

+ 0 - 63
public/defaults/worlds/gearvr/index.vwf.yaml

@@ -1,63 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  fog: "type: linear; color: #ECECEC; far: 20; near: 0"
-  assets: "assets.json"
-children:
-  myLight:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "point"
-      color: "white"
-      position: "0 10 5"
-      rotation: "0 0 0"
-  groundPlane:
-    extends: http://vwf.example.com/aframe/aplane.vwf
-    properties:
-        height: 50
-        width: 50
-        rotation: [-90, 0, 0]
-    children:    
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          wireframe: false
-          src: "#bg2"
-          repeat: "10 10"
-  spaceText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Virtual World Framework & VR Controllers"
-      color: "#2b5d83"
-      position: [-2, 2.5, -3]
-  cube:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "0 1 -3"
-      rotation: "0 0 0"
-      depth: 1
-      height: 1
-      width: 1
-      class: "gearvrhit"
-    children:    
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#3c7249"
-      aabb-collider-listener:
-        extends: http://vwf.example.com/aframe/app-aabb-collider-listener-component.vwf
-        type: "component"
-    methods:
-      hitstartEventMethod:
-        body: |
-          this.material.opacity = 0.7
-      hitendEventMethod:
-        body: |
-          this.material.opacity = 1.0
-  newSky:
-    extends: http://vwf.example.com/aframe/aentity.vwf
-    children:
-      skyshader:
-        extends: http://vwf.example.com/aframe/app-skyshader-component.vwf

+ 0 - 18
public/defaults/worlds/multipixel/assets.json

@@ -1,18 +0,0 @@
-{
-    "bg2":{
-        "tag": "img",
-        "src": "/defaults/assets/checker.jpg"
-    },
-    "sky":{
-        "tag": "img",
-        "src": "/defaults/assets/skyes/sky3.jpg"
-    },
-    "nwtree-obj":{
-        "tag": "a-asset-item",
-        "src": "/defaults/assets/models/nwtree/model.obj"
-    },
-    "nwtree-mtl":{
-        "tag": "a-asset-item",
-        "src": "/defaults/assets/models/nwtree/materials.mtl"
-    }
-}

+ 12 - 0
public/defaults/worlds/multipixel/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/multipixel/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "VWF & AFrame Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 362 - 0
public/defaults/worlds/multipixel/index.vwf.json

@@ -0,0 +1,362 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "transparent": true
+  },
+  "methods": {
+    "initialize": {
+      "body": "    console.log(\"initializing...\");\n    this.children.multicam.camera1.createCamera(3000, 2000, 0, 0, 1500, 2000);\n    this.children.multicam.camera2.createCamera(3000, 2000, 1500, 0, 1500, 2000);\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "assetSky": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "sky",
+        "itemSrc": "/defaults/assets/skyes/sky3.jpg"
+      }
+    },
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "assetNwreeObj": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "nwtree-obj",
+        "itemSrc": "/defaults/assets/models/nwtree/model.obj"
+      }
+    },
+    "assetNwtreeMtl": {
+      "extends": "proxy/aframe/a-asset-item.vwf",
+      "properties": {
+        "itemID": "nwtree-mtl",
+        "itemSrc": "/defaults/assets/models/nwtree/materials.mtl"
+      }
+    },
+    "sky": {
+      "extends": "proxy/aframe/asky.vwf",
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#ECECEC",
+            "side": "back",
+            "fog": false
+          }
+        }
+      }
+    },
+    "myLightSG": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "directional",
+        "color": "white",
+        "position": [
+          6,
+          22,
+          6
+        ],
+        "rotation": [
+          -77,
+          85,
+          64
+        ]
+      }
+    },
+    "myLightSB": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "spot",
+        "color": "blue",
+        "position": [
+          0,
+          5,
+          -25
+        ],
+        "rotation": [
+          0,
+          0,
+          150
+        ]
+      }
+    },
+    "myLightSR": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "spot",
+        "color": "red",
+        "position": [
+          0,
+          5,
+          -25
+        ],
+        "rotation": [
+          0,
+          -3,
+          150
+        ]
+      }
+    },
+    "model": {
+      "extends": "proxy/aframe/aobjmodel.vwf",
+      "properties": {
+        "src": "#nwtree-obj",
+        "mtl": "#nwtree-mtl",
+        "position": [
+          -1,
+          6,
+          -25
+        ],
+        "rotation": [
+          0,
+          -45,
+          0
+        ],
+        "scale": [
+          20,
+          20,
+          20
+        ]
+      },
+      "methods": {
+        "run": {
+          "body": "    var time = vwf.now;\n    let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);\n    this.rotation = [rot[0], Math.sin(time)*50, rot[2]];\n    this.future( 0.01 ).run();\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "interpolation": {
+          "extends": "proxy/aframe/interpolation-component.vwf",
+          "properties": {
+            "enabled": true
+          }
+        }
+      }
+    },
+    "spaceText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Happy New Year 2018!",
+        "color": "#d5ebda",
+        "position": [
+          -19,
+          5,
+          -30
+        ],
+        "rotation": [
+          0,
+          0,
+          45
+        ],
+        "scale": [
+          9,
+          9,
+          9
+        ]
+      }
+    },
+    "spaceText2": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Project by Krestianstvo.org",
+        "color": "#305b32",
+        "position": [
+          5,
+          10,
+          -30
+        ],
+        "scale": [
+          5,
+          5,
+          5
+        ]
+      }
+    },
+    "box": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          10,
+          0.5,
+          0
+        ],
+        "rotation": [
+          0,
+          -30,
+          0
+        ],
+        "depth": "2",
+        "height": "5",
+        "width": "2"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#3c7249"
+          }
+        }
+      }
+    },
+    "sphere": {
+      "extends": "proxy/aframe/asphere.vwf",
+      "properties": {
+        "position": [
+          7,
+          15,
+          -25
+        ],
+        "radius": "5"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#e0e014",
+            "wireframe": true
+          }
+        }
+      }
+    },
+    "box2": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          0,
+          -35
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "depth": "1",
+        "height": "50",
+        "width": "50"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "white"
+          }
+        }
+      }
+    },
+    "groundPlane": {
+      "extends": "proxy/aframe/aplane.vwf",
+      "properties": {
+        "height": "100",
+        "width": "100",
+        "rotation": [
+          -90,
+          0,
+          0
+        ]
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "white",
+            "wireframe": false,
+            "src": "#bg2",
+            "repeat": "10 10"
+          }
+        }
+      }
+    },
+    "multicam": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          4,
+          -2
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "depth": "0.5",
+        "height": "0.5",
+        "width": "0.5"
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "opacity": 0.5,
+            "transparent": true,
+            "color": "green"
+          }
+        },
+        "interpolation": {
+          "extends": "proxy/aframe/interpolation-component.vwf",
+          "properties": {
+            "enabled": true
+          }
+        },
+        "camera1": {
+          "extends": "proxy/aframe/offsetcamera.vwf",
+          "children": {
+            "cam": {
+              "extends": "proxy/aframe/acamera.vwf",
+              "properties": {
+                "look-controls-enabled": "false",
+                "wasd-controls-enabled": "false",
+                "user-height": "0"
+              },
+              "children": {
+                "viewoffset": {
+                  "extends": "proxy/aframe/viewOffsetCamera-component.vwf",
+                  "properties": {
+                    "fullWidth": 3000,
+                    "fullHeight": 2000,
+                    "xoffset": 0,
+                    "yoffset": 0,
+                    "subcamWidth": 1500,
+                    "subcamHeight": 2000
+                  }
+                }
+              }
+            }
+          }
+        },
+        "camera2": {
+          "extends": "proxy/aframe/offsetcamera.vwf",
+          "children": {
+            "cam": {
+              "extends": "proxy/aframe/acamera.vwf",
+              "properties": {
+                "look-controls-enabled": "false",
+                "wasd-controls-enabled": "false",
+                "user-height": "0"
+              },
+              "children": {
+                "viewoffset": {
+                  "extends": "proxy/aframe/viewOffsetCamera-component.vwf",
+                  "properties": {
+                    "fullWidth": 3000,
+                    "fullHeight": 2000,
+                    "xoffset": 1500,
+                    "yoffset": 0,
+                    "subcamWidth": 1500,
+                    "subcamHeight": 2000
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 155
public/defaults/worlds/multipixel/index.vwf.yaml

@@ -1,155 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
-# Christmas tree model by 14islands Lab Made with Blocks Public / Remixable (CC-BY) https://poly.google.com/view/2VSoAQN6JoH
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  transparent: true
-  assets: "assets.json"
-children:
-  sky:
-    extends: http://vwf.example.com/aframe/asky.vwf
-    properties:
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#ECECEC"
-          side: "back"
-          fog: false
-  myLightSG:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      color: "white"
-      position: "6 22 6"
-      rotation: "-77 85 64"
-  myLightSB:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "spot"
-      color: "blue"
-      position: "0 5 -25"
-      rotation: "0 0 150"
-  myLightSR:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "spot"
-      color: "red"
-      position: "0 5 -25"
-      rotation: "0 -3 150"
-  model:
-    extends: http://vwf.example.com/aframe/aobjmodel.vwf
-    properties:
-      src: "#nwtree-obj"
-      mtl: "#nwtree-mtl"
-      position: "-1 6 -25"
-      rotation: "0 -45 0"
-      scale: "20 20 20"
-    children:
-      interpolation:
-        extends: http://vwf.example.com/aframe/interpolation-component.vwf
-        properties:
-          enabled: true
-    methods:
-          run:
-            body: |
-              var time = vwf.now;
-              let rot = this.rotation; //AFRAME.utils.coordinates.parse(this.rotation);
-              this.rotation = [rot[0], Math.sin(time)*50, rot[2]];
-              this.future( 0.01 ).run();
-  spaceText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Happy New Year 2018!"
-      color: "#d5ebda"
-      position: "-19 5 -30"
-      rotation: "0 0 45"
-      scale: "9 9 9"
-  spaceText2:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Project by Krestianstvo.org"
-      color: "#305b32"
-      position: "5 10 -30"
-      scale: "5 5 5"
-  box:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "10 0.5 0"
-      rotation: "0 -30 0"
-      depth: 2
-      height: 5
-      width: 2
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#3c7249"
-  sphere:
-    extends: http://vwf.example.com/aframe/asphere.vwf
-    properties:
-      position: "7 15 -25"
-      radius: 5
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#e0e014"
-          wireframe: true
-  box2:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "0 0 -35"
-      rotation: "0 0 0"
-      depth: 1
-      height: 50
-      width: 50
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "white"
-  groundPlane:
-    extends: http://vwf.example.com/aframe/aplane.vwf
-    properties:
-      height: 100
-      width: 100
-      rotation: "-90 0 0"
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "white"
-          wireframe: false
-          src: "#bg2"
-          repeat: "10 10"
-  multicam:
-      extends: http://vwf.example.com/aframe/abox.vwf
-      properties:
-        position: "0 4 -2"
-        rotation: "0 0 0"
-        depth: 0.5
-        height: 0.5
-        width: 0.5
-      children:
-        material:
-          extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-          properties:
-            opacity: 0.5
-            transparent: true
-            color: "green"
-        interpolation:
-          extends: http://vwf.example.com/aframe/interpolation-component.vwf
-          properties:
-            enabled: true
-        camera1:
-          extends: http://vwf.example.com/aframe/offsetcamera.vwf
-        camera2:
-          extends: http://vwf.example.com/aframe/offsetcamera.vwf
-methods:
-  initialize:
-    body: |
-          console.log("initializing...");
-          this.children.multicam.camera1.createCamera(3000, 2000, 0, 0, 1500, 2000);
-          this.children.multicam.camera2.createCamera(3000, 2000, 1500, 0, 1500, 2000);

+ 0 - 6
public/defaults/worlds/ohmlang-calc/assets.json

@@ -1,6 +0,0 @@
-{
-     "bg2":{
-        "tag": "img",
-        "src": "/defaults/assets/checker.jpg"
-    }
-}

+ 12 - 0
public/defaults/worlds/ohmlang-calc/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/ohmlang-calc/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "Ohm calculator Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 140 - 0
public/defaults/worlds/ohmlang-calc/index.vwf.json

@@ -0,0 +1,140 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "methods": {
+    "initialize": {
+      "body": "    var calc = vwf_view.kernel.find(\"\", \"/calcText\")[0];\n    console.log(calc);\n    vwf_view.kernel.callMethod(calc, \"calcMe\");\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "light1": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "ambient",
+        "color": "#BBB"
+      }
+    },
+    "light2": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "directional",
+        "color": "#FFF",
+        "intensity": "0.6",
+        "position": [
+          -0.5,
+          1,
+          1
+        ]
+      }
+    },
+    "groundPlane": {
+      "extends": "proxy/aframe/aplane.vwf",
+      "properties": {
+        "height": "50",
+        "width": "50",
+        "rotation": [
+          -90,
+          0,
+          0
+        ]
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "wireframe": false,
+            "src": "#bg2",
+            "repeat": "10 10"
+          }
+        }
+      }
+    },
+    "calcResult": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "",
+        "color": "#1d7027",
+        "position": [
+          1,
+          2.5,
+          -2
+        ],
+        "scale": [
+          3,
+          3,
+          3
+        ],
+        "side": "double"
+      }
+    },
+    "calcText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": {
+          "set": "this.value = value; this.calcMe()",
+          "get": "return this.value",
+          "value": "1 * pi"
+        },
+        "color": "#b74217",
+        "position": [
+          -1,
+          2.5,
+          -2
+        ],
+        "scale": [
+          2,
+          2,
+          2
+        ],
+        "side": "double"
+      },
+      "methods": {
+        "calcMe": {
+          "body": "    let match = this.calcLang.grammar.match(this.value);\n    if (match.succeeded()){\n      if (typeof this.calcLang.semantics === 'function'){\n    let result = this.calcLang.semantics(match).interpret(); \n if (this.parent.calcResult && (typeof this.parent.calcResult.value == 'string')) {\n this.parent.calcResult.value = result \n} \n   }}\n    //this.future( 0.1 ).calcMe();\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "calcLang": {
+          "extends": "proxy/ohm/node.vwf",
+          "properties": {
+            "ohmLang": "Arithmetic {\n      Exp\n        = AddExp\n\n      AddExp\n        = AddExp \"+\" MulExp  -- plus\n        | AddExp \"-\" MulExp  -- minus\n        | MulExp\n\n      MulExp\n        = MulExp \"*\" ExpExp  -- times\n        | MulExp \"/\" ExpExp  -- divide\n        | ExpExp\n\n      ExpExp\n        = PriExp \"^\" ExpExp  -- power\n        | PriExp\n\n      PriExp\n        = \"(\" Exp \")\"  -- paren\n        | \"+\" PriExp   -- pos\n        | \"-\" PriExp   -- neg\n        | ident\n        | number\n      ident  (an identifier)\n        = letter alnum*\n\n      number  (a number)\n        = digit* \".\" digit+  -- fract\n        | digit+             -- whole\n    }\n"
+          },
+          "methods": {
+            "initLang": {
+              "body": "    console.log(\"add operations to semantics\")\n    this.addOperationLang();\n",
+              "type": "application/javascript"
+            },
+            "addOperationLang": {
+              "body": "    var constants = {pi: Math.PI, e: Math.E};\n    this.semantics.addOperation('interpret', {\n    Exp: function(e) {\n         return e.interpret();  \n      },\n    AddExp: function(e) {\n      return e.interpret();\n    },\n    AddExp_plus: function(x, _, y) {\n      return x.interpret() + y.interpret();\n    },\n    AddExp_minus: function(x, _, y) {\n      return x.interpret() - y.interpret();\n    },\n    MulExp:        function(e)         { return e.interpret(); },\n    MulExp_times:  function(x, _, y)   { return x.interpret() * y.interpret(); },\n    MulExp_divide: function(x, _, y)   { return x.interpret() / y.interpret(); },\n    ExpExp:        function(e)         { return e.interpret(); },\n    ExpExp_power:  function(x, _, y)   { return Math.pow(x.interpret(), y.interpret()); },\n    PriExp:        function(e)         { return e.interpret(); },\n    PriExp_paren:  function(_l, e, _r) { return e.interpret(); },\n    PriExp_pos:    function(_, e)      { return e.interpret(); },\n    PriExp_neg:    function(_, e)      { return -e.interpret(); },\n    ident: function(_l, _ns) {\n    // Look up the value of a named constant, e.g., 'pi'.\n    return constants[this.sourceString] || 0;\n    },\n      number: function(_) {\n        // Use `parseFloat` to convert (e.g.) the string '123' to the number 123.\n        return parseFloat(this.sourceString);\n      }\n        })\n",
+              "type": "application/javascript"
+            },
+            "testLang": {
+              "body": "    var match = this.grammar.match('2+2');\n    console.log(match);\n    var res = this.semantics(match).interpret();\n    console.log(res);\n",
+              "type": "application/javascript"
+            }
+          }
+        }
+      }
+    },
+    "sky": {
+      "extends": "proxy/aframe/asky.vwf",
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#ECECEC",
+            "side": "back"
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 155
public/defaults/worlds/ohmlang-calc/index.vwf.yaml

@@ -1,155 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-    assets: "assets.json"
-methods:
-  initialize:
-    body: |
-      var calc = vwf_view.kernel.find("", "/calcResult")[0];
-      console.log(calc);
-      vwf_view.kernel.callMethod(calc, "calcMe");
-children:
-  light1:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "ambient"
-      color: "#BBB"
-  light2:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      color: "#FFF"
-      intensity: 0.6
-      position: "-0.5 1 1"
-  groundPlane:
-    extends: http://vwf.example.com/aframe/aplane.vwf
-    properties:
-      height: 50
-      width: 50
-      rotation: [-90, 0, 0]
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          wireframe: false
-          src: "#bg2"
-          repeat: "10 10"
-  calcResult:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "no result"
-      color: "#1d7027"
-      position: [1, 2.5, -2]
-      scale: [3, 3, 3]
-      side: "double"
-    methods:
-      calcMe:
-        body: |
-          let match = this.parent.calcText.calcLang.grammar.match(this.parent.calcText.value);
-          if (match.succeeded()){
-            if (typeof this.parent.calcText.calcLang.semantics === 'function'){
-          this.value = this.parent.calcText.calcLang.semantics(match).interpret()}
-          }
-          this.future( 0.1 ).calcMe();
-  calcText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "1 * pi"
-      color: "#b74217"
-      position: [-1, 2.5, -2]
-      scale: [2, 2, 2]
-      side: "double"
-    children:
-      calcLang:
-        extends: http://vwf.example.com/ohm/node.vwf
-        properties:
-          grammar:
-          semantics:
-          ohmLang: |
-              Arithmetic {
-                    Exp
-                      = AddExp
-
-                    AddExp
-                      = AddExp "+" MulExp  -- plus
-                      | AddExp "-" MulExp  -- minus
-                      | MulExp
-
-                    MulExp
-                      = MulExp "*" ExpExp  -- times
-                      | MulExp "/" ExpExp  -- divide
-                      | ExpExp
-
-                    ExpExp
-                      = PriExp "^" ExpExp  -- power
-                      | PriExp
-
-                    PriExp
-                      = "(" Exp ")"  -- paren
-                      | "+" PriExp   -- pos
-                      | "-" PriExp   -- neg
-                      | ident
-                      | number
-                    ident  (an identifier)
-                      = letter alnum*
-
-                    number  (a number)
-                      = digit* "." digit+  -- fract
-                      | digit+             -- whole
-                  }
-        methods:
-          initLang:
-            body: |
-              console.log("add operations to semantics")
-              this.addOperationLang();
-          addOperationLang:
-            body: |
-              var constants = {pi: Math.PI, e: Math.E};
-              this.semantics.addOperation('interpret', {
-              Exp: function(e) {
-                   return e.interpret();  
-                },
-              AddExp: function(e) {
-                return e.interpret();
-              },
-              AddExp_plus: function(x, _, y) {
-                return x.interpret() + y.interpret();
-              },
-              AddExp_minus: function(x, _, y) {
-                return x.interpret() - y.interpret();
-              },
-              MulExp:        function(e)         { return e.interpret(); },
-              MulExp_times:  function(x, _, y)   { return x.interpret() * y.interpret(); },
-              MulExp_divide: function(x, _, y)   { return x.interpret() / y.interpret(); },
-              ExpExp:        function(e)         { return e.interpret(); },
-              ExpExp_power:  function(x, _, y)   { return Math.pow(x.interpret(), y.interpret()); },
-              PriExp:        function(e)         { return e.interpret(); },
-              PriExp_paren:  function(_l, e, _r) { return e.interpret(); },
-              PriExp_pos:    function(_, e)      { return e.interpret(); },
-              PriExp_neg:    function(_, e)      { return -e.interpret(); },
-              ident: function(_l, _ns) {
-              // Look up the value of a named constant, e.g., 'pi'.
-              return constants[this.sourceString] || 0;
-              },
-                number: function(_) {
-                  // Use `parseFloat` to convert (e.g.) the string '123' to the number 123.
-                  return parseFloat(this.sourceString);
-                }
-                  })
-          testLang:
-            body: |
-              var match = this.grammar.match('2+2');
-              console.log(match);
-              var res = this.semantics(match).interpret();
-              console.log(res);
-  sky:
-    extends: http://vwf.example.com/aframe/asky.vwf
-    properties:
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#ECECEC"
-          side: "back"

+ 0 - 6
public/defaults/worlds/ohmlang-lsys/assets.json

@@ -1,6 +0,0 @@
-{
-     "bg2":{
-        "tag": "img",
-        "src": "/defaults/assets/checker.jpg"
-    }
-}

+ 12 - 0
public/defaults/worlds/ohmlang-lsys/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/ohmlang-lsys/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "Ohm L-System example app"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 227 - 0
public/defaults/worlds/ohmlang-lsys/index.vwf.json

@@ -0,0 +1,227 @@
+{
+	"extends": "proxy/aframe/ascene.vwf",
+	"methods": {
+		"initialize": {
+			"body": "    console.log(\"initialising scene\");\n",
+			"type": "application/javascript"
+		},
+		"drawLSys1": {
+			"body": "    this.turtle.makeLSys()\n",
+			"type": "application/javascript"
+		},
+		"testTurtle": {
+			"body": "    this.turtle.goForward(1);\n    this.turtle.goForward(1);\n    this.turtle.turn(45);\n    this.turtle.goForward(1);\n    this.turtle.goForward(1);\n    this.turtle.turn(45);\n    this.turtle.goForward(1);\n",
+			"type": "application/javascript"
+		}
+	},
+	"children": {
+		"assetBG2": {
+			"extends": "proxy/aframe/a-asset-image-item.vwf",
+			"properties": {
+				"itemID": "bg2",
+				"itemSrc": "/defaults/assets/checker.jpg"
+			}
+		},
+		"skySun": {
+			"extends": "proxy/aframe/aentity.vwf",
+			"children": {
+				"sun": {
+					"extends": "proxy/aframe/app-sun-component.vwf"
+				}
+			}
+		},
+		"newSky": {
+			"extends": "proxy/aframe/aentity.vwf",
+			"children": {
+				"skyshader": {
+					"extends": "proxy/aframe/app-skyshader-component.vwf"
+				}
+			}
+		},
+		"groundPlane": {
+			"extends": "proxy/aframe/aplane.vwf",
+			"properties": {
+				"height": "50",
+				"width": "50",
+				"rotation": [
+					-90,
+					0,
+					0
+				]
+			},
+			"children": {
+				"material": {
+					"extends": "proxy/aframe/aMaterialComponent.vwf",
+					"properties": {
+						"wireframe": false,
+						"src": "#bg2",
+						"repeat": "10 10"
+					}
+				}
+			}
+		},
+		"turtle": {
+			"extends": "proxy/aframe/asphere.vwf",
+			"properties": {
+				"position": [
+					1,
+					1.25,
+					-4
+				],
+				"radius": "0.2",
+				"angleInRadians": {
+					"value": 0,
+					"get": "",
+					"set": ""
+				},
+				"iteration": {
+					"value": 5,
+					"get": "",
+					"set": ""
+				},
+				"angle": {
+					"value": 60,
+					"get": "",
+					"set": ""
+				},
+				"stepLength": {
+					"value": 0.3,
+					"get": "",
+					"set": ""
+				},
+				"rule": {
+					"value": "F",
+					"get": "",
+					"set": ""
+				},
+				"axiomF": {
+					"value": "G-F-G",
+					"get": "",
+					"set": ""
+				},
+				"axiomG": {
+					"value": "F+G+F",
+					"get": "",
+					"set": ""
+				},
+				"lsys": {
+					"value": "",
+					"get": "",
+					"set": ""
+				},
+				"readyForDraw": {
+					"value": true,
+					"get": "",
+					"set": ""
+				}
+			},
+			"methods": {
+				"parseLSys": {
+					"body": "    var str = this.rule;\n    var axioms = {\"F\": this.axiomF, \"G\": this.axiomG};\n    for (var i = 1; i < this.iteration; i++)\n    {\n        var match = this.lsysLang.grammar.match(str, 'Gen<\"y\">');\n        if (match.succeeded()){\n        var res = this.lsysLang.semantics(match).gen(axioms);\n        str = res.join(\"\");\n        }\n    }\n    console.log(str);\n    this.lsys = str;\n",
+					"type": "application/javascript"
+				},
+				"makeLSys": {
+					"body": "    if (this.readyForDraw){\n    this.drawNode.position = [0, 0, 0]\n    this.angleInRadians = 0;\n    this.drawNode.linepath.path = [];\n    this.parseLSys();\n    this.drawLSys();\n    this.drawNode.position = [0, 0, 0]\n    }\n",
+					"type": "application/javascript"
+				},
+				"drawLSys": {
+					"body": "    var match = this.turtleLang.grammar.match(this.lsys, 'Draw<\"1\",\"1\">');\n    if (match.succeeded()){\n        var res = this.turtleLang.semantics(match).draw(this.stepLength, this.angle);\n    }\n",
+					"type": "application/javascript"
+				},
+				"turn": {
+					"parameters": [
+						"angle"
+					],
+					"body": "    var angle0 = this.angleInRadians;\n    var targetAngle = angle * Math.PI / 180.0;\n    this.angleInRadians = angle0 + targetAngle;\n",
+					"type": "application/javascript"
+				},
+				"goForward": {
+					"parameters": [
+						"step"
+					],
+					"body": "    let pos = this.drawNode.position;\n    var x0 = pos[0];\n    var y0 = pos[1];\n    var xx = Math.sin(this.angleInRadians);\n    var yy = Math.cos(this.angleInRadians);\n    let startPosition = {x: pos[0], y: pos[1], z:pos[2]};\n    let endPosition = {x: x0 + step * xx, y: y0 + step * yy, z: pos[2]};\n    var drawPath = this.drawNode.linepath.path.slice();\n    drawPath.push(startPosition);\n    drawPath.push(endPosition);\n    this.drawNode.linepath.path = drawPath;\n    this.drawNode.position = [endPosition.x, endPosition.y, endPosition.z];\n",
+					"type": "application/javascript"
+				},
+				"setTurtleParams": {
+					"parameters": [
+						"val"
+					],
+					"body": "    this.readyForDraw = false;\n    val.forEach(el => {\n        this[el[0]] = el[1]\n    })\n    this.readyForDraw = true;\n    this.makeLSys();\n",
+					"type": "application/javascript"
+				},
+				"initialize": {
+					"body": "    //this.redrawEvent = function(){this.makeLSys()}\n    vwf_view.kernel.callMethod(this.id, \"makeLSys\");\n    console.log(\"initialising turtle\");\n",
+					"type": "application/javascript"
+				}
+			},
+			"children": {
+				"interpolation": {
+					"extends": "proxy/aframe/interpolation-component.vwf",
+					"properties": {
+						"enabled": true
+					}
+				},
+				"material": {
+					"extends": "proxy/aframe/aMaterialComponent.vwf",
+					"properties": {
+						"wireframe": true,
+						"color": "#e0e014"
+					}
+				},
+				"drawNode": {
+					"extends": "proxy/aframe/aentity.vwf",
+					"properties": {
+						"position": [
+							0,
+							0,
+							0
+						]
+					},
+					"children": {
+						"linepath": {
+							"extends": "proxy/aframe/linepath.vwf",
+							"properties": {
+								"color": "#445447",
+								"path": [
+								],
+								"width": 0.02
+							}
+						}
+					}
+				},
+				"lsysLang": {
+					"extends": "proxy/ohm/node.vwf",
+					"properties": {
+						"ohmLang": "LSys { Gen<x> \n        = ReadRule+ \n        ReadRule \n        = letters | symbols\n        letters  = \"F\" | \"G\" \n        symbols  = \"-\" | \"+\" }\n"
+					},
+					"methods": {
+						"initLang": {
+							"body": "    console.log(\"add operations to semantics\")\n    this.addOperationLang();\n",
+							"type": "application/javascript"
+						},
+						"addOperationLang": {
+							"body": "    this.semantics.addOperation('gen(x)', {\n        Gen: function(e)\n        {\n            return e.gen(this.args.x);\n        },\n        ReadRule: function(e)\n        {\n            return e.gen(this.args.x);\n        },\n        letters: function(_)\n        {\n            for (var propName in this.args.x)\n            {\n                if (propName == this.sourceString)\n                    return this.args.x[propName]\n            }\n            return this.sourceString\n        },\n        symbols: function(_)\n        {\n            return this.sourceString;\n        }\n    });\n",
+							"type": "application/javascript"
+						}
+					}
+				},
+				"turtleLang": {
+					"extends": "proxy/ohm/node.vwf",
+					"properties": {
+						"ohmLang": "Turtle {\nDraw<x, y> \n    = (drawLetter | turn)+ \ndrawLetter \n    = letter\nturn \n    = \"+\" | \"-\" }\n"
+					},
+					"methods": {
+						"initLang": {
+							"body": "    console.log(\"add operations to semantics\")\n    this.addOperationLang();\n",
+							"type": "application/javascript"
+						},
+						"addOperationLang": {
+							"body": "    var turtleID = this.parent.id;\n    var self = this;\n    this.semantics.addOperation('draw(x,y)', {\n        Draw: function(e)\n        {\n            e.draw(this.args.x, this.args.y);\n        },\n        drawLetter: function(e)\n        {\n            //vwf_view.kernel.callMethod(turtleID, 'goForward', [this.args.x]);\n            self.parent.goForward(this.args.x);\n        },\n        turn: function(e)\n        {\n            if (this.sourceString == \"+\")\n                //vwf_view.kernel.callMethod(turtleID, 'turn', [this.args.y]);\n                self.parent.turn(this.args.y);\n            if (this.sourceString == \"-\")\n                //vwf_view.kernel.callMethod(turtleID, 'turn', [-1 * this.args.y]);\n                self.parent.turn(-1*this.args.y);\n            }\n    });\n",
+							"type": "application/javascript"
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 0 - 227
public/defaults/worlds/ohmlang-lsys/index.vwf.yaml

@@ -1,227 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-    assets: "assets.json"
-children:
-    skySun:
-        extends: http://vwf.example.com/aframe/aentity.vwf
-        children:
-            sun:
-                extends: http://vwf.example.com/aframe/app-sun-component.vwf
-    newSky:
-        extends: http://vwf.example.com/aframe/aentity.vwf
-        children:
-            skyshader:
-                extends: http://vwf.example.com/aframe/app-skyshader-component.vwf
-    groundPlane:
-        extends: http://vwf.example.com/aframe/aplane.vwf
-        properties:
-            height: 50
-            width: 50
-            rotation: [-90, 0, 0]
-        children:
-            material:
-                extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-                properties:
-                    wireframe: false
-                    src: "#bg2"
-                    repeat: "10 10"
-    turtle:
-        extends: http://vwf.example.com/aframe/asphere.vwf
-        properties:
-            position: [1, 1.25, -4]
-            radius: 0.2
-            angleInRadians: 0
-            iteration: 3
-            angle: 60  
-            stepLength: 0.5  
-            rule: 'F++F++F'
-            axiomF: 'F-F++F-F'
-            axiomG: ''
-            lsys: ''
-            readyForDraw: true
-        children:
-            interpolation:
-                extends: http://vwf.example.com/aframe/interpolation-component.vwf
-                properties:
-                    enabled: true
-            material:
-                extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-                properties:
-                    wireframe: true
-                    color: "#e0e014"
-            drawNode:
-                extends: http://vwf.example.com/aframe/aentity.vwf
-                children:
-                    linepath:
-                        extends: http://vwf.example.com/aframe/linepath.vwf
-                        properties:
-                            color: "#445447"
-                            path: []
-                            width: 0.02
-            lsysLang:
-                extends: http://vwf.example.com/ohm/node.vwf
-                properties:
-                    grammar:
-                    semantics:
-                    ohmLang: |
-                        LSys { Gen<x> 
-                                = ReadRule+ 
-                                ReadRule 
-                                = letters | symbols
-                                letters  = "F" | "G" 
-                                symbols  = "-" | "+" }
-                methods:
-                    initLang:
-                        body: |
-                            console.log("add operations to semantics")
-                            this.addOperationLang();
-                    addOperationLang:
-                        body: |
-                            this.semantics.addOperation('gen(x)', {
-                                Gen: function(e)
-                                {
-                                    return e.gen(this.args.x);
-                                },
-                                ReadRule: function(e)
-                                {
-                                    return e.gen(this.args.x);
-                                },
-                                letters: function(_)
-                                {
-                                    for (var propName in this.args.x)
-                                    {
-                                        if (propName == this.sourceString)
-                                            return this.args.x[propName]
-                                    }
-                                    return this.sourceString
-                                },
-                                symbols: function(_)
-                                {
-                                    return this.sourceString;
-                                }
-                            });
-            turtleLang:
-                extends: http://vwf.example.com/ohm/node.vwf
-                properties:
-                    grammar:
-                    semantics:
-                    ohmLang: |
-                        Turtle {
-                        Draw<x, y> 
-                            = (drawLetter | turn)+ 
-                        drawLetter 
-                            = letter
-                        turn 
-                            = "+" | "-" }
-                methods:
-                    initLang:
-                        body: |
-                            console.log("add operations to semantics")
-                            this.addOperationLang();
-                    addOperationLang:
-                        body: |
-                            var turtleID = this.parent.id;
-                            var self = this;
-                            this.semantics.addOperation('draw(x,y)', {
-                                Draw: function(e)
-                                {
-                                    e.draw(this.args.x, this.args.y);
-                                },
-                                drawLetter: function(e)
-                                {
-                                    //vwf_view.kernel.callMethod(turtleID, 'goForward', [this.args.x]);
-                                    self.parent.goForward(this.args.x);
-                                },
-                                turn: function(e)
-                                {
-                                    if (this.sourceString == "+")
-                                        //vwf_view.kernel.callMethod(turtleID, 'turn', [this.args.y]);
-                                        self.parent.turn(this.args.y);
-                                    if (this.sourceString == "-")
-                                        //vwf_view.kernel.callMethod(turtleID, 'turn', [-1 * this.args.y]);
-                                        self.parent.turn(-1*this.args.y);
-                                    }
-                            });
-        methods:
-            parseLSys: |
-                var str = this.rule;
-                var axioms = {"F": this.axiomF, "G": this.axiomG};
-                for (var i = 1; i < this.iteration; i++)
-                {
-                    var match = this.lsysLang.grammar.match(str, 'Gen<"y">');
-                    if (match.succeeded()){
-                    var res = this.lsysLang.semantics(match).gen(axioms);
-                    str = res.join("");
-                    }
-                }
-                console.log(str);
-                this.lsys = str;
-            makeLSys: |
-                if (this.readyForDraw){
-                this.drawNode.position = [0, 0, 0]
-                this.angleInRadians = 0;
-                this.drawNode.linepath.path = [];
-                this.parseLSys();
-                this.drawLSys();
-                this.drawNode.position = [0, 0, 0]
-                }
-            drawLSys: |
-                var match = this.turtleLang.grammar.match(this.lsys, 'Draw<"1","1">');
-                if (match.succeeded()){
-                    var res = this.turtleLang.semantics(match).draw(this.stepLength, this.angle);
-                }
-            turn:
-                parameters:
-                    - angle
-                body: |
-                    var angle0 = this.angleInRadians;
-                    var targetAngle = angle * Math.PI / 180.0;
-                    this.angleInRadians = angle0 + targetAngle;
-            goForward:
-                parameters:
-                    - step
-                body: |
-                    let pos = this.drawNode.position;
-                    var x0 = pos[0];
-                    var y0 = pos[1];
-                    var xx = Math.sin(this.angleInRadians);
-                    var yy = Math.cos(this.angleInRadians);
-                    let startPosition = {x: pos[0], y: pos[1], z:pos[2]};
-                    let endPosition = {x: x0 + step * xx, y: y0 + step * yy, z: pos[2]};
-                    var drawPath = this.drawNode.linepath.path;
-                    drawPath.push(startPosition);
-                    drawPath.push(endPosition);
-                    vwf_view.kernel.setProperty(this.drawNode.linepath.id, 'path', drawPath);
-                    this.drawNode.position = [endPosition.x, endPosition.y, endPosition.z];
-            setTurtleParams:
-                parameters:
-                    - val
-                body: |
-                    this.readyForDraw = false;
-                    val.forEach(el => {
-                        this[el[0]] = el[1]
-                    })
-                    this.readyForDraw = true;
-                    this.makeLSys();
-            initialize:
-                body: |
-                    //this.redrawEvent = function(){this.makeLSys()}
-                    vwf_view.kernel.callMethod(this.id, "makeLSys");
-                    console.log("initialising turtle");
-methods:
-  initialize:
-    body: |
-        console.log("initialising scene");
-  drawLSys1: |
-    this.turtle.makeLSys()
-  testTurtle: |
-    this.turtle.goForward(1);
-    this.turtle.goForward(1);
-    this.turtle.turn(45);
-    this.turtle.goForward(1);
-    this.turtle.goForward(1);
-    this.turtle.turn(45);
-    this.turtle.goForward(1);

+ 0 - 3
public/defaults/worlds/orchestra/assets.json

@@ -1,3 +0,0 @@
-{
-    
-}

+ 12 - 0
public/defaults/worlds/orchestra/index.vwf.config.json

@@ -0,0 +1,12 @@
+{
+  "info":{
+    "title": "VWF & AFrame Example App"
+  },
+  "model": {
+    "vwf/model/aframe": {}
+  },
+  "view": {
+    "vwf/view/aframe": null,
+    "vwf/view/editor-new": null
+  }
+}

+ 0 - 8
public/defaults/worlds/orchestra/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "VWF & AFrame Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 371 - 0
public/defaults/worlds/orchestra/index.vwf.json

@@ -0,0 +1,371 @@
+{
+  "extends": "proxy/aframe/ascene.vwf",
+  "properties": {
+    "transparent": true
+  },
+  "methods": {
+    "initialize": {
+      "body": "    this.globalTransport.init();\n    console.log(\"INIT TRANSPORT!!!\");\n",
+      "type": "application/javascript"
+    }
+  },
+  "children": {
+    "assetBG": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg",
+        "itemSrc": "/defaults/assets/bg.jpg"
+      }
+    },
+    "assetSky": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "sky",
+        "itemSrc": "/defaults/assets/skyes/sky3.jpg"
+      }
+    },
+    "assetBG2": {
+      "extends": "proxy/aframe/a-asset-image-item.vwf",
+      "properties": {
+        "itemID": "bg2",
+        "itemSrc": "/defaults/assets/checker.jpg"
+      }
+    },
+    "myLight": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "spot",
+        "position": [
+          -2.5,
+          1,
+          1.5
+        ],
+        "rotation": [
+          0,
+          -40,
+          0
+        ]
+      }
+    },
+    "myLight2": {
+      "extends": "proxy/aframe/alight.vwf",
+      "properties": {
+        "type": "spot",
+        "position": [
+          2,
+          1.7999999523162842,
+          6.5
+        ],
+        "rotation": [
+          25,
+          25,
+          -40
+        ]
+      }
+    },
+    "spaceText": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Collaborative Orchestra",
+        "color": "#ddd",
+        "position": [
+          -2,
+          2.5,
+          -2
+        ]
+      }
+    },
+    "spaceText2": {
+      "extends": "proxy/aframe/atext.vwf",
+      "properties": {
+        "value": "Project by LiveCoding.space",
+        "color": "#aaa",
+        "position": [
+          1,
+          3,
+          -4
+        ]
+      }
+    },
+    "globalTransport": {
+      "extends": "proxy/aframe/transport.vwf",
+      "properties": {
+        "position": [
+          2,
+          2,
+          -3
+        ],
+        "beat": 0,
+        "animationLoop": true,
+        "animationDuration": 1,
+        "animationDurationSIM": 1,
+        "animationRate": 1,
+        "animationTPS": 30
+      },
+      "children": {
+        "vis": {
+          "extends": "proxy/aframe/abox.vwf",
+          "properties": {
+            "height": "0.3",
+            "width": "0.3",
+            "depth": "0.3",
+            "class": "clickable"
+          },
+          "methods": {
+            "clickEventMethod": {
+              "body": "    if (this.parent.animationPlaying) {\n        this.parent.stop();\n    } else {\n        this.parent.play();\n    }\n",
+              "type": "application/javascript"
+            }
+          },
+          "children": {
+            "material": {
+              "extends": "proxy/aframe/aMaterialComponent.vwf",
+              "type": "component",
+              "properties": {
+                "color": "red"
+              }
+            },
+            "cursor-listener": {
+              "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+              "type": "component"
+            }
+          }
+        }
+      }
+    },
+    "bdrum": {
+      "extends": "proxy/aframe/abox.vwf",
+      "properties": {
+        "position": [
+          0,
+          0,
+          -3
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "depth": "1",
+        "height": "1",
+        "width": "1",
+        "class": "hit clickable",
+        "globalBeat": true
+      },
+      "methods": {
+        "changeVisual": {
+          "body": "    this.material.color = \"white\";\n    this.scale = \"1.1 1.1 1.1\";\n    this.future(0.1).resetVisual();\n",
+          "type": "application/javascript"
+        },
+        "resetVisual": {
+          "body": "    this.material.color = \"red\";\n    this.scale = \"1 1 1\";\n",
+          "type": "application/javascript"
+        },
+        "onGlobalBeat": {
+          "parameters": [
+            "obj"
+          ],
+          "body": "    let transportNode = this.find('//' + obj.name)[0];\n    let rate = transportNode.animationRate; // 1 by default\n    let drumSeq = [\n      {beat:0, msg: 0},\n      {beat:15, msg: 0}\n    ];\n    drumSeq.forEach(el=>{\n      if(el.beat/rate == obj.beat){\n        let msg = {\n            address: \"/trigger/sample01\",\n            args: [this.time, 'bd_haus', 2]\n        };\n        this.sendOSC(msg); \n        this.changeVisual();\n      }\n    })\n",
+          "type": "application/javascript"
+        },
+        "hitstartEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "hitendEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        },
+        "clickEventMethod": {
+          "body": "    this.globalBeat = !this.globalBeat\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "aabb-collider-listener": {
+          "extends": "proxy/aframe/app-aabb-collider-listener-component.vwf",
+          "type": "component"
+        },
+        "cursor-listener": {
+          "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+          "type": "component"
+        },
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "red"
+          }
+        }
+      }
+    },
+    "hatt": {
+      "extends": "proxy/aframe/acone.vwf",
+      "properties": {
+        "position": [
+          -2,
+          0,
+          -3
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "radius": 0.5,
+        "height": "1",
+        "class": "hit clickable",
+        "globalBeat": true
+      },
+      "methods": {
+        "changeVisual": {
+          "body": "    this.material.color = \"white\";\n    this.scale = \"1.1 1.1 1.1\";\n    this.future(0.1).resetVisual();\n",
+          "type": "application/javascript"
+        },
+        "resetVisual": {
+          "body": "    this.material.color = \"blue\";\n    this.scale = \"1 1 1\";\n",
+          "type": "application/javascript"
+        },
+        "onGlobalBeat": {
+          "parameters": [
+            "obj"
+          ],
+          "body": "    let transportNode = this.find('//' + obj.name)[0];\n    let rate = transportNode.animationRate; // 1 by default\n    let drumSeq = [\n      {beat:10, msg: 0},\n      {beat:20, msg: 0}\n      ];\n    drumSeq.forEach(el=>{\n      if(el.beat/rate == obj.beat){\n        let msg = {\n            address: \"/trigger/sample02\",\n            args: [this.time, 'bass_hit_c', 1]\n        };\n        this.sendOSC(msg); \n        this.changeVisual();\n      }\n    })\n",
+          "type": "application/javascript"
+        },
+        "hitstartEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "hitendEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        },
+        "clickEventMethod": {
+          "body": "    this.globalBeat = !this.globalBeat\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "aabb-collider-listener": {
+          "extends": "proxy/aframe/app-aabb-collider-listener-component.vwf",
+          "type": "component"
+        },
+        "cursor-listener": {
+          "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+          "type": "component"
+        },
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "red"
+          }
+        }
+      }
+    },
+    "synth": {
+      "extends": "proxy/aframe/asphere.vwf",
+      "properties": {
+        "position": [
+          2,
+          0,
+          -3
+        ],
+        "rotation": [
+          0,
+          0,
+          0
+        ],
+        "radius": "0.5",
+        "class": "hit clickable",
+        "globalBeat": true
+      },
+      "methods": {
+        "changeVisual": {
+          "body": "    this.material.color = \"white\";\n    this.scale = \"1.1 1.1 1.1\";\n    this.future(0.1).resetVisual();\n",
+          "type": "application/javascript"
+        },
+        "resetVisual": {
+          "body": "    this.material.color = \"green\";\n    this.scale = \"1 1 1\";\n",
+          "type": "application/javascript"
+        },
+        "onGlobalBeat": {
+          "parameters": [
+            "obj"
+          ],
+          "body": "    let transportNode = this.find('//' + obj.name)[0];\n    let rate = transportNode.animationRate; // 1 by default\n    let drumSeq = [\n      {beat:0, msg: \"C3\"},\n      {beat:5, msg: \"D3\"},\n      {beat:10, msg: \"E3\"},\n      {beat:15, msg: \"G3\"},\n      {beat:20, msg: \"A3\"},\n      {beat:25, msg: \"B3\"}\n      ];\n    drumSeq.forEach(el=>{\n      if(el.beat/rate == obj.beat){\n        let msg = {\n          address: \"/trigger/synth01\",\n                args: [this.time, 'pluck', el.msg, 0.1, 0.01, 0.6]\n        };\n        this.sendOSC(msg); \n        this.changeVisual();\n      }\n    })\n",
+          "type": "application/javascript"
+        },
+        "hitstartEventMethod": {
+          "body": "    this.material.opacity = 0.7\n",
+          "type": "application/javascript"
+        },
+        "hitendEventMethod": {
+          "body": "    this.material.opacity = 1.0\n",
+          "type": "application/javascript"
+        },
+        "clickEventMethod": {
+          "body": "    this.globalBeat = !this.globalBeat\n",
+          "type": "application/javascript"
+        }
+      },
+      "children": {
+        "aabb-collider-listener": {
+          "extends": "proxy/aframe/app-aabb-collider-listener-component.vwf",
+          "type": "component"
+        },
+        "cursor-listener": {
+          "extends": "proxy/aframe/app-cursor-listener-component.vwf",
+          "type": "component"
+        },
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "color": "#e0e014",
+            "wireframe": true
+          }
+        }
+      }
+    },
+    "sky": {
+      "extends": "proxy/aframe/asky.vwf",
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "src": "#sky",
+            "side": "back",
+            "fog": false
+          }
+        }
+      }
+    },
+    "groundPlane": {
+      "extends": "proxy/aframe/aplane.vwf",
+      "properties": {
+        "height": "50",
+        "width": "50",
+        "rotation": [
+          -90,
+          0,
+          0
+        ]
+      },
+      "children": {
+        "material": {
+          "extends": "proxy/aframe/aMaterialComponent.vwf",
+          "properties": {
+            "repeat": "10 10",
+            "color": "white",
+            "src": "#bg2"
+          }
+        },
+        "shadow": {
+          "extends": "proxy/aframe/shadowComponent.vwf",
+          "properties": {
+            "receive": true
+          }
+        }
+      }
+    }
+  }
+}

+ 0 - 265
public/defaults/worlds/orchestra/index.vwf.yaml

@@ -1,265 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  transparent: true
-  assets: "assets.json"
-children:
-  assetBG:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "bg"
-      itemSrc: "/defaults/assets/bg.jpg"
-  assetSky:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "sky"
-      itemSrc: "/defaults/assets/skyes/sky3.jpg"
-  assetBG2:
-    extends: http://vwf.example.com/aframe/a-asset-image-item.vwf
-    properties:
-      itemID: "bg2"
-      itemSrc: "/defaults/assets/checker.jpg"
-  myLight:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "spot"
-      position: [-2.5, 1, 1.5]
-      rotation: [0, -40, 0]
-  myLight2:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "spot"
-      position: [2, 1.8, 6.5]
-      rotation: [25, 25, -40]
-  spaceText:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Collaborative Orchestra"
-      color: "#ddd"
-      position: "-2 2.5 -2"
-  spaceText2:
-    extends: http://vwf.example.com/aframe/atext.vwf
-    properties:
-      value: "Project by LiveCoding.space"
-      color: "#aaa"
-      position: "1 3 -4"
-  globalTransport:
-    extends: http://vwf.example.com/aframe/transport.vwf
-    properties:
-      position: "2 2 -3"
-  bdrum:
-    extends: http://vwf.example.com/aframe/abox.vwf
-    properties:
-      position: "0 0 -3"
-      rotation: "0 0 0"
-      depth: 1
-      height: 1
-      width: 1
-      class: "hit clickable"
-      globalBeat: true
-    methods:
-      changeVisual:
-        body: | 
-              this.material.color = "white";
-              this.scale = "1.1 1.1 1.1";
-              this.future(0.1).resetVisual();
-      resetVisual:
-        body: | 
-              this.material.color = "red";
-              this.scale = "1 1 1";  
-      onGlobalBeat:
-        parameters:
-          - obj
-        body: |
-                let transportNode = this.find('//' + obj.name)[0];
-                let rate = transportNode.animationRate; // 1 by default
-                let drumSeq = [
-                  {beat:0, msg: 0},
-                  {beat:15, msg: 0}
-                ];
-                drumSeq.forEach(el=>{
-                  if(el.beat/rate == obj.beat){
-                    let msg = {
-                        address: "/trigger/sample01",
-                        args: [this.time, 'bd_haus', 2]
-                    };
-                    this.sendOSC(msg); 
-                    this.changeVisual();
-                  }
-                })
-      hitstartEventMethod:
-        body: |
-              this.material.opacity = 0.7
-      hitendEventMethod:
-        body: |
-              this.material.opacity = 1.0
-      clickEventMethod:
-        body: |
-              this.globalBeat = !this.globalBeat
-    children:
-      aabb-collider-listener:
-        extends: http://vwf.example.com/aframe/app-aabb-collider-listener-component.vwf
-        type: "component"
-      cursor-listener:
-        extends: http://vwf.example.com/aframe/app-cursor-listener-component.vwf
-        type: "component"
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "red"
-  hatt:
-    extends: http://vwf.example.com/aframe/acone.vwf
-    properties:
-      position: "-2 0 -3"
-      rotation: "0 0 0"
-      radius: 0.5
-      height: 1
-      class: "hit clickable"
-      globalBeat: true
-    methods:
-      changeVisual:
-        body: | 
-              this.material.color = "white";
-              this.scale = "1.1 1.1 1.1";
-              this.future(0.1).resetVisual();
-      resetVisual:
-        body: | 
-              this.material.color = "blue";
-              this.scale = "1 1 1";  
-      onGlobalBeat:
-        parameters:
-          - obj
-        body: |
-                let transportNode = this.find('//' + obj.name)[0];
-                let rate = transportNode.animationRate; // 1 by default
-                let drumSeq = [
-                  {beat:10, msg: 0},
-                  {beat:20, msg: 0}
-                  ];
-                drumSeq.forEach(el=>{
-                  if(el.beat/rate == obj.beat){
-                    let msg = {
-                        address: "/trigger/sample02",
-                        args: [this.time, 'bass_hit_c', 1]
-                    };
-                    this.sendOSC(msg); 
-                    this.changeVisual();
-                  }
-                })
-      hitstartEventMethod:
-        body: |
-              this.material.opacity = 0.7
-      hitendEventMethod:
-        body: |
-              this.material.opacity = 1.0
-      clickEventMethod:
-        body: |
-              this.globalBeat = !this.globalBeat
-    children:
-      aabb-collider-listener:
-        extends: http://vwf.example.com/aframe/app-aabb-collider-listener-component.vwf
-        type: "component"
-      cursor-listener:
-        extends: http://vwf.example.com/aframe/app-cursor-listener-component.vwf
-        type: "component"
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "red"
-  synth:
-    extends: http://vwf.example.com/aframe/asphere.vwf
-    properties:
-      position: "2 0 -3"
-      rotation: "0 0 0"
-      radius: 0.5
-      class: "hit clickable"
-      globalBeat: true
-    methods:
-      changeVisual:
-        body: | 
-              this.material.color = "white";
-              this.scale = "1.1 1.1 1.1";
-              this.future(0.1).resetVisual();
-      resetVisual:
-        body: | 
-              this.material.color = "green";
-              this.scale = "1 1 1";  
-      onGlobalBeat:
-        parameters:
-          - obj
-        body: |
-              let transportNode = this.find('//' + obj.name)[0];
-              let rate = transportNode.animationRate; // 1 by default
-              let drumSeq = [
-                {beat:0, msg: "C3"},
-                {beat:5, msg: "D3"},
-                {beat:10, msg: "E3"},
-                {beat:15, msg: "G3"},
-                {beat:20, msg: "A3"},
-                {beat:25, msg: "B3"}
-                ];
-              drumSeq.forEach(el=>{
-                if(el.beat/rate == obj.beat){
-                  let msg = {
-                    address: "/trigger/synth01",
-                          args: [this.time, 'pluck', el.msg, 0.1, 0.01, 0.6]
-                  };
-                  this.sendOSC(msg); 
-                  this.changeVisual();
-                }
-              })
-      hitstartEventMethod:
-        body: |
-              this.material.opacity = 0.7
-      hitendEventMethod:
-        body: |
-              this.material.opacity = 1.0
-      clickEventMethod:
-        body: |
-              this.globalBeat = !this.globalBeat
-    children:
-      aabb-collider-listener:
-        extends: http://vwf.example.com/aframe/app-aabb-collider-listener-component.vwf
-        type: "component"
-      cursor-listener:
-        extends: http://vwf.example.com/aframe/app-cursor-listener-component.vwf
-        type: "component"
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          color: "#e0e014"
-          wireframe: true
-  sky:
-    extends: http://vwf.example.com/aframe/asky.vwf
-    properties:
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          src: "#sky"
-          side: "back"
-          fog: false
-  groundPlane:
-    extends: http://vwf.example.com/aframe/aplane.vwf
-    properties:
-      height: 50
-      width: 50
-      rotation: "-90 0 0"
-    children:
-      material:
-        extends: http://vwf.example.com/aframe/aMaterialComponent.vwf
-        properties:
-          repeat: "10 10"
-          color: "white"
-          src: "#bg2"
-      shadow:
-        extends: http://vwf.example.com/aframe/shadowComponent.vwf
-        properties:
-          receive: true
-methods:
-  initialize:
-    body: |
-          this.globalTransport.init();
-          console.log("INIT TRANSPORT!!!");

+ 1 - 10
public/defaults/worlds/osc-example/index.vwf.json

@@ -117,19 +117,10 @@
       "osc": true,
       "grammar": null,
       "semantics": null,
-      "ohmLang": {
-        "set": "this.ohmLang_set(value)",
-        "get": "return this.ohmLang_get()",
-        "value": "grammar"
-      }
+      "ohmLang": "parseOSC {\n            all = address \":\" props\n            address = (\"/\" addr)*\n            addr = ~(\"/\") propSingle\n            props \n                = propSingle row  -- single\n                | \"rgb\" row       -- rgb\n                | propSingle number -- prop\n            row = \"[\" col rep \"]\"\n            rep = (\",\" col)*\n            col = colChar*\n            colChar = ~(\"[\" | \",\" | \"]\") number\n            propSingle = ~(\"rgb\") letter*\n            number  (a number)\n                = digit* \".\" digit+  -- fract\n                | digit+             -- whole\n            }\n"
       },
       "methods":{
         "initLang": {},
-        "ohmLang_grammar": {},
-        "ohmLang_get": {},
-        "ohmLang_set": {
-          "parameters":["val"]
-        },
         "addOperationLang": {},
         "getOSC":{
           "parameters":["msg"]

+ 0 - 30
public/defaults/worlds/osc-example/osclang.js

@@ -1,34 +1,4 @@
-this.ohmLang_get = function () {
-    return this.ohmLang;
-}
 
-this.ohmLang_set = function (val) {
-    if (val == "grammar") {
-        this.ohmLang = this.ohmLang_grammar();
-    } else {
-        this.ohmLang = val;
-    }
-}
-
-this.ohmLang_grammar = function () {
-    return 'parseOSC { \n' +
-        'all = address ":" props \n' +
-        'address = ("/" addr)* \n' +
-        'addr = ~("/") propSingle \n' +
-        'props \n' +
-        '    = propSingle row  -- single \n' +
-        '    | "rgb" row       -- rgb \n' +
-        '    | propSingle number -- prop \n' +
-        'row = "[" col rep "]" \n' +
-        'rep = ("," col)* \n' +
-        'col = colChar* \n' +
-        'colChar = ~("[" | "," | "]") number \n' +
-        'propSingle = ~("rgb") letter* \n' +
-        'number  (a number) \n' +
-        '    = digit* "." digit+  -- fract \n' +
-        '    | digit+             -- whole \n' +
-        '}'
-}
 this.initLang = function () {
     console.log("add operations to semantics")
     this.addOperationLang();

+ 2 - 2
public/defaults/worlds/paint/info.json

@@ -2,12 +2,12 @@
     "info": {
         "en": {
             "title": "Paint app in Web XR",
-            "imgUrl": "/defaults/worlds/webrtc/webimg.jpg",
+            "imgUrl": "/defaults/worlds/paint/webimg.jpg",
             "text": "Painting app using Web XR controllers"
         },
         "ru": {
             "title": "Рисование в Web XR",
-            "imgUrl": "/defaults/worlds/webrtc/webimg.jpg",
+            "imgUrl": "/defaults/worlds/paint/webimg.jpg",
             "text": "Пример приложения для рисования с помощью контроллеров Web XR"
         }
     }

BIN
public/defaults/worlds/paint/webimg.jpg


+ 1 - 0
public/lib/gundb/axe.js

@@ -217,6 +217,7 @@
 					}
 					// TODO: PUTs need to only go to subs!
 					if(msg.put){
+						mesh.say(msg, axe.up); // always send gets up! Hope that mesh.say below dedups via DAM's check.
 						var S = (+new Date); // STATS!
 						var routes = axe.routes || (axe.routes = {}); // USE RAD INSTEAD! TMP TESTING!
 						var peers = {};

+ 1 - 1
public/lib/gundb/gun.js

@@ -1636,7 +1636,7 @@
 		}
 		var G = String.fromCharCode(31);
 		function soul(id, as, msg, eve){
-			var as = as.as, path = as.p, ref = as.ref, cat = as.at, pat = []; as = as.as;
+			var as = as.as, path = as.p, ref = as.ref, cat = as.at, pat = [], sat; as = as.as;
 			ref.back(function(at){
 				if(sat = at.soul || at.link || at.dub){ return sat }
 				pat.push(at.has || at.get);

+ 41 - 0
public/lib/gundb/lib/ras.js

@@ -0,0 +1,41 @@
+(function(){
+
+  /**
+  Radix AsyncStorage adapter
+  make sure to pass AsyncStorage instance in opt.AsyncStorage
+  example:
+  import AsyncStorage from 'react-native'
+  const store = Store({AsyncStorage})
+  const gun = new Gun({store,peers:[...]})
+  **/
+  function Store(opt){
+    opt = opt || {};
+    const store = function(){}
+    const as = opt.AsyncStorage;
+    store.put = function(key, data, cb)
+      { 
+        as.setItem(''+key,data)
+          .then(_ => cb(null,1))
+          .then(_ => console.log("ok put"))
+          .catch(_ => {
+            console.error(`failed saving to asyncstorage`,{key, data})
+            cb(null,0)
+          })
+      }
+
+    store.get = (key,cb) => {
+        as.getItem(''+key)
+          .then(data => cb(null,data))
+          .then(_ => console.log("ok get"))
+          .catch(_ => {
+            console.error(`failed fetching from asyncstorage`,{key})
+            cb(null,0)
+          })
+      }
+    
+    return store;
+  }
+
+  module.exports = Store
+
+}());

+ 8 - 0
public/lib/gundb/lib/rfs.js

@@ -73,4 +73,12 @@ function Store(opt){
 	return store;
 }
 
+var Gun = (typeof window !== "undefined")? window.Gun : require('../gun');
+Gun.on('create', function(root){
+	this.to.next(root);
+	var opt = root.opt;
+	if(opt.rfs === false){ return }
+	opt.store = opt.store || (!Gun.window && Store(opt));
+});
+
 module.exports = Store;

+ 1 - 0
public/lib/gundb/lib/server.js

@@ -11,6 +11,7 @@
 	})
 	require('../nts');
 	require('./store');
+	require('./rfs');
 	require('./rs3');
 	require('./wire');
 	try{require('../sea');}catch(e){}

+ 1 - 3
public/lib/gundb/lib/store.js

@@ -7,10 +7,8 @@ Gun.on('create', function(root){
     if(false === opt.radisk){ return }
     var Radisk = (Gun.window && Gun.window.Radisk) || require('./radisk');
     var Radix = Radisk.Radix;
-    var ST = 0;
-    // TODO: BUG! For RN storage, RN does not like the following require:
-    opt.store = opt.store || (!Gun.window && require('./rfs')(opt));
     var dare = Radisk(opt), esc = String.fromCharCode(27);
+    var ST = 0;
  
     root.on('put', function(msg){
         this.to.next(msg);

+ 10 - 4
public/lib/gundb/lib/upload.js

@@ -1,11 +1,15 @@
 ;(function(){
 	function upload(cb, opt){
-		var el = $(this); cb = cb || function(){}; opt = opt || {};
+		var el = $(this); cb = cb || function(){};
+		opt = $.isPlainObject(opt)? opt : {input: opt}; 
 		el.on('drop', function(e){
 			e.preventDefault();
-			upload.drop(((e.originalEvent||{}).dataTransfer||{}).files, 0);
+			upload.drop(((e.originalEvent||{}).dataTransfer||{}).files||[], 0);
 		}).on('dragover', function(e){
-		    e.preventDefault();
+			e.preventDefault();
+		});
+		$(opt.input||el).on('change', function(e){
+			upload.drop((e.target||this||{}).files, 0);
 		});
 		upload.drop = function(files,i){
 			if(opt.max && (files[i].fileSize > opt.max || files[i].size > opt.max)){
@@ -20,11 +24,13 @@
 			};
 			if(files[i]){ reader.readAsDataURL(files[i]) }
 		}
+		return this;
 	}
 	upload.shrink = function(e, cb, w, h){ // via stackoverflow
 		if(!e){ return cb && cb({err: "No file!"}) }
 		if(e.err){ return }
 		var file = (((e.event || e).target || e).result || e), img = new Image();
+		if(!((file||'').split(';')[0].indexOf('image') + 1)){ e.err = "Not an image!"; return cb(e) }
     img.crossOrigin = "Anonymous";
     img.src = file;
     img.onload = function(){
@@ -37,7 +43,7 @@
 	    canvas.width = w;
 	    canvas.height = h;
 	    ctx.drawImage(img, 0, 0, w, h); // draw source image to canvas.
-	    var b64 = e.base64 = canvas.toDataURL(); // base64 the compressed image.
+	    var b64 = e.base64 = canvas.toDataURL(); // base64 the shrunk image.
 	    cb((e.base64 && e) || b64); 
     };
 	}

+ 1 - 2
public/lib/gundb/lib/wire.js

@@ -64,7 +64,7 @@ Gun.on('opt', function(root){
 	// if we DO need an HTTP server, then choose ws specific one or GUN default one.
 	if(!ws.noServer){
 		ws.server = ws.server || opt.web;
-		if(!ws.server){ return }
+		if(!ws.server){ this.to.next(root); return } // ugh, bug fix for @jamierez & unstoppable ryan.
 	}
 	ws.web = ws.web || new opt.WebSocket.Server(ws); // we still need a WS server.
 	ws.web.on('connection', function(wire){ var peer;
@@ -80,6 +80,5 @@ Gun.on('opt', function(root){
 		wire.on('error', function(e){});
 		setTimeout(function heart(){ if(!opt.peers[peer.id]){ return } try{ wire.send("[]") }catch(e){} ;setTimeout(heart, 1000 * 20) }, 1000 * 20); // Some systems, like Heroku, require heartbeats to not time out. // TODO: Make this configurable? // TODO: PERF: Find better approach than try/timeouts?
 	});
-
 	this.to.next(root);
 });

+ 50 - 9
public/lib/gundb/sea.js

@@ -164,7 +164,7 @@
     var o = {};
 
     if(SEA.window){
-      api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto');
+      api.crypto = window.crypto || window.msCrypto
       api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
       api.TextEncoder = window.TextEncoder;
       api.TextDecoder = window.TextDecoder;
@@ -176,17 +176,20 @@
       api.TextDecoder = TextDecoder;
       api.TextEncoder = TextEncoder;
     }
-    if(!api.crypto){try{
+    if(!api.crypto)
+    {
+      try
+      {
       var crypto = USE('crypto', 1);
       Object.assign(api, {
         crypto,
         random: (len) => Buffer.from(crypto.randomBytes(len))
       });      
-      const isocrypto = require('isomorphic-webcrypto');
-      api.ossl = api.subtle = isocrypto.subtle;
-    }catch(e){
+      const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);
+      api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH
+    }
+    catch(e){
       console.log("text-encoding and @peculiar/webcrypto may not be included by default, please add it to your package.json!");
-      TEXT_ENCODING_OR_PECULIAR_WEBCRYPTO_NOT_INSTALLED;
     }}
 
     module.exports = api
@@ -656,7 +659,7 @@
     SEA.verify = USE('./verify');
     SEA.encrypt = USE('./encrypt');
     SEA.decrypt = USE('./decrypt');
-    SEA.opt.aeskey = USE('./aeskey'); // not official!
+    //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.
 
     SEA.random = SEA.random || shim.random;
 
@@ -707,9 +710,9 @@
 
   ;USE(function(module){
     var Gun = USE('./sea').Gun;
-    Gun.chain.then = function(cb){
+    Gun.chain.then = function(cb, opt){
       var gun = this, p = (new Promise(function(res, rej){
-        gun.once(res);
+        gun.once(res, opt);
       }));
       return cb? p.then(cb) : p;
     }
@@ -1083,6 +1086,44 @@
       }());
       return gun;
     }
+
+    /**
+     * returns the decrypted value, encrypted by secret
+     * @returns {Promise<any>}
+     // Mark needs to review 1st before officially supported
+    User.prototype.decrypt = function(cb) {
+      let gun = this,
+        path = ''
+      gun.back(function(at) {
+        if (at.is) {
+          return
+        }
+        path += at.get || ''
+      })
+      return gun
+        .then(async data => {
+          if (data == null) {
+            return
+          }
+          const user = gun.back(-1).user()
+          const pair = user.pair()
+          let sec = await user
+            .get('trust')
+            .get(pair.pub)
+            .get(path)
+          sec = await SEA.decrypt(sec, pair)
+          if (!sec) {
+            return data
+          }
+          let decrypted = await SEA.decrypt(data, sec)
+          return decrypted
+        })
+        .then(res => {
+          cb && cb(res)
+          return res
+        })
+    }
+    */
     module.exports = User
   })(USE, './create');
 

+ 37 - 0
public/lib/gundb/sea/create.js

@@ -334,5 +334,42 @@
       }());
       return gun;
     }
+
+    /**
+     * returns the decrypted value, encrypted by secret
+     * @returns {Promise<any>}
+     */
+    User.prototype.decrypt = function(cb) {
+      let gun = this,
+        path = ''
+      gun.back(function(at) {
+        if (at.is) {
+          return
+        }
+        path += at.get || ''
+      })
+      return gun
+        .then(async data => {
+          if (data == null) {
+            return
+          }
+          const user = gun.back(-1).user()
+          const pair = user.pair()
+          let sec = await user
+            .get('trust')
+            .get(pair.pub)
+            .get(path)
+          sec = await SEA.decrypt(sec, pair)
+          if (!sec) {
+            return data
+          }
+          let decrypted = await SEA.decrypt(data, sec)
+          return decrypted
+        })
+        .then(res => {
+          cb && cb(res)
+          return res
+        })
+    }
     module.exports = User
   

+ 10 - 7
public/lib/gundb/sea/shim.js

@@ -5,7 +5,7 @@
     var o = {};
 
     if(SEA.window){
-      api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto');
+      api.crypto = window.crypto || window.msCrypto
       api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
       api.TextEncoder = window.TextEncoder;
       api.TextDecoder = window.TextDecoder;
@@ -17,17 +17,20 @@
       api.TextDecoder = TextDecoder;
       api.TextEncoder = TextEncoder;
     }
-    if(!api.crypto){try{
+    if(!api.crypto)
+    {
+      try
+      {
       var crypto = require('crypto', 1);
       Object.assign(api, {
         crypto,
         random: (len) => Buffer.from(crypto.randomBytes(len))
       });      
-      const isocrypto = require('isomorphic-webcrypto');
-      api.ossl = api.subtle = isocrypto.subtle;
-    }catch(e){
-      console.log("text-encoding and @peculiar/webcrypto may not be included by default, please add it to your package.json!");
-      TEXT_ENCODING_OR_PECULIAR_WEBCRYPTO_NOT_INSTALLED;
+      const { Crypto: WebCrypto } = require('@peculiar/webcrypto', 1);
+      api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH
+    }
+    catch(e){
+      console.log("text-encoding and peculiar/nwebcrypto may not be included by default, please add it to your package.json!");
     }}
 
     module.exports = api

+ 3 - 2
public/lib/gundb/sea/then.js

@@ -1,8 +1,9 @@
 
     var Gun = require('./sea').Gun;
-    Gun.chain.then = function(cb){
+    Gun.chain.then = function(cb, opt = {}){
+      opt = {wait: 200, ...opt}
       var gun = this, p = (new Promise(function(res, rej){
-        gun.once(res);
+        gun.once(res, opt);
       }));
       return cb? p.then(cb) : p;
     }

+ 4 - 4
public/luminary.js

@@ -336,11 +336,11 @@ class Luminary {
 
         let self = this;
 
-        let clientDescriptor = { extends: "http://vwf.example.com/client.vwf" };
+        let clientDescriptor = { extends: "proxy/client.vwf" };
         let clientNodeMessage =
         {
             action: "createChild",
-            parameters: ["http://vwf.example.com/clients.vwf", self.clientID, clientDescriptor],
+            parameters: ["proxy/clients.vwf", self.clientID, clientDescriptor],
             time: 'tick'
         }
 
@@ -356,7 +356,7 @@ class Luminary {
         let clientMsg =
             JSON.stringify({
                 action: "createNode",
-                parameters: ["http://vwf.example.com/clients.vwf"],
+                parameters: ["proxy/clients.vwf"],
                 time: 'tick',
                 explicit: self.clientID
             })
@@ -491,7 +491,7 @@ class Luminary {
                         let clientDeleteMessage =
                         {
                             action: "deleteChild",
-                            parameters: ["http://vwf.example.com/clients.vwf", el],
+                            parameters: ["proxy/clients.vwf", el],
                             time: 'tick'
                         };
 

+ 10 - 0
public/vwf/view/editor-new.js

@@ -3300,6 +3300,16 @@ define([
                             }
 
                         },
+                        {
+                            $type: "button",
+                            class: "mdc-button mdc-button--compact",
+                            $text: " | ",
+                            onclick: function (e) {
+                                document.querySelector('#currentNode')._setNode(vwf.application())
+                            }
+                        },
+                        
+                       
                         this._sideBarComponent
                     ]
                 }