@linkurious/ogma-linkurious-parser 4.0.28 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ogma/features/nodeGrouping.d.ts +11 -4
- package/dist/ogma/features/nodeGrouping.js +44 -28
- package/dist/ogma/features/nodeGrouping.js.map +1 -1
- package/dist/ogma/features/reactive.d.ts +3 -0
- package/dist/ogma/features/reactive.js +22 -8
- package/dist/ogma/features/reactive.js.map +1 -1
- package/dist/ogma/features/styles.d.ts +21 -0
- package/dist/ogma/features/styles.js +51 -8
- package/dist/ogma/features/styles.js.map +1 -1
- package/dist/ogma/index.js +1 -4
- package/dist/ogma/index.js.map +1 -1
- package/dist/styles/itemAttributes.d.ts +1 -1
- package/dist/styles/itemAttributes.js.map +1 -1
- package/dist/styles/styleRule.d.ts +1 -1
- package/dist/styles/styleRule.js.map +1 -1
- package/package.json +6 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transformation, NodeList } from '@linkurious/ogma';
|
|
1
|
+
import { Transformation, NodeList, StyleRule } from '@linkurious/ogma';
|
|
2
2
|
import { LkEdgeData, LkNodeData, NodeGroupingRule } from '@linkurious/rest-client';
|
|
3
3
|
import { LKOgma } from '../index';
|
|
4
4
|
export declare const LKE_NODE_GROUPING_EDGE = "LKE_NODE_GROUPING_EDGE";
|
|
@@ -6,6 +6,7 @@ export declare const LKE_NODE_GROUPING_NODE = "LKE_NODE_GROUPING_NODE";
|
|
|
6
6
|
export declare class NodeGroupingTransformation {
|
|
7
7
|
transformation?: Transformation<LkNodeData, LkEdgeData>;
|
|
8
8
|
groupRule?: NodeGroupingRule;
|
|
9
|
+
nodeGroupingStyleRule?: StyleRule<LkNodeData, LkEdgeData>;
|
|
9
10
|
private _ogma;
|
|
10
11
|
constructor(ogma: LKOgma);
|
|
11
12
|
/**
|
|
@@ -28,6 +29,7 @@ export declare class NodeGroupingTransformation {
|
|
|
28
29
|
* init node grouping style
|
|
29
30
|
*/
|
|
30
31
|
initNodeGroupingStyle(): void;
|
|
32
|
+
refreshNodeGroupingStyle(): Promise<void>;
|
|
31
33
|
/**
|
|
32
34
|
* run layout on all subnodes of virtual nodes
|
|
33
35
|
*/
|
|
@@ -37,6 +39,11 @@ export declare class NodeGroupingTransformation {
|
|
|
37
39
|
* @param subNodes nodes part of a virtual node
|
|
38
40
|
*/
|
|
39
41
|
runSubNodesLayout(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Get the virtual nodes of the transformation
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
getVirtualNodesOfTransformation(): NodeList<LkNodeData, LkEdgeData>;
|
|
40
47
|
/**
|
|
41
48
|
* Return the caption of a virtual node
|
|
42
49
|
* @param node reference to the virtual node
|
|
@@ -60,9 +67,9 @@ export declare class NodeGroupingTransformation {
|
|
|
60
67
|
* @private
|
|
61
68
|
*/
|
|
62
69
|
private _getAllTransformationRawNodes;
|
|
70
|
+
private _findGroupingPropertyValue;
|
|
63
71
|
/**
|
|
64
|
-
*
|
|
65
|
-
* @private
|
|
72
|
+
* Return a hashed string that represents the group id
|
|
66
73
|
*/
|
|
67
|
-
private
|
|
74
|
+
private _findNodeGroupId;
|
|
68
75
|
}
|
|
@@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.NodeGroupingTransformation = exports.LKE_NODE_GROUPING_NODE = exports.LKE_NODE_GROUPING_EDGE = void 0;
|
|
16
|
+
const sha1_1 = __importDefault(require("sha1"));
|
|
13
17
|
const index_1 = require("../index");
|
|
14
18
|
const tools_1 = require("../../tools/tools");
|
|
15
19
|
exports.LKE_NODE_GROUPING_EDGE = 'LKE_NODE_GROUPING_EDGE';
|
|
@@ -35,22 +39,15 @@ class NodeGroupingTransformation {
|
|
|
35
39
|
if (this.transformation === undefined) {
|
|
36
40
|
this.transformation = this._ogma.transformations.addNodeGrouping({
|
|
37
41
|
groupIdFunction: (node) => {
|
|
38
|
-
var _a
|
|
42
|
+
var _a;
|
|
39
43
|
if (this._isRuleNotApplicableToNode(node)) {
|
|
40
44
|
return undefined;
|
|
41
45
|
}
|
|
42
46
|
else {
|
|
43
|
-
const propertyValue =
|
|
44
|
-
'properties',
|
|
45
|
-
(_b = (_a = this.groupRule) === null || _a === void 0 ? void 0 : _a.groupingOptions.propertyKey) !== null && _b !== void 0 ? _b : ''
|
|
46
|
-
]);
|
|
47
|
-
// if the property value is of type conflict or invalid value we use the original value
|
|
48
|
-
const originalValue = typeof propertyValue === 'object'
|
|
49
|
-
? propertyValue.original
|
|
50
|
-
: propertyValue;
|
|
47
|
+
const propertyValue = this._findGroupingPropertyValue(node);
|
|
51
48
|
// groupRule is defined if not we returned undefined
|
|
52
49
|
// node with same value will be part of the same group
|
|
53
|
-
return `${(
|
|
50
|
+
return `${(_a = this.groupRule) === null || _a === void 0 ? void 0 : _a.groupingOptions.itemTypes.join('-')}-${propertyValue}`
|
|
54
51
|
.toLowerCase()
|
|
55
52
|
.trim();
|
|
56
53
|
}
|
|
@@ -58,11 +55,9 @@ class NodeGroupingTransformation {
|
|
|
58
55
|
nodeGenerator: (nodes) => {
|
|
59
56
|
return {
|
|
60
57
|
data: {
|
|
61
|
-
// groupRule is defined as a virtual node only exist if the rule is defined
|
|
62
58
|
categories: [exports.LKE_NODE_GROUPING_NODE],
|
|
63
|
-
properties: {
|
|
64
|
-
|
|
65
|
-
}
|
|
59
|
+
properties: {},
|
|
60
|
+
nodeGroupId: this._findNodeGroupId(nodes)
|
|
66
61
|
}
|
|
67
62
|
};
|
|
68
63
|
},
|
|
@@ -77,10 +72,6 @@ class NodeGroupingTransformation {
|
|
|
77
72
|
duration: 300,
|
|
78
73
|
padding: 10
|
|
79
74
|
});
|
|
80
|
-
// TODO remove setTimeout when LKE-10453 is fixed
|
|
81
|
-
setTimeout(() => {
|
|
82
|
-
this.transformation.refresh();
|
|
83
|
-
}, 200);
|
|
84
75
|
}
|
|
85
76
|
else {
|
|
86
77
|
yield this.refreshTransformation();
|
|
@@ -106,7 +97,7 @@ class NodeGroupingTransformation {
|
|
|
106
97
|
* init node grouping style
|
|
107
98
|
*/
|
|
108
99
|
initNodeGroupingStyle() {
|
|
109
|
-
this._ogma.styles.addRule({
|
|
100
|
+
this.nodeGroupingStyleRule = this._ogma.styles.addRule({
|
|
110
101
|
nodeAttributes: {
|
|
111
102
|
// Any default style will go here
|
|
112
103
|
text: {
|
|
@@ -123,12 +114,20 @@ class NodeGroupingTransformation {
|
|
|
123
114
|
}
|
|
124
115
|
},
|
|
125
116
|
nodeSelector: (node) => {
|
|
126
|
-
|
|
117
|
+
// TODO: Tools.isDefined(node.getSubNodes()) is a work around for an ogma issue visible when using image export plugin with Node grouping
|
|
118
|
+
// remove when updating to Ogma v5.1.x
|
|
119
|
+
return node.isVirtual() && tools_1.Tools.isDefined(node.getSubNodes());
|
|
127
120
|
},
|
|
128
121
|
// the style will be updated when data object is updated
|
|
129
122
|
nodeDependencies: { self: { data: true } }
|
|
130
123
|
});
|
|
131
124
|
}
|
|
125
|
+
refreshNodeGroupingStyle() {
|
|
126
|
+
var _a;
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
yield ((_a = this.nodeGroupingStyleRule) === null || _a === void 0 ? void 0 : _a.refresh());
|
|
129
|
+
});
|
|
130
|
+
}
|
|
132
131
|
/**
|
|
133
132
|
* run layout on all subnodes of virtual nodes
|
|
134
133
|
*/
|
|
@@ -163,6 +162,14 @@ class NodeGroupingTransformation {
|
|
|
163
162
|
}
|
|
164
163
|
});
|
|
165
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Get the virtual nodes of the transformation
|
|
167
|
+
* @private
|
|
168
|
+
*/
|
|
169
|
+
getVirtualNodesOfTransformation() {
|
|
170
|
+
// @ts-ignore getContext exists on the transformation but hidden by the types
|
|
171
|
+
return this.transformation.getContext().virtualNodes;
|
|
172
|
+
}
|
|
166
173
|
/**
|
|
167
174
|
* Return the caption of a virtual node
|
|
168
175
|
* @param node reference to the virtual node
|
|
@@ -170,10 +177,11 @@ class NodeGroupingTransformation {
|
|
|
170
177
|
_getNodeGroupingCaption(node) {
|
|
171
178
|
if (node !== undefined && node.isVirtual()) {
|
|
172
179
|
// get the property value of the first node of the group (all nodes share the same property value)
|
|
173
|
-
const
|
|
180
|
+
const lkPropertyValue = node
|
|
174
181
|
.getSubNodes()
|
|
175
182
|
.get(0)
|
|
176
183
|
.getData(['properties', this.groupRule.groupingOptions.propertyKey]);
|
|
184
|
+
const propertyValue = tools_1.Tools.getValueFromLkProperty(lkPropertyValue);
|
|
177
185
|
const size = node.getSubNodes().filter((e) => !e.hasClass('filtered')).size;
|
|
178
186
|
return `${propertyValue} (${size})`;
|
|
179
187
|
}
|
|
@@ -206,7 +214,7 @@ class NodeGroupingTransformation {
|
|
|
206
214
|
// if the group rule is not defined
|
|
207
215
|
this.groupRule === undefined ||
|
|
208
216
|
// if rule is applied to a different category
|
|
209
|
-
!node.getData('categories').includes(
|
|
217
|
+
this.groupRule.groupingOptions.itemTypes.every((itemType) => !node.getData('categories').includes(itemType)) ||
|
|
210
218
|
// if the property value is not defined
|
|
211
219
|
!tools_1.Tools.isDefined(propertyValue) ||
|
|
212
220
|
// if the property value is missing
|
|
@@ -231,16 +239,24 @@ class NodeGroupingTransformation {
|
|
|
231
239
|
* @private
|
|
232
240
|
*/
|
|
233
241
|
_getAllTransformationRawNodes() {
|
|
234
|
-
const virtualNodes = this.
|
|
242
|
+
const virtualNodes = this.getVirtualNodesOfTransformation();
|
|
235
243
|
return virtualNodes.getSubNodes();
|
|
236
244
|
}
|
|
245
|
+
_findGroupingPropertyValue(node) {
|
|
246
|
+
var _a, _b;
|
|
247
|
+
const propertyValue = node.getData([
|
|
248
|
+
'properties',
|
|
249
|
+
(_b = (_a = this.groupRule) === null || _a === void 0 ? void 0 : _a.groupingOptions.propertyKey) !== null && _b !== void 0 ? _b : ''
|
|
250
|
+
]);
|
|
251
|
+
return `${tools_1.Tools.getValueFromLkProperty(propertyValue)}`;
|
|
252
|
+
}
|
|
237
253
|
/**
|
|
238
|
-
*
|
|
239
|
-
* @private
|
|
254
|
+
* Return a hashed string that represents the group id
|
|
240
255
|
*/
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
256
|
+
_findNodeGroupId(nodes) {
|
|
257
|
+
var _a, _b;
|
|
258
|
+
const propertyValue = this._findGroupingPropertyValue(nodes.get(0));
|
|
259
|
+
return (0, sha1_1.default)(`${(_a = this.groupRule) === null || _a === void 0 ? void 0 : _a.name}-${(_b = this.groupRule) === null || _b === void 0 ? void 0 : _b.groupingOptions.itemTypes.join('-')}-${propertyValue}`);
|
|
244
260
|
}
|
|
245
261
|
}
|
|
246
262
|
exports.NodeGroupingTransformation = NodeGroupingTransformation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeGrouping.js","sourceRoot":"","sources":["../../../src/ogma/features/nodeGrouping.ts"],"names":[],"mappings":"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","sourcesContent":["import {Transformation, Node, NodeList} from '@linkurious/ogma';\nimport {\n ConflictValue,\n LkEdgeData,\n LkNodeData,\n MissingValue,\n NodeGroupingRule\n} from '@linkurious/rest-client';\n\nimport {FORCE_LAYOUT_CONFIG, LKOgma} from '../index';\nimport {Tools} from '../../tools/tools';\n\nexport const LKE_NODE_GROUPING_EDGE = 'LKE_NODE_GROUPING_EDGE';\nexport const LKE_NODE_GROUPING_NODE = 'LKE_NODE_GROUPING_NODE';\n\nexport class NodeGroupingTransformation {\n public transformation?: Transformation<LkNodeData, LkEdgeData>;\n public groupRule?: NodeGroupingRule;\n private _ogma: LKOgma;\n\n constructor(ogma: LKOgma) {\n this._ogma = ogma;\n }\n\n /**\n * Set the grouping rule\n * @param rule of grouping\n */\n public setGroupingRule(rule: NodeGroupingRule | undefined): void {\n this.groupRule = rule;\n }\n\n /**\n * create a node grouping transformation\n * It uses groupRule to define the rule\n * Group the nodes based on a category type and a property value\n */\n public async initTransformation(): Promise<void> {\n if (this.transformation === undefined) {\n this.transformation = this._ogma.transformations.addNodeGrouping({\n groupIdFunction: (node) => {\n if (this._isRuleNotApplicableToNode(node)) {\n return undefined;\n } else {\n const propertyValue = node.getData([\n 'properties',\n this.groupRule?.groupingOptions.propertyKey ?? ''\n ]);\n // if the property value is of type conflict or invalid value we use the original value\n const originalValue =\n typeof propertyValue === 'object'\n ? (propertyValue as ConflictValue).original\n : propertyValue;\n // groupRule is defined if not we returned undefined\n // node with same value will be part of the same group\n return `${this.groupRule?.groupingOptions.itemType}-${originalValue}`\n .toLowerCase()\n .trim();\n }\n },\n nodeGenerator: (nodes) => {\n return {\n data: {\n // groupRule is defined as a virtual node only exist if the rule is defined\n categories: [LKE_NODE_GROUPING_NODE],\n properties: {\n size: nodes.size\n }\n }\n };\n },\n edgeGenerator: () => {\n return {\n data: {\n type: LKE_NODE_GROUPING_EDGE\n }\n };\n },\n showContents: true,\n duration: 300,\n padding: 10\n });\n // TODO remove setTimeout when LKE-10453 is fixed\n setTimeout(() => {\n this.transformation!.refresh();\n }, 200);\n } else {\n await this.refreshTransformation();\n }\n }\n\n /**\n * refresh the transformation\n * Called when there is a change in the rule\n */\n public async refreshTransformation(): Promise<void> {\n if (this.transformation !== undefined) {\n await this.transformation.refresh();\n await this._unpinNodes(this._getAllTransformationRawNodes());\n } else {\n await this.initTransformation();\n }\n }\n\n /**\n * init node grouping style\n */\n public initNodeGroupingStyle(): void {\n this._ogma.styles.addRule({\n nodeAttributes: {\n // Any default style will go here\n text: {\n content: (node: Node<LkNodeData> | undefined): string | undefined => {\n return this._getNodeGroupingCaption(node);\n },\n style: 'bold'\n },\n layer: -1,\n color: 'rgba(240, 240, 240)',\n innerStroke: {\n color: '#7f7f7f',\n width: 2\n }\n },\n nodeSelector: (node) => {\n return node.isVirtual();\n },\n // the style will be updated when data object is updated\n nodeDependencies: {self: {data: true}}\n });\n }\n\n /**\n * run layout on all subnodes of virtual nodes\n */\n public async runLayoutOnAllSubNodes(): Promise<void> {\n await this._ogma.transformations.afterNextUpdate();\n const rawNodesList = this._getAllTransformationRawNodes();\n const promisesList: Promise<void>[] = [];\n for (let i = 0; i < rawNodesList.length; i++) {\n // rawNodesList[i] is not null because each group has at least one node\n const subNodes = rawNodesList[i]!;\n promisesList.push(this.runSubNodesLayout(subNodes));\n }\n await Promise.all(promisesList);\n }\n\n /**\n * Run the layout on the subnodes of the virtual node\n * @param subNodes nodes part of a virtual node\n */\n public async runSubNodesLayout(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n if (subNodes.size === 0) {\n return;\n }\n\n const noEdges = subNodes.getAdjacentEdges({bothExtremities: true}).size === 0;\n if (noEdges) {\n await this._runCirclePack(subNodes);\n } else {\n await this._runForceLayout(subNodes);\n }\n }\n\n /**\n * Return the caption of a virtual node\n * @param node reference to the virtual node\n */\n private _getNodeGroupingCaption(node: Node<LkNodeData> | undefined): string | undefined {\n if (node !== undefined && node.isVirtual()) {\n // get the property value of the first node of the group (all nodes share the same property value)\n const propertyValue = node\n .getSubNodes()!\n .get(0)\n .getData(['properties', this.groupRule!.groupingOptions.propertyKey]);\n const size = node.getSubNodes()!.filter((e) => !e.hasClass('filtered')).size;\n return `${propertyValue} (${size})`;\n }\n }\n\n /**\n * Run the circle pack layout on the subnodes\n * @param subNodes\n */\n private async _runCirclePack(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n await this._ogma.algorithms.circlePack({\n nodes: subNodes,\n margin: 10,\n sort: 'asc'\n });\n }\n\n private async _runForceLayout(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n await this._ogma.layouts.force({\n nodes: subNodes,\n ...FORCE_LAYOUT_CONFIG\n });\n }\n\n private _isRuleNotApplicableToNode(node: Node<LkNodeData>): boolean {\n const propertyValue = node.getData([\n 'properties',\n this.groupRule?.groupingOptions.propertyKey ?? ''\n ]);\n return (\n // if the group rule is not defined\n this.groupRule === undefined ||\n // if rule is applied to a different category\n !node.getData('categories').includes(this.groupRule.groupingOptions.itemType) ||\n // if the property value is not defined\n !Tools.isDefined(propertyValue) ||\n // if the property value is missing\n (typeof propertyValue === 'object' && (propertyValue as MissingValue).status === 'missing')\n );\n }\n\n /**\n * Unpin list of nodes\n * @param nodes\n * @private\n */\n private async _unpinNodes(nodes: Array<NodeList | null>): Promise<void> {\n await Promise.all(\n nodes.map((nodeList) => {\n if (nodeList !== null) {\n return nodeList.setAttribute('layoutable', true);\n }\n })\n );\n }\n\n /**\n * Get all the raw nodes part of the transformation\n * @private\n */\n private _getAllTransformationRawNodes(): Array<NodeList | null> {\n const virtualNodes = this._getVirtualNodesOfTransformation();\n return virtualNodes.getSubNodes();\n }\n\n /**\n * Get the virtual nodes of the transformation\n * @private\n */\n private _getVirtualNodesOfTransformation(): NodeList<LkNodeData, LkEdgeData> {\n // @ts-ignore getContext exists on the transformation but hidden by the types\n return this.transformation.getContext().virtualNodes;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nodeGrouping.js","sourceRoot":"","sources":["../../../src/ogma/features/nodeGrouping.ts"],"names":[],"mappings":"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","sourcesContent":["import {Transformation, Node, NodeList, StyleRule} from '@linkurious/ogma';\nimport {LkEdgeData, LkNodeData, MissingValue, NodeGroupingRule} from '@linkurious/rest-client';\nimport sha1 from 'sha1';\n\nimport {FORCE_LAYOUT_CONFIG, LKOgma} from '../index';\nimport {Tools} from '../../tools/tools';\n\nexport const LKE_NODE_GROUPING_EDGE = 'LKE_NODE_GROUPING_EDGE';\nexport const LKE_NODE_GROUPING_NODE = 'LKE_NODE_GROUPING_NODE';\n\nexport class NodeGroupingTransformation {\n public transformation?: Transformation<LkNodeData, LkEdgeData>;\n public groupRule?: NodeGroupingRule;\n public nodeGroupingStyleRule?: StyleRule<LkNodeData, LkEdgeData>;\n private _ogma: LKOgma;\n\n constructor(ogma: LKOgma) {\n this._ogma = ogma;\n }\n\n /**\n * Set the grouping rule\n * @param rule of grouping\n */\n public setGroupingRule(rule: NodeGroupingRule | undefined): void {\n this.groupRule = rule;\n }\n\n /**\n * create a node grouping transformation\n * It uses groupRule to define the rule\n * Group the nodes based on a category type and a property value\n */\n public async initTransformation(): Promise<void> {\n if (this.transformation === undefined) {\n this.transformation = this._ogma.transformations.addNodeGrouping({\n groupIdFunction: (node) => {\n if (this._isRuleNotApplicableToNode(node)) {\n return undefined;\n } else {\n const propertyValue = this._findGroupingPropertyValue(node);\n // groupRule is defined if not we returned undefined\n // node with same value will be part of the same group\n return `${this.groupRule?.groupingOptions.itemTypes.join('-')}-${propertyValue}`\n .toLowerCase()\n .trim();\n }\n },\n nodeGenerator: (nodes) => {\n return {\n data: {\n categories: [LKE_NODE_GROUPING_NODE],\n properties: {},\n nodeGroupId: this._findNodeGroupId(nodes)\n }\n };\n },\n edgeGenerator: () => {\n return {\n data: {\n type: LKE_NODE_GROUPING_EDGE\n }\n };\n },\n showContents: true,\n duration: 300,\n padding: 10\n });\n } else {\n await this.refreshTransformation();\n }\n }\n\n /**\n * refresh the transformation\n * Called when there is a change in the rule\n */\n public async refreshTransformation(): Promise<void> {\n if (this.transformation !== undefined) {\n await this.transformation.refresh();\n await this._unpinNodes(this._getAllTransformationRawNodes());\n } else {\n await this.initTransformation();\n }\n }\n\n /**\n * init node grouping style\n */\n public initNodeGroupingStyle(): void {\n this.nodeGroupingStyleRule = this._ogma.styles.addRule({\n nodeAttributes: {\n // Any default style will go here\n text: {\n content: (node: Node<LkNodeData> | undefined): string | undefined => {\n return this._getNodeGroupingCaption(node);\n },\n style: 'bold'\n },\n layer: -1,\n color: 'rgba(240, 240, 240)',\n innerStroke: {\n color: '#7f7f7f',\n width: 2\n }\n },\n nodeSelector: (node) => {\n // TODO: Tools.isDefined(node.getSubNodes()) is a work around for an ogma issue visible when using image export plugin with Node grouping\n // remove when updating to Ogma v5.1.x\n return node.isVirtual() && Tools.isDefined(node.getSubNodes());\n },\n // the style will be updated when data object is updated\n nodeDependencies: {self: {data: true}}\n });\n }\n\n public async refreshNodeGroupingStyle(): Promise<void> {\n await this.nodeGroupingStyleRule?.refresh();\n }\n\n /**\n * run layout on all subnodes of virtual nodes\n */\n public async runLayoutOnAllSubNodes(): Promise<void> {\n await this._ogma.transformations.afterNextUpdate();\n const rawNodesList = this._getAllTransformationRawNodes();\n const promisesList: Promise<void>[] = [];\n for (let i = 0; i < rawNodesList.length; i++) {\n // rawNodesList[i] is not null because each group has at least one node\n const subNodes = rawNodesList[i]!;\n promisesList.push(this.runSubNodesLayout(subNodes));\n }\n await Promise.all(promisesList);\n }\n\n /**\n * Run the layout on the subnodes of the virtual node\n * @param subNodes nodes part of a virtual node\n */\n public async runSubNodesLayout(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n if (subNodes.size === 0) {\n return;\n }\n\n const noEdges = subNodes.getAdjacentEdges({bothExtremities: true}).size === 0;\n if (noEdges) {\n await this._runCirclePack(subNodes);\n } else {\n await this._runForceLayout(subNodes);\n }\n }\n\n /**\n * Get the virtual nodes of the transformation\n * @private\n */\n public getVirtualNodesOfTransformation(): NodeList<LkNodeData, LkEdgeData> {\n // @ts-ignore getContext exists on the transformation but hidden by the types\n return this.transformation.getContext().virtualNodes;\n }\n\n /**\n * Return the caption of a virtual node\n * @param node reference to the virtual node\n */\n private _getNodeGroupingCaption(node: Node<LkNodeData> | undefined): string | undefined {\n if (node !== undefined && node.isVirtual()) {\n // get the property value of the first node of the group (all nodes share the same property value)\n const lkPropertyValue = node\n .getSubNodes()!\n .get(0)\n .getData(['properties', this.groupRule!.groupingOptions.propertyKey]);\n const propertyValue = Tools.getValueFromLkProperty(lkPropertyValue);\n const size = node.getSubNodes()!.filter((e) => !e.hasClass('filtered')).size;\n return `${propertyValue} (${size})`;\n }\n }\n\n /**\n * Run the circle pack layout on the subnodes\n * @param subNodes\n */\n private async _runCirclePack(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n await this._ogma.algorithms.circlePack({\n nodes: subNodes,\n margin: 10,\n sort: 'asc'\n });\n }\n\n private async _runForceLayout(subNodes: NodeList<LkNodeData, LkEdgeData>): Promise<void> {\n await this._ogma.layouts.force({\n nodes: subNodes,\n ...FORCE_LAYOUT_CONFIG\n });\n }\n\n private _isRuleNotApplicableToNode(node: Node<LkNodeData>): boolean {\n const propertyValue = node.getData([\n 'properties',\n this.groupRule?.groupingOptions.propertyKey ?? ''\n ]);\n return (\n // if the group rule is not defined\n this.groupRule === undefined ||\n // if rule is applied to a different category\n this.groupRule.groupingOptions.itemTypes.every(\n (itemType) => !node.getData('categories').includes(itemType)\n ) ||\n // if the property value is not defined\n !Tools.isDefined(propertyValue) ||\n // if the property value is missing\n (typeof propertyValue === 'object' && (propertyValue as MissingValue).status === 'missing')\n );\n }\n\n /**\n * Unpin list of nodes\n * @param nodes\n * @private\n */\n private async _unpinNodes(nodes: Array<NodeList | null>): Promise<void> {\n await Promise.all(\n nodes.map((nodeList) => {\n if (nodeList !== null) {\n return nodeList.setAttribute('layoutable', true);\n }\n })\n );\n }\n\n /**\n * Get all the raw nodes part of the transformation\n * @private\n */\n private _getAllTransformationRawNodes(): Array<NodeList | null> {\n const virtualNodes = this.getVirtualNodesOfTransformation();\n return virtualNodes.getSubNodes();\n }\n\n private _findGroupingPropertyValue(node: Node<LkNodeData>): string {\n const propertyValue = node.getData([\n 'properties',\n this.groupRule?.groupingOptions.propertyKey ?? ''\n ]);\n return `${Tools.getValueFromLkProperty(propertyValue)}`;\n }\n\n /**\n * Return a hashed string that represents the group id\n */\n private _findNodeGroupId(nodes: NodeList<LkNodeData, LkEdgeData>): string {\n const propertyValue = this._findGroupingPropertyValue(nodes.get(0));\n return sha1(\n `${this.groupRule?.name}-${this.groupRule?.groupingOptions.itemTypes.join(\n '-'\n )}-${propertyValue}`\n );\n }\n}\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DummyNodeList = exports.RxViz = void 0;
|
|
4
|
-
const index_1 = require("../index");
|
|
5
4
|
const OgmaStore_1 = require("./OgmaStore");
|
|
6
5
|
class RxViz {
|
|
7
6
|
constructor(ogma) {
|
|
@@ -21,16 +20,31 @@ class RxViz {
|
|
|
21
20
|
* Listen to ogma events and update the state
|
|
22
21
|
*/
|
|
23
22
|
listenToSelectionEvents() {
|
|
24
|
-
let
|
|
23
|
+
let currentAnimationEnd = Date.now();
|
|
24
|
+
let isCurrentlyAnimating = false;
|
|
25
25
|
this._ogma.events.on('animate', (e) => {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
if (e.updatesPositions === false) {
|
|
27
|
+
// ignore animations that don't change the node/edge positions, e.g: Hover
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!isCurrentlyAnimating) {
|
|
31
|
+
isCurrentlyAnimating = true;
|
|
32
|
+
this._store.dispatch((state) => (Object.assign(Object.assign({}, state), { animation: true })));
|
|
33
|
+
}
|
|
34
|
+
const nextAnimationEnd = Math.max(currentAnimationEnd, Date.now() + e.duration);
|
|
35
|
+
if (nextAnimationEnd === currentAnimationEnd) {
|
|
36
|
+
// Say animation 2 fires after animation 1 but has a much shorter duration
|
|
37
|
+
// In such a way that animation 1 will still complete after animation 2
|
|
38
|
+
// In that case we can safely ignore animation 2
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
currentAnimationEnd = nextAnimationEnd;
|
|
42
|
+
const safeAnimationTimeoutMs = currentAnimationEnd - Date.now() + 16; // animation duration + duration of a single frame at 60 fps = 16ms
|
|
28
43
|
clearTimeout(this._animationThrottle);
|
|
29
44
|
this._animationThrottle = setTimeout(() => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}, e.duration + index_1.ANIMATION_DURATION + 100);
|
|
45
|
+
isCurrentlyAnimating = false;
|
|
46
|
+
this._store.dispatch((state) => (Object.assign(Object.assign({}, state), { animation: false })));
|
|
47
|
+
}, safeAnimationTimeoutMs);
|
|
34
48
|
});
|
|
35
49
|
this._ogma.events.on('dragStart', () => {
|
|
36
50
|
this._store.dispatch((state) => (Object.assign(Object.assign({}, state), { animation: true })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../../src/ogma/features/reactive.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport Ogma, {NodeList, EdgeList} from '@linkurious/ogma';\nimport {LkEdgeData, LkNodeData} from '@linkurious/rest-client';\n\nimport {ANIMATION_DURATION, LKOgma} from '../index';\n\nimport {OgmaStore} from './OgmaStore';\n\nexport interface OgmaState {\n selection: NodeList<LkNodeData, LkEdgeData> | EdgeList<LkEdgeData, LkNodeData>;\n items: {node: Array<string | number>; edge: Array<string | number>};\n changes: {entityType: 'node' | 'edge'; input: string | string[] | null; value: any} | undefined;\n animation: boolean;\n}\n\nexport class RxViz {\n private _ogma: Ogma;\n private _store: OgmaStore = new OgmaStore({\n selection: new DummyNodeList() as any,\n items: {node: [], edge: []},\n changes: undefined,\n animation: false\n });\n private _animationThrottle: any;\n\n constructor(ogma: LKOgma) {\n this._ogma = ogma;\n this.listenToSelectionEvents();\n }\n\n public get store(): OgmaStore {\n return this._store;\n }\n\n /**\n * Listen to ogma events and update the state\n */\n public listenToSelectionEvents(): void {\n let count = 0;\n this._ogma.events.on('animate', (e: {duration: number}) => {\n const animationEnd = ++count;\n this._store.dispatch((state) => ({...state, animation: true}));\n clearTimeout(this._animationThrottle);\n this._animationThrottle = setTimeout(() => {\n if (count === animationEnd) {\n this._store.dispatch((state) => ({...state, animation: false}));\n }\n }, e.duration + ANIMATION_DURATION + 100);\n });\n\n this._ogma.events.on('dragStart', () => {\n this._store.dispatch((state) => ({...state, animation: true}));\n });\n\n this._ogma.events.on('dragEnd', () => {\n this._store.dispatch((state) => ({...state, animation: false}));\n });\n\n this._ogma.events.on('addNodes', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('removeNodes', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('addEdges', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('removeEdges', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n\n this._ogma.events.on('nodesSelected', () => {\n this._store.dispatch(this.storeNodeSelection.bind(this));\n });\n\n this._ogma.events.on('edgesSelected', () => {\n this._store.dispatch(this.storeEdgeSelection.bind(this));\n });\n\n this._ogma.events.on('nodesUnselected', () => {\n this._store.dispatch(this.storeNodeSelection.bind(this));\n });\n\n this._ogma.events.on('edgesUnselected', () => {\n this._store.dispatch(this.storeEdgeSelection.bind(this));\n });\n\n this._ogma.events.on('updateNodeData', (evt) => {\n if (evt !== undefined) {\n evt.changes.forEach((change) => {\n this._store.dispatch((state) => ({\n ...state,\n changes: {\n entityType: 'node',\n input: change.property,\n value: change.newValues[0]\n }\n }));\n });\n }\n });\n\n this._ogma.events.on('updateEdgeData', (evt) => {\n if (evt !== undefined) {\n evt.changes.forEach((change) => {\n this._store.dispatch((state) => ({\n ...state,\n changes: {\n entityType: 'edge',\n input: change.property,\n value: change.newValues[0]\n }\n }));\n });\n }\n });\n }\n\n /**\n * Store new items in state\n */\n private storeItems(state: OgmaState): OgmaState {\n return {\n ...state,\n items: {\n node: this._ogma.getNodes().getId(),\n edge: this._ogma.getEdges().getId()\n }\n };\n }\n\n /**\n * Store new node selection in state\n */\n private storeNodeSelection(state: OgmaState): OgmaState {\n return {\n ...state,\n selection: this._ogma.getSelectedNodes()\n };\n }\n\n /**\n * store new edge selection in state\n */\n private storeEdgeSelection(state: OgmaState): OgmaState {\n return {\n ...state,\n selection: this._ogma.getSelectedEdges()\n };\n }\n}\n\nexport class DummyNodeList {\n public size = 0;\n public isNode = true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../../src/ogma/features/reactive.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport Ogma, {NodeList, EdgeList} from '@linkurious/ogma';\nimport {LkEdgeData, LkNodeData} from '@linkurious/rest-client';\n\nimport {LKOgma} from '../index';\n\nimport {OgmaStore} from './OgmaStore';\n\nexport interface OgmaState {\n selection: NodeList<LkNodeData, LkEdgeData> | EdgeList<LkEdgeData, LkNodeData>;\n items: {node: Array<string | number>; edge: Array<string | number>};\n changes: {entityType: 'node' | 'edge'; input: string | string[] | null; value: any} | undefined;\n /**\n * Indicates whether the positions of nodes or edges are currently transitioning.\n */\n animation: boolean;\n}\n\nexport class RxViz {\n private _ogma: Ogma;\n private _store: OgmaStore = new OgmaStore({\n selection: new DummyNodeList() as any,\n items: {node: [], edge: []},\n changes: undefined,\n animation: false\n });\n private _animationThrottle: any;\n\n constructor(ogma: LKOgma) {\n this._ogma = ogma;\n this.listenToSelectionEvents();\n }\n\n public get store(): OgmaStore {\n return this._store;\n }\n\n /**\n * Listen to ogma events and update the state\n */\n public listenToSelectionEvents(): void {\n let currentAnimationEnd = Date.now();\n let isCurrentlyAnimating = false;\n this._ogma.events.on('animate', (e: {duration: number; updatesPositions: boolean}) => {\n if (e.updatesPositions === false) {\n // ignore animations that don't change the node/edge positions, e.g: Hover\n return;\n }\n if (!isCurrentlyAnimating) {\n isCurrentlyAnimating = true;\n this._store.dispatch((state) => ({...state, animation: true}));\n }\n const nextAnimationEnd = Math.max(currentAnimationEnd, Date.now() + e.duration);\n if (nextAnimationEnd === currentAnimationEnd) {\n // Say animation 2 fires after animation 1 but has a much shorter duration\n // In such a way that animation 1 will still complete after animation 2\n // In that case we can safely ignore animation 2\n return;\n }\n currentAnimationEnd = nextAnimationEnd;\n const safeAnimationTimeoutMs = currentAnimationEnd - Date.now() + 16; // animation duration + duration of a single frame at 60 fps = 16ms\n clearTimeout(this._animationThrottle);\n this._animationThrottle = setTimeout(() => {\n isCurrentlyAnimating = false;\n this._store.dispatch((state) => ({...state, animation: false}));\n }, safeAnimationTimeoutMs);\n });\n\n this._ogma.events.on('dragStart', () => {\n this._store.dispatch((state) => ({...state, animation: true}));\n });\n\n this._ogma.events.on('dragEnd', () => {\n this._store.dispatch((state) => ({...state, animation: false}));\n });\n\n this._ogma.events.on('addNodes', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('removeNodes', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('addEdges', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n this._ogma.events.on('removeEdges', () => {\n this._store.dispatch(this.storeItems.bind(this));\n });\n\n this._ogma.events.on('nodesSelected', () => {\n this._store.dispatch(this.storeNodeSelection.bind(this));\n });\n\n this._ogma.events.on('edgesSelected', () => {\n this._store.dispatch(this.storeEdgeSelection.bind(this));\n });\n\n this._ogma.events.on('nodesUnselected', () => {\n this._store.dispatch(this.storeNodeSelection.bind(this));\n });\n\n this._ogma.events.on('edgesUnselected', () => {\n this._store.dispatch(this.storeEdgeSelection.bind(this));\n });\n\n this._ogma.events.on('updateNodeData', (evt) => {\n if (evt !== undefined) {\n evt.changes.forEach((change) => {\n this._store.dispatch((state) => ({\n ...state,\n changes: {\n entityType: 'node',\n input: change.property,\n value: change.newValues[0]\n }\n }));\n });\n }\n });\n\n this._ogma.events.on('updateEdgeData', (evt) => {\n if (evt !== undefined) {\n evt.changes.forEach((change) => {\n this._store.dispatch((state) => ({\n ...state,\n changes: {\n entityType: 'edge',\n input: change.property,\n value: change.newValues[0]\n }\n }));\n });\n }\n });\n }\n\n /**\n * Store new items in state\n */\n private storeItems(state: OgmaState): OgmaState {\n return {\n ...state,\n items: {\n node: this._ogma.getNodes().getId(),\n edge: this._ogma.getEdges().getId()\n }\n };\n }\n\n /**\n * Store new node selection in state\n */\n private storeNodeSelection(state: OgmaState): OgmaState {\n return {\n ...state,\n selection: this._ogma.getSelectedNodes()\n };\n }\n\n /**\n * store new edge selection in state\n */\n private storeEdgeSelection(state: OgmaState): OgmaState {\n return {\n ...state,\n selection: this._ogma.getSelectedEdges()\n };\n }\n}\n\nexport class DummyNodeList {\n public size = 0;\n public isNode = true;\n}\n"]}
|
|
@@ -150,4 +150,25 @@ export declare class StylesViz {
|
|
|
150
150
|
* @param {Array<LKStyleRule>} shapeStyleRules
|
|
151
151
|
*/
|
|
152
152
|
refreshEdgeShape(shapeStyleRules: Array<LKStyleRule<IEdgeStyle>>): void;
|
|
153
|
+
/**
|
|
154
|
+
* Get node radius
|
|
155
|
+
* This is a workaround for an ogma issue where the radius of virtual nodes is always set to 5
|
|
156
|
+
* TODO: check if this is still needed after ogma release the new improvement for transformation v5.X
|
|
157
|
+
*/
|
|
158
|
+
private _getNodeRadius;
|
|
159
|
+
/**
|
|
160
|
+
* Calculate the scale of the pin badge related to the node radius
|
|
161
|
+
* This is useful when dealing wih huge nodes, and we don't want the badge to be big
|
|
162
|
+
* If the node is small enough, the badge will be 0.46 of the node radius
|
|
163
|
+
* Else it will be 5 / radius
|
|
164
|
+
*/
|
|
165
|
+
private _findPinBadgeScale;
|
|
166
|
+
/**
|
|
167
|
+
* Find the color of the pin badge text
|
|
168
|
+
*/
|
|
169
|
+
private _findPinBadgeTextColor;
|
|
170
|
+
/**
|
|
171
|
+
* Find the color of the pin badge background
|
|
172
|
+
*/
|
|
173
|
+
private _findPinBadgeBackgroundColor;
|
|
153
174
|
}
|
|
@@ -380,15 +380,10 @@ class StylesViz {
|
|
|
380
380
|
badges: {
|
|
381
381
|
bottomRight: (node) => {
|
|
382
382
|
if (node !== undefined && !node.getAttribute('layoutable')) {
|
|
383
|
-
const nodeColor = Array.isArray(node.getAttribute('color'))
|
|
384
|
-
? node.getAttribute('color')[0]
|
|
385
|
-
: node.getAttribute('color');
|
|
386
|
-
const textColor = __1.OgmaTools.isBright(nodeColor)
|
|
387
|
-
? DARK_FONT_COLOR
|
|
388
|
-
: CLEAR_FONT_COLOR;
|
|
389
383
|
return {
|
|
390
|
-
color:
|
|
384
|
+
color: this._findPinBadgeBackgroundColor(node),
|
|
391
385
|
minVisibleSize: 20,
|
|
386
|
+
scale: this._findPinBadgeScale(node),
|
|
392
387
|
stroke: {
|
|
393
388
|
width: 0,
|
|
394
389
|
color: null
|
|
@@ -396,7 +391,7 @@ class StylesViz {
|
|
|
396
391
|
text: {
|
|
397
392
|
font: 'FontAwesome',
|
|
398
393
|
scale: 0.4,
|
|
399
|
-
color:
|
|
394
|
+
color: this._findPinBadgeTextColor(node),
|
|
400
395
|
content: node.getAttribute('layoutable') ? null : '\uf08d'
|
|
401
396
|
}
|
|
402
397
|
};
|
|
@@ -641,6 +636,54 @@ class StylesViz {
|
|
|
641
636
|
this._ogmaEdgeShape.refresh();
|
|
642
637
|
}
|
|
643
638
|
}
|
|
639
|
+
/**
|
|
640
|
+
* Get node radius
|
|
641
|
+
* This is a workaround for an ogma issue where the radius of virtual nodes is always set to 5
|
|
642
|
+
* TODO: check if this is still needed after ogma release the new improvement for transformation v5.X
|
|
643
|
+
*/
|
|
644
|
+
_getNodeRadius(node) {
|
|
645
|
+
var _a;
|
|
646
|
+
if (!node.isVirtual()) {
|
|
647
|
+
return node.getAttribute('radius');
|
|
648
|
+
}
|
|
649
|
+
else {
|
|
650
|
+
// get the width and height of the box that contains the nodes inside the virtual node
|
|
651
|
+
const { width, height } = (_a = node.getSubNodes()) === null || _a === void 0 ? void 0 : _a.getBoundingBox();
|
|
652
|
+
return Math.max(width, height);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
/**
|
|
656
|
+
* Calculate the scale of the pin badge related to the node radius
|
|
657
|
+
* This is useful when dealing wih huge nodes, and we don't want the badge to be big
|
|
658
|
+
* If the node is small enough, the badge will be 0.46 of the node radius
|
|
659
|
+
* Else it will be 5 / radius
|
|
660
|
+
*/
|
|
661
|
+
_findPinBadgeScale(node) {
|
|
662
|
+
// the maximum radius for the badge
|
|
663
|
+
const MAX = 5;
|
|
664
|
+
const defaultRatio = 0.46;
|
|
665
|
+
const bigNodeRatio = 0.17;
|
|
666
|
+
const radius = this._getNodeRadius(node);
|
|
667
|
+
return radius * defaultRatio > MAX ? bigNodeRatio : defaultRatio;
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Find the color of the pin badge text
|
|
671
|
+
*/
|
|
672
|
+
_findPinBadgeTextColor(node) {
|
|
673
|
+
if (node.isVirtual()) {
|
|
674
|
+
return CLEAR_FONT_COLOR;
|
|
675
|
+
}
|
|
676
|
+
const nodeColor = Array.isArray(node.getAttribute('color'))
|
|
677
|
+
? node.getAttribute('color')[0]
|
|
678
|
+
: node.getAttribute('color');
|
|
679
|
+
return __1.OgmaTools.isBright(nodeColor) ? DARK_FONT_COLOR : CLEAR_FONT_COLOR;
|
|
680
|
+
}
|
|
681
|
+
/**
|
|
682
|
+
* Find the color of the pin badge background
|
|
683
|
+
*/
|
|
684
|
+
_findPinBadgeBackgroundColor(node) {
|
|
685
|
+
return node.isVirtual() ? __1.BASE_GREY : 'inherit';
|
|
686
|
+
}
|
|
644
687
|
}
|
|
645
688
|
exports.StylesViz = StylesViz;
|
|
646
689
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ogma/features/styles.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport * as o from '@linkurious/ogma';\nimport {\n Edge,\n EdgeAttributesValue,\n NodeAttributesValue,\n StyleClass,\n StyleRule\n} from '@linkurious/ogma';\nimport {\n GenericObject,\n IEdgeStyle,\n INodeStyle,\n IStyleIcon,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n OgmaEdgeShape,\n OgmaNodeShape,\n TextOptions\n} from '@linkurious/rest-client';\n\nimport {\n BASE_GREY,\n EdgeAttributes,\n LKOgma,\n NodeAttributes,\n OgmaTools,\n StyleRule as LKStyleRule,\n StyleRules,\n StyleType\n} from '../..';\nimport {Tools} from '../../tools/tools';\nimport {OgmaImage} from '../../styles/nodeAttributes';\n\nexport interface StylesConfig {\n nodeColorStyleRules: Array<LKStyleRule>;\n nodeIconStyleRules: Array<LKStyleRule>;\n nodeSizeStyleRules: Array<LKStyleRule>;\n nodeShapeStyleRules?: Array<LKStyleRule>;\n edgeColorStyleRules: Array<LKStyleRule>;\n edgeWidthStyleRules: Array<LKStyleRule>;\n edgeShapeStyleRules?: Array<LKStyleRule>;\n}\n\nconst HOVERED_SELECTED_NODE_STYLE: NodeAttributesValue<LkNodeData, LkEdgeData> = {\n text: {\n style: 'bold',\n backgroundColor: '#fff',\n minVisibleSize: 0\n },\n outerStroke: {width: 2},\n outline: false\n};\n\nconst HOVERED_SELECTED_EDGE_STYLE: EdgeAttributesValue<LkEdgeData, LkNodeData> = {\n text: {\n style: 'bold',\n backgroundColor: '#fff',\n minVisibleSize: 0\n },\n outline: false\n};\n\nconst NODE_HALO_CONFIGURATION = {\n color: '#FFF',\n width: 7,\n scalingMethod: 'scaled',\n strokeWidth: 0,\n hideNonAdjacentEdges: false\n} as {\n color: '#FFF';\n width: 7;\n strokeWidth: 0;\n};\n\nconst EDGE_HALO_CONFIGURATION = {\n color: '#FFF',\n scalingMethod: 'scaled',\n width: 4\n} as {\n color: '#FFF';\n width: 4;\n};\n\nconst DEFAULT_OGMA_FONT = \"'roboto', sans-serif\";\nconst DARK_FONT_COLOR = '#000';\nconst CLEAR_FONT_COLOR = '#FFF';\nconst ITEM_DEFAULT_COLOR = '#7f7f7f';\nexport const FILTER_OPACITY = 0.2;\n\nexport class StylesViz {\n private _ogma: LKOgma;\n private _exportClass!: StyleClass;\n private _nodeDefaultStylesRules!: StyleRule<LkNodeData, LkEdgeData>;\n // @ts-ignore\n private _nodeDefaultHaloRules!: StyleRule<LkNodeData, LkEdgeData>;\n private _edgeDefaultStylesRules!: StyleRule<LkNodeData, LkEdgeData>;\n // @ts-ignore\n private _edgeDefaultHaloRules!: StyleRule<LkNodeData, LkEdgeData>;\n\n private _nodeAttributes: NodeAttributes = new NodeAttributes({});\n private _edgeAttributes: EdgeAttributes = new EdgeAttributes({});\n\n private _ogmaNodeColor!: StyleRule;\n private _ogmaNodeIcon!: StyleRule;\n private _ogmaNodeSize!: StyleRule;\n private _ogmaNodeShape!: StyleRule;\n private _ogmaEdgeColor!: StyleRule;\n private _ogmaEdgeWidth!: StyleRule;\n private _ogmaEdgeShape!: StyleRule;\n private _defaultConfiguration: {\n node: {\n nodeRadius?: number;\n shape?: OgmaNodeShape;\n text?: TextOptions & {\n nodePosition?: 'right' | 'left' | 'top' | 'bottom' | 'center';\n };\n };\n edge: {\n edgeWidth?: number;\n shape?: OgmaEdgeShape;\n text?: TextOptions;\n };\n };\n\n constructor(\n ogma: LKOgma,\n configuration: {\n node: {\n nodeRadius?: number;\n shape?: OgmaNodeShape;\n text?: TextOptions & {\n nodePosition?: 'right' | 'left' | 'top' | 'bottom' | 'center';\n };\n };\n edge: {\n edgeWidth?: number;\n shape?: OgmaEdgeShape;\n text?: TextOptions;\n };\n baseUrl?: string;\n }\n ) {\n this._ogma = ogma;\n this._defaultConfiguration = configuration;\n this._nodeAttributes.setBaseUrl(configuration.baseUrl);\n }\n\n /**\n * Set nodes default styles based on the configuration\n */\n public setNodesDefaultStyles(): void {\n // setting selection and hover attributes\n this._ogma.styles.setHoveredNodeAttributes(HOVERED_SELECTED_NODE_STYLE);\n this._ogma.styles.setSelectedNodeAttributes(HOVERED_SELECTED_NODE_STYLE);\n // setting default styles\n this._nodeDefaultStylesRules = this._ogma.styles.addRule({\n nodeAttributes: {\n text: {\n padding: 5,\n minVisibleSize:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.minVisibleSize\n ? this._defaultConfiguration.node.text.minVisibleSize\n : 12,\n maxLineLength:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.maxLineLength !== undefined\n ? this._defaultConfiguration.node.text.maxLineLength\n : 30,\n position:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.nodePosition !== undefined\n ? this._defaultConfiguration.node.text.nodePosition\n : 'bottom',\n backgroundColor:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.backgroundColor !== undefined\n ? this._defaultConfiguration.node.text.backgroundColor\n : undefined,\n font:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.font !== undefined\n ? this._defaultConfiguration.node.text.font\n : \"'roboto', sans-serif\",\n color:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.color !== undefined\n ? this._defaultConfiguration.node.text.color\n : 'black',\n size:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.size !== undefined\n ? this._defaultConfiguration.node.text.size\n : 14,\n margin: 5\n },\n radius: this.defaultNodeRadius(this._defaultConfiguration.node),\n icon: {\n minVisibleSize: 15\n },\n color: ITEM_DEFAULT_COLOR,\n shape:\n this._defaultConfiguration.node.shape !== undefined\n ? this._defaultConfiguration.node.shape\n : ('circle' as OgmaNodeShape),\n innerStroke: {\n width: 3\n },\n outline: false\n }\n });\n }\n\n /**\n * Set edges default styles based on the configuration\n */\n public setEdgesDefaultStyles(): void {\n // setting selection and hover attributes\n this._ogma.styles.setHoveredEdgeAttributes(HOVERED_SELECTED_EDGE_STYLE);\n this._ogma.styles.setSelectedEdgeAttributes(HOVERED_SELECTED_EDGE_STYLE);\n // setting default styles\n this._edgeDefaultStylesRules = this._ogma.styles.addRule({\n edgeAttributes: {\n text: {\n minVisibleSize:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.minVisibleSize\n ? this._defaultConfiguration.edge.text.minVisibleSize\n : 3,\n maxLineLength:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.maxLineLength !== undefined\n ? this._defaultConfiguration.edge.text.maxLineLength\n : 30,\n backgroundColor:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.backgroundColor !== undefined\n ? this._defaultConfiguration.edge.text.backgroundColor\n : undefined,\n font:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.font !== undefined\n ? this._defaultConfiguration.edge.text.font\n : \"'roboto', sans-serif\",\n color:\n this._defaultConfiguration.edge?.text !== undefined &&\n this._defaultConfiguration.edge.text.color !== undefined\n ? this._defaultConfiguration.edge.text.color\n : 'black',\n size:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.size !== undefined\n ? this._defaultConfiguration.edge.text.size\n : 14\n },\n width: this.defaultEdgeWidth(this._defaultConfiguration.edge),\n shape:\n this._defaultConfiguration.edge.shape !== undefined\n ? this._defaultConfiguration.edge.shape\n : 'arrow',\n color: ITEM_DEFAULT_COLOR\n }\n });\n }\n\n /**\n * Set nodes default styles based on the configuration\n */\n public setNodesDefaultHalo(): void {\n // setting default halo style\n this._nodeDefaultHaloRules = this._ogma.styles.addRule({\n nodeSelector: (node) => node && !node.hasClass('filtered'),\n nodeAttributes: {\n halo: (node) => {\n if (\n node !== undefined &&\n !node.hasClass('filtered') &&\n (node.isSelected() ||\n node.getAdjacentNodes({}).isSelected().includes(true) ||\n node.getAdjacentEdges().isSelected().includes(true))\n ) {\n return {\n ...NODE_HALO_CONFIGURATION,\n scalingMethod: this._ogma.geo.enabled() ? 'fixed' : 'scaled'\n };\n }\n return null;\n }\n },\n // recalculate the rule *only* when itself or adjacent\n // elements change their selection status\n nodeDependencies: {\n self: {\n selection: true\n },\n adjacentNodes: {\n selection: true\n },\n adjacentEdges: {\n selection: true\n }\n }\n });\n }\n\n /**\n * Set edges default styles based on the configuration\n */\n public setEdgesDefaultHalo(): void {\n // setting default halo styles\n this._edgeDefaultHaloRules = this._ogma.styles.addRule({\n edgeSelector: (edge: Edge) =>\n edge && edge.getSource() && edge.getTarget() && !edge.hasClass('filtered'),\n edgeAttributes: {\n halo: (edge) => {\n if (\n edge &&\n !edge.hasClass('filtered') &&\n (edge.isSelected() || edge.getSource().isSelected() || edge.getTarget().isSelected())\n ) {\n return {\n ...EDGE_HALO_CONFIGURATION,\n scalingMethod: this._ogma.geo.enabled() ? 'fixed' : 'scaled'\n };\n }\n return null;\n }\n },\n // this rule will only be invoked when the selection status\n // of the edge or it's extremities is changed\n edgeDependencies: {\n self: {\n selection: true\n },\n extremities: {\n selection: true\n }\n }\n });\n }\n\n /**\n * Return the default node radius set in configuration or 5\n *\n * @returns {number}\n */\n private defaultNodeRadius(styles: any): number {\n return this.defaultStylesHas(styles, ['nodeRadius']) ? styles.nodeRadius : 5;\n }\n\n /**\n * Return the default edge width set in configuration or 1\n *\n * @returns {number}\n */\n private defaultEdgeWidth(styles: any): number {\n return this.defaultStylesHas(styles, ['edgeWidth']) ? styles.edgeWidth : 1;\n }\n\n /**\n * Check if a style property exists in the default styles object\n */\n private defaultStylesHas(styles: GenericObject<unknown>, propertyPath: Array<string>): boolean {\n if (!Tools.isDefined(styles)) {\n return false;\n }\n return Tools.getIn(styles, propertyPath) !== undefined;\n }\n\n /**\n * Set styles for the class \"filtered\"\n */\n public setFilterClass(): void {\n this._ogma.styles.createClass({\n name: 'filtered',\n nodeAttributes: {\n opacity: FILTER_OPACITY,\n layer: (node): number => {\n // if the node is part of a virtual node, it should be on top\n if (node.getMetaNode() !== undefined) {\n return 1;\n }\n return -1;\n },\n detectable: false,\n badges: {\n topRight: {\n text: null\n },\n bottomRight: {\n text: null\n }\n },\n text: null,\n color: 'rgb(240, 240, 240)',\n innerStroke: {\n width: 1,\n color: BASE_GREY,\n minVisibleSize: 1\n },\n shape: 'circle',\n image: null,\n icon: null,\n radius: '100%'\n },\n edgeAttributes: {\n opacity: FILTER_OPACITY,\n layer: (edge): number => {\n const isEdgeInsideNodeGroup = edge\n .getExtremities()\n .getMetaNode()\n .some((node) => node !== null);\n // if the edge is part of a virtual node, it should be on top\n if (!edge.isVirtual() && isEdgeInsideNodeGroup) {\n return 1;\n }\n return -1;\n },\n detectable: false,\n text: null,\n color: BASE_GREY,\n shape: 'line',\n width: 0.2\n }\n });\n }\n\n /**\n * Set the class for exported nodes and edges\n */\n public setExportClass(textWrappingLength?: boolean): void {\n if (!this._exportClass) {\n this._exportClass = this._ogma.styles.createClass({\n name: 'exported',\n nodeAttributes: {\n text: {\n minVisibleSize: 0,\n size: 12,\n maxLineLength: textWrappingLength ? 30 : 0\n },\n halo: null\n },\n edgeAttributes: {\n text: {\n minVisibleSize: 0,\n size: 12\n },\n halo: null\n }\n });\n } else {\n this._exportClass.update({\n nodeAttributes: {\n text: {\n maxLineLength: textWrappingLength ? 30 : 0\n },\n halo: null\n }\n });\n }\n }\n\n /**\n * Set the rule to display badges\n */\n public setBadgeRule() {\n this._ogma.styles.createClass({\n name: 'degreeIndicator',\n nodeAttributes: {\n badges: {\n topRight: (node) => {\n if (node !== undefined) {\n const degree = Tools.getHiddenNeighbors(node.toList());\n const badgeContent = Tools.formatNumber(degree);\n if (degree > 0) {\n const nodeColor = Array.isArray(node.getAttribute('color'))\n ? node.getAttribute('color')![0]\n : node.getAttribute('color');\n const textColor = OgmaTools.isBright(nodeColor as o.Color)\n ? DARK_FONT_COLOR\n : CLEAR_FONT_COLOR;\n const isSupernode = node.getData(['statistics', 'supernode']);\n let content = null;\n if (+badgeContent !== 0) {\n content = isSupernode ? badgeContent + '+' : badgeContent;\n }\n return {\n color: 'inherit',\n minVisibleSize: 20,\n stroke: {\n width: 0,\n color: null\n },\n text: {\n font:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.font !== undefined\n ? this._defaultConfiguration.node.text.font\n : DEFAULT_OGMA_FONT,\n scale: 0.4,\n color: textColor,\n content: content\n }\n };\n }\n }\n }\n }\n }\n });\n this._ogma.styles.createClass({\n name: 'pinnedIndicator',\n nodeAttributes: {\n badges: {\n bottomRight: (node) => {\n if (node !== undefined && !node.getAttribute('layoutable')) {\n const nodeColor = Array.isArray(node.getAttribute('color'))\n ? node.getAttribute('color')![0]\n : node.getAttribute('color');\n const textColor = OgmaTools.isBright(nodeColor as o.Color)\n ? DARK_FONT_COLOR\n : CLEAR_FONT_COLOR;\n return {\n color: 'inherit',\n minVisibleSize: 20,\n stroke: {\n width: 0,\n color: null\n },\n text: {\n font: 'FontAwesome',\n scale: 0.4,\n color: textColor,\n content: node.getAttribute('layoutable') ? null : '\\uf08d'\n }\n };\n }\n }\n }\n },\n nodeDependencies: {\n self: {attributes: ['layoutable']}\n }\n });\n this._ogma.events.on('addNodes', (nodesEvent) => nodesEvent.nodes.addClass('degreeIndicator'));\n this._ogma.events.on('addNodes', (nodesEvent) => nodesEvent.nodes.addClass('pinnedIndicator'));\n }\n\n /**\n * Delete the rule to display badges\n */\n public deleteBadgeRule() {\n this._ogma.getNodes().removeClasses(['degreeIndicator', 'pinnedIndicator'], 0);\n }\n\n /**\n * set text overlap to true or false\n *\n * @param {boolean} overlap\n */\n public toggleTextOverlap(overlap?: boolean): void {\n this._ogma.setOptions({texts: {preventOverlap: overlap}});\n }\n\n /**\n * refresh nodes and edge rules\n *\n */\n public refreshRules(): void {\n this._nodeDefaultStylesRules.refresh();\n this._edgeDefaultStylesRules.refresh();\n }\n\n /**\n * Create / refresh an ogma rule for node colors\n */\n public refreshNodeColors(colorStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeColor)) {\n this._nodeAttributes.refresh({color: colorStyleRules});\n this._ogmaNodeColor = this._ogma.styles.addRule({\n nodeAttributes: {\n color: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.color(node.getData());\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({color: colorStyleRules});\n this._ogmaNodeColor.refresh();\n // TODO refresh node icons when moving the code from LKE\n // this.refreshIconsColor();\n }\n }\n\n /**\n * Return an array of StyleRules with only the style that need to be applied\n */\n public getStyleRule(\n state: Array<IStyleRule<INodeStyle | IEdgeStyle>>,\n styleType: StyleType\n ): LKStyleRule[] {\n return new StyleRules(state)[styleType];\n }\n\n public initNodeColors(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const nodeColorRules = this.getStyleRule(\n nodeRules,\n StyleType.COLOR\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeColors(nodeColorRules);\n }\n\n public initNodesIcons(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const nodeIconsRules = this.getStyleRule(\n nodeRules,\n StyleType.ICON\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeIcons(nodeIconsRules);\n }\n\n public initNodesSizes(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const nodeSizeRules = this.getStyleRule(nodeRules, StyleType.SIZE) as LKStyleRule<INodeStyle>[];\n this.refreshNodeSize(nodeSizeRules);\n }\n\n public initNodesShapes(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const nodeShapesRules = this.getStyleRule(\n nodeRules,\n StyleType.SHAPE\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeShape(nodeShapesRules);\n }\n\n public initEdgesWidth(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const edgesWidthRules = this.getStyleRule(\n edgeRules,\n StyleType.WIDTH\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeWidth(edgesWidthRules);\n }\n\n public initEdgesShape(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const edgesShapeRules = this.getStyleRule(\n edgeRules,\n StyleType.SHAPE\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeShape(edgesShapeRules);\n }\n\n public initEdgesColor(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const edgesColorRules = this.getStyleRule(\n edgeRules,\n StyleType.COLOR\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeColors(edgesColorRules);\n }\n\n /**\n * Create / refresh an ogma rule for node icons\n *\n * @param {Array<any>} iconStyleRules\n */\n public refreshNodeIcons(iconStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeIcon)) {\n this._nodeAttributes.refresh({icon: iconStyleRules});\n this._ogmaNodeIcon = this._ogma.styles.addRule({\n nodeAttributes: {\n icon: (node: o.Node | undefined): IStyleIcon | undefined => {\n if (node !== undefined) {\n return this._nodeAttributes.icon(node.getData()).icon;\n }\n },\n image: (node: o.Node | undefined): OgmaImage | null | undefined => {\n if (node !== undefined && !node.isVirtual()) {\n return this._nodeAttributes.icon(node.getData()).image;\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({icon: iconStyleRules});\n void this._ogmaNodeIcon.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for node sizes\n *\n * @param {Array<any>} sizeStyleRules\n */\n public refreshNodeSize(sizeStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeSize)) {\n this._nodeAttributes.refresh({size: sizeStyleRules});\n this._ogmaNodeSize = this._ogma.styles.addRule({\n nodeAttributes: {\n radius: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.size(node.getData());\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({size: sizeStyleRules});\n this._ogmaNodeSize.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for node images\n *\n * @param {Array<any>} shapeStyleRules\n */\n public refreshNodeShape(shapeStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeShape)) {\n this._nodeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaNodeShape = this._ogma.styles.addRule({\n nodeAttributes: {\n shape: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.shape(node.getData());\n }\n }\n },\n nodeSelector: (node: o.Node | undefined) => node !== undefined && !node.isVirtual(),\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaNodeShape.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge colors\n */\n public refreshEdgeColors(colorStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeColor)) {\n this._edgeAttributes.refresh({color: colorStyleRules});\n this._ogmaEdgeColor = this._ogma.styles.addRule({\n edgeAttributes: {\n color: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.color(edge.getData());\n }\n }\n },\n edgeDependencies: {self: {data: true}}\n });\n } else {\n this._edgeAttributes.refresh({color: colorStyleRules});\n this._ogmaEdgeColor.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge width\n *\n * @param {Array<LKStyleRule>} widthStyleRules\n */\n public refreshEdgeWidth(widthStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeWidth)) {\n this._edgeAttributes.refresh({width: widthStyleRules});\n this._ogmaEdgeWidth = this._ogma.styles.addRule({\n edgeAttributes: {\n width: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.width(edge.getData());\n }\n }\n },\n edgeDependencies: {\n self: {data: true}\n }\n });\n } else {\n this._edgeAttributes.refresh({width: widthStyleRules});\n this._ogmaEdgeWidth.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge width\n *\n * @param {Array<LKStyleRule>} shapeStyleRules\n */\n public refreshEdgeShape(shapeStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeShape)) {\n this._edgeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaEdgeShape = this._ogma.styles.addRule({\n edgeAttributes: {\n shape: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.shape(edge.getData());\n }\n }\n },\n edgeDependencies: {self: {data: true}}\n });\n } else {\n this._edgeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaEdgeShape.refresh();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ogma/features/styles.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport * as o from '@linkurious/ogma';\nimport {\n Badge,\n Edge,\n EdgeAttributesValue,\n Node,\n NodeAttributesValue,\n StyleClass,\n StyleRule\n} from '@linkurious/ogma';\nimport {\n GenericObject,\n IEdgeStyle,\n INodeStyle,\n IStyleIcon,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n OgmaEdgeShape,\n OgmaNodeShape,\n TextOptions\n} from '@linkurious/rest-client';\n\nimport {\n BASE_GREY,\n EdgeAttributes,\n LKOgma,\n NodeAttributes,\n OgmaTools,\n StyleRule as LKStyleRule,\n StyleRules,\n StyleType\n} from '../..';\nimport {Tools} from '../../tools/tools';\nimport {OgmaImage} from '../../styles/nodeAttributes';\n\nexport interface StylesConfig {\n nodeColorStyleRules: Array<LKStyleRule>;\n nodeIconStyleRules: Array<LKStyleRule>;\n nodeSizeStyleRules: Array<LKStyleRule>;\n nodeShapeStyleRules?: Array<LKStyleRule>;\n edgeColorStyleRules: Array<LKStyleRule>;\n edgeWidthStyleRules: Array<LKStyleRule>;\n edgeShapeStyleRules?: Array<LKStyleRule>;\n}\n\nconst HOVERED_SELECTED_NODE_STYLE: NodeAttributesValue<LkNodeData, LkEdgeData> = {\n text: {\n style: 'bold',\n backgroundColor: '#fff',\n minVisibleSize: 0\n },\n outerStroke: {width: 2},\n outline: false\n};\n\nconst HOVERED_SELECTED_EDGE_STYLE: EdgeAttributesValue<LkEdgeData, LkNodeData> = {\n text: {\n style: 'bold',\n backgroundColor: '#fff',\n minVisibleSize: 0\n },\n outline: false\n};\n\nconst NODE_HALO_CONFIGURATION = {\n color: '#FFF',\n width: 7,\n scalingMethod: 'scaled',\n strokeWidth: 0,\n hideNonAdjacentEdges: false\n} as {\n color: '#FFF';\n width: 7;\n strokeWidth: 0;\n};\n\nconst EDGE_HALO_CONFIGURATION = {\n color: '#FFF',\n scalingMethod: 'scaled',\n width: 4\n} as {\n color: '#FFF';\n width: 4;\n};\n\nconst DEFAULT_OGMA_FONT = \"'roboto', sans-serif\";\nconst DARK_FONT_COLOR = '#000';\nconst CLEAR_FONT_COLOR = '#FFF';\nconst ITEM_DEFAULT_COLOR = '#7f7f7f';\nexport const FILTER_OPACITY = 0.2;\n\nexport class StylesViz {\n private _ogma: LKOgma;\n private _exportClass!: StyleClass;\n private _nodeDefaultStylesRules!: StyleRule<LkNodeData, LkEdgeData>;\n // @ts-ignore\n private _nodeDefaultHaloRules!: StyleRule<LkNodeData, LkEdgeData>;\n private _edgeDefaultStylesRules!: StyleRule<LkNodeData, LkEdgeData>;\n // @ts-ignore\n private _edgeDefaultHaloRules!: StyleRule<LkNodeData, LkEdgeData>;\n\n private _nodeAttributes: NodeAttributes = new NodeAttributes({});\n private _edgeAttributes: EdgeAttributes = new EdgeAttributes({});\n\n private _ogmaNodeColor!: StyleRule;\n private _ogmaNodeIcon!: StyleRule;\n private _ogmaNodeSize!: StyleRule;\n private _ogmaNodeShape!: StyleRule;\n private _ogmaEdgeColor!: StyleRule;\n private _ogmaEdgeWidth!: StyleRule;\n private _ogmaEdgeShape!: StyleRule;\n private _defaultConfiguration: {\n node: {\n nodeRadius?: number;\n shape?: OgmaNodeShape;\n text?: TextOptions & {\n nodePosition?: 'right' | 'left' | 'top' | 'bottom' | 'center';\n };\n };\n edge: {\n edgeWidth?: number;\n shape?: OgmaEdgeShape;\n text?: TextOptions;\n };\n };\n\n constructor(\n ogma: LKOgma,\n configuration: {\n node: {\n nodeRadius?: number;\n shape?: OgmaNodeShape;\n text?: TextOptions & {\n nodePosition?: 'right' | 'left' | 'top' | 'bottom' | 'center';\n };\n };\n edge: {\n edgeWidth?: number;\n shape?: OgmaEdgeShape;\n text?: TextOptions;\n };\n baseUrl?: string;\n }\n ) {\n this._ogma = ogma;\n this._defaultConfiguration = configuration;\n this._nodeAttributes.setBaseUrl(configuration.baseUrl);\n }\n\n /**\n * Set nodes default styles based on the configuration\n */\n public setNodesDefaultStyles(): void {\n // setting selection and hover attributes\n this._ogma.styles.setHoveredNodeAttributes(HOVERED_SELECTED_NODE_STYLE);\n this._ogma.styles.setSelectedNodeAttributes(HOVERED_SELECTED_NODE_STYLE);\n // setting default styles\n this._nodeDefaultStylesRules = this._ogma.styles.addRule({\n nodeAttributes: {\n text: {\n padding: 5,\n minVisibleSize:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.minVisibleSize\n ? this._defaultConfiguration.node.text.minVisibleSize\n : 12,\n maxLineLength:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.maxLineLength !== undefined\n ? this._defaultConfiguration.node.text.maxLineLength\n : 30,\n position:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.nodePosition !== undefined\n ? this._defaultConfiguration.node.text.nodePosition\n : 'bottom',\n backgroundColor:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.backgroundColor !== undefined\n ? this._defaultConfiguration.node.text.backgroundColor\n : undefined,\n font:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.font !== undefined\n ? this._defaultConfiguration.node.text.font\n : \"'roboto', sans-serif\",\n color:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.color !== undefined\n ? this._defaultConfiguration.node.text.color\n : 'black',\n size:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.size !== undefined\n ? this._defaultConfiguration.node.text.size\n : 14,\n margin: 5\n },\n radius: this.defaultNodeRadius(this._defaultConfiguration.node),\n icon: {\n minVisibleSize: 15\n },\n color: ITEM_DEFAULT_COLOR,\n shape:\n this._defaultConfiguration.node.shape !== undefined\n ? this._defaultConfiguration.node.shape\n : ('circle' as OgmaNodeShape),\n innerStroke: {\n width: 3\n },\n outline: false\n }\n });\n }\n\n /**\n * Set edges default styles based on the configuration\n */\n public setEdgesDefaultStyles(): void {\n // setting selection and hover attributes\n this._ogma.styles.setHoveredEdgeAttributes(HOVERED_SELECTED_EDGE_STYLE);\n this._ogma.styles.setSelectedEdgeAttributes(HOVERED_SELECTED_EDGE_STYLE);\n // setting default styles\n this._edgeDefaultStylesRules = this._ogma.styles.addRule({\n edgeAttributes: {\n text: {\n minVisibleSize:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.minVisibleSize\n ? this._defaultConfiguration.edge.text.minVisibleSize\n : 3,\n maxLineLength:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.maxLineLength !== undefined\n ? this._defaultConfiguration.edge.text.maxLineLength\n : 30,\n backgroundColor:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.backgroundColor !== undefined\n ? this._defaultConfiguration.edge.text.backgroundColor\n : undefined,\n font:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.font !== undefined\n ? this._defaultConfiguration.edge.text.font\n : \"'roboto', sans-serif\",\n color:\n this._defaultConfiguration.edge?.text !== undefined &&\n this._defaultConfiguration.edge.text.color !== undefined\n ? this._defaultConfiguration.edge.text.color\n : 'black',\n size:\n this._defaultConfiguration.edge.text !== undefined &&\n this._defaultConfiguration.edge.text.size !== undefined\n ? this._defaultConfiguration.edge.text.size\n : 14\n },\n width: this.defaultEdgeWidth(this._defaultConfiguration.edge),\n shape:\n this._defaultConfiguration.edge.shape !== undefined\n ? this._defaultConfiguration.edge.shape\n : 'arrow',\n color: ITEM_DEFAULT_COLOR\n }\n });\n }\n\n /**\n * Set nodes default styles based on the configuration\n */\n public setNodesDefaultHalo(): void {\n // setting default halo style\n this._nodeDefaultHaloRules = this._ogma.styles.addRule({\n nodeSelector: (node) => node && !node.hasClass('filtered'),\n nodeAttributes: {\n halo: (node) => {\n if (\n node !== undefined &&\n !node.hasClass('filtered') &&\n (node.isSelected() ||\n node.getAdjacentNodes({}).isSelected().includes(true) ||\n node.getAdjacentEdges().isSelected().includes(true))\n ) {\n return {\n ...NODE_HALO_CONFIGURATION,\n scalingMethod: this._ogma.geo.enabled() ? 'fixed' : 'scaled'\n };\n }\n return null;\n }\n },\n // recalculate the rule *only* when itself or adjacent\n // elements change their selection status\n nodeDependencies: {\n self: {\n selection: true\n },\n adjacentNodes: {\n selection: true\n },\n adjacentEdges: {\n selection: true\n }\n }\n });\n }\n\n /**\n * Set edges default styles based on the configuration\n */\n public setEdgesDefaultHalo(): void {\n // setting default halo styles\n this._edgeDefaultHaloRules = this._ogma.styles.addRule({\n edgeSelector: (edge: Edge) =>\n edge && edge.getSource() && edge.getTarget() && !edge.hasClass('filtered'),\n edgeAttributes: {\n halo: (edge) => {\n if (\n edge &&\n !edge.hasClass('filtered') &&\n (edge.isSelected() || edge.getSource().isSelected() || edge.getTarget().isSelected())\n ) {\n return {\n ...EDGE_HALO_CONFIGURATION,\n scalingMethod: this._ogma.geo.enabled() ? 'fixed' : 'scaled'\n };\n }\n return null;\n }\n },\n // this rule will only be invoked when the selection status\n // of the edge or it's extremities is changed\n edgeDependencies: {\n self: {\n selection: true\n },\n extremities: {\n selection: true\n }\n }\n });\n }\n\n /**\n * Return the default node radius set in configuration or 5\n *\n * @returns {number}\n */\n private defaultNodeRadius(styles: any): number {\n return this.defaultStylesHas(styles, ['nodeRadius']) ? styles.nodeRadius : 5;\n }\n\n /**\n * Return the default edge width set in configuration or 1\n *\n * @returns {number}\n */\n private defaultEdgeWidth(styles: any): number {\n return this.defaultStylesHas(styles, ['edgeWidth']) ? styles.edgeWidth : 1;\n }\n\n /**\n * Check if a style property exists in the default styles object\n */\n private defaultStylesHas(styles: GenericObject<unknown>, propertyPath: Array<string>): boolean {\n if (!Tools.isDefined(styles)) {\n return false;\n }\n return Tools.getIn(styles, propertyPath) !== undefined;\n }\n\n /**\n * Set styles for the class \"filtered\"\n */\n public setFilterClass(): void {\n this._ogma.styles.createClass({\n name: 'filtered',\n nodeAttributes: {\n opacity: FILTER_OPACITY,\n layer: (node): number => {\n // if the node is part of a virtual node, it should be on top\n if (node.getMetaNode() !== undefined) {\n return 1;\n }\n return -1;\n },\n detectable: false,\n badges: {\n topRight: {\n text: null\n },\n bottomRight: {\n text: null\n }\n },\n text: null,\n color: 'rgb(240, 240, 240)',\n innerStroke: {\n width: 1,\n color: BASE_GREY,\n minVisibleSize: 1\n },\n shape: 'circle',\n image: null,\n icon: null,\n radius: '100%'\n },\n edgeAttributes: {\n opacity: FILTER_OPACITY,\n layer: (edge): number => {\n const isEdgeInsideNodeGroup = edge\n .getExtremities()\n .getMetaNode()\n .some((node) => node !== null);\n // if the edge is part of a virtual node, it should be on top\n if (!edge.isVirtual() && isEdgeInsideNodeGroup) {\n return 1;\n }\n return -1;\n },\n detectable: false,\n text: null,\n color: BASE_GREY,\n shape: 'line',\n width: 0.2\n }\n });\n }\n\n /**\n * Set the class for exported nodes and edges\n */\n public setExportClass(textWrappingLength?: boolean): void {\n if (!this._exportClass) {\n this._exportClass = this._ogma.styles.createClass({\n name: 'exported',\n nodeAttributes: {\n text: {\n minVisibleSize: 0,\n size: 12,\n maxLineLength: textWrappingLength ? 30 : 0\n },\n halo: null\n },\n edgeAttributes: {\n text: {\n minVisibleSize: 0,\n size: 12\n },\n halo: null\n }\n });\n } else {\n this._exportClass.update({\n nodeAttributes: {\n text: {\n maxLineLength: textWrappingLength ? 30 : 0\n },\n halo: null\n }\n });\n }\n }\n\n /**\n * Set the rule to display badges\n */\n public setBadgeRule() {\n this._ogma.styles.createClass({\n name: 'degreeIndicator',\n nodeAttributes: {\n badges: {\n topRight: (node) => {\n if (node !== undefined) {\n const degree = Tools.getHiddenNeighbors(node.toList());\n const badgeContent = Tools.formatNumber(degree);\n if (degree > 0) {\n const nodeColor = Array.isArray(node.getAttribute('color'))\n ? node.getAttribute('color')![0]\n : node.getAttribute('color');\n const textColor = OgmaTools.isBright(nodeColor as o.Color)\n ? DARK_FONT_COLOR\n : CLEAR_FONT_COLOR;\n const isSupernode = node.getData(['statistics', 'supernode']);\n let content = null;\n if (+badgeContent !== 0) {\n content = isSupernode ? badgeContent + '+' : badgeContent;\n }\n return {\n color: 'inherit',\n minVisibleSize: 20,\n stroke: {\n width: 0,\n color: null\n },\n text: {\n font:\n this._defaultConfiguration.node.text !== undefined &&\n this._defaultConfiguration.node.text.font !== undefined\n ? this._defaultConfiguration.node.text.font\n : DEFAULT_OGMA_FONT,\n scale: 0.4,\n color: textColor,\n content: content\n }\n };\n }\n }\n }\n }\n }\n });\n this._ogma.styles.createClass({\n name: 'pinnedIndicator',\n nodeAttributes: {\n badges: {\n bottomRight: (node): Badge | undefined => {\n if (node !== undefined && !node.getAttribute('layoutable')) {\n return {\n color: this._findPinBadgeBackgroundColor(node),\n minVisibleSize: 20,\n scale: this._findPinBadgeScale(node),\n stroke: {\n width: 0,\n color: null\n },\n text: {\n font: 'FontAwesome',\n scale: 0.4,\n color: this._findPinBadgeTextColor(node),\n content: node.getAttribute('layoutable') ? null : '\\uf08d'\n }\n };\n }\n }\n }\n },\n nodeDependencies: {\n self: {attributes: ['layoutable']}\n }\n });\n this._ogma.events.on('addNodes', (nodesEvent) => nodesEvent.nodes.addClass('degreeIndicator'));\n this._ogma.events.on('addNodes', (nodesEvent) => nodesEvent.nodes.addClass('pinnedIndicator'));\n }\n\n /**\n * Delete the rule to display badges\n */\n public deleteBadgeRule() {\n this._ogma.getNodes().removeClasses(['degreeIndicator', 'pinnedIndicator'], 0);\n }\n\n /**\n * set text overlap to true or false\n *\n * @param {boolean} overlap\n */\n public toggleTextOverlap(overlap?: boolean): void {\n this._ogma.setOptions({texts: {preventOverlap: overlap}});\n }\n\n /**\n * refresh nodes and edge rules\n *\n */\n public refreshRules(): void {\n this._nodeDefaultStylesRules.refresh();\n this._edgeDefaultStylesRules.refresh();\n }\n\n /**\n * Create / refresh an ogma rule for node colors\n */\n public refreshNodeColors(colorStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeColor)) {\n this._nodeAttributes.refresh({color: colorStyleRules});\n this._ogmaNodeColor = this._ogma.styles.addRule({\n nodeAttributes: {\n color: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.color(node.getData());\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({color: colorStyleRules});\n this._ogmaNodeColor.refresh();\n // TODO refresh node icons when moving the code from LKE\n // this.refreshIconsColor();\n }\n }\n\n /**\n * Return an array of StyleRules with only the style that need to be applied\n */\n public getStyleRule(\n state: Array<IStyleRule<INodeStyle | IEdgeStyle>>,\n styleType: StyleType\n ): LKStyleRule[] {\n return new StyleRules(state)[styleType];\n }\n\n public initNodeColors(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const nodeColorRules = this.getStyleRule(\n nodeRules,\n StyleType.COLOR\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeColors(nodeColorRules);\n }\n\n public initNodesIcons(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const nodeIconsRules = this.getStyleRule(\n nodeRules,\n StyleType.ICON\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeIcons(nodeIconsRules);\n }\n\n public initNodesSizes(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const nodeSizeRules = this.getStyleRule(nodeRules, StyleType.SIZE) as LKStyleRule<INodeStyle>[];\n this.refreshNodeSize(nodeSizeRules);\n }\n\n public initNodesShapes(nodeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const nodeShapesRules = this.getStyleRule(\n nodeRules,\n StyleType.SHAPE\n ) as LKStyleRule<INodeStyle>[];\n this.refreshNodeShape(nodeShapesRules);\n }\n\n public initEdgesWidth(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const edgesWidthRules = this.getStyleRule(\n edgeRules,\n StyleType.WIDTH\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeWidth(edgesWidthRules);\n }\n\n public initEdgesShape(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n const edgesShapeRules = this.getStyleRule(\n edgeRules,\n StyleType.SHAPE\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeShape(edgesShapeRules);\n }\n\n public initEdgesColor(edgeRules: Array<IStyleRule<INodeStyle | IEdgeStyle>>): void {\n const edgesColorRules = this.getStyleRule(\n edgeRules,\n StyleType.COLOR\n ) as LKStyleRule<IEdgeStyle>[];\n this.refreshEdgeColors(edgesColorRules);\n }\n\n /**\n * Create / refresh an ogma rule for node icons\n *\n * @param {Array<any>} iconStyleRules\n */\n public refreshNodeIcons(iconStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeIcon)) {\n this._nodeAttributes.refresh({icon: iconStyleRules});\n this._ogmaNodeIcon = this._ogma.styles.addRule({\n nodeAttributes: {\n icon: (node: o.Node | undefined): IStyleIcon | undefined => {\n if (node !== undefined) {\n return this._nodeAttributes.icon(node.getData()).icon;\n }\n },\n image: (node: o.Node | undefined): OgmaImage | null | undefined => {\n if (node !== undefined && !node.isVirtual()) {\n return this._nodeAttributes.icon(node.getData()).image;\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({icon: iconStyleRules});\n void this._ogmaNodeIcon.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for node sizes\n *\n * @param {Array<any>} sizeStyleRules\n */\n public refreshNodeSize(sizeStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeSize)) {\n this._nodeAttributes.refresh({size: sizeStyleRules});\n this._ogmaNodeSize = this._ogma.styles.addRule({\n nodeAttributes: {\n radius: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.size(node.getData());\n }\n }\n },\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({size: sizeStyleRules});\n this._ogmaNodeSize.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for node images\n *\n * @param {Array<any>} shapeStyleRules\n */\n public refreshNodeShape(shapeStyleRules: Array<LKStyleRule<INodeStyle>>): void {\n if (!Tools.isDefined(this._ogmaNodeShape)) {\n this._nodeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaNodeShape = this._ogma.styles.addRule({\n nodeAttributes: {\n shape: (node: o.Node | undefined) => {\n if (node !== undefined) {\n return this._nodeAttributes.shape(node.getData());\n }\n }\n },\n nodeSelector: (node: o.Node | undefined) => node !== undefined && !node.isVirtual(),\n nodeDependencies: {self: {data: true}}\n });\n } else {\n this._nodeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaNodeShape.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge colors\n */\n public refreshEdgeColors(colorStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeColor)) {\n this._edgeAttributes.refresh({color: colorStyleRules});\n this._ogmaEdgeColor = this._ogma.styles.addRule({\n edgeAttributes: {\n color: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.color(edge.getData());\n }\n }\n },\n edgeDependencies: {self: {data: true}}\n });\n } else {\n this._edgeAttributes.refresh({color: colorStyleRules});\n this._ogmaEdgeColor.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge width\n *\n * @param {Array<LKStyleRule>} widthStyleRules\n */\n public refreshEdgeWidth(widthStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeWidth)) {\n this._edgeAttributes.refresh({width: widthStyleRules});\n this._ogmaEdgeWidth = this._ogma.styles.addRule({\n edgeAttributes: {\n width: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.width(edge.getData());\n }\n }\n },\n edgeDependencies: {\n self: {data: true}\n }\n });\n } else {\n this._edgeAttributes.refresh({width: widthStyleRules});\n this._ogmaEdgeWidth.refresh();\n }\n }\n\n /**\n * Create / refresh an ogma rule for edge width\n *\n * @param {Array<LKStyleRule>} shapeStyleRules\n */\n public refreshEdgeShape(shapeStyleRules: Array<LKStyleRule<IEdgeStyle>>): void {\n if (!Tools.isDefined(this._ogmaEdgeShape)) {\n this._edgeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaEdgeShape = this._ogma.styles.addRule({\n edgeAttributes: {\n shape: (edge: o.Edge | undefined) => {\n if (edge !== undefined) {\n return this._edgeAttributes.shape(edge.getData());\n }\n }\n },\n edgeDependencies: {self: {data: true}}\n });\n } else {\n this._edgeAttributes.refresh({shape: shapeStyleRules});\n this._ogmaEdgeShape.refresh();\n }\n }\n\n /**\n * Get node radius\n * This is a workaround for an ogma issue where the radius of virtual nodes is always set to 5\n * TODO: check if this is still needed after ogma release the new improvement for transformation v5.X\n */\n private _getNodeRadius(node: Node<LkNodeData, LkEdgeData>): number {\n if (!node.isVirtual()) {\n return node.getAttribute('radius') as number;\n } else {\n // get the width and height of the box that contains the nodes inside the virtual node\n const {width, height} = node.getSubNodes()?.getBoundingBox()!;\n return Math.max(width, height);\n }\n }\n\n /**\n * Calculate the scale of the pin badge related to the node radius\n * This is useful when dealing wih huge nodes, and we don't want the badge to be big\n * If the node is small enough, the badge will be 0.46 of the node radius\n * Else it will be 5 / radius\n */\n private _findPinBadgeScale(node: Node<LkNodeData, LkEdgeData>): number {\n // the maximum radius for the badge\n const MAX = 5;\n const defaultRatio = 0.46;\n const bigNodeRatio = 0.17;\n const radius = this._getNodeRadius(node);\n return radius * defaultRatio > MAX ? bigNodeRatio : defaultRatio;\n }\n\n /**\n * Find the color of the pin badge text\n */\n private _findPinBadgeTextColor(node: Node<LkNodeData, LkEdgeData>): string {\n if (node.isVirtual()) {\n return CLEAR_FONT_COLOR;\n }\n const nodeColor = Array.isArray(node.getAttribute('color'))\n ? node.getAttribute('color')![0]\n : node.getAttribute('color');\n return OgmaTools.isBright(nodeColor as o.Color) ? DARK_FONT_COLOR : CLEAR_FONT_COLOR;\n }\n\n /**\n * Find the color of the pin badge background\n */\n private _findPinBadgeBackgroundColor(node: Node<LkNodeData, LkEdgeData>): string {\n return node.isVirtual() ? BASE_GREY : 'inherit';\n }\n}\n"]}
|
package/dist/ogma/index.js
CHANGED
|
@@ -251,10 +251,7 @@ class LKOgma extends ogma_1.default {
|
|
|
251
251
|
* Adding edges to the graph after filtering disconnected ones
|
|
252
252
|
*/
|
|
253
253
|
addEdges(edges, options) {
|
|
254
|
-
|
|
255
|
-
return this.getNode(edge.source) !== undefined && this.getNode(edge.target) !== undefined;
|
|
256
|
-
});
|
|
257
|
-
return super.addEdges(filteredEdges, options);
|
|
254
|
+
return super.addEdges(edges, Object.assign(Object.assign({}, options), { ignoreInvalid: true }));
|
|
258
255
|
}
|
|
259
256
|
/**
|
|
260
257
|
* Return the list of non filtered nodes
|
package/dist/ogma/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ogma/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EntityType,\n ForceLayoutMode,\n HierarchicalLayoutMode,\n IOgmaConfig,\n LkEdgeData,\n LkNodeData,\n PopulatedVisualization,\n VizEdge,\n VizNode\n} from '@linkurious/rest-client';\nimport Ogma, {\n EdgeList,\n ForceLayoutOptions,\n HierarchicalLayoutOptions,\n NodeId,\n NodeList,\n NonObjectPropertyWatcher,\n RadialLayoutOptions,\n RawEdge,\n RawGraph,\n RawNode\n} from '@linkurious/ogma';\n\nimport {StyleRules} from '..';\nimport {Tools} from '../tools/tools';\n\nimport {StylesViz} from './features/styles';\nimport {TransformationsViz} from './features/transformations';\nimport {CaptionsViz} from './features/captions';\nimport {RxViz} from './features/reactive';\nimport {OgmaStore} from './features/OgmaStore';\nimport {NodeGroupingTransformation} from './features/nodeGrouping';\n\nexport {default as Ogma} from '@linkurious/ogma';\nexport const ANIMATION_DURATION = 750;\n\ninterface AddItemOptions {\n batchSize?: number;\n virtual?: boolean;\n}\n\nexport const FORCE_LAYOUT_CONFIG = {\n steps: 40,\n alignSiblings: true,\n charge: 5,\n theta: 0.34,\n duration: ANIMATION_DURATION\n};\n\nexport class LKOgma extends Ogma<LkNodeData, LkEdgeData> {\n public LKStyles!: StylesViz;\n public LKCaptions!: CaptionsViz;\n public LKTransformation!: TransformationsViz;\n // Trigger an event with node category changes\n public nodeCategoriesWatcher!: NonObjectPropertyWatcher<LkNodeData, LkEdgeData>;\n // Trigger an event with edge type changes\n public edgeTypeWatcher!: NonObjectPropertyWatcher<LkNodeData, LkEdgeData>;\n public store!: OgmaStore;\n // Node Grouping transformation instance\n public LkNodeGroupingTransformation!: NodeGroupingTransformation;\n private _reactive!: RxViz;\n\n constructor(private _configuration: IOgmaConfig, _baseUrl?: string) {\n // set Ogma global configuration\n super(_configuration);\n Object.setPrototypeOf(this, new.target.prototype);\n this.initOgmaLinkuriousParser(true, _baseUrl);\n }\n\n /**\n * Initialize the Ogma instance with the configuration and the base url\n * @param init used to know if the instance is initialized for the first time (used in setConfigOgma)\n * @param baseUrl base url used for relative image urls\n * @private\n */\n private initOgmaLinkuriousParser(init?: boolean, baseUrl?: string): void {\n this.nodeCategoriesWatcher = this.schema.watchNodeNonObjectProperty({\n path: 'categories',\n unwindArrays: true,\n filter: 'all'\n });\n this.edgeTypeWatcher = this.schema.watchEdgeNonObjectProperty({\n path: 'type',\n filter: 'all'\n });\n // set ogma max zoom value and selection with mouse option (false?)\n this.setOptions({\n interactions: {\n zoom: {\n maxValue: (params: any) => {\n return 128 / params.smallestNodeSize;\n }\n },\n selection: {\n enabled: false\n }\n }\n });\n\n // only instantiate the store once when app is starting\n if (this._reactive === undefined) {\n this._reactive = new RxViz(this);\n this.store = this._reactive.store;\n } else {\n // if store already exist, but ogma was reset, create new ogma event listener\n this._reactive.listenToSelectionEvents();\n }\n this.initSelection();\n this.setConfigOgma(this._configuration, init, baseUrl);\n this.LKTransformation = new TransformationsViz(this);\n this.LkNodeGroupingTransformation = new NodeGroupingTransformation(this);\n\n this.LKStyles.setNodesDefaultHalo();\n this.LKStyles.setEdgesDefaultHalo();\n this.LKStyles.setBadgeRule();\n this.LKStyles.setFilterClass();\n }\n\n /**\n * Initialize selection behavior\n */\n public initSelection(): void {\n this.events.onClick((e) => {\n if (e !== undefined && e.button === 'left') {\n if (e.target !== null) {\n const multiSelectionKey = navigator.platform === 'MacIntel' ? 'cmd' : 'ctrl';\n if (this.keyboard.isKeyPressed(multiSelectionKey)) {\n if (e.target.isNode && this.getSelectedEdges().size > 0) {\n this.getSelectedEdges().setSelected(false);\n }\n if (!e.target.isNode && this.getSelectedNodes().size > 0) {\n this.getSelectedNodes().setSelected(false);\n }\n if (e.target.isSelected()) {\n e.target.setSelected(false);\n } else {\n e.target.setSelected(true);\n }\n } else {\n this.getSelectedNodes().setSelected(false);\n this.getSelectedEdges().setSelected(false);\n e.target.setSelected(true);\n }\n } else {\n this.getSelectedNodes().setSelected(false);\n this.getSelectedEdges().setSelected(false);\n }\n }\n });\n }\n\n private setStyles(configuration: IOgmaConfig, baseUrl?: string): void {\n this.LKStyles = new StylesViz(this, {\n node: configuration?.options?.styles?.node || {},\n edge: configuration?.options?.styles?.edge || {},\n baseUrl: baseUrl\n });\n this.LKStyles.setNodesDefaultStyles();\n this.LKStyles.setEdgesDefaultStyles();\n }\n\n private setCaptions(configuration: IOgmaConfig): void {\n const nodeMaxTextLength = configuration?.options?.styles?.node?.text?.maxTextLength;\n const edgeMaxTextLength = configuration?.options?.styles?.edge?.text?.maxTextLength;\n this.LKCaptions = new CaptionsViz(this, nodeMaxTextLength, edgeMaxTextLength);\n }\n\n /**\n * Returns Ogma Layout parameters according to visualization layout settings\n * */\n public getForceLayoutParams(mode: ForceLayoutMode, duration = 0): ForceLayoutOptions {\n let dynamicSteps = 300 - ((300 - 40) / 5000) * this.getNodes().size;\n if (dynamicSteps < 40) {\n dynamicSteps = 40;\n }\n return {\n steps: mode === ForceLayoutMode.FAST ? dynamicSteps : 300,\n alignSiblings: this.getNodes().size > 3,\n duration: duration,\n charge: 20,\n gravity: 0.08,\n theta: this.getNodes().size > 100 ? 0.8 : 0.34\n };\n }\n\n public getRadialLayoutParams(\n rootNode: string,\n duration = 0\n ): RadialLayoutOptions<unknown, unknown> {\n return {\n centralNode: rootNode,\n radiusDelta: 1,\n nodeGap: 10,\n repulsion: this.getNodes().size > 80 ? 1 : 6,\n duration: duration\n };\n }\n\n public getHierarchicalLayoutParams(\n mode: HierarchicalLayoutMode,\n rootNode: string,\n duration = 0\n ): HierarchicalLayoutOptions {\n return {\n direction: mode,\n roots: [rootNode],\n duration: duration\n };\n }\n\n /**\n * Initialize graph.\n * add nodes and edges to the viz and init the selection.\n */\n public async init(visualization: {nodes: Array<VizNode>; edges: Array<VizEdge>}): Promise<void> {\n this.clearGraph();\n let selectedEntityType: EntityType | undefined = undefined;\n let selectedElements: Array<string> = [];\n // need to remove selected in every items before adding them to Ogma\n const fixedNodes = visualization.nodes.map((node) => {\n if (node.attributes.selected) {\n selectedEntityType = EntityType.NODE;\n selectedElements.push(node.id);\n }\n delete node.attributes.selected;\n return node;\n });\n const fixedEdges = visualization.edges.map((edge) => {\n if (edge.attributes !== undefined) {\n if (edge.attributes.selected) {\n if (selectedEntityType === undefined || selectedEntityType === EntityType.NODE) {\n selectedEntityType = EntityType.EDGE;\n selectedElements = [];\n }\n selectedElements.push(edge.id);\n }\n delete edge.attributes.selected;\n }\n return edge;\n });\n await this.addGraphAfterValidation({\n nodes: fixedNodes as Array<RawNode<LkNodeData>>,\n edges: fixedEdges as Array<RawEdge<LkEdgeData>>\n });\n if (selectedEntityType === EntityType.NODE) {\n this.getNodes(selectedElements).setSelected(true);\n } else if (selectedEntityType === EntityType.EDGE) {\n this.getEdges(selectedElements).setSelected(true);\n }\n }\n\n public async initVisualization(visualization: PopulatedVisualization): Promise<void> {\n await this.init(visualization);\n const styles = StyleRules.sanitizeStylesIndex(visualization.design.styles);\n this.LKStyles.initNodeColors(styles.node);\n this.LKStyles.initNodesIcons(styles.node);\n this.LKStyles.initNodesSizes(styles.node);\n this.LKStyles.initNodesShapes(styles.node);\n this.LKStyles.initEdgesWidth(styles.edge);\n this.LKStyles.initEdgesShape(styles.edge);\n this.LKStyles.initEdgesColor(styles.edge);\n await this.LKCaptions.initVizCaptions({\n node: visualization.nodeFields.captions || {},\n edge: visualization.edgeFields.captions || {}\n });\n this.LKTransformation.groupedEdges = visualization.edgeGrouping;\n await this.LKTransformation.initTransformation();\n this.LKTransformation.initEdgeGroupingStyle();\n }\n\n /**\n * Adding nodes then adding edges to the graph\n */\n public async addGraphAfterValidation(\n graph: RawGraph<LkNodeData, LkEdgeData>\n ): Promise<{\n nodes: NodeList<LkNodeData>;\n edges: EdgeList<LkEdgeData>;\n }> {\n const addedNodes = await this.addNodes(graph.nodes);\n const addedEdges = await this.addEdges(graph.edges);\n return {\n nodes: addedNodes,\n edges: addedEdges\n };\n }\n\n /**\n * Adding edges to the graph after filtering disconnected ones\n */\n public addEdges(edges: Array<RawEdge<LkEdgeData>>, options?: AddItemOptions): Promise<EdgeList> {\n const filteredEdges = edges.filter((edge) => {\n return this.getNode(edge.source) !== undefined && this.getNode(edge.target) !== undefined;\n });\n return super.addEdges(filteredEdges, options);\n }\n\n /**\n * Return the list of non filtered nodes\n */\n public getNonFilteredNodes(items?: Array<NodeId>): NodeList<LkNodeData, LkEdgeData> {\n return Tools.isDefined(items)\n ? this.getNodes(items).filter((i) => !i.hasClass('filtered'))\n : // take only none virtual nodes\n this.getNodes('raw').filter((i) => !i.hasClass('filtered'));\n }\n\n /**\n * Return the list of filtered nodes\n * @param items items to check if they are filtered\n * @param filter type of nodes to check if they are filtered ( nodes that are visible, raw nodes (none virtual) or all nodes)\n */\n public getFilteredNodes(\n items?: Array<NodeId>,\n filter: 'visible' | 'raw' | 'all' = 'raw'\n ): NodeList<LkNodeData, LkEdgeData> {\n return Tools.isDefined(items)\n ? this.getNodes(items).filter((i) => i.hasClass('filtered'))\n : this.getNodes(filter).filter((i) => i.hasClass('filtered'));\n }\n\n /**\n * Return the list of non filtered edges\n */\n public getNonFilteredEdges(items?: Array<any>): EdgeList<LkEdgeData, LkNodeData> {\n return Tools.isDefined(items)\n ? this.getEdges(items).filter((i) => !i.hasClass('filtered'))\n : this.getEdges('raw').filter((i) => !i.hasClass('filtered'));\n }\n\n /**\n * Return the list of filtered edges\n */\n public getFilteredEdges(\n items?: Array<any>,\n filter: 'visible' | 'raw' | 'all' = 'raw'\n ): EdgeList<LkEdgeData, LkNodeData> {\n return Tools.isDefined(items)\n ? this.getEdges(items).filter((i) => i.hasClass('filtered'))\n : this.getEdges(filter).filter((i) => i.hasClass('filtered'));\n }\n\n /**\n * Do a full reset on ogma and streams of ogma\n */\n public shutDown(): void {\n this.destroy();\n if (this.store) {\n this.store.clear();\n }\n }\n\n /**\n * Reset the Ogma instance so that it can be used fresh in the next visulization\n */\n public clearOgmaState(): void {\n this.reset();\n if (this.store) {\n this.store.clear();\n }\n this.initOgmaLinkuriousParser();\n }\n\n /**\n * Updates the Ogma config when config changes in LKE. If init, options were already set by the Ogma.reset()\n */\n public setConfigOgma(configuration?: IOgmaConfig, init?: boolean, baseUrl?: string): void {\n if (configuration) {\n // here we make sure that the internal config object is updated and we have the correct one when resetting\n this._configuration = configuration;\n }\n if (!init) {\n this.setOptions({\n ...this._configuration.options,\n renderer: this._configuration.renderer\n });\n }\n this.setStyles(this._configuration, baseUrl);\n this.setCaptions(this._configuration);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ogma/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EntityType,\n ForceLayoutMode,\n HierarchicalLayoutMode,\n IOgmaConfig,\n LkEdgeData,\n LkNodeData,\n PopulatedVisualization,\n VizEdge,\n VizNode\n} from '@linkurious/rest-client';\nimport Ogma, {\n EdgeList,\n ForceLayoutOptions,\n HierarchicalLayoutOptions,\n NodeId,\n NodeList,\n NonObjectPropertyWatcher,\n RadialLayoutOptions,\n RawEdge,\n RawGraph,\n RawNode\n} from '@linkurious/ogma';\n\nimport {StyleRules} from '..';\nimport {Tools} from '../tools/tools';\n\nimport {StylesViz} from './features/styles';\nimport {TransformationsViz} from './features/transformations';\nimport {CaptionsViz} from './features/captions';\nimport {RxViz} from './features/reactive';\nimport {OgmaStore} from './features/OgmaStore';\nimport {NodeGroupingTransformation} from './features/nodeGrouping';\n\nexport {default as Ogma} from '@linkurious/ogma';\nexport const ANIMATION_DURATION = 750;\n\ninterface AddItemOptions {\n batchSize?: number;\n virtual?: boolean;\n}\n\nexport const FORCE_LAYOUT_CONFIG = {\n steps: 40,\n alignSiblings: true,\n charge: 5,\n theta: 0.34,\n duration: ANIMATION_DURATION\n};\n\nexport class LKOgma extends Ogma<LkNodeData, LkEdgeData> {\n public LKStyles!: StylesViz;\n public LKCaptions!: CaptionsViz;\n public LKTransformation!: TransformationsViz;\n // Trigger an event with node category changes\n public nodeCategoriesWatcher!: NonObjectPropertyWatcher<LkNodeData, LkEdgeData>;\n // Trigger an event with edge type changes\n public edgeTypeWatcher!: NonObjectPropertyWatcher<LkNodeData, LkEdgeData>;\n public store!: OgmaStore;\n // Node Grouping transformation instance\n public LkNodeGroupingTransformation!: NodeGroupingTransformation;\n private _reactive!: RxViz;\n\n constructor(private _configuration: IOgmaConfig, _baseUrl?: string) {\n // set Ogma global configuration\n super(_configuration);\n Object.setPrototypeOf(this, new.target.prototype);\n this.initOgmaLinkuriousParser(true, _baseUrl);\n }\n\n /**\n * Initialize the Ogma instance with the configuration and the base url\n * @param init used to know if the instance is initialized for the first time (used in setConfigOgma)\n * @param baseUrl base url used for relative image urls\n * @private\n */\n private initOgmaLinkuriousParser(init?: boolean, baseUrl?: string): void {\n this.nodeCategoriesWatcher = this.schema.watchNodeNonObjectProperty({\n path: 'categories',\n unwindArrays: true,\n filter: 'all'\n });\n this.edgeTypeWatcher = this.schema.watchEdgeNonObjectProperty({\n path: 'type',\n filter: 'all'\n });\n // set ogma max zoom value and selection with mouse option (false?)\n this.setOptions({\n interactions: {\n zoom: {\n maxValue: (params: any) => {\n return 128 / params.smallestNodeSize;\n }\n },\n selection: {\n enabled: false\n }\n }\n });\n\n // only instantiate the store once when app is starting\n if (this._reactive === undefined) {\n this._reactive = new RxViz(this);\n this.store = this._reactive.store;\n } else {\n // if store already exist, but ogma was reset, create new ogma event listener\n this._reactive.listenToSelectionEvents();\n }\n this.initSelection();\n this.setConfigOgma(this._configuration, init, baseUrl);\n this.LKTransformation = new TransformationsViz(this);\n this.LkNodeGroupingTransformation = new NodeGroupingTransformation(this);\n\n this.LKStyles.setNodesDefaultHalo();\n this.LKStyles.setEdgesDefaultHalo();\n this.LKStyles.setBadgeRule();\n this.LKStyles.setFilterClass();\n }\n\n /**\n * Initialize selection behavior\n */\n public initSelection(): void {\n this.events.onClick((e) => {\n if (e !== undefined && e.button === 'left') {\n if (e.target !== null) {\n const multiSelectionKey = navigator.platform === 'MacIntel' ? 'cmd' : 'ctrl';\n if (this.keyboard.isKeyPressed(multiSelectionKey)) {\n if (e.target.isNode && this.getSelectedEdges().size > 0) {\n this.getSelectedEdges().setSelected(false);\n }\n if (!e.target.isNode && this.getSelectedNodes().size > 0) {\n this.getSelectedNodes().setSelected(false);\n }\n if (e.target.isSelected()) {\n e.target.setSelected(false);\n } else {\n e.target.setSelected(true);\n }\n } else {\n this.getSelectedNodes().setSelected(false);\n this.getSelectedEdges().setSelected(false);\n e.target.setSelected(true);\n }\n } else {\n this.getSelectedNodes().setSelected(false);\n this.getSelectedEdges().setSelected(false);\n }\n }\n });\n }\n\n private setStyles(configuration: IOgmaConfig, baseUrl?: string): void {\n this.LKStyles = new StylesViz(this, {\n node: configuration?.options?.styles?.node || {},\n edge: configuration?.options?.styles?.edge || {},\n baseUrl: baseUrl\n });\n this.LKStyles.setNodesDefaultStyles();\n this.LKStyles.setEdgesDefaultStyles();\n }\n\n private setCaptions(configuration: IOgmaConfig): void {\n const nodeMaxTextLength = configuration?.options?.styles?.node?.text?.maxTextLength;\n const edgeMaxTextLength = configuration?.options?.styles?.edge?.text?.maxTextLength;\n this.LKCaptions = new CaptionsViz(this, nodeMaxTextLength, edgeMaxTextLength);\n }\n\n /**\n * Returns Ogma Layout parameters according to visualization layout settings\n * */\n public getForceLayoutParams(mode: ForceLayoutMode, duration = 0): ForceLayoutOptions {\n let dynamicSteps = 300 - ((300 - 40) / 5000) * this.getNodes().size;\n if (dynamicSteps < 40) {\n dynamicSteps = 40;\n }\n return {\n steps: mode === ForceLayoutMode.FAST ? dynamicSteps : 300,\n alignSiblings: this.getNodes().size > 3,\n duration: duration,\n charge: 20,\n gravity: 0.08,\n theta: this.getNodes().size > 100 ? 0.8 : 0.34\n };\n }\n\n public getRadialLayoutParams(\n rootNode: string,\n duration = 0\n ): RadialLayoutOptions<unknown, unknown> {\n return {\n centralNode: rootNode,\n radiusDelta: 1,\n nodeGap: 10,\n repulsion: this.getNodes().size > 80 ? 1 : 6,\n duration: duration\n };\n }\n\n public getHierarchicalLayoutParams(\n mode: HierarchicalLayoutMode,\n rootNode: string,\n duration = 0\n ): HierarchicalLayoutOptions {\n return {\n direction: mode,\n roots: [rootNode],\n duration: duration\n };\n }\n\n /**\n * Initialize graph.\n * add nodes and edges to the viz and init the selection.\n */\n public async init(visualization: {nodes: Array<VizNode>; edges: Array<VizEdge>}): Promise<void> {\n this.clearGraph();\n let selectedEntityType: EntityType | undefined = undefined;\n let selectedElements: Array<string> = [];\n // need to remove selected in every items before adding them to Ogma\n const fixedNodes = visualization.nodes.map((node) => {\n if (node.attributes.selected) {\n selectedEntityType = EntityType.NODE;\n selectedElements.push(node.id);\n }\n delete node.attributes.selected;\n return node;\n });\n const fixedEdges = visualization.edges.map((edge) => {\n if (edge.attributes !== undefined) {\n if (edge.attributes.selected) {\n if (selectedEntityType === undefined || selectedEntityType === EntityType.NODE) {\n selectedEntityType = EntityType.EDGE;\n selectedElements = [];\n }\n selectedElements.push(edge.id);\n }\n delete edge.attributes.selected;\n }\n return edge;\n });\n await this.addGraphAfterValidation({\n nodes: fixedNodes as Array<RawNode<LkNodeData>>,\n edges: fixedEdges as Array<RawEdge<LkEdgeData>>\n });\n if (selectedEntityType === EntityType.NODE) {\n this.getNodes(selectedElements).setSelected(true);\n } else if (selectedEntityType === EntityType.EDGE) {\n this.getEdges(selectedElements).setSelected(true);\n }\n }\n\n public async initVisualization(visualization: PopulatedVisualization): Promise<void> {\n await this.init(visualization);\n const styles = StyleRules.sanitizeStylesIndex(visualization.design.styles);\n this.LKStyles.initNodeColors(styles.node);\n this.LKStyles.initNodesIcons(styles.node);\n this.LKStyles.initNodesSizes(styles.node);\n this.LKStyles.initNodesShapes(styles.node);\n this.LKStyles.initEdgesWidth(styles.edge);\n this.LKStyles.initEdgesShape(styles.edge);\n this.LKStyles.initEdgesColor(styles.edge);\n await this.LKCaptions.initVizCaptions({\n node: visualization.nodeFields.captions || {},\n edge: visualization.edgeFields.captions || {}\n });\n this.LKTransformation.groupedEdges = visualization.edgeGrouping;\n await this.LKTransformation.initTransformation();\n this.LKTransformation.initEdgeGroupingStyle();\n }\n\n /**\n * Adding nodes then adding edges to the graph\n */\n public async addGraphAfterValidation(\n graph: RawGraph<LkNodeData, LkEdgeData>\n ): Promise<{\n nodes: NodeList<LkNodeData>;\n edges: EdgeList<LkEdgeData>;\n }> {\n const addedNodes = await this.addNodes(graph.nodes);\n const addedEdges = await this.addEdges(graph.edges);\n return {\n nodes: addedNodes,\n edges: addedEdges\n };\n }\n\n /**\n * Adding edges to the graph after filtering disconnected ones\n */\n public addEdges(edges: Array<RawEdge<LkEdgeData>>, options?: AddItemOptions): Promise<EdgeList> {\n return super.addEdges(edges, {...options, ignoreInvalid: true});\n }\n\n /**\n * Return the list of non filtered nodes\n */\n public getNonFilteredNodes(items?: Array<NodeId>): NodeList<LkNodeData, LkEdgeData> {\n return Tools.isDefined(items)\n ? this.getNodes(items).filter((i) => !i.hasClass('filtered'))\n : // take only none virtual nodes\n this.getNodes('raw').filter((i) => !i.hasClass('filtered'));\n }\n\n /**\n * Return the list of filtered nodes\n * @param items items to check if they are filtered\n * @param filter type of nodes to check if they are filtered ( nodes that are visible, raw nodes (none virtual) or all nodes)\n */\n public getFilteredNodes(\n items?: Array<NodeId>,\n filter: 'visible' | 'raw' | 'all' = 'raw'\n ): NodeList<LkNodeData, LkEdgeData> {\n return Tools.isDefined(items)\n ? this.getNodes(items).filter((i) => i.hasClass('filtered'))\n : this.getNodes(filter).filter((i) => i.hasClass('filtered'));\n }\n\n /**\n * Return the list of non filtered edges\n */\n public getNonFilteredEdges(items?: Array<any>): EdgeList<LkEdgeData, LkNodeData> {\n return Tools.isDefined(items)\n ? this.getEdges(items).filter((i) => !i.hasClass('filtered'))\n : this.getEdges('raw').filter((i) => !i.hasClass('filtered'));\n }\n\n /**\n * Return the list of filtered edges\n */\n public getFilteredEdges(\n items?: Array<any>,\n filter: 'visible' | 'raw' | 'all' = 'raw'\n ): EdgeList<LkEdgeData, LkNodeData> {\n return Tools.isDefined(items)\n ? this.getEdges(items).filter((i) => i.hasClass('filtered'))\n : this.getEdges(filter).filter((i) => i.hasClass('filtered'));\n }\n\n /**\n * Do a full reset on ogma and streams of ogma\n */\n public shutDown(): void {\n this.destroy();\n if (this.store) {\n this.store.clear();\n }\n }\n\n /**\n * Reset the Ogma instance so that it can be used fresh in the next visulization\n */\n public clearOgmaState(): void {\n this.reset();\n if (this.store) {\n this.store.clear();\n }\n this.initOgmaLinkuriousParser();\n }\n\n /**\n * Updates the Ogma config when config changes in LKE. If init, options were already set by the Ogma.reset()\n */\n public setConfigOgma(configuration?: IOgmaConfig, init?: boolean, baseUrl?: string): void {\n if (configuration) {\n // here we make sure that the internal config object is updated and we have the correct one when resetting\n this._configuration = configuration;\n }\n if (!init) {\n this.setOptions({\n ...this._configuration.options,\n renderer: this._configuration.renderer\n });\n }\n this.setStyles(this._configuration, baseUrl);\n this.setCaptions(this._configuration);\n }\n}\n"]}
|
|
@@ -37,7 +37,7 @@ export declare class ItemAttributes<T extends INodeStyle | IEdgeStyle> {
|
|
|
37
37
|
/**
|
|
38
38
|
* Return the color for a node when style color is auto
|
|
39
39
|
*/
|
|
40
|
-
static autoColor(value: string, ignoreCase?: boolean): string;
|
|
40
|
+
static autoColor(value: string | undefined, ignoreCase?: boolean): string;
|
|
41
41
|
/**
|
|
42
42
|
* Return a number from 0 to number of occurrence in a palette based on a property
|
|
43
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemAttributes.js","sourceRoot":"","sources":["../../src/styles/itemAttributes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;AAEb,gDAAwB;AAIxB,0CAAqC;AAMxB,QAAA,SAAS,GAAG,SAAS,CAAC;AACtB,QAAA,OAAO,GAAG;IACrB,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAa,cAAc;IAWzB,YAAY,QAOX;QAjBS,gBAAW,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC3D,cAAS,GAOf,EAAE,CAAC;QAUL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,QAOd;QACC,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YACxE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YACxE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;SAC7E,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"itemAttributes.js","sourceRoot":"","sources":["../../src/styles/itemAttributes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;AAEb,gDAAwB;AAIxB,0CAAqC;AAMxB,QAAA,SAAS,GAAG,SAAS,CAAC;AACtB,QAAA,OAAO,GAAG;IACrB,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAa,cAAc;IAWzB,YAAY,QAOX;QAjBS,gBAAW,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC3D,cAAS,GAOf,EAAE,CAAC;QAUL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,QAOd;QACC,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YACxE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YAC5E,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YACxE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;SAC7E,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,KAAyB,EAAE,UAAoB;QACrE,IAAI,CAAC,aAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO,iBAAS,CAAC;SAClB;QACD,OAAO,eAAO,CACZ,cAAc,CAAC,gCAAgC,CAAC,KAAK,EAAE,eAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CACnF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gCAAgC,CAC7C,KAAa,EACb,MAAc,EACd,UAA+B;QAE/B,IAAI,UAAU,EAAE;YACd,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;SAC7B;QACD,OAAO,CAAC,CAAC,IAAI,GAAG,IAAA,cAAI,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,YAAY,CACxB,IAAwC,EACxC,IAAY;QAEZ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;YACtF,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;SACpE;QACD,IAAI,CAAC,aAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;YACxE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;SACzB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,4BAA4B,CACxC,KAAa,EACb,EAAC,GAAG,EAAE,GAAG,EAAkB,EAC3B,KAAyC,EACzC,MAA0C;QAE1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;YAC1C,yCAAyC;YACzC,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC/B,OAAO,MAAM,CAAC;aACf;YAED,8CAA8C;YAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAEvC,OAAO,GAAG,IAAI,GAAG,CAAC;SACnB;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,yBAAyB,CACrC,KAAa,EACb,EAAC,GAAG,EAAE,GAAG,EAAkB,EAC3B,KAAyC,EACzC,MAA0C;QAE1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;YAC1C,yCAAyC;YACzC,IAAI,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC/B,OAAO,MAAM,CAAC;aACf;YACD,6DAA6D;YAC7D,IAAI,GAAG,GAAG,CAAC,EAAE;gBACX,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3B,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC1B;YACD,sEAAsE;YACtE,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAEjD,OAAO,GAAG,IAAI,GAAG,CAAC;SACnB;IACH,CAAC;IAEM,WAAW,CAAC,KAAwC;QACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,WAAW,CAAC;IAClE,CAAC;CACF;AAxJD,wCAwJC","sourcesContent":["'use strict';\n\nimport sha1 from 'sha1';\nimport {Color} from '@linkurious/ogma';\nimport {IEdgeStyle, INodeStyle, IStyleAutoRange} from '@linkurious/rest-client';\n\nimport {Tools} from '../tools/tools';\n\nimport {StyleRule} from './styleRule';\nimport {NodeSizeExtrema} from './nodeAttributes';\nimport {EdgeWidthExtrema} from './edgeAttributes';\n\nexport const BASE_GREY = '#7f7f7f';\nexport const PALETTE = [\n '#9467bd',\n '#e377c2',\n '#1f77b4',\n '#17becf',\n '#2ca02c',\n '#bcbd22',\n '#d62728',\n '#ff7f0e',\n '#8c564b',\n '#c5b0d5',\n '#f7b6d2',\n '#aec7e8',\n '#9edae5',\n '#98df8a',\n '#dbdb8d',\n '#ff9896',\n '#ffbb78',\n '#c49c94'\n];\n\nexport class ItemAttributes<T extends INodeStyle | IEdgeStyle> {\n protected colorsCache: Map<string, Color | Array<Color>> = new Map();\n protected _rulesMap: {\n color?: Array<StyleRule<T>>;\n icon?: Array<StyleRule<T>>;\n image?: Array<StyleRule<T>>;\n shape?: Array<StyleRule<T>>;\n size?: Array<StyleRule<T>>;\n width?: Array<StyleRule<T>>;\n } = {};\n\n constructor(rulesMap: {\n color?: Array<StyleRule<T>>;\n icon?: Array<StyleRule<T>>;\n image?: Array<StyleRule<T>>;\n shape?: Array<StyleRule<T>>;\n size?: Array<StyleRule<T>>;\n width?: Array<StyleRule<T>>;\n }) {\n this.refresh(rulesMap);\n }\n\n /**\n * Refresh the rules\n */\n public refresh(rulesMap: {\n color?: Array<StyleRule<T>>;\n icon?: Array<StyleRule<T>>;\n image?: Array<StyleRule<T>>;\n shape?: Array<StyleRule<T>>;\n size?: Array<StyleRule<T>>;\n width?: Array<StyleRule<T>>;\n }): void {\n if (rulesMap.color !== undefined) {\n this.colorsCache = new Map();\n }\n this._rulesMap = {\n color: rulesMap.color ? [...rulesMap.color].reverse() : this._rulesMap.color,\n icon: rulesMap.icon ? [...rulesMap.icon].reverse() : this._rulesMap.icon,\n image: rulesMap.image ? [...rulesMap.image].reverse() : this._rulesMap.image,\n shape: rulesMap.shape ? [...rulesMap.shape].reverse() : this._rulesMap.shape,\n size: rulesMap.size ? [...rulesMap.size].reverse() : this._rulesMap.size,\n width: rulesMap.width ? [...rulesMap.width].reverse() : this._rulesMap.width\n };\n }\n\n /**\n * Return the color for a node when style color is auto\n */\n public static autoColor(value: string | undefined, ignoreCase?: boolean): string {\n if (!Tools.isDefined(value)) {\n return BASE_GREY;\n }\n return PALETTE[\n ItemAttributes.getRandomUniqueColorPaletteIndex(value, PALETTE.length, ignoreCase)\n ];\n }\n\n /**\n * Return a number from 0 to number of occurrence in a palette based on a property\n */\n private static getRandomUniqueColorPaletteIndex(\n input: string,\n modulo: number,\n ignoreCase: boolean | undefined\n ): number {\n if (ignoreCase) {\n input = input.toLowerCase();\n }\n return +('0x' + sha1(input).substr(-4)) % modulo;\n }\n\n /**\n * Get color of a type\n */\n public static getTypeColor(\n rule: StyleRule<IEdgeStyle | INodeStyle>,\n type: string\n ): string | undefined | null {\n if (typeof rule.style.color === 'object' && rule.style.color.input[0] !== 'properties') {\n return ItemAttributes.autoColor(type, rule.style.color.ignoreCase);\n }\n if (!Tools.isDefined(rule.input) && typeof rule.style.color !== 'object') {\n return rule.style.color;\n }\n return null;\n }\n\n /**\n * return the corresponding size to the value with a linear function\n * @param value\n * @param lower\n * @param higher\n * @param extrema\n */\n public static getAutomaticRangeStyleLinear(\n value: number,\n {max, min}: IStyleAutoRange,\n lower: EdgeWidthExtrema | NodeSizeExtrema,\n higher: EdgeWidthExtrema | NodeSizeExtrema\n ): string | undefined {\n if (max !== undefined && min !== undefined) {\n // apply default style when min equal max\n if (max === min || isNaN(value)) {\n return '100%';\n }\n\n // calculate the linear function f(x) = ax + b\n const a = (higher - lower) / (max - min);\n const b = (lower * max - higher * min) / (max - min);\n const size = Math.floor(value * a + b);\n\n return `${size}%`;\n }\n }\n\n /**\n * return the corresponding size to the value with a logarithmic function\n * @param value\n * @param lower\n * @param higher\n * @param extrema\n */\n public static getAutomaticRangeStyleLog(\n value: number,\n {max, min}: IStyleAutoRange,\n lower: EdgeWidthExtrema | NodeSizeExtrema,\n higher: EdgeWidthExtrema | NodeSizeExtrema\n ): string | undefined {\n if (min !== undefined && max !== undefined) {\n // apply default style when min equal max\n if (max === min || isNaN(value)) {\n return '100%';\n }\n // apply an offset for all the values (including min and max)\n if (min < 1) {\n value += Math.abs(min) + 1;\n max += Math.abs(min) + 1;\n min += Math.abs(min) + 1;\n }\n // calculate the logarithmic function f(x) = Math.floor(a*log(x) + b)\n const a = (higher - lower) / (Math.log(max) - Math.log(min));\n const b = (lower * Math.log(max) - higher * Math.log(min)) / (Math.log(max) - Math.log(min));\n const size = Math.floor(a * Math.log(value) + b);\n\n return `${size}%`;\n }\n }\n\n public isAutoRange(value: string | number | IStyleAutoRange): value is IStyleAutoRange {\n return typeof value === 'object' && value?.type === 'autoRange';\n }\n}\n"]}
|
|
@@ -20,7 +20,7 @@ export declare class StyleRule<T extends INodeStyle | IEdgeStyle = INodeStyle |
|
|
|
20
20
|
/**
|
|
21
21
|
* Return true if this style match values
|
|
22
22
|
*/
|
|
23
|
-
matchValues(itemType: string | undefined, input: Array<string> | undefined, value: string): boolean;
|
|
23
|
+
matchValues(itemType: string | undefined, input: Array<string> | undefined, value: string | undefined): boolean;
|
|
24
24
|
static inputExists(type: SelectorType, input: Array<string> | undefined): input is Array<string>;
|
|
25
25
|
/**
|
|
26
26
|
* Return true if a style can apply to a node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styleRule.js","sourceRoot":"","sources":["../../src/styles/styleRule.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport {\n IEdgeStyle,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n INodeStyle,\n IRangeValues,\n SelectorType,\n IStyleAutoRange\n} from '@linkurious/rest-client';\n\nimport {ItemAttributes} from '..';\nimport {Tools} from '../tools/tools';\n\nexport enum StyleRuleType {\n AUTO_RANGE = 'autoRange'\n}\n\nexport class StyleRule<T extends INodeStyle | IEdgeStyle = INodeStyle | IEdgeStyle>\n implements IStyleRule<T> {\n public type: SelectorType;\n public input: string[] | undefined;\n public index: number;\n public style: T;\n public itemType?: string;\n public value: IRangeValues | number | string | boolean;\n\n constructor(model: IStyleRule<T>) {\n this.type = model.type;\n this.input = model.input;\n this.index = model.index;\n this.itemType = model.itemType;\n this.style = model.style;\n // cast to remove undefined from type\n this.value = model.value as IRangeValues | number | string | boolean;\n }\n\n public static isAutomaticRange(rule: IStyleRule<IEdgeStyle | INodeStyle>): boolean {\n return (\n rule.style !== undefined &&\n (((rule.style as IEdgeStyle).width !== undefined &&\n ((rule.style as IEdgeStyle).width as IStyleAutoRange).type === StyleRuleType.AUTO_RANGE) ||\n ((rule.style as INodeStyle).size !== undefined &&\n ((rule.style as INodeStyle).size as IStyleAutoRange).type === StyleRuleType.AUTO_RANGE))\n );\n }\n\n /**\n * Return an int describing specificity of the style. 4 = very specific / 1 = not specific\n *\n * @return {number}\n */\n get specificity(): 1 | 2 | 3 | 4 {\n if (this.itemType !== undefined && this.input !== undefined) {\n return 4;\n }\n if (this.itemType === undefined && this.input !== undefined) {\n return 3;\n }\n if (this.itemType !== undefined && this.input === undefined) {\n return 2;\n }\n return 1;\n }\n\n /**\n * Return true if this style match values\n */\n public matchValues(\n itemType: string | undefined,\n input: Array<string> | undefined,\n value: string\n ): boolean {\n if (Tools.isDefined(input)) {\n return (\n ((itemType === this.itemType || !Tools.isDefined(this.itemType)) &&\n Tools.isEqual(['properties', ...input], this.input) &&\n Tools.isEqual(value, this.value)) ||\n (this.type === 'any' &&\n !Tools.isDefined(this.input) &&\n typeof this.style.color === 'object' &&\n this.style.color.input[1] === input[0])\n );\n }\n\n if (Tools.isDefined(this.itemType)) {\n return itemType === this.itemType && !Tools.isDefined(this.input);\n }\n\n return !Tools.isDefined(this.input);\n }\n\n public static inputExists(\n type: SelectorType,\n input: Array<string> | undefined\n ): input is Array<string> {\n return type !== SelectorType.ANY;\n }\n\n /**\n * Return true if a style can apply to a node\n */\n public canApplyTo(data: LkNodeData | LkEdgeData): boolean {\n const types = 'categories' in data ? data.categories : [data.type];\n let typePredicate = false;\n switch (this.type) {\n case SelectorType.ANY:\n typePredicate = StyleRule.checkAny(data, this.style);\n break;\n\n case SelectorType.NO_VALUE:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkNoValue(data, this.input);\n }\n break;\n\n case SelectorType.NAN:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkNan(data, this.input);\n }\n break;\n\n case SelectorType.RANGE:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkRange(\n Tools.getIn(data, this.input),\n this.value as IRangeValues\n );\n }\n break;\n\n case SelectorType.IS:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkIs(data, this.input, this.value);\n }\n break;\n }\n return typePredicate && StyleRule.checkItemType(types, this.itemType);\n }\n\n /**\n * Return true or false on rule type 'any' if the current node match the rule\n */\n public static checkAny(data: LkNodeData | LkEdgeData, style: INodeStyle | IEdgeStyle): boolean {\n // return true if autoColor by a property and this property exists in node\n if (typeof style.color === 'object') {\n return Tools.isDefined(Tools.getIn(data, style.color.input));\n }\n return true;\n }\n\n /**\n * Return true or false on rule type 'noValue' if the current node match the rule\n */\n public static checkNoValue(data: LkNodeData | LkEdgeData, input: Array<string>): boolean {\n return !Tools.valueExists(Tools.getIn(data, input));\n }\n\n /**\n * Return true or false on rule type 'NaN' if the current node match the rule\n */\n public static checkNan(data: LkNodeData | LkEdgeData, input: Array<string>): boolean {\n return !Tools.isNumber(Tools.getIn(data, input));\n }\n\n /**\n * Return true if predicate is true for the node value\n *\n * @param value\n * @param comparator\n * @return {boolean}\n */\n public static checkRange(\n value: number,\n comparator: {[key in '<=' | '<' | '>' | '>=']?: number}\n ): boolean {\n return (\n (comparator['<='] === undefined || value <= comparator['<=']) &&\n (comparator['<'] === undefined || value < comparator['<']) &&\n (comparator['>'] === undefined || value > comparator['>']) &&\n (comparator['>='] === undefined || value >= comparator['>='])\n );\n }\n\n /**\n * Return true or false on rule type 'is' if the current node match the rule\n */\n public static checkIs(\n data: LkNodeData | LkEdgeData,\n input: Array<string>,\n value: IRangeValues | number | string | boolean\n ): boolean {\n if (!Tools.isDefined(input)) {\n return false;\n }\n const itemValue = Tools.getIn(data, input);\n let formattedValue = itemValue;\n if (\n Tools.isDefined(itemValue) &&\n typeof itemValue === 'object' &&\n (itemValue.type === 'date' || itemValue.type === 'datetime')\n ) {\n let timezone = itemValue.timezone;\n if (itemValue.timezone === 'Z') {\n timezone = '+00:00';\n }\n formattedValue = Tools.formatDate(\n itemValue.value,\n itemValue.type === 'datetime',\n Tools.timezoneToMilliseconds(timezone) / 1000\n );\n }\n return Tools.isEqual(formattedValue, value);\n }\n\n /**\n * Check that value of itemType match for the node\n */\n public static checkItemType(types: Array<string>, itemType: string | undefined): boolean {\n return StyleRule.matchCategory(types, itemType) || StyleRule.matchAny(itemType);\n }\n\n /**\n * Return true if itemType is defined and category exists in an array of categories\n *\n * @param {Array<string> | string} types\n * @param {string} itemType\n * @return {boolean}\n */\n public static matchCategory(\n types: Array<string> | string,\n itemType: string | undefined\n ): boolean {\n return (\n Tools.isDefined(itemType) &&\n (Array.isArray(types) ? types.includes(itemType) : Tools.isEqual(types, itemType))\n );\n }\n\n /**\n * Return true if itemType is undefined\n *\n * @param {string} itemType\n * @return {boolean}\n */\n public static matchAny(itemType: string | null | undefined): boolean {\n return itemType === undefined;\n }\n\n /**\n * Return the color for a type\n */\n public getTypeColor(type: string): string | undefined | null {\n let color;\n if (\n StyleRule.checkItemType([type], this.itemType) &&\n this.type === SelectorType.ANY &&\n !Tools.isDefined(this.input)\n ) {\n color = ItemAttributes.getTypeColor(this, type);\n }\n return color;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"styleRule.js","sourceRoot":"","sources":["../../src/styles/styleRule.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport {\n IEdgeStyle,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n INodeStyle,\n IRangeValues,\n SelectorType,\n IStyleAutoRange\n} from '@linkurious/rest-client';\n\nimport {ItemAttributes} from '..';\nimport {Tools} from '../tools/tools';\n\nexport enum StyleRuleType {\n AUTO_RANGE = 'autoRange'\n}\n\nexport class StyleRule<T extends INodeStyle | IEdgeStyle = INodeStyle | IEdgeStyle>\n implements IStyleRule<T> {\n public type: SelectorType;\n public input: string[] | undefined;\n public index: number;\n public style: T;\n public itemType?: string;\n public value: IRangeValues | number | string | boolean;\n\n constructor(model: IStyleRule<T>) {\n this.type = model.type;\n this.input = model.input;\n this.index = model.index;\n this.itemType = model.itemType;\n this.style = model.style;\n // cast to remove undefined from type\n this.value = model.value as IRangeValues | number | string | boolean;\n }\n\n public static isAutomaticRange(rule: IStyleRule<IEdgeStyle | INodeStyle>): boolean {\n return (\n rule.style !== undefined &&\n (((rule.style as IEdgeStyle).width !== undefined &&\n ((rule.style as IEdgeStyle).width as IStyleAutoRange).type === StyleRuleType.AUTO_RANGE) ||\n ((rule.style as INodeStyle).size !== undefined &&\n ((rule.style as INodeStyle).size as IStyleAutoRange).type === StyleRuleType.AUTO_RANGE))\n );\n }\n\n /**\n * Return an int describing specificity of the style. 4 = very specific / 1 = not specific\n *\n * @return {number}\n */\n get specificity(): 1 | 2 | 3 | 4 {\n if (this.itemType !== undefined && this.input !== undefined) {\n return 4;\n }\n if (this.itemType === undefined && this.input !== undefined) {\n return 3;\n }\n if (this.itemType !== undefined && this.input === undefined) {\n return 2;\n }\n return 1;\n }\n\n /**\n * Return true if this style match values\n */\n public matchValues(\n itemType: string | undefined,\n input: Array<string> | undefined,\n value: string | undefined\n ): boolean {\n if (Tools.isDefined(input)) {\n return (\n ((itemType === this.itemType || !Tools.isDefined(this.itemType)) &&\n Tools.isEqual(['properties', ...input], this.input) &&\n Tools.isEqual(value, this.value)) ||\n (this.type === 'any' &&\n !Tools.isDefined(this.input) &&\n typeof this.style.color === 'object' &&\n this.style.color.input[1] === input[0])\n );\n }\n\n if (Tools.isDefined(this.itemType)) {\n return itemType === this.itemType && !Tools.isDefined(this.input);\n }\n\n return !Tools.isDefined(this.input);\n }\n\n public static inputExists(\n type: SelectorType,\n input: Array<string> | undefined\n ): input is Array<string> {\n return type !== SelectorType.ANY;\n }\n\n /**\n * Return true if a style can apply to a node\n */\n public canApplyTo(data: LkNodeData | LkEdgeData): boolean {\n const types = 'categories' in data ? data.categories : [data.type];\n let typePredicate = false;\n switch (this.type) {\n case SelectorType.ANY:\n typePredicate = StyleRule.checkAny(data, this.style);\n break;\n\n case SelectorType.NO_VALUE:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkNoValue(data, this.input);\n }\n break;\n\n case SelectorType.NAN:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkNan(data, this.input);\n }\n break;\n\n case SelectorType.RANGE:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkRange(\n Tools.getIn(data, this.input),\n this.value as IRangeValues\n );\n }\n break;\n\n case SelectorType.IS:\n if (StyleRule.inputExists(this.type, this.input)) {\n typePredicate = StyleRule.checkIs(data, this.input, this.value);\n }\n break;\n }\n return typePredicate && StyleRule.checkItemType(types, this.itemType);\n }\n\n /**\n * Return true or false on rule type 'any' if the current node match the rule\n */\n public static checkAny(data: LkNodeData | LkEdgeData, style: INodeStyle | IEdgeStyle): boolean {\n // return true if autoColor by a property and this property exists in node\n if (typeof style.color === 'object') {\n return Tools.isDefined(Tools.getIn(data, style.color.input));\n }\n return true;\n }\n\n /**\n * Return true or false on rule type 'noValue' if the current node match the rule\n */\n public static checkNoValue(data: LkNodeData | LkEdgeData, input: Array<string>): boolean {\n return !Tools.valueExists(Tools.getIn(data, input));\n }\n\n /**\n * Return true or false on rule type 'NaN' if the current node match the rule\n */\n public static checkNan(data: LkNodeData | LkEdgeData, input: Array<string>): boolean {\n return !Tools.isNumber(Tools.getIn(data, input));\n }\n\n /**\n * Return true if predicate is true for the node value\n *\n * @param value\n * @param comparator\n * @return {boolean}\n */\n public static checkRange(\n value: number,\n comparator: {[key in '<=' | '<' | '>' | '>=']?: number}\n ): boolean {\n return (\n (comparator['<='] === undefined || value <= comparator['<=']) &&\n (comparator['<'] === undefined || value < comparator['<']) &&\n (comparator['>'] === undefined || value > comparator['>']) &&\n (comparator['>='] === undefined || value >= comparator['>='])\n );\n }\n\n /**\n * Return true or false on rule type 'is' if the current node match the rule\n */\n public static checkIs(\n data: LkNodeData | LkEdgeData,\n input: Array<string>,\n value: IRangeValues | number | string | boolean\n ): boolean {\n if (!Tools.isDefined(input)) {\n return false;\n }\n const itemValue = Tools.getIn(data, input);\n let formattedValue = itemValue;\n if (\n Tools.isDefined(itemValue) &&\n typeof itemValue === 'object' &&\n (itemValue.type === 'date' || itemValue.type === 'datetime')\n ) {\n let timezone = itemValue.timezone;\n if (itemValue.timezone === 'Z') {\n timezone = '+00:00';\n }\n formattedValue = Tools.formatDate(\n itemValue.value,\n itemValue.type === 'datetime',\n Tools.timezoneToMilliseconds(timezone) / 1000\n );\n }\n return Tools.isEqual(formattedValue, value);\n }\n\n /**\n * Check that value of itemType match for the node\n */\n public static checkItemType(types: Array<string>, itemType: string | undefined): boolean {\n return StyleRule.matchCategory(types, itemType) || StyleRule.matchAny(itemType);\n }\n\n /**\n * Return true if itemType is defined and category exists in an array of categories\n *\n * @param {Array<string> | string} types\n * @param {string} itemType\n * @return {boolean}\n */\n public static matchCategory(\n types: Array<string> | string,\n itemType: string | undefined\n ): boolean {\n return (\n Tools.isDefined(itemType) &&\n (Array.isArray(types) ? types.includes(itemType) : Tools.isEqual(types, itemType))\n );\n }\n\n /**\n * Return true if itemType is undefined\n *\n * @param {string} itemType\n * @return {boolean}\n */\n public static matchAny(itemType: string | null | undefined): boolean {\n return itemType === undefined;\n }\n\n /**\n * Return the color for a type\n */\n public getTypeColor(type: string): string | undefined | null {\n let color;\n if (\n StyleRule.checkItemType([type], this.itemType) &&\n this.type === SelectorType.ANY &&\n !Tools.isDefined(this.input)\n ) {\n color = ItemAttributes.getTypeColor(this, type);\n }\n return color;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkurious/ogma-linkurious-parser",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.1",
|
|
4
4
|
"author": "Linkurious SAS",
|
|
5
5
|
"description": "Parse and load a Linkurious visualization in Ogma with one line of code ",
|
|
6
6
|
"files": [
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"main": "./dist/index.js",
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": "
|
|
16
|
+
"node": "20.14.0"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "tsc -b",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"latest:master-maintenance": "npm install --save-exact @linkurious/rest-client@lk-master-maintenance",
|
|
34
34
|
"latest:master-stable": "npm install --save-exact @linkurious/rest-client@lk-master-stable",
|
|
35
35
|
"latest:master": "npm install --save-exact @linkurious/rest-client@lk-master",
|
|
36
|
+
"latest:generic": "npm install --save-exact @linkurious/rest-client@${npm_config_lk_tag}",
|
|
36
37
|
"bump:patch": "bump2version patch && npm version --no-git-tag-version patch",
|
|
37
38
|
"bump:minor": "bump2version minor && npm version --no-git-tag-version minor",
|
|
38
39
|
"bump:major": "bump2version major && npm version --no-git-tag-version major"
|
|
@@ -49,11 +50,11 @@
|
|
|
49
50
|
"sha1": "1.1.1"
|
|
50
51
|
},
|
|
51
52
|
"peerDependencies": {
|
|
52
|
-
"@linkurious/ogma": "
|
|
53
|
+
"@linkurious/ogma": "5.0.8"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
|
-
"@linkurious/ogma": "
|
|
56
|
-
"@linkurious/rest-client": "4.
|
|
56
|
+
"@linkurious/ogma": "5.0.8",
|
|
57
|
+
"@linkurious/rest-client": "4.1.1",
|
|
57
58
|
"@rollup/plugin-buble": "0.21.3",
|
|
58
59
|
"@rollup/plugin-commonjs": "17.0.0",
|
|
59
60
|
"@rollup/plugin-json": "4.1.0",
|