feat: base html sheet

This commit is contained in:
Matthieu CAILLEAUX
2022-04-26 21:11:35 +02:00
parent 986d50a5eb
commit b16967c351
16 changed files with 309 additions and 45 deletions

50
src/html-builder.ts Normal file
View File

@@ -0,0 +1,50 @@
import { AbstractElement } from './elements/abstract-element';
import { AbstractBuilder } from './abstract-builder';
import { saveAs } from 'file-saver';
import { i18n } from './constants';
export class HtmlBuilder extends AbstractBuilder {
public doc: Document;
public styleSheet: HTMLStyleElement;
constructor() {
super();
this.doc = document.implementation.createHTMLDocument();
const style = document.createElement('style');
style.innerHTML = '.column { display: flex; flex-direction: column; }';
style.innerHTML +=
' .row { display: flex; flex-direction: row; gap: 10px; }';
style.innerHTML +=
' .separator { border: 1px solid; width: 100%; height: 0px }';
style.appendChild(document.createTextNode(''));
this.doc.head.appendChild(style);
this.styleSheet = style;
const meta = document.createElement('meta');
meta.setAttribute('charset', 'UTF-8');
this.doc.head.appendChild(meta);
}
public getLabelledRowHeight(): number {
return 0;
}
public save(name: string) {
this.doc.title = name;
const blob = new Blob(
[
`<html lang="${i18n().lang}">
${this.doc.documentElement.innerHTML}
</html>`,
],
{ type: 'text/html;charset=utf-8' }
);
saveAs(blob, `${name}.html`);
}
public build(elements: AbstractElement[]) {
const cssList: string[] = [];
for (const element of elements) {
element.renderHtml(this.doc, this.doc.body, cssList, this.styleSheet);
}
}
}