import { Injectable } from '@angular/core';
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
+import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { IFoodCard } from './ifood-card';
import { ITitle } from './ititle';
export class HtmlExportService
{
- constructor(private sanitizer: DomSanitizer) {}
+ private cssExportContent: string = "";
+
+ constructor(private sanitizer: DomSanitizer,
+ private httpclient: HttpClient)
+ {
+ this.loadCssFile();
+ }
public exportHtml(foodcard: IFoodCard): Observable<SafeUrl>
{
+ this.loadCssFile();
let observ = new Observable<SafeUrl>((observ) => {
let html: string = '<html lang="de">';
html += '<head>';
html += '<meta name="viewport" content="width-device-width, initial-scale=1.0">';
html += '<title>Speisekarte</title>';
html += '<style type="text/css" media="screen">';
- html += this.createHtmlStyle();
+ html += this.cssExportContent;
html += '</style>';
html += '</head>';
html += '<body>';
return observ;
}
- private createHtmlStyle(): string
+ private loadCssFile(): void
{
- let stylestring = ""
- // Font
- stylestring += '@import url("https://fonts.googleapis.com/css?family=Tangerine");';
- stylestring += '@font-face { font-family: "Tangerine"; }';
-
- // foodcard
- stylestring += '.foodcard { max-width: 60em; margin: 0 auto; }';
- stylestring += 'p { font-style: italic; text-align: center; }';
-
- // Grid
- stylestring += '.grid { display: grid;';
- stylestring += 'grid-template-columns: repeat(12, 1fr) }';
-
- // Title
- stylestring += 'h1 { font-family: "Tangerine", serif;';
- stylestring += 'text-align: center; font-size: 2.5em;';
- stylestring += 'margin: 1em 0; }';
-
- // Subtitle
- stylestring += 'h2 { font-family: "Tangerine", serif;';
- stylestring += 'text-align: center; font-size: 2em; }';
-
- // FoodMenu
- stylestring += '.foodmenu { text-align: center; }';
-
- // Food
- stylestring += '.food { grid-row: 1; grid-column: 1/13;';
- stylestring += 'font-size: 1.2em; font-weight: bold; }';
-
- // SideDish
- stylestring += '.sideDish { grid-row: 2; grid-column: 1/13;';
- stylestring += 'font-style: italic; }';
-
- // Price
- stylestring += '.price { grid-row: 3; grid-column: 1/13;';
- stylestring += 'margin-top: 0.5em; }';
-
- // Bigger Media
- stylestring += '@media only screen and (min-width: 46.875em) {';
-
- // Title
- stylestring += 'h1 { text-align: left; }';
-
- // Subtitle
- stylestring += 'h2 { text-align: left; }';
-
- // FoodMenu
- stylestring += '.foodmenu { padding: 0.5em 0;';
- stylestring += 'border-bottom: 0.125em solid gray;';
- stylestring += 'text-align: left; }';
-
- // Food
- stylestring += '.food { grid-row: 1; grid-column: 1/9;';
- stylestring += 'font-size: 1.5em; }';
-
- // SideDish
- stylestring += '.sideDish { grid-row: 2; grid-column: 1/13; }';
-
- // Price
- stylestring += '.price { grid-row: 1; grid-column: 9/13;';
- stylestring += 'text-align: right; font-size: 1.1em; }';
-
- stylestring += '}';
-
- return stylestring;
+ let loadcss = this.httpclient.get("assets/htmlexport.css",
+ { responseType: 'text' });
+ loadcss.subscribe((content: any) => {
+ this.cssExportContent = content as string; });
}
private createHtmlTitles(titles: ITitle[]): string