@contrail/document-generation 1.0.24 → 1.0.25
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/README.md +1 -1
- package/lib/components/component-generator.d.ts +11 -11
- package/lib/components/component-generator.js +67 -67
- package/lib/components/component-grid-generator.d.ts +7 -7
- package/lib/components/component-grid-generator.js +81 -81
- package/lib/components/component-util.d.ts +4 -4
- package/lib/components/component-util.js +26 -26
- package/lib/document-generator.d.ts +11 -11
- package/lib/document-generator.js +106 -106
- package/lib/frame-generator.d.ts +9 -9
- package/lib/frame-generator.js +77 -77
- package/lib/index.d.ts +2 -2
- package/lib/index.js +18 -18
- package/lib/info-panel/info-panel-generator.d.ts +5 -5
- package/lib/info-panel/info-panel-generator.js +34 -34
- package/lib/interfaces.d.ts +56 -56
- package/lib/interfaces.js +8 -8
- package/lib/scripts/test.d.ts +1 -1
- package/lib/scripts/test.js +275 -275
- package/lib/test-data.d.ts +72 -72
- package/lib/test-data.js +176 -176
- package/lib/util/document-property-util.d.ts +7 -7
- package/lib/util/document-property-util.js +47 -47
- package/lib/util/document-text-element-util.d.ts +6 -6
- package/lib/util/document-text-element-util.js +59 -59
- package/lib/util/document-util.d.ts +7 -7
- package/lib/util/document-util.js +13 -13
- package/package.json +50 -50
- package/testdocument.json +1 -1
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DocumentGenerator = void 0;
|
|
4
|
-
const documents_1 = require("@contrail/documents");
|
|
5
|
-
const interfaces_1 = require("./interfaces");
|
|
6
|
-
const util_1 = require("@contrail/util");
|
|
7
|
-
const frame_generator_1 = require("./frame-generator");
|
|
8
|
-
class DocumentGenerator {
|
|
9
|
-
constructor() {
|
|
10
|
-
}
|
|
11
|
-
static generateDocumentElements(options) {
|
|
12
|
-
const elements = [];
|
|
13
|
-
const structure = options.data.dataGroup;
|
|
14
|
-
const template = options.documentTemplateDefinition;
|
|
15
|
-
console.log("generateDocumentElements: ", structure.depth, structure.groupingProperties.length);
|
|
16
|
-
let position = options.startingCoordinates || { x: 0, y: 0 };
|
|
17
|
-
const group = structure.rootGroup;
|
|
18
|
-
elements.push(...this.generateGroup(group, template, position, structure.depth, 0));
|
|
19
|
-
return elements;
|
|
20
|
-
}
|
|
21
|
-
static generateGroup(group, template, startingPosition, totalDepth, currentDepth) {
|
|
22
|
-
const elements = [];
|
|
23
|
-
let position = util_1.ObjectUtil.cloneDeep(startingPosition);
|
|
24
|
-
if (currentDepth > 0) {
|
|
25
|
-
let groupHeaderPosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
26
|
-
let span = this.getGroupSpan(group, totalDepth, currentDepth);
|
|
27
|
-
elements.push(...this.generateGroupHeading(group, template, groupHeaderPosition, span));
|
|
28
|
-
let groupHeaderDimensions = { width: template.frameSize.width, height: template.frameGroupHeaderTemplate.size.height };
|
|
29
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
30
|
-
position = { x: position.x + groupHeaderDimensions.height + template.framePadding, y: position.y };
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
position = { x: position.x, y: position.y + groupHeaderDimensions.height + template.framePadding };
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (currentDepth === totalDepth) {
|
|
37
|
-
elements.push(...this.generateFrameGroup(group, template, position));
|
|
38
|
-
}
|
|
39
|
-
if (currentDepth < totalDepth) {
|
|
40
|
-
for (let subGroup of group.subGroups) {
|
|
41
|
-
elements.push(...this.generateGroup(subGroup, template, position, totalDepth, currentDepth + 1));
|
|
42
|
-
let frameSetMultiple = this.getGroupSpan(subGroup, totalDepth, currentDepth + 1);
|
|
43
|
-
let paddingMultiple = 1;
|
|
44
|
-
if (currentDepth < totalDepth) {
|
|
45
|
-
paddingMultiple = frameSetMultiple;
|
|
46
|
-
}
|
|
47
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
48
|
-
position = { x: position.x, y: position.y + (template.frameSize.height * frameSetMultiple) + (template.framePadding * paddingMultiple) };
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
position = { x: position.x + (template.frameSize.width * frameSetMultiple) + (template.framePadding * paddingMultiple), y: position.y };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return elements;
|
|
56
|
-
}
|
|
57
|
-
static getGroupSpan(group, totalDepth, currentDepth) {
|
|
58
|
-
let span = 1;
|
|
59
|
-
if (currentDepth !== totalDepth) {
|
|
60
|
-
span = group.subGroups.length;
|
|
61
|
-
}
|
|
62
|
-
return span;
|
|
63
|
-
}
|
|
64
|
-
static generateFrameGroup(dataGroup, template, position) {
|
|
65
|
-
const elements = [];
|
|
66
|
-
let framePosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
67
|
-
for (let group of dataGroup.subGroups) {
|
|
68
|
-
elements.push(...frame_generator_1.FrameGenerator.generateFrameForDataGroup(group, framePosition, template));
|
|
69
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
70
|
-
framePosition.x = framePosition.x + template.frameSize.width + template.framePadding || 10;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
framePosition.y = framePosition.y + template.frameSize.height + template.framePadding || 10;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return elements;
|
|
77
|
-
}
|
|
78
|
-
static generateGroupHeading(dataGroup, template, position, span) {
|
|
79
|
-
const elements = [];
|
|
80
|
-
const heading = documents_1.DocumentElementFactory.createTextElement("Placeholder", {});
|
|
81
|
-
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameGroupHeaderTemplate.style.backgroundColor || 'black' };
|
|
82
|
-
heading.text = `<p><span style=\"font-size: ${template.frameGroupHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameGroupHeaderTemplate.style.color};\">${dataGroup.name}</span></strong></span></p>`;
|
|
83
|
-
heading.position = position;
|
|
84
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
85
|
-
let sizeDim = template.frameSize.height * span;
|
|
86
|
-
if (span > 1) {
|
|
87
|
-
sizeDim += (span - 1) * template.framePadding;
|
|
88
|
-
}
|
|
89
|
-
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
90
|
-
heading.rotate = { angle: 270 };
|
|
91
|
-
heading.position.x = heading.position.x - (heading.size.width / 2) + (heading.size.height / 2);
|
|
92
|
-
heading.position.y = heading.position.y + (heading.size.width / 2) - (heading.size.height / 2);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
let sizeDim = template.frameSize.width * span;
|
|
96
|
-
if (span > 1) {
|
|
97
|
-
sizeDim += (span - 1) * template.framePadding;
|
|
98
|
-
}
|
|
99
|
-
heading.rotate = { angle: 0 };
|
|
100
|
-
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
101
|
-
}
|
|
102
|
-
elements.push(heading);
|
|
103
|
-
return elements;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.DocumentGenerator = DocumentGenerator;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentGenerator = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const interfaces_1 = require("./interfaces");
|
|
6
|
+
const util_1 = require("@contrail/util");
|
|
7
|
+
const frame_generator_1 = require("./frame-generator");
|
|
8
|
+
class DocumentGenerator {
|
|
9
|
+
constructor() {
|
|
10
|
+
}
|
|
11
|
+
static generateDocumentElements(options) {
|
|
12
|
+
const elements = [];
|
|
13
|
+
const structure = options.data.dataGroup;
|
|
14
|
+
const template = options.documentTemplateDefinition;
|
|
15
|
+
console.log("generateDocumentElements: ", structure.depth, structure.groupingProperties.length);
|
|
16
|
+
let position = options.startingCoordinates || { x: 0, y: 0 };
|
|
17
|
+
const group = structure.rootGroup;
|
|
18
|
+
elements.push(...this.generateGroup(group, template, position, structure.depth, 0));
|
|
19
|
+
return elements;
|
|
20
|
+
}
|
|
21
|
+
static generateGroup(group, template, startingPosition, totalDepth, currentDepth) {
|
|
22
|
+
const elements = [];
|
|
23
|
+
let position = util_1.ObjectUtil.cloneDeep(startingPosition);
|
|
24
|
+
if (currentDepth > 0) {
|
|
25
|
+
let groupHeaderPosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
26
|
+
let span = this.getGroupSpan(group, totalDepth, currentDepth);
|
|
27
|
+
elements.push(...this.generateGroupHeading(group, template, groupHeaderPosition, span));
|
|
28
|
+
let groupHeaderDimensions = { width: template.frameSize.width, height: template.frameGroupHeaderTemplate.size.height };
|
|
29
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
30
|
+
position = { x: position.x + groupHeaderDimensions.height + template.framePadding, y: position.y };
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
position = { x: position.x, y: position.y + groupHeaderDimensions.height + template.framePadding };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (currentDepth === totalDepth) {
|
|
37
|
+
elements.push(...this.generateFrameGroup(group, template, position));
|
|
38
|
+
}
|
|
39
|
+
if (currentDepth < totalDepth) {
|
|
40
|
+
for (let subGroup of group.subGroups) {
|
|
41
|
+
elements.push(...this.generateGroup(subGroup, template, position, totalDepth, currentDepth + 1));
|
|
42
|
+
let frameSetMultiple = this.getGroupSpan(subGroup, totalDepth, currentDepth + 1);
|
|
43
|
+
let paddingMultiple = 1;
|
|
44
|
+
if (currentDepth < totalDepth) {
|
|
45
|
+
paddingMultiple = frameSetMultiple;
|
|
46
|
+
}
|
|
47
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
48
|
+
position = { x: position.x, y: position.y + (template.frameSize.height * frameSetMultiple) + (template.framePadding * paddingMultiple) };
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
position = { x: position.x + (template.frameSize.width * frameSetMultiple) + (template.framePadding * paddingMultiple), y: position.y };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return elements;
|
|
56
|
+
}
|
|
57
|
+
static getGroupSpan(group, totalDepth, currentDepth) {
|
|
58
|
+
let span = 1;
|
|
59
|
+
if (currentDepth !== totalDepth) {
|
|
60
|
+
span = group.subGroups.length;
|
|
61
|
+
}
|
|
62
|
+
return span;
|
|
63
|
+
}
|
|
64
|
+
static generateFrameGroup(dataGroup, template, position) {
|
|
65
|
+
const elements = [];
|
|
66
|
+
let framePosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
67
|
+
for (let group of dataGroup.subGroups) {
|
|
68
|
+
elements.push(...frame_generator_1.FrameGenerator.generateFrameForDataGroup(group, framePosition, template));
|
|
69
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
70
|
+
framePosition.x = framePosition.x + template.frameSize.width + template.framePadding || 10;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
framePosition.y = framePosition.y + template.frameSize.height + template.framePadding || 10;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return elements;
|
|
77
|
+
}
|
|
78
|
+
static generateGroupHeading(dataGroup, template, position, span) {
|
|
79
|
+
const elements = [];
|
|
80
|
+
const heading = documents_1.DocumentElementFactory.createTextElement("Placeholder", {});
|
|
81
|
+
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameGroupHeaderTemplate.style.backgroundColor || 'black' };
|
|
82
|
+
heading.text = `<p><span style=\"font-size: ${template.frameGroupHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameGroupHeaderTemplate.style.color};\">${dataGroup.name}</span></strong></span></p>`;
|
|
83
|
+
heading.position = position;
|
|
84
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
85
|
+
let sizeDim = template.frameSize.height * span;
|
|
86
|
+
if (span > 1) {
|
|
87
|
+
sizeDim += (span - 1) * template.framePadding;
|
|
88
|
+
}
|
|
89
|
+
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
90
|
+
heading.rotate = { angle: 270 };
|
|
91
|
+
heading.position.x = heading.position.x - (heading.size.width / 2) + (heading.size.height / 2);
|
|
92
|
+
heading.position.y = heading.position.y + (heading.size.width / 2) - (heading.size.height / 2);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
let sizeDim = template.frameSize.width * span;
|
|
96
|
+
if (span > 1) {
|
|
97
|
+
sizeDim += (span - 1) * template.framePadding;
|
|
98
|
+
}
|
|
99
|
+
heading.rotate = { angle: 0 };
|
|
100
|
+
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
101
|
+
}
|
|
102
|
+
elements.push(heading);
|
|
103
|
+
return elements;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.DocumentGenerator = DocumentGenerator;
|
package/lib/frame-generator.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
|
|
2
|
-
import { DataGroup } from "@contrail/data-grouping";
|
|
3
|
-
import { DocumentTemplate } from "./interfaces";
|
|
4
|
-
export declare class FrameGenerator {
|
|
5
|
-
static generateFrameForDataGroup(dataGroup: DataGroup, framePosition: PositionDefinition, template: DocumentTemplate): any[];
|
|
6
|
-
static generateFrameHeaderForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, headerSize: SizeDefinition): DocumentElement[];
|
|
7
|
-
static generateFrameInfoPanelForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, panelSize: SizeDefinition): DocumentElement[];
|
|
8
|
-
static generateFrame(options: DocumentElement): DocumentElement;
|
|
9
|
-
}
|
|
1
|
+
import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
|
|
2
|
+
import { DataGroup } from "@contrail/data-grouping";
|
|
3
|
+
import { DocumentTemplate } from "./interfaces";
|
|
4
|
+
export declare class FrameGenerator {
|
|
5
|
+
static generateFrameForDataGroup(dataGroup: DataGroup, framePosition: PositionDefinition, template: DocumentTemplate): any[];
|
|
6
|
+
static generateFrameHeaderForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, headerSize: SizeDefinition): DocumentElement[];
|
|
7
|
+
static generateFrameInfoPanelForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, panelSize: SizeDefinition): DocumentElement[];
|
|
8
|
+
static generateFrame(options: DocumentElement): DocumentElement;
|
|
9
|
+
}
|
package/lib/frame-generator.js
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FrameGenerator = void 0;
|
|
4
|
-
const documents_1 = require("@contrail/documents");
|
|
5
|
-
const component_grid_generator_1 = require("./components/component-grid-generator");
|
|
6
|
-
const util_1 = require("@contrail/util");
|
|
7
|
-
const document_util_1 = require("./util/document-util");
|
|
8
|
-
const info_panel_generator_1 = require("./info-panel/info-panel-generator");
|
|
9
|
-
class FrameGenerator {
|
|
10
|
-
static generateFrameForDataGroup(dataGroup, framePosition, template) {
|
|
11
|
-
var _a, _b;
|
|
12
|
-
const elements = [];
|
|
13
|
-
const frame = this.generateFrame({
|
|
14
|
-
position: util_1.ObjectUtil.cloneDeep(framePosition),
|
|
15
|
-
size: template.frameSize,
|
|
16
|
-
style: { backgroundColor: "#fff", border: { width: 1, color: "#616161" } }
|
|
17
|
-
});
|
|
18
|
-
frame.name = dataGroup.name;
|
|
19
|
-
const FRAME_PADDING = 20;
|
|
20
|
-
const headerPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
21
|
-
headerPosition.y = headerPosition.y + FRAME_PADDING;
|
|
22
|
-
headerPosition.x = headerPosition.x + FRAME_PADDING;
|
|
23
|
-
const panelPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
24
|
-
panelPosition.y = panelPosition.y + FRAME_PADDING;
|
|
25
|
-
panelPosition.x = panelPosition.x + FRAME_PADDING;
|
|
26
|
-
let frameHeaderDimensions = { height: 0, width: 0 };
|
|
27
|
-
let framePanelDimensions = { height: 0, width: 0 };
|
|
28
|
-
let hasPanel = false;
|
|
29
|
-
let hasHeader = false;
|
|
30
|
-
elements.push(util_1.ObjectUtil.cloneDeep(frame));
|
|
31
|
-
if (template.frameHeaderTemplate) {
|
|
32
|
-
hasHeader = true;
|
|
33
|
-
frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
|
|
34
|
-
elements.push(...this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions));
|
|
35
|
-
}
|
|
36
|
-
if (template.frameInfoPanelTemplate) {
|
|
37
|
-
hasPanel = true;
|
|
38
|
-
framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 };
|
|
39
|
-
framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING);
|
|
40
|
-
elements.push(...this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions));
|
|
41
|
-
}
|
|
42
|
-
const GRID_MARGIN = 20;
|
|
43
|
-
let gridPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
44
|
-
if (hasHeader) {
|
|
45
|
-
gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition);
|
|
46
|
-
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
|
|
47
|
-
}
|
|
48
|
-
if (hasPanel) {
|
|
49
|
-
gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition);
|
|
50
|
-
gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
|
|
51
|
-
}
|
|
52
|
-
const relativeGridPosition = document_util_1.DocumentUtil.getRelativePosition(framePosition, gridPosition);
|
|
53
|
-
const frameSize = template.frameSize;
|
|
54
|
-
const idealGridSize = {
|
|
55
|
-
width: frameSize.width - relativeGridPosition.x - FRAME_PADDING,
|
|
56
|
-
height: frameSize.height - relativeGridPosition.y - FRAME_PADDING
|
|
57
|
-
};
|
|
58
|
-
elements.push(...component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize));
|
|
59
|
-
return elements;
|
|
60
|
-
}
|
|
61
|
-
static generateFrameHeaderForDataGroup(dataGroup, position, template, headerSize) {
|
|
62
|
-
const heading = documents_1.DocumentElementFactory.createTextElement(dataGroup.name, template.frameHeaderTemplate);
|
|
63
|
-
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameHeaderTemplate.style.backgroundColor || 'black' };
|
|
64
|
-
heading.text = `<p><span style=\"font-size: ${template.frameHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameHeaderTemplate.style.color};\">${dataGroup.name}</span></strong></span></p>`;
|
|
65
|
-
heading.size = util_1.ObjectUtil.cloneDeep(headerSize);
|
|
66
|
-
heading.position = util_1.ObjectUtil.cloneDeep(position);
|
|
67
|
-
return [heading];
|
|
68
|
-
}
|
|
69
|
-
static generateFrameInfoPanelForDataGroup(dataGroup, position, template, panelSize) {
|
|
70
|
-
return info_panel_generator_1.InfoPanelGenerator.generatePanelFromTemplate(dataGroup.propertyValues, template.frameInfoPanelTemplate, position, panelSize);
|
|
71
|
-
}
|
|
72
|
-
static generateFrame(options) {
|
|
73
|
-
const frame = documents_1.DocumentElementFactory.createFrameElement(options);
|
|
74
|
-
return frame;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
exports.FrameGenerator = FrameGenerator;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FrameGenerator = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const component_grid_generator_1 = require("./components/component-grid-generator");
|
|
6
|
+
const util_1 = require("@contrail/util");
|
|
7
|
+
const document_util_1 = require("./util/document-util");
|
|
8
|
+
const info_panel_generator_1 = require("./info-panel/info-panel-generator");
|
|
9
|
+
class FrameGenerator {
|
|
10
|
+
static generateFrameForDataGroup(dataGroup, framePosition, template) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const elements = [];
|
|
13
|
+
const frame = this.generateFrame({
|
|
14
|
+
position: util_1.ObjectUtil.cloneDeep(framePosition),
|
|
15
|
+
size: template.frameSize,
|
|
16
|
+
style: { backgroundColor: "#fff", border: { width: 1, color: "#616161" } }
|
|
17
|
+
});
|
|
18
|
+
frame.name = dataGroup.name;
|
|
19
|
+
const FRAME_PADDING = 20;
|
|
20
|
+
const headerPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
21
|
+
headerPosition.y = headerPosition.y + FRAME_PADDING;
|
|
22
|
+
headerPosition.x = headerPosition.x + FRAME_PADDING;
|
|
23
|
+
const panelPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
24
|
+
panelPosition.y = panelPosition.y + FRAME_PADDING;
|
|
25
|
+
panelPosition.x = panelPosition.x + FRAME_PADDING;
|
|
26
|
+
let frameHeaderDimensions = { height: 0, width: 0 };
|
|
27
|
+
let framePanelDimensions = { height: 0, width: 0 };
|
|
28
|
+
let hasPanel = false;
|
|
29
|
+
let hasHeader = false;
|
|
30
|
+
elements.push(util_1.ObjectUtil.cloneDeep(frame));
|
|
31
|
+
if (template.frameHeaderTemplate) {
|
|
32
|
+
hasHeader = true;
|
|
33
|
+
frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
|
|
34
|
+
elements.push(...this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions));
|
|
35
|
+
}
|
|
36
|
+
if (template.frameInfoPanelTemplate) {
|
|
37
|
+
hasPanel = true;
|
|
38
|
+
framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 };
|
|
39
|
+
framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING);
|
|
40
|
+
elements.push(...this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions));
|
|
41
|
+
}
|
|
42
|
+
const GRID_MARGIN = 20;
|
|
43
|
+
let gridPosition = util_1.ObjectUtil.cloneDeep(framePosition);
|
|
44
|
+
if (hasHeader) {
|
|
45
|
+
gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition);
|
|
46
|
+
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
|
|
47
|
+
}
|
|
48
|
+
if (hasPanel) {
|
|
49
|
+
gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition);
|
|
50
|
+
gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
|
|
51
|
+
}
|
|
52
|
+
const relativeGridPosition = document_util_1.DocumentUtil.getRelativePosition(framePosition, gridPosition);
|
|
53
|
+
const frameSize = template.frameSize;
|
|
54
|
+
const idealGridSize = {
|
|
55
|
+
width: frameSize.width - relativeGridPosition.x - FRAME_PADDING,
|
|
56
|
+
height: frameSize.height - relativeGridPosition.y - FRAME_PADDING
|
|
57
|
+
};
|
|
58
|
+
elements.push(...component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize));
|
|
59
|
+
return elements;
|
|
60
|
+
}
|
|
61
|
+
static generateFrameHeaderForDataGroup(dataGroup, position, template, headerSize) {
|
|
62
|
+
const heading = documents_1.DocumentElementFactory.createTextElement(dataGroup.name, template.frameHeaderTemplate);
|
|
63
|
+
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameHeaderTemplate.style.backgroundColor || 'black' };
|
|
64
|
+
heading.text = `<p><span style=\"font-size: ${template.frameHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameHeaderTemplate.style.color};\">${dataGroup.name}</span></strong></span></p>`;
|
|
65
|
+
heading.size = util_1.ObjectUtil.cloneDeep(headerSize);
|
|
66
|
+
heading.position = util_1.ObjectUtil.cloneDeep(position);
|
|
67
|
+
return [heading];
|
|
68
|
+
}
|
|
69
|
+
static generateFrameInfoPanelForDataGroup(dataGroup, position, template, panelSize) {
|
|
70
|
+
return info_panel_generator_1.InfoPanelGenerator.generatePanelFromTemplate(dataGroup.propertyValues, template.frameInfoPanelTemplate, position, panelSize);
|
|
71
|
+
}
|
|
72
|
+
static generateFrame(options) {
|
|
73
|
+
const frame = documents_1.DocumentElementFactory.createFrameElement(options);
|
|
74
|
+
return frame;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.FrameGenerator = FrameGenerator;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './document-generator';
|
|
2
|
-
export * from './interfaces';
|
|
1
|
+
export * from './document-generator';
|
|
2
|
+
export * from './interfaces';
|
package/lib/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./document-generator"), exports);
|
|
18
|
-
__exportStar(require("./interfaces"), exports);
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./document-generator"), exports);
|
|
18
|
+
__exportStar(require("./interfaces"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
|
|
2
|
-
import { FrameInfoPanelTemplate } from "../interfaces";
|
|
3
|
-
export declare class InfoPanelGenerator {
|
|
4
|
-
static generatePanelFromTemplate(data: any, template: FrameInfoPanelTemplate, position: PositionDefinition, panelSize: SizeDefinition): Array<DocumentElement>;
|
|
5
|
-
}
|
|
1
|
+
import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
|
|
2
|
+
import { FrameInfoPanelTemplate } from "../interfaces";
|
|
3
|
+
export declare class InfoPanelGenerator {
|
|
4
|
+
static generatePanelFromTemplate(data: any, template: FrameInfoPanelTemplate, position: PositionDefinition, panelSize: SizeDefinition): Array<DocumentElement>;
|
|
5
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InfoPanelGenerator = void 0;
|
|
4
|
-
const documents_1 = require("@contrail/documents");
|
|
5
|
-
const util_1 = require("@contrail/util");
|
|
6
|
-
const document_property_util_1 = require("../util/document-property-util");
|
|
7
|
-
class InfoPanelGenerator {
|
|
8
|
-
static generatePanelFromTemplate(data, template, position, panelSize) {
|
|
9
|
-
var _a;
|
|
10
|
-
if (!template.propertyTemplate) {
|
|
11
|
-
throw Error("No panel property template defined");
|
|
12
|
-
}
|
|
13
|
-
const elements = [];
|
|
14
|
-
const panel = documents_1.DocumentElementFactory.createShapeElement('rectangle', {});
|
|
15
|
-
panel.style = ((_a = template.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.style) || {};
|
|
16
|
-
panel.size = util_1.ObjectUtil.cloneDeep(panelSize) || {};
|
|
17
|
-
panel.position = util_1.ObjectUtil.cloneDeep(position);
|
|
18
|
-
elements.push(panel);
|
|
19
|
-
const textOptions = {
|
|
20
|
-
style: {
|
|
21
|
-
text: {
|
|
22
|
-
align: template.propertyTemplate.textHorizontalAlignment
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
size: {
|
|
26
|
-
width: panelSize.width - 10
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
const textElements = document_property_util_1.DocumentPropertyUtil.generatePropertyTextElements(data, template.propertyTemplate.properties, textOptions, { x: panel.position.x, y: panel.position.y }, false);
|
|
30
|
-
elements.push(...textElements);
|
|
31
|
-
return elements;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.InfoPanelGenerator = InfoPanelGenerator;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InfoPanelGenerator = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const util_1 = require("@contrail/util");
|
|
6
|
+
const document_property_util_1 = require("../util/document-property-util");
|
|
7
|
+
class InfoPanelGenerator {
|
|
8
|
+
static generatePanelFromTemplate(data, template, position, panelSize) {
|
|
9
|
+
var _a;
|
|
10
|
+
if (!template.propertyTemplate) {
|
|
11
|
+
throw Error("No panel property template defined");
|
|
12
|
+
}
|
|
13
|
+
const elements = [];
|
|
14
|
+
const panel = documents_1.DocumentElementFactory.createShapeElement('rectangle', {});
|
|
15
|
+
panel.style = ((_a = template.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.style) || {};
|
|
16
|
+
panel.size = util_1.ObjectUtil.cloneDeep(panelSize) || {};
|
|
17
|
+
panel.position = util_1.ObjectUtil.cloneDeep(position);
|
|
18
|
+
elements.push(panel);
|
|
19
|
+
const textOptions = {
|
|
20
|
+
style: {
|
|
21
|
+
text: {
|
|
22
|
+
align: template.propertyTemplate.textHorizontalAlignment
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
size: {
|
|
26
|
+
width: panelSize.width - 10
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const textElements = document_property_util_1.DocumentPropertyUtil.generatePropertyTextElements(data, template.propertyTemplate.properties, textOptions, { x: panel.position.x, y: panel.position.y }, false);
|
|
30
|
+
elements.push(...textElements);
|
|
31
|
+
return elements;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.InfoPanelGenerator = InfoPanelGenerator;
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { DataGroupStructure } from "@contrail/data-grouping";
|
|
2
|
-
import { PositionDefinition, SizeDefinition, DocumentElement, StyleDefinition } from "@contrail/documents";
|
|
3
|
-
import { TypeProperty } from "@contrail/types";
|
|
4
|
-
export declare enum Orientation {
|
|
5
|
-
HORIZONTAL = "horizontal",
|
|
6
|
-
VERTICAL = "vertical"
|
|
7
|
-
}
|
|
8
|
-
export interface DocumentGenerationDataDefinition {
|
|
9
|
-
dataGroup: DataGroupStructure;
|
|
10
|
-
}
|
|
11
|
-
export interface DocumentGenerationOptions {
|
|
12
|
-
startingCoordinates: PositionDefinition;
|
|
13
|
-
data: DocumentGenerationDataDefinition;
|
|
14
|
-
documentTemplateDefinition: DocumentTemplate;
|
|
15
|
-
}
|
|
16
|
-
export interface DocumentTemplate {
|
|
17
|
-
frameOrientation: Orientation;
|
|
18
|
-
frameSize: SizeDefinition;
|
|
19
|
-
framePadding?: number;
|
|
20
|
-
frameGroupHeaderTemplate: DocumentElement;
|
|
21
|
-
frameHeaderTemplate?: DocumentElement;
|
|
22
|
-
frameInfoPanelTemplate?: FrameInfoPanelTemplate;
|
|
23
|
-
componentGridTemplate: ComponentGridTemplate;
|
|
24
|
-
}
|
|
25
|
-
export interface FrameInfoPanelTemplate {
|
|
26
|
-
panelDocumentTemplate: DocumentElement;
|
|
27
|
-
propertyTemplate: PanelPropertyTemplate;
|
|
28
|
-
}
|
|
29
|
-
export interface PanelPropertyTemplate {
|
|
30
|
-
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
31
|
-
properties: Array<DocumentPropertyDefinition>;
|
|
32
|
-
}
|
|
33
|
-
export interface ComponentGridTemplate {
|
|
34
|
-
componentTemplate: ComponentTemplate;
|
|
35
|
-
componentPadding?: number;
|
|
36
|
-
gridDimensions: {
|
|
37
|
-
rows: number;
|
|
38
|
-
cols: number;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export interface ComponentTemplate {
|
|
42
|
-
propertyTemplate?: ComponentPropertyTemplate;
|
|
43
|
-
}
|
|
44
|
-
export interface ComponentPropertyTemplate {
|
|
45
|
-
imageDimension?: SizeDefinition;
|
|
46
|
-
imageLocation?: 'top' | 'right' | 'left' | 'bottom';
|
|
47
|
-
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
48
|
-
properties: Array<DocumentPropertyDefinition>;
|
|
49
|
-
}
|
|
50
|
-
export interface DocumentPropertyDefinition {
|
|
51
|
-
style?: StyleDefinition;
|
|
52
|
-
propertyDefinition: TypeProperty;
|
|
53
|
-
slug: string;
|
|
54
|
-
typeRootSlug: string;
|
|
55
|
-
includeLabel?: boolean;
|
|
56
|
-
}
|
|
1
|
+
import { DataGroupStructure } from "@contrail/data-grouping";
|
|
2
|
+
import { PositionDefinition, SizeDefinition, DocumentElement, StyleDefinition } from "@contrail/documents";
|
|
3
|
+
import { TypeProperty } from "@contrail/types";
|
|
4
|
+
export declare enum Orientation {
|
|
5
|
+
HORIZONTAL = "horizontal",
|
|
6
|
+
VERTICAL = "vertical"
|
|
7
|
+
}
|
|
8
|
+
export interface DocumentGenerationDataDefinition {
|
|
9
|
+
dataGroup: DataGroupStructure;
|
|
10
|
+
}
|
|
11
|
+
export interface DocumentGenerationOptions {
|
|
12
|
+
startingCoordinates: PositionDefinition;
|
|
13
|
+
data: DocumentGenerationDataDefinition;
|
|
14
|
+
documentTemplateDefinition: DocumentTemplate;
|
|
15
|
+
}
|
|
16
|
+
export interface DocumentTemplate {
|
|
17
|
+
frameOrientation: Orientation;
|
|
18
|
+
frameSize: SizeDefinition;
|
|
19
|
+
framePadding?: number;
|
|
20
|
+
frameGroupHeaderTemplate: DocumentElement;
|
|
21
|
+
frameHeaderTemplate?: DocumentElement;
|
|
22
|
+
frameInfoPanelTemplate?: FrameInfoPanelTemplate;
|
|
23
|
+
componentGridTemplate: ComponentGridTemplate;
|
|
24
|
+
}
|
|
25
|
+
export interface FrameInfoPanelTemplate {
|
|
26
|
+
panelDocumentTemplate: DocumentElement;
|
|
27
|
+
propertyTemplate: PanelPropertyTemplate;
|
|
28
|
+
}
|
|
29
|
+
export interface PanelPropertyTemplate {
|
|
30
|
+
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
31
|
+
properties: Array<DocumentPropertyDefinition>;
|
|
32
|
+
}
|
|
33
|
+
export interface ComponentGridTemplate {
|
|
34
|
+
componentTemplate: ComponentTemplate;
|
|
35
|
+
componentPadding?: number;
|
|
36
|
+
gridDimensions: {
|
|
37
|
+
rows: number;
|
|
38
|
+
cols: number;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface ComponentTemplate {
|
|
42
|
+
propertyTemplate?: ComponentPropertyTemplate;
|
|
43
|
+
}
|
|
44
|
+
export interface ComponentPropertyTemplate {
|
|
45
|
+
imageDimension?: SizeDefinition;
|
|
46
|
+
imageLocation?: 'top' | 'right' | 'left' | 'bottom';
|
|
47
|
+
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
48
|
+
properties: Array<DocumentPropertyDefinition>;
|
|
49
|
+
}
|
|
50
|
+
export interface DocumentPropertyDefinition {
|
|
51
|
+
style?: StyleDefinition;
|
|
52
|
+
propertyDefinition: TypeProperty;
|
|
53
|
+
slug: string;
|
|
54
|
+
typeRootSlug: string;
|
|
55
|
+
includeLabel?: boolean;
|
|
56
|
+
}
|