@openglobus/og 0.17.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +75 -46
  2. package/dist/@openglobus/og.esm.js +1 -20
  3. package/dist/@openglobus/og.esm.js.map +1 -1
  4. package/dist/@openglobus/og.umd.js +1 -20
  5. package/dist/@openglobus/og.umd.js.map +1 -1
  6. package/dist/@openglobus/res/fonts/Karla-Bold.json +5252 -0
  7. package/dist/@openglobus/res/fonts/Karla-Bold.ttf.cfg +920 -0
  8. package/dist/@openglobus/res/fonts/Karla-Bold.ttf.png +0 -0
  9. package/dist/@openglobus/res/fonts/Karla-Light.json +5252 -0
  10. package/dist/@openglobus/res/fonts/Karla-Light.ttf.cfg +830 -0
  11. package/dist/@openglobus/res/fonts/Karla-Light.ttf.png +0 -0
  12. package/dist/@openglobus/res/fonts/Karla-Medium.json +5252 -0
  13. package/dist/@openglobus/res/fonts/Karla-Medium.ttf.cfg +1196 -0
  14. package/dist/@openglobus/res/fonts/Karla-Medium.ttf.png +0 -0
  15. package/dist/@openglobus/res/fonts/NotoSansArabic-Regular.json +3332 -0
  16. package/dist/@openglobus/res/fonts/NotoSansArabic-Regular.ttf.cfg +1370 -0
  17. package/dist/@openglobus/res/fonts/NotoSansArabic-Regular.ttf.png +0 -0
  18. package/dist/@openglobus/res/fonts/Roboto-Regular.json +37147 -0
  19. package/dist/@openglobus/res/fonts/Roboto-Regular.ttf.cfg +1340 -0
  20. package/dist/@openglobus/res/fonts/Roboto-Regular.ttf.png +0 -0
  21. package/dist/@openglobus/res/fonts/arial.json +4321 -0
  22. package/dist/@openglobus/res/fonts/arial.ttf.cfg +1570 -0
  23. package/dist/@openglobus/res/fonts/arial.ttf.png +0 -0
  24. package/dist/@openglobus/res/night-4326.png +0 -0
  25. package/dist/@openglobus/res/night.png +0 -0
  26. package/dist/@openglobus/res/spec.png +0 -0
  27. package/package.json +25 -23
  28. package/src/{og/Clock.js → Clock.ts} +100 -78
  29. package/src/Deferred.ts +17 -0
  30. package/src/Events.ts +200 -0
  31. package/src/{og/Extent.js → Extent.ts} +324 -352
  32. package/src/Globe.ts +363 -0
  33. package/src/{og/ImageCanvas.js → ImageCanvas.ts} +244 -236
  34. package/src/Lock.ts +41 -0
  35. package/src/{og/LonLat.js → LonLat.ts} +50 -47
  36. package/src/{og/Object3d.js → Object3d.ts} +89 -55
  37. package/src/Popup.ts +228 -0
  38. package/src/{og/QueueArray.js → QueueArray.ts} +76 -75
  39. package/src/{og/Rectangle.js → Rectangle.ts} +115 -111
  40. package/src/Stack.ts +58 -0
  41. package/src/{og/astro/astro.js → astro/astro.ts} +49 -51
  42. package/src/{og/astro/earth.js → astro/earth.ts} +8 -9
  43. package/src/{og/astro/jd.js → astro/jd.ts} +92 -111
  44. package/src/{og/astro/orbit.js → astro/orbit.ts} +35 -37
  45. package/src/{og/astro/rotation.js → astro/rotation.ts} +4 -6
  46. package/src/{og/bv/Box.js → bv/Box.ts} +21 -17
  47. package/src/{og/bv/Sphere.js → bv/Sphere.ts} +21 -19
  48. package/src/bv/index.ts +4 -0
  49. package/src/{og/camera/Camera.js → camera/Camera.ts} +254 -197
  50. package/src/{og/camera/Frustum.js → camera/Frustum.ts} +137 -111
  51. package/src/{og/camera/PlanetCamera.js → camera/PlanetCamera.ts} +248 -185
  52. package/src/camera/index.ts +4 -0
  53. package/src/{og/cons.js → cons.ts} +14 -18
  54. package/src/{og/control/Atmosphere.js → control/Atmosphere.ts} +50 -50
  55. package/src/{og/control/CompassButton.js → control/CompassButton.ts} +27 -30
  56. package/src/{og/control/Control.js → control/Control.ts} +76 -70
  57. package/src/{og/control/DebugInfo.js → control/DebugInfo.ts} +130 -62
  58. package/src/{og/control/DrawingSwitcher.js → control/DrawingSwitcher.ts} +16 -22
  59. package/src/control/EarthCoordinates.ts +222 -0
  60. package/src/control/EarthNavigation.ts +293 -0
  61. package/src/{og/control/GeoImageDragControl.js → control/GeoImageDragControl.ts} +37 -29
  62. package/src/control/KeyboardNavigation.ts +168 -0
  63. package/src/{og/control/LayerAnimation.js → control/LayerAnimation.ts} +74 -90
  64. package/src/control/LayerSwitcher.ts +76 -0
  65. package/src/{og/control/Lighting.js → control/Lighting.ts} +158 -120
  66. package/src/control/MouseNavigation.ts +468 -0
  67. package/src/control/MouseWheelZoomControl.ts +269 -0
  68. package/src/{og/control/RulerSwitcher.js → control/RulerSwitcher.ts} +18 -20
  69. package/src/control/ScaleControl.ts +131 -0
  70. package/src/control/SegmentBoundVisualization.ts +50 -0
  71. package/src/control/ShowFps.ts +28 -0
  72. package/src/control/SimpleNavigation.ts +118 -0
  73. package/src/{og/control/SimpleSkyBackground.js → control/SimpleSkyBackground.ts} +36 -38
  74. package/src/{og/control/Sun.js → control/Sun.ts} +56 -64
  75. package/src/control/ToggleWireframe.ts +35 -0
  76. package/src/control/TouchNavigation.ts +368 -0
  77. package/src/control/ZoomControl.ts +111 -0
  78. package/src/control/drawing/DrawingControl.ts +45 -0
  79. package/src/{og/control/drawing/LineStringDrawingScene.js → control/drawing/LineStringDrawingScene.ts} +28 -35
  80. package/src/{og/control/drawing/PolygonDrawingScene.js → control/drawing/PolygonDrawingScene.ts} +148 -201
  81. package/src/{og/control/elevationProfile/ElevationProfile.js → control/elevationProfile/ElevationProfile.ts} +70 -36
  82. package/src/control/heightRuler/HeightRuler.ts +16 -0
  83. package/src/{og/control/heightRuler/HeightRulerScene.js → control/heightRuler/HeightRulerScene.ts} +92 -87
  84. package/src/{og/control/heightRuler/HeightRulerSwitcher.js → control/heightRuler/HeightRulerSwitcher.ts} +3 -3
  85. package/src/control/index.ts +45 -0
  86. package/src/control/ruler/Ruler.ts +35 -0
  87. package/src/{og/control/ruler/RulerScene.js → control/ruler/RulerScene.ts} +163 -121
  88. package/src/{og/control/selection/Selection.js → control/selection/Selection.ts} +23 -21
  89. package/src/{og/control/selection/SelectionScene.js → control/selection/SelectionScene.ts} +64 -50
  90. package/src/{og/control/timeline/TimelineControl.js → control/timeline/TimelineControl.ts} +37 -28
  91. package/src/{og/control/timeline/TimelineModel.js → control/timeline/TimelineModel.ts} +50 -35
  92. package/src/{og/control/timeline/TimelineView.js → control/timeline/TimelineView.ts} +162 -113
  93. package/src/{og/control/timeline/timelineUtils.js → control/timeline/timelineUtils.ts} +11 -10
  94. package/src/{og/control → control}/visibleExtent/Segment.js +5 -5
  95. package/src/{og/control → control}/visibleExtent/VisibleExtent.js +8 -15
  96. package/src/{og/control/visibleExtent/drawnode.js → control/visibleExtent/drawnode.ts} +1 -3
  97. package/src/{og/ellipsoid/Ellipsoid.js → ellipsoid/Ellipsoid.ts} +113 -59
  98. package/src/ellipsoid/index.ts +4 -0
  99. package/src/{og/ellipsoid/wgs84.js → ellipsoid/wgs84.ts} +1 -3
  100. package/src/{og/entity/BaseBillboard.js → entity/BaseBillboard.ts} +128 -102
  101. package/src/entity/BaseBillboardHandler.ts +772 -0
  102. package/src/{og/entity/Billboard.js → entity/Billboard.ts} +77 -47
  103. package/src/entity/BillboardHandler.ts +135 -0
  104. package/src/{og/entity/Entity.js → entity/Entity.ts} +285 -226
  105. package/src/{og/entity/EntityCollection.js → entity/EntityCollection.ts} +340 -247
  106. package/src/{og/entity/GeoObject.js → entity/GeoObject.ts} +122 -67
  107. package/src/{og/entity/GeoObjectHandler.js → entity/GeoObjectHandler.ts} +273 -198
  108. package/src/entity/Geometry.ts +486 -0
  109. package/src/{og/entity/GeometryHandler.js → entity/GeometryHandler.ts} +383 -541
  110. package/src/{og/entity/Label.js → entity/Label.ts} +131 -83
  111. package/src/{og/entity/LabelHandler.js → entity/LabelHandler.ts} +289 -255
  112. package/src/{og/entity/LabelWorker.js → entity/LabelWorker.ts} +26 -36
  113. package/src/{og/entity/PointCloud.js → entity/PointCloud.ts} +200 -164
  114. package/src/entity/PointCloudHandler.ts +125 -0
  115. package/src/{og/entity/Polyline.js → entity/Polyline.ts} +517 -539
  116. package/src/{og/entity/PolylineHandler.js → entity/PolylineHandler.ts} +29 -31
  117. package/src/{og/entity/Ray.js → entity/Ray.ts} +89 -60
  118. package/src/{og/entity/RayHandler.js → entity/RayHandler.ts} +201 -306
  119. package/src/{og/entity/Strip.js → entity/Strip.ts} +143 -100
  120. package/src/{og/entity/StripHandler.js → entity/StripHandler.ts} +76 -72
  121. package/src/entity/index.ts +12 -0
  122. package/src/index.ts +173 -0
  123. package/src/input/KeyboardHandler.ts +196 -0
  124. package/src/{og/input/MouseHandler.js → input/MouseHandler.ts} +46 -35
  125. package/src/input/TouchHandler.ts +54 -0
  126. package/src/{og/input/input.js → input/input.ts} +1 -3
  127. package/src/{og/layer/BaseGeoImage.js → layer/BaseGeoImage.ts} +174 -107
  128. package/src/{og/layer/CanvasTiles.js → layer/CanvasTiles.ts} +139 -105
  129. package/src/{og/layer/GeoImage.js → layer/GeoImage.ts} +62 -52
  130. package/src/layer/GeoTexture2d.ts +56 -0
  131. package/src/{og/layer/GeoVideo.js → layer/GeoVideo.ts} +53 -53
  132. package/src/{og/layer/KML.js → layer/KML.ts} +63 -74
  133. package/src/{og/layer/Layer.js → layer/Layer.ts} +399 -223
  134. package/src/{og/layer/Material.js → layer/Material.ts} +40 -35
  135. package/src/{og/layer/Vector.js → layer/Vector.ts} +319 -267
  136. package/src/{og/layer/WMS.js → layer/WMS.ts} +76 -64
  137. package/src/{og/layer/XYZ.js → layer/XYZ.ts} +123 -98
  138. package/src/layer/index.ts +12 -0
  139. package/src/{og/light/LightSource.js → light/LightSource.ts} +132 -93
  140. package/src/{og/math/Line2.js → math/Line2.ts} +11 -8
  141. package/src/{og/math/Line3.js → math/Line3.ts} +49 -27
  142. package/src/{og/math/Mat3.js → math/Mat3.ts} +43 -27
  143. package/src/{og/math/Mat4.js → math/Mat4.ts} +110 -77
  144. package/src/{og/math/Plane.js → math/Plane.ts} +28 -23
  145. package/src/{og/math/Quat.js → math/Quat.ts} +238 -222
  146. package/src/{og/math/Ray.js → math/Ray.ts} +59 -63
  147. package/src/{og/math/Vec2.js → math/Vec2.ts} +85 -76
  148. package/src/{og/math/Vec3.js → math/Vec3.ts} +141 -140
  149. package/src/{og/math/Vec4.js → math/Vec4.ts} +64 -53
  150. package/src/{og/math/coder.js → math/coder.ts} +30 -27
  151. package/src/math/index.ts +26 -0
  152. package/src/{og/math.js → math.ts} +46 -49
  153. package/src/{og/mercator.js → mercator.ts} +143 -149
  154. package/src/{og/proj/EPSG3857.js → proj/EPSG3857.ts} +1 -3
  155. package/src/{og/proj/EPSG4326.js → proj/EPSG4326.ts} +11 -13
  156. package/src/{og/proj/Proj.js → proj/Proj.ts} +27 -23
  157. package/src/{og/quadTree/EPSG4326QuadTreeStrategy.js → quadTree/EPSG4326QuadTreeStrategy.ts} +10 -13
  158. package/src/{og/quadTree/EarthQuadTreeStrategy.js → quadTree/EarthQuadTreeStrategy.ts} +11 -13
  159. package/src/quadTree/EntityCollectionNode.ts +395 -0
  160. package/src/{og/quadTree/MarsQuadTreeStrategy.js → quadTree/MarsQuadTreeStrategy.ts} +10 -13
  161. package/src/{og/quadTree/Node.js → quadTree/Node.ts} +283 -191
  162. package/src/{og/quadTree/QuadTreeStrategy.js → quadTree/QuadTreeStrategy.ts} +35 -29
  163. package/src/quadTree/Wgs84QuadTreeStrategy.ts +22 -0
  164. package/src/quadTree/index.ts +14 -0
  165. package/src/{og/quadTree/quadTree.js → quadTree/quadTree.ts} +75 -77
  166. package/src/{og/renderer/Renderer.js → renderer/Renderer.ts} +454 -298
  167. package/src/{og/renderer/RendererEvents.js → renderer/RendererEvents.ts} +347 -270
  168. package/src/{og/scene/Axes.js → scene/Axes.ts} +26 -22
  169. package/src/{og/scene/BaseNode.js → scene/BaseNode.ts} +53 -47
  170. package/src/{og/scene/Planet.js → scene/Planet.ts} +777 -595
  171. package/src/{og/scene/RenderNode.js → scene/RenderNode.ts} +105 -91
  172. package/src/{og/scene/SkyBox.js → scene/SkyBox.ts} +29 -25
  173. package/src/scene/index.ts +6 -0
  174. package/src/{og/segment/Segment.js → segment/Segment.ts} +497 -371
  175. package/src/{og/segment/SegmentLonLat.js → segment/SegmentLonLat.ts} +81 -87
  176. package/src/{og/segment/SegmentLonLatWgs84.js → segment/SegmentLonLatWgs84.ts} +9 -16
  177. package/src/{og/segment/Slice.js → segment/Slice.ts} +15 -9
  178. package/src/{og/segment/segmentHelper.js → segment/segmentHelper.ts} +57 -49
  179. package/src/{og/shaders/atmos.js → shaders/atmos.ts} +4 -6
  180. package/src/{og/shaders/billboard.js → shaders/billboard.ts} +3 -5
  181. package/src/{og/shaders/bloom.js → shaders/bloom.ts} +2 -4
  182. package/src/{og/shaders/blur.js → shaders/blur.ts} +4 -7
  183. package/src/{og/shaders/depth.js → shaders/depth.ts} +1 -3
  184. package/src/{og/shaders/drawnode.js → shaders/drawnode.ts} +19 -21
  185. package/src/{og/shaders/geoObject.js → shaders/geoObject.ts} +17 -19
  186. package/src/{og/shaders/label.js → shaders/label.ts} +4 -6
  187. package/src/{og/shaders/lumFilter.js → shaders/lumFilter.ts} +2 -4
  188. package/src/{og/shaders/pickingMask.js → shaders/pickingMask.ts} +2 -4
  189. package/src/{og/shaders/pointCloud.js → shaders/pointCloud.ts} +7 -10
  190. package/src/{og/shaders/polyline.js → shaders/polyline.ts} +3 -200
  191. package/src/{og/shaders/ray.js → shaders/ray.ts} +2 -4
  192. package/src/{og/shaders/screenFrame.js → shaders/screenFrame.ts} +2 -4
  193. package/src/{og/shaders/skybox.js → shaders/skybox.ts} +7 -9
  194. package/src/{og/shaders/toneMapping.js → shaders/toneMapping.ts} +2 -4
  195. package/src/{og/shaders/utils.js → shaders/utils.ts} +0 -2
  196. package/src/{og/terrain/BilTerrain.js → terrain/BilTerrain.ts} +38 -32
  197. package/src/terrain/EmptyTerrain.ts +230 -0
  198. package/src/{og/terrain/Geoid.js → terrain/Geoid.ts} +67 -41
  199. package/src/{og/terrain/GlobusTerrain.js → terrain/GlobusTerrain.ts} +159 -153
  200. package/src/{og/terrain/MapboxTerrain.js → terrain/MapboxTerrain.ts} +58 -61
  201. package/src/terrain/index.ts +6 -0
  202. package/src/ui/Button.ts +121 -0
  203. package/src/ui/ButtonGroup.ts +63 -0
  204. package/src/ui/Dialog.ts +244 -0
  205. package/src/ui/Slider.ts +188 -0
  206. package/src/ui/ToggleButton.ts +68 -0
  207. package/src/{og/ui/View.js → ui/View.ts} +66 -59
  208. package/src/utils/BaseWorker.ts +60 -0
  209. package/src/utils/FontAtlas.ts +356 -0
  210. package/src/{og/utils/GeoImageCreator.js → utils/GeoImageCreator.ts} +45 -29
  211. package/src/{og/utils/ImagesCacheManager.js → utils/ImagesCacheManager.ts} +85 -70
  212. package/src/utils/Loader.ts +247 -0
  213. package/src/{og/utils/NormalMapCreator.js → utils/NormalMapCreator.ts} +114 -77
  214. package/src/{og/utils/PlainSegmentWorker.js → utils/PlainSegmentWorker.ts} +41 -24
  215. package/src/{og/utils/TerrainWorker.js → utils/TerrainWorker.ts} +51 -36
  216. package/src/utils/TextureAtlas.ts +322 -0
  217. package/src/{og/utils/VectorTileCreator.js → utils/VectorTileCreator.ts} +67 -52
  218. package/src/{og/utils/colorTable.js → utils/colorTable.ts} +142 -144
  219. package/src/{og/utils/earcut.js → utils/earcut.ts} +664 -661
  220. package/src/{og/utils/objParser.js → utils/objParser.ts} +66 -37
  221. package/src/{og/utils/shared.js → utils/shared.ts} +267 -206
  222. package/src/utils/units.ts +78 -0
  223. package/src/webgl/BaseFramebuffer.ts +125 -0
  224. package/src/webgl/Framebuffer.ts +206 -0
  225. package/src/webgl/Handler.ts +1414 -0
  226. package/src/webgl/Multisample.ts +153 -0
  227. package/src/webgl/Program.ts +451 -0
  228. package/src/{og/webgl/ProgramController.js → webgl/ProgramController.ts} +44 -43
  229. package/src/webgl/index.ts +13 -0
  230. package/src/{og/webgl/types.js → webgl/types.ts} +29 -31
  231. package/src/webgl/variableHandlers.ts +114 -0
  232. package/src/og/Deferred.js +0 -11
  233. package/src/og/Events.js +0 -185
  234. package/src/og/Globe.js +0 -342
  235. package/src/og/Lock.js +0 -44
  236. package/src/og/Popup.js +0 -187
  237. package/src/og/Stack.js +0 -49
  238. package/src/og/bv/index.js +0 -4
  239. package/src/og/camera/index.js +0 -4
  240. package/src/og/control/EarthCoordinates.js +0 -214
  241. package/src/og/control/EarthNavigation.js +0 -258
  242. package/src/og/control/KeyboardNavigation.js +0 -149
  243. package/src/og/control/LayerSwitcher.js +0 -424
  244. package/src/og/control/MouseNavigation.js +0 -436
  245. package/src/og/control/MouseWheelZoomControl.js +0 -253
  246. package/src/og/control/ScaleControl.js +0 -119
  247. package/src/og/control/SegmentBoundVisualization.js +0 -54
  248. package/src/og/control/ShowFps.js +0 -40
  249. package/src/og/control/SimpleNavigation.js +0 -123
  250. package/src/og/control/ToggleWireframe.js +0 -35
  251. package/src/og/control/TouchNavigation.js +0 -350
  252. package/src/og/control/ZoomControl.js +0 -115
  253. package/src/og/control/drawing/DrawingControl.js +0 -51
  254. package/src/og/control/heightRuler/HeightRuler.js +0 -12
  255. package/src/og/control/index.js +0 -56
  256. package/src/og/control/ruler/Ruler.js +0 -39
  257. package/src/og/ellipsoid/index.js +0 -4
  258. package/src/og/entity/BillboardHandler.js +0 -883
  259. package/src/og/entity/Geometry.js +0 -320
  260. package/src/og/entity/PointCloudHandler.js +0 -122
  261. package/src/og/entity/index.js +0 -9
  262. package/src/og/index.js +0 -112
  263. package/src/og/input/KeyboardHandler.js +0 -128
  264. package/src/og/input/TouchHandler.js +0 -59
  265. package/src/og/layer/GeoTexture2d.js +0 -50
  266. package/src/og/layer/index.js +0 -11
  267. package/src/og/math/index.js +0 -23
  268. package/src/og/quadTree/EntityCollectionNode.js +0 -391
  269. package/src/og/quadTree/Wgs84QuadTreeStrategy.js +0 -27
  270. package/src/og/quadTree/index.js +0 -14
  271. package/src/og/res/images.js +0 -8
  272. package/src/og/scene/index.js +0 -5
  273. package/src/og/terrain/EmptyTerrain.js +0 -174
  274. package/src/og/terrain/index.js +0 -6
  275. package/src/og/ui/Button.js +0 -107
  276. package/src/og/ui/ButtonGroup.js +0 -57
  277. package/src/og/ui/Dialog.js +0 -239
  278. package/src/og/ui/Slider.js +0 -170
  279. package/src/og/ui/ToggleButton.js +0 -51
  280. package/src/og/ui/UIhelpers.js +0 -155
  281. package/src/og/utils/BaseWorker.js +0 -46
  282. package/src/og/utils/FontAtlas.js +0 -218
  283. package/src/og/utils/Loader.js +0 -188
  284. package/src/og/utils/TextureAtlas.js +0 -291
  285. package/src/og/utils/functionComposition.js +0 -13
  286. package/src/og/utils/units.js +0 -78
  287. package/src/og/webgl/Framebuffer.js +0 -311
  288. package/src/og/webgl/Handler.js +0 -1168
  289. package/src/og/webgl/Multisample.js +0 -275
  290. package/src/og/webgl/Program.js +0 -407
  291. package/src/og/webgl/callbacks.js +0 -98
  292. package/src/og/webgl/index.js +0 -13
  293. package/src/og.jsdoc +0 -3
  294. package/types/Clock.d.ts +0 -99
  295. package/types/Deferred.d.ts +0 -6
  296. package/types/Events.d.ts +0 -78
  297. package/types/Extent.d.ts +0 -166
  298. package/types/Globe.d.ts +0 -108
  299. package/types/ImageCanvas.d.ts +0 -128
  300. package/types/Lock.d.ts +0 -12
  301. package/types/LonLat.d.ts +0 -127
  302. package/types/Object3d.d.ts +0 -35
  303. package/types/Popup.d.ts +0 -29
  304. package/types/QueueArray.d.ts +0 -19
  305. package/types/Rectangle.d.ts +0 -80
  306. package/types/Stack.d.ts +0 -19
  307. package/types/arial.d.ts +0 -49
  308. package/types/astro/astro.d.ts +0 -38
  309. package/types/astro/earth.d.ts +0 -7
  310. package/types/astro/jd.d.ts +0 -254
  311. package/types/bv/Box.d.ts +0 -30
  312. package/types/bv/Sphere.d.ts +0 -38
  313. package/types/bv/index.d.ts +0 -3
  314. package/types/camera/Camera.d.ts +0 -314
  315. package/types/camera/Frustum.d.ts +0 -133
  316. package/types/camera/PlanetCamera.d.ts +0 -219
  317. package/types/camera/index.d.ts +0 -3
  318. package/types/cons.d.ts +0 -40
  319. package/types/control/Atmosphere.d.ts +0 -15
  320. package/types/control/CompassButton.d.ts +0 -16
  321. package/types/control/Control.d.ts +0 -104
  322. package/types/control/DebugInfo.d.ts +0 -19
  323. package/types/control/DrawingSwitcher.d.ts +0 -13
  324. package/types/control/EarthCoordinates.d.ts +0 -44
  325. package/types/control/EarthNavigation.d.ts +0 -43
  326. package/types/control/GeoImageDragControl.d.ts +0 -14
  327. package/types/control/KeyboardNavigation.d.ts +0 -24
  328. package/types/control/LayerAnimation.d.ts +0 -73
  329. package/types/control/LayerSwitcher.d.ts +0 -64
  330. package/types/control/Lighting.d.ts +0 -41
  331. package/types/control/MouseNavigation.d.ts +0 -49
  332. package/types/control/MouseWheelZoomControl.d.ts +0 -46
  333. package/types/control/ScaleControl.d.ts +0 -23
  334. package/types/control/ShowFps.d.ts +0 -11
  335. package/types/control/SimpleNavigation.d.ts +0 -26
  336. package/types/control/SimpleSkyBackground.d.ts +0 -15
  337. package/types/control/Sun.d.ts +0 -53
  338. package/types/control/ToggleWireframe.d.ts +0 -12
  339. package/types/control/TouchNavigation.d.ts +0 -54
  340. package/types/control/ZoomControl.d.ts +0 -26
  341. package/types/control/drawing/DrawingControl.d.ts +0 -14
  342. package/types/control/drawing/LineStringDrawingScene.d.ts +0 -5
  343. package/types/control/drawing/PolygonDrawingScene.d.ts +0 -99
  344. package/types/control/heightRuler/HeightRuler.d.ts +0 -6
  345. package/types/control/heightRuler/HeightRulerScene.d.ts +0 -23
  346. package/types/control/index.d.ts +0 -27
  347. package/types/control/ruler/Ruler.d.ts +0 -13
  348. package/types/control/ruler/RulerScene.d.ts +0 -51
  349. package/types/control/selection/Selection.d.ts +0 -49
  350. package/types/control/selection/SelectionScene.d.ts +0 -32
  351. package/types/control/timeline/TimelineControl.d.ts +0 -10
  352. package/types/control/timeline/TimelineModel.d.ts +0 -33
  353. package/types/control/timeline/TimelineView.d.ts +0 -57
  354. package/types/control/timeline/timelineUtils.d.ts +0 -9
  355. package/types/ellipsoid/Ellipsoid.d.ts +0 -170
  356. package/types/ellipsoid/index.d.ts +0 -3
  357. package/types/ellipsoid/wgs84.d.ts +0 -6
  358. package/types/entity/BaseBillboard.d.ts +0 -215
  359. package/types/entity/Billboard.d.ts +0 -94
  360. package/types/entity/BillboardHandler.d.ts +0 -75
  361. package/types/entity/Entity.d.ts +0 -340
  362. package/types/entity/EntityCollection.d.ts +0 -303
  363. package/types/entity/GeoObject.d.ts +0 -117
  364. package/types/entity/GeoObjectHandler.d.ts +0 -41
  365. package/types/entity/Geometry.d.ts +0 -79
  366. package/types/entity/GeometryHandler.d.ts +0 -76
  367. package/types/entity/Label.d.ts +0 -190
  368. package/types/entity/LabelHandler.d.ts +0 -31
  369. package/types/entity/LabelWorker.d.ts +0 -9
  370. package/types/entity/PointCloud.d.ts +0 -174
  371. package/types/entity/PointCloudHandler.d.ts +0 -38
  372. package/types/entity/Polyline.d.ts +0 -307
  373. package/types/entity/PolylineHandler.d.ts +0 -18
  374. package/types/entity/Ray.d.ts +0 -122
  375. package/types/entity/RayHandler.d.ts +0 -63
  376. package/types/entity/Strip.d.ts +0 -119
  377. package/types/entity/StripHandler.d.ts +0 -38
  378. package/types/entity/index.d.ts +0 -8
  379. package/types/index.d.ts +0 -53
  380. package/types/input/KeyboardHandler.d.ts +0 -10
  381. package/types/input/MouseHandler.d.ts +0 -5
  382. package/types/input/TouchHandler.d.ts +0 -5
  383. package/types/input/input.d.ts +0 -42
  384. package/types/layer/BaseGeoImage.d.ts +0 -116
  385. package/types/layer/CanvasTiles.d.ts +0 -73
  386. package/types/layer/GeoImage.d.ts +0 -51
  387. package/types/layer/GeoTexture2d.d.ts +0 -7
  388. package/types/layer/GeoVideo.d.ts +0 -47
  389. package/types/layer/KML.d.ts +0 -93
  390. package/types/layer/Layer.d.ts +0 -320
  391. package/types/layer/Material.d.ts +0 -45
  392. package/types/layer/Vector.d.ts +0 -211
  393. package/types/layer/WMS.d.ts +0 -66
  394. package/types/layer/XYZ.d.ts +0 -122
  395. package/types/layer/index.d.ts +0 -10
  396. package/types/light/LightSource.d.ts +0 -178
  397. package/types/math/Line2.d.ts +0 -11
  398. package/types/math/Line3.d.ts +0 -10
  399. package/types/math/Mat3.d.ts +0 -65
  400. package/types/math/Mat4.d.ts +0 -176
  401. package/types/math/Plane.d.ts +0 -18
  402. package/types/math/Quat.d.ts +0 -379
  403. package/types/math/Ray.d.ts +0 -82
  404. package/types/math/Vec2.d.ts +0 -309
  405. package/types/math/Vec3.d.ts +0 -472
  406. package/types/math/Vec4.d.ts +0 -161
  407. package/types/math/coder.d.ts +0 -43
  408. package/types/math/index.d.ts +0 -11
  409. package/types/math.d.ts +0 -268
  410. package/types/mercator.d.ts +0 -92
  411. package/types/proj/EPSG3857.d.ts +0 -6
  412. package/types/proj/EPSG4326.d.ts +0 -6
  413. package/types/proj/Proj.d.ts +0 -42
  414. package/types/quadTree/EPSG4326QuadTreeStrategy.d.ts +0 -3
  415. package/types/quadTree/EarthQuadTreeStrategy.d.ts +0 -3
  416. package/types/quadTree/EntityCollectionNode.d.ts +0 -41
  417. package/types/quadTree/MarsQuadTreeStrategy.d.ts +0 -3
  418. package/types/quadTree/Node.d.ts +0 -58
  419. package/types/quadTree/QuadTreeStrategy.d.ts +0 -21
  420. package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +0 -3
  421. package/types/quadTree/index.d.ts +0 -12
  422. package/types/quadTree/quadTree.d.ts +0 -40
  423. package/types/renderer/Renderer.d.ts +0 -291
  424. package/types/renderer/RendererEvents.d.ts +0 -255
  425. package/types/res/images.d.ts +0 -2
  426. package/types/scene/Axes.d.ts +0 -10
  427. package/types/scene/BaseNode.d.ts +0 -60
  428. package/types/scene/Planet.d.ts +0 -595
  429. package/types/scene/RenderNode.d.ts +0 -152
  430. package/types/scene/SkyBox.d.ts +0 -9
  431. package/types/scene/index.d.ts +0 -4
  432. package/types/segment/Segment.d.ts +0 -273
  433. package/types/segment/SegmentLonLat.d.ts +0 -22
  434. package/types/segment/SegmentLonLatWgs84.d.ts +0 -4
  435. package/types/segment/Slice.d.ts +0 -10
  436. package/types/segment/segmentHelper.d.ts +0 -13
  437. package/types/shaders/atmos.d.ts +0 -4
  438. package/types/shaders/billboard.d.ts +0 -3
  439. package/types/shaders/depth.d.ts +0 -2
  440. package/types/shaders/drawnode.d.ts +0 -8
  441. package/types/shaders/geoObject.d.ts +0 -3
  442. package/types/shaders/label.d.ts +0 -4
  443. package/types/shaders/pickingMask.d.ts +0 -2
  444. package/types/shaders/pointCloud.d.ts +0 -2
  445. package/types/shaders/polyline.d.ts +0 -3
  446. package/types/shaders/ray.d.ts +0 -2
  447. package/types/shaders/screenFrame.d.ts +0 -2
  448. package/types/shaders/skybox.d.ts +0 -2
  449. package/types/shaders/toneMapping.d.ts +0 -2
  450. package/types/shaders/utils.d.ts +0 -1
  451. package/types/terrain/BilTerrain.d.ts +0 -14
  452. package/types/terrain/EmptyTerrain.d.ts +0 -87
  453. package/types/terrain/Geoid.d.ts +0 -17
  454. package/types/terrain/GlobusTerrain.d.ts +0 -122
  455. package/types/terrain/MapboxTerrain.d.ts +0 -14
  456. package/types/terrain/index.d.ts +0 -5
  457. package/types/ui/Button.d.ts +0 -21
  458. package/types/ui/ButtonGroup.d.ts +0 -12
  459. package/types/ui/Dialog.d.ts +0 -41
  460. package/types/ui/Slider.d.ts +0 -33
  461. package/types/ui/ToggleButton.d.ts +0 -10
  462. package/types/ui/UIhelpers.d.ts +0 -13
  463. package/types/ui/View.d.ts +0 -33
  464. package/types/ui/icons.d.ts +0 -1
  465. package/types/utils/BaseWorker.d.ts +0 -14
  466. package/types/utils/FontAtlas.d.ts +0 -16
  467. package/types/utils/GeoImageCreator.d.ts +0 -30
  468. package/types/utils/ImagesCacheManager.d.ts +0 -10
  469. package/types/utils/Loader.d.ts +0 -31
  470. package/types/utils/NormalMapCreator.d.ts +0 -39
  471. package/types/utils/PlainSegmentWorker.d.ts +0 -8
  472. package/types/utils/TerrainWorker.d.ts +0 -7
  473. package/types/utils/TextureAtlas.d.ts +0 -113
  474. package/types/utils/VectorTileCreator.d.ts +0 -14
  475. package/types/utils/colorTable.d.ts +0 -143
  476. package/types/utils/earcut.d.ts +0 -6
  477. package/types/utils/functionComposition.d.ts +0 -5
  478. package/types/utils/objParser.d.ts +0 -8
  479. package/types/utils/shared.d.ts +0 -241
  480. package/types/utils/units.d.ts +0 -20
  481. package/types/webgl/Framebuffer.d.ts +0 -134
  482. package/types/webgl/Handler.d.ts +0 -403
  483. package/types/webgl/Multisample.d.ts +0 -91
  484. package/types/webgl/Program.d.ts +0 -163
  485. package/types/webgl/ProgramController.d.ts +0 -89
  486. package/types/webgl/callbacks.d.ts +0 -1
  487. package/types/webgl/index.d.ts +0 -6
  488. package/types/webgl/types.d.ts +0 -2
  489. /package/{src/og → dist/@openglobus/res/fonts}/arial.js +0 -0
  490. /package/src/{og/ui/icons.js → ui/icons.ts} +0 -0
