diff --git a/src/abstract-builder.ts b/src/abstract-builder.ts index 900f47b..2007466 100644 --- a/src/abstract-builder.ts +++ b/src/abstract-builder.ts @@ -1,4 +1,5 @@ import { AbstractElement } from './elements/abstract-element'; +import { GenerateTypeEnum } from './elements/generate-type.enum'; export abstract class AbstractBuilder { public abstract build(elements: AbstractElement[]); @@ -8,4 +9,6 @@ export abstract class AbstractBuilder { public abstract save(name: string); public abstract getImageScale(): number; + + public abstract getGenerateType(): GenerateTypeEnum; } diff --git a/src/elements/abstract-container-element.ts b/src/elements/abstract-container-element.ts index 3aea4f4..847fdb9 100644 --- a/src/elements/abstract-container-element.ts +++ b/src/elements/abstract-container-element.ts @@ -1,5 +1,6 @@ import { AbstractElement } from './abstract-element'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export abstract class AbstractContainerElement extends AbstractElement { public pdfElements: AbstractElement[] = []; @@ -7,22 +8,24 @@ export abstract class AbstractContainerElement extends AbstractElement { public contextElements: AbstractElement[] = []; constructor( + globalType: GenerateTypeEnum, x: number, y: number, maxWidth: number | undefined, elements: AbstractElement[] = [], context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, maxWidth, context); + super(globalType, x, y, maxWidth, context); this.htmlElements = this.context.isHtml ? elements.filter((el) => el.context.isHtml) : []; this.pdfElements = this.context.isPdf ? elements.filter((el) => el.context.isPdf) : []; - this.contextElements = this.context.isHtml - ? this.htmlElements - : this.pdfElements; + this.contextElements = + this.globalType === GenerateTypeEnum.HTML + ? this.htmlElements + : this.pdfElements; } public getElements(): AbstractElement[] { diff --git a/src/elements/abstract-element.ts b/src/elements/abstract-element.ts index 4ab7ae2..de0b531 100644 --- a/src/elements/abstract-element.ts +++ b/src/elements/abstract-element.ts @@ -1,6 +1,7 @@ import jsPDF from 'jspdf'; import { MARGINS } from '../constants'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export abstract class AbstractElement { public static readonly DEFAULT_CONTEXT: IContext = { @@ -9,17 +10,20 @@ export abstract class AbstractElement { name: 'element', }; + public globalType: GenerateTypeEnum; public x: number; public y: number; public maxWidth?: number; public context: IContext = AbstractElement.DEFAULT_CONTEXT; constructor( + globalType: GenerateTypeEnum, x: number, y: number, maxWidth?: number | undefined, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { + this.globalType = globalType; this.x = x >= MARGINS.left ? x : MARGINS.left; this.y = y >= MARGINS.top ? y : MARGINS.top; this.maxWidth = maxWidth; diff --git a/src/elements/blank.ts b/src/elements/blank.ts index ccf4370..8003a35 100644 --- a/src/elements/blank.ts +++ b/src/elements/blank.ts @@ -2,20 +2,22 @@ import { AbstractElement } from './abstract-element'; import jsPDF from 'jspdf'; import { Box } from './box'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Blank extends Box { constructor( + globalType: GenerateTypeEnum, x: number, y: number, w: number, h: number, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, w, h, context); + super(globalType, x, y, w, h, context); } - public static heightBlank(h: number) { - return new Blank(0, 0, 0, h); + public static heightBlank(globalType: GenerateTypeEnum, h: number) { + return new Blank(globalType, 0, 0, 0, h); } public getCheckNewPageHeight(doc?: jsPDF): number { diff --git a/src/elements/box.ts b/src/elements/box.ts index 253ad1b..2ecd421 100644 --- a/src/elements/box.ts +++ b/src/elements/box.ts @@ -1,19 +1,21 @@ import { AbstractElement } from './abstract-element'; import jsPDF from 'jspdf'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Box extends AbstractElement { public w: number; public h: number; constructor( + globalType: GenerateTypeEnum, x: number, y: number, w: number, h: number, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, w, context); + super(globalType, x, y, w, context); this.w = w; this.h = h; } diff --git a/src/elements/column.ts b/src/elements/column.ts index 58876ca..973d77a 100644 --- a/src/elements/column.ts +++ b/src/elements/column.ts @@ -2,15 +2,17 @@ import { AbstractElement } from './abstract-element'; import jsPDF from 'jspdf'; import { IContext } from './context'; import { AbstractContainerElement } from './abstract-container-element'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Column extends AbstractContainerElement { constructor( + globalType: GenerateTypeEnum, x: number, y: number, elements: AbstractElement[], context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, undefined, elements, context); + super(globalType, x, y, undefined, elements, context); } public prepareRender(doc: jsPDF, _maxWidth?: number): jsPDF { diff --git a/src/elements/generate-type.enum.ts b/src/elements/generate-type.enum.ts new file mode 100644 index 0000000..b9f6db6 --- /dev/null +++ b/src/elements/generate-type.enum.ts @@ -0,0 +1,4 @@ +export enum GenerateTypeEnum { + PDF = 'PDF', + HTML = 'HTML', +} diff --git a/src/elements/image.ts b/src/elements/image.ts index acb549f..fcb8369 100644 --- a/src/elements/image.ts +++ b/src/elements/image.ts @@ -2,11 +2,13 @@ import { Box } from './box'; import jsPDF from 'jspdf'; import { AbstractElement } from './abstract-element'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Image extends Box { public imageData: string; constructor( + globalType: GenerateTypeEnum, x: number, y: number, w: number, @@ -14,7 +16,7 @@ export class Image extends Box { imageData: string, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, w, h, context); + super(globalType, x, y, w, h, context); this.imageData = imageData; } diff --git a/src/elements/labelled-text.ts b/src/elements/labelled-text.ts index 168fa50..e007a1f 100644 --- a/src/elements/labelled-text.ts +++ b/src/elements/labelled-text.ts @@ -9,12 +9,14 @@ import { } from '../constants'; import { AbstractElement } from './abstract-element'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class LabelledText extends Text { public label: string; public labelOptions?: TextOptionsLight; constructor( + globalType: GenerateTypeEnum, x: number, y: number, label: string, @@ -23,7 +25,7 @@ export class LabelledText extends Text { labelOptions?: TextOptionsLight, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, text, textOptions, context); + super(globalType, x, y, text, textOptions, context); this.label = label; this.labelOptions = labelOptions; const textMaxWidth = this.textOptions?.maxWidth ?? 0; diff --git a/src/elements/labelled-value.ts b/src/elements/labelled-value.ts index 0cd2fe3..1e66914 100644 --- a/src/elements/labelled-value.ts +++ b/src/elements/labelled-value.ts @@ -3,12 +3,14 @@ import { Text } from './text'; import { MultilineText } from './multiline-text'; import { IContext } from './context'; import { AbstractElement } from './abstract-element'; +import { GenerateTypeEnum } from './generate-type.enum'; export class LabelledValue extends Row { public label: string; public value: number; constructor( + globalType: GenerateTypeEnum, label: string, value: number, widthPercents?: number[], @@ -17,11 +19,14 @@ export class LabelledValue extends Row { context: Partial = AbstractElement.DEFAULT_CONTEXT ) { super( + globalType, 0, 0, [ - multiline ? new MultilineText(0, 0, label) : new Text(0, 0, label), - new Text(0, 0, value.toString(), { + multiline + ? new MultilineText(globalType, 0, 0, label) + : new Text(globalType, 0, 0, label), + new Text(globalType, 0, 0, value.toString(), { align: 'right', }), ], diff --git a/src/elements/labelled-values.ts b/src/elements/labelled-values.ts index 712a11e..ec508f3 100644 --- a/src/elements/labelled-values.ts +++ b/src/elements/labelled-values.ts @@ -5,12 +5,14 @@ import jsPDF from 'jspdf'; import { MARGINS } from '../constants'; import { IContext } from './context'; import { AbstractElement } from './abstract-element'; +import { GenerateTypeEnum } from './generate-type.enum'; export class LabelledValues extends Row { public labelledValues: { label: string; value: number }[]; public nbrOfCol: number; constructor( + globalType: GenerateTypeEnum, x: number, y: number, labelledValues: { label: string; value: number }[], @@ -18,7 +20,7 @@ export class LabelledValues extends Row { multiline = false, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, [], undefined, undefined, undefined, context); + super(globalType, x, y, [], undefined, undefined, undefined, context); this.labelledValues = labelledValues; this.nbrOfCol = nbrOfCol ?? 3; if (this.nbrOfCol > 3) { @@ -38,7 +40,7 @@ export class LabelledValues extends Row { rest > 2 ? nbrPerCol + 1 : nbrPerCol, ]; 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`, }); } @@ -52,6 +54,7 @@ export class LabelledValues extends Row { } (this.contextElements[currentIndex]).contextElements.push( new LabelledValue( + globalType, labelledValues[i].label, labelledValues[i].value, widthPercent, @@ -62,11 +65,13 @@ export class LabelledValues extends Row { } else { this.contextElements.push( new Column( + globalType, 0, 0, labelledValues.map( (libelledValue) => new LabelledValue( + globalType, libelledValue.label, libelledValue.value, widthPercent, diff --git a/src/elements/multiline-text.ts b/src/elements/multiline-text.ts index 9a212b2..80c75bc 100644 --- a/src/elements/multiline-text.ts +++ b/src/elements/multiline-text.ts @@ -3,18 +3,20 @@ import jsPDF, { TextOptionsLight } from 'jspdf'; import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants'; import { Text } from './text'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class MultilineText extends Text { private nbrLine = 1; constructor( + globalType: GenerateTypeEnum, x: number, y: number, text: string, textOptions?: TextOptionsLight, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, text, textOptions, context); + super(globalType, x, y, text, textOptions, context); } public prepareRender(doc: jsPDF, maxWidth?: number): jsPDF { diff --git a/src/elements/row.ts b/src/elements/row.ts index 656cba2..831aa16 100644 --- a/src/elements/row.ts +++ b/src/elements/row.ts @@ -3,12 +3,14 @@ import jsPDF from 'jspdf'; import { MARGINS } from '../constants'; import { IContext } from './context'; import { AbstractContainerElement } from './abstract-container-element'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Row extends AbstractContainerElement { public widthPercents?: number[]; public maxWidths?: number[]; constructor( + globalType: GenerateTypeEnum, x: number, y: number, elements: AbstractElement[], @@ -17,7 +19,7 @@ export class Row extends AbstractContainerElement { maxWidths?: number[], context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, maxWidth, elements, context); + super(globalType, x, y, maxWidth, elements, context); this.widthPercents = widthPercents ?? []; this.maxWidths = maxWidths ?? []; } diff --git a/src/elements/separator.ts b/src/elements/separator.ts index 519fe82..513ca18 100644 --- a/src/elements/separator.ts +++ b/src/elements/separator.ts @@ -2,15 +2,17 @@ import { AbstractElement } from './abstract-element'; import jsPDF from 'jspdf'; import { MARGINS } from '../constants'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Separator extends AbstractElement { constructor( + globalType: GenerateTypeEnum, x: number, y: number, maxWidth?: number | undefined, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, maxWidth, context); + super(globalType, x, y, maxWidth, context); } public getHeight(_doc?: jsPDF): number { diff --git a/src/elements/text.ts b/src/elements/text.ts index a3211ec..7311be6 100644 --- a/src/elements/text.ts +++ b/src/elements/text.ts @@ -2,19 +2,21 @@ import { AbstractElement } from './abstract-element'; import jsPDF, { TextOptionsLight } from 'jspdf'; import { HTML_TEXT_SIZE, i18nLocalize, TEXT_SIZE } from '../constants'; import { IContext } from './context'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Text extends AbstractElement { public text: string; public textOptions?: TextOptionsLight; constructor( + globalType: GenerateTypeEnum, x: number, y: number, text: string, textOptions?: TextOptionsLight, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, textOptions?.maxWidth, context); + super(globalType, x, y, textOptions?.maxWidth, context); this.text = text; this.textOptions = textOptions; } diff --git a/src/elements/texts.ts b/src/elements/texts.ts index 6314be0..a7437b3 100644 --- a/src/elements/texts.ts +++ b/src/elements/texts.ts @@ -6,12 +6,14 @@ import { Text } from './text'; import { MultilineText } from './multiline-text'; import { IContext } from './context'; import { AbstractElement } from './abstract-element'; +import { GenerateTypeEnum } from './generate-type.enum'; export class Texts extends Row { public texts: string[]; public nbrOfCol: number; constructor( + globalType: GenerateTypeEnum, x: number, y: number, texts: string[], @@ -19,7 +21,7 @@ export class Texts extends Row { multiline = false, context: Partial = AbstractElement.DEFAULT_CONTEXT ) { - super(x, y, [], undefined, undefined, undefined, context); + super(globalType, x, y, [], undefined, undefined, undefined, context); this.texts = texts; this.nbrOfCol = nbrOfCol ?? 4; if (this.nbrOfCol > 4) { @@ -37,7 +39,7 @@ export class Texts extends Row { rest > 3 ? nbrPerCol + 1 : nbrPerCol, ]; 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++) { if (i < nbrPerCols[0]) { @@ -50,24 +52,25 @@ export class Texts extends Row { currentIndex = 3; } (this.contextElements[currentIndex]).contextElements.push( - new Row(0, 0, [ + new Row(this.globalType, 0, 0, [ multiline - ? new MultilineText(0, 0, texts[i]) - : new Text(0, 0, texts[i]), + ? new MultilineText(this.globalType, 0, 0, texts[i]) + : new Text(this.globalType, 0, 0, texts[i]), ]) ); } } else { this.contextElements.push( new Column( + this.globalType, 0, 0, texts.map( (text) => - new Row(0, 0, [ + new Row(this.globalType, 0, 0, [ multiline - ? new MultilineText(0, 0, text) - : new Text(0, 0, text), + ? new MultilineText(this.globalType, 0, 0, text) + : new Text(this.globalType, 0, 0, text), ]) ) ) diff --git a/src/html-builder.ts b/src/html-builder.ts index 1bf8c14..d553e0d 100644 --- a/src/html-builder.ts +++ b/src/html-builder.ts @@ -8,6 +8,7 @@ import { LABEL_SIZE, TEXT_SIZE, } from './constants'; +import { GenerateTypeEnum } from './elements/generate-type.enum'; export class HtmlBuilder extends AbstractBuilder { public doc: Document; @@ -86,4 +87,8 @@ export class HtmlBuilder extends AbstractBuilder { public getImageScale(): number { return 4; } + + public getGenerateType(): GenerateTypeEnum { + return GenerateTypeEnum.HTML; + } } diff --git a/src/main.ts b/src/main.ts index 31b0852..8b76a8f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -95,6 +95,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { const careerDetail: any = careerData?.data; const skills = new LabelledValues( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.skill @@ -122,6 +123,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { }); const talents = new LabelledValues( + docBuilder.getGenerateType(), 0, 0, Object.entries(talentsByName) @@ -137,6 +139,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const traits = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.trait @@ -148,6 +151,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const weaponsMelee = new Texts( + docBuilder.getGenerateType(), 0, 0, Util.getActorItems(actor, 'weapon') @@ -165,6 +169,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const weaponsRanged = new Texts( + docBuilder.getGenerateType(), 0, 0, Util.getActorItems(actor, 'weapon') @@ -182,6 +187,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const ammunitions = new Texts( + docBuilder.getGenerateType(), 0, 0, Util.getActorItems(actor, 'ammunition') @@ -223,6 +229,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { } const armours = new Texts( + docBuilder.getGenerateType(), 0, 0, armourLocation.map((al) => { @@ -235,6 +242,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const petty = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.spell @@ -247,6 +255,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const spell = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.spell @@ -259,6 +268,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const blessing = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.prayer @@ -271,6 +281,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const miracle = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.prayer @@ -296,6 +307,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { } const trappingsHeader = new Texts( + docBuilder.getGenerateType(), 0, 0, [ @@ -310,6 +322,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const trappings = new Texts( + docBuilder.getGenerateType(), 0, 0, Util.getAllActorItems(actor, ['container', 'trapping']) @@ -328,6 +341,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const critical = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.critical.map((i) => { @@ -337,6 +351,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const disease = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.disease.map((i) => { @@ -346,6 +361,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const injury = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.injury.map((i) => { @@ -355,6 +371,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const mutationP = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.mutation @@ -366,6 +383,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const mutationM = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.mutation @@ -377,6 +395,7 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { ); const psychology = new Texts( + docBuilder.getGenerateType(), 0, 0, actor.itemCategories.psychology.map((i) => { @@ -391,44 +410,107 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { const imageY = labelledRowHeight + MARGINS.top + 2; const actorImageElementPdf = actorImageData != null - ? new Image(0, imageY, imageWidth, imageWidth, actorImageData, { - isHtml: false, - }) - : new Box(0, imageY, imageWidth, imageWidth, { - isHtml: false, - }); + ? new Image( + docBuilder.getGenerateType(), + 0, + imageY, + imageWidth, + imageWidth, + actorImageData, + { + isHtml: false, + } + ) + : new Box( + docBuilder.getGenerateType(), + 0, + imageY, + imageWidth, + imageWidth, + { + isHtml: false, + } + ); const actorImageElementHtml = actorImageData != null - ? new Image(0, imageY, imageWidth, imageWidth, actorImageData, { - isPdf: false, - }) - : new Box(0, imageY, imageWidth, imageWidth, { - isPdf: false, - }); + ? new Image( + docBuilder.getGenerateType(), + 0, + imageY, + imageWidth, + imageWidth, + actorImageData, + { + isPdf: false, + } + ) + : new Box( + docBuilder.getGenerateType(), + 0, + imageY, + imageWidth, + imageWidth, + { + isPdf: false, + } + ); docBuilder.build([ actorImageElementPdf, new Column( + docBuilder.getGenerateType(), 0, 0, [ - new Row(0, 0, [ - new LabelledText(0, 0, 'Name', `${actor.name}`), - new LabelledText(0, 0, 'Species', `${actorDetails?.species?.value}`), - new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`), + new Row(docBuilder.getGenerateType(), 0, 0, [ + new LabelledText( + docBuilder.getGenerateType(), + 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( + docBuilder.getGenerateType(), imageWidth + MARGINS.left + 1, 0, [ - new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`), new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'Class', + `${careerDetail?.class?.value}` + ), + new LabelledText( + docBuilder.getGenerateType(), 0, 0, 'Career Group', `${careerDetail?.careergroup?.value}` ), - new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), + new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'Career', + `${currentCareer?.name}` + ), ], undefined, undefined, @@ -436,14 +518,40 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { { isHtml: false } ), new Row( + docBuilder.getGenerateType(), imageWidth + MARGINS.left + 1, 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( + 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, 'Hair Colour', @@ -456,22 +564,26 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { { isHtml: false } ), 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', @@ -484,73 +596,110 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { { isHtml: false } ), new Row( + docBuilder.getGenerateType(), 0, 0, [ actorImageElementHtml, - new Column(0, 0, [ - new Row(imageWidth + MARGINS.left + 1, 0, [ - new LabelledText( - 0, - 0, - 'Class', - `${careerDetail?.class?.value}` - ), - new LabelledText( - 0, - 0, - 'Career Group', - `${careerDetail?.careergroup?.value}` - ), - new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), - ]), - new Row(imageWidth + MARGINS.left + 1, 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( - 0, - 0, - 'Hair Colour', - `${actorDetails?.haircolour?.value}` - ), - ]), - new Row(imageWidth + MARGINS.left + 1, 0, [ - new LabelledText( - 0, - 0, - 'Eye Colour', - `${actorDetails?.eyecolour?.value}` - ), - new LabelledText( - 0, - 0, - 'Distinguishing Mark', - `${actorDetails?.distinguishingmark?.value}` - ), - new LabelledText( - 0, - 0, - 'Star Sign', - `${actorDetails?.starsign?.value}` - ), - ]), + new Column(docBuilder.getGenerateType(), 0, 0, [ + new Row( + docBuilder.getGenerateType(), + imageWidth + MARGINS.left + 1, + 0, + [ + new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'Class', + `${careerDetail?.class?.value}` + ), + new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'Career Group', + `${careerDetail?.careergroup?.value}` + ), + new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'Career', + `${currentCareer?.name}` + ), + ] + ), + new Row( + docBuilder.getGenerateType(), + imageWidth + MARGINS.left + 1, + 0, + [ + 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, + '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, @@ -558,72 +707,161 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { undefined, { isPdf: false } ), - Blank.heightBlank(2), - new Row(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}`), + Blank.heightBlank(docBuilder.getGenerateType(), 2), + new Row(docBuilder.getGenerateType(), 0, 0, [ 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, 'CHARAbbrev.Dex', `${actorCharacs?.dex?.value}` ), new LabelledText( + docBuilder.getGenerateType(), 0, 0, 'CHARAbbrev.Int', `${actorCharacs?.int?.value}` ), - new LabelledText(0, 0, 'CHARAbbrev.WP', `${actorCharacs?.wp?.value}`), new LabelledText( + docBuilder.getGenerateType(), + 0, + 0, + 'CHARAbbrev.WP', + `${actorCharacs?.wp?.value}` + ), + new LabelledText( + docBuilder.getGenerateType(), 0, 0, 'CHARAbbrev.Fel', `${actorCharacs?.fel?.value}` ), ]), - new Row(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 Row(docBuilder.getGenerateType(), 0, 0, [ 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, 'Resilience', `${actorStatus?.resilience?.value}` ), new LabelledText( + docBuilder.getGenerateType(), 0, 0, 'Wounds', `${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}` ), ]), - new Separator(0, 0), - new Text(0, 0, 'Skills'), + new Separator(docBuilder.getGenerateType(), 0, 0), + new Text(docBuilder.getGenerateType(), 0, 0, 'Skills'), skills, - new Separator(0, 0), - new Text(0, 0, `${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}`), + new Separator(docBuilder.getGenerateType(), 0, 0), + new Text( + docBuilder.getGenerateType(), + 0, + 0, + `${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}` + ), talents, traits.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), traits.contextElements.length > 0 - ? new Text(0, 0, 'Traits') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Traits') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), traits, weaponsMelee.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), weaponsMelee.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize( @@ -632,13 +870,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { 'Damage' )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), weaponsMelee, weaponsRanged.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), weaponsRanged.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize( @@ -647,13 +886,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { 'Damage' )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), weaponsRanged, ammunitions.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), ammunitions.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('Ammunition')} : ${i18nLocalize( @@ -662,20 +902,21 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { 'Qualities' )}, ${i18nLocalize('Flaws')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), ammunitions, armours.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), armours.contextElements.length > 0 - ? new Text(0, 0, 'Armour') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Armour') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), armours, petty.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), petty.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize( @@ -684,13 +925,14 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { 'Target' )}, ${i18nLocalize('Duration')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), petty, spell.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), spell.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize( @@ -701,86 +943,90 @@ async function generate(actor: Actor & any, docBuilder: AbstractBuilder) { 'WFRP4E.TrappingType.Ingredients' )}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), spell, blessing.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), blessing.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('Blessing')} : ${i18nLocalize( 'Range' )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), blessing, miracle.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), miracle.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('Miracle')} : ${i18nLocalize( 'Range' )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), miracle, - new Separator(0, 0), + new Separator(docBuilder.getGenerateType(), 0, 0), trappingsHeader, trappings, psychology.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), psychology.contextElements.length > 0 - ? new Text(0, 0, 'Psychology') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Psychology') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), psychology, critical.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), critical.contextElements.length > 0 - ? new Text(0, 0, 'Criticals') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Criticals') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), critical, disease.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), disease.contextElements.length > 0 - ? new Text(0, 0, 'Diseases') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Diseases') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), disease, injury.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), injury.contextElements.length > 0 - ? new Text(0, 0, 'Injuries') - : Blank.heightBlank(0), + ? new Text(docBuilder.getGenerateType(), 0, 0, 'Injuries') + : Blank.heightBlank(docBuilder.getGenerateType(), 0), injury, mutationP.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), mutationP.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), mutationP, mutationM.contextElements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), + ? new Separator(docBuilder.getGenerateType(), 0, 0) + : Blank.heightBlank(docBuilder.getGenerateType(), 0), mutationM.contextElements.length > 0 ? new Text( + docBuilder.getGenerateType(), 0, 0, `${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})` ) - : Blank.heightBlank(0), + : Blank.heightBlank(docBuilder.getGenerateType(), 0), mutationM, ], { diff --git a/src/pdf-builder.ts b/src/pdf-builder.ts index 05f9387..dc7485a 100644 --- a/src/pdf-builder.ts +++ b/src/pdf-builder.ts @@ -3,6 +3,7 @@ import { AbstractElement } from './elements/abstract-element'; import { LABEL_SIZE, MARGINS, TEXT_SIZE } from './constants'; import { AbstractBuilder } from './abstract-builder'; import { Util } from './util'; +import { GenerateTypeEnum } from './elements/generate-type.enum'; export class PdfBuilder extends AbstractBuilder { public doc: jsPDF; @@ -73,4 +74,8 @@ export class PdfBuilder extends AbstractBuilder { public getImageScale(): number { return 1; } + + public getGenerateType(): GenerateTypeEnum { + return GenerateTypeEnum.PDF; + } }