refactor: create structure for backend

This commit is contained in:
2023-10-26 12:05:16 +02:00
parent 42d3cb5b65
commit 7eeef67b29
81 changed files with 491 additions and 48 deletions
@@ -0,0 +1,69 @@
import {PDFFont, PDFPage, rgb, breakTextIntoLines} from "pdf-lib";
import {KarakterPdfView} from "./karakter_pdf_view";
import {Skill} from "../domain-models/osztaly";
const maxWidth = 540
function drawExtendedSkillDescription(skill: Skill, font: PDFFont, baseFontSize: number, page: PDFPage, rows: number) {
const indent = 20
for (let j = 0; j < (skill.ExtendedDescription?.length || 0); j++) {
const paragraph = `${j + 1}. ${skill.ExtendedDescription![j]}`
const lines = breakTextIntoLines(paragraph, [' ', '-'], maxWidth - indent, (s) => font.widthOfTextAtSize(s, baseFontSize))
page.drawText(paragraph, {
x: 30 + indent,
y: 700 - rows,
size: baseFontSize,
font: font,
lineHeight: 16,
color: rgb(0, 0, 0),
maxWidth: maxWidth - indent,
wordBreaks: [' ', '-']
})
rows += lines.length * font.heightAtSize(baseFontSize)
}
return rows;
}
export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, fontBold: PDFFont, karakter: KarakterPdfView): number {
const baseFontSize = 12
const titleFontSize = baseFontSize * 3
const pageCenterX = page.getWidth()/2
const titleWidth = font.widthOfTextAtSize(karakter.Osztaly, titleFontSize)
const titleX = pageCenterX - (titleWidth / 2)
page.drawText(karakter.Osztaly, {
x: titleX,
y: 770,
size: titleFontSize,
font: font,
color: rgb(0, 0, 0),
})
let rows = 0
for (let i = 0; i < karakter.OsztalySkills.length; i++) {
const skill = karakter.OsztalySkills[i];
page.drawText(skill.Name, {
x: 30,
y: 720 - rows,
size: baseFontSize,
font: fontBold,
color: rgb(0, 0, 0),
})
const lines = breakTextIntoLines(skill.Description, [' ', '-'], maxWidth, (s) => font.widthOfTextAtSize(s, baseFontSize))
page.drawText(skill.Description, {
x: 30,
y: 700 - rows,
size: baseFontSize,
font: font,
lineHeight: 16,
color: rgb(0, 0, 0),
maxWidth: maxWidth,
wordBreaks: [' ', '-']
})
// rows += Math.ceil(font.widthOfTextAtSize(skill.Description, baseFontSize)/textWidth)*20 + 30
// rows += skill.Description.split('\n').length*16 + 30
rows += lines.length * font.heightAtSize(baseFontSize)
rows = drawExtendedSkillDescription(skill, font, baseFontSize, page, rows);
rows += 24 // for title and spacing
}
return rows
}