From af2112bdde3baac49fc11a9853587f9033debe95 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 18:27:12 +0900 Subject: [PATCH 01/92] wip: rework gnoweb Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- contribs/gnodev/cmd/gnodev/setup_web.go | 85 +++- contribs/gnodev/go.mod | 6 +- contribs/gnodev/go.sum | 20 +- gno.land/Makefile | 8 +- gno.land/cmd/gnoweb2/main.go | 165 ++++++++ gno.land/pkg/gnoweb2/.gitignore | 2 + gno.land/pkg/gnoweb2/Makefile | 113 ++++++ gno.land/pkg/gnoweb2/alias.go | 47 +++ gno.land/pkg/gnoweb2/app.go | 88 +++++ gno.land/pkg/gnoweb2/components/breadcrumb.go | 18 + .../pkg/gnoweb2/components/breadcrumb.gohtml | 12 + gno.land/pkg/gnoweb2/components/help.go | 40 ++ gno.land/pkg/gnoweb2/components/help.gohtml | 113 ++++++ gno.land/pkg/gnoweb2/components/index.go | 42 ++ gno.land/pkg/gnoweb2/components/index.gohtml | 148 +++++++ .../pkg/gnoweb2/components/logosvg.gohtml | 21 + gno.land/pkg/gnoweb2/components/realm.go | 32 ++ gno.land/pkg/gnoweb2/components/realm.gohtml | 47 +++ gno.land/pkg/gnoweb2/components/source.go | 19 + gno.land/pkg/gnoweb2/components/source.gohtml | 68 ++++ .../pkg/gnoweb2/components/spritesvg.gohtml | 131 ++++++ gno.land/pkg/gnoweb2/components/status.gohtml | 5 + gno.land/pkg/gnoweb2/components/template.go | 129 ++++++ gno.land/pkg/gnoweb2/components/util.gohtml | 9 + gno.land/pkg/gnoweb2/frontend/css/input.css | 335 ++++++++++++++++ .../pkg/gnoweb2/frontend/css/tx.config.js | 78 ++++ gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts | 100 +++++ gno.land/pkg/gnoweb2/frontend/js/searchbar.ts | 62 +++ .../static/fonts/intervar/Inter.var.woff2 | Bin 0 -> 324864 bytes .../fonts/roboto/roboto-mono-normal.woff | Bin 0 -> 15832 bytes .../fonts/roboto/roboto-mono-normal.woff2 | Bin 0 -> 12764 bytes .../gnoweb2/frontend/static/imgs/gnoland.svg | 4 + .../gnoweb2/frontend/static/js/realmhelp.js | 71 ++++ gno.land/pkg/gnoweb2/handler.go | 373 ++++++++++++++++++ .../public/fonts/intervar/Inter.var.woff2 | Bin 0 -> 324864 bytes .../fonts/roboto/roboto-mono-normal.woff | Bin 0 -> 15832 bytes .../fonts/roboto/roboto-mono-normal.woff2 | Bin 0 -> 12764 bytes gno.land/pkg/gnoweb2/public/imgs/gnoland.svg | 4 + gno.land/pkg/gnoweb2/public/js/realmhelp.js | 1 + gno.land/pkg/gnoweb2/public/js/searchbar.js | 1 + gno.land/pkg/gnoweb2/public/styles.css | 3 + gno.land/pkg/gnoweb2/static.go | 25 ++ .../pkg/gnoweb2/tools/cmd/logname/colors.go | 60 +++ .../pkg/gnoweb2/tools/cmd/logname/main.go | 41 ++ gno.land/pkg/gnoweb2/tools/go.mod | 60 +++ gno.land/pkg/gnoweb2/tools/go.sum | 336 ++++++++++++++++ gno.land/pkg/gnoweb2/tools/tools.go | 7 + gno.land/pkg/gnoweb2/url.go | 139 +++++++ gno.land/pkg/gnoweb2/url_test.go | 129 ++++++ gno.land/pkg/markdown/ext_column.go | 287 ++++++++++++++ gno.land/pkg/markdown/ext_column_test.go | 158 ++++++++ gno.land/pkg/markdown/ext_render.go | 23 ++ gno.land/pkg/markdown/flags_test.go | 5 + gno.land/pkg/markdown/nohtml.go | 195 +++++++++ .../testdata/column_simple_basic.golden | 8 + .../testdata/column_simple_left.golden | 8 + .../testdata/column_simple_middle.golden | 8 + .../testdata/column_simple_right.golden | 8 + gno.land/pkg/markdown/toc.go | 137 +++++++ gno.land/pkg/service/render.go | 141 +++++++ go.mod | 4 + go.sum | 15 + 62 files changed, 4166 insertions(+), 28 deletions(-) create mode 100644 gno.land/cmd/gnoweb2/main.go create mode 100644 gno.land/pkg/gnoweb2/.gitignore create mode 100644 gno.land/pkg/gnoweb2/Makefile create mode 100644 gno.land/pkg/gnoweb2/alias.go create mode 100644 gno.land/pkg/gnoweb2/app.go create mode 100644 gno.land/pkg/gnoweb2/components/breadcrumb.go create mode 100644 gno.land/pkg/gnoweb2/components/breadcrumb.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/help.go create mode 100644 gno.land/pkg/gnoweb2/components/help.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/index.go create mode 100644 gno.land/pkg/gnoweb2/components/index.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/logosvg.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/realm.go create mode 100644 gno.land/pkg/gnoweb2/components/realm.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/source.go create mode 100644 gno.land/pkg/gnoweb2/components/source.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/spritesvg.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/status.gohtml create mode 100644 gno.land/pkg/gnoweb2/components/template.go create mode 100644 gno.land/pkg/gnoweb2/components/util.gohtml create mode 100644 gno.land/pkg/gnoweb2/frontend/css/input.css create mode 100644 gno.land/pkg/gnoweb2/frontend/css/tx.config.js create mode 100644 gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts create mode 100644 gno.land/pkg/gnoweb2/frontend/js/searchbar.ts create mode 100644 gno.land/pkg/gnoweb2/frontend/static/fonts/intervar/Inter.var.woff2 create mode 100644 gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff create mode 100644 gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff2 create mode 100644 gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg create mode 100644 gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js create mode 100644 gno.land/pkg/gnoweb2/handler.go create mode 100644 gno.land/pkg/gnoweb2/public/fonts/intervar/Inter.var.woff2 create mode 100644 gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff create mode 100644 gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff2 create mode 100644 gno.land/pkg/gnoweb2/public/imgs/gnoland.svg create mode 100644 gno.land/pkg/gnoweb2/public/js/realmhelp.js create mode 100644 gno.land/pkg/gnoweb2/public/js/searchbar.js create mode 100644 gno.land/pkg/gnoweb2/public/styles.css create mode 100644 gno.land/pkg/gnoweb2/static.go create mode 100644 gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go create mode 100644 gno.land/pkg/gnoweb2/tools/cmd/logname/main.go create mode 100644 gno.land/pkg/gnoweb2/tools/go.mod create mode 100644 gno.land/pkg/gnoweb2/tools/go.sum create mode 100644 gno.land/pkg/gnoweb2/tools/tools.go create mode 100644 gno.land/pkg/gnoweb2/url.go create mode 100644 gno.land/pkg/gnoweb2/url_test.go create mode 100644 gno.land/pkg/markdown/ext_column.go create mode 100644 gno.land/pkg/markdown/ext_column_test.go create mode 100644 gno.land/pkg/markdown/ext_render.go create mode 100644 gno.land/pkg/markdown/flags_test.go create mode 100644 gno.land/pkg/markdown/nohtml.go create mode 100644 gno.land/pkg/markdown/testdata/column_simple_basic.golden create mode 100644 gno.land/pkg/markdown/testdata/column_simple_left.golden create mode 100644 gno.land/pkg/markdown/testdata/column_simple_middle.golden create mode 100644 gno.land/pkg/markdown/testdata/column_simple_right.golden create mode 100644 gno.land/pkg/markdown/toc.go create mode 100644 gno.land/pkg/service/render.go diff --git a/contribs/gnodev/cmd/gnodev/setup_web.go b/contribs/gnodev/cmd/gnodev/setup_web.go index 635c27af19d..765314ca245 100644 --- a/contribs/gnodev/cmd/gnodev/setup_web.go +++ b/contribs/gnodev/cmd/gnodev/setup_web.go @@ -1,26 +1,89 @@ package main import ( + "context" + "fmt" "log/slog" "net/http" gnodev "github.com/gnolang/gno/contribs/gnodev/pkg/dev" - "github.com/gnolang/gno/gno.land/pkg/gnoweb" + "github.com/gnolang/gno/gno.land/pkg/gnoclient" + gnoweb "github.com/gnolang/gno/gno.land/pkg/gnoweb2" + "github.com/gnolang/gno/gno.land/pkg/service" + "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" + "github.com/yuin/goldmark" ) +func makeWebApp(logger *slog.Logger, cfg *devCfg, dnode *gnodev.Node) error { + + // bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) + // if err != nil { + // return fmt.Errorf("unable to resolve listener: %q", cfg.bind) + // } + + // logger.Info("Running", "listener", bindaddr.String()) + + // server := &http.Server{ + // Handler: mux, + // Addr: bindaddr.String(), + // ReadHeaderTimeout: 60 * time.Second, + // } + + // if err := server.ListenAndServe(); err != nil { + // logger.Error("HTTP server stopped", " error:", err) + // os.Exit(1) + // } + +} + // setupGnowebServer initializes and starts the Gnoweb server. -func setupGnoWebServer(logger *slog.Logger, cfg *devCfg, dnode *gnodev.Node) http.Handler { - webConfig := gnoweb.NewDefaultConfig() +func setupGnoWebServer(logger *slog.Logger, cfg *devCfg, dnode *gnodev.Node) (http.Handler, error) { + remote := dnode.GetRemoteAddress() - webConfig.HelpChainID = cfg.chainId - webConfig.RemoteAddr = dnode.GetRemoteAddress() - webConfig.HelpRemote = cfg.webRemoteHelperAddr + md := goldmark.New() + + client, err := client.NewHTTPClient(remote) + if err != nil { + return nil, fmt.Errorf("unable to create http client: %W", err) + } - // If `HelpRemote` is empty default it to `RemoteAddr` - if webConfig.HelpRemote == "" { - webConfig.HelpRemote = webConfig.RemoteAddr + mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" + bip39Passphrase := "" + account, index := uint32(0), uint32(0) + chainID := cfg.chainId + signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) + if err != nil { + return nil, fmt.Errorf("unable to create signer: %w", err) } - app := gnoweb.MakeApp(logger, webConfig) - return app.Router + // Setup webservice + cl := gnoclient.Client{ + Signer: signer, + RPCClient: client, + } + webcli := service.NewWebRender(logger, &cl, md) + + var webConfig gnoweb.WebHandlerConfig + + webConfig.RenderClient = webcli + + // static meta + // webConfig.Meta.AssetsPath = // XXX + webConfig.Meta.RemoteHelp = cfg.webRemoteHelperAddr + webConfig.Meta.ChaindID = cfg.chainId + + // Setup main handler + webhandler := gnoweb.NewWebHandler( + context.TODO(), // XXX + logger, + webConfig, + ) + + mux := http.NewServeMux() + mux.Handle(webConfig.Meta.AssetsPath, gnoweb.AssetHandler()) + + // Setup Alias Middleware + mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) + + return mux, nil } diff --git a/contribs/gnodev/go.mod b/contribs/gnodev/go.mod index a315d88591c..216f610af33 100644 --- a/contribs/gnodev/go.mod +++ b/contribs/gnodev/go.mod @@ -27,7 +27,7 @@ require ( require ( dario.cat/mergo v1.0.1 // indirect - github.com/alecthomas/chroma/v2 v2.8.0 // indirect + github.com/alecthomas/chroma/v2 v2.14.0 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/atotto/clipboard v0.1.4 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect @@ -48,7 +48,7 @@ require ( github.com/creack/pty v1.1.21 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect - github.com/dlclark/regexp2 v1.4.0 // indirect + github.com/dlclark/regexp2 v1.11.0 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/gnolang/overflow v0.0.0-20170615021017-4d914c927216 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -82,7 +82,7 @@ require ( github.com/rs/xid v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - github.com/yuin/goldmark v1.5.4 // indirect + github.com/yuin/goldmark v1.7.2 // indirect github.com/yuin/goldmark-emoji v1.0.2 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect diff --git a/contribs/gnodev/go.sum b/contribs/gnodev/go.sum index e38c3621483..98838234a4f 100644 --- a/contribs/gnodev/go.sum +++ b/contribs/gnodev/go.sum @@ -1,12 +1,12 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/alecthomas/assert/v2 v2.2.1 h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink= -github.com/alecthomas/assert/v2 v2.2.1/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= -github.com/alecthomas/chroma/v2 v2.8.0 h1:w9WJUjFFmHHB2e8mRpL9jjy3alYDlU0QLDezj1xE264= -github.com/alecthomas/chroma/v2 v2.8.0/go.mod h1:yrkMI9807G1ROx13fhe1v6PN2DDeaR73L3d+1nmYQtw= -github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= -github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= +github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= +github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= @@ -91,8 +91,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= -github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= +github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -235,8 +235,8 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.3.7/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.5.4 h1:2uY/xC0roWy8IBEGLgB1ywIoEJFGmRrX21YQcvGZzjU= -github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.2 h1:NjGd7lO7zrUn/A7eKwn5PEOt4ONYGqpxSEeZuduvgxc= +github.com/yuin/goldmark v1.7.2/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-emoji v1.0.2 h1:c/RgTShNgHTtc6xdz2KKI74jJr6rWi7FPgnP9GAsO5s= github.com/yuin/goldmark-emoji v1.0.2/go.mod h1:RhP/RWpexdp+KHs7ghKnifRoIs/Bq4nDS7tRbCkOwKY= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= diff --git a/gno.land/Makefile b/gno.land/Makefile index 7b2afd5779f..263e9c0b9de 100644 --- a/gno.land/Makefile +++ b/gno.land/Makefile @@ -28,23 +28,23 @@ GOTEST_FLAGS ?= -v -p 1 -timeout=30m start.gnoland:; go run ./cmd/gnoland start -lazy .PHONY: start.gnoweb -start.gnoweb:; go run ./cmd/gnoweb +start.gnoweb:; go run ./cmd/gnoweb2 .PHONY: build build: build.gnoland build.gnokey build.gnoweb build.gnoland:; go build -o build/gnoland ./cmd/gnoland -build.gnoweb:; go build -o build/gnoweb ./cmd/gnoweb +build.gnoweb:; go build -o build/gnoweb2 ./cmd/gnoweb build.gnokey:; go build -o build/gnokey ./cmd/gnokey run.gnoland:; go run ./cmd/gnoland start -run.gnoweb:; go run ./cmd/gnoweb +run.gnoweb:; go run ./cmd/gnoweb2 .PHONY: install install: install.gnoland install.gnoweb install.gnokey install.gnoland:; go install ./cmd/gnoland -install.gnoweb:; go install ./cmd/gnoweb +install.gnoweb:; go install ./cmd/gnoweb2 install.gnokey:; go install ./cmd/gnokey .PHONY: fclean diff --git a/gno.land/cmd/gnoweb2/main.go b/gno.land/cmd/gnoweb2/main.go new file mode 100644 index 00000000000..5396475ce6e --- /dev/null +++ b/gno.land/cmd/gnoweb2/main.go @@ -0,0 +1,165 @@ +package main + +import ( + "context" + "flag" + "fmt" + "net" + "net/http" + "os" + "strings" + "time" + + "github.com/gnolang/gno/gno.land/pkg/gnoclient" + gnoweb "github.com/gnolang/gno/gno.land/pkg/gnoweb2" + "github.com/gnolang/gno/gno.land/pkg/log" + "github.com/gnolang/gno/gno.land/pkg/service" + "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" + "github.com/gnolang/gno/tm2/pkg/commands" + "github.com/yuin/goldmark" + "go.uber.org/zap/zapcore" +) + +type webCfg struct { + chainid string + remote string + bind string +} + +var defaultWebOptions = &webCfg{ + chainid: "dev", + remote: "127.0.0.1:26657", + bind: ":8888", +} + +func main() { + cfg := &webCfg{} + + stdio := commands.NewDefaultIO() + cmd := commands.NewCommand( + commands.Metadata{ + Name: "gnoweb", + ShortUsage: "gnoweb [flags] [path ...]", + ShortHelp: "runs gno.land web interface", + LongHelp: `gnoweb web interface`, + }, + cfg, + func(_ context.Context, args []string) error { + return execWeb(cfg, args, stdio) + }) + + cmd.Execute(context.Background(), os.Args[1:]) +} + +func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { + fs.StringVar( + &c.remote, + "remote", + defaultWebOptions.remote, + "user's local directory for keys", + ) + + fs.StringVar( + &c.chainid, + "chainid", + defaultWebOptions.chainid, + "user's local directory for keys", + ) + + fs.StringVar( + &c.bind, + "bind", + defaultWebOptions.bind, + "user's local directory for keys", + ) + +} + +func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { + zapLogger := log.NewZapConsoleLogger(os.Stdout, zapcore.DebugLevel) + defer zapLogger.Sync() + + // Setup logger + logger := log.ZapLoggerToSlog(zapLogger) + + md := goldmark.New() + + staticMeta := gnoweb.StaticMetadata{ + AssetsPath: "/public/", + RemoteHelp: cfg.remote, + } + + mux := http.NewServeMux() + + // Setup asset handler + // if cfg.dev { + // mux.Handle(staticMeta.AssetsPath, AssetDevHandler()) + // } else { + mux.Handle(staticMeta.AssetsPath, gnoweb.AssetHandler()) + // } + + client, err := client.NewHTTPClient(cfg.remote) + if err != nil { + return fmt.Errorf("unable to create http client: %W", err) + } + + mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" + bip39Passphrase := "" + account, index := uint32(0), uint32(0) + chainID := cfg.chainid + signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) + if err != nil { + return fmt.Errorf("unable to create signer: %w", err) + } + + // Setup webservice + cl := gnoclient.Client{ + Signer: signer, + RPCClient: client, + } + webcli := service.NewWebRender(logger, &cl, md) + + if len(args) > 0 { + var qargs string + if len(args) > 1 { + qargs = strings.Join(args[1:], ",") + } + + _, err = webcli.Render(io.Out(), args[0], qargs) + return + } + + webcfg := gnoweb.WebHandlerConfig{ + RenderClient: webcli, + Meta: staticMeta, + } + + // Setup main handler + webhandler := gnoweb.NewWebHandler( + logger, + webcfg, + ) + + // Setup Alias Middleware + mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) + + bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) + if err != nil { + return fmt.Errorf("unable to resolve listener: %q", cfg.bind) + } + + logger.Info("Running", "listener", bindaddr.String()) + + server := &http.Server{ + Handler: mux, + Addr: bindaddr.String(), + ReadHeaderTimeout: 60 * time.Second, + } + + if err := server.ListenAndServe(); err != nil { + logger.Error("HTTP server stopped", " error:", err) + os.Exit(1) + } + + return nil +} diff --git a/gno.land/pkg/gnoweb2/.gitignore b/gno.land/pkg/gnoweb2/.gitignore new file mode 100644 index 00000000000..92b2c45a1b2 --- /dev/null +++ b/gno.land/pkg/gnoweb2/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +tmp/ diff --git a/gno.land/pkg/gnoweb2/Makefile b/gno.land/pkg/gnoweb2/Makefile new file mode 100644 index 00000000000..129b54a4e54 --- /dev/null +++ b/gno.land/pkg/gnoweb2/Makefile @@ -0,0 +1,113 @@ +# configurable arguments +DEV_REMOTE ?= 127.0.0.1:26657 +CHAINID ?= test3 + +# Variable Declarations +COMPONENTS_FOLDER := ./components + +tools_run := go run -modfile ./tools/go.mod +tools_install := go install -modfile ./tools/go.mod + +run_air := $(tools_run) github.com/air-verse/air + +run_logname := go -C ./tools run ./cmd/logname + +# css config +input_css := ./frontend/css/input.css +output_css := ./public/styles.css +tw_version := 3.4.14 +tw_config_path := ./frontend/css/tx.config.js + +# static config +static_folder := ./frontend/static +output_statics := ./public + +# Esbuild config +input_js := ./frontend/js/**/*.ts +output_js := ./public/js + +############# +# Targets +############# +.PHONY: all generate fmt css ts templ + +# Install dependencies +all: generate + +install: generate + go install -v . + +# Generate process +generate: clean css ts fonts +css: + npx tailwindcss@$(tw_version) -c $(tw_config_path) -i $(input_css) -o $(output_css) --minify # tailwind +ts: + npx -y esbuild $(input_js) --bundle --outdir=$(output_js) --format=esm --minify +fonts: + mkdir -p $(output_statics) + cp -r $(static_folder)/* $(output_statics) + +# Format process +fmt: + go fmt ./... + $(run_templ) fmt $(COMPONENTS_FOLDER) + + ############################### + # Developments + ############################### +.PHONY: dev dev.templ dev.server dev.css dev.ts deps + +# Run the development dependencies in parallel +dev: + @echo "-- starting development tools" + @$(MAKE) -j 4 \ + dev.gnoweb \ + dev.fonts \ + dev.ts \ + dev.css + +# Go server in development mode +dev.gnoweb: | .cache + @killall gnowebserve || true # make sure that previous instances as been kill + $(run_air) \ + --build.cmd "go build -o .cache/gnowebserve ." \ + --build.bin ".cache/gnowebserve -dev -chain-id=${CHAIN_ID} -remote=${DEV_REMOTE}" \ + --build.exclude_unchanged "true" \ + --build.exclude_dir "gotools,node_modules" \ + --build.exclude_regex '^\.#' \ + --build.include_ext "go,gohtml" \ + --build.stop_on_error "false" \ + --build.rerun_delay "1000" \ + 2>&1 | $(run_logname) gnoweb + +# Tailwind CSS in development mode +dev.css: | public + npx tailwindcss@$(tw_version) -c $(tw_config_path) --verbose -i $(input_css) -o $(output_css) --watch \ + 2>&1 | $(run_logname) tailwind + +# TS in development mode +dev.ts: | public + npx -y esbuild $(input_js) \ + --bundle \ + --outdir=$(output_js) \ + --format=esm \ + --watch \ + --minify + +dev.fonts: + mkdir -p $(output_statics) + cp -r $(static_folder)/* $(output_statics) + +# Install deps for development purpose +deps: + $(tools_install) github.com/a-h/templ/cmd/templ + +# Cleanup +clean: + rm -rf public tmp +fclean: clean + rm -rf node_modules .cache + +# Dirs +.cache:; mkdir -p $@ +public:; mkdir -p $@ diff --git a/gno.land/pkg/gnoweb2/alias.go b/gno.land/pkg/gnoweb2/alias.go new file mode 100644 index 00000000000..5054b639d4a --- /dev/null +++ b/gno.land/pkg/gnoweb2/alias.go @@ -0,0 +1,47 @@ +package gnoweb + +import "net/http" + +// realm aliases +var Aliases = map[string]string{ + "/": "/r/gnoland/home", + "/about": "/r/gnoland/pages:p/about", + "/gnolang": "/r/gnoland/pages:p/gnolang", + "/ecosystem": "/r/gnoland/pages:p/ecosystem", + "/partners": "/r/gnoland/pages:p/partners", + "/testnets": "/r/gnoland/pages:p/testnets", + "/start": "/r/gnoland/pages:p/start", + "/license": "/r/gnoland/pages:p/license", + "/contribute": "/r/gnoland/pages:p/contribute", + "/events": "/r/gnoland/events", +} + +// http redirects +var Redirects = map[string]string{ + "/r/demo/boards:gnolang/6": "/r/demo/boards:gnolang/3", // XXX: temporary + "/blog": "/r/gnoland/blog", + "/gor": "/contribute", + "/game-of-realms": "/contribute", + "/grants": "/partners", + "/language": "/gnolang", + "/getting-started": "/start", + "/gophercon24": "https://docs.gno.land", +} + +func AliasAndRedirectMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Check if the request path matches an alias + if newPath, ok := Aliases[r.URL.Path]; ok { + r.URL.Path = newPath + } + + // Check if the request path matches a redirect + if newPath, ok := Redirects[r.URL.Path]; ok { + http.Redirect(w, r, newPath, http.StatusFound) + return + } + + // Call the next handler + next.ServeHTTP(w, r) + }) +} diff --git a/gno.land/pkg/gnoweb2/app.go b/gno.land/pkg/gnoweb2/app.go new file mode 100644 index 00000000000..6dcbd7b952e --- /dev/null +++ b/gno.land/pkg/gnoweb2/app.go @@ -0,0 +1,88 @@ +package gnoweb + +import ( + "fmt" + "log/slog" + "net/http" + + "github.com/gnolang/gno/gno.land/pkg/gnoclient" + "github.com/gnolang/gno/gno.land/pkg/service" + "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" + "github.com/yuin/goldmark" +) + +type AppConfig struct { + Remote string + RemoteHelp string + ChainID string + AssetsPath string +} + +func NewDefaultAppConfig() *AppConfig { + const defaultRemote = "127.0.0.1:26657" + + return &AppConfig{ + Remote: defaultRemote, RemoteHelp: defaultRemote, // same as `Remote` by default + ChainID: "dev", + AssetsPath: "public", + } +} + +type App struct { + mux *http.ServeMux + handler WebHandler +} + +func (a *App) Router(w http.ResponseWriter, r *http.Request) { + a.mux.ServeHTTP(w, r) +} + +func MakeApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { + md := goldmark.New() + + client, err := client.NewHTTPClient(cfg.Remote) + if err != nil { + return nil, fmt.Errorf("unable to create http client: %W", err) + } + + signer, err := generateWebSigner(cfg.ChainID) + if err != nil { + return nil, fmt.Errorf("unable to generate web signer: %w", err) + } + + // Setup webservice + cl := gnoclient.Client{ + Signer: signer, + RPCClient: client, + } + webcli := service.NewWebRender(logger, &cl, md) + + var webConfig WebHandlerConfig + + webConfig.RenderClient = webcli + + // static meta + webConfig.Meta.AssetsPath = cfg.AssetsPath + webConfig.Meta.RemoteHelp = cfg.RemoteHelp + webConfig.Meta.ChaindID = cfg.ChainID + + // Setup main handler + webhandler := NewWebHandler(logger, webConfig) + + mux := http.NewServeMux() + + // Setup Alias Middleware + mux.Handle("/", AliasAndRedirectMiddleware(webhandler)) + + // Setup asset path + mux.Handle(cfg.AssetsPath, AssetHandler()) + + return mux, nil +} + +func generateWebSigner(chainid string) (gnoclient.Signer, error) { + mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" + bip39Passphrase := "" + account, index := uint32(0), uint32(0) + return gnoclient.SignerFromBip39(mnemo, chainid, bip39Passphrase, account, index) +} diff --git a/gno.land/pkg/gnoweb2/components/breadcrumb.go b/gno.land/pkg/gnoweb2/components/breadcrumb.go new file mode 100644 index 00000000000..9e7a97b2fae --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/breadcrumb.go @@ -0,0 +1,18 @@ +package components + +import ( + "io" +) + +type BreadcrumbPart struct { + Name string + Path string +} + +type BreadcrumbData struct { + Parts []BreadcrumbPart +} + +func RenderBreadcrumpComponent(w io.Writer, data BreadcrumbData) error { + return tmpl.ExecuteTemplate(w, "Breadcrumb", data) +} diff --git a/gno.land/pkg/gnoweb2/components/breadcrumb.gohtml b/gno.land/pkg/gnoweb2/components/breadcrumb.gohtml new file mode 100644 index 00000000000..39b81f339c0 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/breadcrumb.gohtml @@ -0,0 +1,12 @@ +{{ define "breadcrumb" }} +
    + {{- range $index, $part := .Parts }} + {{- if $index }} +
  1. + {{- else }} +
  2. + {{- end }} + {{ $part.Name }}
  3. + {{- end }} +
+{{ end }} \ No newline at end of file diff --git a/gno.land/pkg/gnoweb2/components/help.go b/gno.land/pkg/gnoweb2/components/help.go new file mode 100644 index 00000000000..7f6fa248a73 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/help.go @@ -0,0 +1,40 @@ +package components + +import ( + "html/template" + "io" + "strings" + + "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types +) + +type HelpData struct { + RealmName string + Functions []vm.FunctionSignature + ChainId string + Remote string + PkgPath string +} + +func registerHelpFuncs(funcs template.FuncMap) { + funcs["helpFuncSignature"] = func(fsig vm.FunctionSignature) (string, error) { + var fsigStr strings.Builder + + fsigStr.WriteString(fsig.FuncName) + fsigStr.WriteRune('(') + for i, param := range fsig.Params { + if i > 0 { + fsigStr.WriteString(", ") + } + fsigStr.WriteString(param.Name) + } + fsigStr.WriteRune(')') + + return fsigStr.String(), nil + } +} + + +func RenderHelpComponent(w io.Writer, data HelpData) error { + return tmpl.ExecuteTemplate(w, "renderHelp", data) +} diff --git a/gno.land/pkg/gnoweb2/components/help.gohtml b/gno.land/pkg/gnoweb2/components/help.gohtml new file mode 100644 index 00000000000..49726eb2505 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/help.gohtml @@ -0,0 +1,113 @@ +{{ define "renderHelp" }} +
+
+ + +
+
+
+

{{ .RealmName }}

+
+
+ +
+ +
+ +
+ + +
+
+
+ + + {{ range .Functions }} + +
+

{{ .FuncName }}

+
+
+

Params

+ +
+ {{ $funcName := .FuncName }} + {{ range .Params }} +
+
+ + +
+
+ {{ end }} +
+
+
+ +
+

Command

+
+ +
gnokey maketx call -pkgpath "{{ $.PkgPath }}" -func "{{ .FuncName }}" -gas-fee 1000000ugnot -gas-wanted 2000000 -send "" -broadcast -chainid "{{ $.ChainId }}"{{ range .Params }} -args ""{{ end }} -remote "{{ $.Remote }}" ADDRESS
+
+
+
+ {{ end }} + + +
+
+
+ +{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/index.go b/gno.land/pkg/gnoweb2/components/index.go new file mode 100644 index 00000000000..782f99e9160 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/index.go @@ -0,0 +1,42 @@ +package components + +import ( + "context" + "html/template" + "io" + "net/url" +) + +type HeadData struct { + Title string + Description string + Canonical string + Image string + URL string + AdditionalLinks []struct { + Rel string + Href string + } +} + +type HeaderData struct { + RealmPath string + Breadcrumb BreadcrumbData + WebQuery url.Values +} + +type IndexData struct { + HeadData + HeaderData + Body template.HTML +} + +func IndexComponent(data IndexData) Component { + return func(ctx context.Context, tmpl *template.Template, w io.Writer) error { + return tmpl.ExecuteTemplate(w, "index", data) + } +} + +func RenderIndexComponent(w io.Writer, data IndexData) error { + return tmpl.ExecuteTemplate(w, "index", data) +} diff --git a/gno.land/pkg/gnoweb2/components/index.gohtml b/gno.land/pkg/gnoweb2/components/index.gohtml new file mode 100644 index 00000000000..c54e6f4d7e3 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/index.gohtml @@ -0,0 +1,148 @@ +{{ define "index" }} + + {{ template "head" .HeadData }} + + {{ template "spritesvg" }} + + + {{ template "header" .HeaderData }} + + + {{ template "main" .Body }} + + + {{ template "footer" }} + + +{{ end }} + +{{ define "head" }} + + + + {{ .Title }} + + + + + + {{ if .Canonical }} + + {{ end }} + + + + + + + + + + + + + + + + + + + + + + + + + + +{{ end }} + +{{ define "header" }} +
+ +
+{{ end }} + +{{ define "main" }} + {{ . }} +{{ end }} + +{{ define "footer" }} + + +{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/logosvg.gohtml b/gno.land/pkg/gnoweb2/components/logosvg.gohtml new file mode 100644 index 00000000000..5ebe6460ee3 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/logosvg.gohtml @@ -0,0 +1,21 @@ +{{ define "logosvg" }} + + + + + + + + + + + + + + + + + + + +{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/realm.go b/gno.land/pkg/gnoweb2/components/realm.go new file mode 100644 index 00000000000..6b40cab07fd --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/realm.go @@ -0,0 +1,32 @@ +package components + +import ( + "context" + "html/template" + "io" + + "github.com/gnolang/gno/gno.land/pkg/markdown" +) + +type RealmTOCData struct { + Items []*markdown.TocItem +} + +func RealmTOCComponent(data *RealmTOCData) Component { + return func(ctx context.Context, tmpl *template.Template, w io.Writer) error { + return tmpl.ExecuteTemplate(w, "renderRealmToc", data) + } +} + +func RenderRealmTOCComponent(w io.Writer, data *RealmTOCData) error { + return tmpl.ExecuteTemplate(w, "renderRealmToc", data) +} + +type RealmData struct { + Content template.HTML + TocItems *RealmTOCData +} + +func RenderRealmComponent(w io.Writer, data RealmData) error { + return tmpl.ExecuteTemplate(w, "renderRealm", data) +} diff --git a/gno.land/pkg/gnoweb2/components/realm.gohtml b/gno.land/pkg/gnoweb2/components/realm.gohtml new file mode 100644 index 00000000000..c05edb48944 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/realm.gohtml @@ -0,0 +1,47 @@ +{{ define "renderRealmToc" }} + +{{ end }} + +{{ define "renderRealm" }} +
+
+ +
+ + {{ .Content }} +
+
+
+{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/source.go b/gno.land/pkg/gnoweb2/components/source.go new file mode 100644 index 00000000000..8478d4cb8d1 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/source.go @@ -0,0 +1,19 @@ +package components + +import ( + "html/template" + "io" +) + +type SourceData struct { + PkgPath string + Files []string + FileName string + FileSize float32 + FileLines int + FileSource template.HTML +} + +func RenderSourceComponent(w io.Writer, data SourceData) error { + return tmpl.ExecuteTemplate(w, "renderSource", data) +} diff --git a/gno.land/pkg/gnoweb2/components/source.gohtml b/gno.land/pkg/gnoweb2/components/source.gohtml new file mode 100644 index 00000000000..cdfa8af09d4 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/source.gohtml @@ -0,0 +1,68 @@ +{{ define "renderSource" }} +
+
+ + +
+
+
+

{{ .FileName }}

+ +
+ +
+ + +
+ {{ .FileSource }} +
+
+
+ +{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/spritesvg.gohtml b/gno.land/pkg/gnoweb2/components/spritesvg.gohtml new file mode 100644 index 00000000000..5c1b77fb1a7 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/spritesvg.gohtml @@ -0,0 +1,131 @@ +{{ define "spritesvg" }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/status.gohtml b/gno.land/pkg/gnoweb2/components/status.gohtml new file mode 100644 index 00000000000..3995287f7f7 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/status.gohtml @@ -0,0 +1,5 @@ +{{ define "status" }} +
+ {{ .Message }} +
+{{ end }} diff --git a/gno.land/pkg/gnoweb2/components/template.go b/gno.land/pkg/gnoweb2/components/template.go new file mode 100644 index 00000000000..05abf559460 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/template.go @@ -0,0 +1,129 @@ +package components + +import ( + "bytes" + "context" + "embed" + "html/template" + "io" + "net/url" +) + +//go:embed *.gohtml +var gohtml embed.FS + +var funcMap = template.FuncMap{ + "noescape_string": func(in string) template.HTML { + return template.HTML(in) + }, + "noescape_bytes": func(in []byte) template.HTML { + return template.HTML(in) + }, + "queryHas": func(vals url.Values, key string) bool { + if vals == nil { + return false + } + + return vals.Has(key) + }, +} + +var tmpl = template.New("web").Funcs(funcMap) + +func init() { + registerHelpFuncs(funcMap) + tmpl.Funcs(funcMap) + + var err error + tmpl, err = tmpl.ParseFS(gohtml, "*.gohtml") + if err != nil { + panic("unable to parse embed tempalates: " + err.Error()) + } +} + +type Component func(ctx context.Context, tmpl *template.Template, w io.Writer) error + +func (c Component) Render(ctx context.Context, w io.Writer) error { + return RenderComponent(ctx, w, c) +} + +func RenderComponent(ctx context.Context, w io.Writer, c Component) error { + var render *template.Template + funcmap := template.FuncMap{ + "render": func(cf Component) (string, error) { + var buf bytes.Buffer + if err := cf(ctx, render, &buf); err != nil { + return "", err + } + + return buf.String(), nil + }, + } + + render = tmpl.Funcs(funcmap) + return c(ctx, render, w) +} + +type StatusData struct { + Message string +} + +func RenderStatusComponent(w io.Writer, message string) error { + return tmpl.ExecuteTemplate(w, "status", StatusData{ + Message: message, + }) +} + + + +// func (c *ComponentsTemplate) ExecuteTemplate(ctx context.Context, wr io.Writer, name string, data any) { +// c.Template.Funcs(RenderFunc(ctx)).ExecuteTemplate(wr, name, data) +// } + +// func Templates() (tmpl *template.Template) { +// return tmpl +// } + +// type Slot struct { +// ID string +// Html string +// } + +// func StreamShadowRoot(w http.ResponseWriter, ss <-chan Slot) error { +// w.(http.Flusher).Flush() +// for slot := range ss { +// if err := tmpl.ExecuteTemplate(w, "slot", nil); err != nil { +// return fmt.Errorf("unable to execute slot template: %w", err) +// } +// } +// } + +// func templateMain() { +// tmpl, err := template.ParseFS(gohtml, "*.gohtml") +// if err != nil { +// panic(err) +// } + +// http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { +// data := struct { +// Meta PageMetadata +// Body template.HTML +// }{ +// Meta: PageMetadata{ +// Title: "My Page Title", +// Description: "A short description of my page.", +// Canonical: "http://example.com", +// Image: "http://example.com/image.jpg", +// URL: "http://example.com", +// }, +// Body: template.HTML("

This is the main content of the page.

"), +// } + +// err := tmpl.ExecuteTemplate(w, "index", data) +// if err != nil { +// http.Error(w, err.Error(), http.StatusInternalServerError) +// } +// }) + +// http.ListenAndServe(":8080", nil) +// } diff --git a/gno.land/pkg/gnoweb2/components/util.gohtml b/gno.land/pkg/gnoweb2/components/util.gohtml new file mode 100644 index 00000000000..269791c29a4 --- /dev/null +++ b/gno.land/pkg/gnoweb2/components/util.gohtml @@ -0,0 +1,9 @@ +{{ define "slot" }} +{{.Html}} +{{end}} + +{{define "tail"}} + + + +{{ end }} diff --git a/gno.land/pkg/gnoweb2/frontend/css/input.css b/gno.land/pkg/gnoweb2/frontend/css/input.css new file mode 100644 index 00000000000..9491e703f2b --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/css/input.css @@ -0,0 +1,335 @@ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("./assets/fonts/roboto/roboto-mono-normal.woff2") format("woff2"), url("../fonts/roboto/roboto-mono-normal.woff") format("woff"); +} + +@font-face { + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: oblique 0deg 10deg; + src: url("./assets/fonts/intervar/Inter.var.woff2") format("woff2"); +} + +@tailwind base; +@tailwind components; +@tailwind utilities; + +.quotes { + font-style: italic; + color: #555; + border-left: 4px solid #ccc; + padding-left: 1rem; + margin: 1.5rem 0; + quotes: "โ€œ" "โ€" "โ€˜" "โ€™"; +} + +.quotes::before { + content: open-quote; + font-size: 2rem; + color: #999; + margin-right: 0.25rem; + vertical-align: -0.4rem; +} + +.quotes::after { + content: close-quote; + font-size: 2rem; + color: #999; + margin-left: 0.25rem; + vertical-align: -0.4rem; +} + +@layer base { + html { + @apply font-interNormal text-gray-600 bg-white-50 text-200; + font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; + -webkit-font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; + text-size-adjust: 100%; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + font-variant-ligatures: contextual common-ligatures; + font-kerning: normal; + text-rendering: optimizeLegibility; + overflow-x: hidden; + } + + @supports (font-variation-settings: normal) { + html { + @apply font-interVar; + } + } + + a:hover { + @apply underline text-green-600; + } + + svg { + @apply max-w-full max-h-full; + } + + form { + @apply my-0; + } + + .realm-content { + @apply text-200; + } + + .realm-content a { + @apply text-green-600 font-medium hover:underline; + } + + .realm-content h1, + .realm-content h2, + .realm-content h3, + .realm-content h4 { + @apply text-gray-900 mt-8 leading-tight; + } + + .realm-content h2, + .realm-content h2 * { + @apply font-bold; + } + + .realm-content h3, + .realm-content h3 *, + .realm-content h4, + .realm-content h4 * { + @apply font-semibold; + } + + .realm-content h1 + h2, + .realm-content h2 + h3, + .realm-content h3 + h4 { + @apply mt-1.5; + } + + .realm-content h1 { + @apply text-800 font-bold; + } + + .realm-content h2 { + @apply text-600; + } + + .realm-content h3 { + @apply text-400 text-gray-600 mt-6; + } + + .realm-content h4 { + @apply text-300 text-gray-600 font-medium my-4; + } + + .realm-content p { + @apply my-4; + } + + .realm-content strong { + @apply font-bold text-gray-900; + } + + .realm-content strong * { + @apply font-bold; + } + + .realm-content blockquote { + @apply border-l-4 border-gray-300 pl-4 text-gray-600 italic my-4; + } + + .realm-content ul, + .realm-content ol { + @apply pl-4 my-4; + } + + .realm-content ul li, + .realm-content ol li { + @apply mb-1; + } + + .realm-content img { + @apply max-w-full my-6; + } + + .realm-content figure { + @apply my-6 text-center; + } + + .realm-content figcaption { + @apply text-100 text-gray-600; + } + + .realm-content code { + @apply bg-gray-100 px-2 py-1 rounded text-100 font-mono; + } + + .realm-content pre { + @apply bg-gray-100 p-4 rounded overflow-x-auto font-mono; + } + + .realm-content hr { + @apply border-t border-gray-100 my-8; + } + + .realm-content table { + @apply w-full border-collapse my-6; + } + + .realm-content th, + .realm-content td { + @apply border border-gray-300 px-4 py-2; + } + + .realm-content th { + @apply bg-gray-100 font-bold; + } + + .realm-content caption { + @apply mt-2 text-100 text-gray-600 text-left; + } + + .realm-content q { + @apply quotes; + } + + .realm-content q::before { + content: open-quote; + } + + .realm-content q::after { + content: close-quote; + } + + .realm-content ul ul, + .realm-content ul ol, + .realm-content ol ul, + .realm-content ol ol { + @apply mt-2 mb-2 pl-4; + } + + .realm-content ul { + @apply list-disc; + } + + .realm-content table th:first-child, + .realm-content td:first-child { + @apply pl-0; + } + + .realm-content table th:last-child, + .realm-content td:last-child { + @apply pr-0; + } + + .realm-content abbr[title] { + @apply border-b border-dotted cursor-help; + } + + .realm-content details { + @apply my-4; + } + + .realm-content summary { + @apply font-bold cursor-pointer; + } + + .realm-content a code { + @apply text-inherit; + } + + .realm-content video { + @apply max-w-full my-6; + } + + .realm-content math { + @apply font-mono; + } + + .realm-content small { + @apply text-100; + } + + .realm-content del { + @apply line-through; + } + + .realm-content sub { + @apply text-50 align-sub; + } + + .realm-content sup { + @apply text-50 align-super; + } + + .realm-content input, + .realm-content button { + @apply px-4 py-2 border border-gray-300; + } + + main :is(h1, h2, h3, h4) { + scroll-margin-top: 5.5rem; + } + + /* chroma */ + main .source-code > pre { + @apply !bg-white-50 overflow-scroll rounded py-8 px-3 font-mono; + } +} + +@layer components { + /* header */ + .sidemenu .peer:checked + label > svg { + @apply text-green-600; + } + + /* table of content */ + #sidebar { + @apply col-span-3 order-2; + } + #sidebar + .realm-content, + #sidebar + .code-content { + @apply col-span-7; + } + .realm-content, + .code-content { + @apply col-span-4; + } + + /* sidebar */ + .main-header:has(#sidemenu-summary:checked) + main #sidebar #sidebar-summary, + .main-header:has(#sidemenu-source:checked) + main #sidebar #sidebar-source, + .main-header:has(#sidemenu-docs:checked) + main #sidebar #sidebar-docs, + .main-header:has(#sidemenu-meta:checked) + main #sidebar #sidebar-meta { + @apply block; + } + + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main .realm-content, + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) .main-navigation { + @apply col-span-6; + } + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main #sidebar, + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) .sidemenu { + @apply col-span-4; + } + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main #sidebar::before { + @apply absolute block content-[''] top-0 w-[50vw] h-full -left-7 bg-gray-100 z-min; + } +} + +@layer utilities { + .text-stroke { + -webkit-text-stroke: currentColor; + -webkit-text-stroke-width: 0.6px; + } + + .no-scrollbar::-webkit-scrollbar { + display: none; + } + .no-scrollbar { + -ms-overflow-style: none; + scrollbar-width: none; + } +} diff --git a/gno.land/pkg/gnoweb2/frontend/css/tx.config.js b/gno.land/pkg/gnoweb2/frontend/css/tx.config.js new file mode 100644 index 00000000000..a3c4578ec9e --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/css/tx.config.js @@ -0,0 +1,78 @@ +const pxToRem = (px) => px / 16; + +export default { + content: ["./components/**/*.{gohtml,ts}"], + theme: { + screens: { + xs: `${pxToRem(360)}rem`, + sm: `${pxToRem(480)}rem`, + md: `${pxToRem(640)}rem`, + lg: `${pxToRem(820)}rem`, + xl: `${pxToRem(1020)}rem`, + xxl: `${pxToRem(1366)}rem`, + max: `${pxToRem(1580)}rem`, + }, + zIndex: { + min: "-1", + 1: "1", + 2: "2", + 100: "100", + max: "9999", + }, + container: { + center: true, + padding: `${pxToRem(40)}rem`, + }, + borderRadius: { + sm: `${pxToRem(4)}rem`, + DEFAULT: `${pxToRem(5)}rem`, + }, + colors: { + white: { + 50: "#FFFFFF", + }, + gray: { + 50: "#F0F0F0", // Background color + 100: "#E2E2E2", // Title dark color + 200: "#BDBDBD", // Content dark color + 300: "#8F8F8F", // Muted color + 400: "#7C7C7C", // Border color + 600: "#54595D", // Content color + 800: "#131313", // Background dark color + 900: "#080809", // Title color + }, + green: { + 400: "#2D8D72", // Primary dark color + 600: "#226C57", // Primary light color + }, + transparent: "transparent", + current: "currentColor", + inherit: "inherit", + }, + fontFamily: { + mono: ["Roboto", 'Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;'], + interVar: [ + '"Inter var"', + 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', + ], + interNormal: [ + "Inter", + 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"', + ], + }, + fontSize: { + 0: "0", + 50: `${pxToRem(12)}rem`, + 100: `${pxToRem(14)}rem`, + 200: `${pxToRem(16)}rem`, + 300: `${pxToRem(18)}rem`, + 400: `${pxToRem(20)}rem`, + 500: `${pxToRem(22)}rem`, + 600: `${pxToRem(24)}rem`, + 700: `${pxToRem(32)}rem`, + 800: `${pxToRem(38)}rem`, + 900: `${pxToRem(42)}rem`, + }, + }, + plugins: [], +}; diff --git a/gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts b/gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts new file mode 100644 index 00000000000..35a92551e6e --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts @@ -0,0 +1,100 @@ +(() => { + class Help { + private DOM: { + el: HTMLElement | null; + funcs: HTMLElement[]; + addressInput: HTMLInputElement | null; + cmdModeSelect: HTMLSelectElement | null; + }; + + private funcList: HelpFunc[]; + + constructor() { + this.DOM = { + el: document.querySelector("#data"), + funcs: [], + addressInput: null, + cmdModeSelect: null, + }; + + this.funcList = []; + + if (this.DOM.el) this.init(); + } + + private init() { + const { el } = this.DOM; + if (!el) return; + + this.DOM.funcs = Array.from(el.querySelectorAll("[data-func]")); + this.DOM.addressInput = el.querySelector("[data-role='help-input-addr']"); + this.DOM.cmdModeSelect = el.querySelector("[data-role='help-select-mode']"); + + this.funcList = this.DOM.funcs.map((funcEl) => new HelpFunc(funcEl)); + + if (this.DOM.addressInput) this.bindEvents(); + } + + private bindEvents() { + const { addressInput, cmdModeSelect } = this.DOM; + + addressInput?.addEventListener("input", () => this.funcList.forEach((func) => func.updateAddr(addressInput.value))); + + cmdModeSelect?.addEventListener("change", (e) => { + const target = e.target as HTMLSelectElement; + this.funcList.forEach((func) => func.updateMode(target.value)); + }); + } + } + + class HelpFunc { + private DOM: { + el: HTMLElement; + addrs: HTMLElement[]; + args: HTMLElement[]; + modes: HTMLElement[]; + }; + + constructor(el: HTMLElement) { + this.DOM = { + el, + addrs: Array.from(el.querySelectorAll("[data-role='help-code-address']")), + args: Array.from(el.querySelectorAll("[data-role='help-code-args']")), + modes: Array.from(el.querySelectorAll("[data-code-mode]")), + }; + + this.bindEvents(); + } + + private bindEvents() { + this.DOM.el.addEventListener("input", (e) => { + const target = e.target as HTMLInputElement; + if (target.dataset.role === "help-param-input") { + this.updateArg(target.dataset.param || "", target.value); + } + }); + } + + public updateArg(paramName: string, paramValue: string) { + this.DOM.args + .filter((arg) => arg.dataset.arg === paramName) + .forEach((arg) => { + arg.textContent = paramValue.trim() || ""; + }); + } + + public updateAddr(addr: string) { + this.DOM.addrs.forEach((DOMaddr) => { + DOMaddr.textContent = addr.trim() || "ADDRESS"; + }); + } + + public updateMode(mode: string) { + this.DOM.modes.forEach((cmd) => { + cmd.className = cmd.dataset.codeMode === mode ? "inline" : "hidden"; + }); + } + } + + document.addEventListener("DOMContentLoaded", () => new Help()); +})(); diff --git a/gno.land/pkg/gnoweb2/frontend/js/searchbar.ts b/gno.land/pkg/gnoweb2/frontend/js/searchbar.ts new file mode 100644 index 00000000000..254b1963214 --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/js/searchbar.ts @@ -0,0 +1,62 @@ +(() => { + class SearchBar { + private DOM: { + el: HTMLElement | null; + inputSearch: HTMLInputElement | null; + breadcrumb: HTMLElement | null; + }; + + private baseUrl: string; + + constructor() { + this.DOM = { + el: document.querySelector("#header-searchbar"), + inputSearch: null, + breadcrumb: null, + }; + + this.baseUrl = window.location.origin; + + if (this.DOM.el) this.init(); + } + + private init() { + const { el } = this.DOM; + if (!el) return; + + this.DOM.inputSearch = el.querySelector("[data-role='header-input-search']"); + this.DOM.breadcrumb = el.querySelector("[data-role='header-breadcrumb-search']"); + + this.bindEvents(); + } + + private bindEvents() { + this.DOM.el?.addEventListener("submit", (e) => { + e.preventDefault(); + this.searchUrl(); + }); + } + + public searchUrl() { + const input = this.DOM.inputSearch?.value.trim(); + + if (input) { + let url = input; + + if (!/^https?:\/\//i.test(url)) { + url = `${this.baseUrl}${url.startsWith("/") ? "" : "/"}${url}`; + } + + try { + window.location.href = new URL(url).href; + } catch (error) { + console.error("Invalid URL. Please enter a valid URL starting with http:// or https://"); + } + } else { + console.error("Please enter a URL to search."); + } + } + } + + document.addEventListener("DOMContentLoaded", () => new SearchBar()); +})(); diff --git a/gno.land/pkg/gnoweb2/frontend/static/fonts/intervar/Inter.var.woff2 b/gno.land/pkg/gnoweb2/frontend/static/fonts/intervar/Inter.var.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..365eedc50cd0f46ea35a3176335fc67b51123fb4 GIT binary patch literal 324864 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≫bY zFmcH{ONuqGH(hD4eoT49ZRg}E(9Ub3$Z9+(ox|rt;KxXlCr@lVP|j{STRx)O`F|wDicx%*xKm%|FcxM3_($r9?vqt{XGHiq2ML zPRsUxjOBPB#u68mB|^|=p0y_byt}f*=PW%lY*&FNtg#;S+!dgyaT|M zkKrRj=MYBq=B<1$V)59cO4)55>rKY7NImANmILbKz8Pw=iYA<=wgpD#V3KfgBJ!ZfDaT383XhYX&DudltzpR=UX5#kEns44*Fgptpk;{fSud6?OwV#2NAlWb z(R#GInG0Fo#tJMS<^z7ykF?6O-quYPWiZ$s0AS!W(V(Bs5zSsr*d+V7KM^9H~DB%h~BiHj%@$=K-f7z z%R+pJ*D%adg_;Gi4FD~`5-o0e6@fP|pg*xv3_*A(=Xsu}ox=TqVoJ;78h76dG!ar^ z$sg>a(NG-boR`6%nG|E`uAG>5n0{oVX`X2Q$8DzaJ(&O1`Coib{O5M9`Apg{@DHa^`6(O^bWqi`|zM2 z_DlV0ztP|8H-E5yS^nYPkM{og?!Y#147>yXAn=)g$PF9Az~|nPG|K+eJvNP-kL-_J zlf;kKtVtOm;%fJK>&zJayF2+@dL}& zE!(i-SdqFmy=T>Zi!%~8t+R`7K@cE7W&!T^kv+g^glh}8_i@&dwo$cl{QzeJv4Ptm zjSi9g4Nm)!e2Dk}h>4Sl$V6z85Pc{d`{mw zhvy;mu;++44Z3hQ;P^QB#638hu(x0ba07S&ZWomABM#AA((xq@zrv1SMX)2d5&Q_o z5e#FvF@hM;5b+T42yP1N511KvhGIg_1fv{ojxeWJrr0kIabcW#_g8;F-9*dciRegEz^VwAOH|3J&%95XMb%;@xCf{8CQKc z0X^E|lNz7Z`Mk>Ku53%U^zoFb>HhECu;ii0^)uWs;*yDI#k}_XAqC`}l*H`S$__cw600-=)O7tMX=7rOltg?!Vg>PM`ww zJ~Go*S@WTC%@Gd$v8tOBIy4`tjQIyuF{fYHGqsgdGoK(tsaKWE`KZ-ZW%E6?VR|@` zP!-ID%9(#uzImw9=AX>{1LYFSGnXoBexx$yUwZLh=dK|ladLf5U?w(=%gOT|XwRytC%sDp`Hq4T(++v<{Vj@@+$M+-b znP1Y-#2PAXuISPv;7LPG%?pQpA})xKS)met_Mt<=QZ5zC-m8$&1~R24cgQCS;DYDRlDfe=L| zbYQpPa%(pO3)Ikb>R#F;?lD-vjvh->o2H`8AhA3`XsYE*Y!(iR&8T1n7|4#Gyv@Os zsb_jAO6)o1Y#y#mBO(TQwnSMgQzqq9tpbL!806YIrL77pVF&xDqp8M?4yDP-S&cYH zTL2dYG_iZj>bN2Hf*O;7BkRJy7kic{` z$OV)V9CxHg?8WLaxX&CD}2vS;_=*Z1zHV?GQ>g}q;akL>Z$xCgxrKp$6{`+or)rqnL8$cMQnuNFRj{j1xz&l2#wC&}aFGskrKrZn|m8JU`b^9>XcPxE&kMqgCkj~QlJ zB+U86be1=IW+gYX`8VTPELTSJk`v3%qp~JX%~Z)VbCLC6baS-)$&kogX53Yj>5cP~ zLg6aS!vF7hKVSY@=l&}aaU(YDhqISw*~QXxm66};^NqG$^FNC~>L!zvu2_~Vs5--> zFIY9q0*SDB&W@A4K~$$LhnetbV&UnsU;tA4kzZf)Nz9+B9(w=DCB^0!3@Ng&=kcJ} z7pMgpn=KTe(5ZK80(P?vysg2sGc4{kYQl}uNPEe8$&WT?zw04=D9qID`{5MBsP?@sH3u@^ z#`Q?0G%_?_r5$sJ61BE4f1-xYuM%@fFK3p^eR-kx^F-?~0nSi3x()T+sodgX=Q8c!NpkQd1j46=m4^@W~{uXydx! zl=Z`;!gdvU{<<`ggN&hz071wgtdiF`TvNs z2rWx&N2qj?Sd8%0SnL#a`j@eFF~0NB7nXoi5g3?fd5(Edr~m{CD2QFb2!0~h9D4)T z_WuFke~u1l31p800NwrtHv$*|0B#gOGXNLBpO54B%RdP-aPeO?*43`Rn;OG7+qBYq z6>5a1if2Vs>8wF19Git-6P)=N+IF`3lYjE}f&2EbY&?U#GQKD>rFG}7A_^eSkmmwd zI7LU^nfmee%@~)cT^-dE@8Y|C7awC65Akh0?vwd;w!>om-h9-j@~`p;?>KVyGsc2< z>h1`}kMU+1{g}7q&fbilCaRAj-JEl_U?94}o51Q{ZUnmz#OT~a$$VENH6@3R7x24*2RY^0xum@emHTLARii|%3^FV&F%khVpm~y7Hl0e^7CXQ0=BCi>x5{?at z-fJ=Wn(710vsh#=XT0InQlM)L438Vl8o;;vWN{??cfbLRj{P+Y&k^~Z27NG};pR2v z%T$bodms6%nNj?$Zx$M}vmWZHcBkCk*}qCYt-6m@&K1s=V?|)ZP8a1E9`V4%lRU=- zv*XT=&-Ae>qYH{RMio*;TVxwKiwCc{g3VlITqDx(G&{J$J#aa5SkzRjOk)yED*k(6 zV9sT)ioq4g_p8!LmoqzuRn=WzW>+>g9>=mu78Xl4arNR3N*-9k+_#0|lW*H$-xvg5 zc+{2cm1nETh2Rv`Nf)#QGz zb@vu$e66^$GsUv9gyPtHhVv?y!)M6ZV`YHLn4pu{xMs>pRZ`mM_Ixg;K-1K{#M17P zru3*EpC#oy$$0!SEXb)*#4}7g%rg$zV_8I2(}S!E_c}icXKH1xv|qtW5V*;6ovy{; zPOc;2X7F4sJ;u<%eU^BJ-7H!}T!2XiuFTM*r!-j5gRR2vbv$;lsYZ#BDW|hS(C>rG zFhL5aCT7ai6~-aW&fvTlqw*;t7pr)8;-~N}yu>RMjANTjuXSuBuOA{1W{@FaUhBm? z<#Rm7vy-4q;gX_BDh6Rble`E0QKA9Bkj-^;6%{&%}MWK>vel>Bk z#bl1SbP_DYycXOoqM0@jPBJ4{72*}opL6SxL^vcK- zQA!X&2zH8HmKaDoxKg162{BN$dUTSDr(>$LpSIlVJ}~?7WF(^l;KJ6{VH#UhR4rpH z0TPP*bWC(ukb7M|I|H|y)ex_61)U9ijs;&LoE_kj{7_|TGdEW@b{X&~v)OkRZ_Q!O zr`*kiYDbbcQP{!6;Vm6f_MpkgE~1dvCYr={FNLndNq52o zN8BxgwhS&}S>g=*oeEm%SuVK7XHA(ua^=4x_S*nWmdzwh!F6CCY#XcU8HVQe#kYIXhTIkY!T6lsLvq z8QkO+uiju}L5{&9D7^YGD9bZshz=F0IENN4%^}?2t`j}uT<3>g33G;KQsyot9ji$> zm=H=Bs4@d(EOgO~l*p_qw`FjnJW)-w-*#w2~dfqtfj6_N|lRTeM@-A zy!n`%oio>7so|mY6HSd{4pP2(;+iSOy!T(!Gh-VwHTJeDT&ZR* zmKf#{#-}+ryPd?3U`Q!)jHihrD^zKAp5R6jiN#&P=sL7wRdJ1KXt*W~E0=Iu(rY+3 z135Buc$t@Fu-OefIYLOf3V^hF=YvHfYH?eU^3~`?@h6=_IbEoe!X6jNA? zl1eKh*^TZz^G?6ujko!-M|y06B%AtEO>OB}>P+3~?fhiEpBJ+nSHc^MaUm|p)fkV- zm<}n51@x6J>&lH1TiWXv>)Co(V`@?TQ?0Z~TUXnq_DAix9pA|I?VCZ`oWe)ap7N`n zsi@l3@X|!-^8C(Ai;at|i$jYOi&rPuul*k_N$tNy2wKWB<#+1I3RArkYG{GOjVD1u zi?t|nUxG0flW}N|=s91xEHd*PjV+uej+EP?<5EeC0++eY2p3r5i&2A$b=gCcS%xXi zW`r^J{tZ*6WzVSjs;x6-DN9wFmY_wg+*VIW#CE+MJz`b}yvbhAS8(^Ne6buW5eg!L zx4aQpiC5OIGq$Lkp7Cpn)@`QTJ-^Ca8I~pBm**!I+ZKlxCl{~n*Q88T{wIqi>jVu@ ztp4{H#Q1OimR)@tmoXK`9u3J;NDu@lJ08C!4}|(-Xq;49_r}Hl~3oV4bIL zaGuS&&#vI?E|GG{g;VK&?r$Hn3%*nD?vG!!XS-2dq@RNi`Zc(;!J;Fy&H-R7dJ>Dwm1?Cw-~^r_Ac&G&O64f5@H1vE)1OP<#Z7 z_j!Z=#*2Kf!3MZ5`94Y_B7!1k4gg=5<5XOZ+MmzwpUyw|&s|Yp)Vuu7KDG~}!WbIH z7E_mR$e+OE^GJx2g%4o37W?8}0EN5P!o5!jKf`v#IT!f5MiyapkurT7*8n(7yDoUn z4q_nFFlVRSZCnN42_QQ^IFh!c_47dX(+4b#TolNy2y*K`8=oB@j{W-iV?p+0PcCyI zzhdhwSBedvg2@Bi4=D!w>Pxdey4SH$MdMXPijb!8vT-YHy)U$d@QT*R>?zg%feuebF+EB=FqrTp6a$`d^76WZVq1p!xD`;u-__`%OU{H0P3 zvLE>uF44VI=elzF6P=)g8E7ED9NdEWHnFMAZ0;H0S>QQfTu4vc_H2qn0)h=Ph*KZi z^adY7i0N8v|I)4KpHkQ?6g!HjYvU@Yu(2H|rPLB$R^1s(EJPy`5!qFfCp#Ch$OVt{ zvRln){3z&c;Ws`nlChJwF-d!KOCQ5s%h`t=T=EvWh5J@I zH<;OdcHh4-kHuqfl#bfd_x$CD)#v|va-Q7B%0`X6jWKJ_?aI+fz=#mwl@8?GOjAE} zXp0Md@nI|>%q2EZJ4k|&lMF17w4KyQXEZh{9mvU<#bf3-?J;ZD#cbFJXBO>-ry~a@ z0zG7yoRA5cqYg30g z;YpYo-IKI$`PqV>ncYw+*{Q5-s5*D_&iCjeYhdXOdGIx>lch|b;DHEEiudx=I35+`(d8aNf0E?sA_oYQt(6<--yh-iVTmFV-}J+{`HbjJVe>#nxG?$RGZ6)L%-A(@JejlNwZS zDNX3j`ZTd2^=Pt}bt&!st>3L)ad_H4eD9>oxW> zyb(9jSnoH-Hfyf$dL>IT_P$Dyuu=Jb^2)X8se@8tr@vhEw`eVC2aP1m-?j3FePYP> z>d;%86F>V$ z5%;z~lV`fE+s5+r`0kgzAN`bvsGA0*)B7DdeYV4Fe|F^P0GNPLf@(es5Xw>6p8Q^) z=@U5Phg3@y{t64#sDlbsYSd}cg7|4@QKA(0=j*z16}QzbL|{ynDMR(kNO*SWhj>|Txb;%TyW-o1L~$z>hN8#%Y1 z@A)5Xh8)lic&UCRoYeeg)b2Tz@nG>n<#V5}qxV)2^p&rDlZCvk?c0G5A3W4U^N=a))$*3JZ++)`KYaN3CA}1hk|aNj zKtWQZexqOZlfT?|_O-n9mw|!#z4#=(O>FhGKioZbPqku-3kY0s+oG*J1xJJ_yn;x$ zHz}Zyt9Thf0`ZzOzqjj4BqX9BLm}oq5J9A&?1bSpr|;kWyl$>n18Z#1gO1rssNg2v zs}{Mu;k1!G@(rJhCBs~&Z?#4IySGQl)4qD?W~II+f?Y@!*y^SN9% zinqoBH9cvk+76XaPRZrAxV+NKD6_2oKNuri`SnvnVyCKGwyNo??Py!O?)Tl?_O`b3 zBO9&+aeGT_QA{C%h;(0gaKGDj5zJV*h zLCbIYwv-d?9(1?({LS3GTk@J^ci=3Kc~(r`B>wmZKdNDe``G#w0f3eM0|0boV50kL z20ApDn6?8^V8zM0yGp@khTXb zWU~VcOS8yld@X8m(9&zMR$Gg=;aZ}j*ODE-mg?fQbdS$6q8tFrLL~r}gF0Y&Xbx6@ z8^Mb37+C4fj}NSTTLpT9Rbd2J4W@wAVJ=t$^1+%=1lEF0U~Sj|)`9=Py0jx;J(@FE zpLPsvKqG+-X+*FQojceVE`UwYQLrgG2{uD6U~}{UY=MHomM9!-h2p{1C?9Nts=>CX z4s3_o!1ibY?11LMj#vhOo$x`hGd>P>!S-NRd>`y~_lE@>1optWU{6c{dtn;b8yACp za3k24b^`22a|HX-Y{3CE47i9c4qQyz1uh{bz@@|#xQuoITuw}aD`-yON?IkjitY)x znnnfJ&^X{)S`@gBMgZ5-T)_=A3b>K(CAf*k1~(sVl)GiWwfEz^Ep!jT?HCE}pp}C= zX-IGv-A8aY?K`-K#s&A%qQQN1m%#mWuHXT>%izI#+keMH4?I#^j~45(ydJOC6V1P# zY}uab**5CAUg(*5@w0xugp33)zyBPpSN7L>_UG$?C%_x7AOQ?%pKs~S()JHF&0XPX7 zq9|wtPKL%P8k&Gppec%hX5dt4j!@77Tna5wCbR-qLu-@)ZNT$zJt}}3zzc9AqQOnz zMYtK!;TG@`+=`fR8+aLRM|ik{jDtH>72GBH*}WwJ+>`R`l^Wna>m1xK-8rzOK6o&_ zIkcsIcsTtzA`QT!WGXzSdf{=I%!w_vL)$iw-Ii9NeOu<_mezo$+B&DV3;>>O&zzH% z;Q9C3d4X02&_QR$QC5LY@7J8pv?_GbhY_G_c|W{}ub0Xf;AQ;0Qg(n>@%LKU5ndsEdY?-1kN@)LNERPUF)-~%u|eD;QqE(@Xi+Y>%UfltaI@F|5p zD@VcSkbF^&hA$!esvHAfQ{%Ue=*hTV z<#y=Jgg&lS?ts43Rp^I~L4U9W3^>xAfzWXnM3P}J)c`}lDlil*1Ci)73HO-#c$a3YMyD=-12!bI>UOcGDQWNA%`R1Z^8 z2gFb=FwJ@Z)3tjtw)7un_I6>jn=DxYK-`g>*{l~ZM;?JWdje4avey(dWLC0*68>UVyan7t-q-#+FMVv)N(EO|Y1Zf+a`xtWU*oXkYCh!VuRxH?}bJMzIHP{w)+MhyS9imO=mg8Vo^y%JmJnV@vy-y`v zePT|(oCpU{ARGiE0dNS(0XPgsh9gK3KnYj?enp1x8#n=eN0IOcI1T<(v2au>^J`0u z@OS6u&z9BU-!9BQSp$xd(QuqHgA+&yC&@rK1=fet=r)`Ir^8u$ViW{}WCq#-qat|9Beey#Mu=XG^cL6#$@F?; zx4^4NuHup30_s~@5A9OV+THT(dFu1E zSKRj9_EUZ60GI(CJiv8Gr{=I|ijKf+bQC{C$NugX9sfE(4V<>X;>ZrxAbV;Eo%|>E zzU!k$bNch^&FhTH=B#Xo&S6`09)_a}_!M%0!^lyyk&|@BS=oVH%r4}r6LV4Z9$k8W ze7byHnVnZd>7r{?F1mg%{6jZxH;L2e7I6;UHqIh9@z$Lp=B{cBx<|&M`veO;FniEL zVS1E%$?I|Cd7^lMo|^IKnL5|=y4Q=k=H-9YjqjIwy-!(hnp|&NS?^k$_sVqi0q;Q{ z$qe*~dWk+$Ug!%xjXWqE^2BG57rutP@fGBAxZU5r{=ww;>>>NEMc72t%S#nk7N$;;)QaCsT<*SbPFyQ9BUM+J&;^wsN|+ za=SZuswR|Al_0$Sf(Qy5;&Yx=1$$xdYoth7N4|d{j&uMkPmUS*1I>@;Esm|06E#IpUGasEmq6Znbqp8h*(pzfhY>L6+&D^W8!hg!&4)JnymHYy6W z(+{H#N&|IL{-}$3h`RsXz520o?@e#&tFKS>*WdGVAasw=AQg^=s30^?<`|VYG=+{Ezw|{;ZGe+9Dao0>(TWjA2na(p{V7`Dr z0>Hrqks`&r5u!e0>AmwkEVBqEOO_8ga{S4Y7eavo4~i58_Bv6Qu~O6}tQ?&eR*C$M zRipF6YLTm0J#rpvM6O`X$OWtwbqH%uR-;q86utFCHe&tgLb1VKsKbT}CL=~@Oqn^- z=BA6pf~9CytVFS9EsPBt$X+k%3f{2ix5FD3O*YwN)aKek7v5XJ$q~GbE*5X6?&BSF zD7=$u!@H;&yqoO9d&pkAmm=eR6bbLAV(|g;D?Uh3@F9wT57Uq0BNQJWr9R-M&Gg2!*RveHwnVNI1$d_Byl57*1)6)Z{bv^jWJ+8oCa-h zx;%n2G&q@`-)FwC8k(%9Jg;mG|Bw@ZcCH-3d0y+8@6Psz@ez^?QFsRzz^}NFSdU4> zNlYd#;UeM{rV!zndPIHEc4j&etKwWMskG-OJJcD>A$&2HdW3n@V_atV;c{)NVy_(K zU)9b}Aqf(MxrB+8XcwpSvlj6h*BKGGUYn;u5s4d#Ox#3ogPX~I-17G-RqLzmEuI}A z(s1Wdb=39ML%;s)MHb*bii-QmU_3yn;z2SI4^bEJFp0+_R1Th?&f-Zb3{N2^JdH$n z=HRwz_G^KD)42$&ikIMeyiC6huN+~w|NpxN{dNNQeHZ{o5Kxu_-y&-Xsf-8l+h8Ig zeUkxS60&!$dxTu_=`4lRMp0xPu@3Gdl+1cU8Il_nVJ1Qq|0mSIl7zZhLud$$<`xbo zw1O?|;G-k%C3NL}LQhglKbbKQHxP#4Uc%_#eEs=zGrK4M5$2c0=fi0kQ%qP%aapI7 zO`B40b6eA!ZT}#9uYR@jwSBK$6?b-T$(Ps@uf6T7eD-gZ9dV$lbui&NRP8!k{Tz8} z?{!oyKODu$zu&vu)HQdM zSmG}AinwPs5cf4Q50s(ALrRNyM3xZl^#6#*WGV54evEiZvWRE&e~9N~G4X=_FY%I0 zCSFm_#A`B#cw+?+ZzVhLw!E8opT+vn*nCtb5TB@1#AmXI_<|1*9%L5bNxde#NF3o! zy&-(aY{HlNK=_eKgg@m#1W+6zkP;9<)E6R{LI5Jlt415D}ruiQMY< z5m60KwD^UH!G{QxUL|719`sYF;)-kQ6)(e;(9e|^w2~^DWF?zOp&utwr6z$<%}NWg z(&G>IDUB;jg28R!S|YoK$=Sm7L~e~MFQb*;=)z~R2>l+SGMp%&^oYVEbN>OwBFH3# zD54)BDEFkUpqCId*-FsWu^6pe%>FD^%B#4ZRg%got#`3g9nO~W2yUi}*WW2q`Vr;i z7*Roa5S1jCsIs3TswF)&pYzFQA_;*+Bm56s2ec=@ac>A)*5r6P@5FqDuu3-7=dVRUXkx5{W)4pXeuf!~p#? zF-UTVA^QnpSmtY_eK;u}0je5Y)QAMg$F6YnEN;XC3N^^Eup-xGiSSxX;hMzbAZtUVTo&LShQn6Vq5k%#i-X?2)H)J!L`QMwHPMR%jNvW})z|J%p! z0Y4@%I)gx33=&v`L56G@=;xARt4EJ$b*#_6p$l>YOp4Q8gz|85v;|a4Z6;t zZ3wR&bb~?rz&b!T8I%GmL$?@o1luv_gx)gf47O*`1-)a?73{#E8+y;6JJ^vy5A=aS zPp}h%+SFo%I(5#?_ZTyVWWvN_rcA{#W9Aie=CW9@@R}t{xVB<7{=WF{7d4tqy>mN_ zCeYx1)1*1haDSbph0bw*oTo%uM3pvea)GG1NSo;pb-J|0C1OC24$>!vF4G}bh!F!i z%#awnN=FzG3&wN?oLDlUvrLH1*IFQR6nIR`~g)=jPAfLFfBV5U6ZtN&`62ybK@Fc;!m@6a+;mt1cA)$QPB`6Zh zk3Hj0(9rBT42cuKUci!gf$XIqk|3D95<=49m@hoZ5X$_7kxT^Uk4Uh>S%3&qB9f&b zky24CRWxBEGYkshh+%1B2^W>6qY;5PmM@+NB``cXsg=k`l1QCoM#doZZZe`2(tyc| zq>@Ir7)2Usmd@xhNQ+FykVX1rvobkkQZDP1N2ah?mwYnqHtSYEa}}~cMU1MLl`ElY zN@*xI4RMF(9?D3va-Mst;9dZCse(%GB~V3`aJW}MHHFl0uYp=Bh0DDG>L@}z_ZDcN z(i*vUKof;)=H3G>WLYcs0ca!twR3E=G`p`Z0~ zU-Z#0`nj(Ls0Tjx%|q(x5%=97^)kf$FigFTa6gSw9|G>5FX0!vGX6_}q_24CkH$8UAwL`UE3n9|=Uxv0k~Dj?!9A9;NSTsxI#rOSnVu(g zkfE9ElP1X8OfQo*XsemLC%2)!X8MNQhmKP6mCj=Ud#GF7iqmxgiaV#e0vgrVMEOSE zi1MAh73Bx%HsvRGxWjt{JyO0vUC4JtAo(7>O@1JP$dBk3@)HqE zex~k%{6d6~9%usTNraMKD4z5-zyz}Rt=UU=e(EjemKCa!K;0x)Cdg;l$_FLDR}s{4 zlwyD$#8T{-l466*H|H6$3?%oKSiGu)2vb!xpzZ`E1bs?G>_BbRfqdwCAzuL55D`r_ z?twb8X%)2QY6bOp+MFd`XLW&k>#jbKlOAwKD-9Zy^b9$>6vHI}O?Ir?MD?Fako03f0d zqT!+N5ZDPk3=RN~;2+^pyd55+{e#D8Kj8^lH?#%Up&hmXXb+A8Paa6$PuWiwZ+o3_ z#_m2VA_txuRB+w}H`_r(E_576;&fde$?Ge*QHQJ7?I5*V!V=)?8~uOY_z!sRi%}lD zO!2;ax-q_db@8h(FlFH)8Hy53w^0eq!q~tfM2EqFabb$U_y{IU7_5*e#agEtlL8}+ zOk@4XxG^vbKtLRj0%ik6U=I2p<^maD9sq>-=pw`ec_0B@fkYq+EMVY1Ec70CojXWc zEF)JD0MQf?EJzJqg0uk)dNDv(n`r=twH06Coh6|QurzcYvO{Me=Z;Ww1>}IdTl=F- z8HK0Z*(vF(eh9XK8iXd(qawI);*a3b!7mK#K5%f^5D@N>Chaaca&lT-_;tEg7>=$T zpwo?}gkj7Wl1Z5Ym~AG&pqod0rCZ$<8)_q1t}V8}_YNWV=?4SF^b28k=#CL(bl0$p z^y^_)=r?Zr?winSZ)w^uhVhPNed0JDc-{{|kVVmdN%BvYT`P(!RrOcX{LytMhJl+VwNT812W_4_ zHS;PY08v1$zeIVXj1hF~dJN41OB1>NZExnUN$iFT>tm7_xXmPOtOYu{4lFEfiWTd6*uF*& z#}`~&&3Jg)RjAOaQl(BcZ#56!7XkvqgoGqrD*Ihq6^w7`73hQQCeXJ2}+L~N;*@y=o80A+;Xcj##qMqs5F(Py3 z6qz@##DWDRix$y($!_dpUV8C|8g+whAeuBRcm-Bj@QpIh;#x!lOFDsr@cJX7kvAiv ziFX$f%^U(_UlA>7$P+RMt`N%=118+KA#vx9!Gi}5PoBzo@lwNEAW0t(^(2P}@0#m5 zsizdwskcspM*5n( zV&b)B8?9LJy0?T6b11kYrMHED=kR;@O%8vA-{Ej4{1%5l!|!sqAp3i~^7wFjl~WZ8 z=NK3`U8!`QO7-u||C;CI0tj7-kjtr30AUnkkF{5K0!_>CD*y;zGmO_ev?u2H$Sx{s zYKk3^93Rye>xsplG-SwD8X6upY*oJG>Q#^unXM~yyxx1ph}W57UF8=5u)2F4I9tfj^oZv+po z457?NKICSf_60{ixqilNKldvK`q!fM^6_sXC;1`K0{EeUA%Gti{L2rokS0Hza07q* z+unVC{qLjgDIz~OKLmo(B`b~l>Y#DpK`h0cviJA;838a_ ztD0ob@4+KKWto3r`c?oM00d&~lV7)!oBaYjDqt#JHR`LPn^AQU zuTog!S6_NTuMm|TL*U!|d0PdZg}?aoTr?Wnzdw;jTZ-LpXJ7-}^`$Z1yw^Z{J0FNx z28!dLk-bfUd2p%`zmXV@8V#3tc^Q7 zRG;^XuZyw;XKQQxMgpnZ0wfG^r|wQHaXDn*HpKVRaxg$gb5X$-`&3xLY$EAQe~4V) z{8qY!=qySI>%@(J5*gfiUvD5lJH;crTA1Kh*sIDLP&ms!R4uxF?Vgo&G(0+{Hg0*7 zanP^YMQ%;o8yiT_gCIW?8kTuwc(j3>Xf$>Be^Z~kv8J6+e{s&oB6S+>nJUqdispWD zs{dSI2=qWXwe%QG`d;H4uDeZhA(8(tA~Bk}qniVI*Ph29iJ#b2YdqkMKiQ3}w6K0` zfNo;3rJVUsW&JpO=V6c9w4cykSZ*e~lfmNA7>B%X6Q;2d;hgK-DI~GPilii-dM1OO zW66#)%gV4yaNEAlnw)9zPueG6_L{$soqOWoEu0`)YxG3DnL?QK>ior-SV(i92g%zF zNbp<{oN(U13|uSj&HSDSp&?^HGWHn#UeGN3=?{U)QaV|^zd*fdca5<-IPjQL(w}+S ziVmhvE2|o6?8M(E^h4MlKgGkG>So*+P@nlpIo zlUYoWF};nLTrYo)2EIxTT*m2jxl(LbE`S&YHbn`Fgzw4~N4f97pgl7$AM}?)_FiyikX~?k!Ws~qQ&e(Upu1utdS%D z=DpJ?)ZU}u`E%JkUoKWFRxlr0v|jstw}KxWQoWf3@LLs0Le6mctZXN@f*s%0e&4wO z7`Y1kVmjA{pN47D;`nOAiVV*@i82H3c1vDM(+f)8KcFAxg46rPIZ^?bSNRpPGR{3snm7v@Bs@2W!ljS!e8Nx-t;Bq z1H8SWZy$53Cjz&Qma?H$L?e;L1q!%J>v!cz+ixoKoT7PTz3qEKtB^8xQbA_RgL#cIiy z!j(^mJjd8`V7Y?H4HXn*sr6(>r7B$mbINQ$U5gg~xRCMr!Rtv2@1nrRXJ+n?`CUOQ|3n12~3KEFvC%I?v|nr$PW!iave% zI3J1a@})4_6!qK52gYIFuY5&PraYv~s3C#Ny@7FM`jCg%2}cS%WFf$rv<3S)iu+k? zSz~HRxcP6r8bLs2ufAAtXTAt*d*_H{6fy$g zNq3E>8sZ_rMJ`2rrZ2Tbj4(K=>9i-0sC}EXsTd%~!rM>g^8@w|! zB+3<8M5ka1N!&QC?JNs6xnIF42`r0!?ysN`PZFiff;C}rAon?zVUFT@6*XrRrX!|8 zRAlp?P_$DDx=`^r-4ry9bPjdFT+E=U{X1M-l)T$U|6h;(?MMY_-8Kk$rqXw%>kG=D z4h%Uq4i4yvh(XHtKhgXZ(;&`3hd|fC!^uZeAh7$%fBw13Nh(Qjo%$JRCEBY%t_?!_ z^ktKAE9Nc12G**LJFH>d@WrjD<81730<8|yJq_9JQ-zuTQoTsN*0+JNpmF70O!XUUH(e5ffGCcU)-Kq&31Z_B$upo=*f9^Q zypN$(X{O)!)_v7yRJYJJ??ZyOqW9{Nkzx8G1;>*`&VLc8{Cn2){B@xYn+-r}}YC zK%qB6GUNJc-n~1*fGSy)WL@KTF~!(`u3~f89fWnRZ8RrOvKz)!0*iz>NC<@zu#dZ2 z?P7?$p&&rQ239@t9Kg;uW_lZ+g9eHIqpCgg#U$h?kaN5u z7zPnklpb`^C7A*NQ@y<8DTGcesxl#qLn+eU9YqbJ@bY}sjg-FFH%h+F3V18t<#qQa zkt`non-9sd>?xl>5S^r|uedA1BP>)?=I%Ib@Kq)Qf^$Dpy^Oppi6%%5z zsf!q|C(%_oRbA7h=%s&s3$xEtuYx!uXVyjHX=LWxidOAD|4D-OEhSnM>eMjspf$5J zPTVT@F7)mRq4z9dLzqK!NUy+Vfc;{At%Ma188J~HHTTwbfEyz!*vFKZd%=`X8U>4e zDk$ENf&B*r$ZV(+u9K|>FDO7m4Zr(p`dT*IU=u?(t7j2I9GFb3J*Unf#gFuh2{>UR zhG;}RE}$?IP~fstAq%t!^khZ`Xc$h@RV6{g`&y0azjN!y5eGZ|#ZM=qASl`IB{+yt zj!{6iLI1F`uL1xL8%HSq3~eVC18x@7aq$e?VYG}`M|2psMP@j!fmKi=q%R0Aa3=Q- zjLykUyDQQpX~O?PiBX~1{UD>ePE%^V0`(K_XF8t<_ZaGbqB{Ilns?6;jxd!n?lHGqn8x-HWo44bd9%mtgyVr(Y_dK-hp$u8M? zV!kijgNdIWc5{5Io>Yo7(88Fb+t|1@;YxQSlNv`f&d1}@IQNv|Ue`UHp&YolenvUI zi$l9gP@O1KTYLL}ixdC6Xf{$m0YW^hW{Xge!k-~vf{dSHOg31@*gZa+F8GE4<{4ed zE5WrsNzyJQ2hWDR&*KE{_P%O4qQ%S|4a9E5NyK+}FYYjXn&`}EJ&SE%X7Az->Ahr0 zkH352G=zt~{r!pG5ubyE{uv7U*#fs=j6=>bPH&K_7ULr@46#^Y`7X!>U~VDdFXt1e zQN2ebIrW_9Fb5CJ95TdgS4VO3X=-SfXLqut&9aXHU=wP7*Ih*hbjwUfhT&s}Kz|{n za%2kY@n+5vetg<-lD`BdxvDPG90y;0<$Q&WGU+%u1WDTwK(|7ma2R{s&x#t@7jDfG za*V|Z8E+@k{`m4#0_Kn)TC6uXu7(-VR7!hMz|pH+J$JKpm#_3Wxz8=KOY7U0-l$P< zqQCE^TYyw_uC7>FYPK$l@bmiws<@*Dd`Ud#wl22nk`hV0WZZFFNxuOgj*IDYkCXhza;`O~nY0A8FQytG#M^}|z)^80 z#g7Yx-sFbT$-bEC8Q@b+5+SKg4SNyT7#}iFp@I@6F-7!NJXZhPgU^Xl5=$w5df{BY zQ-P&@RAOaxBQ6_A0*D@-ZUqK=)cSaVz*JAAEDT_8r&@SI^|KrCBwc-N6*vR58z~;K zSD#4wUN&(cB~dQ56ZF9kg=W7EWGDvvK$jR5vUZO7c}KtDx>Tiv)YzhDILFRt$CY@v zUW-dH>KkxTg#klx_#j1swT2{5$1C41LH&Yc8t|i|$GoN{w{)F}?Wv`l3@*v5`}?DF zg`>v7{Mv=pr1(-@P>PY|Pz9{b3cDZ7Gs1AjZNUc4zzMsRE$rXBklKav?W2+3tl1Zz zVE-H|9%MO;3z48RV55NfBm(+sKypGQLXa8xjZh0lhx8Wc0`@qsntg1)SqB*+D~%=P z7prR~1DHC2* z!jLP=a;+CjwOXk4>Li)j_su@%#mdRb1cK(Ig{81tmTJ50MCarLGm7yX=pQGU?TJlB zu^&DvzD0!QDQr|%iU$=y{2Sz`b_fcRo|07gHS1FbKemrxX_~br3Larw+Vd=Z5B`M) zAemt<*y5#c4h%ZPK-~f+*~7yyoYSE&rQk0>RrMIMG{an4#N=Q^Zm&a>EiJncy;v@^ z2Q%tS8!Js+n{2-U#oEV!BW&F}gCvxIEPdV@!Tg4D$)KFmgoC118%&5qW;b8WG{R7! zbExq!)9@yf1g@2V3n+e^YDkL)Paq!U@m^E_n4wm4e7BYxlc+F@&cpT56mLEhaRvyJ zN!w^VbuBEbhc9*3)|Fvifn#a8=G_3RE3KmrW$if@Wm3gR_6!ckilMMJ@s4nwAye+h zlE<7J`B2Kq2b0;-_C`W+h=#dP|3PDH38xo!GP7m&Xx@1jWq1BZ?rd!e`^D0zeZ%1= zQ|4(gJG!u@stI;CR_b=<*6^k%xMW#np;)LBNDfb*`)~EF5`hh5P-WldS%%S0 z76lWyfPG={$sR$`VsEb|NS|WDaC8nch;^=g^x&_<$SJtK1g8<_hH6R4;mH&UV&QDt z;{>9X|0TdU(R=vFg3~@zkMu$`BygAX^?_1o6={~QsEYztkAZp>H*M`AMbk}@ZBAY(snvHJjg0;k>+2)Wr#n3&RBSAiDjny*= z@w)BK=&G)GjSqfa*nQqjH1rk5oCU6Rs+wsd)b|zOojT;WhI8d9Oc6X18OkYk9qQAR z&y$Ha#G5OWBFw4+7c-55P$p^kRT4@AxX3JrKj>$uqd&VrQilQ7()UOKuC?XFen&GGC(`MRNV>)lt&nqdOBmvq!`_K@kuSCR<4-=rm?4T~d z8-FxKzIGh3Tx6w1EELk#oDwk0X~OY-6h2%&J>f&~r0i3|Py`pK5jIjF&1Tr1eANb_ zUSr4L4h2eUK=J`sD8+{*0_J~RlF&s{K#h|6*(yi zrY*{D7TkQ{9z^PCtdUPk|5xBm+23J~TjZrdkl8bLA~&X5)(a;>VKLx5rog?q)>XJh z66@W!2M|02vP$;uSEH<6*yE61v~A`E>dG7`$6T;o%JAURZUX9{S{d{I{92Sp0VXxB{*6Y|Iu$$`VN2-<%ZXOik`+~#7&Jj&`PFZ!>4IFA&$%qQ=& z7mNwe)(o65zabT|8Q4}rY4y8VrTpVQS{UYHh<1EDYqmQ3n{ug_oN~fzeJ=Bt)I3k; zy&*w!okJaBfKWns!1YM`sdJ(8Zba^%b zLZ20;N~|zKl(GJUsZc_Z?3;nmp~^V)5D8g(`-i9|UU%AFla5xnVOt#yG zw-MM`%NuUCHE?OW-s;`WqTm`u3H$lS zi0K}to!|uGhj)eES0DgzGx&9ACjceX_c;;Rt;l+Pt^$Y`C)+2qFgehlfyZf=ymMx9 zcxoTV@aXMf?o1sD^1!hzIMxGBJth9gBj$U7x~?OGUVVk&NHebi&F$CwckOuqg~h zq-eQIxzQluW_R1;1bW-XjD@=9ivUQLutCkIT3C}0mVmN4!hB}!!6;~Ud-&Hu8lm?% z4s1t1U@sOz#;rB9P8Ck2#V*pm5YPXVVjN>=W(uUL3iGLc+oL8bBMVmY$|6`_99!4t zKYbnL3u71ks+pLi91IWjtwK{H4`+l-noL6O6;Gsy@?*4=-^cI^amw{eTZR3k-RAa@ z!OA3ratpl0T_lr16pFA5?x!ZRyv_ydlQ2v{K;NuGCI1zj(NOh zrF~xgCxT90i<1j`Qxs)^Y!cY?2R&=C0yM^CSK*#a#M zU?!d0YI0DEc%^4Ke|aj#CoSo)NK7M{}jjAlxMEXr(%wnUH5Y{LY5wXadFMtYo^~I=o-AyFPbJeXT0)h zI}AkG_bYhJCSZaw<%%{6N94c*&G_T`>>MqL10EWU&wStbFSQS**v?}C;X|Voo;jBl zdDM%OGcj;2uM@yWC=VjNnU1EWZDS}o~Vk7NKJF^Aa(fmEeYZ;b0^-!*<;l6`- z`R9{LXQrLtzC%0xC`W7La=kx=v!06<{(s$`YrO0>U}FjPZiO0V3!*c50?(fcNx z{`Z-#AB*&8V}M&3>wy1x>Xi)8Yv|XW+t+*xU0AmaaVNxG3|1a6aD#3P)LI8~{Swt| z1h0z$8T2tCBo>y+Q;#zyd^E&b4}ktI`U;B$Q>5q;2Ae$5XVGxnGtf92Zep}+FbF6@ zZY(;lLAS|JDrd@{=2)K`vCL2PjFrOu^t}9tZB1oLOU&nX&6|^%mu_aK&XE9o87LrJ zbImYWd>I62gAb`#Z_4D}l{W^$dHtp6>AoDmL<2OrVNs_Fwf^R|C3)?rByRVf0j*{Q zh;m=_eL4$$dqdq98fXdHy)GVfcyaV$$)r8)Q|h}D)NuWeN=_%ppC!=>dA%T9+ciTm z@DgB+61g|Sik}e|%Ny{GVb)8)|49hTPi59{(P6kY4VDj+QTDU;rh%k^hE%JpcSg#` z=n#h5MFQ995Yfb)bC^DnO6r35vu4;k9$DTGKiT0xY0zC#QFLB76REfj@1*~!E8I63 zU?FvX)GJ;{Z)C=2_O#2LaXC6I&MHZ@i-@OmS}y}i<`s2`JZ1);dx-l)Ele|r2qcqL z^QnBah3xmyP553r#wHX8KlEiTww-;>9P@~HV|g21}2gNiY{Ug*!14^e+eO}n5_<{Cmc$u2cye*DKKm{m`uy-pBv-I* z@%(#y_%pcp?+0v(a7)Cy?)!4&b9@;tP<%nG=GxEFrL$Pz96xwZb7{^>SZX{Ml2~v& zLwsLf&t3`?Y9Dc*Q#ls#=iG7+xhaTfM`2l!DEbMwN&zWfBM(RTgCjy5VKmrBxNyEC zD`9w2??_zaGw+b2fUbvxkR1HwTM!`7ul4z|3)!Mu{3Ut`?){U)&Sv3l|V5$ISSZ5fcL^@%`leu|3H` z7WB&eMc=x83yOKp6Iy7b!kJx4)4YfG|)rOlR|2;RE9 zf~EQ{&B(b#iVu1I@STF&MgAR^Ri!n!eQr@tUQmqp2K*$lk7NTa!SYqI)}d+9+e_puMY#2Jj3CKaE?V z_EP8CE354c<8sO2Ta>(!Nn-5|IkhJp*S>sE+W~pw2~wm&01asioJT!`BCCxJMY|-Z zOT5}P0e1~;>{E3xCTnHXa+<^2p4x2rsSg*1e7mmvvryCl(l(zf2)iNDy%yLYT`?!) zb15e?VyR}(WJ++f>mxf#60q~>dM*CdD@BHls3?%RI?DcEUA_1XdzW7Wgf9bo(!pVu zXlbFRCo*Tz`dOXniiYaA%q0tZ)!h!^oTs4gbl~6}5Jtj84@d}-4;jHJ`6pLkhuodE zeBGcK-jf&2NYg%axX3hWJVLQ_?cS$61(EhUi7xRftPKYbHJZb{wo6;Vd?F_Sx4Gw))5>c&OCquBg^c zOT@ovK?GugA!LiPy)x4L?YrSe-^yY4TDZ;#-a5=F1g~Ze&e;DQPR-H*sk@ z2^qH1EKTRmwXg6lj;Ze3z}1X-gQ7o3z6fb{iv4pOHp1w$OUN4+SoWwP_EBk3RI7M- zC1GOQ*9DMu3L*t(2~?9K&^~@k=Zjz)MoN+|xj=WeE0zMEcfD?{(TgRbwO%f-`Y1Y7 zaA%CZe=uoYxF$DtK0oayMF9+{%qW*3CyDy2aQ(YE)if$F~p^7Gn1{L6wfjjT#{LQna9TLO(|_asD(2juja2z zL>#s1DLurcE?EV<^!5yTP#^9?P?zL8F?-O>K=poT9zcZ_&FBiBM+Zb{T0p1`sRt9z zf3v55rz7S4vN_S>mSJzIbb-GY8~Z~gl*75_7I@!{nMFWQxE@naI0(=Uc2!^{DwX!* z?wW`$Q73$#YYy_%1m+Y5F5g^4Gb^PPjS9eKUYtGG8?t%KY76_6yFP1nS^a|ZF-Lu> zF+7)W>=A#7OxKA@aj#^AoMMf(H^1fW)>|Mx8!9h--S?V&IGS;Xl7fDlxplv;*8H&m5*kloVM?dg7 z5#6pfoeVK~_om-ez23xRht_=3HN0E~aBgLnPVtNOD35VwFZ@c6BlwBB9HKjrW*|7A z$z{${Ws2uAJp5{?`B_zEn3ssoMl^pab+S|Le2cv{x7v=0DQ}Tc4%bx|b7u5JizYrG;^Pwiv zeUh-G8cc^xEOsr=_B9Cq|-_qN0~bQlqD>3XI`=q}Tb$JjI+$3}-W`XPNv9 z3^T~a90>?lRTS;yQ-3r5`i3!92JU=2 zvjJ0qkwm>eQMl%-c8USg!m@1<0#|vrFLI6QZC3Zi_^XpIzx2W?@w72}Oyni$3Bm=`K4d9ZeQu`pDFutagUnyLnx> z>2_d{5hknKl~bKagPM6YPQgy49KN18Ka6ghQXkXN46lQnDUbcZjx!GR>uq;1YA(4P zZO+&4RAK9LC~%>sXJDH5^(|Sb^VEEO+!z`t2VCTo(O2&OJ>h5Jyv6CtM&1BL34u?z zV|>^Cz8Z)MiBqkUf?ajQ9vh@U@#uIJFI-Tr79mwW`{8Y+O~MtJ)rHXAc7Ygl#i^s+ z4-_reu<8_)gsirRIqt;$E|)8=O0qp(2#gB7$rx~rkf97EW5u7+{unewU;=%_)BkWT z!nHCgl+-G9yjN6z z2?WiTh@hvMZ{M*-{YCkKcU^U>s?_s_s_j_>c843K(26A_EE?V~rMbRrW9K#U?(I%lhtITcrpK`m7Gayb+e}72%kR z7z>IX3HCDGhO0Q9*4hQZ5LMdmtKzqodly^52<%uf%Of8qmPdX2O#;hK(FBfL6x>OS zCB}zGIKr>8L01k5HZo=KgK+BHAhAFBN2=aD|2+S{nGW8%u?-x?;qExVm0U=|1KjnW zUH7@|oaTFaYX?o`NZt(b?xJ?gNpNYF%px88#y#onvjevypC%N=e3d_wa`MawZ8~Cb zie&P*wWiZleH4%qBk-j72$jpP@CNFX<<%OBqY78;%Ya7jNeb_D1FXv%3rN;wuPBq# z;;cjKGkZGcN{<)uFhRX0HVWE_)bChz3(;my3CBfVQZ_GwU#6&xgP=LmO=$>BBr8|g z%({JEJYpGdhqxU$K)j@eGQ;^6K%Dt(H5mwhW_+fa?1L*~{w{RB?Rd=B5#IyH8>rnE zARr1S)Wzi*aiLa|YZ1)tZqXjbNI$5DjnEM9{sC;y@;~#6#X`;Ba3uW&{e25KuAN0l3{!`auGzXh>5RV@N$RNVv|m zP8jkUNm$>gtYAJS0L6f5 zYhxJKZZhPePvN9w=`~z0^+`bk<3jcjZrno-h5#D;4A?!_b84&xCCi_hQNFzuzJ}!V z6`r2@von180>@(reMrlpGMqPL!7&B&H}I3ZA~8awL|VeC#HonloN*5tXqGQXl5->jHh`y<7shDF;CFv zN+|V)5jGW!UJ#@w%7s-3qOYx5X^kxn7jw3l=1t+IZPv<)W8u*CGq+Y;=nh#W)*z&~ zIl7|85CKp0Onq}*8=3c-;weSDxuVDhiLR+ z)5~WE&4>{7vmG4*m9kd(2Q9$imz6*IaP_{=79zGZMkv9>oHtyfx>VY0W^#9UdB8i^msvos-l&)FxzprG6nUz0%BsRXR5h{ z-611<3A~WQK4!k~)O3p(2yCZzi){UGl)$B6Zr^E6_fPL=`38WUeo02dloesjj+((v zb4!nFqo~aK&L-Wt_!nj#Y^Fp{#u0TrtlTX(>S z@cyZv=^34u2FIm8!=FEuGs~6R20z_#j<^Yw&+rry-To;Qvg0-Daf7Vce}uVrm7@1N z8G6>*Tu+`I7Ttf_->T(*2%9g#S5I6G%5D!k>1!uy%-l!%Hv_T>v|32j8(yQ@aM!4wzdBUkcVV& zXDH#>+8#xIG%jBJDsG2*r+kMIYLMLdH=Z5tD9`ew5{7Y3egYTzE!ahJpZjQU^cw8; zDOk6$!@e)8(Q>#dh5DVD^2sla1v?C#_uCcn*e&4auBjcXIEJ5oJbI)2L3fL=xULc) z|Jppm_GkI$zUnlmH6O3WY0IM>E2qb}zi)v8V|1W)CCQRAG4o)z(tjvYj!f-8rb;#m zq;~a7e+Y}WIDmvY`V1zCck*&l7;8_ub{e=r%w7!txdgQv+VnZ?>s%W2A^eoWATjqz1w~R&E-hkE1*E<0|#n1D~e4CKuS&}7#8X?J z<6n!j4t=_>O`RNp&2o1B>)SaqJeL07=SRc6E=jFJBTJv}tHq+g^Fk!v)t`cuS8C+*4hXR~qSPLNV@8r>?e{zU{ z>0yTskwWz*lx_foqin*q;{1`OsWXKcroZt}ZNYGQzsKPz{yhoV{IFeJ>Ed!D!xU7+ z?RE2H7S`adI5k9D2Fl!%LdP>az_AfS?R?&-*Me{iO)XziFkXg^?Dob3s1319Im1Ld zC9ZeYTsE2yBLxgx#oXFK`+_oO?M(0lN~wCwZd8c&1A@_!7Bp41Y5`POh56yF@FzDJ^mm*y=>>5@6@XOKPevpth*P zxIm4`KT?NBt(#d z5&_`HHD*cr7|aT#RMh)JG`8IvGmhlJFgzBfZVL+oWAVPomE-7G&9H^%>L?CDs^l9E z6amiepsDREji`AiPl|s2QWboB8J@7qH}|Mm`i-#0i5%Z@Vieg?lpEo53LS)cwQji& z)tm7e^09iv1+%LcI63*FV--QXqb=C;feTSfu?roYkSx`i$ZXn>vwnP`#>J;#f$n{bpqK*`<*^}lmk3$}cv_e4EUnWFGC;ryA{d|SuV((&%|JF3 zpxt(xbFg1jCp_;hN&g;E`R&b=Xx%u*3<@3`3~Ao97>PQ!kTyKCr&l-)mNzGKoXmh- zNlfBv8PR*}UKm3ljss>%9iGrPed8<6mW1`_@o%0PZw=k$PT-_&Yz%2~_>TQTr&0^+ z$CMTpc78|UhhLA)Sp+0WcM*`x`j7NQJrR)Z>E!tmZE&s{!#k2MoNwdH;sBZh-*QXr z=3AexrgBzXS-*KeSl)q~8+Z0Vyi@s1-hbQL8+MNFoVV2Se!z-z0RmmidN+PC7{Ol{ zJN_G)CH{9~;&Sk>%|}?1DMuSXnyh=FKeS&O=QnL7IfCFD6tYZ-=_h$D2`d7CWRp@p zv*a;i*XICpZi)chk-_qHh>h!6aZDUuce4kRC9}Px&}kk85_SQnvjlC>Knm{Hl@S&h zjPFRkk+qDpcIP?;9`qkdSsIBcF?-tc!XFq&K07_$61vO%lfCE1`&(rSy5%QqWXn*3 z{(nyn3Fl{sOV^yHaejJ z9eheRGOta}FRvIErAlRZ{F{t#^YAB!DwQIi4;8FtzVOJs?Zx4J29nRtj(0G9m9|s9 zz4XwPpB$6|-d^yJ`}?M&m7w8EqCqRrE2UB(%)_}o@eP<}^_;1q&S!|BPPuuGs@-Lt z55(yXOVxTXxpx)9TPxwfskT?ovq8tA(hs9J$uKfIY`p8GO{q|$`VfH90H^8t1o7yA z6HMi~5+0Ti({GnNiLRx5g6LfXs z+fE1O@aLOpfD_p0WcFUe6F0aLv8UhP*(k_Y7Fzm=>OAcF6JlZRoNyo2CM!;>)Yb9B zkEy!0jK@F)2jNINtKE#mrJxRBg$GJ#=b@GAs%aR{9(S$S-tDSc&tYmJZ^Yzu(LUlv zY>Lc#A-GS*C!vAN*|%9*x`ga^@S> zx<6wsvQB~qX6V4b6p$;)4Yo}x^ zeKeUb%I|%}wPQVwyiu$dVpoM?;>$2Ua;}#6JnRG^M9U609}%M?wu7al%~Eh{{i3xJ z+9mMaGT7aNJvxTzf8{V-t2nAEQaK1wz@{aH=;LeWkGhl)I}-G2j&IVFc7c}+v@^>u zWE?(U5%zWZQlT2bM`kneo?>xa5ZX%>?NQPUmHCOKBJlK-EUO5a z1YUmyr@_3dw(@6EAG-+}{hdg%Orl1sVqA|*(yi6SM@`FX8l|l-h#>fh`+q(1Va`EW z!K779#apDLhKNnhy=sr!|0UxOmfyFMNhv)K>R5fpr?Xi<=S;5Xo@VN5XU*-u&WPPDgx<(!~tcxFBn{B?B zK=2u}PDu&#PilPZCZmn47gYc!FwXC7S9i5d6#U5juGPzVw%~!s{!_QX&}6I3rQ-tc z@uSgH@>ENqCU3$#&I`X@PPETF6o;E{uoP+{!Y??*x71~ryb}W~r&2HG0ie>@f5;Eq`eTEeYpkgy4m<^bb%3B0T6(P!d@lP56vf!DB-hdy2V3bGn z((KS6y|hgrtdL>R>^VdNMh4`~RK1F%R(3|~Y&UJU%Ng1?xoWcSV)!E@Dgri}u^><7 zICBw7>{tnUqukSU74l>85GhiV=s=y)8Ps%iI*T2GB0ZN0-ba9Y3(e4)`HR={Jjz1m zibHWZh=8x=Cm-@VZrLT*GA6sYi79lg7vui*k}0%erB{-BRi%Z6Xm=lmXBq05O#;_a zt3QXeP8Ki%IZfV^%j4&^&gm>5WE;m9%kS{@X+xnR8Y?{l>JhjU96^*ur;E}EI8h2n)F*=9;%jeiBhxGO?LTk; zDF0KxIyD#eW!=Zh(?-g#Ipgi&Cm-`w!qz10ld&jzrZ6pZu1?k*v-V2V?p>ghuxCH{ zMT&LG)#jhPoGDYp1_nLkwznWoqtDcGApyyKKi)>2mpGMN{!MpP^MNyFi8qfWVkfln z`$N>(pIji?Ql=K)>ceb&D@Ci_{Ia0gADLAz|IrROu-TOxedCAxBOkU8<_Aa(YSG&! z@%eLdN`v~@JQ`uANt!yDdyxYeZGX3s!@5(?c0ciS6Ej5 z2ph9Y-3!3uZ$Zvr4tg6D7=U&uZq6zjK)|yJo~KBZDoBq7oVdiWAvCy3mp*hj02%Ar zpG~o`YuSHLJfKUJCkc121bq0d5qs&5sd78H@0DDo=#XHvlAZP}D`MN=4Wi_?Co_<@ zjpM3!((FDO_6(?l%?wsA!uhMeX8O-zAAd{cxn>wuARSdy-_%E@$&5$@9v^>5xN|i~ z^r{hk>GtaN%Fd;#?A7eb{;s8J>EP~^7I&8>Oj@BpOnh-Vt&fhj5u-i04|hB`$K$4D zXOInxylPbzGV`i*6Lv!z&;q-_VFinC1NW6ZH*l@CF&bG`&XI?tBE!*^-=HZmtPcyU z)(HtF_~%o`f1k_3cO8JzIRGcKsbK%ektm_8O!w>SL5K3JBxxKRaK3=`dlmqhJ)hmX zgdiv2*k^VLgajOeg@NI6UuSq6h@Y>ntuNJsad)ioE4yEhRO9_Sd0w=p2T9H&yB=4@ z!i!itE$HIaC>T_quZOWX11?dF)-x0J8a>SfXcw;|%h8aY-~kn;OEk=3kGe(bD3#n> z_xVrmt54HV<<7pRd@N43rDebOydt-ZVhr&HMVb17z)vGx85{of#GE;BrF(t2#(MZ^sg&Qe#V%f@N zviTK>xOq`-6Q_P~W<9BY+%1$c1hTZlt5-cv5J@NfHR=!Iv1vn)z z1Q?R%yb8hj@em^=tzF*wd(e=yUUKw=cj0?}Z^n7@t>mBEE6zKlcYht`>zg z?ksEO9S5yDX6Mvu`Sn8MUDR;gqX=|hYZRF>8-K^f7cUkEwivRh_Gb3S_y#c9J-*!Q zdCUoK^$QpW+F&Qs1~t0_Z{hgWB!z8HSFTuQq#k^x5>@bgJ5!DQvY$*P|Ikc`CKd)< zEO&x29Y509PuuQii4EuU32LJ5`2fC&S+De`H8(E((Vp1Cn&2@^dz4Y}Lo2WB38Vqs zV+(T`kvnAsHF4@X%Ze~|KAk=fqb6;A7QjJbh2b+G?Qjkf$^9^@6>hz6%=`kX2&=b= zxm7UgB3qiDo{tIIQR82RcgZLcP=Yz3q9jKSb(^E)zt*Zb)w?l6Ao>79K)k=wEZ;Zl z1`5@MjY#V0_9XT#aIM^!FgqJK^QZ$Ov&i_p-Qq$&gP~Ph!eNn|{ct3N8r9Zt;_hSl z1KMyPLPPO7u;5*7)mg0)C<3)3qkrsxW7=m(lHoJ#j?-E}is7hTkVB6)V5td4MdT99 zvw&q03|-!$l&O^iGr6aC=Ijx;FI{%(eKG8TJE1EA8`;&4qH(J)$L#j3auc_ckvUOx z2jsG&0n4E50$krdl?X$6nsea62%=jA@o*e6DN-G5gz&RoUBVv~Yo+co{}YKHd!ReR zIt4RJIctN-acZ#LV~`U&=gJcQN(kJ-veuoHiJyNk?d=(>sqN&1VM6Rfj#U$OyO!;s zA;(a5^1hZs`}Gf(jPGRyMUPYUGl;&aZ`!J#NdPa59drKk-1y42N4J;P$f~-E6l9qn z>S8z_L>9`CCYQjwSWVg53~*L0e6q=>J2p9(PhBET+eZ^Pe3c0Z6O$C?YE^5#%@U|f zl8SRoW6!DB)odlL|3*2h;Up(mXS+m{+_XnmG8rBDyJO3iuT5TGpGKWinNvO^#I7D$ zdcoyqOKqDZLyzz!#`GZii(@dri6##)tbG|o>pYw)dve!L^4vMUoewUTL8t-;K{6fX z=#7#(m01?5Yxl1YG}}O*oAy)y@biUzp(a7L5$S(47!>tDjoOBo5H)6}DxuPzb|-Jf zH`3>WJ5zYMh@PeZk!hPD_qI=#{4vnMd)n&M&VSLZ?F={5u~a<`zAN$~)b)wp&ht3j zjDeamFa8j98@rv_$;t_t;pT(0i%j{W4G?C}dLN^~9n(%&k&q1`z4|cFD>t~^!I(Av ze!>-(qw=B5h(7A$m*&AWt$niPDrI$#PE*GSJaNjk+X|v6li8gR=nfH>$Zr8%RZXJ0kvK|d4?X(gH9%6~U zu;kE~b_I9~v|Z#R@H7Q(XTIS!KLN0vRyy2wzYqC-o9Ui#wPU<7XRC~54YbPcAM(DT z=1v)S68S2V!18W7+C4W`bL?fpz3AJ}o zzWH5?);%gu${YQEfA6CBEOb^1l@7M_)B|v@?_LVIHami^Ek7TzVm+e#s(bYb`Ac_I zW0h7{?7U)DZ!PQ*7JE7}ORS?Ruf$Nlq)ljj2zQri^g6eX+A3p6|7pgg^1;a|?Qed6 zrFWtqwN>YKP>*CjOR&?%+_kswA$N~6?miX@wO=L_9n0Ctg~yA#f@a9TRPWNVw>^8W1J*~|Lh1Fc(t7DF$(xiw?TUOc_eTc8KzVePw+IsK#6 zrNS;2z|KH0*8!}~4zN07#@>&|N|Ju?FTH9AzO1qF^I@;V^TZYCEDEZZmUgp$)&FAV zJB!bK$Bp^dVymmkL6j&(Wl(mcUp>y%kDo*Hi|3wh&rHlO9RMUMumg6Ke(T5UPv>SoX5nM8Lh!8%tJ*p)j2&aL&KJGSIrH)Lub8;Kqb&FP9<-}~ zPgo{}z3@I($Dsv5cjX^~lzHcCRV{m4T+l>+FrD5X;`-90S3owIlfs|s#B?ZrRT_Z? zOVdZAcsLl%664VeE+RnHz`;2XPzzwS0-i~qzCi#uNje40TwU~sgzkcQN7rT=nD#YL z`qMFjatF?Se+??nm>83H9~k0^T*laJH%rhMsLG!XRXk$kantz_Mb>x z;Ag>0-}&-Y^3rK?42HEm9lmVZHAOX0*#cV&mCnD5yF5YVzEF<$9>2v+zA9;KnS(4$ zK`oTxd0Gi|R?XA~cD)TsW5hNyTX|Jw@Z|ex(aR!KaiM*rg$EaEfnZgn`I9Z=H-S|@NmkZ?y6I2 zQZUOs$-~L(D8eWC5W7vt@!3?g=RkVvsTgYNAxFw+By0z3_IAh1sv__}^O9 zWhwsa&a)>+Mi?A;X_lHoDHYg7Xhu<`_w3b8IR8nVhvwZcbJweeCj3Ze`3XFs*qnPn zE%sy4IUv(qX)vN}6*+IYA?^~xb5`EBRealRPlDghqb~;@`9SD~`?Lf8n`cc6ZeCn| zm*W*xavE>iq&J&1n~+^soTx?ioQZwj*fpI?2oDe$$Kv_XDQnx+5<^`PDPCTPHBNRm@#*as6=$c;4_yjc zUdfhdzrmJ0cNUU-jFf#zJ}d+=m)A)j2RRbbW7Rm|abKo+sM6*mZ)ZPdjcm zh(w-D;23|h2?BfOs7iW1DSqoNFe57^6d{Ab()!F%h&lWas!hb;C6pz(y{lUu*0x!x zLfU{Km1pQ0-ZwmU7Jsk0;^B?M>L*?YJMrO?i?95Y9EcO!SJSn|1V2eEqkOW`;A!_M_52ZrodeC$$ z77uF`Du;AH!$8_dE1IFfV#R^f*B`iZFYw=$9w+th#Kh+(4I&OAQqiL ziS>PSMVVcI{YkPiv&tyJJ;F5=wH`W8%x7KUQ68(eYTtZ*H`mOmrZ|tR&sm5LGQvbl zt$rBY90euoy%t+ze2|6IgM{z^iZPYtR6#qX15k@0rO6H3Bt*VX zbLVG1ouCM9O|U9Z`PJ%}p~dQySwSFHdnhV5U=*S1dwsg|M07P`Yz|tT7b6K@5ApKYlfQ7frYZT{1?1*HDj2pcPeP2D31WR>;^dl6v+v3^Ljz3=1&WA*-d z-jjA0a9>-$RaNdfCo;->{z}|AHN(GB^;SHi@DAzog$$)%Z?9E+Tpe)uvf{kbV&C=F zY4~{i^=D$X>qmK_yL)wt`*K&%GV0#l4?M6YYe`#MiEz8!0xISocVE*tH+S0xTrO~Y z{p&}&>EX7sElzwe(2qH9-u&wu89@>;6rF1!dUshI4O^5|UzrX9)t>CxBKz!{BeI20 zhne3oGuy4>>_Zoke6S3i=?j$osi$4AZCaEyUv=JGu^#$eH-f4=R(gIX>ft9jMnA=X zhd->;x(h2FS{+tCaj8C^K#05XZ`5s$V5_t#K*xBh^)QvhV(~zg??2*}c9?JTv-{e) z<6mLgXHv6=>KEnaixm3G_{A}cdxAhD1I!ZKm_MjPZD{QBE%d$C)!j`8wQ`^L!{uA9 z7jBghX*gPL_vlF;EVJckD13)2{Dq|6CW~_^dHl;bvw-MK?Y+n9Y zWwZZkJ*ml_tgtY5%)GAZcIfvbrMgk0kEL7SGE(var(;ka^A@sA%@L@5+CW;uO=2t+Xn zM)7wnTx5ab`;unvy@bQ6O~SL1foj_Pnq%#XiK@|?SDg!DBVVu^jhC*^m>m$?(a(W?a&qY8<`sSBokH1vQB&UsjM zFM-?qJQ;sIM0UmkKSqSNbk%YqQKIXNvXb5e#W<&2$(@lM!s{(kxX!Vxt9E%2_{XV3 zAeNIah!F;--6AJN2QkI#D?oJ!g)_u$l~e;%YTmh{iCK{rnN%&~x##72-N*d9CkH+Eyt!-+u}%dQ z0*(mzT`=9vC)LDOKkPWj&ggm*bPfD}SHxdE-uWx6Oeq;CtpEQ>#qD zfShr~pjlm5Bvi>o`S~sSaeScNZyMk&D$}x;XNk$i)H$&a@1?j@95_;l^qo}Mt7Zev zU{ianyQrbIm>{!RrHcjQLmc6hVe0i)xmmR@PAewM?kq5Y#2D2>^&kDJwOwUBFIrAF zt4>FBCx(I4z3Omz*WqnsWQ=n>&7aLo*+cM3WG=P+6yIn9_!^+wm;f~a9M}N|jBlh? zI@s*pc8Ab&eNjumN4OLB+vdRiB)~YXy?Kg#two=s`yp5Qr1H`kQ-v`;dzvbLuiIQY zXccnKtFYKFqOd8=c~Pc3h)^7?Ov`Ahvik`(KvN!w5u{7o(mS^EFbzY!*$Le_0e`FY zMKjZ@KVfn!sgB`p(J|=!<5_{vV(cdKl_&InQ=!y#aQUf9VNX-X z^^0MtD2w#yf&1RSij*(2jqPS1O=`?ubdmduQsuDT$VyACXSv`Ul_G}^+KfQR!2b=f zb`3>O)B{HY)C!428SYxR^lcOxl1xe&H@}cYMk>qu=D^%$un!fuw`SQoD2MKZN%y;i zM{Uf;N9=c=rm?@A*9cbQJ({}t zkN5W=kKKFW)c7Cbf8%-dl6Mb80Fm3lN4Ee1PmK|yzO3~eSX!6NUY-~B3jc|Sc&03G z+89p^+IokunxSlz!Cea`FMViudt;!f{0%$e>{DZ}aQ@D65+>`W?Oz^M^%uSi&=X$& zSX0GOQzC_$;1&>W5QY_J-SulWIfqE{@vfkD)FG!S;~nj-z5eZMmG^~-XU}wRU85^^i6Q4jAhm9H z+$w$d_xh&`(sBPcaq%l(QBMR`Sww1#v@Y4Mf5w4BfP<<(RG*J#R2L;4qI;-{gL`74 z6<6nR%Jru+HOC?`isIDR4PlorQwO&L9d$M=D<7~Opay`Y*#QTzmWsG*+}E|1R%0K{ zr!Sc8cW+UBF}FRIYqI-Urc2aC>?&t1S|K44#rJDVfp9Abq4cfdw@RKP%Asw2St;-B zDJ{Vg-zm%&m@HZO-kU9sNHl zRFz+djr`cg-15+4CZSmI4$D?l#_eYkNt!CLknVmkQMeqfh5-TW>T?Ea5)i3-GeTKU$LosI1= z_j5GuaywdebRyuV$XaAY!P3F$UAQ0v;St+@#G|-xF$te9$F3<>Ef=$Qt>)dmMa|F% zz?b_x_vgBM$H%QbUMVNsX@L(RG)q@iI)lvw086tNMQdulFW{3UB91)*YY)$$DLOvi z5bT(O>=&Flb4gKvT`_;(nq3sVxxV;1>h!mGP?xccP-OBJlGD;m7qhG?DPB)c7CW$Jv zCl+@Fw8nXyN717PO$3>W3RP~tmdqVjK=f(r3%w`jGZSx$zIdFOdl37$HmHN*(B+@P z9DEzx?6XakeJ`%8LO?TUw%$66e%yE5+;YJ#Fruf&=^`cU4{WZIULZ zK^g(n1chN~xtwu;+$-etSrwHkXP7sO3WPuZl|1KWnfH6}>w35a0&c45iw4b947JRP z(+TD%XA1ES^>Jgbsw0A#XrUWggUSHF9n|0s{>4RmPsFDI0W~0y`st+*34Aw?% zrwk^Ss!1P_Bqb+(iWt?qOyOB3X4nY8;~>uhs&7ZvQ@R#8tE_F?`Pie3M;ykd1Sm}5 z+orT`f{*`U@Tg@uJNqNHr^)yUIr(+U*3vCi71o}SL!RLiATcr-6#*-I{maIqWq5pf zbAk47nQnFpor?88fqjXk@`*{0({|gW)v6dpV3`L%;GGvhh%svVX7Zc@Kk`pXiNx)< zQ_3yxGtU~a?9P?z^uh@YRR_8h9Hu8$^*EkW zp>Q6~zP~{XG6uGbyca5v#CA!e@A&_pa4tO?Iw0F~A#|5J0g@YVXP+&y&qa@y?bsW0 z_P?4B?|W>{0zmuUF3Tst7Ga5cy#ZiId)NkYgjT%0wjyiPVRr|ub9Q2pZZ@C%kG96vfapnyQJ$!x#+g zN;RnjMB(ENPMcqQ!hyl|g#EkQ;vNbgCJmit7h*ys%5YE5gRGnY?9Oq$5dZXClGrA5 z4a>JPI$`8`?CH_)>Y>BjhdF+jw1fm0otxzA6~pvD5X5wWJxq}V*Ct!nA?Z}X;|M7i z8q_u!gp~EKE$x7nPZFzZi4=`s0&=d#$sJj7i#v@jbNCS(XX@%`Q+M$FJYGAjbwr-e zJ~7snt>H8XgjkD4iUCSR<&8Y1zRkia96qeaR$E-yN`CX^0q>% z*Hjz(_7+qb1m}0U1b538>V!PQn`Jf(;3gb~-C_V|gHWxfu<^u#E(@<_V2*G&OqtYb z(cJ3i-Qqae6#L5lloVm$%hdmD>M_#ZTjv)G^?-_gA}Ni_k%2<~`_qcUsVu?qZwH+j z$U?`ct0~Qu&r^zJS}!dgO$14k{9L^lz}e6W8gxL)z7T&<#j9Z!#nax+%iH%o*U#(}an)VgokMB>C%6i310db37FntPjZsxaGzg<4i3wruj zmbc7a{NmU7!_%+wO~sNcy$+k|x5Ug79d7 zuEM@qh8qFO2SB4i?kB?U-xLAYZ)(aHe*d=j>4V$@pRMv!|H(P*t=M+eAC0+J_kJfd zR3s~!&dD|P;mStAi>RWE69n;~gdujC9Y8Bul+w2(9 zj{Y*W@Z);UF5;mF6ZvyLb=kWJ2Or!4D<&=f>YOl3m|j1-l?$`3>V0%WG2eQ?2hTs# z=0ZsANBLZe66vaCkDTe??XSNhR<_^ahkH8)#-6Oe#-Nj#AM$nivQQr*&o_)&rq(f; zfVOu&_XX^@9UuU4oIH52v~C@bam)?3^6tbB9TF@^Qb>~zVj96#xVz&2uLCzuI70Q@ z47TwvUzh|=oEqlp&Q3O8a2o`{2B2fm`6B#ZT_sp@w#)m%hd;(0wls-VKU6WTYig89 zy}It-x)EGFc(3vc>nKplW~1g_+xRSKP;*y@@v*t$Ns)KwO%n)^R(n zWAiL(kg?K-hD1Qx9ZNE?(r*NqPTc4Z)ttPrqPk@p=!1q*NS9BLGd{KW(*JM^obUPW zU(Rb+D6jYq*Fx{${~afd_xTLv2Sd;ReM8&yPYGw!$2|6Sg1vC?tf9vNjmg4*sv&R? z_MX`J!~>Zyh7Gv+odLU{^pK`HM0m;tgm)7th24jqX>bGajC>T{Z+&QqJG5^Hzn_0B zS~>$8erGo*WkdHXKkqveD;e6^7-PubiT-BOF|NM*)$zF;QPl%6Ju?>N_wu4h??2I7 zR~*YNbupZ&J~-l=DVL9b)}bISA50(BNi|h}>_SR`axzZ*kQ{|B25rO`3W!tMVfEA9 zgax?VBIX-+ul_xu?@2A}ke1{}^a{Co;sW>djs6<7!{@qtRr{;8ejiQ>932U#q>T~- zXT+Wz9wD55SfCEv)7nrbWZeX%L%;a~V@xr4NQ7uhzC*3KBUU5EkLc^;Tx^%~8G?pj zyP{lzT`CEg2FH=AV~b4eeRU$TtBQ+DY?%uDMtD4S;%8EK$(!ivTL(IGU&R&GpDzyZ zo79Lb>An{bD_h=iqbEqR&nEPCIdt;kjjK2O!<@tr%)lj0Kh0kmDI(%`3-Qrzu2haI zu;PhMH6nB126tD=hPN?F3c=;}`nRp=epfoZ{k`(+{n?epH++KY%>qtIM$JkRR9_L_ z-d6GS_H|{L=@2d5O_vcb6uNYaQ3;hf{#=Dx)hh$O$b8qD=4VjtgZ5H7P-C#Cc5Gt@ z;Zi1HeRZtdJ)3IwHG*whY0Gt3O9f3dmLBR?Q)2C=WMBG za6Ki%U%Y-jU*(%TkwU2+h(J!8PP*}&T7MI82hL0Yh)|$|#9q&z=1WfVo@$0M{dkK1 zcTNjVQbg-zq;ueDI=8DOqsBEuB&p@4(@{Bg>bZN_ccSfWzIGNg6%w7>$Kf1CdM&L| zgMspMaduVIr8E8IL)y9Id@88>HdAcG3xS*^GAA~8X*l= zkL~Tbuk2Nk{47_=KFrx&SbnWmGcQ1T6XD2?xYn!5ZVi~>J<=}IjVz}9e0wb)Q@N#N z&SjdAy-Y|l%MjkVEWWr@-FmgzO8nG|`KB|`<0}#JZSu`&zdtnBNy)affqkzo?bP-= zG5XKQ#g*W#m&t|IIGd;aT<4xD8;Z0&8lkHan=PD817=?%F!&llddE08TPy}a!^Sn< z*44dpNET8!`J7t*!b)7?XlI=M%CBm9b@l3bPD)_JQo`lZ)u5hVH%ooOztrZnENw4S zHU3!5+0&#_9d4~Sv2Ad*Bz(wf18u7rA5rKy?S~a69O3dux z!?Q*qFm5J2Kp1ypK1EC{U%W&N;u6RP6x_Tb$zbu#doiRC80T3?(iS|zQ6 z!L2F9vm0ZCCV;@_RSroxU}cLYgyz~40k9)kvJgY>J9s2T39KBkKx{TkoY-I>LOCk= z2);wC4i&(-CtaK_bvHx_366zbfDN^BC!&zFm5pLxg&jz4 zbpWseS5{nO1Qix4&oyO{3a~n9ghE2smk9_sK^#B1ad9|8oWMXzxUeD8g&JeEa^{q% zs|)At8Q2ODXcDPdwP5TsFD$>uGb|kMA4>OPlw_{2wzzfg9~;S;_PT~fV*SI;dDPvK z^^&JvUKMy<>}vRXy*_t*L?DbAdpxuxYu#ZB^%Ve>duRj>7KRH>ElXP02=jV*8f;El zHKkA88*iH(l&y>fn_CgLGAy`ixivy0vS;WkY@}6~ML7T{teU5oFg5{n695VcgBiFJ zi45CJjAs*OMvV<2l*5j}efy#laHaSP^N9uvD@5be-*y8m zRr&9tBZM*dG72>)DbdGmn-C2qu12DXF8iB8l-MI)?Hyh~Lh3n|IWGPkOs658v!%f}CQ#epB;M|Iq>!`YW#&&FR?IoxT%mr<_HQiEph zFTW%#19!ndy{7S>&b?ND8q{;TYY%8jdwKDTh7ueKI{QOR=hq{}UP_M4Nx70J7q>>) z3gL~P`g0y z0(}ASyP1UwdWA0`37!P}qkzWDD5A_SAU-6Q;_hZ&Z6Up3E{`ZKTbJv?YYn9W5i|?J zWIli7KqjPZzXg|h)^T@*w{#zqUmLy$YZWidvCjB8EH0yQznhUB#54Hp*Tv!jc8ToZLJ- z182=dn4-k{QqLrTP%Nxps;ynBuV-*$)@$K)v+P3{j2wp(AjZT=H#rc4Rc5zrCY2S7 zLB8=RS-v;Oo9*vwHQjS${l`^eLejKKKq+TKeF&@Q3~4kms860b#o^HicGI=~D9c-aAN4V_Ah@R5p z*SfH~Q{QWh*VTU2@cLc&dz62G`slIl5k0Tb?>0A$9Id?CkW`=P8G-QP#XwPIyx=d% z?*mE#+40ayZ);*rd^lmZLB=YS8kL{jzl4;QeHXQUs90vTvY7-foBZ&MM8m^)oCf;f?x>keuNOVZg%L+A{%-{dxXWWTNC8~k8}L`0riOT3Jbb>sLU`#u)81&L{$j2!p1|c0?>Jg zC;PmLrRfgok_ToXJ_O#RmW!fh$f8nD!zo6g8kDrn!^qz}7m`Q&7lvB(SV53sdxR&2A`OGK0cvkAc%2;m`68SA z`TLt$^a)bU3$?jz5yQbGDL*ywVbJ>SQ6V$X?e59m|KzT&)*pQd*PN}*^#Q&tO!G9E~ zHRDM$Ea&j~N!Me>X)PUW?nolEvlUa!ybpYJP|zd5=9w@?)cgyWh^nGz{xnfm(<>MT z%#dfBE+PYSrm}~{-YM^;Z3MWyNg#5A)U3rj=X-4hkn&6enxy5=#M>x|#~$K%MrybD z4%T2K_)Za)>jMxLfKe-@l6w*zEUXSz2qP@m+#5`&YPetBI-P+I6wo8%(phR@jwdF8 z!AMHuWpQmS^Gn>{_R&2v`R;2-XE#FmQDRVPn8t0ZBc; zip@h(wCsp9Xy}2l82p=o%3#q5J=!%6FF4I88QLYAIhutYC(KZ6HZ&^O5TWp<=;lh zK3trRMI}@Y*vDR;yCYvbF1ur0Ig!PZ6Jbs$7H!7`)w08dx%kZ2m2C||7Fbe(I=m}; z-E6jCdwJ~q_?+4q)u&ast+6Q+MCXcR!@7H13W{j#Pe|IO$c|)`#eoz9KB~bCCu{Z6 zQjEPM6yVIj8-r!yHzIs*eqc4q-&?#5!1iEPX3z!R9;PI(k{8Z@NrIrSnX;1$29U7# zz$+62ywf6koew20v7!ah{0#i9UfOUY>W`e$iW=ggXGs-`_ecRa>>Tedzu|I;qBjGRigWs7go|=RJnFQtIa*L~+ z?JjIO>sT;Wtcvhny7t#}k1^^~*%jo3C{4c|>I->+#0-JOz2o?dSKV2$VAPdz+Mggl zjYH7eaZF4FhER(}kg{X>{A%>JT$78irtO)BIBD3eve6%3a|^fE=oG1?oPf=4e}e>^ zbeelYWmvmb)MIQ!(UOutiZl!_Kb?*zoJox^mAm=erDAKr zP^KmiscbW#3nv2zBhj&G*I(jbN$NoBOfs_^->HVk;lB*j41S#6Q*GWusbz6a7k_<( z9Lv9jBFL^`@cqQt)a%o@)>>;a9FvGfW5f!7e0C-rB{f`+-P~~tcwk^LCL!9P4BiQy zKPXab?eiWDrT*9!UW&X?xu2#OiPj5tP(%la5;3XgE5({JL8awwY*5BG;(= zbTaU`7yd!i8~Z?Lwo|a%*QcSv2r3}LIL4aKXdFPK7Uy~5>{)hOe&?*GuqRcT{1%i&m18YS1Q{-HnK&Ny0B0_GP z4#b{O?Q^Z8wlZnf#GtDHH!zwr3MpJG8`NPo zf@`F25WlYi4j;YQ;}i4#(Fr(+6%B#D6ov#wI>KSG(xa(!XaDW*?tassX{Dc8R}kp3 zJS=rW1E?#B4K4@jP}6BrPc%>IV}UDoi(uBeqt&h!$mB2WOCJ*6BPDp=~wba_wqNGC5`W()9n;YGQn@9np@7eIx#<^Yfue` z#V?5Vjx3JE`Us+*PN@0$=``}Teg-Mc2Gp{PuGp5KFv*2sKL}fCYyZ`}#Osew)Zli0 zcfO?IP2ZkdCTa8@5>=i2qFYKOYsecL-|gYs>>ncTedH%8M>8mH3=Ii|6nXna6c}x; zNd`)aRxX9o81|`X6(D3K=|jirQdd+{F=?++IZ4rua7xJQv5A&lv%%*%Aruujd7~Oq zZLznjqV%a_1Is+b1xk*>$pXV|7F4L=v<{0FUS2=BlP@p8=AuCl2U})g6xWpCx%~ZC(@Hz zh#uF70n579s@F#Jy7puizm-vq4-T#NUNG%cV^!NGKk+(5YR6AW>dKClPjlY22gD>w z16<-}SR_jR#*UUzTo#_E@T-IIfixi4U5#_Ci690?U+W^$V_Py}3y>%)m@mdH$6b7N zq!~}W$6f0t#$}%;x^c5uAHX_}K>40A)wmF$JM3EHu6WT|5k37xFZmt`)gibTy8w(z z;7J!TVO2pcSA@v8iYVETk{TGe$a@B^lXrj8y-A)* zOm82OPAtMAqKNI4!d=17UlCWk0wPN&0eyHv^2BLVr=aICSVWiVgZ(YVrt8L$(M#vw zfOfmlPRZiIM~RmiOUTjmC0;%xE^I`WJ=mFO;c*lb9kj&92hRnh(&*)-oaMow5r9|^ zXz%<}e&5{FO2{r>E)=rlz?UvZ*ffEONQBy^mk#)Z@jrxZI4p5XA2BivU>& z~fXjc3+qw%x5*u=sUPTGt{2l&s0|K>H~`7+}$HUDK))x-AGtjMYFqfX^dM;%zJ z!lxcbog77IEj5)ASwq>~JW{EoTEMMfRpFNFb6X0;DR&=-`L&hDDBODtgiWu`&Cl## zy6vS|>DIBPHdf?qIrW>5UtSyQC)Z2&A?x1;oyMY!jQ8uia6=k@s^<4eXu=A`-&;3}%qn+KcqjrUA(Ow8t}Vapd_ z=gABCjKH`6!k>u`RwoJJ3s@E#pdfE_pA~9+_2Jt!HHz8$tSxYnVyBldxf5flkh>xGo`YUEEc@E)J`0Q@psN;J7gHpP9AWO0HPyQ z030TUHgH%Q$QytRTLSnGK)hQ$1SNb@>;3hY=z|#2vW8Y#!DPkR|6D^o;QlM7=90Q= z(%g_(e9QxG!|Um`u0a*zpxqPbv5=X)y^5eus+`)edKv8#APNEqSPW%9qYrRBUkm`p z22t$mtE$)lD_+-i2Ve+Bxd6=F;5|oWwFuyvt0ES_z)e1P(t^FZi9#p&(_*Fc15%JX zfg@hkprLs!BZDkO@|LI&_|cgq>4r>rd1MKGXCgw~bczWFvH}&Nz0_KPd zh(%-&xpM#w5h>rbmdaX18*B@cMc*7ba!+(Lecl;F+4DyXM@8xPv_!M%`%x$P(+nFsbE$os*DT1~1fhZopZ7QbQ8Jw7RX3btg3>DPA22~BH zS>~EK6qDKl6wWfJsi9z~$aF#o<8UfJN{94B`WI5ek|RiGy%> zN|b?;x8~#rIFLusYX(Bpq01F_tE#4}g&cA>s`~Y*Wj&=63OWZFAmNaAzdH5dCQXva zu7eYqm!!!kBWU z=smcnu(TNXP#U@m04I>S%qTp0!jaXMkwq^Np9$7ZDc~_qIk%o9{#%-0P(m(`-9v z)Ie*fs?Si>to~Yrp(u4xZ!PV(JI5Z+f;>vYaPRu$IC?=Iz$NzJ-ZR-{5sGf8_IMMf zVJbkp5(_`UP3?gW@j>riOnBGBJDt)6-Yr#200`{=0pbg)PwgZSgJ?&8napLGERs#X zR@Dap5Ht%$5j*a)^Xxo9mbsyrcL{}25^^_g;oFjl&gcOka2!w(69A5FhisY9JP$!w zyBMo(#g@@gfCH66xb%qhf$Hj9=$>}p_014@!172mBhp?aJ@J16^@GD7F7Ha*C3JjX zpM*ifCKWq)?vX}-+hSp8%lcS3@a7j2m$x7@g;J%RU48e!68Re7#GK*583#RBASdo; zq6tIyR?JicytnvJfOPL@2M3R0r9uw{F7E?G0-jPPx_CDPcu-o~(fJEYdatz$IS=i(pN&n5D1UTa_%k}eQl5VxMmREc+cN6*`>*{n zNnl&SpPk|7rhXjmZ2rG5?a+{*S=FO$tZ1TP0LHWy0_YyElU~l@{CGF&&u)_5M^d%|b+Sj{>w*B~gr}^WzIxhfLF7d*^M3F$Jtyy*M zle9zs^)<7896moKRRY^XCuM(oxOnd9w5f)tp|d`^rv~eOHn~rg^L}@wb6(lAyaxIt zNi-v}*450JNiux3hA5soErq~#G&9B-;k;-#LU6Z??(338RdUnX8O4f=OlTtn0j!C{ z?uF=?=+{ml@`?m!1rGJ-ZE86YHIIv75L_}ToA~818K%|k3ePS(D?R@Hi`0VO`n=4b zhbgyayGO`7Ch>-w<%o4ojd7=xd4JGKz{pP`}Pz;V3&G%2P9C16@7aKN6Y5QOMLO<=Qmq%|z z=ezzFLpwKg{js|KhaM)WF2a#bK&Q3Lz@A_XoDpsrHs1mO2h$N6{eA1}5)(%{t1tPB@m8hHpjgrP=vTZG6`M!f|3Ys(*0|ib zhsm@}Ypio#fAL}Dz>+G)m|@y&?FM6|wjYebB|NS>yRq;obC;x!BbV~l~adZ0ea^;`n zIr2-y2XgtZvPv;UeOuCl_v?yGM2@Fokt>Q1q&HwD z`a{{D7X}4Hc zlg+HE)p1{Y-xvRj*V+5q&r+zUhsLb^Sra|`yYIo^amz{N zi|@x-udW5Hb{O7u1m5lq`}f`B#J1kEJHIC%{^jQv{Kl2482#stlb&;*v2UGQ?5Wl} zTT8>nHa+rz$P!QsbXovQK(xPwyvkbq1gX5R_Vj?}3&0A=-@=UlLf;+|cuW#rWGW@; zEnc2cBfp%hx_3`BgHD4vEr%7Y_8cr_FJ3OWD>HOF^zFm)Ts1;qq-`vt8-?t`66rl% z$O0O`2T;OX9LuN0XIu;gL~!f+qYx?m2+F}xKsk=8GA{De!R=BPg&2r)pdx?e?A-0& zUjBQ{^<3m9%^%9wU+$ERR3tT-y7d$|q=+vwUI!X*Lsq#gr>-I1k**>27``8O=P#3MTUTWT?5*RMgMjEje36$y7laH%9{?f_2RLiG5GF@;N@lGsofiAyB~u|YD? zcob$*>))5!k`Z5uK&kdperbFbHb(3MDW0j>&?vDnCJe~4N`{?32g3>FkkqJaHEGV+ zy!y`h?2P2fQMPEHvaLyRcIUrfCsja2wBqV_<&J}@#omKj+uED*5(Pk5HjPnU(ONkK zFPDhTp`t}^Abn;d7faqbpk@XLJ52FIM#7HG!kSe0p6$?ID7%tjvFF z4iYzxr9MF)?{(bmsS(M&lv;jk>FV0nB{P*XL(8le)G4WqifrV+3-a*$HQwK~;D4i~t&x)Y2`a|#|RJ9y+WE5IE=AI8I>Uqqri)4kv z*Muoy6SRg%@Qi9h zo;c{%jpmw?T;pR)LgTwWio))v)Zk@v9 zHnDcFCb{_Fw264&I+2I&(E|!eIbq1Vl6`Q&RHox_esV@_`Amm7#=q&4;jWK0U*%Qz z(A>k$j}rU6-v*T#&>rp!KX)7^-xloz4JnnTUP#0*)4i@Z2YiVuU*0w3jUP=(vz}B( zr=~VWJ3Tl))-?%Y2lGO__0r(r!rl0V6h@I)$O<=$=#*V}CVS6(@Og$ia~Eby{F6(4 z-T$a&QbLOOe7+NqSrgk^c5LG=uysfeW_cX^>T7%fDGQA^f@Hzd@9c6KWlu+B*1nFI zWp_CR=oyqT*3W}sNKLH<;@^lbSfKU8L;^o~lO%ukDTr;Rp~Tr5e&1Y8B4ixO6ADEu zj0e?JenT$SI?Rn64gC`khRi@-!`jaVE0I`Q(vvJ$LMzfTUf4g)bxHdPUt zpDGlxQmH2pTI}{tK+#b&C?S`EJ1x^Wavmr=;f-YNJdQJfTb1}OX$o;5W6Zx)Kq>T{ z{X5but&!{g(#as9OQzLMXUw=3B%2CThY$jl#Do=U#j$L(VbT#P^1`~j)GR?u$(nu9 z%~%BER`+?4P0ZdT2Ng~QVQvr`q_EKYBUg=bk$u{R?jhyKlWBCHzD8}IopOm+VPL2N zHV!v zDm`14u3!4yx4`{w=B)b)o!~Qjv*tjPXv~rjASutJTS#z|mX~jS(XG^-W#ye^n1#VM zsNe1?y|}10-{B-skK{V3Ej(}Ek<+z-O~6Qrhx!Xj>eyy$@oKusT3rda{8WT^^ux{v zR~ouCZP=%x0HnUS!8%2VlJ~LFu*_4n=LaY*`@DQn3mz}Q?M(+>AJXU++-r9CV$l7N zL*%&Hqt&*2sC?Tf5`r)>``)KdeEWEAdF=Sy8M=KDFyc(Oh()_4O!+2^>2AnM3`}O! z-#%ND;zn2r@BS6bu*s`RFLmvsNe%5quSIfK-U0KmK?UTH?ERy}tfZ7=BP=V=ven^d zV|H39zd~~QS*F}k_^o(VU&@K9&J;HYLY4}sF6MEOn(+z0#-wVYbHUQXN#oL-<}!j4 zMmU8zM@n80nZ!_Cfp1`v2oxqPcNa)D9|YOlu)e|L2QJiFNF;*qA{K3g@MfA?;Ahar zN0%l=1mo7?35#k1YMB1I-r(mO%96#BV1^8_%NtD8UOf z03?~nVXJQ0XB3|#uD6fPoEdF(7bJv0%#%~k_6iKQ@AS`iZBttgFI0nP)TyYc`h?FW zCk*y^=qMD(T;6Ahe}mz5o^GiVff=UN*An5ry$QCw+a>!8y6NbT7xW9X?r%Gleghd@ zjdUB^b&CW?^Mq?1PJ47;2+rvG{XR4LP_WAn|CYfYcz_eU-3fkM#&kD$E%#YT&<-`H zGa#khmNDEF9-9?~lD+~^cN@A=j$1g((E1x&y;K@`ZQpoB( z7jca5EY#??Tqh(Cjs`UH1zV*}F_duNadrG_RPM-AgXVVFKts)L<=z%a7`2|)3k4Cs z#XX_!`w&%ngOH#&FLbF_OtFO(y8?mG3|fuWt)ZO8-Qx?5n|}1W5SHq4M@w+nu#}k9 zwg9UbX%#25k1{B6{Xc}Co=l&w(K}9FMQZdY4w9YX4*V`T))viR)_yPTQ&lOI+FoQs zUfYIZh7O!Qck++&`p($s;?bW+G`uaJBd6)|jB^#4#Ys2quJ{MF>81E>Wz1h3VdRX7 zCl4lFJaN1{IWcgmlc`zsdpWU_O){Q&01&VP0+8NQ`b1o1t0hV}Wr?zmHDvHwE|J60 ztw59rfoCewRm0J6w^} zHbD)!KR@{+((1%aUr_n8s-%H!@kNxJllt~r37aucCQZWN8`N*5Y81s`Bzb0r<(a0f z;^^`W(T@VqCB;(9yd)sDi$xaT;B__vV>%#%*k4+ikWI`?`nSoUY#$4J2`zkWt z#gibVrD=^9NINvTm_i7q&KNZh5qTa|pS&8f(BU*9x<^1i{n=V2a!zmH6EM=^kNXQs z8p;EvF+SKcg*aOaB%zw+sOey^TAvlK4dBefhv(tR`<@m?_! zPW(1bef=N83RDZWQSK3mFfXhmF%eskd1fi9Y%WCnva%v+Zh_R6^2T3sKR$AHmOBeN z7!CELY>k(k4j4H>M;;jriI5&!3jg}v##7uy_%*NKj;t)5w1(64RCErWNnEhZdna3d z-o7KNYXh5vk&+Dc)XNWhUqs9-#M`TE$<-O+NAP)`b=Gk>_>`Aps0|92N=TS~UZk{V z_~`swrTf>KTcpaq;kn*FZ8_*jIw?BTxf+B#Pa?k7Z%izVbVn>{F5YW6$88ew0QKMr z{l@D|5|MK_k>ic_UYBNJaNJ?8gwrMCn-E^@1W4q(rG4~&Xxn4wv^Cml@Ea&hkeLU7 zP!4TP`h0>OMktZmfv`MjJ1!Ze*1(5Ie+&?LQ5{;T;Ye|x_uy_RwVXh?mLn$pji2)Y zM5gqJ(Lzd?AsN~CB&nw_uXSs~i$p~>S5 z-A*Hn9~J21_f7SZtkV+pn2=3pZ+oHg@0Qz$onqvyd(UAjFOimDkw=m^KIMccs-q}3 z%#H0QS|b2B9H>6ojaA$u$2Q$lzzK z|H_d%>%spMD;)aL`LAJJeGEx{o%U#Q+jQ^P;BSl?sLEcoHHs?SqlRnQ7~03B`;r=N zlTV9izsz`S`*NXi;2iwa%Lm7Ts}Dz2xnu^Y&5IKb4~)38U`47b5z5vWtpvGQa@C&xJnwZ!WtG;c2ffk{+XILCC~=?-)uH4^VA$V0QqS{ z<5Tb`qIKYR;rz^GVN!GyW=$1KoJQ}DM*=Sy*Z~21j>}JqRHva$<3!iva!KDJ8d$o(adfeyMT%M)_!gFysvkXy9&O2;&Hbzk=8|SY+9H`$ zNDiX3Qj97C#D)+tXaj+ba4y&dAq|tlMxnHIN(-kpvhO^y7Qm9PIJqvCjxLyhR0&33 za>iCTN{ufTg7Uwu3%$Oj0Rbff5it1S`t7Fu>HqW!^Jb%t?0gSQMFdQxwr!0zh1WJF zS zr|;EzSqNbL!57~Dar+AI$BiQ>O=~1qt{la?B(_i&Ix}orPomZCKMxwZP~meCA(e+F z>^g+(t|>QF54AnMAFos4(@a2^L?EDH14#5J$k6h7qW8I^6Qg9^)%w%KhzrktVz?Od z4;Ssi=LzEHm;bF*hg|y2S<|^^7KNpEe%jm<-$lLrulV^yf@1AM@#Y3&n3|l?1`pe$ z+&bOW>XD=q-siy6XDVxynyL&`)Nlst^Gn$ogy2q}PksA|(1pm;kmcnfxZf8`v*rm6 zZ@~&71SGKK{&v#dS-)uH)wMY{K-=eO4Zp_n`xAdYt8LGEL#Y3G01h!bOERKR^)+qz z&4qQBl@NsLtZUA1W7VLdS~FNj!a$Ad89`oqiPZXk`ty4ee!USb9w*q$Egu!WWK=~I z^9Uh%3{IKQZZuYELysXFbQ+tp*lg{(YZd(GbWDlc;l8?3Pj4QRN zXPa{ibS4yW925+y)NVAM&`x85hi_C?)IM5skIH`^xc(d&&==xf%6vz6=(%@**(@a` z`gVz;&;`q9aNr{kQl!yyC1(p=H-f7G5lo!E2;3<|c0%y$+!$3u3l5<5ObqyaA!p{= z(%P^0agH)ZS^b^D!<&k}&(+kOyYLaDTKv2EQs_X3)>IS-dg4nTNg=sy`v3xbNOB8P z!GcVfN6iju(o+H|8?2)QJialJ?4&6PSn{=r9v!DJ0FS9CY##OKY;iNK{f7 z5=P4F4;MrySQc~4t&RE0SS!}}4ASxTy&W`b?3v-lP@`O^(eC`-zy=q0{B8juP#6!k zbZrY(xs@MdlGfZVtIXzAo%dy`kS$&LKi z`-EKUyuPEfF9|tu(YsLjMBJpAY0^Fj{d08w8G*aTvfOUg8LKg!Nd9=s_4MT$2zIM3 z`vI3ZWmx>tp&r5fu7FH;PQ8XHxisHoSmeJjmXgZsCYpryCTItC-<)y2`*;zTxrF{+%G@Lr2&H)>z!XAr2E&f!!JhjGI&{)@05e0~iICW2FL=A;#oWv3lnvU@ zaLWmSVI9Rrla}~+1rNR+Y3(}1GhIO4i zbil?XG%`BgKcGN)mZ?7GeCV(}b16T8dzt{e8yS&ygYC#)8v*wM-b~`dn;;#%zMi=o zoZH$SG97C(6o4#<=!3^STHeTQaHFe5y=tg$)E9zW``lKlkN&SeFM7qb_z}twcP=cb zhbZY+sbw&$3u+P>B~`^y$*y9tUUroTkPIB&4xjf+s<-%2oL$nfYCHbBo6B7E5&F?U zHwR3Vi3iK34cYfr;s`%{>=;9Km7F()84He+yJ_ zv98e1(tq36L(H6harEGc*R<2c)<+D!F`648r{yiVQowOh>w#+rjlcBG7#G1*Sh?ZA z@Os=W->PJ5C_iO==~lnoa++|@NI@tF^Z@Qm3XqwI%xRlzf9&Jd+CQg`+E$y1B)1=0 z)^+rT`ONuhltWklv{w0T&rJc1hV%StD&)}5zk|r=)Ki%=3;2PvpcD^H2idX2}0Drp)V|YYbjUsUj6;Nym4E9i~P+& zKOux|G;i0(YU}42ap{Z{?^L*roN7{=JtLJmyh;7%$<3dsci$-NtWVE3J}vR61gA#K zEJQ!@)spoACUOAm43kNK>y%-`W^V=SPgXHP|3ig&zk2*_o7+$4EAzv!-%iwaBJuz1GrYOD z)9OJ^x3lgO{ptDAKxldQsh`td6fDZsej-nhb)~$g_y2YyCvK+V&)%W!15TaZ`vF^rW}k|H)0)e^lqD zQOfatV@k;kGYN03DvVspW!d}$on12E6hDhqKMTMqIcaumnuP}E!qNrc%1XnQx;&E) zb;hlnOt5Jx7dGn4wxI6&bL z*Q18|HPRqB23;nAH|ZBqpnNevOFoRhb?T#>KTe=+85zgn4J9-cL2_8QXM*N|6y!=C zAx0V^p=m4Kh6O!EzZa7{j%({VJWf~*CpofaMXso4x!cG!0drf7n}WexADflXIHCEu zIUy}3csF3cXDA-U8(^%&6^Ki0sG|Ph`vuYpTpNBeVb;wuyxJ}=sxhz_b2Ot%|7P+; zMlX0>aD~M^sv#vat5|01q(BWg{}g{qvS_%x!?{N~2%j=s2;!<4NxzLylymh+*mwBS zC<93jwmcDws$nI#CLZO(L88sM74&F4vXbM>?-2z0c4iDW%cdPPp2R|al%NZCdyP7I71oj!%BNQujF zz-nE1EtW(_4-s@*zJ|tKU+<7skd$Yaul1Ctqd|^S!j^~@aTAzQ+^T`sMmk9{nUcPg zm>TntSitV)&SB!0+;TcAkvMN3=Mq3ICr9M?8@4i{8O#Sn6PI{$NYqfn+Y$V;xd76WNC&a&h zy#9V2PNkF%`evxc6Yj&twrV3)b?XKqbC64QAS;>Hh`i>iZ1O2vY=)DoGbY?NAQTqL z$GBpb+u~F0(cmynJ=u|}yk&#P83Nee=oGW88w<0{|*LvrU)TOe;Jl4d=-8>quUw8d;zANdN9GNKqiWT1JQ8^ z*?Y-AiGBLT_vbHaEJ0{Nq$lSl!*DT97o^cw8EK5#45q%VQPCfx$$PAQh*d3C&IkvG z>xOp0RF&fPgEhMK$hbSw(n@in&`l@CsjL}sMQdVp(gBqNf zW+~huy+mmRAnHXog)F zp1#ZScFh%=Nb;55-l0l@?B4ub5K3um-KI>A`?iw#lub#$-S~(%t9#HF4WHCU=tn98YOZ3jpeD0iH;^UHohU|L8?6tJ3|T7P!&FSCGja8e0oWhw!q6% zCW@&UMGd{YUPt|ibrHdGkm1Lyc$-p%IEQ@EghleUBu}w3OjCDP=9NMa&5*lMrr4+S z#hbxN=Hpu8rjDNg(J3ikkk9Pw>bms5;O+d4RY_JF(#?fYAaanUzZb}U5+3}-dVk(5 zZA}KUql(-&k`-u){71c|bv1o;MuS-zz{4UNdDT@V1qhHq1kjSQvfUyI9sIYOpLbQ; z>)BT%Fz&w(yGc6iU zwzx?HI3R)mD=b;fdi)tfim5$GT(;*Ebyn}*g|T$fb4mJn z`;NS>KiEu+RL9U@K}lVi*=DMKk;!HkpUrqwE0v6qXjO}LRRlbBhO2Xxxd@Cqb6=`; zs;;Ufc6DB4dA!W7_fh}zmG83*2lE*u;(PYuLqYszkDjhxwB@#H@`$@$L+bCWh6MX# z+R55^z~3B$1KM@9?|*p2h5QzAWj|(#eB*VC7R?EABy2b;w!?@Q9PVkc>_2WQmV{-J zOeWB;quZ1YR~#AEyCnDJx;dt zx4#Zs@n)d!-dw-hN6MZ@_cdV6PyX(j9+>{#qeQ0jV&KXo3&^&HLzaBzjNaqNoD>j%Vk24F8iL;TF>!siuV z70}A-Eo@o(i~kOn&tQ}jr49^7_;6*M;rpKIqGHOAPk9xaXf?CG`jpu#hjpaw=Z#A7 z?l}Bm-mW;-60EYo2>crWcCz;{KU3ttC?s>1h=$w^ueFw@{dTMrew}=sHex-bUL9vH~9TIN+ZBh zVn5B5e|Cg(7Jr`NK()Jre;NV5$&rE>U^Ukbr>SDL22(s7`)?==?2-9j?z}&PZ9nFE z{_82nBZgxAN;ezIgXsx&NB_try!TR=%_Y8HX!SXl{1-v(3q@DX!dgHwsK5aQ52k(x zCgc008r>$lcnEYVC9(wVafQ&AT6ij(Wt*P$Zj)$+_!6(E}Rqu%sfkr>w&H*tI) z05^QHD2{g1o^UC9y9(rDVW^yB3B0<9&||MptD5&;E`UI!mEQf>0Lu;ybjhT6(2~}X z-%lWsG#c&>8=^hwQhZg0D+vj6klsC0!aRP`hxDkB6(CU}dzo$yQHO0j>0!ZPt_}h8 zx987u>B=BiIx)vX8tV&7T#le*CV>*&sCILigBxk}dLdKhjo(9LNeiOTLc!6*piVW1 zMh&mUomITD1QaJdmCsL1-WTMD#z9=6K@`LNO2dQstqmU7^NaI*wkLEtm*?)W+oQ($ z;D9%IvXK#;?(LZ%X7D)SEQdGOR7DA#Kv3IIiqg_=GLWez*6H+%hS(G+bfU#*ERB1U z>B%s$N|^>j+69D_fyBac+^9XVGqK9J9We`^%=FiRyam|f=#_u{;Q^JmULJ2+K2r{d z%W4rzn@-M=TZ*?!Sg^=Y_pUhv)t>aP$ev3+UKdHQ)WS=5eM7`&Q6BxIj>c3NkrR&y z+1n>A;f1X8y+H4iIDtro3x0`KfTf zQu5KqpE9K@S)}Mejz5Oq<%McS;iJyp^*~W7Zn(>#T#twy>*TDEbQYZ@;m~=Rso3h^ z$Cu&=yRpT1*6l>b13ZYCv$F?{y|D!;Ur1pdJRUJ5z^u1oIij?r)+i;Yr0;b#Oq$=H z?~jbk^R(>S85#PH≥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

6&qaNDxLwZnq2 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

ycBey{rl;kDc{Ai+(=LzE1TWNYW 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

w%k_tC9o+J?jlEWgdzIe0b`MG#H=N&ZEd~ha9 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 literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff2 b/gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53d081f3a538a63578c15a5cc11219b32e6d5795 GIT binary patch literal 12764 zcmV<2F(b}*Pew8T0RR9105RME4gdfE09y0_05O380RR9100000000000000000000 z0000SGzMTlQ&d4zNC1RZ5eN!_n?U+13xiAm0X7081A|NiAO(d42ZU=32OFP96Yel< z96&ISTu>C{iqi)Fm*fsH?v=5DnQTXQcjFv-sMc_gFb!!Hw8G(RAO^yvt#p|_mMzm} zK4853@+$O`t?#&z(KSbCa>^6>ueJC4%)K-FHbja*#s~)C2!%|_qp&1ogp7@gieexB zpLYo6)(wdgsSSD~HbyKMYZ$9y8?_C38;rk`i!ufZyNOxqqlEHX==%tSmOTIZ-K$ zs}^auL`A(TU3=O1Nn}4KZ=#h06&=&_<9pT1Z@We@2u4tn1$7q+@w{)*Ml$6A(kv;2 ze+AZ7$Q4RFRCMxkx$RfUQ%9^dGDovU+~4ag+y7VA7(&+K5jhCc1C<0-CQbGIELrd^ zgX|@Ffo5VaQpnofLZ={9z%@{1IPe}}h_Gm`x~5H+^yPMe4ydU6=om7GqM5hO5j;JJ z8qR)0O~}v-y%NGulXrUzSNEMus{wWHIY$6x2nfu(hhq|f@6f;UBH%gpp)UlU)8~~X zz!Lx*fFhDs8Goa0EP!|sBLFIN``A}<4zPB}%{u_rI3_sTuNVcF^k9ugZupZ%#@ID~|g7)$q z0VJS!0Tg!tppeSXzdzAGEq;9d@$Sd%AGdy7{juZ8-6z+dTzjH;B7Y)#!gxY?LVprT z-3p#WJk~!FZ3U30;Dx~wIft;}c3Q*?4XodeqNKM{tQM9MebC)ke$C#FfUrAu>%z_XN!FW387}JX&3qB7ajR22z zWC`Q3Il0M^G1!>Bn2Q3ueg(MV?t^h4hQEx->1XCRKgBU|Z-nHi$=yaH;O$0+-|d1E z5yxF%tu&KZW#xq~xnY4&cU#iBAR6O)EgxNb^V}x0E%KvaQVU90$3E!P-jD zyS>0q|Ej+X!&@orPP3-X&Dc>s}^GnBZN})qZyR?|} zyk*|PS8iK1abf?A?YzXZgy!l;%x=-}kl92fDbkHaFGie{SHmv9!Nh3q zS{CbDi$wc3ez-FXz!a z!c~vodV00tqRQ}bBcamM9i)W7OcN*)9#f=U&aqPKvV5mE!UE4;;86qbR^w;MHB5;Y zKzE6a*?9|#)NBLuNSJi8;q67lAHMJY>3Hu0-?#MKfc16MSWgX&_`kHpZZVZIR&89Xg#FBu!#ewuCsdFqcHC36P)X4p_goZ%c@1Sd1d5dT9a(bi>OCYiNYnq1)t zMHS_|l?HQPwqgB*-V8w@)e!(NeI{NCbfqZM2NT{~Z}}oWLE8rX#vV?`G-@CLs}8O) zdyp~OFQa=&{M)2YFU#w;ni^`c$_SRMnCaV>84D=bUS;D)y`@h&(-5GbA4c6x);^tB zk#bpSi@+l@-qomC1;YjMD>KrAZiXxOArja2SQspTIP8!8cJAUH0X!6TT~fDCY8)9? z4@`{Qu!aAwfru*FP?g`!5E|{tAZS7%IK!JLlP|As;2Rbekh+kg{j2tvlvjI$((OQx z-8-aGQ1*aq{b;s>{O&VY!AwOJ0}oxjbBt^^lr+#4Z%>20hQ(LxwnlaiJD}xNPE{9L zlnOD>v%)YE@l99OqT(S|NS6B^bSkyYVyQ?Blzh|vueo;BR%_KQDJ=Ps>J-Bp&^0<% zc;dEqz+)3HSwH}S%dlJoW+_bZ7e8EzB6*z^_fP<#N&ogj5M^wF%7Pa~sP&2}kbfFtc;v*4i>s{>ORn+u zvYgJ8y~M_+D%aiDl~{E}+4Q}0vP#Qahn2PnMa@1pXqHD#3i1akuqqgXF;LcG2?CD5wJ)=xkE#m_+{=8K)NnPoJ2|&I zV|-8wuo$yD?1;NHV7Uv#Pr}he|m+R)0}w042+1>toP})hp17%FzpM z(F;a)IJ`q~55g)yx#X7A*&IjnWOm1P$+o}KYyfzt`}u&Lqwe0$wCE&s5c4`(Lwb~W z_@?zche9TOa&N2sX6?gfTgJVFvBacdR^E}{=Z(_uMIee|e}9E25|GOaw5{17DXKOG z^&Eygzm5hv9$Z%AisWmTD>L_cWg+U*F1c-Zx=e3XpFbsJW7y+OQ(h(jd4#0ZoV<*yw!4$tv zY?pX`;MjoOjVX^242t?2$i)aEHz^~LJJj7&{p~A6mn_OKK8!@G0qZr; zfo3*si(I6V8!#x9Kuw=YMW{V0m_OPF!|feEgBXbQJiUGc6ioVW6ehJ>iuCJl*-rg} zamb6B?qq~3DdWBFRu7n-54{xcXbqb-^e31Z5r_|&#;UuZ#y(SxhjUJU~Y-_qJdU>1t!-L~WKf?t0< z)FpikF+9ba_IB{;b5y{=G&y5to$d+n#AgCLwY7{j7B|KLyhUxhNSGH_q`x6bXs#}h z8OTM@*|m?43cdl?*VqAfXv}FLz2eY-9qb!BH-|f(+ImRQtlV@B$d~r}ZN?LWa~nn# zGmI_*-+qAcEB&p-DySyL>ME)gEO%atlx|SD4S!=NYtpQ(wrgswsv4tunYq>@=D)vS z3GatT`rA)G|1KP`S)}0CAAe|KIRas+oY7&IQk7&eQNn@y56= zy*2O2mh&g0TTMZuJ5gzsB{5!M{2ikt3H(}!G0h3OO#ZN)6oSd3?bRNCGLsS! z1{hk?AQ?DAc`s>uipB3Q;n~G?rCW`k-TU4DsCwe&SjGR=1D(}&6CoMeuAQz-%R5K< z>BoQhQ^W6GxiaPi^L$wXcJmh9CXevUz8F}bZ5fxGu7bo1h)oQ=HbyOVk~v#H_LN83 z;dv5!siTG`PMy&c*(K$xm&N|Cj5Mc&}}66cAvz8LJ@i%KbJn`dk~ zTi)9H)kY4kvBk9Bj~1K0+sf!Yxz$KPG>E5S!efJ`AXGIAlnHr?I6PLN$~~g$N}`c{ z40}tRfXCn%*XVq7x;nB?uK-=3eT?T0kk>ZIK6(Of-Av9#V~DJF z*6r6L5YPr5T#cEw=%q?voMTkW78*b&6HS&^!_7+ypf`irZ-;d?6Zn9u(* zD`GI*LPPCuCZQE|qssXYQ0-?D)4S-h%BtN$HUk2E6vY8G z#g5Bm2z?F9y}c<*HFS~RiS(Lz%sandi+7kNUEy>Ir(*ypTp*E>Q}?&OxPLjTyUBXL zG_Lp28%>pq!bgu+AE^f0ucd)$3WvyvP^<@fHmWqtTF)(-Cy+$Eyy2g24fKlD94rSr z6_yNk+HJB58q){F#)V|gXJ9i8hTOnzpRJdF#O8R^7GjkQ8ctbMoaKuL{Hyy+*6dJ& zNL+vsbF)JDJe>CTSN7%Pi)8!qSFi9|9x*$FBQC&8B%x*2Y?EECWa{CADNb?fYC`)^ ze66R@OXxWaVlRML&*9bYD#G}hq4qU|l>AA~-}hzXV0~O3*n<;>aYKr00wn&zz$r~3 z$U@BoiqWd&OOnt(`VfgA?qGi}4^()+X8WfYJo$Xr#eiE3I4-qB7)zd);NOB&fL;*w zVQg4)MQaQC)XeTt&f-tlE4_6AG}P;0!(0GoGDk9PXi0%^q6uC*uFH5DNB{3hSBuW z^f5r{HGcL%mC(ewcn&KkSild-4Lf9=E#7$N+*U@8evvwE6lB~n9*;)*lgwy~2%D&8O+|1ta`z>6yL)>mGwl<7J zw(`8XZD#=0Lbw)8)7WIuD`qr5KW1!1?5A1_xdSYWrYBVRyP}}V?67d#eo0gJT55W_Og62KTjDvx9-AW2cW(5Ym$0O}sV8F~$NCTW$A(4U zu5`!W#vXb1U2CzlU3m93E>|GT!SZ=BoluC+ef`>gA-RRj;n#mGM+yacERUaq5!{&4 z|F~?KllAwQnFjNk7th&B9+lR!-LnkI;avFYvWW|kfsa)zzbf#*8$RThD@jV$C@hjN` zR``e@#+_9j{PR~P6^QuGBh-=Oz`}WtoMHga!nhkm+=H-?)eLzdStu-`Fl4A|zyjQR zMi6ih==r-CYzAkCv>#{T*kcj8c(?fGN2+?fvY+5H2C(LU7+2LAv;(5 z!*)>PjAhTCsgrgte~sDA`*SMUvgdCj2y&?+(eG}(y7S?E4xi1xV|=*v>OGKhLvruB zcfx8j-|c3;`uFT>fH#DxTncGlKXMk6*aGP~F$}7XIeNP+B7aR~FY6c@4olOIP>Sm5 zWwx{a4!3TpyeN?wKDKrNvT)`3vVEbfP*#|rEtyBGwE4C&Tt!NUu4& zRhf^={RE6WpV`x@g`N_sYs-ODDBdph%qNnv?xqxm#Vg#ue6e@AJJ0^hONBc=Oz3iK zfTngmZ?6Hh&FV^C5ZQO7Fhtr}(^V@E|TKsaL`79)+xfPJhdhI$=VY(owkeir~{`n5mxF8okMcAMV>QpwiE`8 zTUP~bYdBQo!`81RX_Sr)u`;X__WZ?Hr+3c(-FOiL!;cZ7305(fy9?hQCTC{g_2gtP z!qIg9XP136tSQq(F>z$xyp?z*3zP?ZxS;~}d+1|^{|uumN44v&cwq{ulsb&Ze?R6L zJUu(-e!d3Iv3FDcs0@_{ho^cH9l+{QqM3bv>n-ih)$r^gYL1e+A&-5{809Z>^vuxn^Bw$r zFTH*D+&|P9VrgT6cK`MBy&wGTuP49#LyTy7K)K7?WCXQ|=VHuI-x~iNvzq4|Dg^~h zYcOrH_7A=(QhP^4rg;5)1J4ponP!TJLuO_xamptK|6iY$m)URF3TjZWD()GkI9j|f zp`v_mfq%6XFLS>6zr7n$SU|2Qhux@zK%3sm9XMJAWB zWO%vTr=7d!+xWSCI4*Jtm6tO4WdF{?1Jel}&1ga{Db+>yk8qKh30T~lv?>sOo$k+e zqvvhh127GuB4IwZEL7zB?3x)ChKGH)B23d{B`osK*)BjK$`>BUVJF#IbsOok`<%$J z(yn3zkEF3pb>DNaWImu=g?lpm-xT{xaG5T-)kGQ9#E)(~GCD;s(TrgR2U%4jE>*8m z4wJK7r4BmyiR)zu_}!bQk~|`5De(XP3*ZEpgi*Ei^&29x)7OR9)-uXD+{o-~hwQHwWMN*rowT8Ie%4!8sSumDFQUG{|*IN2v=Z|~3)*_P8Te$#O0t@2;)b)wQ z-6uh4|NW)g3U!OpWuXmhbyQDV+vccT!?f_w9CKsZEYH7~j4TKiM`fU$&HOXSVbJ*D z5oIw`@W81JxMzj;E#a5Ln+#z(9v_t*9QSHau6J;=7FQ&Sv!te`MlB1Kj4r2aLYp?WN* zYHg!qozW&+-hcJjaCma%l!(e|r0mQqiQL`Tuz{~vR3pdHt%^N=0aDve$Dz+ErE>9N zW#&G00rMJ5P7_Wf8%oDzR4$c6-JO$+n<8)t+~N3QLJCY*!6lAZWU}@~vwzz!S>pKq zH8+dm-~eC568YD9g=U4bsd}PLhgqwMo==meq^NxWuT7M9XQL~!*WozeydY+>*REMJ zOiD{1B9*r=*JhG^wBr*p&e!T>;rAbYMT~6W;PV^fB%Nj(`Neh7U>3u_@W=cVLG`cd zoL{7dzH}y97tYoPFjzSO;o&G9lY!C`BlJN`Motiyht~V$PyjCWQ9o0d(-FA zAKUW4PK~GYf^#`>1^#S)nO{R^n9^+2&dv2ZZUzaz^6TA4KO@@JXTR3e&`^! zR#YX%)*iYrup;llIb7|=!&SjhK|wOd2ZNE_^HX4g;HnUolj(yPhUNMs=R*ac{Lj;l z(Rmfe2tJW!e^ulTwdj78lr#p02gq%`GJGPVvjVaBKxKHR?f>8>KzMfC|K}6T>Bh_B zb>n6qwSf;10kdUngv%^wcoT0cBgUSYR>xm8PmLew7|>MhGyVC8xjk-y>*rmaKi`KK z8?h))>R%LQ2lIkHf8etK;UB)>-ec!Z3Pzqp*SJN{v%HeU!7@UiB=OhXZ_D$3lCpin zQPN9`i-*DUO6V3lGu~Yqe;Ee6ZLT<$k z@B%E1r)xE2p!v_?%Q46?Kn1RmY0hEZ56)qheN*Sx?m!t;h*|E2BJ6M%hV6zG4|n2aeS0P zAS?_O;uUW5<^_h?PBpL3_nzww%ykVw!9#sxF3u(RlNfBkW`+hi&E5WwK3w)g%=cYU zGd!2=u)qg7LZ!K|0>IY({`pA*Ne?;(Hr{Tt<7?M(No*3EcD(6C6a6@uO=7R(X!))7 zw=7#|>cD&Vd^+<_<@>asKd%m?c{(+3Y=Qtx!|D96iGv3l*$KoX50PB|BF$L=r^BojaWR)_9`EuDJ&Z;>mM>)?1LyyAkcB9n z%>6UyMZPlr8(%=YX?bmtDC=eGvrdr$N*#HuLa%(YT%@z8$m4e%}*a1s#CO%ftAB03DeW zpyesc!sJlE{on+xA)P0Rh@#=RJbE^)@3EvH#ssYPne6gKkGAMxkvZ!VNMfRxboRh< zsKT!cg(_yn5aQfF@7m>K34eL*g&c;H6*EaFzfPcKf^`cwWg%WKukn!(P|<(?ApiZt zg&oAh${-{CN(4eUo?wuVZpOme;6lgJT+k@7^WUE7@UL?(Pb{ zvvZgjOF+fc)C3hMRFnoAn`X3B*%cirrOz0cfV#7qf>JS}bK&fWEH8~Ayd=?7#vaSo zcT!|lM|zK{tUDu}9LX!x$>cTyp;wyj8{<(#hU4HeLWFnx;VT&dtjJW%*FO*j?g3C9 zXUavIGTkKXyb#(NN0S)(o9*&sU{NY0@Pht1S z^eoe;(?A$^{RF-pZHCA_rJj=G?%7Pal&| z5qOoSmpv+pIjg305IFr5jb>BiwsFo_jpln}u7Y{g$Bb+40ca&9?C& zz|tgWThunuRujGX@(s2elW2xfvSl}x4<)K*@xE-$DYR7@%?LrCI)v{S;kJPU6ERqVc1wcc80qjg z2fbs71Z47=I|8w@PbBB#Cz~{AQ)7?z`lu-=G{5%!-1!t8MTBh>rI1&#@B;*`dM&=B zI6CfAfRz0HZ!9d7s`5QN|FJ$Q)*C!{_P!Dn#LTLieEzrVL1Fv`ORehdIn`Ko?K|Cc$wq3D~dOGg?( z=1KtX?J4f72ilgJGEmgrKFz@Q|A6Gow;jZO3djpA((a%L zNW4<57s_DEk1-2j#Z7w`yTl;wFLS7NzXD5!YIqw1S*1$t2+H79q9OB1Je?6)h%5;E zA4KT?7-$Dp2igZ70?XyVL)A3!C|5rk=*YiX0K>1uwft%g7!xtJ}fy=I)7D%*HS_me-L0INw~$wU7=a zmV@DhZj7A}!1WO40)!B(j;{=H(7;lnCKJP^2)wzKQjM8Qxe$`TjAh%`F(&1hCGS^q zLK{n2!Gi$XrkIF!tu-{qF#!V!>Fhu)aY40q0KZLpJ0YErj!xtf7Z8>;f5J4;ccAZt z=|ukl5Pf`AKer!*C8&qShnfePN5)4A2h299u14(on^ z5~Oww*m;r?UbjX*+}a~c-|jLl{Ro<0$tz+N{CYV&oUh7L+9hI8+(CvTau7`Wts5 z@|&HUl+pb4P*`>to1GN~v#?~EV!R|CF$ zzH{j>c@#H?t;0~Lh{Ir6AlM%CE0)UPcin*jo{_uo>?4!stIw~S&;gb6OBk1)z}Nw- zqI=6*0Q{V9ax)z;eldLkq^Ac<0zSNZAB#kF1P43ugOkusf?#w93K6vUSC^F?Qww7R(kfNW-CYn!g_2`g3y;MM#Uiot5>R;sNRquk zkyIeTb5+t~s;nJX2?Uy|GFjlapi*4eREMCX&M|KR19{tbl+Dz<7xj`bun&3SEAPaDxXzm zUfgEITV2>=d6BI9e+fWAr7EhsqGAIri&5?&`gvx5eDT9QfAiI%drjMbI;bB-5QxQv^< zXUN?5bEYd0Q!Is(?YviLs31kcf`|Ii1EFYNx2~<*>R(i*wIaF3fi*x>0iD;!{K8bT z)Q2-_>o1i_vlMw5aElG*19ZSiW2arq=|KpsgVF!Dz$-JPC9A_gfdN;M#);_}dJJvxVO%Hxf``n;D~ zUc8&|>z80@BHKrQ_EV1L5tpb&XEQR{ZAWe6L!WJ1h1&fhJ?Qfgl8?s)%L?mC;ex1Y z@AvN_3*-kNi;_2s!bODHFkSI3JPZ3%uq=u0o?dD9=ER&IXIW^j509zxj=t}~*byYc zTX}H?B8seK3b#X7vf#0afjqT1*n>OhFR_xvx&zoOurN9;+$Z?w4Qo=L!&w*aFWz>0dCtw_s`mvVOm_Q6Yil=8X7`tz+_xMc%zF?ic_n;fZjsTtNId`6tDIk zT0bPN@n!$Zf&K@-_f|os6ciqXPdNliia`na@M;n&e=4>L^v(nPmL*`z_%VM@$rxSG zsoPea_jYftdsNFo16|EYkNOuiJ$1P}6wC3Fa__&mA-$phIr5)7 zlwgGJp8B>x0|+;cOxryEY6FnSbNg-D?QB5!iyvR#8a}=899Y}e+qVuxY`LD}<7R#7 zQ5-ag<@59%$0r0UK~B&3#$$5b=2KZ=UWaKRNy!q1A4VE5y~8&SMD6wKI^PAHKBr#) zpvBiI+JSAo&K_G3p$OrD35i!oh{(${4i|=o!bOuNkxxj7#Ajj_A<~6-xW9Rj0fosQ zKKj?)?eoKj3K%T&(LWa8&YyR_qz&Z@nJ=4wBvOqCWT*DS2Cr>d*;3a6QIR$sJz5_wk1BCyI<31{>By`+!sqjN zT-C#Bv)y&OSMILeZPBE>&*kz3$AwkQ>IDr>gZN^{NJV4BiBa-cx&=U?;*k-T&o6D@ z^~*26oyV7LToZI+XzTucW}d`fNcS$-1;7u7I(W~S*gdqWWjFdqCt_e+hq>na{ip2wAehETx|lVmT8ze z){?1bEg1{elIc=y!xa=+(2vWJC53$lt{cS<2 zRv%JR<+sGqKR*w63UL_iWpY{5n-!V1|Npq2PaYN$01!%we@x&NdiCFEj49dJ4>6)- zr7>S%XURtxx3a?o(;N2-9SJ}N;jqj@fH}bTGK7@~Hh^8V`gjUQ=IQYy`v7mq5Lk)e z0+>bx0#+ip0J@gemBmxAf4ep#VU-R`<#Jh7%gJ1^iXxL648WH%I76w193N4cEa6d~ z`c*NR9O)XFN4T72sNu)QR3@LGaPk2Fci;25zsvvKjHr?hK+X&R1bkUQ*gry!q6i+NkreP1 zQ}LYb3az)#5!pIS)7kE{wYn5IBEwz_#aKm1OpT%3kQrT8S!O`HX%}2)bV0glwRUJv z%#2QZ=-`#$8MWFKN*SaM>R_-_Z!L-vSKe|Y5FQFbC)ZX2}N)Ax&GEg9gRczki9DGFlm>=zWY6d z5*G8;F9~Y7?ABM=py-rFviRhG8c^xEJj#)H2`Y)MULv zpAd=9t&*$g9tcZZ zl>?@gDpyRah*+h&$9!4T^liEFRF+AdZ$O7*s%7j0&OnRvC^lM6E?g9EO_r#jm+ONQ zLyU`0E&(3~0X^~JmC^xMVi_)xG24yP%T=X_Ryh^DauxD*afFBnR`@6(ME5WdsbSyu zNJ0tX90@|=2I(i3adoV6v=z|HiV$b3+TgTw#p@B! z8(*#H#&hK>lT~!Eh?gq%l8H+R>3TUyG?gPjOs^Jq)ZhzLn1Zf98@McS@UrnH5E4od zv|u4Zg~7nWt>T|(1QCcx$SA02=psd7;NcSx5)qS-iXkJX5Gzi+1c{VX)RH7ikt$6( z7p|aS+_>}L$&0u5KKN+Zh)+KIqT48=o&NNXH&(E+M4LW`ncKwQMhiIc;cLnX%Wyc_ zWj9+E_Sx^GJ@z^k%w*WH7mX!@#&3>r@K%p^4nTnOvzardL#$=`!zwGaYc-!G8v&MD zj!o;FGjw*yGA*0lS?68w+MJ6nxh%&OSLM2HwHY_ul;@VeNRN6tkK_Qado)ku6sH?4CXvyWin2$W=k1jiT2<}le>s)VVQDsw iP9d8AxExHI1$==3QWPFVcs!f@V>G9HK>XU6g$@8FuBYz+ literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg b/gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg new file mode 100644 index 00000000000..30d2f3ef56a --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg @@ -0,0 +1,4 @@ + + + + diff --git a/gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js b/gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js new file mode 100644 index 00000000000..898744feb7b --- /dev/null +++ b/gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js @@ -0,0 +1,71 @@ +(() => { + class Help { + constructor() { + this.DOM = { + el: document.querySelector("#data"), + funcs: [], + addressInput: null, + cmdModeSelect: null, + }; + + this.funcList = []; + + if (this.DOM.el) this.#init(); + } + + #init() { + const { el } = this.DOM; + this.DOM.funcs = [...el.querySelectorAll("[data-func]")]; + this.DOM.addressInput = el.querySelector("[data-role='help-input-addr']"); + this.DOM.cmdModeSelect = el.querySelector("[data-role='help-select-mode']"); + + this.funcList = this.DOM.funcs.map((funcEl) => new HelpFunc(funcEl)); + + if (this.DOM.addressInput) this.#bindEvents(); + } + + #bindEvents() { + const { addressInput, cmdModeSelect } = this.DOM; + + addressInput.addEventListener("input", () => this.funcList.forEach((func) => func.updateAddr(addressInput.value))); + cmdModeSelect?.addEventListener("change", (e) => this.funcList.forEach((func) => func.updateMode(e.target.value))); + } + } + + class HelpFunc { + constructor(el) { + this.DOM = { + el, + addrs: [...el.querySelectorAll("[data-role='help-code-address']")], + args: [...el.querySelectorAll("[data-role='help-code-args']")], + modes: [...el.querySelectorAll("[data-code-mode]")], + }; + + this.#bindEvents(); + } + + #bindEvents() { + this.DOM.el.addEventListener("input", (e) => { + if (e.target.dataset.role === "help-param-input") { + this.updateArg(e.target.dataset.param, e.target.value); + } + }); + } + + updateArg(paramName, paramValue) { + this.DOM.args.filter((arg) => arg.dataset.arg === paramName).forEach((arg) => (arg.textContent = paramValue.trim() || "")); + } + + updateAddr(addr) { + this.DOM.addrs.forEach((DOMaddr) => (DOMaddr.textContent = addr.trim() || "ADDRESS")); + } + + updateMode(mode) { + this.DOM.modes.forEach((cmd) => { + cmd.className = cmd.dataset.codeMode === mode ? "inline" : "hidden"; + }); + } + } + + document.addEventListener("DOMContentLoaded", () => new Help()); +})(); diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb2/handler.go new file mode 100644 index 00000000000..7bce153d23d --- /dev/null +++ b/gno.land/pkg/gnoweb2/handler.go @@ -0,0 +1,373 @@ +package gnoweb + +import ( + "bytes" + "errors" + "fmt" + "html/template" + "io" + "log/slog" + "net/http" + "path/filepath" + "strings" + "sync" + + "github.com/alecthomas/chroma/v2" + "github.com/alecthomas/chroma/v2/formatters/html" + "github.com/alecthomas/chroma/v2/lexers" + "github.com/alecthomas/chroma/v2/styles" + "github.com/gnolang/gno/gno.land/pkg/gnoweb2/components" + "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types + "github.com/gnolang/gno/gno.land/pkg/service" +) + +const chromaPath = "/_chroma/style.css" + +var chromaStyle = styles.Get("friendly") + +func init() { + if chromaStyle == nil { + panic("unable to get chroma style") + } +} + +type StaticMetadata struct { + AssetsPath string + RemoteHelp string + ChaindID string +} + +type Formater interface { +} + +type WebHandlerConfig struct { + Meta StaticMetadata + RenderClient *service.WebRenderClient +} + +type WebHandler struct { + formatter *html.Formatter + + logger *slog.Logger + static StaticMetadata + rendercli *service.WebRenderClient + + // bufferPool is used to reuse Buffer instances + // to reduce memory allocations and improve performance. + bufferPool sync.Pool +} + +func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { + if cfg.RenderClient == nil { + logger.Error("no renderer has been defined") + } + + // Setup Formatter + formatter := html.New( + html.WithClasses(true), + html.ClassPrefix("chroma-"), + html.WithLineNumbers(true), + ) + + return &WebHandler{ + formatter: formatter, + rendercli: cfg.RenderClient, + logger: logger.WithGroup("web"), + static: cfg.Meta, + // Initialize the pool with bytes.Buffer factory + bufferPool: sync.Pool{ + New: func() interface{} { + return &bytes.Buffer{} + }, + }, + } +} + +func (h *WebHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.logger.Info("receiving request", "method", r.Method, "path", r.URL.Path) + if r.Method == http.MethodGet { + if r.URL.Path == chromaPath { + w.Header().Set("Content-Type", "text/css") + // XXX: Move this elsewhere, it should fail with the prefix + if err := h.formatter.WriteCSS(w, chromaStyle); err != nil { + h.logger.Error("unable to write css", "err", err) + http.NotFound(w, r) + } + return + } + + h.Get(w, r) + return + } + + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) +} + +type PathKind string + +func generateBreadcrumbPaths(path string) []components.BreadcrumbPart { + split := strings.Split(path, "/") + parts := []components.BreadcrumbPart{} + + for i := range split { + name := split[i] + if name == "" { + continue + } + + parts = append(parts, components.BreadcrumbPart{ + Name: split[i], + Path: strings.Join(split[:i+1], "/"), + }) + } + + return parts +} + +func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { + var headData components.HeadData // Placeholder for later metadata + + body := h.getBuffer() + defer h.putBuffer(body) + + var status int + + gnourl, err := ParseGnoURL(r.URL) + if err != nil { + h.logger.Error("unable to render body", "url", r.URL.String(), "err", err) + http.Error(w, "invalid url", http.StatusBadRequest) + return + } + + // Render the page body into the buffer + switch gnourl.Kind { + case KindRealm: + status, err = h.renderRealm(body, gnourl) + case KindPure: + status, err = http.StatusNotFound, components.RenderStatusComponent(w, "page not found") + case KindUser: + fallthrough + default: + http.Error(w, "not supported", http.StatusBadRequest) + return + } + + if err != nil { + http.Error(w, "internal server error", http.StatusInternalServerError) + return + } + w.WriteHeader(status) + + var indexData components.IndexData + + indexData.HeadData = headData + indexData.HeaderData.RealmPath = gnourl.Path + indexData.HeaderData.Breadcrumb.Parts = generateBreadcrumbPaths(gnourl.Path) + indexData.HeaderData.WebQuery = gnourl.WebQuery + + indexData.Body = template.HTML(body.String()) + // Render the final page with the rendered body + err = components.RenderIndexComponent(w, indexData) + + if err != nil { + h.logger.Error("failed to render index component", "err", err) + } + + return +} + +func (h *WebHandler) renderRealmHelp(w io.Writer, gnourl *GnoURL) (status int, err error) { + fsigs, err := h.rendercli.Functions(gnourl.Path) + if err != nil { + h.logger.Error("unable to fetch path functions", "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + realmName := "" + if i := strings.LastIndexByte(gnourl.Path, '/'); i > 0 { + realmName = gnourl.Path[i+1:] + } + + err = components.RenderHelpComponent(w, components.HelpData{ + RealmName: realmName, + ChainId: h.static.ChaindID, + PkgPath: gnourl.FullPath, + Remote: h.static.RemoteHelp, + Functions: fsigs, + }) + if err != nil { + h.logger.Error("unable to render helper", "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + return http.StatusOK, nil +} + +func (h *WebHandler) renderRealmSource(w io.Writer, gnourl *GnoURL) (status int, err error) { + pkgPath := gnourl.Path + + files, err := h.rendercli.Sources(pkgPath) + if err != nil { + h.logger.Error("unable to list sources file", "path", gnourl.Path, "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + if len(files) == 0 { + h.logger.Debug("no file(s) available", "path", gnourl.Path) + return http.StatusOK, components.RenderStatusComponent(w, "no files available") + } + + var fileName string + file := gnourl.WebQuery.Get("file") + if file == "" { + fileName = files[0] + } else if contains(files, file) { + fileName = file + } else { + h.logger.Error("unable to render source", "file", file, "err", "file does not exist") + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + source, err := h.rendercli.SourceFile(pkgPath, fileName) + if err != nil { + h.logger.Error("unable to get source file", "file", fileName, "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + // if theme := gnourl.WebQuery.Get("theme"); theme != "" { + // n, err := strconv.ParseInt(theme, 10, 32) + // if err != nil { + // cstyle = styles.Get(theme) + // } else { + // listName := make([]string, len(styles.Registry)) + // for name := range styles.Registry { + // listName = append(listName, name) + // } + + // sort.Slice(listName, func(i, j int) bool { + // return strings.Compare(listName[i], listName[j]) > 0 + // }) + + // cstyle = styles.Get(listName[n]) + // } + // } + + hsource, err := h.highlightSource(chromaStyle, fileName, source) + if err != nil { + h.logger.Error("unable to highlight source file", "file", fileName, "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + err = components.RenderSourceComponent(w, components.SourceData{ + PkgPath: gnourl.Path, + Files: files, + FileName: fileName, + FileSource: template.HTML(hsource), + }) + if err != nil { + h.logger.Error("unable to render helper", "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + return http.StatusOK, nil +} + +func contains(files []string, file string) bool { + for _, f := range files { + if f == file { + return true + } + } + return false +} + +func (h *WebHandler) renderRealm(w io.Writer, gnourl *GnoURL) (status int, err error) { + h.logger.Info("component render", "path", gnourl.Path, "args", gnourl.PathArgs) + + // Display realm help page + if gnourl.WebQuery.Has("help") { + return h.renderRealmHelp(w, gnourl) + } + + // Display realm source page + if gnourl.WebQuery.Has("source") { + return h.renderRealmSource(w, gnourl) + } + + // Render content into the content buffer + content := h.getBuffer() + defer h.putBuffer(content) + + meta, err := h.rendercli.Render(content, gnourl.Path, gnourl.EncodeArgs()) + if err != nil { + if errors.Is(err, vm.InvalidPkgPathError{}) { + return http.StatusNotFound, components.RenderStatusComponent(w, "not found") + } + + h.logger.Error("unable to render markdown", "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + err = components.RenderRealmComponent(w, components.RealmData{ + TocItems: &components.RealmTOCData{ + Items: meta.Items, + }, + Content: template.HTML(content.String()), + }) + + if err != nil { + h.logger.Error("unable to render template", "err", err) + return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") + } + + // Write the rendered content to the response writer + return http.StatusOK, nil +} + +func (h *WebHandler) highlightSource(style *chroma.Style, fileName string, src []byte) ([]byte, error) { + var lexer chroma.Lexer + switch strings.ToLower(filepath.Ext(fileName)) { + case ".gno": + lexer = lexers.Get("go") + case ".md": + lexer = lexers.Get("markdown") + case ".mod": + lexer = lexers.Get("gomod") + default: + return nil, fmt.Errorf("unsupported extension for highlighting source file: %q", fileName) + } + + if lexer == nil { + return nil, fmt.Errorf("unsuported lexer for file %q", fileName) + } + + iterator, err := lexer.Tokenise(nil, string(src)) + if err != nil { + h.logger.Error("unable to ", "fileName", fileName, "err", err) + } + + var buff bytes.Buffer + if style.Name != chromaStyle.Name { + if err := html.New().Format(&buff, style, iterator); err != nil { + return nil, fmt.Errorf("unable to format theme: %w", err) + } + return buff.Bytes(), nil + } + + if err := h.formatter.Format(&buff, style, iterator); err != nil { + return nil, fmt.Errorf("unable to format source file %q: %w", fileName, err) + } + + return buff.Bytes(), nil +} + +// getBuffer retrieves a buffer from the sync.Pool +func (h *WebHandler) getBuffer() *bytes.Buffer { + return h.bufferPool.Get().(*bytes.Buffer) +} + +// putBuffer resets and puts a buffer back into the sync.Pool +func (h *WebHandler) putBuffer(buf *bytes.Buffer) { + buf.Reset() + h.bufferPool.Put(buf) +} diff --git a/gno.land/pkg/gnoweb2/public/fonts/intervar/Inter.var.woff2 b/gno.land/pkg/gnoweb2/public/fonts/intervar/Inter.var.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..365eedc50cd0f46ea35a3176335fc67b51123fb4 GIT binary patch literal 324864 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≫bY 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≥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

6&qaNDxLwZnq2 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

ycBey{rl;kDc{Ai+(=LzE1TWNYW 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

w%k_tC9o+J?jlEWgdzIe0b`MG#H=N&ZEd~ha9 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 literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff2 b/gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53d081f3a538a63578c15a5cc11219b32e6d5795 GIT binary patch literal 12764 zcmV<2F(b}*Pew8T0RR9105RME4gdfE09y0_05O380RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/public/imgs/gnoland.svg b/gno.land/pkg/gnoweb2/public/imgs/gnoland.svg new file mode 100644 index 00000000000..30d2f3ef56a --- /dev/null +++ b/gno.land/pkg/gnoweb2/public/imgs/gnoland.svg @@ -0,0 +1,4 @@ + + + + diff --git a/gno.land/pkg/gnoweb2/public/js/realmhelp.js b/gno.land/pkg/gnoweb2/public/js/realmhelp.js new file mode 100644 index 00000000000..3f3764439d9 --- /dev/null +++ b/gno.land/pkg/gnoweb2/public/js/realmhelp.js @@ -0,0 +1 @@ +(()=>{class r{DOM;funcList;constructor(){this.DOM={el:document.querySelector("#data"),funcs:[],addressInput:null,cmdModeSelect:null},this.funcList=[],this.DOM.el&&this.init()}init(){let{el:e}=this.DOM;e&&(this.DOM.funcs=Array.from(e.querySelectorAll("[data-func]")),this.DOM.addressInput=e.querySelector("[data-role='help-input-addr']"),this.DOM.cmdModeSelect=e.querySelector("[data-role='help-select-mode']"),this.funcList=this.DOM.funcs.map(t=>new s(t)),this.DOM.addressInput&&this.bindEvents())}bindEvents(){let{addressInput:e,cmdModeSelect:t}=this.DOM;e?.addEventListener("input",()=>this.funcList.forEach(n=>n.updateAddr(e.value))),t?.addEventListener("change",n=>{let d=n.target;this.funcList.forEach(l=>l.updateMode(d.value))})}}class s{DOM;constructor(e){this.DOM={el:e,addrs:Array.from(e.querySelectorAll("[data-role='help-code-address']")),args:Array.from(e.querySelectorAll("[data-role='help-code-args']")),modes:Array.from(e.querySelectorAll("[data-code-mode]"))},this.bindEvents()}bindEvents(){this.DOM.el.addEventListener("input",e=>{let t=e.target;t.dataset.role==="help-param-input"&&this.updateArg(t.dataset.param||"",t.value)})}updateArg(e,t){this.DOM.args.filter(n=>n.dataset.arg===e).forEach(n=>{n.textContent=t.trim()||""})}updateAddr(e){this.DOM.addrs.forEach(t=>{t.textContent=e.trim()||"ADDRESS"})}updateMode(e){this.DOM.modes.forEach(t=>{t.className=t.dataset.codeMode===e?"inline":"hidden"})}}document.addEventListener("DOMContentLoaded",()=>new r)})(); diff --git a/gno.land/pkg/gnoweb2/public/js/searchbar.js b/gno.land/pkg/gnoweb2/public/js/searchbar.js new file mode 100644 index 00000000000..51b42feea90 --- /dev/null +++ b/gno.land/pkg/gnoweb2/public/js/searchbar.js @@ -0,0 +1 @@ +(()=>{class r{DOM;baseUrl;constructor(){this.DOM={el:document.querySelector("#header-searchbar"),inputSearch:null,breadcrumb:null},this.baseUrl=window.location.origin,this.DOM.el&&this.init()}init(){let{el:e}=this.DOM;e&&(this.DOM.inputSearch=e.querySelector("[data-role='header-input-search']"),this.DOM.breadcrumb=e.querySelector("[data-role='header-breadcrumb-search']"),this.bindEvents())}bindEvents(){this.DOM.el?.addEventListener("submit",e=>{e.preventDefault(),this.searchUrl()})}searchUrl(){let e=this.DOM.inputSearch?.value.trim();if(e){let t=e;/^https?:\/\//i.test(t)||(t=`${this.baseUrl}${t.startsWith("/")?"":"/"}${t}`);try{window.location.href=new URL(t).href}catch{console.error("Invalid URL. Please enter a valid URL starting with http:// or https://")}}else console.error("Please enter a URL to search.")}}document.addEventListener("DOMContentLoaded",()=>new r)})(); diff --git a/gno.land/pkg/gnoweb2/public/styles.css b/gno.land/pkg/gnoweb2/public/styles.css new file mode 100644 index 00000000000..c9b60254d88 --- /dev/null +++ b/gno.land/pkg/gnoweb2/public/styles.css @@ -0,0 +1,3 @@ +@font-face{font-family:Roboto;font-style:normal;font-weight:900;font-display:swap;src:url(assets/fonts/roboto/roboto-mono-normal.woff2) format("woff2"),url(../fonts/roboto/roboto-mono-normal.woff) format("woff")}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:oblique 0deg 10deg;src:url(assets/fonts/intervar/Inter.var.woff2) format("woff2")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: } + +/*! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #bdbdbd}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#7c7c7c}input::placeholder,textarea::placeholder{opacity:1;color:#7c7c7c}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity));font-feature-settings:"kern" on,"liga" on,"calt" on,"zero" on;-webkit-font-feature-settings:"kern" on,"liga" on,"calt" on,"zero" on;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;font-variant-ligatures:contextual common-ligatures;font-kerning:normal;text-rendering:optimizeLegibility;overflow-x:hidden}@supports (font-variation-settings:normal){html{font-family:Inter var,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}}a:hover{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity));text-decoration-line:underline}svg{max-height:100%;max-width:100%}form{margin-top:0;margin-bottom:0}.realm-content{font-size:1rem}.realm-content a{font-weight:500;--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}.realm-content a:hover{text-decoration-line:underline}.realm-content h1,.realm-content h2,.realm-content h3,.realm-content h4{margin-top:2rem;line-height:1.25;--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.realm-content h2,.realm-content h2 *{font-weight:700}.realm-content h3,.realm-content h3 *,.realm-content h4,.realm-content h4 *{font-weight:600}.realm-content h1+h2,.realm-content h2+h3,.realm-content h3+h4{margin-top:.375rem}.realm-content h1{font-size:2.375rem;font-weight:700}.realm-content h2{font-size:1.5rem}.realm-content h3{margin-top:1.5rem;font-size:1.25rem}.realm-content h3,.realm-content h4{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content h4{font-size:1.125rem;font-weight:500}.realm-content h4,.realm-content p{margin-top:1rem;margin-bottom:1rem}.realm-content strong{font-weight:700;--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.realm-content strong *{font-weight:700}.realm-content blockquote{border-left-width:4px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));font-style:italic;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content blockquote,.realm-content ol,.realm-content ul{margin-top:1rem;margin-bottom:1rem;padding-left:1rem}.realm-content ol li,.realm-content ul li{margin-bottom:.25rem}.realm-content img{margin-top:1.5rem;margin-bottom:1.5rem;max-width:100%}.realm-content figure{margin-top:1.5rem;margin-bottom:1.5rem;text-align:center}.realm-content figcaption{font-size:.875rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content code{padding:.25rem .5rem;font-size:.875rem}.realm-content code,.realm-content pre{border-radius:.3125rem;--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.realm-content pre{overflow-x:auto;padding:1rem}.realm-content hr{margin-top:2rem;margin-bottom:2rem;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(226 226 226/var(--tw-border-opacity))}.realm-content table{margin-top:1.5rem;margin-bottom:1.5rem;width:100%;border-collapse:collapse}.realm-content td,.realm-content th{border-width:1px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));padding:.5rem 1rem}.realm-content th{--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));font-weight:700}.realm-content caption{margin-top:.5rem;text-align:left;font-size:.875rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content q{font-style:italic;color:#555;border-left:4px solid #ccc;padding-left:1rem;margin:1.5rem 0;quotes:"โ€œ" "โ€" "โ€˜" "โ€™"}.realm-content q:before{content:open-quote;margin-right:.25rem}.realm-content q:after,.realm-content q:before{font-size:2rem;color:#999;vertical-align:-.4rem}.realm-content q:after{content:close-quote;margin-left:.25rem}.realm-content q:before{content:open-quote}.realm-content q:after{content:close-quote}.realm-content ol ol,.realm-content ol ul,.realm-content ul ol,.realm-content ul ul{margin-top:.5rem;margin-bottom:.5rem;padding-left:1rem}.realm-content ul{list-style-type:disc}.realm-content table th:first-child,.realm-content td:first-child{padding-left:0}.realm-content table th:last-child,.realm-content td:last-child{padding-right:0}.realm-content abbr[title]{cursor:help;border-bottom-width:1px;border-style:dotted}.realm-content details{margin-top:1rem;margin-bottom:1rem}.realm-content summary{cursor:pointer;font-weight:700}.realm-content a code{color:inherit}.realm-content video{margin-top:1.5rem;margin-bottom:1.5rem;max-width:100%}.realm-content math{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.realm-content small{font-size:.875rem}.realm-content del{text-decoration-line:line-through}.realm-content sub{vertical-align:sub;font-size:.75rem}.realm-content sup{vertical-align:super;font-size:.75rem}.realm-content button,.realm-content input{border-width:1px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));padding:.5rem 1rem}main :is(h1,h2,h3,h4){scroll-margin-top:5.5rem}main .source-code>pre{overflow:scroll;border-radius:.3125rem;--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important;padding:2rem .75rem;font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.sidemenu .peer:checked+label>svg{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}#sidebar{order:2;grid-column:span 3/span 3}#sidebar+.code-content,#sidebar+.realm-content{grid-column:span 7/span 7}.code-content,.realm-content{grid-column:span 4/span 4}.main-header:has(#sidemenu-docs:checked)+main #sidebar #sidebar-docs,.main-header:has(#sidemenu-meta:checked)+main #sidebar #sidebar-meta,.main-header:has(#sidemenu-source:checked)+main #sidebar #sidebar-source,.main-header:has(#sidemenu-summary:checked)+main #sidebar #sidebar-summary{display:block}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked)) .main-navigation,:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main .realm-content{grid-column:span 6/span 6}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked)) .sidemenu,:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main #sidebar{grid-column:span 4/span 4}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main #sidebar:before{position:absolute;top:0;left:-1.75rem;z-index:-1;display:block;height:100%;width:50vw;--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));--tw-content:"";content:var(--tw-content)}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-1{bottom:.25rem}.left-0{left:0}.right-2{right:.5rem}.top-0{top:0}.top-16{top:4rem}.top-2{top:.5rem}.z-max{z-index:9999}.col-span-1{grid-column:span 1/span 1}.col-span-3{grid-column:span 3/span 3}.col-span-7{grid-column:span 7/span 7}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mr-10{margin-right:2.5rem}.mr-4{margin-right:1rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-4{margin-top:1rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-10{height:2.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-full{height:100%}.h-screen{height:100vh}.min-h-full{min-height:100%}.w-10{width:2.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-full{width:100%}.min-w-48{min-width:12rem}.max-w-screen-max{max-width:98.75rem}.shrink-0{flex-shrink:0}.grow-\[2\]{flex-grow:2}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-flow-dense{grid-auto-flow:dense}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.overflow-scroll{overflow:scroll}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.3125rem}.rounded-sm{border-radius:.25rem}.rounded-l-sm{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-sm{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r-8{border-right-width:8px}.border-t{border-top-width:1px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(226 226 226/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(124 124 124/var(--tw-border-opacity))}.border-r-transparent{border-right-color:transparent}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(240 240 240/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white-50{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-24{padding-bottom:6rem}.pb-28{padding-bottom:7rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pt-2{padding-top:.5rem}.font-mono{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.text-100{font-size:.875rem}.text-200{font-size:1rem}.text-300{font-size:1.125rem}.text-50{font-size:.75rem}.text-600{font-size:1.5rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-tight{line-height:1.25}.text-gray-200{--tw-text-opacity:1;color:rgb(189 189 189/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(143 143 143/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(19 19 19/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.outline-none{outline:2px solid transparent;outline-offset:2px}.text-stroke{-webkit-text-stroke:currentColor;-webkit-text-stroke-width:.6px}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.quotes{font-style:italic;color:#555;border-left:4px solid #ccc;padding-left:1rem;margin:1.5rem 0;quotes:"โ€œ" "โ€" "โ€˜" "โ€™"}.quotes:before{content:open-quote;margin-right:.25rem}.quotes:after,.quotes:before{font-size:2rem;color:#999;vertical-align:-.4rem}.quotes:after{content:close-quote;margin-left:.25rem}.before\:px-1:before{content:var(--tw-content);padding-left:.25rem;padding-right:.25rem}.before\:text-gray-300:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(143 143 143/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:bottom-0:after{content:var(--tw-content);bottom:0}.after\:block:after{content:var(--tw-content);display:block}.after\:h-1:after{content:var(--tw-content);height:.25rem}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:rounded-t:after{content:var(--tw-content);border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.after\:bg-green-600:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(34 108 87/var(--tw-bg-opacity))}.focus-within\:outline-2:focus-within{outline-width:2px}.focus-within\:outline-gray-300:focus-within{outline-color:#8f8f8f}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-gray-600:focus{--tw-border-opacity:1;border-color:rgb(84 89 93/var(--tw-border-opacity))}.peer:focus-within~.peer-focus-within\:hidden{display:none}@media (min-width:63.75rem){.xl\:inline{display:inline}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:gap-20{gap:5rem}.xl\:gap-6{gap:1.5rem}.xl\:pt-0{padding-top:0}}@media (min-width:85.375rem){.xxl\:inline-block{display:inline-block}.xxl\:h-4{height:1rem}.xxl\:w-4{width:1rem}.xxl\:gap-20{gap:5rem}} \ No newline at end of file diff --git a/gno.land/pkg/gnoweb2/static.go b/gno.land/pkg/gnoweb2/static.go new file mode 100644 index 00000000000..1888ad06475 --- /dev/null +++ b/gno.land/pkg/gnoweb2/static.go @@ -0,0 +1,25 @@ +package gnoweb + +import ( + "embed" + _ "embed" + "net/http" +) + +//go:embed public/* +var assets embed.FS + +func disableCache(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "no-store") + next.ServeHTTP(w, r) + }) +} + +func AssetDevHandler() http.Handler { + return disableCache(http.StripPrefix("/public", http.FileServer(http.Dir("public")))) +} + +func AssetHandler() http.Handler { + return http.FileServer(http.FS(assets)) +} diff --git a/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go b/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go new file mode 100644 index 00000000000..0e3781545a4 --- /dev/null +++ b/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go @@ -0,0 +1,60 @@ +package gnoweb + +import ( + "fmt" + "hash/fnv" + "math" + + "github.com/charmbracelet/lipgloss" +) + +func colorFromString(s string, saturation, lightness float64, offset int) lipgloss.Color { + hue := float64((uint32(offset) + hash32a(s)) % 360) + + r, g, b := hslToRGB(hue, saturation, lightness) + hex := rgbToHex(r, g, b) + return lipgloss.Color(hex) +} + +func hash32a(s string) uint32 { + h := fnv.New32a() + h.Write([]byte(s)) + return h.Sum32() +} + +// from: https://www.rapidtables.com/convert/color/hsl-to-rgb.html +// hslToRGB converts an HSL triple to an RGB triple. +func hslToRGB(h, s, l float64) (r, g, b uint8) { + if h < 0 || h >= 360 || s < 0 || s > 1 || l < 0 || l > 1 { + return 0, 0, 0 + } + + C := (1 - math.Abs((2*l)-1)) * s + X := C * (1 - math.Abs(math.Mod(h/60, 2)-1)) + m := l - (C / 2) + + var rNot, gNot, bNot float64 + switch { + case 0 <= h && h < 60: + rNot, gNot, bNot = C, X, 0 + case 60 <= h && h < 120: + rNot, gNot, bNot = X, C, 0 + case 120 <= h && h < 180: + rNot, gNot, bNot = 0, C, X + case 180 <= h && h < 240: + rNot, gNot, bNot = 0, X, C + case 240 <= h && h < 300: + rNot, gNot, bNot = X, 0, C + case 300 <= h && h < 360: + rNot, gNot, bNot = C, 0, X + } + + r = uint8(math.Round((rNot + m) * 255)) + g = uint8(math.Round((gNot + m) * 255)) + b = uint8(math.Round((bNot + m) * 255)) + return r, g, b +} + +func rgbToHex(r, g, b uint8) string { + return fmt.Sprintf("#%02X%02X%02X", r, g, b) +} diff --git a/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go b/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go new file mode 100644 index 00000000000..63ffc62de15 --- /dev/null +++ b/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go @@ -0,0 +1,41 @@ +package gnoweb + +import ( + "bufio" + "fmt" + "os" + + "github.com/charmbracelet/lipgloss" +) + +func main() { + if len(os.Args) < 1 { + fmt.Fprintln(os.Stderr, "invalid name") + os.Exit(1) + } + + name := os.Args[1] + + const width = 12 + if len(name) >= width { + name = name[:width-3] + "..." + } + + colorLeft := colorFromString(name, 0.5, 0.6, 90) + colorRight := colorFromString(name, 1.0, 0.92, 90) + borderStyle := lipgloss.NewStyle().Foreground(colorLeft). + Border(lipgloss.ThickBorder(), false, true, false, false). + BorderForeground(colorLeft). + Bold(true). + Width(width) + lineStyle := lipgloss.NewStyle().Foreground(colorRight) + + w, r := os.Stdout, os.Stdin + + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := scanner.Text() + fmt.Fprint(w, borderStyle.Render(name)+" ") + fmt.Fprintln(w, lineStyle.Render(line)) + } +} diff --git a/gno.land/pkg/gnoweb2/tools/go.mod b/gno.land/pkg/gnoweb2/tools/go.mod new file mode 100644 index 00000000000..a7159a08950 --- /dev/null +++ b/gno.land/pkg/gnoweb2/tools/go.mod @@ -0,0 +1,60 @@ +module tools + +go 1.22.3 + +require ( + github.com/a-h/templ v0.2.747 + github.com/air-verse/air v1.52.2 + github.com/charmbracelet/lipgloss v0.11.0 +) + +require ( + dario.cat/mergo v1.0.0 // indirect + github.com/PuerkitoBio/goquery v1.8.1 // indirect + github.com/a-h/parse v0.0.0-20240121214402-3caf7543159a // indirect + github.com/a-h/protocol v0.0.0-20240704131721-1e461c188041 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/bep/godartsass v1.2.0 // indirect + github.com/bep/godartsass/v2 v2.0.0 // indirect + github.com/bep/golibsass v1.1.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/charmbracelet/x/ansi v0.1.1 // indirect + github.com/cli/browser v1.3.0 // indirect + github.com/cli/safeexec v1.0.1 // indirect + github.com/creack/pty v1.1.21 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gohugoio/hugo v0.123.3 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/hashstructure v1.1.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/natefinch/atomic v1.0.1 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.1.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/segmentio/asm v1.2.0 // indirect + github.com/segmentio/encoding v0.4.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/tdewolff/parse/v2 v2.7.12 // indirect + go.lsp.dev/jsonrpc2 v0.10.0 // indirect + go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect + go.lsp.dev/uri v0.3.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.18.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect +) diff --git a/gno.land/pkg/gnoweb2/tools/go.sum b/gno.land/pkg/gnoweb2/tools/go.sum new file mode 100644 index 00000000000..23a323bd127 --- /dev/null +++ b/gno.land/pkg/gnoweb2/tools/go.sum @@ -0,0 +1,336 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 h1:+tu3HOoMXB7RXEINRVIpxJCT+KdYiI7LAEAUrOw3dIU= +github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69/go.mod h1:L1AbZdiDllfyYH5l5OkAaZtk7VkWe89bPJFmnDBNHxg= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= +github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= +github.com/a-h/parse v0.0.0-20240121214402-3caf7543159a h1:vlmAfVwFK9sRpDlJyuHY8htP+KfGHB2VH02u0SoIufk= +github.com/a-h/parse v0.0.0-20240121214402-3caf7543159a/go.mod h1:3mnrkvGpurZ4ZrTDbYU84xhwXW2TjTKShSwjRi2ihfQ= +github.com/a-h/protocol v0.0.0-20240704131721-1e461c188041 h1:2enlC41iOwWklx9ZUqpQygsNAG6KIm3uMMUXzBJw5jA= +github.com/a-h/protocol v0.0.0-20240704131721-1e461c188041/go.mod h1:Gm0KywveHnkiIhqFSMZglXwWZRQICg3KDWLYdglv/d8= +github.com/a-h/templ v0.2.747 h1:D0dQ2lxC3W7Dxl6fxQ/1zZHBQslSkTSvl5FxP/CfdKg= +github.com/a-h/templ v0.2.747/go.mod h1:69ObQIbrcuwPCU32ohNaWce3Cb7qM5GMiqN1K+2yop4= +github.com/air-verse/air v1.52.2 h1:z5v9TSdGacd5fheA4+3CRMtWdMA5JspM6ju04tlrAvw= +github.com/air-verse/air v1.52.2/go.mod h1:1xd2oyYArpkaeJ0IXNYj+GYLwdfPfID+cAh7cu6XTlI= +github.com/alecthomas/chroma/v2 v2.12.0 h1:Wh8qLEgMMsN7mgyG8/qIpegky2Hvzr4By6gEF7cmWgw= +github.com/alecthomas/chroma/v2 v2.12.0/go.mod h1:4TQu7gdfuPjSh76j78ietmqh9LiurGF0EpseFXdKMBw= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= +github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c h1:651/eoCRnQ7YtSjAnSzRucrJz+3iGEFt+ysraELS81M= +github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/bep/clocks v0.5.0 h1:hhvKVGLPQWRVsBP/UB7ErrHYIO42gINVbvqxvYTPVps= +github.com/bep/clocks v0.5.0/go.mod h1:SUq3q+OOq41y2lRQqH5fsOoxN8GbxSiT6jvoVVLCVhU= +github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo= +github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840= +github.com/bep/gitmap v1.1.2/go.mod h1:g9VRETxFUXNWzMiuxOwcudo6DfZkW9jOsOW0Ft4kYaY= +github.com/bep/goat v0.5.0 h1:S8jLXHCVy/EHIoCY+btKkmcxcXFd34a0Q63/0D4TKeA= +github.com/bep/goat v0.5.0/go.mod h1:Md9x7gRxiWKs85yHlVTvHQw9rg86Bm+Y4SuYE8CTH7c= +github.com/bep/godartsass v1.2.0 h1:E2VvQrxAHAFwbjyOIExAMmogTItSKodoKuijNrGm5yU= +github.com/bep/godartsass v1.2.0/go.mod h1:6LvK9RftsXMxGfsA0LDV12AGc4Jylnu6NgHL+Q5/pE8= +github.com/bep/godartsass/v2 v2.0.0 h1:Ruht+BpBWkpmW+yAM2dkp7RSSeN0VLaTobyW0CiSP3Y= +github.com/bep/godartsass/v2 v2.0.0/go.mod h1:AcP8QgC+OwOXEq6im0WgDRYK7scDsmZCEW62o1prQLo= +github.com/bep/golibsass v1.1.1 h1:xkaet75ygImMYjM+FnHIT3xJn7H0xBA9UxSOJjk8Khw= +github.com/bep/golibsass v1.1.1/go.mod h1:DL87K8Un/+pWUS75ggYv41bliGiolxzDKWJAq3eJ1MA= +github.com/bep/gowebp v0.3.0 h1:MhmMrcf88pUY7/PsEhMgEP0T6fDUnRTMpN8OclDrbrY= +github.com/bep/gowebp v0.3.0/go.mod h1:ZhFodwdiFp8ehGJpF4LdPl6unxZm9lLFjxD3z2h2AgI= +github.com/bep/lazycache v0.4.0 h1:X8yVyWNVupPd4e1jV7efi3zb7ZV/qcjKQgIQ5aPbkYI= +github.com/bep/lazycache v0.4.0/go.mod h1:NmRm7Dexh3pmR1EignYR8PjO2cWybFQ68+QgY3VMCSc= +github.com/bep/logg v0.4.0 h1:luAo5mO4ZkhA5M1iDVDqDqnBBnlHjmtZF6VAyTp+nCQ= +github.com/bep/logg v0.4.0/go.mod h1:Ccp9yP3wbR1mm++Kpxet91hAZBEQgmWgFgnXX3GkIV0= +github.com/bep/overlayfs v0.9.1 h1:SL54SV8A3zRkmQ+83Jj4TLE88jadHd5d1L4NpfmqJJs= +github.com/bep/overlayfs v0.9.1/go.mod h1:aYY9W7aXQsGcA7V9x/pzeR8LjEgIxbtisZm8Q7zPz40= +github.com/bep/tmc v0.5.1 h1:CsQnSC6MsomH64gw0cT5f+EwQDcvZz4AazKunFwTpuI= +github.com/bep/tmc v0.5.1/go.mod h1:tGYHN8fS85aJPhDLgXETVKp+PR382OvFi2+q2GkGsq0= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/charmbracelet/lipgloss v0.11.0 h1:UoAcbQ6Qml8hDwSWs0Y1cB5TEQuZkDPH/ZqwWWYTG4g= +github.com/charmbracelet/lipgloss v0.11.0/go.mod h1:1UdRTH9gYgpcdNN5oBtjbu/IzNKtzVtb7sqN1t9LNn8= +github.com/charmbracelet/x/ansi v0.1.1 h1:CGAduulr6egay/YVbGc8Hsu8deMg1xZ/bkaXTPi1JDk= +github.com/charmbracelet/x/ansi v0.1.1/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo= +github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk= +github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= +github.com/cli/safeexec v1.0.1 h1:e/C79PbXF4yYTN/wauC4tviMxEV13BwljGj0N9j+N00= +github.com/cli/safeexec v1.0.1/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= +github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= +github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= +github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanw/esbuild v0.20.1 h1:ueyMIL19umCcJTSxiBH/QmPipgGt8hEDM24pdfowgEc= +github.com/evanw/esbuild v0.20.1/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/getkin/kin-openapi v0.123.0 h1:zIik0mRwFNLyvtXK274Q6ut+dPh6nlxBp0x7mNrPhs8= +github.com/getkin/kin-openapi v0.123.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= +github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= +github.com/go-openapi/swag v0.22.8 h1:/9RjDSQ0vbFR+NyjGMkFTsA1IA0fmhKSThmfGZjicbw= +github.com/go-openapi/swag v0.22.8/go.mod h1:6QT22icPLEqAM/z/TChgb4WAveCHF92+2gF0CNjHpPI= +github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= +github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e h1:QArsSubW7eDh8APMXkByjQWvuljwPGAGQpJEFn0F0wY= +github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e/go.mod h1:3Ltoo9Banwq0gOtcOwxuHG6omk+AwsQPADyw2vQYOJQ= +github.com/gohugoio/hugo v0.123.3 h1:a96Kex2xrqmrSYAYJ8MKzsKCVvCUPjW3+YyXtsEXRmE= +github.com/gohugoio/hugo v0.123.3/go.mod h1:7AHCGAy5MIFEhnvQMG5DfpVGpgrXfkoZ4z6y0zwQHLQ= +github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.1.0 h1:oFQ3f1M3Ook6amHmbqVu/uBRrQ6yjMDFkIv4HQr0f1Y= +github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.1.0/go.mod h1:g9CCh+Ci2IMbPUrVJuXbBTrA+rIIx5+hDQ4EXYaQDoM= +github.com/gohugoio/locales v0.14.0 h1:Q0gpsZwfv7ATHMbcTNepFd59H7GoykzWJIxi113XGDc= +github.com/gohugoio/locales v0.14.0/go.mod h1:ip8cCAv/cnmVLzzXtiTpPwgJ4xhKZranqNqtoIu0b/4= +github.com/gohugoio/localescompressed v1.0.1 h1:KTYMi8fCWYLswFyJAeOtuk/EkXR/KPTHHNN9OS+RTxo= +github.com/gohugoio/localescompressed v1.0.1/go.mod h1:jBF6q8D7a0vaEmcWPNcAjUZLJaIVNiwvM3WlmTvooB0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hairyhenderson/go-codeowners v0.4.0 h1:Wx/tRXb07sCyHeC8mXfio710Iu35uAy5KYiBdLHdv4Q= +github.com/hairyhenderson/go-codeowners v0.4.0/go.mod h1:iJgZeCt+W/GzXo5uchFCqvVHZY2T4TAIpvuVlKVkLxc= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY= +github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= +github.com/jdkato/prose v1.2.1 h1:Fp3UnJmLVISmlc57BgKUzdjr0lOtjqTZicL3PaYy6cU= +github.com/jdkato/prose v1.2.1/go.mod h1:AiRHgVagnEx2JbQRQowVBKjG0bcs/vtkGCH1dYAL1rA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kyokomi/emoji/v2 v2.2.12 h1:sSVA5nH9ebR3Zji1o31wu3yOwD1zKXQA2z0zUyeit60= +github.com/kyokomi/emoji/v2 v2.2.12/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/makeworld-the-better-one/dither/v2 v2.4.0 h1:Az/dYXiTcwcRSe59Hzw4RI1rSnAZns+1msaCXetrMFE= +github.com/makeworld-the-better-one/dither/v2 v2.4.0/go.mod h1:VBtN8DXO7SNtyGmLiGA7IsFeKrBkQPze1/iAeM95arc= +github.com/marekm4/color-extractor v1.2.1 h1:3Zb2tQsn6bITZ8MBVhc33Qn1k5/SEuZ18mrXGUqIwn0= +github.com/marekm4/color-extractor v1.2.1/go.mod h1:90VjmiHI6M8ez9eYUaXLdcKnS+BAOp7w+NpwBdkJmpA= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= +github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/muesli/smartcrop v0.3.0 h1:JTlSkmxWg/oQ1TcLDoypuirdE8Y/jzNirQeLkxpA6Oc= +github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= +github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= +github.com/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek= +github.com/niklasfasching/go-org v1.7.0/go.mod h1:WuVm4d45oePiE0eX25GqTDQIt/qPW1T9DGkRscqLW5o= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= +github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= +github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= +github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= +github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= +github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tdewolff/minify/v2 v2.20.17 h1:zGqEDhspr3XjSrQI/56vw9IdAhLAaKTLXWnDBsxNVt8= +github.com/tdewolff/minify/v2 v2.20.17/go.mod h1:ulkFoeAVWMLEyjuDz1ZIWOA31g5aWOawCFRp9R/MudM= +github.com/tdewolff/parse/v2 v2.7.12 h1:tgavkHc2ZDEQVKy1oWxwIyh5bP4F5fEh/JmBwPP/3LQ= +github.com/tdewolff/parse/v2 v2.7.12/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= +github.com/tdewolff/test v1.0.11-0.20231101010635-f1265d231d52/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= +github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 h1:IkjBCtQOOjIn03u/dMQK9g+Iw9ewps4mCl1nB8Sscbo= +github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.0 h1:EfOIvIMZIzHdB/R/zVrikYLPPwJlfMcNczJFMs1m6sA= +github.com/yuin/goldmark v1.7.0/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= +github.com/yuin/goldmark-emoji v1.0.2 h1:c/RgTShNgHTtc6xdz2KKI74jJr6rWi7FPgnP9GAsO5s= +github.com/yuin/goldmark-emoji v1.0.2/go.mod h1:RhP/RWpexdp+KHs7ghKnifRoIs/Bq4nDS7tRbCkOwKY= +go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI= +go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac= +go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE= +go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2/go.mod h1:gtSHRuYfbCT0qnbLnovpie/WEmqyJ7T4n6VXiFMBtcw= +go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo= +go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= +golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/gno.land/pkg/gnoweb2/tools/tools.go b/gno.land/pkg/gnoweb2/tools/tools.go new file mode 100644 index 00000000000..b578f56237d --- /dev/null +++ b/gno.land/pkg/gnoweb2/tools/tools.go @@ -0,0 +1,7 @@ +package tools + +import ( + _ "github.com/a-h/templ/cmd/templ" + + _ "github.com/air-verse/air" +) diff --git a/gno.land/pkg/gnoweb2/url.go b/gno.land/pkg/gnoweb2/url.go new file mode 100644 index 00000000000..936444e0cae --- /dev/null +++ b/gno.land/pkg/gnoweb2/url.go @@ -0,0 +1,139 @@ +package gnoweb + +import ( + "errors" + "fmt" + "net/url" + "regexp" + "strings" +) + +const ( + KindUser PathKind = "u" + KindRealm PathKind = "r" + KindPure PathKind = "p" +) + +type GnoURL struct { + Kind PathKind + Path string + PathArgs string + WebQuery url.Values + Query url.Values + FullPath string +} + +func (url GnoURL) EncodeArgs() string { + var urlstr strings.Builder + if url.PathArgs != "" { + urlstr.WriteString(url.PathArgs) + } + + if len(url.Query) > 0 { + urlstr.WriteString("?" + url.Query.Encode()) + } + + return urlstr.String() +} + +func (url GnoURL) EncodePath() string { + var urlstr strings.Builder + urlstr.WriteString(url.Path) + if url.PathArgs != "" { + urlstr.WriteString(":" + url.PathArgs) + } + + if len(url.Query) > 0 { + urlstr.WriteString("?" + url.Query.Encode()) + } + + return urlstr.String() +} + +func escapeDollarSign(s string) string { + return strings.ReplaceAll(s, "$", "%24") +} + +func (url GnoURL) EncodeWebPath() string { + var urlstr strings.Builder + urlstr.WriteString(url.Path) + if url.PathArgs != "" { + pathEscape := escapeDollarSign(url.PathArgs) + urlstr.WriteString(":" + pathEscape) + } + + if len(url.WebQuery) > 0 { + urlstr.WriteString("$" + url.WebQuery.Encode()) + } + + if len(url.Query) > 0 { + urlstr.WriteString("?" + url.Query.Encode()) + } + + return urlstr.String() +} + +var ( + ErrURLMalformedPath = errors.New("malformed URL path") + ErrURLInvalidPathKind = errors.New("invalid path kind") +) + +// reRealName match a realm path +// - matches[1]: path +// - matches[2]: path kind +// - matches[3]: path args +var reRealmPath = regexp.MustCompile(`(?m)^` + + `(/([a-z]+)/` + // path kind + `[a-z][a-z0-9_]*` + // First path segment + `(?:/[a-z][a-z0-9_]*)*)` + // Additional path segments + `([:$](?:.*)|$)`, // Remaining portions args, separate by `$` or `:` +) + +func ParseGnoURL(u *url.URL) (*GnoURL, error) { + matches := reRealmPath.FindStringSubmatch(u.EscapedPath()) + if len(matches) != 4 { + return nil, fmt.Errorf("%w: %s", ErrURLMalformedPath, u.Path) + } + + path, pathKind, args := matches[1], matches[2], matches[3] + + if len(args) > 0 { + switch args[0] { + case ':': + args = args[1:] + case '$': + default: + return nil, fmt.Errorf("%w: %s", ErrURLMalformedPath, u.Path) + } + } + + var err error + webquery := url.Values{} + args, webargs, found := strings.Cut(args, "$") + if found { + if webquery, err = url.ParseQuery(webargs); err != nil { + return nil, fmt.Errorf("unable to parse webquery %q: %w ", webquery, err) + } + } + + uargs, err := url.PathUnescape(args) + if err != nil { + return nil, fmt.Errorf("unable to unescape path %q: %w", args, err) + } + + host := u.Hostname() + if host == "" { + host = "gno.land" + } + + fullPath := fmt.Sprintf("%s%s", host, path) + + return &GnoURL{ + Path: path, + Kind: PathKind(pathKind), + PathArgs: uargs, + WebQuery: webquery, + Query: u.Query(), + FullPath: fullPath, + }, nil +} diff --git a/gno.land/pkg/gnoweb2/url_test.go b/gno.land/pkg/gnoweb2/url_test.go new file mode 100644 index 00000000000..bee3e3b28cb --- /dev/null +++ b/gno.land/pkg/gnoweb2/url_test.go @@ -0,0 +1,129 @@ +package gnoweb + +import ( + "net/url" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestParseGnoURL(t *testing.T) { + testCases := []struct { + Name string + Input string + Expected *GnoURL + Err *error + }{ + { + Name: "malformed url", + Input: "https://gno.land/r/demo/:$?", + Expected: nil, + Err: &ErrURLMalformedPath, + }, + { + Name: "malformed url 2", + Input: "https://gno.land/r/dem)o:$?", + Expected: nil, + Err: &ErrURLMalformedPath, + }, + + { + Name: "webquery + query", + Input: "https://gno.land/r/demo/foo$help&func=Bar&name=Baz", + Expected: &GnoURL{ + Path: "/r/demo/foo", + Kind: KindRealm, + PathArgs: "", + WebQuery: url.Values{ + "help": []string{""}, + "func": []string{"Bar"}, + "name": []string{"Baz"}, + }, + Query: url.Values{}, + }, + Err: nil, + }, + + { + Name: "path args + webquery", + Input: "https://gno.land/r/demo/foo:example$tz=Europe/Paris", + Expected: &GnoURL{ + Path: "/r/demo/foo", + Kind: KindRealm, + PathArgs: "example", + WebQuery: url.Values{ + "tz": []string{"Europe/Paris"}, + }, + Query: url.Values{}, + }, + Err: nil, + }, + + { + Name: "path args + webquery + query", + Input: "https://gno.land/r/demo/foo:example$tz=Europe/Paris?hello=42", + Expected: &GnoURL{ + Path: "/r/demo/foo", + Kind: KindRealm, + PathArgs: "example", + WebQuery: url.Values{ + "tz": []string{"Europe/Paris"}, + }, + Query: url.Values{ + "hello": []string{"42"}, + }, + }, + Err: nil, + }, + + { + Name: "webquery inside query", + Input: "https://gno.land/r/demo/foo:example?value=42$tz=Europe/Paris", + Expected: &GnoURL{ + Path: "/r/demo/foo", + Kind: KindRealm, + PathArgs: "example", + WebQuery: url.Values{}, + Query: url.Values{ + "value": []string{"42$tz=Europe/Paris"}, + }, + }, + Err: nil, + }, + + { + Name: "webquery escaped $", + Input: "https://gno.land/r/demo/foo:example%24hello=43$hello=42", + Expected: &GnoURL{ + Path: "/r/demo/foo", + Kind: KindRealm, + PathArgs: "example$hello=43", + WebQuery: url.Values{ + "hello": []string{"42"}, + }, + Query: url.Values{}, + }, + Err: nil, + }, + } + + for _, tc := range testCases { + t.Run(tc.Name, func(t *testing.T) { + u, err := url.Parse(tc.Input) + require.NoError(t, err) + + result, err := ParseGnoURL(u) + if tc.Err == nil { + require.NoError(t, err) + t.Logf("parsed: %s", result.EncodePath()) + t.Logf("parsed web: %s", result.EncodeWebPath()) + } else { + require.ErrorAs(t, err, tc.Err) + } + + assert.Equal(t, tc.Expected, result) + }) + + } +} diff --git a/gno.land/pkg/markdown/ext_column.go b/gno.land/pkg/markdown/ext_column.go new file mode 100644 index 00000000000..c37b72be437 --- /dev/null +++ b/gno.land/pkg/markdown/ext_column.go @@ -0,0 +1,287 @@ +package markdown + +import ( + "fmt" + "strings" + + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" +) + +// Define NodeKind for Column +var KindColumn = ast.NewNodeKind("Column") + +// Define ColumnTag type and constants + +type ColumnDirection int + +const ( + ColumnDirectionUndefined ColumnDirection = iota + ColumnDirectionLeft + ColumnDirectionRight + ColumnDirectionMiddle +) + +func (c ColumnDirection) String() string { + switch c { + case ColumnDirectionLeft: + return "left" + case ColumnDirectionRight: + return "right" + case ColumnDirectionMiddle: + return "middle" + default: + return "undefined" + } +} + +type ColumnTag int + +const ( + ColumnTagUndefined ColumnTag = iota + ColumnTagOpen + ColumnTagSep + ColumnTagClose +) + +// ColumnNode represents a semantic tree for "column". +type ColumnNode struct { + ast.BaseBlock + Index int + SepKind byte + SepDir ColumnDirection + Tag ColumnTag + ctx *columnContext +} + +// Len function returns the length of the context index if it exists +func (cn *ColumnNode) Len() int { + if cn.ctx != nil { + return cn.ctx.index + } + return 0 +} + +// Dump implements Node.Dump. +func (n *ColumnNode) Dump(source []byte, level int) { + ast.DumpHelper(n, source, level, nil, nil) +} + +// Kind implements Node.Kind. +func (n *ColumnNode) Kind() ast.NodeKind { + return KindColumn +} + +// NewColumn initializes a ColumnAST object. +func NewColumn(ctx *columnContext, sepDir ColumnDirection, sepKind byte) *ColumnNode { + node := &ColumnNode{ctx: ctx, SepDir: sepDir, SepKind: sepKind, Index: 1} + if ctx != nil { + node.Index = ctx.index + } + return node +} + +// columnParser struct and its methods are used for parsing columns. +type columnParser struct{} + +var defaultColumnParser = &columnParser{} + +func NewColumnBlockParser() parser.BlockParser { + return defaultColumnParser +} + +// Trigger returns the trigger characters for the parser. +func (s *columnParser) Trigger() []byte { + return []byte{'+', '=', '<', '>'} +} + +var dirMap = map[string]ColumnDirection{ + "><": ColumnDirectionMiddle, + "<>": ColumnDirectionMiddle, + ">>": ColumnDirectionRight, + "<<": ColumnDirectionLeft, + "\x00>": ColumnDirectionLeft, + "<\x00": ColumnDirectionRight, + "\x00\x00": ColumnDirectionUndefined, +} + +// parseSeparator checks if the line starts with any of the given separators and returns the separator kind. +func parseSeparator(line []byte) (byte, ColumnDirection, bool) { + const minSperatorLen, maxSperatorLen = 3, 255 + + line = util.TrimRightSpace(util.TrimLeftSpace(line)) + if len(line) < minSperatorLen || len(line) >= maxSperatorLen { + return 0, ColumnDirectionUndefined, false + } + + key := []byte{0, 0} + if first := line[0]; first == '<' || first == '>' { + key[0] = first + line = line[1:] + } + + lastIndex := len(line) - 1 + if last := line[lastIndex]; last == '<' || last == '>' { + key[1] = last + line = line[:lastIndex] + } + + dir, ok := dirMap[string(key)] + if !ok { + return 0, ColumnDirectionUndefined, false + } + + runes := []byte{'+', '='} + for _, r := range runes { + match := true + for _, c := range line { + if r != c { + match = false + break + } + } + + if match { + return r, dir, true + } + } + + return 0, ColumnDirectionUndefined, false +} + +var columnContextKey = parser.NewContextKey() + +// columnContext struct and its methods are used for handling column context. +type columnContext struct { + initilized bool + index int +} + +func (ctx *columnContext) Init() { ctx.initilized = true } + +func (ctx *columnContext) Destroy() { ctx.initilized = false } + +func (ctx *columnContext) SpanColumn() { ctx.index++ } + +func (s *columnParser) getColumnContext(pc parser.Context) *columnContext { + cctx, ok := pc.Get(columnContextKey).(*columnContext) + if !ok || !cctx.initilized { + cctx = &columnContext{} + pc.Set(columnContextKey, cctx) + } + + return cctx +} + +// Open function opens a new column node based on the separator kind. +func (s *columnParser) Open(_ ast.Node, reader text.Reader, pc parser.Context) (ast.Node, parser.State) { + line, segment := reader.PeekLine() + sepKind, sepDir, ok := parseSeparator(line) + if !ok { + return nil, parser.NoChildren + } + + cctx := s.getColumnContext(pc) + node := NewColumn(cctx, sepDir, sepKind) + switch sepKind { + case '=': + if !cctx.initilized { + cctx.Init() + node.Tag = ColumnTagOpen + } else { + cctx.Destroy() + node.Tag = ColumnTagClose + } + case '+': + if !cctx.initilized { + return nil, parser.NoChildren + } + + cctx.SpanColumn() + node.Tag = ColumnTagSep + default: + panic("invalid tag - should not happen") + } + + reader.Advance(segment.Len()) + + node.Index = cctx.index + return node, parser.NoChildren +} + +func (b *columnParser) Continue(_ ast.Node, _ text.Reader, _ parser.Context) parser.State { + return parser.Close +} + +func (b *columnParser) Close(_ ast.Node, _ text.Reader, _ parser.Context) {} + +func (b *columnParser) CanInterruptParagraph() bool { + return true +} + +func (b *columnParser) CanAcceptIndentedLine() bool { + return false +} + +func (s *columnParser) CloseBlock(_ ast.Node, _ parser.Context) {} + +// columnRender function is used to render the column node. +func columnRender(w util.BufWriter, _ []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { + cnode, ok := node.(*ColumnNode) + numColumns := cnode.Len() + if !ok || numColumns == 0 || !entering { + return ast.WalkContinue, nil + } + + switch cnode.Tag { + case ColumnTagOpen: + var classes = []string{ + "cols-start", + fmt.Sprintf("cols-%d", numColumns), + } + + fmt.Fprintf(w, `

\n") + } + + var classes = []string{ + "col", + } + + if cnode.SepDir != ColumnDirectionUndefined { + classes = append(classes, "col-"+cnode.SepDir.String()) + } + + fmt.Fprintf(w, "\n", cnode.Index+1) + fmt.Fprintf(w, `
`+"\n", strings.Join(classes, " ")) + case ColumnTagClose: + fmt.Fprint(w, "
\n") + fmt.Fprint(w, ``+"\n") + default: + panic("invalid column tag - should not happend") + } + + return ast.WalkContinue, nil +} + +// column struct is used to extend the markdown with column functionality. +type column struct{} + +var Column = &column{} + +// Extend function extends the markdown with column functionality. +func (e *column) Extend(m goldmark.Markdown) { + m.Parser().AddOptions(parser.WithBlockParsers( + util.Prioritized(NewColumnBlockParser(), 500), + )) + m.Renderer().AddOptions(renderer.WithNodeRenderers( + util.Prioritized(NewRenderer(), 500), + )) +} diff --git a/gno.land/pkg/markdown/ext_column_test.go b/gno.land/pkg/markdown/ext_column_test.go new file mode 100644 index 00000000000..0087e9422fb --- /dev/null +++ b/gno.land/pkg/markdown/ext_column_test.go @@ -0,0 +1,158 @@ +package markdown + +import ( + "bytes" + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/text" +) + +func TestExtColumnSimple(t *testing.T) { + cases := []struct { + Name string + Markdown string + }{ + { + "basic", ` +=== +col1 ++++ +col2 +=== +`, + }, + { + "left", ` +<== +col1 ++++ +col2 +<== +`, + }, + { + "right", ` +==> +col1 ++++ +col2 +==> +`, + }, + { + "middle", ` +<==> +col1 ++++ +col2 +<==> +`, + }, + } + + m := goldmark.New() + Column.Extend(m) + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + source := []byte(tc.Markdown) + t.Log("input:\n" + strings.TrimSpace(tc.Markdown)) + + node := m.Parser().Parse( + text.NewReader(source), + ) + + var buf bytes.Buffer + m.Renderer().Render(&buf, []byte(tc.Markdown), node) + output := buf.Bytes() + + // _, err := html.Parse(bytes.NewReader(output)) + // require.NoError(t, err) + + name := fmt.Sprintf("column_simple_%s.golden", tc.Name) + file := filepath.Join("testdata", name) + + if *update { + err := os.WriteFile(file, buf.Bytes(), 0644) + require.NoError(t, err) + } + + t.Logf("testfile %q:\n%s", file, buf.String()) + + expected, err := os.ReadFile(file) + require.NoError(t, err) + + assert.Equal(t, expected, buf.Bytes()) + }) + } +} + +func TestExtColumn2Simple(t *testing.T) { + cases := []struct { + Name string + Markdown string + }{ + { + "basic", ` +--- +# Column1 + +content 1 +content 2 + +--- + +# Column2 + +content 1 +content 2 +--- +`, + }, + } + + m := goldmark.New() + Column.Extend(m) + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + source := []byte(tc.Markdown) + t.Log("input:\n" + strings.TrimSpace(tc.Markdown)) + + node := m.Parser().Parse( + text.NewReader(source), + ) + + node.Dump(source, 1) + + var buf bytes.Buffer + m.Renderer().Render(&buf, []byte(tc.Markdown), node) + output := buf.Bytes() + + // _, err := html.Parse(bytes.NewReader(output)) + // require.NoError(t, err) + + name := fmt.Sprintf("column_simple_%s.golden", tc.Name) + file := filepath.Join("testdata", name) + + if *update { + err := os.WriteFile(file, buf.Bytes(), 0644) + require.NoError(t, err) + } + + t.Logf("testfile %q:\n%s", file, buf.String()) + + expected, err := os.ReadFile(file) + require.NoError(t, err) + + assert.Equal(t, expected, buf.Bytes()) + }) + } +} diff --git a/gno.land/pkg/markdown/ext_render.go b/gno.land/pkg/markdown/ext_render.go new file mode 100644 index 00000000000..7e878bdee94 --- /dev/null +++ b/gno.land/pkg/markdown/ext_render.go @@ -0,0 +1,23 @@ +package markdown + +import ( + "github.com/yuin/goldmark/renderer" +) + +type Renderer struct{} + +// NewRenderer initialize Renderer as renderer.NodeRenderer. +func NewRenderer() renderer.NodeRenderer { + return &Renderer{} +} + +// RegisterFuncs add AST objects to Renderer. +func (r *Renderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { + reg.Register(KindColumn, columnRender) +} + +// func (r *Renderer) column(w util.BufWriter, source []byte, node) { +// ast.Node, entering bool) (ast.WalkStatus, error) { +// fmt.Println(node.Kind()) +// return ast.WalkContinue, nil +// } diff --git a/gno.land/pkg/markdown/flags_test.go b/gno.land/pkg/markdown/flags_test.go new file mode 100644 index 00000000000..b91bff14727 --- /dev/null +++ b/gno.land/pkg/markdown/flags_test.go @@ -0,0 +1,5 @@ +package markdown + +import "flag" + +var update = flag.Bool("update", false, "update .golden files") diff --git a/gno.land/pkg/markdown/nohtml.go b/gno.land/pkg/markdown/nohtml.go new file mode 100644 index 00000000000..a8727c11431 --- /dev/null +++ b/gno.land/pkg/markdown/nohtml.go @@ -0,0 +1,195 @@ +package markdown + +import ( + "fmt" + + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer" + "github.com/yuin/goldmark/text" + "github.com/yuin/goldmark/util" +) + +// Define NodeKind for NoHtml +var KindNoHtml = ast.NewNodeKind("NoHtml") + +// Define NoHtmlTag type and constants +type NoHtmlTag int + +const ( + NoHtmlTagUndefined NoHtmlTag = iota + NoHtmlTagOpen + NoHtmlTagSep + NoHtmlTagClose +) + +// NoHtmlNode represents a semantic tree for "noHtml". +type NoHtmlNode struct { + ast.BaseBlock + Index int + Tag NoHtmlTag + ctx *noHtmlContext +} + +// Len function returns the length of the context index if it exists +func (cn *NoHtmlNode) Len() int { + if cn.ctx != nil { + return cn.ctx.index + } + return 0 +} + +// Dump implements Node.Dump. +func (n *NoHtmlNode) Dump(source []byte, level int) { + ast.DumpHelper(n, source, level, nil, nil) +} + +// Kind implements Node.Kind. +func (n *NoHtmlNode) Kind() ast.NodeKind { + return KindNoHtml +} + +// NewNoHtml initializes a NoHtmlAST object. +func NewNoHtml(ctx *noHtmlContext) *NoHtmlNode { + node := &NoHtmlNode{ctx: ctx, Index: 1} + if ctx != nil { + node.Index = ctx.index + } + return node +} + +// noHtmlParser struct and its methods are used for parsing noHtmls. +type noHtmlParser struct{} + +var defaultNoHtmlParser = &noHtmlParser{} + +func NewNoHtmlBlockParser() parser.BlockParser { + return defaultNoHtmlParser +} + +// Trigger returns the trigger characters for the parser. +func (s *noHtmlParser) Trigger() []byte { + return []byte{'<'} +} + +var noHtmlContextKey = parser.NewContextKey() + +// noHtmlContext struct and its methods are used for handling noHtml context. +type noHtmlContext struct { + initilized bool + index int +} + +func (ctx *noHtmlContext) Init() { + ctx.initilized = true + ctx.index = 1 +} + +func (ctx *noHtmlContext) Destroy() { ctx.initilized = false } + +func (ctx *noHtmlContext) SpanNoHtml() { ctx.index++ } + +func (s *noHtmlParser) getNoHtmlContext(pc parser.Context) *noHtmlContext { + cctx, ok := pc.Get(noHtmlContextKey).(*noHtmlContext) + if !ok || !cctx.initilized { + cctx = &noHtmlContext{} + pc.Set(noHtmlContextKey, cctx) + } + + return cctx +} + +// Open function opens a new noHtml node based on the separator kind. +func (s *noHtmlParser) Open(_ ast.Node, reader text.Reader, pc parser.Context) (ast.Node, parser.State) { + // line, segment := reader.PeekLine() + // kind, _, ok := parseSeparator(line) + // if !ok { + // return nil, parser.NoChildren + // } + + // cctx := s.getNoHtmlContext(pc) + // node := NewNoHtml(cctx) + // switch kind { + // case '=': + // if !cctx.initilized { + // cctx.Init() + // node.Tag = NoHtmlTagOpen + // } else { + // cctx.Destroy() + // node.Tag = NoHtmlTagClose + // } + // case '+': + // if !cctx.initilized { + // return nil, parser.HasChildren + // } + + // cctx.SpanNoHtml() + // node.Tag = NoHtmlTagSep + // default: + // panic("invalid tag - should not happen") + // } + + // reader.Advance(segment.Len()) + + // node.Index = cctx.index + return nil, parser.NoChildren +} + +func (b *noHtmlParser) Continue(_ ast.Node, _ text.Reader, _ parser.Context) parser.State { + return parser.Close +} + +func (b *noHtmlParser) Close(_ ast.Node, _ text.Reader, _ parser.Context) {} + +func (b *noHtmlParser) CanInterruptParagraph() bool { + return true +} + +func (b *noHtmlParser) CanAcceptIndentedLine() bool { + return false +} + +func (s *noHtmlParser) CloseBlock(_ ast.Node, _ parser.Context) {} + +// noHtmlRender function is used to render the noHtml node. +func noHtmlRender(w util.BufWriter, _ []byte, node ast.Node, entering bool) (ast.WalkStatus, error) { + cnode, ok := node.(*NoHtmlNode) + numNoHtmls := cnode.Len() + if !ok || numNoHtmls == 0 || !entering { + return ast.WalkContinue, nil + } + + switch cnode.Tag { + case NoHtmlTagOpen: + fmt.Fprintf(w, ``+"\n", numNoHtmls) + fmt.Fprintf(w, "\n", cnode.Index) + fmt.Fprint(w, "
\n") + case NoHtmlTagSep: + fmt.Fprint(w, "
\n") + fmt.Fprintf(w, "\n", cnode.Index) + fmt.Fprint(w, "
\n") + case NoHtmlTagClose: + fmt.Fprint(w, "
\n") + fmt.Fprint(w, "\n") + default: + panic("invalid noHtml tag - should not happend") + } + + return ast.WalkContinue, nil +} + +// noHtml struct is used to extend the markdown with noHtml functionality. +type noHtml struct{} + +var NoHtml = &noHtml{} + +// Extend function extends the markdown with noHtml functionality. +func (e *noHtml) Extend(m goldmark.Markdown) { + m.Parser().AddOptions(parser.WithBlockParsers( + util.Prioritized(NewNoHtmlBlockParser(), 500), + )) + m.Renderer().AddOptions(renderer.WithNodeRenderers( + util.Prioritized(NewRenderer(), 500), + )) +} diff --git a/gno.land/pkg/markdown/testdata/column_simple_basic.golden b/gno.land/pkg/markdown/testdata/column_simple_basic.golden new file mode 100644 index 00000000000..52cbecd1754 --- /dev/null +++ b/gno.land/pkg/markdown/testdata/column_simple_basic.golden @@ -0,0 +1,8 @@ +
+ +
+
+ +
+
+
diff --git a/gno.land/pkg/markdown/testdata/column_simple_left.golden b/gno.land/pkg/markdown/testdata/column_simple_left.golden new file mode 100644 index 00000000000..8759cee1366 --- /dev/null +++ b/gno.land/pkg/markdown/testdata/column_simple_left.golden @@ -0,0 +1,8 @@ +
+ +
+
+ +
+
+
diff --git a/gno.land/pkg/markdown/testdata/column_simple_middle.golden b/gno.land/pkg/markdown/testdata/column_simple_middle.golden new file mode 100644 index 00000000000..10831b22d45 --- /dev/null +++ b/gno.land/pkg/markdown/testdata/column_simple_middle.golden @@ -0,0 +1,8 @@ +
+ +
+
+ +
+
+
diff --git a/gno.land/pkg/markdown/testdata/column_simple_right.golden b/gno.land/pkg/markdown/testdata/column_simple_right.golden new file mode 100644 index 00000000000..845eb7e29cc --- /dev/null +++ b/gno.land/pkg/markdown/testdata/column_simple_right.golden @@ -0,0 +1,8 @@ +
+ +
+
+ +
+
+
diff --git a/gno.land/pkg/markdown/toc.go b/gno.land/pkg/markdown/toc.go new file mode 100644 index 00000000000..59d4941fabf --- /dev/null +++ b/gno.land/pkg/markdown/toc.go @@ -0,0 +1,137 @@ +// This file is a minimal version of https://github.com/abhinav/goldmark-toc + +package markdown + +import ( + "github.com/yuin/goldmark/ast" + "github.com/yuin/goldmark/util" +) + +const MaxDepth = 6 + +type Toc struct { + Items []*TocItem +} + +type TocItem struct { + // Title of this item in the table of contents. + // + // This may be blank for items that don't refer to a heading, and only + // have sub-items. + Title []byte + + // ID is the identifier for the heading that this item refers to. This + // is the fragment portion of the link without the "#". + // + // This may be blank if the item doesn't have an id assigned to it, or + // if it doesn't have a title. + // + // Enable AutoHeadingID in your parser if you expected these to be set + // but they weren't. + ID []byte + + // Items references children of this item. + // + // For a heading at level 3, Items, contains the headings at level 4 + // under that section. + Items []*TocItem +} + +func (i TocItem) Anchor() string { + return "#" + string(i.ID) +} + +type TocOptions struct { + MinDepth, MaxDepth int +} + +func TocInspect(n ast.Node, src []byte, opts TocOptions) (*Toc, error) { + // Appends an empty subitem to the given node + // and returns a reference to it. + appendChild := func(n *TocItem) *TocItem { + child := new(TocItem) + n.Items = append(n.Items, child) + return child + } + + // Returns the last subitem of the given node, + // creating it if necessary. + lastChild := func(n *TocItem) *TocItem { + if len(n.Items) > 0 { + return n.Items[len(n.Items)-1] + } + return appendChild(n) + } + + var root TocItem + + stack := []*TocItem{&root} // inv: len(stack) >= 1 + err := ast.Walk(n, func(n ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering { + return ast.WalkContinue, nil + } + + // Skip non-heading node + heading, ok := n.(*ast.Heading) + if !ok { + return ast.WalkContinue, nil + } + + if opts.MinDepth > 0 && heading.Level < opts.MinDepth { + return ast.WalkSkipChildren, nil + } + + if opts.MaxDepth > 0 && heading.Level > opts.MaxDepth { + return ast.WalkSkipChildren, nil + } + + // The heading is deeper than the current depth. + // Append empty items to match the heading's level. + for len(stack) < heading.Level { + parent := stack[len(stack)-1] + stack = append(stack, lastChild(parent)) + } + + // The heading is shallower than the current depth. + // Move back up the stack until we reach the heading's level. + if len(stack) > heading.Level { + stack = stack[:heading.Level] + } + + parent := stack[len(stack)-1] + target := lastChild(parent) + if len(target.Title) > 0 || len(target.Items) > 0 { + target = appendChild(parent) + } + + target.Title = util.UnescapePunctuations(heading.Text(src)) + if id, ok := n.AttributeString("id"); ok { + target.ID, _ = id.([]byte) + } + + return ast.WalkSkipChildren, nil + }) + + root.Items = compactItems(root.Items) + + return &Toc{Items: root.Items}, err +} + +// compactItems removes items with no titles +// from the given list of items. +// +// Children of removed items will be promoted to the parent item. +func compactItems(items []*TocItem) []*TocItem { + result := make([]*TocItem, 0) + for _, item := range items { + if len(item.Title) == 0 { + result = append(result, compactItems(item.Items)...) + continue + } + + item.Items = compactItems(item.Items) + result = append(result, item) + } + + return result +} diff --git a/gno.land/pkg/service/render.go b/gno.land/pkg/service/render.go new file mode 100644 index 00000000000..94dba8fb2a6 --- /dev/null +++ b/gno.land/pkg/service/render.go @@ -0,0 +1,141 @@ +package service + +import ( + "errors" + "fmt" + "io" + "log/slog" + "path/filepath" + "strings" + + "github.com/alecthomas/chroma/formatters/html" + "github.com/gnolang/gno/gno.land/pkg/gnoclient" + md "github.com/gnolang/gno/gno.land/pkg/markdown" + "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types + "github.com/gnolang/gno/tm2/pkg/amino" + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/text" +) + +type WebRenderClient struct { + htmlFromater *html.Formatter + log *slog.Logger + client *gnoclient.Client + md goldmark.Markdown +} + +func NewWebRender(log *slog.Logger, cl *gnoclient.Client, m goldmark.Markdown) *WebRenderClient { + formatter := html.New(html.WithClasses(true)) + m.Parser().AddOptions(parser.WithAutoHeadingID()) + return &WebRenderClient{ + htmlFromater: formatter, + log: log, + client: cl, + md: m, + } +} + +func (s *WebRenderClient) Functions(pkgPath string) ([]vm.FunctionSignature, error) { + const qpath = "vm/qfuncs" + + args := fmt.Sprintf("gno.land/%s", strings.Trim(pkgPath, "/")) + res, err := s.query(qpath, []byte(args)) + if err != nil { + return nil, fmt.Errorf("unable query funcs list: %w", err) + } + + var fsigs vm.FunctionSignatures + if err := amino.UnmarshalJSON(res, &fsigs); err != nil { + s.log.Warn("unable to unmarshal fsigs, client is probably outdated ?") + return nil, fmt.Errorf("unable to unamarshal fsigs: %w", err) + } + + return fsigs, nil +} + +func (s *WebRenderClient) SourceFile(path, fileName string) ([]byte, error) { + const qpath = "vm/qfile" + + fileName = strings.TrimSpace(fileName) // sanitize filename + if fileName == "" { + return nil, errors.New("empty filename given") // XXX -> ErrXXX + } + + // XXX: move this into gnoclient ? + path = fmt.Sprintf("gno.land/%s", strings.Trim(path, "/")) + path = filepath.Join(path, fileName) + res, err := s.query(qpath, []byte(path)) + if err != nil { + return nil, err + } + + return res, nil +} + +func (s *WebRenderClient) Sources(path string) ([]string, error) { + const qpath = "vm/qfile" + + // XXX: move this into gnoclient + path = fmt.Sprintf("gno.land/%s", strings.Trim(path, "/")) + res, err := s.query(qpath, []byte(path)) + if err != nil { + return nil, err + } + + files := strings.Split(string(res), "\n") + return files, nil +} + +type Metadata struct { + *md.Toc +} + +func (s *WebRenderClient) Render(w io.Writer, pkgPath string, args string) (*Metadata, error) { + const qpath = "vm/qrender" + + data := []byte(gnoPath(pkgPath, args)) + fmt.Println("data", string(data)) + rawres, err := s.query(qpath, data) + if err != nil { + return nil, err + } + + doc := s.md.Parser().Parse(text.NewReader(rawres)) + if err := s.md.Renderer().Render(w, rawres, doc); err != nil { + return nil, fmt.Errorf("unable render real %q: %q", data, err) + } + + var meta Metadata + meta.Toc, err = md.TocInspect(doc, rawres, md.TocOptions{MaxDepth: 6}) + if err != nil { + s.log.Warn("unable to inspect for toc elements", "err", err) + } + + return &meta, nil +} + +func (s *WebRenderClient) query(qpath string, data []byte) ([]byte, error) { + s.log.Info("query", "qpath", qpath, "data", string(data)) + // XXX: move this into gnoclient + qres, err := s.client.Query(gnoclient.QueryCfg{ + Path: qpath, + Data: data, + }) + + if err != nil { + s.log.Error("request error", "path", qpath, "data", string(data), "error", err) + return nil, fmt.Errorf("unable to query path %q: %w", qpath, err) + } + if qres.Response.Error != nil { + s.log.Error("response error", "path", qpath, "log", qres.Response.Log) + return nil, qres.Response.Error + } + + return qres.Response.Data, nil +} + +func gnoPath(pkgPath, args string) string { + pkgPath = strings.Trim(pkgPath, "/") + return fmt.Sprintf("gno.land/%s:%s", pkgPath, args) +} diff --git a/go.mod b/go.mod index 24d09a87236..4e1fdb781b3 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,8 @@ toolchain go1.22.4 require ( dario.cat/mergo v1.0.1 + github.com/alecthomas/chroma v0.10.0 + github.com/alecthomas/chroma/v2 v2.14.0 github.com/btcsuite/btcd/btcec/v2 v2.3.4 github.com/btcsuite/btcd/btcutil v1.1.6 github.com/cockroachdb/apd/v3 v3.2.1 @@ -27,6 +29,7 @@ require ( github.com/rs/xid v1.6.0 github.com/stretchr/testify v1.9.0 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + github.com/yuin/goldmark v1.7.2 go.etcd.io/bbolt v1.3.11 go.opentelemetry.io/otel v1.29.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.29.0 @@ -50,6 +53,7 @@ require ( require ( github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/dlclark/regexp2 v1.11.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/protobuf v1.5.4 // indirect diff --git a/go.sum b/go.sum index 78d60eeea90..3fa82f194c7 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,14 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= +github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= +github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= +github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= +github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= @@ -45,6 +53,9 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= +github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -93,6 +104,8 @@ github.com/gotuna/gotuna v0.6.0 h1:N1lQKXEi/lwRp8u3sccTYLhzOffA4QasExz/1M5Riws= github.com/gotuna/gotuna v0.6.0/go.mod h1:F/ecRt29ChB6Ycy1AFIBpBiMNK0j7Heq+gFbLWquhjc= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -144,6 +157,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/yuin/goldmark v1.7.2 h1:NjGd7lO7zrUn/A7eKwn5PEOt4ONYGqpxSEeZuduvgxc= +github.com/yuin/goldmark v1.7.2/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= From f4f3a8640e60569c8e824d782e25a0572d1ea81a Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 20:11:01 +0900 Subject: [PATCH 02/92] wip: create gnoweb app, sync gnodev with gnoweb Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- contribs/gnodev/cmd/gnodev/main.go | 7 +- contribs/gnodev/cmd/gnodev/setup_web.go | 76 +- contribs/gnodev/go.mod | 1 + contribs/gnodev/go.sum | 3 + gno.land/cmd/gnoweb2/main.go | 121 +- gno.land/pkg/gnoweb2/Makefile | 4 +- gno.land/pkg/gnoweb2/app.go | 53 +- gno.land/pkg/gnoweb2/components/index.go | 16 +- gno.land/pkg/gnoweb2/components/index.gohtml | 12 +- gno.land/pkg/gnoweb2/formater.go | 25 + gno.land/pkg/gnoweb2/handler.go | 68 +- gno.land/pkg/gnoweb2/public/styles.css | 1662 ++++++++++++++++- gno.land/pkg/gnoweb2/static.go | 12 +- .../pkg/gnoweb2/tools/cmd/logname/colors.go | 2 +- .../pkg/gnoweb2/tools/cmd/logname/main.go | 2 +- gno.land/pkg/service/render.go | 27 +- 16 files changed, 1860 insertions(+), 231 deletions(-) create mode 100644 gno.land/pkg/gnoweb2/formater.go diff --git a/contribs/gnodev/cmd/gnodev/main.go b/contribs/gnodev/cmd/gnodev/main.go index 2c694b608bb..b707de5c570 100644 --- a/contribs/gnodev/cmd/gnodev/main.go +++ b/contribs/gnodev/cmd/gnodev/main.go @@ -306,7 +306,10 @@ func execDev(cfg *devCfg, args []string, io commands.IO) (err error) { defer server.Close() // Setup gnoweb - webhandler := setupGnoWebServer(logger.WithGroup(WebLogName), cfg, devNode) + webhandler, err := setupGnoWebServer(logger.WithGroup(WebLogName), cfg, devNode) + if err != nil { + return fmt.Errorf("unable to setup gnoweb server: %w", err) + } // Setup unsafe APIs if enabled if cfg.unsafeAPI { @@ -360,7 +363,7 @@ func execDev(cfg *devCfg, args []string, io commands.IO) (err error) { return runEventLoop(ctx, logger, book, rt, devNode, watcher) } -var helper string = `For more in-depth documentation, visit the GNO Tooling CLI documentation: +var helper string = `For more in-depth documentation, visit the GNO Tooling CLI documentation: https://docs.gno.land/gno-tooling/cli/gno-tooling-gnodev P Previous TX - Go to the previous tx diff --git a/contribs/gnodev/cmd/gnodev/setup_web.go b/contribs/gnodev/cmd/gnodev/setup_web.go index 765314ca245..d4f1e201c4e 100644 --- a/contribs/gnodev/cmd/gnodev/setup_web.go +++ b/contribs/gnodev/cmd/gnodev/setup_web.go @@ -1,89 +1,29 @@ package main import ( - "context" "fmt" "log/slog" "net/http" gnodev "github.com/gnolang/gno/contribs/gnodev/pkg/dev" - "github.com/gnolang/gno/gno.land/pkg/gnoclient" gnoweb "github.com/gnolang/gno/gno.land/pkg/gnoweb2" - "github.com/gnolang/gno/gno.land/pkg/service" - "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" - "github.com/yuin/goldmark" ) -func makeWebApp(logger *slog.Logger, cfg *devCfg, dnode *gnodev.Node) error { - - // bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) - // if err != nil { - // return fmt.Errorf("unable to resolve listener: %q", cfg.bind) - // } - - // logger.Info("Running", "listener", bindaddr.String()) - - // server := &http.Server{ - // Handler: mux, - // Addr: bindaddr.String(), - // ReadHeaderTimeout: 60 * time.Second, - // } - - // if err := server.ListenAndServe(); err != nil { - // logger.Error("HTTP server stopped", " error:", err) - // os.Exit(1) - // } - -} - // setupGnowebServer initializes and starts the Gnoweb server. func setupGnoWebServer(logger *slog.Logger, cfg *devCfg, dnode *gnodev.Node) (http.Handler, error) { remote := dnode.GetRemoteAddress() - md := goldmark.New() - - client, err := client.NewHTTPClient(remote) - if err != nil { - return nil, fmt.Errorf("unable to create http client: %W", err) + appcfg := gnoweb.NewDefaultAppConfig() + appcfg.Remote = remote + appcfg.ChainID = cfg.chainId + if cfg.webRemoteHelperAddr != "" { + appcfg.RemoteHelp = cfg.webRemoteHelperAddr } - mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" - bip39Passphrase := "" - account, index := uint32(0), uint32(0) - chainID := cfg.chainId - signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) + router, err := gnoweb.MakeRouterApp(logger, appcfg) if err != nil { - return nil, fmt.Errorf("unable to create signer: %w", err) + return nil, fmt.Errorf("unable to create router app: %w", err) } - // Setup webservice - cl := gnoclient.Client{ - Signer: signer, - RPCClient: client, - } - webcli := service.NewWebRender(logger, &cl, md) - - var webConfig gnoweb.WebHandlerConfig - - webConfig.RenderClient = webcli - - // static meta - // webConfig.Meta.AssetsPath = // XXX - webConfig.Meta.RemoteHelp = cfg.webRemoteHelperAddr - webConfig.Meta.ChaindID = cfg.chainId - - // Setup main handler - webhandler := gnoweb.NewWebHandler( - context.TODO(), // XXX - logger, - webConfig, - ) - - mux := http.NewServeMux() - mux.Handle(webConfig.Meta.AssetsPath, gnoweb.AssetHandler()) - - // Setup Alias Middleware - mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) - - return mux, nil + return router, nil } diff --git a/contribs/gnodev/go.mod b/contribs/gnodev/go.mod index 216f610af33..7441fdb0474 100644 --- a/contribs/gnodev/go.mod +++ b/contribs/gnodev/go.mod @@ -27,6 +27,7 @@ require ( require ( dario.cat/mergo v1.0.1 // indirect + github.com/alecthomas/chroma v0.10.0 // indirect github.com/alecthomas/chroma/v2 v2.14.0 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/atotto/clipboard v0.1.4 // indirect diff --git a/contribs/gnodev/go.sum b/contribs/gnodev/go.sum index 98838234a4f..01dc00c31d7 100644 --- a/contribs/gnodev/go.sum +++ b/contribs/gnodev/go.sum @@ -3,6 +3,8 @@ dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= +github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= @@ -91,6 +93,7 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= diff --git a/gno.land/cmd/gnoweb2/main.go b/gno.land/cmd/gnoweb2/main.go index 5396475ce6e..40c5388ed35 100644 --- a/gno.land/cmd/gnoweb2/main.go +++ b/gno.land/cmd/gnoweb2/main.go @@ -7,16 +7,11 @@ import ( "net" "net/http" "os" - "strings" "time" - "github.com/gnolang/gno/gno.land/pkg/gnoclient" gnoweb "github.com/gnolang/gno/gno.land/pkg/gnoweb2" "github.com/gnolang/gno/gno.land/pkg/log" - "github.com/gnolang/gno/gno.land/pkg/service" - "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" "github.com/gnolang/gno/tm2/pkg/commands" - "github.com/yuin/goldmark" "go.uber.org/zap/zapcore" ) @@ -56,21 +51,21 @@ func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { &c.remote, "remote", defaultWebOptions.remote, - "user's local directory for keys", + "target remote", ) fs.StringVar( &c.chainid, - "chainid", + "chain-id", defaultWebOptions.chainid, - "user's local directory for keys", + "target chain id", ) fs.StringVar( &c.bind, "bind", defaultWebOptions.bind, - "user's local directory for keys", + "gnoweb listener", ) } @@ -82,66 +77,76 @@ func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { // Setup logger logger := log.ZapLoggerToSlog(zapLogger) - md := goldmark.New() + // md := goldmark.New() - staticMeta := gnoweb.StaticMetadata{ - AssetsPath: "/public/", - RemoteHelp: cfg.remote, - } + // staticMeta := gnoweb.StaticMetadata{ + // AssetsPath: "/public/", + // RemoteHelp: cfg.remote, + // } + + // mux := http.NewServeMux() - mux := http.NewServeMux() + // // Setup asset handler + // // if cfg.dev { + // // mux.Handle(staticMeta.AssetsPath, AssetDevHandler()) + // // } else { + // mux.Handle(staticMeta.AssetsPath, gnoweb.AssetHandler()) + // // } - // Setup asset handler - // if cfg.dev { - // mux.Handle(staticMeta.AssetsPath, AssetDevHandler()) - // } else { - mux.Handle(staticMeta.AssetsPath, gnoweb.AssetHandler()) + // client, err := client.NewHTTPClient(cfg.remote) + // if err != nil { + // return fmt.Errorf("unable to create http client: %W", err) // } - client, err := client.NewHTTPClient(cfg.remote) - if err != nil { - return fmt.Errorf("unable to create http client: %W", err) - } + // mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" + // bip39Passphrase := "" + // account, index := uint32(0), uint32(0) + // chainID := cfg.chainid + // signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) + // if err != nil { + // return fmt.Errorf("unable to create signer: %w", err) + // } - mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" - bip39Passphrase := "" - account, index := uint32(0), uint32(0) - chainID := cfg.chainid - signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) - if err != nil { - return fmt.Errorf("unable to create signer: %w", err) - } + // // Setup webservice + // cl := gnoclient.Client{ + // Signer: signer, + // RPCClient: client, + // } + // webcli := service.NewWebRender(logger, &cl, md) - // Setup webservice - cl := gnoclient.Client{ - Signer: signer, - RPCClient: client, - } - webcli := service.NewWebRender(logger, &cl, md) + // if len(args) > 0 { + // var qargs string + // if len(args) > 1 { + // qargs = strings.Join(args[1:], ",") + // } - if len(args) > 0 { - var qargs string - if len(args) > 1 { - qargs = strings.Join(args[1:], ",") - } + // _, err = webcli.Render(io.Out(), args[0], qargs) + // return + // } - _, err = webcli.Render(io.Out(), args[0], qargs) - return - } + // webcfg := gnoweb.WebHandlerConfig{ + // RenderClient: webcli, + // Meta: staticMeta, + // } - webcfg := gnoweb.WebHandlerConfig{ - RenderClient: webcli, - Meta: staticMeta, - } + // // Setup main handler + // webhandler := gnoweb.NewWebHandler( + // logger, + // webcfg, + // ) - // Setup main handler - webhandler := gnoweb.NewWebHandler( - logger, - webcfg, - ) + // // Setup Alias Middleware + // mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) + + appcfg := gnoweb.NewDefaultAppConfig() + appcfg.Remote = cfg.remote + appcfg.ChainID = cfg.chainid + appcfg.RemoteHelp = cfg.remote - // Setup Alias Middleware - mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) + app, err := gnoweb.MakeRouterApp(logger, appcfg) + if err != nil { + return fmt.Errorf("unable to start gnoweb app: %w", err) + } bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) if err != nil { @@ -151,7 +156,7 @@ func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { logger.Info("Running", "listener", bindaddr.String()) server := &http.Server{ - Handler: mux, + Handler: app, Addr: bindaddr.String(), ReadHeaderTimeout: 60 * time.Second, } diff --git a/gno.land/pkg/gnoweb2/Makefile b/gno.land/pkg/gnoweb2/Makefile index 129b54a4e54..3846407cfd8 100644 --- a/gno.land/pkg/gnoweb2/Makefile +++ b/gno.land/pkg/gnoweb2/Makefile @@ -70,8 +70,8 @@ dev: dev.gnoweb: | .cache @killall gnowebserve || true # make sure that previous instances as been kill $(run_air) \ - --build.cmd "go build -o .cache/gnowebserve ." \ - --build.bin ".cache/gnowebserve -dev -chain-id=${CHAIN_ID} -remote=${DEV_REMOTE}" \ + --build.cmd "go build -o .cache/gnowebserve ../../cmd/gnoweb2" \ + --build.bin ".cache/gnowebserve -chain-id=${CHAIN_ID} -remote=${DEV_REMOTE}" \ --build.exclude_unchanged "true" \ --build.exclude_dir "gotools,node_modules" \ --build.exclude_regex '^\.#' \ diff --git a/gno.land/pkg/gnoweb2/app.go b/gno.land/pkg/gnoweb2/app.go index 6dcbd7b952e..230e9dd2010 100644 --- a/gno.land/pkg/gnoweb2/app.go +++ b/gno.land/pkg/gnoweb2/app.go @@ -4,13 +4,25 @@ import ( "fmt" "log/slog" "net/http" + "path" + "strings" + "github.com/alecthomas/chroma/v2/formatters/html" + "github.com/alecthomas/chroma/v2/styles" "github.com/gnolang/gno/gno.land/pkg/gnoclient" "github.com/gnolang/gno/gno.land/pkg/service" "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" "github.com/yuin/goldmark" ) +var chromaStyle = styles.Get("friendly") + +func init() { + if chromaStyle == nil { + panic("unable to get chroma style") + } +} + type AppConfig struct { Remote string RemoteHelp string @@ -24,20 +36,11 @@ func NewDefaultAppConfig() *AppConfig { return &AppConfig{ Remote: defaultRemote, RemoteHelp: defaultRemote, // same as `Remote` by default ChainID: "dev", - AssetsPath: "public", + AssetsPath: "/public/", } } -type App struct { - mux *http.ServeMux - handler WebHandler -} - -func (a *App) Router(w http.ResponseWriter, r *http.Request) { - a.mux.ServeHTTP(w, r) -} - -func MakeApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { +func MakeRouterApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { md := goldmark.New() client, err := client.NewHTTPClient(cfg.Remote) @@ -57,12 +60,21 @@ func MakeApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { } webcli := service.NewWebRender(logger, &cl, md) + formatter := html.New( + html.WithLineNumbers(true), + html.WithClasses(true), + html.ClassPrefix("chroma-"), + ) + chromaStylePath := path.Join(cfg.AssetsPath, "_chroma", "style.css") + var webConfig WebHandlerConfig webConfig.RenderClient = webcli + webConfig.Formatter = newFormaterWithStyle(formatter, chromaStyle) // static meta webConfig.Meta.AssetsPath = cfg.AssetsPath + webConfig.Meta.ChromaPath = chromaStylePath webConfig.Meta.RemoteHelp = cfg.RemoteHelp webConfig.Meta.ChaindID = cfg.ChainID @@ -71,11 +83,24 @@ func MakeApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { mux := http.NewServeMux() - // Setup Alias Middleware + // Setup Webahndler along Alias Middleware mux.Handle("/", AliasAndRedirectMiddleware(webhandler)) - // Setup asset path - mux.Handle(cfg.AssetsPath, AssetHandler()) + // setup assets + mux.Handle(chromaStylePath, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Setup Formatter + w.Header().Set("Content-Type", "text/css") + if err := formatter.WriteCSS(w, chromaStyle); err != nil { + logger.Error("unable to write css", "err", err) + http.NotFound(w, r) + } + })) + + // Normalize assets path + assetsBase := "/" + strings.Trim(cfg.AssetsPath, "/") + "/" + + // Handle assets path + mux.Handle(assetsBase, AssetHandler(cfg.AssetsPath, true)) return mux, nil } diff --git a/gno.land/pkg/gnoweb2/components/index.go b/gno.land/pkg/gnoweb2/components/index.go index 782f99e9160..0d9a2ddcc84 100644 --- a/gno.land/pkg/gnoweb2/components/index.go +++ b/gno.land/pkg/gnoweb2/components/index.go @@ -8,15 +8,13 @@ import ( ) type HeadData struct { - Title string - Description string - Canonical string - Image string - URL string - AdditionalLinks []struct { - Rel string - Href string - } + Title string + Description string + Canonical string + Image string + URL string + ChromaPath string + AssetsPath string } type HeaderData struct { diff --git a/gno.land/pkg/gnoweb2/components/index.gohtml b/gno.land/pkg/gnoweb2/components/index.gohtml index c54e6f4d7e3..607dbdea8cd 100644 --- a/gno.land/pkg/gnoweb2/components/index.gohtml +++ b/gno.land/pkg/gnoweb2/components/index.gohtml @@ -49,11 +49,13 @@ - - - - - + + + + + + + {{ end }} diff --git a/gno.land/pkg/gnoweb2/formater.go b/gno.land/pkg/gnoweb2/formater.go new file mode 100644 index 00000000000..dcc609f7194 --- /dev/null +++ b/gno.land/pkg/gnoweb2/formater.go @@ -0,0 +1,25 @@ +package gnoweb + +import ( + "io" + + "github.com/alecthomas/chroma/v2" + "github.com/alecthomas/chroma/v2/formatters/html" +) + +type Formatter interface { + Format(w io.Writer, iterator chroma.Iterator) error +} + +type formaterWithStyle struct { + *html.Formatter + style *chroma.Style +} + +func newFormaterWithStyle(formater *html.Formatter, style *chroma.Style) Formatter { + return &formaterWithStyle{Formatter: formater, style: style} +} + +func (f *formaterWithStyle) Format(w io.Writer, iterator chroma.Iterator) error { + return f.Formatter.Format(w, f.style, iterator) +} diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb2/handler.go index 7bce153d23d..1f6cdcee472 100644 --- a/gno.land/pkg/gnoweb2/handler.go +++ b/gno.land/pkg/gnoweb2/handler.go @@ -15,38 +15,26 @@ import ( "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" - "github.com/alecthomas/chroma/v2/styles" "github.com/gnolang/gno/gno.land/pkg/gnoweb2/components" "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types "github.com/gnolang/gno/gno.land/pkg/service" ) -const chromaPath = "/_chroma/style.css" - -var chromaStyle = styles.Get("friendly") - -func init() { - if chromaStyle == nil { - panic("unable to get chroma style") - } -} - type StaticMetadata struct { AssetsPath string + ChromaPath string RemoteHelp string ChaindID string } -type Formater interface { -} - type WebHandlerConfig struct { Meta StaticMetadata RenderClient *service.WebRenderClient + Formatter Formatter } type WebHandler struct { - formatter *html.Formatter + formatter Formatter logger *slog.Logger static StaticMetadata @@ -62,15 +50,8 @@ func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { logger.Error("no renderer has been defined") } - // Setup Formatter - formatter := html.New( - html.WithClasses(true), - html.ClassPrefix("chroma-"), - html.WithLineNumbers(true), - ) - return &WebHandler{ - formatter: formatter, + formatter: cfg.Formatter, rendercli: cfg.RenderClient, logger: logger.WithGroup("web"), static: cfg.Meta, @@ -84,23 +65,12 @@ func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { } func (h *WebHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - h.logger.Info("receiving request", "method", r.Method, "path", r.URL.Path) - if r.Method == http.MethodGet { - if r.URL.Path == chromaPath { - w.Header().Set("Content-Type", "text/css") - // XXX: Move this elsewhere, it should fail with the prefix - if err := h.formatter.WriteCSS(w, chromaStyle); err != nil { - h.logger.Error("unable to write css", "err", err) - http.NotFound(w, r) - } - return - } - - h.Get(w, r) - return + h.logger.Debug("receiving request", "method", r.Method, "path", r.URL.Path) + if r.Method != http.MethodGet { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) } - http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + h.Get(w, r) } type PathKind string @@ -125,13 +95,6 @@ func generateBreadcrumbPaths(path string) []components.BreadcrumbPart { } func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { - var headData components.HeadData // Placeholder for later metadata - - body := h.getBuffer() - defer h.putBuffer(body) - - var status int - gnourl, err := ParseGnoURL(r.URL) if err != nil { h.logger.Error("unable to render body", "url", r.URL.String(), "err", err) @@ -139,7 +102,11 @@ func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { return } + body := h.getBuffer() + defer h.putBuffer(body) + // Render the page body into the buffer + var status int switch gnourl.Kind { case KindRealm: status, err = h.renderRealm(body, gnourl) @@ -160,7 +127,11 @@ func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { var indexData components.IndexData - indexData.HeadData = headData + // Head + indexData.HeadData.AssetsPath = h.static.AssetsPath + indexData.HeadData.ChromaPath = h.static.ChromaPath + + // Header indexData.HeaderData.RealmPath = gnourl.Path indexData.HeaderData.Breadcrumb.Parts = generateBreadcrumbPaths(gnourl.Path) indexData.HeaderData.WebQuery = gnourl.WebQuery @@ -183,7 +154,8 @@ func (h *WebHandler) renderRealmHelp(w io.Writer, gnourl *GnoURL) (status int, e return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") } - realmName := "" + // Catch last name of the path + realmName := "unknown>" if i := strings.LastIndexByte(gnourl.Path, '/'); i > 0 { realmName = gnourl.Path[i+1:] } @@ -354,7 +326,7 @@ func (h *WebHandler) highlightSource(style *chroma.Style, fileName string, src [ return buff.Bytes(), nil } - if err := h.formatter.Format(&buff, style, iterator); err != nil { + if err := h.formatter.Format(&buff, iterator); err != nil { return nil, fmt.Errorf("unable to format source file %q: %w", fileName, err) } diff --git a/gno.land/pkg/gnoweb2/public/styles.css b/gno.land/pkg/gnoweb2/public/styles.css index c9b60254d88..93ab2b7eab9 100644 --- a/gno.land/pkg/gnoweb2/public/styles.css +++ b/gno.land/pkg/gnoweb2/public/styles.css @@ -1,3 +1,1661 @@ -@font-face{font-family:Roboto;font-style:normal;font-weight:900;font-display:swap;src:url(assets/fonts/roboto/roboto-mono-normal.woff2) format("woff2"),url(../fonts/roboto/roboto-mono-normal.woff) format("woff")}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:oblique 0deg 10deg;src:url(assets/fonts/intervar/Inter.var.woff2) format("woff2")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: } +@font-face { + font-family: "Roboto"; -/*! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #bdbdbd}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#7c7c7c}input::placeholder,textarea::placeholder{opacity:1;color:#7c7c7c}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity));font-feature-settings:"kern" on,"liga" on,"calt" on,"zero" on;-webkit-font-feature-settings:"kern" on,"liga" on,"calt" on,"zero" on;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;font-variant-ligatures:contextual common-ligatures;font-kerning:normal;text-rendering:optimizeLegibility;overflow-x:hidden}@supports (font-variation-settings:normal){html{font-family:Inter var,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}}a:hover{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity));text-decoration-line:underline}svg{max-height:100%;max-width:100%}form{margin-top:0;margin-bottom:0}.realm-content{font-size:1rem}.realm-content a{font-weight:500;--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}.realm-content a:hover{text-decoration-line:underline}.realm-content h1,.realm-content h2,.realm-content h3,.realm-content h4{margin-top:2rem;line-height:1.25;--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.realm-content h2,.realm-content h2 *{font-weight:700}.realm-content h3,.realm-content h3 *,.realm-content h4,.realm-content h4 *{font-weight:600}.realm-content h1+h2,.realm-content h2+h3,.realm-content h3+h4{margin-top:.375rem}.realm-content h1{font-size:2.375rem;font-weight:700}.realm-content h2{font-size:1.5rem}.realm-content h3{margin-top:1.5rem;font-size:1.25rem}.realm-content h3,.realm-content h4{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content h4{font-size:1.125rem;font-weight:500}.realm-content h4,.realm-content p{margin-top:1rem;margin-bottom:1rem}.realm-content strong{font-weight:700;--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.realm-content strong *{font-weight:700}.realm-content blockquote{border-left-width:4px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));font-style:italic;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content blockquote,.realm-content ol,.realm-content ul{margin-top:1rem;margin-bottom:1rem;padding-left:1rem}.realm-content ol li,.realm-content ul li{margin-bottom:.25rem}.realm-content img{margin-top:1.5rem;margin-bottom:1.5rem;max-width:100%}.realm-content figure{margin-top:1.5rem;margin-bottom:1.5rem;text-align:center}.realm-content figcaption{font-size:.875rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content code{padding:.25rem .5rem;font-size:.875rem}.realm-content code,.realm-content pre{border-radius:.3125rem;--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.realm-content pre{overflow-x:auto;padding:1rem}.realm-content hr{margin-top:2rem;margin-bottom:2rem;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(226 226 226/var(--tw-border-opacity))}.realm-content table{margin-top:1.5rem;margin-bottom:1.5rem;width:100%;border-collapse:collapse}.realm-content td,.realm-content th{border-width:1px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));padding:.5rem 1rem}.realm-content th{--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));font-weight:700}.realm-content caption{margin-top:.5rem;text-align:left;font-size:.875rem;--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.realm-content q{font-style:italic;color:#555;border-left:4px solid #ccc;padding-left:1rem;margin:1.5rem 0;quotes:"โ€œ" "โ€" "โ€˜" "โ€™"}.realm-content q:before{content:open-quote;margin-right:.25rem}.realm-content q:after,.realm-content q:before{font-size:2rem;color:#999;vertical-align:-.4rem}.realm-content q:after{content:close-quote;margin-left:.25rem}.realm-content q:before{content:open-quote}.realm-content q:after{content:close-quote}.realm-content ol ol,.realm-content ol ul,.realm-content ul ol,.realm-content ul ul{margin-top:.5rem;margin-bottom:.5rem;padding-left:1rem}.realm-content ul{list-style-type:disc}.realm-content table th:first-child,.realm-content td:first-child{padding-left:0}.realm-content table th:last-child,.realm-content td:last-child{padding-right:0}.realm-content abbr[title]{cursor:help;border-bottom-width:1px;border-style:dotted}.realm-content details{margin-top:1rem;margin-bottom:1rem}.realm-content summary{cursor:pointer;font-weight:700}.realm-content a code{color:inherit}.realm-content video{margin-top:1.5rem;margin-bottom:1.5rem;max-width:100%}.realm-content math{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.realm-content small{font-size:.875rem}.realm-content del{text-decoration-line:line-through}.realm-content sub{vertical-align:sub;font-size:.75rem}.realm-content sup{vertical-align:super;font-size:.75rem}.realm-content button,.realm-content input{border-width:1px;--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity));padding:.5rem 1rem}main :is(h1,h2,h3,h4){scroll-margin-top:5.5rem}main .source-code>pre{overflow:scroll;border-radius:.3125rem;--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important;padding:2rem .75rem;font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.sidemenu .peer:checked+label>svg{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}#sidebar{order:2;grid-column:span 3/span 3}#sidebar+.code-content,#sidebar+.realm-content{grid-column:span 7/span 7}.code-content,.realm-content{grid-column:span 4/span 4}.main-header:has(#sidemenu-docs:checked)+main #sidebar #sidebar-docs,.main-header:has(#sidemenu-meta:checked)+main #sidebar #sidebar-meta,.main-header:has(#sidemenu-source:checked)+main #sidebar #sidebar-source,.main-header:has(#sidemenu-summary:checked)+main #sidebar #sidebar-summary{display:block}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked)) .main-navigation,:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main .realm-content{grid-column:span 6/span 6}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked)) .sidemenu,:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main #sidebar{grid-column:span 4/span 4}:is(.main-header:has(#sidemenu-source:checked),.main-header:has(#sidemenu-docs:checked),.main-header:has(#sidemenu-meta:checked))+main #sidebar:before{position:absolute;top:0;left:-1.75rem;z-index:-1;display:block;height:100%;width:50vw;--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity));--tw-content:"";content:var(--tw-content)}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-1{bottom:.25rem}.left-0{left:0}.right-2{right:.5rem}.top-0{top:0}.top-16{top:4rem}.top-2{top:.5rem}.z-max{z-index:9999}.col-span-1{grid-column:span 1/span 1}.col-span-3{grid-column:span 3/span 3}.col-span-7{grid-column:span 7/span 7}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mr-10{margin-right:2.5rem}.mr-4{margin-right:1rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-4{margin-top:1rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-10{height:2.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-full{height:100%}.h-screen{height:100vh}.min-h-full{min-height:100%}.w-10{width:2.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-full{width:100%}.min-w-48{min-width:12rem}.max-w-screen-max{max-width:98.75rem}.shrink-0{flex-shrink:0}.grow-\[2\]{flex-grow:2}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-flow-dense{grid-auto-flow:dense}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.overflow-scroll{overflow:scroll}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.3125rem}.rounded-sm{border-radius:.25rem}.rounded-l-sm{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-sm{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r-8{border-right-width:8px}.border-t{border-top-width:1px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(226 226 226/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(143 143 143/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(124 124 124/var(--tw-border-opacity))}.border-r-transparent{border-right-color:transparent}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(226 226 226/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(240 240 240/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white-50{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-24{padding-bottom:6rem}.pb-28{padding-bottom:7rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pt-2{padding-top:.5rem}.font-mono{font-family:Roboto,Menlo,Consolas,Ubuntu Mono,Roboto Mono,DejaVu Sans Mono,monospace;}.text-100{font-size:.875rem}.text-200{font-size:1rem}.text-300{font-size:1.125rem}.text-50{font-size:.75rem}.text-600{font-size:1.5rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-tight{line-height:1.25}.text-gray-200{--tw-text-opacity:1;color:rgb(189 189 189/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(143 143 143/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(19 19 19/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(8 8 9/var(--tw-text-opacity))}.outline-none{outline:2px solid transparent;outline-offset:2px}.text-stroke{-webkit-text-stroke:currentColor;-webkit-text-stroke-width:.6px}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.quotes{font-style:italic;color:#555;border-left:4px solid #ccc;padding-left:1rem;margin:1.5rem 0;quotes:"โ€œ" "โ€" "โ€˜" "โ€™"}.quotes:before{content:open-quote;margin-right:.25rem}.quotes:after,.quotes:before{font-size:2rem;color:#999;vertical-align:-.4rem}.quotes:after{content:close-quote;margin-left:.25rem}.before\:px-1:before{content:var(--tw-content);padding-left:.25rem;padding-right:.25rem}.before\:text-gray-300:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(143 143 143/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:bottom-0:after{content:var(--tw-content);bottom:0}.after\:block:after{content:var(--tw-content);display:block}.after\:h-1:after{content:var(--tw-content);height:.25rem}.after\:w-full:after{content:var(--tw-content);width:100%}.after\:rounded-t:after{content:var(--tw-content);border-top-left-radius:.3125rem;border-top-right-radius:.3125rem}.after\:bg-green-600:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(34 108 87/var(--tw-bg-opacity))}.focus-within\:outline-2:focus-within{outline-width:2px}.focus-within\:outline-gray-300:focus-within{outline-color:#8f8f8f}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(84 89 93/var(--tw-text-opacity))}.hover\:text-green-600:hover{--tw-text-opacity:1;color:rgb(34 108 87/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-gray-600:focus{--tw-border-opacity:1;border-color:rgb(84 89 93/var(--tw-border-opacity))}.peer:focus-within~.peer-focus-within\:hidden{display:none}@media (min-width:63.75rem){.xl\:inline{display:inline}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:gap-20{gap:5rem}.xl\:gap-6{gap:1.5rem}.xl\:pt-0{padding-top:0}}@media (min-width:85.375rem){.xxl\:inline-block{display:inline-block}.xxl\:h-4{height:1rem}.xxl\:w-4{width:1rem}.xxl\:gap-20{gap:5rem}} \ No newline at end of file + font-style: normal; + + font-weight: 900; + + font-display: swap; + + src: url("./assets/fonts/roboto/roboto-mono-normal.woff2") format("woff2"), url("../fonts/roboto/roboto-mono-normal.woff") format("woff"); +} + +@font-face { + font-family: "Inter var"; + + font-weight: 100 900; + + font-display: swap; + + font-style: oblique 0deg 10deg; + + src: url("./assets/fonts/intervar/Inter.var.woff2") format("woff2"); +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +/* +! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #BDBDBD; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #7C7C7C; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #7C7C7C; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} + +html { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); + font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; + -webkit-font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + text-size-adjust: 100%; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + font-variant-ligatures: contextual common-ligatures; + font-kerning: normal; + text-rendering: optimizeLegibility; + overflow-x: hidden; +} + +@supports (font-variation-settings: normal) { + html { + font-family: "Inter var", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + } +} + +a:hover { + --tw-text-opacity: 1; + color: rgb(34 108 87 / var(--tw-text-opacity)); + text-decoration-line: underline; +} + +svg { + max-height: 100%; + max-width: 100%; +} + +form { + margin-top: 0px; + margin-bottom: 0px; +} + +.realm-content { + font-size: 1rem; +} + +.realm-content a { + font-weight: 500; + --tw-text-opacity: 1; + color: rgb(34 108 87 / var(--tw-text-opacity)); +} + +.realm-content a:hover { + text-decoration-line: underline; +} + +.realm-content h1, + .realm-content h2, + .realm-content h3, + .realm-content h4 { + margin-top: 2rem; + line-height: 1.25; + --tw-text-opacity: 1; + color: rgb(8 8 9 / var(--tw-text-opacity)); +} + +.realm-content h2, + .realm-content h2 * { + font-weight: 700; +} + +.realm-content h3, + .realm-content h3 *, + .realm-content h4, + .realm-content h4 * { + font-weight: 600; +} + +.realm-content h1 + h2, + .realm-content h2 + h3, + .realm-content h3 + h4 { + margin-top: 0.375rem; +} + +.realm-content h1 { + font-size: 2.375rem; + font-weight: 700; +} + +.realm-content h2 { + font-size: 1.5rem; +} + +.realm-content h3 { + margin-top: 1.5rem; + font-size: 1.25rem; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.realm-content h4 { + margin-top: 1rem; + margin-bottom: 1rem; + font-size: 1.125rem; + font-weight: 500; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.realm-content p { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.realm-content strong { + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(8 8 9 / var(--tw-text-opacity)); +} + +.realm-content strong * { + font-weight: 700; +} + +.realm-content blockquote { + margin-top: 1rem; + margin-bottom: 1rem; + border-left-width: 4px; + --tw-border-opacity: 1; + border-color: rgb(143 143 143 / var(--tw-border-opacity)); + padding-left: 1rem; + font-style: italic; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.realm-content ul, + .realm-content ol { + margin-top: 1rem; + margin-bottom: 1rem; + padding-left: 1rem; +} + +.realm-content ul li, + .realm-content ol li { + margin-bottom: 0.25rem; +} + +.realm-content img { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + max-width: 100%; +} + +.realm-content figure { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + text-align: center; +} + +.realm-content figcaption { + font-size: 0.875rem; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.realm-content code { + border-radius: 0.3125rem; + --tw-bg-opacity: 1; + background-color: rgb(226 226 226 / var(--tw-bg-opacity)); + padding-left: 0.5rem; + padding-right: 0.5rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; + font-size: 0.875rem; +} + +.realm-content pre { + overflow-x: auto; + border-radius: 0.3125rem; + --tw-bg-opacity: 1; + background-color: rgb(226 226 226 / var(--tw-bg-opacity)); + padding: 1rem; + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; +} + +.realm-content hr { + margin-top: 2rem; + margin-bottom: 2rem; + border-top-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(226 226 226 / var(--tw-border-opacity)); +} + +.realm-content table { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + width: 100%; + border-collapse: collapse; +} + +.realm-content th, + .realm-content td { + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(143 143 143 / var(--tw-border-opacity)); + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.realm-content th { + --tw-bg-opacity: 1; + background-color: rgb(226 226 226 / var(--tw-bg-opacity)); + font-weight: 700; +} + +.realm-content caption { + margin-top: 0.5rem; + text-align: left; + font-size: 0.875rem; + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.realm-content q { + font-style: italic; + color: #555; + border-left: 4px solid #ccc; + padding-left: 1rem; + margin: 1.5rem 0; + quotes: "โ€œ" "โ€" "โ€˜" "โ€™"; +} + +.realm-content q::before { + content: open-quote; + font-size: 2rem; + color: #999; + margin-right: 0.25rem; + vertical-align: -0.4rem; +} + +.realm-content q::after { + content: close-quote; + font-size: 2rem; + color: #999; + margin-left: 0.25rem; + vertical-align: -0.4rem; +} + +.realm-content q::before { + content: open-quote; +} + +.realm-content q::after { + content: close-quote; +} + +.realm-content ul ul, + .realm-content ul ol, + .realm-content ol ul, + .realm-content ol ol { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + padding-left: 1rem; +} + +.realm-content ul { + list-style-type: disc; +} + +.realm-content table th:first-child, + .realm-content td:first-child { + padding-left: 0px; +} + +.realm-content table th:last-child, + .realm-content td:last-child { + padding-right: 0px; +} + +.realm-content abbr[title] { + cursor: help; + border-bottom-width: 1px; + border-style: dotted; +} + +.realm-content details { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.realm-content summary { + cursor: pointer; + font-weight: 700; +} + +.realm-content a code { + color: inherit; +} + +.realm-content video { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + max-width: 100%; +} + +.realm-content math { + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; +} + +.realm-content small { + font-size: 0.875rem; +} + +.realm-content del { + text-decoration-line: line-through; +} + +.realm-content sub { + vertical-align: sub; + font-size: 0.75rem; +} + +.realm-content sup { + vertical-align: super; + font-size: 0.75rem; +} + +.realm-content input, + .realm-content button { + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(143 143 143 / var(--tw-border-opacity)); + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +main :is(h1, h2, h3, h4) { + scroll-margin-top: 5.5rem; +} + +/* chroma */ + +main .source-code > pre { + overflow: scroll; + border-radius: 0.3125rem; + --tw-bg-opacity: 1 !important; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)) !important; + padding-top: 2rem; + padding-bottom: 2rem; + padding-left: 0.75rem; + padding-right: 0.75rem; + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; +} + +/* header */ + +.sidemenu .peer:checked + label > svg { + --tw-text-opacity: 1; + color: rgb(34 108 87 / var(--tw-text-opacity)); +} + +/* table of content */ + +#sidebar { + order: 2; + grid-column: span 3 / span 3; +} + +#sidebar + .realm-content, + #sidebar + .code-content { + grid-column: span 7 / span 7; +} + +.realm-content, + .code-content { + grid-column: span 4 / span 4; +} + +/* sidebar */ + +.main-header:has(#sidemenu-summary:checked) + main #sidebar #sidebar-summary, + .main-header:has(#sidemenu-source:checked) + main #sidebar #sidebar-source, + .main-header:has(#sidemenu-docs:checked) + main #sidebar #sidebar-docs, + .main-header:has(#sidemenu-meta:checked) + main #sidebar #sidebar-meta { + display: block; +} + +:is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main .realm-content, + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) .main-navigation { + grid-column: span 6 / span 6; +} + +:is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main #sidebar, + :is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) .sidemenu { + grid-column: span 4 / span 4; +} + +:is(.main-header:has(#sidemenu-source:checked), .main-header:has(#sidemenu-docs:checked), .main-header:has(#sidemenu-meta:checked)) + main #sidebar::before { + position: absolute; + top: 0px; + left: -1.75rem; + z-index: -1; + display: block; + height: 100%; + width: 50vw; + --tw-bg-opacity: 1; + background-color: rgb(226 226 226 / var(--tw-bg-opacity)); + --tw-content: ''; + content: var(--tw-content); +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +.bottom-1 { + bottom: 0.25rem; +} + +.left-0 { + left: 0px; +} + +.right-2 { + right: 0.5rem; +} + +.top-0 { + top: 0px; +} + +.top-16 { + top: 4rem; +} + +.top-2 { + top: 0.5rem; +} + +.z-max { + z-index: 9999; +} + +.col-span-1 { + grid-column: span 1 / span 1; +} + +.col-span-3 { + grid-column: span 3 / span 3; +} + +.col-span-7 { + grid-column: span 7 / span 7; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mr-10 { + margin-right: 2.5rem; +} + +.mr-4 { + margin-right: 1rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.mt-16 { + margin-top: 4rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.line-clamp-2 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.grid { + display: grid; +} + +.hidden { + display: none; +} + +.aspect-square { + aspect-ratio: 1 / 1; +} + +.h-10 { + height: 2.5rem; +} + +.h-4 { + height: 1rem; +} + +.h-5 { + height: 1.25rem; +} + +.h-6 { + height: 1.5rem; +} + +.h-full { + height: 100%; +} + +.h-screen { + height: 100vh; +} + +.min-h-full { + min-height: 100%; +} + +.w-10 { + width: 2.5rem; +} + +.w-4 { + width: 1rem; +} + +.w-5 { + width: 1.25rem; +} + +.w-6 { + width: 1.5rem; +} + +.w-full { + width: 100%; +} + +.min-w-48 { + min-width: 12rem; +} + +.max-w-screen-max { + max-width: 98.75rem; +} + +.shrink-0 { + flex-shrink: 0; +} + +.grow-\[2\] { + flex-grow: 2; +} + +.cursor-pointer { + cursor: pointer; +} + +.list-disc { + list-style-type: disc; +} + +.list-none { + list-style-type: none; +} + +.grid-flow-dense { + grid-auto-flow: dense; +} + +.grid-cols-10 { + grid-template-columns: repeat(10, minmax(0, 1fr)); +} + +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-start { + align-items: flex-start; +} + +.items-center { + align-items: center; +} + +.items-stretch { + align-items: stretch; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-between { + justify-content: space-between; +} + +.gap-1 { + gap: 0.25rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-3 { + gap: 0.75rem; +} + +.gap-4 { + gap: 1rem; +} + +.gap-8 { + gap: 2rem; +} + +.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); +} + +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.overflow-scroll { + overflow: scroll; +} + +.whitespace-pre-wrap { + white-space: pre-wrap; +} + +.rounded { + border-radius: 0.3125rem; +} + +.rounded-sm { + border-radius: 0.25rem; +} + +.rounded-l-sm { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-r-sm { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.border { + border-width: 1px; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-r-8 { + border-right-width: 8px; +} + +.border-t { + border-top-width: 1px; +} + +.border-gray-100 { + --tw-border-opacity: 1; + border-color: rgb(226 226 226 / var(--tw-border-opacity)); +} + +.border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(143 143 143 / var(--tw-border-opacity)); +} + +.border-gray-400 { + --tw-border-opacity: 1; + border-color: rgb(124 124 124 / var(--tw-border-opacity)); +} + +.border-r-transparent { + border-right-color: transparent; +} + +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(226 226 226 / var(--tw-bg-opacity)); +} + +.bg-gray-50 { + --tw-bg-opacity: 1; + background-color: rgb(240 240 240 / var(--tw-bg-opacity)); +} + +.bg-transparent { + background-color: transparent; +} + +.bg-white-50 { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.p-1\.5 { + padding: 0.375rem; +} + +.p-2 { + padding: 0.5rem; +} + +.p-2\.5 { + padding: 0.625rem; +} + +.p-4 { + padding: 1rem; +} + +.px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} + +.px-10 { + padding-left: 2.5rem; + padding-right: 2.5rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-0\.5 { + padding-top: 0.125rem; + padding-bottom: 0.125rem; +} + +.py-1\.5 { + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.pb-24 { + padding-bottom: 6rem; +} + +.pb-28 { + padding-bottom: 7rem; +} + +.pl-4 { + padding-left: 1rem; +} + +.pr-10 { + padding-right: 2.5rem; +} + +.pt-2 { + padding-top: 0.5rem; +} + +.font-mono { + font-family: Roboto, Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;; +} + +.text-100 { + font-size: 0.875rem; +} + +.text-200 { + font-size: 1rem; +} + +.text-300 { + font-size: 1.125rem; +} + +.text-50 { + font-size: 0.75rem; +} + +.text-600 { + font-size: 1.5rem; +} + +.font-bold { + font-weight: 700; +} + +.font-semibold { + font-weight: 600; +} + +.leading-tight { + line-height: 1.25; +} + +.text-gray-200 { + --tw-text-opacity: 1; + color: rgb(189 189 189 / var(--tw-text-opacity)); +} + +.text-gray-300 { + --tw-text-opacity: 1; + color: rgb(143 143 143 / var(--tw-text-opacity)); +} + +.text-gray-400 { + --tw-text-opacity: 1; + color: rgb(124 124 124 / var(--tw-text-opacity)); +} + +.text-gray-600 { + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.text-gray-800 { + --tw-text-opacity: 1; + color: rgb(19 19 19 / var(--tw-text-opacity)); +} + +.text-gray-900 { + --tw-text-opacity: 1; + color: rgb(8 8 9 / var(--tw-text-opacity)); +} + +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.text-stroke { + -webkit-text-stroke: currentColor; + -webkit-text-stroke-width: 0.6px; +} + +.no-scrollbar::-webkit-scrollbar { + display: none; +} + +.no-scrollbar { + -ms-overflow-style: none; + scrollbar-width: none; +} + +.quotes { + font-style: italic; + color: #555; + border-left: 4px solid #ccc; + padding-left: 1rem; + margin: 1.5rem 0; + quotes: "โ€œ" "โ€" "โ€˜" "โ€™"; +} + +.quotes::before { + content: open-quote; + font-size: 2rem; + color: #999; + margin-right: 0.25rem; + vertical-align: -0.4rem; +} + +.quotes::after { + content: close-quote; + font-size: 2rem; + color: #999; + margin-left: 0.25rem; + vertical-align: -0.4rem; +} + +.before\:px-1::before { + content: var(--tw-content); + padding-left: 0.25rem; + padding-right: 0.25rem; +} + +.before\:text-gray-300::before { + content: var(--tw-content); + --tw-text-opacity: 1; + color: rgb(143 143 143 / var(--tw-text-opacity)); +} + +.before\:content-\[\'\/\'\]::before { + --tw-content: '/'; + content: var(--tw-content); +} + +.after\:absolute::after { + content: var(--tw-content); + position: absolute; +} + +.after\:bottom-0::after { + content: var(--tw-content); + bottom: 0px; +} + +.after\:block::after { + content: var(--tw-content); + display: block; +} + +.after\:h-1::after { + content: var(--tw-content); + height: 0.25rem; +} + +.after\:w-full::after { + content: var(--tw-content); + width: 100%; +} + +.after\:rounded-t::after { + content: var(--tw-content); + border-top-left-radius: 0.3125rem; + border-top-right-radius: 0.3125rem; +} + +.after\:bg-green-600::after { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(34 108 87 / var(--tw-bg-opacity)); +} + +.focus-within\:outline-2:focus-within { + outline-width: 2px; +} + +.focus-within\:outline-gray-300:focus-within { + outline-color: #8F8F8F; +} + +.hover\:text-gray-600:hover { + --tw-text-opacity: 1; + color: rgb(84 89 93 / var(--tw-text-opacity)); +} + +.hover\:text-green-600:hover { + --tw-text-opacity: 1; + color: rgb(34 108 87 / var(--tw-text-opacity)); +} + +.hover\:underline:hover { + text-decoration-line: underline; +} + +.focus\:border-gray-600:focus { + --tw-border-opacity: 1; + border-color: rgb(84 89 93 / var(--tw-border-opacity)); +} + +.peer:focus-within ~ .peer-focus-within\:hidden { + display: none; +} + +@media (min-width: 63.75rem) { + .xl\:inline { + display: inline; + } + + .xl\:hidden { + display: none; + } + + .xl\:flex-row { + flex-direction: row; + } + + .xl\:items-center { + align-items: center; + } + + .xl\:gap-20 { + gap: 5rem; + } + + .xl\:gap-6 { + gap: 1.5rem; + } + + .xl\:pt-0 { + padding-top: 0px; + } +} + +@media (min-width: 85.375rem) { + .xxl\:inline-block { + display: inline-block; + } + + .xxl\:h-4 { + height: 1rem; + } + + .xxl\:w-4 { + width: 1rem; + } + + .xxl\:gap-20 { + gap: 5rem; + } +} diff --git a/gno.land/pkg/gnoweb2/static.go b/gno.land/pkg/gnoweb2/static.go index 1888ad06475..2cc8bedebcb 100644 --- a/gno.land/pkg/gnoweb2/static.go +++ b/gno.land/pkg/gnoweb2/static.go @@ -16,10 +16,12 @@ func disableCache(next http.Handler) http.Handler { }) } -func AssetDevHandler() http.Handler { - return disableCache(http.StripPrefix("/public", http.FileServer(http.Dir("public")))) -} +func AssetHandler(basePath string, cache bool) http.Handler { + if cache { + return http.FileServer(http.FS(assets)) + } + + handler := http.StripPrefix(basePath, http.FileServer(http.Dir(basePath))) + return disableCache(handler) -func AssetHandler() http.Handler { - return http.FileServer(http.FS(assets)) } diff --git a/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go b/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go index 0e3781545a4..83daa7d5081 100644 --- a/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go +++ b/gno.land/pkg/gnoweb2/tools/cmd/logname/colors.go @@ -1,4 +1,4 @@ -package gnoweb +package main import ( "fmt" diff --git a/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go b/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go index 63ffc62de15..50b42b79c0a 100644 --- a/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go +++ b/gno.land/pkg/gnoweb2/tools/cmd/logname/main.go @@ -1,4 +1,4 @@ -package gnoweb +package main import ( "bufio" diff --git a/gno.land/pkg/service/render.go b/gno.land/pkg/service/render.go index 94dba8fb2a6..721d05bfe75 100644 --- a/gno.land/pkg/service/render.go +++ b/gno.land/pkg/service/render.go @@ -8,7 +8,6 @@ import ( "path/filepath" "strings" - "github.com/alecthomas/chroma/formatters/html" "github.com/gnolang/gno/gno.land/pkg/gnoclient" md "github.com/gnolang/gno/gno.land/pkg/markdown" "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types @@ -19,20 +18,17 @@ import ( ) type WebRenderClient struct { - htmlFromater *html.Formatter - log *slog.Logger - client *gnoclient.Client - md goldmark.Markdown + logger *slog.Logger + client *gnoclient.Client + md goldmark.Markdown } func NewWebRender(log *slog.Logger, cl *gnoclient.Client, m goldmark.Markdown) *WebRenderClient { - formatter := html.New(html.WithClasses(true)) m.Parser().AddOptions(parser.WithAutoHeadingID()) return &WebRenderClient{ - htmlFromater: formatter, - log: log, - client: cl, - md: m, + logger: log, + client: cl, + md: m, } } @@ -47,7 +43,7 @@ func (s *WebRenderClient) Functions(pkgPath string) ([]vm.FunctionSignature, err var fsigs vm.FunctionSignatures if err := amino.UnmarshalJSON(res, &fsigs); err != nil { - s.log.Warn("unable to unmarshal fsigs, client is probably outdated ?") + s.logger.Warn("unable to unmarshal fsigs, client is probably outdated ?") return nil, fmt.Errorf("unable to unamarshal fsigs: %w", err) } @@ -95,7 +91,6 @@ func (s *WebRenderClient) Render(w io.Writer, pkgPath string, args string) (*Met const qpath = "vm/qrender" data := []byte(gnoPath(pkgPath, args)) - fmt.Println("data", string(data)) rawres, err := s.query(qpath, data) if err != nil { return nil, err @@ -109,14 +104,14 @@ func (s *WebRenderClient) Render(w io.Writer, pkgPath string, args string) (*Met var meta Metadata meta.Toc, err = md.TocInspect(doc, rawres, md.TocOptions{MaxDepth: 6}) if err != nil { - s.log.Warn("unable to inspect for toc elements", "err", err) + s.logger.Warn("unable to inspect for toc elements", "err", err) } return &meta, nil } func (s *WebRenderClient) query(qpath string, data []byte) ([]byte, error) { - s.log.Info("query", "qpath", qpath, "data", string(data)) + s.logger.Info("query", "qpath", qpath, "data", string(data)) // XXX: move this into gnoclient qres, err := s.client.Query(gnoclient.QueryCfg{ Path: qpath, @@ -124,11 +119,11 @@ func (s *WebRenderClient) query(qpath string, data []byte) ([]byte, error) { }) if err != nil { - s.log.Error("request error", "path", qpath, "data", string(data), "error", err) + s.logger.Error("request error", "path", qpath, "data", string(data), "error", err) return nil, fmt.Errorf("unable to query path %q: %w", qpath, err) } if qres.Response.Error != nil { - s.log.Error("response error", "path", qpath, "log", qres.Response.Log) + s.logger.Error("response error", "path", qpath, "log", qres.Response.Log) return nil, qres.Response.Error } From f3dbbf3b09f5a5dcaa7b2760d305f20ffcbab459 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 21:33:36 +0900 Subject: [PATCH 03/92] chore: cleanup Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- gno.land/cmd/gnoweb2/main.go | 94 +++++---------------- gno.land/pkg/gnoweb2/components/util.gohtml | 9 -- gno.land/pkg/gnoweb2/handler.go | 2 +- 3 files changed, 23 insertions(+), 82 deletions(-) delete mode 100644 gno.land/pkg/gnoweb2/components/util.gohtml diff --git a/gno.land/cmd/gnoweb2/main.go b/gno.land/cmd/gnoweb2/main.go index 40c5388ed35..919bbd19c01 100644 --- a/gno.land/cmd/gnoweb2/main.go +++ b/gno.land/cmd/gnoweb2/main.go @@ -16,15 +16,17 @@ import ( ) type webCfg struct { - chainid string - remote string - bind string + chainid string + remote string + remoteHelp string + bind string } var defaultWebOptions = &webCfg{ - chainid: "dev", - remote: "127.0.0.1:26657", - bind: ":8888", + chainid: "dev", + remote: "127.0.0.1:26657", + bind: ":8888", + remoteHelp: "", } func main() { @@ -54,6 +56,13 @@ func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { "target remote", ) + fs.StringVar( + &c.chainid, + "help-remote", + defaultWebOptions.remoteHelp, + "help page's remote address", + ) + fs.StringVar( &c.chainid, "chain-id", @@ -67,81 +76,22 @@ func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { defaultWebOptions.bind, "gnoweb listener", ) - } func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { - zapLogger := log.NewZapConsoleLogger(os.Stdout, zapcore.DebugLevel) + zapLogger := log.NewZapConsoleLogger(io.Out(), zapcore.DebugLevel) defer zapLogger.Sync() // Setup logger logger := log.ZapLoggerToSlog(zapLogger) - // md := goldmark.New() - - // staticMeta := gnoweb.StaticMetadata{ - // AssetsPath: "/public/", - // RemoteHelp: cfg.remote, - // } - - // mux := http.NewServeMux() - - // // Setup asset handler - // // if cfg.dev { - // // mux.Handle(staticMeta.AssetsPath, AssetDevHandler()) - // // } else { - // mux.Handle(staticMeta.AssetsPath, gnoweb.AssetHandler()) - // // } - - // client, err := client.NewHTTPClient(cfg.remote) - // if err != nil { - // return fmt.Errorf("unable to create http client: %W", err) - // } - - // mnemo := "index brass unknown lecture autumn provide royal shrimp elegant wink now zebra discover swarm act ill you bullet entire outdoor tilt usage gap multiply" - // bip39Passphrase := "" - // account, index := uint32(0), uint32(0) - // chainID := cfg.chainid - // signer, err := gnoclient.SignerFromBip39(mnemo, chainID, bip39Passphrase, account, index) - // if err != nil { - // return fmt.Errorf("unable to create signer: %w", err) - // } - - // // Setup webservice - // cl := gnoclient.Client{ - // Signer: signer, - // RPCClient: client, - // } - // webcli := service.NewWebRender(logger, &cl, md) - - // if len(args) > 0 { - // var qargs string - // if len(args) > 1 { - // qargs = strings.Join(args[1:], ",") - // } - - // _, err = webcli.Render(io.Out(), args[0], qargs) - // return - // } - - // webcfg := gnoweb.WebHandlerConfig{ - // RenderClient: webcli, - // Meta: staticMeta, - // } - - // // Setup main handler - // webhandler := gnoweb.NewWebHandler( - // logger, - // webcfg, - // ) - - // // Setup Alias Middleware - // mux.Handle("/", gnoweb.AliasAndRedirectMiddleware(webhandler)) - appcfg := gnoweb.NewDefaultAppConfig() - appcfg.Remote = cfg.remote appcfg.ChainID = cfg.chainid - appcfg.RemoteHelp = cfg.remote + appcfg.Remote = cfg.remote + appcfg.RemoteHelp = cfg.remoteHelp + if appcfg.RemoteHelp == "" { + appcfg.RemoteHelp = appcfg.Remote + } app, err := gnoweb.MakeRouterApp(logger, appcfg) if err != nil { @@ -150,7 +100,7 @@ func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) if err != nil { - return fmt.Errorf("unable to resolve listener: %q", cfg.bind) + return fmt.Errorf("unable to resolve listener %q: %w", cfg.bind, err) } logger.Info("Running", "listener", bindaddr.String()) diff --git a/gno.land/pkg/gnoweb2/components/util.gohtml b/gno.land/pkg/gnoweb2/components/util.gohtml deleted file mode 100644 index 269791c29a4..00000000000 --- a/gno.land/pkg/gnoweb2/components/util.gohtml +++ /dev/null @@ -1,9 +0,0 @@ -{{ define "slot" }} -{{.Html}} -{{end}} - -{{define "tail"}} - -
- -{{ end }} diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb2/handler.go index 1f6cdcee472..6e6ff7babb3 100644 --- a/gno.land/pkg/gnoweb2/handler.go +++ b/gno.land/pkg/gnoweb2/handler.go @@ -53,7 +53,7 @@ func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { return &WebHandler{ formatter: cfg.Formatter, rendercli: cfg.RenderClient, - logger: logger.WithGroup("web"), + logger: logger, static: cfg.Meta, // Initialize the pool with bytes.Buffer factory bufferPool: sync.Pool{ From 5dd673db85d3b0bfe9b8747616a2cf91e6bee951 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 21:39:40 +0900 Subject: [PATCH 04/92] wip: re-add status json page Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- contribs/gnodev/cmd/gnodev/main.go | 28 +++++--- gno.land/pkg/gnoweb2/app.go | 9 +-- gno.land/pkg/gnoweb2/components/index.gohtml | 2 +- .../pkg/gnoweb2/frontend/static/favicon.ico | Bin 0 -> 7406 bytes gno.land/pkg/gnoweb2/handler.go | 62 +++++++---------- gno.land/pkg/gnoweb2/public/favicon.ico | Bin 0 -> 7406 bytes gno.land/pkg/gnoweb2/static.go | 6 +- gno.land/pkg/gnoweb2/status.go | 63 ++++++++++++++++++ .../render.go => gnoweb2/webclient.go} | 18 ++--- 9 files changed, 125 insertions(+), 63 deletions(-) create mode 100644 gno.land/pkg/gnoweb2/frontend/static/favicon.ico create mode 100644 gno.land/pkg/gnoweb2/public/favicon.ico create mode 100644 gno.land/pkg/gnoweb2/status.go rename gno.land/pkg/{service/render.go => gnoweb2/webclient.go} (83%) diff --git a/contribs/gnodev/cmd/gnodev/main.go b/contribs/gnodev/cmd/gnodev/main.go index b707de5c570..f27ae2ac781 100644 --- a/contribs/gnodev/cmd/gnodev/main.go +++ b/contribs/gnodev/cmd/gnodev/main.go @@ -57,6 +57,7 @@ type devCfg struct { txsFile string // Web Configuration + noWeb bool webListenerAddr string webRemoteHelperAddr string @@ -120,6 +121,13 @@ func (c *devCfg) RegisterFlags(fs *flag.FlagSet) { "gno root directory", ) + fs.BoolVar( + &c.noWeb, + "no-web", + defaultDevOptions.noWeb, + "disable gnoweb", + ) + fs.StringVar( &c.webListenerAddr, "web-listener", @@ -337,14 +345,18 @@ func execDev(cfg *devCfg, args []string, io commands.IO) (err error) { mux.Handle("/", webhandler) } - go func() { - err := server.ListenAndServe() - cancel(err) - }() - - logger.WithGroup(WebLogName). - Info("gnoweb started", - "lisn", fmt.Sprintf("http://%s", server.Addr)) + // Serve gnoweb + // XXX: we should skip all the previous web setup if gnoweb is disable + if !cfg.noWeb { + go func() { + err := server.ListenAndServe() + cancel(err) + }() + + logger.WithGroup(WebLogName). + Info("gnoweb started", + "lisn", fmt.Sprintf("http://%s", server.Addr)) + } watcher, err := watcher.NewPackageWatcher(loggerEvents, emitterServer) if err != nil { diff --git a/gno.land/pkg/gnoweb2/app.go b/gno.land/pkg/gnoweb2/app.go index 230e9dd2010..ec7315a812c 100644 --- a/gno.land/pkg/gnoweb2/app.go +++ b/gno.land/pkg/gnoweb2/app.go @@ -10,7 +10,6 @@ import ( "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/styles" "github.com/gnolang/gno/gno.land/pkg/gnoclient" - "github.com/gnolang/gno/gno.land/pkg/service" "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" "github.com/yuin/goldmark" ) @@ -54,11 +53,11 @@ func MakeRouterApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { } // Setup webservice - cl := gnoclient.Client{ + gnocli := gnoclient.Client{ Signer: signer, RPCClient: client, } - webcli := service.NewWebRender(logger, &cl, md) + webcli := NewWebClient(logger, &gnocli, md) formatter := html.New( html.WithLineNumbers(true), @@ -100,7 +99,9 @@ func MakeRouterApp(logger *slog.Logger, cfg *AppConfig) (http.Handler, error) { assetsBase := "/" + strings.Trim(cfg.AssetsPath, "/") + "/" // Handle assets path - mux.Handle(assetsBase, AssetHandler(cfg.AssetsPath, true)) + mux.Handle(assetsBase, AssetHandler(true)) + + mux.Handle("/status.json", handlerStatusJSON(logger, &gnocli)) return mux, nil } diff --git a/gno.land/pkg/gnoweb2/components/index.gohtml b/gno.land/pkg/gnoweb2/components/index.gohtml index 607dbdea8cd..96ff32b84f0 100644 --- a/gno.land/pkg/gnoweb2/components/index.gohtml +++ b/gno.land/pkg/gnoweb2/components/index.gohtml @@ -44,7 +44,7 @@ - + diff --git a/gno.land/pkg/gnoweb2/frontend/static/favicon.ico b/gno.land/pkg/gnoweb2/frontend/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..528c362c44a80fe29bab63303a6e7a3a05e43ce5 GIT binary patch literal 7406 zcmeHMSxi$|82(D3w6~=!EiEljDr+fFmI4a0l(Ln|(kU1&~ zpL}qMThJ$CjGE|!4<;tQ_@X`;G)9g4miVA?nR9Nrr5)NrW+szNrhjsK&VT;zKezpF zoAZBP0Ur3s$^sdMSdaqw0JPdAUkEIcwXiUUKNtl3t^{-hLsHO9E}F-h$T6_5yybao zYb$DMYEW2Mh>ssXA|xaPM~@!G{{8!rnwpBIPoHAv&Ye)J)ewut=Hxp`FQf=2~tv0uw%y#L`6kme0&@tkqCCX9cRy;MR|ESa&vQ$l$3-=j~-$B z_U%w86u5Ke4s13X78VwelaqsY@7^IHAps8`KE&MI9OQC2Mn*<({rYtT1qGqAvlFLJ zpT^g(UrAlE@aD}M%+AgtA|e8OJ|FGv?WnD-#plnTVK5l*>eVY!pD+v#4uZ$y!D_YQ z)2B~3c<>-zym*1>>1jx%Qna+Rz+$oB*s)_MC@8?QXV0)}*DgdyM?)f!ps%kFSFc`0 zb8|DQs;aPW-#*OG&qJkBp{J(@jg5_{sHni6J$vx@@nhV*dlzG4V-O03xN+kK&YU>| zv)K%z(TLrJIJ4qUi!0d;kCICbh2zI^$D%*;%@e*GHZ;o%q>8bUxo0NUExaQ^&xoH%g;MMXu( z$jHFUmoJwex_{=cfWHF&QUw$h0gAQXYIv~KVo@fhuQ6k)ubZ*in7DZ3S`wz^8wr{k z^NVnL)eK2fj>Q2d2|4xFRT2vGn5Es>J1`kjJ`>Va&dnV+v4r~k)X6&Ty>O$h%hwH} z|Fpf$W+CUKcZ*+%S9wPR#TFZ5aeiPrwa~-at4%~QJzIWul!#&UTl9==&?}e(Bz8+8 zrozg|sbndupF$R6_x%LKn<9WBanshVVKwC8#)N$5YkLwiJH9mJRHjyFW(Th?sj4CO z*op=B@NCjdmCFN7=a2rxcSpE;a#_D=Y~(ksWbEWX-}ssqcl?iH-*_~;<9}EMj;cA=1QU7M zzO8r675}Tt!|;;Vk-eNSIp784vfNv_j1OOZd!SRpC8YTL?mO=hnYol87DsB>=OYhs*P!uQuk`NBD4T@7l|#J0C5Y+chEB0qW3 z!%}nZ;Gg&_@L#9^<*8b7naJhjse#1d%!Q|(J9iGxpFd~$DfvOM+?4Xt$;nBUm%4J% z4((tNr#ycAILj$xV`DKeFaW(?@8pkDQ&TK|JaXg+bUGc&87C$tSgx3t zmj|U%$#TT*?rvPZe3|8l@87>?c_QV995=jp@uC|)q}-5lM9K>(AEaEcq@)D*@82i- zfYyx72%2n1s`YYhCz+bC?-JaqjvAQym;pk*cIEwpq zckfpIO^TJc5iAoorClArfU45_fzgxvW0F)XA!vFvP literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb2/handler.go index 6e6ff7babb3..147382e7e66 100644 --- a/gno.land/pkg/gnoweb2/handler.go +++ b/gno.land/pkg/gnoweb2/handler.go @@ -17,7 +17,6 @@ import ( "github.com/alecthomas/chroma/v2/lexers" "github.com/gnolang/gno/gno.land/pkg/gnoweb2/components" "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types - "github.com/gnolang/gno/gno.land/pkg/service" ) type StaticMetadata struct { @@ -29,19 +28,20 @@ type StaticMetadata struct { type WebHandlerConfig struct { Meta StaticMetadata - RenderClient *service.WebRenderClient + RenderClient *WebClient Formatter Formatter } type WebHandler struct { formatter Formatter - logger *slog.Logger - static StaticMetadata - rendercli *service.WebRenderClient + logger *slog.Logger + static StaticMetadata + webcli *WebClient // bufferPool is used to reuse Buffer instances // to reduce memory allocations and improve performance. + // XXX: maybe this is a too early optimization bufferPool sync.Pool } @@ -52,7 +52,7 @@ func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { return &WebHandler{ formatter: cfg.Formatter, - rendercli: cfg.RenderClient, + webcli: cfg.RenderClient, logger: logger, static: cfg.Meta, // Initialize the pool with bytes.Buffer factory @@ -66,8 +66,10 @@ func NewWebHandler(logger *slog.Logger, cfg WebHandlerConfig) *WebHandler { func (h *WebHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { h.logger.Debug("receiving request", "method", r.Method, "path", r.URL.Path) + if r.Method != http.MethodGet { http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return } h.Get(w, r) @@ -97,7 +99,6 @@ func generateBreadcrumbPaths(path string) []components.BreadcrumbPart { func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { gnourl, err := ParseGnoURL(r.URL) if err != nil { - h.logger.Error("unable to render body", "url", r.URL.String(), "err", err) http.Error(w, "invalid url", http.StatusBadRequest) return } @@ -148,14 +149,15 @@ func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { } func (h *WebHandler) renderRealmHelp(w io.Writer, gnourl *GnoURL) (status int, err error) { - fsigs, err := h.rendercli.Functions(gnourl.Path) + fsigs, err := h.webcli.Functions(gnourl.Path) if err != nil { h.logger.Error("unable to fetch path functions", "err", err) return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") } // Catch last name of the path - realmName := "unknown>" + // XXX: we should probably add a condition within the template + realmName := "unknown" if i := strings.LastIndexByte(gnourl.Path, '/'); i > 0 { realmName = gnourl.Path[i+1:] } @@ -178,7 +180,7 @@ func (h *WebHandler) renderRealmHelp(w io.Writer, gnourl *GnoURL) (status int, e func (h *WebHandler) renderRealmSource(w io.Writer, gnourl *GnoURL) (status int, err error) { pkgPath := gnourl.Path - files, err := h.rendercli.Sources(pkgPath) + files, err := h.webcli.Sources(pkgPath) if err != nil { h.logger.Error("unable to list sources file", "path", gnourl.Path, "err", err) return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") @@ -200,30 +202,12 @@ func (h *WebHandler) renderRealmSource(w io.Writer, gnourl *GnoURL) (status int, return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") } - source, err := h.rendercli.SourceFile(pkgPath, fileName) + source, err := h.webcli.SourceFile(pkgPath, fileName) if err != nil { h.logger.Error("unable to get source file", "file", fileName, "err", err) return http.StatusInternalServerError, components.RenderStatusComponent(w, "internal error") } - // if theme := gnourl.WebQuery.Get("theme"); theme != "" { - // n, err := strconv.ParseInt(theme, 10, 32) - // if err != nil { - // cstyle = styles.Get(theme) - // } else { - // listName := make([]string, len(styles.Registry)) - // for name := range styles.Registry { - // listName = append(listName, name) - // } - - // sort.Slice(listName, func(i, j int) bool { - // return strings.Compare(listName[i], listName[j]) > 0 - // }) - - // cstyle = styles.Get(listName[n]) - // } - // } - hsource, err := h.highlightSource(chromaStyle, fileName, source) if err != nil { h.logger.Error("unable to highlight source file", "file", fileName, "err", err) @@ -244,15 +228,6 @@ func (h *WebHandler) renderRealmSource(w io.Writer, gnourl *GnoURL) (status int, return http.StatusOK, nil } -func contains(files []string, file string) bool { - for _, f := range files { - if f == file { - return true - } - } - return false -} - func (h *WebHandler) renderRealm(w io.Writer, gnourl *GnoURL) (status int, err error) { h.logger.Info("component render", "path", gnourl.Path, "args", gnourl.PathArgs) @@ -270,7 +245,7 @@ func (h *WebHandler) renderRealm(w io.Writer, gnourl *GnoURL) (status int, err e content := h.getBuffer() defer h.putBuffer(content) - meta, err := h.rendercli.Render(content, gnourl.Path, gnourl.EncodeArgs()) + meta, err := h.webcli.Render(content, gnourl.Path, gnourl.EncodeArgs()) if err != nil { if errors.Is(err, vm.InvalidPkgPathError{}) { return http.StatusNotFound, components.RenderStatusComponent(w, "not found") @@ -343,3 +318,12 @@ func (h *WebHandler) putBuffer(buf *bytes.Buffer) { buf.Reset() h.bufferPool.Put(buf) } + +func contains(files []string, file string) bool { + for _, f := range files { + if f == file { + return true + } + } + return false +} diff --git a/gno.land/pkg/gnoweb2/public/favicon.ico b/gno.land/pkg/gnoweb2/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..528c362c44a80fe29bab63303a6e7a3a05e43ce5 GIT binary patch literal 7406 zcmeHMSxi$|82(D3w6~=!EiEljDr+fFmI4a0l(Ln|(kU1&~ zpL}qMThJ$CjGE|!4<;tQ_@X`;G)9g4miVA?nR9Nrr5)NrW+szNrhjsK&VT;zKezpF zoAZBP0Ur3s$^sdMSdaqw0JPdAUkEIcwXiUUKNtl3t^{-hLsHO9E}F-h$T6_5yybao zYb$DMYEW2Mh>ssXA|xaPM~@!G{{8!rnwpBIPoHAv&Ye)J)ewut=Hxp`FQf=2~tv0uw%y#L`6kme0&@tkqCCX9cRy;MR|ESa&vQ$l$3-=j~-$B z_U%w86u5Ke4s13X78VwelaqsY@7^IHAps8`KE&MI9OQC2Mn*<({rYtT1qGqAvlFLJ zpT^g(UrAlE@aD}M%+AgtA|e8OJ|FGv?WnD-#plnTVK5l*>eVY!pD+v#4uZ$y!D_YQ z)2B~3c<>-zym*1>>1jx%Qna+Rz+$oB*s)_MC@8?QXV0)}*DgdyM?)f!ps%kFSFc`0 zb8|DQs;aPW-#*OG&qJkBp{J(@jg5_{sHni6J$vx@@nhV*dlzG4V-O03xN+kK&YU>| zv)K%z(TLrJIJ4qUi!0d;kCICbh2zI^$D%*;%@e*GHZ;o%q>8bUxo0NUExaQ^&xoH%g;MMXu( z$jHFUmoJwex_{=cfWHF&QUw$h0gAQXYIv~KVo@fhuQ6k)ubZ*in7DZ3S`wz^8wr{k z^NVnL)eK2fj>Q2d2|4xFRT2vGn5Es>J1`kjJ`>Va&dnV+v4r~k)X6&Ty>O$h%hwH} z|Fpf$W+CUKcZ*+%S9wPR#TFZ5aeiPrwa~-at4%~QJzIWul!#&UTl9==&?}e(Bz8+8 zrozg|sbndupF$R6_x%LKn<9WBanshVVKwC8#)N$5YkLwiJH9mJRHjyFW(Th?sj4CO z*op=B@NCjdmCFN7=a2rxcSpE;a#_D=Y~(ksWbEWX-}ssqcl?iH-*_~;<9}EMj;cA=1QU7M zzO8r675}Tt!|;;Vk-eNSIp784vfNv_j1OOZd!SRpC8YTL?mO=hnYol87DsB>=OYhs*P!uQuk`NBD4T@7l|#J0C5Y+chEB0qW3 z!%}nZ;Gg&_@L#9^<*8b7naJhjse#1d%!Q|(J9iGxpFd~$DfvOM+?4Xt$;nBUm%4J% z4((tNr#ycAILj$xV`DKeFaW(?@8pkDQ&TK|JaXg+bUGc&87C$tSgx3t zmj|U%$#TT*?rvPZe3|8l@87>?c_QV995=jp@uC|)q}-5lM9K>(AEaEcq@)D*@82i- zfYyx72%2n1s`YYhCz+bC?-JaqjvAQym;pk*cIEwpq zckfpIO^TJc5iAoorClArfU45_fzgxvW0F)XA!vFvP literal 0 HcmV?d00001 diff --git a/gno.land/pkg/gnoweb2/static.go b/gno.land/pkg/gnoweb2/static.go index 2cc8bedebcb..417e0bac52a 100644 --- a/gno.land/pkg/gnoweb2/static.go +++ b/gno.land/pkg/gnoweb2/static.go @@ -6,6 +6,8 @@ import ( "net/http" ) +const publicAssetsDir = "public" + //go:embed public/* var assets embed.FS @@ -16,12 +18,12 @@ func disableCache(next http.Handler) http.Handler { }) } -func AssetHandler(basePath string, cache bool) http.Handler { +func AssetHandler(cache bool) http.Handler { if cache { return http.FileServer(http.FS(assets)) } - handler := http.StripPrefix(basePath, http.FileServer(http.Dir(basePath))) + handler := http.StripPrefix(publicAssetsDir, http.FileServer(http.Dir(publicAssetsDir))) return disableCache(handler) } diff --git a/gno.land/pkg/gnoweb2/status.go b/gno.land/pkg/gnoweb2/status.go new file mode 100644 index 00000000000..aec715872f0 --- /dev/null +++ b/gno.land/pkg/gnoweb2/status.go @@ -0,0 +1,63 @@ +package gnoweb + +import ( + "encoding/json" + "log/slog" + "net/http" + "runtime" + "time" + + "github.com/gnolang/gno/gno.land/pkg/gnoclient" +) + +// XXX: use otel +func handlerStatusJSON(logger *slog.Logger, cli *gnoclient.Client) http.Handler { + startedAt := time.Now() + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var ret struct { + Gnoland struct { + Connected bool `json:"connected"` + Error *string `json:"error,omitempty"` + Height *int64 `json:"height,omitempty"` + // processed txs + // active connections + + Version *string `json:"version,omitempty"` + // Uptime *float64 `json:"uptime-seconds,omitempty"` + // Goarch *string `json:"goarch,omitempty"` + // Goos *string `json:"goos,omitempty"` + // GoVersion *string `json:"go-version,omitempty"` + // NumCPU *int `json:"num_cpu,omitempty"` + } `json:"gnoland"` + Website struct { + // Version string `json:"version"` + Uptime float64 `json:"uptime-seconds"` + Goarch string `json:"goarch"` + Goos string `json:"goos"` + GoVersion string `json:"go-version"` + NumCPU int `json:"num_cpu"` + } `json:"website"` + } + ret.Website.Uptime = time.Since(startedAt).Seconds() + ret.Website.Goarch = runtime.GOARCH + ret.Website.Goos = runtime.GOOS + ret.Website.NumCPU = runtime.NumCPU() + ret.Website.GoVersion = runtime.Version() + + ret.Gnoland.Connected = true + res, _, err := cli.QueryAppVersion() + if err != nil { + ret.Gnoland.Connected = false + errmsg := err.Error() + ret.Gnoland.Error = &errmsg + } else { + version := res + ret.Gnoland.Version = &version + // ret.Gnoland.Height = &res.Height + } + + out, _ := json.MarshalIndent(ret, "", " ") + w.Header().Set("Content-Type", "application/json") + w.Write(out) + }) +} diff --git a/gno.land/pkg/service/render.go b/gno.land/pkg/gnoweb2/webclient.go similarity index 83% rename from gno.land/pkg/service/render.go rename to gno.land/pkg/gnoweb2/webclient.go index 721d05bfe75..654c2c91165 100644 --- a/gno.land/pkg/service/render.go +++ b/gno.land/pkg/gnoweb2/webclient.go @@ -1,4 +1,4 @@ -package service +package gnoweb import ( "errors" @@ -17,22 +17,22 @@ import ( "github.com/yuin/goldmark/text" ) -type WebRenderClient struct { +type WebClient struct { logger *slog.Logger client *gnoclient.Client md goldmark.Markdown } -func NewWebRender(log *slog.Logger, cl *gnoclient.Client, m goldmark.Markdown) *WebRenderClient { +func NewWebClient(log *slog.Logger, cl *gnoclient.Client, m goldmark.Markdown) *WebClient { m.Parser().AddOptions(parser.WithAutoHeadingID()) - return &WebRenderClient{ + return &WebClient{ logger: log, client: cl, md: m, } } -func (s *WebRenderClient) Functions(pkgPath string) ([]vm.FunctionSignature, error) { +func (s *WebClient) Functions(pkgPath string) ([]vm.FunctionSignature, error) { const qpath = "vm/qfuncs" args := fmt.Sprintf("gno.land/%s", strings.Trim(pkgPath, "/")) @@ -50,7 +50,7 @@ func (s *WebRenderClient) Functions(pkgPath string) ([]vm.FunctionSignature, err return fsigs, nil } -func (s *WebRenderClient) SourceFile(path, fileName string) ([]byte, error) { +func (s *WebClient) SourceFile(path, fileName string) ([]byte, error) { const qpath = "vm/qfile" fileName = strings.TrimSpace(fileName) // sanitize filename @@ -69,7 +69,7 @@ func (s *WebRenderClient) SourceFile(path, fileName string) ([]byte, error) { return res, nil } -func (s *WebRenderClient) Sources(path string) ([]string, error) { +func (s *WebClient) Sources(path string) ([]string, error) { const qpath = "vm/qfile" // XXX: move this into gnoclient @@ -87,7 +87,7 @@ type Metadata struct { *md.Toc } -func (s *WebRenderClient) Render(w io.Writer, pkgPath string, args string) (*Metadata, error) { +func (s *WebClient) Render(w io.Writer, pkgPath string, args string) (*Metadata, error) { const qpath = "vm/qrender" data := []byte(gnoPath(pkgPath, args)) @@ -110,7 +110,7 @@ func (s *WebRenderClient) Render(w io.Writer, pkgPath string, args string) (*Met return &meta, nil } -func (s *WebRenderClient) query(qpath string, data []byte) ([]byte, error) { +func (s *WebClient) query(qpath string, data []byte) ([]byte, error) { s.logger.Info("query", "qpath", qpath, "data", string(data)) // XXX: move this into gnoclient qres, err := s.client.Query(gnoclient.QueryCfg{ From 997ab46295096779a0958f70ba537ccc8c1d66b2 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:18:24 +0100 Subject: [PATCH 05/92] chore: cleanup Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- gno.land/pkg/gnoweb2/handler.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb2/handler.go index 147382e7e66..796a4ebfd68 100644 --- a/gno.land/pkg/gnoweb2/handler.go +++ b/gno.land/pkg/gnoweb2/handler.go @@ -13,7 +13,6 @@ import ( "sync" "github.com/alecthomas/chroma/v2" - "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/gnolang/gno/gno.land/pkg/gnoweb2/components" "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types @@ -99,6 +98,7 @@ func generateBreadcrumbPaths(path string) []components.BreadcrumbPart { func (h *WebHandler) Get(w http.ResponseWriter, r *http.Request) { gnourl, err := ParseGnoURL(r.URL) if err != nil { + h.logger.Error("invalid url", "err", err) http.Error(w, "invalid url", http.StatusBadRequest) return } @@ -294,13 +294,6 @@ func (h *WebHandler) highlightSource(style *chroma.Style, fileName string, src [ } var buff bytes.Buffer - if style.Name != chromaStyle.Name { - if err := html.New().Format(&buff, style, iterator); err != nil { - return nil, fmt.Errorf("unable to format theme: %w", err) - } - return buff.Bytes(), nil - } - if err := h.formatter.Format(&buff, iterator); err != nil { return nil, fmt.Errorf("unable to format source file %q: %w", fileName, err) } From a112a632f7c6c03e76b88fc9dab7e68c4c50169c Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:19:15 +0100 Subject: [PATCH 06/92] chore: clenaup Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- gno.land/pkg/gnoweb2/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/gno.land/pkg/gnoweb2/.gitignore b/gno.land/pkg/gnoweb2/.gitignore index 92b2c45a1b2..dd09eb49099 100644 --- a/gno.land/pkg/gnoweb2/.gitignore +++ b/gno.land/pkg/gnoweb2/.gitignore @@ -1,2 +1,3 @@ node_modules/ tmp/ +.cache From 5e13369bcf273eedcf1548cfd72ac28a3f9df0f8 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:26:07 +0100 Subject: [PATCH 07/92] fix: height Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- gno.land/pkg/gnoweb2/status.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gno.land/pkg/gnoweb2/status.go b/gno.land/pkg/gnoweb2/status.go index aec715872f0..d8c8bf41948 100644 --- a/gno.land/pkg/gnoweb2/status.go +++ b/gno.land/pkg/gnoweb2/status.go @@ -10,7 +10,7 @@ import ( "github.com/gnolang/gno/gno.land/pkg/gnoclient" ) -// XXX: use otel +// XXX: rework this part, this is the original method from previous gnoweb func handlerStatusJSON(logger *slog.Logger, cli *gnoclient.Client) http.Handler { startedAt := time.Now() return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -45,15 +45,14 @@ func handlerStatusJSON(logger *slog.Logger, cli *gnoclient.Client) http.Handler ret.Website.GoVersion = runtime.Version() ret.Gnoland.Connected = true - res, _, err := cli.QueryAppVersion() + version, res, err := cli.QueryAppVersion() if err != nil { ret.Gnoland.Connected = false errmsg := err.Error() ret.Gnoland.Error = &errmsg } else { - version := res ret.Gnoland.Version = &version - // ret.Gnoland.Height = &res.Height + ret.Gnoland.Height = &res.Response.Height } out, _ := json.MarshalIndent(ret, "", " ") From a97d66dfb6c3a2d5e06f684e8689fab9b6fd17f5 Mon Sep 17 00:00:00 2001 From: gfanton <8671905+gfanton@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:33:26 +0100 Subject: [PATCH 08/92] feat: rework gnoweb Signed-off-by: gfanton <8671905+gfanton@users.noreply.github.com> --- gno.land/Makefile | 8 +- gno.land/cmd/gnoweb/CONTRIBUTING.md | 20 - gno.land/cmd/gnoweb/README.md | 13 - gno.land/cmd/gnoweb/main.go | 121 ++- gno.land/cmd/gnoweb/main_test.go | 14 - gno.land/cmd/gnoweb2/main.go | 120 --- gno.land/pkg/{gnoweb2 => gnoweb}/.gitignore | 0 gno.land/pkg/{gnoweb2 => gnoweb}/Makefile | 2 +- gno.land/pkg/gnoweb/alias.go | 20 + gno.land/pkg/{gnoweb2 => gnoweb}/app.go | 0 .../gnoweb/{gnoweb_test.go => app_test.go} | 54 +- .../components/breadcrumb.go | 0 .../components/breadcrumb.gohtml | 0 .../{gnoweb2 => gnoweb}/components/help.go | 0 .../components/help.gohtml | 0 .../{gnoweb2 => gnoweb}/components/index.go | 0 .../components/index.gohtml | 0 .../components/logosvg.gohtml | 0 .../{gnoweb2 => gnoweb}/components/realm.go | 0 .../components/realm.gohtml | 0 .../{gnoweb2 => gnoweb}/components/source.go | 0 .../components/source.gohtml | 0 .../components/spritesvg.gohtml | 0 .../components/status.gohtml | 0 .../components/template.go | 0 gno.land/pkg/{gnoweb2 => gnoweb}/formater.go | 0 .../frontend/css/input.css | 0 .../frontend/css/tx.config.js | 0 .../frontend/js/realmhelp.ts | 0 .../frontend/js/searchbar.ts | 0 .../img => frontend/static}/favicon.ico | Bin .../static/fonts/intervar/Inter.var.woff2 | Bin .../fonts/roboto/roboto-mono-normal.woff | Bin .../fonts/roboto/roboto-mono-normal.woff2 | Bin .../frontend/static/imgs/gnoland.svg | 0 .../frontend/static/js/realmhelp.js | 0 gno.land/pkg/gnoweb/gnoweb.go | 608 ------------ gno.land/pkg/{gnoweb2 => gnoweb}/handler.go | 2 +- .../static => gnoweb/public}/favicon.ico | Bin .../public/fonts/intervar/Inter.var.woff2 | Bin .../fonts/roboto/roboto-mono-normal.woff | Bin .../fonts/roboto/roboto-mono-normal.woff2 | Bin .../public/imgs/gnoland.svg | 0 .../public/js/realmhelp.js | 0 .../public/js/searchbar.js | 0 .../pkg/{gnoweb2 => gnoweb}/public/styles.css | 0 gno.land/pkg/{gnoweb2 => gnoweb}/static.go | 0 gno.land/pkg/gnoweb/static/css/app.css | 862 ------------------ gno.land/pkg/gnoweb/static/css/normalize.css | 379 -------- gno.land/pkg/gnoweb/static/font/README.md | 5 - .../pkg/gnoweb/static/font/roboto/LICENSE.txt | 201 ---- .../static/font/roboto/RobotoMono-Bold.woff | Bin 65396 -> 0 bytes .../font/roboto/RobotoMono-BoldItalic.woff | Bin 72000 -> 0 bytes .../static/font/roboto/RobotoMono-Italic.woff | Bin 71476 -> 0 bytes .../static/font/roboto/RobotoMono-Light.woff | Bin 67428 -> 0 bytes .../font/roboto/RobotoMono-LightItalic.woff | Bin 72748 -> 0 bytes .../static/font/roboto/RobotoMono-Medium.woff | Bin 65392 -> 0 bytes .../font/roboto/RobotoMono-MediumItalic.woff | Bin 72168 -> 0 bytes .../font/roboto/RobotoMono-Regular.woff | Bin 65336 -> 0 bytes .../static/font/roboto/RobotoMono-Thin.woff | Bin 67976 -> 0 bytes .../font/roboto/RobotoMono-ThinItalic.woff | Bin 71144 -> 0 bytes .../gnoweb/static/img/apple-touch-icon.png | Bin 1502 -> 0 bytes .../pkg/gnoweb/static/img/favicon-16x16.png | Bin 172 -> 0 bytes .../pkg/gnoweb/static/img/favicon-32x32.png | Bin 317 -> 0 bytes .../gnoweb/static/img/github-mark-32px.png | Bin 1714 -> 0 bytes .../gnoweb/static/img/github-mark-64px.png | Bin 2625 -> 0 bytes .../pkg/gnoweb/static/img/ico-discord.svg | 3 - gno.land/pkg/gnoweb/static/img/ico-email.svg | 3 - .../pkg/gnoweb/static/img/ico-telegram.svg | 3 - .../pkg/gnoweb/static/img/ico-twitter.svg | 3 - .../pkg/gnoweb/static/img/ico-youtube.svg | 3 - gno.land/pkg/gnoweb/static/img/list-alt.png | Bin 232 -> 0 bytes gno.land/pkg/gnoweb/static/img/list.png | Bin 200 -> 0 bytes .../pkg/gnoweb/static/img/logo-square.png | Bin 13018 -> 0 bytes .../pkg/gnoweb/static/img/logo-square.svg | 6 - gno.land/pkg/gnoweb/static/img/logo-v1.png | Bin 11122 -> 0 bytes gno.land/pkg/gnoweb/static/img/og-gnoland.png | Bin 4739 -> 0 bytes .../gnoweb/static/img/safari-pinned-tab.svg | 29 - gno.land/pkg/gnoweb/static/invites.txt | 48 - .../pkg/gnoweb/static/js/highlight.min.js | 331 ------- gno.land/pkg/gnoweb/static/js/marked.min.js | 14 - gno.land/pkg/gnoweb/static/js/purify.min.js | 3 - gno.land/pkg/gnoweb/static/js/realm_help.js | 111 --- gno.land/pkg/gnoweb/static/js/renderer.js | 225 ----- gno.land/pkg/gnoweb/static/js/umbrella.js | 807 ---------------- gno.land/pkg/gnoweb/static/js/umbrella.min.js | 3 - gno.land/pkg/gnoweb/static/static.go | 8 - gno.land/pkg/{gnoweb2 => gnoweb}/status.go | 0 .../tools/cmd/logname/colors.go | 0 .../tools/cmd/logname/main.go | 0 gno.land/pkg/{gnoweb2 => gnoweb}/tools/go.mod | 0 gno.land/pkg/{gnoweb2 => gnoweb}/tools/go.sum | 0 .../pkg/{gnoweb2 => gnoweb}/tools/tools.go | 0 gno.land/pkg/{gnoweb2 => gnoweb}/url.go | 0 gno.land/pkg/{gnoweb2 => gnoweb}/url_test.go | 0 gno.land/pkg/gnoweb/views/404.html | 18 - gno.land/pkg/gnoweb/views/faucet.html | 139 --- gno.land/pkg/gnoweb/views/funcs.html | 337 ------- gno.land/pkg/gnoweb/views/generic.html | 24 - gno.land/pkg/gnoweb/views/package_dir.html | 37 - gno.land/pkg/gnoweb/views/package_file.html | 28 - gno.land/pkg/gnoweb/views/realm_help.html | 100 -- gno.land/pkg/gnoweb/views/realm_render.html | 40 - gno.land/pkg/gnoweb/views/redirect.html | 16 - gno.land/pkg/{gnoweb2 => gnoweb}/webclient.go | 0 gno.land/pkg/gnoweb2/alias.go | 47 - gno.land/pkg/gnoweb2/public/favicon.ico | Bin 7406 -> 0 bytes 107 files changed, 144 insertions(+), 4671 deletions(-) delete mode 100644 gno.land/cmd/gnoweb/CONTRIBUTING.md delete mode 100644 gno.land/cmd/gnoweb/README.md delete mode 100644 gno.land/cmd/gnoweb/main_test.go delete mode 100644 gno.land/cmd/gnoweb2/main.go rename gno.land/pkg/{gnoweb2 => gnoweb}/.gitignore (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/Makefile (97%) rename gno.land/pkg/{gnoweb2 => gnoweb}/app.go (100%) rename gno.land/pkg/gnoweb/{gnoweb_test.go => app_test.go} (78%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/breadcrumb.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/breadcrumb.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/help.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/help.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/index.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/index.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/logosvg.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/realm.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/realm.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/source.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/source.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/spritesvg.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/status.gohtml (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/components/template.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/formater.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/css/input.css (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/css/tx.config.js (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/js/realmhelp.ts (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/js/searchbar.ts (100%) rename gno.land/pkg/gnoweb/{static/img => frontend/static}/favicon.ico (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/static/fonts/intervar/Inter.var.woff2 (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/static/fonts/roboto/roboto-mono-normal.woff (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/static/fonts/roboto/roboto-mono-normal.woff2 (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/static/imgs/gnoland.svg (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/frontend/static/js/realmhelp.js (100%) delete mode 100644 gno.land/pkg/gnoweb/gnoweb.go rename gno.land/pkg/{gnoweb2 => gnoweb}/handler.go (99%) rename gno.land/pkg/{gnoweb2/frontend/static => gnoweb/public}/favicon.ico (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/fonts/intervar/Inter.var.woff2 (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/fonts/roboto/roboto-mono-normal.woff (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/fonts/roboto/roboto-mono-normal.woff2 (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/imgs/gnoland.svg (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/js/realmhelp.js (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/js/searchbar.js (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/public/styles.css (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/static.go (100%) delete mode 100644 gno.land/pkg/gnoweb/static/css/app.css delete mode 100644 gno.land/pkg/gnoweb/static/css/normalize.css delete mode 100644 gno.land/pkg/gnoweb/static/font/README.md delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/LICENSE.txt delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Bold.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-BoldItalic.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Italic.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Light.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-LightItalic.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Medium.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-MediumItalic.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Regular.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-Thin.woff delete mode 100644 gno.land/pkg/gnoweb/static/font/roboto/RobotoMono-ThinItalic.woff delete mode 100644 gno.land/pkg/gnoweb/static/img/apple-touch-icon.png delete mode 100644 gno.land/pkg/gnoweb/static/img/favicon-16x16.png delete mode 100644 gno.land/pkg/gnoweb/static/img/favicon-32x32.png delete mode 100644 gno.land/pkg/gnoweb/static/img/github-mark-32px.png delete mode 100644 gno.land/pkg/gnoweb/static/img/github-mark-64px.png delete mode 100644 gno.land/pkg/gnoweb/static/img/ico-discord.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/ico-email.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/ico-telegram.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/ico-twitter.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/ico-youtube.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/list-alt.png delete mode 100644 gno.land/pkg/gnoweb/static/img/list.png delete mode 100644 gno.land/pkg/gnoweb/static/img/logo-square.png delete mode 100644 gno.land/pkg/gnoweb/static/img/logo-square.svg delete mode 100644 gno.land/pkg/gnoweb/static/img/logo-v1.png delete mode 100644 gno.land/pkg/gnoweb/static/img/og-gnoland.png delete mode 100644 gno.land/pkg/gnoweb/static/img/safari-pinned-tab.svg delete mode 100644 gno.land/pkg/gnoweb/static/invites.txt delete mode 100644 gno.land/pkg/gnoweb/static/js/highlight.min.js delete mode 100644 gno.land/pkg/gnoweb/static/js/marked.min.js delete mode 100644 gno.land/pkg/gnoweb/static/js/purify.min.js delete mode 100644 gno.land/pkg/gnoweb/static/js/realm_help.js delete mode 100644 gno.land/pkg/gnoweb/static/js/renderer.js delete mode 100644 gno.land/pkg/gnoweb/static/js/umbrella.js delete mode 100644 gno.land/pkg/gnoweb/static/js/umbrella.min.js delete mode 100644 gno.land/pkg/gnoweb/static/static.go rename gno.land/pkg/{gnoweb2 => gnoweb}/status.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/tools/cmd/logname/colors.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/tools/cmd/logname/main.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/tools/go.mod (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/tools/go.sum (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/tools/tools.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/url.go (100%) rename gno.land/pkg/{gnoweb2 => gnoweb}/url_test.go (100%) delete mode 100644 gno.land/pkg/gnoweb/views/404.html delete mode 100644 gno.land/pkg/gnoweb/views/faucet.html delete mode 100644 gno.land/pkg/gnoweb/views/funcs.html delete mode 100644 gno.land/pkg/gnoweb/views/generic.html delete mode 100644 gno.land/pkg/gnoweb/views/package_dir.html delete mode 100644 gno.land/pkg/gnoweb/views/package_file.html delete mode 100644 gno.land/pkg/gnoweb/views/realm_help.html delete mode 100644 gno.land/pkg/gnoweb/views/realm_render.html delete mode 100644 gno.land/pkg/gnoweb/views/redirect.html rename gno.land/pkg/{gnoweb2 => gnoweb}/webclient.go (100%) delete mode 100644 gno.land/pkg/gnoweb2/alias.go delete mode 100644 gno.land/pkg/gnoweb2/public/favicon.ico diff --git a/gno.land/Makefile b/gno.land/Makefile index 263e9c0b9de..2b5924c446c 100644 --- a/gno.land/Makefile +++ b/gno.land/Makefile @@ -28,23 +28,23 @@ GOTEST_FLAGS ?= -v -p 1 -timeout=30m start.gnoland:; go run ./cmd/gnoland start -lazy .PHONY: start.gnoweb -start.gnoweb:; go run ./cmd/gnoweb2 +start.gnoweb:; go run ./cmd/gonoweb .PHONY: build build: build.gnoland build.gnokey build.gnoweb build.gnoland:; go build -o build/gnoland ./cmd/gnoland -build.gnoweb:; go build -o build/gnoweb2 ./cmd/gnoweb +build.gnoweb:; go build -o build/gonoweb ./cmd/gnoweb build.gnokey:; go build -o build/gnokey ./cmd/gnokey run.gnoland:; go run ./cmd/gnoland start -run.gnoweb:; go run ./cmd/gnoweb2 +run.gnoweb:; go run ./cmd/gonoweb .PHONY: install install: install.gnoland install.gnoweb install.gnokey install.gnoland:; go install ./cmd/gnoland -install.gnoweb:; go install ./cmd/gnoweb2 +install.gnoweb:; go install ./cmd/gonoweb install.gnokey:; go install ./cmd/gnokey .PHONY: fclean diff --git a/gno.land/cmd/gnoweb/CONTRIBUTING.md b/gno.land/cmd/gnoweb/CONTRIBUTING.md deleted file mode 100644 index 7d7663e8bf7..00000000000 --- a/gno.land/cmd/gnoweb/CONTRIBUTING.md +++ /dev/null @@ -1,20 +0,0 @@ -# gno.land Website - -The gno.land website has 3 main dependencies: - -1. [UmbrellaJs](https://umbrellajs.com/) for DOM operations -2. [MarkedJs](https://marked.js.org/) for Markdown to html compilation -3. [HighlightJs](https://highlightjs.org/) for golang syntax highlighting -4. [DOMPurify](https://github.com/cure53/DOMPurify) to sanitize html (and avoid xss) - -Some security considerations: -| | Umbrella Js | Marked Js | HighlightJs | DOMPurify | -|---|---|---|---|---| -| dependencies | 0 | 0 | 0 | 0 | -| sanitize content | | [no](https://marked.js.org/#usage) | [throws an error](https://github.com/highlightjs/highlight.js/blob/7addd66c19036eccd7c602af61f1ed84d215c77d/src/highlight.js#L741) | [yes](https://github.com/cure53/DOMPurify#readme) | - -Best Practices: - -- **When using MarkedJs**: Always run the output of the marked compiler inside `DOMPurify.sanitize` before inserting it in the dom with `.innerHtml = `. -- **When using DOMPurify**: Preferably use `{ USE_PROFILES: { html: true } }` option to allow html only. Content passed in the sanitizer must not be modified afterwards, and must directly be inserted in the DOM with innerHtml. Do not call `DOMPurify.sanitize` with the output of a previous `DOMPurify.sanitize` to avoid any mutation XSS risks. -- **When using HighlightJs**: always configure it before with `hljs.configure({throwUnescapedHTML: true})` to throw before inserting html in the page if any unexpected html children are detected. The check is done [here](https://github.com/highlightjs/highlight.js/blob/7addd66c19036eccd7c602af61f1ed84d215c77d/src/highlight.js#L741). diff --git a/gno.land/cmd/gnoweb/README.md b/gno.land/cmd/gnoweb/README.md deleted file mode 100644 index 6379d3f6c43..00000000000 --- a/gno.land/cmd/gnoweb/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# gnoweb - -The gno.land web interface. - -Live demo: https://gno.land/ - -## Install `gnoweb` - -Install and run a local [`gnoland`](../gnoland) instance first. - - $> git clone git@github.com:gnolang/gno.git - $> cd ./gno/gno.land - $> make install.gnoweb diff --git a/gno.land/cmd/gnoweb/main.go b/gno.land/cmd/gnoweb/main.go index 5cec7257ebe..d653b187451 100644 --- a/gno.land/cmd/gnoweb/main.go +++ b/gno.land/cmd/gnoweb/main.go @@ -1,61 +1,120 @@ package main import ( + "context" "flag" "fmt" + "net" "net/http" "os" "time" - // for static files "github.com/gnolang/gno/gno.land/pkg/gnoweb" "github.com/gnolang/gno/gno.land/pkg/log" + "github.com/gnolang/gno/tm2/pkg/commands" "go.uber.org/zap/zapcore" - // for error types - // "github.com/gnolang/gno/tm2/pkg/sdk" // for baseapp (info, status) ) +type webCfg struct { + chainid string + remote string + remoteHelp string + bind string +} + +var defaultWebOptions = &webCfg{ + chainid: "dev", + remote: "127.0.0.1:26657", + bind: ":8888", + remoteHelp: "", +} + func main() { - err := runMain(os.Args[1:]) - if err != nil { - _, _ = fmt.Fprintf(os.Stderr, "%+v\n", err) - os.Exit(1) - } + cfg := &webCfg{} + + stdio := commands.NewDefaultIO() + cmd := commands.NewCommand( + commands.Metadata{ + Name: "gnoweb", + ShortUsage: "gnoweb [flags] [path ...]", + ShortHelp: "runs gno.land web interface", + LongHelp: `gnoweb web interface`, + }, + cfg, + func(_ context.Context, args []string) error { + return execWeb(cfg, args, stdio) + }) + + cmd.Execute(context.Background(), os.Args[1:]) } -func runMain(args []string) error { - var ( - fs = flag.NewFlagSet("gnoweb", flag.ContinueOnError) - cfg = gnoweb.NewDefaultConfig() - bindAddress string +func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { + fs.StringVar( + &c.remote, + "remote", + defaultWebOptions.remote, + "target remote", + ) + + fs.StringVar( + &c.chainid, + "help-remote", + defaultWebOptions.remoteHelp, + "help page's remote address", + ) + + fs.StringVar( + &c.chainid, + "chain-id", + defaultWebOptions.chainid, + "target chain id", ) - fs.StringVar(&cfg.RemoteAddr, "remote", cfg.RemoteAddr, "remote gnoland node address") - fs.StringVar(&cfg.CaptchaSite, "captcha-site", cfg.CaptchaSite, "recaptcha site key (if empty, captcha are disabled)") - fs.StringVar(&cfg.FaucetURL, "faucet-url", cfg.FaucetURL, "faucet server URL") - fs.StringVar(&cfg.ViewsDir, "views-dir", cfg.ViewsDir, "views directory location") // XXX: replace with goembed - fs.StringVar(&cfg.HelpChainID, "help-chainid", cfg.HelpChainID, "help page's chainid") - fs.StringVar(&cfg.HelpRemote, "help-remote", cfg.HelpRemote, "help page's remote addr") - fs.BoolVar(&cfg.WithAnalytics, "with-analytics", cfg.WithAnalytics, "enable privacy-first analytics") - fs.StringVar(&bindAddress, "bind", "127.0.0.1:8888", "server listening address") - fs.BoolVar(&cfg.WithHTML, "with-html", cfg.WithHTML, "Enable HTML parsing in markdown rendering") - - if err := fs.Parse(args); err != nil { - return err - } - zapLogger := log.NewZapConsoleLogger(os.Stdout, zapcore.DebugLevel) + fs.StringVar( + &c.bind, + "bind", + defaultWebOptions.bind, + "gnoweb listener", + ) +} + +func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { + zapLogger := log.NewZapConsoleLogger(io.Out(), zapcore.DebugLevel) + defer zapLogger.Sync() + + // Setup logger logger := log.ZapLoggerToSlog(zapLogger) - logger.Info("Running", "listener", "http://"+bindAddress) + appcfg := gnoweb.NewDefaultAppConfig() + appcfg.ChainID = cfg.chainid + appcfg.Remote = cfg.remote + appcfg.RemoteHelp = cfg.remoteHelp + if appcfg.RemoteHelp == "" { + appcfg.RemoteHelp = appcfg.Remote + } + + app, err := gnoweb.MakeRouterApp(logger, appcfg) + if err != nil { + return fmt.Errorf("unable to start gnoweb app: %w", err) + } + + bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) + if err != nil { + return fmt.Errorf("unable to resolve listener %q: %w", cfg.bind, err) + } + + logger.Info("Running", "listener", bindaddr.String()) + server := &http.Server{ - Addr: bindAddress, + Handler: app, + Addr: bindaddr.String(), ReadHeaderTimeout: 60 * time.Second, - Handler: gnoweb.MakeApp(logger, cfg).Router, } if err := server.ListenAndServe(); err != nil { logger.Error("HTTP server stopped", " error:", err) + os.Exit(1) } - return zapLogger.Sync() + return nil } diff --git a/gno.land/cmd/gnoweb/main_test.go b/gno.land/cmd/gnoweb/main_test.go deleted file mode 100644 index 640c4763140..00000000000 --- a/gno.land/cmd/gnoweb/main_test.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "errors" - "flag" - "testing" -) - -func TestFlagHelp(t *testing.T) { - err := runMain([]string{"-h"}) - if !errors.Is(err, flag.ErrHelp) { - t.Errorf("should display usage") - } -} diff --git a/gno.land/cmd/gnoweb2/main.go b/gno.land/cmd/gnoweb2/main.go deleted file mode 100644 index 919bbd19c01..00000000000 --- a/gno.land/cmd/gnoweb2/main.go +++ /dev/null @@ -1,120 +0,0 @@ -package main - -import ( - "context" - "flag" - "fmt" - "net" - "net/http" - "os" - "time" - - gnoweb "github.com/gnolang/gno/gno.land/pkg/gnoweb2" - "github.com/gnolang/gno/gno.land/pkg/log" - "github.com/gnolang/gno/tm2/pkg/commands" - "go.uber.org/zap/zapcore" -) - -type webCfg struct { - chainid string - remote string - remoteHelp string - bind string -} - -var defaultWebOptions = &webCfg{ - chainid: "dev", - remote: "127.0.0.1:26657", - bind: ":8888", - remoteHelp: "", -} - -func main() { - cfg := &webCfg{} - - stdio := commands.NewDefaultIO() - cmd := commands.NewCommand( - commands.Metadata{ - Name: "gnoweb", - ShortUsage: "gnoweb [flags] [path ...]", - ShortHelp: "runs gno.land web interface", - LongHelp: `gnoweb web interface`, - }, - cfg, - func(_ context.Context, args []string) error { - return execWeb(cfg, args, stdio) - }) - - cmd.Execute(context.Background(), os.Args[1:]) -} - -func (c *webCfg) RegisterFlags(fs *flag.FlagSet) { - fs.StringVar( - &c.remote, - "remote", - defaultWebOptions.remote, - "target remote", - ) - - fs.StringVar( - &c.chainid, - "help-remote", - defaultWebOptions.remoteHelp, - "help page's remote address", - ) - - fs.StringVar( - &c.chainid, - "chain-id", - defaultWebOptions.chainid, - "target chain id", - ) - - fs.StringVar( - &c.bind, - "bind", - defaultWebOptions.bind, - "gnoweb listener", - ) -} - -func execWeb(cfg *webCfg, args []string, io commands.IO) (err error) { - zapLogger := log.NewZapConsoleLogger(io.Out(), zapcore.DebugLevel) - defer zapLogger.Sync() - - // Setup logger - logger := log.ZapLoggerToSlog(zapLogger) - - appcfg := gnoweb.NewDefaultAppConfig() - appcfg.ChainID = cfg.chainid - appcfg.Remote = cfg.remote - appcfg.RemoteHelp = cfg.remoteHelp - if appcfg.RemoteHelp == "" { - appcfg.RemoteHelp = appcfg.Remote - } - - app, err := gnoweb.MakeRouterApp(logger, appcfg) - if err != nil { - return fmt.Errorf("unable to start gnoweb app: %w", err) - } - - bindaddr, err := net.ResolveTCPAddr("tcp", cfg.bind) - if err != nil { - return fmt.Errorf("unable to resolve listener %q: %w", cfg.bind, err) - } - - logger.Info("Running", "listener", bindaddr.String()) - - server := &http.Server{ - Handler: app, - Addr: bindaddr.String(), - ReadHeaderTimeout: 60 * time.Second, - } - - if err := server.ListenAndServe(); err != nil { - logger.Error("HTTP server stopped", " error:", err) - os.Exit(1) - } - - return nil -} diff --git a/gno.land/pkg/gnoweb2/.gitignore b/gno.land/pkg/gnoweb/.gitignore similarity index 100% rename from gno.land/pkg/gnoweb2/.gitignore rename to gno.land/pkg/gnoweb/.gitignore diff --git a/gno.land/pkg/gnoweb2/Makefile b/gno.land/pkg/gnoweb/Makefile similarity index 97% rename from gno.land/pkg/gnoweb2/Makefile rename to gno.land/pkg/gnoweb/Makefile index 3846407cfd8..173d1bb3c72 100644 --- a/gno.land/pkg/gnoweb2/Makefile +++ b/gno.land/pkg/gnoweb/Makefile @@ -70,7 +70,7 @@ dev: dev.gnoweb: | .cache @killall gnowebserve || true # make sure that previous instances as been kill $(run_air) \ - --build.cmd "go build -o .cache/gnowebserve ../../cmd/gnoweb2" \ + --build.cmd "go build -o .cache/gnowebserve ../../cmd/gonoweb" \ --build.bin ".cache/gnowebserve -chain-id=${CHAIN_ID} -remote=${DEV_REMOTE}" \ --build.exclude_unchanged "true" \ --build.exclude_dir "gotools,node_modules" \ diff --git a/gno.land/pkg/gnoweb/alias.go b/gno.land/pkg/gnoweb/alias.go index 7fb28d5cbc3..5054b639d4a 100644 --- a/gno.land/pkg/gnoweb/alias.go +++ b/gno.land/pkg/gnoweb/alias.go @@ -1,5 +1,7 @@ package gnoweb +import "net/http" + // realm aliases var Aliases = map[string]string{ "/": "/r/gnoland/home", @@ -25,3 +27,21 @@ var Redirects = map[string]string{ "/getting-started": "/start", "/gophercon24": "https://docs.gno.land", } + +func AliasAndRedirectMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Check if the request path matches an alias + if newPath, ok := Aliases[r.URL.Path]; ok { + r.URL.Path = newPath + } + + // Check if the request path matches a redirect + if newPath, ok := Redirects[r.URL.Path]; ok { + http.Redirect(w, r, newPath, http.StatusFound) + return + } + + // Call the next handler + next.ServeHTTP(w, r) + }) +} diff --git a/gno.land/pkg/gnoweb2/app.go b/gno.land/pkg/gnoweb/app.go similarity index 100% rename from gno.land/pkg/gnoweb2/app.go rename to gno.land/pkg/gnoweb/app.go diff --git a/gno.land/pkg/gnoweb/gnoweb_test.go b/gno.land/pkg/gnoweb/app_test.go similarity index 78% rename from gno.land/pkg/gnoweb/gnoweb_test.go rename to gno.land/pkg/gnoweb/app_test.go index 8c8bcca48f5..d170854e99b 100644 --- a/gno.land/pkg/gnoweb/gnoweb_test.go +++ b/gno.land/pkg/gnoweb/app_test.go @@ -4,13 +4,13 @@ import ( "fmt" "net/http" "net/http/httptest" - "strings" "testing" "github.com/gnolang/gno/gno.land/pkg/integration" "github.com/gnolang/gno/gnovm/pkg/gnoenv" "github.com/gnolang/gno/tm2/pkg/log" "github.com/gotuna/gotuna/test/assert" + "github.com/stretchr/testify/require" ) func TestRoutes(t *testing.T) { @@ -26,8 +26,8 @@ func TestRoutes(t *testing.T) { }{ {"/", ok, "Welcome"}, // assert / gives 200 (OK). assert / contains "Welcome". {"/about", ok, "blockchain"}, - {"/r/gnoland/blog", ok, ""}, // whatever content - {"/r/gnoland/blog$help", ok, "exposed"}, + {"/r/gnoland/blogs", ok, ""}, // whatever content + {"/r/gnoland/blog$help", ok, "AdminSetAdminAddr"}, {"/r/gnoland/blog/", ok, "admin.gno"}, {"/r/gnoland/blog/admin.gno", ok, "func "}, {"/r/gnoland/blog$help&func=Render", ok, "Render(...)"}, @@ -61,20 +61,21 @@ func TestRoutes(t *testing.T) { node, remoteAddr := integration.TestingInMemoryNode(t, log.NewTestingLogger(t), config) defer node.Stop() - cfg := NewDefaultConfig() + cfg := NewDefaultAppConfig() + cfg.Remote = remoteAddr logger := log.NewTestingLogger(t) // set the `remoteAddr` of the client to the listening address of the // node, which is randomly assigned. - cfg.RemoteAddr = remoteAddr - app := MakeApp(logger, cfg) + router, err := MakeRouterApp(logger, cfg) + require.NoError(t, err) for _, r := range routes { t.Run(fmt.Sprintf("test route %s", r.route), func(t *testing.T) { request := httptest.NewRequest(http.MethodGet, r.route, nil) response := httptest.NewRecorder() - app.Router.ServeHTTP(response, request) + router.ServeHTTP(response, request) assert.Equal(t, r.status, response.Code) assert.Contains(t, response.Body.String(), r.substring) }) @@ -110,35 +111,36 @@ func TestAnalytics(t *testing.T) { node, remoteAddr := integration.TestingInMemoryNode(t, log.NewTestingLogger(t), config) defer node.Stop() - cfg := NewDefaultConfig() - cfg.RemoteAddr = remoteAddr + cfg := NewDefaultAppConfig() + cfg.Remote = remoteAddr logger := log.NewTestingLogger(t) t.Run("with", func(t *testing.T) { for _, route := range routes { t.Run(route, func(t *testing.T) { - ccfg := cfg // clone config - ccfg.WithAnalytics = true - app := MakeApp(logger, ccfg) + // ccfg.WithAnalytics = true + router, err := MakeRouterApp(logger, cfg) + require.NoError(t, err) + request := httptest.NewRequest(http.MethodGet, route, nil) response := httptest.NewRecorder() - app.Router.ServeHTTP(response, request) + router.ServeHTTP(response, request) assert.Contains(t, response.Body.String(), "sa.gno.services") }) } }) - t.Run("without", func(t *testing.T) { - for _, route := range routes { - t.Run(route, func(t *testing.T) { - ccfg := cfg // clone config - ccfg.WithAnalytics = false - app := MakeApp(logger, ccfg) - request := httptest.NewRequest(http.MethodGet, route, nil) - response := httptest.NewRecorder() - app.Router.ServeHTTP(response, request) - assert.Equal(t, strings.Contains(response.Body.String(), "sa.gno.services"), false) - }) - } - }) + // t.Run("without", func(t *testing.T) { + // for _, route := range routes { + // t.Run(route, func(t *testing.T) { + // ccfg := cfg // clone config + // ccfg.WithAnalytics = false + // app := MakeApp(logger, ccfg) + // request := httptest.NewRequest(http.MethodGet, route, nil) + // response := httptest.NewRecorder() + // app.Router.ServeHTTP(response, request) + // assert.Equal(t, strings.Contains(response.Body.String(), "sa.gno.services"), false) + // }) + // } + // }) } diff --git a/gno.land/pkg/gnoweb2/components/breadcrumb.go b/gno.land/pkg/gnoweb/components/breadcrumb.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/breadcrumb.go rename to gno.land/pkg/gnoweb/components/breadcrumb.go diff --git a/gno.land/pkg/gnoweb2/components/breadcrumb.gohtml b/gno.land/pkg/gnoweb/components/breadcrumb.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/breadcrumb.gohtml rename to gno.land/pkg/gnoweb/components/breadcrumb.gohtml diff --git a/gno.land/pkg/gnoweb2/components/help.go b/gno.land/pkg/gnoweb/components/help.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/help.go rename to gno.land/pkg/gnoweb/components/help.go diff --git a/gno.land/pkg/gnoweb2/components/help.gohtml b/gno.land/pkg/gnoweb/components/help.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/help.gohtml rename to gno.land/pkg/gnoweb/components/help.gohtml diff --git a/gno.land/pkg/gnoweb2/components/index.go b/gno.land/pkg/gnoweb/components/index.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/index.go rename to gno.land/pkg/gnoweb/components/index.go diff --git a/gno.land/pkg/gnoweb2/components/index.gohtml b/gno.land/pkg/gnoweb/components/index.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/index.gohtml rename to gno.land/pkg/gnoweb/components/index.gohtml diff --git a/gno.land/pkg/gnoweb2/components/logosvg.gohtml b/gno.land/pkg/gnoweb/components/logosvg.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/logosvg.gohtml rename to gno.land/pkg/gnoweb/components/logosvg.gohtml diff --git a/gno.land/pkg/gnoweb2/components/realm.go b/gno.land/pkg/gnoweb/components/realm.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/realm.go rename to gno.land/pkg/gnoweb/components/realm.go diff --git a/gno.land/pkg/gnoweb2/components/realm.gohtml b/gno.land/pkg/gnoweb/components/realm.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/realm.gohtml rename to gno.land/pkg/gnoweb/components/realm.gohtml diff --git a/gno.land/pkg/gnoweb2/components/source.go b/gno.land/pkg/gnoweb/components/source.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/source.go rename to gno.land/pkg/gnoweb/components/source.go diff --git a/gno.land/pkg/gnoweb2/components/source.gohtml b/gno.land/pkg/gnoweb/components/source.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/source.gohtml rename to gno.land/pkg/gnoweb/components/source.gohtml diff --git a/gno.land/pkg/gnoweb2/components/spritesvg.gohtml b/gno.land/pkg/gnoweb/components/spritesvg.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/spritesvg.gohtml rename to gno.land/pkg/gnoweb/components/spritesvg.gohtml diff --git a/gno.land/pkg/gnoweb2/components/status.gohtml b/gno.land/pkg/gnoweb/components/status.gohtml similarity index 100% rename from gno.land/pkg/gnoweb2/components/status.gohtml rename to gno.land/pkg/gnoweb/components/status.gohtml diff --git a/gno.land/pkg/gnoweb2/components/template.go b/gno.land/pkg/gnoweb/components/template.go similarity index 100% rename from gno.land/pkg/gnoweb2/components/template.go rename to gno.land/pkg/gnoweb/components/template.go diff --git a/gno.land/pkg/gnoweb2/formater.go b/gno.land/pkg/gnoweb/formater.go similarity index 100% rename from gno.land/pkg/gnoweb2/formater.go rename to gno.land/pkg/gnoweb/formater.go diff --git a/gno.land/pkg/gnoweb2/frontend/css/input.css b/gno.land/pkg/gnoweb/frontend/css/input.css similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/css/input.css rename to gno.land/pkg/gnoweb/frontend/css/input.css diff --git a/gno.land/pkg/gnoweb2/frontend/css/tx.config.js b/gno.land/pkg/gnoweb/frontend/css/tx.config.js similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/css/tx.config.js rename to gno.land/pkg/gnoweb/frontend/css/tx.config.js diff --git a/gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts b/gno.land/pkg/gnoweb/frontend/js/realmhelp.ts similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/js/realmhelp.ts rename to gno.land/pkg/gnoweb/frontend/js/realmhelp.ts diff --git a/gno.land/pkg/gnoweb2/frontend/js/searchbar.ts b/gno.land/pkg/gnoweb/frontend/js/searchbar.ts similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/js/searchbar.ts rename to gno.land/pkg/gnoweb/frontend/js/searchbar.ts diff --git a/gno.land/pkg/gnoweb/static/img/favicon.ico b/gno.land/pkg/gnoweb/frontend/static/favicon.ico similarity index 100% rename from gno.land/pkg/gnoweb/static/img/favicon.ico rename to gno.land/pkg/gnoweb/frontend/static/favicon.ico diff --git a/gno.land/pkg/gnoweb2/frontend/static/fonts/intervar/Inter.var.woff2 b/gno.land/pkg/gnoweb/frontend/static/fonts/intervar/Inter.var.woff2 similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/fonts/intervar/Inter.var.woff2 rename to gno.land/pkg/gnoweb/frontend/static/fonts/intervar/Inter.var.woff2 diff --git a/gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff b/gno.land/pkg/gnoweb/frontend/static/fonts/roboto/roboto-mono-normal.woff similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff rename to gno.land/pkg/gnoweb/frontend/static/fonts/roboto/roboto-mono-normal.woff diff --git a/gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff2 b/gno.land/pkg/gnoweb/frontend/static/fonts/roboto/roboto-mono-normal.woff2 similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/fonts/roboto/roboto-mono-normal.woff2 rename to gno.land/pkg/gnoweb/frontend/static/fonts/roboto/roboto-mono-normal.woff2 diff --git a/gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg b/gno.land/pkg/gnoweb/frontend/static/imgs/gnoland.svg similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/imgs/gnoland.svg rename to gno.land/pkg/gnoweb/frontend/static/imgs/gnoland.svg diff --git a/gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js b/gno.land/pkg/gnoweb/frontend/static/js/realmhelp.js similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/js/realmhelp.js rename to gno.land/pkg/gnoweb/frontend/static/js/realmhelp.js diff --git a/gno.land/pkg/gnoweb/gnoweb.go b/gno.land/pkg/gnoweb/gnoweb.go deleted file mode 100644 index 40d027d84b9..00000000000 --- a/gno.land/pkg/gnoweb/gnoweb.go +++ /dev/null @@ -1,608 +0,0 @@ -package gnoweb - -import ( - "bytes" - "embed" - "encoding/json" - "errors" - "fmt" - "io" - "io/fs" - "log/slog" - "net/http" - "net/url" - "os" - "path/filepath" - "regexp" - "runtime" - "strings" - "time" - - "github.com/gnolang/gno/gnovm" - "github.com/gnolang/gno/tm2/pkg/amino" - abci "github.com/gnolang/gno/tm2/pkg/bft/abci/types" - "github.com/gnolang/gno/tm2/pkg/bft/rpc/client" - "github.com/gorilla/mux" - "github.com/gotuna/gotuna" - - // for static files - "github.com/gnolang/gno/gno.land/pkg/gnoweb/static" - "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types - // "github.com/gnolang/gno/tm2/pkg/sdk" // for baseapp (info, status) -) - -const ( - qFileStr = "vm/qfile" - gnowebArgsSeparator = "$" - urlQuerySeparator = "?" -) - -//go:embed views/* -var defaultViewsFiles embed.FS - -type Config struct { - RemoteAddr string - CaptchaSite string - FaucetURL string - ViewsDir string - HelpChainID string - HelpRemote string - WithAnalytics bool - WithHTML bool -} - -func NewDefaultConfig() Config { - return Config{ - RemoteAddr: "127.0.0.1:26657", - CaptchaSite: "", - FaucetURL: "http://localhost:5050", - ViewsDir: "", - HelpChainID: "dev", - HelpRemote: "127.0.0.1:26657", - WithAnalytics: false, - WithHTML: false, - } -} - -func MakeApp(logger *slog.Logger, cfg Config) gotuna.App { - var viewFiles fs.FS - - // Get specific views directory if specified - if cfg.ViewsDir != "" { - viewFiles = os.DirFS(cfg.ViewsDir) - } else { - // Get embed views - var err error - viewFiles, err = fs.Sub(defaultViewsFiles, "views") - if err != nil { - panic("unable to get views directory from embed fs: " + err.Error()) - } - } - - app := gotuna.App{ - ViewFiles: viewFiles, - Router: gotuna.NewMuxRouter(), - Static: static.EmbeddedStatic, - } - - for from, to := range Aliases { - app.Router.Handle(from, handlerRealmAlias(logger, app, &cfg, to)) - } - - for from, to := range Redirects { - app.Router.Handle(from, handlerRedirect(logger, app, &cfg, to)) - } - // realm routes - // NOTE: see rePathPart. - app.Router.Handle("/r/{rlmname:[a-z][a-z0-9_]*(?:/[a-z][a-z0-9_]*)+}/{filename:(?:(?:.*\\.(?:gno|md|txt|mod)$)|(?:LICENSE$))?}", handlerRealmFile(logger, app, &cfg)) - app.Router.Handle("/r/{rlmname:[a-z][a-z0-9_]*(?:/[a-z][a-z0-9_]*)+}{args:(?:\\$.*)?}", handlerRealmMain(logger, app, &cfg)) - app.Router.Handle("/r/{rlmname:[a-z][a-z0-9_]*(?:/[a-z][a-z0-9_]*)+}:{querystr:[^$]*}{args:(?:\\$.*)?}", handlerRealmRender(logger, app, &cfg)) - app.Router.Handle("/p/{filepath:.*}", handlerPackageFile(logger, app, &cfg)) - - // other - app.Router.Handle("/faucet", handlerFaucet(logger, app, &cfg)) - app.Router.Handle("/static/{path:.+}", handlerStaticFile(logger, app, &cfg)) - app.Router.Handle("/favicon.ico", handlerFavicon(logger, app, &cfg)) - - // api - app.Router.Handle("/status.json", handlerStatusJSON(logger, app, &cfg)) - - app.Router.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - path := r.RequestURI - handleNotFound(logger, app, &cfg, path, w, r) - }) - return app -} - -var ( - inlineCodePattern = regexp.MustCompile("`[^`]*`") - htmlTagPattern = regexp.MustCompile(`<\/?\w+[^>]*?>`) -) - -func sanitizeContent(cfg *Config, content string) string { - if cfg.WithHTML { - return content - } - - placeholders := map[string]string{} - contentWithPlaceholders := inlineCodePattern.ReplaceAllStringFunc(content, func(match string) string { - placeholder := fmt.Sprintf("__GNOMDCODE_%d__", len(placeholders)) - placeholders[placeholder] = match - return placeholder - }) - - sanitizedContent := htmlTagPattern.ReplaceAllString(contentWithPlaceholders, "") - - if len(placeholders) > 0 { - for placeholder, code := range placeholders { - sanitizedContent = strings.ReplaceAll(sanitizedContent, placeholder, code) - } - } - - return sanitizedContent -} - -// handlerRealmAlias is used to render official pages from realms. -// url is intended to be shorter. -// UX is intended to be more minimalistic. -// A link to the realm realm is added. -func handlerRealmAlias(logger *slog.Logger, app gotuna.App, cfg *Config, rlmpath string) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - rlmfullpath := "gno.land" + rlmpath - querystr := "" // XXX: "?gnoweb-alias=1" - parts := strings.Split(rlmpath, ":") - switch len(parts) { - case 1: // continue - case 2: // r/realm:querystr - rlmfullpath = "gno.land" + parts[0] - querystr = parts[1] + querystr - default: - panic("should not happen") - } - rlmname := strings.TrimPrefix(rlmfullpath, "gno.land/r/") - qpath := "vm/qrender" - data := []byte(fmt.Sprintf("%s:%s", rlmfullpath, querystr)) - res, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - writeError(logger, w, fmt.Errorf("gnoweb failed to query gnoland: %w", err)) - return - } - - queryParts := strings.Split(querystr, "/") - pathLinks := []pathLink{} - for i, part := range queryParts { - pathLinks = append(pathLinks, pathLink{ - URL: "/r/" + rlmname + ":" + strings.Join(queryParts[:i+1], "/"), - Text: part, - }) - } - - tmpl := app.NewTemplatingEngine() - // XXX: extract title from realm's output - // XXX: extract description from realm's output - tmpl.Set("RealmName", rlmname) - tmpl.Set("RealmPath", rlmpath) - tmpl.Set("Query", querystr) - tmpl.Set("PathLinks", pathLinks) - tmpl.Set("Contents", sanitizeContent(cfg, string(res.Data))) - tmpl.Set("Config", cfg) - tmpl.Set("IsAlias", true) - tmpl.Render(w, r, "realm_render.html", "funcs.html") - }) -} - -func handlerFaucet(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - app.NewTemplatingEngine(). - Set("Config", cfg). - Render(w, r, "faucet.html", "funcs.html") - }) -} - -func handlerStatusJSON(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - startedAt := time.Now() - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - var ret struct { - Gnoland struct { - Connected bool `json:"connected"` - Error *string `json:"error,omitempty"` - Height *int64 `json:"height,omitempty"` - // processed txs - // active connections - - Version *string `json:"version,omitempty"` - // Uptime *float64 `json:"uptime-seconds,omitempty"` - // Goarch *string `json:"goarch,omitempty"` - // Goos *string `json:"goos,omitempty"` - // GoVersion *string `json:"go-version,omitempty"` - // NumCPU *int `json:"num_cpu,omitempty"` - } `json:"gnoland"` - Website struct { - // Version string `json:"version"` - Uptime float64 `json:"uptime-seconds"` - Goarch string `json:"goarch"` - Goos string `json:"goos"` - GoVersion string `json:"go-version"` - NumCPU int `json:"num_cpu"` - } `json:"website"` - } - ret.Website.Uptime = time.Since(startedAt).Seconds() - ret.Website.Goarch = runtime.GOARCH - ret.Website.Goos = runtime.GOOS - ret.Website.NumCPU = runtime.NumCPU() - ret.Website.GoVersion = runtime.Version() - - ret.Gnoland.Connected = true - res, err := makeRequest(logger, cfg, ".app/version", []byte{}) - if err != nil { - ret.Gnoland.Connected = false - errmsg := err.Error() - ret.Gnoland.Error = &errmsg - } else { - version := string(res.Value) - ret.Gnoland.Version = &version - ret.Gnoland.Height = &res.Height - } - - out, _ := json.MarshalIndent(ret, "", " ") - w.Header().Set("Content-Type", "application/json") - w.Write(out) - }) -} - -func handlerRedirect(logger *slog.Logger, app gotuna.App, cfg *Config, to string) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - http.Redirect(w, r, to, http.StatusFound) - tmpl := app.NewTemplatingEngine() - tmpl.Set("To", to) - tmpl.Set("Config", cfg) - tmpl.Render(w, r, "redirect.html", "funcs.html") - }) -} - -func handlerRealmMain(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - args, err := parseGnowebArgs(r.RequestURI) - if err != nil { - writeError(logger, w, err) - return - } - - vars := mux.Vars(r) - rlmname := vars["rlmname"] - rlmpath := "gno.land/r/" + rlmname - - logger.Info("handling", "name", rlmname, "path", rlmpath) - if args.Has("help") { - // Render function helper. - funcName := args.Get("func") - qpath := "vm/qfuncs" - data := []byte(rlmpath) - res, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - writeError(logger, w, fmt.Errorf("request failed: %w", err)) - return - } - var fsigs vm.FunctionSignatures - amino.MustUnmarshalJSON(res.Data, &fsigs) - // Fill fsigs with query parameters. - for i := range fsigs { - fsig := &(fsigs[i]) - for j := range fsig.Params { - param := &(fsig.Params[j]) - value := args.Get(param.Name) - param.Value = value - } - } - // Render template. - tmpl := app.NewTemplatingEngine() - tmpl.Set("FuncName", funcName) - tmpl.Set("RealmPath", rlmpath) - tmpl.Set("DirPath", pathOf(rlmpath)) - tmpl.Set("FunctionSignatures", fsigs) - tmpl.Set("Config", cfg) - tmpl.Render(w, r, "realm_help.html", "funcs.html") - } else { - // Ensure realm exists. TODO optimize. - qpath := qFileStr - data := []byte(rlmpath) - _, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - writeError(logger, w, errors.New("error querying realm package")) - return - } - // Render blank query path, /r/REALM:. - handleRealmRender(logger, app, cfg, w, r) - } - }) -} - -type pathLink struct { - URL string - Text string -} - -func handlerRealmRender(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - handleRealmRender(logger, app, cfg, w, r) - }) -} - -func handleRealmRender(logger *slog.Logger, app gotuna.App, cfg *Config, w http.ResponseWriter, r *http.Request) { - gnowebArgs, err := parseGnowebArgs(r.RequestURI) - if err != nil { - writeError(logger, w, err) - return - } - - queryArgs, err := parseQueryArgs(r.RequestURI) - if err != nil { - writeError(logger, w, err) - return - } - - var urlQuery, gnowebQuery string - if len(queryArgs) > 0 { - urlQuery = urlQuerySeparator + queryArgs.Encode() - } - if len(gnowebArgs) > 0 { - gnowebQuery = gnowebArgsSeparator + gnowebArgs.Encode() - } - - vars := mux.Vars(r) - rlmname := vars["rlmname"] - rlmpath := "gno.land/r/" + rlmname - querystr := vars["querystr"] - if r.URL.Path == "/r/"+rlmname+":" { - // Redirect to /r/REALM if querypath is empty. - http.Redirect(w, r, "/r/"+rlmname+urlQuery+gnowebQuery, http.StatusFound) - return - } - - qpath := "vm/qrender" - data := []byte(fmt.Sprintf("%s:%s", rlmpath, querystr+urlQuery)) - res, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - // XXX hack - if strings.Contains(err.Error(), "Render not declared") { - res = &abci.ResponseQuery{} - res.Data = []byte("realm package has no Render() function") - } else { - writeError(logger, w, err) - return - } - } - - dirdata := []byte(rlmpath) - dirres, err := makeRequest(logger, cfg, qFileStr, dirdata) - if err != nil { - writeError(logger, w, err) - return - } - hasReadme := bytes.Contains(append(dirres.Data, '\n'), []byte("README.md\n")) - - // linkify querystr. - queryParts := strings.Split(querystr, "/") - pathLinks := []pathLink{} - for i, part := range queryParts { - rlmpath := strings.Join(queryParts[:i+1], "/") - - // Add URL query arguments to the last breadcrumb item's URL - if i+1 == len(queryParts) { - rlmpath = rlmpath + urlQuery + gnowebQuery - } - - pathLinks = append(pathLinks, pathLink{ - URL: "/r/" + rlmname + ":" + rlmpath, - Text: part, - }) - } - - // Render template. - tmpl := app.NewTemplatingEngine() - // XXX: extract title from realm's output - // XXX: extract description from realm's output - tmpl.Set("RealmName", rlmname) - tmpl.Set("RealmPath", rlmpath) - tmpl.Set("Query", querystr) - tmpl.Set("PathLinks", pathLinks) - tmpl.Set("Contents", sanitizeContent(cfg, string(res.Data))) - tmpl.Set("Config", cfg) - tmpl.Set("HasReadme", hasReadme) - tmpl.Render(w, r, "realm_render.html", "funcs.html") -} - -func handlerRealmFile(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - diruri := "gno.land/r/" + vars["rlmname"] - filename := vars["filename"] - renderPackageFile(logger, app, cfg, w, r, diruri, filename) - }) -} - -func handlerPackageFile(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - pkgpath := "gno.land/p/" + vars["filepath"] - diruri, filename := gnovm.SplitFilepath(pkgpath) - if filename == "" && diruri == pkgpath { - // redirect to diruri + "/" - http.Redirect(w, r, "/p/"+vars["filepath"]+"/", http.StatusFound) - return - } - renderPackageFile(logger, app, cfg, w, r, diruri, filename) - }) -} - -func renderPackageFile(logger *slog.Logger, app gotuna.App, cfg *Config, w http.ResponseWriter, r *http.Request, diruri string, filename string) { - if filename == "" { - // Request is for a folder. - qpath := qFileStr - data := []byte(diruri) - res, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - writeError(logger, w, err) - return - } - files := strings.Split(string(res.Data), "\n") - // Render template. - tmpl := app.NewTemplatingEngine() - tmpl.Set("DirURI", diruri) - tmpl.Set("DirPath", pathOf(diruri)) - tmpl.Set("Files", files) - tmpl.Set("Config", cfg) - tmpl.Render(w, r, "package_dir.html", "funcs.html") - } else { - // Request is for a file. - filepath := diruri + "/" + filename - qpath := qFileStr - data := []byte(filepath) - res, err := makeRequest(logger, cfg, qpath, data) - if err != nil { - writeError(logger, w, err) - return - } - // Render template. - tmpl := app.NewTemplatingEngine() - tmpl.Set("DirURI", diruri) - tmpl.Set("DirPath", pathOf(diruri)) - tmpl.Set("FileName", filename) - tmpl.Set("FileContents", string(res.Data)) - tmpl.Set("Config", cfg) - tmpl.Render(w, r, "package_file.html", "funcs.html") - } -} - -func makeRequest(log *slog.Logger, cfg *Config, qpath string, data []byte) (res *abci.ResponseQuery, err error) { - opts2 := client.ABCIQueryOptions{ - // Height: height, XXX - // Prove: false, XXX - } - remote := cfg.RemoteAddr - cli, err := client.NewHTTPClient(remote) - if err != nil { - return nil, fmt.Errorf("unable to create HTTP client, %w", err) - } - - qres, err := cli.ABCIQueryWithOptions( - qpath, data, opts2) - if err != nil { - log.Error("request error", "path", qpath, "error", err) - return nil, fmt.Errorf("unable to query path %q: %w", qpath, err) - } - if qres.Response.Error != nil { - log.Error("response error", "path", qpath, "log", qres.Response.Log) - return nil, qres.Response.Error - } - return &qres.Response, nil -} - -func handlerStaticFile(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - fs := http.FS(app.Static) - fileapp := http.StripPrefix("/static", http.FileServer(fs)) - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - fpath := filepath.Clean(vars["path"]) - f, err := fs.Open(fpath) - if os.IsNotExist(err) { - handleNotFound(logger, app, cfg, fpath, w, r) - return - } - stat, err := f.Stat() - if err != nil || stat.IsDir() { - handleNotFound(logger, app, cfg, fpath, w, r) - return - } - - // TODO: ModTime doesn't work for embed? - // w.Header().Set("ETag", fmt.Sprintf("%x", stat.ModTime().UnixNano())) - // w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%s", "31536000")) - fileapp.ServeHTTP(w, r) - }) -} - -func handlerFavicon(logger *slog.Logger, app gotuna.App, cfg *Config) http.Handler { - fs := http.FS(app.Static) - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fpath := "img/favicon.ico" - f, err := fs.Open(fpath) - if os.IsNotExist(err) { - handleNotFound(logger, app, cfg, fpath, w, r) - return - } - w.Header().Set("Content-Type", "image/x-icon") - w.Header().Set("Cache-Control", "public, max-age=604800") // 7d - io.Copy(w, f) - }) -} - -func handleNotFound(logger *slog.Logger, app gotuna.App, cfg *Config, path string, w http.ResponseWriter, r *http.Request) { - // decode path for non-ascii characters - decodedPath, err := url.PathUnescape(path) - if err != nil { - logger.Error("failed to decode path", "error", err) - decodedPath = path - } - w.WriteHeader(http.StatusNotFound) - app.NewTemplatingEngine(). - Set("title", "Not found"). - Set("path", decodedPath). - Set("Config", cfg). - Render(w, r, "404.html", "funcs.html") -} - -func writeError(logger *slog.Logger, w http.ResponseWriter, err error) { - if details := errors.Unwrap(err); details != nil { - logger.Error("handler", "error", err, "details", details) - } else { - logger.Error("handler", "error", err) - } - - // XXX: writeError should return an error page template. - w.WriteHeader(500) - w.Write([]byte(err.Error())) -} - -func pathOf(diruri string) string { - parts := strings.Split(diruri, "/") - if parts[0] == "gno.land" { - return "/" + strings.Join(parts[1:], "/") - } - - panic(fmt.Sprintf("invalid dir-URI %q", diruri)) -} - -// parseQueryArgs parses URL query arguments that are not specific to gnoweb. -// These are the standard arguments that comes after the "?" symbol and before -// the special "$" symbol. The "$" symbol can be used within public query -// arguments by using its encoded representation "%24". -func parseQueryArgs(rawURL string) (url.Values, error) { - if i := strings.Index(rawURL, gnowebArgsSeparator); i != -1 { - rawURL = rawURL[:i] - } - - u, err := url.Parse(rawURL) - if err != nil { - return url.Values{}, fmt.Errorf("invalid query arguments: %w", err) - } - return u.Query(), nil -} - -// parseGnowebArgs parses URL query arguments that are specific to gnoweb. -// These arguments are indicated by using the "$" symbol followed by a query -// string with the arguments. -func parseGnowebArgs(rawURL string) (url.Values, error) { - i := strings.Index(rawURL, gnowebArgsSeparator) - if i == -1 { - return url.Values{}, nil - } - - values, err := url.ParseQuery(rawURL[i+1:]) - if err != nil { - return url.Values{}, fmt.Errorf("invalid gnoweb arguments: %w", err) - } - return values, nil -} diff --git a/gno.land/pkg/gnoweb2/handler.go b/gno.land/pkg/gnoweb/handler.go similarity index 99% rename from gno.land/pkg/gnoweb2/handler.go rename to gno.land/pkg/gnoweb/handler.go index 796a4ebfd68..5acb894b294 100644 --- a/gno.land/pkg/gnoweb2/handler.go +++ b/gno.land/pkg/gnoweb/handler.go @@ -14,7 +14,7 @@ import ( "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/lexers" - "github.com/gnolang/gno/gno.land/pkg/gnoweb2/components" + "github.com/gnolang/gno/gno.land/pkg/gonoweb/components" "github.com/gnolang/gno/gno.land/pkg/sdk/vm" // for error types ) diff --git a/gno.land/pkg/gnoweb2/frontend/static/favicon.ico b/gno.land/pkg/gnoweb/public/favicon.ico similarity index 100% rename from gno.land/pkg/gnoweb2/frontend/static/favicon.ico rename to gno.land/pkg/gnoweb/public/favicon.ico diff --git a/gno.land/pkg/gnoweb2/public/fonts/intervar/Inter.var.woff2 b/gno.land/pkg/gnoweb/public/fonts/intervar/Inter.var.woff2 similarity index 100% rename from gno.land/pkg/gnoweb2/public/fonts/intervar/Inter.var.woff2 rename to gno.land/pkg/gnoweb/public/fonts/intervar/Inter.var.woff2 diff --git a/gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff b/gno.land/pkg/gnoweb/public/fonts/roboto/roboto-mono-normal.woff similarity index 100% rename from gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff rename to gno.land/pkg/gnoweb/public/fonts/roboto/roboto-mono-normal.woff diff --git a/gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff2 b/gno.land/pkg/gnoweb/public/fonts/roboto/roboto-mono-normal.woff2 similarity index 100% rename from gno.land/pkg/gnoweb2/public/fonts/roboto/roboto-mono-normal.woff2 rename to gno.land/pkg/gnoweb/public/fonts/roboto/roboto-mono-normal.woff2 diff --git a/gno.land/pkg/gnoweb2/public/imgs/gnoland.svg b/gno.land/pkg/gnoweb/public/imgs/gnoland.svg similarity index 100% rename from gno.land/pkg/gnoweb2/public/imgs/gnoland.svg rename to gno.land/pkg/gnoweb/public/imgs/gnoland.svg diff --git a/gno.land/pkg/gnoweb2/public/js/realmhelp.js b/gno.land/pkg/gnoweb/public/js/realmhelp.js similarity index 100% rename from gno.land/pkg/gnoweb2/public/js/realmhelp.js rename to gno.land/pkg/gnoweb/public/js/realmhelp.js diff --git a/gno.land/pkg/gnoweb2/public/js/searchbar.js b/gno.land/pkg/gnoweb/public/js/searchbar.js similarity index 100% rename from gno.land/pkg/gnoweb2/public/js/searchbar.js rename to gno.land/pkg/gnoweb/public/js/searchbar.js diff --git a/gno.land/pkg/gnoweb2/public/styles.css b/gno.land/pkg/gnoweb/public/styles.css similarity index 100% rename from gno.land/pkg/gnoweb2/public/styles.css rename to gno.land/pkg/gnoweb/public/styles.css diff --git a/gno.land/pkg/gnoweb2/static.go b/gno.land/pkg/gnoweb/static.go similarity index 100% rename from gno.land/pkg/gnoweb2/static.go rename to gno.land/pkg/gnoweb/static.go diff --git a/gno.land/pkg/gnoweb/static/css/app.css b/gno.land/pkg/gnoweb/static/css/app.css deleted file mode 100644 index c10fc8ec0e0..00000000000 --- a/gno.land/pkg/gnoweb/static/css/app.css +++ /dev/null @@ -1,862 +0,0 @@ -/**** ROBOTO ****/ - -@font-face { - font-family: "Roboto Mono"; - font-style: normal; - font-weight: normal; - font-display: swap; - src: local("Roboto Mono Regular"), url("/static/font/roboto/RobotoMono-Regular.woff") format("woff"); - } - - @font-face { - font-family: "Roboto Mono"; - font-style: italic; - font-weight: normal; - font-display: swap; - src: local("Roboto Mono Italic"), url("/static/font/roboto/RobotoMono-Italic.woff") format("woff"); - } - - @font-face { - font-family: "Roboto Mono Bold"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local("Roboto Mono Bold"), url("/static/font/roboto/RobotoMono-Bold.woff") format("woff"); - } - - @font-face { - font-family: "Roboto Mono"; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local("Roboto Mono Bold Italic"), url("/static/font/roboto/RobotoMono-BoldItalic.woff") format("woff"); - } - - -/*** DARK/LIGHT THEME COLORS ***/ - -html:not([data-theme="dark"]), -html[data-theme="light"] { - --background-color: #eee; - --input-background-color: #eee; - --text-color: #000; - --link-color: #25172a; - --muted-color: #757575; - --border-color: #d7d9db; - --icon-color: #000; - - --quote-background: #ddd; - --quote-2-background: #aaa4; - --code-background: #d7d9db; - --header-background: #373737; - --header-forground: #ffffff; - --logo-hat: #ffffff; - --logo-beard: #808080; - - --realm-help-background-color: #d7d9db9e; - --realm-help-odd-background-color: #d7d9db45; - --realm-help-code-color: #5d5d5d; - - --highlight-color: #2f3337; - --highlight-bg: #f6f6f6; - --highlight-color: #2f3337; - --highlight-comment: #656e77; - --highlight-keyword: #015692; - --highlight-attribute: #015692; - --highlight-symbol: #803378; - --highlight-namespace: #b75501; - --highlight-keyword: #015692; - --highlight-variable: #54790d; - --highlight-keyword: #015692; - --highlight-literal: #b75501; - --highlight-punctuation: #535a60; - --highlight-variable: #54790d; - --highlight-deletion: #c02d2e; - --highlight-addition: #2f6f44; -} - -html[data-theme="dark"] { - --background-color: #1e1e1e; - --input-background-color: #393939; - --text-color: #c7c7c7; - --link-color: #c7c7c7; - --muted-color: #737373; - --border-color: #606060; - --icon-color: #dddddd; - - --quote-background: #404040; - --quote-2-background: #555555; - --code-background: #606060; - --header-background: #373737; - --header-forground: #ffffff; - --logo-hat: #ffffff; - --logo-beard: #808080; - - --realm-help-background-color: #45454545; - --realm-help-odd-background-color: #4545459e; - --realm-help-code-color: #b6b6b6; - - --highlight-color: #ffffff; - --highlight-bg: #1c1b1b; - --highlight-color: #ffffff; - --highlight-comment: #999999; - --highlight-keyword: #88aece; - --highlight-attribute: #88aece; - --highlight-symbol: #c59bc1; - --highlight-namespace: #f08d49; - --highlight-keyword: #88aece; - --highlight-variable: #b5bd68; - --highlight-keyword: #88aece; - --highlight-literal: #f08d49; - --highlight-punctuation: #cccccc; - --highlight-variable: #b5bd68; - --highlight-deletion: #de7176; - --highlight-addition: #76c490; -} - -.logo-wording path {fill: var(--header-forground, #ffffff); } -.logo-beard { fill: var(--logo-beard, #808080); } -.logo-hat {fill: var(--logo-hat, #ffffff); } - -#theme-toggle { - cursor: pointer; - display: inline-block; - padding: 0; - color: var(--header-forground, #ffffff); -} - -html[data-theme="dark"] #theme-toggle-moon, -html[data-theme="light"] #theme-toggle-sun { - display: none; -} - -/*** BASE HTML ELEMENTS ***/ - -* { - box-sizing: border-box; -} - -html { - font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; - -webkit-font-feature-settings: "kern" on, "liga" on, "calt" on, "zero" on; - text-size-adjust: 100%; - -moz-osx-font-smoothing: grayscale; - font-smoothing: antialiased; - font-variant-ligatures: contextual common-ligatures; - font-kerning: normal; - text-rendering: optimizeLegibility; - -moz-text-size-adjust: none; - -webkit-text-size-adjust: none; - text-size-adjust: none; -} - -html, -body { - padding: 0; - margin: 0; - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", - "Segoe UI Symbol", "Noto Color Emoji"; background-color: var(--background-color, #eee); - color: var(--text-color, #000); - font-size: 15px; - transition: 0.25s all ease; -} - -h1, -h2, -h3, -h4, -nav { - - font-weight: 600; - letter-spacing: 0.08rem; -} - -:is(h1, h2, h3, h4) a { - text-decoration: none; -} - -h1 { - text-align: center; - font-size: 2rem; - margin-block: 4.2rem 2rem; -} - -h2 { - font-size: 1.625rem; - margin-block: 3.4rem 1.2rem; - line-height: 1.4; -} - -h3 { - font-size: 1.467rem; - margin-block: 2.6rem 1rem; -} - -p { - font-size: 1rem; - margin-block: 1.2rem; - line-height: 1.4; -} - -p:last-child:has(a:only-child) { - margin-block-start: 0.8rem; -} -.stack > p:last-child:has(a:only-child) { - margin-block-start: 0; -} - -hr { - border: none; - height: 1px; - background: var(--border-color, #d7d9db); - width: 100%; - margin-block: 1.5rem 2rem; -} - -nav { - font-weight: 400; -} - -button { - color: var(--text-color, #000); -} - -body { - height: 100%; - width: 100%; -} - -input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -a { - color: var(--link-color, #25172a); -} - -a[href="#"] { - color: var(--muted-color, #757575); -} - -.gno-tmpl-section ul { - padding: 0; -} - -.gno-tmpl-section li , -#header li , -.footer li { - list-style: none; -} - -.gno-tmpl-section blockquote { - margin-inline: 0; -} - -li { - margin-bottom: 0.4rem; -} - -li > * { - vertical-align: middle; -} - -input { - background-color: var(--input-background-color, #eee); - border: 1px solid var(--border-color); - color: var(--text-color, #000); - width: 25em; - padding: 0.4rem 0.5rem; - max-width: 100%;x -} - -blockquote { - background-color: var(--quote-background, #ddd); -} - -blockquote blockquote { - margin: 0; - background-color: var(--quote-2-background, #aaa4); -} - -pre, code { - font-family: "Roboto Mono", "Courier New", "sans-serif"; -} -pre { - background-color: var(--code-background, #d7d9db); - margin: 0; - padding: 0.5rem; -} - -label { - margin-block-end: 0.8rem; - display: block; -} - -label > img { - margin-inline-end: 0.8rem; -} - -code { - white-space: pre-wrap; - overflow-wrap: anywhere; -} -/*** COMPOSITION ***/ -.container { - width: 100%; - max-width: 63.75rem; - margin: auto; - padding: 1.25rem; -} - -.container p > img:only-child { - max-width: 100%; -} -.gno-tmpl-page p img:only-child { - margin-inline: auto; - display: block; - max-width: 100%; -} - -.inline-list { - padding: 1rem; - display: flex; - justify-content: space-between; -} - - - -.stack, -.stack > p { - display: flex; - flex-direction: column; -} - -.stack > p { - margin: 0; -} - -.stack > a, -.stack > p > a{ - margin-block-end: 0.4rem; -} - -.column > h1, -.column > h2, -.column > h3, -.column > h4, -.column > h5, -.column > h6 { - margin-block-start: 0; -} - -.columns-2, -.columns-3 { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 3.75rem; - margin: 3.75rem auto; -} - -.footer { - text-align: center; - margin-block-start: 2rem; - background-color: var(--header-background, #d7d9db); - border-top: 1px solid var(--border-color); -} - -.footer > .logo { - display: inline-block; - margin: 1rem; - height: 1.2rem; -} - -/** 51.2rem **/ -@media screen and (min-width: 68.75rem) { - .stack, - .stack > p { - flex-direction: row; - } - .stack *:not(:first-child) { - margin-left: 3.75rem; - } - .stack > a, - .stack > p > a{ - margin-block-end: 0; - } - .columns-2 { - grid-template-columns: repeat(2, 1fr); - } - .columns-3 { - grid-template-columns: repeat(3, 1fr); - } -} - -/*** UTILITIES ***/ - -.is-hidden { - display: none; -} - -.is-muted { - color: var(--muted-color, #757575); -} - -.is-finished { - text-decoration: line-through; -} - -.is-underline { - text-decoration: underline; -} - -/*** BLOCKS ***/ -.tabs button { - border: none; - cursor: pointer; - text-decoration: underline; - padding: 0; - background: none; - color: var(--text-color, #000); -} - -.tabs button[aria-selected="true"] { - font-weight: 700; -} - -.tabs + .jumbotron { - margin-top: 2.5rem; -} -.tabs > .columns-2, -.tabs > .columns-3 { - margin-bottom: 2.5rem; -} - -.accordion-trigger { - display: block; - border: none; - cursor: pointer; - padding: 0.4rem 0; - font-size: 1.125rem; - font-weight: 700; - text-align: left; - background: none; -} - -.accordion-trigger ~ div { - padding: 0.875rem 0 2.2rem; -} - -.accordion > p { - margin-block: 0; -} -/** 51.2rem **/ -@media screen and (min-width: 68.75rem) { - .accordion .accordion-trigger ~ div { - padding: 0.875rem 0 2.2rem 2rem; - } -} - -.gor-accordion button::first-letter { - font-size: 1.5em; - color: var(--text-color, #000); -} - -.jumbotron { - border: 1px solid var(--border-color, #d7d9db); - padding: 1.4rem; - margin: 3.75rem auto; -} - -.jumbotron h1 { - text-align: left; -} - -.jumbotron > *:first-child, -.jumbotron > * > *:first-child { - margin-block-start: 0; -} - -.jumbotron > *:last-child, -.jumbotron > * > *:last-child { - margin-block-end: 0; -} - -/** 68.75rem**/ -@media screen and (min-width: 68.75rem) { - .jumbotron { - margin: 3.75rem -3.5rem; - padding: 3.5rem; - } -} - -#root { - display: flex; - flex-direction: column; - border: 1px solid var(--header-background, #d7d9db); - margin: 20px; - overflow: hidden; - /* height: calc(100vh - 40px); */ -} - -#header { - position: relative; - background-color: var(--header-background, #d7d9db); - padding: 1.333rem; - display: flex; - align-items: center; - justify-content: space-between; -} - -#header > nav { - flex-grow: 2; -} - -#header .logo { - display: flex; - align-items: center; - color: var(--link-color, #25172a); - position: absolute; - height: 2.4rem; - z-index: 2; -} - -.logo > svg { - height: 100%; -} - -#logo_path a { - text-decoration: none; -} - -#logo_path { - padding-right: 0.8rem; -} - -#logo_path a:hover { - text-decoration: underline; -} - -#realm_links a { - font-size: 0.8rem; -} - -#header_buttons { - position: relative; - width: 100%; - height: 3rem; -} - -#header_buttons nav { - height: 100%; - display: flex; - justify-content: flex-end; - align-items: center; -} - -/* enabled conditionally with