csyjk 1.1.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (323) hide show
  1. package/.babelrc +7 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/xx.iml +12 -0
  4. package/dist/app.js +43 -0
  5. package/{index.html → dist/index.html} +0 -0
  6. package/{style.css → dist/style.css} +1 -1
  7. package/package.json +40 -5
  8. package/public/gltf.js +2241 -0
  9. package/public/index.html +10 -0
  10. package/src/index.js +3 -0
  11. package/src/lib/gltf/assets/check.jpg +0 -0
  12. package/src/lib/gltf/assets/iconfont/iconfont.css +358 -0
  13. package/src/lib/gltf/assets/iconfont/iconfont.eot +0 -0
  14. package/src/lib/gltf/assets/iconfont/iconfont.js +1 -0
  15. package/src/lib/gltf/assets/iconfont/iconfont.json +604 -0
  16. package/src/lib/gltf/assets/iconfont/iconfont.svg +189 -0
  17. package/src/lib/gltf/assets/iconfont/iconfont.ttf +0 -0
  18. package/src/lib/gltf/assets/iconfont/iconfont.woff +0 -0
  19. package/src/lib/gltf/assets/iconfont/iconfont.woff2 +0 -0
  20. package/src/lib/gltf/assets/yjkkit-sdk/index.js +0 -0
  21. package/src/lib/gltf/assets/yjkkit-sdk/package.json +15 -0
  22. package/src/lib/gltf/assets/yjkkit-sdk/src/extras/ContextMenu/ContextMenu.js +863 -0
  23. package/src/lib/gltf/assets/yjkkit-sdk/src/extras/ContextMenu/index.js +1 -0
  24. package/src/lib/gltf/assets/yjkkit-sdk/src/extras/index.js +1 -0
  25. package/src/lib/gltf/assets/yjkkit-sdk/src/index.js +3 -0
  26. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +462 -0
  27. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsControl.js +279 -0
  28. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsPlugin.js +262 -0
  29. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AngleMeasurementsPlugin/index.js +1 -0
  30. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AnnotationsPlugin/Annotation.js +362 -0
  31. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AnnotationsPlugin/AnnotationsPlugin.js +575 -0
  32. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AnnotationsPlugin/index.js +1 -0
  33. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AxisGizmoPlugin/AxisGizmoPlugin.js +333 -0
  34. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/AxisGizmoPlugin/index.js +1 -0
  35. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/BCFViewpointsPlugin/BCFViewpointsPlugin.js +777 -0
  36. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/BCFViewpointsPlugin/index.js +1 -0
  37. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +525 -0
  38. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsControl.js +242 -0
  39. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.js +297 -0
  40. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/DistanceMeasurementsPlugin/index.js +1 -0
  41. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/FastNavPlugin/FastNavPlugin.js +345 -0
  42. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/FastNavPlugin/index.js +1 -0
  43. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/GLTFLoaderPlugin/GLTFDefaultDataSource.js +122 -0
  44. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +462 -0
  45. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/GLTFLoaderPlugin/GLTFPerformanceModelLoader.js +508 -0
  46. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/GLTFLoaderPlugin/GLTFSceneGraphLoader.js +922 -0
  47. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/GLTFLoaderPlugin/index.js +2 -0
  48. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/NavCubePlugin/CubeTextureCanvas.js +273 -0
  49. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/NavCubePlugin/NavCubePlugin.js +687 -0
  50. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/NavCubePlugin/index.js +1 -0
  51. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/OBJLoaderPlugin/OBJLoaderPlugin.js +145 -0
  52. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/OBJLoaderPlugin/OBJSceneGraphLoader.js +777 -0
  53. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/OBJLoaderPlugin/index.js +1 -0
  54. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/STLLoaderPlugin/STLDefaultDataSource.js +33 -0
  55. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js +273 -0
  56. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/STLLoaderPlugin/STLSceneGraphLoader.js +313 -0
  57. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/STLLoaderPlugin/index.js +2 -0
  58. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SectionPlanesPlugin/Control.js +1328 -0
  59. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SectionPlanesPlugin/Overview.js +249 -0
  60. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SectionPlanesPlugin/Plane.js +169 -0
  61. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +403 -0
  62. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SectionPlanesPlugin/index.js +1 -0
  63. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SkyboxesPlugin/SkyboxesPlugin.js +134 -0
  64. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/SkyboxesPlugin/index.js +1 -0
  65. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/StoreyViewsPlugin/IFCStoreyPlanObjectStates.js +77 -0
  66. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/StoreyViewsPlugin/Storey.js +61 -0
  67. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/StoreyViewsPlugin/StoreyMap.js +57 -0
  68. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +822 -0
  69. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/StoreyViewsPlugin/index.js +1 -0
  70. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/TreeViewPlugin/ModelTreeView.js +888 -0
  71. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/TreeViewPlugin/TreeViewNode.js +88 -0
  72. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/TreeViewPlugin/TreeViewPlugin.js +624 -0
  73. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/TreeViewPlugin/index.js +1 -0
  74. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/TreeViewPlugin/modelValidation.js +87 -0
  75. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/ViewCullPlugin/ViewCullPlugin.js +295 -0
  76. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/ViewCullPlugin/index.js +1 -0
  77. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/XKTDefaultDataSource.js +78 -0
  78. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +847 -0
  79. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/index.js +2 -0
  80. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV1.js +167 -0
  81. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV2.js +228 -0
  82. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV3.js +220 -0
  83. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV4.js +279 -0
  84. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV5.js +244 -0
  85. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV6.js +301 -0
  86. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV7.js +426 -0
  87. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/ParserV8.js +479 -0
  88. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XKTLoaderPlugin/parsers/lib/pako.js +6818 -0
  89. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/XML3DLoaderPlugin.js +238 -0
  90. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/XML3DSceneGraphLoader.js +1279 -0
  91. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/index.js +1 -0
  92. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/.jshintrc +11 -0
  93. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/deflate.js +2060 -0
  94. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/inflate.js +2155 -0
  95. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/mime-types.js +1002 -0
  96. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/pako/codecs.js +64 -0
  97. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/z-worker.js +153 -0
  98. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/zip-ext.js +267 -0
  99. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/zip-fs.js +553 -0
  100. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/zip.js +991 -0
  101. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/XML3DLoaderPlugin/zipjs/zlib-asm/codecs.js +49 -0
  102. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/index.js +17 -0
  103. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/lib/culling/ObjectCullStates.js +205 -0
  104. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/lib/html/Dot.js +78 -0
  105. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/lib/html/Label.js +97 -0
  106. package/src/lib/gltf/assets/yjkkit-sdk/src/plugins/lib/html/Wire.js +95 -0
  107. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/Plugin.js +112 -0
  108. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/Viewer.js +372 -0
  109. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/index.js +3 -0
  110. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/metadata/IFCObjectDefaultColors.js +162 -0
  111. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/metadata/IFCObjectDefaults.js +39 -0
  112. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/metadata/MetaModel.js +145 -0
  113. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/metadata/MetaObject.js +215 -0
  114. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/metadata/MetaScene.js +311 -0
  115. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/CameraControl.js +1669 -0
  116. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/cc.js +0 -0
  117. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/CameraUpdater.js +312 -0
  118. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/controllers/PanController.js +112 -0
  119. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/controllers/PickController.js +193 -0
  120. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/controllers/PivotController.js +289 -0
  121. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/cu.js +0 -0
  122. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/KeyboardAxisViewHandler.js +122 -0
  123. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/KeyboardPanRotateDollyHandler.js +186 -0
  124. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/MouseMiscHandler.js +68 -0
  125. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/MousePanRotateDollyHandler.js +439 -0
  126. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +361 -0
  127. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/TouchPanRotateAndDollyHandler.js +258 -0
  128. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/TouchPickHandler.js +197 -0
  129. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/CameraControl/lib/handlers/mouspan.js +498 -0
  130. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/Component.js +908 -0
  131. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/Entity.js +475 -0
  132. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/ImagePlane/ImagePlane.js +570 -0
  133. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/ImagePlane/index.js +1 -0
  134. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/PerformanceModel.js +2623 -0
  135. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/index.js +1 -0
  136. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/ENTITY_FLAGS.js +21 -0
  137. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/PerformanceMesh.js +262 -0
  138. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/PerformanceNode.js +697 -0
  139. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/RENDER_PASSES.js +34 -0
  140. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/ScratchMemory.js +63 -0
  141. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/compression.js +183 -0
  142. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesBatching/LinesBatchingBuffer.js +33 -0
  143. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesBatching/LinesBatchingLayer.js +736 -0
  144. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesBatching/LinesBatchingRenderers.js +68 -0
  145. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesBatching/renderers/LinesBatchingColorRenderer.js +295 -0
  146. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesBatching/renderers/LinesBatchingSilhouetteRenderer.js +327 -0
  147. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesInstancing/LinesInstancingLayer.js +698 -0
  148. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesInstancing/LinesInstancingRenderers.js +68 -0
  149. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesInstancing/renderers/LinesInstancingColorRenderer.js +364 -0
  150. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/linesInstancing/renderers/LinesInstancingSilhouetteRenderer.js +356 -0
  151. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/PointsBatchingBuffer.js +33 -0
  152. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/PointsBatchingLayer.js +776 -0
  153. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/PointsBatchingRenderers.js +113 -0
  154. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingColorRenderer.js +340 -0
  155. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingOcclusionRenderer.js +312 -0
  156. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +343 -0
  157. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +331 -0
  158. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingShadowRenderer.js +242 -0
  159. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsBatching/renderers/PointsBatchingSilhouetteRenderer.js +348 -0
  160. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/PointsInstancingLayer.js +737 -0
  161. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/PointsInstancingRenderers.js +143 -0
  162. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingColorRenderer.js +373 -0
  163. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingDepthRenderer.js +366 -0
  164. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingOcclusionRenderer.js +370 -0
  165. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +386 -0
  166. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +376 -0
  167. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingShadowRenderer.js +293 -0
  168. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/pointsInstancing/renderers/PointsInstancingSilhouetteRenderer.js +382 -0
  169. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/TrianglesBatchingBuffer.js +37 -0
  170. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/TrianglesBatchingLayer.js +1017 -0
  171. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/TrianglesBatchingRenderers.js +246 -0
  172. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingColorQualityRenderer.js +809 -0
  173. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingColorRenderer.js +504 -0
  174. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingDepthRenderer.js +297 -0
  175. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingEdgesColorRenderer.js +300 -0
  176. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingEdgesRenderer.js +322 -0
  177. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingNormalsRenderer.js +311 -0
  178. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingOcclusionRenderer.js +291 -0
  179. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +319 -0
  180. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +305 -0
  181. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +300 -0
  182. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingShadowRenderer.js +242 -0
  183. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesBatching/renderers/TrianglesBatchingSilhouetteRenderer.js +323 -0
  184. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/TrianglesInstancingLayer.js +969 -0
  185. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/TrianglesInstancingRenderers.js +246 -0
  186. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingColorQualityRenderer.js +859 -0
  187. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingColorRenderer.js +557 -0
  188. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingDepthRenderer.js +341 -0
  189. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingEdgesColorRenderer.js +338 -0
  190. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingEdgesRenderer.js +356 -0
  191. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingNormalsRenderer.js +354 -0
  192. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingOcclusionRenderer.js +329 -0
  193. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +358 -0
  194. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +349 -0
  195. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +363 -0
  196. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingShadowRenderer.js +284 -0
  197. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/PerformanceModel/lib/layers/trianglesInstancing/renderers/TrianglesInstancingSilhouetteRenderer.js +354 -0
  198. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/Camera.js +880 -0
  199. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/CameraFlightAnimation.js +669 -0
  200. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/CameraPath.js +194 -0
  201. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/CameraPathAnimation.js +326 -0
  202. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/CustomProjection.js +149 -0
  203. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/Frustum.js +316 -0
  204. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/Ortho.js +286 -0
  205. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/Perspective.js +302 -0
  206. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/camera/index.js +2 -0
  207. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/canvas/Canvas.js +464 -0
  208. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/canvas/Spinner.js +323 -0
  209. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/core.js +234 -0
  210. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/Geometry.js +33 -0
  211. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/ReadableGeometry.js +689 -0
  212. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/VBOGeometry.js +327 -0
  213. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildBoxGeometry.js +238 -0
  214. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildBoxLinesGeometry.js +106 -0
  215. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildCylinderGeometry.js +271 -0
  216. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildGridGeometry.js +102 -0
  217. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildPlaneGeometry.js +168 -0
  218. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildSphereGeometry.js +161 -0
  219. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildTorusGeometry.js +172 -0
  220. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/buildVectorTextGeometry.js +1721 -0
  221. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/builders/index.js +8 -0
  222. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/index.js +4 -0
  223. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/loaders/index.js +2 -0
  224. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/loaders/load3DSGeometry.js +103 -0
  225. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/geometry/loaders/loadOBJGeometry.js +130 -0
  226. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/index.js +18 -0
  227. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/input/Input.js +1475 -0
  228. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/libs/canvas2image.js +218 -0
  229. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/libs/k3d.js +1032 -0
  230. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/AmbientLight.js +175 -0
  231. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/CubeTexture.js +156 -0
  232. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/DirLight.js +314 -0
  233. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/Light.js +29 -0
  234. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/LightMap.js +77 -0
  235. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/PointLight.js +395 -0
  236. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/ReflectionMap.js +79 -0
  237. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/Shadow.js +138 -0
  238. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/lights/index.js +5 -0
  239. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/marker/Marker.js +382 -0
  240. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/marker/index.js +1 -0
  241. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/EdgeMaterial.js +359 -0
  242. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/EmphasisMaterial.js +577 -0
  243. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/Fresnel.js +222 -0
  244. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/LambertMaterial.js +378 -0
  245. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/LinesMaterial.js +169 -0
  246. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/Material.js +39 -0
  247. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/MetallicMaterial.js +820 -0
  248. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/PhongMaterial.js +860 -0
  249. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/PointsMaterial.js +320 -0
  250. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/SpecularMaterial.js +807 -0
  251. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/Texture.js +522 -0
  252. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/materials/index.js +8 -0
  253. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/Frustum.js +118 -0
  254. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/buildEdgeIndices.js +162 -0
  255. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/geometryCompressionUtils.js +353 -0
  256. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/index.js +1 -0
  257. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/math.js +5302 -0
  258. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/math/rtcCoords.js +132 -0
  259. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mementos/CameraMemento.js +200 -0
  260. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mementos/ModelMemento.js +272 -0
  261. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mementos/ObjectsMemento.js +259 -0
  262. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mementos/index.js +3 -0
  263. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/Mesh.js +2165 -0
  264. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/draw/DrawRenderer.js +978 -0
  265. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/draw/DrawShaderSource.js +1566 -0
  266. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +249 -0
  267. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +163 -0
  268. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +276 -0
  269. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +269 -0
  270. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/index.js +1 -0
  271. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +207 -0
  272. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +156 -0
  273. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/pick/PickMeshRenderer.js +210 -0
  274. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +146 -0
  275. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +186 -0
  276. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +120 -0
  277. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  278. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +96 -0
  279. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/metriqs/Metriqs.js +259 -0
  280. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/nodes/Node.js +1356 -0
  281. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/nodes/index.js +1 -0
  282. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/CubicBezierCurve.js +194 -0
  283. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/Curve.js +183 -0
  284. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/Path.js +239 -0
  285. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/QuadraticBezierCurve.js +161 -0
  286. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/SplineCurve.js +133 -0
  287. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/paths/index.js +5 -0
  288. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/postfx/SAO.js +547 -0
  289. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/scene/Scene.js +2481 -0
  290. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/sectionPlane/SectionPlane.js +194 -0
  291. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/sectionPlane/index.js +1 -0
  292. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/skybox/Skybox.js +119 -0
  293. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/skybox/index.js +1 -0
  294. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/stats.js +45 -0
  295. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/utils/Map.js +45 -0
  296. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/utils/Queue.js +56 -0
  297. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/utils/index.js +2 -0
  298. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/utils.js +452 -0
  299. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/viewport/Viewport.js +212 -0
  300. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/ArrayBuf.js +121 -0
  301. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Attribute.js +23 -0
  302. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Drawable.js +270 -0
  303. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/FrameContext.js +259 -0
  304. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/PickResult.js +317 -0
  305. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Pickable.js +69 -0
  306. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Program.js +179 -0
  307. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/RenderBuffer.js +315 -0
  308. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/RenderFlags.js +203 -0
  309. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/RenderState.js +40 -0
  310. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Renderer.js +1300 -0
  311. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Sampler.js +18 -0
  312. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Shader.js +49 -0
  313. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/Texture2D.js +217 -0
  314. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +214 -0
  315. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/occlusion/OcclusionTester.js +432 -0
  316. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +326 -0
  317. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +375 -0
  318. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webgl/webglEnums.js +61 -0
  319. package/src/lib/gltf/assets/yjkkit-sdk/src/viewer/scene/webglInfo.js +48 -0
  320. package/src/lib/gltf/gltf.css +392 -0
  321. package/src/lib/gltf/gltf.js +2241 -0
  322. package/webpack.config.js +70 -0
  323. package/app.js +0 -43
