mirror of https://github.com/statping/statping
service fix - source assets - fixes
parent
c27f6a6f30
commit
09f094312e
12
.travis.yml
12
.travis.yml
|
@ -18,12 +18,12 @@ services:
|
|||
|
||||
env:
|
||||
global:
|
||||
- VERSION=0.36
|
||||
- DB_HOST=localhost
|
||||
- DB_USER=travis
|
||||
- DB_PASS=
|
||||
- DB_DATABASE=test
|
||||
- GO_ENV=test
|
||||
- VERSION=0.36
|
||||
- DB_HOST=localhost
|
||||
- DB_USER=travis
|
||||
- DB_PASS=
|
||||
- DB_DATABASE=test
|
||||
- GO_ENV=test
|
||||
|
||||
matrix:
|
||||
allow_failures:
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
cd $GOPATH/src/github.com/hunterlong/statup/core
|
||||
cd $GOPATH/src/github.com/hunterlong/statup/source
|
||||
|
||||
# RENDERING CSS
|
||||
gem install sass
|
||||
sass ../source/scss/base.scss ../source/css/base.css
|
||||
sass scss/base.scss css/base.css
|
||||
|
||||
# MIGRATION SQL FILE FOR CURRENT VERSION
|
||||
#printf "UPDATE core SET version='$VERSION';\n" >> source/sql/upgrade.sql
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"github.com/joho/godotenv"
|
||||
|
@ -27,7 +28,7 @@ func CatchCLI(args []string) {
|
|||
case "version":
|
||||
fmt.Printf("Statup v%v\n", VERSION)
|
||||
case "assets":
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
core.CreateAllAssets(dir)
|
||||
case "sass":
|
||||
core.CompileSASS(dir)
|
||||
|
@ -52,7 +53,7 @@ func CatchCLI(args []string) {
|
|||
case "export":
|
||||
var err error
|
||||
fmt.Printf("Statup v%v Exporting Static 'index.html' page...\n", VERSION)
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
core.Configs, err = core.LoadConfig()
|
||||
if err != nil {
|
||||
utils.Log(4, "config.yml file not found")
|
||||
|
@ -126,7 +127,7 @@ func HelpEcho() {
|
|||
|
||||
func TestPlugin(plug types.PluginActions) {
|
||||
defer utils.DeleteFile("./.plugin_test.db")
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
|
||||
info := plug.GetInfo()
|
||||
fmt.Printf("\n" + BRAKER + "\n")
|
||||
|
@ -191,7 +192,7 @@ func FakeSeed(plug types.PluginActions) {
|
|||
if err != nil {
|
||||
utils.Log(3, err)
|
||||
}
|
||||
up, _ := core.SqlBox.String("sqlite_up.sql")
|
||||
up, _ := source.SqlBox.String("sqlite_up.sql")
|
||||
requests := strings.Split(up, ";")
|
||||
for _, request := range requests {
|
||||
_, err := core.DbSession.Exec(request)
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"github.com/fatih/structs"
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/handlers"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"github.com/joho/godotenv"
|
||||
|
@ -33,7 +34,7 @@ func main() {
|
|||
os.Exit(0)
|
||||
}
|
||||
utils.Log(1, fmt.Sprintf("Starting Statup v%v", VERSION))
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
core.HasAssets(directory)
|
||||
|
||||
core.Configs, err = core.LoadConfig()
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/handlers"
|
||||
"github.com/hunterlong/statup/notifiers"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"github.com/rendon/testcli"
|
||||
|
@ -29,7 +30,7 @@ func init() {
|
|||
}
|
||||
|
||||
func RunInit(t *testing.T) {
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
os.Remove(dir + "/statup.db")
|
||||
os.Remove(dir + "/cmd/config.yml")
|
||||
os.Remove(dir + "/cmd/index.html")
|
||||
|
@ -39,9 +40,9 @@ func RunInit(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestRunAll(t *testing.T) {
|
||||
t.Parallel()
|
||||
//t.Parallel()
|
||||
|
||||
databases := []string{"mysql", "sqlite", "postgres"}
|
||||
databases := []string{"sqlite", "postgres", "mysql"}
|
||||
|
||||
for _, dbt := range databases {
|
||||
|
||||
|
@ -192,10 +193,10 @@ func TestAssetsCommand(t *testing.T) {
|
|||
c := testcli.Command("statup", "assets")
|
||||
c.Run()
|
||||
t.Log(c.Stdout())
|
||||
assert.True(t, fileExists(dir+"/assets/robots.txt"))
|
||||
assert.True(t, fileExists(dir+"/assets/js/main.js"))
|
||||
assert.True(t, fileExists(dir+"/assets/css/base.css"))
|
||||
assert.True(t, fileExists(dir+"/assets/scss/base.scss"))
|
||||
t.Log("Directory for Assets: ", dir)
|
||||
assert.True(t, fileExists("../assets/robots.txt"))
|
||||
assert.True(t, fileExists("../assets/js/main.js"))
|
||||
assert.True(t, fileExists("../assets/scss/base.scss"))
|
||||
}
|
||||
|
||||
func RunMakeDatabaseConfig(t *testing.T, db string) {
|
||||
|
|
|
@ -3,20 +3,13 @@ package core
|
|||
import (
|
||||
"fmt"
|
||||
"github.com/GeertJohan/go.rice"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func RenderBoxes() {
|
||||
SqlBox = rice.MustFindBox("../source/sql")
|
||||
CssBox = rice.MustFindBox("../source/css")
|
||||
ScssBox = rice.MustFindBox("../source/scss")
|
||||
JsBox = rice.MustFindBox("../source/js")
|
||||
TmplBox = rice.MustFindBox("../source/tmpl")
|
||||
}
|
||||
|
||||
func CopyToPublic(box *rice.Box, folder, file string) {
|
||||
assetFolder := fmt.Sprintf("%v/%v", folder, file)
|
||||
utils.Log(1, fmt.Sprintf("Copying %v to %v", file, assetFolder))
|
||||
|
@ -72,7 +65,7 @@ func HasAssets(folder string) bool {
|
|||
CreateAllAssets(folder)
|
||||
err := CompileSASS(folder)
|
||||
if err != nil {
|
||||
CopyToPublic(CssBox, folder+"/css", "base.css")
|
||||
CopyToPublic(source.CssBox, folder+"/css", "base.css")
|
||||
utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
|
||||
return true
|
||||
}
|
||||
|
@ -107,17 +100,17 @@ func CreateAllAssets(folder string) error {
|
|||
MakePublicFolder(folder + "/assets/css")
|
||||
MakePublicFolder(folder + "/assets/scss")
|
||||
utils.Log(1, "Inserting scss, css, and javascript files into assets folder")
|
||||
CopyToPublic(ScssBox, folder+"/assets/scss", "base.scss")
|
||||
CopyToPublic(ScssBox, folder+"/assets/scss", "variables.scss")
|
||||
CopyToPublic(CssBox, folder+"/assets/css", "bootstrap.min.css")
|
||||
CopyToPublic(CssBox, folder+"/assets/css", "base.css")
|
||||
CopyToPublic(JsBox, folder+"/assets/js", "bootstrap.min.js")
|
||||
CopyToPublic(JsBox, folder+"/assets/js", "Chart.bundle.min.js")
|
||||
CopyToPublic(JsBox, folder+"/assets/js", "jquery-3.3.1.slim.min.js")
|
||||
CopyToPublic(JsBox, folder+"/assets/js", "main.js")
|
||||
CopyToPublic(JsBox, folder+"/assets/js", "setup.js")
|
||||
CopyToPublic(TmplBox, folder+"/assets", "robots.txt")
|
||||
CopyToPublic(TmplBox, folder+"/assets", "favicon.ico")
|
||||
CopyToPublic(source.ScssBox, folder+"/assets/scss", "base.scss")
|
||||
CopyToPublic(source.ScssBox, folder+"/assets/scss", "variables.scss")
|
||||
CopyToPublic(source.CssBox, folder+"/assets/css", "bootstrap.min.css")
|
||||
CopyToPublic(source.CssBox, folder+"/assets/css", "base.css")
|
||||
CopyToPublic(source.JsBox, folder+"/assets/js", "bootstrap.min.js")
|
||||
CopyToPublic(source.JsBox, folder+"/assets/js", "Chart.bundle.min.js")
|
||||
CopyToPublic(source.JsBox, folder+"/assets/js", "jquery-3.3.1.slim.min.js")
|
||||
CopyToPublic(source.JsBox, folder+"/assets/js", "main.js")
|
||||
CopyToPublic(source.JsBox, folder+"/assets/js", "setup.js")
|
||||
CopyToPublic(source.TmplBox, folder+"/assets", "robots.txt")
|
||||
CopyToPublic(source.TmplBox, folder+"/assets", "statup.png")
|
||||
utils.Log(1, "Compiling CSS from SCSS style...")
|
||||
err := utils.Log(1, "Statup assets have been inserted")
|
||||
return err
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package core
|
||||
|
||||
import (
|
||||
"github.com/GeertJohan/go.rice"
|
||||
"github.com/hunterlong/statup/notifiers"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -20,11 +19,6 @@ type Core struct {
|
|||
var (
|
||||
Configs *types.Config
|
||||
CoreApp *Core
|
||||
SqlBox *rice.Box
|
||||
CssBox *rice.Box
|
||||
ScssBox *rice.Box
|
||||
JsBox *rice.Box
|
||||
TmplBox *rice.Box
|
||||
SetupMode bool
|
||||
UsingAssets bool
|
||||
VERSION string
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package core
|
||||
|
||||
import (
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"os"
|
||||
|
@ -10,15 +11,13 @@ import (
|
|||
var (
|
||||
testCore *Core
|
||||
testConfig *DbConfig
|
||||
gopath string
|
||||
dir string
|
||||
)
|
||||
|
||||
func init() {
|
||||
gopath = os.Getenv("GOPATH")
|
||||
gopath += "/src/github.com/hunterlong/statup"
|
||||
|
||||
dir = utils.Directory
|
||||
utils.InitLogs()
|
||||
RenderBoxes()
|
||||
source.Assets()
|
||||
}
|
||||
|
||||
func TestNewCore(t *testing.T) {
|
||||
|
@ -31,14 +30,14 @@ func TestDbConfig_Save(t *testing.T) {
|
|||
testConfig = &DbConfig{
|
||||
DbConn: "sqlite",
|
||||
Project: "Tester",
|
||||
Location: gopath,
|
||||
Location: dir,
|
||||
}
|
||||
err := testConfig.Save()
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
func TestDbConnection(t *testing.T) {
|
||||
err := DbConnection(testConfig.DbConn, false, gopath)
|
||||
err := DbConnection(testConfig.DbConn, false, dir)
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
|
@ -74,25 +73,25 @@ func TestCore_UsingAssets(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestHasAssets(t *testing.T) {
|
||||
assert.False(t, HasAssets(gopath))
|
||||
assert.False(t, HasAssets(dir))
|
||||
}
|
||||
|
||||
func TestCreateAssets(t *testing.T) {
|
||||
assert.Nil(t, CreateAllAssets(gopath))
|
||||
assert.True(t, HasAssets(gopath))
|
||||
assert.Nil(t, CreateAllAssets(dir))
|
||||
assert.True(t, HasAssets(dir))
|
||||
}
|
||||
|
||||
func TestCompileSASS(t *testing.T) {
|
||||
t.SkipNow()
|
||||
os.Setenv("SASS", "sass")
|
||||
os.Setenv("CMD_FILE", gopath+"/cmd.sh")
|
||||
assert.Nil(t, CompileSASS(gopath))
|
||||
assert.True(t, HasAssets(gopath))
|
||||
os.Setenv("CMD_FILE", dir+"/cmd.sh")
|
||||
assert.Nil(t, CompileSASS(dir))
|
||||
assert.True(t, HasAssets(dir))
|
||||
}
|
||||
|
||||
func TestDeleteAssets(t *testing.T) {
|
||||
assert.Nil(t, DeleteAllAssets(gopath))
|
||||
assert.False(t, HasAssets(gopath))
|
||||
assert.Nil(t, DeleteAllAssets(dir))
|
||||
assert.False(t, HasAssets(dir))
|
||||
}
|
||||
|
||||
func TestInsertNotifierDB(t *testing.T) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package core
|
|||
import (
|
||||
"fmt"
|
||||
"github.com/go-yaml/yaml"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"os"
|
||||
|
@ -179,7 +180,7 @@ func RunDatabaseUpgrades() error {
|
|||
return err
|
||||
}
|
||||
utils.Log(1, fmt.Sprintf("Checking for Database Upgrades since #%v", currentMigration))
|
||||
upgrade, _ := SqlBox.String(CoreApp.DbConnection + "_upgrade.sql")
|
||||
upgrade, _ := source.SqlBox.String(CoreApp.DbConnection + "_upgrade.sql")
|
||||
// parse db version and upgrade file
|
||||
ups := strings.Split(upgrade, "=========================================== ")
|
||||
ups = reverseSlice(ups)
|
||||
|
@ -226,7 +227,7 @@ func RunDatabaseUpgrades() error {
|
|||
|
||||
func DropDatabase() error {
|
||||
utils.Log(1, "Dropping Database Tables...")
|
||||
down, err := SqlBox.String("down.sql")
|
||||
down, err := source.SqlBox.String("down.sql")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -248,7 +249,7 @@ func CreateDatabase() error {
|
|||
} else if CoreApp.DbConnection == "sqlite" {
|
||||
sql = "sqlite_up.sql"
|
||||
}
|
||||
up, err := SqlBox.String(sql)
|
||||
up, err := source.SqlBox.String(sql)
|
||||
requests := strings.Split(up, ";")
|
||||
for _, request := range requests {
|
||||
_, err := DbSession.Exec(request)
|
||||
|
|
|
@ -2,6 +2,7 @@ package core
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
|
@ -10,9 +11,9 @@ import (
|
|||
func ExportIndexHTML() string {
|
||||
CoreApp.UseCdn = true
|
||||
//out := index{*CoreApp, CoreApp.Services}
|
||||
nav, _ := TmplBox.String("nav.html")
|
||||
footer, _ := TmplBox.String("footer.html")
|
||||
render, err := TmplBox.String("index.html")
|
||||
nav, _ := source.TmplBox.String("nav.html")
|
||||
footer, _ := source.TmplBox.String("footer.html")
|
||||
render, err := source.TmplBox.String("index.html")
|
||||
if err != nil {
|
||||
utils.Log(3, err)
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/types"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"html/template"
|
||||
|
@ -66,9 +67,9 @@ func IsAuthenticated(r *http.Request) bool {
|
|||
|
||||
func ExecuteResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}) {
|
||||
utils.Http(r)
|
||||
nav, _ := core.TmplBox.String("nav.html")
|
||||
footer, _ := core.TmplBox.String("footer.html")
|
||||
render, err := core.TmplBox.String(file)
|
||||
nav, _ := source.TmplBox.String("nav.html")
|
||||
footer, _ := source.TmplBox.String("footer.html")
|
||||
render, err := source.TmplBox.String(file)
|
||||
if err != nil {
|
||||
utils.Log(4, err)
|
||||
}
|
||||
|
@ -100,7 +101,7 @@ func ExecuteResponse(w http.ResponseWriter, r *http.Request, file string, data i
|
|||
}
|
||||
|
||||
func ExecuteJSResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}) {
|
||||
render, err := core.JsBox.String(file)
|
||||
render, err := source.JsBox.String(file)
|
||||
if err != nil {
|
||||
utils.Log(4, err)
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package handlers
|
|||
|
||||
import (
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"net/http"
|
||||
|
@ -13,7 +14,7 @@ import (
|
|||
|
||||
func init() {
|
||||
utils.InitLogs()
|
||||
core.RenderBoxes()
|
||||
source.Assets()
|
||||
}
|
||||
|
||||
func TestIndexHandler(t *testing.T) {
|
||||
|
@ -84,6 +85,14 @@ func TestServicesViewHandler(t *testing.T) {
|
|||
assert.Contains(t, body, "Statup made with ❤️")
|
||||
}
|
||||
|
||||
func TestMissingServiceViewHandler(t *testing.T) {
|
||||
req, err := http.NewRequest("GET", "/service/99999999", nil)
|
||||
assert.Nil(t, err)
|
||||
rr := httptest.NewRecorder()
|
||||
Router().ServeHTTP(rr, req)
|
||||
assert.Equal(t, 404, rr.Code)
|
||||
}
|
||||
|
||||
func TestServiceChartHandler(t *testing.T) {
|
||||
req, err := http.NewRequest("GET", "/charts.js", nil)
|
||||
assert.Nil(t, err)
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"github.com/gorilla/mux"
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
@ -76,11 +77,13 @@ func LocalizedAssets(r *mux.Router) *mux.Router {
|
|||
r.PathPrefix("/js/").Handler(http.StripPrefix("/js/", jsHandler))
|
||||
r.PathPrefix("/robots.txt").Handler(indexHandler)
|
||||
r.PathPrefix("/favicon.ico").Handler(indexHandler)
|
||||
r.PathPrefix("/statup.png").Handler(indexHandler)
|
||||
} else {
|
||||
r.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(core.CssBox.HTTPBox())))
|
||||
r.PathPrefix("/js/").Handler(http.StripPrefix("/js/", http.FileServer(core.JsBox.HTTPBox())))
|
||||
r.PathPrefix("/robots.txt").Handler(http.FileServer(core.TmplBox.HTTPBox()))
|
||||
r.PathPrefix("/favicon.ico").Handler(http.FileServer(core.TmplBox.HTTPBox()))
|
||||
r.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(source.CssBox.HTTPBox())))
|
||||
r.PathPrefix("/js/").Handler(http.StripPrefix("/js/", http.FileServer(source.JsBox.HTTPBox())))
|
||||
r.PathPrefix("/robots.txt").Handler(http.FileServer(source.TmplBox.HTTPBox()))
|
||||
r.PathPrefix("/favicon.ico").Handler(http.FileServer(source.TmplBox.HTTPBox()))
|
||||
r.PathPrefix("/statup.png").Handler(http.FileServer(source.TmplBox.HTTPBox()))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
|
|
@ -80,6 +80,10 @@ func ServicesDeleteHandler(w http.ResponseWriter, r *http.Request) {
|
|||
func ServicesViewHandler(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
serv := core.SelectService(utils.StringInt(vars["id"]))
|
||||
if serv == nil {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
ExecuteResponse(w, r, "service.html", serv)
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"github.com/gorilla/mux"
|
||||
"github.com/hunterlong/statup/core"
|
||||
"github.com/hunterlong/statup/notifiers"
|
||||
"github.com/hunterlong/statup/source"
|
||||
"github.com/hunterlong/statup/utils"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -72,7 +73,7 @@ func SaveAssetsHandler(w http.ResponseWriter, r *http.Request) {
|
|||
core.CreateAllAssets(dir)
|
||||
err := core.CompileSASS(dir)
|
||||
if err != nil {
|
||||
core.CopyToPublic(core.CssBox, dir+"/assets/css", "base.css")
|
||||
core.CopyToPublic(source.CssBox, dir+"/assets/css", "base.css")
|
||||
utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
|
||||
}
|
||||
core.UsingAssets = true
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package source
|
||||
|
||||
import "github.com/GeertJohan/go.rice"
|
||||
|
||||
var (
|
||||
SqlBox *rice.Box
|
||||
CssBox *rice.Box
|
||||
ScssBox *rice.Box
|
||||
JsBox *rice.Box
|
||||
TmplBox *rice.Box
|
||||
)
|
||||
|
||||
func Assets() {
|
||||
SqlBox = rice.MustFindBox("sql")
|
||||
CssBox = rice.MustFindBox("css")
|
||||
ScssBox = rice.MustFindBox("scss")
|
||||
JsBox = rice.MustFindBox("js")
|
||||
TmplBox = rice.MustFindBox("tmpl")
|
||||
}
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
<div class="col-8 offset-2 mt-3">
|
||||
|
||||
<div class="col-8 offset-2"><img src="https://assets.statup.io/statup-words.svg"></div>
|
||||
<div class="col-6 offset-3 mb-4"><img width="100%" src="/statup.png"></div>
|
||||
|
||||
{{ if .Error }}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
<div class="container col-md-7 col-sm-12 mt-md-5 bg-light">
|
||||
|
||||
<div class="col-4 offset-4 mt-2 mb-5"><img width="100%" src="/statup.png"></div>
|
||||
|
||||
<div class="col-12">
|
||||
|
||||
{{ if .Error }}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
Loading…
Reference in New Issue