mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-06-21 16:09:55 +00:00
Move converter one level up
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import { Selectable } from "../managers/selection-manager";
|
import { Selectable } from "../managers/selection-manager";
|
||||||
|
import { DrawingElement } from "./drawings/drawing-element";
|
||||||
|
|
||||||
export class Drawing implements Selectable {
|
export class Drawing implements Selectable {
|
||||||
drawing_id: string;
|
drawing_id: string;
|
||||||
@ -9,4 +10,5 @@ export class Drawing implements Selectable {
|
|||||||
y: number;
|
y: number;
|
||||||
z: number;
|
z: number;
|
||||||
is_selected = false;
|
is_selected = false;
|
||||||
|
element: DrawingElement; // @todo; move to context
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,27 @@ import {Drawing} from "../models/drawing";
|
|||||||
import {SVGSelection} from "../models/types";
|
import {SVGSelection} from "../models/types";
|
||||||
import {Layer} from "../models/layer";
|
import {Layer} from "../models/layer";
|
||||||
import { TextDrawingWidget } from "./drawings/text-drawing";
|
import { TextDrawingWidget } from "./drawings/text-drawing";
|
||||||
|
import { SvgToDrawingConverter } from "../../map/helpers/svg-to-drawing-converter";
|
||||||
|
|
||||||
|
|
||||||
export class DrawingsWidget implements Widget {
|
export class DrawingsWidget implements Widget {
|
||||||
constructor() {}
|
private svgToDrawingConverter: SvgToDrawingConverter;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.svgToDrawingConverter = new SvgToDrawingConverter();
|
||||||
|
}
|
||||||
|
|
||||||
public draw(view: SVGSelection, drawings?: Drawing[]) {
|
public draw(view: SVGSelection, drawings?: Drawing[]) {
|
||||||
const drawing = view
|
const drawing = view
|
||||||
.selectAll<SVGGElement, Drawing>('g.drawing')
|
.selectAll<SVGGElement, Drawing>('g.drawing')
|
||||||
.data((l: Layer) => {
|
.data((l: Layer) => {
|
||||||
|
l.drawings.forEach((d: Drawing) => {
|
||||||
|
try {
|
||||||
|
d.element = this.svgToDrawingConverter.convert(d.svg);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`Cannot convert due to Error: '${error}'`);
|
||||||
|
}
|
||||||
|
});
|
||||||
return l.drawings;
|
return l.drawings;
|
||||||
}, (d: Drawing) => {
|
}, (d: Drawing) => {
|
||||||
return d.drawing_id;
|
return d.drawing_id;
|
||||||
@ -64,5 +76,6 @@ export class DrawingsWidget implements Widget {
|
|||||||
drawing
|
drawing
|
||||||
.exit()
|
.exit()
|
||||||
.remove();
|
.remove();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { instance, mock, when } from "ts-mockito";
|
|
||||||
import { TestSVGCanvas } from "../../../testing";
|
import { TestSVGCanvas } from "../../../testing";
|
||||||
import { TextDrawingWidget } from "./text-drawing";
|
import { TextDrawingWidget } from "./text-drawing";
|
||||||
import { Drawing } from "../../models/drawing";
|
import { Drawing } from "../../models/drawing";
|
||||||
@ -21,8 +20,15 @@ describe('TextDrawingWidget', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should draw text drawing', () => {
|
it('should draw text drawing', () => {
|
||||||
drawing.svg = '<svg height="23" width="106"><text fill="#000000" fill-opacity="1.0" ' +
|
const text = new TextElement();
|
||||||
'font-family="TypeWriter" font-size="10.0" font-weight="bold">THIS IS TEXT</text></svg>';
|
text.text = "THIS IS TEXT";
|
||||||
|
text.fill = "#000000";
|
||||||
|
text.fill_opacity = 1.0;
|
||||||
|
text.font_family = "TypeWriter";
|
||||||
|
text.font_size = 10.0;
|
||||||
|
text.font_weight = "bold";
|
||||||
|
|
||||||
|
drawing.element = text;
|
||||||
|
|
||||||
const drawings = svg.canvas.selectAll<SVGGElement, Drawing>('g.drawing').data([drawing]);
|
const drawings = svg.canvas.selectAll<SVGGElement, Drawing>('g.drawing').data([drawing]);
|
||||||
const drawings_enter = drawings.enter().append<SVGGElement>('g').classed('drawing', true);
|
const drawings_enter = drawings.enter().append<SVGGElement>('g').classed('drawing', true);
|
||||||
@ -33,12 +39,14 @@ describe('TextDrawingWidget', () => {
|
|||||||
const drew = drawings_merge.selectAll<SVGTextElement, TextElement>('text.text_element');
|
const drew = drawings_merge.selectAll<SVGTextElement, TextElement>('text.text_element');
|
||||||
expect(drew.size()).toEqual(1);
|
expect(drew.size()).toEqual(1);
|
||||||
const text_element = drew.nodes()[0];
|
const text_element = drew.nodes()[0];
|
||||||
expect(text_element.innerHTML).toEqual("THIS IS TEXT");
|
expect(text_element.innerHTML).toEqual('<tspan x="0" dy="0em">THIS IS TEXT</tspan>');
|
||||||
expect(text_element.getAttribute('style')).toEqual('font-family: "TypeWriter"; font-size: 10pt; font-weight: bold');
|
expect(text_element.getAttribute('style')).toEqual('font-family: "TypeWriter"; font-size: 10pt; font-weight: bold');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should draw multiline text', () => {
|
it('should draw multiline text', () => {
|
||||||
drawing.svg = '<svg height="23" width="106"><text>THIS' + "\n" + 'IS TEXT</text></svg>';
|
const text = new TextElement();
|
||||||
|
text.text = 'THIS' + "\n" + 'IS TEXT';
|
||||||
|
drawing.element = text;
|
||||||
|
|
||||||
const drawings = svg.canvas.selectAll<SVGGElement, Drawing>('g.drawing').data([drawing]);
|
const drawings = svg.canvas.selectAll<SVGGElement, Drawing>('g.drawing').data([drawing]);
|
||||||
const drawings_enter = drawings.enter().append<SVGGElement>('g').classed('drawing', true);
|
const drawings_enter = drawings.enter().append<SVGGElement>('g').classed('drawing', true);
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { SVGSelection } from "../../models/types";
|
import { SVGSelection } from "../../models/types";
|
||||||
import { TextElement } from "../../models/drawings/text-element";
|
import { TextElement } from "../../models/drawings/text-element";
|
||||||
import { Drawing } from "../../models/drawing";
|
import { Drawing } from "../../models/drawing";
|
||||||
import { SvgToDrawingConverter } from "../../../map/helpers/svg-to-drawing-converter";
|
|
||||||
import { DrawingElement } from "../../models/drawings/drawing-element";
|
|
||||||
|
|
||||||
|
|
||||||
export class TextDrawingWidget {
|
export class TextDrawingWidget {
|
||||||
@ -10,15 +8,7 @@ export class TextDrawingWidget {
|
|||||||
const drawing = view
|
const drawing = view
|
||||||
.selectAll<SVGTextElement, TextElement>('text.text_element')
|
.selectAll<SVGTextElement, TextElement>('text.text_element')
|
||||||
.data((d: Drawing) => {
|
.data((d: Drawing) => {
|
||||||
const svgConverter = new SvgToDrawingConverter();
|
return (d.element && d.element instanceof TextElement) ? [d.element] : [];
|
||||||
const elements: DrawingElement[] = [];
|
|
||||||
try {
|
|
||||||
const element = svgConverter.convert(d.svg);
|
|
||||||
elements.push(element);
|
|
||||||
} catch (error) {
|
|
||||||
console.log(`Cannot convert due to Error: '${error}'`);
|
|
||||||
}
|
|
||||||
return elements.filter((e: DrawingElement) => e instanceof TextElement);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const drawing_enter = drawing
|
const drawing_enter = drawing
|
||||||
|
Reference in New Issue
Block a user