- {{innerText}}
+
+ {{ innerText }}
diff --git a/src/app/cartography/components/text-editor/text-editor.component.scss b/src/app/cartography/components/text-editor/text-editor.component.scss
index 1b55f51f..575b3600 100644
--- a/src/app/cartography/components/text-editor/text-editor.component.scss
+++ b/src/app/cartography/components/text-editor/text-editor.component.scss
@@ -1,10 +1,10 @@
-.temporaryElement{
- padding-left: 4px;
- width: fit-content;
- position: absolute;
- z-index: 99;
- font-family: 'Noto Sans';
- font-size: 11pt;
- font-weight: bold;
- color: #000000;
+.temporaryElement {
+ padding-left: 4px;
+ width: fit-content;
+ position: absolute;
+ z-index: 99;
+ font-family: 'Noto Sans';
+ font-size: 11pt;
+ font-weight: bold;
+ color: #000000;
}
diff --git a/src/app/cartography/components/text-editor/text-editor.component.spec.ts b/src/app/cartography/components/text-editor/text-editor.component.spec.ts
index 65ac5fdf..89c52c0b 100644
--- a/src/app/cartography/components/text-editor/text-editor.component.spec.ts
+++ b/src/app/cartography/components/text-editor/text-editor.component.spec.ts
@@ -1,4 +1,4 @@
-import { TextEditorComponent } from "./text-editor.component";
+import { TextEditorComponent } from './text-editor.component';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { DrawingsEventSource } from '../../events/drawings-event-source';
@@ -7,34 +7,29 @@ import { Context } from '../../models/context';
import { Renderer2 } from '@angular/core';
describe('TemporaryTextElementComponent', () => {
- let component: TextEditorComponent;
- let fixture: ComponentFixture
;
+ let component: TextEditorComponent;
+ let fixture: ComponentFixture;
- beforeEach(async(() => {
- TestBed.configureTestingModule({
- imports: [
- NoopAnimationsModule
- ],
- providers: [
- { provide: DrawingsEventSource, useClass: DrawingsEventSource },
- { provide: ToolsService, useClass: ToolsService },
- { provide: Context, useClass: Context },
- { provide: Renderer2, useClass: Renderer2 }
- ],
- declarations: [
- TextEditorComponent
- ]
- })
- .compileComponents();
- }));
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [NoopAnimationsModule],
+ providers: [
+ { provide: DrawingsEventSource, useClass: DrawingsEventSource },
+ { provide: ToolsService, useClass: ToolsService },
+ { provide: Context, useClass: Context },
+ { provide: Renderer2, useClass: Renderer2 }
+ ],
+ declarations: [TextEditorComponent]
+ }).compileComponents();
+ }));
- beforeEach(() => {
- fixture = TestBed.createComponent(TextEditorComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
+ beforeEach(() => {
+ fixture = TestBed.createComponent(TextEditorComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
- it('should create', () => {
- expect(component).toBeTruthy();
- });
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
});
diff --git a/src/app/cartography/components/text-editor/text-editor.component.ts b/src/app/cartography/components/text-editor/text-editor.component.ts
index ea674e9f..f8b9fa8e 100644
--- a/src/app/cartography/components/text-editor/text-editor.component.ts
+++ b/src/app/cartography/components/text-editor/text-editor.component.ts
@@ -1,4 +1,4 @@
-import { Component, ViewChild, ElementRef, OnInit, Input, EventEmitter, OnDestroy, Renderer2 } from "@angular/core";
+import { Component, ViewChild, ElementRef, OnInit, Input, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { TextAddedDataEvent, TextEditedDataEvent } from '../../events/event-source';
import { ToolsService } from '../../../services/tools.service';
@@ -7,113 +7,134 @@ import { TextElement } from '../../models/drawings/text-element';
import { Context } from '../../models/context';
import { Subscription } from 'rxjs';
-
@Component({
- selector: 'app-text-editor',
- templateUrl: './text-editor.component.html',
- styleUrls: ['./text-editor.component.scss']
+ selector: 'app-text-editor',
+ templateUrl: './text-editor.component.html',
+ styleUrls: ['./text-editor.component.scss']
})
export class TextEditorComponent implements OnInit, OnDestroy {
- @ViewChild('temporaryTextElement') temporaryTextElement: ElementRef;
- @Input('svg') svg: SVGSVGElement;
+ @ViewChild('temporaryTextElement') temporaryTextElement: ElementRef;
+ @Input('svg') svg: SVGSVGElement;
- private leftPosition: string = '0px';
- private topPosition: string = '0px';
- private innerText: string = '';
+ leftPosition: string = '0px';
+ topPosition: string = '0px';
+ innerText: string = '';
- private editingDrawingId: string;
- private editedElement: any;
+ private editingDrawingId: string;
+ private editedElement: any;
- private mapListener: Function;
- private textListener: Function;
- private textAddingSubscription: Subscription;
- public addingFinished = new EventEmitter();
-
- constructor(
- private drawingsEventSource: DrawingsEventSource,
- private toolsService: ToolsService,
- private context: Context,
- private renderer: Renderer2
- ){}
+ private mapListener: Function;
+ private textListener: Function;
+ private textAddingSubscription: Subscription;
+ public addingFinished = new EventEmitter();
- ngOnInit(){
- this.textAddingSubscription = this.toolsService.isTextAddingToolActivated.subscribe((isActive: boolean) => {
- isActive ? this.activateTextAdding() : this.deactivateTextAdding()
- });
+ constructor(
+ private drawingsEventSource: DrawingsEventSource,
+ private toolsService: ToolsService,
+ private context: Context,
+ private renderer: Renderer2
+ ) {}
- this.activateTextEditing();
- }
+ ngOnInit() {
+ this.textAddingSubscription = this.toolsService.isTextAddingToolActivated.subscribe((isActive: boolean) => {
+ isActive ? this.activateTextAdding() : this.deactivateTextAdding();
+ });
- activateTextAdding(){
- let addTextListener = (event: MouseEvent) => {
- this.leftPosition = event.clientX.toString() + 'px';
- this.topPosition = (event.clientY + window.pageYOffset).toString() + 'px';
- this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
- this.temporaryTextElement.nativeElement.focus();
+ this.activateTextEditing();
+ }
- let textListener = () => {
- this.drawingsEventSource.textAdded.emit(new TextAddedDataEvent(this.temporaryTextElement.nativeElement.innerText.replace(/\n$/, ""), event.clientX, event.clientY));
- this.deactivateTextAdding();
- this.innerText = '';
- this.temporaryTextElement.nativeElement.removeEventListener("focusout", this.textListener);
- this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'none');
- }
- this.textListener = textListener;
- this.temporaryTextElement.nativeElement.addEventListener('focusout', this.textListener);
- }
+ activateTextAdding() {
+ let addTextListener = (event: MouseEvent) => {
+ this.leftPosition = event.clientX.toString() + 'px';
+ this.topPosition = (event.clientY + window.pageYOffset).toString() + 'px';
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
+ this.temporaryTextElement.nativeElement.focus();
+ let textListener = () => {
+ this.drawingsEventSource.textAdded.emit(
+ new TextAddedDataEvent(
+ this.temporaryTextElement.nativeElement.innerText.replace(/\n$/, ''),
+ event.clientX,
+ event.clientY
+ )
+ );
this.deactivateTextAdding();
- this.mapListener = addTextListener;
- this.svg.addEventListener('click', this.mapListener as EventListenerOrEventListenerObject);
- }
+ this.innerText = '';
+ this.temporaryTextElement.nativeElement.innerText = '';
+ this.temporaryTextElement.nativeElement.removeEventListener('focusout', this.textListener);
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'none');
+ };
+ this.textListener = textListener;
+ this.temporaryTextElement.nativeElement.addEventListener('focusout', this.textListener);
+ };
- deactivateTextAdding(){
- this.svg.removeEventListener('click', this.mapListener as EventListenerOrEventListenerObject);
- }
+ this.deactivateTextAdding();
+ this.mapListener = addTextListener;
+ this.svg.addEventListener('click', this.mapListener as EventListenerOrEventListenerObject);
+ }
- activateTextEditing(){
- const rootElement = select(this.svg);
+ deactivateTextAdding() {
+ this.svg.removeEventListener('click', this.mapListener as EventListenerOrEventListenerObject);
+ }
- rootElement.selectAll('text.text_element')
- .on("dblclick", (elem, index, textElements) => {
- this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
- this.editedElement = elem;
+ activateTextEditing() {
+ const rootElement = select(this.svg);
- select(textElements[index])
- .attr("visibility", "hidden");
+ rootElement
+ .selectAll('text.text_element')
+ .on('dblclick', (elem, index, textElements) => {
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
+ this.editedElement = elem;
- select(textElements[index])
- .classed("editingMode", true);
+ select(textElements[index]).attr('visibility', 'hidden');
- this.editingDrawingId = textElements[index].parentElement.parentElement.getAttribute("drawing_id");
- var transformData = textElements[index].parentElement.getAttribute("transform").split(/\(|\)/);
- var x = Number(transformData[1].split(/,/)[0]) + this.context.getZeroZeroTransformationPoint().x;
- var y = Number(transformData[1].split(/,/)[1]) + this.context.getZeroZeroTransformationPoint().y;
- this.leftPosition = x.toString() + 'px';
- this.topPosition = y.toString() + 'px';
- this.temporaryTextElement.nativeElement.innerText = elem.text;
-
- let listener = () => {
- let innerText = this.temporaryTextElement.nativeElement.innerText;
- this.drawingsEventSource.textEdited.emit(new TextEditedDataEvent(this.editingDrawingId, innerText.replace(/\n$/, ""), this.editedElement));
-
- rootElement.selectAll('text.editingMode')
- .attr("visibility", "visible")
- .classed("editingMode", false);
-
- this.innerText = '';
- this.temporaryTextElement.nativeElement.innerText = '';
- this.temporaryTextElement.nativeElement.removeEventListener("focusout", this.textListener);
+ select(textElements[index]).classed('editingMode', true);
- this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'none');
- };
- this.textListener = listener;
- this.temporaryTextElement.nativeElement.addEventListener("focusout", this.textListener);
- this.temporaryTextElement.nativeElement.focus();
- });
- }
+ this.editingDrawingId = textElements[index].parentElement.parentElement.getAttribute('drawing_id');
+ var transformData = textElements[index].parentElement.getAttribute('transform').split(/\(|\)/);
+ var x = Number(transformData[1].split(/,/)[0]) + this.context.getZeroZeroTransformationPoint().x;
+ var y = Number(transformData[1].split(/,/)[1]) + this.context.getZeroZeroTransformationPoint().y;
+ this.leftPosition = x.toString() + 'px';
+ this.topPosition = y.toString() + 'px';
+ this.temporaryTextElement.nativeElement.innerText = elem.text;
- ngOnDestroy(){
- this.textAddingSubscription.unsubscribe();
- }
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'color', elem.fill);
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-family', elem.font_family);
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-size', `${elem.font_size}pt`);
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-weight', elem.font_weight);
+
+ let listener = () => {
+ let innerText = this.temporaryTextElement.nativeElement.innerText;
+ this.drawingsEventSource.textEdited.emit(
+ new TextEditedDataEvent(this.editingDrawingId, innerText.replace(/\n$/, ''), this.editedElement)
+ );
+
+ rootElement
+ .selectAll('text.editingMode')
+ .attr('visibility', 'visible')
+ .classed('editingMode', false);
+
+ this.innerText = '';
+ this.temporaryTextElement.nativeElement.innerText = '';
+ this.temporaryTextElement.nativeElement.removeEventListener('focusout', this.textListener);
+
+ this.clearStyle();
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'none');
+ };
+ this.textListener = listener;
+ this.temporaryTextElement.nativeElement.addEventListener('focusout', this.textListener);
+ this.temporaryTextElement.nativeElement.focus();
+ });
+ }
+
+ ngOnDestroy() {
+ this.textAddingSubscription.unsubscribe();
+ }
+
+ clearStyle() {
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'color', '#000000');
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-family', 'Noto Sans');
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-size', '11pt');
+ this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-weight', 'bold');
+ }
}
diff --git a/src/app/cartography/converters/converter.ts b/src/app/cartography/converters/converter.ts
index 3bf7ea3e..17226eed 100644
--- a/src/app/cartography/converters/converter.ts
+++ b/src/app/cartography/converters/converter.ts
@@ -1,3 +1,3 @@
export interface Converter {
- convert(obj: F): T;
+ convert(obj: F): T;
}
diff --git a/src/app/cartography/converters/map/drawing-to-map-drawing-converter.ts b/src/app/cartography/converters/map/drawing-to-map-drawing-converter.ts
index 26a7af35..2c43cf80 100644
--- a/src/app/cartography/converters/map/drawing-to-map-drawing-converter.ts
+++ b/src/app/cartography/converters/map/drawing-to-map-drawing-converter.ts
@@ -1,15 +1,13 @@
-import { Injectable } from "@angular/core";
-
-import { Converter } from "../converter";
-import { Drawing } from "../../models/drawing";
-import { MapDrawing } from "../../models/map/map-drawing";
+import { Injectable } from '@angular/core';
+import { Converter } from '../converter';
+import { Drawing } from '../../models/drawing';
+import { MapDrawing } from '../../models/map/map-drawing';
@Injectable()
export class DrawingToMapDrawingConverter implements Converter {
- constructor(
- ) {}
-
+ constructor() {}
+
convert(drawing: Drawing) {
const mapDrawing = new MapDrawing();
mapDrawing.id = drawing.drawing_id;
diff --git a/src/app/cartography/converters/map/label-to-map-label-converter.ts b/src/app/cartography/converters/map/label-to-map-label-converter.ts
index 77a3b2e4..0d1f0095 100644
--- a/src/app/cartography/converters/map/label-to-map-label-converter.ts
+++ b/src/app/cartography/converters/map/label-to-map-label-converter.ts
@@ -1,13 +1,12 @@
-import { Injectable } from "@angular/core";
+import { Injectable } from '@angular/core';
-import { Converter } from "../converter";
-import { Label } from "../../models/label";
-import { MapLabel } from "../../models/map/map-label";
+import { Converter } from '../converter';
+import { Label } from '../../models/label';
+import { MapLabel } from '../../models/map/map-label';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { CssFixer } from '../../helpers/css-fixer';
import { FontFixer } from '../../helpers/font-fixer';
-
@Injectable()
export class LabelToMapLabelConverter implements Converter