feat: base html sheet
This commit is contained in:
50
src/html-builder.ts
Normal file
50
src/html-builder.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user