@babylonjs/viewer 5.0.0-alpha.7 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/configuration/configurationCompatibility.js +1 -1
  2. package/configuration/configurationContainer.js +1 -1
  3. package/configuration/globals.js +1 -1
  4. package/configuration/index.js +2 -2
  5. package/configuration/interfaces/groundConfiguration.js.map +1 -1
  6. package/configuration/interfaces/index.js +15 -15
  7. package/configuration/loader.js +4 -2
  8. package/configuration/loader.js.map +1 -1
  9. package/configuration/mappers.js +2 -2
  10. package/configuration/mappers.js.map +1 -1
  11. package/configuration/renderOnlyLoader.js +6 -6
  12. package/configuration/types/default.js +2 -2
  13. package/configuration/types/extended.js +1 -1
  14. package/configuration/types/index.js +6 -6
  15. package/configuration/types/index.js.map +1 -1
  16. package/helper/index.d.ts +1 -1
  17. package/helper/index.js +1 -1
  18. package/helper/index.js.map +1 -1
  19. package/index.js +13 -13
  20. package/initializer.js +3 -3
  21. package/labs/environmentSerializer.js +3 -3
  22. package/labs/environmentSerializer.js.map +1 -1
  23. package/labs/texture.js +4 -4
  24. package/labs/texture.js.map +1 -1
  25. package/labs/viewerLabs.js +5 -5
  26. package/loader/modelLoader.js +6 -6
  27. package/loader/modelLoader.js.map +1 -1
  28. package/loader/plugins/extendedMaterialLoaderPlugin.js +1 -1
  29. package/loader/plugins/index.js +5 -5
  30. package/loader/plugins/telemetryLoaderPlugin.js +2 -2
  31. package/managers/observablesManager.js +1 -1
  32. package/managers/sceneManager.js +28 -28
  33. package/managers/sceneManager.js.map +1 -1
  34. package/managers/telemetryManager.js +1 -1
  35. package/model/viewerModel.js +11 -11
  36. package/optimizer/custom/extended.js +1 -1
  37. package/optimizer/custom/index.js +1 -1
  38. package/package.json +6 -6
  39. package/renderOnlyIndex.js +11 -11
  40. package/renderOnlyIndex.js.map +1 -1
  41. package/templating/plugins/hdButtonPlugin.js +3 -1
  42. package/templating/plugins/hdButtonPlugin.js.map +1 -1
  43. package/templating/plugins/printButton.js +4 -2
  44. package/templating/plugins/printButton.js.map +1 -1
  45. package/templating/templateManager.js +5 -5
  46. package/templating/templateManager.js.map +1 -1
  47. package/viewer/defaultViewer.js +13 -11
  48. package/viewer/defaultViewer.js.map +1 -1
  49. package/viewer/renderOnlyViewer.js +3 -1
  50. package/viewer/renderOnlyViewer.js.map +1 -1
  51. package/viewer/viewer.js +14 -14
  52. package/viewer/viewerManager.js +1 -1
  53. package/viewer/viewerWithTemplate.js +4 -2
  54. package/viewer/viewerWithTemplate.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import { extendedUpgrade, extendedDegrade } from "./extended";
1
+ import { extendedUpgrade, extendedDegrade } from "./extended.js";
2
2
  var cache = {};
