Browse Source

Template parse error page via template engine

Vova Tkach 6 years ago
parent
commit
6ba6ac2cd6

+ 1 - 1
engine/wrapper/resources/templates/page.tmplerror.go

@@ -1,3 +1,3 @@
 package templates
 
-var PageTmplError = []byte(`<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><meta name="theme-color" content="#205081" /><title>Template Error</title><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8" /><link rel="shortcut icon" href="/assets/sys/fave.ico" type="image/x-icon" /><link rel="stylesheet" type="text/css" media="all" href="/assets/sys/styles.css" /></head><body><div class="wrapper"><div class="logo"><div class="svg"><img src="/assets/sys/logo.svg" width="150" height="150" /></div></div><h1>Template Error</h1><h2>%s</h2></div></body></html>`)
+var PageTmplError = []byte(`<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><meta name="theme-color" content="#205081" /><title>Template Error</title><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8" /><link rel="shortcut icon" href="{{$.System.PathIcoFav}}" type="image/x-icon" /><link rel="stylesheet" type="text/css" media="all" href="{{$.System.PathCssStyles}}" /></head><body><div class="wrapper"><div class="logo"><div class="svg"><img src="{{$.System.PathSvgLogo}}" width="150" height="150" /></div></div><h1>Template Error</h1><h2>{{$.Data.ErrorMessage}}</h2></div></body></html>`)

+ 4 - 4
engine/wrapper/resources/templates/page.tmplerror.html

@@ -6,18 +6,18 @@
 		<title>Template Error</title>
 		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 		<meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8" />
-		<link rel="shortcut icon" href="/assets/sys/fave.ico" type="image/x-icon" />
-		<link rel="stylesheet" type="text/css" media="all" href="/assets/sys/styles.css" />
+		<link rel="shortcut icon" href="{{$.System.PathIcoFav}}" type="image/x-icon" />
+		<link rel="stylesheet" type="text/css" media="all" href="{{$.System.PathCssStyles}}" />
 	</head>
 	<body>
 		<div class="wrapper">
 			<div class="logo">
 				<div class="svg">
-					<img src="/assets/sys/logo.svg" width="150" height="150" />
+					<img src="{{$.System.PathSvgLogo}}" width="150" height="150" />
 				</div>
 			</div>
 			<h1>Template Error</h1>
-			<h2>%s</h2>
+			<h2>{{$.Data.ErrorMessage}}</h2>
 		</div>
 	</body>
 </html>

+ 19 - 3
engine/wrapper/static.go

@@ -1,7 +1,6 @@
 package wrapper
 
 import (
-	"fmt"
 	"html/template"
 	"io/ioutil"
 	"net/http"
@@ -14,6 +13,10 @@ import (
 	Templates "golang-fave/engine/wrapper/resources/templates"
 )
 
+type tmplDataErrorMsg struct {
+	ErrorMessage string
+}
+
 func (e *Wrapper) staticResource() bool {
 	if e.R.URL.Path == "/assets/sys/styles.css" {
 		(*e.W).Header().Set("Content-Type", "text/css")
@@ -123,8 +126,21 @@ func (e *Wrapper) printPage404() {
 	})
 }
 
-func (e *Wrapper) printTmplPageError(err error) {
+func (e *Wrapper) printTmplPageError(perr error) {
+	tmpl, err := template.New("template").Parse(string(Templates.PageTmplError))
+	if err != nil {
+		(*e.W).WriteHeader(http.StatusInternalServerError)
+		(*e.W).Header().Set("Content-Type", "text/html")
+		(*e.W).Write([]byte("<h1>Critical engine error!</h1>"))
+		(*e.W).Write([]byte("<h2>" + perr.Error() + "</h2>"))
+		return
+	}
 	(*e.W).WriteHeader(http.StatusInternalServerError)
 	(*e.W).Header().Set("Content-Type", "text/html")
-	(*e.W).Write([]byte(fmt.Sprintf(string(Templates.PageTmplError), err.Error())))
+	tmpl.Execute(*e.W, tmplDataAll{
+		System: e.tmplGetSystemData(),
+		Data: tmplDataErrorMsg{
+			ErrorMessage: perr.Error(),
+		},
+	})
 }