2
0

logic splitted into directives and components

This commit is contained in:
2018-05-23 09:14:52 +02:00
parent 06764e3e7f
commit b18c196610
14 changed files with 148 additions and 22 deletions

View File

@@ -1,5 +1,4 @@
<div appCanvas class="canvas"
(emitConfig)="updateCanvasConfig($event)"
[paramStartingColor]="canvasParam.colors.start"
[paramEndingColor]="canvasParam.colors.end"
[paramPoints]="canvasParam.points"
@@ -9,10 +8,9 @@
[paramStrokeWidth]="canvasParam.stroke?.width"
[paramShowGrid]="canvasParam.showGrid"></div>
<ul>
<li><b>Static Configuration</b></li>
<li *ngIf="canvasConfig"><pre>{{canvasConfig | json}}</pre></li>
<app-graphs [config]="config"></app-graphs>
<ul>
<li>
<label>
<div>Points</div>

View File

@@ -9,8 +9,9 @@ import { Config } from './models/config.model';
styleUrls: ['./app.component.scss']
})
export class AppComponent {
public canvasConfig: Config;
public canvasParam: Param;
public config: any;
constructor() {
this.canvasParam = {
@@ -29,9 +30,18 @@ export class AppComponent {
spread: 20,
showGrid: false
};
}
public updateCanvasConfig(config): void {
this.canvasConfig = config;
this.config = {
start: {
direction: 0
},
end: {
direction: 270,
position: {
x: 16,
y: -9
}
}
};
}
}

View File

@@ -3,12 +3,18 @@ import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { CanvasDirective } from './canvas/canvas.directive';
import { CanvasDirective } from './directives/canvas.directive';
import { GraphsComponent } from './components/graphs.component';
// import { GuillocheComponent } from './components/guilloche.component';
import { GuillocheDirective } from './directives/guilloche.directive';
@NgModule({
declarations: [
AppComponent,
CanvasDirective
GraphsComponent,
// GuillocheComponent,
CanvasDirective,
GuillocheDirective
],
imports: [
BrowserModule,

View File

@@ -0,0 +1,3 @@
<svg #svg width="100%" height="100%">
<g guilloche *ngFor="let graph of graphs" [graph]="graph"></g>
</svg>

After

Width:  |  Height:  |  Size: 110 B

View File

@@ -0,0 +1,8 @@
:host {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
overflow: hidden;
}

View File

@@ -0,0 +1,48 @@
import { ViewChildren, QueryList, Component, AfterViewInit, ViewChild, Input, OnInit } from '@angular/core';
import * as Selection from 'd3-selection';
import * as Shape from 'd3-shape';
import * as Random from 'd3-random';
import * as Drag from 'd3-drag';
// import { GuillocheComponent } from './../components/guilloche.component';
import { GuillocheDirective } from './../directives/guilloche.directive';
import { Graph } from '../models/graph.model';
@Component({
selector: 'app-graphs',
templateUrl: './graphs.component.html',
styleUrls: ['./graphs.component.scss']
})
export class GraphsComponent implements AfterViewInit, OnInit {
// public width: number;
// public height: number;
public graphs: Graph[];
public svg: any;
@Input() config: any;
@ViewChild('svg') svgElementRef;
@ViewChild(GuillocheDirective) guillocheViewChild: GuillocheDirective;
@ViewChildren(GuillocheDirective) guillocheViewChildren: QueryList<GuillocheDirective>;
ngOnInit() {
// this.width = 0;
// this.height = 0;
this.graphs = [...[{
id: 'first',
start: {coords: { x: 0, y: 0 }, direction: this.config.start.direction },
end: { coords: { x: 0, y: -10 }, direction: this.config.end.direction}
}, {
id: 'second',
start: {coords: { x: 0, y: 0 }, direction: this.config.end.direction },
end: { coords: { x: 0, y: -10 }, direction: this.config.start.direction}
}]];
}
ngAfterViewInit() {
this.svg = Selection.select(this.svgElementRef.nativeElement);
console.log('graph component', this.guillocheViewChildren.toArray());
}
}

View File

@@ -7,6 +7,7 @@ import * as Drag from 'd3-drag';
import { Config } from './../models/config.model';
import { Point } from './../models/point.model';
import { Param } from './../models/param.model';
import { GuillocheDirective } from './guilloche.directive';
@Directive({
selector: '[appCanvas]'
@@ -40,7 +41,6 @@ export class CanvasDirective implements OnChanges {
private el: ElementRef
) {
this.canvas = el.nativeElement;
this.emitConfig = new EventEmitter();
}
ngOnChanges(changes: SimpleChanges) {
@@ -321,7 +321,5 @@ export class CanvasDirective implements OnChanges {
color: this.param.colors.end
}
};
// Emit Canvas Config to parent Component.
this.emitConfig.next(this.config);
}
}

View File

@@ -0,0 +1,25 @@
import { Graph } from './../models/graph.model';
import { ElementRef, HostListener, Output, EventEmitter, Input, Directive, OnInit } from '@angular/core';
import * as Selection from 'd3-selection';
import * as Shape from 'd3-shape';
import * as Random from 'd3-random';
import * as Drag from 'd3-drag';
import { Config } from './../models/config.model';
import { Point } from './../models/point.model';
import { Param } from './../models/param.model';
@Directive({
selector: '[guilloche]'
})
export class GuillocheDirective implements OnInit {
@Input() graph: Graph;
constructor() {
}
ngOnInit() {
console.log('guilloche directive', this.graph);
}
}

View File

@@ -1,9 +1,14 @@
import { Point } from './point.model';
export interface Config {
width: number;
height: number;
start: Point;
end: Point;
drag?: Point;
start: {
x: number;
y: number;
color: string;
};
end: {
x: number;
y: number;
color: string;
};
}

View File

@@ -0,0 +1,14 @@
import { Point } from './point.model';
export interface Graph {
id: string; // ID of SVG group
start: {
coords: Point;
direction: number; // degree between 0 and 360
};
end: {
coords: Point;
direction: number; // degree between 0 and 360
};
landmarks?: Point[]; // orientation points
}

View File

@@ -3,7 +3,10 @@
// The list of file replacements can be found in `angular.json`.
export const environment = {
production: false
production: false,
guilloche: {
colors: ['#cc0045', '#0067cc']
}
};
/*

View File

@@ -9,3 +9,12 @@ html, body {
background: #fbfcfd;
font-family: monospace;
}
app-root {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
overflow: hidden;
}

View File

@@ -1,6 +1,7 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"experimentalDecorators": true,
"outDir": "../out-tsc/app",
"module": "es2015",
"types": []

View File

@@ -3,9 +3,7 @@
"rules": {
"directive-selector": [
true,
"attribute",
"app",
"camelCase"
"attribute"
],
"component-selector": [
true,