3
3
  /**
4
4
  *
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  },
5
5
  "name": "@babylonjs/viewer",
6
6
  "description": "A simple-to-use viewer based on BabylonJS to display 3D elements natively",
7
- "version": "5.0.0-alpha.7",
7
+ "version": "5.0.0-beta.2",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -218,11 +218,11 @@
218
218
  "deepmerge": "~2.1.1",
219
219
  "handlebars": "~4.0.11",
220
220
  "pepjs": "~0.4.3",
221
- "@babylonjs/core": "5.0.0-alpha.7",
222
- "@babylonjs/loaders": "5.0.0-alpha.7",
223
- "babylonjs-gltf2interface": "5.0.0-alpha.7",
224
- "babylonjs-viewer-assets": "5.0.0-alpha.7",
225
- "tslib": ">=1.10.0"
221
+ "@babylonjs/core": "5.0.0-beta.2",
222
+ "@babylonjs/loaders": "5.0.0-beta.2",
223
+ "babylonjs-gltf2interface": "5.0.0-beta.2",
224
+ "babylonjs-viewer-assets": "5.0.0-beta.2",
225
+ "tslib": "^2.3.1"
226
226
  },
227
227
  "module": "index.js",
228
228
  "esnext": "index.js"
@@ -1,16 +1,16 @@
1
- import { RenderOnlyViewer } from './viewer/renderOnlyViewer';
1
+ import { RenderOnlyViewer } from './viewer/renderOnlyViewer.js';
2
2
  // Required side effects
3
- import '@babylonjs/loaders/glTF/2.0';
4
- import "@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent";
5
- import "@babylonjs/core/Debug/debugLayer";
6
- import "@babylonjs/core/Meshes/Builders/planeBuilder";
7
- import "@babylonjs/core/Meshes/Builders/boxBuilder";
8
- import "@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader";
9
- import "@babylonjs/core/Materials/Textures/Loaders/envTextureLoader";
10
- import "@babylonjs/core/Materials/Textures/Loaders/ktxTextureLoader";
11
- import "@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent";
3
+ import '@babylonjs/loaders/glTF/2.0.js';
4
+ import "@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js";
5
+ import "@babylonjs/core/Debug/debugLayer.js";
6
+ import "@babylonjs/core/Meshes/Builders/planeBuilder.js";
7
+ import "@babylonjs/core/Meshes/Builders/boxBuilder.js";
8
+ import "@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader.js";
9
+ import "@babylonjs/core/Materials/Textures/Loaders/envTextureLoader.js";
10
+ import "@babylonjs/core/Materials/Textures/Loaders/ktxTextureLoader.js";
11
+ import "@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js";
12
12
  // Override default material factory to avoid the dependency on standard material
13
- import { Scene } from '@babylonjs/core/scene';
13
+ import { Scene } from '@babylonjs/core/scene.js';
14
14
  Scene.DefaultMaterialFactory = function (scene) { return null; };
15
15
  export { RenderOnlyViewer };
16
16
  //# sourceMappingURL=renderOnlyIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderOnlyIndex.js","sourceRoot":"","sources":["../../../sourceES6/viewer/src/renderOnlyIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAwB;AACxB,OAAO,6BAA6B,CAAC;AACrC,OAAO,8DAA8D,CAAA;AACrE,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8CAA8C,CAAC;AACtD,OAAO,4CAA4C,CAAC;AACpD,OAAO,6DAA6D,CAAA;AACpE,OAAO,6DAA6D,CAAA;AACpE,OAAO,6DAA6D,CAAA;AACpE,OAAO,6FAA6F,CAAC;AAErG,iFAAiF;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,KAAK,CAAC,sBAAsB,GAAG,UAAC,KAAW,IAAI,OAAO,IAAW,CAAA,CAAA,CAAC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { RenderOnlyViewer } from './viewer/renderOnlyViewer';\r\n\r\n// Required side effects\r\nimport '@babylonjs/loaders/glTF/2.0';\r\nimport \"@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent\"\r\nimport \"@babylonjs/core/Debug/debugLayer\";\r\nimport \"@babylonjs/core/Meshes/Builders/planeBuilder\";\r\nimport \"@babylonjs/core/Meshes/Builders/boxBuilder\";\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader\"\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/envTextureLoader\"\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/ktxTextureLoader\"\r\nimport \"@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\n// Override default material factory to avoid the dependency on standard material\r\nimport { Scene } from '@babylonjs/core/scene';\r\nScene.DefaultMaterialFactory = (scene:Scene)=>{return null as any};\r\n\r\nexport { RenderOnlyViewer };\r\n"]}
1
+ {"version":3,"file":"renderOnlyIndex.js","sourceRoot":"","sources":["../../../sourceES6/viewer/src/renderOnlyIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAwB;AACxB,OAAO,6BAA6B,CAAC;AACrC,OAAO,8DAA8D,CAAA;AACrE,OAAO,kCAAkC,CAAC;AAC1C,OAAO,8CAA8C,CAAC;AACtD,OAAO,4CAA4C,CAAC;AACpD,OAAO,6DAA6D,CAAA;AACpE,OAAO,6DAA6D,CAAA;AACpE,OAAO,6DAA6D,CAAA;AACpE,OAAO,6FAA6F,CAAC;AAErG,iFAAiF;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,KAAK,CAAC,sBAAsB,GAAG,UAAC,KAAY,IAAO,OAAO,IAAW,CAAA,CAAC,CAAC,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { RenderOnlyViewer } from './viewer/renderOnlyViewer';\r\n\r\n// Required side effects\r\nimport '@babylonjs/loaders/glTF/2.0';\r\nimport \"@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent\"\r\nimport \"@babylonjs/core/Debug/debugLayer\";\r\nimport \"@babylonjs/core/Meshes/Builders/planeBuilder\";\r\nimport \"@babylonjs/core/Meshes/Builders/boxBuilder\";\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader\"\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/envTextureLoader\"\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/ktxTextureLoader\"\r\nimport \"@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\n// Override default material factory to avoid the dependency on standard material\r\nimport { Scene } from '@babylonjs/core/scene';\r\nScene.DefaultMaterialFactory = (scene: Scene) => { return null as any };\r\n\r\nexport { RenderOnlyViewer };\r\n"]}
@@ -6,12 +6,14 @@ var __extends = (this && this.__extends) || (function () {
6
6
  return extendStatics(d, b);
7
7
  };
8
8
  return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
9
11
  extendStatics(d, b);
10
12
  function __() { this.constructor = d; }
11
13
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
14
  };
13
15
  })();
14
- import { AbstractViewerNavbarButton } from "../viewerTemplatePlugin";
16
+ import { AbstractViewerNavbarButton } from "../viewerTemplatePlugin.js";
15
17
  var HDButtonPlugin = /** @class */ (function (_super) {
16
18
  __extends(HDButtonPlugin, _super);
17
19
  function HDButtonPlugin(_viewer) {
@@ -1 +1 @@
1
- {"version":3,"file":"hdButtonPlugin.js","sourceRoot":"","sources":["../../../../../sourceES6/viewer/src/templating/plugins/hdButtonPlugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAIrE;IAAoC,kCAA0B;IAE1D,wBAAoB,OAAsB;QAA1C,YACI,kBAAM,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC,SACxD;QAFmB,aAAO,GAAP,OAAO,CAAe;;IAE1C,CAAC;IAED,gCAAO,GAAP,UAAQ,KAAoB;QACxB,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACxH;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEgB,2BAAY,GAAW,gTAgB3C,CAAC;IACF,qBAAC;CAAA,AA/BD,CAAoC,0BAA0B,GA+B7D;SA/BY,cAAc","sourcesContent":["import { AbstractViewerNavbarButton } from \"../viewerTemplatePlugin\";\r\nimport { DefaultViewer } from \"../../viewer/defaultViewer\";\r\nimport { EventCallback, Template } from \"../templateManager\";\r\n\r\nexport class HDButtonPlugin extends AbstractViewerNavbarButton {\r\n\r\n constructor(private _viewer: DefaultViewer) {\r\n super(\"hd\", \"hd-button\", HDButtonPlugin.HtmlTemplate);\r\n }\r\n\r\n onEvent(event: EventCallback): void {\r\n let button = event.template.parent.querySelector(\".hd-button\");\r\n if (button) {\r\n button.classList.contains(\"hd-toggled\") ? button.classList.remove(\"hd-toggled\") : button.classList.add(\"hd-toggled\");\r\n }\r\n this._viewer.toggleHD();\r\n }\r\n\r\n protected static HtmlTemplate: string = `\r\n{{#unless hideHd}}\r\n<style>\r\n.hd-icon:after {\r\n font-size: 16px;\r\n content: \"\\\\F765\";\r\n}\r\n\r\n.hd-toggled span.hd-icon:after {\r\n content: \"\\\\F766\";\r\n}\r\n</style>\r\n<button class=\"hd-button\" title=\"{{text.hdButton}}\">\r\n <span class=\"icon hd-icon\"></span>\r\n </button>\r\n {{/unless}}\r\n`;\r\n}"]}
1
+ {"version":3,"file":"hdButtonPlugin.js","sourceRoot":"","sources":["../../../../../sourceES6/viewer/src/templating/plugins/hdButtonPlugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAIrE;IAAoC,kCAA0B;IAE1D,wBAAoB,OAAsB;QAA1C,YACI,kBAAM,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC,SACxD;QAFmB,aAAO,GAAP,OAAO,CAAe;;IAE1C,CAAC;IAED,gCAAO,GAAP,UAAQ,KAAoB;QACxB,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACxH;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEgB,2BAAY,GAAW,gTAgB3C,CAAC;IACF,qBAAC;CAAA,AA/BD,CAAoC,0BAA0B,GA+B7D;SA/BY,cAAc","sourcesContent":["import { AbstractViewerNavbarButton } from \"../viewerTemplatePlugin\";\r\nimport { DefaultViewer } from \"../../viewer/defaultViewer\";\r\nimport { EventCallback, Template } from \"../templateManager\";\r\n\r\nexport class HDButtonPlugin extends AbstractViewerNavbarButton {\r\n\r\n constructor(private _viewer: DefaultViewer) {\r\n super(\"hd\", \"hd-button\", HDButtonPlugin.HtmlTemplate);\r\n }\r\n\r\n onEvent(event: EventCallback): void {\r\n let button = event.template.parent.querySelector(\".hd-button\");\r\n if (button) {\r\n button.classList.contains(\"hd-toggled\") ? button.classList.remove(\"hd-toggled\") : button.classList.add(\"hd-toggled\");\r\n }\r\n this._viewer.toggleHD();\r\n }\r\n\r\n protected static HtmlTemplate: string = `\r\n{{#unless hideHd}}\r\n<style>\r\n.hd-icon:after {\r\n font-size: 16px;\r\n content: \"\\\\F765\";\r\n}\r\n\r\n.hd-toggled span.hd-icon:after {\r\n content: \"\\\\F766\";\r\n}\r\n</style>\r\n<button class=\"hd-button\" title=\"{{text.hdButton}}\">\r\n <span class=\"icon hd-icon\"></span>\r\n </button>\r\n {{/unless}}\r\n`;\r\n}"]}
@@ -6,13 +6,15 @@ var __extends = (this && this.__extends) || (function () {
6
6
  return extendStatics(d, b);
7
7
  };
8
8
  return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
9
11
  extendStatics(d, b);
10
12
  function __() { this.constructor = d; }
11
13
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
14
  };
13
15
  })();
14
- import { AbstractViewerNavbarButton } from "../viewerTemplatePlugin";
15
- import { Tools } from "@babylonjs/core/Misc/tools";
16
+ import { AbstractViewerNavbarButton } from "../viewerTemplatePlugin.js";
17
+ import { Tools } from "@babylonjs/core/Misc/tools.js";
16
18
  var PrintButtonPlugin = /** @class */ (function (_super) {
17
19
  __extends(PrintButtonPlugin, _super);
18
20
  function PrintButtonPlugin(_viewer) {
@@ -1 +1 @@
1
- {"version":3,"file":"printButton.js","sourceRoot":"","sources":["../../../../../sourceES6/viewer/src/templating/plugins/printButton.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEnD;IAAuC,qCAA0B;IAI7D,2BAAoB,OAAsB;QAA1C,YACI,kBAAM,OAAO,EAAE,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC,SAsBjE;QAvBmB,aAAO,GAAP,OAAO,CAAe;QAGtC,KAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;YAC3C,KAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;gBACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;gBACrF,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAEvF,gBAAgB;gBAChB,IAAI,WAAS,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC9E,IAAI,WAAS,GAAG,KAAK,CAAC;gBACtB,8BAA8B;gBAC9B,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;oBACtC,IAAI,WAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC/B,WAAS,GAAG,IAAI,CAAC;qBACpB;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,WAAS,EAAE;oBACX,KAAI,CAAC,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;iBAC9C;aACJ;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAED,mCAAO,GAAP,UAAQ,KAAoB;QACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;YAC1F,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAClC;IACL,CAAC;IAEgB,8BAAY,GAAW,6PAed,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kHAI5G,CAAC;IACF,wBAAC;CAAA,AAxDD,CAAuC,0BAA0B,GAwDhE;SAxDY,iBAAiB","sourcesContent":["import { AbstractViewerNavbarButton } from \"../viewerTemplatePlugin\";\r\nimport { DefaultViewer } from \"../../viewer/defaultViewer\";\r\nimport { EventCallback } from \"../templateManager\";\r\nimport { Tools } from \"@babylonjs/core/Misc/tools\";\r\n\r\nexport class PrintButtonPlugin extends AbstractViewerNavbarButton {\r\n\r\n private _currentModelUrl: string;\r\n\r\n constructor(private _viewer: DefaultViewer) {\r\n super(\"print\", \"print-button\", PrintButtonPlugin.HtmlTemplate);\r\n\r\n this._viewer.onModelLoadedObservable.add((model) => {\r\n this._currentModelUrl = \"\";\r\n if (model.configuration.url) {\r\n let filename = Tools.GetFilename(model.configuration.url) || model.configuration.url;\r\n let baseUrl = model.configuration.root || Tools.GetFolderPath(model.configuration.url);\r\n\r\n //gltf, obj, stl\r\n let extension = model.configuration.loader || filename.split(\".\").pop() || \"\";\r\n let printable = false;\r\n // not using .some sue to IE11\r\n [\"gltf\", \"glb\", \"obj\", \"stl\"].forEach((ext) => {\r\n if (extension.indexOf(ext) !== -1) {\r\n printable = true;\r\n }\r\n });\r\n if (printable) {\r\n this._currentModelUrl = baseUrl + filename;\r\n }\r\n }\r\n });\r\n }\r\n\r\n onEvent(event: EventCallback): void {\r\n if (this._currentModelUrl) {\r\n let printUrl = this._currentModelUrl.replace(/https?:\\/\\//, \"com.microsoft.builder3d://\");\r\n window.open(printUrl, \"_self\");\r\n }\r\n }\r\n\r\n protected static HtmlTemplate: string = `\r\n{{#unless hidePrint}}\r\n<style>\r\n\r\n/* Show only if it's a windows 10 printer */\r\n.print-icon.not-win-10 {\r\n display: none;\r\n}\r\n\r\n.print-icon:after {\r\n font-size: 16px;\r\n content: \"\\\\E914\";\r\n}\r\n\r\n</style>\r\n<button class=\"print-button ${window.navigator.userAgent.indexOf(\"Windows NT 10.0\") === -1 ? \"no-win-10\" : \"\"}\" title=\"{{text.printButton}}\">\r\n <span class=\"icon print-icon\"></span>\r\n </button>\r\n {{/unless}}\r\n`;\r\n}\r\n"]}
1
+ {"version":3,"file":"printButton.js","sourceRoot":"","sources":["../../../../../sourceES6/viewer/src/templating/plugins/printButton.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEnD;IAAuC,qCAA0B;IAI7D,2BAAoB,OAAsB;QAA1C,YACI,kBAAM,OAAO,EAAE,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC,SAsBjE;QAvBmB,aAAO,GAAP,OAAO,CAAe;QAGtC,KAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;YAC3C,KAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;gBACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;gBACrF,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAEvF,gBAAgB;gBAChB,IAAI,WAAS,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC9E,IAAI,WAAS,GAAG,KAAK,CAAC;gBACtB,8BAA8B;gBAC9B,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;oBACtC,IAAI,WAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC/B,WAAS,GAAG,IAAI,CAAC;qBACpB;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,WAAS,EAAE;oBACX,KAAI,CAAC,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAC;iBAC9C;aACJ;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAED,mCAAO,GAAP,UAAQ,KAAoB;QACxB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;YAC1F,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAClC;IACL,CAAC;IAEgB,8BAAY,GAAW,6PAed,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kHAI5G,CAAC;IACF,wBAAC;CAAA,AAxDD,CAAuC,0BAA0B,GAwDhE;SAxDY,iBAAiB","sourcesContent":["import { AbstractViewerNavbarButton } from \"../viewerTemplatePlugin\";\r\nimport { DefaultViewer } from \"../../viewer/defaultViewer\";\r\nimport { EventCallback } from \"../templateManager\";\r\nimport { Tools } from \"@babylonjs/core/Misc/tools\";\r\n\r\nexport class PrintButtonPlugin extends AbstractViewerNavbarButton {\r\n\r\n private _currentModelUrl: string;\r\n\r\n constructor(private _viewer: DefaultViewer) {\r\n super(\"print\", \"print-button\", PrintButtonPlugin.HtmlTemplate);\r\n\r\n this._viewer.onModelLoadedObservable.add((model) => {\r\n this._currentModelUrl = \"\";\r\n if (model.configuration.url) {\r\n let filename = Tools.GetFilename(model.configuration.url) || model.configuration.url;\r\n let baseUrl = model.configuration.root || Tools.GetFolderPath(model.configuration.url);\r\n\r\n //gltf, obj, stl\r\n let extension = model.configuration.loader || filename.split(\".\").pop() || \"\";\r\n let printable = false;\r\n // not using .some sue to IE11\r\n [\"gltf\", \"glb\", \"obj\", \"stl\"].forEach((ext) => {\r\n if (extension.indexOf(ext) !== -1) {\r\n printable = true;\r\n }\r\n });\r\n if (printable) {\r\n this._currentModelUrl = baseUrl + filename;\r\n }\r\n }\r\n });\r\n }\r\n\r\n onEvent(event: EventCallback): void {\r\n if (this._currentModelUrl) {\r\n let printUrl = this._currentModelUrl.replace(/https?:\\/\\//, \"com.microsoft.builder3d://\");\r\n window.open(printUrl, \"_self\");\r\n }\r\n }\r\n\r\n protected static HtmlTemplate: string = `\r\n{{#unless hidePrint}}\r\n<style>\r\n\r\n/* Show only if it's a windows 10 printer */\r\n.print-icon.not-win-10 {\r\n display: none;\r\n}\r\n\r\n.print-icon:after {\r\n font-size: 16px;\r\n content: \"\\\\E914\";\r\n}\r\n\r\n</style>\r\n<button class=\"print-button ${window.navigator.userAgent.indexOf(\"Windows NT 10.0\") === -1 ? \"no-win-10\" : \"\"}\" title=\"{{text.printButton}}\">\r\n <span class=\"icon print-icon\"></span>\r\n </button>\r\n {{/unless}}\r\n`;\r\n}\r\n"]}
@@ -1,9 +1,9 @@
1
- import { Observable } from '@babylonjs/core/Misc/observable';
2
- import { Tools } from '@babylonjs/core/Misc/tools';
3
- import { isUrl, camelToKebab, kebabToCamel } from '../helper';
1
+ import { Observable } from '@babylonjs/core/Misc/observable.js';
2
+ import { Tools } from '@babylonjs/core/Misc/tools.js';
3
+ import { isUrl, camelToKebab, kebabToCamel } from '../helper.js';
4
4
  import * as Handlebars from 'handlebars/dist/handlebars';
5
- import { EventManager } from './eventManager';
6
- import { deepmerge } from '../helper/';
5
+ import { EventManager } from './eventManager.js';
6
+ import { deepmerge } from '../helper/.js';
7
7
  /**
8
8
  * The template manager, a member of the viewer class, will manage the viewer's templates and generate the HTML.
9
9
  * The template manager managers a single viewer and can be seen as the collection of all sub-templates of the viewer.
@@ -1 +1 @@
1
- {"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/templating/templateManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from '@babylonjs/core/Misc/observable';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { isUrl, camelToKebab, kebabToCamel } from '../helper';\r\n\r\nimport * as Handlebars from 'handlebars/dist/handlebars';\r\nimport { EventManager } from './eventManager';\r\nimport { ITemplateConfiguration } from '../configuration/interfaces';\r\nimport { deepmerge } from '../helper/';\r\nimport { IFileRequest } from '@babylonjs/core/Misc/fileRequest';\r\n\r\n/**\r\n * The object sent when an event is triggered\r\n */\r\nexport interface EventCallback {\r\n event: Event;\r\n template: Template;\r\n selector: string;\r\n payload?: any;\r\n}\r\n\r\n/**\r\n * The template manager, a member of the viewer class, will manage the viewer's templates and generate the HTML.\r\n * The template manager managers a single viewer and can be seen as the collection of all sub-templates of the viewer.\r\n */\r\nexport class TemplateManager {\r\n\r\n /**\r\n * Will be triggered when any template is initialized\r\n */\r\n public onTemplateInit: Observable<Template>;\r\n /**\r\n * Will be triggered when any template is fully loaded\r\n */\r\n public onTemplateLoaded: Observable<Template>;\r\n /**\r\n * Will be triggered when a template state changes\r\n */\r\n public onTemplateStateChange: Observable<Template>;\r\n /**\r\n * Will be triggered when all templates finished loading\r\n */\r\n public onAllLoaded: Observable<TemplateManager>;\r\n /**\r\n * Will be triggered when any event on any template is triggered.\r\n */\r\n public onEventTriggered: Observable<EventCallback>;\r\n\r\n /**\r\n * This template manager's event manager. In charge of callback registrations to native event types\r\n */\r\n public eventManager: EventManager;\r\n\r\n private templates: { [name: string]: Template };\r\n\r\n constructor(public containerElement: Element) {\r\n this.templates = {};\r\n\r\n this.onTemplateInit = new Observable<Template>();\r\n this.onTemplateLoaded = new Observable<Template>();\r\n this.onTemplateStateChange = new Observable<Template>();\r\n this.onAllLoaded = new Observable<TemplateManager>();\r\n this.onEventTriggered = new Observable<EventCallback>();\r\n\r\n this.eventManager = new EventManager(this);\r\n }\r\n\r\n /**\r\n * Initialize the template(s) for the viewer. Called bay the Viewer class\r\n * @param templates the templates to be used to initialize the main template\r\n */\r\n public initTemplate(templates: { [key: string]: ITemplateConfiguration }) {\r\n\r\n let internalInit = (dependencyMap, name: string, parentTemplate?: Template) => {\r\n //init template\r\n let template = this.templates[name];\r\n\r\n let childrenTemplates = Object.keys(dependencyMap).map((childName) => {\r\n return internalInit(dependencyMap[childName], childName, template);\r\n });\r\n\r\n // register the observers\r\n //template.onLoaded.add(() => {\r\n let addToParent = () => {\r\n let lastElements = parentTemplate && parentTemplate.parent.querySelectorAll(camelToKebab(name));\r\n let containingElement = (lastElements && lastElements.length && lastElements.item(lastElements.length - 1)) || this.containerElement;\r\n template.appendTo(<HTMLElement>containingElement);\r\n this._checkLoadedState();\r\n };\r\n\r\n if (parentTemplate && !parentTemplate.parent) {\r\n parentTemplate.onAppended.add(() => {\r\n addToParent();\r\n });\r\n } else {\r\n addToParent();\r\n }\r\n //});\r\n\r\n return template;\r\n };\r\n\r\n //build the html tree\r\n return this._buildHTMLTree(templates).then((htmlTree) => {\r\n if (this.templates['main']) {\r\n internalInit(htmlTree, 'main');\r\n } else {\r\n this._checkLoadedState();\r\n }\r\n return;\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * This function will create a simple map with child-dependencies of the template html tree.\r\n * It will compile each template, check if its children exist in the configuration and will add them if they do.\r\n * It is expected that the main template will be called main!\r\n *\r\n * @param templates\r\n */\r\n private _buildHTMLTree(templates: { [key: string]: ITemplateConfiguration }): Promise<object> {\r\n let promises: Array<Promise<Template | boolean>> = Object.keys(templates).map((name) => {\r\n // if the template was overridden\r\n if (!templates[name]) { return Promise.resolve(false); }\r\n // else - we have a template, let's do our job!\r\n let template = new Template(name, templates[name]);\r\n template.onLoaded.add(() => {\r\n this.onTemplateLoaded.notifyObservers(template);\r\n });\r\n template.onStateChange.add(() => {\r\n this.onTemplateStateChange.notifyObservers(template);\r\n });\r\n this.onTemplateInit.notifyObservers(template);\r\n // make sure the global onEventTriggered is called as well\r\n template.onEventTriggered.add((eventData) => this.onEventTriggered.notifyObservers(eventData));\r\n this.templates[name] = template;\r\n return template.initPromise;\r\n });\r\n\r\n return Promise.all(promises).then(() => {\r\n let templateStructure = {};\r\n // now iterate through all templates and check for children:\r\n let buildTree = (parentObject, name) => {\r\n this.templates[name].isInHtmlTree = true;\r\n let childNodes = this.templates[name].getChildElements().filter((n) => !!this.templates[n]);\r\n childNodes.forEach((element) => {\r\n parentObject[element] = {};\r\n buildTree(parentObject[element], element);\r\n });\r\n };\r\n if (this.templates['main']) {\r\n buildTree(templateStructure, \"main\");\r\n }\r\n return templateStructure;\r\n });\r\n }\r\n\r\n /**\r\n * Get the canvas in the template tree.\r\n * There must be one and only one canvas inthe template.\r\n */\r\n public getCanvas(): HTMLCanvasElement | null {\r\n return this.containerElement.querySelector('canvas');\r\n }\r\n\r\n /**\r\n * Get a specific template from the template tree\r\n * @param name the name of the template to load\r\n */\r\n public getTemplate(name: string): Template | undefined {\r\n return this.templates[name];\r\n }\r\n\r\n private _checkLoadedState() {\r\n let done = Object.keys(this.templates).length === 0 || Object.keys(this.templates).every((key) => {\r\n return (this.templates[key].isLoaded && !!this.templates[key].parent) || !this.templates[key].isInHtmlTree;\r\n });\r\n\r\n if (done) {\r\n this.onAllLoaded.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the template manager\r\n */\r\n public dispose() {\r\n // dispose all templates\r\n Object.keys(this.templates).forEach((template) => {\r\n this.templates[template].dispose();\r\n });\r\n this.templates = {};\r\n this.eventManager.dispose();\r\n\r\n this.onTemplateInit.clear();\r\n this.onAllLoaded.clear();\r\n this.onEventTriggered.clear();\r\n this.onTemplateLoaded.clear();\r\n this.onTemplateStateChange.clear();\r\n }\r\n\r\n}\r\n\r\n// register a new helper. modified https://stackoverflow.com/questions/9838925/is-there-any-method-to-iterate-a-map-with-handlebars-js\r\nHandlebars.registerHelper('eachInMap', function(map, block) {\r\n var out = '';\r\n Object.keys(map).map(function(prop) {\r\n let data = map[prop];\r\n if (typeof data === 'object') {\r\n data.id = data.id || prop;\r\n out += block.fn(data);\r\n } else {\r\n out += block.fn({ id: prop, value: data });\r\n }\r\n });\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('add', function(a, b) {\r\n var out = a + b;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('eq', function(a, b) {\r\n var out = (a == b);\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('or', function(a, b) {\r\n var out = a || b;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('not', function(a) {\r\n var out = !a;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('count', function(map) {\r\n return map.length;\r\n});\r\n\r\nHandlebars.registerHelper('gt', function(a, b) {\r\n var out = a > b;\r\n return out;\r\n});\r\n\r\n/**\r\n * This class represents a single template in the viewer's template tree.\r\n * An example for a template is a single canvas, an overlay (containing sub-templates) or the navigation bar.\r\n * A template is injected using the template manager in the correct position.\r\n * The template is rendered using Handlebars and can use Handlebars' features (such as parameter injection)\r\n *\r\n * For further information please refer to the documentation page, https://doc.babylonjs.com\r\n */\r\nexport class Template {\r\n\r\n /**\r\n * Will be triggered when the template is loaded\r\n */\r\n public onLoaded: Observable<Template>;\r\n /**\r\n * will be triggered when the template is appended to the tree\r\n */\r\n public onAppended: Observable<Template>;\r\n /**\r\n * Will be triggered when the template's state changed (shown, hidden)\r\n */\r\n public onStateChange: Observable<Template>;\r\n /**\r\n * Will be triggered when an event is triggered on ths template.\r\n * The event is a native browser event (like mouse or pointer events)\r\n */\r\n public onEventTriggered: Observable<EventCallback>;\r\n\r\n public onParamsUpdated: Observable<Template>;\r\n\r\n public onHTMLRendered: Observable<Template>;\r\n\r\n /**\r\n * is the template loaded?\r\n */\r\n public isLoaded: boolean;\r\n /**\r\n * This is meant to be used to track the show and hide functions.\r\n * This is NOT (!!) a flag to check if the element is actually visible to the user.\r\n */\r\n public isShown: boolean;\r\n\r\n /**\r\n * Is this template a part of the HTML tree (the template manager injected it)\r\n */\r\n public isInHtmlTree: boolean;\r\n\r\n /**\r\n * The HTML element containing this template\r\n */\r\n public parent: HTMLElement;\r\n\r\n /**\r\n * A promise that is fulfilled when the template finished loading.\r\n */\r\n public initPromise: Promise<Template>;\r\n\r\n private _fragment: DocumentFragment | Element;\r\n private _addedFragment: DocumentFragment | Element;\r\n private _htmlTemplate: string;\r\n private _rawHtml: string;\r\n\r\n private loadRequests: Array<IFileRequest>;\r\n\r\n constructor(public name: string, private _configuration: ITemplateConfiguration) {\r\n this.onLoaded = new Observable<Template>();\r\n this.onAppended = new Observable<Template>();\r\n this.onStateChange = new Observable<Template>();\r\n this.onEventTriggered = new Observable<EventCallback>();\r\n this.onParamsUpdated = new Observable<Template>();\r\n this.onHTMLRendered = new Observable<Template>();\r\n\r\n this.loadRequests = [];\r\n\r\n this.isLoaded = false;\r\n this.isShown = false;\r\n this.isInHtmlTree = false;\r\n\r\n let htmlContentPromise = this._getTemplateAsHtml(_configuration);\r\n\r\n this.initPromise = htmlContentPromise.then((htmlTemplate) => {\r\n if (htmlTemplate) {\r\n this._htmlTemplate = htmlTemplate;\r\n let compiledTemplate = Handlebars.compile(htmlTemplate, { noEscape: (this._configuration.params && !!this._configuration.params.noEscape) });\r\n let config = this._configuration.params || {};\r\n this._rawHtml = compiledTemplate(config);\r\n try {\r\n this._fragment = document.createRange().createContextualFragment(this._rawHtml);\r\n } catch (e) {\r\n let test = document.createElement(this.name);\r\n test.innerHTML = this._rawHtml;\r\n this._fragment = test;\r\n }\r\n this.isLoaded = true;\r\n this.isShown = true;\r\n this.onLoaded.notifyObservers(this);\r\n }\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Some templates have parameters (like background color for example).\r\n * The parameters are provided to Handlebars which in turn generates the template.\r\n * This function will update the template with the new parameters\r\n *\r\n * Note that when updating parameters the events will be registered again (after being cleared).\r\n *\r\n * @param params the new template parameters\r\n */\r\n public updateParams(params: { [key: string]: string | number | boolean | object }, append: boolean = true) {\r\n if (append) {\r\n this._configuration.params = deepmerge(this._configuration.params, params);\r\n } else {\r\n this._configuration.params = params;\r\n }\r\n // update the template\r\n if (this.isLoaded) {\r\n // this.dispose();\r\n }\r\n let compiledTemplate = Handlebars.compile(this._htmlTemplate);\r\n let config = this._configuration.params || {};\r\n this._rawHtml = compiledTemplate(config);\r\n try {\r\n this._fragment = document.createRange().createContextualFragment(this._rawHtml);\r\n } catch (e) {\r\n let test = document.createElement(this.name);\r\n test.innerHTML = this._rawHtml;\r\n this._fragment = test;\r\n }\r\n if (this.parent) {\r\n this.appendTo(this.parent, true);\r\n }\r\n }\r\n\r\n public redraw() {\r\n this.updateParams({});\r\n }\r\n\r\n /**\r\n * Get the template'S configuration\r\n */\r\n public get configuration(): ITemplateConfiguration {\r\n return this._configuration;\r\n }\r\n\r\n /**\r\n * A template can be a parent element for other templates or HTML elements.\r\n * This function will deliver all child HTML elements of this template.\r\n */\r\n public getChildElements(): Array<string> {\r\n let childrenArray: string[] = [];\r\n //Edge and IE don't support frage,ent.children\r\n let children: HTMLCollection | NodeListOf<Element> = this._fragment && this._fragment.children;\r\n if (!this._fragment) {\r\n let fragment = this.parent.querySelector(this.name);\r\n if (fragment) {\r\n children = fragment.querySelectorAll('*');\r\n }\r\n }\r\n if (!children) {\r\n // casting to HTMLCollection, as both NodeListOf and HTMLCollection have 'item()' and 'length'.\r\n children = this._fragment.querySelectorAll('*');\r\n }\r\n for (let i = 0; i < children.length; ++i) {\r\n const child = children.item(i);\r\n if (child) {\r\n childrenArray.push(kebabToCamel(child.nodeName.toLowerCase()));\r\n }\r\n }\r\n return childrenArray;\r\n }\r\n\r\n /**\r\n * Appending the template to a parent HTML element.\r\n * If a parent is already set and you wish to replace the old HTML with new one, forceRemove should be true.\r\n * @param parent the parent to which the template is added\r\n * @param forceRemove if the parent already exists, shoud the template be removed from it?\r\n */\r\n public appendTo(parent: HTMLElement, forceRemove?: boolean) {\r\n if (this.parent) {\r\n if (forceRemove && this._addedFragment) {\r\n /*let fragement = this.parent.querySelector(this.name)\r\n if (fragement)\r\n this.parent.removeChild(fragement);*/\r\n this.parent.innerHTML = '';\r\n } else {\r\n return;\r\n }\r\n }\r\n this.parent = parent;\r\n\r\n if (this._configuration.id) {\r\n this.parent.id = this._configuration.id;\r\n }\r\n if (this._fragment) {\r\n this.parent.appendChild(this._fragment);\r\n this._addedFragment = this._fragment;\r\n } else {\r\n this.parent.insertAdjacentHTML(\"beforeend\", this._rawHtml);\r\n }\r\n\r\n this.onHTMLRendered.notifyObservers(this);\r\n\r\n // appended only one frame after.\r\n setTimeout(() => {\r\n this._registerEvents();\r\n this.onAppended.notifyObservers(this);\r\n });\r\n }\r\n\r\n private _isShowing: boolean;\r\n private _isHiding: boolean;\r\n\r\n /**\r\n * Show the template using the provided visibilityFunction, or natively using display: flex.\r\n * The provided function returns a promise that should be fullfilled when the element is shown.\r\n * Since it is a promise async operations are more than possible.\r\n * See the default viewer for an opacity example.\r\n * @param visibilityFunction The function to execute to show the template.\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n if (this._isHiding) { return Promise.resolve(this); }\r\n return Promise.resolve().then(() => {\r\n this._isShowing = true;\r\n if (visibilityFunction) {\r\n return visibilityFunction(this);\r\n } else {\r\n // flex? box? should this be configurable easier than the visibilityFunction?\r\n this.parent.style.display = 'flex';\r\n // support old browsers with no flex:\r\n if (this.parent.style.display !== 'flex') {\r\n this.parent.style.display = '';\r\n }\r\n return this;\r\n }\r\n }).then(() => {\r\n this.isShown = true;\r\n this._isShowing = false;\r\n this.onStateChange.notifyObservers(this);\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Hide the template using the provided visibilityFunction, or natively using display: none.\r\n * The provided function returns a promise that should be fullfilled when the element is hidden.\r\n * Since it is a promise async operations are more than possible.\r\n * See the default viewer for an opacity example.\r\n * @param visibilityFunction The function to execute to show the template.\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n if (this._isShowing) { return Promise.resolve(this); }\r\n return Promise.resolve().then(() => {\r\n this._isHiding = true;\r\n if (visibilityFunction) {\r\n return visibilityFunction(this);\r\n } else {\r\n // flex? box? should this be configurable easier than the visibilityFunction?\r\n this.parent.style.display = 'none';\r\n return this;\r\n }\r\n }).then(() => {\r\n this.isShown = false;\r\n this._isHiding = false;\r\n this.onStateChange.notifyObservers(this);\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Dispose this template\r\n */\r\n public dispose() {\r\n this.onAppended.clear();\r\n this.onEventTriggered.clear();\r\n this.onLoaded.clear();\r\n this.onStateChange.clear();\r\n this.isLoaded = false;\r\n // remove from parent\r\n try {\r\n this.parent.removeChild(this._fragment);\r\n } catch (e) {\r\n //noop\r\n }\r\n\r\n this.loadRequests.forEach((request) => {\r\n request.abort();\r\n });\r\n\r\n if (this._registeredEvents) {\r\n this._registeredEvents.forEach((evt) => {\r\n evt.htmlElement.removeEventListener(evt.eventName, evt.function);\r\n });\r\n }\r\n }\r\n\r\n private _getTemplateAsHtml(templateConfig: ITemplateConfiguration): Promise<string> {\r\n if (!templateConfig) {\r\n return Promise.reject('No templateConfig provided');\r\n } else if (templateConfig.html && !templateConfig.location) {\r\n return Promise.resolve(templateConfig.html);\r\n } else {\r\n let location = this._getTemplateLocation(templateConfig);\r\n if (isUrl(location)) {\r\n return new Promise((resolve, reject) => {\r\n let fileRequest = Tools.LoadFile(location, (data: string) => {\r\n resolve(data);\r\n }, undefined, undefined, false, (request, error: any) => {\r\n reject(error);\r\n });\r\n this.loadRequests.push(fileRequest);\r\n });\r\n } else {\r\n location = location.replace('#', '');\r\n let element = document.getElementById(location);\r\n if (element) {\r\n return Promise.resolve(element.innerHTML);\r\n } else {\r\n return Promise.reject('Template ID not found');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _registeredEvents: Array<{ htmlElement: HTMLElement, eventName: string, function: EventListenerOrEventListenerObject }>;\r\n\r\n private _registerEvents() {\r\n this._registeredEvents = this._registeredEvents || [];\r\n if (this._registeredEvents.length) {\r\n // first remove the registered events\r\n this._registeredEvents.forEach((evt) => {\r\n evt.htmlElement.removeEventListener(evt.eventName, evt.function);\r\n });\r\n }\r\n if (this._configuration.events) {\r\n for (let eventName in this._configuration.events) {\r\n if (this._configuration.events && this._configuration.events[eventName]) {\r\n let functionToFire = (selector, event) => {\r\n this.onEventTriggered.notifyObservers({ event: event, template: this, selector: selector });\r\n };\r\n\r\n // if boolean, set the parent as the event listener\r\n if (typeof this._configuration.events[eventName] === 'boolean') {\r\n let selector = this.parent.id;\r\n if (selector) {\r\n selector = '#' + selector;\r\n } else {\r\n selector = this.parent.tagName;\r\n }\r\n let binding = functionToFire.bind(this, selector);\r\n this.parent.addEventListener(eventName, binding, false);\r\n this._registeredEvents.push({\r\n htmlElement: this.parent,\r\n eventName: eventName,\r\n function: binding\r\n });\r\n } else if (typeof this._configuration.events[eventName] === 'object') {\r\n let selectorsArray: Array<string> = Object.keys((this._configuration.events[eventName] as object) || {});\r\n // strict null checl is working incorrectly, must override:\r\n let event = this._configuration.events[eventName] || {};\r\n selectorsArray.filter((selector) => event[selector]).forEach((selector) => {\r\n let htmlElement = <HTMLElement>this.parent.querySelector(selector);\r\n if (!htmlElement) {\r\n // backcompat, fallback to id\r\n if (selector && selector.indexOf('#') !== 0) {\r\n selector = '#' + selector;\r\n }\r\n try {\r\n htmlElement = <HTMLElement>this.parent.querySelector(selector);\r\n } catch (e) { }\r\n }\r\n if (htmlElement) {\r\n let binding = functionToFire.bind(this, selector);\r\n htmlElement.addEventListener(eventName, binding, false);\r\n this._registeredEvents.push({\r\n htmlElement: htmlElement,\r\n eventName: eventName,\r\n function: binding\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _getTemplateLocation(templateConfig): string {\r\n if (!templateConfig || typeof templateConfig === 'string') {\r\n return templateConfig;\r\n } else {\r\n return templateConfig.location;\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"templateManager.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/templating/templateManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from '@babylonjs/core/Misc/observable';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { isUrl, camelToKebab, kebabToCamel } from '../helper';\r\n\r\nimport * as Handlebars from 'handlebars/dist/handlebars';\r\nimport { EventManager } from './eventManager';\r\nimport { ITemplateConfiguration } from '../configuration/interfaces';\r\nimport { deepmerge } from '../helper/';\r\nimport { IFileRequest } from '@babylonjs/core/Misc/fileRequest';\r\n\r\n/**\r\n * The object sent when an event is triggered\r\n */\r\nexport interface EventCallback {\r\n event: Event;\r\n template: Template;\r\n selector: string;\r\n payload?: any;\r\n}\r\n\r\n/**\r\n * The template manager, a member of the viewer class, will manage the viewer's templates and generate the HTML.\r\n * The template manager managers a single viewer and can be seen as the collection of all sub-templates of the viewer.\r\n */\r\nexport class TemplateManager {\r\n\r\n /**\r\n * Will be triggered when any template is initialized\r\n */\r\n public onTemplateInit: Observable<Template>;\r\n /**\r\n * Will be triggered when any template is fully loaded\r\n */\r\n public onTemplateLoaded: Observable<Template>;\r\n /**\r\n * Will be triggered when a template state changes\r\n */\r\n public onTemplateStateChange: Observable<Template>;\r\n /**\r\n * Will be triggered when all templates finished loading\r\n */\r\n public onAllLoaded: Observable<TemplateManager>;\r\n /**\r\n * Will be triggered when any event on any template is triggered.\r\n */\r\n public onEventTriggered: Observable<EventCallback>;\r\n\r\n /**\r\n * This template manager's event manager. In charge of callback registrations to native event types\r\n */\r\n public eventManager: EventManager;\r\n\r\n private templates: { [name: string]: Template };\r\n\r\n constructor(public containerElement: Element) {\r\n this.templates = {};\r\n\r\n this.onTemplateInit = new Observable<Template>();\r\n this.onTemplateLoaded = new Observable<Template>();\r\n this.onTemplateStateChange = new Observable<Template>();\r\n this.onAllLoaded = new Observable<TemplateManager>();\r\n this.onEventTriggered = new Observable<EventCallback>();\r\n\r\n this.eventManager = new EventManager(this);\r\n }\r\n\r\n /**\r\n * Initialize the template(s) for the viewer. Called bay the Viewer class\r\n * @param templates the templates to be used to initialize the main template\r\n */\r\n public initTemplate(templates: { [key: string]: ITemplateConfiguration }) {\r\n\r\n let internalInit = (dependencyMap, name: string, parentTemplate?: Template) => {\r\n //init template\r\n let template = this.templates[name];\r\n\r\n let childrenTemplates = Object.keys(dependencyMap).map((childName) => {\r\n return internalInit(dependencyMap[childName], childName, template);\r\n });\r\n\r\n // register the observers\r\n //template.onLoaded.add(() => {\r\n let addToParent = () => {\r\n let lastElements = parentTemplate && parentTemplate.parent.querySelectorAll(camelToKebab(name));\r\n let containingElement = (lastElements && lastElements.length && lastElements.item(lastElements.length - 1)) || this.containerElement;\r\n template.appendTo(<HTMLElement>containingElement);\r\n this._checkLoadedState();\r\n };\r\n\r\n if (parentTemplate && !parentTemplate.parent) {\r\n parentTemplate.onAppended.add(() => {\r\n addToParent();\r\n });\r\n } else {\r\n addToParent();\r\n }\r\n //});\r\n\r\n return template;\r\n };\r\n\r\n //build the html tree\r\n return this._buildHTMLTree(templates).then((htmlTree) => {\r\n if (this.templates['main']) {\r\n internalInit(htmlTree, 'main');\r\n } else {\r\n this._checkLoadedState();\r\n }\r\n return;\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * This function will create a simple map with child-dependencies of the template html tree.\r\n * It will compile each template, check if its children exist in the configuration and will add them if they do.\r\n * It is expected that the main template will be called main!\r\n *\r\n * @param templates\r\n */\r\n private _buildHTMLTree(templates: { [key: string]: ITemplateConfiguration }): Promise<object> {\r\n let promises: Array<Promise<Template | boolean>> = Object.keys(templates).map((name) => {\r\n // if the template was overridden\r\n if (!templates[name]) { return Promise.resolve(false); }\r\n // else - we have a template, let's do our job!\r\n let template = new Template(name, templates[name]);\r\n template.onLoaded.add(() => {\r\n this.onTemplateLoaded.notifyObservers(template);\r\n });\r\n template.onStateChange.add(() => {\r\n this.onTemplateStateChange.notifyObservers(template);\r\n });\r\n this.onTemplateInit.notifyObservers(template);\r\n // make sure the global onEventTriggered is called as well\r\n template.onEventTriggered.add((eventData) => this.onEventTriggered.notifyObservers(eventData));\r\n this.templates[name] = template;\r\n return template.initPromise;\r\n });\r\n\r\n return Promise.all(promises).then(() => {\r\n let templateStructure = {};\r\n // now iterate through all templates and check for children:\r\n let buildTree = (parentObject, name) => {\r\n this.templates[name].isInHtmlTree = true;\r\n let childNodes = this.templates[name].getChildElements().filter((n) => !!this.templates[n]);\r\n childNodes.forEach((element) => {\r\n parentObject[element] = {};\r\n buildTree(parentObject[element], element);\r\n });\r\n };\r\n if (this.templates['main']) {\r\n buildTree(templateStructure, \"main\");\r\n }\r\n return templateStructure;\r\n });\r\n }\r\n\r\n /**\r\n * Get the canvas in the template tree.\r\n * There must be one and only one canvas inthe template.\r\n */\r\n public getCanvas(): HTMLCanvasElement | null {\r\n return this.containerElement.querySelector('canvas');\r\n }\r\n\r\n /**\r\n * Get a specific template from the template tree\r\n * @param name the name of the template to load\r\n */\r\n public getTemplate(name: string): Template | undefined {\r\n return this.templates[name];\r\n }\r\n\r\n private _checkLoadedState() {\r\n let done = Object.keys(this.templates).length === 0 || Object.keys(this.templates).every((key) => {\r\n return (this.templates[key].isLoaded && !!this.templates[key].parent) || !this.templates[key].isInHtmlTree;\r\n });\r\n\r\n if (done) {\r\n this.onAllLoaded.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the template manager\r\n */\r\n public dispose() {\r\n // dispose all templates\r\n Object.keys(this.templates).forEach((template) => {\r\n this.templates[template].dispose();\r\n });\r\n this.templates = {};\r\n this.eventManager.dispose();\r\n\r\n this.onTemplateInit.clear();\r\n this.onAllLoaded.clear();\r\n this.onEventTriggered.clear();\r\n this.onTemplateLoaded.clear();\r\n this.onTemplateStateChange.clear();\r\n }\r\n\r\n}\r\n\r\n// register a new helper. modified https://stackoverflow.com/questions/9838925/is-there-any-method-to-iterate-a-map-with-handlebars-js\r\nHandlebars.registerHelper('eachInMap', function (map, block) {\r\n var out = '';\r\n Object.keys(map).map(function (prop) {\r\n let data = map[prop];\r\n if (typeof data === 'object') {\r\n data.id = data.id || prop;\r\n out += block.fn(data);\r\n } else {\r\n out += block.fn({ id: prop, value: data });\r\n }\r\n });\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('add', function (a, b) {\r\n var out = a + b;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('eq', function (a, b) {\r\n var out = (a == b);\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('or', function (a, b) {\r\n var out = a || b;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('not', function (a) {\r\n var out = !a;\r\n return out;\r\n});\r\n\r\nHandlebars.registerHelper('count', function (map) {\r\n return map.length;\r\n});\r\n\r\nHandlebars.registerHelper('gt', function (a, b) {\r\n var out = a > b;\r\n return out;\r\n});\r\n\r\n/**\r\n * This class represents a single template in the viewer's template tree.\r\n * An example for a template is a single canvas, an overlay (containing sub-templates) or the navigation bar.\r\n * A template is injected using the template manager in the correct position.\r\n * The template is rendered using Handlebars and can use Handlebars' features (such as parameter injection)\r\n *\r\n * For further information please refer to the documentation page, https://doc.babylonjs.com\r\n */\r\nexport class Template {\r\n\r\n /**\r\n * Will be triggered when the template is loaded\r\n */\r\n public onLoaded: Observable<Template>;\r\n /**\r\n * will be triggered when the template is appended to the tree\r\n */\r\n public onAppended: Observable<Template>;\r\n /**\r\n * Will be triggered when the template's state changed (shown, hidden)\r\n */\r\n public onStateChange: Observable<Template>;\r\n /**\r\n * Will be triggered when an event is triggered on ths template.\r\n * The event is a native browser event (like mouse or pointer events)\r\n */\r\n public onEventTriggered: Observable<EventCallback>;\r\n\r\n public onParamsUpdated: Observable<Template>;\r\n\r\n public onHTMLRendered: Observable<Template>;\r\n\r\n /**\r\n * is the template loaded?\r\n */\r\n public isLoaded: boolean;\r\n /**\r\n * This is meant to be used to track the show and hide functions.\r\n * This is NOT (!!) a flag to check if the element is actually visible to the user.\r\n */\r\n public isShown: boolean;\r\n\r\n /**\r\n * Is this template a part of the HTML tree (the template manager injected it)\r\n */\r\n public isInHtmlTree: boolean;\r\n\r\n /**\r\n * The HTML element containing this template\r\n */\r\n public parent: HTMLElement;\r\n\r\n /**\r\n * A promise that is fulfilled when the template finished loading.\r\n */\r\n public initPromise: Promise<Template>;\r\n\r\n private _fragment: DocumentFragment | Element;\r\n private _addedFragment: DocumentFragment | Element;\r\n private _htmlTemplate: string;\r\n private _rawHtml: string;\r\n\r\n private loadRequests: Array<IFileRequest>;\r\n\r\n constructor(public name: string, private _configuration: ITemplateConfiguration) {\r\n this.onLoaded = new Observable<Template>();\r\n this.onAppended = new Observable<Template>();\r\n this.onStateChange = new Observable<Template>();\r\n this.onEventTriggered = new Observable<EventCallback>();\r\n this.onParamsUpdated = new Observable<Template>();\r\n this.onHTMLRendered = new Observable<Template>();\r\n\r\n this.loadRequests = [];\r\n\r\n this.isLoaded = false;\r\n this.isShown = false;\r\n this.isInHtmlTree = false;\r\n\r\n let htmlContentPromise = this._getTemplateAsHtml(_configuration);\r\n\r\n this.initPromise = htmlContentPromise.then((htmlTemplate) => {\r\n if (htmlTemplate) {\r\n this._htmlTemplate = htmlTemplate;\r\n let compiledTemplate = Handlebars.compile(htmlTemplate, { noEscape: (this._configuration.params && !!this._configuration.params.noEscape) });\r\n let config = this._configuration.params || {};\r\n this._rawHtml = compiledTemplate(config);\r\n try {\r\n this._fragment = document.createRange().createContextualFragment(this._rawHtml);\r\n } catch (e) {\r\n let test = document.createElement(this.name);\r\n test.innerHTML = this._rawHtml;\r\n this._fragment = test;\r\n }\r\n this.isLoaded = true;\r\n this.isShown = true;\r\n this.onLoaded.notifyObservers(this);\r\n }\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Some templates have parameters (like background color for example).\r\n * The parameters are provided to Handlebars which in turn generates the template.\r\n * This function will update the template with the new parameters\r\n *\r\n * Note that when updating parameters the events will be registered again (after being cleared).\r\n *\r\n * @param params the new template parameters\r\n */\r\n public updateParams(params: { [key: string]: string | number | boolean | object }, append: boolean = true) {\r\n if (append) {\r\n this._configuration.params = deepmerge(this._configuration.params, params);\r\n } else {\r\n this._configuration.params = params;\r\n }\r\n // update the template\r\n if (this.isLoaded) {\r\n // this.dispose();\r\n }\r\n let compiledTemplate = Handlebars.compile(this._htmlTemplate);\r\n let config = this._configuration.params || {};\r\n this._rawHtml = compiledTemplate(config);\r\n try {\r\n this._fragment = document.createRange().createContextualFragment(this._rawHtml);\r\n } catch (e) {\r\n let test = document.createElement(this.name);\r\n test.innerHTML = this._rawHtml;\r\n this._fragment = test;\r\n }\r\n if (this.parent) {\r\n this.appendTo(this.parent, true);\r\n }\r\n }\r\n\r\n public redraw() {\r\n this.updateParams({});\r\n }\r\n\r\n /**\r\n * Get the template'S configuration\r\n */\r\n public get configuration(): ITemplateConfiguration {\r\n return this._configuration;\r\n }\r\n\r\n /**\r\n * A template can be a parent element for other templates or HTML elements.\r\n * This function will deliver all child HTML elements of this template.\r\n */\r\n public getChildElements(): Array<string> {\r\n let childrenArray: string[] = [];\r\n //Edge and IE don't support frage,ent.children\r\n let children: HTMLCollection | NodeListOf<Element> = this._fragment && this._fragment.children;\r\n if (!this._fragment) {\r\n let fragment = this.parent.querySelector(this.name);\r\n if (fragment) {\r\n children = fragment.querySelectorAll('*');\r\n }\r\n }\r\n if (!children) {\r\n // casting to HTMLCollection, as both NodeListOf and HTMLCollection have 'item()' and 'length'.\r\n children = this._fragment.querySelectorAll('*');\r\n }\r\n for (let i = 0; i < children.length; ++i) {\r\n const child = children.item(i);\r\n if (child) {\r\n childrenArray.push(kebabToCamel(child.nodeName.toLowerCase()));\r\n }\r\n }\r\n return childrenArray;\r\n }\r\n\r\n /**\r\n * Appending the template to a parent HTML element.\r\n * If a parent is already set and you wish to replace the old HTML with new one, forceRemove should be true.\r\n * @param parent the parent to which the template is added\r\n * @param forceRemove if the parent already exists, shoud the template be removed from it?\r\n */\r\n public appendTo(parent: HTMLElement, forceRemove?: boolean) {\r\n if (this.parent) {\r\n if (forceRemove && this._addedFragment) {\r\n /*let fragement = this.parent.querySelector(this.name)\r\n if (fragement)\r\n this.parent.removeChild(fragement);*/\r\n this.parent.innerHTML = '';\r\n } else {\r\n return;\r\n }\r\n }\r\n this.parent = parent;\r\n\r\n if (this._configuration.id) {\r\n this.parent.id = this._configuration.id;\r\n }\r\n if (this._fragment) {\r\n this.parent.appendChild(this._fragment);\r\n this._addedFragment = this._fragment;\r\n } else {\r\n this.parent.insertAdjacentHTML(\"beforeend\", this._rawHtml);\r\n }\r\n\r\n this.onHTMLRendered.notifyObservers(this);\r\n\r\n // appended only one frame after.\r\n setTimeout(() => {\r\n this._registerEvents();\r\n this.onAppended.notifyObservers(this);\r\n });\r\n }\r\n\r\n private _isShowing: boolean;\r\n private _isHiding: boolean;\r\n\r\n /**\r\n * Show the template using the provided visibilityFunction, or natively using display: flex.\r\n * The provided function returns a promise that should be fullfilled when the element is shown.\r\n * Since it is a promise async operations are more than possible.\r\n * See the default viewer for an opacity example.\r\n * @param visibilityFunction The function to execute to show the template.\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n if (this._isHiding) { return Promise.resolve(this); }\r\n return Promise.resolve().then(() => {\r\n this._isShowing = true;\r\n if (visibilityFunction) {\r\n return visibilityFunction(this);\r\n } else {\r\n // flex? box? should this be configurable easier than the visibilityFunction?\r\n this.parent.style.display = 'flex';\r\n // support old browsers with no flex:\r\n if (this.parent.style.display !== 'flex') {\r\n this.parent.style.display = '';\r\n }\r\n return this;\r\n }\r\n }).then(() => {\r\n this.isShown = true;\r\n this._isShowing = false;\r\n this.onStateChange.notifyObservers(this);\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Hide the template using the provided visibilityFunction, or natively using display: none.\r\n * The provided function returns a promise that should be fullfilled when the element is hidden.\r\n * Since it is a promise async operations are more than possible.\r\n * See the default viewer for an opacity example.\r\n * @param visibilityFunction The function to execute to show the template.\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n if (this._isShowing) { return Promise.resolve(this); }\r\n return Promise.resolve().then(() => {\r\n this._isHiding = true;\r\n if (visibilityFunction) {\r\n return visibilityFunction(this);\r\n } else {\r\n // flex? box? should this be configurable easier than the visibilityFunction?\r\n this.parent.style.display = 'none';\r\n return this;\r\n }\r\n }).then(() => {\r\n this.isShown = false;\r\n this._isHiding = false;\r\n this.onStateChange.notifyObservers(this);\r\n return this;\r\n });\r\n }\r\n\r\n /**\r\n * Dispose this template\r\n */\r\n public dispose() {\r\n this.onAppended.clear();\r\n this.onEventTriggered.clear();\r\n this.onLoaded.clear();\r\n this.onStateChange.clear();\r\n this.isLoaded = false;\r\n // remove from parent\r\n try {\r\n this.parent.removeChild(this._fragment);\r\n } catch (e) {\r\n //noop\r\n }\r\n\r\n this.loadRequests.forEach((request) => {\r\n request.abort();\r\n });\r\n\r\n if (this._registeredEvents) {\r\n this._registeredEvents.forEach((evt) => {\r\n evt.htmlElement.removeEventListener(evt.eventName, evt.function);\r\n });\r\n }\r\n }\r\n\r\n private _getTemplateAsHtml(templateConfig: ITemplateConfiguration): Promise<string> {\r\n if (!templateConfig) {\r\n return Promise.reject('No templateConfig provided');\r\n } else if (templateConfig.html && !templateConfig.location) {\r\n return Promise.resolve(templateConfig.html);\r\n } else {\r\n let location = this._getTemplateLocation(templateConfig);\r\n if (isUrl(location)) {\r\n return new Promise((resolve, reject) => {\r\n let fileRequest = Tools.LoadFile(location, (data: string) => {\r\n resolve(data);\r\n }, undefined, undefined, false, (request, error: any) => {\r\n reject(error);\r\n });\r\n this.loadRequests.push(fileRequest);\r\n });\r\n } else {\r\n location = location.replace('#', '');\r\n let element = document.getElementById(location);\r\n if (element) {\r\n return Promise.resolve(element.innerHTML);\r\n } else {\r\n return Promise.reject('Template ID not found');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _registeredEvents: Array<{ htmlElement: HTMLElement, eventName: string, function: EventListenerOrEventListenerObject }>;\r\n\r\n private _registerEvents() {\r\n this._registeredEvents = this._registeredEvents || [];\r\n if (this._registeredEvents.length) {\r\n // first remove the registered events\r\n this._registeredEvents.forEach((evt) => {\r\n evt.htmlElement.removeEventListener(evt.eventName, evt.function);\r\n });\r\n }\r\n if (this._configuration.events) {\r\n for (let eventName in this._configuration.events) {\r\n if (this._configuration.events && this._configuration.events[eventName]) {\r\n let functionToFire = (selector, event) => {\r\n this.onEventTriggered.notifyObservers({ event: event, template: this, selector: selector });\r\n };\r\n\r\n // if boolean, set the parent as the event listener\r\n if (typeof this._configuration.events[eventName] === 'boolean') {\r\n let selector = this.parent.id;\r\n if (selector) {\r\n selector = '#' + selector;\r\n } else {\r\n selector = this.parent.tagName;\r\n }\r\n let binding = functionToFire.bind(this, selector);\r\n this.parent.addEventListener(eventName, binding, false);\r\n this._registeredEvents.push({\r\n htmlElement: this.parent,\r\n eventName: eventName,\r\n function: binding\r\n });\r\n } else if (typeof this._configuration.events[eventName] === 'object') {\r\n let selectorsArray: Array<string> = Object.keys((this._configuration.events[eventName] as object) || {});\r\n // strict null checl is working incorrectly, must override:\r\n let event = this._configuration.events[eventName] || {};\r\n selectorsArray.filter((selector) => event[selector]).forEach((selector) => {\r\n let htmlElement = <HTMLElement>this.parent.querySelector(selector);\r\n if (!htmlElement) {\r\n // backcompat, fallback to id\r\n if (selector && selector.indexOf('#') !== 0) {\r\n selector = '#' + selector;\r\n }\r\n try {\r\n htmlElement = <HTMLElement>this.parent.querySelector(selector);\r\n } catch (e) { }\r\n }\r\n if (htmlElement) {\r\n let binding = functionToFire.bind(this, selector);\r\n htmlElement.addEventListener(eventName, binding, false);\r\n this._registeredEvents.push({\r\n htmlElement: htmlElement,\r\n eventName: eventName,\r\n function: binding\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _getTemplateLocation(templateConfig): string {\r\n if (!templateConfig || typeof templateConfig === 'string') {\r\n return templateConfig;\r\n } else {\r\n return templateConfig.location;\r\n }\r\n }\r\n}"]}
@@ -6,22 +6,24 @@ var __extends = (this && this.__extends) || (function () {
6
6
  return extendStatics(d, b);
7
7
  };
8
8
  return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
9
11
  extendStatics(d, b);
10
12
  function __() { this.constructor = d; }
11
13
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
14
  };
13
15
  })();
14
- import { FilesInput } from '@babylonjs/core/Misc/filesInput';
15
- import { SpotLight } from '@babylonjs/core/Lights/spotLight';
16
- import { Vector3 } from '@babylonjs/core/Maths/math';
17
- import { TemplateManager } from '../templating/templateManager';
18
- import { AbstractViewerWithTemplate } from './viewerWithTemplate';
19
- import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
20
- import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
21
- import { extendClassWithConfig } from '../helper';
22
- import { AnimationState } from '../model/modelAnimation';
23
- import { HDButtonPlugin } from '../templating/plugins/hdButtonPlugin';
24
- import { PrintButtonPlugin } from '../templating/plugins/printButton';
16
+ import { FilesInput } from '@babylonjs/core/Misc/filesInput.js';
17
+ import { SpotLight } from '@babylonjs/core/Lights/spotLight.js';
18
+ import { Vector3 } from '@babylonjs/core/Maths/math.js';
19
+ import { TemplateManager } from '../templating/templateManager.js';
20
+ import { AbstractViewerWithTemplate } from './viewerWithTemplate.js';
21
+ import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial.js';
22
+ import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial.js';
23
+ import { extendClassWithConfig } from '../helper.js';
24
+ import { AnimationState } from '../model/modelAnimation.js';
25
+ import { HDButtonPlugin } from '../templating/plugins/hdButtonPlugin.js';
26
+ import { PrintButtonPlugin } from '../templating/plugins/printButton.js';
25
27
  /**
26
28
  * The Default viewer is the default implementation of the AbstractViewer.
27
29
  * It uses the templating system to render a new canvas and controls.