Move static assets to 'static' dir
This commit is contained in:
parent
9005bb6dad
commit
709668d811
8
init.go
8
init.go
|
@ -50,8 +50,10 @@ func initFS() stuffbin.FileSystem {
|
||||||
"config.toml.sample",
|
"config.toml.sample",
|
||||||
"queries.sql",
|
"queries.sql",
|
||||||
"schema.sql",
|
"schema.sql",
|
||||||
"email-templates",
|
"static/email-templates",
|
||||||
"public",
|
|
||||||
|
// Alias /static/public to /public for the HTTP fileserver.
|
||||||
|
"static/public:/public",
|
||||||
|
|
||||||
// The frontend app's static assets are aliased to /frontend
|
// The frontend app's static assets are aliased to /frontend
|
||||||
// so that they are accessible at localhost:port/frontend/static/ ...
|
// so that they are accessible at localhost:port/frontend/static/ ...
|
||||||
|
@ -261,7 +263,7 @@ func initNotifTemplates(path string, fs stuffbin.FileSystem, cs *constants) *tem
|
||||||
return cs.LogoURL
|
return cs.LogoURL
|
||||||
}}
|
}}
|
||||||
|
|
||||||
tpl, err := stuffbin.ParseTemplatesGlob(funcs, fs, "/email-templates/*.html")
|
tpl, err := stuffbin.ParseTemplatesGlob(funcs, fs, "/static/email-templates/*.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lo.Fatalf("error parsing e-mail notif templates: %v", err)
|
lo.Fatalf("error parsing e-mail notif templates: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
{{ define "header" }}
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
|
||||||
|
<base target="_blank">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #F0F1F3;
|
||||||
|
font-family: 'Helvetica Neue', 'Segoe UI', Helvetica, sans-serif;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 26px;
|
||||||
|
margin: 0;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 30px;
|
||||||
|
max-width: 525px;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
.footer a {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gutter {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
background: #7f2aff;
|
||||||
|
color: #fff !important;
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 10px 30px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.button:hover {
|
||||||
|
background: #222;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #7f2aff;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 600px) {
|
||||||
|
.wrap {
|
||||||
|
max-width: auto;
|
||||||
|
}
|
||||||
|
.gutter {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body style="background-color: #F0F1F3;">
|
||||||
|
<div class="gutter"> </div>
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="header">
|
||||||
|
{{ if ne LogoURL "" }}
|
||||||
|
<a href="{{ RootURL }}"><img src="{{ LogoURL }}" alt="listmonk" /></a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "footer" }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<p>Powered by <a href="https://listmonk.app" target="_blank">listmonk</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="gutter"> </div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{{ define "campaign-status" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
<h2>Campaign update</h2>
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Campaign</strong></td>
|
||||||
|
<td><a href="{{ index . "RootURL" }}/campaigns/{{ index . "ID" }}">{{ index . "Name" }}</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Status</strong></td>
|
||||||
|
<td>{{ index . "Status" }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Sent</strong></td>
|
||||||
|
<td>{{ index . "Sent" }} / {{ index . "ToSend" }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ if ne (index . "Reason") "" }}
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Reason</strong></td>
|
||||||
|
<td>{{ index . "Reason" }}</td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</table>
|
||||||
|
{{ template "footer" }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,84 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||||
|
<base target="_blank">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #F0F1F3;
|
||||||
|
font-family: 'Helvetica Neue', 'Segoe UI', Helvetica, sans-serif;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 26px;
|
||||||
|
margin: 0;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 30px;
|
||||||
|
max-width: 525px;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
background: #7f2aff;
|
||||||
|
border-radius: 3px;
|
||||||
|
text-decoration: none !important;
|
||||||
|
color: #fff !important;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 10px 30px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.button:hover {
|
||||||
|
background: #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
.footer a {
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gutter {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #7f2aff;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 600px) {
|
||||||
|
.wrap {
|
||||||
|
max-width: auto;
|
||||||
|
}
|
||||||
|
.gutter {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body style="background-color: #F0F1F3;font-family: 'Helvetica Neue', 'Segoe UI', Helvetica, sans-serif;font-size: 15px;line-height: 26px;margin: 0;color: #444;">
|
||||||
|
<div class="gutter" style="padding: 30px;"> </div>
|
||||||
|
<div class="wrap" style="background-color: #fff;padding: 30px;max-width: 525px;margin: 0 auto;border-radius: 5px;">
|
||||||
|
{{ template "content" . }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer" style="text-align: center;font-size: 12px;color: #888;">
|
||||||
|
<p>Don't want to receive these e-mails? <a href="{{ UnsubscribeURL }}" style="color: #888;">Unsubscribe</a></p>
|
||||||
|
<p>Powered by <a href="https://listmonk.app" target="_blank" style="color: #888;">listmonk</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="gutter" style="padding: 30px;"> {{ TrackView }}</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,19 @@
|
||||||
|
{{ define "import-status" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
<h2>Import update</h2>
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>File</strong></td>
|
||||||
|
<td><a href="{{ RootURL }}/subscribers/import">{{ .Name }}</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Status</strong></td>
|
||||||
|
<td>{{ .Status }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="30%"><strong>Records</strong></td>
|
||||||
|
<td>{{ .Imported }} / {{ .Total }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{{ template "footer" }}
|
||||||
|
{{ end }}
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
{{ define "subscriber-data" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
<h2>Your data</h2>
|
||||||
|
<p>
|
||||||
|
A copy of all data recorded on you is attached as a file in the JSON format.
|
||||||
|
It can be viewed in a text editor.
|
||||||
|
</p>
|
||||||
|
{{ template "footer" }}
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,17 @@
|
||||||
|
{{ define "optin-campaign" }}
|
||||||
|
|
||||||
|
<p>Hi {{`{{ .Subscriber.FirstName }}`}},</p>
|
||||||
|
<p>You have been added to the following mailing lists:</p>
|
||||||
|
<ul>
|
||||||
|
{{ range $i, $l := .Lists }}
|
||||||
|
{{ if eq .Type "public" }}
|
||||||
|
<li>{{ .Name }}</li>
|
||||||
|
{{ else }}
|
||||||
|
<li>Private list</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
<a class="button" {{ .OptinURLAttr }} class="button">Confirm subscription(s)</a>
|
||||||
|
</p>
|
||||||
|
{{ end }}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{{ define "subscriber-optin" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
<h2>Confirm subscription</h2>
|
||||||
|
<p>Hi {{ .Subscriber.FirstName }},</p>
|
||||||
|
<p>You have been added to the following mailing lists:</p>
|
||||||
|
<ul>
|
||||||
|
{{ range $i, $l := .Lists }}
|
||||||
|
{{ if eq .Type "public" }}
|
||||||
|
<li>{{ .Name }}</li>
|
||||||
|
{{ else }}
|
||||||
|
<li>Private list</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<p>Confirm your subscription by clicking the below button.</p>
|
||||||
|
<p>
|
||||||
|
<a href="{{ .OptinURL }}" class="button">Confirm subscription</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{ template "footer" }}
|
||||||
|
{{ end }}
|
Loading…
Reference in New Issue