@@ -0,0 +1,863 @@
1
+ import {Map} from "../../viewer/scene/utils/Map.js";
2
+
3
+ const idMap = new Map();
4
+
5
+ /**
6
+ * Internal data class that represents the state of a menu or a submenu.
7
+ * @private
8
+ */
9
+ class Menu {
10
+ constructor(id) {
11
+ this.id = id;
12
+ this.parentItem = null; // Set to an Item when this Menu is a submenu
13
+ this.groups = [];
14
+ this.menuElement = null;
15
+ this.shown = false;
16
+ this.mouseOver = 0;
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Internal data class that represents a group of Items in a Menu.
22
+ * @private
23
+ */
24
+ class Group {
25
+ constructor() {
26
+ this.items = [];
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Internal data class that represents the state of a menu item.
32
+ * @private
33
+ */
34
+ class Item {
35
+ constructor(id, getTitle, doAction, getEnabled) {
36
+ this.id = id;
37
+ this.getTitle = getTitle;
38
+ this.doAction = doAction;
39
+ this.getEnabled = getEnabled;
40
+ this.itemElement = null;
41
+ this.subMenu = null;
42
+ this.enabled = true;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * @desc A customizable HTML context menu.
48
+ *
49
+ * [<img src="http://yjkkit.io/img/docs/ContextMenu/ContextMenu.gif">](https://yjkkit.github.io/yjkkit-sdk/examples/#ContextMenu_Canvas_TreeViewPlugin_Custom)
50
+ *
51
+ * * [[Run this example](https://yjkkit.github.io/yjkkit-sdk/examples/#ContextMenu_Canvas_TreeViewPlugin_Custom)]
52
+ *
53
+ * ## Overview
54
+ *
55
+ * * A pure JavaScript, lightweight context menu
56
+ * * Dynamically configure menu items
57
+ * * Dynamically enable or disable items
58
+ * * Supports cascading sub-menus
59
+ * * Configure custom style with custom CSS (see examples above)
60
+ *
61
+ * ## Usage
62
+ *
63
+ * In the example below we'll create a ````ContextMenu```` that pops up whenever we right-click on an {@link Entity} within
64
+ * our {@link Scene}.
65
+ *
66
+ * First, we'll create the ````ContextMenu````, configuring it with a list of menu items.
67
+ *
68
+ * Each item has:
69
+ *
70
+ * * a ````title```` for the item,
71
+ * * a ````doAction()```` callback to fire when the item's title is clicked, and
72
+ * * an optional ````getEnabled()```` callback that indicates if the item should enabled in the menu or not.
73
+ *
74
+ * <br>
75
+ *
76
+ * The ````getEnabled()```` callbacks are invoked whenever the menu is shown. When an item's ````getEnabled()```` callback
77
+ * returns ````true````, then the item is enabled and clickable. When it returns ````false````, then the item is disabled
78
+ * and cannot be clicked. An item without a ````getEnabled()```` callback is always enabled and clickable.
79
+ *
80
+ * Note how the ````doAction()```` and ````getEnabled()```` callbacks accept a ````context````
81
+ * object. That must be set on the ````ContextMenu```` before we're able to we show it. The context object can be anything. In this example,
82
+ * we'll use the context object to provide the callbacks with the Entity that we right-clicked.
83
+ *
84
+ * We'll also initially enable the ````ContextMenu````.
85
+ *
86
+ * [[Run this example](https://yjkkit.github.io/yjkkit-sdk/examples/#ContextMenu_Canvas_Custom)]
87
+ *
88
+ * ````javascript
89
+ * const canvasContextMenu = new ContextMenu({
90
+ *
91
+ * enabled: true,
92
+ *
93
+ * items: [
94
+ * [
95
+ * {
96
+ * title: "Hide Object",
97
+ * getEnabled: (context) => {
98
+ * return context.entity.visible; // Can't hide entity if already hidden
99
+ * },
100
+ * doAction: function (context) {
101
+ * context.entity.visible = false;
102
+ * }
103
+ * }
104
+ * ],
105
+ * [
106
+ * {
107
+ * title: "Select Object",
108
+ * getEnabled: (context) => {
109
+ * return (!context.entity.selected); // Can't select an entity that's already selected
110
+ * },
111
+ * doAction: function (context) {
112
+ * context.entity.selected = true;
113
+ * }
114
+ * }
115
+ * ],
116
+ * [
117
+ * {
118
+ * title: "X-Ray Object",
119
+ * getEnabled: (context) => {
120
+ * return (!context.entity.xrayed); // Can't X-ray an entity that's already X-rayed
121
+ * },
122
+ * doAction: (context) => {
123
+ * context.entity.xrayed = true;
124
+ * }
125
+ * }
126
+ * ]
127
+ * ]
128
+ * });
129
+ * ````
130
+ *
131
+ * Next, we'll make the ````ContextMenu```` appear whenever we right-click on an Entity. Whenever we right-click
132
+ * on the canvas, we'll attempt to pick the Entity at those mouse coordinates. If we succeed, we'll feed the
133
+ * Entity into ````ContextMenu```` via the context object, then show the ````ContextMenu````.
134
+ *
135
+ * From there, each ````ContextMenu```` item's ````getEnabled()```` callback will be invoked (if provided), to determine if the item should
136
+ * be enabled. If we click an item, its ````doAction()```` callback will be invoked with our context object.
137
+ *
138
+ * Remember that we must set the context on our ````ContextMenu```` before we show it, otherwise it will log an error to the console,
139
+ * and ignore our attempt to show it.
140
+ *
141
+ * ````javascript*
142
+ * viewer.scene.canvas.canvas.oncontextmenu = (e) => { // Right-clicked on the canvas
143
+ *
144
+ * if (!objectContextMenu.enabled) {
145
+ * return;
146
+ * }
147
+ *
148
+ * var hit = viewer.scene.pick({ // Try to pick an Entity at the coordinates
149
+ * canvasPos: [e.pageX, e.pageY]
150
+ * });
151
+ *
152
+ * if (hit) { // Picked an Entity
153
+ *
154
+ * objectContextMenu.context = { // Feed entity to ContextMenu
155
+ * entity: hit.entity
156
+ * };
157
+ *
158
+ * objectContextMenu.show(e.pageX, e.pageY); // Show the ContextMenu
159
+ * }
160
+ *
161
+ * e.preventDefault();
162
+ * });
163
+ * ````
164
+ *
165
+ * Note how we only show the ````ContextMenu```` if it's enabled. We can use that mechanism to switch between multiple
166
+ * ````ContextMenu```` instances depending on what we clicked.
167
+ *
168
+ * ## Dynamic Item Titles
169
+ *
170
+ * To make an item dynamically regenerate its title text whenever we show the ````ContextMenu````, provide its title with a
171
+ * ````getTitle()```` callback. The callback will fire each time you show ````ContextMenu````, which will dynamically
172
+ * set the item title text.
173
+ *
174
+ * In the example below, we'll create a simple ````ContextMenu```` that allows us to toggle the selection of an object
175
+ * via its first item, which changes text depending on whether we are selecting or deselecting the object.
176
+ *
177
+ * [[Run an example](https://yjkkit.github.io/yjkkit-sdk/examples/#ContextMenu_dynamicItemTitles)]
178
+ *
179
+ * ````javascript
180
+ * const canvasContextMenu = new ContextMenu({
181
+ *
182
+ * enabled: true,
183
+ *
184
+ * items: [
185
+ * [
186
+ * {
187
+ * getTitle: (context) => {
188
+ * return (!context.entity.selected) ? "Select" : "Undo Select";
189
+ * },
190
+ * doAction: function (context) {
191
+ * context.entity.selected = !context.entity.selected;
192
+ * }
193
+ * },
194
+ * {
195
+ * title: "Clear Selection",
196
+ * getEnabled: function (context) {
197
+ * return (context.viewer.scene.numSelectedObjects > 0);
198
+ * },
199
+ * doAction: function (context) {
200
+ * context.viewer.scene.setObjectsSelected(context.viewer.scene.selectedObjectIds, false);
201
+ * }
202
+ * }
203
+ * ]
204
+ * ]
205
+ * });
206
+ * ````
207
+ *
208
+ * ## Sub-menus
209
+ *
210
+ * Each menu item can optionally have a sub-menu, which will appear when we hover over the item.
211
+ *
212
+ * In the example below, we'll create a much simpler ````ContextMenu```` that has only one item, called "Effects", which
213
+ * will open a cascading sub-menu whenever we hover over that item.
214
+ *
215
+ * Note that our "Effects" item has no ````doAction```` callback, because an item with a sub-menu performs no
216
+ * action of its own.
217
+ *
218
+ * [[Run this example](https://yjkkit.github.io/yjkkit-sdk/examples/#ContextMenu_subMenus)]
219
+ *
220
+ * ````javascript
221
+ * const canvasContextMenu = new ContextMenu({
222
+ * items: [ // Top level items
223
+ * [
224
+ * {
225
+ * getTitle: (context) => {
226
+ * return "Effects";
227
+ * },
228
+ *
229
+ * items: [ // Sub-menu
230
+ * [
231
+ * {
232
+ * getTitle: (context) => {
233
+ * return (!context.entity.visible) ? "Show" : "Hide";
234
+ * },
235
+ * doAction: function (context) {
236
+ * context.entity.visible = !context.entity.visible;
237
+ * }
238
+ * },
239
+ * {
240
+ * getTitle: (context) => {
241
+ * return (!context.entity.selected) ? "Select" : "Undo Select";
242
+ * },
243
+ * doAction: function (context) {
244
+ * context.entity.selected = !context.entity.selected;
245
+ * }
246
+ * },
247
+ * {
248
+ * getTitle: (context) => {
249
+ * return (!context.entity.highlighted) ? "Highlight" : "Undo Highlight";
250
+ * },
251
+ * doAction: function (context) {
252
+ * context.entity.highlighted = !context.entity.highlighted;
253
+ * }
254
+ * }
255
+ * ]
256
+ * ]
257
+ * }
258
+ * ]
259
+ * ]
260
+ * });
261
+ * ````
262
+ */
263
+ class ContextMenu {
264
+
265
+ /**
266
+ * Creates a ````ContextMenu````.
267
+ *
268
+ * The ````ContextMenu```` will be initially hidden.
269
+ *
270
+ * @param {Object} [cfg] ````ContextMenu```` configuration.
271
+ * @param {Object} [cfg.items] The context menu items. These can also be dynamically set on {@link ContextMenu#items}. See the class documentation for an example.
272
+ * @param {Object} [cfg.context] The context, which is passed into the item callbacks. This can also be dynamically set on {@link ContextMenu#context}. This must be set before calling {@link ContextMenu#show}.
273
+ * @param {Boolean} [cfg.enabled=true] Whether this ````ContextMenu```` is initially enabled. {@link ContextMenu#show} does nothing while this is ````false````.
274
+ * @param {Boolean} [cfg.hideOnMouseDown=true] Whether this ````ContextMenu```` automatically hides whenever we mouse-down or tap anywhere in the page.
275
+ */
276
+ constructor(cfg = {}) {
277
+
278
+ this._id = idMap.addItem();
279
+ this._context = null;
280
+ this._enabled = false; // True when the ContextMenu is enabled
281
+ this._itemsCfg = []; // Items as given as configs
282
+ this._rootMenu = null; // The root Menu in the tree
283
+ this._menuList = []; // List of Menus
284
+ this._menuMap = {}; // Menus mapped to their IDs
285
+ this._itemList = []; // List of Items
286
+ this._itemMap = {}; // Items mapped to their IDs
287
+ this._shown = false; // True when the ContextMenu is visible
288
+ this._nextId = 0;
289
+
290
+ /**
291
+ * Subscriptions to events fired at this ContextMenu.
292
+ * @private
293
+ */
294
+ this._eventSubs = {};
295
+
296
+ if (cfg.hideOnMouseDown !== false) {
297
+ document.addEventListener("mousedown", (event) => {
298
+ if (!event.target.classList.contains("yjkkit-context-menu-item")) {
299
+ this.hide();
300
+ }
301
+ });
302
+ }
303
+
304
+ if (cfg.items) {
305
+ this.items = cfg.items;
306
+ }
307
+
308
+ this.context = cfg.context;
309
+ this.enabled = cfg.enabled !== false;
310
+ this.hide();
311
+ }
312
+
313
+
314
+ /**
315
+ Subscribes to an event fired at this ````ContextMenu````.
316
+
317
+ @param {String} event The event
318
+ @param {Function} callback Callback fired on the event
319
+ */
320
+ on(event, callback) {
321
+ let subs = this._eventSubs[event];
322
+ if (!subs) {
323
+ subs = [];
324
+ this._eventSubs[event] = subs;
325
+ }
326
+ subs.push(callback);
327
+ }
328
+
329
+ /**
330
+ Fires an event at this ````ContextMenu````.
331
+
332
+ @param {String} event The event type name
333
+ @param {Object} value The event parameters
334
+ */
335
+ fire(event, value) {
336
+ const subs = this._eventSubs[event];
337
+ if (subs) {
338
+ for (let i = 0, len = subs.length; i < len; i++) {
339
+ subs[i](value);
340
+ }
341
+ }
342
+ }
343
+
344
+ /**
345
+ * Sets the ````ContextMenu```` items.
346
+ *
347
+ * These can be updated dynamically at any time.
348
+ *
349
+ * See class documentation for an example.
350
+ *
351
+ * @type {Object[]}
352
+ */
353
+ set items(itemsCfg) {
354
+ this._clear();
355
+ this._itemsCfg = itemsCfg || [];
356
+ this._parseItems(itemsCfg);
357
+ this._createUI();
358
+ }
359
+
360
+ /**
361
+ * Gets the ````ContextMenu```` items.
362
+ *
363
+ * @type {Object[]}
364
+ */
365
+ get items() {
366
+ return this._itemsCfg;
367
+ }
368
+
369
+ /**
370
+ * Sets whether this ````ContextMenu```` is enabled.
371
+ *
372
+ * Hides the menu when disabling.
373
+ *
374
+ * @type {Boolean}
375
+ */
376
+ set enabled(enabled) {
377
+ enabled = (!!enabled);
378
+ if (enabled === this._enabled) {
379
+ return;
380
+ }
381
+ this._enabled = enabled;
382
+ if (!this._enabled) {
383
+ this.hide();
384
+ }
385
+ }
386
+
387
+ /**
388
+ * Gets whether this ````ContextMenu```` is enabled.
389
+ *
390
+ * {@link ContextMenu#show} does nothing while this is ````false````.
391
+ *
392
+ * @type {Boolean}
393
+ */
394
+ get enabled() {
395
+ return this._enabled;
396
+ }
397
+
398
+ /**
399
+ * Sets the ````ContextMenu```` context.
400
+ *
401
+ * The context can be any object that you need to be provides to the callbacks configured on {@link ContextMenu#items}.
402
+ *
403
+ * This must be set before calling {@link ContextMenu#show}.
404
+ *
405
+ * @type {Object}
406
+ */
407
+ set context(context) {
408
+ this._context = context;
409
+ }
410
+
411
+ /**
412
+ * Gets the ````ContextMenu```` context.
413
+ *
414
+ * @type {Object}
415
+ */
416
+ get context() {
417
+ return this._context;
418
+ }
419
+
420
+ /**
421
+ * Shows this ````ContextMenu```` at the given page coordinates.
422
+ *
423
+ * Does nothing when {@link ContextMenu#enabled} is ````false````.
424
+ *
425
+ * Logs error to console and does nothing if {@link ContextMenu#context} has not been set.
426
+ *
427
+ * Fires a "shown" event when shown.
428
+ *
429
+ * @param {Number} pageX Page X-coordinate.
430
+ * @param {Number} pageY Page Y-coordinate.
431
+ */
432
+ show(pageX, pageY) {
433
+ if (!this._context) {
434
+ console.error("ContextMenu cannot be shown without a context - set context first");
435
+ return;
436
+ }
437
+ if (!this._enabled) {
438
+ return;
439
+ }
440
+ if (this._shown) {
441
+ return;
442
+ }
443
+ this._hideAllMenus();
444
+ this._updateItemsTitles();
445
+ this._updateItemsEnabledStatus();
446
+ this._showMenu(this._rootMenu.id, pageX, pageY);
447
+ this._shown = true;
448
+ this.fire("shown", {});
449
+ }
450
+
451
+ /**
452
+ * Gets whether this ````ContextMenu```` is currently shown or not.
453
+ *
454
+ * @returns {Boolean} Whether this ````ContextMenu```` is shown.
455
+ */
456
+ get shown() {
457
+ return this._shown;
458
+ }
459
+
460
+ /**
461
+ * Hides this ````ContextMenu````.
462
+ *
463
+ * Fires a "hidden" event when hidden.
464
+ */
465
+ hide() {
466
+ if (!this._enabled) {
467
+ return;
468
+ }
469
+ if (!this._shown) {
470
+ return;
471
+ }
472
+ this._hideAllMenus();
473
+ this._shown = false;
474
+ this.fire("hidden", {});
475
+ }
476
+
477
+ /**
478
+ * Destroys this ````ContextMenu````.
479
+ */
480
+ destroy() {
481
+ this._context = null;
482
+ this._clear();
483
+ if (this._id !== null) {
484
+ idMap.removeItem(this._id);
485
+ this._id = null;
486
+ }
487
+ }
488
+
489
+ _clear() { // Destroys DOM elements, clears menu data
490
+ for (let i = 0, len = this._menuList.length; i < len; i++) {
491
+ const menu = this._menuList[i];
492
+ const menuElement = menu.menuElement;
493
+ menuElement.parentElement.removeChild(menuElement);
494
+ }
495
+ this._itemsCfg = [];
496
+ this._rootMenu = null;
497
+ this._menuList = [];
498
+ this._menuMap = {};
499
+ this._itemList = [];
500
+ this._itemMap = {};
501
+ }
502
+
503
+ _parseItems(itemsCfg) { // Parses "items" config into menu data
504
+
505
+ const visitItems = (itemsCfg) => {
506
+
507
+ const menuId = this._getNextId();
508
+ const menu = new Menu(menuId);
509
+
510
+ for (let i = 0, len = itemsCfg.length; i < len; i++) {
511
+
512
+ const itemsGroupCfg = itemsCfg[i];
513
+
514
+ const group = new Group();
515
+
516
+ menu.groups.push(group);
517
+
518
+ for (let j = 0, lenj = itemsGroupCfg.length; j < lenj; j++) {
519
+
520
+ const itemCfg = itemsGroupCfg[j];
521
+ const subItemsCfg = itemCfg.items;
522
+ const hasSubItems = (subItemsCfg && (subItemsCfg.length > 0));
523
+ const itemId = this._getNextId();
524
+
525
+ const getTitle = itemCfg.getTitle || (() => {
526
+ return (itemCfg.title || "");
527
+ });
528
+
529
+ const doAction = itemCfg.doAction || itemCfg.callback || (() => {
530
+ });
531
+
532
+ const getEnabled = itemCfg.getEnabled || (() => {
533
+ return true;
534
+ });
535
+
536
+ const item = new Item(itemId, getTitle, doAction, getEnabled);
537
+
538
+ item.parentMenu = menu;
539
+
540
+ group.items.push(item);
541
+
542
+ if (hasSubItems) {
543
+ const subMenu = visitItems(subItemsCfg);
544
+ item.subMenu = subMenu;
545
+ subMenu.parentItem = item;
546
+ }
547
+
548
+ this._itemList.push(item);
549
+ this._itemMap[item.id] = item;
550
+ }
551
+ }
552
+
553
+ this._menuList.push(menu);
554
+ this._menuMap[menu.id] = menu;
555
+
556
+ return menu;
557
+ };
558
+
559
+ this._rootMenu = visitItems(itemsCfg);
560
+ }
561
+
562
+ _getNextId() { // Returns a unique ID
563
+ return "ContextMenu_" + this._id + "" + this._nextId++; // Start ID with alpha chars to make a valid DOM element selector
564
+ }
565
+
566
+ _createUI() { // Builds DOM elements for the entire menu tree
567
+
568
+ const visitMenu = (menu) => {
569
+
570
+ this._createMenuUI(menu);
571
+
572
+ const groups = menu.groups;
573
+ for (let i = 0, len = groups.length; i < len; i++) {
574
+ const group = groups[i];
575
+ const groupItems = group.items;
576
+ for (let j = 0, lenj = groupItems.length; j < lenj; j++) {
577
+ const item = groupItems[j];
578
+ const subMenu = item.subMenu;
579
+ if (subMenu) {
580
+ visitMenu(subMenu);
581
+ }
582
+ }
583
+ }
584
+ };
585
+
586
+ visitMenu(this._rootMenu);
587
+ }
588
+
589
+ _createMenuUI(menu) { // Builds DOM elements for a menu
590
+
591
+ const groups = menu.groups;
592
+ const html = [];
593
+
594
+ /* html.push('<div class="yjkkit-context-menu ' + menu.id + '" style="z-index:300000; position: absolute;">'); */
595
+ html.push('<div class="yjkkit-context-menu ' + menu.id + '" style="z-index:300000; position: fixed;">');
596
+
597
+ html.push('<ul>');
598
+
599
+ if (groups) {
600
+
601
+ for (let i = 0, len = groups.length; i < len; i++) {
602
+
603
+ const group = groups[i];
604
+ const groupIdx = i;
605
+ const groupLen = len;
606
+ const groupItems = group.items;
607
+
608
+ if (groupItems) {
609
+
610
+ for (let j = 0, lenj = groupItems.length; j < lenj; j++) {
611
+
612
+ const item = groupItems[j];
613
+ const itemSubMenu = item.subMenu;
614
+ const actionTitle = item.title || "";
615
+
616
+ if (itemSubMenu) {
617
+
618
+ html.push(
619
+ '<li id="' + item.id + '" class="yjkkit-context-menu-item" style="' +
620
+ ((groupIdx === groupLen - 1) || ((j < lenj - 1)) ? 'border-bottom: 0' : 'border-bottom: 1px solid black') +
621
+ '">' +
622
+ actionTitle +
623
+ ' [MORE]' +
624
+ '</li>');
625
+
626
+ } else {
627
+
628
+ html.push(
629
+ '<li id="' + item.id + '" class="yjkkit-context-menu-item" style="' +
630
+ ((groupIdx === groupLen - 1) || ((j < lenj - 1)) ? 'border-bottom: 0' : 'border-bottom: 1px solid black') +
631
+ '">' +
632
+ actionTitle +
633
+ '</li>');
634
+ }
635
+ }
636
+ }
637
+ }
638
+ }
639
+
640
+ html.push('</ul>');
641
+ html.push('</div>');
642
+
643
+ const htmlString = html.join("");
644
+
645
+ // document.body.insertAdjacentHTML('beforeend', htmlString);
646
+ document.getElementById("myViewer").insertAdjacentHTML('beforeend', htmlString);
647
+
648
+ const menuElement = document.querySelector("." + menu.id);
649
+
650
+ menu.menuElement = menuElement;
651
+
652
+ menuElement.style["border-radius"] = 4 + "px";
653
+ menuElement.style.display = 'none';
654
+ menuElement.style["z-index"] = 300000;
655
+ menuElement.style.background = "white";
656
+ menuElement.style.border = "1px solid black";
657
+ menuElement.style["box-shadow"] = "0 4px 5px 0 gray";
658
+ menuElement.oncontextmenu = (e) => {
659
+ e.preventDefault();
660
+ };
661
+
662
+ // Bind event handlers
663
+
664
+ const self = this;
665
+
666
+ let lastSubMenu = null;
667
+
668
+ if (groups) {
669
+
670
+ for (let i = 0, len = groups.length; i < len; i++) {
671
+
672
+ const group = groups[i];
673
+ const groupItems = group.items;
674
+
675
+ if (groupItems) {
676
+
677
+ for (let j = 0, lenj = groupItems.length; j < lenj; j++) {
678
+
679
+ const item = groupItems[j];
680
+ const itemSubMenu = item.subMenu;
681
+
682
+ item.itemElement = document.getElementById(item.id);
683
+
684
+ if (!item.itemElement) {
685
+ console.error("ContextMenu item element not found: " + item.id);
686
+ continue;
687
+ }
688
+
689
+ item.itemElement.addEventListener("mouseenter", (event) => {
690
+ event.preventDefault();
691
+ if (item.enabled === false) {
692
+ return;
693
+ }
694
+ const subMenu = item.subMenu;
695
+ if (!subMenu) {
696
+ if (lastSubMenu) {
697
+ self._hideMenu(lastSubMenu.id);
698
+ lastSubMenu = null;
699
+ }
700
+ return;
701
+ }
702
+ if (lastSubMenu && (lastSubMenu.id !== subMenu.id)) {
703
+ self._hideMenu(lastSubMenu.id);
704
+ lastSubMenu = null;
705
+ }
706
+
707
+ const itemElement = item.itemElement;
708
+ const subMenuElement = subMenu.menuElement;
709
+
710
+ const itemRect = itemElement.getBoundingClientRect();
711
+ const menuRect = subMenuElement.getBoundingClientRect();
712
+
713
+ const subMenuWidth = 200; // TODO
714
+ const showOnLeft = ((itemRect.right + subMenuWidth) > window.innerWidth);
715
+
716
+ if (showOnLeft) {
717
+ self._showMenu(subMenu.id, itemRect.left - subMenuWidth, itemRect.top - 1);
718
+ } else {
719
+ self._showMenu(subMenu.id, itemRect.right - 5, itemRect.top - 1);
720
+ }
721
+
722
+ lastSubMenu = subMenu;
723
+ });
724
+
725
+ if (!itemSubMenu) {
726
+
727
+ // Item without sub-menu
728
+ // clicking item fires the item's action callback
729
+
730
+ item.itemElement.addEventListener("click", (event) => {
731
+ event.preventDefault();
732
+ self.hide();
733
+ if (!self._context) {
734
+ return;
735
+ }
736
+ if (item.enabled === false) {
737
+ return;
738
+ }
739
+ if (item.doAction) {
740
+ item.doAction(self._context);
741
+ }
742
+ });
743
+
744
+
745
+ item.itemElement.addEventListener("mouseenter", (event) => {
746
+ event.preventDefault();
747
+ if (item.enabled === false) {
748
+ return;
749
+ }
750
+ if (item.doHover) {
751
+ item.doHover(self._context);
752
+ }
753
+ });
754
+
755
+ }
756
+ }
757
+ }
758
+ }
759
+ }
760
+ }
761
+
762
+ _updateItemsTitles() { // Dynamically updates the title of each Item to the result of Item#getTitle()
763
+ if (!this._context) {
764
+ return;
765
+ }
766
+ for (let i = 0, len = this._itemList.length; i < len; i++) {
767
+ const item = this._itemList[i];
768
+ const itemElement = item.itemElement;
769
+ if (!itemElement) {
770
+ continue;
771
+ }
772
+ const title = item.getTitle(this._context);
773
+ if (item.subMenu) {
774
+ itemElement.innerText = title;
775
+ } else {
776
+ itemElement.innerText = title;
777
+ }
778
+ }
779
+ }
780
+
781
+ _updateItemsEnabledStatus() { // Enables or disables each Item, depending on the result of Item#getEnabled()
782
+ if (!this._context) {
783
+ return;
784
+ }
785
+ for (let i = 0, len = this._itemList.length; i < len; i++) {
786
+ const item = this._itemList[i];
787
+ const itemElement = item.itemElement;
788
+ if (!itemElement) {
789
+ continue;
790
+ }
791
+ const getEnabled = item.getEnabled;
792
+ if (!getEnabled) {
793
+ continue;
794
+ }
795
+ const enabled = getEnabled(this._context);
796
+ item.enabled = enabled;
797
+ if (!enabled) {
798
+ itemElement.classList.add("disabled");
799
+ } else {
800
+ itemElement.classList.remove("disabled");
801
+ }
802
+ }
803
+ }
804
+
805
+ _showMenu(menuId, pageX, pageY) { // Shows the given menu, at the specified page coordinates
806
+ const menu = this._menuMap[menuId];
807
+ if (!menu) {
808
+ console.error("Menu not found: " + menuId);
809
+ return;
810
+ }
811
+ if (menu.shown) {
812
+ return;
813
+ }
814
+ const menuElement = menu.menuElement;
815
+ if (menuElement) {
816
+ this._showMenuElement(menuElement, pageX, pageY);
817
+ menu.shown = true;
818
+ }
819
+ }
820
+
821
+ _hideMenu(menuId) { // Hides the given menu
822
+ const menu = this._menuMap[menuId];
823
+ if (!menu) {
824
+ console.error("Menu not found: " + menuId);
825
+ return;
826
+ }
827
+ if (!menu.shown) {
828
+ return;
829
+ }
830
+ const menuElement = menu.menuElement;
831
+ if (menuElement) {
832
+ this._hideMenuElement(menuElement);
833
+ menu.shown = false;
834
+ }
835
+ }
836
+
837
+ _hideAllMenus() {
838
+ for (let i = 0, len = this._menuList.length; i < len; i++) {
839
+ const menu = this._menuList[i];
840
+ this._hideMenu(menu.id);
841
+ }
842
+ }
843
+
844
+ _showMenuElement(menuElement, pageX, pageY) { // Shows the given menu element, at the specified page coordinates
845
+ menuElement.style.display = 'block';
846
+ const menuHeight = menuElement.offsetHeight;
847
+ const menuWidth = menuElement.offsetWidth;
848
+ if ((pageY + menuHeight) > window.innerHeight) {
849
+ pageY = window.innerHeight - menuHeight;
850
+ }
851
+ if ((pageX + menuWidth) > window.innerWidth) {
852
+ pageX = window.innerWidth - menuWidth;
853
+ }
854
+ menuElement.style.left = pageX + 'px';
855
+ menuElement.style.top = pageY + 'px';
856
+ }
857
+
858
+ _hideMenuElement(menuElement) {
859
+ menuElement.style.display = 'none';
860
+ }
861
+ }
862
+
863
+ export {ContextMenu};