@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,491 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _commandChange = _interopRequireDefault(require("../command/command-change.js"));
|
|
8
|
+
var _commandMigrate = _interopRequireDefault(require("../command/command-migrate.js"));
|
|
9
|
+
var _component = _interopRequireDefault(require("../components/component.js"));
|
|
10
|
+
var Const = _interopRequireWildcard(require("../const.js"));
|
|
11
|
+
var _compile = _interopRequireDefault(require("../model/compile.js"));
|
|
12
|
+
var _layer = _interopRequireDefault(require("./layer.js"));
|
|
13
|
+
var Modeler = _interopRequireWildcard(require("./modeler/index.js"));
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
/*
|
|
18
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
class ModelingLayer extends _layer.default {
|
|
22
|
+
constructor(model, context) {
|
|
23
|
+
super(model, context);
|
|
24
|
+
this.pathHandler = new Modeler.PathHandler(this);
|
|
25
|
+
var ph = this.pathHandler;
|
|
26
|
+
var ch = new Modeler.ControlHandler(this);
|
|
27
|
+
var rs = new Modeler.Resizer(this);
|
|
28
|
+
var rt = new Modeler.Rotator(this);
|
|
29
|
+
this._modelers = [ph, ch, rs, rt];
|
|
30
|
+
this._control_mode_modelers = [ch, ph, rs, rt];
|
|
31
|
+
this.focusOutline = new Modeler.FocusOutline(this);
|
|
32
|
+
this.groupOutline = new Modeler.GroupOutline(this);
|
|
33
|
+
this.anchorHandler = new Modeler.AnchorHandler(this);
|
|
34
|
+
|
|
35
|
+
// 그릴 때는 contains 순서의 역순으로 그린다.
|
|
36
|
+
this._reversed_modelers = this._modelers.slice().reverse();
|
|
37
|
+
this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse();
|
|
38
|
+
this.hovered = null;
|
|
39
|
+
this.hoveredDest = null;
|
|
40
|
+
}
|
|
41
|
+
get modelers() {
|
|
42
|
+
return this._control_mode ? this._control_mode_modelers : this._modelers;
|
|
43
|
+
}
|
|
44
|
+
get reversedModelers() {
|
|
45
|
+
return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Lifecycle
|
|
49
|
+
ready() {
|
|
50
|
+
super.ready();
|
|
51
|
+
var rootModel = this.rootModel;
|
|
52
|
+
var translate = rootModel.get('translate');
|
|
53
|
+
var scale = rootModel.get('scale');
|
|
54
|
+
this.set('translate', translate);
|
|
55
|
+
this.set('scale', scale);
|
|
56
|
+
}
|
|
57
|
+
contains(x, y) {
|
|
58
|
+
var components = this.selected.filter(c => !!c.parent);
|
|
59
|
+
var scale = this.get('scale') || {
|
|
60
|
+
x: 1,
|
|
61
|
+
y: 1
|
|
62
|
+
};
|
|
63
|
+
if (this._state_dragging) {
|
|
64
|
+
if (this._counter_end) {
|
|
65
|
+
let point = this.anchorTarget.transcoordT2S(x, y);
|
|
66
|
+
if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
this.modelers.forEach(modeler => modeler.reset());
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* 부모가 있는 컴포넌트만을 그린다.
|
|
76
|
+
* (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
|
|
77
|
+
*/
|
|
78
|
+
var components = this.selected.filter(c => !!c.parent);
|
|
79
|
+
for (let i = 0; i < components.length; i++) {
|
|
80
|
+
let component = components[i];
|
|
81
|
+
let point = component.transcoordT2S(x, y);
|
|
82
|
+
for (let j = 0; j < this.modelers.length; j++) {
|
|
83
|
+
let modeler = this.modelers[j];
|
|
84
|
+
if (modeler.contains(point.x, point.y, component, scale)) {
|
|
85
|
+
this.currentModeler = modeler;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (this.anchorTarget) {
|
|
91
|
+
let point = this.anchorTarget.transcoordT2S(x, y);
|
|
92
|
+
if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
|
|
93
|
+
this.currentModeler = this.anchorHandler;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
this.anchorHandler.reset();
|
|
98
|
+
}
|
|
99
|
+
this.currentModeler = null;
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
_componentDrawer(context, component, scale, logic) {
|
|
103
|
+
let ancester = [];
|
|
104
|
+
let parent = component.parent;
|
|
105
|
+
if (component.isRootModel()) {
|
|
106
|
+
context.save();
|
|
107
|
+
logic(context, component, scale);
|
|
108
|
+
context.restore();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
while (parent && !parent.isRootModel()) {
|
|
112
|
+
ancester.push(parent);
|
|
113
|
+
parent = parent.parent;
|
|
114
|
+
}
|
|
115
|
+
context.save();
|
|
116
|
+
ancester.reverse().forEach(function (parent) {
|
|
117
|
+
// 원점으로 이동하여 회전.
|
|
118
|
+
let rotatePoint = parent.rotatePoint;
|
|
119
|
+
context.translate(rotatePoint.x, rotatePoint.y);
|
|
120
|
+
let parent_scale = parent.get('scale');
|
|
121
|
+
if (parent_scale) context.scale(parent_scale.x, parent_scale.y);
|
|
122
|
+
context.rotate(parent.get('rotation'));
|
|
123
|
+
context.translate(-rotatePoint.x, -rotatePoint.y);
|
|
124
|
+
let bounds = parent.bounds;
|
|
125
|
+
context.translate(bounds.left, bounds.top);
|
|
126
|
+
});
|
|
127
|
+
let rotatePoint = component.rotatePoint;
|
|
128
|
+
context.translate(rotatePoint.x, rotatePoint.y);
|
|
129
|
+
let component_scale = component.get('scale');
|
|
130
|
+
if (component_scale) context.scale(component_scale.x, component_scale.y);
|
|
131
|
+
context.rotate(component.get('rotation'));
|
|
132
|
+
context.translate(-rotatePoint.x, -rotatePoint.y);
|
|
133
|
+
logic(context, component, scale);
|
|
134
|
+
context.restore();
|
|
135
|
+
}
|
|
136
|
+
prerender(context) {
|
|
137
|
+
var {
|
|
138
|
+
translate,
|
|
139
|
+
scale = {
|
|
140
|
+
x: 1,
|
|
141
|
+
y: 1
|
|
142
|
+
},
|
|
143
|
+
rotation
|
|
144
|
+
} = this.model;
|
|
145
|
+
|
|
146
|
+
// Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.
|
|
147
|
+
context.save();
|
|
148
|
+
context.beginPath();
|
|
149
|
+
context.clearRect(0, 0, context.canvas.width, context.canvas.height);
|
|
150
|
+
context.rect(0, 0, context.canvas.width, context.canvas.height);
|
|
151
|
+
context.fillStyle = 'black';
|
|
152
|
+
context.globalAlpha = 0.5;
|
|
153
|
+
context.fill();
|
|
154
|
+
context.restore();
|
|
155
|
+
translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX);
|
|
156
|
+
context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX);
|
|
157
|
+
rotation && context.rotate(rotation);
|
|
158
|
+
context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'));
|
|
159
|
+
}
|
|
160
|
+
render(context) {
|
|
161
|
+
context.beginPath();
|
|
162
|
+
var scale = this.get('scale') || {
|
|
163
|
+
x: 1,
|
|
164
|
+
y: 1
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* 부모가 있는 컴포넌트만을 그린다.
|
|
169
|
+
* (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
|
|
170
|
+
*/
|
|
171
|
+
var selected = this.selected.filter(c => !!c.parent);
|
|
172
|
+
if (this.focused) {
|
|
173
|
+
this._componentDrawer(context, this.focused, scale, (context, component, scale) => {
|
|
174
|
+
this.focusOutline.draw(context, component, scale);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */
|
|
179
|
+
if (selected.length > 0 && selected[0].parent.isGroup()) {
|
|
180
|
+
let rootGroup = selected[0].parent;
|
|
181
|
+
while (rootGroup.parent.isGroup()) rootGroup = rootGroup.parent;
|
|
182
|
+
this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {
|
|
183
|
+
this.groupOutline.draw(context, component, scale);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
selected.forEach(component => {
|
|
187
|
+
this._componentDrawer(context, component, scale, (context, component, scale) => {
|
|
188
|
+
this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale));
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
this.anchorTarget && this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {
|
|
192
|
+
this.anchorHandler.draw(context, component, scale);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
get anchorTarget() {
|
|
196
|
+
if (this.currentModeler !== this.anchorHandler && this.currentModeler !== this.pathHandler && !this.hovered?.isLine()) {
|
|
197
|
+
this._anchorTarget = this.hovered;
|
|
198
|
+
}
|
|
199
|
+
return this._anchorTarget;
|
|
200
|
+
}
|
|
201
|
+
set anchorTarget(target) {
|
|
202
|
+
this._anchorTarget = target;
|
|
203
|
+
}
|
|
204
|
+
get hovered() {
|
|
205
|
+
return this._hovered;
|
|
206
|
+
}
|
|
207
|
+
set hovered(hovered) {
|
|
208
|
+
this._hovered = hovered;
|
|
209
|
+
this.invalidate();
|
|
210
|
+
}
|
|
211
|
+
startLinkProcess(linkFrom, linkModel, e) {
|
|
212
|
+
this.currentModeler = this.pathHandler;
|
|
213
|
+
this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e);
|
|
214
|
+
this.counterEnd = this.processingLink.fromEnd;
|
|
215
|
+
this.processingLink.trigger('tag');
|
|
216
|
+
}
|
|
217
|
+
set counterEnd(anchor) {
|
|
218
|
+
this.currentModeler = this.pathHandler;
|
|
219
|
+
this._counter_end = anchor;
|
|
220
|
+
}
|
|
221
|
+
get counterEnd() {
|
|
222
|
+
return this._counter_end;
|
|
223
|
+
}
|
|
224
|
+
endLinkProcess() {
|
|
225
|
+
this.processingLink?.trigger('tagreset');
|
|
226
|
+
this.processingLink = null;
|
|
227
|
+
this._counter_end = null;
|
|
228
|
+
}
|
|
229
|
+
get eventMap() {
|
|
230
|
+
return {
|
|
231
|
+
'model-layer': {
|
|
232
|
+
'(all)': {
|
|
233
|
+
change: this.onchange_model,
|
|
234
|
+
wheel: this.onwheel_scale,
|
|
235
|
+
drop: this.ondrop
|
|
236
|
+
},
|
|
237
|
+
'(descendant)': {
|
|
238
|
+
mouseenter: this.onmouseenter,
|
|
239
|
+
mouseleave: this.onmouseleave
|
|
240
|
+
},
|
|
241
|
+
'(self)': {
|
|
242
|
+
dblclick: this.ondblclick_model
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
'(root)': {
|
|
246
|
+
'(self)': {
|
|
247
|
+
selected: this.onselected,
|
|
248
|
+
keydown: this.onkeydown,
|
|
249
|
+
keyup: this.onkeyup
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
onmouseenter(e, hint) {
|
|
255
|
+
this.hovered = hint?.origin;
|
|
256
|
+
}
|
|
257
|
+
onmouseleave(e, hint) {
|
|
258
|
+
this.hovered = null;
|
|
259
|
+
}
|
|
260
|
+
onkeydown(e) {
|
|
261
|
+
if (e.key == 'Alt') {
|
|
262
|
+
this._control_mode = true;
|
|
263
|
+
this.invalidate();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
onkeyup(e) {
|
|
267
|
+
if (e.key == 'Alt') {
|
|
268
|
+
this._control_mode = false;
|
|
269
|
+
this.invalidate();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
onselected(after, before) {
|
|
273
|
+
this.invalidate();
|
|
274
|
+
}
|
|
275
|
+
onchange_model(after, before, hint) {
|
|
276
|
+
var {
|
|
277
|
+
origin,
|
|
278
|
+
deliverer
|
|
279
|
+
} = hint;
|
|
280
|
+
if (origin === deliverer) {
|
|
281
|
+
if (after.translate)
|
|
282
|
+
// Model Base 레이어와 동일한 translate를 유지하도록 한다.
|
|
283
|
+
this.set('translate', after.translate);
|
|
284
|
+
if (after.rotation !== undefined)
|
|
285
|
+
// Model Base 레이어와 동일한 rotation을 유지하도록 한다.
|
|
286
|
+
this.set('rotation', after.rotation);
|
|
287
|
+
if (after.scale)
|
|
288
|
+
// Model Base 레이어와 동일한 scale을 유지하도록 한다.
|
|
289
|
+
this.set('scale', after.scale);
|
|
290
|
+
}
|
|
291
|
+
// Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.
|
|
292
|
+
this.invalidate();
|
|
293
|
+
}
|
|
294
|
+
ondblclick_model(event, hint) {
|
|
295
|
+
const target = hint.origin;
|
|
296
|
+
target?.root.fit();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* default UI Event Handlers. */
|
|
300
|
+
|
|
301
|
+
ondblclick(e) {
|
|
302
|
+
if (typeof this.currentModeler.ondblclick === 'function') this.currentModeler.ondblclick(e);
|
|
303
|
+
this.invalidate();
|
|
304
|
+
}
|
|
305
|
+
onmousedown(e) {
|
|
306
|
+
this.currentModeler.onmousedown(e);
|
|
307
|
+
this.invalidate();
|
|
308
|
+
}
|
|
309
|
+
onmouseup(e) {
|
|
310
|
+
if (typeof this.currentModeler.onmouseup === 'function') this.currentModeler.onmouseup(e);
|
|
311
|
+
this.invalidate();
|
|
312
|
+
}
|
|
313
|
+
ondragstart(e) {
|
|
314
|
+
this.currentModeler.ondragstart(e);
|
|
315
|
+
this._state_dragging = true;
|
|
316
|
+
}
|
|
317
|
+
ondragmove(e) {
|
|
318
|
+
this.currentModeler.ondragmove(e);
|
|
319
|
+
this.invalidate();
|
|
320
|
+
}
|
|
321
|
+
ondragend(e) {
|
|
322
|
+
this._state_dragging = false;
|
|
323
|
+
this.currentModeler.ondragend(e);
|
|
324
|
+
this.invalidate();
|
|
325
|
+
}
|
|
326
|
+
ondrop(e, hint) {
|
|
327
|
+
/* 현재는 이미지 파일 만 추가할 수 있음 */
|
|
328
|
+
var {
|
|
329
|
+
origin
|
|
330
|
+
} = hint;
|
|
331
|
+
var transfered = e.dataTransfer.files;
|
|
332
|
+
if (transfered.length < 1) return;
|
|
333
|
+
let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY);
|
|
334
|
+
let rootModel = this.rootModel;
|
|
335
|
+
Promise.all(Array.from(transfered).map(file => {
|
|
336
|
+
return new Promise((resolve, reject) => {
|
|
337
|
+
let reader = new FileReader();
|
|
338
|
+
reader.addEventListener('loadend', e => {
|
|
339
|
+
resolve(reader.result);
|
|
340
|
+
});
|
|
341
|
+
['error', 'abort'].forEach(event => reader.addEventListener(event, e => {
|
|
342
|
+
reject(e);
|
|
343
|
+
}));
|
|
344
|
+
reader.readAsDataURL(file);
|
|
345
|
+
});
|
|
346
|
+
})).then(files => {
|
|
347
|
+
if (e.altKey) {
|
|
348
|
+
_commandChange.default.around(this.app.commander, () => {
|
|
349
|
+
origin.ondropfile(transfered, files);
|
|
350
|
+
});
|
|
351
|
+
this.selected = [origin];
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
let pendings = [];
|
|
355
|
+
let changes = files.map((file, idx) => {
|
|
356
|
+
let component;
|
|
357
|
+
let type = transfered[idx].type;
|
|
358
|
+
let name = transfered[idx].name;
|
|
359
|
+
if (type.startsWith('image/')) {
|
|
360
|
+
component = (0, _compile.default)({
|
|
361
|
+
type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',
|
|
362
|
+
top: 0,
|
|
363
|
+
left: 0,
|
|
364
|
+
width: 200,
|
|
365
|
+
height: 200,
|
|
366
|
+
src: file
|
|
367
|
+
}, rootModel.app);
|
|
368
|
+
pendings.push(new Promise((resolve, reject) => {
|
|
369
|
+
let image = new Image();
|
|
370
|
+
image.src = file;
|
|
371
|
+
image.onload = () => {
|
|
372
|
+
component.set({
|
|
373
|
+
width: image.width,
|
|
374
|
+
height: image.height
|
|
375
|
+
});
|
|
376
|
+
resolve();
|
|
377
|
+
};
|
|
378
|
+
image.onerror = e => {
|
|
379
|
+
reject(e);
|
|
380
|
+
};
|
|
381
|
+
}));
|
|
382
|
+
} else if (type.startsWith('audio/')) {
|
|
383
|
+
component = (0, _compile.default)({
|
|
384
|
+
type: 'audio',
|
|
385
|
+
top: 0,
|
|
386
|
+
left: 0,
|
|
387
|
+
width: 100,
|
|
388
|
+
height: 100,
|
|
389
|
+
src: file
|
|
390
|
+
}, rootModel.app);
|
|
391
|
+
} else if (type.startsWith('vnd.ms-excel/') || /\.xlsx?$/.test(name)) {
|
|
392
|
+
component = (0, _compile.default)({
|
|
393
|
+
type: 'excel',
|
|
394
|
+
top: 0,
|
|
395
|
+
left: 0,
|
|
396
|
+
width: 100,
|
|
397
|
+
height: 100,
|
|
398
|
+
src: file
|
|
399
|
+
}, rootModel.app);
|
|
400
|
+
} else {
|
|
401
|
+
console.log('droped file', transfered[idx]);
|
|
402
|
+
}
|
|
403
|
+
if (component) {
|
|
404
|
+
component.center = center;
|
|
405
|
+
center.x += 50;
|
|
406
|
+
center.y += 50;
|
|
407
|
+
}
|
|
408
|
+
return component;
|
|
409
|
+
}).filter(Boolean).map(component => {
|
|
410
|
+
return {
|
|
411
|
+
component: component,
|
|
412
|
+
to_container: rootModel
|
|
413
|
+
};
|
|
414
|
+
});
|
|
415
|
+
if (changes.length > 0) {
|
|
416
|
+
Promise.all(pendings).then(() => {
|
|
417
|
+
this.app.commander.execute(new _commandMigrate.default({
|
|
418
|
+
changes
|
|
419
|
+
}));
|
|
420
|
+
this.selected = changes.map(change => change.component);
|
|
421
|
+
}, reason => {
|
|
422
|
+
console.error(reason);
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
}, reason => {
|
|
426
|
+
console.error(reason);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
onwheel_scale(e, hint) {
|
|
430
|
+
/* shiftKey + wheel 은 deltaX 값을 변화시킨다. */
|
|
431
|
+
if (e.deltaY == 0 && e.deltaX == 0) return;
|
|
432
|
+
var model_layer = hint.deliverer;
|
|
433
|
+
if (e.shiftKey) {
|
|
434
|
+
// Shift: FontSize 변경
|
|
435
|
+
if (navigator.userAgent.indexOf('Win') != -1) {
|
|
436
|
+
var dir = e.deltaY < 0 ? 1 : -1;
|
|
437
|
+
} else {
|
|
438
|
+
var dir = e.deltaX < 0 ? 1 : -1;
|
|
439
|
+
}
|
|
440
|
+
if (e.altKey) {
|
|
441
|
+
_commandChange.default.around(this.app.commander, () => {
|
|
442
|
+
/* 선택된 컴포넌트의 letterSpacing 조절 */
|
|
443
|
+
model_layer.selected.forEach(component => {
|
|
444
|
+
let letterSpacing = component.get('letterSpacing') || Const.DEFAULT.LETTER_SPACING;
|
|
445
|
+
letterSpacing += dir; // direction에 따라 letterSpacing 증가/감소
|
|
446
|
+
component.set('letterSpacing', letterSpacing);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
} else {
|
|
450
|
+
_commandChange.default.around(this.app.commander, () => {
|
|
451
|
+
/* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */
|
|
452
|
+
model_layer.selected.forEach(component => {
|
|
453
|
+
let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE;
|
|
454
|
+
if (fontSize < 1) fontSize = 1;
|
|
455
|
+
fontSize += dir; // direction에 따라 fontSize 증가/감소
|
|
456
|
+
component.set('fontSize', fontSize);
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
} else {
|
|
461
|
+
var dir = e.deltaY < 0 ? 1 : -1;
|
|
462
|
+
let scale = model_layer.get('scale') || {
|
|
463
|
+
x: 1,
|
|
464
|
+
y: 1
|
|
465
|
+
};
|
|
466
|
+
let translate = model_layer.get('translate');
|
|
467
|
+
let x = e.offsetX;
|
|
468
|
+
let y = e.offsetY;
|
|
469
|
+
let p = model_layer.transcoordC2S(x, y);
|
|
470
|
+
let delta = dir * 0.1;
|
|
471
|
+
let newscale = {
|
|
472
|
+
x: scale.x + delta,
|
|
473
|
+
y: scale.y + delta
|
|
474
|
+
};
|
|
475
|
+
if (dir < 0 && scale.x < 0.2 || dir > 0 && scale.x > 10) return;
|
|
476
|
+
|
|
477
|
+
/* 휠을 밀면.. 확대 : zoom in */
|
|
478
|
+
/* 휠을 당기면.. 축소 : zoom out */
|
|
479
|
+
|
|
480
|
+
model_layer.set('scale', newscale);
|
|
481
|
+
let newp = model_layer.transcoordC2S(x, y);
|
|
482
|
+
model_layer.set('translate', {
|
|
483
|
+
x: translate.x + (newp.x - p.x) * newscale.x,
|
|
484
|
+
y: translate.y + (newp.y - p.y) * newscale.y
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
exports.default = ModelingLayer;
|
|
490
|
+
_component.default.register('modeling-layer', ModelingLayer);
|
|
491
|
+
//# sourceMappingURL=modeling-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modeling-layer.js","names":["_commandChange","_interopRequireDefault","require","_commandMigrate","_component","Const","_interopRequireWildcard","_compile","_layer","Modeler","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ModelingLayer","Layer","constructor","model","context","pathHandler","PathHandler","ph","ch","ControlHandler","rs","Resizer","rt","Rotator","_modelers","_control_mode_modelers","focusOutline","FocusOutline","groupOutline","GroupOutline","anchorHandler","AnchorHandler","_reversed_modelers","slice","reverse","_control_mode_reverse_modelers","hovered","hoveredDest","modelers","_control_mode","reversedModelers","ready","rootModel","translate","scale","contains","x","y","components","selected","filter","c","parent","_state_dragging","_counter_end","point","anchorTarget","transcoordT2S","forEach","modeler","reset","length","component","j","currentModeler","_componentDrawer","logic","ancester","isRootModel","save","restore","push","rotatePoint","parent_scale","rotate","bounds","left","top","component_scale","prerender","rotation","beginPath","clearRect","canvas","width","height","rect","fillStyle","globalAlpha","fill","DPPX","render","focused","draw","isGroup","rootGroup","isLine","_anchorTarget","target","_hovered","invalidate","startLinkProcess","linkFrom","linkModel","processingLink","counterEnd","fromEnd","trigger","anchor","endLinkProcess","eventMap","change","onchange_model","wheel","onwheel_scale","drop","ondrop","mouseenter","onmouseenter","mouseleave","onmouseleave","dblclick","ondblclick_model","onselected","keydown","onkeydown","keyup","onkeyup","hint","origin","key","after","before","deliverer","undefined","event","root","fit","ondblclick","onmousedown","onmouseup","ondragstart","ondragmove","ondragend","transfered","dataTransfer","files","center","transcoordC2S","offsetX","offsetY","Promise","all","Array","from","map","file","resolve","reject","reader","FileReader","addEventListener","result","readAsDataURL","then","altKey","CommandChange","around","app","commander","ondropfile","pendings","changes","idx","type","name","startsWith","compile","src","image","Image","onload","onerror","test","console","log","Boolean","to_container","execute","CommandMigrate","reason","error","deltaY","deltaX","model_layer","shiftKey","navigator","userAgent","indexOf","dir","letterSpacing","DEFAULT","LETTER_SPACING","fontSize","FONT_SIZE","p","delta","newscale","newp","exports","Component","register"],"sources":["../../src/layer/modeling-layer.js"],"sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport CommandChange from '../command/command-change.js'\nimport CommandMigrate from '../command/command-migrate.js'\nimport Component from '../components/component.js'\nimport * as Const from '../const.js'\nimport compile from '../model/compile.js'\nimport Layer from './layer.js'\nimport * as Modeler from './modeler/index.js'\n\nexport default class ModelingLayer extends Layer {\n constructor(model, context) {\n super(model, context)\n\n this.pathHandler = new Modeler.PathHandler(this)\n var ph = this.pathHandler\n var ch = new Modeler.ControlHandler(this)\n var rs = new Modeler.Resizer(this)\n var rt = new Modeler.Rotator(this)\n\n this._modelers = [ph, ch, rs, rt]\n this._control_mode_modelers = [ch, ph, rs, rt]\n\n this.focusOutline = new Modeler.FocusOutline(this)\n this.groupOutline = new Modeler.GroupOutline(this)\n this.anchorHandler = new Modeler.AnchorHandler(this)\n\n // 그릴 때는 contains 순서의 역순으로 그린다.\n this._reversed_modelers = this._modelers.slice().reverse()\n this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse()\n this.hovered = null\n this.hoveredDest = null\n }\n\n get modelers() {\n return this._control_mode ? this._control_mode_modelers : this._modelers\n }\n\n get reversedModelers() {\n return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers\n }\n\n // Lifecycle\n ready() {\n super.ready()\n var rootModel = this.rootModel\n\n var translate = rootModel.get('translate')\n var scale = rootModel.get('scale')\n\n this.set('translate', translate)\n this.set('scale', scale)\n }\n\n contains(x, y) {\n var components = this.selected.filter(c => !!c.parent)\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n if (this._state_dragging) {\n if (this._counter_end) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n return true\n }\n }\n\n return true\n }\n\n this.modelers.forEach(modeler => modeler.reset())\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var components = this.selected.filter(c => !!c.parent)\n\n for (let i = 0; i < components.length; i++) {\n let component = components[i]\n\n let point = component.transcoordT2S(x, y)\n\n for (let j = 0; j < this.modelers.length; j++) {\n let modeler = this.modelers[j]\n\n if (modeler.contains(point.x, point.y, component, scale)) {\n this.currentModeler = modeler\n return true\n }\n }\n }\n\n if (this.anchorTarget) {\n let point = this.anchorTarget.transcoordT2S(x, y)\n if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {\n this.currentModeler = this.anchorHandler\n return true\n }\n } else {\n this.anchorHandler.reset()\n }\n\n this.currentModeler = null\n return false\n }\n\n _componentDrawer(context, component, scale, logic) {\n let ancester = []\n let parent = component.parent\n\n if (component.isRootModel()) {\n context.save()\n logic(context, component, scale)\n context.restore()\n\n return\n }\n\n while (parent && !parent.isRootModel()) {\n ancester.push(parent)\n parent = parent.parent\n }\n\n context.save()\n\n ancester.reverse().forEach(function (parent) {\n // 원점으로 이동하여 회전.\n let rotatePoint = parent.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n let parent_scale = parent.get('scale')\n if (parent_scale) context.scale(parent_scale.x, parent_scale.y)\n\n context.rotate(parent.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n let bounds = parent.bounds\n context.translate(bounds.left, bounds.top)\n })\n\n let rotatePoint = component.rotatePoint\n context.translate(rotatePoint.x, rotatePoint.y)\n\n let component_scale = component.get('scale')\n if (component_scale) context.scale(component_scale.x, component_scale.y)\n\n context.rotate(component.get('rotation'))\n context.translate(-rotatePoint.x, -rotatePoint.y)\n\n logic(context, component, scale)\n\n context.restore()\n }\n\n prerender(context) {\n var { translate, scale = { x: 1, y: 1 }, rotation } = this.model\n\n // Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.\n context.save()\n context.beginPath()\n\n context.clearRect(0, 0, context.canvas.width, context.canvas.height)\n context.rect(0, 0, context.canvas.width, context.canvas.height)\n\n context.fillStyle = 'black'\n context.globalAlpha = 0.5\n context.fill()\n\n context.restore()\n\n translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX)\n context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX)\n rotation && context.rotate(rotation)\n\n context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'))\n }\n\n render(context) {\n context.beginPath()\n\n var scale = this.get('scale') || { x: 1, y: 1 }\n\n /*\n * 부모가 있는 컴포넌트만을 그린다.\n * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)\n */\n var selected = this.selected.filter(c => !!c.parent)\n\n if (this.focused) {\n this._componentDrawer(context, this.focused, scale, (context, component, scale) => {\n this.focusOutline.draw(context, component, scale)\n })\n }\n\n /* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */\n if (selected.length > 0 && selected[0].parent.isGroup()) {\n let rootGroup = selected[0].parent\n while (rootGroup.parent.isGroup()) rootGroup = rootGroup.parent\n\n this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {\n this.groupOutline.draw(context, component, scale)\n })\n }\n\n selected.forEach(component => {\n this._componentDrawer(context, component, scale, (context, component, scale) => {\n this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale))\n })\n })\n\n this.anchorTarget &&\n this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {\n this.anchorHandler.draw(context, component, scale)\n })\n }\n\n get anchorTarget() {\n if (\n this.currentModeler !== this.anchorHandler &&\n this.currentModeler !== this.pathHandler &&\n !this.hovered?.isLine()\n ) {\n this._anchorTarget = this.hovered\n }\n\n return this._anchorTarget\n }\n\n set anchorTarget(target) {\n this._anchorTarget = target\n }\n\n get hovered() {\n return this._hovered\n }\n\n set hovered(hovered) {\n this._hovered = hovered\n\n this.invalidate()\n }\n\n startLinkProcess(linkFrom, linkModel, e) {\n this.currentModeler = this.pathHandler\n this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e)\n this.counterEnd = this.processingLink.fromEnd\n this.processingLink.trigger('tag')\n }\n\n set counterEnd(anchor) {\n this.currentModeler = this.pathHandler\n this._counter_end = anchor\n }\n\n get counterEnd() {\n return this._counter_end\n }\n\n endLinkProcess() {\n this.processingLink?.trigger('tagreset')\n this.processingLink = null\n this._counter_end = null\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(all)': {\n change: this.onchange_model,\n wheel: this.onwheel_scale,\n drop: this.ondrop\n },\n '(descendant)': {\n mouseenter: this.onmouseenter,\n mouseleave: this.onmouseleave\n },\n '(self)': {\n dblclick: this.ondblclick_model\n }\n },\n '(root)': {\n '(self)': {\n selected: this.onselected,\n keydown: this.onkeydown,\n keyup: this.onkeyup\n }\n }\n }\n }\n\n onmouseenter(e, hint) {\n this.hovered = hint?.origin\n }\n\n onmouseleave(e, hint) {\n this.hovered = null\n }\n\n onkeydown(e) {\n if (e.key == 'Alt') {\n this._control_mode = true\n this.invalidate()\n }\n }\n\n onkeyup(e) {\n if (e.key == 'Alt') {\n this._control_mode = false\n this.invalidate()\n }\n }\n\n onselected(after, before) {\n this.invalidate()\n }\n\n onchange_model(after, before, hint) {\n var { origin, deliverer } = hint\n\n if (origin === deliverer) {\n if (after.translate)\n // Model Base 레이어와 동일한 translate를 유지하도록 한다.\n this.set('translate', after.translate)\n\n if (after.rotation !== undefined)\n // Model Base 레이어와 동일한 rotation을 유지하도록 한다.\n this.set('rotation', after.rotation)\n\n if (after.scale)\n // Model Base 레이어와 동일한 scale을 유지하도록 한다.\n this.set('scale', after.scale)\n }\n // Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.\n this.invalidate()\n }\n\n ondblclick_model(event, hint) {\n const target = hint.origin\n\n target?.root.fit()\n }\n\n /* default UI Event Handlers. */\n\n ondblclick(e) {\n if (typeof this.currentModeler.ondblclick === 'function') this.currentModeler.ondblclick(e)\n\n this.invalidate()\n }\n\n onmousedown(e) {\n this.currentModeler.onmousedown(e)\n\n this.invalidate()\n }\n\n onmouseup(e) {\n if (typeof this.currentModeler.onmouseup === 'function') this.currentModeler.onmouseup(e)\n\n this.invalidate()\n }\n\n ondragstart(e) {\n this.currentModeler.ondragstart(e)\n this._state_dragging = true\n }\n\n ondragmove(e) {\n this.currentModeler.ondragmove(e)\n\n this.invalidate()\n }\n\n ondragend(e) {\n this._state_dragging = false\n this.currentModeler.ondragend(e)\n\n this.invalidate()\n }\n\n ondrop(e, hint) {\n /* 현재는 이미지 파일 만 추가할 수 있음 */\n var { origin } = hint\n var transfered = e.dataTransfer.files\n\n if (transfered.length < 1) return\n\n let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY)\n let rootModel = this.rootModel\n\n Promise.all(\n Array.from(transfered).map(file => {\n return new Promise((resolve, reject) => {\n let reader = new FileReader()\n\n reader.addEventListener('loadend', e => {\n resolve(reader.result)\n })\n ;['error', 'abort'].forEach(event =>\n reader.addEventListener(event, e => {\n reject(e)\n })\n )\n\n reader.readAsDataURL(file)\n })\n })\n ).then(\n files => {\n if (e.altKey) {\n CommandChange.around(this.app.commander, () => {\n origin.ondropfile(transfered, files)\n })\n\n this.selected = [origin]\n return\n }\n\n let pendings = []\n\n let changes = files\n .map((file, idx) => {\n let component\n let type = transfered[idx].type\n let name = transfered[idx].name\n\n if (type.startsWith('image/')) {\n component = compile(\n {\n type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',\n top: 0,\n left: 0,\n width: 200,\n height: 200,\n src: file\n },\n rootModel.app\n )\n\n pendings.push(\n new Promise((resolve, reject) => {\n let image = new Image()\n image.src = file\n\n image.onload = () => {\n component.set({\n width: image.width,\n height: image.height\n })\n\n resolve()\n }\n\n image.onerror = e => {\n reject(e)\n }\n })\n )\n } else if (type.startsWith('audio/')) {\n component = compile(\n {\n type: 'audio',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else if (type.startsWith('vnd.ms-excel/') || /\\.xlsx?$/.test(name)) {\n component = compile(\n {\n type: 'excel',\n top: 0,\n left: 0,\n width: 100,\n height: 100,\n src: file\n },\n rootModel.app\n )\n } else {\n console.log('droped file', transfered[idx])\n }\n\n if (component) {\n component.center = center\n center.x += 50\n center.y += 50\n }\n\n return component\n })\n .filter(Boolean)\n .map(component => {\n return {\n component: component,\n to_container: rootModel\n }\n })\n\n if (changes.length > 0) {\n Promise.all(pendings).then(\n () => {\n this.app.commander.execute(new CommandMigrate({ changes }))\n this.selected = changes.map(change => change.component)\n },\n reason => {\n console.error(reason)\n }\n )\n }\n },\n reason => {\n console.error(reason)\n }\n )\n }\n\n onwheel_scale(e, hint) {\n /* shiftKey + wheel 은 deltaX 값을 변화시킨다. */\n if (e.deltaY == 0 && e.deltaX == 0) return\n\n var model_layer = hint.deliverer\n\n if (e.shiftKey) {\n // Shift: FontSize 변경\n if (navigator.userAgent.indexOf('Win') != -1) {\n var dir = e.deltaY < 0 ? 1 : -1\n } else {\n var dir = e.deltaX < 0 ? 1 : -1\n }\n\n if (e.altKey) {\n CommandChange.around(this.app.commander, () => {\n /* 선택된 컴포넌트의 letterSpacing 조절 */\n model_layer.selected.forEach(component => {\n let letterSpacing = component.get('letterSpacing') || Const.DEFAULT.LETTER_SPACING\n\n letterSpacing += dir // direction에 따라 letterSpacing 증가/감소\n component.set('letterSpacing', letterSpacing)\n })\n })\n } else {\n CommandChange.around(this.app.commander, () => {\n /* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */\n model_layer.selected.forEach(component => {\n let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE\n\n if (fontSize < 1) fontSize = 1\n\n fontSize += dir // direction에 따라 fontSize 증가/감소\n component.set('fontSize', fontSize)\n })\n })\n }\n } else {\n var dir = e.deltaY < 0 ? 1 : -1\n\n let scale = model_layer.get('scale') || { x: 1, y: 1 }\n let translate = model_layer.get('translate')\n let x = e.offsetX\n let y = e.offsetY\n\n let p = model_layer.transcoordC2S(x, y)\n let delta = dir * 0.1\n\n let newscale = {\n x: scale.x + delta,\n y: scale.y + delta\n }\n\n if ((dir < 0 && scale.x < 0.2) || (dir > 0 && scale.x > 10)) return\n\n /* 휠을 밀면.. 확대 : zoom in */\n /* 휠을 당기면.. 축소 : zoom out */\n\n model_layer.set('scale', newscale)\n\n let newp = model_layer.transcoordC2S(x, y)\n\n model_layer.set('translate', {\n x: translate.x + (newp.x - p.x) * newscale.x,\n y: translate.y + (newp.y - p.y) * newscale.y\n })\n }\n }\n}\n\nComponent.register('modeling-layer', ModelingLayer)\n"],"mappings":"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","ignoreList":[]}
|