mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-02-20 17:52:46 +00:00
Support drawings on WS
This commit is contained in:
parent
ce6a727300
commit
cc27c56216
@ -1,4 +1,4 @@
|
||||
import {SVGSelection} from "./models/types";
|
||||
import { SVGSelection } from "./models/types";
|
||||
|
||||
export interface Tool {
|
||||
connect(selection: SVGSelection);
|
||||
|
@ -1,9 +1,11 @@
|
||||
import {DrawingLine} from "../models/drawing-line";
|
||||
import {SVGSelection} from "../models/types";
|
||||
import {Point} from "../models/point";
|
||||
import {line} from "d3-shape";
|
||||
import {mouse} from "d3-selection";
|
||||
import {Context} from "../models/context";
|
||||
import { line } from "d3-shape";
|
||||
import { mouse } from "d3-selection";
|
||||
|
||||
import { DrawingLine } from "../models/drawing-line";
|
||||
import { SVGSelection } from "../models/types";
|
||||
import { Point } from "../models/point";
|
||||
import { Context } from "../models/context";
|
||||
|
||||
|
||||
export class DrawingLineWidget {
|
||||
private drawingLine: DrawingLine = new DrawingLine();
|
||||
|
@ -1,8 +1,9 @@
|
||||
import {Widget} from "./widget";
|
||||
import {SVGSelection} from "../models/types";
|
||||
|
||||
import { line } from "d3-shape";
|
||||
import {Link} from "../models/link";
|
||||
|
||||
import { Widget } from "./widget";
|
||||
import { SVGSelection } from "../models/types";
|
||||
import { Link } from "../models/link";
|
||||
|
||||
|
||||
export class EthernetLinkWidget implements Widget {
|
||||
|
||||
|
@ -8,10 +8,10 @@ import { LinksWidget } from "./links.widget";
|
||||
import { Drawing } from "../models/drawing";
|
||||
import { DrawingsWidget } from "./drawings.widget";
|
||||
import { DrawingLineWidget } from "./drawing-line.widget";
|
||||
import {SelectionTool} from "../tools/selection-tool";
|
||||
import {MovingTool} from "../tools/moving-tool";
|
||||
import {LayersWidget} from "./layers.widget";
|
||||
import {Layer} from "../models/layer";
|
||||
import { SelectionTool } from "../tools/selection-tool";
|
||||
import { MovingTool } from "../tools/moving-tool";
|
||||
import { LayersWidget } from "./layers.widget";
|
||||
import { Layer } from "../models/layer";
|
||||
|
||||
|
||||
export class GraphLayout implements Widget {
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { event, select, Selection } from "d3-selection";
|
||||
import { D3DragEvent, drag } from "d3-drag";
|
||||
|
||||
import { Widget } from "./widget";
|
||||
import { Node } from "../models/node";
|
||||
import { SVGSelection } from "../models/types";
|
||||
import {event, select, Selection} from "d3-selection";
|
||||
import {D3DragEvent, drag} from "d3-drag";
|
||||
import {Symbol} from "../models/symbol";
|
||||
import {Layer} from "../models/layer";
|
||||
import { Symbol } from "../models/symbol";
|
||||
import { Layer } from "../models/layer";
|
||||
|
||||
|
||||
export class NodesWidget implements Widget {
|
||||
|
@ -1,8 +1,9 @@
|
||||
import {Widget} from "./widget";
|
||||
import {SVGSelection} from "../models/types";
|
||||
import {Link} from "../models/link";
|
||||
import { path } from "d3-path";
|
||||
|
||||
import { Widget } from "./widget";
|
||||
import { SVGSelection } from "../models/types";
|
||||
import { Link } from "../models/link";
|
||||
|
||||
|
||||
export class SerialLinkWidget implements Widget {
|
||||
|
||||
|
@ -1,11 +1,14 @@
|
||||
import {ProjectWebServiceHandler, WebServiceMessage} from "./project-web-service-handler";
|
||||
import {Subject} from "rxjs/Subject";
|
||||
import {inject, TestBed} from "@angular/core/testing";
|
||||
import {NodesDataSource} from "../../cartography/shared/datasources/nodes-datasource";
|
||||
import {LinksDataSource} from "../../cartography/shared/datasources/links-datasource";
|
||||
import {Node} from "../../cartography/shared/models/node";
|
||||
import {Link} from "../../cartography/shared/models/link";
|
||||
import { inject, TestBed } from "@angular/core/testing";
|
||||
|
||||
import { Subject } from "rxjs/Subject";
|
||||
|
||||
import { ProjectWebServiceHandler, WebServiceMessage } from "./project-web-service-handler";
|
||||
import { NodesDataSource } from "../../cartography/shared/datasources/nodes-datasource";
|
||||
import { LinksDataSource } from "../../cartography/shared/datasources/links-datasource";
|
||||
import { DrawingsDataSource } from "../../cartography/shared/datasources/drawings-datasource";
|
||||
import { Node } from "../../cartography/shared/models/node";
|
||||
import { Link } from "../../cartography/shared/models/link";
|
||||
import { Drawing } from "../../cartography/shared/models/drawing";
|
||||
|
||||
|
||||
describe('ProjectWebServiceHandler', () => {
|
||||
@ -13,7 +16,7 @@ describe('ProjectWebServiceHandler', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource]
|
||||
providers: [ProjectWebServiceHandler, NodesDataSource, LinksDataSource, DrawingsDataSource]
|
||||
});
|
||||
|
||||
ws = new Subject<WebServiceMessage>();
|
||||
@ -120,4 +123,53 @@ describe('ProjectWebServiceHandler', () => {
|
||||
expect(service).toBeTruthy();
|
||||
expect(linksDataSource.remove).toHaveBeenCalledWith(message.event);
|
||||
}));
|
||||
|
||||
it('drawing should be added', inject([ProjectWebServiceHandler, DrawingsDataSource],
|
||||
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
|
||||
spyOn(drawingsDataSource, 'add');
|
||||
|
||||
service.connect(ws);
|
||||
|
||||
const message = new WebServiceMessage();
|
||||
message.action = "drawing.created";
|
||||
message.event = new Drawing();
|
||||
|
||||
ws.next(message);
|
||||
|
||||
expect(service).toBeTruthy();
|
||||
expect(drawingsDataSource.add).toHaveBeenCalledWith(message.event);
|
||||
}));
|
||||
|
||||
it('drawing should be updated', inject([ProjectWebServiceHandler, DrawingsDataSource],
|
||||
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
|
||||
spyOn(drawingsDataSource, 'update');
|
||||
|
||||
service.connect(ws);
|
||||
|
||||
const message = new WebServiceMessage();
|
||||
message.action = "drawing.updated";
|
||||
message.event = new Drawing();
|
||||
|
||||
ws.next(message);
|
||||
|
||||
expect(service).toBeTruthy();
|
||||
expect(drawingsDataSource.update).toHaveBeenCalledWith(message.event);
|
||||
}));
|
||||
|
||||
|
||||
it('drawing should be removed', inject([ProjectWebServiceHandler, DrawingsDataSource],
|
||||
(service: ProjectWebServiceHandler, drawingsDataSource: DrawingsDataSource) => {
|
||||
spyOn(drawingsDataSource, 'remove');
|
||||
|
||||
service.connect(ws);
|
||||
|
||||
const message = new WebServiceMessage();
|
||||
message.action = "drawing.deleted";
|
||||
message.event = new Drawing();
|
||||
|
||||
ws.next(message);
|
||||
|
||||
expect(service).toBeTruthy();
|
||||
expect(drawingsDataSource.remove).toHaveBeenCalledWith(message.event);
|
||||
}));
|
||||
});
|
||||
|
@ -1,20 +1,24 @@
|
||||
import {Injectable} from "@angular/core";
|
||||
import {NodesDataSource} from "../../cartography/shared/datasources/nodes-datasource";
|
||||
import {LinksDataSource} from "../../cartography/shared/datasources/links-datasource";
|
||||
import {Subject} from "rxjs/Subject";
|
||||
import {Link} from "../../cartography/shared/models/link";
|
||||
import {Node} from "../../cartography/shared/models/node";
|
||||
import { Injectable } from "@angular/core";
|
||||
import { Subject } from "rxjs/Subject";
|
||||
|
||||
import { NodesDataSource } from "../../cartography/shared/datasources/nodes-datasource";
|
||||
import { LinksDataSource } from "../../cartography/shared/datasources/links-datasource";
|
||||
import { DrawingsDataSource } from "../../cartography/shared/datasources/drawings-datasource";
|
||||
import { Link } from "../../cartography/shared/models/link";
|
||||
import { Node } from "../../cartography/shared/models/node";
|
||||
import { Drawing } from "../../cartography/shared/models/drawing";
|
||||
|
||||
|
||||
export class WebServiceMessage {
|
||||
action: string;
|
||||
event: Node | Link;
|
||||
event: Node | Link | Drawing;
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class ProjectWebServiceHandler {
|
||||
constructor(private nodesDataSource: NodesDataSource,
|
||||
private linksDataSource: LinksDataSource) {}
|
||||
private linksDataSource: LinksDataSource,
|
||||
private drawingsDataSource: DrawingsDataSource) {}
|
||||
|
||||
public connect(ws: Subject<WebServiceMessage>) {
|
||||
ws.subscribe((message: WebServiceMessage) => {
|
||||
@ -36,6 +40,15 @@ export class ProjectWebServiceHandler {
|
||||
if (message.action === 'link.deleted') {
|
||||
this.linksDataSource.remove(message.event as Link);
|
||||
}
|
||||
if (message.action === 'drawing.created') {
|
||||
this.drawingsDataSource.add(message.event as Drawing);
|
||||
}
|
||||
if (message.action === 'drawing.updated') {
|
||||
this.drawingsDataSource.update(message.event as Drawing);
|
||||
}
|
||||
if (message.action === 'drawing.deleted') {
|
||||
this.drawingsDataSource.remove(message.event as Drawing);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user