@hatiolab/things-scene 3.4.39 → 3.4.41

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 (338) hide show
  1. package/db.sqlite +0 -0
  2. package/package.json +1 -1
  3. package/schema.graphql +3966 -0
  4. package/things-scene-ie.js +1 -1
  5. package/things-scene-min.js +1 -1
  6. package/things-scene.mjs +2 -2
  7. package/dist/animation/animate.d.ts +0 -4
  8. package/dist/animation/animations/animation.d.ts +0 -14
  9. package/dist/animation/animations/fade.d.ts +0 -4
  10. package/dist/animation/animations/heartbeat.d.ts +0 -4
  11. package/dist/animation/animations/moving.d.ts +0 -4
  12. package/dist/animation/animations/outline.d.ts +0 -10
  13. package/dist/animation/animations/rotation.d.ts +0 -4
  14. package/dist/animation/animations/vibration.d.ts +0 -4
  15. package/dist/animation/compile.d.ts +0 -1
  16. package/dist/animation/delta.d.ts +0 -19
  17. package/dist/animation/index.d.ts +0 -1
  18. package/dist/command/command-change.d.ts +0 -7
  19. package/dist/command/command-migrate.d.ts +0 -4
  20. package/dist/command/command-migrate.js +0 -85
  21. package/dist/command/command-migrate.js.map +0 -1
  22. package/dist/command/command.d.ts +0 -5
  23. package/dist/command/snapshot-commander.d.ts +0 -15
  24. package/dist/components/anchor/anchor.d.ts +0 -128
  25. package/dist/components/anchor/ellipse-anchors.d.ts +0 -2
  26. package/dist/components/anchor/ellipse-anchors.js +0 -38
  27. package/dist/components/anchor/ellipse-anchors.js.map +0 -1
  28. package/dist/components/anchor/rect-anchors.d.ts +0 -10
  29. package/dist/components/audio.d.ts +0 -25
  30. package/dist/components/audio.js +0 -141
  31. package/dist/components/audio.js.map +0 -1
  32. package/dist/components/cloud.d.ts +0 -13
  33. package/dist/components/cloud.js +0 -31
  34. package/dist/components/cloud.js.map +0 -1
  35. package/dist/components/component.d.ts +0 -227
  36. package/dist/components/component.js +0 -912
  37. package/dist/components/component.js.map +0 -1
  38. package/dist/components/container-abstract.d.ts +0 -51
  39. package/dist/components/container-abstract.js +0 -372
  40. package/dist/components/container-abstract.js.map +0 -1
  41. package/dist/components/container.d.ts +0 -38
  42. package/dist/components/container.js +0 -75
  43. package/dist/components/container.js.map +0 -1
  44. package/dist/components/data/data-mapping.d.ts +0 -16
  45. package/dist/components/data/data.d.ts +0 -8
  46. package/dist/components/data/evaluator.d.ts +0 -1
  47. package/dist/components/donut.d.ts +0 -15
  48. package/dist/components/donut.js +0 -74
  49. package/dist/components/donut.js.map +0 -1
  50. package/dist/components/drawer/draw-image-pendable.d.ts +0 -1
  51. package/dist/components/drawer/effect.d.ts +0 -1
  52. package/dist/components/drawer/fill.d.ts +0 -14
  53. package/dist/components/drawer/format.d.ts +0 -1
  54. package/dist/components/drawer/line.d.ts +0 -3
  55. package/dist/components/drawer/stroke.d.ts +0 -1
  56. package/dist/components/drawer/text-wrapper.d.ts +0 -10
  57. package/dist/components/drawer/text.d.ts +0 -3
  58. package/dist/components/ellipse.d.ts +0 -35
  59. package/dist/components/ellipse.js +0 -99
  60. package/dist/components/ellipse.js.map +0 -1
  61. package/dist/components/file/ondropfile.d.ts +0 -1
  62. package/dist/components/fit/fit.d.ts +0 -15
  63. package/dist/components/geometry/transcoord.d.ts +0 -41
  64. package/dist/components/geometry/union.d.ts +0 -6
  65. package/dist/components/gif-view.d.ts +0 -18
  66. package/dist/components/gif-view.js +0 -116
  67. package/dist/components/gif-view.js.map +0 -1
  68. package/dist/components/global-ref.d.ts +0 -36
  69. package/dist/components/global-ref.js +0 -128
  70. package/dist/components/global-ref.js.map +0 -1
  71. package/dist/components/group.d.ts +0 -15
  72. package/dist/components/group.js +0 -145
  73. package/dist/components/group.js.map +0 -1
  74. package/dist/components/html/elements.d.ts +0 -2
  75. package/dist/components/html/fill.d.ts +0 -1
  76. package/dist/components/html/reposition.d.ts +0 -1
  77. package/dist/components/html/shadow.d.ts +0 -1
  78. package/dist/components/html-overlay-container.d.ts +0 -27
  79. package/dist/components/html-overlay-container.js +0 -14
  80. package/dist/components/html-overlay-container.js.map +0 -1
  81. package/dist/components/html-overlay-element.d.ts +0 -25
  82. package/dist/components/html-overlay-element.js +0 -9
  83. package/dist/components/html-overlay-element.js.map +0 -1
  84. package/dist/components/image-view.d.ts +0 -19
  85. package/dist/components/image-view.js +0 -180
  86. package/dist/components/image-view.js.map +0 -1
  87. package/dist/components/index.d.ts +0 -32
  88. package/dist/components/index.js +0 -39
  89. package/dist/components/index.js.map +0 -1
  90. package/dist/components/info-window.d.ts +0 -41
  91. package/dist/components/info-window.js +0 -425
  92. package/dist/components/info-window.js.map +0 -1
  93. package/dist/components/line.d.ts +0 -91
  94. package/dist/components/line.js +0 -303
  95. package/dist/components/line.js.map +0 -1
  96. package/dist/components/local-ref.d.ts +0 -47
  97. package/dist/components/local-ref.js +0 -103
  98. package/dist/components/local-ref.js.map +0 -1
  99. package/dist/components/mixins/connectable.d.ts +0 -45
  100. package/dist/components/mixins/data-source.d.ts +0 -9
  101. package/dist/components/mixins/html-element.d.ts +0 -24
  102. package/dist/components/mixins/move-handle.d.ts +0 -11
  103. package/dist/components/mixins/rect-path.d.ts +0 -13
  104. package/dist/components/mixins/value-holder.d.ts +0 -18
  105. package/dist/components/mutater/bounds.d.ts +0 -10
  106. package/dist/components/mutater/path.d.ts +0 -5
  107. package/dist/components/ortholine.d.ts +0 -21
  108. package/dist/components/ortholine.js +0 -814
  109. package/dist/components/ortholine.js.map +0 -1
  110. package/dist/components/outline/ellipse-outline.d.ts +0 -4
  111. package/dist/components/outline/ellipse-outline.js +0 -11
  112. package/dist/components/outline/ellipse-outline.js.map +0 -1
  113. package/dist/components/outline/path-outline.d.ts +0 -1
  114. package/dist/components/path.d.ts +0 -5
  115. package/dist/components/path.js +0 -40
  116. package/dist/components/path.js.map +0 -1
  117. package/dist/components/polygon.d.ts +0 -40
  118. package/dist/components/polygon.js +0 -157
  119. package/dist/components/polygon.js.map +0 -1
  120. package/dist/components/polyline.d.ts +0 -18
  121. package/dist/components/polyline.js +0 -102
  122. package/dist/components/polyline.js.map +0 -1
  123. package/dist/components/popup.d.ts +0 -48
  124. package/dist/components/popup.js +0 -138
  125. package/dist/components/popup.js.map +0 -1
  126. package/dist/components/rect.d.ts +0 -26
  127. package/dist/components/rect.js +0 -91
  128. package/dist/components/rect.js.map +0 -1
  129. package/dist/components/retention/retention-manager.d.ts +0 -8
  130. package/dist/components/root-container.d.ts +0 -90
  131. package/dist/components/root-container.js +0 -478
  132. package/dist/components/root-container.js.map +0 -1
  133. package/dist/components/ruler.d.ts +0 -16
  134. package/dist/components/ruler.js +0 -77
  135. package/dist/components/ruler.js.map +0 -1
  136. package/dist/components/shape.d.ts +0 -25
  137. package/dist/components/shape.js +0 -80
  138. package/dist/components/shape.js.map +0 -1
  139. package/dist/components/star.d.ts +0 -13
  140. package/dist/components/star.js +0 -80
  141. package/dist/components/star.js.map +0 -1
  142. package/dist/components/text/substitutor.d.ts +0 -3
  143. package/dist/components/text.d.ts +0 -8
  144. package/dist/components/text.js +0 -15
  145. package/dist/components/text.js.map +0 -1
  146. package/dist/components/three-container.d.ts +0 -60
  147. package/dist/components/three-container.js +0 -515
  148. package/dist/components/three-container.js.map +0 -1
  149. package/dist/components/triangle.d.ts +0 -15
  150. package/dist/components/triangle.js +0 -76
  151. package/dist/components/triangle.js.map +0 -1
  152. package/dist/const.d.ts +0 -39
  153. package/dist/core/collection.d.ts +0 -8
  154. package/dist/core/debug.d.ts +0 -1
  155. package/dist/core/deep-equals.d.ts +0 -1
  156. package/dist/core/dom-to-image.d.ts +0 -127
  157. package/dist/core/event.d.ts +0 -92
  158. package/dist/core/index.d.ts +0 -2
  159. package/dist/core/list.d.ts +0 -32
  160. package/dist/core/logger.d.ts +0 -3
  161. package/dist/core/memoize.d.ts +0 -6
  162. package/dist/core/mixin.d.ts +0 -1
  163. package/dist/core/obj-accessor.d.ts +0 -1
  164. package/dist/core/reference-map.d.ts +0 -14
  165. package/dist/core/round-rect.d.ts +0 -19
  166. package/dist/core/script-loader.d.ts +0 -3
  167. package/dist/core/snapshot-taker.d.ts +0 -12
  168. package/dist/core/stack.d.ts +0 -2
  169. package/dist/core/timecapsule.d.ts +0 -18
  170. package/dist/core/utils.d.ts +0 -9
  171. package/dist/decorator/anchors-decorator.d.ts +0 -31
  172. package/dist/decorator/data-spread-decorator.d.ts +0 -1
  173. package/dist/decorator/decotag-decorator.d.ts +0 -1
  174. package/dist/decorator/index.d.ts +0 -2
  175. package/dist/decorator/link-decorator.d.ts +0 -1
  176. package/dist/effect/gradation.d.ts +0 -1
  177. package/dist/effect/index.d.ts +0 -1
  178. package/dist/effect/shadow.d.ts +0 -2
  179. package/dist/effect/turn.d.ts +0 -1
  180. package/dist/event/event-engine.d.ts +0 -12
  181. package/dist/event/event-pump.d.ts +0 -11
  182. package/dist/event/event-tracker.d.ts +0 -21
  183. package/dist/event/index.d.ts +0 -2
  184. package/dist/event/ua-event-handler.d.ts +0 -32
  185. package/dist/event-map/event-map.d.ts +0 -9
  186. package/dist/event-map/index.d.ts +0 -1
  187. package/dist/event-map/move-handler.d.ts +0 -1
  188. package/dist/event-map/text-editor-lite.d.ts +0 -1
  189. package/dist/index.d.ts +0 -1
  190. package/dist/index.js +0 -3
  191. package/dist/index.js.map +0 -1
  192. package/dist/layer/action/emphasize.d.ts +0 -2
  193. package/dist/layer/action/popup.d.ts +0 -5
  194. package/dist/layer/action/pressed.d.ts +0 -2
  195. package/dist/layer/add-layer.d.ts +0 -42
  196. package/dist/layer/add-layer.js +0 -142
  197. package/dist/layer/add-layer.js.map +0 -1
  198. package/dist/layer/decotag-layer.d.ts +0 -27
  199. package/dist/layer/decotag-layer.js +0 -105
  200. package/dist/layer/decotag-layer.js.map +0 -1
  201. package/dist/layer/guide-layer.d.ts +0 -44
  202. package/dist/layer/guide-layer.js +0 -261
  203. package/dist/layer/guide-layer.js.map +0 -1
  204. package/dist/layer/index.d.ts +0 -7
  205. package/dist/layer/index.js +0 -11
  206. package/dist/layer/index.js.map +0 -1
  207. package/dist/layer/layer.d.ts +0 -32
  208. package/dist/layer/layer.js +0 -155
  209. package/dist/layer/layer.js.map +0 -1
  210. package/dist/layer/model-layer.d.ts +0 -46
  211. package/dist/layer/model-layer.js +0 -402
  212. package/dist/layer/model-layer.js.map +0 -1
  213. package/dist/layer/modeler/anchor-handler.d.ts +0 -36
  214. package/dist/layer/modeler/control-handler.d.ts +0 -18
  215. package/dist/layer/modeler/focus-outline.d.ts +0 -5
  216. package/dist/layer/modeler/group-outline.d.ts +0 -5
  217. package/dist/layer/modeler/index.d.ts +0 -7
  218. package/dist/layer/modeler/path-handler.d.ts +0 -22
  219. package/dist/layer/modeler/resizer.d.ts +0 -13
  220. package/dist/layer/modeler/rotator.d.ts +0 -15
  221. package/dist/layer/modeler/rotator.js +0 -120
  222. package/dist/layer/modeler/rotator.js.map +0 -1
  223. package/dist/layer/modeling-layer.d.ts +0 -66
  224. package/dist/layer/modeling-layer.js +0 -451
  225. package/dist/layer/modeling-layer.js.map +0 -1
  226. package/dist/layer/selection/selected-finder.d.ts +0 -1
  227. package/dist/layer/selection-layer.d.ts +0 -42
  228. package/dist/layer/selection-layer.js +0 -307
  229. package/dist/layer/selection-layer.js.map +0 -1
  230. package/dist/layer/shift-layer.d.ts +0 -18
  231. package/dist/layer/shift-layer.js +0 -61
  232. package/dist/layer/shift-layer.js.map +0 -1
  233. package/dist/layout/absolute.d.ts +0 -8
  234. package/dist/layout/card.d.ts +0 -7
  235. package/dist/layout/html-absolute.d.ts +0 -8
  236. package/dist/layout/index.d.ts +0 -8
  237. package/dist/layout/index.js +0 -12
  238. package/dist/layout/index.js.map +0 -1
  239. package/dist/layout/layout.d.ts +0 -11
  240. package/dist/layout/linear-horizontal.d.ts +0 -7
  241. package/dist/layout/linear-vertical.d.ts +0 -7
  242. package/dist/layout/table.d.ts +0 -9
  243. package/dist/layout/three.d.ts +0 -8
  244. package/dist/layout/three.js +0 -20
  245. package/dist/layout/three.js.map +0 -1
  246. package/dist/license/license.d.ts +0 -18
  247. package/dist/model/compile.d.ts +0 -1
  248. package/dist/model/compile.js +0 -28
  249. package/dist/model/compile.js.map +0 -1
  250. package/dist/model/duplicate.d.ts +0 -1
  251. package/dist/model/index.d.ts +0 -3
  252. package/dist/model/selector.d.ts +0 -2
  253. package/dist/style/compile.d.ts +0 -1
  254. package/dist/style/index.d.ts +0 -1
  255. package/dist/things-scene/api/add-start.d.ts +0 -1
  256. package/dist/things-scene/api/add.d.ts +0 -5
  257. package/dist/things-scene/api/align.d.ts +0 -1
  258. package/dist/things-scene/api/change.d.ts +0 -2
  259. package/dist/things-scene/api/clipboard.d.ts +0 -3
  260. package/dist/things-scene/api/distribute.d.ts +0 -1
  261. package/dist/things-scene/api/duplicate.d.ts +0 -4
  262. package/dist/things-scene/api/fullscreen.d.ts +0 -1
  263. package/dist/things-scene/api/group.d.ts +0 -8
  264. package/dist/things-scene/api/group.js +0 -78
  265. package/dist/things-scene/api/group.js.map +0 -1
  266. package/dist/things-scene/api/ids.d.ts +0 -4
  267. package/dist/things-scene/api/index.d.ts +0 -15
  268. package/dist/things-scene/api/listener.d.ts +0 -3
  269. package/dist/things-scene/api/remove.d.ts +0 -4
  270. package/dist/things-scene/api/symmetry.d.ts +0 -2
  271. package/dist/things-scene/api/symmetry.js +0 -39
  272. package/dist/things-scene/api/symmetry.js.map +0 -1
  273. package/dist/things-scene/api/to-data-url.d.ts +0 -1
  274. package/dist/things-scene/api/to-data-url.js +0 -69
  275. package/dist/things-scene/api/to-data-url.js.map +0 -1
  276. package/dist/things-scene/api/zorder.d.ts +0 -2
  277. package/dist/things-scene/application-context.d.ts +0 -40
  278. package/dist/things-scene/config.d.ts +0 -4
  279. package/dist/things-scene/create.d.ts +0 -20
  280. package/dist/things-scene/fps.d.ts +0 -1
  281. package/dist/things-scene/index.d.ts +0 -17
  282. package/dist/things-scene/index.js +0 -23
  283. package/dist/things-scene/index.js.map +0 -1
  284. package/dist/things-scene/polyfill.d.ts +0 -2
  285. package/dist/things-scene/scene.d.ts +0 -155
  286. package/dist/things-scene/version.d.ts +0 -2
  287. package/dist/threed/common.d.ts +0 -22
  288. package/dist/threed/control/three-controls.d.ts +0 -11
  289. package/dist/threed/control/three-controls.js +0 -620
  290. package/dist/threed/control/three-controls.js.map +0 -1
  291. package/dist/threed/html/elements.d.ts +0 -2
  292. package/dist/threed/real-object-camera-meshed.d.ts +0 -12
  293. package/dist/threed/real-object-camera-meshed.js +0 -49
  294. package/dist/threed/real-object-camera-meshed.js.map +0 -1
  295. package/dist/threed/real-object-camera.d.ts +0 -9
  296. package/dist/threed/real-object-camera.js +0 -31
  297. package/dist/threed/real-object-camera.js.map +0 -1
  298. package/dist/threed/real-object-dom-element.d.ts +0 -20
  299. package/dist/threed/real-object-dom-element.js +0 -78
  300. package/dist/threed/real-object-dom-element.js.map +0 -1
  301. package/dist/threed/real-object-dummy.d.ts +0 -6
  302. package/dist/threed/real-object-dummy.js +0 -11
  303. package/dist/threed/real-object-dummy.js.map +0 -1
  304. package/dist/threed/real-object-extrude.d.ts +0 -19
  305. package/dist/threed/real-object-extrude.js +0 -171
  306. package/dist/threed/real-object-extrude.js.map +0 -1
  307. package/dist/threed/real-object-gltf.d.ts +0 -15
  308. package/dist/threed/real-object-gltf.js +0 -97
  309. package/dist/threed/real-object-gltf.js.map +0 -1
  310. package/dist/threed/real-object-group.d.ts +0 -5
  311. package/dist/threed/real-object-group.js +0 -11
  312. package/dist/threed/real-object-group.js.map +0 -1
  313. package/dist/threed/real-object-mesh.d.ts +0 -11
  314. package/dist/threed/real-object-mesh.js +0 -55
  315. package/dist/threed/real-object-mesh.js.map +0 -1
  316. package/dist/threed/real-object-plane.d.ts +0 -6
  317. package/dist/threed/real-object-plane.js +0 -23
  318. package/dist/threed/real-object-plane.js.map +0 -1
  319. package/dist/threed/real-object-scene.d.ts +0 -21
  320. package/dist/threed/real-object-scene.js +0 -89
  321. package/dist/threed/real-object-scene.js.map +0 -1
  322. package/dist/threed/real-object-sprite.d.ts +0 -12
  323. package/dist/threed/real-object-sprite.js +0 -35
  324. package/dist/threed/real-object-sprite.js.map +0 -1
  325. package/dist/threed/real-object-text.d.ts +0 -16
  326. package/dist/threed/real-object-text.js +0 -70
  327. package/dist/threed/real-object-text.js.map +0 -1
  328. package/dist/threed/real-object.d.ts +0 -48
  329. package/dist/threed/real-object.js +0 -199
  330. package/dist/threed/real-object.js.map +0 -1
  331. package/dist/threed/texture/text-texture.d.ts +0 -8
  332. package/dist/threed/three-dimensional-container.d.ts +0 -7
  333. package/dist/threed/three-dimensional-container.js +0 -2
  334. package/dist/threed/three-dimensional-container.js.map +0 -1
  335. package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
  336. package/dist/types.d.ts +0 -53
  337. package/dist/types.js +0 -368
  338. package/dist/types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-view.js","sourceRoot":"","sources":["../../src/components/image-view.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { error, Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'image-selector',\n label: 'image-src',\n name: 'src',\n property: {\n displayField: 'id',\n displayFullUrl: true,\n baseUrlAlias: '$base_url',\n defaultStorage: 'scene-image',\n storageFilters: {\n type: Array,\n value: [\n {\n name: 'category',\n value: 'image'\n }\n ]\n },\n useUpload: true\n }\n },\n {\n type: 'select',\n label: 'cross-origin',\n name: 'crossOrigin',\n property: {\n options: ['', 'anonymous', 'use-credentials']\n }\n }\n ],\n 'value-property': 'src',\n help: 'scene/component/image-view'\n}\n\nconst NOIMAGE_DATA_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABIBAMAAAD7Se1QAAAAIVBMVEUAAABHcEwBAQEREREBAQEEBAQGBgYLCwsDAwMDAwMICAi6HF9tAAAAC3RSTlNNAEAERiMYCS41Eac10lYAAAEgSURBVHhe7dY9asQwEAXgh7DNertNiJy48pIitY3SB7bYdk0ukL1BDDmA9gZecoH4pmFQ3MQayUMguPBrNPD4wD9TCMvJmt3M/AtYwXOlXiWgqADVCUBD46MAnGhMBaCiUQmAm8VA/Eh/eWl9Fn5WcxD+OLuRrUYJDKLluwH2InACUgkoACSdADxQc50Bytadb9RkM0CT13TcvlCT1HFg8UTHvasuUVACCa3El6u2UdD8LFTlKhUFFgA+d3dj10aABkUN72N3jAADCrJq7PIIsPidcxBoTHIIAjMFmyCwmGYIAA1P9gFgfCANAOsDSccCDW+uLDB+kLGg94OkZoAGkwsDDAe2DOg5oPxAg03rBR88OHpBz4N8UVeHFSwma74BTW6Ge4rIRa4AAAAASUVORK5CYII='\n\nexport default class ImageView extends RectPath(Shape) {\n static NOIMAGE?: any\n\n static get noimage() {\n if (!ImageView.NOIMAGE) {\n ImageView.NOIMAGE = new Image()\n ImageView.NOIMAGE.src = NOIMAGE_DATA_URI\n }\n\n return ImageView.NOIMAGE\n }\n\n _offcanvas?: HTMLCanvasElement\n _image?: any\n\n dispose() {\n super.dispose()\n delete this._offcanvas\n delete this._image\n }\n\n render(ctx: CanvasRenderingContext2D) {\n var { left, top, width, height, isGray = false, alpha = 1, src } = this.state\n\n this.prepareIf(!this._image && src)\n\n // 박스 그리기\n ctx.beginPath()\n ctx.globalAlpha *= alpha\n\n if (this._image && this._image.complete) {\n if (isGray && this._offcanvas) {\n ctx.drawImage(this._offcanvas, left, top, width, height)\n } else {\n try {\n ctx.drawImage(this._image, left, top, width, height)\n } catch (e) {\n ctx.drawImage(ImageView.noimage, left, top, width, height)\n }\n }\n } else {\n !this.app.isViewMode && ctx.drawImage(ImageView.noimage, left, top, width, height)\n }\n }\n\n get nature() {\n return NATURE\n }\n\n get hasTextProperty() {\n return false\n }\n\n ready() {\n super.ready()\n this.prepareIf(!this._image && this.state.src)\n }\n\n prepare(resolve: (ret?: any) => void, reject: (e?: any) => void) {\n var { src, crossOrigin } = this.state\n\n if (!src) {\n resolve(this)\n return\n }\n\n this._image = new Image()\n\n try {\n if (crossOrigin) {\n this._image.crossOrigin = crossOrigin\n }\n\n this._image.src = this.app.url(src) || ''\n } catch (e) {\n reject(e)\n return\n }\n\n this._image.onload = () => {\n if (this.get('isGray')) {\n let width = this._image.width\n let height = this._image.height\n\n this._offcanvas = Component.createCanvas(width, height)\n\n let offcontext = this._offcanvas!.getContext('2d') as CanvasRenderingContext2D\n offcontext!.drawImage(this._image, 0, 0)\n\n let imageData = makeGrayImage(offcontext, width, height)\n offcontext!.putImageData(imageData!, 0, 0)\n }\n\n resolve(this)\n }\n\n this._image.onerror = (e: any) => {\n if (this._image && !this._image.currentSrc) this._image = null\n reject(e)\n }\n }\n\n get src() {\n return this.get('src')\n }\n\n set src(src) {\n this.set('src', src)\n }\n\n onchange(after: Properties, before: Properties) {\n if (after.hasOwnProperty('src') || after.hasOwnProperty('isGray')) {\n delete this._offcanvas\n delete this._image\n this.prepareIf(after.src)\n }\n }\n\n ondropfile(transfered: DataTransferItemList, files: FileList) {\n for (let i = 0; i < transfered.length; i++) {\n if (transfered[i].type.startsWith('image/')) {\n this.src = files[i]\n return\n }\n }\n }\n}\n\nfunction makeGrayImage(ctx: CanvasRenderingContext2D, width: number, height: number) {\n try {\n var img = ctx.getImageData(0, 0, width, height)\n } catch (e: any) {\n error('Get Image Data Error: ' + e.message)\n return null\n }\n\n var data = img.data\n // Loop through data.\n for (let i = 0; i < width * height * 4; i += 4) {\n // First bytes are red bytes.\n // Get red value.\n let red = data[i]\n\n // Second bytes are green bytes.\n // Get green value.\n let green = data[i + 1]\n\n // Third bytes are blue bytes.\n // Get blue value.\n let blue = data[i + 2]\n\n // Fourth bytes are alpha bytes\n // We don't care about alpha here.\n // Add the three values and divide by three.\n // Make it an integer.\n let gray = parseInt(String((red + green + blue) / 3))\n\n // Assign average to red, green, and blue.\n img.data[i] = gray\n img.data[i + 1] = gray\n img.data[i + 2] = gray\n }\n\n return img\n}\n\nComponent.register('image-view', ImageView)\n"]}
