diff --git a/server/public.go b/server/public.go index 16f6fb0d..a18b3efd 100644 --- a/server/public.go +++ b/server/public.go @@ -12,7 +12,9 @@ import ( "io/ioutil" "math/big" "net/http" + "path/filepath" "reflect" + "regexp" "runtime" "runtime/debug" "strconv" @@ -410,20 +412,58 @@ func (s *PublicServer) parseTemplates() []*template.Template { "setTxToTemplateData": setTxToTemplateData, "stringInSlice": stringInSlice, } - t := make([]*template.Template, tplCount) - t[errorTpl] = template.Must(template.New("error").Funcs(templateFuncMap).ParseFiles("./static/templates/error.html", "./static/templates/base.html")) - t[errorInternalTpl] = template.Must(template.New("error").Funcs(templateFuncMap).ParseFiles("./static/templates/error.html", "./static/templates/base.html")) - t[indexTpl] = template.Must(template.New("index").Funcs(templateFuncMap).ParseFiles("./static/templates/index.html", "./static/templates/base.html")) - t[blocksTpl] = template.Must(template.New("blocks").Funcs(templateFuncMap).ParseFiles("./static/templates/blocks.html", "./static/templates/paging.html", "./static/templates/base.html")) - t[sendTransactionTpl] = template.Must(template.New("block").Funcs(templateFuncMap).ParseFiles("./static/templates/sendtx.html", "./static/templates/base.html")) - if s.chainParser.GetChainType() == bchain.ChainEthereumType { - t[txTpl] = template.Must(template.New("tx").Funcs(templateFuncMap).ParseFiles("./static/templates/tx.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/base.html")) - t[addressTpl] = template.Must(template.New("address").Funcs(templateFuncMap).ParseFiles("./static/templates/address.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/paging.html", "./static/templates/base.html")) - t[blockTpl] = template.Must(template.New("block").Funcs(templateFuncMap).ParseFiles("./static/templates/block.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/paging.html", "./static/templates/base.html")) + var createTemplate func(filenames ...string) *template.Template + if s.debug { + createTemplate = func(filenames ...string) *template.Template { + if len(filenames) == 0 { + panic("Missing templates") + } + return template.Must(template.New(filepath.Base(filenames[0])).Funcs(templateFuncMap).ParseFiles(filenames...)) + } } else { - t[txTpl] = template.Must(template.New("tx").Funcs(templateFuncMap).ParseFiles("./static/templates/tx.html", "./static/templates/txdetail.html", "./static/templates/base.html")) - t[addressTpl] = template.Must(template.New("address").Funcs(templateFuncMap).ParseFiles("./static/templates/address.html", "./static/templates/txdetail.html", "./static/templates/paging.html", "./static/templates/base.html")) - t[blockTpl] = template.Must(template.New("block").Funcs(templateFuncMap).ParseFiles("./static/templates/block.html", "./static/templates/txdetail.html", "./static/templates/paging.html", "./static/templates/base.html")) + createTemplate = func(filenames ...string) *template.Template { + if len(filenames) == 0 { + panic("Missing templates") + } + t := template.New(filepath.Base(filenames[0])).Funcs(templateFuncMap) + for _, filename := range filenames { + b, err := ioutil.ReadFile(filename) + if err != nil { + panic(err) + } + // perform very simple minification - replace leading spaces used as formatting and new lines + r := regexp.MustCompile(`\n\s*`) + b = r.ReplaceAll(b, []byte{}) + s := string(b) + name := filepath.Base(filename) + var tt *template.Template + if name == t.Name() { + tt = t + } else { + tt = t.New(name) + } + _, err = tt.Parse(s) + if err != nil { + panic(err) + } + } + return t + } + } + t := make([]*template.Template, tplCount) + t[errorTpl] = createTemplate("./static/templates/error.html", "./static/templates/base.html") + t[errorInternalTpl] = createTemplate("./static/templates/error.html", "./static/templates/base.html") + t[indexTpl] = createTemplate("./static/templates/index.html", "./static/templates/base.html") + t[blocksTpl] = createTemplate("./static/templates/blocks.html", "./static/templates/paging.html", "./static/templates/base.html") + t[sendTransactionTpl] = createTemplate("./static/templates/sendtx.html", "./static/templates/base.html") + if s.chainParser.GetChainType() == bchain.ChainEthereumType { + t[txTpl] = createTemplate("./static/templates/tx.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/base.html") + t[addressTpl] = createTemplate("./static/templates/address.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/paging.html", "./static/templates/base.html") + t[blockTpl] = createTemplate("./static/templates/block.html", "./static/templates/txdetail_ethereumtype.html", "./static/templates/paging.html", "./static/templates/base.html") + } else { + t[txTpl] = createTemplate("./static/templates/tx.html", "./static/templates/txdetail.html", "./static/templates/base.html") + t[addressTpl] = createTemplate("./static/templates/address.html", "./static/templates/txdetail.html", "./static/templates/paging.html", "./static/templates/base.html") + t[blockTpl] = createTemplate("./static/templates/block.html", "./static/templates/txdetail.html", "./static/templates/paging.html", "./static/templates/base.html") } return t } diff --git a/static/templates/address.html b/static/templates/address.html index f479cb53..64ea44ce 100644 --- a/static/templates/address.html +++ b/static/templates/address.html @@ -1,6 +1,5 @@ {{define "specific"}}{{$cs := .CoinShortcut}}{{$addr := .Address}}{{$data := .}} -

{{if $addr.Erc20Contract}}Contract {{$addr.Erc20Contract.Name}} ({{$addr.Erc20Contract.Symbol}}){{else}}Address{{end}} - {{formatAmount $addr.BalanceSat}} {{$cs}} +

{{if $addr.Erc20Contract}}Contract {{$addr.Erc20Contract.Name}} ({{$addr.Erc20Contract.Symbol}}){{else}}Address{{end}} {{formatAmount $addr.BalanceSat}} {{$cs}}

{{$addr.AddrStr}} diff --git a/static/templates/blocks.html b/static/templates/blocks.html index b36d8ca8..cbb9d057 100644 --- a/static/templates/blocks.html +++ b/static/templates/blocks.html @@ -1,6 +1,5 @@ {{define "specific"}}{{$blocks := .Blocks}}{{$data := .}} -

Blocks - by date +

Blocks by date

{{if $blocks.Blocks -}} diff --git a/static/templates/txdetail_ethereumtype.html b/static/templates/txdetail_ethereumtype.html index 6c7bcd57..ec760955 100644 --- a/static/templates/txdetail_ethereumtype.html +++ b/static/templates/txdetail_ethereumtype.html @@ -3,7 +3,7 @@
{{$tx.Txid}} - {{if eq $tx.EthereumSpecific.Status 1}}{{end}}{{if eq $tx.EthereumSpecific.Status 0}}{{end}} + {{if eq $tx.EthereumSpecific.Status 1}}{{end}}{{if eq $tx.EthereumSpecific.Status 0}}{{end}}
{{- if $tx.Confirmations -}}
mined {{formatUnixTime $tx.Blocktime}}