@hatiolab/things-scene 9.0.0-beta.35 → 9.0.0-beta.36
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.
- package/babel.config.js +4 -3
- package/db.sqlite +0 -0
- package/dist/animation/animate.js +63 -0
- package/dist/animation/animate.js.map +1 -0
- package/dist/animation/animations/animation.js +122 -0
- package/dist/animation/animations/animation.js.map +1 -0
- package/dist/animation/animations/fade.js +28 -0
- package/dist/animation/animations/fade.js.map +1 -0
- package/dist/animation/animations/heartbeat.js +28 -0
- package/dist/animation/animations/heartbeat.js.map +1 -0
- package/dist/animation/animations/moving.js +24 -0
- package/dist/animation/animations/moving.js.map +1 -0
- package/dist/animation/animations/outline.js +47 -0
- package/dist/animation/animations/outline.js.map +1 -0
- package/dist/animation/animations/rotation.js +22 -0
- package/dist/animation/animations/rotation.js.map +1 -0
- package/dist/animation/animations/vibration.js +31 -0
- package/dist/animation/animations/vibration.js.map +1 -0
- package/dist/animation/compile.js +31 -0
- package/dist/animation/compile.js.map +1 -0
- package/dist/animation/delta.js +51 -0
- package/dist/animation/delta.js.map +1 -0
- package/dist/animation/index.js +14 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/command/command-change.js +33 -0
- package/dist/command/command-change.js.map +1 -0
- package/dist/command/command-migrate.js +103 -0
- package/dist/command/command-migrate.js.map +1 -0
- package/dist/command/command.js +18 -0
- package/dist/command/command.js.map +1 -0
- package/dist/command/snapshot-commander.js +84 -0
- package/dist/command/snapshot-commander.js.map +1 -0
- package/dist/components/anchor/anchor.js +105 -0
- package/dist/components/anchor/anchor.js.map +1 -0
- package/dist/components/anchor/ellipse-anchors.js +53 -0
- package/dist/components/anchor/ellipse-anchors.js.map +1 -0
- package/dist/components/anchor/rect-anchors.js +53 -0
- package/dist/components/anchor/rect-anchors.js.map +1 -0
- package/dist/components/audio.js +154 -0
- package/dist/components/audio.js.map +1 -0
- package/dist/components/cloud.js +44 -0
- package/dist/components/cloud.js.map +1 -0
- package/dist/components/component.js +1086 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/container-abstract.js +387 -0
- package/dist/components/container-abstract.js.map +1 -0
- package/dist/components/container.js +331 -0
- package/dist/components/container.js.map +1 -0
- package/dist/components/data/data-mapping.js +82 -0
- package/dist/components/data/data-mapping.js.map +1 -0
- package/dist/components/data/data.js +166 -0
- package/dist/components/data/data.js.map +1 -0
- package/dist/components/data/evaluator.js +103 -0
- package/dist/components/data/evaluator.js.map +1 -0
- package/dist/components/donut.js +104 -0
- package/dist/components/donut.js.map +1 -0
- package/dist/components/drawer/draw-image-pendable.js +20 -0
- package/dist/components/drawer/draw-image-pendable.js.map +1 -0
- package/dist/components/drawer/effect.js +19 -0
- package/dist/components/drawer/effect.js.map +1 -0
- package/dist/components/drawer/fill.js +228 -0
- package/dist/components/drawer/fill.js.map +1 -0
- package/dist/components/drawer/format.js +115 -0
- package/dist/components/drawer/format.js.map +1 -0
- package/dist/components/drawer/line.js +191 -0
- package/dist/components/drawer/line.js.map +1 -0
- package/dist/components/drawer/stroke.js +62 -0
- package/dist/components/drawer/stroke.js.map +1 -0
- package/dist/components/drawer/text-wrapper.js +51 -0
- package/dist/components/drawer/text-wrapper.js.map +1 -0
- package/dist/components/drawer/text.js +269 -0
- package/dist/components/drawer/text.js.map +1 -0
- package/dist/components/ellipse.js +110 -0
- package/dist/components/ellipse.js.map +1 -0
- package/dist/components/file/ondropfile.js +19 -0
- package/dist/components/file/ondropfile.js.map +1 -0
- package/dist/components/fit/fit.js +137 -0
- package/dist/components/fit/fit.js.map +1 -0
- package/dist/components/geometry/transcoord.js +339 -0
- package/dist/components/geometry/transcoord.js.map +1 -0
- package/dist/components/geometry/union.js +35 -0
- package/dist/components/geometry/union.js.map +1 -0
- package/dist/components/gif-view.js +128 -0
- package/dist/components/gif-view.js.map +1 -0
- package/dist/components/global-ref.js +154 -0
- package/dist/components/global-ref.js.map +1 -0
- package/dist/components/group.js +171 -0
- package/dist/components/group.js.map +1 -0
- package/dist/components/html/elements.js +24 -0
- package/dist/components/html/elements.js.map +1 -0
- package/dist/components/html/fill.js +126 -0
- package/dist/components/html/fill.js.map +1 -0
- package/dist/components/html/reposition.js +119 -0
- package/dist/components/html/reposition.js.map +1 -0
- package/dist/components/html/shadow.js +24 -0
- package/dist/components/html/shadow.js.map +1 -0
- package/dist/components/html-overlay-container.js +27 -0
- package/dist/components/html-overlay-container.js.map +1 -0
- package/dist/components/html-overlay-element.js +22 -0
- package/dist/components/html-overlay-element.js.map +1 -0
- package/dist/components/image-view.js +193 -0
- package/dist/components/image-view.js.map +1 -0
- package/dist/components/index.js +231 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/info-window.js +416 -0
- package/dist/components/info-window.js.map +1 -0
- package/dist/components/line.js +374 -0
- package/dist/components/line.js.map +1 -0
- package/dist/components/local-ref.js +114 -0
- package/dist/components/local-ref.js.map +1 -0
- package/dist/components/mixins/connectable.js +128 -0
- package/dist/components/mixins/connectable.js.map +1 -0
- package/dist/components/mixins/data-source.js +34 -0
- package/dist/components/mixins/data-source.js.map +1 -0
- package/dist/components/mixins/html-element.js +107 -0
- package/dist/components/mixins/html-element.js.map +1 -0
- package/dist/components/mixins/move-handle.js +73 -0
- package/dist/components/mixins/move-handle.js.map +1 -0
- package/dist/components/mixins/rect-path.js +113 -0
- package/dist/components/mixins/rect-path.js.map +1 -0
- package/dist/components/mixins/value-holder.js +81 -0
- package/dist/components/mixins/value-holder.js.map +1 -0
- package/dist/components/mutater/bounds.js +68 -0
- package/dist/components/mutater/bounds.js.map +1 -0
- package/dist/components/mutater/path.js +73 -0
- package/dist/components/mutater/path.js.map +1 -0
- package/dist/components/ortholine.js +763 -0
- package/dist/components/ortholine.js.map +1 -0
- package/dist/components/outline/ellipse-outline.js +23 -0
- package/dist/components/outline/ellipse-outline.js.map +1 -0
- package/dist/components/outline/path-outline.js +48 -0
- package/dist/components/outline/path-outline.js.map +1 -0
- package/dist/components/path.js +49 -0
- package/dist/components/path.js.map +1 -0
- package/dist/components/polygon.js +91 -0
- package/dist/components/polygon.js.map +1 -0
- package/dist/components/polyline.js +114 -0
- package/dist/components/polyline.js.map +1 -0
- package/dist/components/popup.js +160 -0
- package/dist/components/popup.js.map +1 -0
- package/dist/components/rect.js +72 -0
- package/dist/components/rect.js.map +1 -0
- package/dist/components/retention/retention-manager.js +81 -0
- package/dist/components/retention/retention-manager.js.map +1 -0
- package/dist/components/root-container.js +519 -0
- package/dist/components/root-container.js.map +1 -0
- package/dist/components/ruler.js +103 -0
- package/dist/components/ruler.js.map +1 -0
- package/dist/components/shape.js +97 -0
- package/dist/components/shape.js.map +1 -0
- package/dist/components/star.js +103 -0
- package/dist/components/star.js.map +1 -0
- package/dist/components/text/substitutor.js +92 -0
- package/dist/components/text/substitutor.js.map +1 -0
- package/dist/components/text.js +21 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/triangle.js +92 -0
- package/dist/components/triangle.js.map +1 -0
- package/dist/const.js +71 -0
- package/dist/const.js.map +1 -0
- package/dist/core/collection.js +28 -0
- package/dist/core/collection.js.map +1 -0
- package/dist/core/debug.js +12 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/deep-equals.js +112 -0
- package/dist/core/deep-equals.js.map +1 -0
- package/dist/core/dom-to-image.js +617 -0
- package/dist/core/dom-to-image.js.map +1 -0
- package/dist/core/event.js +205 -0
- package/dist/core/event.js.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/list.js +87 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/logger.js +29 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memoize.js +40 -0
- package/dist/core/memoize.js.map +1 -0
- package/dist/core/mixin.js +26 -0
- package/dist/core/mixin.js.map +1 -0
- package/dist/core/obj-accessor.js +26 -0
- package/dist/core/obj-accessor.js.map +1 -0
- package/dist/core/reference-map.js +147 -0
- package/dist/core/reference-map.js.map +1 -0
- package/dist/core/round-rect.js +62 -0
- package/dist/core/round-rect.js.map +1 -0
- package/dist/core/safe-round.js +10 -0
- package/dist/core/safe-round.js.map +1 -0
- package/dist/core/script-loader.js +148 -0
- package/dist/core/script-loader.js.map +1 -0
- package/dist/core/snapshot-taker.js +59 -0
- package/dist/core/snapshot-taker.js.map +1 -0
- package/dist/core/stack.js +18 -0
- package/dist/core/stack.js.map +1 -0
- package/dist/core/timecapsule.js +88 -0
- package/dist/core/timecapsule.js.map +1 -0
- package/dist/core/utils.js +309 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/decorator/anchors-decorator.js +53 -0
- package/dist/decorator/anchors-decorator.js.map +1 -0
- package/dist/decorator/bouncing-arrow-decorator.js +52 -0
- package/dist/decorator/bouncing-arrow-decorator.js.map +1 -0
- package/dist/decorator/data-spread-decorator.js +69 -0
- package/dist/decorator/data-spread-decorator.js.map +1 -0
- package/dist/decorator/decotag-decorator.js +33 -0
- package/dist/decorator/decotag-decorator.js.map +1 -0
- package/dist/decorator/index.js +31 -0
- package/dist/decorator/index.js.map +1 -0
- package/dist/decorator/link-decorator.js +66 -0
- package/dist/decorator/link-decorator.js.map +1 -0
- package/dist/effect/gradation.js +37 -0
- package/dist/effect/gradation.js.map +1 -0
- package/dist/effect/index.js +23 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/shadow.js +33 -0
- package/dist/effect/shadow.js.map +1 -0
- package/dist/effect/turn.js +25 -0
- package/dist/effect/turn.js.map +1 -0
- package/dist/event/event-engine.js +76 -0
- package/dist/event/event-engine.js.map +1 -0
- package/dist/event/event-pump.js +92 -0
- package/dist/event/event-pump.js.map +1 -0
- package/dist/event/event-tracker.js +97 -0
- package/dist/event/event-tracker.js.map +1 -0
- package/dist/event/index.js +21 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/ua-event-handler.js +453 -0
- package/dist/event/ua-event-handler.js.map +1 -0
- package/dist/event-map/animator-handler.js +225 -0
- package/dist/event-map/animator-handler.js.map +1 -0
- package/dist/event-map/animators/animated-icon.js +265 -0
- package/dist/event-map/animators/animated-icon.js.map +1 -0
- package/dist/event-map/animators/border-highlighting.js +476 -0
- package/dist/event-map/animators/border-highlighting.js.map +1 -0
- package/dist/event-map/animators/bouncing-arrow.js +226 -0
- package/dist/event-map/animators/bouncing-arrow.js.map +1 -0
- package/dist/event-map/event-map.js +36 -0
- package/dist/event-map/event-map.js.map +1 -0
- package/dist/event-map/index.js +20 -0
- package/dist/event-map/index.js.map +1 -0
- package/dist/event-map/move-handler.js +233 -0
- package/dist/event-map/move-handler.js.map +1 -0
- package/dist/event-map/paste-handler.js +176 -0
- package/dist/event-map/paste-handler.js.map +1 -0
- package/dist/event-map/shift-handler.js +55 -0
- package/dist/event-map/shift-handler.js.map +1 -0
- package/dist/event-map/text-editor-lite.js +276 -0
- package/dist/event-map/text-editor-lite.js.map +1 -0
- package/dist/event-map/zoom-handler.js +49 -0
- package/dist/event-map/zoom-handler.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/layer/action/emphasize.js +42 -0
- package/dist/layer/action/emphasize.js.map +1 -0
- package/dist/layer/action/popup.js +461 -0
- package/dist/layer/action/popup.js.map +1 -0
- package/dist/layer/action/pressed.js +31 -0
- package/dist/layer/action/pressed.js.map +1 -0
- package/dist/layer/add-layer.js +180 -0
- package/dist/layer/add-layer.js.map +1 -0
- package/dist/layer/decotag-layer.js +121 -0
- package/dist/layer/decotag-layer.js.map +1 -0
- package/dist/layer/guide-layer.js +292 -0
- package/dist/layer/guide-layer.js.map +1 -0
- package/dist/layer/index.js +70 -0
- package/dist/layer/index.js.map +1 -0
- package/dist/layer/layer.js +230 -0
- package/dist/layer/layer.js.map +1 -0
- package/dist/layer/minimap-layer.js +84 -0
- package/dist/layer/minimap-layer.js.map +1 -0
- package/dist/layer/model-layer.js +465 -0
- package/dist/layer/model-layer.js.map +1 -0
- package/dist/layer/modeler/anchor-handler.js +193 -0
- package/dist/layer/modeler/anchor-handler.js.map +1 -0
- package/dist/layer/modeler/control-handler.js +95 -0
- package/dist/layer/modeler/control-handler.js.map +1 -0
- package/dist/layer/modeler/focus-outline.js +41 -0
- package/dist/layer/modeler/focus-outline.js.map +1 -0
- package/dist/layer/modeler/group-outline.js +30 -0
- package/dist/layer/modeler/group-outline.js.map +1 -0
- package/dist/layer/modeler/index.js +56 -0
- package/dist/layer/modeler/index.js.map +1 -0
- package/dist/layer/modeler/path-handler.js +300 -0
- package/dist/layer/modeler/path-handler.js.map +1 -0
- package/dist/layer/modeler/resizer.js +333 -0
- package/dist/layer/modeler/resizer.js.map +1 -0
- package/dist/layer/modeler/rotator.js +134 -0
- package/dist/layer/modeler/rotator.js.map +1 -0
- package/dist/layer/modeling-layer.js +491 -0
- package/dist/layer/modeling-layer.js.map +1 -0
- package/dist/layer/reaction-layer.js +111 -0
- package/dist/layer/reaction-layer.js.map +1 -0
- package/dist/layer/scroll-layer.js +191 -0
- package/dist/layer/scroll-layer.js.map +1 -0
- package/dist/layer/selection/selected-finder.js +96 -0
- package/dist/layer/selection/selected-finder.js.map +1 -0
- package/dist/layer/selection-layer.js +373 -0
- package/dist/layer/selection-layer.js.map +1 -0
- package/dist/layer/shift-layer.js +83 -0
- package/dist/layer/shift-layer.js.map +1 -0
- package/dist/layout/absolute.js +30 -0
- package/dist/layout/absolute.js.map +1 -0
- package/dist/layout/card.js +52 -0
- package/dist/layout/card.js.map +1 -0
- package/dist/layout/html-absolute.js +32 -0
- package/dist/layout/html-absolute.js.map +1 -0
- package/dist/layout/index.js +56 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layout.js +36 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/layout/linear-horizontal.js +56 -0
- package/dist/layout/linear-horizontal.js.map +1 -0
- package/dist/layout/linear-vertical.js +56 -0
- package/dist/layout/linear-vertical.js.map +1 -0
- package/dist/layout/table.js +106 -0
- package/dist/layout/table.js.map +1 -0
- package/dist/license/license.js +170 -0
- package/dist/license/license.js.map +1 -0
- package/dist/model/compile.js +40 -0
- package/dist/model/compile.js.map +1 -0
- package/dist/model/duplicate.js +19 -0
- package/dist/model/duplicate.js.map +1 -0
- package/dist/model/index.js +34 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/selector.js +104 -0
- package/dist/model/selector.js.map +1 -0
- package/dist/style/compile.js +14 -0
- package/dist/style/compile.js.map +1 -0
- package/dist/style/index.js +14 -0
- package/dist/style/index.js.map +1 -0
- package/dist/things-scene/api/add-start.js +18 -0
- package/dist/things-scene/api/add-start.js.map +1 -0
- package/dist/things-scene/api/add.js +71 -0
- package/dist/things-scene/api/add.js.map +1 -0
- package/dist/things-scene/api/align.js +116 -0
- package/dist/things-scene/api/align.js.map +1 -0
- package/dist/things-scene/api/center-to.js +50 -0
- package/dist/things-scene/api/center-to.js.map +1 -0
- package/dist/things-scene/api/change.js +27 -0
- package/dist/things-scene/api/change.js.map +1 -0
- package/dist/things-scene/api/clipboard.js +45 -0
- package/dist/things-scene/api/clipboard.js.map +1 -0
- package/dist/things-scene/api/distribute.js +57 -0
- package/dist/things-scene/api/distribute.js.map +1 -0
- package/dist/things-scene/api/duplicate.js +47 -0
- package/dist/things-scene/api/duplicate.js.map +1 -0
- package/dist/things-scene/api/fullscreen.js +26 -0
- package/dist/things-scene/api/fullscreen.js.map +1 -0
- package/dist/things-scene/api/group.js +91 -0
- package/dist/things-scene/api/group.js.map +1 -0
- package/dist/things-scene/api/ids.js +28 -0
- package/dist/things-scene/api/ids.js.map +1 -0
- package/dist/things-scene/api/index.js +192 -0
- package/dist/things-scene/api/index.js.map +1 -0
- package/dist/things-scene/api/listener.js +69 -0
- package/dist/things-scene/api/listener.js.map +1 -0
- package/dist/things-scene/api/paste-start.js +27 -0
- package/dist/things-scene/api/paste-start.js.map +1 -0
- package/dist/things-scene/api/place.js +98 -0
- package/dist/things-scene/api/place.js.map +1 -0
- package/dist/things-scene/api/remove.js +57 -0
- package/dist/things-scene/api/remove.js.map +1 -0
- package/dist/things-scene/api/symmetry.js +47 -0
- package/dist/things-scene/api/symmetry.js.map +1 -0
- package/dist/things-scene/api/to-data-url.js +76 -0
- package/dist/things-scene/api/to-data-url.js.map +1 -0
- package/dist/things-scene/api/zorder.js +68 -0
- package/dist/things-scene/api/zorder.js.map +1 -0
- package/dist/things-scene/application-context.js +168 -0
- package/dist/things-scene/application-context.js.map +1 -0
- package/dist/things-scene/config.js +18 -0
- package/dist/things-scene/config.js.map +1 -0
- package/dist/things-scene/create.js +67 -0
- package/dist/things-scene/create.js.map +1 -0
- package/dist/things-scene/fps.js +26 -0
- package/dist/things-scene/fps.js.map +1 -0
- package/dist/things-scene/index.js +152 -0
- package/dist/things-scene/index.js.map +1 -0
- package/dist/things-scene/polyfill.js +111 -0
- package/dist/things-scene/polyfill.js.map +1 -0
- package/dist/things-scene/scene.js +442 -0
- package/dist/things-scene/scene.js.map +1 -0
- package/dist/things-scene/version.js +12 -0
- package/dist/things-scene/version.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _component = _interopRequireDefault(require("./component.js"));
|
|
8
|
+
var _shape = _interopRequireDefault(require("./shape.js"));
|
|
9
|
+
var _rectPath = _interopRequireDefault(require("./mixins/rect-path.js"));
|
|
10
|
+
var _const = require("../const.js");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
/*
|
|
13
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const NATURE = {
|
|
17
|
+
mutable: false,
|
|
18
|
+
resizable: true,
|
|
19
|
+
rotatable: true,
|
|
20
|
+
properties: [{
|
|
21
|
+
type: 'textarea',
|
|
22
|
+
label: 'front-side-template',
|
|
23
|
+
name: 'frontSideTemplate',
|
|
24
|
+
property: {
|
|
25
|
+
language: 'html'
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
type: 'textarea',
|
|
29
|
+
label: 'back-side-template',
|
|
30
|
+
name: 'backSideTemplate',
|
|
31
|
+
property: {
|
|
32
|
+
language: 'html'
|
|
33
|
+
}
|
|
34
|
+
}, {
|
|
35
|
+
type: 'textarea',
|
|
36
|
+
label: 'style',
|
|
37
|
+
name: 'style',
|
|
38
|
+
property: {
|
|
39
|
+
language: 'css'
|
|
40
|
+
}
|
|
41
|
+
}],
|
|
42
|
+
help: 'scene/component/info-window'
|
|
43
|
+
};
|
|
44
|
+
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==';
|
|
45
|
+
function buttonsTemplate(template, closable, flipable) {
|
|
46
|
+
var buttons = closable || flipable ? ['<div class="info-window-btns">', closable ? '<button class="closable">X</button>' : '', flipable ? '<button class="flipable">⇌</button>' : '', '</div>'] : [];
|
|
47
|
+
var content = ['<div class="info-window-content">', template, '</div>'];
|
|
48
|
+
return buttons.concat(content).join('');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// TODO 중복되기 어려운 클래스명으로 부모 클래스를 지정해준다.
|
|
52
|
+
const INFOWINDOW_STYLE = `
|
|
53
|
+
.flip {
|
|
54
|
+
backface-visibility: hidden;
|
|
55
|
+
border-radius: 7px;
|
|
56
|
+
height: auto;
|
|
57
|
+
font: normal 14px helvetica, arial, san serif;
|
|
58
|
+
position: absolute;
|
|
59
|
+
opacity: 0.9;
|
|
60
|
+
transform-origin: 50% 50% 0px;
|
|
61
|
+
transition: all 2s;
|
|
62
|
+
min-width: 100px;
|
|
63
|
+
min-height: 50px;
|
|
64
|
+
background-color: #3e424e;
|
|
65
|
+
box-shadow: 2px 3px 2px 0px rgba(0,0,0,0.15);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#side-1 {
|
|
69
|
+
transform: rotateY(0deg);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.flip:after {
|
|
73
|
+
content: "";
|
|
74
|
+
display: block;
|
|
75
|
+
position: absolute;
|
|
76
|
+
opacity: 0.9;
|
|
77
|
+
width: 0;
|
|
78
|
+
height: 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.flip.arrow-top:after {
|
|
82
|
+
left: 45%;
|
|
83
|
+
top: -17px;
|
|
84
|
+
border-left: 10px solid transparent;
|
|
85
|
+
border-bottom: 18px solid #323b44;
|
|
86
|
+
border-right: 10px solid transparent;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.flip.arrow-right:after {
|
|
90
|
+
left: 100%;
|
|
91
|
+
top: 48%;
|
|
92
|
+
border-top: 10px solid transparent;
|
|
93
|
+
border-left: 18px solid #323b44;
|
|
94
|
+
border-bottom: 10px solid transparent;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.flip.arrow-bottom:after {
|
|
98
|
+
left: 45%;
|
|
99
|
+
top: 100%;
|
|
100
|
+
border-left: 10px solid transparent;
|
|
101
|
+
border-top: 18px solid #323b44;
|
|
102
|
+
border-right: 10px solid transparent;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.flip.arrow-left:after {
|
|
106
|
+
right: 100%;
|
|
107
|
+
top: 48%;
|
|
108
|
+
border-top: 10px solid transparent;
|
|
109
|
+
border-right: 18px solid #323b44;
|
|
110
|
+
border-bottom: 10px solid transparent;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#side-2 {
|
|
114
|
+
transform: rotateY(180deg);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.flip-side-1 {
|
|
118
|
+
transform: rotateY(0deg) !important;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.flip-side-2 {
|
|
122
|
+
transform: rotateY(180deg) !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.info-window-btns {
|
|
126
|
+
position: absolute;
|
|
127
|
+
top: -18px;
|
|
128
|
+
right: 5px;
|
|
129
|
+
overflow: hidden;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.info-window-content {
|
|
133
|
+
padding: 10px;
|
|
134
|
+
color: #efefef;
|
|
135
|
+
font-size: 13px;
|
|
136
|
+
line-height: 1.4;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.info-window-btns button {
|
|
140
|
+
width: 40px;
|
|
141
|
+
height: 40px;
|
|
142
|
+
float: right;
|
|
143
|
+
border: 0;
|
|
144
|
+
border-radius: 50%;
|
|
145
|
+
background-color: #2a7da1;
|
|
146
|
+
margin-right: 3px;
|
|
147
|
+
text-align: center;
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
font-size: 35px;
|
|
150
|
+
color: #fff;
|
|
151
|
+
line-height: 0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.info-window-btns button:hover {
|
|
155
|
+
background-color: #60bb23;
|
|
156
|
+
}
|
|
157
|
+
`;
|
|
158
|
+
const ARROW_LENGTH = 20;
|
|
159
|
+
function toggleClassName(className, clazz) {
|
|
160
|
+
var classList = className.split(/\s+/);
|
|
161
|
+
var idx = classList.indexOf(clazz);
|
|
162
|
+
if (idx != -1) classList.splice(idx, 1);else classList.splice(-1, 0, clazz);
|
|
163
|
+
return classList.join(' ');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/*
|
|
167
|
+
* InfoWindow 선택된 컴포넌트와 관련해서 사용자 정의 정보 윈도우를 보여준다.
|
|
168
|
+
*
|
|
169
|
+
* Information Window를 통해서 보여준다.
|
|
170
|
+
*
|
|
171
|
+
* Information Window는 앞면과 뒷면의 정보를 가지고 있으며, Rotation될 수 있다.
|
|
172
|
+
*/
|
|
173
|
+
|
|
174
|
+
class InfoWindow extends (0, _rectPath.default)(_shape.default) {
|
|
175
|
+
static get image() {
|
|
176
|
+
if (!InfoWindow._image) {
|
|
177
|
+
InfoWindow._image = new Image();
|
|
178
|
+
InfoWindow._image.src = INFOWINDOW_IMAGE;
|
|
179
|
+
}
|
|
180
|
+
return InfoWindow._image;
|
|
181
|
+
}
|
|
182
|
+
static toggle(component, infoWindowId, autoClose, position) {
|
|
183
|
+
if (!infoWindowId) {
|
|
184
|
+
console.warn('InfoWindow not defined.');
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
var infowindowComponent = component.root.findById(infoWindowId);
|
|
188
|
+
if (!infowindowComponent) {
|
|
189
|
+
console.warn('InfoWindow Not Found.', infoWindowId);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (infowindowComponent._findInfoWindowByComponent(component)) {
|
|
193
|
+
InfoWindow.hide(component, infoWindowId);
|
|
194
|
+
} else {
|
|
195
|
+
InfoWindow.show(component, infoWindowId, autoClose, position);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
static hide(component, infoWindowId) {
|
|
199
|
+
if (!infoWindowId) return;
|
|
200
|
+
var infoWindowComponent = component.root.findById(infoWindowId);
|
|
201
|
+
if (!infoWindowComponent) {
|
|
202
|
+
console.warn('InfoWindow Not Found.', infoWindowId);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
infoWindowComponent._removeInfoWindow(component);
|
|
206
|
+
}
|
|
207
|
+
static show(component, infoWindowId, autoClose, position) {
|
|
208
|
+
if (!infoWindowId) {
|
|
209
|
+
console.warn('InfoWindow not defined.');
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// 1. InfoWindow 컴포넌트의 템플릿을 가져온다.
|
|
214
|
+
var infowindowComponent = component.root.findById(infoWindowId);
|
|
215
|
+
if (!infowindowComponent) {
|
|
216
|
+
console.warn('InfoWindow Not Found.', infoWindowId);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (infowindowComponent._findInfoWindowByComponent(component)) return;
|
|
220
|
+
var {
|
|
221
|
+
frontSideTemplate = '',
|
|
222
|
+
backSideTemplate = ''
|
|
223
|
+
} = infowindowComponent.model;
|
|
224
|
+
var templates = [frontSideTemplate, backSideTemplate].filter(side => String(side).trim());
|
|
225
|
+
templates = templates.map(template => _component.default.template(buttonsTemplate(template, !autoClose, templates.length == 2)));
|
|
226
|
+
if (templates.length == 0) return;
|
|
227
|
+
var style = INFOWINDOW_STYLE + infowindowComponent.get('style');
|
|
228
|
+
var {
|
|
229
|
+
left,
|
|
230
|
+
top
|
|
231
|
+
} = component.bounds;
|
|
232
|
+
var {
|
|
233
|
+
x,
|
|
234
|
+
y
|
|
235
|
+
} = position ? component.rootModel.transcoordC2S(position.x, position.y) : component.transcoordS2T(left, top);
|
|
236
|
+
left = x;
|
|
237
|
+
top = y;
|
|
238
|
+
|
|
239
|
+
// 2. 컴포넌트의 위치와 패딩 정보를 span에 반영한다.
|
|
240
|
+
var span = document.createElement('span');
|
|
241
|
+
span.style.position = 'absolute';
|
|
242
|
+
|
|
243
|
+
// 3. 스타일 엘리먼트를 생성한다.
|
|
244
|
+
var styleElement = document.createElement('style');
|
|
245
|
+
styleElement.type = 'text/css';
|
|
246
|
+
styleElement.appendChild(document.createTextNode(style));
|
|
247
|
+
span.appendChild(styleElement);
|
|
248
|
+
|
|
249
|
+
// 4. 양면 div 엘리먼트를 생성한다.
|
|
250
|
+
// TODO 템플릿이 한면만 등록된 경우에는 플립 기능과 플립 버튼을 제거한다.
|
|
251
|
+
// TODO 앞면과 뒷면의 크기를 동일하게 유지한다.(큰면을 기준으로 맞춘다.)
|
|
252
|
+
|
|
253
|
+
if (templates[0]) {
|
|
254
|
+
var div_front = document.createElement('div');
|
|
255
|
+
div_front.id = 'side-1';
|
|
256
|
+
div_front.className = 'flip';
|
|
257
|
+
div_front.style.display = 'inline-block';
|
|
258
|
+
div_front.innerHTML = templates[0](component);
|
|
259
|
+
}
|
|
260
|
+
if (templates[1]) {
|
|
261
|
+
var div_back = document.createElement('div');
|
|
262
|
+
div_back.id = 'side-2';
|
|
263
|
+
div_back.className = 'flip';
|
|
264
|
+
div_back.style.display = 'inline-block';
|
|
265
|
+
div_back.innerHTML = templates[1](component);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// 5. InfoWindow에서 발생하는 사용자 이벤트의 확산을 막는다.
|
|
269
|
+
_const.GESTURES.forEach(function (event) {
|
|
270
|
+
span.addEventListener(event, function (e) {
|
|
271
|
+
e.stopPropagation();
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
_const.KEYEVENTS.forEach(function (event) {
|
|
275
|
+
span.addEventListener(event, function (e) {
|
|
276
|
+
e.stopPropagation();
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// 6. InfoWindow를 도큐먼트에 추가한다.
|
|
281
|
+
var targetElement = component.root.model_layer.overlay;
|
|
282
|
+
if (div_front) span.appendChild(div_front);
|
|
283
|
+
if (div_back) span.appendChild(div_back);
|
|
284
|
+
targetElement.appendChild(span);
|
|
285
|
+
infowindowComponent._addInfoWindow(component, span, styleElement);
|
|
286
|
+
|
|
287
|
+
// TODO InfoWindow가 사라질때 이벤트리스너를 제거해주어야 한다.
|
|
288
|
+
if (div_front) {
|
|
289
|
+
let flipButton = div_front.querySelector('.info-window-btns > .flipable');
|
|
290
|
+
flipButton && flipButton.addEventListener('click', function (e) {
|
|
291
|
+
e.preventDefault();
|
|
292
|
+
div_back.className = toggleClassName(div_back.className, 'flip-side-1');
|
|
293
|
+
div_front.className = toggleClassName(div_front.className, 'flip-side-2');
|
|
294
|
+
}, false);
|
|
295
|
+
let closeButton = div_front.querySelector('.info-window-btns > .closable');
|
|
296
|
+
closeButton && closeButton.addEventListener('click', function (e) {
|
|
297
|
+
e.preventDefault();
|
|
298
|
+
InfoWindow.hide(component, infoWindowId);
|
|
299
|
+
}, false);
|
|
300
|
+
}
|
|
301
|
+
if (div_back) {
|
|
302
|
+
let flipButton = div_back.querySelector('.info-window-btns > .flipable');
|
|
303
|
+
flipButton && 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_back.querySelector('.info-window-btns > .closable');
|
|
309
|
+
closeButton && closeButton.addEventListener('click', function (e) {
|
|
310
|
+
e.preventDefault();
|
|
311
|
+
InfoWindow.hide(component, infoWindowId);
|
|
312
|
+
}, false);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// 7. 완성된 InfoWindow의 크기를 감안한 위치 조정
|
|
316
|
+
var infowindow_width = div_front.offsetWidth;
|
|
317
|
+
var infowindow_height = div_front.offsetHeight;
|
|
318
|
+
|
|
319
|
+
// browser의 폭과 높이.
|
|
320
|
+
var full_width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
|
|
321
|
+
var full_height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
|
|
322
|
+
|
|
323
|
+
// scene의 LEFT, TOP, RIGHT, BOTTOM
|
|
324
|
+
var scene_bound = component.rootModel.target.getBoundingClientRect();
|
|
325
|
+
var sides = [];
|
|
326
|
+
div_front && sides.push(div_front);
|
|
327
|
+
div_back && sides.push(div_back);
|
|
328
|
+
|
|
329
|
+
// 컴포넌트의 상하좌우 순으로 여백이 있는 공간에 InfoWindow를 배치한다.
|
|
330
|
+
// TODO 왼쪽 또는 오른쪽에 표현되는 경우에는, 위아래로 플립되도록 한다.
|
|
331
|
+
var point = {
|
|
332
|
+
x: left,
|
|
333
|
+
y: top
|
|
334
|
+
};
|
|
335
|
+
var endpoint = component.transcoordS2C(point.x, point.y);
|
|
336
|
+
if (endpoint.x + infowindow_width / 2 + scene_bound.left < scene_bound.right && endpoint.x - infowindow_width / 2 > scene_bound.left) {
|
|
337
|
+
if (infowindow_height + ARROW_LENGTH < endpoint.y) {
|
|
338
|
+
// TOP
|
|
339
|
+
span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
|
|
340
|
+
span.style.marginTop = point.y - infowindow_height - ARROW_LENGTH + 'px';
|
|
341
|
+
sides.forEach(side => side.className += ' arrow-bottom');
|
|
342
|
+
return;
|
|
343
|
+
} else {
|
|
344
|
+
endpoint = component.transcoordS2C(point.x, point.y + infowindow_height + ARROW_LENGTH);
|
|
345
|
+
if (scene_bound.bottom > endpoint.y + scene_bound.top) {
|
|
346
|
+
// BOTTOM
|
|
347
|
+
span.style.marginLeft = point.x - infowindow_width / 2 + 'px';
|
|
348
|
+
span.style.marginTop = point.y + ARROW_LENGTH + 'px';
|
|
349
|
+
sides.forEach(side => side.className += ' arrow-top');
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
endpoint = component.transcoordS2C(point.x, point.y);
|
|
355
|
+
if (endpoint.x - (infowindow_width + ARROW_LENGTH) > scene_bound.left) {
|
|
356
|
+
// LEFT
|
|
357
|
+
span.style.marginLeft = point.x - infowindow_width - ARROW_LENGTH + 'px';
|
|
358
|
+
span.style.marginTop = point.y - infowindow_height / 2 + 'px';
|
|
359
|
+
sides.forEach(side => side.className += ' arrow-right');
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
span.style.marginLeft = point.x + ARROW_LENGTH + 'px';
|
|
363
|
+
span.style.marginTop = point.y - infowindow_height / 2 + 'px';
|
|
364
|
+
sides.forEach(side => side.className += ' arrow-left');
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/* Members */
|
|
368
|
+
|
|
369
|
+
dispose() {
|
|
370
|
+
this.infoWindows.map(iw => iw.component).forEach(component => this._removeInfoWindow(component));
|
|
371
|
+
super.dispose();
|
|
372
|
+
}
|
|
373
|
+
get infoWindows() {
|
|
374
|
+
if (!this._windows) this._windows = [];
|
|
375
|
+
return this._windows;
|
|
376
|
+
}
|
|
377
|
+
_findInfoWindowByComponent(component) {
|
|
378
|
+
return this.infoWindows.find(iw => iw.component === component);
|
|
379
|
+
}
|
|
380
|
+
_addInfoWindow(component, window, styleElement) {
|
|
381
|
+
var iw = this._findInfoWindowByComponent(component);
|
|
382
|
+
if (iw) return;
|
|
383
|
+
this._windows.push({
|
|
384
|
+
component,
|
|
385
|
+
window,
|
|
386
|
+
styleElement
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
_removeInfoWindow(component) {
|
|
390
|
+
var iw = this._findInfoWindowByComponent(component);
|
|
391
|
+
if (!iw) return;
|
|
392
|
+
let infoWindowElement = iw.window;
|
|
393
|
+
infoWindowElement && infoWindowElement.parentNode.removeChild(infoWindowElement);
|
|
394
|
+
var idx = this.infoWindows.lastIndexOf(iw);
|
|
395
|
+
this.infoWindows.splice(idx, 1);
|
|
396
|
+
}
|
|
397
|
+
render(context) {
|
|
398
|
+
var {
|
|
399
|
+
left,
|
|
400
|
+
top,
|
|
401
|
+
width,
|
|
402
|
+
height
|
|
403
|
+
} = this.bounds;
|
|
404
|
+
context.beginPath();
|
|
405
|
+
this.drawImage(context, InfoWindow.image, left, top, width, height);
|
|
406
|
+
}
|
|
407
|
+
get hasTextProperty() {
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
get nature() {
|
|
411
|
+
return NATURE;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
exports.default = InfoWindow;
|
|
415
|
+
_component.default.register('info-window', InfoWindow);
|
|
416
|
+
//# sourceMappingURL=info-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info-window.js","names":["_component","_interopRequireDefault","require","_shape","_rectPath","_const","e","__esModule","default","NATURE","mutable","resizable","rotatable","properties","type","label","name","property","language","help","INFOWINDOW_IMAGE","buttonsTemplate","template","closable","flipable","buttons","content","concat","join","INFOWINDOW_STYLE","ARROW_LENGTH","toggleClassName","className","clazz","classList","split","idx","indexOf","splice","InfoWindow","RectPath","Shape","image","_image","Image","src","toggle","component","infoWindowId","autoClose","position","console","warn","infowindowComponent","root","findById","_findInfoWindowByComponent","hide","show","infoWindowComponent","_removeInfoWindow","frontSideTemplate","backSideTemplate","model","templates","filter","side","String","trim","map","Component","length","style","get","left","top","bounds","x","y","rootModel","transcoordC2S","transcoordS2T","span","document","createElement","styleElement","appendChild","createTextNode","div_front","id","display","innerHTML","div_back","GESTURES","forEach","event","addEventListener","stopPropagation","KEYEVENTS","targetElement","model_layer","overlay","_addInfoWindow","flipButton","querySelector","preventDefault","closeButton","infowindow_width","offsetWidth","infowindow_height","offsetHeight","full_width","window","innerWidth","documentElement","clientWidth","body","full_height","innerHeight","clientHeight","scene_bound","target","getBoundingClientRect","sides","push","point","endpoint","transcoordS2C","right","marginLeft","marginTop","bottom","dispose","infoWindows","iw","_windows","find","infoWindowElement","parentNode","removeChild","lastIndexOf","render","context","width","height","beginPath","drawImage","hasTextProperty","nature","exports","register"],"sources":["../../src/components/info-window.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from './component.js'\nimport Shape from './shape.js'\nimport RectPath from './mixins/rect-path.js'\n\nimport { GESTURES, KEYEVENTS } from '../const.js'\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\">X</button>' : '',\n flipable ? '<button class=\"flipable\">⇌</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 border-radius: 7px;\n height: auto;\n font: normal 14px helvetica, arial, san serif;\n position: absolute;\n opacity: 0.9;\n transform-origin: 50% 50% 0px;\n transition: all 2s;\n min-width: 100px;\n 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}\n\n.flip:after {\n content: \"\";\n display: block;\n position: absolute;\n opacity: 0.9;\n width: 0;\n height: 0;\n}\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\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\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\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}\n\n.flip-side-1 {\n transform: rotateY(0deg) !important;\n}\n\n.flip-side-2 {\n transform: rotateY(180deg) !important;\n}\n\n.info-window-btns {\n position: absolute;\n top: -18px;\n right: 5px;\n overflow: hidden;\n}\n\n.info-window-content {\n padding: 10px;\n color: #efefef;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.info-window-btns button {\n width: 40px;\n 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\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"],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAAiD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AARjD;AACA;AACA;;AAQA,MAAMG,MAAM,GAAG;EACbC,OAAO,EAAE,KAAK;EACdC,SAAS,EAAE,IAAI;EACfC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE,CACV;IACEC,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,qBAAqB;IAC5BC,IAAI,EAAE,mBAAmB;IACzBC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,EACD;IACEJ,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,oBAAoB;IAC3BC,IAAI,EAAE,kBAAkB;IACxBC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,EACD;IACEJ,IAAI,EAAE,UAAU;IAChBC,KAAK,EAAE,OAAO;IACdC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ;EACF,CAAC,CACF;EACDC,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,gBAAgB,GACpB,gqDAAgqD;AAElqD,SAASC,eAAeA,CAACC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAE;EACrD,IAAIC,OAAO,GACTF,QAAQ,IAAIC,QAAQ,GAChB,CACE,gCAAgC,EAChCD,QAAQ,GAAG,wCAAwC,GAAG,EAAE,EACxDC,QAAQ,GAAG,0CAA0C,GAAG,EAAE,EAC1D,QAAQ,CACT,GACD,EAAE;EAER,IAAIE,OAAO,GAAG,CAAC,mCAAmC,EAAEJ,QAAQ,EAAE,QAAQ,CAAC;EAEvE,OAAOG,OAAO,CAACE,MAAM,CAACD,OAAO,CAAC,CAACE,IAAI,CAAC,EAAE,CAAC;AACzC;;AAEA;AACA,MAAMC,gBAAgB,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,YAAY,GAAG,EAAE;AAEvB,SAASC,eAAeA,CAACC,SAAS,EAAEC,KAAK,EAAE;EACzC,IAAIC,SAAS,GAAGF,SAAS,CAACG,KAAK,CAAC,KAAK,CAAC;EACtC,IAAIC,GAAG,GAAGF,SAAS,CAACG,OAAO,CAACJ,KAAK,CAAC;EAClC,IAAIG,GAAG,IAAI,CAAC,CAAC,EAAEF,SAAS,CAACI,MAAM,CAACF,GAAG,EAAE,CAAC,CAAC,MAClCF,SAAS,CAACI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAEL,KAAK,CAAC;EAEnC,OAAOC,SAAS,CAACN,IAAI,CAAC,GAAG,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMW,UAAU,SAAS,IAAAC,iBAAQ,EAACC,cAAK,CAAC,CAAC;EACtD,WAAWC,KAAKA,CAAA,EAAG;IACjB,IAAI,CAACH,UAAU,CAACI,MAAM,EAAE;MACtBJ,UAAU,CAACI,MAAM,GAAG,IAAIC,KAAK,CAAC,CAAC;MAC/BL,UAAU,CAACI,MAAM,CAACE,GAAG,GAAGzB,gBAAgB;IAC1C;IAEA,OAAOmB,UAAU,CAACI,MAAM;EAC1B;EAEA,OAAOG,MAAMA,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS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","ignoreList":[]}
|