Binary file
Binary file
package/package.json CHANGED
@@ -1,24 +1,20 @@
1
1
  {
2
2
  "name": "@openglobus/og",
3
- "version": "0.17.1",
4
- "description": "[OpenGlobus](https://www.openglobus.org/) is a javascript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers and 3d objects. It uses the WebGL technology, open source and completely free.",
3
+ "version": "0.18.0",
4
+ "description": "[openglobus](https://www.openglobus.org/) is a javascript/typescript library designed to display interactive 3d maps and planets with map tiles, imagery and vector data, markers, and 3D objects. It uses the WebGL technology, open source, and completely free.",
5
5
  "directories": {
6
6
  "example": "./sandbox"
7
7
  },
8
- "main": "./src/og/index.js",
8
+ "main": "./src/index.ts",
9
9
  "style": "./css/og.css",
10
- "types": "./types/index.d.ts",
11
10
  "scripts": {
12
11
  "docs": "jsdoc -r ./src/ -c ./jsdoc.conf.json -d ./docs",
13
- "serve": "ws",
12
+ "serve": "ws -p 8080",
14
13
  "build": "rollup -c --bundleConfigAsCjs",
15
- "webgl": "rollup -c --environment entry:webgl",
16
- "core": "rollup -c --environment entry:core",
14
+ "dev": "rollup -c -w --bundleConfigAsCjs --environment NODE_ENV:development",
17
15
  "test": "jest --env=jsdom --runInBand --ci --coverage=false",
18
16
  "test_watch": "jest --env=jsdom --watch",
19
- "lint": "eslint -c ./.eslintrc.js src/og",
20
- "generate_types": "rm -rf types; tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly --outDir types",
21
- "compile_js_as_ts": "tsc src/og/index.js --AllowJs --checkJs --outDir dist/@openglobus/src/",
17
+ "lint": "eslint -c ./.eslintrc.js src/",
22
18
  "font": "node ./fonts/index.js"
23
19
  },
24
20
  "repository": {
@@ -33,21 +29,23 @@
33
29
  },
34
30
  "homepage": "https://www.openglobus.org",
35
31
  "exports": {
36
- ".": "./src/og/index.js",
37
- "./layer": "./src/og/layer/index.js",
38
- "./bv": "./src/og/bv/index.js",
39
- "./terrain": "./src/og/terrain/index.js",
40
- "./entity": "./src/og/entity/index.js",
41
- "./control": "./src/og/control/index.js",
42
- "./webgl": "./src/og/webgl/index.js",
43
- "./scene": "./src/og/scene/index.js",
32
+ ".": "./src/index.js",
33
+ "./layer": "./src/layer/index.js",
34
+ "./bv": "./src/index.js",
35
+ "./terrain": "./src/terrain/index.js",
36
+ "./entity": "./src/entity/index.js",
37
+ "./control": "./src/control/index.js",
38
+ "./webgl": "./src/webgl/index.js",
39
+ "./scene": "./src/scene/index.js",
44
40
  "./css/og.css": "./css/og.css"
45
41
  },
46
42
  "devDependencies": {
47
43
  "@babel/preset-env": "^7.21.5",
48
44
  "@rollup/plugin-json": "^6.0.0",
49
45
  "@rollup/plugin-terser": "^0.4.1",
50
- "@types/jest": "^29.5.1",
46
+ "@types/jest": "^29.5.3",
47
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
48
+ "@typescript-eslint/parser": "^6.2.1",
51
49
  "clean-jsdoc-theme": "^4.2.7",
52
50
  "eslint": "^8.39.0",
53
51
  "jest": "^29.5.0",
@@ -59,8 +57,10 @@
59
57
  "postcss": "^8.4.23",
60
58
  "prettier": "^2.8.8",
61
59
  "rollup": "^3.21.3",
60
+ "rollup-plugin-copy": "^3.5.0",
62
61
  "rollup-plugin-postcss": "^4.0.2",
63
- "typescript": "^5.0.4"
62
+ "ts-jest": "^29.1.1",
63
+ "typescript": "^5.1.6"
64
64
  },
65
65
  "lint-staged": {
66
66
  "*.{js,ts}": [
@@ -70,8 +70,7 @@
70
70
  "files": [
71
71
  "src/**/*",
72
72
  "dist/**/*",
73
- "css/**/*",
74
- "types/**/*"
73
+ "css/**/*"
75
74
  ],
76
75
  "keywords": [
77
76
  "map",
@@ -79,5 +78,8 @@
79
78
  "webgl",
80
79
  "globe",
81
80
  "og"
82
- ]
81
+ ],
82
+ "dependencies": {
83
+ "@rollup/plugin-typescript": "^11.1.2"
84
+ }
83
85
  }
@@ -1,67 +1,110 @@
1
- "use strict";
1
+ import * as jd from "./astro/jd";
2
+ import {EventsHandler, createEvents} from "./Events";
3
+ import {JulianDate} from "./astro/jd";
4
+ import {Handler} from "./webgl/Handler";
2
5
 
3
- import * as jd from "./astro/jd.js";
4
- import { Events } from "./Events.js";
6
+ type ClockEventsList = ["tick", "end", "start", "stop"];
7
+
8
+ const CLOCK_EVENTS: ClockEventsList = ["tick", "end", "start", "stop"];
9
+
10
+ export interface IClockParams {
11
+ name?: string;
12
+ startDate?: JulianDate;
13
+ endDate?: JulianDate;
14
+ currentDate?: JulianDate;
15
+ multiplier?: number;
16
+ }
5
17
 
6
18
  /**
7
19
  * Class represents application timer that stores custom current julian datetime, and time speed multiplier.
8
20
  * @class
9
21
  * @param {Object} [params] - Clock parameters:
10
- * @param {number} [params.startDate=0.0] - Julian start date.
11
- * @param {number} [params.endDate=0.0] - Julian end date.
12
- * @param {number} [params.currentDate] - Julian current date. Default: current date.
22
+ * @param {JulianDate} [params.startDate=0.0] - Julian start date.
23
+ * @param {JulianDate} [params.endDate=0.0] - Julian end date.
24
+ * @param {JulianDate} [params.currentDate] - Julian current date. Default: current date.
13
25
  * @param {number} [params.multiplier=1.0] - Time speed multiplier.
14
26
  */
15
27
  class Clock {
16
- static get _staticCounter() {
17
- if (!this._counter && this._counter !== 0) {
18
- this._counter = 0;
19
- }
20
- return this._counter;
21
- }
28
+ static __counter__: number = 0;
29
+ protected __id: number;
30
+ public __handler: Handler | null = null;
22
31
 
23
- static set _staticCounter(n) {
24
- this._counter = n;
25
- }
32
+ /**
33
+ * Clock events.
34
+ * @public
35
+ * @type {EventsHandler<ClockEventsList>}
36
+ */
37
+ public events: EventsHandler<ClockEventsList>;
26
38
 
27
39
  /**
28
- *
29
- * @param {Object} [params] - Clock parameters:
40
+ * Clock name.
41
+ * @public
42
+ * @type {string}
30
43
  */
31
- constructor(params) {
32
- params = params || {};
44
+ public name: string;
45
+
46
+ /**
47
+ * Start julian date clock loop.
48
+ * @public
49
+ * @type {JulianDate}
50
+ */
51
+ public startDate: JulianDate;
52
+
53
+ /**
54
+ * End julian date clock loop.
55
+ * @public
56
+ * @type {JulianDate}
57
+ */
58
+ public endDate: JulianDate;
59
+
60
+ /**
61
+ * Current julian datetime.
62
+ * @public
63
+ * @type {JulianDate}
64
+ */
65
+ public currentDate: JulianDate;
66
+
67
+ /**
68
+ * Animation frame delta time.
69
+ * @public
70
+ * @readonly
71
+ * @type {number}
72
+ */
73
+ public deltaTicks: number;
74
+
75
+ /**
76
+ * Timer activity.
77
+ * @public
78
+ * @type {boolean}
79
+ */
80
+ public active: boolean = true;
81
+
82
+ /**
83
+ * Timer speed multiplier.
84
+ * @protected
85
+ * @type {number}
86
+ */
87
+ protected _multiplier: number;
88
+ protected _running: number;
89
+ protected _intervalDelay: number;
90
+ protected _intervalStart: number;
91
+ protected _intervalCallback: Function | null;
92
+
93
+
94
+ constructor(params: IClockParams = {}) {
95
+
96
+
97
+ this.__id = Clock.__counter__++;
33
98
 
34
- this._id = Clock._staticCounter++;
99
+ this.events = createEvents<ClockEventsList>(CLOCK_EVENTS, this);
35
100
 
36
- /**
37
- * Clock name.
38
- * @public
39
- * @type {string}
40
- */
41
101
  this.name = params.name || "";
42
102
 
43
- /**
44
- * Clock events.
45
- * @public
46
- * @type {Events}
47
- */
48
- this.events = new Events(["tick", "end", "start", "stop"], this);
49
-
50
- /**
51
- * Start julian date clock loop.
52
- * @public
53
- * @type {number}
54
- */
55
103
  this.startDate = params.startDate || 0;
56
104
 
57
- /**
58
- * End julian date clock loop.
59
- * @public
60
- * @type {number}
61
- */
62
105
  this.endDate = params.endDate || 0;
63
106
 
64
- var currentDate = params.currentDate || jd.DateToUTC(new Date());
107
+ let currentDate = params.currentDate || jd.DateToUTC(new Date());
65
108
  if (params.startDate && currentDate < params.startDate) {
66
109
  currentDate = params.startDate;
67
110
  }
@@ -69,34 +112,13 @@ class Clock {
69
112
  currentDate = params.endDate;
70
113
  }
71
114
 
72
- /**
73
- * Current julian datetime.
74
- * @public
75
- * @type {number}
76
- */
77
115
  this.currentDate = currentDate;
78
116
 
79
- /**
80
- * Timer speed multiplier.
81
- * @public
82
- * @type {number}
83
- */
84
117
  this._multiplier = params.multiplier !== undefined ? params.multiplier : 1.0;
85
118
  this._running = 1;
86
119
 
87
- /**
88
- * Animation frame delta time.
89
- * @public
90
- * @readonly
91
- * @type {number}
92
- */
93
120
  this.deltaTicks = 0;
94
121
 
95
- /**
96
- * Timer activity.
97
- * @public
98
- * @type {boolean}
99
- */
100
122
  this.active = true;
101
123
 
102
124
  this._intervalDelay = 0;
@@ -104,13 +126,13 @@ class Clock {
104
126
  this._intervalCallback = null;
105
127
  }
106
128
 
107
- clearInterval() {
129
+ public clearInterval() {
108
130
  this._intervalDelay = 0;
109
131
  this._intervalStart = 0;
110
132
  this._intervalCallback = null;
111
133
  }
112
134
 
113
- setInterval(delay, callback) {
135
+ public setInterval(delay: number, callback: Function) {
114
136
  this._intervalStart = this.currentDate;
115
137
  this._intervalDelay = delay * jd.ONE_BY_MILLISECONDS_PER_DAY;
116
138
  this._intervalCallback = callback;
@@ -121,8 +143,8 @@ class Clock {
121
143
  * @public
122
144
  * @param {Object} date - JavaScript Date object.
123
145
  */
124
- setDate(date) {
125
- var d = jd.DateToUTC(date);
146
+ public setDate(date: Date) {
147
+ let d = jd.DateToUTC(date);
126
148
  if (this.startDate && d < this.startDate) {
127
149
  d = this.startDate;
128
150
  }
@@ -137,17 +159,17 @@ class Clock {
137
159
  * @public
138
160
  * @returns {Date} - Current date.
139
161
  */
140
- getDate() {
162
+ public getDate(): Date {
141
163
  return jd.UTCtoDate(this.currentDate);
142
164
  }
143
165
 
144
- reset() {
166
+ public reset() {
145
167
  if (this.startDate) {
146
168
  this.currentDate = this.startDate;
147
169
  }
148
170
  }
149
171
 
150
- _tick(dt) {
172
+ public tick(dt: number) {
151
173
  let m = this._multiplier * this._running;
152
174
  this.deltaTicks = dt * m
153
175
  if (this.active) {
@@ -184,26 +206,26 @@ class Clock {
184
206
  * @param {Clock} clock - Clock instance to compare.
185
207
  * @returns {boolean} - Returns true if a clock is the same instance.
186
208
  */
187
- isEqual(clock) {
188
- return this._id === clock._id;
209
+ public isEqual(clock: Clock) {
210
+ return this.__id === clock.__id;
189
211
  }
190
212
 
191
- start() {
213
+ public start() {
192
214
  if (this._running === 0) {
193
215
  this._running = 1;
194
216
  this.events.dispatch(this.events.start, this);
195
217
  }
196
218
  }
197
219
 
198
- get multiplier() {
220
+ public get multiplier(): number {
199
221
  return this._multiplier;
200
222
  }
201
223
 
202
- set multiplier(value) {
224
+ public set multiplier(value: number) {
203
225
  this._multiplier = value;
204
226
  }
205
227
 
206
- stop() {
228
+ public stop() {
207
229
  if (this._running === 1) {
208
230
  this._running = 0;
209
231
  this.events.dispatch(this.events.stop, this);
@@ -211,4 +233,4 @@ class Clock {
211
233
  }
212
234
  }
213
235
 
214
- export { Clock };
236
+ export {Clock};
@@ -0,0 +1,17 @@
1
+ export class Deferred<T> {
2
+ resolve: ((value: T | PromiseLike<T>) => void);
3
+ reject: ((reason?: any) => void);
4
+ promise: Promise<T>;
5
+
6
+ constructor() {
7
+ this.resolve = () => {
8
+ };
9
+ this.reject = () => {
10
+ };
11
+ this.promise = new Promise<T>((resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => {
12
+ this.resolve = resolve;
13
+ this.reject = reject;
14
+ });
15
+ Object.freeze(this);
16
+ }
17
+ }
package/src/Events.ts ADDED
@@ -0,0 +1,200 @@
1
+ import {binaryInsert, stamp} from "./utils/shared";
2
+
3
+ export type EventCallback = (((...args: any[]) => boolean) | ((...args: any[]) => void));
4
+
5
+ export type EventCallbackStamp = EventCallback & { _openglobus_id?: number; _openglobus_priority?: number };
6
+
7
+ type EventCallbacks = Array<EventCallback>;
8
+ type EventCallbackHandler = { active: boolean; handlers: EventCallbacks };
9
+
10
+ export type EventsMap<T extends string[]> = {
11
+ [K in T[number]]?: EventCallbackHandler
12
+ }
13
+
14
+ export type EventsHandler<T extends string[]> = Events<T> & EventsMap<T>;
15
+
16
+ export function createEvents<T extends string[]>(methodNames: T, sender?: any) {
17
+ return new Events(methodNames, sender) as EventsHandler<T>;
18
+ }
19
+
20
+ /**
21
+ * Base events class to handle custom events.
22
+ * @class
23
+ * @param {Array.<string>} [eventNames] - Event names that could be dispatched.
24
+ * @param {*} [sender]
25
+ */
26
+ export class Events<T extends string[]> {
27
+
28
+ static __counter__: number = 0;
29
+
30
+ protected __id: number;
31
+
32
+ /**
33
+ * Registered event names.
34
+ * @protected
35
+ * @type {T}
36
+ */
37
+ protected _eventNames: T;
38
+
39
+ protected _sender: any;
40
+
41
+ /**
42
+ * Stop propagation flag
43
+ * @protected
44
+ * @type {boolean}
45
+ */
46
+ protected _stopPropagation: boolean;
47
+ protected _stampCache: any;
48
+
49
+ constructor(eventNames: T, sender?: any) {
50
+
51
+ this.__id = Events.__counter__++;
52
+
53
+ this._eventNames = [] as any;
54
+
55
+ eventNames && this.registerNames(eventNames);
56
+
57
+ this._sender = sender || this;
58
+
59
+ this._stopPropagation = false;
60
+
61
+ this._stampCache = {};
62
+ }
63
+
64
+ public bindSender(sender?: any) {
65
+ this._sender = sender || this;
66
+ }
67
+
68
+ /**
69
+ * Function that creates event object properties that would be dispatched.
70
+ * @public
71
+ * @param {Array.<string>} eventNames - Specified event names list.
72
+ */
73
+ public registerNames(eventNames: T): this {
74
+ for (let i = 0; i < eventNames.length; i++) {
75
+ (this as any)[eventNames[i]] = {
76
+ active: true,
77
+ handlers: []
78
+ };
79
+ this._eventNames.push(eventNames[i]);
80
+ }
81
+ return this;
82
+ }
83
+
84
+ protected _getStamp(name: string, id: number, ogid: number) {
85
+ return `${name}_${id}_${ogid}`;
86
+ }
87
+
88
+ /**
89
+ * Returns true if event callback has stamped.
90
+ * @protected
91
+ * @param {Object} name - Event identifier.
92
+ * @param {Object} obj - Event callback.
93
+ * @return {boolean} -
94
+ */
95
+ protected _stamp(name: string, obj: any) {
96
+ let ogid = stamp(obj);
97
+ let st = this._getStamp(name, this.__id, ogid);
98
+
99
+ if (!this._stampCache[st]) {
100
+ this._stampCache[st] = ogid;
101
+ return true;
102
+ }
103
+
104
+ return false;
105
+ }
106
+
107
+ /**
108
+ * Attach listener.
109
+ * @public
110
+ * @param {string} name - Event name to listen.
111
+ * @param {EventCallback} callback - Event callback function.
112
+ * @param {any} [sender] - Event callback function owner.
113
+ * @param {number} [priority] - Priority of event callback.
114
+ */
115
+ public on(name: string, callback: EventCallback, sender?: any, priority: number = 0) {
116
+ if (this._stamp(name, callback)) {
117
+ if ((this as any)[name]) {
118
+ let c = callback.bind(sender || this._sender) as EventCallbackStamp;
119
+ c._openglobus_id = (callback as EventCallbackStamp)._openglobus_id;
120
+ c._openglobus_priority = priority;
121
+ binaryInsert((this as any)[name].handlers, c, (a: EventCallbackStamp, b: EventCallbackStamp) => {
122
+ return (b._openglobus_priority || 0) - (a._openglobus_priority || 0);
123
+ });
124
+ }
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Stop listening event name with specified callback function.
130
+ * @public
131
+ * @param {string} name - Event name.
132
+ * @param {EventCallback | null} callback - Attached event callback.
133
+ */
134
+ public off(name: string, callback?: EventCallback | null) {
135
+ if (callback) {
136
+ let st = this._getStamp(name, this.__id, (callback as EventCallbackStamp)._openglobus_id!);
137
+ if ((callback as EventCallbackStamp)._openglobus_id && this._stampCache[st]) {
138
+ let h = (this as any)[name].handlers;
139
+ let i = h.length;
140
+ let indexToRemove = -1;
141
+ while (i--) {
142
+ let hi = h[i];
143
+ if (hi._openglobus_id === (callback as EventCallbackStamp)._openglobus_id) {
144
+ indexToRemove = i;
145
+ break;
146
+ }
147
+ }
148
+
149
+ if (indexToRemove !== -1) {
150
+ h.splice(indexToRemove, 1);
151
+ this._stampCache[st] = undefined;
152
+ delete this._stampCache[st];
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Dispatch event.
160
+ * @public
161
+ * @param {EventCallbackHandler} event - Event instance property that created by event name.
162
+ * @param {Object} [args] - Callback parameters.
163
+ */
164
+ public dispatch(event: EventCallbackHandler | undefined, ...args: any[]) {
165
+ let result = true;
166
+ if (event && event.active && !this._stopPropagation) {
167
+ let h = event.handlers.slice(0),
168
+ i = h.length;
169
+ while (i--) {
170
+ if ((h[i] as any)(...args) === false) {
171
+ result = false;
172
+ }
173
+ }
174
+ }
175
+ this._stopPropagation = false;
176
+ return result;
177
+ }
178
+
179
+ /**
180
+ * Brakes events propagation.
181
+ * @public
182
+ */
183
+ public stopPropagation() {
184
+ this._stopPropagation = true;
185
+ }
186
+
187
+ /**
188
+ * Removes all events.
189
+ * @public
190
+ */
191
+ public clear() {
192
+ for (let i = 0; i < this._eventNames.length; i++) {
193
+ let e = (this as any)[this._eventNames[i]];
194
+ e.handlers.length = 0;
195
+ e.handlers = [];
196
+ }
197
+ this._eventNames.length = 0;
198
+ this._eventNames = [] as any;
199
+ }
200
+ }