UNPKG

14.4 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.postprocessPVJSON = exports.preprocessGPML = exports.getGroupDimensions = void 0;
4var fp_1 = require("lodash/fp");
5var gpml_utilities_1 = require("./gpml-utilities");
6var GPML2013aGroupMappingsByStyle = require("./2013a/GroupMappingsByStyle.json");
7function getGroupDimensions(padding, strokeWidth, containedEntities) {
8 if (containedEntities.length === 0) {
9 console.warn("Warning: Empty group observed.");
10 return {
11 x: 0,
12 y: 0,
13 width: 0,
14 height: 0,
15 zIndex: 0
16 };
17 }
18 else if (!fp_1.isFinite(padding)) {
19 throw new Error("Invalid padding value: ${padding}");
20 }
21 else if (!fp_1.isFinite(strokeWidth)) {
22 throw new Error("Invalid strokeWidth value: ${strokeWidth}");
23 }
24 var dimensions = containedEntities
25 .filter(function (entity) { return gpml_utilities_1.isPvjsonSingleFreeNode(entity) || gpml_utilities_1.isPvjsonEdge(entity); })
26 .reduce(function (_a, entity) {
27 var runningDimensions = _a.runningDimensions, topLeftCorner = _a.topLeftCorner, bottomRightCorner = _a.bottomRightCorner;
28 var zIndex = entity.zIndex;
29 var zIndexIsFinite = fp_1.isFinite(zIndex);
30 var runningDimensionsZIndexIsFinite = fp_1.isFinite(runningDimensions.zIndex);
31 if (zIndexIsFinite && runningDimensionsZIndexIsFinite) {
32 runningDimensions.zIndex = Math.min(zIndex, runningDimensions.zIndex);
33 }
34 else if (zIndexIsFinite) {
35 runningDimensions.zIndex = zIndex;
36 }
37 if (gpml_utilities_1.isPvjsonEdge(entity)) {
38 var points = entity.points;
39 // If entity is an edge
40 var firstPoint = points[0];
41 var firstPointX = firstPoint.x;
42 var firstPointY = firstPoint.y;
43 var lastPoint = points[points.length - 1];
44 var lastPointX = lastPoint.x;
45 var lastPointY = lastPoint.y;
46 topLeftCorner.x = Math.min(topLeftCorner.x, firstPointX, lastPointX);
47 topLeftCorner.y = Math.min(topLeftCorner.y, firstPointY, lastPointY);
48 bottomRightCorner.x = Math.max(bottomRightCorner.x, firstPointX, lastPointX);
49 bottomRightCorner.y = Math.max(bottomRightCorner.y, firstPointY, lastPointY);
50 }
51 else {
52 // If entity is a node
53 topLeftCorner.x = Math.min(topLeftCorner.x, entity.x);
54 topLeftCorner.y = Math.min(topLeftCorner.y, entity.y);
55 bottomRightCorner.x = Math.max(bottomRightCorner.x, entity.x + entity.width);
56 bottomRightCorner.y = Math.max(bottomRightCorner.y, entity.y + entity.height);
57 }
58 runningDimensions.x = topLeftCorner.x - padding - strokeWidth;
59 runningDimensions.y = topLeftCorner.y - padding - strokeWidth;
60 runningDimensions.width =
61 bottomRightCorner.x - topLeftCorner.x + 2 * (padding + strokeWidth);
62 runningDimensions.height =
63 bottomRightCorner.y - topLeftCorner.y + 2 * (padding + strokeWidth);
64 return { runningDimensions: runningDimensions, topLeftCorner: topLeftCorner, bottomRightCorner: bottomRightCorner };
65 }, {
66 topLeftCorner: {
67 x: Infinity,
68 y: Infinity
69 },
70 bottomRightCorner: {
71 x: 0,
72 y: 0
73 },
74 runningDimensions: {
75 zIndex: Infinity
76 }
77 }).runningDimensions;
78 var propertiesToCheck = ["x", "y", "width", "height", "zIndex"];
79 var nonFinites = propertiesToCheck
80 .map(function (key) {
81 return [[key], dimensions[key]];
82 })
83 .filter(function (dims) { return !fp_1.isFinite(dims[1]); });
84 if (nonFinites.length > 0) {
85 throw new Error("Got a non-finite value(s):\n\t\t\t" + JSON.stringify(fp_1.fromPairs(nonFinites), null, " ") + "\n\t\t\twhen calling\n\t\t\tgetGroupDimensions(\n\t\t\t\tpadding: " + padding + ",\n\t\t\t\tstrokeWidth: " + strokeWidth + ",\n\t\t\t\tcontainedEntities: " + JSON.stringify(containedEntities, null, " ") + "\n\t\t\t)\n\t\t\t\n\t\t\t");
86 }
87 return dimensions;
88}
89exports.getGroupDimensions = getGroupDimensions;
90// NOTE: side effects
91exports.preprocessGPML = fp_1.curry(function (processor, Group) {
92 // NOTE: The class "Group" is the only class that uses the "Style" property.
93 // There are defaults for each Style, so we apply them here.
94 fp_1.toPairs(GPML2013aGroupMappingsByStyle[Group.Style]).forEach(function (_a) {
95 var mappingKey = _a[0], mappingValue = _a[1];
96 var oldValue = Group[mappingKey];
97 var newValue;
98 if (fp_1.isPlainObject(mappingValue)) {
99 newValue = fp_1.assign(oldValue || {}, mappingValue);
100 }
101 else if (Group.hasOwnProperty(mappingKey)) {
102 if (fp_1.isArray(mappingValue)) {
103 newValue = gpml_utilities_1.unionLSV(mappingValue, oldValue);
104 }
105 else {
106 newValue = oldValue;
107 }
108 }
109 else {
110 // override prototype with default by style
111 newValue = mappingValue;
112 }
113 Group[mappingKey] = newValue;
114 });
115 Group.Contains = processor.containedGraphIdsByGroupGroupId[Group.GroupId];
116 return Group;
117});
118function postprocessPVJSON(containedEntities, group) {
119 return fp_1.assign(group, getGroupDimensions(group.padding, group.strokeWidth, containedEntities));
120}
121exports.postprocessPVJSON = postprocessPVJSON;
122//// TODO do we need any of this old code that was in post-process.ts?
123// // Kludge to get the zIndex for Groups
124// const zIndexForGroups =
125// -1 +
126// EDGES.concat(["DataNode", "Label"])
127// .reduce(function(acc, gpmlElementName) {
128// data[gpmlElementName].forEach(function(el) {
129// acc.push(el);
130// });
131// return acc;
132// }, [])
133// .reduce(getFromElementMapByIdIfExists, [])
134// .map(element => element.zIndex)
135// .reduce(function(acc, zIndex) {
136// return Math.min(acc, zIndex);
137// }, Infinity);
138//
139// // specify contained elements in groups
140// data.Group
141// .reduce(getFromElementMapByIdIfExists, [])
142// .map(function(element) {
143// element.zIndex = zIndexForGroups;
144//
145// // NOTE: pvjson doesn't use GroupId. It just uses GraphId as the id for an element.
146// // That means:
147// // GPML GroupId is replaced in pvjson by just id (from GraphId), and
148// // GPML GroupRef is replaced in pvjson by element.isPartOf and group.contains (from GraphRef)
149// // We need to map from GroupId/GroupRef to id/contains/isPartOf here.
150// // element.id refers to the value of the GraphId of the Group
151// const groupGraphId = element.id;
152// const containedIds = (element.contains =
153// data.containedIdsByGroupId[data.GraphIdToGroupId[groupGraphId]] || []);
154//
155// if (containedIds.length > 0) {
156// // NOTE side effects
157// containedIds
158// .reduce(getFromElementMapByIdIfExists, [])
159// .map(function(contained) {
160// contained.isPartOf = groupGraphId;
161// return contained;
162// })
163// .forEach(upsertDataMapEntry.bind(undefined, elementMap));
164// } else {
165// // NOTE: side effect
166// delete elementMap[groupGraphId];
167// }
168//
169// return element;
170// })
171// .forEach(upsertDataMapEntry.bind(undefined, elementMap));
172//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBUW1CO0FBQ25CLG1EQUkwQjtBQUMxQixpRkFBbUY7QUFhbkYsU0FBZ0Isa0JBQWtCLENBQ2hDLE9BQWUsRUFDZixXQUFtQixFQUNuQixpQkFBaUM7SUFFakMsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMvQyxPQUFPO1lBQ0wsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztZQUNKLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUM7S0FDSDtTQUFNLElBQUksQ0FBQyxhQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO1NBQU0sSUFBSSxDQUFDLGFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDOUQ7SUFDRCxJQUFNLFVBQVUsR0FBRyxpQkFBaUI7U0FDakMsTUFBTSxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsdUNBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksNkJBQVksQ0FBQyxNQUFNLENBQUMsRUFBdEQsQ0FBc0QsQ0FBQztTQUN4RSxNQUFNLENBQ0wsVUFDRSxFQUF1RCxFQUN2RCxNQUF5QztZQUR2QyxpQkFBaUIsdUJBQUEsRUFBRSxhQUFhLG1CQUFBLEVBQUUsaUJBQWlCLHVCQUFBO1FBRzdDLElBQUEsTUFBTSxHQUFLLE1BQU0sT0FBWCxDQUFZO1FBQzFCLElBQU0sY0FBYyxHQUFHLGFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFNLCtC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
\No newline at end of file