@contrail/document-generation 1.0.34 → 2.0.3
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/lib/board-document-generator.d.ts +20 -0
- package/lib/board-document-generator.js +129 -0
- package/lib/components/component-grid-generator.js +0 -1
- package/lib/document-generator.d.ts +2 -7
- package/lib/document-generator.js +2 -97
- package/lib/{frame-generator.d.ts → frames/frame-generator.d.ts} +4 -2
- package/lib/{frame-generator.js → frames/frame-generator.js} +29 -26
- package/lib/frames/frame.d.ts +15 -0
- package/lib/frames/frame.js +55 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/scripts/{test.js → test-board.js} +2 -2
- package/lib/scripts/test-showcase.d.ts +1 -0
- package/lib/scripts/test-showcase.js +243 -0
- package/lib/showcase-frame-generator.d.ts +8 -0
- package/lib/showcase-frame-generator.js +37 -0
- package/package.json +1 -1
- package/testdocument.json +1 -1
- /package/lib/scripts/{test.d.ts → test-board.d.ts} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DocumentElement, PositionDefinition } from "@contrail/documents";
|
|
2
|
+
import { DocumentGenerationOptions, DocumentTemplate } from "./interfaces";
|
|
3
|
+
import { DataGroup } from "@contrail/data-grouping";
|
|
4
|
+
export declare class BoardDocumentGenerator {
|
|
5
|
+
constructor();
|
|
6
|
+
static generateDocumentElements(options: DocumentGenerationOptions): Array<DocumentElement>;
|
|
7
|
+
static adjustPositionBasedGroupHeaderSpan(currentPosition: PositionDefinition, template: DocumentTemplate, subGroup: DataGroup, totalDepth: number, currentDepth: number): {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
};
|
|
11
|
+
static adjustPositionBasedOnGroupHeaderSize(currentPosition: PositionDefinition, template: DocumentTemplate): {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
};
|
|
15
|
+
static generateBoardGroupHeaders(group: DataGroup, template: DocumentTemplate, startingPosition: PositionDefinition, totalDepth: number, currentDepth: number): any[];
|
|
16
|
+
static generateBoardFrames(group: DataGroup, template: DocumentTemplate, startingPosition: PositionDefinition, totalDepth: number, currentDepth: number): any[];
|
|
17
|
+
static getGroupSpan(group: DataGroup, totalDepth: any, currentDepth: any): number;
|
|
18
|
+
static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition): Array<DocumentElement>;
|
|
19
|
+
static generateBoardGroupHeader(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition, span: any): any[];
|
|
20
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BoardDocumentGenerator = 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("./frames/frame-generator");
|
|
8
|
+
const document_util_1 = require("./util/document-util");
|
|
9
|
+
class BoardDocumentGenerator {
|
|
10
|
+
constructor() {
|
|
11
|
+
}
|
|
12
|
+
static generateDocumentElements(options) {
|
|
13
|
+
const elements = [];
|
|
14
|
+
const structure = options.data.dataGroup;
|
|
15
|
+
const template = options.documentTemplateDefinition;
|
|
16
|
+
console.log("generateDocumentElements: ", structure.depth, structure.groupingProperties.length);
|
|
17
|
+
let position = options.startingCoordinates || { x: 0, y: 0 };
|
|
18
|
+
const group = structure.rootGroup;
|
|
19
|
+
elements.push(...this.generateBoardGroupHeaders(group, template, position, structure.depth, 0));
|
|
20
|
+
elements.push(...this.generateBoardFrames(group, template, position, structure.depth, 0));
|
|
21
|
+
return elements;
|
|
22
|
+
}
|
|
23
|
+
static adjustPositionBasedGroupHeaderSpan(currentPosition, template, subGroup, totalDepth, currentDepth) {
|
|
24
|
+
let frameSetMultiple = this.getGroupSpan(subGroup, totalDepth, currentDepth + 1);
|
|
25
|
+
let paddingMultiple = 1;
|
|
26
|
+
if (currentDepth < totalDepth) {
|
|
27
|
+
paddingMultiple = frameSetMultiple;
|
|
28
|
+
}
|
|
29
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
30
|
+
return { x: currentPosition.x, y: currentPosition.y + (template.frameSize.height * frameSetMultiple) + (template.framePadding * paddingMultiple) };
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return { x: currentPosition.x + (template.frameSize.width * frameSetMultiple) + (template.framePadding * paddingMultiple), y: currentPosition.y };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static adjustPositionBasedOnGroupHeaderSize(currentPosition, template) {
|
|
37
|
+
let groupHeaderDimensions = { width: template.frameSize.width, height: template.frameGroupHeaderTemplate.size.height };
|
|
38
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
39
|
+
return { x: currentPosition.x + groupHeaderDimensions.height + template.framePadding, y: currentPosition.y };
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return { x: currentPosition.x, y: currentPosition.y + groupHeaderDimensions.height + template.framePadding };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
static generateBoardGroupHeaders(group, template, startingPosition, totalDepth, currentDepth) {
|
|
46
|
+
const elements = [];
|
|
47
|
+
let position = util_1.ObjectUtil.cloneDeep(startingPosition);
|
|
48
|
+
if (currentDepth > 0) {
|
|
49
|
+
let groupHeaderPosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
50
|
+
let span = this.getGroupSpan(group, totalDepth, currentDepth);
|
|
51
|
+
elements.push(...this.generateBoardGroupHeader(group, template, groupHeaderPosition, span));
|
|
52
|
+
position = this.adjustPositionBasedOnGroupHeaderSize(position, template);
|
|
53
|
+
}
|
|
54
|
+
if (currentDepth < totalDepth) {
|
|
55
|
+
for (let subGroup of group.subGroups) {
|
|
56
|
+
elements.push(...this.generateBoardGroupHeaders(subGroup, template, position, totalDepth, currentDepth + 1));
|
|
57
|
+
position = util_1.ObjectUtil.cloneDeep(this.adjustPositionBasedGroupHeaderSpan(position, template, subGroup, totalDepth, currentDepth));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return elements;
|
|
61
|
+
}
|
|
62
|
+
static generateBoardFrames(group, template, startingPosition, totalDepth, currentDepth) {
|
|
63
|
+
const elements = [];
|
|
64
|
+
let position = util_1.ObjectUtil.cloneDeep(startingPosition);
|
|
65
|
+
if (currentDepth > 0) {
|
|
66
|
+
position = this.adjustPositionBasedOnGroupHeaderSize(position, template);
|
|
67
|
+
}
|
|
68
|
+
if (currentDepth === totalDepth) {
|
|
69
|
+
elements.push(...this.generateFrameGroup(group, template, position));
|
|
70
|
+
}
|
|
71
|
+
if (currentDepth < totalDepth) {
|
|
72
|
+
for (let subGroup of group.subGroups) {
|
|
73
|
+
elements.push(...this.generateBoardFrames(subGroup, template, position, totalDepth, currentDepth + 1));
|
|
74
|
+
position = util_1.ObjectUtil.cloneDeep(this.adjustPositionBasedGroupHeaderSpan(position, template, subGroup, totalDepth, currentDepth));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return elements;
|
|
78
|
+
}
|
|
79
|
+
static getGroupSpan(group, totalDepth, currentDepth) {
|
|
80
|
+
let span = 1;
|
|
81
|
+
if (currentDepth !== totalDepth) {
|
|
82
|
+
span = group.subGroups.length;
|
|
83
|
+
}
|
|
84
|
+
return span;
|
|
85
|
+
}
|
|
86
|
+
static generateFrameGroup(dataGroup, template, position) {
|
|
87
|
+
const elements = [];
|
|
88
|
+
let framePosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
89
|
+
for (let group of dataGroup.subGroups) {
|
|
90
|
+
let frame = frame_generator_1.FrameGenerator.generateBoardFrameForDataGroup(group, framePosition, template);
|
|
91
|
+
elements.push(...frame.toDocumentElements());
|
|
92
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
93
|
+
framePosition.x = framePosition.x + template.frameSize.width + template.framePadding || 10;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
framePosition.y = framePosition.y + template.frameSize.height + template.framePadding || 10;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return elements;
|
|
100
|
+
}
|
|
101
|
+
static generateBoardGroupHeader(dataGroup, template, position, span) {
|
|
102
|
+
const elements = [];
|
|
103
|
+
const heading = documents_1.DocumentElementFactory.createTextElement("Placeholder", {});
|
|
104
|
+
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameGroupHeaderTemplate.style.backgroundColor || 'black' };
|
|
105
|
+
heading.text = `<p><span style=\"font-size: ${template.frameGroupHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameGroupHeaderTemplate.style.color};\">${document_util_1.DocumentUtil.sanitizeHTML(dataGroup.name)}</span></strong></span></p>`;
|
|
106
|
+
heading.position = position;
|
|
107
|
+
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
108
|
+
let sizeDim = template.frameSize.height * span;
|
|
109
|
+
if (span > 1) {
|
|
110
|
+
sizeDim += (span - 1) * template.framePadding;
|
|
111
|
+
}
|
|
112
|
+
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
113
|
+
heading.rotate = { angle: 270 };
|
|
114
|
+
heading.position.x = heading.position.x - (heading.size.width / 2) + (heading.size.height / 2);
|
|
115
|
+
heading.position.y = heading.position.y + (heading.size.width / 2) - (heading.size.height / 2);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
let sizeDim = template.frameSize.width * span;
|
|
119
|
+
if (span > 1) {
|
|
120
|
+
sizeDim += (span - 1) * template.framePadding;
|
|
121
|
+
}
|
|
122
|
+
heading.rotate = { angle: 0 };
|
|
123
|
+
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
124
|
+
}
|
|
125
|
+
elements.push(heading);
|
|
126
|
+
return elements;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.BoardDocumentGenerator = BoardDocumentGenerator;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import { DocumentElement
|
|
2
|
-
import { DocumentGenerationOptions
|
|
3
|
-
import { DataGroup } from "@contrail/data-grouping";
|
|
1
|
+
import { DocumentElement } from "@contrail/documents";
|
|
2
|
+
import { DocumentGenerationOptions } from "./interfaces";
|
|
4
3
|
export declare class DocumentGenerator {
|
|
5
4
|
constructor();
|
|
6
5
|
static generateDocumentElements(options: DocumentGenerationOptions): Array<DocumentElement>;
|
|
7
|
-
static generateGroup(group: DataGroup, template: any, startingPosition: any, totalDepth: any, currentDepth: any): any[];
|
|
8
|
-
static getGroupSpan(group: DataGroup, totalDepth: any, currentDepth: any): number;
|
|
9
|
-
static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition): Array<DocumentElement>;
|
|
10
|
-
static generateGroupHeading(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition, span: any): any[];
|
|
11
6
|
}
|
|
@@ -1,107 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DocumentGenerator = void 0;
|
|
4
|
-
const
|
|
5
|
-
const interfaces_1 = require("./interfaces");
|
|
6
|
-
const util_1 = require("@contrail/util");
|
|
7
|
-
const frame_generator_1 = require("./frame-generator");
|
|
8
|
-
const document_util_1 = require("./util/document-util");
|
|
4
|
+
const board_document_generator_1 = require("./board-document-generator");
|
|
9
5
|
class DocumentGenerator {
|
|
10
6
|
constructor() {
|
|
11
7
|
}
|
|
12
8
|
static generateDocumentElements(options) {
|
|
13
|
-
|
|
14
|
-
const structure = options.data.dataGroup;
|
|
15
|
-
const template = options.documentTemplateDefinition;
|
|
16
|
-
console.log("generateDocumentElements: ", structure.depth, structure.groupingProperties.length);
|
|
17
|
-
let position = options.startingCoordinates || { x: 0, y: 0 };
|
|
18
|
-
const group = structure.rootGroup;
|
|
19
|
-
elements.push(...this.generateGroup(group, template, position, structure.depth, 0));
|
|
20
|
-
return elements;
|
|
21
|
-
}
|
|
22
|
-
static generateGroup(group, template, startingPosition, totalDepth, currentDepth) {
|
|
23
|
-
const elements = [];
|
|
24
|
-
let position = util_1.ObjectUtil.cloneDeep(startingPosition);
|
|
25
|
-
if (currentDepth > 0) {
|
|
26
|
-
let groupHeaderPosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
27
|
-
let span = this.getGroupSpan(group, totalDepth, currentDepth);
|
|
28
|
-
elements.push(...this.generateGroupHeading(group, template, groupHeaderPosition, span));
|
|
29
|
-
let groupHeaderDimensions = { width: template.frameSize.width, height: template.frameGroupHeaderTemplate.size.height };
|
|
30
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
31
|
-
position = { x: position.x + groupHeaderDimensions.height + template.framePadding, y: position.y };
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
position = { x: position.x, y: position.y + groupHeaderDimensions.height + template.framePadding };
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (currentDepth === totalDepth) {
|
|
38
|
-
elements.push(...this.generateFrameGroup(group, template, position));
|
|
39
|
-
}
|
|
40
|
-
if (currentDepth < totalDepth) {
|
|
41
|
-
for (let subGroup of group.subGroups) {
|
|
42
|
-
elements.push(...this.generateGroup(subGroup, template, position, totalDepth, currentDepth + 1));
|
|
43
|
-
let frameSetMultiple = this.getGroupSpan(subGroup, totalDepth, currentDepth + 1);
|
|
44
|
-
let paddingMultiple = 1;
|
|
45
|
-
if (currentDepth < totalDepth) {
|
|
46
|
-
paddingMultiple = frameSetMultiple;
|
|
47
|
-
}
|
|
48
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
49
|
-
position = { x: position.x, y: position.y + (template.frameSize.height * frameSetMultiple) + (template.framePadding * paddingMultiple) };
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
position = { x: position.x + (template.frameSize.width * frameSetMultiple) + (template.framePadding * paddingMultiple), y: position.y };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return elements;
|
|
57
|
-
}
|
|
58
|
-
static getGroupSpan(group, totalDepth, currentDepth) {
|
|
59
|
-
let span = 1;
|
|
60
|
-
if (currentDepth !== totalDepth) {
|
|
61
|
-
span = group.subGroups.length;
|
|
62
|
-
}
|
|
63
|
-
return span;
|
|
64
|
-
}
|
|
65
|
-
static generateFrameGroup(dataGroup, template, position) {
|
|
66
|
-
const elements = [];
|
|
67
|
-
let framePosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
|
|
68
|
-
for (let group of dataGroup.subGroups) {
|
|
69
|
-
elements.push(...frame_generator_1.FrameGenerator.generateFrameForDataGroup(group, framePosition, template));
|
|
70
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
71
|
-
framePosition.x = framePosition.x + template.frameSize.width + template.framePadding || 10;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
framePosition.y = framePosition.y + template.frameSize.height + template.framePadding || 10;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return elements;
|
|
78
|
-
}
|
|
79
|
-
static generateGroupHeading(dataGroup, template, position, span) {
|
|
80
|
-
const elements = [];
|
|
81
|
-
const heading = documents_1.DocumentElementFactory.createTextElement("Placeholder", {});
|
|
82
|
-
heading.style = { border: { width: 1, color: "rgba(0,0,0,0)" }, color: "#000000", backgroundColor: template.frameGroupHeaderTemplate.style.backgroundColor || 'black' };
|
|
83
|
-
heading.text = `<p><span style=\"font-size: ${template.frameGroupHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameGroupHeaderTemplate.style.color};\">${document_util_1.DocumentUtil.sanitizeHTML(dataGroup.name)}</span></strong></span></p>`;
|
|
84
|
-
heading.position = position;
|
|
85
|
-
if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
|
|
86
|
-
let sizeDim = template.frameSize.height * span;
|
|
87
|
-
if (span > 1) {
|
|
88
|
-
sizeDim += (span - 1) * template.framePadding;
|
|
89
|
-
}
|
|
90
|
-
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
91
|
-
heading.rotate = { angle: 270 };
|
|
92
|
-
heading.position.x = heading.position.x - (heading.size.width / 2) + (heading.size.height / 2);
|
|
93
|
-
heading.position.y = heading.position.y + (heading.size.width / 2) - (heading.size.height / 2);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
let sizeDim = template.frameSize.width * span;
|
|
97
|
-
if (span > 1) {
|
|
98
|
-
sizeDim += (span - 1) * template.framePadding;
|
|
99
|
-
}
|
|
100
|
-
heading.rotate = { angle: 0 };
|
|
101
|
-
heading.size = { width: sizeDim, height: template.frameGroupHeaderTemplate.size.height };
|
|
102
|
-
}
|
|
103
|
-
elements.push(heading);
|
|
104
|
-
return elements;
|
|
9
|
+
return board_document_generator_1.BoardDocumentGenerator.generateDocumentElements(options);
|
|
105
10
|
}
|
|
106
11
|
}
|
|
107
12
|
exports.DocumentGenerator = DocumentGenerator;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
|
|
2
2
|
import { DataGroup } from "@contrail/data-grouping";
|
|
3
|
-
import { DocumentTemplate } from "
|
|
3
|
+
import { DocumentTemplate } from "../interfaces";
|
|
4
|
+
import { DocumentFrame } from "./frame";
|
|
4
5
|
export declare class FrameGenerator {
|
|
5
|
-
static
|
|
6
|
+
static generateBoardFrameForDataGroup(dataGroup: DataGroup, framePosition: PositionDefinition, template: DocumentTemplate): DocumentFrame;
|
|
7
|
+
static generateFrameContentForGroup(frame: DocumentFrame, dataGroup: DataGroup, template: DocumentTemplate): DocumentFrame;
|
|
6
8
|
static generateFrameHeaderForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, headerSize: SizeDefinition): DocumentElement[];
|
|
7
9
|
static generateFrameInfoPanelForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, panelSize: SizeDefinition): DocumentElement[];
|
|
8
10
|
static generateFrame(options: DocumentElement): DocumentElement;
|
|
@@ -2,45 +2,48 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FrameGenerator = void 0;
|
|
4
4
|
const documents_1 = require("@contrail/documents");
|
|
5
|
-
const component_grid_generator_1 = require("
|
|
5
|
+
const component_grid_generator_1 = require("../components/component-grid-generator");
|
|
6
6
|
const util_1 = require("@contrail/util");
|
|
7
|
-
const document_util_1 = require("
|
|
8
|
-
const info_panel_generator_1 = require("
|
|
7
|
+
const document_util_1 = require("../util/document-util");
|
|
8
|
+
const info_panel_generator_1 = require("../info-panel/info-panel-generator");
|
|
9
|
+
const frame_1 = require("./frame");
|
|
9
10
|
class FrameGenerator {
|
|
10
|
-
static
|
|
11
|
+
static generateBoardFrameForDataGroup(dataGroup, framePosition, template) {
|
|
12
|
+
const style = { backgroundColor: "#fff", border: { width: 1, color: "#616161" } };
|
|
13
|
+
let frame = new frame_1.BoardFrame(dataGroup.name, util_1.ObjectUtil.cloneDeep(framePosition), template.frameSize, style);
|
|
14
|
+
frame = this.generateFrameContentForGroup(frame, dataGroup, template);
|
|
15
|
+
return frame;
|
|
16
|
+
}
|
|
17
|
+
static generateFrameContentForGroup(frame, dataGroup, template) {
|
|
11
18
|
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
19
|
const FRAME_PADDING = 20;
|
|
20
|
-
const headerPosition =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
panelPosition
|
|
25
|
-
|
|
20
|
+
const headerPosition = {
|
|
21
|
+
x: FRAME_PADDING,
|
|
22
|
+
y: FRAME_PADDING
|
|
23
|
+
};
|
|
24
|
+
const panelPosition = {
|
|
25
|
+
x: FRAME_PADDING,
|
|
26
|
+
y: FRAME_PADDING
|
|
27
|
+
};
|
|
26
28
|
let frameHeaderDimensions = { height: 0, width: 0 };
|
|
27
29
|
let framePanelDimensions = { height: 0, width: 0 };
|
|
28
30
|
let hasPanel = false;
|
|
29
31
|
let hasHeader = false;
|
|
30
|
-
elements.push(util_1.ObjectUtil.cloneDeep(frame));
|
|
31
32
|
if (template.frameHeaderTemplate) {
|
|
32
33
|
hasHeader = true;
|
|
33
34
|
frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
|
|
34
|
-
|
|
35
|
+
const headerElements = this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions);
|
|
36
|
+
frame.addDocumentElements(headerElements);
|
|
35
37
|
}
|
|
36
38
|
if (template.frameInfoPanelTemplate) {
|
|
37
39
|
hasPanel = true;
|
|
38
40
|
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
41
|
framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING);
|
|
40
|
-
|
|
42
|
+
const panelElements = this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions);
|
|
43
|
+
frame.addDocumentElements(panelElements);
|
|
41
44
|
}
|
|
42
45
|
const GRID_MARGIN = 20;
|
|
43
|
-
let gridPosition =
|
|
46
|
+
let gridPosition = { x: 0, y: 0 };
|
|
44
47
|
if (hasHeader) {
|
|
45
48
|
gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition);
|
|
46
49
|
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
|
|
@@ -49,14 +52,14 @@ class FrameGenerator {
|
|
|
49
52
|
gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition);
|
|
50
53
|
gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
|
|
51
54
|
}
|
|
52
|
-
const relativeGridPosition = document_util_1.DocumentUtil.getRelativePosition(framePosition, gridPosition);
|
|
53
55
|
const frameSize = template.frameSize;
|
|
54
56
|
const idealGridSize = {
|
|
55
|
-
width: frameSize.width -
|
|
56
|
-
height: frameSize.height -
|
|
57
|
+
width: frameSize.width - gridPosition.x - FRAME_PADDING,
|
|
58
|
+
height: frameSize.height - gridPosition.y - FRAME_PADDING
|
|
57
59
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
const gridElements = component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize);
|
|
61
|
+
frame.addDocumentElements(gridElements);
|
|
62
|
+
return frame;
|
|
60
63
|
}
|
|
61
64
|
static generateFrameHeaderForDataGroup(dataGroup, position, template, headerSize) {
|
|
62
65
|
const heading = documents_1.DocumentElementFactory.createTextElement(dataGroup.name, template.frameHeaderTemplate);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DocumentElement, PositionDefinition, SizeDefinition, StyleDefinition } from "@contrail/documents";
|
|
2
|
+
export declare abstract class DocumentFrame {
|
|
3
|
+
frameContentElements: Array<DocumentElement>;
|
|
4
|
+
constructor();
|
|
5
|
+
addDocumentElements(elements: Array<DocumentElement>): void;
|
|
6
|
+
toDocumentElements(): Array<DocumentElement>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ShowcaseFrame extends DocumentFrame {
|
|
9
|
+
}
|
|
10
|
+
export declare class BoardFrame extends DocumentFrame {
|
|
11
|
+
private frameElement;
|
|
12
|
+
name: string;
|
|
13
|
+
constructor(name: string, position: PositionDefinition, size: SizeDefinition, style: StyleDefinition);
|
|
14
|
+
toDocumentElements(): Array<DocumentElement>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BoardFrame = exports.ShowcaseFrame = exports.DocumentFrame = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const util_1 = require("@contrail/util");
|
|
6
|
+
class DocumentFrame {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.frameContentElements = [];
|
|
9
|
+
}
|
|
10
|
+
addDocumentElements(elements) {
|
|
11
|
+
this.frameContentElements.push(...elements);
|
|
12
|
+
}
|
|
13
|
+
toDocumentElements() {
|
|
14
|
+
const elements = [];
|
|
15
|
+
elements.push(...this.frameContentElements);
|
|
16
|
+
return elements;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.DocumentFrame = DocumentFrame;
|
|
20
|
+
class ShowcaseFrame extends DocumentFrame {
|
|
21
|
+
}
|
|
22
|
+
exports.ShowcaseFrame = ShowcaseFrame;
|
|
23
|
+
class BoardFrame extends DocumentFrame {
|
|
24
|
+
constructor(name, position, size, style) {
|
|
25
|
+
super();
|
|
26
|
+
if (!position) {
|
|
27
|
+
position = { x: 0, y: 0 };
|
|
28
|
+
}
|
|
29
|
+
if (!size) {
|
|
30
|
+
size = { width: 1200, height: 675 };
|
|
31
|
+
}
|
|
32
|
+
if (!style) {
|
|
33
|
+
style = {};
|
|
34
|
+
}
|
|
35
|
+
this.frameElement = documents_1.DocumentElementFactory.createFrameElement({ size, position, style });
|
|
36
|
+
this.frameElement.name = name;
|
|
37
|
+
}
|
|
38
|
+
toDocumentElements() {
|
|
39
|
+
const elements = [];
|
|
40
|
+
elements.push(this.frameElement);
|
|
41
|
+
const repositionedElements = [];
|
|
42
|
+
for (let element of util_1.ObjectUtil.cloneDeep(this.frameContentElements)) {
|
|
43
|
+
if (this.frameElement.position.x !== 0) {
|
|
44
|
+
element.position.x += this.frameElement.position.x;
|
|
45
|
+
}
|
|
46
|
+
if (this.frameElement.position.y !== 0) {
|
|
47
|
+
element.position.y += this.frameElement.position.y;
|
|
48
|
+
}
|
|
49
|
+
repositionedElements.push(element);
|
|
50
|
+
}
|
|
51
|
+
elements.push(...repositionedElements);
|
|
52
|
+
return elements;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.BoardFrame = BoardFrame;
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./document-generator"), exports);
|
|
18
|
+
__exportStar(require("./board-document-generator"), exports);
|
|
19
|
+
__exportStar(require("./showcase-frame-generator"), exports);
|
|
18
20
|
__exportStar(require("./interfaces"), exports);
|
|
@@ -129,7 +129,7 @@ function run() {
|
|
|
129
129
|
}]
|
|
130
130
|
};
|
|
131
131
|
const documentTemplateDefinition = {
|
|
132
|
-
frameOrientation: interfaces_1.Orientation.
|
|
132
|
+
frameOrientation: interfaces_1.Orientation.HORIZONTAL,
|
|
133
133
|
frameSize: { width: 1200, height: 675 },
|
|
134
134
|
framePadding: 30,
|
|
135
135
|
frameGroupHeaderTemplate: {
|
|
@@ -164,7 +164,7 @@ function run() {
|
|
|
164
164
|
propertyTemplate: PANEL_PROPERTY_TEMPLATE
|
|
165
165
|
},
|
|
166
166
|
componentGridTemplate: {
|
|
167
|
-
gridDimensions: { cols:
|
|
167
|
+
gridDimensions: { cols: 3, rows: 1 },
|
|
168
168
|
componentPadding: 5,
|
|
169
169
|
componentTemplate: {
|
|
170
170
|
propertyTemplate: PROPERTY_COMPONENT_TEMPLATE
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|