fix: regression generate pdf

This commit is contained in:
Matthieu CAILLEAUX
2022-04-29 13:38:39 +02:00
parent 049c77a004
commit 851bc738e5
19 changed files with 485 additions and 184 deletions

View File

@@ -1,4 +1,5 @@
import { AbstractElement } from './elements/abstract-element'; import { AbstractElement } from './elements/abstract-element';
import { GenerateTypeEnum } from './elements/generate-type.enum';
export abstract class AbstractBuilder { export abstract class AbstractBuilder {
public abstract build(elements: AbstractElement[]); public abstract build(elements: AbstractElement[]);
@@ -8,4 +9,6 @@ export abstract class AbstractBuilder {
public abstract save(name: string); public abstract save(name: string);
public abstract getImageScale(): number; public abstract getImageScale(): number;
public abstract getGenerateType(): GenerateTypeEnum;
} }

View File

@@ -1,5 +1,6 @@
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export abstract class AbstractContainerElement extends AbstractElement { export abstract class AbstractContainerElement extends AbstractElement {
public pdfElements: AbstractElement[] = []; public pdfElements: AbstractElement[] = [];
@@ -7,22 +8,24 @@ export abstract class AbstractContainerElement extends AbstractElement {
public contextElements: AbstractElement[] = []; public contextElements: AbstractElement[] = [];
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
maxWidth: number | undefined, maxWidth: number | undefined,
elements: AbstractElement[] = [], elements: AbstractElement[] = [],
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, maxWidth, context); super(globalType, x, y, maxWidth, context);
this.htmlElements = this.context.isHtml this.htmlElements = this.context.isHtml
? elements.filter((el) => el.context.isHtml) ? elements.filter((el) => el.context.isHtml)
: []; : [];
this.pdfElements = this.context.isPdf this.pdfElements = this.context.isPdf
? elements.filter((el) => el.context.isPdf) ? elements.filter((el) => el.context.isPdf)
: []; : [];
this.contextElements = this.context.isHtml this.contextElements =
? this.htmlElements this.globalType === GenerateTypeEnum.HTML
: this.pdfElements; ? this.htmlElements
: this.pdfElements;
} }
public getElements(): AbstractElement[] { public getElements(): AbstractElement[] {

View File

@@ -1,6 +1,7 @@
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { MARGINS } from '../constants'; import { MARGINS } from '../constants';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export abstract class AbstractElement { export abstract class AbstractElement {
public static readonly DEFAULT_CONTEXT: IContext = { public static readonly DEFAULT_CONTEXT: IContext = {
@@ -9,17 +10,20 @@ export abstract class AbstractElement {
name: 'element', name: 'element',
}; };
public globalType: GenerateTypeEnum;
public x: number; public x: number;
public y: number; public y: number;
public maxWidth?: number; public maxWidth?: number;
public context: IContext = AbstractElement.DEFAULT_CONTEXT; public context: IContext = AbstractElement.DEFAULT_CONTEXT;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
maxWidth?: number | undefined, maxWidth?: number | undefined,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
this.globalType = globalType;
this.x = x >= MARGINS.left ? x : MARGINS.left; this.x = x >= MARGINS.left ? x : MARGINS.left;
this.y = y >= MARGINS.top ? y : MARGINS.top; this.y = y >= MARGINS.top ? y : MARGINS.top;
this.maxWidth = maxWidth; this.maxWidth = maxWidth;

View File

@@ -2,20 +2,22 @@ import { AbstractElement } from './abstract-element';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { Box } from './box'; import { Box } from './box';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class Blank extends Box { export class Blank extends Box {
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
w: number, w: number,
h: number, h: number,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, w, h, context); super(globalType, x, y, w, h, context);
} }
public static heightBlank(h: number) { public static heightBlank(globalType: GenerateTypeEnum, h: number) {
return new Blank(0, 0, 0, h); return new Blank(globalType, 0, 0, 0, h);
} }
public getCheckNewPageHeight(doc?: jsPDF): number { public getCheckNewPageHeight(doc?: jsPDF): number {

View File

@@ -1,19 +1,21 @@
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class Box extends AbstractElement { export class Box extends AbstractElement {
public w: number; public w: number;
public h: number; public h: number;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
w: number, w: number,
h: number, h: number,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, w, context); super(globalType, x, y, w, context);
this.w = w; this.w = w;
this.h = h; this.h = h;
} }

View File

@@ -2,15 +2,17 @@ import { AbstractElement } from './abstract-element';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { IContext } from './context'; import { IContext } from './context';
import { AbstractContainerElement } from './abstract-container-element'; import { AbstractContainerElement } from './abstract-container-element';
import { GenerateTypeEnum } from './generate-type.enum';
export class Column extends AbstractContainerElement { export class Column extends AbstractContainerElement {
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
elements: AbstractElement[], elements: AbstractElement[],
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, undefined, elements, context); super(globalType, x, y, undefined, elements, context);
} }
public prepareRender(doc: jsPDF, _maxWidth?: number): jsPDF { public prepareRender(doc: jsPDF, _maxWidth?: number): jsPDF {

View File

@@ -0,0 +1,4 @@
export enum GenerateTypeEnum {
PDF = 'PDF',
HTML = 'HTML',
}

View File

@@ -2,11 +2,13 @@ import { Box } from './box';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class Image extends Box { export class Image extends Box {
public imageData: string; public imageData: string;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
w: number, w: number,
@@ -14,7 +16,7 @@ export class Image extends Box {
imageData: string, imageData: string,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, w, h, context); super(globalType, x, y, w, h, context);
this.imageData = imageData; this.imageData = imageData;
} }

View File

@@ -9,12 +9,14 @@ import {
} from '../constants'; } from '../constants';
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class LabelledText extends Text { export class LabelledText extends Text {
public label: string; public label: string;
public labelOptions?: TextOptionsLight; public labelOptions?: TextOptionsLight;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
label: string, label: string,
@@ -23,7 +25,7 @@ export class LabelledText extends Text {
labelOptions?: TextOptionsLight, labelOptions?: TextOptionsLight,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, text, textOptions, context); super(globalType, x, y, text, textOptions, context);
this.label = label; this.label = label;
this.labelOptions = labelOptions; this.labelOptions = labelOptions;
const textMaxWidth = this.textOptions?.maxWidth ?? 0; const textMaxWidth = this.textOptions?.maxWidth ?? 0;

View File

@@ -3,12 +3,14 @@ import { Text } from './text';
import { MultilineText } from './multiline-text'; import { MultilineText } from './multiline-text';
import { IContext } from './context'; import { IContext } from './context';
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { GenerateTypeEnum } from './generate-type.enum';
export class LabelledValue extends Row { export class LabelledValue extends Row {
public label: string; public label: string;
public value: number; public value: number;
constructor( constructor(
globalType: GenerateTypeEnum,
label: string, label: string,
value: number, value: number,
widthPercents?: number[], widthPercents?: number[],
@@ -17,11 +19,14 @@ export class LabelledValue extends Row {
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super( super(
globalType,
0, 0,
0, 0,
[ [
multiline ? new MultilineText(0, 0, label) : new Text(0, 0, label), multiline
new Text(0, 0, value.toString(), { ? new MultilineText(globalType, 0, 0, label)
: new Text(globalType, 0, 0, label),
new Text(globalType, 0, 0, value.toString(), {
align: 'right', align: 'right',
}), }),
], ],

View File

@@ -5,12 +5,14 @@ import jsPDF from 'jspdf';
import { MARGINS } from '../constants'; import { MARGINS } from '../constants';
import { IContext } from './context'; import { IContext } from './context';
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { GenerateTypeEnum } from './generate-type.enum';
export class LabelledValues extends Row { export class LabelledValues extends Row {
public labelledValues: { label: string; value: number }[]; public labelledValues: { label: string; value: number }[];
public nbrOfCol: number; public nbrOfCol: number;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
labelledValues: { label: string; value: number }[], labelledValues: { label: string; value: number }[],
@@ -18,7 +20,7 @@ export class LabelledValues extends Row {
multiline = false, multiline = false,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, [], undefined, undefined, undefined, context); super(globalType, x, y, [], undefined, undefined, undefined, context);
this.labelledValues = labelledValues; this.labelledValues = labelledValues;
this.nbrOfCol = nbrOfCol ?? 3; this.nbrOfCol = nbrOfCol ?? 3;
if (this.nbrOfCol > 3) { if (this.nbrOfCol > 3) {
@@ -38,7 +40,7 @@ export class LabelledValues extends Row {
rest > 2 ? nbrPerCol + 1 : nbrPerCol, rest > 2 ? nbrPerCol + 1 : nbrPerCol,
]; ];
for (let i = 0; i < this.nbrOfCol; i++) { for (let i = 0; i < this.nbrOfCol; i++) {
this.contextElements[i] = new Column(0, 0, [], { this.contextElements[i] = new Column(globalType, 0, 0, [], {
name: `${this.context.name}-column`, name: `${this.context.name}-column`,
}); });
} }
@@ -52,6 +54,7 @@ export class LabelledValues extends Row {
} }
(<Column>this.contextElements[currentIndex]).contextElements.push( (<Column>this.contextElements[currentIndex]).contextElements.push(
new LabelledValue( new LabelledValue(
globalType,
labelledValues[i].label, labelledValues[i].label,
labelledValues[i].value, labelledValues[i].value,
widthPercent, widthPercent,
@@ -62,11 +65,13 @@ export class LabelledValues extends Row {
} else { } else {
this.contextElements.push( this.contextElements.push(
new Column( new Column(
globalType,
0, 0,
0, 0,
labelledValues.map( labelledValues.map(
(libelledValue) => (libelledValue) =>
new LabelledValue( new LabelledValue(
globalType,
libelledValue.label, libelledValue.label,
libelledValue.value, libelledValue.value,
widthPercent, widthPercent,

View File

@@ -3,18 +3,20 @@ import jsPDF, { TextOptionsLight } from 'jspdf';
import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants'; import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants';
import { Text } from './text'; import { Text } from './text';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class MultilineText extends Text { export class MultilineText extends Text {
private nbrLine = 1; private nbrLine = 1;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
text: string, text: string,
textOptions?: TextOptionsLight, textOptions?: TextOptionsLight,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, text, textOptions, context); super(globalType, x, y, text, textOptions, context);
} }
public prepareRender(doc: jsPDF, maxWidth?: number): jsPDF { public prepareRender(doc: jsPDF, maxWidth?: number): jsPDF {

View File

@@ -3,12 +3,14 @@ import jsPDF from 'jspdf';
import { MARGINS } from '../constants'; import { MARGINS } from '../constants';
import { IContext } from './context'; import { IContext } from './context';
import { AbstractContainerElement } from './abstract-container-element'; import { AbstractContainerElement } from './abstract-container-element';
import { GenerateTypeEnum } from './generate-type.enum';
export class Row extends AbstractContainerElement { export class Row extends AbstractContainerElement {
public widthPercents?: number[]; public widthPercents?: number[];
public maxWidths?: number[]; public maxWidths?: number[];
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
elements: AbstractElement[], elements: AbstractElement[],
@@ -17,7 +19,7 @@ export class Row extends AbstractContainerElement {
maxWidths?: number[], maxWidths?: number[],
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, maxWidth, elements, context); super(globalType, x, y, maxWidth, elements, context);
this.widthPercents = widthPercents ?? []; this.widthPercents = widthPercents ?? [];
this.maxWidths = maxWidths ?? []; this.maxWidths = maxWidths ?? [];
} }

View File

@@ -2,15 +2,17 @@ import { AbstractElement } from './abstract-element';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import { MARGINS } from '../constants'; import { MARGINS } from '../constants';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class Separator extends AbstractElement { export class Separator extends AbstractElement {
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
maxWidth?: number | undefined, maxWidth?: number | undefined,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, maxWidth, context); super(globalType, x, y, maxWidth, context);
} }
public getHeight(_doc?: jsPDF): number { public getHeight(_doc?: jsPDF): number {

View File

@@ -2,19 +2,21 @@ import { AbstractElement } from './abstract-element';
import jsPDF, { TextOptionsLight } from 'jspdf'; import jsPDF, { TextOptionsLight } from 'jspdf';
import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants'; import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants';
import { IContext } from './context'; import { IContext } from './context';
import { GenerateTypeEnum } from './generate-type.enum';
export class Text extends AbstractElement { export class Text extends AbstractElement {
public text: string; public text: string;
public textOptions?: TextOptionsLight; public textOptions?: TextOptionsLight;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
text: string, text: string,
textOptions?: TextOptionsLight, textOptions?: TextOptionsLight,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, textOptions?.maxWidth, context); super(globalType, x, y, textOptions?.maxWidth, context);
this.text = text; this.text = text;
this.textOptions = textOptions; this.textOptions = textOptions;
} }

View File

@@ -6,12 +6,14 @@ import { Text } from './text';
import { MultilineText } from './multiline-text'; import { MultilineText } from './multiline-text';
import { IContext } from './context'; import { IContext } from './context';
import { AbstractElement } from './abstract-element'; import { AbstractElement } from './abstract-element';
import { GenerateTypeEnum } from './generate-type.enum';
export class Texts extends Row { export class Texts extends Row {
public texts: string[]; public texts: string[];
public nbrOfCol: number; public nbrOfCol: number;
constructor( constructor(
globalType: GenerateTypeEnum,
x: number, x: number,
y: number, y: number,
texts: string[], texts: string[],
@@ -19,7 +21,7 @@ export class Texts extends Row {
multiline = false, multiline = false,
context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT context: Partial<IContext> = AbstractElement.DEFAULT_CONTEXT
) { ) {
super(x, y, [], undefined, undefined, undefined, context); super(globalType, x, y, [], undefined, undefined, undefined, context);
this.texts = texts; this.texts = texts;
this.nbrOfCol = nbrOfCol ?? 4; this.nbrOfCol = nbrOfCol ?? 4;
if (this.nbrOfCol > 4) { if (this.nbrOfCol > 4) {
@@ -37,7 +39,7 @@ export class Texts extends Row {
rest > 3 ? nbrPerCol + 1 : nbrPerCol, rest > 3 ? nbrPerCol + 1 : nbrPerCol,
]; ];
for (let i = 0; i < this.nbrOfCol; i++) { for (let i = 0; i < this.nbrOfCol; i++) {
this.contextElements[i] = new Column(0, 0, []); this.contextElements[i] = new Column(this.globalType, 0, 0, []);
} }
for (let i = 0; i < texts.length; i++) { for (let i = 0; i < texts.length; i++) {
if (i < nbrPerCols[0]) { if (i < nbrPerCols[0]) {
@@ -50,24 +52,25 @@ export class Texts extends Row {
currentIndex = 3; currentIndex = 3;
} }
(<Column>this.contextElements[currentIndex]).contextElements.push( (<Column>this.contextElements[currentIndex]).contextElements.push(
new Row(0, 0, [ new Row(this.globalType, 0, 0, [
multiline multiline
? new MultilineText(0, 0, texts[i]) ? new MultilineText(this.globalType, 0, 0, texts[i])
: new Text(0, 0, texts[i]), : new Text(this.globalType, 0, 0, texts[i]),
]) ])
); );
} }
} else { } else {
this.contextElements.push( this.contextElements.push(
new Column( new Column(
this.globalType,
0, 0,
0, 0,
texts.map( texts.map(
(text) => (text) =>
new Row(0, 0, [ new Row(this.globalType, 0, 0, [
multiline multiline
? new MultilineText(0, 0, text) ? new MultilineText(this.globalType, 0, 0, text)
: new Text(0, 0, text), : new Text(this.globalType, 0, 0, text),
]) ])
) )
) )

View File

@@ -8,6 +8,7 @@ import {
LABEL_SIZE, LABEL_SIZE,
TEXT_SIZE, TEXT_SIZE,
} from './constants'; } from './constants';
import { GenerateTypeEnum } from './elements/generate-type.enum';
export class HtmlBuilder extends AbstractBuilder { export class HtmlBuilder extends AbstractBuilder {
public doc: Document; public doc: Document;
@@ -86,4 +87,8 @@ export class HtmlBuilder extends AbstractBuilder {
public getImageScale(): number { public getImageScale(): number {
return 4; return 4;
} }
public getGenerateType(): GenerateTypeEnum {
return GenerateTypeEnum.HTML;
}
} }

View File

@@ -95,6 +95,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const careerDetail: any = careerData?.data; const careerDetail: any = careerData?.data;
const skills = new LabelledValues( const skills = new LabelledValues(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.skill actor.itemCategories.skill
@@ -122,6 +123,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
}); });
const talents = new LabelledValues( const talents = new LabelledValues(
docBuilder.getGenerateType(),
0, 0,
0, 0,
Object.entries(talentsByName) Object.entries(talentsByName)
@@ -137,6 +139,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const traits = new Texts( const traits = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.trait actor.itemCategories.trait
@@ -148,6 +151,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const weaponsMelee = new Texts( const weaponsMelee = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
Util.getActorItems(actor, 'weapon') Util.getActorItems(actor, 'weapon')
@@ -165,6 +169,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const weaponsRanged = new Texts( const weaponsRanged = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
Util.getActorItems(actor, 'weapon') Util.getActorItems(actor, 'weapon')
@@ -182,6 +187,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const ammunitions = new Texts( const ammunitions = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
Util.getActorItems(actor, 'ammunition') Util.getActorItems(actor, 'ammunition')
@@ -223,6 +229,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
} }
const armours = new Texts( const armours = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
armourLocation.map((al) => { armourLocation.map((al) => {
@@ -235,6 +242,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const petty = new Texts( const petty = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.spell actor.itemCategories.spell
@@ -247,6 +255,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const spell = new Texts( const spell = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.spell actor.itemCategories.spell
@@ -259,6 +268,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const blessing = new Texts( const blessing = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.prayer actor.itemCategories.prayer
@@ -271,6 +281,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const miracle = new Texts( const miracle = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.prayer actor.itemCategories.prayer
@@ -296,6 +307,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
} }
const trappingsHeader = new Texts( const trappingsHeader = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
[ [
@@ -310,6 +322,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const trappings = new Texts( const trappings = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
Util.getAllActorItems(actor, ['container', 'trapping']) Util.getAllActorItems(actor, ['container', 'trapping'])
@@ -328,6 +341,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const critical = new Texts( const critical = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.critical.map((i) => { actor.itemCategories.critical.map((i) => {
@@ -337,6 +351,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const disease = new Texts( const disease = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.disease.map((i) => { actor.itemCategories.disease.map((i) => {
@@ -346,6 +361,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const injury = new Texts( const injury = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.injury.map((i) => { actor.itemCategories.injury.map((i) => {
@@ -355,6 +371,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const mutationP = new Texts( const mutationP = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.mutation actor.itemCategories.mutation
@@ -366,6 +383,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const mutationM = new Texts( const mutationM = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.mutation actor.itemCategories.mutation
@@ -377,6 +395,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
); );
const psychology = new Texts( const psychology = new Texts(
docBuilder.getGenerateType(),
0, 0,
0, 0,
actor.itemCategories.psychology.map((i) => { actor.itemCategories.psychology.map((i) => {
@@ -391,44 +410,107 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const imageY = labelledRowHeight + MARGINS.top + 2; const imageY = labelledRowHeight + MARGINS.top + 2;
const actorImageElementPdf = const actorImageElementPdf =
actorImageData != null actorImageData != null
? new Image(0, imageY, imageWidth, imageWidth, actorImageData, { ? new Image(
isHtml: false, docBuilder.getGenerateType(),
}) 0,
: new Box(0, imageY, imageWidth, imageWidth, { imageY,
isHtml: false, imageWidth,
}); imageWidth,
actorImageData,
{
isHtml: false,
}
)
: new Box(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
{
isHtml: false,
}
);
const actorImageElementHtml = const actorImageElementHtml =
actorImageData != null actorImageData != null
? new Image(0, imageY, imageWidth, imageWidth, actorImageData, { ? new Image(
isPdf: false, docBuilder.getGenerateType(),
}) 0,
: new Box(0, imageY, imageWidth, imageWidth, { imageY,
isPdf: false, imageWidth,
}); imageWidth,
actorImageData,
{
isPdf: false,
}
)
: new Box(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
{
isPdf: false,
}
);
docBuilder.build([ docBuilder.build([
actorImageElementPdf, actorImageElementPdf,
new Column( new Column(
docBuilder.getGenerateType(),
0, 0,
0, 0,
[ [
new Row(0, 0, [ new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(0, 0, 'Name', `${actor.name}`), new LabelledText(
new LabelledText(0, 0, 'Species', `${actorDetails?.species?.value}`), docBuilder.getGenerateType(),
new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`), 0,
0,
'Name',
`${actor.name}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Species',
`${actorDetails?.species?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Gender',
`${actorDetails?.gender?.value}`
),
]), ]),
new Row( new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1, imageWidth + MARGINS.left + 1,
0, 0,
[ [
new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Class',
`${careerDetail?.class?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Career Group', 'Career Group',
`${careerDetail?.careergroup?.value}` `${careerDetail?.careergroup?.value}`
), ),
new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Career',
`${currentCareer?.name}`
),
], ],
undefined, undefined,
undefined, undefined,
@@ -436,14 +518,40 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
{ isHtml: false } { isHtml: false }
), ),
new Row( new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1, imageWidth + MARGINS.left + 1,
0, 0,
[ [
new LabelledText(0, 0, 'Status', `${actorDetails?.status?.value}`),
new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`),
new LabelledText(0, 0, 'Height', `${actorDetails?.height?.value}`),
new LabelledText(0, 0, 'Weight', `${actorDetails?.weight?.value}`),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Status',
`${actorDetails?.status?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Age',
`${actorDetails?.age?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Height',
`${actorDetails?.height?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Weight',
`${actorDetails?.weight?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Hair Colour', 'Hair Colour',
@@ -456,22 +564,26 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
{ isHtml: false } { isHtml: false }
), ),
new Row( new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1, imageWidth + MARGINS.left + 1,
0, 0,
[ [
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Eye Colour', 'Eye Colour',
`${actorDetails?.eyecolour?.value}` `${actorDetails?.eyecolour?.value}`
), ),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Distinguishing Mark', 'Distinguishing Mark',
`${actorDetails?.distinguishingmark?.value}` `${actorDetails?.distinguishingmark?.value}`
), ),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Star Sign', 'Star Sign',
@@ -484,73 +596,110 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
{ isHtml: false } { isHtml: false }
), ),
new Row( new Row(
docBuilder.getGenerateType(),
0, 0,
0, 0,
[ [
actorImageElementHtml, actorImageElementHtml,
new Column(0, 0, [ new Column(docBuilder.getGenerateType(), 0, 0, [
new Row(imageWidth + MARGINS.left + 1, 0, [ new Row(
new LabelledText( docBuilder.getGenerateType(),
0, imageWidth + MARGINS.left + 1,
0, 0,
'Class', [
`${careerDetail?.class?.value}` new LabelledText(
), docBuilder.getGenerateType(),
new LabelledText( 0,
0, 0,
0, 'Class',
'Career Group', `${careerDetail?.class?.value}`
`${careerDetail?.careergroup?.value}` ),
), new LabelledText(
new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), docBuilder.getGenerateType(),
]), 0,
new Row(imageWidth + MARGINS.left + 1, 0, [ 0,
new LabelledText( 'Career Group',
0, `${careerDetail?.careergroup?.value}`
0, ),
'Status', new LabelledText(
`${actorDetails?.status?.value}` docBuilder.getGenerateType(),
), 0,
new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`), 0,
new LabelledText( 'Career',
0, `${currentCareer?.name}`
0, ),
'Height', ]
`${actorDetails?.height?.value}` ),
), new Row(
new LabelledText( docBuilder.getGenerateType(),
0, imageWidth + MARGINS.left + 1,
0, 0,
'Weight', [
`${actorDetails?.weight?.value}` new LabelledText(
), docBuilder.getGenerateType(),
new LabelledText( 0,
0, 0,
0, 'Status',
'Hair Colour', `${actorDetails?.status?.value}`
`${actorDetails?.haircolour?.value}` ),
), new LabelledText(
]), docBuilder.getGenerateType(),
new Row(imageWidth + MARGINS.left + 1, 0, [ 0,
new LabelledText( 0,
0, 'Age',
0, `${actorDetails?.age?.value}`
'Eye Colour', ),
`${actorDetails?.eyecolour?.value}` new LabelledText(
), docBuilder.getGenerateType(),
new LabelledText( 0,
0, 0,
0, 'Height',
'Distinguishing Mark', `${actorDetails?.height?.value}`
`${actorDetails?.distinguishingmark?.value}` ),
), new LabelledText(
new LabelledText( docBuilder.getGenerateType(),
0, 0,
0, 0,
'Star Sign', 'Weight',
`${actorDetails?.starsign?.value}` `${actorDetails?.weight?.value}`
), ),
]), new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Hair Colour',
`${actorDetails?.haircolour?.value}`
),
]
),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Eye Colour',
`${actorDetails?.eyecolour?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Distinguishing Mark',
`${actorDetails?.distinguishingmark?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Star Sign',
`${actorDetails?.starsign?.value}`
),
]
),
]), ]),
], ],
undefined, undefined,
@@ -558,72 +707,161 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
undefined, undefined,
{ isPdf: false } { isPdf: false }
), ),
Blank.heightBlank(2), Blank.heightBlank(docBuilder.getGenerateType(), 2),
new Row(0, 0, [ new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(0, 0, 'CHARAbbrev.WS', `${actorCharacs?.ws?.value}`),
new LabelledText(0, 0, 'CHARAbbrev.BS', `${actorCharacs?.bs?.value}`),
new LabelledText(0, 0, 'CHARAbbrev.S', `${actorCharacs?.s?.value}`),
new LabelledText(0, 0, 'CHARAbbrev.T', `${actorCharacs?.t?.value}`),
new LabelledText(0, 0, 'CHARAbbrev.I', `${actorCharacs?.i?.value}`),
new LabelledText(0, 0, 'CHARAbbrev.Ag', `${actorCharacs?.ag?.value}`),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.WS',
`${actorCharacs?.ws?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.BS',
`${actorCharacs?.bs?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.S',
`${actorCharacs?.s?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.T',
`${actorCharacs?.t?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.I',
`${actorCharacs?.i?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.Ag',
`${actorCharacs?.ag?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'CHARAbbrev.Dex', 'CHARAbbrev.Dex',
`${actorCharacs?.dex?.value}` `${actorCharacs?.dex?.value}`
), ),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'CHARAbbrev.Int', 'CHARAbbrev.Int',
`${actorCharacs?.int?.value}` `${actorCharacs?.int?.value}`
), ),
new LabelledText(0, 0, 'CHARAbbrev.WP', `${actorCharacs?.wp?.value}`),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.WP',
`${actorCharacs?.wp?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'CHARAbbrev.Fel', 'CHARAbbrev.Fel',
`${actorCharacs?.fel?.value}` `${actorCharacs?.fel?.value}`
), ),
]), ]),
new Row(0, 0, [ new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(0, 0, 'Move', `${actorDetails?.move?.value}`),
new LabelledText(0, 0, 'Walk', `${actorDetails?.move?.walk}`),
new LabelledText(0, 0, 'Run', `${actorDetails?.move?.run}`),
new LabelledText(0, 0, 'Fortune', `${actorStatus?.fortune?.value}`),
new LabelledText(0, 0, 'Fate', `${actorStatus?.fate?.value}`),
new LabelledText(0, 0, 'Resolve', `${actorStatus?.resolve?.value}`),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Move',
`${actorDetails?.move?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Walk',
`${actorDetails?.move?.walk}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Run',
`${actorDetails?.move?.run}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Fortune',
`${actorStatus?.fortune?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Fate',
`${actorStatus?.fate?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Resolve',
`${actorStatus?.resolve?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Resilience', 'Resilience',
`${actorStatus?.resilience?.value}` `${actorStatus?.resilience?.value}`
), ),
new LabelledText( new LabelledText(
docBuilder.getGenerateType(),
0, 0,
0, 0,
'Wounds', 'Wounds',
`${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}` `${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}`
), ),
]), ]),
new Separator(0, 0), new Separator(docBuilder.getGenerateType(), 0, 0),
new Text(0, 0, 'Skills'), new Text(docBuilder.getGenerateType(), 0, 0, 'Skills'),
skills, skills,
new Separator(0, 0), new Separator(docBuilder.getGenerateType(), 0, 0),
new Text(0, 0, `${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}`), new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}`
),
talents, talents,
traits.contextElements.length > 0 traits.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
traits.contextElements.length > 0 traits.contextElements.length > 0
? new Text(0, 0, 'Traits') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Traits')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
traits, traits,
weaponsMelee.contextElements.length > 0 weaponsMelee.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsMelee.contextElements.length > 0 weaponsMelee.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize( `${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize(
@@ -632,13 +870,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
'Damage' 'Damage'
)}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsMelee, weaponsMelee,
weaponsRanged.contextElements.length > 0 weaponsRanged.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsRanged.contextElements.length > 0 weaponsRanged.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize( `${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize(
@@ -647,13 +886,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
'Damage' 'Damage'
)}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsRanged, weaponsRanged,
ammunitions.contextElements.length > 0 ammunitions.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
ammunitions.contextElements.length > 0 ammunitions.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('Ammunition')} : ${i18nLocalize( `${i18nLocalize('Ammunition')} : ${i18nLocalize(
@@ -662,20 +902,21 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
'Qualities' 'Qualities'
)}, ${i18nLocalize('Flaws')}` )}, ${i18nLocalize('Flaws')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
ammunitions, ammunitions,
armours.contextElements.length > 0 armours.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
armours.contextElements.length > 0 armours.contextElements.length > 0
? new Text(0, 0, 'Armour') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Armour')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
armours, armours,
petty.contextElements.length > 0 petty.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
petty.contextElements.length > 0 petty.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize( `${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize(
@@ -684,13 +925,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
'Target' 'Target'
)}, ${i18nLocalize('Duration')}` )}, ${i18nLocalize('Duration')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
petty, petty,
spell.contextElements.length > 0 spell.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
spell.contextElements.length > 0 spell.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize( `${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize(
@@ -701,86 +943,90 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
'WFRP4E.TrappingType.Ingredients' 'WFRP4E.TrappingType.Ingredients'
)}` )}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
spell, spell,
blessing.contextElements.length > 0 blessing.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
blessing.contextElements.length > 0 blessing.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('Blessing')} : ${i18nLocalize( `${i18nLocalize('Blessing')} : ${i18nLocalize(
'Range' 'Range'
)}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
blessing, blessing,
miracle.contextElements.length > 0 miracle.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
miracle.contextElements.length > 0 miracle.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('Miracle')} : ${i18nLocalize( `${i18nLocalize('Miracle')} : ${i18nLocalize(
'Range' 'Range'
)}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
miracle, miracle,
new Separator(0, 0), new Separator(docBuilder.getGenerateType(), 0, 0),
trappingsHeader, trappingsHeader,
trappings, trappings,
psychology.contextElements.length > 0 psychology.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
psychology.contextElements.length > 0 psychology.contextElements.length > 0
? new Text(0, 0, 'Psychology') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Psychology')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
psychology, psychology,
critical.contextElements.length > 0 critical.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
critical.contextElements.length > 0 critical.contextElements.length > 0
? new Text(0, 0, 'Criticals') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Criticals')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
critical, critical,
disease.contextElements.length > 0 disease.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
disease.contextElements.length > 0 disease.contextElements.length > 0
? new Text(0, 0, 'Diseases') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Diseases')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
disease, disease,
injury.contextElements.length > 0 injury.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
injury.contextElements.length > 0 injury.contextElements.length > 0
? new Text(0, 0, 'Injuries') ? new Text(docBuilder.getGenerateType(), 0, 0, 'Injuries')
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
injury, injury,
mutationP.contextElements.length > 0 mutationP.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationP.contextElements.length > 0 mutationP.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})` `${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationP, mutationP,
mutationM.contextElements.length > 0 mutationM.contextElements.length > 0
? new Separator(0, 0) ? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationM.contextElements.length > 0 mutationM.contextElements.length > 0
? new Text( ? new Text(
docBuilder.getGenerateType(),
0, 0,
0, 0,
`${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})` `${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})`
) )
: Blank.heightBlank(0), : Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationM, mutationM,
], ],
{ {

View File

@@ -3,6 +3,7 @@ import { AbstractElement } from './elements/abstract-element';
import { LABEL_SIZE, MARGINS, TEXT_SIZE } from './constants'; import { LABEL_SIZE, MARGINS, TEXT_SIZE } from './constants';
import { AbstractBuilder } from './abstract-builder'; import { AbstractBuilder } from './abstract-builder';
import { Util } from './util'; import { Util } from './util';
import { GenerateTypeEnum } from './elements/generate-type.enum';
export class PdfBuilder extends AbstractBuilder { export class PdfBuilder extends AbstractBuilder {
public doc: jsPDF; public doc: jsPDF;
@@ -73,4 +74,8 @@ export class PdfBuilder extends AbstractBuilder {
public getImageScale(): number { public getImageScale(): number {
return 1; return 1;
} }
public getGenerateType(): GenerateTypeEnum {
return GenerateTypeEnum.PDF;
}
} }