aboutsummaryrefslogtreecommitdiffstats
path: root/web/command/html/site.go
blob: 7616e6b55be206b2ca4a36fa514d0d0bde59b857 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package html

import (
	"fmt"

	"github.com/LMBishop/scrapbook/pkg/config"
	"github.com/LMBishop/scrapbook/pkg/site"
	. "maragu.dev/gomponents"
	. "maragu.dev/gomponents/html"
)

func SitePage(mainConfig *config.MainConfig, site *site.Site) Node {
	versions, err := site.GetAllVersions()
	currentVersion, _ := site.GetCurrentVersion()

	return page("Site "+site.Name,
		H1(Text("Site "+site.Name)),

		If(site.EvaluateSiteStatus() != "live", alertError(site.EvaluateSiteStatusReason())),

		FieldSet(
			Legend(Text("Site actions")),

			Div(
				Class("control-group"),

				navButton("Upload new version", "upload"),
				navButton("Set flags", "flags"),
				navButton("Delete site", "delete"),
			),
		),

		H2(Text("Version history")),

		If(len(versions) == 0, Span(Class("span"), alert("There are no versions to display", ""))),
		If(err != nil, Span(Class("span"), alertError(fmt.Errorf("Cannot show site versions: %w", err).Error()))),
		If(len(versions) > 0 && err == nil, Group{
			Div(
				Class("versions-table"),
				Group{
					Span(
						Class("header date"),
						Text("Date"),
					),
					Span(
						Class("header actions"),
						Text("Actions"),
					),
				},

				Map(versions, func(version string) Node {
					return Group{
						Span(
							Class("date"),
							Span(Text(version)),
							If(currentVersion == version, Span(Class("current"), Text("current"))),
						),
						Span(
							Class("actions"),
							If(currentVersion != version, navButton("Set current", fmt.Sprintf("/site/%s/", site.Name))),
							navButton("Details", fmt.Sprintf("version/%s/", version)),
						),
					}
				}),
			),
		}),

		H2(Text("Information")),

		P(Text("API endpoint for new versions: "), Code(Text(fmt.Sprintf("POST https://%s/api/site/%s/upload", mainConfig.Command.Host, site.Name)))),

		P(Text("Data directory on system: "), Code(Text(site.Path))),

		navButton("Go back", "/"),
	)
}