diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 0053584133..ebc50abcbd 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -4,10 +4,11 @@ on: push: branches: - '**' + - '!master' # do not run on master tags-ignore: - '*' paths-ignore: - - '**.md' + - '**.md' # ignore changes to markdown files jobs: test: diff --git a/CHANGELOG.md b/CHANGELOG.md index ba32ff81bf..8d98e86957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.7.6](https://github.com/webern-unibas-ch/awg-app/compare/v0.7.5...v0.7.6) (2020-10-09) + +### Features + +- **shared:** add directive for external links ([6a56a04](https://github.com/webern-unibas-ch/awg-app/commit/6a56a04538bb7a015406b08994b3ea5df9b79848)) + +### Bug Fixes + +- **app:** move target blank from links to directive ([af4223f](https://github.com/webern-unibas-ch/awg-app/commit/af4223fba57ecdd08dbc8db34304896eef2533ab)) +- **core:** move analytics config also into service ([6599fba](https://github.com/webern-unibas-ch/awg-app/commit/6599fba83af1af04cfac34796d70ecdf45b51ccd)) +- **core:** move analytics handling into service ([a6faaf3](https://github.com/webern-unibas-ch/awg-app/commit/a6faaf3c61c6d8c1adcc9452b29d93c7113eb88d)) +- **core:** move analytics id to app config ([57020b8](https://github.com/webern-unibas-ch/awg-app/commit/57020b894fa9c17cf54c07e462548b01305af55b)) +- **shared:** fix errors with osm and external link directive ([769fc1a](https://github.com/webern-unibas-ch/awg-app/commit/769fc1a9d3140969ace45dd6a3461c7dc582639a)) + ### [0.7.5](https://github.com/webern-unibas-ch/awg-app/compare/v0.7.4...v0.7.5) (2020-08-28) ### Features diff --git a/package.json b/package.json index 59e71f592a..756e7a19e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "awg-app", - "version": "0.7.5", + "version": "0.7.6", "license": "MIT", "author": { "name": "Stefan Münnich", @@ -33,9 +33,10 @@ "lint": "ng lint awg-app", "lint-staged": "lint-staged", "tslint-check": "tslint-config-prettier-check ./tslint.json", - "format:check": "prettier --check \"src/**/*.ts\"", - "format:fix": "pretty-quick --staged", - "doc": "yarn compodoc --tsconfig tsconfig.base.json --theme Readthedocs --output dist/awg-app/compodoc --disableRoutesGraph", + "format:check": "prettier --check \"src/**/*.{ts,js,css,html}\"", + "format:write": "prettier --write \"src/**/*.{ts,js,css,html}\"", + "format:fix-staged": "pretty-quick --staged", + "doc": "yarn compodoc --tsconfig tsconfig.doc.json --theme Readthedocs --output dist/awg-app/compodoc --disableRoutesGraph", "serve:doc": "yarn doc --serve --watch", "build:doc": "yarn doc", "build": "ng build", @@ -66,20 +67,20 @@ }, "husky": { "hooks": { - "pre-commit": "run-s -l format:fix lint-staged", + "pre-commit": "run-s -l format:fix-staged lint-staged", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, "prettier": { + "arrowParens": "avoid", + "bracketSpacing": true, + "jsxBracketSameLine": true, "printWidth": 120, - "tabWidth": 4, - "useTabs": false, "semi": true, "singleQuote": true, + "tabWidth": 4, "trailingComma": "none", - "bracketSpacing": true, - "jsxBracketSameLine": true, - "arrowParens": "avoid" + "useTabs": false }, "dependencies": { "@angular/animations": "~10.0.4", @@ -92,22 +93,22 @@ "@angular/platform-browser-dynamic": "~10.0.4", "@angular/platform-server": "~10.0.4", "@angular/router": "~10.0.4", - "@ctrl/ngx-codemirror": "^4.0.0", + "@ctrl/ngx-codemirror": "^4.0.1", "@fortawesome/angular-fontawesome": "^0.7.0", - "@fortawesome/fontawesome-svg-core": "^1.2.30", - "@fortawesome/free-solid-svg-icons": "^5.14.0", + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.1", "@kolkov/ngx-gallery": "^1.2.3", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "bootstrap": "^4.5.2", - "codemirror": "^5.57.0", + "codemirror": "^5.58.1", "core-js": "^3.6.5", - "d3-drag": "^1.2.5", + "d3-drag": "^2.0.0", "d3-force": "^2.0.1", "d3-selection": "^1.4.2", - "d3-zoom": "^1.8.3", + "d3-zoom": "^2.0.0", "font-awesome": "^4.7.0", "json2typescript": "^1.4.1", - "n3": "^1.6.2", + "n3": "^1.6.3", "ngx-json-viewer": "^2.4.0", "rdfstore": "^0.9.17", "rxjs": "~6.5.5", @@ -119,19 +120,19 @@ "@angular-devkit/build-angular": "~0.1000.3", "@angular/cli": "~10.0.3", "@angular/compiler-cli": "~10.0.4", - "@commitlint/cli": "^9.1.2", - "@commitlint/config-angular": "^9.1.2", + "@commitlint/cli": "^11.0.0", + "@commitlint/config-angular": "^11.0.0", "@compodoc/compodoc": "^1.1.11", - "@types/d3": "^5.7.2", + "@types/d3": "^5.16.3", "@types/jasmine": "~3.5.0", "@types/jasminewd2": "~2.0.3", - "@types/node": "^14.6.1", + "@types/node": "^14.11.5", "angular-cli-ghpages": "^0.6.2", "codelyzer": "^6.0.0", "conventional-recommended-bump": "^6.0.10", "cross-var": "^1.1.0", - "gzipper": "^4.0.0", - "husky": "^4.2.5", + "gzipper": "^4.0.2", + "husky": "^4.3.0", "jasmine-core": "~3.5.0", "jasmine-spec-reporter": "~5.0.0", "karma": "~5.0.0", @@ -139,11 +140,11 @@ "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~3.3.0", "karma-jasmine-html-reporter": "^1.5.0", - "lint-staged": "^10.2.13", + "lint-staged": "^10.4.0", "ng-lint-staged": "^0.1.6", "npm-run-all": "^4.1.5", - "prettier": "~2.1.1", - "pretty-quick": "^3.0.0", + "prettier": "~2.1.2", + "pretty-quick": "^3.0.2", "protractor": "~7.0.0", "source-map-explorer": "^2.5.0", "standard-version": "^9.0.0", diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 81967fe553..17a0376723 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { NavigationEnd, Router } from '@angular/router'; -import { RouterEventsService } from '@awg-core/services'; +import { AnalyticsService, RouterEventsService } from '@awg-core/services'; /** * The main component of the AWG App. @@ -20,15 +20,17 @@ export class AppComponent { * It declares private instances of the Angular router and the RouterEventsService. * * @param {Router} router Instance of the Angular router. + * @param {AnalyticsService} analyticsService Instance of the AnalyticsService. * @param {RouterEventsService} routerEventsService Instance of the RouterEventsService. */ - constructor(private readonly router: Router, private routerEventsService: RouterEventsService) { + constructor( + private readonly router: Router, + private analyticsService: AnalyticsService, + private routerEventsService: RouterEventsService + ) { this.router.events.subscribe(event => { if (event instanceof NavigationEnd) { - // catch GoogleAnalytics pageview events, - // cf. https://codeburst.io/using-google-analytics-with-angular-25c93bffaa18 - (window as any).ga('set', 'page', event.urlAfterRedirects); - (window as any).ga('send', 'pageview'); + this.analyticsService.trackPageView(event.urlAfterRedirects); } }); } diff --git a/src/app/app.config.ts b/src/app/app.config.ts index 0a2dfa6e66..92335b7b33 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -16,6 +16,26 @@ export class AppConfig { return root + api; } + /** + * Getter for the URL of the Analytics endpoint + * ({@link https://www.google-analytics.com/}). + * + * @returns {string} + */ + public static get ANALYTICS_ENDPOINT(): string { + return 'https://www.google-analytics.com/'; + } + + /** + * Getter for the Analytics id + * ({@link 'UA-XXXXXXX-Y'}). + * + * @returns {string} + */ + public static get ANALYTICS_ID(): string { + return 'UA-64657372-2'; + } + /** * Getter for the URL of the Inseri Test Instance * ({@link http://test-nieos.nie-ine.ch}). @@ -115,7 +135,7 @@ export class AppConfig { } /** - * Getter for the unsanitized OSM emebed link. + * Getter for the unsanitized OSM embed link. * * @returns {string} */ diff --git a/src/app/app.globals.ts b/src/app/app.globals.ts index d88e720289..31d24e91c1 100644 --- a/src/app/app.globals.ts +++ b/src/app/app.globals.ts @@ -1,15 +1,15 @@ // THIS IS AN AUTO-GENERATED FILE. DO NOT CHANGE IT MANUALLY! -// Generated last time on Fri Aug 28 14:15:55 CEST 2020 +// Generated last time on Fri Oct 9 12:39:18 CEST 2020 /** * The latest version of the AWG App */ -export const appVersion = '0.7.5'; +export const appVersion = '0.7.6'; /** * The release date of the latest version of the AWG App */ -export const appVersionReleaseDate = '28. August 2020'; +export const appVersionReleaseDate = '09. Oktober 2020'; /** * The URL of the AWG App diff --git a/src/app/core/core-models/geo-names.model.ts b/src/app/core/core-models/geo-names.model.ts index 7e30ed91f4..5f0c67579c 100644 --- a/src/app/core/core-models/geo-names.model.ts +++ b/src/app/core/core-models/geo-names.model.ts @@ -73,24 +73,11 @@ export class GeoNames { const geoIcon = ''; const geoLink = - '' + - geoIcon + - ''; + ''; - wikiLink = - '' + - wikiIcon + - ''; + wikiLink = ' - Prototyp AWG-Online-Edition -
+Prototyp AWG-Online-Edition
- + Version {{ pageMetaData?.version }} ◇ {{ pageMetaData?.versionReleaseDate }}
- - Impressum - + Impressum | - - Dokumentation - + Dokumentation
diff --git a/src/app/core/footer/footer-logo/footer-logo.component.html b/src/app/core/footer/footer-logo/footer-logo.component.html index 6bf3d74f1c..c141147c4e 100644 --- a/src/app/core/footer/footer-logo/footer-logo.component.html +++ b/src/app/core/footer/footer-logo/footer-logo.component.html @@ -1,3 +1,3 @@ - + diff --git a/src/app/core/navbar/navbar.component.html b/src/app/core/navbar/navbar.component.html index d0f1e805e4..48121baaf7 100644 --- a/src/app/core/navbar/navbar.component.html +++ b/src/app/core/navbar/navbar.component.html @@ -4,8 +4,6 @@ ANTON WEBERN- {{ - pageMetaData?.awgProjectName - }} + {{ pageMetaData?.awgProjectName }}
diff --git a/src/app/shared/external-link/external-link.directive.spec.ts b/src/app/shared/external-link/external-link.directive.spec.ts
new file mode 100644
index 0000000000..316b524cc9
--- /dev/null
+++ b/src/app/shared/external-link/external-link.directive.spec.ts
@@ -0,0 +1,166 @@
+import { Component, DebugElement } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { cleanStylesFromDOM } from '@testing/clean-up-helper';
+
+import { ExternalLinkDirective } from './external-link.directive';
+
+@Component({
+ template: `Link External
+
+ \n' +
' Hinweise zur Nutzung:
Konzept/Grafik:
◇ Website:
{{ pageMetaData.awgProjectName }}. Projekt-Website:
-
- {{ pageMetaData?.awgProjectUrl }} , abgerufen am {{ today | date: dateFormat }} {{ pageMetaData?.awgProjectUrl }}
+ Link External Dynamic
+
+
+ Link Internal
+
+
+ Link Internal Dynamic
+
+
+ Link without href`
+})
+class TestExernalLinkComponent {
+ hostname = location.hostname;
+ dynamicInternalLink = this.hostname + '#anchor';
+ dynamicExternalLink = 'https://coryrylan.com/blog/managing-external-links-safely-in-angular';
+
+ doSomething() {
+ console.log('Clicked on link without href');
+ }
+}
+
+describe('ExternalLinkDirective', () => {
+ let component: TestExernalLinkComponent;
+ let fixture: ComponentFixture
\n' +
- ' RDF Triples: Das Resource Description Framework (RDF) stellt grundlegende syntaktische und semantische Elemente zur Beschreibung digitaler Repräsentationen von Objekten (Ressourcen) zur Verfügung. Dabei folgt es einer dreigliedrigen Struktur der Form <SUBJEKT> <PRÄDIKAT> <OBJEKT>, die auch als Triple bezeichnet wird. Eine Menge solcher Triples kann als (gerichteter) Graph verstanden und visualisiert werden. Unter dem Punkt RDF Triples sind die für die vorliegende Graph-Visualisierung zugrundeliegenden RDF-Daten einsehbar und interaktiv lokal bearbeitbar. (Achtung: Änderungen werden von der AWG-APP nicht gespeichert und sollten bei Bedarf lokal gesichert werden.) Weiterführende Informationen zu RDF finden sich unter: https://www.w3.org/RDF/.
\n' +
- ' SPARQL Abfrage: Die SPARQL Protocol And RDF Query Language (SPARQL) stellt u.a. eine Abfragesprache für graph-basierte Datensätze bereit. Sie ermöglicht komplexe Abfragen und Manipulationen von in RDF dargestellten und strukturierten Daten. Dabei wird nach dem Prinzip des graph pattern matching der RDF-Graph nach einer angefragten Triple-Folge durchsucht. Unter dem Punkt SPARQL Abfrage lassen sich die Suchanfragen interaktiv anpassen. Einige Beispielabfragen sind bereits in einem Auswahl-Dropdown-Menü vorformuliert. Weiterführende Informationen zu SPARQL finden sich unter: https://www.w3.org/TR/sparql11-query/.
\n' +
+ ' RDF Triples: Das Resource Description Framework (RDF) stellt grundlegende syntaktische und semantische Elemente zur Beschreibung digitaler Repräsentationen von Objekten (Ressourcen) zur Verfügung. Dabei folgt es einer dreigliedrigen Struktur der Form <SUBJEKT> <PRÄDIKAT> <OBJEKT>, die auch als Triple bezeichnet wird. Eine Menge solcher Triples kann als (gerichteter) Graph verstanden und visualisiert werden. Unter dem Punkt RDF Triples sind die für die vorliegende Graph-Visualisierung zugrundeliegenden RDF-Daten einsehbar und interaktiv lokal bearbeitbar. (Achtung: Änderungen werden von der AWG-APP nicht gespeichert und sollten bei Bedarf lokal gesichert werden.) Weiterführende Informationen zu RDF finden sich unter: https://www.w3.org/RDF/.
\n' +
+ ' SPARQL Abfrage: Die SPARQL Protocol And RDF Query Language (SPARQL) stellt u.a. eine Abfragesprache für graph-basierte Datensätze bereit. Sie ermöglicht komplexe Abfragen und Manipulationen von in RDF dargestellten und strukturierten Daten. Dabei wird nach dem Prinzip des graph pattern matching der RDF-Graph nach einer angefragten Triple-Folge durchsucht. Unter dem Punkt SPARQL Abfrage lassen sich die Suchanfragen interaktiv anpassen. Einige Beispielabfragen sind bereits in einem Auswahl-Dropdown-Menü vorformuliert. Weiterführende Informationen zu SPARQL finden sich unter: https://www.w3.org/TR/sparql11-query/.
\n' +
'\n' +
- ' Resultat: Der durch die SPARQL Abfrage über die RDF Triples zurückgelieferte Datensatz wird unter dem Punkt Resultat als dynamisches Graph-Netzwerk aus bezeichneten Knoten und Kanten mit Hilfe der JavaScript-Bibliothek d3.js visualisiert. Die Darstellung ist zoom- und verschiebbar, die Position einzelner Knoten lässt sich ebenfalls durch "Ziehen" mit der Maus verändern. Die Anzahl der angezeigten Triples lässt sich je nach Größe des Ergebnis-Datensatzes über ein Auswahl-Dropdown-Menü filtern; in der Voreinstellung findet eine Beschränkung auf 50 Triples statt.
\n' +
+ ' Resultat: Der durch die SPARQL Abfrage über die RDF Triples zurückgelieferte Datensatz wird unter dem Punkt Resultat als dynamisches Graph-Netzwerk aus bezeichneten Knoten und Kanten mit Hilfe der JavaScript-Bibliothek d3.js visualisiert. Die Darstellung ist zoom- und verschiebbar, die Position einzelner Knoten lässt sich ebenfalls durch "Ziehen" mit der Maus verändern. Die Anzahl der angezeigten Triples lässt sich je nach Größe des Ergebnis-Datensatzes über ein Auswahl-Dropdown-Menü filtern; in der Voreinstellung findet eine Beschränkung auf 50 Triples statt.
\n' +
' {{ structureInfoHeader }}
GitHub:
Repository unter:
-
+
{{ pageMetaData?.githubUrl }}
Compodoc:
Dokumentation von Struktur und Funktionalitäten der Angular App:
-
- awg-app documentation
-
+ awg-app documentation
Der Software-Code dieses Prototyps wird auf - GitHub unter - einer MIT-Lizenz zur - Verfügung gestellt. + GitHub unter einer + MIT-Lizenz zur Verfügung gestellt.
Externe Links:
@@ -148,17 +138,15 @@Die {{ pageMetaData.awgProjectName }} setzt auf Grundlage ihrer berechtigten Interessen (d.h. Interesse an der Analyse und Optimierung unseres Onlineangebotes im Sinne des Art. - 6 Abs. 1 lit. f. - DSGVO) Google Analytics, einen Webanalysedienst der Google LLC („Google“) ein. Google verwendet Cookies. Die - durch das Cookie erzeugten Informationen über Benutzung des Onlineangebotes durch die Nutzer werden in der Regel - an einen Server von Google in den USA übertragen und dort gespeichert. + 6 Abs. 1 lit. f. DSGVO) Google Analytics, einen + Webanalysedienst der Google LLC („Google“) ein. Google verwendet Cookies. Die durch das Cookie erzeugten + Informationen über Benutzung des Onlineangebotes durch die Nutzer werden in der Regel an einen Server von Google + in den USA übertragen und dort gespeichert.
Google ist unter dem Privacy-Shield-Abkommen zertifiziert und bietet hierdurch eine Garantie, das europäische Datenschutzrecht einzuhalten (https://www.privacyshield.gov/participant?id=a2zt000000001L5AAI&status=Active). @@ -185,21 +173,14 @@ verhindern; die Nutzer können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf ihre Nutzung des Onlineangebotes bezogenen Daten an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter folgendem Link verfügbare Browser-Plugin herunterladen und installieren: - https://tools.google.com/dlpage/gaoptout?hl=de. + https://tools.google.com/dlpage/gaoptout?hl=de.
Weitere Informationen zur Datennutzung durch Google, Einstellungs- und Widerspruchsmöglichkeiten, erfahren Sie - in der Datenschutzerklärung von Google (https://policies.google.com/technologies/ads) sowie in den Einstellungen für die Darstellung von Werbeeinblendungen durch Google (https://adssettings.google.com/authenticated). @@ -208,8 +189,7 @@
Die personenbezogenen Daten der Nutzer werden nach 14 Monaten gelöscht.
- [Erstellt mit Datenschutz-Generator.de von RA Dr. Thomas SchwenkeErstellt mit Datenschutz-Generator.de von RA Dr. Thomas Schwenke; vom Websiteinhaber angepasst]
diff --git a/src/app/views/data-view/data-outlets/bibliography/bibliography-search/bibliography-search.component.html b/src/app/views/data-view/data-outlets/bibliography/bibliography-search/bibliography-search.component.html index 4213ed1a55..25949285d4 100644 --- a/src/app/views/data-view/data-outlets/bibliography/bibliography-search/bibliography-search.component.html +++ b/src/app/views/data-view/data-outlets/bibliography/bibliography-search/bibliography-search.component.html @@ -1,3 +1 @@ -- bibliography-search works! -
+bibliography-search works!
diff --git a/src/app/views/data-view/data-outlets/resource-detail/resource-detail-header/resource-detail-header.component.html b/src/app/views/data-view/data-outlets/resource-detail/resource-detail-header/resource-detail-header.component.html index 056066ddeb..d04f279035 100644 --- a/src/app/views/data-view/data-outlets/resource-detail/resource-detail-header/resource-detail-header.component.html +++ b/src/app/views/data-view/data-outlets/resource-detail/resource-detail-header/resource-detail-header.component.html @@ -13,7 +13,7 @@Diese interaktive Visualisierung basiert auf Mads Holten's - SPARQL Visualizer. Sie modelliert den aktuellen Skizzenkomplex in Form eines - RDF-Graphen. Die + SPARQL Visualizer. Sie modelliert den + aktuellen Skizzenkomplex in Form eines RDF-Graphen. Die zugrundeliegenden RDF-Daten sind unter dem Punkt RDF Triples einsehbar und lokal editierbar. Eine Filterung und Eingrenzung dieser RDF-Daten kann mithilfe der Abfragesprache - SPARQL + SPARQL unter dem Punkt SPARQL Abfrage vorgenommen werden; in der Voreinstellung werden hierbei alle vorhandenen Triples abgefragt.
diff --git a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph-no-result/force-graph-no-result.component.html b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph-no-result/force-graph-no-result.component.html index 3e2a762e4a..f6dc556187 100644 --- a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph-no-result/force-graph-no-result.component.html +++ b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph-no-result/force-graph-no-result.component.html @@ -2,13 +2,13 @@Entschuldigung, Ihre SPARQL-Anfrage führte leider zu keinem Ergebnis.
Möglicherweise können Sie Ihre Anfrage anpassen.
- +
Ausführliche Informationen zu SPARQL finden Sie unter: - {{ logos.sparql.href }}{{ logos.sparql.href }}.
diff --git a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph/d3/d3.service.ts b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph/d3/d3.service.ts index 2f054e1a8a..1e40734cb4 100644 --- a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph/d3/d3.service.ts +++ b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/force-graph/d3/d3.service.ts @@ -69,13 +69,7 @@ export class D3Service { d.fy = null; }; - dragElement.call( - d3_drag - .drag() - .on('start', dragStart) - .on('drag', dragActions) - .on('end', dragEnd) - ); + dragElement.call(d3_drag.drag().on('start', dragStart).on('drag', dragActions).on('end', dragEnd)); } /** diff --git a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/graph-visualizer.component.html b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/graph-visualizer.component.html index 4eda7f8a19..465e889991 100644 --- a/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/graph-visualizer.component.html +++ b/src/app/views/edition-view/edition-outlets/edition-graph/graph-visualizer/graph-visualizer.component.html @@ -10,13 +10,9 @@Takt | -System | -Ort im Takt | -Kommentar | +Takt | +System | +Ort im Takt | +Kommentar |
---|