Template with echo, htmx, tailwindcss, templ
This commit is contained in:
parent
d68cf1cc8d
commit
486a445c85
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
.env
|
||||
template
|
||||
*_templ.go
|
||||
public/css/tailwind.css
|
||||
6
Makefile
Normal file
6
Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
.PHONY: build
|
||||
|
||||
build:
|
||||
templ generate
|
||||
tailwindcss -i ./tailwind.css -o ./public/css/tailwind.css
|
||||
go build -o template main.go
|
||||
44
db/db.go
Normal file
44
db/db.go
Normal file
@ -0,0 +1,44 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"log"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
type Db struct {
|
||||
*sql.DB
|
||||
}
|
||||
|
||||
type Tx struct {
|
||||
*sql.Tx
|
||||
}
|
||||
|
||||
func New(url string) (*Db, error) {
|
||||
db, err := sql.Open("postgres", url)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// test connection
|
||||
_, err = db.Exec("SELECT 1")
|
||||
if err != nil {
|
||||
log.Printf("failed to connect to database: %v", err)
|
||||
}
|
||||
|
||||
return &Db{db}, nil
|
||||
}
|
||||
|
||||
func (d *Db) Migrate() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Db) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
|
||||
tx, err := d.DB.BeginTx(ctx, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Tx{tx}, nil
|
||||
}
|
||||
55
env/env.go
vendored
Normal file
55
env/env.go
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
package env
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/namsral/flag"
|
||||
)
|
||||
|
||||
var (
|
||||
Port int
|
||||
Env string
|
||||
PublicUrl string
|
||||
CommitShortSha string
|
||||
CommitLongSha string
|
||||
PostgresUrl string
|
||||
PostgresUrlWithoutPassword string
|
||||
)
|
||||
|
||||
func Load(filenames ...string) error {
|
||||
if err := godotenv.Load(); err != nil {
|
||||
return err
|
||||
}
|
||||
flag.IntVar(&Port, "PORT", 4444, "Server port")
|
||||
flag.StringVar(&PublicUrl, "PUBLIC_URL", "", "Base URL")
|
||||
flag.StringVar(&PostgresUrl, "POSTGRES_DB", "", "PostgreSQL connection URL")
|
||||
flag.StringVar(&Env, "ENV", "development", "Build environment")
|
||||
return nil
|
||||
}
|
||||
|
||||
func Parse() {
|
||||
flag.Parse()
|
||||
CommitLongSha = execCmd("git", "rev-parse", "HEAD")
|
||||
CommitShortSha = execCmd("git", "rev-parse", "--short", "HEAD")
|
||||
if u, err := url.Parse(PostgresUrl); err == nil {
|
||||
if pw, ok := u.User.Password(); ok {
|
||||
PostgresUrlWithoutPassword = strings.Replace(PostgresUrl, fmt.Sprintf(":%s@", pw), ":*****@", 1)
|
||||
} else {
|
||||
PostgresUrlWithoutPassword = PostgresUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func execCmd(name string, args ...string) string {
|
||||
cmd := exec.Command(name, args...)
|
||||
stdout, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return strings.TrimSpace(string(stdout))
|
||||
}
|
||||
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1764316264,
|
||||
"narHash": "sha256-82L+EJU+40+FIdeG4gmUlOF1jeSwlf2AwMarrpdHF6o=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9a7b80b6f82a71ea04270d7ba11b48855681c4b0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
32
flake.nix
Normal file
32
flake.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
go
|
||||
tailwindcss_4
|
||||
gnumake
|
||||
postgresql_17
|
||||
];
|
||||
};
|
||||
|
||||
apps.default = {
|
||||
type = "app";
|
||||
program = toString (pkgs.writeShellScript "serve" ''
|
||||
# install templ if not already installed
|
||||
command -v templ > /dev/null || go install github.com/a-h/templ/cmd/templ@latest
|
||||
${pkgs.make}/bin/make build
|
||||
'');
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
512
fonts/chunky.flf
Normal file
512
fonts/chunky.flf
Normal file
@ -0,0 +1,512 @@
|
||||
flf2a$ 5 4 20 15 1
|
||||
Square by Chris Gill, 30-JUN-94 -- based on .sig of Jeb Hagan.
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@@
|
||||
__ @
|
||||
| |@
|
||||
|__|@
|
||||
|__|@
|
||||
@@
|
||||
____ @
|
||||
| | |@
|
||||
|_|_|@
|
||||
@
|
||||
@@
|
||||
_____ @
|
||||
_| | |_ @
|
||||
|_ _|@
|
||||
|_ _|@
|
||||
|__|__| @@
|
||||
__,-,__ @
|
||||
| ' '__|@
|
||||
|__ |@
|
||||
|_______|@
|
||||
|_| @@
|
||||
__ ___ @
|
||||
|__| |@
|
||||
| __|@
|
||||
|___|__|@
|
||||
@@
|
||||
__,-,__ @
|
||||
| ' '__|@
|
||||
| __|@
|
||||
|_______|@
|
||||
|_| @@
|
||||
__ @
|
||||
| |@
|
||||
|_|@
|
||||
@
|
||||
@@
|
||||
___ @
|
||||
,' _|@
|
||||
| | @
|
||||
| |_ @
|
||||
`.___|@@
|
||||
___ @
|
||||
|_ `.@
|
||||
| |@
|
||||
_| |@
|
||||
|___,'@@
|
||||
__ _ __ @
|
||||
| | | |@
|
||||
> < @
|
||||
|__|_|__|@
|
||||
@@
|
||||
__ @
|
||||
_| |_ @
|
||||
|_ _|@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
@
|
||||
__ @
|
||||
| |@
|
||||
|_|@@
|
||||
@
|
||||
______ @
|
||||
|______|@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
__ @
|
||||
|__|@
|
||||
@@
|
||||
___@
|
||||
/ /@
|
||||
,' ,' @
|
||||
/__/ @
|
||||
@@
|
||||
______ @
|
||||
| |@
|
||||
| -- |@
|
||||
|______|@
|
||||
@@
|
||||
____ @
|
||||
|_ | @
|
||||
_| |_ @
|
||||
|______|@
|
||||
@@
|
||||
______ @
|
||||
|__ |@
|
||||
| __|@
|
||||
|______|@
|
||||
@@
|
||||
______ @
|
||||
|__ |@
|
||||
|__ |@
|
||||
|______|@
|
||||
@@
|
||||
_____ @
|
||||
| | | @
|
||||
|__ |@
|
||||
|__| @
|
||||
@@
|
||||
______ @
|
||||
| __|@
|
||||
|__ |@
|
||||
|______|@
|
||||
@@
|
||||
______ @
|
||||
| __|@
|
||||
| __ |@
|
||||
|______|@
|
||||
@@
|
||||
______ @
|
||||
| |@
|
||||
|_ |@
|
||||
|____|@
|
||||
@@
|
||||
______ @
|
||||
| __ |@
|
||||
| __ |@
|
||||
|______|@
|
||||
@@
|
||||
______ @
|
||||
| __ |@
|
||||
|__ |@
|
||||
|______|@
|
||||
@@
|
||||
__ @
|
||||
|__|@
|
||||
__ @
|
||||
|__|@
|
||||
@@
|
||||
__ @
|
||||
|__|@
|
||||
__ @
|
||||
| |@
|
||||
|_|@@
|
||||
__ @
|
||||
,' _|@
|
||||
/ / @
|
||||
\ \_ @
|
||||
`.__|@@
|
||||
@
|
||||
______ @
|
||||
|______|@
|
||||
|______|@
|
||||
@@
|
||||
__ @
|
||||
|_ `. @
|
||||
\ \@
|
||||
_/ /@
|
||||
|__,' @@
|
||||
_____ @
|
||||
|__ |@
|
||||
', ,-'@
|
||||
|--| @
|
||||
'--' @@
|
||||
_________ @
|
||||
| ___ |@
|
||||
| | _ |@
|
||||
| |______|@
|
||||
|_________|@@
|
||||
_______ @
|
||||
| _ |@
|
||||
| |@
|
||||
|___|___|@
|
||||
@@
|
||||
______ @
|
||||
| __ \@
|
||||
| __ <@
|
||||
|______/@
|
||||
@@
|
||||
______ @
|
||||
| |@
|
||||
| ---|@
|
||||
|______|@
|
||||
@@
|
||||
_____ @
|
||||
| \ @
|
||||
| -- |@
|
||||
|_____/ @
|
||||
@@
|
||||
_______ @
|
||||
| ___|@
|
||||
| ___|@
|
||||
|_______|@
|
||||
@@
|
||||
_______ @
|
||||
| ___|@
|
||||
| ___|@
|
||||
|___| @
|
||||
@@
|
||||
_______ @
|
||||
| __|@
|
||||
| | |@
|
||||
|_______|@
|
||||
@@
|
||||
_______ @
|
||||
| | |@
|
||||
| |@
|
||||
|___|___|@
|
||||
@@
|
||||
_______ @
|
||||
|_ _|@
|
||||
_| |_ @
|
||||
|_______|@
|
||||
@@
|
||||
_____ @
|
||||
_| |@
|
||||
| |@
|
||||
|_______|@
|
||||
@@
|
||||
__ __ @
|
||||
| |/ |@
|
||||
| < @
|
||||
|__|\__|@
|
||||
@@
|
||||
_____ @
|
||||
| |_ @
|
||||
| |@
|
||||
|_______|@
|
||||
@@
|
||||
_______ @
|
||||
| | |@
|
||||
| |@
|
||||
|__|_|__|@
|
||||
@@
|
||||
_______ @
|
||||
| | |@
|
||||
| |@
|
||||
|__|____|@
|
||||
@@
|
||||
_______ @
|
||||
| |@
|
||||
| - |@
|
||||
|_______|@
|
||||
@@
|
||||
______ @
|
||||
| __ \@
|
||||
| __/@
|
||||
|___| @
|
||||
@@
|
||||
_______ @
|
||||
| |@
|
||||
| - _|@
|
||||
|_______|@
|
||||
@@
|
||||
______ @
|
||||
| __ \@
|
||||
| <@
|
||||
|___|__|@
|
||||
@@
|
||||
_______ @
|
||||
| __|@
|
||||
|__ |@
|
||||
|_______|@
|
||||
@@
|
||||
_______ @
|
||||
|_ _|@
|
||||
| | @
|
||||
|___| @
|
||||
@@
|
||||
_______ @
|
||||
| | |@
|
||||
| | |@
|
||||
|_______|@
|
||||
@@
|
||||
___ ___ @
|
||||
| | |@
|
||||
| | |@
|
||||
\_____/ @
|
||||
@@
|
||||
________ @
|
||||
| | | |@
|
||||
| | | |@
|
||||
|________|@
|
||||
@@
|
||||
___ ___ @
|
||||
| | |@
|
||||
|- -|@
|
||||
|___|___|@
|
||||
@@
|
||||
___ ___ @
|
||||
| | |@
|
||||
\ / @
|
||||
|___| @
|
||||
@@
|
||||
_______ @
|
||||
|__ |@
|
||||
| __|@
|
||||
|_______|@
|
||||
@@
|
||||
____ @
|
||||
| _|@
|
||||
| | @
|
||||
| |_ @
|
||||
|____|@@
|
||||
___ @
|
||||
\ \ @
|
||||
`. `. @
|
||||
\__\@
|
||||
@@
|
||||
____ @
|
||||
|_ |@
|
||||
| |@
|
||||
_| |@
|
||||
|____|@@
|
||||
____ @
|
||||
| |@
|
||||
|_/\_|@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
______ @
|
||||
|______|@@
|
||||
__ @
|
||||
| |@
|
||||
|_| @
|
||||
@
|
||||
@@
|
||||
@
|
||||
.---.-.@
|
||||
| _ |@
|
||||
|___._|@
|
||||
@@
|
||||
__ @
|
||||
| |--.@
|
||||
| _ |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
.----.@
|
||||
| __|@
|
||||
|____|@
|
||||
@@
|
||||
__ @
|
||||
.--| |@
|
||||
| _ |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
| -__|@
|
||||
|_____|@
|
||||
@@
|
||||
___ @
|
||||
.' _|@
|
||||
| _|@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
| _ |@
|
||||
|___ |@
|
||||
|_____|@@
|
||||
__ @
|
||||
| |--.@
|
||||
| |@
|
||||
|__|__|@
|
||||
@@
|
||||
__ @
|
||||
|__|@
|
||||
| |@
|
||||
|__|@
|
||||
@@
|
||||
__ @
|
||||
|__|@
|
||||
| |@
|
||||
| |@
|
||||
|___|@@
|
||||
__ @
|
||||
| |--.@
|
||||
| < @
|
||||
|__|__|@
|
||||
@@
|
||||
__ @
|
||||
| |@
|
||||
| |@
|
||||
|__|@
|
||||
@@
|
||||
@
|
||||
.--------.@
|
||||
| |@
|
||||
|__|__|__|@
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
| |@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
| _ |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
| _ |@
|
||||
| __|@
|
||||
|__| @@
|
||||
@
|
||||
.-----.@
|
||||
| _ |@
|
||||
|__ |@
|
||||
|__|@@
|
||||
@
|
||||
.----.@
|
||||
| _|@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
.-----.@
|
||||
|__ --|@
|
||||
|_____|@
|
||||
@@
|
||||
__ @
|
||||
| |_ @
|
||||
| _|@
|
||||
|____|@
|
||||
@@
|
||||
@
|
||||
.--.--.@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
.--.--.@
|
||||
| | |@
|
||||
\___/ @
|
||||
@@
|
||||
@
|
||||
.--.--.--.@
|
||||
| | | |@
|
||||
|________|@
|
||||
@@
|
||||
@
|
||||
.--.--.@
|
||||
|_ _|@
|
||||
|__.__|@
|
||||
@@
|
||||
@
|
||||
.--.--.@
|
||||
| | |@
|
||||
|___ |@
|
||||
|_____|@@
|
||||
@
|
||||
.-----.@
|
||||
|-- __|@
|
||||
|_____|@
|
||||
@@
|
||||
___ @
|
||||
| _|@
|
||||
/ / @
|
||||
\ \_ @
|
||||
|___|@@
|
||||
__ @
|
||||
| |@
|
||||
| |@
|
||||
| |@
|
||||
|__|@@
|
||||
___ @
|
||||
|_ | @
|
||||
\ \@
|
||||
_/ /@
|
||||
|___| @@
|
||||
___ @
|
||||
| ' |@
|
||||
|_,_| @
|
||||
@
|
||||
@@
|
||||
.--.--.@
|
||||
|-----|@
|
||||
| - |@
|
||||
|__|__|@
|
||||
@@
|
||||
.--.--.@
|
||||
|-----|@
|
||||
| _ |@
|
||||
|_____|@
|
||||
@@
|
||||
.--.--.@
|
||||
|--|--|@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
.--.--.@
|
||||
|---.-|@
|
||||
| _ |@
|
||||
|___._|@
|
||||
@@
|
||||
.--.--.@
|
||||
|-----|@
|
||||
| _ |@
|
||||
|_____|@
|
||||
@@
|
||||
.--.--.@
|
||||
|--|--|@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
_______ @
|
||||
| __ \@
|
||||
| __ <@
|
||||
| |____/@
|
||||
|__| @@
|
||||
569
fonts/drpepper.flf
Normal file
569
fonts/drpepper.flf
Normal file
@ -0,0 +1,569 @@
|
||||
flf2a$ 5 4 20 0 16
|
||||
Font : Dr. Pepper (after a name in one sig done in this style).
|
||||
Author: Eero Tamminen, t150315@cc.tut.fi.
|
||||
|
||||
Characters '#' and '&' are lousy and I'm not very satisfied
|
||||
with the '$' or 't'... Suggestions?
|
||||
|
||||
Explanation of first line:
|
||||
flf2 - "magic number" for file identifiction
|
||||
a - should always be `a', for now
|
||||
$ - the "hardblank" -- prints s a blank, but can't be smushed
|
||||
5 - height of a character
|
||||
4 - height of a character, not including descenders
|
||||
20 - max line length (excluding comment lines) + fudge factor
|
||||
0 - default smushmode for this font
|
||||
16 - number of comment lines
|
||||
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@@
|
||||
_ @
|
||||
| |@
|
||||
|_/@
|
||||
<_>@
|
||||
@@
|
||||
_ _@
|
||||
|/|/@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
$_|_|_$@
|
||||
$_|_|_$@
|
||||
| | @
|
||||
@@
|
||||
@
|
||||
||_@
|
||||
<_-<@
|
||||
/__/@
|
||||
|| @@
|
||||
__@
|
||||
<>/ /@
|
||||
/ / @
|
||||
/_/<>@
|
||||
@@
|
||||
_ @
|
||||
< > @
|
||||
/.\/$@
|
||||
\_/\$@
|
||||
@@
|
||||
_@
|
||||
|/@
|
||||
@
|
||||
@
|
||||
@@
|
||||
__@
|
||||
/ /@
|
||||
| | @
|
||||
| | @
|
||||
\_\@@
|
||||
__ @
|
||||
\ \ @
|
||||
| |@
|
||||
| |@
|
||||
/_/ @@
|
||||
@
|
||||
_/\_@
|
||||
> <@
|
||||
\/ @
|
||||
@@
|
||||
_ @
|
||||
_| |_ @
|
||||
|_ _|@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
@
|
||||
_@
|
||||
|/@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
|___|@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ @
|
||||
<_>@
|
||||
@@
|
||||
__@
|
||||
/ /@
|
||||
/ / @
|
||||
/_/ @
|
||||
@@
|
||||
___ @
|
||||
| |@
|
||||
| / |@
|
||||
`___'@
|
||||
@@
|
||||
_ @
|
||||
/ |@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
___ @
|
||||
<_ >@
|
||||
/ / @
|
||||
<___>@
|
||||
@@
|
||||
____@
|
||||
<__ /@
|
||||
<_ \@
|
||||
<___/@
|
||||
@@
|
||||
__ @
|
||||
/. | @
|
||||
/_ .|@
|
||||
|_| @
|
||||
@@
|
||||
___ @
|
||||
| __|@
|
||||
`__ \@
|
||||
|___/@
|
||||
@@
|
||||
___ @
|
||||
| __>@
|
||||
| . \@
|
||||
`___/@
|
||||
@@
|
||||
___ @
|
||||
|_ |@
|
||||
/ / @
|
||||
/_/ @
|
||||
@@
|
||||
___ @
|
||||
< . >@
|
||||
/ . \@
|
||||
\___/@
|
||||
@@
|
||||
___ @
|
||||
| . |@
|
||||
`_ /@
|
||||
/_/ @
|
||||
@@
|
||||
_ @
|
||||
<_>@
|
||||
_ @
|
||||
<_>@
|
||||
@@
|
||||
_ @
|
||||
<_>@
|
||||
_ @
|
||||
|/ @
|
||||
@@
|
||||
__@
|
||||
/ /@
|
||||
< < @
|
||||
\_\@
|
||||
@@
|
||||
___ @
|
||||
|___|@
|
||||
___ @
|
||||
|___|@
|
||||
@@
|
||||
__ @
|
||||
\ \ @
|
||||
> >@
|
||||
/_/ @
|
||||
@@
|
||||
___ @
|
||||
<_. >@
|
||||
/_/ @
|
||||
<_> @
|
||||
@@
|
||||
___ @
|
||||
| "|@
|
||||
| \_|@
|
||||
`___/@
|
||||
@@
|
||||
___ @
|
||||
| . |@
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
___ @
|
||||
| . >@
|
||||
| . \@
|
||||
|___/@
|
||||
@@
|
||||
___ @
|
||||
| _>@
|
||||
| <__@
|
||||
`___/@
|
||||
@@
|
||||
___ @
|
||||
| . \@
|
||||
| | |@
|
||||
|___/@
|
||||
@@
|
||||
___ @
|
||||
| __>@
|
||||
| _> @
|
||||
|___>@
|
||||
@@
|
||||
___ @
|
||||
| __>@
|
||||
| _> @
|
||||
|_| @
|
||||
@@
|
||||
___ @
|
||||
/ _> @
|
||||
| <_/\@
|
||||
`____/@
|
||||
@@
|
||||
_ _ @
|
||||
| | |@
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
_ @
|
||||
| |@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
_ @
|
||||
| |@
|
||||
_| |@
|
||||
\__/@
|
||||
@@
|
||||
_ __@
|
||||
| / /@
|
||||
| \ @
|
||||
|_\_\@
|
||||
@@
|
||||
_ @
|
||||
| | @
|
||||
| |_ @
|
||||
|___|@
|
||||
@@
|
||||
__ __ @
|
||||
| \ \@
|
||||
| |@
|
||||
|_|_|_|@
|
||||
@@
|
||||
_ _ @
|
||||
| \ |@
|
||||
| |@
|
||||
|_\_|@
|
||||
@@
|
||||
___ @
|
||||
| . |@
|
||||
| | |@
|
||||
`___'@
|
||||
@@
|
||||
___ @
|
||||
| . \@
|
||||
| _/@
|
||||
|_| @
|
||||
@@
|
||||
___ @
|
||||
| . |@
|
||||
| | |@
|
||||
`___\@
|
||||
@@
|
||||
___ @
|
||||
| . \@
|
||||
| /@
|
||||
|_\_\@
|
||||
@@
|
||||
___ @
|
||||
/ __>@
|
||||
\__ \@
|
||||
<___/@
|
||||
@@
|
||||
___ @
|
||||
|_ _|@
|
||||
| | @
|
||||
|_| @
|
||||
@@
|
||||
_ _ @
|
||||
| | |@
|
||||
| ' |@
|
||||
`___'@
|
||||
@@
|
||||
_ _ @
|
||||
| | |@
|
||||
| ' |@
|
||||
|__/ @
|
||||
@@
|
||||
_ _ _ @
|
||||
| | | |@
|
||||
| | | |@
|
||||
|__/_/ @
|
||||
@@
|
||||
__ _$@
|
||||
\ \/ @
|
||||
\ \ @
|
||||
_/\_\ @
|
||||
@@
|
||||
_ _ @
|
||||
| | |@
|
||||
\ /@
|
||||
|_| @
|
||||
@@
|
||||
____@
|
||||
|_ /@
|
||||
/ / @
|
||||
/___|@
|
||||
@@
|
||||
___ @
|
||||
| _|@
|
||||
| | @
|
||||
| |_ @
|
||||
|___|@@
|
||||
__ @
|
||||
\ \ @
|
||||
\ \ @
|
||||
\_\@
|
||||
@@
|
||||
___ @
|
||||
|_ |@
|
||||
| |@
|
||||
_| |@
|
||||
|___|@@
|
||||
/\ @
|
||||
</\>@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
|___|@
|
||||
@@
|
||||
_ @
|
||||
\|@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
<_> |@
|
||||
<___|@
|
||||
@@
|
||||
_ @
|
||||
| |_ @
|
||||
| . \@
|
||||
|___/@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
/ | '@
|
||||
\_|_.@
|
||||
@@
|
||||
_ @
|
||||
_| |@
|
||||
/ . |@
|
||||
\___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
/ ._>@
|
||||
\___.@
|
||||
@@
|
||||
___ @
|
||||
| | '@
|
||||
| |- @
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
/ . |@
|
||||
\_. |@
|
||||
<___'@@
|
||||
_ @
|
||||
| |_ @
|
||||
| . |@
|
||||
|_|_|@
|
||||
@@
|
||||
_ @
|
||||
<_>@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
_ @
|
||||
<_>@
|
||||
| |@
|
||||
| |@
|
||||
<__'@@
|
||||
_ @
|
||||
| |__@
|
||||
| / /@
|
||||
|_\_\@
|
||||
@@
|
||||
_ @
|
||||
| |@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
._ _ _ @
|
||||
| ' ' |@
|
||||
|_|_|_|@
|
||||
@@
|
||||
@
|
||||
._ _ @
|
||||
| ' |@
|
||||
|_|_|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
/ . \@
|
||||
\___/@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| . \@
|
||||
| _/@
|
||||
|_| @@
|
||||
@
|
||||
___ @
|
||||
/ . |@
|
||||
\_ |@
|
||||
|_|@@
|
||||
@
|
||||
_ _ @
|
||||
| '_>@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
___@
|
||||
<_-<@
|
||||
/__/@
|
||||
@@
|
||||
_ @
|
||||
$_| |_$@
|
||||
| | @
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
`___|@
|
||||
@@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
|__/ @
|
||||
@@
|
||||
@
|
||||
_ _ _ @
|
||||
| | | |@
|
||||
|__/_/ @
|
||||
@@
|
||||
@
|
||||
__ @
|
||||
\ \/@
|
||||
/\_\@
|
||||
@@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
`_. |@
|
||||
<___'@@
|
||||
@
|
||||
.___@
|
||||
/ /@
|
||||
/___@
|
||||
@@
|
||||
__@
|
||||
/ /@
|
||||
/ | @
|
||||
\ | @
|
||||
\_\@@
|
||||
||@
|
||||
||@
|
||||
||@
|
||||
||@
|
||||
@@
|
||||
__ @
|
||||
\ \ @
|
||||
| \@
|
||||
| /@
|
||||
/_/ @@
|
||||
@
|
||||
/\/|@
|
||||
|/\/ @
|
||||
@
|
||||
@@
|
||||
<>_<>@
|
||||
| . |@
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
<>_<>@
|
||||
| . |@
|
||||
| | |@
|
||||
`___'@
|
||||
@@
|
||||
<>_<>@
|
||||
| | |@
|
||||
| ' |@
|
||||
`___'@
|
||||
@@
|
||||
@
|
||||
<>_<>@
|
||||
`_> |@
|
||||
<___|@
|
||||
@@
|
||||
@
|
||||
<>_<>@
|
||||
/ . \@
|
||||
\___/@
|
||||
@@
|
||||
@
|
||||
<>_<>@
|
||||
| | |@
|
||||
`___|@
|
||||
@@
|
||||
___ @
|
||||
| . >@
|
||||
| . \@
|
||||
| ._/@
|
||||
|_| @@
|
||||
196
|
||||
<>_<>@
|
||||
| . |@
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
214
|
||||
<>_<>@
|
||||
| . |@
|
||||
| | |@
|
||||
`___'@
|
||||
@@
|
||||
220
|
||||
<>_<>@
|
||||
| | |@
|
||||
| ' |@
|
||||
`___'@
|
||||
@@
|
||||
223
|
||||
___ @
|
||||
| . >@
|
||||
| . \@
|
||||
| ._/@
|
||||
|_| @@
|
||||
228
|
||||
@
|
||||
<>_<>@
|
||||
`_> |@
|
||||
<___|@
|
||||
@@
|
||||
246
|
||||
@
|
||||
<>_<>@
|
||||
/ . \@
|
||||
\___/@
|
||||
@@
|
||||
252
|
||||
@
|
||||
<>_<>@
|
||||
| | |@
|
||||
`___|@
|
||||
@@
|
||||
617
fonts/graffiti.flf
Normal file
617
fonts/graffiti.flf
Normal file
@ -0,0 +1,617 @@
|
||||
flf2a$ 6 5 32 15 4
|
||||
Font name is graffiti.flf
|
||||
This figlet font designed by Leigh Purdie (purdie@zeus.usq.edu.au)
|
||||
'fig-fonted' by Leigh Purdie and Tim Maggio (tim@claremont.com)
|
||||
Date: 5 Mar 1994
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@
|
||||
$@@
|
||||
._.@
|
||||
| |@
|
||||
| |@
|
||||
\|@
|
||||
__@
|
||||
\/@@
|
||||
/\/\@
|
||||
)/)/@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
_ _ @
|
||||
__| || |__@
|
||||
\ __ /@
|
||||
| || | @
|
||||
/_ ~~ _\@
|
||||
|_||_| @@
|
||||
____/\__@
|
||||
/ / /_/@
|
||||
\__/ / \ @
|
||||
/ / / \@
|
||||
/_/ /__ /@
|
||||
\/ \/ @@
|
||||
_ /\ @
|
||||
/ \ / / @
|
||||
\_// /_ @
|
||||
/ // \@
|
||||
/ / \_/@
|
||||
\/ @@
|
||||
____ @
|
||||
/ _ \ @
|
||||
> _ </\@
|
||||
/ <_\ \/@
|
||||
\_____\ \@
|
||||
\/@@
|
||||
/\@
|
||||
)/@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
$ ___$@
|
||||
$ / /$@
|
||||
$ / / $@
|
||||
$( ( $@
|
||||
$ \ \ $@
|
||||
$ \__\$@@
|
||||
$___ $@
|
||||
$\ \ $@
|
||||
$ \ \ $@
|
||||
$ ) )$@
|
||||
$ / / $@
|
||||
$/__/ $@@
|
||||
$ $@
|
||||
$ /\|\/\ $@
|
||||
$_) (__$@
|
||||
$\_ _/$@
|
||||
$ ) \ $@
|
||||
$ \/\|\/ $@@
|
||||
$ $@
|
||||
$ .__ $@
|
||||
$ __| |___$@
|
||||
$/__ __/$@
|
||||
$ |__| $@
|
||||
$ $@@
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
$/\@
|
||||
$)/@@
|
||||
$ $@
|
||||
$ $@
|
||||
$ ______$@
|
||||
$/_____/$@
|
||||
$ $@
|
||||
$ $@@
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
$/\@
|
||||
$\/@@
|
||||
$ /\$@
|
||||
$ / /$@
|
||||
$ / / $@
|
||||
$ / / $@
|
||||
$/ / $@
|
||||
$\/ $@@
|
||||
_______ @
|
||||
\ _ \ @
|
||||
/ /_\ \ @
|
||||
\ \_/ \@
|
||||
\_____ /@
|
||||
\/ @@
|
||||
____ @
|
||||
/_ |@
|
||||
| |@
|
||||
| |@
|
||||
|___|@
|
||||
@@
|
||||
________ @
|
||||
\_____ \ @
|
||||
/ ____/ @
|
||||
/ \ @
|
||||
\_______ \@
|
||||
\/@@
|
||||
________ @
|
||||
\_____ \ @
|
||||
_(__ < @
|
||||
/ \@
|
||||
/______ /@
|
||||
\/ @@
|
||||
_____ @
|
||||
/ | | @
|
||||
/ | |_@
|
||||
/ ^ /@
|
||||
\____ | @
|
||||
|__| @@
|
||||
.________@
|
||||
| ____/@
|
||||
|____ \ @
|
||||
/ \@
|
||||
/______ /@
|
||||
\/ @@
|
||||
________@
|
||||
/ _____/@
|
||||
/ __ \ @
|
||||
\ |__\ \@
|
||||
\_____ /@
|
||||
\/ @@
|
||||
_________ @
|
||||
\______ \@
|
||||
/ /@
|
||||
/ / @
|
||||
/____/ @
|
||||
@@
|
||||
______ @
|
||||
/ __ \ @
|
||||
> < @
|
||||
/ -- \@
|
||||
\______ /@
|
||||
\/ @@
|
||||
________ @
|
||||
/ __ \@
|
||||
\____ /@
|
||||
/ / @
|
||||
/____/ @
|
||||
@@
|
||||
$ $@
|
||||
$/\$@
|
||||
$\/$@
|
||||
$/\$@
|
||||
$\/$@
|
||||
$ $@@
|
||||
$ $@
|
||||
$/\$@
|
||||
$\/$@
|
||||
$/\$@
|
||||
$)/$@
|
||||
$ $@@
|
||||
$ __$@
|
||||
$ / /$@
|
||||
$/ / $@
|
||||
$\ \ $@
|
||||
$ \_\$@
|
||||
$ $@@
|
||||
$ $@
|
||||
$ ______$@
|
||||
$/_____/$@
|
||||
$/_____/$@
|
||||
$ $@
|
||||
$ $@@
|
||||
$__ $@
|
||||
$\ \ $@
|
||||
$ \ \$@
|
||||
$ / /$@
|
||||
$/_/ $@
|
||||
$ $@@
|
||||
_________ @
|
||||
\_____ \@
|
||||
/ __/@
|
||||
| | @
|
||||
|___| @
|
||||
<___> @@
|
||||
_____ @
|
||||
/ ___ \ @
|
||||
/ / ._\ \@
|
||||
< \_____/@
|
||||
\_____\ @
|
||||
@@
|
||||
_____ @
|
||||
/ _ \ @
|
||||
/ /_\ \ @
|
||||
/ | \@
|
||||
\____|__ /@
|
||||
\/ @@
|
||||
__________ @
|
||||
\______ \@
|
||||
| | _/@
|
||||
| | \@
|
||||
|______ /@
|
||||
\/ @@
|
||||
_________ @
|
||||
\_ ___ \ @
|
||||
/ \ \/ @
|
||||
\ \____@
|
||||
\______ /@
|
||||
\/ @@
|
||||
________ @
|
||||
\______ \ @
|
||||
| | \ @
|
||||
| ` \@
|
||||
/_______ /@
|
||||
\/ @@
|
||||
___________@
|
||||
\_ _____/@
|
||||
| __)_ @
|
||||
| \@
|
||||
/_______ /@
|
||||
\/ @@
|
||||
___________@
|
||||
\_ _____/@
|
||||
| __) @
|
||||
| \ @
|
||||
\___ / @
|
||||
\/ @@
|
||||
________ @
|
||||
/ _____/ @
|
||||
/ \ ___ @
|
||||
\ \_\ \@
|
||||
\______ /@
|
||||
\/ @@
|
||||
___ ___ @
|
||||
/ | \ @
|
||||
/ ~ \@
|
||||
\ Y /@
|
||||
\___|_ / @
|
||||
\/ @@
|
||||
.___ @
|
||||
| |@
|
||||
| |@
|
||||
| |@
|
||||
|___|@
|
||||
@@
|
||||
____.@
|
||||
| |@
|
||||
| |@
|
||||
/\__| |@
|
||||
\________|@
|
||||
@@
|
||||
____ __.@
|
||||
| |/ _|@
|
||||
| < @
|
||||
| | \ @
|
||||
|____|__ \@
|
||||
\/@@
|
||||
.____ @
|
||||
| | @
|
||||
| | @
|
||||
| |___ @
|
||||
|_______ \@
|
||||
\/@@
|
||||
_____ @
|
||||
/ \ @
|
||||
/ \ / \ @
|
||||
/ Y \@
|
||||
\____|__ /@
|
||||
\/ @@
|
||||
_______ @
|
||||
\ \ @
|
||||
/ | \ @
|
||||
/ | \@
|
||||
\____|__ /@
|
||||
\/ @@
|
||||
________ @
|
||||
\_____ \ @
|
||||
/ | \ @
|
||||
/ | \@
|
||||
\_______ /@
|
||||
\/ @@
|
||||
__________ @
|
||||
\______ \@
|
||||
| ___/@
|
||||
| | @
|
||||
|____| @
|
||||
@@
|
||||
________ @
|
||||
\_____ \ @
|
||||
/ / \ \ @
|
||||
/ \_/. \@
|
||||
\_____\ \_/@
|
||||
\__>@@
|
||||
__________ @
|
||||
\______ \@
|
||||
| _/@
|
||||
| | \@
|
||||
|____|_ /@
|
||||
\/ @@
|
||||
_________@
|
||||
/ _____/@
|
||||
\_____ \ @
|
||||
/ \@
|
||||
/_______ /@
|
||||
\/ @@
|
||||
___________@
|
||||
\__ ___/@
|
||||
| | @
|
||||
| | @
|
||||
|____| @
|
||||
@@
|
||||
____ ___ @
|
||||
| | \@
|
||||
| | /@
|
||||
| | / @
|
||||
|______/ @
|
||||
@@
|
||||
____ ____@
|
||||
\ \ / /@
|
||||
\ Y / @
|
||||
\ / @
|
||||
\___/ @
|
||||
@@
|
||||
__ __ @
|
||||
/ \ / \@
|
||||
\ \/\/ /@
|
||||
\ / @
|
||||
\__/\ / @
|
||||
\/ @@
|
||||
____ ___@
|
||||
\ \/ /@
|
||||
\ / @
|
||||
/ \ @
|
||||
/___/\ \@
|
||||
\_/@@
|
||||
_____.___.@
|
||||
\__ | |@
|
||||
/ | |@
|
||||
\____ |@
|
||||
/ ______|@
|
||||
\/ @@
|
||||
__________@
|
||||
\____ /@
|
||||
/ / @
|
||||
/ /_ @
|
||||
/_______ \@
|
||||
\/@@
|
||||
$.____ $@
|
||||
$| _|$@
|
||||
$| | $@
|
||||
$| | $@
|
||||
$| |_ $@
|
||||
$|____|$@@
|
||||
/\ @
|
||||
\ \ @
|
||||
\ \ @
|
||||
\ \ @
|
||||
\ \@
|
||||
\/@@
|
||||
$ ____.$@
|
||||
$|_ |$@
|
||||
$ | |$@
|
||||
$ | |$@
|
||||
$ _| |$@
|
||||
$|____|$@@
|
||||
$ /\ $@
|
||||
$/ \$@
|
||||
$\/\/$@
|
||||
$ $@
|
||||
$ $@
|
||||
$ $@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
______@
|
||||
/_____/@@
|
||||
/\@
|
||||
\(@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
\__ \ @
|
||||
/ __ \_@
|
||||
(____ /@
|
||||
\/ @@
|
||||
___. @
|
||||
\_ |__ @
|
||||
| __ \ @
|
||||
| \_\ \@
|
||||
|___ /@
|
||||
\/ @@
|
||||
@
|
||||
____ @
|
||||
_/ ___\ @
|
||||
\ \___ @
|
||||
\___ >@
|
||||
\/ @@
|
||||
.___@
|
||||
__| _/@
|
||||
/ __ | @
|
||||
/ /_/ | @
|
||||
\____ | @
|
||||
\/ @@
|
||||
@
|
||||
____ @
|
||||
_/ __ \ @
|
||||
\ ___/ @
|
||||
\___ >@
|
||||
\/ @@
|
||||
_____ @
|
||||
_/ ____\@
|
||||
\ __\ @
|
||||
| | @
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
____ @
|
||||
/ ___\ @
|
||||
/ /_/ >@
|
||||
\___ / @
|
||||
/_____/ @@
|
||||
.__ @
|
||||
| |__ @
|
||||
| | \ @
|
||||
| Y \@
|
||||
|___| /@
|
||||
\/ @@
|
||||
.__ @
|
||||
|__|@
|
||||
| |@
|
||||
| |@
|
||||
|__|@
|
||||
@@
|
||||
__ @
|
||||
|__|@
|
||||
| |@
|
||||
| |@
|
||||
/\__| |@
|
||||
\______|@@
|
||||
__ @
|
||||
| | __@
|
||||
| |/ /@
|
||||
| < @
|
||||
|__|_ \@
|
||||
\/@@
|
||||
.__ @
|
||||
| | @
|
||||
| | @
|
||||
| |__@
|
||||
|____/@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
/ \ @
|
||||
| Y Y \@
|
||||
|__|_| /@
|
||||
\/ @@
|
||||
@
|
||||
____ @
|
||||
/ \ @
|
||||
| | \@
|
||||
|___| /@
|
||||
\/ @@
|
||||
@
|
||||
____ @
|
||||
/ _ \ @
|
||||
( <_> )@
|
||||
\____/ @
|
||||
@@
|
||||
@
|
||||
______ @
|
||||
\____ \ @
|
||||
| |_> >@
|
||||
| __/ @
|
||||
|__| @@
|
||||
@
|
||||
______@
|
||||
/ ____/@
|
||||
< <_| |@
|
||||
\__ |@
|
||||
|__|@@
|
||||
@
|
||||
_______ @
|
||||
\_ __ \@
|
||||
| | \/@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
______@
|
||||
/ ___/@
|
||||
\___ \ @
|
||||
/____ >@
|
||||
\/ @@
|
||||
__ @
|
||||
_/ |_ @
|
||||
\ __\@
|
||||
| | @
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
__ __ @
|
||||
| | \@
|
||||
| | /@
|
||||
|____/ @
|
||||
@@
|
||||
@
|
||||
___ __@
|
||||
\ \/ /@
|
||||
\ / @
|
||||
\_/ @
|
||||
@@
|
||||
@
|
||||
__ _ __@
|
||||
\ \/ \/ /@
|
||||
\ / @
|
||||
\/\_/ @
|
||||
@@
|
||||
@
|
||||
___ ___@
|
||||
\ \/ /@
|
||||
> < @
|
||||
/__/\_ \@
|
||||
\/@@
|
||||
@
|
||||
___.__.@
|
||||
< | |@
|
||||
\___ |@
|
||||
/ ____|@
|
||||
\/ @@
|
||||
@
|
||||
________@
|
||||
\___ /@
|
||||
/ / @
|
||||
/_____ \@
|
||||
\/@@
|
||||
$ ___$@
|
||||
$/ / $@
|
||||
$\ \ $@
|
||||
$< < $@
|
||||
$/ / $@
|
||||
$\_\_$@@
|
||||
$._.$@
|
||||
$| |$@
|
||||
$|_|$@
|
||||
$|-|$@
|
||||
$| |$@
|
||||
$|_|$@@
|
||||
$___ $@
|
||||
$ \ \$@
|
||||
$ / /$@
|
||||
$ > >$@
|
||||
$ \ \$@
|
||||
$_/_/$@@
|
||||
$ ___ $@
|
||||
$/ _ \_/\$@
|
||||
$\/ \___/$@
|
||||
$ $@
|
||||
$ $@
|
||||
$ $@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@
|
||||
@@
|
||||
614
fonts/rectangles.flf
Normal file
614
fonts/rectangles.flf
Normal file
@ -0,0 +1,614 @@
|
||||
flf2a$ 6 5 15 1 1
|
||||
rectangles.flf by David Villegas <mnementh@netcom.com> 12/94
|
||||
$$@
|
||||
$$@
|
||||
$$@
|
||||
$$@
|
||||
$$@
|
||||
$$@@
|
||||
__ @
|
||||
| |@
|
||||
| |@
|
||||
|__|@
|
||||
|__|@
|
||||
@@
|
||||
_ _ @
|
||||
| | |@
|
||||
|_|_|@
|
||||
$$$ @
|
||||
$$$ @
|
||||
$$$ @@
|
||||
_ _ @
|
||||
_| | |_ @
|
||||
|_ _|@
|
||||
|_ _|@
|
||||
|_|_| @
|
||||
@@
|
||||
_ @
|
||||
_| |_ @
|
||||
| __|@
|
||||
|__ |@
|
||||
|_ _|@
|
||||
|_| @@
|
||||
@
|
||||
__ __ @
|
||||
|__| |@
|
||||
| __|@
|
||||
|__|__|@
|
||||
@@
|
||||
_ @
|
||||
_| |_ @
|
||||
| __|@
|
||||
| __|@
|
||||
|_ _|@
|
||||
|_| @@
|
||||
_ @
|
||||
| |@
|
||||
|_|@
|
||||
$ @
|
||||
$ @
|
||||
$ @@
|
||||
_ @
|
||||
_|_|@
|
||||
| | @
|
||||
| | @
|
||||
|_|_ @
|
||||
|_|@@
|
||||
_ @
|
||||
|_|_ @
|
||||
| |@
|
||||
| |@
|
||||
_|_|@
|
||||
|_| @@
|
||||
@
|
||||
_____ @
|
||||
| | | |@
|
||||
|- -|@
|
||||
|_|_|_|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
_| |_ @
|
||||
|_ _|@
|
||||
|_| @
|
||||
@@
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
_ @
|
||||
| |@
|
||||
|_|@@
|
||||
$$$ @
|
||||
$$$ @
|
||||
___ @
|
||||
|___|@
|
||||
$$$ @
|
||||
$$$ @@
|
||||
$ @
|
||||
$ @
|
||||
$ @
|
||||
_ @
|
||||
|_|@
|
||||
$ @@
|
||||
@
|
||||
_ @
|
||||
/ |@
|
||||
/ / @
|
||||
|_/ @
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| |@
|
||||
| | |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
|_ | @
|
||||
_| |_ @
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
|_ |@
|
||||
| _|@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
|_ |@
|
||||
|_ |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| | |@
|
||||
|_ |@
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| _|@
|
||||
|_ |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| _|@
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
|_ |@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
|_ |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
|_|@
|
||||
_ @
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
|_|@
|
||||
_ @
|
||||
| |@
|
||||
|_|@@
|
||||
__@
|
||||
/ /@
|
||||
/ / @
|
||||
< < @
|
||||
\ \ @
|
||||
\_\@@
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
_____ @
|
||||
|_____|@
|
||||
|_____|@
|
||||
$$$$$ @@
|
||||
__ @
|
||||
\ \ @
|
||||
\ \ @
|
||||
> >@
|
||||
/ / @
|
||||
/_/ @@
|
||||
_____ @
|
||||
|___ |@
|
||||
| _|@
|
||||
|_| @
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __ |@
|
||||
| |___|@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| _ |@
|
||||
| |@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __ |@
|
||||
| __ -|@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
| --|@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
____ @
|
||||
| \ @
|
||||
| | |@
|
||||
|____/ @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __|@
|
||||
| __|@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __|@
|
||||
| __|@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __|@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| | |@
|
||||
| |@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
|- -|@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
__ @
|
||||
__| |@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| | |@
|
||||
| -|@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
__ @
|
||||
| | @
|
||||
| |__ @
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
| | | |@
|
||||
|_|_|_|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| | |@
|
||||
| | | |@
|
||||
|_|___|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| _ |@
|
||||
| __|@
|
||||
|__| @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
| | |@
|
||||
|__ _|@
|
||||
|__|@@
|
||||
@
|
||||
_____ @
|
||||
| __ |@
|
||||
| -|@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __|@
|
||||
|__ |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
|_ _|@
|
||||
| | @
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| | |@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| | |@
|
||||
| | |@
|
||||
\___/ @
|
||||
@@
|
||||
@
|
||||
_ _ _ @
|
||||
| | | |@
|
||||
| | | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
__ __ @
|
||||
| | |@
|
||||
|- -|@
|
||||
|__|__|@
|
||||
@@
|
||||
@
|
||||
__ __ @
|
||||
| | |@
|
||||
|_ _|@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
|__ |@
|
||||
| __|@
|
||||
|_____|@
|
||||
@@
|
||||
___ @
|
||||
| _|@
|
||||
| | @
|
||||
| | @
|
||||
| |_ @
|
||||
|___|@@
|
||||
@
|
||||
_ @
|
||||
| \ @
|
||||
\ \ @
|
||||
\_|@
|
||||
@@
|
||||
___ @
|
||||
|_ |@
|
||||
| |@
|
||||
| |@
|
||||
_| |@
|
||||
|___|@@
|
||||
_____ @
|
||||
| _ |@
|
||||
|_| |_|@
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
$$$$$ @@
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
_____ @
|
||||
|_____|@@
|
||||
___ @
|
||||
|_ |@
|
||||
|_|@
|
||||
$$$ @
|
||||
$$$ @
|
||||
$$$ @@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| .'|@
|
||||
|__,|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
| |_ @
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| _|@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
_| |@
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| -_|@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
___ @
|
||||
| _|@
|
||||
| _|@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
|_ |@
|
||||
|___|@@
|
||||
@
|
||||
_ @
|
||||
| |_ @
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
|_|@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
|_|@
|
||||
| |@
|
||||
_| |@
|
||||
|___|@@
|
||||
@
|
||||
_ @
|
||||
| |_ @
|
||||
| '_|@
|
||||
|_,_|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
| |@
|
||||
| |@
|
||||
|_|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
_____ @
|
||||
| |@
|
||||
|_|_|_|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| |@
|
||||
|_|_|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
| _|@
|
||||
|_| @@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| . |@
|
||||
|_ |@
|
||||
|_|@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
| _|@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
|_ -|@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
_ @
|
||||
| |_ @
|
||||
| _|@
|
||||
|_| @
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
\_/ @
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ _ _ @
|
||||
| | | |@
|
||||
|_____|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ _ @
|
||||
|_'_|@
|
||||
|_,_|@
|
||||
@@
|
||||
@
|
||||
@
|
||||
_ _ @
|
||||
| | |@
|
||||
|_ |@
|
||||
|___|@@
|
||||
@
|
||||
@
|
||||
___ @
|
||||
|- _|@
|
||||
|___|@
|
||||
@@
|
||||
___ @
|
||||
| _|@
|
||||
_| | @
|
||||
|_ | @
|
||||
| |_ @
|
||||
|___|@@
|
||||
_ @
|
||||
| |@
|
||||
| |@
|
||||
| |@
|
||||
| |@
|
||||
|_|@@
|
||||
___ @
|
||||
|_ | @
|
||||
| |_ @
|
||||
| _|@
|
||||
_| | @
|
||||
|___| @@
|
||||
_____ @
|
||||
| | |@
|
||||
|_|___|@
|
||||
$$$$$ @
|
||||
$$$$$ @
|
||||
$$$$$ @@
|
||||
__ __ @
|
||||
|__|__|@
|
||||
| _ |@
|
||||
| |@
|
||||
|__|__|@
|
||||
@@
|
||||
__ __ @
|
||||
|__|__|@
|
||||
| |@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
__ __ @
|
||||
|__|__|@
|
||||
| | |@
|
||||
| | |@
|
||||
|_____|@
|
||||
@@
|
||||
_ _ @
|
||||
|_|_|@
|
||||
___ @
|
||||
| .'|@
|
||||
|__,|@
|
||||
@@
|
||||
_ _ @
|
||||
|_|_|@
|
||||
___ @
|
||||
| . |@
|
||||
|___|@
|
||||
@@
|
||||
_ _ @
|
||||
|_|_|@
|
||||
_ _ @
|
||||
| | |@
|
||||
|___|@
|
||||
@@
|
||||
@
|
||||
_____ @
|
||||
| __ |@
|
||||
| __ -|@
|
||||
| ___|@
|
||||
|_| @@
|
||||
1295
fonts/slant.flf
Normal file
1295
fonts/slant.flf
Normal file
File diff suppressed because it is too large
Load Diff
2227
fonts/standard.flf
Normal file
2227
fonts/standard.flf
Normal file
File diff suppressed because it is too large
Load Diff
25
go.mod
Normal file
25
go.mod
Normal file
@ -0,0 +1,25 @@
|
||||
module github.com/ekzyis/echo-htmx-templ-tailwindcss
|
||||
|
||||
go 1.24.6
|
||||
|
||||
require (
|
||||
github.com/a-h/templ v0.3.960
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/labstack/echo/v4 v4.13.4
|
||||
github.com/lib/pq v1.10.9
|
||||
github.com/lukesampson/figlet v0.0.0-20190211215653-8a3ef4a6ac42
|
||||
github.com/namsral/flag v1.7.4-pre
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/labstack/gommon v0.4.2 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||
golang.org/x/crypto v0.40.0 // indirect
|
||||
golang.org/x/net v0.42.0 // indirect
|
||||
golang.org/x/sys v0.34.0 // indirect
|
||||
golang.org/x/text v0.27.0 // indirect
|
||||
golang.org/x/time v0.11.0 // indirect
|
||||
)
|
||||
43
go.sum
Normal file
43
go.sum
Normal file
@ -0,0 +1,43 @@
|
||||
github.com/a-h/templ v0.3.960 h1:trshEpGa8clF5cdI39iY4ZrZG8Z/QixyzEyUnA7feTM=
|
||||
github.com/a-h/templ v0.3.960/go.mod h1:oCZcnKRf5jjsGpf2yELzQfodLphd2mwecwG4Crk5HBo=
|
||||
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/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/labstack/echo/v4 v4.13.4 h1:oTZZW+T3s9gAu5L8vmzihV7/lkXGZuITzTQkTEhcXEA=
|
||||
github.com/labstack/echo/v4 v4.13.4/go.mod h1:g63b33BZ5vZzcIUF8AtRH40DrTlXnx4UMC8rBdndmjQ=
|
||||
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
|
||||
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lukesampson/figlet v0.0.0-20190211215653-8a3ef4a6ac42 h1:UtyD+eBVdLYSj5/pjfSR6mtnzMgIiOVcFT024G2l4CY=
|
||||
github.com/lukesampson/figlet v0.0.0-20190211215653-8a3ef4a6ac42/go.mod h1:/peI0OaxVYh7fzA72CD7rUsyGVdF7sCiFw7GcYqOcCw=
|
||||
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
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/namsral/flag v1.7.4-pre h1:b2ScHhoCUkbsq0d2C15Mv+VU8bl8hAXV8arnWiOHNZs=
|
||||
github.com/namsral/flag v1.7.4-pre/go.mod h1:OXldTctbM6SWH1K899kPZcf65KxJiD7MsceFUpB5yDo=
|
||||
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/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
||||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
||||
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
|
||||
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
|
||||
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
|
||||
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
|
||||
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
|
||||
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
|
||||
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
38
lib/figlet.go
Normal file
38
lib/figlet.go
Normal file
@ -0,0 +1,38 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"math/rand/v2"
|
||||
|
||||
"github.com/lukesampson/figlet/figletlib"
|
||||
)
|
||||
|
||||
func Figlet(fontName string, text string) string {
|
||||
var (
|
||||
fontsDir = "fonts"
|
||||
// download figlet fonts from http://www.figlet.org/
|
||||
font *figletlib.Font
|
||||
err error
|
||||
)
|
||||
|
||||
if fontName == "random" {
|
||||
if files, err := os.ReadDir(fontsDir); err != nil {
|
||||
log.Printf("error reading directory %s: %v\n", fontsDir, err)
|
||||
return ""
|
||||
} else {
|
||||
fontName = files[rand.IntN(len(files))].Name()
|
||||
}
|
||||
}
|
||||
|
||||
if font, err = figletlib.GetFontByName(fontsDir, fontName); err != nil {
|
||||
log.Printf("could not find font %s: %v\n", fontName, err)
|
||||
return ""
|
||||
}
|
||||
|
||||
b := new(strings.Builder)
|
||||
figletlib.FPrintMsg(b, text, font, 80, font.Settings(), "left")
|
||||
return b.String()
|
||||
}
|
||||
42
main.go
Normal file
42
main.go
Normal file
@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/db"
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/env"
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if err := env.Load(); err != nil {
|
||||
log.Fatalf("error loading env: %v", err)
|
||||
}
|
||||
env.Parse()
|
||||
|
||||
log.Printf("url: %s", env.PublicUrl)
|
||||
log.Printf("commit: %s", env.CommitShortSha)
|
||||
log.Printf("postgres: %s", env.PostgresUrlWithoutPassword)
|
||||
|
||||
db, err := db.New(env.PostgresUrl)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err := db.Migrate(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
s := server.New(server.Context{
|
||||
Env: env.Env,
|
||||
PublicURL: env.PublicUrl,
|
||||
CommitShortSha: env.CommitShortSha,
|
||||
CommitLongSha: env.CommitLongSha,
|
||||
Db: db,
|
||||
})
|
||||
|
||||
if err := s.Start(fmt.Sprintf(":%d", env.Port)); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
9
pages/components/body.templ
Normal file
9
pages/components/body.templ
Normal file
@ -0,0 +1,9 @@
|
||||
package components
|
||||
|
||||
templ Body() {
|
||||
<body>
|
||||
<div id="indicator" class="htmx-indicator fixed top-0"></div>
|
||||
{ children... }
|
||||
@Modal(false)
|
||||
</body>
|
||||
}
|
||||
14
pages/components/content.templ
Normal file
14
pages/components/content.templ
Normal file
@ -0,0 +1,14 @@
|
||||
package components
|
||||
|
||||
templ Content() {
|
||||
<div
|
||||
id="content"
|
||||
hx-target="#content"
|
||||
hx-select="#content"
|
||||
hx-swap="outerHTML"
|
||||
hx-push-url="true"
|
||||
hx-indicator="#indicator"
|
||||
>
|
||||
{ children... }
|
||||
</div>
|
||||
}
|
||||
13
pages/components/figlet.templ
Normal file
13
pages/components/figlet.templ
Normal file
@ -0,0 +1,13 @@
|
||||
package components
|
||||
|
||||
import "github.com/ekzyis/echo-htmx-templ-tailwindcss/lib"
|
||||
|
||||
templ Figlet(font string, text string) {
|
||||
<code>
|
||||
<strong>
|
||||
<pre>
|
||||
{ lib.Figlet(font, text) }
|
||||
</pre>
|
||||
</strong>
|
||||
</code>
|
||||
}
|
||||
25
pages/components/head.templ
Normal file
25
pages/components/head.templ
Normal file
@ -0,0 +1,25 @@
|
||||
package components
|
||||
|
||||
templ Head() {
|
||||
<head>
|
||||
<title>template</title>
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico"/>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/>
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/>
|
||||
<link rel="stylesheet" href="/css/tailwind.css"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<meta name="theme-color" content="#191d21"/>
|
||||
<meta
|
||||
name="htmx-config"
|
||||
content='{
|
||||
"responseHandling": [
|
||||
{ "code": "204", "swap": false },
|
||||
{ "code": "[23]..", "swap": true },
|
||||
{ "code": "[45]..", "swap": true, "error": true }
|
||||
]
|
||||
}'
|
||||
/>
|
||||
<script src="/js/htmx.js" integrity="sha384-AjJ8PRsVaowawSMNJuYhxWbcW/0vOGpORfI4EmV1WnIrAM7a27/CagZ3ZtjfcYh8" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
}
|
||||
25
pages/components/modal.templ
Normal file
25
pages/components/modal.templ
Normal file
@ -0,0 +1,25 @@
|
||||
package components
|
||||
|
||||
templ Modal(show bool) {
|
||||
<div
|
||||
id="modal"
|
||||
class={
|
||||
"flex justify-center items-center",
|
||||
"fixed inset-0",
|
||||
"backdrop-blur-sm bg-black/30",
|
||||
templ.KV("hidden", !show) }>
|
||||
<div class="border border-muted rounded">
|
||||
<div class="relative">
|
||||
<button id="close" class="absolute top-2 right-2 w-fit text-muted hover:text-reset">X</button>
|
||||
{ children... }
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" id="modal-js">
|
||||
htmx.on("#close", "click", function () {
|
||||
const modal = htmx.find("#modal")
|
||||
modal.replaceChildren([])
|
||||
modal.classList.add("hidden")
|
||||
})
|
||||
</script>
|
||||
</div>
|
||||
}
|
||||
23
pages/context/context.go
Normal file
23
pages/context/context.go
Normal file
@ -0,0 +1,23 @@
|
||||
package context
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/env"
|
||||
)
|
||||
|
||||
type ContextKey string
|
||||
|
||||
var (
|
||||
Env ContextKey = "env"
|
||||
Session ContextKey = "session"
|
||||
Commit ContextKey = "commit"
|
||||
Origin ContextKey = "origin"
|
||||
)
|
||||
|
||||
func GetOrigin(ctx context.Context) string {
|
||||
if u, ok := ctx.Value(Origin).(string); ok {
|
||||
return u
|
||||
}
|
||||
return env.PublicUrl
|
||||
}
|
||||
19
pages/error.templ
Normal file
19
pages/error.templ
Normal file
@ -0,0 +1,19 @@
|
||||
package pages
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/pages/components"
|
||||
)
|
||||
|
||||
templ Error(code int) {
|
||||
<html>
|
||||
@components.Head()
|
||||
@components.Body() {
|
||||
@components.Content() {
|
||||
@components.Figlet("random", strconv.Itoa(code))
|
||||
<div class="font-mono mb-3">{ http.StatusText(code) }</div>
|
||||
}
|
||||
}
|
||||
</html>
|
||||
}
|
||||
14
pages/index.templ
Normal file
14
pages/index.templ
Normal file
@ -0,0 +1,14 @@
|
||||
package pages
|
||||
|
||||
import "github.com/ekzyis/echo-htmx-templ-tailwindcss/pages/components"
|
||||
|
||||
templ Index() {
|
||||
<html>
|
||||
@components.Head()
|
||||
@components.Body() {
|
||||
@components.Content() {
|
||||
<div>hello world</div>
|
||||
}
|
||||
}
|
||||
</html>
|
||||
}
|
||||
46
pages/render.go
Normal file
46
pages/render.go
Normal file
@ -0,0 +1,46 @@
|
||||
package pages
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/a-h/templ"
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/env"
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/pages/components"
|
||||
pCtx "github.com/ekzyis/echo-htmx-templ-tailwindcss/pages/context"
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
func GetEnv(ctx context.Context) string {
|
||||
if u, ok := ctx.Value(pCtx.Env).(string); ok {
|
||||
return u
|
||||
}
|
||||
return "development"
|
||||
}
|
||||
|
||||
func Render(t templ.Component, statusCode int, eCtx echo.Context) error {
|
||||
buf := templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(buf)
|
||||
|
||||
rCtx := context.WithValue(eCtx.Request().Context(), pCtx.Env, env.Env)
|
||||
req := eCtx.Request()
|
||||
rCtx = context.WithValue(rCtx, pCtx.Origin, req.Pattern+req.Host)
|
||||
|
||||
if err := t.Render(rCtx, buf); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return eCtx.HTML(statusCode, buf.String())
|
||||
}
|
||||
|
||||
func RenderModal(child templ.Component, statusCode int, eCtx echo.Context) error {
|
||||
buf := templ.GetBuffer()
|
||||
defer templ.ReleaseBuffer(buf)
|
||||
|
||||
rCtx := templ.WithChildren(eCtx.Request().Context(), child)
|
||||
|
||||
if err := components.Modal(true).Render(rCtx, buf); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return eCtx.HTML(statusCode, buf.String())
|
||||
}
|
||||
25
public/css/htmx.css
Normal file
25
public/css/htmx.css
Normal file
@ -0,0 +1,25 @@
|
||||
.htmx-indicator {
|
||||
opacity: 0;
|
||||
height: .5vh;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: var(--color);
|
||||
transition: opacity .2s ease-out, width .2s ease-out;
|
||||
}
|
||||
|
||||
.htmx-indicator.htmx-request {
|
||||
opacity: 1;
|
||||
/* if I'd be smart, I would use the Content-Length header in some way to determine the duration */
|
||||
animation: progressbar 1s ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes progressbar {
|
||||
from {
|
||||
left: 0;
|
||||
width: 0;
|
||||
}
|
||||
to {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
5130
public/js/htmx.js
Normal file
5130
public/js/htmx.js
Normal file
File diff suppressed because it is too large
Load Diff
16
server/context.go
Normal file
16
server/context.go
Normal file
@ -0,0 +1,16 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/db"
|
||||
)
|
||||
|
||||
type Context struct {
|
||||
context.Context
|
||||
Env string
|
||||
PublicURL string
|
||||
CommitShortSha string
|
||||
CommitLongSha string
|
||||
Db *db.Db
|
||||
}
|
||||
14
server/handler.go
Normal file
14
server/handler.go
Normal file
@ -0,0 +1,14 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/pages"
|
||||
"github.com/labstack/echo/v4"
|
||||
)
|
||||
|
||||
func index(sCtx Context) echo.HandlerFunc {
|
||||
return func(eCtx echo.Context) error {
|
||||
return pages.Render(pages.Index(), http.StatusOK, eCtx)
|
||||
}
|
||||
}
|
||||
72
server/server.go
Normal file
72
server/server.go
Normal file
@ -0,0 +1,72 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"database/sql"
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
|
||||
"github.com/ekzyis/echo-htmx-templ-tailwindcss/pages"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
*echo.Echo
|
||||
}
|
||||
|
||||
func New(sCtx Context) *Server {
|
||||
var (
|
||||
e *echo.Echo
|
||||
s *Server
|
||||
)
|
||||
e = echo.New()
|
||||
|
||||
e.Static("/", "public")
|
||||
|
||||
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
|
||||
Format: "${time_custom} ${method} ${uri} ${status}\n",
|
||||
CustomTimeFormat: "2006-01-02 15:04:05.00000-0700",
|
||||
}))
|
||||
|
||||
e.HTTPErrorHandler = httpErrorHandler(sCtx)
|
||||
|
||||
s = &Server{e}
|
||||
|
||||
s.GET("/", index(sCtx))
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func httpErrorHandler(sCtx Context) echo.HTTPErrorHandler {
|
||||
return func(err error, eCtx echo.Context) {
|
||||
var (
|
||||
code = http.StatusInternalServerError
|
||||
page = pages.Error
|
||||
buf *bytes.Buffer
|
||||
)
|
||||
|
||||
eCtx.Logger().Error(err)
|
||||
|
||||
if err == sql.ErrNoRows {
|
||||
code = http.StatusNotFound
|
||||
}
|
||||
|
||||
if httpError, ok := err.(*echo.HTTPError); ok {
|
||||
code = httpError.Code
|
||||
}
|
||||
|
||||
// make sure that HTMX selects and targets correct element
|
||||
eCtx.Response().Header().Add("HX-Retarget", "#content")
|
||||
eCtx.Response().Header().Add("HX-Reselect", "#content")
|
||||
|
||||
if err = pages.Render(page(code), code, eCtx); err != nil {
|
||||
eCtx.Logger().Error(err)
|
||||
code = http.StatusInternalServerError
|
||||
}
|
||||
|
||||
if err = eCtx.HTML(code, buf.String()); err != nil {
|
||||
eCtx.Logger().Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
3
tailwind.config.js
Normal file
3
tailwind.config.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
content: ["./pages/**/*.templ"],
|
||||
}
|
||||
27
tailwind.css
Normal file
27
tailwind.css
Normal file
@ -0,0 +1,27 @@
|
||||
@import "tailwindcss";
|
||||
|
||||
@theme {
|
||||
/* https://tailwindcss.com/docs/theme */
|
||||
--color-background: #191d21;
|
||||
--color-reset: #d3d3d3;
|
||||
--color-muted: #6c757d;
|
||||
}
|
||||
|
||||
@layer base {
|
||||
body {
|
||||
background-color: var(--color-background);
|
||||
color: var(--color-reset);
|
||||
}
|
||||
|
||||
#content {
|
||||
min-height: 100svh;
|
||||
margin: 0 auto;
|
||||
padding: 0 1rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
@layer utilities {}
|
||||
3
template.env
Normal file
3
template.env
Normal file
@ -0,0 +1,3 @@
|
||||
PORT=4444
|
||||
PUBLIC_URL=
|
||||
POSTGRES_DB=
|
||||
Loading…
x
Reference in New Issue
Block a user