diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html index 7c6fdb2e8..4c4196529 100644 --- a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html +++ b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html @@ -7,4 +7,6 @@ [attr.stroke-dasharray]="stroke_dasharray" [attr.width]="rect?.width" [attr.height]="rect?.height" + [attr.rx]="rect?.rx" + [attr.ry]="rect?.ry" /> diff --git a/src/app/cartography/converters/map/map-drawing-to-svg-converter.ts b/src/app/cartography/converters/map/map-drawing-to-svg-converter.ts index bd76c68cf..364d0dc27 100644 --- a/src/app/cartography/converters/map/map-drawing-to-svg-converter.ts +++ b/src/app/cartography/converters/map/map-drawing-to-svg-converter.ts @@ -14,7 +14,7 @@ export class MapDrawingToSvgConverter implements Converter { let elem = ``; if (mapDrawing.element instanceof RectElement) { - elem = `${mapDrawing.element.stroke_dasharray == '' ? `` :``}`; + elem = `${mapDrawing.element.stroke_dasharray == '' ? `` :``}`; } else if (mapDrawing.element instanceof EllipseElement) { elem = `${mapDrawing.element.stroke_dasharray == '' ? `` :``}`; } else if (mapDrawing.element instanceof LineElement) { diff --git a/src/app/cartography/helpers/drawings-factory/rectangle-element-factory.ts b/src/app/cartography/helpers/drawings-factory/rectangle-element-factory.ts index 5e13236b8..8b5f95769 100644 --- a/src/app/cartography/helpers/drawings-factory/rectangle-element-factory.ts +++ b/src/app/cartography/helpers/drawings-factory/rectangle-element-factory.ts @@ -13,6 +13,8 @@ export class RectangleElementFactory implements DrawingElementFactory { rectElement.stroke_width = 2; rectElement.width = 200; rectElement.height = 100; + rectElement.rx = 0; + rectElement.ry = 0; return rectElement; } } diff --git a/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.spec.ts b/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.spec.ts index c66ceb5b5..0af7e68f6 100644 --- a/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.spec.ts +++ b/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.spec.ts @@ -17,6 +17,8 @@ describe('RectConverter', () => { element.setAttribute('width', '100px'); element.setAttribute('height', '200px'); + element.setAttribute('rx', '0'); + element.setAttribute('ry', '0'); const drawing = rectConverter.convert(element); expect(drawing.fill).toEqual('#ffffff'); @@ -25,6 +27,8 @@ describe('RectConverter', () => { expect(drawing.stroke_dasharray).toEqual('5,25,25'); expect(drawing.width).toEqual(100); expect(drawing.height).toEqual(200); + expect(drawing.rx).toEqual(0); + expect(drawing.ry).toEqual(0); }); it('should parse with no attributes', () => { @@ -37,5 +41,7 @@ describe('RectConverter', () => { expect(drawing.stroke_dasharray).toBeUndefined(); expect(drawing.width).toBeUndefined(); expect(drawing.height).toBeUndefined(); + expect(drawing.rx).toBeUndefined(); + expect(drawing.ry).toBeUndefined(); }); }); diff --git a/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.ts b/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.ts index a5b98d248..fd88b2476 100644 --- a/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.ts +++ b/src/app/cartography/helpers/svg-to-drawing-converter/rect-converter.ts @@ -40,6 +40,16 @@ export class RectConverter implements SvgConverter { drawing.height = parseInt(height.value, 10); } + const rx = element.attributes.getNamedItem('rx'); + if (rx) { + drawing.rx = parseInt(rx.value, 0); + } + + const ry = element.attributes.getNamedItem('ry'); + if (ry) { + drawing.ry = parseInt(ry.value, 0); + } + return drawing; } } diff --git a/src/app/cartography/models/drawings/rect-element.ts b/src/app/cartography/models/drawings/rect-element.ts index 661e5ea41..a410e852a 100644 --- a/src/app/cartography/models/drawings/rect-element.ts +++ b/src/app/cartography/models/drawings/rect-element.ts @@ -8,4 +8,6 @@ export class RectElement implements DrawingElement { stroke: string; stroke_width: number; stroke_dasharray: string; + rx: number; + ry: number; } diff --git a/src/app/cartography/widgets/drawings/rect-drawing.spec.ts b/src/app/cartography/widgets/drawings/rect-drawing.spec.ts index ecd5e63a8..5741e26c9 100644 --- a/src/app/cartography/widgets/drawings/rect-drawing.spec.ts +++ b/src/app/cartography/widgets/drawings/rect-drawing.spec.ts @@ -28,6 +28,8 @@ describe('RectDrawingWidget', () => { rect.stroke_dasharray = '5,25,25'; rect.width = 100; rect.height = 200; + rect.rx = 0; + rect.ry = 0; drawing.element = rect; const drawings = svg.canvas.selectAll('g.drawing').data([drawing]); @@ -46,5 +48,7 @@ describe('RectDrawingWidget', () => { expect(rect_element.getAttribute('stroke-dasharray')).toEqual('5,25,25'); expect(rect_element.getAttribute('width')).toEqual('100'); expect(rect_element.getAttribute('height')).toEqual('200'); + expect(rect_element.getAttribute('rx')).toEqual('0'); + expect(rect_element.getAttribute('ry')).toEqual('0'); }); }); diff --git a/src/app/cartography/widgets/drawings/rect-drawing.ts b/src/app/cartography/widgets/drawings/rect-drawing.ts index de6a31d2f..e7b90352e 100644 --- a/src/app/cartography/widgets/drawings/rect-drawing.ts +++ b/src/app/cartography/widgets/drawings/rect-drawing.ts @@ -33,7 +33,9 @@ export class RectDrawingWidget implements DrawingShapeWidget { .attr('stroke-width', (rect) => rect.stroke_width) .attr('stroke-dasharray', (rect) => this.qtDasharrayFixer.fix(rect.stroke_dasharray)) .attr('width', (rect) => rect.width) - .attr('height', (rect) => rect.height); + .attr('height', (rect) => rect.height) + .attr('rx', (rect) => rect.rx) + .attr('ry', (rect) => rect.ry); drawing.exit().remove(); } diff --git a/src/app/components/preferences/ios-on-unix/iou-template-details/iou-template-details.component.html b/src/app/components/preferences/ios-on-unix/iou-template-details/iou-template-details.component.html index 5c0595bf7..b159104c7 100644 --- a/src/app/components/preferences/ios-on-unix/iou-template-details/iou-template-details.component.html +++ b/src/app/components/preferences/ios-on-unix/iou-template-details/iou-template-details.component.html @@ -107,14 +107,14 @@

IOU device configuration

Enable layer 1 keepalive messages (non-functional)
- Use default IOU values for memories - + Use default IOU values for memories + MB - + - MB + KB diff --git a/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.html b/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.html index 81f718f6e..e7c358c2e 100644 --- a/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.html +++ b/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.html @@ -68,7 +68,7 @@

QEMU VM configuration

- + @@ -200,6 +200,7 @@

QEMU VM configuration


+ Replicate network connection state
@@ -278,6 +279,8 @@

QEMU VM configuration

Use as a linked base VM +
Enable the Trusted Platform Module (TPM) +
Enable the UEFI boot mode diff --git a/src/app/components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component.ts b/src/app/components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component.ts index b5ae982a5..dceba4918 100644 --- a/src/app/components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component.ts +++ b/src/app/components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component.ts @@ -69,6 +69,9 @@ export class ConsoleDeviceActionBrowserComponent { uri = `gns3+vnc://${this.node.console_host}:${this.node.console}?name=${this.node.name}&project_id=${this.node.project_id}&node_id=${this.node.node_id}`; } else if (this.node.console_type.startsWith('spice')) { uri = `gns3+spice://${this.node.console_host}:${this.node.console}?name=${this.node.name}&project_id=${this.node.project_id}&node_id=${this.node.node_id}` + } else if (this.node.console_type.startsWith('http')) { + uri = `${this.node.console_type}://${this.node.console_host}:${this.node.console}` + return window.open(uri); // open an http console directly in a new window/tab } else { this.toasterService.error('Supported console types are: telnet, vnc, spice and spice+agent.'); } diff --git a/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.html b/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.html index 0807857ee..eafef9052 100644 --- a/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.html +++ b/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.html @@ -2,7 +2,7 @@

Style editor