diff --git a/demos/demo-custom-link1/index.tsx b/demos/demo-custom-link1/index.tsx index 26807e9..9a2ac90 100644 --- a/demos/demo-custom-link1/index.tsx +++ b/demos/demo-custom-link1/index.tsx @@ -12,11 +12,10 @@ import { import { action } from "@storybook/addon-actions"; import * as React from "react"; import { LinkFactory } from "../../src/AbstractFactory"; -import {DefaultLinkModel} from "../../src/defaults/models/DefaultLinkModel"; -import {DefaultLinkFactory} from "../../src/defaults/factories/DefaultLinkFactory"; +import { DefaultLinkModel } from "../../src/defaults/models/DefaultLinkModel"; +import { DefaultLinkFactory } from "../../src/defaults/factories/DefaultLinkFactory"; export class AdvancedLinkModel extends DefaultLinkModel { - constructor() { super("advanced"); this.width = 10; @@ -24,61 +23,57 @@ export class AdvancedLinkModel extends DefaultLinkModel { } export class AdvancedPortModel extends DefaultPortModel { - createLinkModel(): AdvancedLinkModel | null { return new AdvancedLinkModel(); } } -export class AdvancedLinkSegment extends React.Component<{model: AdvancedLinkModel, path: string}>{ - +export class AdvancedLinkSegment extends React.Component<{ model: AdvancedLinkModel; path: string }> { path: SVGPathElement; circle: SVGCircleElement; - callback : () => any; + callback: () => any; percent: number; handle: any; mounted: boolean; - constructor(props){ + constructor(props) { super(props); this.percent = 0; } - componentDidMount(){ + componentDidMount() { this.mounted = true; this.callback = () => { - if(!this.circle || !this.path){ + if (!this.circle || !this.path) { return; } - this.percent+=2; - if(this.percent > 100){ + this.percent += 2; + if (this.percent > 100) { this.percent = 0; } + let point = this.path.getPointAtLength(this.path.getTotalLength() * (this.percent / 100.0)); - let point = this.path.getPointAtLength(this.path.getTotalLength()*(this.percent/100.0)); + this.circle.setAttribute("cx", "" + point.x); + this.circle.setAttribute("cy", "" + point.y); - this.circle.setAttribute('cx', ""+point.x); - this.circle.setAttribute('cy', ""+point.y); - - if(this.mounted){ + if (this.mounted) { requestAnimationFrame(this.callback); } - } + }; requestAnimationFrame(this.callback); } - componentWillUnmount(){ + componentWillUnmount() { this.mounted = false; } - - render(){ + render() { return ( <> { + ref={ref => { this.path = ref; }} strokeWidth={this.props.model.width} @@ -86,10 +81,11 @@ export class AdvancedLinkSegment extends React.Component<{model: AdvancedLinkMod d={this.props.path} /> { + ref={ref => { this.circle = ref; }} - r={10} fill="orange" + r={10} + fill="orange" /> ); @@ -97,10 +93,9 @@ export class AdvancedLinkSegment extends React.Component<{model: AdvancedLinkMod } export class AdvancedLinkFactory extends DefaultLinkFactory { - constructor() { super(); - this.type = "advanced" + this.type = "advanced"; } getNewInstance(initialConfig?: any): AdvancedLinkModel { @@ -108,9 +103,12 @@ export class AdvancedLinkFactory extends DefaultLinkFactory { } generateLinkSegment(model: AdvancedLinkModel, selected: boolean, path: string) { - return ; + return ( + + + + ); } - } /** * diff --git a/demos/demo-custom-node1/DiamondNodeFactory.tsx b/demos/demo-custom-node1/DiamondNodeFactory.tsx index 57329f9..cd5ffde 100644 --- a/demos/demo-custom-node1/DiamondNodeFactory.tsx +++ b/demos/demo-custom-node1/DiamondNodeFactory.tsx @@ -1,5 +1,5 @@ import * as SRD from "../../src/main"; -import {DiamonNodeWidget} from "./DiamondNodeWidget"; +import { DiamonNodeWidget } from "./DiamondNodeWidget"; import { DiamondNodeModel } from "./DiamondNodeModel"; import * as React from "react"; @@ -9,7 +9,7 @@ export class DiamondNodeFactory extends SRD.NodeFactory { } generateReactWidget(diagramEngine: SRD.DiagramEngine, node: SRD.NodeModel): JSX.Element { - return + return ; } getNewInstance() { diff --git a/demos/demo-custom-node1/DiamondNodeModel.ts b/demos/demo-custom-node1/DiamondNodeModel.ts index 3d91b86..25e0425 100644 --- a/demos/demo-custom-node1/DiamondNodeModel.ts +++ b/demos/demo-custom-node1/DiamondNodeModel.ts @@ -2,7 +2,6 @@ import * as SRD from "../../src/main"; import { DiamondPortModel } from "./DiamondPortModel"; export class DiamondNodeModel extends SRD.NodeModel { - constructor() { super("diamond"); this.addPort(new DiamondPortModel("top")); diff --git a/demos/demo-custom-node1/DiamondNodeWidget.tsx b/demos/demo-custom-node1/DiamondNodeWidget.tsx index a80a717..cd4181f 100644 --- a/demos/demo-custom-node1/DiamondNodeWidget.tsx +++ b/demos/demo-custom-node1/DiamondNodeWidget.tsx @@ -102,4 +102,4 @@ export class DiamonNodeWidget extends React.Component ); } -} \ No newline at end of file +} diff --git a/demos/demo-custom-node1/DiamondPortModel.ts b/demos/demo-custom-node1/DiamondPortModel.ts index 2558200..8fcda42 100644 --- a/demos/demo-custom-node1/DiamondPortModel.ts +++ b/demos/demo-custom-node1/DiamondPortModel.ts @@ -1,8 +1,8 @@ import * as _ from "lodash"; -import {LinkModel} from "../../src/models/LinkModel"; -import {DiagramEngine} from "../../src/DiagramEngine"; -import {PortModel} from "../../src/models/PortModel"; -import {DefaultLinkModel} from "../../src/defaults/models/DefaultLinkModel"; +import { LinkModel } from "../../src/models/LinkModel"; +import { DiagramEngine } from "../../src/DiagramEngine"; +import { PortModel } from "../../src/models/PortModel"; +import { DefaultLinkModel } from "../../src/defaults/models/DefaultLinkModel"; export class DiamondPortModel extends PortModel { position: string | "top" | "bottom" | "left" | "right"; @@ -23,7 +23,7 @@ export class DiamondPortModel extends PortModel { this.position = data.position; } - createLinkModel(): LinkModel{ + createLinkModel(): LinkModel { return new DefaultLinkModel(); } } diff --git a/demos/demo-custom-node1/index.tsx b/demos/demo-custom-node1/index.tsx index d7f3cc4..a91985d 100644 --- a/demos/demo-custom-node1/index.tsx +++ b/demos/demo-custom-node1/index.tsx @@ -31,7 +31,7 @@ export default () => { //3-A) create a default node var node1 = new DefaultNodeModel("Node 1", "rgb(0,192,255)"); - var port1 = node1.addOutPort("Out") + var port1 = node1.addOutPort("Out"); node1.setPosition(100, 150); //3-B) create our new custom node @@ -39,12 +39,12 @@ export default () => { node2.setPosition(250, 108); var node3 = new DefaultNodeModel("Node 3", "red"); - var port3 = node3.addInPort("In") + var port3 = node3.addInPort("In"); node3.setPosition(500, 150); //3-C) link the 2 nodes together - var link1 = port1.link(node2.getPort('left')); - var link2 = port3.link(node2.getPort('right')); + var link1 = port1.link(node2.getPort("left")); + var link2 = port3.link(node2.getPort("right")); //4) add the models to the root graph model.addAll(node1, node2, node3, link1, link2); diff --git a/demos/demo-dagre/index.tsx b/demos/demo-dagre/index.tsx index 461683b..df1466b 100644 --- a/demos/demo-dagre/index.tsx +++ b/demos/demo-dagre/index.tsx @@ -30,7 +30,6 @@ function connectNodes(nodeFrom, nodeTo) { * Tests auto distribution */ class Demo8Widget extends React.Component { - constructor(props) { super(props); this.state = {}; diff --git a/demos/demo-drag-and-drop/components/BodyWidget.tsx b/demos/demo-drag-and-drop/components/BodyWidget.tsx index cd6127a..6c951e2 100644 --- a/demos/demo-drag-and-drop/components/BodyWidget.tsx +++ b/demos/demo-drag-and-drop/components/BodyWidget.tsx @@ -3,10 +3,7 @@ import * as _ from "lodash"; import { TrayWidget } from "./TrayWidget"; import { Application } from "../Application"; import { TrayItemWidget } from "./TrayItemWidget"; -import { - DefaultNodeModel, - DiagramWidget -} from "../../../src/main"; +import { DefaultNodeModel, DiagramWidget } from "../../../src/main"; export interface BodyWidgetProps { app: Application; @@ -48,10 +45,10 @@ export class BodyWidget extends React.Component { engine.setDiagramModel(model); //6) render the diagram! - return ; + return ; }; diff --git a/demos/demo-labelled-links/index.tsx b/demos/demo-labelled-links/index.tsx index d534411..0cff7cf 100644 --- a/demos/demo-labelled-links/index.tsx +++ b/demos/demo-labelled-links/index.tsx @@ -9,7 +9,7 @@ import { import * as React from "react"; import { DemoWorkspaceWidget } from "../.helpers/DemoWorkspaceWidget"; import { action } from "@storybook/addon-actions"; -import {DefaultLinkModel} from "../../src/defaults/models/DefaultLinkModel"; +import { DefaultLinkModel } from "../../src/defaults/models/DefaultLinkModel"; export default () => { // setup the diagram engine @@ -22,19 +22,19 @@ export default () => { // create four nodes const node1 = new DefaultNodeModel("Node A", "rgb(0,192,255)"); const port1 = node1.addOutPort("Out"); - node1.setPosition(100,100); + node1.setPosition(100, 100); const node2 = new DefaultNodeModel("Node B", "rgb(255,255,0)"); const port2 = node2.addInPort("In"); - node2.setPosition(400,50); + node2.setPosition(400, 50); const node3 = new DefaultNodeModel("Node C (no label)", "rgb(192,255,255)"); const port3 = node3.addInPort("In"); - node3.setPosition(450,180); + node3.setPosition(450, 180); const node4 = new DefaultNodeModel("Node D", "rgb(192,0,255)"); const port4 = node4.addInPort("In"); - node4.setPosition(300,250); + node4.setPosition(300, 250); // link node A and B together and give it a label const link1 = port1.link(port2); diff --git a/demos/demo-listeners/index.tsx b/demos/demo-listeners/index.tsx index e43297b..b4f1c97 100644 --- a/demos/demo-listeners/index.tsx +++ b/demos/demo-listeners/index.tsx @@ -19,11 +19,11 @@ export default () => { node1.setPosition(100, 100); var node2 = new DefaultNodeModel("Node 2", "rgb(192,255,0)"); - var port2 = node2.addInPort('In'); + var port2 = node2.addInPort("In"); node2.setPosition(400, 40); var node3 = new DefaultNodeModel("Node 3", "rgb(128,99,255)"); - var port3 = node3.addInPort('In'); + var port3 = node3.addInPort("In"); node3.setPosition(300, 160); //link the nodes diff --git a/demos/demo-locks/index.tsx b/demos/demo-locks/index.tsx index 6b93b95..57d7d4f 100644 --- a/demos/demo-locks/index.tsx +++ b/demos/demo-locks/index.tsx @@ -1,8 +1,6 @@ import * as SRD from "../../src/main"; import * as React from "react"; -import { - DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, PointModel, DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, PointModel, DiagramWidget } from "../../src/main"; /** * @@ -19,11 +17,11 @@ export default () => { // sample for link with simple line (no additional points) var node1 = new DefaultNodeModel("Node 1", "rgb(0,192,255)"); - var port1 = node1.addOutPort('Out'); + var port1 = node1.addOutPort("Out"); node1.setPosition(100, 100); var node2 = new DefaultNodeModel("Node 2", "rgb(192,255,0)"); - var port2 = node2.addInPort('In'); + var port2 = node2.addInPort("In"); node2.setPosition(400, 100); let link1 = port1.link(port2); @@ -32,11 +30,11 @@ export default () => { // sample for link with complex line (additional points) var node3 = new DefaultNodeModel("Node 3", "rgb(0,192,255)"); - var port3 = node3.addOutPort('Out'); + var port3 = node3.addOutPort("Out"); node3.setPosition(100, 250); var node4 = new DefaultNodeModel("Node 4", "rgb(192,255,0)"); - var port4 = node4.addInPort('In'); + var port4 = node4.addInPort("In"); node4.setPosition(400, 250); var link2 = port3.link(port4); diff --git a/demos/demo-mutate-graph/index.tsx b/demos/demo-mutate-graph/index.tsx index 07282ab..c9b3648 100644 --- a/demos/demo-mutate-graph/index.tsx +++ b/demos/demo-mutate-graph/index.tsx @@ -1,10 +1,4 @@ -import { - DiagramEngine, - DiagramModel, - DefaultNodeModel, - LinkModel, - DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, DiagramWidget } from "../../src/main"; import * as React from "react"; import { DemoWorkspaceWidget } from "../.helpers/DemoWorkspaceWidget"; @@ -46,8 +40,12 @@ class NodeDelayedPosition extends React.Component { return ( Update position, - + , + ]} > diff --git a/demos/demo-performance/index.tsx b/demos/demo-performance/index.tsx index 1633162..aef81d4 100644 --- a/demos/demo-performance/index.tsx +++ b/demos/demo-performance/index.tsx @@ -1,10 +1,4 @@ -import { - DiagramEngine, - DiagramModel, - DefaultNodeModel, - LinkModel, - DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, DiagramWidget } from "../../src/main"; import * as React from "react"; /** @@ -23,7 +17,7 @@ export default () => { //3-A) create a default node var node1 = new DefaultNodeModel("Node 1", "rgb(0,192,255)"); var port1 = node1.addOutPort("Out"); - node1.setPosition(100 + offsetX, 100 + offsetY) + node1.setPosition(100 + offsetX, 100 + offsetY); //3-B) create another default node var node2 = new DefaultNodeModel("Node 2", "rgb(192,255,0)"); diff --git a/demos/demo-serializing/index.tsx b/demos/demo-serializing/index.tsx index b9a18c6..6b9f3c1 100644 --- a/demos/demo-serializing/index.tsx +++ b/demos/demo-serializing/index.tsx @@ -1,10 +1,4 @@ -import { - DiagramEngine, - DiagramModel, - DefaultNodeModel, - LinkModel, - DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, DiagramWidget } from "../../src/main"; import * as React from "react"; import { DemoWorkspaceWidget } from "../.helpers/DemoWorkspaceWidget"; import { action } from "@storybook/addon-actions"; diff --git a/demos/demo-simple-flow/index.tsx b/demos/demo-simple-flow/index.tsx index bb6d0d8..2974089 100644 --- a/demos/demo-simple-flow/index.tsx +++ b/demos/demo-simple-flow/index.tsx @@ -1,10 +1,4 @@ -import { - DiagramEngine, - DiagramModel, - DefaultNodeModel, - LinkModel, - DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, DiagramWidget } from "../../src/main"; import * as React from "react"; export default () => { @@ -17,12 +11,12 @@ export default () => { //3-A) create a default node var node1 = new DefaultNodeModel("Node 1", "rgb(0,192,255)"); - var port1 = node1.addOutPort('Out') - node1.setPosition(100,100); + var port1 = node1.addOutPort("Out"); + node1.setPosition(100, 100); //3-B) create another default node var node2 = new DefaultNodeModel("Node 2", "rgb(192,255,0)"); - var port2 = node2.addInPort('In') + var port2 = node2.addInPort("In"); node2.setPosition(400, 100); //3-C) link the 2 nodes together @@ -30,8 +24,8 @@ export default () => { //3-D) create an orphaned node var node3 = new DefaultNodeModel("Node 3", "rgb(0,192,255)"); - node3.addOutPort('Out'); - node3.setPosition(100,200); + node3.addOutPort("Out"); + node3.setPosition(100, 200); //4) add the models to the root graph model.addAll(node1, node2, node3, link1); diff --git a/demos/demo-simple/index.tsx b/demos/demo-simple/index.tsx index c499b2e..852694a 100644 --- a/demos/demo-simple/index.tsx +++ b/demos/demo-simple/index.tsx @@ -1,12 +1,6 @@ -import { - DiagramEngine, - DiagramModel, - DefaultNodeModel, - LinkModel, - DiagramWidget -} from "../../src/main"; +import { DiagramEngine, DiagramModel, DefaultNodeModel, LinkModel, DiagramWidget } from "../../src/main"; import * as React from "react"; -import {DefaultLinkModel} from "../../src/defaults/models/DefaultLinkModel"; +import { DefaultLinkModel } from "../../src/defaults/models/DefaultLinkModel"; export default () => { //1) setup the diagram engine @@ -36,7 +30,6 @@ export default () => { //5) load model into engine engine.setDiagramModel(model); - //6) render the diagram! return ; }; diff --git a/demos/demo-smart-routing/index.tsx b/demos/demo-smart-routing/index.tsx index 67c9ae5..cf79753 100644 --- a/demos/demo-smart-routing/index.tsx +++ b/demos/demo-smart-routing/index.tsx @@ -7,8 +7,8 @@ import { DiagramWidget } from "../../src/main"; import * as React from "react"; -import {DemoWorkspaceWidget} from "../.helpers/DemoWorkspaceWidget"; -import {action} from "@storybook/addon-actions"; +import { DemoWorkspaceWidget } from "../.helpers/DemoWorkspaceWidget"; +import { action } from "@storybook/addon-actions"; export default () => { // setup the diagram engine @@ -35,7 +35,6 @@ export default () => { const node5 = new DefaultNodeModel("Node E", "rgb(192,255,0)"); node5.setPosition(250, 180); - // linking things together const link1 = port1.link(port4); const link2 = port2.link(port3); @@ -58,11 +57,7 @@ export default () => { } > - + ); }; diff --git a/demos/demo-zoom-to-fit/index.tsx b/demos/demo-zoom-to-fit/index.tsx index 0f244a0..51e5f68 100644 --- a/demos/demo-zoom-to-fit/index.tsx +++ b/demos/demo-zoom-to-fit/index.tsx @@ -7,7 +7,7 @@ import { DiagramWidget } from "../../src/main"; import * as React from "react"; -import {DemoWorkspaceWidget} from "../.helpers/DemoWorkspaceWidget"; +import { DemoWorkspaceWidget } from "../.helpers/DemoWorkspaceWidget"; /** * @@ -53,7 +53,7 @@ export default () => { //6) render the diagram! return ( engine.zoomToFit()}>Zoom to fit}> - + ); }; diff --git a/demos/index.tsx b/demos/index.tsx index 3b517ef..4cbef14 100644 --- a/demos/index.tsx +++ b/demos/index.tsx @@ -1,9 +1,9 @@ import * as React from "react"; -import {storiesOf, addDecorator} from "@storybook/react"; -import {setOptions} from "@storybook/addon-options"; -import {host} from "storybook-host"; -import {Helper} from "./.helpers/Helper"; -import {Toolkit} from "../src/Toolkit"; +import { storiesOf, addDecorator } from "@storybook/react"; +import { setOptions } from "@storybook/addon-options"; +import { host } from "storybook-host"; +import { Helper } from "./.helpers/Helper"; +import { Toolkit } from "../src/Toolkit"; //include the SCSS for the demo require("./.helpers/demo.scss"); diff --git a/src/AbstractFactory.ts b/src/AbstractFactory.ts index 52eb38f..25d99ca 100644 --- a/src/AbstractFactory.ts +++ b/src/AbstractFactory.ts @@ -1,10 +1,10 @@ -import {BaseModel} from "./models/BaseModel"; -import {NodeModel} from "./models/NodeModel"; -import {LinkModel} from "./models/LinkModel"; -import {DiagramEngine} from "./DiagramEngine"; -import {PortModel} from "./models/PortModel"; -import {PointModel} from "./models/PointModel"; -import {LabelModel} from "./models/LabelModel"; +import { BaseModel } from "./models/BaseModel"; +import { NodeModel } from "./models/NodeModel"; +import { LinkModel } from "./models/LinkModel"; +import { DiagramEngine } from "./DiagramEngine"; +import { PortModel } from "./models/PortModel"; +import { PointModel } from "./models/PointModel"; +import { LabelModel } from "./models/LabelModel"; export abstract class AbstractFactory { type: string; @@ -25,18 +25,14 @@ export abstract class NodeFactory extends Abstr } export abstract class LinkFactory extends AbstractFactory { - abstract generateReactWidget(diagramEngine: DiagramEngine, link: T): JSX.Element; - } -export abstract class LabelFactory extends AbstractFactory{ - +export abstract class LabelFactory extends AbstractFactory { abstract generateReactWidget(diagramEngine: DiagramEngine, label: T): JSX.Element; } -export abstract class PortFactory extends AbstractFactory { -} +export abstract class PortFactory extends AbstractFactory {} export class SimplePortFactory extends PortFactory { cb: (initialConfig?: any) => PortModel; diff --git a/src/BaseEntity.ts b/src/BaseEntity.ts index 0935c27..711522b 100644 --- a/src/BaseEntity.ts +++ b/src/BaseEntity.ts @@ -1,6 +1,6 @@ -import {Toolkit} from "./Toolkit"; +import { Toolkit } from "./Toolkit"; import * as _ from "lodash"; -import {DiagramEngine} from "./DiagramEngine"; +import { DiagramEngine } from "./DiagramEngine"; /** * @author Dylan Vorster @@ -18,7 +18,7 @@ export interface BaseListener { export type BaseEntityType = "node" | "link" | "port" | "point"; -export class BaseEntity< T extends BaseListener = BaseListener> { +export class BaseEntity { public listeners: { [s: string]: T }; public id: string; public locked: boolean; @@ -33,8 +33,7 @@ export class BaseEntity< T extends BaseListener = BaseListener> { return this.id; } - doClone(lookupTable = {}, clone) { - } + doClone(lookupTable = {}, clone) {} clone(lookupTable = {}) { // try and use an existing clone first @@ -104,7 +103,7 @@ export class BaseEntity< T extends BaseListener = BaseListener> { this.locked = locked; this.iterateListeners((listener, event) => { if (listener.lockChanged) { - listener.lockChanged({...event, locked: locked}); + listener.lockChanged({ ...event, locked: locked }); } }); } diff --git a/src/DiagramEngine.ts b/src/DiagramEngine.ts index 46efe82..66728b3 100644 --- a/src/DiagramEngine.ts +++ b/src/DiagramEngine.ts @@ -1,18 +1,18 @@ -import {BaseEntity, BaseListener} from "./BaseEntity"; -import {DiagramModel} from "./models/DiagramModel"; +import { BaseEntity, BaseListener } from "./BaseEntity"; +import { DiagramModel } from "./models/DiagramModel"; import * as _ from "lodash"; -import {BaseModel, BaseModelListener} from "./models/BaseModel"; -import {NodeModel} from "./models/NodeModel"; -import {PointModel} from "./models/PointModel"; -import {PortModel} from "./models/PortModel"; -import {LinkModel} from "./models/LinkModel"; -import {LabelFactory, LinkFactory, NodeFactory, PortFactory} from "./AbstractFactory"; -import {DefaultLinkFactory, DefaultNodeFactory} from "./main"; +import { BaseModel, BaseModelListener } from "./models/BaseModel"; +import { NodeModel } from "./models/NodeModel"; +import { PointModel } from "./models/PointModel"; +import { PortModel } from "./models/PortModel"; +import { LinkModel } from "./models/LinkModel"; +import { LabelFactory, LinkFactory, NodeFactory, PortFactory } from "./AbstractFactory"; +import { DefaultLinkFactory, DefaultNodeFactory } from "./main"; import { ROUTING_SCALING_FACTOR } from "./routing/PathFinding"; -import {DefaultPortFactory} from "./defaults/factories/DefaultPortFactory"; -import {LabelModel} from "./models/LabelModel"; -import {DefaultLabelFactory} from "./defaults/factories/DefaultLabelFactory"; -import {Toolkit} from "./Toolkit"; +import { DefaultPortFactory } from "./defaults/factories/DefaultPortFactory"; +import { LabelModel } from "./models/LabelModel"; +import { DefaultLabelFactory } from "./defaults/factories/DefaultLabelFactory"; +import { Toolkit } from "./Toolkit"; /** * @author Dylan Vorster */ @@ -63,12 +63,12 @@ export class DiagramEngine extends BaseEntity { this.paintableWidgets = null; this.linksThatHaveInitiallyRendered = {}; - if(Toolkit.TESTING){ + if (Toolkit.TESTING) { Toolkit.TESTING_UID = 0; //pop it onto the window so our E2E helpers can find it - if(window){ - (window as any)['diagram_instance'] = this; + if (window) { + (window as any)["diagram_instance"] = this; } } } @@ -128,7 +128,7 @@ export class DiagramEngine extends BaseEntity { this.linksThatHaveInitiallyRendered = {}; } - canEntityRepaint(baseModel: BaseModel) { + canEntityRepaint(baseModel: BaseModel) { //no rules applied, allow repaint if (this.paintableWidgets === null) { return true; @@ -150,7 +150,6 @@ export class DiagramEngine extends BaseEntity { return this.diagramModel; } - //!-------------- FACTORIES ------------ getNodeFactories(): { [s: string]: NodeFactory } { @@ -271,7 +270,7 @@ export class DiagramEngine extends BaseEntity { getRelativePoint(x, y) { var canvasRect = this.canvas.getBoundingClientRect(); - return {x: x - canvasRect.left, y: y - canvasRect.top}; + return { x: x - canvasRect.left, y: y - canvasRect.top }; } getNodeElement(node: NodeModel): Element { @@ -289,10 +288,10 @@ export class DiagramEngine extends BaseEntity { if (selector === null) { throw new Error( "Cannot find Node Port element with nodeID: [" + - port.getParent().getID() + - "] and name: [" + - port.getName() + - "]" + port.getParent().getID() + + "] and name: [" + + port.getName() + + "]" ); } return selector; @@ -306,11 +305,11 @@ export class DiagramEngine extends BaseEntity { return { x: - sourceElement.offsetWidth / 2 + - (rel.x - this.diagramModel.getOffsetX()) / (this.diagramModel.getZoomLevel() / 100.0), + sourceElement.offsetWidth / 2 + + (rel.x - this.diagramModel.getOffsetX()) / (this.diagramModel.getZoomLevel() / 100.0), y: - sourceElement.offsetHeight / 2 + - (rel.y - this.diagramModel.getOffsetY()) / (this.diagramModel.getZoomLevel() / 100.0) + sourceElement.offsetHeight / 2 + + (rel.y - this.diagramModel.getOffsetY()) / (this.diagramModel.getZoomLevel() / 100.0) }; } @@ -345,7 +344,7 @@ export class DiagramEngine extends BaseEntity { * Determine the width and height of the node passed in. * It currently assumes nodes have a rectangular shape, can be overriden for customised shapes. */ - getNodeDimensions(node: NodeModel): { width: number; height: number; } { + getNodeDimensions(node: NodeModel): { width: number; height: number } { if (!this.canvas) { return { width: 0, diff --git a/src/Toolkit.ts b/src/Toolkit.ts index 0f342df..c86e1eb 100644 --- a/src/Toolkit.ts +++ b/src/Toolkit.ts @@ -1,5 +1,5 @@ import closest = require("closest"); -import {PointModel} from "./models/PointModel"; +import { PointModel } from "./models/PointModel"; import { ROUTING_SCALING_FACTOR } from "./routing/PathFinding"; import * as Path from "paths-js/path"; /** @@ -16,7 +16,7 @@ export class Toolkit { public static UID(): string { if (Toolkit.TESTING) { Toolkit.TESTING_UID++; - return ''+Toolkit.TESTING_UID; + return "" + Toolkit.TESTING_UID; } return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = (Math.random() * 16) | 0, @@ -42,13 +42,10 @@ export class Toolkit { return `M${firstPoint.x},${firstPoint.y} L ${lastPoint.x},${lastPoint.y}`; } - public static generateCurvePath( - firstPoint: PointModel, - lastPoint: PointModel, - curvy: number = 0, - ): string { - return `M${firstPoint.x},${firstPoint.y} C ${firstPoint.x + curvy},${firstPoint.y} ${lastPoint.x + - -curvy},${lastPoint.y} ${lastPoint.x},${lastPoint.y}`; + public static generateCurvePath(firstPoint: PointModel, lastPoint: PointModel, curvy: number = 0): string { + return `M${firstPoint.x},${firstPoint.y} C ${firstPoint.x + curvy},${firstPoint.y} ${lastPoint.x + -curvy},${ + lastPoint.y + } ${lastPoint.x},${lastPoint.y}`; } public static generateDynamicPath(pathCoords: number[][]) { diff --git a/src/defaults/factories/DefaultLabelFactory.tsx b/src/defaults/factories/DefaultLabelFactory.tsx index 3e74b8a..b00109f 100644 --- a/src/defaults/factories/DefaultLabelFactory.tsx +++ b/src/defaults/factories/DefaultLabelFactory.tsx @@ -1,8 +1,8 @@ import * as React from "react"; -import {DiagramEngine} from "../../DiagramEngine"; -import {LabelFactory} from "../../AbstractFactory"; -import {DefaultLabelModel} from "../models/DefaultLabelModel"; -import {DefaultLabelWidget} from "../widgets/DefaultLabelWidget"; +import { DiagramEngine } from "../../DiagramEngine"; +import { LabelFactory } from "../../AbstractFactory"; +import { DefaultLabelModel } from "../models/DefaultLabelModel"; +import { DefaultLabelWidget } from "../widgets/DefaultLabelWidget"; /** * @author Dylan Vorster diff --git a/src/defaults/factories/DefaultLinkFactory.tsx b/src/defaults/factories/DefaultLinkFactory.tsx index b342c40..804742b 100644 --- a/src/defaults/factories/DefaultLinkFactory.tsx +++ b/src/defaults/factories/DefaultLinkFactory.tsx @@ -1,8 +1,8 @@ import * as React from "react"; -import {DefaultLinkWidget} from "../widgets/DefaultLinkWidget"; -import {DiagramEngine} from "../../DiagramEngine"; -import {LinkFactory} from "../../AbstractFactory"; -import {DefaultLinkModel} from "../models/DefaultLinkModel"; +import { DefaultLinkWidget } from "../widgets/DefaultLinkWidget"; +import { DiagramEngine } from "../../DiagramEngine"; +import { LinkFactory } from "../../AbstractFactory"; +import { DefaultLinkModel } from "../models/DefaultLinkModel"; /** * @author Dylan Vorster @@ -23,16 +23,7 @@ export class DefaultLinkFactory extends LinkFactory { return new DefaultLinkModel(); } - generateLinkSegment(model: DefaultLinkModel, selected: boolean, path: string) { - return ( - - ); + return ; } - } diff --git a/src/defaults/models/DefaultLabelModel.tsx b/src/defaults/models/DefaultLabelModel.tsx index a179813..12497b8 100644 --- a/src/defaults/models/DefaultLabelModel.tsx +++ b/src/defaults/models/DefaultLabelModel.tsx @@ -1,14 +1,14 @@ -import {LabelModel} from "../../models/LabelModel"; +import { LabelModel } from "../../models/LabelModel"; export class DefaultLabelModel extends LabelModel { label: string; - constructor(){ + constructor() { super("default"); this.offsetY = -23; } - setLabel(label: string){ + setLabel(label: string) { this.label = label; } -} \ No newline at end of file +} diff --git a/src/defaults/models/DefaultLinkModel.ts b/src/defaults/models/DefaultLinkModel.ts index 713117a..9ac53a6 100644 --- a/src/defaults/models/DefaultLinkModel.ts +++ b/src/defaults/models/DefaultLinkModel.ts @@ -1,35 +1,33 @@ /** * @author Dylan Vorster */ -import {LinkModel, LinkModelListener} from "../../models/LinkModel"; -import {BaseEvent} from "../../BaseEntity"; +import { LinkModel, LinkModelListener } from "../../models/LinkModel"; +import { BaseEvent } from "../../BaseEntity"; import * as _ from "lodash"; -import {PointModel} from "../../models/PointModel"; -import {DiagramEngine} from "../../DiagramEngine"; -import {DefaultLabelModel} from "./DefaultLabelModel"; -import {LabelModel} from "../../models/LabelModel"; - -export interface DefaultLinkModelListener extends LinkModelListener{ +import { PointModel } from "../../models/PointModel"; +import { DiagramEngine } from "../../DiagramEngine"; +import { DefaultLabelModel } from "./DefaultLabelModel"; +import { LabelModel } from "../../models/LabelModel"; +export interface DefaultLinkModelListener extends LinkModelListener { colorChanged?(event: BaseEvent & { color: null | string }); widthChanged?(event: BaseEvent & { width: 0 | number }); } -export class DefaultLinkModel extends LinkModel{ - +export class DefaultLinkModel extends LinkModel { width: number; color: string; curvyness: number; - constructor(type: string = 'default'){ + constructor(type: string = "default") { super(type); this.color = "rgba(255,255,255,0.5)"; this.width = 3; this.curvyness = 50; } - serialize(){ + serialize() { return _.merge(super.serialize(), { width: this.width, color: this.color, @@ -44,8 +42,8 @@ export class DefaultLinkModel extends LinkModel{ this.curvyness = ob.curvyness; } - addLabel(label: LabelModel | string){ - if(label instanceof LabelModel){ + addLabel(label: LabelModel | string) { + if (label instanceof LabelModel) { return super.addLabel(label); } let labelOb = new DefaultLabelModel(); @@ -53,18 +51,17 @@ export class DefaultLinkModel extends LinkModel{ return super.addLabel(labelOb); } - setWidth(width: number){ + setWidth(width: number) { this.width = width; this.iterateListeners((listener: DefaultLinkModelListener, event: BaseEvent) => { listener.widthChanged && listener.widthChanged({ ...event, width: width }); }); } - setColor(color: string){ + setColor(color: string) { this.color = color; this.iterateListeners((listener: DefaultLinkModelListener, event: BaseEvent) => { listener.colorChanged && listener.colorChanged({ ...event, color: color }); }); } - -} \ No newline at end of file +} diff --git a/src/defaults/models/DefaultNodeModel.ts b/src/defaults/models/DefaultNodeModel.ts index c861e76..dc15bea 100644 --- a/src/defaults/models/DefaultNodeModel.ts +++ b/src/defaults/models/DefaultNodeModel.ts @@ -2,8 +2,8 @@ import { DefaultPortModel } from "./DefaultPortModel"; import * as _ from "lodash"; import { NodeModel } from "../../models/NodeModel"; -import {Toolkit} from "../../Toolkit"; -import {DiagramEngine} from "../../DiagramEngine"; +import { Toolkit } from "../../Toolkit"; +import { DiagramEngine } from "../../DiagramEngine"; /** * @author Dylan Vorster @@ -19,11 +19,11 @@ export class DefaultNodeModel extends NodeModel { this.color = color; } - addInPort(label: string): DefaultPortModel{ + addInPort(label: string): DefaultPortModel { return this.addPort(new DefaultPortModel(true, Toolkit.UID(), label)); } - addOutPort(label: string): DefaultPortModel{ + addOutPort(label: string): DefaultPortModel { return this.addPort(new DefaultPortModel(false, Toolkit.UID(), label)); } diff --git a/src/defaults/models/DefaultPortModel.ts b/src/defaults/models/DefaultPortModel.ts index cd663d1..274e1b8 100644 --- a/src/defaults/models/DefaultPortModel.ts +++ b/src/defaults/models/DefaultPortModel.ts @@ -1,11 +1,10 @@ import * as _ from "lodash"; import { PortModel } from "../../models/PortModel"; -import {DiagramEngine} from "../../DiagramEngine"; -import {DefaultLinkModel} from "./DefaultLinkModel"; -import {LinkModel} from "../../models/LinkModel"; +import { DiagramEngine } from "../../DiagramEngine"; +import { DefaultLinkModel } from "./DefaultLinkModel"; +import { LinkModel } from "../../models/LinkModel"; export class DefaultPortModel extends PortModel { - in: boolean; label: string; links: { [id: string]: DefaultLinkModel }; @@ -29,7 +28,7 @@ export class DefaultPortModel extends PortModel { }); } - link(port: PortModel): LinkModel{ + link(port: PortModel): LinkModel { let link = this.createLinkModel(); link.setSourcePort(this); link.setTargetPort(port); @@ -37,7 +36,7 @@ export class DefaultPortModel extends PortModel { } canLinkToPort(port: PortModel): boolean { - if(port instanceof DefaultPortModel){ + if (port instanceof DefaultPortModel) { return this.in !== port.in; } return true; diff --git a/src/defaults/widgets/DefaultLabelWidget.tsx b/src/defaults/widgets/DefaultLabelWidget.tsx index 84f6f1d..f9daa16 100644 --- a/src/defaults/widgets/DefaultLabelWidget.tsx +++ b/src/defaults/widgets/DefaultLabelWidget.tsx @@ -1,15 +1,12 @@ import * as React from "react"; -import {DefaultLabelModel} from "../models/DefaultLabelModel"; +import { DefaultLabelModel } from "../models/DefaultLabelModel"; -export interface DefaultLabelWidgetProps{ +export interface DefaultLabelWidgetProps { model: DefaultLabelModel; } -export class DefaultLabelWidget extends React.Component{ - - render(){ - return ( -
{this.props.model.label}
- ); +export class DefaultLabelWidget extends React.Component { + render() { + return
{this.props.model.label}
; } -} \ No newline at end of file +} diff --git a/src/defaults/widgets/DefaultLinkWidget.tsx b/src/defaults/widgets/DefaultLinkWidget.tsx index f7ea97c..8b51fb6 100644 --- a/src/defaults/widgets/DefaultLinkWidget.tsx +++ b/src/defaults/widgets/DefaultLinkWidget.tsx @@ -1,12 +1,12 @@ import * as React from "react"; -import {DiagramEngine} from "../../DiagramEngine"; -import {PointModel} from "../../models/PointModel"; -import {Toolkit} from "../../Toolkit"; -import {DefaultLinkFactory} from "../factories/DefaultLinkFactory"; -import {DefaultLinkModel} from "../models/DefaultLinkModel"; +import { DiagramEngine } from "../../DiagramEngine"; +import { PointModel } from "../../models/PointModel"; +import { Toolkit } from "../../Toolkit"; +import { DefaultLinkFactory } from "../factories/DefaultLinkFactory"; +import { DefaultLinkModel } from "../models/DefaultLinkModel"; import PathFinding from "../../routing/PathFinding"; import * as _ from "lodash"; -import {LabelModel} from "../../models/LabelModel"; +import { LabelModel } from "../../models/LabelModel"; export interface DefaultLinkProps { color?: string; @@ -28,7 +28,7 @@ export class DefaultLinkWidget extends React.Component { - this.calculateLabelPosition(label, index+1); - }) + this.calculateLabelPosition(label, index + 1); + }); } componentDidUpdate() { @@ -93,10 +93,10 @@ export class DefaultLinkWidget extends React.Component { - this.setState({selected: false}); + this.setState({ selected: false }); }} onMouseEnter={() => { - this.setState({selected: true}); + this.setState({ selected: true }); }} data-id={this.props.link.points[pointIndex].id} data-linkid={this.props.link.id} @@ -113,9 +113,16 @@ export class DefaultLinkWidget extends React.Component +
(this.refLabels[label.id] = ref)}> - {this.props.diagramEngine.getFactoryForLabel(label).generateReactWidget(this.props.diagramEngine, label)} + {this.props.diagramEngine + .getFactoryForLabel(label) + .generateReactWidget(this.props.diagramEngine, label)}
); @@ -124,23 +131,28 @@ export class DefaultLinkWidget extends React.Component ref && this.refPaths.push(ref), - }); - + var Bottom = React.cloneElement( + (props.diagramEngine.getFactoryForLink(this.props.link) as DefaultLinkFactory).generateLinkSegment( + this.props.link, + this.state.selected || this.props.link.isSelected(), + path + ), + { + ref: ref => ref && this.refPaths.push(ref) + } + ); var Top = React.cloneElement(Bottom, { ...extraProps, strokeLinecap: "round", onMouseLeave: () => { - this.setState({selected: false}); + this.setState({ selected: false }); }, onMouseEnter: () => { - this.setState({selected: true}); + this.setState({ selected: true }); }, ref: null, - 'data-linkid': this.props.link.getID(), + "data-linkid": this.props.link.getID(), strokeOpacity: this.state.selected ? 0.1 : 0, strokeWidth: 20, onContextMenu: () => { @@ -159,12 +171,14 @@ export class DefaultLinkWidget extends React.Component { + findPathAndRelativePositionToRenderLabel = (index: number): { path: any; position: number } => { // an array to hold all path lengths, making sure we hit the DOM only once to fetch this information const lengths = this.refPaths.map(path => path.getTotalLength()); // calculate the point where we want to display the label - let labelPosition = lengths.reduce((previousValue, currentValue) => previousValue + currentValue, 0) * (index / (this.props.link.labels.length + 1)); + let labelPosition = + lengths.reduce((previousValue, currentValue) => previousValue + currentValue, 0) * + (index / (this.props.link.labels.length + 1)); // find the path where the label will be rendered and calculate the relative position let pathIndex = 0; @@ -182,13 +196,13 @@ export class DefaultLinkWidget extends React.Component { + calculateLabelPosition = (label, index: number) => { if (!this.refLabels[label.id]) { // no label? nothing to do here return; } - const {path, position} = this.findPathAndRelativePositionToRenderLabel(index); + const { path, position } = this.findPathAndRelativePositionToRenderLabel(index); const labelDimensions = { width: this.refLabels[label.id].offsetWidth, @@ -198,13 +212,15 @@ export class DefaultLinkWidget extends React.Component { this.addPointToLink(event, 1); - }, + } }, "0" ) @@ -302,9 +318,9 @@ export class DefaultLinkWidget extends React.Component { this.addPointToLink(event, 1); - }, + } }, - "0", + "0" ) ); @@ -315,20 +331,21 @@ export class DefaultLinkWidget extends React.Component { - this.addPointToLink(event, i + 1); + paths.push( + this.generateLink( + Toolkit.generateLinePath(points[i], points[i + 1]), + { + "data-linkid": this.props.link.id, + "data-point": i, + onMouseDown: (event: MouseEvent) => { + this.addPointToLink(event, i + 1); + } }, - }, - i, - )); + i + ) + ); } - //render the circles for (var i = 1; i < points.length - 1; i++) { paths.push(this.generatePoint(i)); @@ -345,11 +362,9 @@ export class DefaultLinkWidget extends React.Component {paths} - { - _.map(this.props.link.labels, (labelModel) => { - return this.generateLabel(labelModel); - }) - } + {_.map(this.props.link.labels, labelModel => { + return this.generateLabel(labelModel); + })} ); } diff --git a/src/models/BaseModel.ts b/src/models/BaseModel.ts index 276f310..e772448 100644 --- a/src/models/BaseModel.ts +++ b/src/models/BaseModel.ts @@ -1,7 +1,7 @@ import { BaseEntity, BaseListener } from "../BaseEntity"; import * as _ from "lodash"; import { BaseEvent } from "../BaseEntity"; -import {DiagramEngine} from "../DiagramEngine"; +import { DiagramEngine } from "../DiagramEngine"; export interface BaseModelListener extends BaseListener { selectionChanged?(event: BaseEvent & { isSelected: boolean }): void; @@ -12,7 +12,10 @@ export interface BaseModelListener extends BaseListener { /** * @author Dylan Vorster */ -export class BaseModel extends BaseEntity { +export class BaseModel< + X extends BaseEntity = BaseEntity, + T extends BaseModelListener = BaseModelListener +> extends BaseEntity { type: string; selected: boolean; parent: X; @@ -23,15 +26,15 @@ export class BaseModel[] { + public getSelectedEntities(): BaseModel[] { if (this.isSelected()) { return [this]; } diff --git a/src/models/DiagramModel.ts b/src/models/DiagramModel.ts index 16f0395..13c3ddc 100644 --- a/src/models/DiagramModel.ts +++ b/src/models/DiagramModel.ts @@ -104,7 +104,7 @@ export class DiagramModel extends BaseEntity { }); } - clearSelection(ignore: BaseModel | null = null) { + clearSelection(ignore: BaseModel | null = null) { _.forEach(this.getSelectedItems(), element => { if (ignore && ignore.getID() === element.getID()) { return; @@ -113,7 +113,7 @@ export class DiagramModel extends BaseEntity { }); } - getSelectedItems(...filters: BaseEntityType[]): BaseModel[] { + getSelectedItems(...filters: BaseEntityType[]): BaseModel[] { if (!Array.isArray(filters)) { filters = [filters]; } @@ -228,11 +228,11 @@ export class DiagramModel extends BaseEntity { return this.links[link]; } - addAll(...models: BaseModel[]): BaseModel[]{ - _.forEach(models, (model) =>{ - if(model instanceof LinkModel){ + addAll(...models: BaseModel[]): BaseModel[] { + _.forEach(models, model => { + if (model instanceof LinkModel) { this.addLink(model); - }else if(model instanceof NodeModel){ + } else if (model instanceof NodeModel) { this.addNode(model); } }); diff --git a/src/models/LabelModel.ts b/src/models/LabelModel.ts index e711908..e51838a 100644 --- a/src/models/LabelModel.ts +++ b/src/models/LabelModel.ts @@ -1,8 +1,7 @@ -import {BaseModel} from "./BaseModel"; -import {LinkModel} from "./LinkModel"; +import { BaseModel } from "./BaseModel"; +import { LinkModel } from "./LinkModel"; export class LabelModel extends BaseModel { - offsetX: number; offsetY: number; @@ -11,4 +10,4 @@ export class LabelModel extends BaseModel { this.offsetX = 0; this.offsetY = 0; } -} \ No newline at end of file +} diff --git a/src/models/LinkModel.ts b/src/models/LinkModel.ts index 052b0b1..d535179 100644 --- a/src/models/LinkModel.ts +++ b/src/models/LinkModel.ts @@ -1,11 +1,11 @@ -import {BaseModel, BaseModelListener} from "./BaseModel"; -import {PortModel} from "./PortModel"; -import {PointModel} from "./PointModel"; +import { BaseModel, BaseModelListener } from "./BaseModel"; +import { PortModel } from "./PortModel"; +import { PointModel } from "./PointModel"; import * as _ from "lodash"; -import {BaseEvent} from "../BaseEntity"; -import {LabelModel} from "./LabelModel"; -import {DiagramEngine} from "../DiagramEngine"; -import {DiagramModel} from "./DiagramModel"; +import { BaseEvent } from "../BaseEntity"; +import { LabelModel } from "./LabelModel"; +import { DiagramEngine } from "../DiagramEngine"; +import { DiagramModel } from "./DiagramModel"; export interface LinkModelListener extends BaseModelListener { sourcePortChanged?(event: BaseEvent & { port: null | PortModel }): void; @@ -13,8 +13,7 @@ export interface LinkModelListener extends BaseModelListener { targetPortChanged?(event: BaseEvent & { port: null | PortModel }): void; } -export class LinkModel extends BaseModel { - +export class LinkModel extends BaseModel { sourcePort: PortModel | null; targetPort: PortModel | null; labels: LabelModel[]; @@ -23,7 +22,7 @@ export class LinkModel extends constructor(linkType: string = "default", id?: string) { super(linkType, id); - this.points = [new PointModel(this, {x: 0, y: 0}), new PointModel(this, {x: 0, y: 0})]; + this.points = [new PointModel(this, { x: 0, y: 0 }), new PointModel(this, { x: 0, y: 0 })]; this.extras = {}; this.sourcePort = null; this.targetPort = null; @@ -34,7 +33,7 @@ export class LinkModel extends super.deSerialize(ob, engine); this.extras = ob.extras; this.points = _.map(ob.points || [], (point: { x; y }) => { - var p = new PointModel(this, {x: point.x, y: point.y}); + var p = new PointModel(this, { x: point.x, y: point.y }); p.deSerialize(point, engine); return p; }); @@ -42,13 +41,20 @@ export class LinkModel extends this.labels = ob.label || null; if (ob.target) { - this.setTargetPort(this.getParent().getNode(ob.target).getPortFromID(ob.targetPort)); + this.setTargetPort( + this.getParent() + .getNode(ob.target) + .getPortFromID(ob.targetPort) + ); } if (ob.source) { - this.setSourcePort(this.getParent().getNode(ob.source).getPortFromID(ob.sourcePort)); + this.setSourcePort( + this.getParent() + .getNode(ob.source) + .getPortFromID(ob.sourcePort) + ); } - } serialize() { @@ -63,7 +69,7 @@ export class LinkModel extends extras: this.extras, labels: _.map(this.labels, label => { return label.serialize(); - }), + }) }); } @@ -147,7 +153,7 @@ export class LinkModel extends } this.sourcePort = port; this.iterateListeners((listener: LinkModelListener, event) => { - listener.sourcePortChanged && listener.sourcePortChanged({...event, port: port}); + listener.sourcePortChanged && listener.sourcePortChanged({ ...event, port: port }); }); } @@ -169,15 +175,15 @@ export class LinkModel extends } this.targetPort = port; this.iterateListeners((listener: LinkModelListener, event) => { - listener.targetPortChanged && listener.targetPortChanged({...event, port: port}); + listener.targetPortChanged && listener.targetPortChanged({ ...event, port: port }); }); } - point(x: number, y: number): PointModel{ + point(x: number, y: number): PointModel { return this.addPoint(this.generatePoint(x, y)); } - addLabel(label: LabelModel){ + addLabel(label: LabelModel) { label.setParent(this); this.labels.push(label); } @@ -218,6 +224,6 @@ export class LinkModel extends } generatePoint(x: number = 0, y: number = 0): PointModel { - return new PointModel(this, {x: x, y: y}); + return new PointModel(this, { x: x, y: y }); } } diff --git a/src/models/NodeModel.ts b/src/models/NodeModel.ts index 7e9b234..08b5b48 100644 --- a/src/models/NodeModel.ts +++ b/src/models/NodeModel.ts @@ -1,8 +1,8 @@ -import {BaseModel, BaseModelListener} from "./BaseModel"; -import {PortModel} from "./PortModel"; +import { BaseModel, BaseModelListener } from "./BaseModel"; +import { PortModel } from "./PortModel"; import * as _ from "lodash"; -import {DiagramEngine} from "../DiagramEngine"; -import {DiagramModel} from "./DiagramModel"; +import { DiagramEngine } from "../DiagramEngine"; +import { DiagramModel } from "./DiagramModel"; export class NodeModel extends BaseModel { x: number; diff --git a/src/models/PointModel.ts b/src/models/PointModel.ts index 9866f29..98b42bd 100644 --- a/src/models/PointModel.ts +++ b/src/models/PointModel.ts @@ -1,9 +1,9 @@ import { BaseModel, BaseModelListener } from "./BaseModel"; import { LinkModel } from "./LinkModel"; import * as _ from "lodash"; -import {DiagramEngine} from "../DiagramEngine"; +import { DiagramEngine } from "../DiagramEngine"; -export class PointModel extends BaseModel { +export class PointModel extends BaseModel { x: number; y: number; @@ -25,7 +25,7 @@ export class PointModel extends BaseModel { return this.parent.getPortForPoint(this) !== null; } - getLink(): LinkModel{ + getLink(): LinkModel { return this.getParent(); } diff --git a/src/models/PortModel.ts b/src/models/PortModel.ts index 473abd7..92188fb 100644 --- a/src/models/PortModel.ts +++ b/src/models/PortModel.ts @@ -1,8 +1,8 @@ -import {BaseModel, BaseModelListener} from "./BaseModel"; -import {NodeModel} from "./NodeModel"; -import {LinkModel} from "./LinkModel"; +import { BaseModel, BaseModelListener } from "./BaseModel"; +import { NodeModel } from "./NodeModel"; +import { LinkModel } from "./LinkModel"; import * as _ from "lodash"; -import {DiagramEngine} from "../DiagramEngine"; +import { DiagramEngine } from "../DiagramEngine"; export class PortModel extends BaseModel { name: string; @@ -84,7 +84,7 @@ export class PortModel extends BaseModel { return null; } - updateCoords({x, y, width, height}: { x: number; y: number; width: number; height: number }) { + updateCoords({ x, y, width, height }: { x: number; y: number; width: number; height: number }) { this.x = x; this.y = y; this.width = width; @@ -95,7 +95,6 @@ export class PortModel extends BaseModel { return true; } - isLocked() { return super.isLocked() || this.getParent().isLocked(); } diff --git a/src/widgets/DiagramWidget.tsx b/src/widgets/DiagramWidget.tsx index e99cb15..283cab5 100644 --- a/src/widgets/DiagramWidget.tsx +++ b/src/widgets/DiagramWidget.tsx @@ -10,10 +10,10 @@ import { PointModel } from "../models/PointModel"; import { PortModel } from "../models/PortModel"; import { LinkModel } from "../models/LinkModel"; import { BaseModel, BaseModelListener } from "../models/BaseModel"; -import {BaseEntity} from "../BaseEntity"; +import { BaseEntity } from "../BaseEntity"; export interface SelectionModel { - model: BaseModel; + model: BaseModel; initialX: number; initialY: number; } @@ -137,7 +137,7 @@ export class DiagramWidget extends React.Component { /** * Gets a model and element under the mouse cursor */ - getMouseElement(event): { model: BaseModel; element: Element } { + getMouseElement(event): { model: BaseModel; element: Element } { var target = event.target as Element; var diagramModel = this.props.diagramEngine.diagramModel; diff --git a/src/widgets/NodeWidget.tsx b/src/widgets/NodeWidget.tsx index 338b444..812c1ed 100644 --- a/src/widgets/NodeWidget.tsx +++ b/src/widgets/NodeWidget.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { DiagramEngine } from "../DiagramEngine"; import { NodeModel } from "../models/NodeModel"; -import {Toolkit} from "../Toolkit"; +import { Toolkit } from "../Toolkit"; export interface NodeProps { node: NodeModel; @@ -25,7 +25,6 @@ export class NodeWidget extends React.Component { } render() { - return (