@hatiolab/things-scene 9.0.0-beta.9 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -11
- package/package.json +30 -14
- package/things-scene-min.js +74 -2
- package/things-scene-min.js.map +1 -0
- package/things-scene.d.ts +49 -7
- package/things-scene.mjs +61 -31
- package/things-scene.mjs.map +1 -0
- package/.prettierrc +0 -21
- package/assets/icon-audio.png +0 -0
- package/assets/icon-gif-viewer.png +0 -0
- package/assets/images/spinner.png +0 -0
- package/babel.config.js +0 -22
- package/db.sqlite +0 -0
- package/dist/animation/animate.d.ts +0 -4
- package/dist/animation/animations/animation.d.ts +0 -14
- package/dist/animation/animations/fade.d.ts +0 -4
- package/dist/animation/animations/heartbeat.d.ts +0 -4
- package/dist/animation/animations/moving.d.ts +0 -4
- package/dist/animation/animations/outline.d.ts +0 -10
- package/dist/animation/animations/rotation.d.ts +0 -4
- package/dist/animation/animations/vibration.d.ts +0 -4
- package/dist/animation/compile.d.ts +0 -1
- package/dist/animation/delta.d.ts +0 -19
- package/dist/animation/index.d.ts +0 -1
- package/dist/command/command-change.d.ts +0 -7
- package/dist/command/command-migrate.d.ts +0 -4
- package/dist/command/command-migrate.js +0 -85
- package/dist/command/command-migrate.js.map +0 -1
- package/dist/command/command.d.ts +0 -5
- package/dist/command/snapshot-commander.d.ts +0 -15
- package/dist/components/anchor/anchor.d.ts +0 -128
- package/dist/components/anchor/ellipse-anchors.d.ts +0 -2
- package/dist/components/anchor/ellipse-anchors.js +0 -38
- package/dist/components/anchor/ellipse-anchors.js.map +0 -1
- package/dist/components/anchor/rect-anchors.d.ts +0 -10
- package/dist/components/audio.d.ts +0 -25
- package/dist/components/audio.js +0 -141
- package/dist/components/audio.js.map +0 -1
- package/dist/components/cloud.d.ts +0 -13
- package/dist/components/cloud.js +0 -31
- package/dist/components/cloud.js.map +0 -1
- package/dist/components/component.d.ts +0 -227
- package/dist/components/component.js +0 -912
- package/dist/components/component.js.map +0 -1
- package/dist/components/container-abstract.d.ts +0 -51
- package/dist/components/container-abstract.js +0 -372
- package/dist/components/container-abstract.js.map +0 -1
- package/dist/components/container.d.ts +0 -38
- package/dist/components/container.js +0 -75
- package/dist/components/container.js.map +0 -1
- package/dist/components/data/data-mapping.d.ts +0 -16
- package/dist/components/data/data.d.ts +0 -8
- package/dist/components/data/evaluator.d.ts +0 -1
- package/dist/components/donut.d.ts +0 -15
- package/dist/components/donut.js +0 -74
- package/dist/components/donut.js.map +0 -1
- package/dist/components/drawer/draw-image-pendable.d.ts +0 -1
- package/dist/components/drawer/effect.d.ts +0 -1
- package/dist/components/drawer/fill.d.ts +0 -14
- package/dist/components/drawer/format.d.ts +0 -1
- package/dist/components/drawer/line.d.ts +0 -3
- package/dist/components/drawer/stroke.d.ts +0 -1
- package/dist/components/drawer/text-wrapper.d.ts +0 -10
- package/dist/components/drawer/text.d.ts +0 -3
- package/dist/components/ellipse.d.ts +0 -35
- package/dist/components/ellipse.js +0 -99
- package/dist/components/ellipse.js.map +0 -1
- package/dist/components/file/ondropfile.d.ts +0 -1
- package/dist/components/fit/fit.d.ts +0 -15
- package/dist/components/geometry/transcoord.d.ts +0 -41
- package/dist/components/geometry/union.d.ts +0 -6
- package/dist/components/gif-view.d.ts +0 -18
- package/dist/components/gif-view.js +0 -116
- package/dist/components/gif-view.js.map +0 -1
- package/dist/components/global-ref.d.ts +0 -36
- package/dist/components/global-ref.js +0 -128
- package/dist/components/global-ref.js.map +0 -1
- package/dist/components/group.d.ts +0 -15
- package/dist/components/group.js +0 -145
- package/dist/components/group.js.map +0 -1
- package/dist/components/html/elements.d.ts +0 -2
- package/dist/components/html/fill.d.ts +0 -1
- package/dist/components/html/reposition.d.ts +0 -1
- package/dist/components/html/shadow.d.ts +0 -1
- package/dist/components/html-overlay-container.d.ts +0 -27
- package/dist/components/html-overlay-container.js +0 -14
- package/dist/components/html-overlay-container.js.map +0 -1
- package/dist/components/html-overlay-element.d.ts +0 -25
- package/dist/components/html-overlay-element.js +0 -9
- package/dist/components/html-overlay-element.js.map +0 -1
- package/dist/components/image-view.d.ts +0 -19
- package/dist/components/image-view.js +0 -180
- package/dist/components/image-view.js.map +0 -1
- package/dist/components/index.d.ts +0 -32
- package/dist/components/index.js +0 -39
- package/dist/components/index.js.map +0 -1
- package/dist/components/info-window.d.ts +0 -41
- package/dist/components/info-window.js +0 -425
- package/dist/components/info-window.js.map +0 -1
- package/dist/components/line.d.ts +0 -91
- package/dist/components/line.js +0 -303
- package/dist/components/line.js.map +0 -1
- package/dist/components/local-ref.d.ts +0 -47
- package/dist/components/local-ref.js +0 -103
- package/dist/components/local-ref.js.map +0 -1
- package/dist/components/mixins/connectable.d.ts +0 -45
- package/dist/components/mixins/data-source.d.ts +0 -9
- package/dist/components/mixins/html-element.d.ts +0 -24
- package/dist/components/mixins/move-handle.d.ts +0 -11
- package/dist/components/mixins/rect-path.d.ts +0 -13
- package/dist/components/mixins/value-holder.d.ts +0 -18
- package/dist/components/mutater/bounds.d.ts +0 -10
- package/dist/components/mutater/path.d.ts +0 -5
- package/dist/components/ortholine.d.ts +0 -21
- package/dist/components/ortholine.js +0 -814
- package/dist/components/ortholine.js.map +0 -1
- package/dist/components/outline/ellipse-outline.d.ts +0 -4
- package/dist/components/outline/ellipse-outline.js +0 -11
- package/dist/components/outline/ellipse-outline.js.map +0 -1
- package/dist/components/outline/path-outline.d.ts +0 -1
- package/dist/components/path.d.ts +0 -5
- package/dist/components/path.js +0 -40
- package/dist/components/path.js.map +0 -1
- package/dist/components/polygon.d.ts +0 -40
- package/dist/components/polygon.js +0 -157
- package/dist/components/polygon.js.map +0 -1
- package/dist/components/polyline.d.ts +0 -18
- package/dist/components/polyline.js +0 -102
- package/dist/components/polyline.js.map +0 -1
- package/dist/components/popup.d.ts +0 -48
- package/dist/components/popup.js +0 -138
- package/dist/components/popup.js.map +0 -1
- package/dist/components/rect.d.ts +0 -26
- package/dist/components/rect.js +0 -91
- package/dist/components/rect.js.map +0 -1
- package/dist/components/retention/retention-manager.d.ts +0 -8
- package/dist/components/root-container.d.ts +0 -90
- package/dist/components/root-container.js +0 -478
- package/dist/components/root-container.js.map +0 -1
- package/dist/components/ruler.d.ts +0 -16
- package/dist/components/ruler.js +0 -77
- package/dist/components/ruler.js.map +0 -1
- package/dist/components/shape.d.ts +0 -25
- package/dist/components/shape.js +0 -80
- package/dist/components/shape.js.map +0 -1
- package/dist/components/star.d.ts +0 -13
- package/dist/components/star.js +0 -80
- package/dist/components/star.js.map +0 -1
- package/dist/components/text/substitutor.d.ts +0 -3
- package/dist/components/text.d.ts +0 -8
- package/dist/components/text.js +0 -15
- package/dist/components/text.js.map +0 -1
- package/dist/components/three-container.d.ts +0 -60
- package/dist/components/three-container.js +0 -515
- package/dist/components/three-container.js.map +0 -1
- package/dist/components/triangle.d.ts +0 -15
- package/dist/components/triangle.js +0 -76
- package/dist/components/triangle.js.map +0 -1
- package/dist/const.d.ts +0 -39
- package/dist/core/collection.d.ts +0 -8
- package/dist/core/debug.d.ts +0 -1
- package/dist/core/deep-equals.d.ts +0 -1
- package/dist/core/dom-to-image.d.ts +0 -127
- package/dist/core/event.d.ts +0 -92
- package/dist/core/index.d.ts +0 -2
- package/dist/core/list.d.ts +0 -32
- package/dist/core/logger.d.ts +0 -3
- package/dist/core/memoize.d.ts +0 -6
- package/dist/core/mixin.d.ts +0 -1
- package/dist/core/obj-accessor.d.ts +0 -1
- package/dist/core/reference-map.d.ts +0 -14
- package/dist/core/round-rect.d.ts +0 -19
- package/dist/core/script-loader.d.ts +0 -3
- package/dist/core/snapshot-taker.d.ts +0 -12
- package/dist/core/stack.d.ts +0 -2
- package/dist/core/timecapsule.d.ts +0 -18
- package/dist/core/utils.d.ts +0 -9
- package/dist/decorator/anchors-decorator.d.ts +0 -31
- package/dist/decorator/data-spread-decorator.d.ts +0 -1
- package/dist/decorator/decotag-decorator.d.ts +0 -1
- package/dist/decorator/index.d.ts +0 -2
- package/dist/decorator/link-decorator.d.ts +0 -1
- package/dist/effect/gradation.d.ts +0 -1
- package/dist/effect/index.d.ts +0 -1
- package/dist/effect/shadow.d.ts +0 -2
- package/dist/effect/turn.d.ts +0 -1
- package/dist/event/event-engine.d.ts +0 -12
- package/dist/event/event-pump.d.ts +0 -11
- package/dist/event/event-tracker.d.ts +0 -21
- package/dist/event/index.d.ts +0 -2
- package/dist/event/ua-event-handler.d.ts +0 -32
- package/dist/event-map/event-map.d.ts +0 -9
- package/dist/event-map/index.d.ts +0 -1
- package/dist/event-map/move-handler.d.ts +0 -1
- package/dist/event-map/text-editor-lite.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/layer/action/emphasize.d.ts +0 -2
- package/dist/layer/action/popup.d.ts +0 -5
- package/dist/layer/action/pressed.d.ts +0 -2
- package/dist/layer/add-layer.d.ts +0 -42
- package/dist/layer/add-layer.js +0 -142
- package/dist/layer/add-layer.js.map +0 -1
- package/dist/layer/decotag-layer.d.ts +0 -27
- package/dist/layer/decotag-layer.js +0 -105
- package/dist/layer/decotag-layer.js.map +0 -1
- package/dist/layer/guide-layer.d.ts +0 -44
- package/dist/layer/guide-layer.js +0 -261
- package/dist/layer/guide-layer.js.map +0 -1
- package/dist/layer/index.d.ts +0 -7
- package/dist/layer/index.js +0 -11
- package/dist/layer/index.js.map +0 -1
- package/dist/layer/layer.d.ts +0 -32
- package/dist/layer/layer.js +0 -155
- package/dist/layer/layer.js.map +0 -1
- package/dist/layer/model-layer.d.ts +0 -46
- package/dist/layer/model-layer.js +0 -402
- package/dist/layer/model-layer.js.map +0 -1
- package/dist/layer/modeler/anchor-handler.d.ts +0 -36
- package/dist/layer/modeler/control-handler.d.ts +0 -18
- package/dist/layer/modeler/focus-outline.d.ts +0 -5
- package/dist/layer/modeler/group-outline.d.ts +0 -5
- package/dist/layer/modeler/index.d.ts +0 -7
- package/dist/layer/modeler/path-handler.d.ts +0 -22
- package/dist/layer/modeler/resizer.d.ts +0 -13
- package/dist/layer/modeler/rotator.d.ts +0 -15
- package/dist/layer/modeler/rotator.js +0 -120
- package/dist/layer/modeler/rotator.js.map +0 -1
- package/dist/layer/modeling-layer.d.ts +0 -66
- package/dist/layer/modeling-layer.js +0 -451
- package/dist/layer/modeling-layer.js.map +0 -1
- package/dist/layer/selection/selected-finder.d.ts +0 -1
- package/dist/layer/selection-layer.d.ts +0 -42
- package/dist/layer/selection-layer.js +0 -307
- package/dist/layer/selection-layer.js.map +0 -1
- package/dist/layer/shift-layer.d.ts +0 -18
- package/dist/layer/shift-layer.js +0 -61
- package/dist/layer/shift-layer.js.map +0 -1
- package/dist/layout/absolute.d.ts +0 -8
- package/dist/layout/card.d.ts +0 -7
- package/dist/layout/html-absolute.d.ts +0 -8
- package/dist/layout/index.d.ts +0 -8
- package/dist/layout/index.js +0 -12
- package/dist/layout/index.js.map +0 -1
- package/dist/layout/layout.d.ts +0 -11
- package/dist/layout/linear-horizontal.d.ts +0 -7
- package/dist/layout/linear-vertical.d.ts +0 -7
- package/dist/layout/table.d.ts +0 -9
- package/dist/layout/three.d.ts +0 -8
- package/dist/layout/three.js +0 -20
- package/dist/layout/three.js.map +0 -1
- package/dist/license/license.d.ts +0 -18
- package/dist/model/compile.d.ts +0 -1
- package/dist/model/compile.js +0 -28
- package/dist/model/compile.js.map +0 -1
- package/dist/model/duplicate.d.ts +0 -1
- package/dist/model/index.d.ts +0 -3
- package/dist/model/selector.d.ts +0 -2
- package/dist/style/compile.d.ts +0 -1
- package/dist/style/index.d.ts +0 -1
- package/dist/things-scene/api/add-start.d.ts +0 -1
- package/dist/things-scene/api/add.d.ts +0 -5
- package/dist/things-scene/api/align.d.ts +0 -1
- package/dist/things-scene/api/change.d.ts +0 -2
- package/dist/things-scene/api/clipboard.d.ts +0 -3
- package/dist/things-scene/api/distribute.d.ts +0 -1
- package/dist/things-scene/api/duplicate.d.ts +0 -4
- package/dist/things-scene/api/fullscreen.d.ts +0 -1
- package/dist/things-scene/api/group.d.ts +0 -8
- package/dist/things-scene/api/group.js +0 -78
- package/dist/things-scene/api/group.js.map +0 -1
- package/dist/things-scene/api/ids.d.ts +0 -4
- package/dist/things-scene/api/index.d.ts +0 -15
- package/dist/things-scene/api/listener.d.ts +0 -3
- package/dist/things-scene/api/remove.d.ts +0 -4
- package/dist/things-scene/api/symmetry.d.ts +0 -2
- package/dist/things-scene/api/symmetry.js +0 -39
- package/dist/things-scene/api/symmetry.js.map +0 -1
- package/dist/things-scene/api/to-data-url.d.ts +0 -1
- package/dist/things-scene/api/to-data-url.js +0 -69
- package/dist/things-scene/api/to-data-url.js.map +0 -1
- package/dist/things-scene/api/zorder.d.ts +0 -2
- package/dist/things-scene/application-context.d.ts +0 -40
- package/dist/things-scene/config.d.ts +0 -4
- package/dist/things-scene/create.d.ts +0 -20
- package/dist/things-scene/fps.d.ts +0 -1
- package/dist/things-scene/index.d.ts +0 -17
- package/dist/things-scene/index.js +0 -23
- package/dist/things-scene/index.js.map +0 -1
- package/dist/things-scene/polyfill.d.ts +0 -2
- package/dist/things-scene/scene.d.ts +0 -155
- package/dist/things-scene/version.d.ts +0 -2
- package/dist/threed/common.d.ts +0 -22
- package/dist/threed/control/three-controls.d.ts +0 -11
- package/dist/threed/control/three-controls.js +0 -620
- package/dist/threed/control/three-controls.js.map +0 -1
- package/dist/threed/html/elements.d.ts +0 -2
- package/dist/threed/real-object-camera-meshed.d.ts +0 -12
- package/dist/threed/real-object-camera-meshed.js +0 -49
- package/dist/threed/real-object-camera-meshed.js.map +0 -1
- package/dist/threed/real-object-camera.d.ts +0 -9
- package/dist/threed/real-object-camera.js +0 -31
- package/dist/threed/real-object-camera.js.map +0 -1
- package/dist/threed/real-object-dom-element.d.ts +0 -20
- package/dist/threed/real-object-dom-element.js +0 -78
- package/dist/threed/real-object-dom-element.js.map +0 -1
- package/dist/threed/real-object-dummy.d.ts +0 -6
- package/dist/threed/real-object-dummy.js +0 -11
- package/dist/threed/real-object-dummy.js.map +0 -1
- package/dist/threed/real-object-extrude.d.ts +0 -19
- package/dist/threed/real-object-extrude.js +0 -171
- package/dist/threed/real-object-extrude.js.map +0 -1
- package/dist/threed/real-object-gltf.d.ts +0 -15
- package/dist/threed/real-object-gltf.js +0 -97
- package/dist/threed/real-object-gltf.js.map +0 -1
- package/dist/threed/real-object-group.d.ts +0 -5
- package/dist/threed/real-object-group.js +0 -11
- package/dist/threed/real-object-group.js.map +0 -1
- package/dist/threed/real-object-mesh.d.ts +0 -11
- package/dist/threed/real-object-mesh.js +0 -55
- package/dist/threed/real-object-mesh.js.map +0 -1
- package/dist/threed/real-object-plane.d.ts +0 -6
- package/dist/threed/real-object-plane.js +0 -23
- package/dist/threed/real-object-plane.js.map +0 -1
- package/dist/threed/real-object-scene.d.ts +0 -21
- package/dist/threed/real-object-scene.js +0 -89
- package/dist/threed/real-object-scene.js.map +0 -1
- package/dist/threed/real-object-sprite.d.ts +0 -12
- package/dist/threed/real-object-sprite.js +0 -35
- package/dist/threed/real-object-sprite.js.map +0 -1
- package/dist/threed/real-object-text.d.ts +0 -16
- package/dist/threed/real-object-text.js +0 -70
- package/dist/threed/real-object-text.js.map +0 -1
- package/dist/threed/real-object.d.ts +0 -48
- package/dist/threed/real-object.js +0 -199
- package/dist/threed/real-object.js.map +0 -1
- package/dist/threed/texture/text-texture.d.ts +0 -8
- package/dist/threed/three-dimensional-container.d.ts +0 -7
- package/dist/threed/three-dimensional-container.js +0 -2
- package/dist/threed/three-dimensional-container.js.map +0 -1
- package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
- package/dist/types.d.ts +0 -53
- package/dist/types.js +0 -368
- package/dist/types.js.map +0 -1
- package/rollup.config.js +0 -40
- package/schema.graphql +0 -4557
- package/src/index.js +0 -5
- package/things-board.js +0 -9
- package/things-scene-ie.js +0 -2
- package/things-scene-ie.js.LICENSE.txt +0 -15
- package/things-scene-min.js.LICENSE.txt +0 -15
- package/tsconfig.json +0 -9
|
@@ -1,912 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import isEqual from 'lodash/isEqual';
|
|
5
|
-
import template from 'lodash/template';
|
|
6
|
-
import * as animation from '../animation';
|
|
7
|
-
import animate from '../animation/animate';
|
|
8
|
-
import * as core from '../core';
|
|
9
|
-
import { error } from '../core/logger';
|
|
10
|
-
import * as memoize from '../core/memoize';
|
|
11
|
-
import * as utils from '../core/utils';
|
|
12
|
-
import effect from '../effect';
|
|
13
|
-
import { resetShadow, setShadow } from '../effect/shadow';
|
|
14
|
-
import * as selector from '../model/selector';
|
|
15
|
-
import { buildMappings, disposeMappings, executeMappings, onchangeData, onchangeMappings } from './data/data';
|
|
16
|
-
import drawImage from './drawer/draw-image-pendable';
|
|
17
|
-
import drawEffect from './drawer/effect';
|
|
18
|
-
import { drawFill, onchangeFill, prepareFill, prepareFillIf } from './drawer/fill';
|
|
19
|
-
import format from './drawer/format';
|
|
20
|
-
import drawStroke from './drawer/stroke';
|
|
21
|
-
import { drawText, font, textLines } from './drawer/text';
|
|
22
|
-
import { ondropfile } from './file/ondropfile';
|
|
23
|
-
import { transcoordC2S, transcoordP2S, transcoordR, transcoordRR, transcoordS2C, transcoordS2O, transcoordS2P, transcoordS2T, transcoordS2TR, transcoordT2P, transcoordT2S } from './geometry/transcoord';
|
|
24
|
-
import union from './geometry/union';
|
|
25
|
-
import { createCanvas } from './html/elements';
|
|
26
|
-
import reposition from './html/reposition';
|
|
27
|
-
import mutateBounds from './mutater/bounds';
|
|
28
|
-
import mutatePath from './mutater/path';
|
|
29
|
-
import pathOutline from './outline/path-outline';
|
|
30
|
-
import RetentionManager from './retention/retention-manager';
|
|
31
|
-
import { access, buildSubstitutor, substitute } from './text/substitutor';
|
|
32
|
-
import { registerDecorator } from '../decorator';
|
|
33
|
-
var registry = {};
|
|
34
|
-
const NATURE = {
|
|
35
|
-
mutable: false,
|
|
36
|
-
resizable: true,
|
|
37
|
-
rotatable: true,
|
|
38
|
-
properties: [],
|
|
39
|
-
'value-property': 'text'
|
|
40
|
-
};
|
|
41
|
-
const DEFALUT_DELTA = {
|
|
42
|
-
theta: 0,
|
|
43
|
-
tx: 0,
|
|
44
|
-
ty: 0,
|
|
45
|
-
sx: 1,
|
|
46
|
-
sy: 1,
|
|
47
|
-
fade: 0
|
|
48
|
-
};
|
|
49
|
-
const __components = new WeakMap();
|
|
50
|
-
var __component_count = 0;
|
|
51
|
-
export default class Component {
|
|
52
|
-
static get nature() {
|
|
53
|
-
return NATURE;
|
|
54
|
-
}
|
|
55
|
-
static register(type, clazz) {
|
|
56
|
-
if (!clazz)
|
|
57
|
-
return registry[type];
|
|
58
|
-
registry[type] = clazz;
|
|
59
|
-
}
|
|
60
|
-
static get residents() {
|
|
61
|
-
return __components;
|
|
62
|
-
}
|
|
63
|
-
static registerDecorator(name, decorator) {
|
|
64
|
-
registerDecorator(name, decorator);
|
|
65
|
-
}
|
|
66
|
-
/* Life Cycle */
|
|
67
|
-
constructor(model, app) {
|
|
68
|
-
this._app = app;
|
|
69
|
-
this._model = model || {};
|
|
70
|
-
this._state = {};
|
|
71
|
-
this._delta = utils.clone(DEFALUT_DELTA);
|
|
72
|
-
/*
|
|
73
|
-
* 만약 VIEW 모드에서, oncreate에 걸린 애니메이션이 있으면, 시작한다.
|
|
74
|
-
*/
|
|
75
|
-
if (app && this.animation) {
|
|
76
|
-
this.animation.started = true;
|
|
77
|
-
}
|
|
78
|
-
this.clearCache();
|
|
79
|
-
RetentionManager.add(this);
|
|
80
|
-
__components.set(this, __component_count++);
|
|
81
|
-
}
|
|
82
|
-
// created : 하위 자식 컴포넌트까지 다 생성한 후에 호출된다.
|
|
83
|
-
created() { }
|
|
84
|
-
// added : 부모 컨테이너에 추가된 후에 호출된다.
|
|
85
|
-
added(parent) { }
|
|
86
|
-
// added : 부모 컨테이너에서 제거된 후에 호출된다.
|
|
87
|
-
removed(parent) { }
|
|
88
|
-
// ready : 전체 모델이 만들어지고, 동작준비가 완료된 상태에서 호출됨. 단 한번만 호출됨.
|
|
89
|
-
async ready() {
|
|
90
|
-
if (this.state.persistent) {
|
|
91
|
-
const { isViewMode, dataStorage } = this.app;
|
|
92
|
-
if (isViewMode) {
|
|
93
|
-
this.data = await dataStorage.load(this);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
touch() {
|
|
98
|
-
this.updatedAt = performance.now();
|
|
99
|
-
}
|
|
100
|
-
clearCache(...attrs) {
|
|
101
|
-
memoize.clear(this, ...attrs);
|
|
102
|
-
}
|
|
103
|
-
removeSelf(completely) {
|
|
104
|
-
// completely && this.dispose()
|
|
105
|
-
completely ? this.dispose() : this.parent && this.parent.removeComponent(this);
|
|
106
|
-
}
|
|
107
|
-
dispose() {
|
|
108
|
-
if (this._animation) {
|
|
109
|
-
this._animation.dispose();
|
|
110
|
-
delete this._animation;
|
|
111
|
-
}
|
|
112
|
-
this.disposeMappings();
|
|
113
|
-
this.parent && this.parent.removeComponent(this);
|
|
114
|
-
delete this._text_substitutor;
|
|
115
|
-
delete this._value_substitutor;
|
|
116
|
-
this._disposed = true;
|
|
117
|
-
if (this.retention) {
|
|
118
|
-
RetentionManager.touch();
|
|
119
|
-
}
|
|
120
|
-
this._realObject && this._realObject.dispose();
|
|
121
|
-
this.clearCache();
|
|
122
|
-
delete this._app;
|
|
123
|
-
}
|
|
124
|
-
/* Natures */
|
|
125
|
-
get nature() {
|
|
126
|
-
return this.constructor.nature;
|
|
127
|
-
}
|
|
128
|
-
get disposed() {
|
|
129
|
-
return !!this._disposed;
|
|
130
|
-
}
|
|
131
|
-
isLayer() {
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
isGroup() {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
isContainer() {
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
140
|
-
isLine() {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
isRoot() {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
isRootModel() {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
is3dish() {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
isTemplate() {
|
|
153
|
-
return !!this.get('templatePrefix');
|
|
154
|
-
}
|
|
155
|
-
isHTMLElement() {
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
isConnectable() {
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
replaceRefids(replaceMap) { }
|
|
162
|
-
get retention() {
|
|
163
|
-
return Number(this.get('retention')) || 0;
|
|
164
|
-
}
|
|
165
|
-
get hasTextProperty() {
|
|
166
|
-
return true;
|
|
167
|
-
}
|
|
168
|
-
/* Application Context */
|
|
169
|
-
get app() {
|
|
170
|
-
if (!this._app && this.parent)
|
|
171
|
-
this._app = this.parent.app;
|
|
172
|
-
return this._app;
|
|
173
|
-
}
|
|
174
|
-
/** Properties Getter/Setter */
|
|
175
|
-
get model() {
|
|
176
|
-
return this._model;
|
|
177
|
-
}
|
|
178
|
-
get state() {
|
|
179
|
-
return Object.assign({}, this._model, this._state);
|
|
180
|
-
}
|
|
181
|
-
get hierarchy() {
|
|
182
|
-
var clone = utils.clone(this._model);
|
|
183
|
-
return clone;
|
|
184
|
-
}
|
|
185
|
-
/* text를 표현할지를 결정하는 속성 */
|
|
186
|
-
get textHidden() {
|
|
187
|
-
return !!this._textHidden;
|
|
188
|
-
}
|
|
189
|
-
set textHidden(hidden) {
|
|
190
|
-
this._textHidden = !!hidden;
|
|
191
|
-
this.invalidate();
|
|
192
|
-
}
|
|
193
|
-
/*
|
|
194
|
-
* 컴포넌트의 모델 속성값을 가져오는 메쏘드.
|
|
195
|
-
*/
|
|
196
|
-
get(property) {
|
|
197
|
-
return this._model[property];
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* 컴포넌트의 모델 속성값을 바꾸는 메쏘드.
|
|
201
|
-
*
|
|
202
|
-
* - 하나의 속성을 변경하는 경우.
|
|
203
|
-
* component.set('top', 10)
|
|
204
|
-
* - 여러개의 속성을 변경하는 경우.
|
|
205
|
-
* component.set({top:10, left:50})
|
|
206
|
-
*/
|
|
207
|
-
set(props, propval) {
|
|
208
|
-
if (typeof props === 'string')
|
|
209
|
-
return this.set({ [props]: propval });
|
|
210
|
-
var after = {};
|
|
211
|
-
var before = {};
|
|
212
|
-
var changed = false;
|
|
213
|
-
var props = utils.clone(props);
|
|
214
|
-
// Object.keys() 또는 for..in 으로는 undefined value 를 읽어오지 못함.
|
|
215
|
-
// Object.getOwnPropertyNames() 를 사용해야 함.
|
|
216
|
-
var self = this;
|
|
217
|
-
Object.getOwnPropertyNames(props).forEach(function (key) {
|
|
218
|
-
let before_val = self._model[key];
|
|
219
|
-
let after_val = props[key];
|
|
220
|
-
if (!isEqual(before_val, after_val)) {
|
|
221
|
-
before[key] = before_val;
|
|
222
|
-
after[key] = after_val;
|
|
223
|
-
self._model[key] = after_val;
|
|
224
|
-
delete self._state[key];
|
|
225
|
-
changed = true;
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
// TODO 아래 로직은 setState 부분과 공유할 수 있을 것이다.
|
|
229
|
-
if (changed) {
|
|
230
|
-
this.clearCache();
|
|
231
|
-
if (after.hasOwnProperty('text'))
|
|
232
|
-
delete this._text_substitutor;
|
|
233
|
-
if (after.hasOwnProperty('retention'))
|
|
234
|
-
RetentionManager.add(this);
|
|
235
|
-
after.hasOwnProperty('fillStyle') && this.onchangeFill(after, before);
|
|
236
|
-
after.hasOwnProperty('mappings') && this.onchangeMappings(after, before);
|
|
237
|
-
after.hasOwnProperty('data') && this.onchangeData(after, before);
|
|
238
|
-
if (this.onchange)
|
|
239
|
-
this.onchange(after, before);
|
|
240
|
-
this.trigger('change', after, before);
|
|
241
|
-
}
|
|
242
|
-
return this;
|
|
243
|
-
}
|
|
244
|
-
getState(property) {
|
|
245
|
-
if (this._state.hasOwnProperty(property))
|
|
246
|
-
return this._state[property];
|
|
247
|
-
return this.get(property);
|
|
248
|
-
}
|
|
249
|
-
setState(props, propval) {
|
|
250
|
-
if (typeof props === 'string')
|
|
251
|
-
return this.setState({ [props]: propval });
|
|
252
|
-
var after = {};
|
|
253
|
-
var before = {};
|
|
254
|
-
var changed = false;
|
|
255
|
-
var props = utils.clone(props);
|
|
256
|
-
// Object.keys() 또는 for..in 으로는 undefined value 를 읽어오지 못함.
|
|
257
|
-
// Object.getOwnPropertyNames() 를 사용해야 함.
|
|
258
|
-
var self = this;
|
|
259
|
-
var sensitive = this.getState('sensitive');
|
|
260
|
-
Object.getOwnPropertyNames(props).forEach(function (key) {
|
|
261
|
-
let before_val = self.getState(key);
|
|
262
|
-
let after_val = props[key];
|
|
263
|
-
if (sensitive || !isEqual(before_val, after_val)) {
|
|
264
|
-
before[key] = before_val;
|
|
265
|
-
after[key] = after_val;
|
|
266
|
-
self._state[key] = after_val;
|
|
267
|
-
changed = true;
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
if (changed) {
|
|
271
|
-
this.clearCache();
|
|
272
|
-
if (after.hasOwnProperty('text'))
|
|
273
|
-
delete this._text_substitutor;
|
|
274
|
-
after.hasOwnProperty('fillStyle') && this.onchangeFill(after, before);
|
|
275
|
-
after.hasOwnProperty('data') && this.onchangeData(after, before);
|
|
276
|
-
if (this.onchange)
|
|
277
|
-
this.onchange(after, before);
|
|
278
|
-
this.trigger('change', after, before);
|
|
279
|
-
}
|
|
280
|
-
return this;
|
|
281
|
-
}
|
|
282
|
-
/* Component-Container 계층 구조 */
|
|
283
|
-
get root() {
|
|
284
|
-
if (this.isRoot())
|
|
285
|
-
return this;
|
|
286
|
-
return this.parent && this.parent.root;
|
|
287
|
-
}
|
|
288
|
-
get rootModel() {
|
|
289
|
-
if (this.isRootModel())
|
|
290
|
-
return this;
|
|
291
|
-
return this.parent && this.parent.rootModel;
|
|
292
|
-
}
|
|
293
|
-
get parent() {
|
|
294
|
-
return this._parent;
|
|
295
|
-
}
|
|
296
|
-
set parent(parent) {
|
|
297
|
-
this._parent = parent;
|
|
298
|
-
}
|
|
299
|
-
get anchors() {
|
|
300
|
-
return this.nature.anchors || [];
|
|
301
|
-
}
|
|
302
|
-
findAnchor(name) {
|
|
303
|
-
return this.anchors.find(anchor => anchor.name === name);
|
|
304
|
-
}
|
|
305
|
-
// container에 포함될 수 있는가를 테스트한다.
|
|
306
|
-
isDescendible(container) {
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
/* 드로잉을 위한 정보들 */
|
|
310
|
-
getContext() {
|
|
311
|
-
return this._parent.getContext();
|
|
312
|
-
}
|
|
313
|
-
get center() {
|
|
314
|
-
var bounds = this.bounds;
|
|
315
|
-
return {
|
|
316
|
-
x: bounds.left + bounds.width / 2,
|
|
317
|
-
y: bounds.top + bounds.height / 2
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
set center(point) {
|
|
321
|
-
if (!point || isNaN(point.x) || isNaN(point.y))
|
|
322
|
-
return;
|
|
323
|
-
var old_center = this.center;
|
|
324
|
-
if (Math.round(point.x * 100) / 100 == Math.round(old_center.x * 100) / 100 &&
|
|
325
|
-
Math.round(point.y * 100) / 100 == Math.round(old_center.y * 100) / 100)
|
|
326
|
-
return;
|
|
327
|
-
var shift_x = point.x - old_center.x;
|
|
328
|
-
var shift_y = point.y - old_center.y;
|
|
329
|
-
this.path = this.path.map(p => {
|
|
330
|
-
return { x: p.x + shift_x, y: p.y + shift_y };
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
get location() {
|
|
334
|
-
return this.center;
|
|
335
|
-
}
|
|
336
|
-
set location(location) {
|
|
337
|
-
this.center = location;
|
|
338
|
-
}
|
|
339
|
-
get dimension() {
|
|
340
|
-
return this.get('dimension');
|
|
341
|
-
}
|
|
342
|
-
set dimension(dimension) {
|
|
343
|
-
this.set('dimension', dimension);
|
|
344
|
-
}
|
|
345
|
-
get bounds() {
|
|
346
|
-
var path = this.path;
|
|
347
|
-
var left, right, top, bottom;
|
|
348
|
-
left = right = path[0].x;
|
|
349
|
-
top = bottom = path[0].y;
|
|
350
|
-
for (let i = 1; i < path.length; i++) {
|
|
351
|
-
let point = path[i];
|
|
352
|
-
if (point.x < left)
|
|
353
|
-
left = point.x;
|
|
354
|
-
else if (point.x > right)
|
|
355
|
-
right = point.x;
|
|
356
|
-
if (point.y < top)
|
|
357
|
-
top = point.y;
|
|
358
|
-
else if (point.y > bottom)
|
|
359
|
-
bottom = point.y;
|
|
360
|
-
}
|
|
361
|
-
return {
|
|
362
|
-
left: left,
|
|
363
|
-
top: top,
|
|
364
|
-
width: right - left,
|
|
365
|
-
height: bottom - top
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
set bounds(bounds) {
|
|
369
|
-
// 1. left, top의 변화만큼 translate 한다.
|
|
370
|
-
var old_bounds = this.bounds;
|
|
371
|
-
if (Math.round(bounds.width * 100) / 100 == Math.round(old_bounds.width * 100) / 100 &&
|
|
372
|
-
Math.round(bounds.height * 100) / 100 == Math.round(old_bounds.height * 100) / 100 &&
|
|
373
|
-
Math.round(bounds.left * 100) / 100 == Math.round(old_bounds.left * 100) / 100 &&
|
|
374
|
-
Math.round(bounds.top * 100) / 100 == Math.round(old_bounds.top * 100) / 100)
|
|
375
|
-
return;
|
|
376
|
-
// 2. width, height의 변화비율을 scale-x, scale-y 에 보관한다.
|
|
377
|
-
var scale = {
|
|
378
|
-
x: old_bounds.width == 0 ? 1 : bounds.width / old_bounds.width,
|
|
379
|
-
y: old_bounds.height == 0 ? 1 : bounds.height / old_bounds.height
|
|
380
|
-
};
|
|
381
|
-
// 3. 기존 포인트들을 기존 거리에 scale-x, scale-y 만큼 조정된 위치로 새로운 bounds의 left-top으로부터 설정한다.
|
|
382
|
-
this.path = this.path.map(point => {
|
|
383
|
-
return {
|
|
384
|
-
x: bounds.left + (point.x - old_bounds.left) * scale.x,
|
|
385
|
-
y: bounds.top + (point.y - old_bounds.top) * scale.y
|
|
386
|
-
};
|
|
387
|
-
});
|
|
388
|
-
}
|
|
389
|
-
/*
|
|
390
|
-
* PATH란 컴포넌트의 형상을 만드는 포인트의 배열이다
|
|
391
|
-
*
|
|
392
|
-
* PATH는 컴포넌트의 바운드를 형성한다. (즉 바운드는 컴포넌트의 모든 패스를 포함하는 사각형 영역이다.)
|
|
393
|
-
*/
|
|
394
|
-
get path() {
|
|
395
|
-
// 각 컴포넌트에서 필수적으로 구현해야 함.
|
|
396
|
-
error('이 컴포넌트에 get path 가 구현되어있지 않음.', this);
|
|
397
|
-
return [];
|
|
398
|
-
}
|
|
399
|
-
set path(path) {
|
|
400
|
-
// 각 컴포넌트에서 필수적으로 구현해야 함.
|
|
401
|
-
error('이 컴포넌트에 get path 가 구현되어있지 않음.', this);
|
|
402
|
-
}
|
|
403
|
-
get drawPath() {
|
|
404
|
-
return this.path;
|
|
405
|
-
}
|
|
406
|
-
outline(progress) {
|
|
407
|
-
return pathOutline(this, progress || 0);
|
|
408
|
-
}
|
|
409
|
-
get strokeStyle() {
|
|
410
|
-
// return this.getState('strokeStyle')
|
|
411
|
-
return this.get('strokeStyle');
|
|
412
|
-
}
|
|
413
|
-
set strokeStyle(strokeStyle) {
|
|
414
|
-
// this.setState('strokeStyle', strokeStyle)
|
|
415
|
-
this.set('strokeStyle', strokeStyle);
|
|
416
|
-
}
|
|
417
|
-
get fillStyle() {
|
|
418
|
-
return this.getState('fillStyle');
|
|
419
|
-
}
|
|
420
|
-
set fillStyle(fillStyle) {
|
|
421
|
-
this.setState('fillStyle', fillStyle);
|
|
422
|
-
}
|
|
423
|
-
/*
|
|
424
|
-
* TODO. fontColor에 state를 적용.
|
|
425
|
-
* fontColor 속성을 font() 함수에서 다른 속성들과 같이 일괄적으로 사용하기때문에, 현재는 적용하지 못함
|
|
426
|
-
* 전반적인 state 관리 방법 개선시 조치 필요함.
|
|
427
|
-
*/
|
|
428
|
-
get fontColor() {
|
|
429
|
-
return this.get('fontColor');
|
|
430
|
-
}
|
|
431
|
-
set fontColor(fontColor) {
|
|
432
|
-
this.set('fontColor', String(utils.objToVal(fontColor)));
|
|
433
|
-
}
|
|
434
|
-
get rotation() {
|
|
435
|
-
return this.getState('rotation');
|
|
436
|
-
}
|
|
437
|
-
set rotation(rotation) {
|
|
438
|
-
this.setState('rotation', Number(utils.objToVal(rotation)));
|
|
439
|
-
}
|
|
440
|
-
contains(x, y) {
|
|
441
|
-
// 효율을 위해서, contains를 호출하기 전에 x, y좌표값은 이 컴포넌트에 대해서 이미 transcoord 된 상태이다.
|
|
442
|
-
// 참조 : capture(x, y)
|
|
443
|
-
return false;
|
|
444
|
-
}
|
|
445
|
-
/*
|
|
446
|
-
* PATH 리스트를 직접 수정할 수 있는 지를 결정한다.
|
|
447
|
-
*
|
|
448
|
-
* 일반적으로 PATH는 바운드 생성을 위해서 논리적으로 생성되므로, 직접 수정하지 않는다.(return false)
|
|
449
|
-
* 그러나, 각 꼭지점들이 개별로 움직이는 다각형류는 path 라는 모델데이타를 가지므로, 직접수정이 가능할 수 있다.(return true)
|
|
450
|
-
*
|
|
451
|
-
* Immutable 컴포넌트의 형상을 바꾸는 방법은 바운드를 이용한 리사이즈나, 특별한 컨트롤을 통해서 가능하다.
|
|
452
|
-
*/
|
|
453
|
-
get mutable() {
|
|
454
|
-
return this.nature.mutable;
|
|
455
|
-
}
|
|
456
|
-
/*
|
|
457
|
-
* BOUND를 통해서 리사이즈를 할 수 있는 지를 결정한다.
|
|
458
|
-
*
|
|
459
|
-
* 일반적으로 면적을 갖는 컴포넌트는 대체로 가능하다.(return true)
|
|
460
|
-
* 그러나, LINE 등 면적을 가지지않는 컴포넌트는 가능하지 않도록 정의한다.(return false)
|
|
461
|
-
*/
|
|
462
|
-
get resizable() {
|
|
463
|
-
return this.nature.resizable && !this.stuck;
|
|
464
|
-
}
|
|
465
|
-
/*
|
|
466
|
-
* 컴포넌트의 사이즈를 외부(모델러 등)에서 조정하는 경우, set bounds 전에 조정하는 기회를 갖는다.
|
|
467
|
-
* 예를 들면, 비례적인 크기 조정이 필요한 경우 등.
|
|
468
|
-
*/
|
|
469
|
-
adjustResize(bounds, origin_bounds, diagonal) {
|
|
470
|
-
if (diagonal) {
|
|
471
|
-
let old = this.bounds;
|
|
472
|
-
let ratio = old.height / old.width;
|
|
473
|
-
let dw = bounds.width - old.width;
|
|
474
|
-
let dh = bounds.height - old.height;
|
|
475
|
-
if (dw * ratio > dh)
|
|
476
|
-
dh = dw * ratio;
|
|
477
|
-
else
|
|
478
|
-
dw = dh / ratio;
|
|
479
|
-
let dl = bounds.left - old.left;
|
|
480
|
-
let dt = bounds.top - old.top;
|
|
481
|
-
/* TOP-LEFT를 모두 변경시키는 경우가 아니면, TOP과 LEFT를 보호한다. */
|
|
482
|
-
if (dl != 0 && dt != 0) {
|
|
483
|
-
dt = -dh;
|
|
484
|
-
dl = -dw;
|
|
485
|
-
}
|
|
486
|
-
else if (dl != 0) {
|
|
487
|
-
dl = -dw;
|
|
488
|
-
}
|
|
489
|
-
else if (dt != 0) {
|
|
490
|
-
dt = -dh;
|
|
491
|
-
}
|
|
492
|
-
return {
|
|
493
|
-
left: old.left + dl,
|
|
494
|
-
top: old.top + dt,
|
|
495
|
-
width: old.width + dw,
|
|
496
|
-
height: old.height + dh
|
|
497
|
-
};
|
|
498
|
-
}
|
|
499
|
-
return bounds;
|
|
500
|
-
}
|
|
501
|
-
/*
|
|
502
|
-
* 회전을 할 수 있는 지를 결정한다.
|
|
503
|
-
*
|
|
504
|
-
* 일반적으로 모든 컴포넌트는 가능하다.(return true)
|
|
505
|
-
*/
|
|
506
|
-
get rotatable() {
|
|
507
|
-
return this.nature.rotatable && !this.stuck;
|
|
508
|
-
}
|
|
509
|
-
/*
|
|
510
|
-
* 컴포넌트의 회전각을 외부(모델러 등)에서 조정하는 경우, rotation이 set되기 전에 조정하는 기회를 갖는다.
|
|
511
|
-
* 예를 들면, 스텝 회전이 진행되는 경우 등.
|
|
512
|
-
*/
|
|
513
|
-
adjustRotation(rotation, step) {
|
|
514
|
-
if (step || this.app.rotateStepForced) {
|
|
515
|
-
let step = this.app.rotateStep;
|
|
516
|
-
return Math.floor((rotation + step / 2) / step) * step;
|
|
517
|
-
}
|
|
518
|
-
return rotation;
|
|
519
|
-
}
|
|
520
|
-
/*
|
|
521
|
-
* 이벤트 캡쳐가 가능한 지를 결정한다.
|
|
522
|
-
*/
|
|
523
|
-
get capturable() {
|
|
524
|
-
return this.get('capturable') !== false && (this.app.isEditMode || !this.hidden);
|
|
525
|
-
}
|
|
526
|
-
/*
|
|
527
|
-
* 어떤 이유로 움직일 수 없는 상태가 되었는지를 알려준다.
|
|
528
|
-
*/
|
|
529
|
-
get stuck() {
|
|
530
|
-
return !!((this.parent && this.parent.layout.isStuck(this)) || this.get('locked'));
|
|
531
|
-
}
|
|
532
|
-
/*
|
|
533
|
-
* 조건에 맞는 컴포넌트를 찾기 위한 기능들
|
|
534
|
-
*
|
|
535
|
-
* findAll(s, ...others) 조건에 맞는 모든 컴포넌트를 찾아낸다.
|
|
536
|
-
* findFirst(finder, ...others) finder 함수에서 조건에 맞는 첫번째 컴포넌트를 리턴한다.
|
|
537
|
-
* capture(x, y) 파라미터로 주어진 좌표값을 포함하는 컨테이너를 찾는다. (Event Capturing)
|
|
538
|
-
* findById(id) 파라미터 id와 같은 id를 가진 컴포넌트를 찾는다.
|
|
539
|
-
*/
|
|
540
|
-
findFirst(finder, ...others) {
|
|
541
|
-
if (finder(this, ...others))
|
|
542
|
-
return this;
|
|
543
|
-
}
|
|
544
|
-
findAll(s, ...others) {
|
|
545
|
-
if (typeof s === 'string')
|
|
546
|
-
return selector.select(s, this, others[0] || this); // others[0] means (self)
|
|
547
|
-
if (typeof s === 'function' && s(this, ...others))
|
|
548
|
-
return [this];
|
|
549
|
-
}
|
|
550
|
-
capture(x, y, except) {
|
|
551
|
-
if (!this.capturable || (except === null || except === void 0 ? void 0 : except(this)))
|
|
552
|
-
return false;
|
|
553
|
-
var point = this.transcoordP2S(x, y);
|
|
554
|
-
if (this.contains(point.x, point.y))
|
|
555
|
-
return this;
|
|
556
|
-
}
|
|
557
|
-
/* Drawing 관련 기능들 */
|
|
558
|
-
prepare(resolve, reject) {
|
|
559
|
-
// 1. 먼저 만족하지 않는 조건인 경우에, 바로 리턴한다.
|
|
560
|
-
// 2. 재진입되지 않는 조건을 먼저 설정한다. (주로 핵심적인 멤버변수를 생성한다.)
|
|
561
|
-
// prepareIf(cond) 의 조건으로 핵심 멤버변수가 설정되지 않은 경우로 로직을 만들 수 있도록 한다.
|
|
562
|
-
// 3. 비동기 콜백에 대한 핸들링
|
|
563
|
-
// 4. 비동기 상황을 트리거링
|
|
564
|
-
resolve(this);
|
|
565
|
-
}
|
|
566
|
-
prepareIf(condition) {
|
|
567
|
-
if (!condition)
|
|
568
|
-
return;
|
|
569
|
-
this.prepare &&
|
|
570
|
-
this.prepare(resolve => {
|
|
571
|
-
this.invalidate();
|
|
572
|
-
}, reject => {
|
|
573
|
-
error(reject);
|
|
574
|
-
});
|
|
575
|
-
}
|
|
576
|
-
get decotag() {
|
|
577
|
-
const { id, tag } = this.state;
|
|
578
|
-
return (id ? `#${id}` : '') + (tag ? `@${tag}` : '');
|
|
579
|
-
}
|
|
580
|
-
get decorators() {
|
|
581
|
-
return ['decotag', 'data-spread'];
|
|
582
|
-
}
|
|
583
|
-
get hidden() {
|
|
584
|
-
return (this.getState('hidden') ||
|
|
585
|
-
(!this.data && this.data !== 0 && this.getState('ndns')) /* ndns - falsy and not zero */ ||
|
|
586
|
-
this.isTemplate());
|
|
587
|
-
}
|
|
588
|
-
set hidden(hidden) {
|
|
589
|
-
this.setState('hidden', hidden);
|
|
590
|
-
}
|
|
591
|
-
draw(context) {
|
|
592
|
-
context.save();
|
|
593
|
-
this.__proto__.hasOwnProperty('_pre_draw') ? this._pre_draw(context) : this.prerender(context);
|
|
594
|
-
this.__proto__.hasOwnProperty('_draw') ? this._draw(context) : this.render(context);
|
|
595
|
-
this.__proto__.hasOwnProperty('_post_draw') ? this._post_draw(context) : this.postrender(context);
|
|
596
|
-
context.restore();
|
|
597
|
-
}
|
|
598
|
-
delta(attr, value) {
|
|
599
|
-
if (value !== undefined)
|
|
600
|
-
this._delta[attr] = value;
|
|
601
|
-
else {
|
|
602
|
-
if (attr)
|
|
603
|
-
return this._delta[attr];
|
|
604
|
-
else
|
|
605
|
-
return this._delta;
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
prerender(context) {
|
|
609
|
-
/*
|
|
610
|
-
* 컴포넌트의 그리기 전 모든 준비작업을 담당한다.
|
|
611
|
-
*/
|
|
612
|
-
var rotatePoint = this.rotatePoint;
|
|
613
|
-
var { scale, rotation, shadow, alpha } = this.state;
|
|
614
|
-
var sx = ((scale && scale.x) || 1) * this._delta.sx;
|
|
615
|
-
var sy = ((scale && scale.y) || 1) * this._delta.sy;
|
|
616
|
-
var theta = (rotation || 0) + this._delta.theta;
|
|
617
|
-
var { tx = 0, ty = 0 } = this._delta;
|
|
618
|
-
var fade = (alpha || 1) - this._delta.fade;
|
|
619
|
-
if (tx || ty)
|
|
620
|
-
context.translate(tx, ty);
|
|
621
|
-
// 원점으로 이동하여 회전한 후 다시 되돌아온다.
|
|
622
|
-
if (sx != 1 || sy != 1 || theta) {
|
|
623
|
-
context.translate(rotatePoint.x, rotatePoint.y);
|
|
624
|
-
if (sx != 1 || sy != 1)
|
|
625
|
-
context.scale(sx, sy);
|
|
626
|
-
if (theta)
|
|
627
|
-
context.rotate(theta);
|
|
628
|
-
context.translate(-rotatePoint.x, -rotatePoint.y);
|
|
629
|
-
}
|
|
630
|
-
if (fade)
|
|
631
|
-
context.globalAlpha = fade;
|
|
632
|
-
if (shadow)
|
|
633
|
-
setShadow(context, shadow, this);
|
|
634
|
-
if (this.app.isEditMode && this.hidden)
|
|
635
|
-
context.globalAlpha *= 0.5;
|
|
636
|
-
}
|
|
637
|
-
render(context) {
|
|
638
|
-
/*
|
|
639
|
-
* 상속받아서 구현하는 draw() 함수는 컴포넌트 자신의 표현에만 집중한다.
|
|
640
|
-
* 컨텍스트의 변형이 다른 컴포넌트에 어떤 영향을 줄 지 고려할 필요가 없다.
|
|
641
|
-
* 텍스트, 효과, 애니메이션 등 컴포넌트 공통 기능에 대한 표현은 처리하지 않는다.(postrender 공통 처리)
|
|
642
|
-
*/
|
|
643
|
-
}
|
|
644
|
-
postrender(context) {
|
|
645
|
-
/* postrender() 함수는 거의 상속하지 않는다.
|
|
646
|
-
* 텍스트, 효과, 애니메이션 등 컴포넌트 공통 기능에 대한 표현을 담당한다.
|
|
647
|
-
*/
|
|
648
|
-
this.drawText(context);
|
|
649
|
-
}
|
|
650
|
-
drawText(context) {
|
|
651
|
-
if (!this.textHidden && this.text && this.hasTextProperty)
|
|
652
|
-
drawText(context, this.textBounds, this.textLines(context), this.state);
|
|
653
|
-
}
|
|
654
|
-
drawStroke(context, override) {
|
|
655
|
-
drawStroke(context, override
|
|
656
|
-
? {
|
|
657
|
-
...this.state,
|
|
658
|
-
...override
|
|
659
|
-
}
|
|
660
|
-
: this.state, this);
|
|
661
|
-
}
|
|
662
|
-
drawFill(context, override) {
|
|
663
|
-
if (this.fillStyle && this.fillStyle != 'transparent') {
|
|
664
|
-
drawFill(context, this.bounds, this.center, override
|
|
665
|
-
? {
|
|
666
|
-
...this.state,
|
|
667
|
-
...override
|
|
668
|
-
}
|
|
669
|
-
: this.state, this);
|
|
670
|
-
// 만약 fill이 된다면, fill에 의해서 그림자가 표현되므로, 이후 stroke등에 의한 그림자는 생기지 않도록 한다.
|
|
671
|
-
resetShadow(context);
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
/*
|
|
675
|
-
* 드로잉 툴을 위한 동작 기능들
|
|
676
|
-
*
|
|
677
|
-
* move({x, y}) 컴포넌트를 x, y 만큼 이동한다.
|
|
678
|
-
* animate : 애니메이션 동작을 정의한다.
|
|
679
|
-
* effect : To Be Defined
|
|
680
|
-
*/
|
|
681
|
-
animate(opts) {
|
|
682
|
-
if (this._animate)
|
|
683
|
-
this._animate.stop();
|
|
684
|
-
this._animate = animate(opts);
|
|
685
|
-
return this._animate;
|
|
686
|
-
}
|
|
687
|
-
move({ x, y }) {
|
|
688
|
-
var oldpath = this.path;
|
|
689
|
-
var towardx = x;
|
|
690
|
-
var towardy = y;
|
|
691
|
-
this.path = oldpath.map(point => {
|
|
692
|
-
return {
|
|
693
|
-
x: point.x + towardx,
|
|
694
|
-
y: point.y + towardy
|
|
695
|
-
};
|
|
696
|
-
});
|
|
697
|
-
}
|
|
698
|
-
symmetryX(x) {
|
|
699
|
-
if (typeof x !== 'number')
|
|
700
|
-
x = this.center.x;
|
|
701
|
-
var { rotation } = this.state;
|
|
702
|
-
var fillStyle = this.fillStyle;
|
|
703
|
-
this.set('rotation', 2 * Math.PI - rotation);
|
|
704
|
-
if (fillStyle && fillStyle.type === 'gradient' && fillStyle.gradientType === 'linear') {
|
|
705
|
-
var newStyle = utils.clone(fillStyle);
|
|
706
|
-
newStyle.rotation = (Math.PI - parseFloat(fillStyle.rotation || 0)) % (Math.PI * 2);
|
|
707
|
-
this.set('fillStyle', newStyle);
|
|
708
|
-
}
|
|
709
|
-
this.path = this.path.map(point => {
|
|
710
|
-
return {
|
|
711
|
-
x: 2 * x - point.x,
|
|
712
|
-
y: point.y
|
|
713
|
-
};
|
|
714
|
-
});
|
|
715
|
-
}
|
|
716
|
-
symmetryY(y) {
|
|
717
|
-
this.symmetryX();
|
|
718
|
-
this.set('rotation', (Math.PI + this.model.rotation) % (Math.PI * 2));
|
|
719
|
-
if (y) {
|
|
720
|
-
this.move({
|
|
721
|
-
x: 0,
|
|
722
|
-
y: (y - this.center.y) * 2
|
|
723
|
-
}, false);
|
|
724
|
-
}
|
|
725
|
-
}
|
|
726
|
-
get animation() {
|
|
727
|
-
if (!this.app.isViewMode || this.isTemplate())
|
|
728
|
-
return;
|
|
729
|
-
if (!this._animation) {
|
|
730
|
-
var config = this.state.animation;
|
|
731
|
-
if (config && config['oncreate'])
|
|
732
|
-
this._animation = animation.compile(this, config['oncreate']);
|
|
733
|
-
}
|
|
734
|
-
return this._animation;
|
|
735
|
-
}
|
|
736
|
-
effect(context, model) {
|
|
737
|
-
return effect(this, context, model);
|
|
738
|
-
}
|
|
739
|
-
set started(started) {
|
|
740
|
-
if (this.animation)
|
|
741
|
-
this.animation.started = started;
|
|
742
|
-
}
|
|
743
|
-
/* 강제로 컴포넌트를 다시 그리게 하는 함수 */
|
|
744
|
-
invalidate() {
|
|
745
|
-
this.parent && this.parent.invalidate();
|
|
746
|
-
}
|
|
747
|
-
/*
|
|
748
|
-
* 텍스팅에서 font의 크기와 관련해서는, 일반적으로 통용되는 크기값이 있으므로,
|
|
749
|
-
* 모델링 단위의 내부 스케일링(예를 들면, unitScale)에 의한 값을 보정하기위해서,
|
|
750
|
-
* font, lineHeight, fontSize 속성을 별도로 정의한다.
|
|
751
|
-
* unitScale 등에 의해서 굳이 단위를 스케일링 하는 이유는, 브라우저에서 일반적으로
|
|
752
|
-
* 너무 적은 크기의 폰트(예를 들면 7이하)를 그리지 못하도록 되어있기 때문에 도입한 것이다.
|
|
753
|
-
* 이를 해결하기 위해서 실제로는 훨씬 크게 스케일링된 값을 쓰면서(예를 들면 10배)
|
|
754
|
-
* 실제 보여줄때는 1/10로 축소시켜서 보여주는 방법을 사용했다.(고육책)
|
|
755
|
-
*/
|
|
756
|
-
get font() {
|
|
757
|
-
return font(this.model);
|
|
758
|
-
}
|
|
759
|
-
get lineHeight() {
|
|
760
|
-
var lineHeight = this.get('lineHeight');
|
|
761
|
-
if (!lineHeight)
|
|
762
|
-
return this.fontSize * 1.2;
|
|
763
|
-
return lineHeight;
|
|
764
|
-
}
|
|
765
|
-
defaultTextSubstitutor() {
|
|
766
|
-
var t = this.getState('text');
|
|
767
|
-
return t == undefined ? '' : String(t);
|
|
768
|
-
}
|
|
769
|
-
get textSubstitutor() {
|
|
770
|
-
if (!this._text_substitutor)
|
|
771
|
-
this._text_substitutor = buildSubstitutor(this.getState('text'), this) || this.defaultTextSubstitutor;
|
|
772
|
-
return this._text_substitutor;
|
|
773
|
-
}
|
|
774
|
-
get text() {
|
|
775
|
-
var textFormat = this.get('textFormat');
|
|
776
|
-
return textFormat ? format(textFormat, this.textSubstitutor()) : this.textSubstitutor();
|
|
777
|
-
}
|
|
778
|
-
set text(text) {
|
|
779
|
-
delete this._text_substitutor;
|
|
780
|
-
var t = utils.objToVal(text);
|
|
781
|
-
this.setState('text', t == undefined ? '' : String(t));
|
|
782
|
-
}
|
|
783
|
-
textLines(context) {
|
|
784
|
-
return textLines(context || this.getContext(), this.textBounds.width, this.font, this.text, this.get('textWrap'));
|
|
785
|
-
}
|
|
786
|
-
get textBounds() {
|
|
787
|
-
var { paddingTop, paddingLeft, paddingRight, paddingBottom } = this.state;
|
|
788
|
-
paddingBottom || (paddingBottom = 0);
|
|
789
|
-
paddingTop || (paddingTop = 0);
|
|
790
|
-
paddingLeft || (paddingLeft = 0);
|
|
791
|
-
paddingRight || (paddingRight = 0);
|
|
792
|
-
var { left, top, width, height } = this.bounds;
|
|
793
|
-
return {
|
|
794
|
-
left: left + paddingLeft,
|
|
795
|
-
top: top + paddingTop,
|
|
796
|
-
width: Math.max(width - paddingLeft - paddingRight, 0),
|
|
797
|
-
height: Math.max(height - paddingTop - paddingBottom, 0)
|
|
798
|
-
};
|
|
799
|
-
}
|
|
800
|
-
get textRotation() {
|
|
801
|
-
return 0;
|
|
802
|
-
}
|
|
803
|
-
get rotatePoint() {
|
|
804
|
-
return this.center;
|
|
805
|
-
}
|
|
806
|
-
trim() {
|
|
807
|
-
/* TODO 일단 무거운 "" 속성과 chart 속성을 삭제한다. 향후 각 컴포넌트의 지정 속성 만 남기고, 모두 제거한다. */
|
|
808
|
-
delete this._model[''];
|
|
809
|
-
if (this._model.type !== 'chartjs')
|
|
810
|
-
delete this._model.chart;
|
|
811
|
-
}
|
|
812
|
-
/* data handling */
|
|
813
|
-
get value() {
|
|
814
|
-
var valueprop = this.nature['value-property'] || 'text';
|
|
815
|
-
return valueprop == 'value' ? this.getState('value') : this[valueprop];
|
|
816
|
-
}
|
|
817
|
-
set value(value) {
|
|
818
|
-
var valueprop = this.nature['value-property'] || 'text';
|
|
819
|
-
valueprop == 'value' ? this.setState('value', value) : (this[valueprop] = value);
|
|
820
|
-
}
|
|
821
|
-
get data() {
|
|
822
|
-
return this.getState('data');
|
|
823
|
-
}
|
|
824
|
-
set data(data) {
|
|
825
|
-
this.setState('data', data);
|
|
826
|
-
this.touch();
|
|
827
|
-
}
|
|
828
|
-
get mappings() {
|
|
829
|
-
/* 제거된 상태가 아니면(this.parent), 매핑을 다시 빌드한다. */
|
|
830
|
-
if (!this._mappings && this.parent)
|
|
831
|
-
this.buildMappings();
|
|
832
|
-
return this._mappings;
|
|
833
|
-
}
|
|
834
|
-
/* 3D related */
|
|
835
|
-
get RealObject() {
|
|
836
|
-
if (!this.disposed && !this._realObject) {
|
|
837
|
-
this._realObject = this.buildRealObject();
|
|
838
|
-
if (!this._realObject) {
|
|
839
|
-
return;
|
|
840
|
-
}
|
|
841
|
-
this._realObject.update();
|
|
842
|
-
this._realObject.updateTransform();
|
|
843
|
-
}
|
|
844
|
-
return this._realObject;
|
|
845
|
-
}
|
|
846
|
-
buildRealObject() { }
|
|
847
|
-
/* Serialization */
|
|
848
|
-
serialize(...others) {
|
|
849
|
-
return JSON.stringify(this.hierarchy, ...others);
|
|
850
|
-
}
|
|
851
|
-
get controls() { }
|
|
852
|
-
/* etc */
|
|
853
|
-
closeScene(data) {
|
|
854
|
-
this.rootModel.closeScene(data);
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
Component.union = union;
|
|
858
|
-
Component.transcoordR = transcoordR;
|
|
859
|
-
Component.transcoordRR = transcoordRR;
|
|
860
|
-
Component.createCanvas = createCanvas;
|
|
861
|
-
Component.memoize = memoize.intercept;
|
|
862
|
-
Component.mixin = core.mixin;
|
|
863
|
-
Component.drawText = drawText;
|
|
864
|
-
Component.font = font;
|
|
865
|
-
Component.textLines = textLines;
|
|
866
|
-
Component.drawStroke = drawStroke;
|
|
867
|
-
Component.drawFill = drawFill;
|
|
868
|
-
Component.reposition = reposition;
|
|
869
|
-
Component.RetentionManager = RetentionManager;
|
|
870
|
-
Component.template = template;
|
|
871
|
-
Component.buildSubstitutor = buildSubstitutor;
|
|
872
|
-
Object.assign(Component.prototype, {
|
|
873
|
-
/* Drawers */
|
|
874
|
-
drawEffect,
|
|
875
|
-
prepareFill,
|
|
876
|
-
prepareFillIf,
|
|
877
|
-
onchangeFill,
|
|
878
|
-
drawImage,
|
|
879
|
-
/* Mutators */
|
|
880
|
-
mutateBounds,
|
|
881
|
-
mutatePath,
|
|
882
|
-
/* substitute */
|
|
883
|
-
access,
|
|
884
|
-
substitute,
|
|
885
|
-
/* data */
|
|
886
|
-
onchangeMappings,
|
|
887
|
-
onchangeData,
|
|
888
|
-
buildMappings,
|
|
889
|
-
executeMappings,
|
|
890
|
-
disposeMappings,
|
|
891
|
-
/* file drop */
|
|
892
|
-
ondropfile,
|
|
893
|
-
/* Transcoorders */
|
|
894
|
-
transcoordS2P,
|
|
895
|
-
transcoordP2S,
|
|
896
|
-
transcoordS2T,
|
|
897
|
-
transcoordT2P,
|
|
898
|
-
transcoordT2S,
|
|
899
|
-
transcoordS2TR,
|
|
900
|
-
transcoordS2O,
|
|
901
|
-
transcoordC2S,
|
|
902
|
-
transcoordS2C,
|
|
903
|
-
/* TODO delete below */
|
|
904
|
-
_pre_draw: Component.prototype.prerender,
|
|
905
|
-
_draw: Component.prototype.render,
|
|
906
|
-
_post_draw: Component.prototype.postrender
|
|
907
|
-
});
|
|
908
|
-
['rotatePoint', 'font', 'lineHeight', 'retention'].forEach(getter => Component.memoize(Component.prototype, getter, false));
|
|
909
|
-
['bounds', 'center', 'textBounds'].forEach(getter => Component.memoize(Component.prototype, getter, true));
|
|
910
|
-
/* event 기능을 mixin */
|
|
911
|
-
Component.mixin(Component.prototype, core.event.withEvent);
|
|
912
|
-
//# sourceMappingURL=component.js.map
|