more graph attributes

This commit is contained in:
Timo Hocker 2020-04-28 10:52:02 +02:00
parent 8af030e54f
commit 4328d3a78f
4 changed files with 37 additions and 15 deletions

View File

@ -3,6 +3,7 @@ import { Edge } from './Edge';
import { Node } from './Node'; import { Node } from './Node';
import { GraphStyles, NodeStyles } from './Styles'; import { GraphStyles, NodeStyles } from './Styles';
import { Color } from './Color'; import { Color } from './Color';
import { GraphLayouts } from './GraphLayouts';
interface NodeOptions { interface NodeOptions {
name: string; name: string;
@ -19,19 +20,34 @@ export class Graph extends Element {
public style?: GraphStyles; public style?: GraphStyles;
public color?: Color; public color?: Color;
public directional = true; public directional = true;
public overlap?: boolean;
public splines?: boolean;
public layout?: GraphLayouts;
private get attributes (): Array<{name: string; value: string}> {
const attributes = [];
if (this.color)
attributes.push ({ name: 'color', value: this.color.toString () });
if (this.style)
attributes.push ({ name: 'style', value: this.style.toString () });
if (this.overlap)
attributes.push ({ name: 'overlap', value: this.overlap.toString () });
if (this.splines)
attributes.push ({ name: 'splines', value: this.splines.toString () });
if (this.layout)
attributes.push ({ name: 'layout', value: this.layout.toString () });
return attributes;
}
// eslint-disable-next-line @typescript-eslint/naming-convention // eslint-disable-next-line @typescript-eslint/naming-convention
public toString (): string { public toString (): string {
const header = this.parent const header = this.parent
? `subgraph cluster_${this.full_name}` ? `subgraph cluster_${this.full_name}`
: `${this.directional ? 'di' : ''}graph ${this.full_name}`; : `${this.directional ? 'di' : ''}graph ${this.full_name}`;
const attributes = [];
if (this.color)
attributes.push ({ name: 'color', value: this.color.toString () });
if (this.style)
attributes.push ({ name: 'style', value: this.style.toString () });
let attrs = `\n${attributes.map ((v) => `${v.name} = ${v.value}`) let attrs = `\n${this.attributes.map ((v) => `${v.name} = ${v.value}`)
.join ('\n')}\n`; .join ('\n')}\n`;
let children = `\n${this.children.map ((c) => c.toString ()) let children = `\n${this.children.map ((c) => c.toString ())
.join ('\n')}\n`; .join ('\n')}\n`;
@ -75,6 +91,7 @@ export class Graph extends Element {
public add_graph (constructor: ((g: Graph) => void) | string): string { public add_graph (constructor: ((g: Graph) => void) | string): string {
const graph = new Graph ('unnamed', this.full_name); const graph = new Graph ('unnamed', this.full_name);
graph.directional = this.directional; graph.directional = this.directional;
if (typeof constructor === 'string') if (typeof constructor === 'string')

4
lib/GraphLayouts.ts Normal file
View File

@ -0,0 +1,4 @@
export enum GraphLayouts {
neato= 'neato',
dot= 'dot'
}

View File

@ -4,3 +4,4 @@ export { Element } from './Element';
export { Edge } from './Edge'; export { Edge } from './Edge';
export { Color } from './Color'; export { Color } from './Color';
export { EdgeStyles, NodeStyles, GraphStyles } from './Styles'; export { EdgeStyles, NodeStyles, GraphStyles } from './Styles';
export { GraphLayouts } from './GraphLayouts';

View File

@ -233,26 +233,26 @@
integrity sha512-f7hJzrHjI5D+yC8KnwGV1q/vARE0ZOUHe0f3fybCmzU38wobs0Jm+XgYi98ViXqFmvt18cz1NI1c4q9sdrcsQQ== integrity sha512-f7hJzrHjI5D+yC8KnwGV1q/vARE0ZOUHe0f3fybCmzU38wobs0Jm+XgYi98ViXqFmvt18cz1NI1c4q9sdrcsQQ==
"@scode/eslint-config-es6@^1.0.1": "@scode/eslint-config-es6@^1.0.1":
version "1.0.23" version "1.0.24"
resolved "https://npm.scode.ovh/@scode%2feslint-config-es6/-/eslint-config-es6-1.0.23.tgz#9e1cf74350217c202aaa8dfc46838416715fbf60" resolved "https://npm.scode.ovh/@scode%2feslint-config-es6/-/eslint-config-es6-1.0.24.tgz#c3c88ac98beb9dc73da7812f614e8f289cec763b"
integrity sha512-Ux1BOuKa9W7MoKID8VyWzJZo3je5k8h2lnc66KmBedDSruTwMhUqx2JzALoO2MeUFkvjtoVvdKXbSPvFPc54YQ== integrity sha512-FyMzNbI6ZgGTr7bG1av+VSuYYWZIRbUp+ZvjVwtZduKkijXotOTg3jw0vMWi09IEq7esusQQZ/lZInAjvXJWKA==
dependencies: dependencies:
"@scode/eslint-config" "^2.0.1" "@scode/eslint-config" "^2.0.1"
eslint-plugin-import "^2.20.1" eslint-plugin-import "^2.20.1"
"@scode/eslint-config-ts@^1.0.22": "@scode/eslint-config-ts@^1.0.22":
version "1.0.26" version "1.0.27"
resolved "https://npm.scode.ovh/@scode%2feslint-config-ts/-/eslint-config-ts-1.0.26.tgz#fd980c8e1dcd8bc52e182643487af9e40393ee82" resolved "https://npm.scode.ovh/@scode%2feslint-config-ts/-/eslint-config-ts-1.0.27.tgz#d3d068df6f287273041029f4549378ecaa17972b"
integrity sha512-PLfaNdPXyz7V4PRDsUpcqY+l9yP3d1aRf93U55aAmA3NXmpucA8twoFgB1Li9pE8NTHbEC612gUD/pdQ+1/cQg== integrity sha512-KapsP1enFNw4kBjI4L3WKBnwKeKp6Ka9ml3OoT7zpGZZLd9nzvyD1SpGks9PQ1ZJse9nBy2HVuRVPAHzfIBvmw==
dependencies: dependencies:
"@scode/eslint-config-es6" "^1.0.1" "@scode/eslint-config-es6" "^1.0.1"
"@typescript-eslint/eslint-plugin" "^2.26.0" "@typescript-eslint/eslint-plugin" "^2.26.0"
"@typescript-eslint/parser" "^2.26.0" "@typescript-eslint/parser" "^2.26.0"
"@scode/eslint-config@^2.0.1": "@scode/eslint-config@^2.0.1":
version "2.0.12" version "2.0.13"
resolved "https://npm.scode.ovh/@scode%2feslint-config/-/eslint-config-2.0.12.tgz#eccd5205541fd63cbb84f72427d58873850224b0" resolved "https://npm.scode.ovh/@scode%2feslint-config/-/eslint-config-2.0.13.tgz#e7e4d3c9185449de7a7d810f3ee783459b779e8a"
integrity sha512-llgvCpThp6ZDWzPPw1zmXMNwWp3oIndwX/FLigeyPQx/T1ucrbadf3iyTo0ZReJiUobGTiVBta6N13qGyzQsjA== integrity sha512-ans0dulrnReK+9+XD5nw04kKEdveEVbRL9AKH3PTr8jUQJBY/pzeDznkf6oWnLPBKqbDn/MEKlS5MOExAgooWw==
dependencies: dependencies:
eslint-plugin-jsdoc "^24.0.0" eslint-plugin-jsdoc "^24.0.0"
eslint-plugin-node "^11.0.0" eslint-plugin-node "^11.0.0"