@@ -1,32 +0,0 @@
1
- export { default as Component } from "./component";
2
- export { default as ContainerAbstract } from "./container-abstract";
3
- export { default as Container } from "./container";
4
- export { default as RootContainer } from "./root-container";
5
- export { default as Shape } from "./shape";
6
- export { default as Line } from "./line";
7
- export { default as Ellipse } from "./ellipse";
8
- export { default as Rect } from "./rect";
9
- export { default as Polygon } from "./polygon";
10
- export { default as Polyline } from "./polyline";
11
- export { default as OrthoLine } from "./ortholine";
12
- export { default as Ruler } from "./ruler";
13
- export { default as ImageView } from "./image-view";
14
- export { default as GifView } from "./gif-view";
15
- export { default as AudioPlayer } from "./audio";
16
- export { default as Text } from "./text";
17
- export { default as Group } from "./group";
18
- export { default as LocalRef } from "./local-ref";
19
- export { default as GlobalRef } from "./global-ref";
20
- export { default as InfoWindow } from "./info-window";
21
- export { default as Popup } from "./popup";
22
- export { default as HTMLOverlayElement } from "./html-overlay-element";
23
- export { default as HTMLOverlayContainer } from "./html-overlay-container";
24
- export { default as Path } from "./path";
25
- export { default as Triangle } from "./triangle";
26
- export { default as Donut } from "./donut";
27
- export { default as Star } from "./star";
28
- export { default as RectPath } from "./mixins/rect-path";
29
- export { default as ValueHolder } from "./mixins/value-holder";
30
- export { default as DataSource } from "./mixins/data-source";
31
- export { default as MoveHandle } from "./mixins/move-handle";
32
- export { default as Connectable } from "./mixins/connectable";
@@ -1,39 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- export { default as Component } from './component';
5
- export { default as ContainerAbstract } from './container-abstract';
6
- export { default as Container } from './container';
7
- // Components
8
- export { default as RootContainer } from './root-container';
9
- export { default as Shape } from './shape';
10
- export { default as Line } from './line';
11
- export { default as Ellipse } from './ellipse';
12
- export { default as Rect } from './rect';
13
- export { default as Polygon } from './polygon';
14
- export { default as Polyline } from './polyline';
15
- export { default as OrthoLine } from './ortholine';
16
- export { default as Ruler } from './ruler';
17
- export { default as ImageView } from './image-view';
18
- export { default as GifView } from './gif-view';
19
- export { default as AudioPlayer } from './audio';
20
- export { default as Text } from './text';
21
- export { default as Group } from './group';
22
- export { default as LocalRef } from './local-ref';
23
- export { default as GlobalRef } from './global-ref';
24
- export { default as InfoWindow } from './info-window';
25
- export { default as Popup } from './popup';
26
- export { default as HTMLOverlayElement } from './html-overlay-element';
27
- export { default as HTMLOverlayContainer } from './html-overlay-container';
28
- // TODO 아래 컴포넌트들은 커스터마이징 컴포넌트로 분리할 것.(별도 프로젝트로.)
29
- export { default as Path } from './path';
30
- export { default as Triangle } from './triangle';
31
- export { default as Donut } from './donut';
32
- export { default as Star } from './star';
33
- // Mixins
34
- export { default as RectPath } from './mixins/rect-path';
35
- export { default as ValueHolder } from './mixins/value-holder';
36
- export { default as DataSource } from './mixins/data-source';
37
- export { default as MoveHandle } from './mixins/move-handle';
38
- export { default as Connectable } from './mixins/connectable';
39
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAElD,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE1E,gDAAgD;AAChD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AAExC,SAAS;AACT,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nexport { default as Component } from './component'\nexport { default as ContainerAbstract } from './container-abstract'\nexport { default as Container } from './container'\n\n// Components\nexport { default as RootContainer } from './root-container'\nexport { default as Shape } from './shape'\n\nexport { default as Line } from './line'\nexport { default as Ellipse } from './ellipse'\nexport { default as Rect } from './rect'\nexport { default as Polygon } from './polygon'\nexport { default as Polyline } from './polyline'\nexport { default as OrthoLine } from './ortholine'\nexport { default as Ruler } from './ruler'\nexport { default as ImageView } from './image-view'\nexport { default as GifView } from './gif-view'\nexport { default as AudioPlayer } from './audio'\nexport { default as Text } from './text'\nexport { default as Group } from './group'\n\nexport { default as LocalRef } from './local-ref'\nexport { default as GlobalRef } from './global-ref'\n\nexport { default as InfoWindow } from './info-window'\nexport { default as Popup } from './popup'\n\nexport { default as HTMLOverlayElement } from './html-overlay-element'\nexport { default as HTMLOverlayContainer } from './html-overlay-container'\n\n// TODO 아래 컴포넌트들은 커스터마이징 컴포넌트로 분리할 것.(별도 프로젝트로.)\nexport { default as Path } from './path'\nexport { default as Triangle } from './triangle'\nexport { default as Donut } from './donut'\nexport { default as Star } from './star'\n\n// Mixins\nexport { default as RectPath } from './mixins/rect-path'\nexport { default as ValueHolder } from './mixins/value-holder'\nexport { default as DataSource } from './mixins/data-source'\nexport { default as MoveHandle } from './mixins/move-handle'\nexport { default as Connectable } from './mixins/connectable'\n"]}
@@ -1,41 +0,0 @@
1
- declare const InfoWindow_base: {
2
- new (): {
3
- [x: string]: any;
4
- contains(x: any, y: any): boolean;
5
- path: {
6
- x: any;
7
- y: any;
8
- }[];
9
- readonly anchors: import("./anchor/anchor").Anchor[];
10
- };
11
- [x: string]: any;
12
- };
13
- export default class InfoWindow extends InfoWindow_base {
14
- static get image(): any;
15
- static toggle(component: any, infoWindowId: any, autoClose: any, position: any): void;
16
- static hide(component: any, infoWindowId: any): void;
17
- static show(component: any, infoWindowId: any, autoClose: any, position: any): void;
18
- dispose(): void;
19
- get infoWindows(): any[];
20
- _windows: any[] | undefined;
21
- _findInfoWindowByComponent(component: any): any;
22
- _addInfoWindow(component: any, window: any, styleElement: any): void;
23
- _removeInfoWindow(component: any): void;
24
- render(context: any): void;
25
- get hasTextProperty(): boolean;
26
- get nature(): {
27
- mutable: boolean;
28
- resizable: boolean;
29
- rotatable: boolean;
30
- properties: {
31
- type: string;
32
- label: string;
33
- name: string;
34
- property: {
35
- language: string;
36
- };
37
- }[];
38
- help: string;
39
- };
40
- }
41
- export {};
@@ -1,425 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import Component from './component';
5
- import Shape from './shape';
6
- import RectPath from './mixins/rect-path';
7
- import { GESTURES, KEYEVENTS } from '../const';
8
- const NATURE = {
9
- mutable: false,
10
- resizable: true,
11
- rotatable: true,
12
- properties: [
13
- {
14
- type: 'textarea',
15
- label: 'front-side-template',
16
- name: 'frontSideTemplate',
17
- property: {
18
- language: 'html'
19
- }
20
- },
21
- {
22
- type: 'textarea',
23
- label: 'back-side-template',
24
- name: 'backSideTemplate',
25
- property: {
26
- language: 'html'
27
- }
28
- },
29
- {
30
- type: 'textarea',
31
- label: 'style',
32
- name: 'style',
33
- property: {
34
- language: 'css'
35
- }
36
- }
37
- ],
38
- help: 'scene/component/info-window'
39
- };
40
- const INFOWINDOW_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAY1BMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAbxiAAAAIHRSTlMA+gPshCwwWFzYCeLRm7QRG6rLeDZI9JOJJDtjb1HAf1sAT80AAAQQSURBVHhe7MCBAAAAAMKw/KkzOMG2BAAAAKeu3lUohIEggO7jQi5qHqpgwML5/6+0F0y02z31FlvMMLKt86QMQ1ined2Evih1hFFjLfRWjgzDOGZ6JSiM00B9EuHALtQxJLiQBmqSBCeSUEuEGzs1BDjSaHxWOKK5Eyz/4SoMV/hp4+vtcPkdwZD/udwevNg7t1xXYRiKmkB7C+ENlPLq8fxHeX+RGjWQ1D45ldcIulBIvCvYJGBEadyTzxAcfY57NBjpLScOO/bzugcTHe7IMwiSLMcdHZhocMcMgTLjjgZM7F1bCJZ2v27ARGzYDwIk2Z+JYGJ/iiwQLMv+JAEThjkmRG64Q0Q+gIiIiIiIiIiIyFy0KRFt0bOJZAWSUigmkQaJaXhENiRnYBEpkZySRSRGcmIWEaQnYhHRSI5mESmQnIJFZIqQmGhiEYEbEnPjGlEGjYTogW/WUkOXENENSqZfEXmDiIiIiIiIiIiIiIiIiIiImq5ETIpRpBpjJCMeKy6Ri0ZS9MQjkmkkJs1YRDokp2MRyZGclkUkQnIiEQltaX3Lzb6yiGTpl2y/avqSAxGgelCOKI+Kc2isL0TUSsZ4EREREREREREREREREREREfnIQzXrNWSRTeNxnlOwIgueIr6AAyE+CpiqMEUK71IDO4E+LluEKYKnKcMUifEsTZgiJZ5lDVNkwJPcqzBFoPF/HplfxL/w6b4EPGv1h18Weya1TL8iIiIeiIiIiIiIiEjkPefxV+5YA9PPHylB+u5aqgZ39H+jKOxrqtu+pkzvr9YbzoZ6w2OFkzcrA3yE4WZlSSyFk54VoA/wR43+FaD+r9w32QdWvgvjp2ty2xq8qHPHmtyPFxfrK3hw1ejERlAlfR/Ame2OTow05d4rOLLSlHtDVhI0uRO01JeZ405op6zgNNXT+bIRfpIgn+AkU4pOxBscohojdCHu4RRzjC5EYwVHqRONDkSnEvK/CB3QSU32IRW3ZPnj9iEVoGCNTLVrh8ia1x+6wq8xvB5mz8pxu7oPwIn9lcR0AiuX1+1KX+BXqdvXzWsAC0NsGjzZsS/2Bd6yRA5RgIHkXNhSD3whASZ8rrB9mItuEAizac0fDlHxDMEwpQfD1tW4y3Hjfy5s9nOHH3uwWA+EqEJBWCjoTL/S5toBB/7hu6zer74NgqSP39zJU+qQX3ix763mHTqvIVRUVprCljlElRkEjBqNYevH8veBJ2xhiyhE8YctmhDFH7ZoQhR/2KIJUfxhiyRE8YctmhDFH7ZoQhR/2OIJUfxhC9Ppf/t1jgJACERRsHGyYRZB0Ujvf0xD8w6kP7y6RZmgf/oTFTtbbzJVxZWo2Nlqw6TVy5GowNl6ssm7v50obamfSxQAAAAAAAsKLM15fb3vpQAAAABJRU5ErkJggg==';
41
- function buttonsTemplate(template, closable, flipable) {
42
- var buttons = closable || flipable
43
- ? [
44
- '<div class="info-window-btns">',
45
- closable ? '<button class="closable">&#88</button>' : '',
46
- flipable ? '<button class="flipable">&#8652</button>' : '',
47
- '</div>'
48
- ]
49
- : [];
50
- var content = ['<div class="info-window-content">', template, '</div>'];
51
- return buttons.concat(content).join('');
52
- }
53
- // TODO 중복되기 어려운 클래스명으로 부모 클래스를 지정해준다.
54
- const INFOWINDOW_STYLE = `
55
- .flip {
56
- backface-visibility: hidden;
57
- -moz-backface-visibility: hidden;
58
- -ms-backface-visibility: hidden;
59
- -o-backface-visibility: hidden;
60
- -webkit-backface-visibility: hidden;
61
- border-radius: 7px;
62
- height: auto;
63
- font: normal 14px helvetica, arial, san serif;
64
- position: absolute;
65
- opacity:.9;
66
- transform-origin: 50% 50% 0px;
67
- -moz-transform-origin: 50% 50% 0px;
68
- -ms-transform-origin: 50% 50% 0px;
69
- -o-transform-origin: 50% 50% 0px;
70
- -webkit-transform-origin: 50% 50% 0px;
71
- transition: all 2s;
72
- -moz-transition: all 2s;
73
- -ms-transition: all 2s;
74
- -o-transition: all 2s;
75
- -webkit-transition: all 2s;
76
- min-width: 100px;min-height:50px;
77
- background-color:#3e424e;
78
- box-shadow: 2px 3px 2px 0px rgba(0,0,0,0.15);
79
- }
80
-
81
- #side-1 {
82
- transform: rotateY( 0deg );
83
- -moz-transform: rotateY( 0deg );
84
- -ms-transform: rotateY( 0deg );
85
- -o-transform: rotateY( 0deg );
86
- -webkit-transform: rotateY( 0deg );
87
- }
88
- .flip:after{
89
- content:"";
90
- display:block;
91
- position: absolute;
92
- opacity:.9;
93
- width: 0;
94
- height: 0;
95
- }
96
- .flip.arrow-top:after{
97
- left:45%;
98
- top:-17px;
99
- border-left:10px solid transparent;
100
- border-bottom:18px solid #323b44;
101
- border-right:10px solid transparent;
102
- }
103
- .flip.arrow-right:after{
104
- left:100%;
105
- top:48%;
106
- border-top:10px solid transparent;
107
- border-left:18px solid #323b44;
108
- border-bottom:10px solid transparent;
109
- }
110
- .flip.arrow-bottom:after{
111
- left:45%;
112
- top:100%;
113
- border-left:10px solid transparent;
114
- border-top:18px solid #323b44;
115
- border-right:10px solid transparent;
116
- }
117
- .flip.arrow-left:after{
118
- right:100%;
119
- top:48%;
120
- border-top:10px solid transparent;
121
- border-right:18px solid #323b44;
122
- border-bottom:10px solid transparent;
123
- }
124
-
125
- #side-2 {
126
- transform: rotateY( 180deg );
127
- -moz-transform: rotateY( 180deg );
128
- -ms-transform: rotateY( 180deg );
129
- -o-transform: rotateY( 180deg );
130
- -webkit-transform: rotateY( 180deg );
131
- }
132
-
133
- .flip-side-1 {
134
- transform: rotateY( 0deg ) !important;
135
- -moz-transform: rotateY( 0deg ) !important;
136
- -ms-transform: rotateY( 0deg ) !important;
137
- -o-transform: rotateY( 0deg ) !important;
138
- -webkit-transform: rotateY( 0deg ) !important;
139
- }
140
-
141
- .flip-side-2 {
142
- transform: rotateY( 180deg ) !important;
143
- -moz-transform: rotateY( 180deg ) !important;
144
- -ms-transform: rotateY( 180deg ) !important;
145
- -o-transform: rotateY( 180deg ) !important;
146
- -webkit-transform: rotateY( 180deg ) !important;
147
- }
148
-
149
- .info-window-btns{
150
- position:absolute;
151
- top:-18px;
152
- right:5px;
153
- overflow:hidden;
154
- }
155
- .info-window-content{
156
- padding:10px;
157
- color:#efefef;
158
- font-size:13px;
159
- line-height:1.4;
160
- }
161
- .info-window-btns button{
162
- width:40px;height:40px;
163
- float:right;
164
- border:0;
165
- border-radius:50%;
166
- background-color:#2a7da1;
167
- margin-right:3px;
168
- text-align:center;
169
- cursor:pointer;
170
- font-size:35px;
171
- color:#fff;
172
- line-height:0;
173
- }
174
- .info-window-btns button:hover{
175
- background-color:#60bb23;
176
- }
177
- `;
178
- const ARROW_LENGTH = 20;
179
- function toggleClassName(className, clazz) {
180
- var classList = className.split(/\s+/);
181
- var idx = classList.indexOf(clazz);
182
- if (idx != -1)
183
- classList.splice(idx, 1);
184
- else
185
- classList.splice(-1, 0, clazz);
186
- return classList.join(' ');
187
- }
188
- /*
189
- * InfoWindow 선택된 컴포넌트와 관련해서 사용자 정의 정보 윈도우를 보여준다.
190
- *
191
- * Information Window를 통해서 보여준다.
192
- *
193
- * Information Window는 앞면과 뒷면의 정보를 가지고 있으며, Rotation될 수 있다.
194
- */
195
- export default class InfoWindow extends RectPath(Shape) {
196
- static get image() {
197
- if (!InfoWindow._image) {
198
- InfoWindow._image = new Image();
199
- InfoWindow._image.src = INFOWINDOW_IMAGE;
200
- }
201
- return InfoWindow._image;
202
- }
203
- static toggle(component, infoWindowId, autoClose, position) {
204
- if (!infoWindowId) {
205
- console.warn('InfoWindow not defined.');
206
- return;
207
- }
208
- var infowindowComponent = component.root.findById(infoWindowId);
209
- if (!infowindowComponent) {
210
- console.warn('InfoWindow Not Found.', infoWindowId);
211
- return;
212
- }
213
- if (infowindowComponent._findInfoWindowByComponent(component)) {
214
- InfoWindow.hide(component, infoWindowId);
215
- }
216
- else {
217
- InfoWindow.show(component, infoWindowId, autoClose, position);
218
- }
219
- }
220
- static hide(component, infoWindowId) {
221
- if (!infoWindowId)
222
- return;
223
- var infoWindowComponent = component.root.findById(infoWindowId);
224
- if (!infoWindowComponent) {
225
- console.warn('InfoWindow Not Found.', infoWindowId);
226
- return;
227
- }
228
- infoWindowComponent._removeInfoWindow(component);
229
- }
230
- static show(component, infoWindowId, autoClose, position) {
231
- if (!infoWindowId) {
232
- console.warn('InfoWindow not defined.');
233
- return;
234
- }
235
- // 1. InfoWindow 컴포넌트의 템플릿을 가져온다.
236
- var infowindowComponent = component.root.findById(infoWindowId);
237
- if (!infowindowComponent) {
238
- console.warn('InfoWindow Not Found.', infoWindowId);
239
- return;
240
- }
241
- if (infowindowComponent._findInfoWindowByComponent(component))
242
- return;
243
- var { frontSideTemplate = '', backSideTemplate = '' } = infowindowComponent.model;
244
- var templates = [frontSideTemplate, backSideTemplate].filter(side => String(side).trim());
245
- templates = templates.map(template => Component.template(buttonsTemplate(template, !autoClose, templates.length == 2)));
246
- if (templates.length == 0)
247
- return;
248
- var style = INFOWINDOW_STYLE + infowindowComponent.get('style');
249
- var { left, top } = component.bounds;
250
- var { x, y } = position
251
- ? component.rootModel.transcoordC2S(position.x, position.y)
252
- : component.transcoordS2T(left, top);
253
- left = x;
254
- top = y;
255
- // 2. 컴포넌트의 위치와 패딩 정보를 span에 반영한다.
256
- var span = document.createElement('span');
257
- span.style.position = 'absolute';
258
- // 3. 스타일 엘리먼트를 생성한다.
259
- var styleElement = document.createElement('style');
260
- styleElement.type = 'text/css';
261
- styleElement.appendChild(document.createTextNode(style));
262
- span.appendChild(styleElement);
263
- // 4. 양면 div 엘리먼트를 생성한다.
264
- // TODO 템플릿이 한면만 등록된 경우에는 플립 기능과 플립 버튼을 제거한다.
265
- // TODO 앞면과 뒷면의 크기를 동일하게 유지한다.(큰면을 기준으로 맞춘다.)
266
- if (templates[0]) {
267
- var div_front = document.createElement('div');
268
- div_front.id = 'side-1';
269
- div_front.className = 'flip';
270
- div_front.style.display = 'inline-block';
271
- div_front.innerHTML = templates[0](component);
272
- }
273
- if (templates[1]) {
274
- var div_back = document.createElement('div');
275
- div_back.id = 'side-2';
276
- div_back.className = 'flip';
277
- div_back.style.display = 'inline-block';
278
- div_back.innerHTML = templates[1](component);
279
- }
280
- // 5. InfoWindow에서 발생하는 사용자 이벤트의 확산을 막는다.
281
- GESTURES.forEach(function (event) {
282
- span.addEventListener(event, function (e) {
283
- e.stopPropagation();
284
- });
285
- });
286
- KEYEVENTS.forEach(function (event) {
287
- span.addEventListener(event, function (e) {
288
- e.stopPropagation();
289
- });
290
- });
291
- // 6. InfoWindow를 도큐먼트에 추가한다.
292
- var targetElement = component.root.model_layer.overlay;
293
- if (div_front)
294
- span.appendChild(div_front);
295
- if (div_back)
296
- span.appendChild(div_back);
297
- targetElement.appendChild(span);
298
- infowindowComponent._addInfoWindow(component, span, styleElement);
299
- // TODO InfoWindow가 사라질때 이벤트리스너를 제거해주어야 한다.
300
- if (div_front) {
301
- let flipButton = div_front.querySelector('.info-window-btns > .flipable');
302
- flipButton &&
303
- flipButton.addEventListener('click', function (e) {
304
- e.preventDefault();
305
- div_back.className = toggleClassName(div_back.className, 'flip-side-1');
306
- div_front.className = toggleClassName(div_front.className, 'flip-side-2');
307
- }, false);
308
- let closeButton = div_front.querySelector('.info-window-btns > .closable');
309
- closeButton &&
310
- closeButton.addEventListener('click', function (e) {
311
- e.preventDefault();
312
- InfoWindow.hide(component, infoWindowId);
313
- }, false);
314
- }
315
- if (div_back) {
316
- let flipButton = div_back.querySelector('.info-window-btns > .flipable');
317
- flipButton &&
318
- flipButton.addEventListener('click', function (e) {
319
- e.preventDefault();
320
- div_back.className = toggleClassName(div_back.className, 'flip-side-1');
321
- div_front.className = toggleClassName(div_front.className, 'flip-side-2');
322
- }, false);
323
- let closeButton = div_back.querySelector('.info-window-btns > .closable');
324
- closeButton &&
325
- closeButton.addEventListener('click', function (e) {
326
- e.preventDefault();
327
- InfoWindow.hide(component, infoWindowId);
328
- }, false);
329
- }
330
- // 7. 완성된 InfoWindow의 크기를 감안한 위치 조정
331
- var infowindow_width = div_front.offsetWidth;
332
- var infowindow_height = div_front.offsetHeight;
333
- // browser의 폭과 높이.
334
- var full_width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
335
- var full_height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
336
- // scene의 LEFT, TOP, RIGHT, BOTTOM
337
- var scene_bound = component.rootModel.target.getBoundingClientRect();
338
- var sides = [];
339
- div_front && sides.push(div_front);
340
- div_back && sides.push(div_back);
341
- // 컴포넌트의 상하좌우 순으로 여백이 있는 공간에 InfoWindow를 배치한다.
342
- // TODO 왼쪽 또는 오른쪽에 표현되는 경우에는, 위아래로 플립되도록 한다.
343
- var point = {
344
- x: left,
345
- y: top
346
- };
347
- var endpoint = component.transcoordS2C(point.x, point.y);
348
- if (endpoint.x + infowindow_width / 2 + scene_bound.left < scene_bound.right &&
349
- endpoint.x - infowindow_width / 2 > scene_bound.left) {
350
- if (infowindow_height + ARROW_LENGTH < endpoint.y) {
351
- // TOP
352
- span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
353
- span.style.marginTop = point.y - infowindow_height - ARROW_LENGTH + 'px';
354
- sides.forEach(side => (side.className += ' arrow-bottom'));
355
- return;
356
- }
357
- else {
358
- endpoint = component.transcoordS2C(point.x, point.y + infowindow_height + ARROW_LENGTH);
359
- if (scene_bound.bottom > endpoint.y + scene_bound.top) {
360
- // BOTTOM
361
- span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
362
- span.style.marginTop = point.y + ARROW_LENGTH + 'px';
363
- sides.forEach(side => (side.className += ' arrow-top'));
364
- return;
365
- }
366
- }
367
- }
368
- endpoint = component.transcoordS2C(point.x, point.y);
369
- if (endpoint.x - (infowindow_width + ARROW_LENGTH) > scene_bound.left) {
370
- // LEFT
371
- span.style.marginLeft = point.x - infowindow_width - ARROW_LENGTH + 'px';
372
- span.style.marginTop = point.y - infowindow_height / 2 + 'px';
373
- sides.forEach(side => (side.className += ' arrow-right'));
374
- return;
375
- }
376
- span.style.marginLeft = point.x + ARROW_LENGTH + 'px';
377
- span.style.marginTop = point.y - infowindow_height / 2 + 'px';
378
- sides.forEach(side => (side.className += ' arrow-left'));
379
- }
380
- /* Members */
381
- dispose() {
382
- this.infoWindows.map(iw => iw.component).forEach(component => this._removeInfoWindow(component));
383
- super.dispose();
384
- }
385
- get infoWindows() {
386
- if (!this._windows)
387
- this._windows = [];
388
- return this._windows;
389
- }
390
- _findInfoWindowByComponent(component) {
391
- return this.infoWindows.find(iw => iw.component === component);
392
- }
393
- _addInfoWindow(component, window, styleElement) {
394
- var iw = this._findInfoWindowByComponent(component);
395
- if (iw)
396
- return;
397
- this._windows.push({
398
- component,
399
- window,
400
- styleElement
401
- });
402
- }
403
- _removeInfoWindow(component) {
404
- var iw = this._findInfoWindowByComponent(component);
405
- if (!iw)
406
- return;
407
- let infoWindowElement = iw.window;
408
- infoWindowElement && infoWindowElement.parentNode.removeChild(infoWindowElement);
409
- var idx = this.infoWindows.lastIndexOf(iw);
410
- this.infoWindows.splice(idx, 1);
411
- }
412
- render(context) {
413
- var { left, top, width, height } = this.bounds;
414
- context.beginPath();
415
- this.drawImage(context, InfoWindow.image, left, top, width, height);
416
- }
417
- get hasTextProperty() {
418
- return false;
419
- }
420
- get nature() {
421
- return NATURE;
422
- }
423
- }
424
- Component.register('info-window', InfoWindow);
425
- //# sourceMappingURL=info-window.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"info-window.js","sourceRoot":"","sources":["../../src/components/info-window.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component'\nimport Shape from './shape'\nimport RectPath from './mixins/rect-path'\n\nimport { GESTURES, KEYEVENTS } from '../const'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'textarea',\n label: 'front-side-template',\n name: 'frontSideTemplate',\n property: {\n language: 'html'\n }\n },\n {\n type: 'textarea',\n label: 'back-side-template',\n name: 'backSideTemplate',\n property: {\n language: 'html'\n }\n },\n {\n type: 'textarea',\n label: 'style',\n name: 'style',\n property: {\n language: 'css'\n }\n }\n ],\n help: 'scene/component/info-window'\n}\n\nconst INFOWINDOW_IMAGE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAY1BMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAbxiAAAAIHRSTlMA+gPshCwwWFzYCeLRm7QRG6rLeDZI9JOJJDtjb1HAf1sAT80AAAQQSURBVHhe7MCBAAAAAMKw/KkzOMG2BAAAAKeu3lUohIEggO7jQi5qHqpgwML5/6+0F0y02z31FlvMMLKt86QMQ1ined2Evih1hFFjLfRWjgzDOGZ6JSiM00B9EuHALtQxJLiQBmqSBCeSUEuEGzs1BDjSaHxWOKK5Eyz/4SoMV/hp4+vtcPkdwZD/udwevNg7t1xXYRiKmkB7C+ENlPLq8fxHeX+RGjWQ1D45ldcIulBIvCvYJGBEadyTzxAcfY57NBjpLScOO/bzugcTHe7IMwiSLMcdHZhocMcMgTLjjgZM7F1bCJZ2v27ARGzYDwIk2Z+JYGJ/iiwQLMv+JAEThjkmRG64Q0Q+gIiIiIiIiIiIyFy0KRFt0bOJZAWSUigmkQaJaXhENiRnYBEpkZySRSRGcmIWEaQnYhHRSI5mESmQnIJFZIqQmGhiEYEbEnPjGlEGjYTogW/WUkOXENENSqZfEXmDiIiIiIiIiIiIiIiIiIiImq5ETIpRpBpjJCMeKy6Ri0ZS9MQjkmkkJs1YRDokp2MRyZGclkUkQnIiEQltaX3Lzb6yiGTpl2y/avqSAxGgelCOKI+Kc2isL0TUSsZ4EREREREREREREREREREREfnIQzXrNWSRTeNxnlOwIgueIr6AAyE+CpiqMEUK71IDO4E+LluEKYKnKcMUifEsTZgiJZ5lDVNkwJPcqzBFoPF/HplfxL/w6b4EPGv1h18Weya1TL8iIiIeiIiIiIiIiEjkPefxV+5YA9PPHylB+u5aqgZ39H+jKOxrqtu+pkzvr9YbzoZ6w2OFkzcrA3yE4WZlSSyFk54VoA/wR43+FaD+r9w32QdWvgvjp2ty2xq8qHPHmtyPFxfrK3hw1ejERlAlfR/Ame2OTow05d4rOLLSlHtDVhI0uRO01JeZ405op6zgNNXT+bIRfpIgn+AkU4pOxBscohojdCHu4RRzjC5EYwVHqRONDkSnEvK/CB3QSU32IRW3ZPnj9iEVoGCNTLVrh8ia1x+6wq8xvB5mz8pxu7oPwIn9lcR0AiuX1+1KX+BXqdvXzWsAC0NsGjzZsS/2Bd6yRA5RgIHkXNhSD3whASZ8rrB9mItuEAizac0fDlHxDMEwpQfD1tW4y3Hjfy5s9nOHH3uwWA+EqEJBWCjoTL/S5toBB/7hu6zer74NgqSP39zJU+qQX3ix763mHTqvIVRUVprCljlElRkEjBqNYevH8veBJ2xhiyhE8YctmhDFH7ZoQhR/2KIJUfxhiyRE8YctmhDFH7ZoQhR/2OIJUfxhC9Ppf/t1jgJACERRsHGyYRZB0Ujvf0xD8w6kP7y6RZmgf/oTFTtbbzJVxZWo2Nlqw6TVy5GowNl6ssm7v50obamfSxQAAAAAAAsKLM15fb3vpQAAAABJRU5ErkJggg=='\n\nfunction buttonsTemplate(template, closable, flipable) {\n var buttons =\n closable || flipable\n ? [\n '<div class=\"info-window-btns\">',\n closable ? '<button class=\"closable\">&#88</button>' : '',\n flipable ? '<button class=\"flipable\">&#8652</button>' : '',\n '</div>'\n ]\n : []\n\n var content = ['<div class=\"info-window-content\">', template, '</div>']\n\n return buttons.concat(content).join('')\n}\n\n// TODO 중복되기 어려운 클래스명으로 부모 클래스를 지정해준다.\nconst INFOWINDOW_STYLE = `\n.flip {\n backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n -ms-backface-visibility: hidden;\n -o-backface-visibility: hidden;\n -webkit-backface-visibility: hidden;\n border-radius: 7px;\n height: auto;\n font: normal 14px helvetica, arial, san serif;\n position: absolute;\n opacity:.9;\n transform-origin: 50% 50% 0px;\n -moz-transform-origin: 50% 50% 0px;\n -ms-transform-origin: 50% 50% 0px;\n -o-transform-origin: 50% 50% 0px;\n -webkit-transform-origin: 50% 50% 0px;\n transition: all 2s;\n -moz-transition: all 2s;\n -ms-transition: all 2s;\n -o-transition: all 2s;\n -webkit-transition: all 2s;\n min-width: 100px;min-height:50px;\n background-color:#3e424e;\n box-shadow: 2px 3px 2px 0px rgba(0,0,0,0.15);\n}\n\n#side-1 {\n transform: rotateY( 0deg );\n -moz-transform: rotateY( 0deg );\n -ms-transform: rotateY( 0deg );\n -o-transform: rotateY( 0deg );\n -webkit-transform: rotateY( 0deg );\n}\n.flip:after{\n content:\"\";\n display:block;\n position: absolute;\n opacity:.9;\n width: 0;\n height: 0;\n}\n.flip.arrow-top:after{\n left:45%;\n top:-17px;\n border-left:10px solid transparent;\n border-bottom:18px solid #323b44;\n border-right:10px solid transparent;\n}\n.flip.arrow-right:after{\n left:100%;\n top:48%;\n border-top:10px solid transparent;\n border-left:18px solid #323b44;\n border-bottom:10px solid transparent;\n}\n.flip.arrow-bottom:after{\n left:45%;\n top:100%;\n border-left:10px solid transparent;\n border-top:18px solid #323b44;\n border-right:10px solid transparent;\n}\n.flip.arrow-left:after{\n right:100%;\n top:48%;\n border-top:10px solid transparent;\n border-right:18px solid #323b44;\n border-bottom:10px solid transparent;\n}\n\n#side-2 {\n transform: rotateY( 180deg );\n -moz-transform: rotateY( 180deg );\n -ms-transform: rotateY( 180deg );\n -o-transform: rotateY( 180deg );\n -webkit-transform: rotateY( 180deg );\n}\n\n.flip-side-1 {\n transform: rotateY( 0deg ) !important;\n -moz-transform: rotateY( 0deg ) !important;\n -ms-transform: rotateY( 0deg ) !important;\n -o-transform: rotateY( 0deg ) !important;\n -webkit-transform: rotateY( 0deg ) !important;\n}\n\n.flip-side-2 {\n transform: rotateY( 180deg ) !important;\n -moz-transform: rotateY( 180deg ) !important;\n -ms-transform: rotateY( 180deg ) !important;\n -o-transform: rotateY( 180deg ) !important;\n -webkit-transform: rotateY( 180deg ) !important;\n}\n\n.info-window-btns{\n position:absolute;\n top:-18px;\n right:5px;\n overflow:hidden;\n}\n.info-window-content{\n padding:10px;\n color:#efefef;\n font-size:13px;\n line-height:1.4;\n}\n.info-window-btns button{\n width:40px;height:40px;\n float:right;\n border:0;\n border-radius:50%;\n background-color:#2a7da1;\n margin-right:3px;\n text-align:center;\n cursor:pointer;\n font-size:35px;\n color:#fff;\n line-height:0;\n}\n.info-window-btns button:hover{\n background-color:#60bb23;\n}\n`\n\nconst ARROW_LENGTH = 20\n\nfunction toggleClassName(className, clazz) {\n var classList = className.split(/\\s+/)\n var idx = classList.indexOf(clazz)\n if (idx != -1) classList.splice(idx, 1)\n else classList.splice(-1, 0, clazz)\n\n return classList.join(' ')\n}\n\n/*\n * InfoWindow 선택된 컴포넌트와 관련해서 사용자 정의 정보 윈도우를 보여준다.\n *\n * Information Window를 통해서 보여준다.\n *\n * Information Window는 앞면과 뒷면의 정보를 가지고 있으며, Rotation될 수 있다.\n */\n\nexport default class InfoWindow extends RectPath(Shape) {\n static get image() {\n if (!InfoWindow._image) {\n InfoWindow._image = new Image()\n InfoWindow._image.src = INFOWINDOW_IMAGE\n }\n\n return InfoWindow._image\n }\n\n static toggle(component, infoWindowId, autoClose, position) {\n if (!infoWindowId) {\n console.warn('InfoWindow not defined.')\n return\n }\n\n var infowindowComponent = component.root.findById(infoWindowId)\n\n if (!infowindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n if (infowindowComponent._findInfoWindowByComponent(component)) {\n InfoWindow.hide(component, infoWindowId)\n } else {\n InfoWindow.show(component, infoWindowId, autoClose, position)\n }\n }\n\n static hide(component, infoWindowId) {\n if (!infoWindowId) return\n\n var infoWindowComponent = component.root.findById(infoWindowId)\n\n if (!infoWindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n infoWindowComponent._removeInfoWindow(component)\n }\n\n static show(component, infoWindowId, autoClose, position) {\n if (!infoWindowId) {\n console.warn('InfoWindow not defined.')\n return\n }\n\n // 1. InfoWindow 컴포넌트의 템플릿을 가져온다.\n var infowindowComponent = component.root.findById(infoWindowId)\n\n if (!infowindowComponent) {\n console.warn('InfoWindow Not Found.', infoWindowId)\n return\n }\n\n if (infowindowComponent._findInfoWindowByComponent(component)) return\n\n var { frontSideTemplate = '', backSideTemplate = '' } = infowindowComponent.model\n\n var templates = [frontSideTemplate, backSideTemplate].filter(side => String(side).trim())\n\n templates = templates.map(template =>\n Component.template(buttonsTemplate(template, !autoClose, templates.length == 2))\n )\n\n if (templates.length == 0) return\n\n var style = INFOWINDOW_STYLE + infowindowComponent.get('style')\n\n var { left, top } = component.bounds\n var { x, y } = position\n ? component.rootModel.transcoordC2S(position.x, position.y)\n : component.transcoordS2T(left, top)\n\n left = x\n top = y\n\n // 2. 컴포넌트의 위치와 패딩 정보를 span에 반영한다.\n var span = document.createElement('span')\n\n span.style.position = 'absolute'\n\n // 3. 스타일 엘리먼트를 생성한다.\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n styleElement.appendChild(document.createTextNode(style))\n\n span.appendChild(styleElement)\n\n // 4. 양면 div 엘리먼트를 생성한다.\n // TODO 템플릿이 한면만 등록된 경우에는 플립 기능과 플립 버튼을 제거한다.\n // TODO 앞면과 뒷면의 크기를 동일하게 유지한다.(큰면을 기준으로 맞춘다.)\n\n if (templates[0]) {\n var div_front = document.createElement('div')\n\n div_front.id = 'side-1'\n div_front.className = 'flip'\n div_front.style.display = 'inline-block'\n\n div_front.innerHTML = templates[0](component)\n }\n\n if (templates[1]) {\n var div_back = document.createElement('div')\n\n div_back.id = 'side-2'\n div_back.className = 'flip'\n div_back.style.display = 'inline-block'\n\n div_back.innerHTML = templates[1](component)\n }\n\n // 5. InfoWindow에서 발생하는 사용자 이벤트의 확산을 막는다.\n GESTURES.forEach(function (event) {\n span.addEventListener(event, function (e) {\n e.stopPropagation()\n })\n })\n\n KEYEVENTS.forEach(function (event) {\n span.addEventListener(event, function (e) {\n e.stopPropagation()\n })\n })\n\n // 6. InfoWindow를 도큐먼트에 추가한다.\n var targetElement = component.root.model_layer.overlay\n if (div_front) span.appendChild(div_front)\n if (div_back) span.appendChild(div_back)\n targetElement.appendChild(span)\n\n infowindowComponent._addInfoWindow(component, span, styleElement)\n\n // TODO InfoWindow가 사라질때 이벤트리스너를 제거해주어야 한다.\n if (div_front) {\n let flipButton = div_front.querySelector('.info-window-btns > .flipable')\n flipButton &&\n flipButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n div_back.className = toggleClassName(div_back.className, 'flip-side-1')\n div_front.className = toggleClassName(div_front.className, 'flip-side-2')\n },\n false\n )\n\n let closeButton = div_front.querySelector('.info-window-btns > .closable')\n closeButton &&\n closeButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n InfoWindow.hide(component, infoWindowId)\n },\n false\n )\n }\n\n if (div_back) {\n let flipButton = div_back.querySelector('.info-window-btns > .flipable')\n flipButton &&\n flipButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n div_back.className = toggleClassName(div_back.className, 'flip-side-1')\n div_front.className = toggleClassName(div_front.className, 'flip-side-2')\n },\n false\n )\n\n let closeButton = div_back.querySelector('.info-window-btns > .closable')\n closeButton &&\n closeButton.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n InfoWindow.hide(component, infoWindowId)\n },\n false\n )\n }\n\n // 7. 완성된 InfoWindow의 크기를 감안한 위치 조정\n var infowindow_width = div_front.offsetWidth\n var infowindow_height = div_front.offsetHeight\n\n // browser의 폭과 높이.\n var full_width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n\n var full_height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n // scene의 LEFT, TOP, RIGHT, BOTTOM\n var scene_bound = component.rootModel.target.getBoundingClientRect()\n\n var sides = []\n div_front && sides.push(div_front)\n div_back && sides.push(div_back)\n\n // 컴포넌트의 상하좌우 순으로 여백이 있는 공간에 InfoWindow를 배치한다.\n // TODO 왼쪽 또는 오른쪽에 표현되는 경우에는, 위아래로 플립되도록 한다.\n var point = {\n x: left,\n y: top\n }\n\n var endpoint = component.transcoordS2C(point.x, point.y)\n\n if (\n endpoint.x + infowindow_width / 2 + scene_bound.left < scene_bound.right &&\n endpoint.x - infowindow_width / 2 > scene_bound.left\n ) {\n if (infowindow_height + ARROW_LENGTH < endpoint.y) {\n // TOP\n span.style.marginLeft = point.x - infowindow_width / 2 + 'px'\n span.style.marginTop = point.y - infowindow_height - ARROW_LENGTH + 'px'\n\n sides.forEach(side => (side.className += ' arrow-bottom'))\n return\n } else {\n endpoint = component.transcoordS2C(point.x, point.y + infowindow_height + ARROW_LENGTH)\n\n if (scene_bound.bottom > endpoint.y + scene_bound.top) {\n // BOTTOM\n span.style.marginLeft = point.x - infowindow_width / 2 + 'px'\n span.style.marginTop = point.y + ARROW_LENGTH + 'px'\n\n sides.forEach(side => (side.className += ' arrow-top'))\n return\n }\n }\n }\n\n endpoint = component.transcoordS2C(point.x, point.y)\n\n if (endpoint.x - (infowindow_width + ARROW_LENGTH) > scene_bound.left) {\n // LEFT\n span.style.marginLeft = point.x - infowindow_width - ARROW_LENGTH + 'px'\n span.style.marginTop = point.y - infowindow_height / 2 + 'px'\n\n sides.forEach(side => (side.className += ' arrow-right'))\n return\n }\n\n span.style.marginLeft = point.x + ARROW_LENGTH + 'px'\n span.style.marginTop = point.y - infowindow_height / 2 + 'px'\n\n sides.forEach(side => (side.className += ' arrow-left'))\n }\n\n /* Members */\n\n dispose() {\n this.infoWindows.map(iw => iw.component).forEach(component => this._removeInfoWindow(component))\n\n super.dispose()\n }\n\n get infoWindows() {\n if (!this._windows) this._windows = []\n\n return this._windows\n }\n\n _findInfoWindowByComponent(component) {\n return this.infoWindows.find(iw => iw.component === component)\n }\n\n _addInfoWindow(component, window, styleElement) {\n var iw = this._findInfoWindowByComponent(component)\n if (iw) return\n\n this._windows.push({\n component,\n window,\n styleElement\n })\n }\n\n _removeInfoWindow(component) {\n var iw = this._findInfoWindowByComponent(component)\n if (!iw) return\n\n let infoWindowElement = iw.window\n\n infoWindowElement && infoWindowElement.parentNode.removeChild(infoWindowElement)\n\n var idx = this.infoWindows.lastIndexOf(iw)\n this.infoWindows.splice(idx, 1)\n }\n\n render(context) {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, InfoWindow.image, left, top, width, height)\n }\n\n get hasTextProperty() {\n return false\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('info-window', InfoWindow)\n"]}