Browse Source

implement local icons

master
Silberengel 4 weeks ago
parent
commit
d6d62c0d54
  1. 23
      internal/generator/html.go
  2. 10
      package-lock.json
  3. 3
      package.json
  4. 6
      static/icons/alert-circle.svg
  5. 6
      static/icons/alert-triangle.svg
  6. 5
      static/icons/arrow-right.svg
  7. 4
      static/icons/book-open.svg
  8. 5
      static/icons/book-x.svg
  9. 4
      static/icons/book.svg
  10. 5
      static/icons/check-circle.svg
  11. 5
      static/icons/clock.svg
  12. 5
      static/icons/copyright.svg
  13. 6
      static/icons/external-link.svg
  14. 7
      static/icons/file-text.svg
  15. 6
      static/icons/file-x.svg
  16. 4
      static/icons/github.svg
  17. 6
      static/icons/globe.svg
  18. 7
      static/icons/hash.svg
  19. 4
      static/icons/home.svg
  20. 4
      static/icons/inbox.svg
  21. 6
      static/icons/info.svg
  22. 9
      static/icons/list.svg
  23. 11
      static/icons/loader-2.svg
  24. 4
      static/icons/mail.svg
  25. 5
      static/icons/package.svg
  26. 6
      static/icons/rss.svg
  27. 4
      static/icons/send.svg
  28. 5
      static/icons/user.svg
  29. 5
      static/icons/x.svg
  30. 4
      templates/404.html
  31. 4
      templates/500.html
  32. 99
      templates/base.html
  33. 8
      templates/blog.html
  34. 22
      templates/components.html
  35. 36
      templates/contact.html
  36. 4
      templates/ebooks.html
  37. 8
      templates/landing.html
  38. 10
      templates/page.html
  39. 6
      templates/wiki.html

23
internal/generator/html.go

@ -6,7 +6,9 @@ import ( @@ -6,7 +6,9 @@ import (
"encoding/json"
"fmt"
"html/template"
"os"
"path/filepath"
"strings"
"sync"
"time"
@ -31,6 +33,27 @@ func getTemplateFuncs() template.FuncMap { @@ -31,6 +33,27 @@ func getTemplateFuncs() template.FuncMap {
"shortenPubkey": func(pubkey string) string {
return nostr.ShortenPubkey(pubkey)
},
"icon": func(name string) template.HTML {
// Read icon file from static/icons directory
iconPath := filepath.Join("static", "icons", name+".svg")
data, err := os.ReadFile(iconPath)
if err != nil {
// Return empty if icon not found
return template.HTML("")
}
// Remove XML declaration if present
svg := strings.TrimSpace(string(data))
if strings.HasPrefix(svg, "<?xml") {
// Find the <svg> tag
svgStart := strings.Index(svg, "<svg")
if svgStart > 0 {
svg = svg[svgStart:]
}
}
return template.HTML(svg)
},
"dict": func(values ...interface{}) (map[string]interface{}, error) {
if len(values)%2 != 0 {
return nil, fmt.Errorf("dict requires an even number of arguments")

10
package-lock.json generated

@ -6,6 +6,9 @@ @@ -6,6 +6,9 @@
"": {
"dependencies": {
"@asciidoctor/core": "^3.0.4"
},
"devDependencies": {
"lucide": "^0.564.0"
}
},
"node_modules/@asciidoctor/core": {
@ -93,6 +96,13 @@ @@ -93,6 +96,13 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/lucide": {
"version": "0.564.0",
"resolved": "https://registry.npmjs.org/lucide/-/lucide-0.564.0.tgz",
"integrity": "sha512-FasyXKHWon773WIl3HeCQpd5xS6E0aLjqxiQStlHNKktni+HDncc1sqY+6vRUbCfmDsIaKQz43EEQLAUDLZO0g==",
"dev": true,
"license": "ISC"
},
"node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",

3
package.json

@ -1,5 +1,8 @@ @@ -1,5 +1,8 @@
{
"dependencies": {
"@asciidoctor/core": "^3.0.4"
},
"devDependencies": {
"lucide": "^0.564.0"
}
}

6
static/icons/alert-circle.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="12" y1="8" x2="12" y2="12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="12" y1="16" x2="12.01" y2="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 648 B

6
static/icons/alert-triangle.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 9v4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 17h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 661 B

5
static/icons/arrow-right.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5 12h14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m12 5 7 7-7 7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 478 B

4
static/icons/book-open.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 7v14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 350 B

5
static/icons/book-x.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m14.5 7-5 5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m9.5 7 5 5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 478 B

4
static/icons/book.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 428 B

5
static/icons/check-circle.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m9 12 2 2 4-4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 490 B

5
static/icons/clock.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 6v6l4 2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 488 B

5
static/icons/copyright.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M14.83 14.83a4 4 0 1 1 0-5.66" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 506 B

6
static/icons/external-link.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 3h6v6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10 14 21 3" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 648 B

7
static/icons/file-text.svg

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M14 2v5a1 1 0 0 0 1 1h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10 9H8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M16 13H8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M16 17H8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 733 B

6
static/icons/file-x.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M14 2v5a1 1 0 0 0 1 1h5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m14.5 12.5-5 5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m9.5 12.5 5 5" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 622 B

4
static/icons/github.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 18c-4.51 2-5-2-7-2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 363 B

6
static/icons/globe.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 12h20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 647 B

7
static/icons/hash.svg

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="4" y1="9" x2="20" y2="9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="4" y1="15" x2="20" y2="15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="10" y1="3" x2="8" y2="21" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<line x1="16" y1="3" x2="14" y2="21" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 788 B

4
static/icons/home.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 384 B

4
static/icons/inbox.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 448 B

6
static/icons/info.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 16v-4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 8h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="12" r="10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 610 B

9
static/icons/list.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M3 5h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M3 12h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M3 19h.01" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8 5h13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8 12h13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8 19h13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 966 B

11
static/icons/loader-2.svg

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 2v4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m16.2 7.8 2.9-2.9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 12h4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m16.2 16.2 2.9 2.9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 18v4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m4.9 19.1 2.9-2.9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 12h4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m4.9 4.9 2.9 2.9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

4
static/icons/mail.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 381 B

5
static/icons/package.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 22V12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m7.5 4.27 9 5.15" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 482 B

6
static/icons/rss.svg

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 11a9 9 0 0 1 9 9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4 4a16 16 0 0 1 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="5" cy="19" r="1" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 631 B

4
static/icons/send.svg

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m21.854 2.147-10.94 10.939" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 368 B

5
static/icons/user.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="12" cy="7" r="4" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

5
static/icons/x.svg

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 6 6 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m6 6 12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 477 B

4
templates/404.html

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
{{define "content"}}
<article class="error-page">
<h1><i data-lucide="alert-circle" class="icon-inline"></i> 404</h1>
<h1><span class="icon-inline">{{icon "alert-circle"}}</span> 404</h1>
<p>The page you're looking for doesn't exist.</p>
<a href="/" class="btn"><i data-lucide="home" class="icon-inline"></i> Go Home</a>
<a href="/" class="btn"><span class="icon-inline">{{icon "home"}}</span> Go Home</a>
</article>
{{end}}

4
templates/500.html

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
{{define "content"}}
<article class="error-page">
<h1><i data-lucide="alert-triangle" class="icon-inline"></i> 500</h1>
<h1><span class="icon-inline">{{icon "alert-triangle"}}</span> 500</h1>
<p>Something went wrong on our end. Please try again later.</p>
<a href="/" class="btn"><i data-lucide="home" class="icon-inline"></i> Go Home</a>
<a href="/" class="btn"><span class="icon-inline">{{icon "home"}}</span> Go Home</a>
</article>
{{end}}

99
templates/base.html

@ -26,7 +26,6 @@ @@ -26,7 +26,6 @@
<link rel="stylesheet" href="/static/css/main.css">
<link rel="stylesheet" href="/static/css/responsive.css">
<link rel="stylesheet" href="/static/css/print.css" media="print">
<script src="https://unpkg.com/lucide@latest"></script>
{{if .StructuredData}}<script type="application/ld+json">{{.StructuredData}}</script>{{end}}
</head>
@ -48,18 +47,18 @@ @@ -48,18 +47,18 @@
</button>
<ul class="nav-menu">
<li><a href="/"><i data-lucide="home" class="icon-inline"></i> Home</a></li>
<li><a href="/wiki"><i data-lucide="book-open" class="icon-inline"></i> About The Project</a></li>
<li><a href="/"><span class="icon-inline">{{icon "home"}}</span> Home</a></li>
<li><a href="/wiki"><span class="icon-inline">{{icon "book-open"}}</span> About The Project</a></li>
<li class="dropdown">
<a href="/blog" class="dropdown-toggle"><i data-lucide="file-text" class="icon-inline"></i> Blog</a>
<a href="/blog" class="dropdown-toggle"><span class="icon-inline">{{icon "file-text"}}</span> Blog</a>
<ul class="dropdown-menu">
{{range .BlogItems}}
<li><a href="/blog#{{.DTag}}"><i data-lucide="file-text" class="icon-inline"></i> {{.Title}}</a></li>
<li><a href="/blog#{{.DTag}}"><span class="icon-inline">{{icon "file-text"}}</span> {{.Title}}</a></li>
{{end}}
</ul>
</li>
<li><a href="/ebooks"><i data-lucide="book" class="icon-inline"></i> E-Books</a></li>
<li><a href="/contact"><i data-lucide="mail" class="icon-inline"></i> Contact</a></li>
<li><a href="/ebooks"><span class="icon-inline">{{icon "book"}}</span> E-Books</a></li>
<li><a href="/contact"><span class="icon-inline">{{icon "mail"}}</span> Contact</a></li>
</ul>
</div>
</nav>
@ -82,60 +81,11 @@ @@ -82,60 +81,11 @@
</div>
<footer>
<p><i data-lucide="copyright" class="icon-inline"></i> 2026 GitCitadel LLC. All Rights Reserved | <a href="/contact"><i data-lucide="mail" class="icon-inline"></i> Contact</a></p>
<p><span class="icon-inline">{{icon "copyright"}}</span> 2026 GitCitadel LLC. All Rights Reserved | <a href="/contact"><span class="icon-inline">{{icon "mail"}}</span> Contact</a></p>
</footer>
<script>
// Initialize Lucide icons
let iconInitInProgress = false;
let iconInitTimeout = null;
function initIcons() {
if (iconInitInProgress || typeof lucide === 'undefined') {
return;
}
iconInitInProgress = true;
try {
// Only initialize icons on elements that haven't been processed yet
// Lucide marks processed elements, so we can target unprocessed ones
const unprocessedIcons = document.querySelectorAll('[data-lucide]:not([data-lucide-processed])');
if (unprocessedIcons.length > 0) {
lucide.createIcons();
// Mark as processed to prevent re-processing
unprocessedIcons.forEach(el => {
el.setAttribute('data-lucide-processed', 'true');
});
}
} catch (e) {
console.error('Error initializing Lucide icons:', e);
} finally {
iconInitInProgress = false;
}
}
// Debounced icon initialization to prevent excessive calls
function debouncedInitIcons() {
if (iconInitTimeout) {
clearTimeout(iconInitTimeout);
}
iconInitTimeout = setTimeout(function() {
if (!iconInitInProgress) {
initIcons();
}
}, 200);
}
// Initialize icons on page load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
setTimeout(initIcons, 100);
});
} else {
setTimeout(initIcons, 100);
}
// Mobile menu toggle (optional - menu works without JS)
// Mobile menu toggle
if (document.querySelector('.mobile-menu-toggle')) {
document.querySelector('.mobile-menu-toggle').addEventListener('click', function() {
const menu = document.querySelector('.nav-menu');
@ -144,39 +94,6 @@ @@ -144,39 +94,6 @@
menu.classList.toggle('active');
});
}
// Reinitialize icons when DOM changes (for dynamically added content)
// Only observe for new elements with data-lucide that haven't been processed
const observer = new MutationObserver(function(mutations) {
let hasNewIcons = false;
for (const mutation of mutations) {
if (mutation.type === 'childList') {
for (const node of mutation.addedNodes) {
if (node.nodeType === 1) { // Element node
// Check if this node or its children have unprocessed icons
if (node.hasAttribute && node.hasAttribute('data-lucide') && !node.hasAttribute('data-lucide-processed')) {
hasNewIcons = true;
break;
}
if (node.querySelector && node.querySelector('[data-lucide]:not([data-lucide-processed])')) {
hasNewIcons = true;
break;
}
}
}
}
if (hasNewIcons) break;
}
if (hasNewIcons && !iconInitInProgress) {
debouncedInitIcons();
}
});
// Only observe for child additions, not attribute changes (to avoid Lucide's own DOM changes)
observer.observe(document.body, {
childList: true,
subtree: true
});
</script>
</body>
</html>

8
templates/blog.html

@ -29,10 +29,10 @@ @@ -29,10 +29,10 @@
{{range $index, $item := .BlogItems}}
<li>
<a href="#" class="article-link" data-dtag="{{$item.DTag}}" data-index="{{$index}}"{{if eq $index 0}} data-active="true"{{end}}>
<div class="article-link-title"><i data-lucide="file-text" class="icon-inline"></i> {{$item.Title}}</div>
<div class="article-link-title"><span class="icon-inline">{{icon "file-text"}}</span> {{$item.Title}}</div>
{{if $item.Time}}
<div class="article-link-meta">
<span class="article-date"><i data-lucide="clock" class="icon-inline"></i> {{$item.Time}}</span>
<span class="article-date"><span class="icon-inline">{{icon "clock"}}</span> {{$item.Time}}</span>
{{if $item.Author}}
<span class="article-author">{{template "user-badge-simple" (dict "Pubkey" $item.Author "Profiles" $.Profiles)}}</span>
{{end}}
@ -61,10 +61,10 @@ @@ -61,10 +61,10 @@
{{else}}
<article class="blog-article active">
<header class="article-header">
<h1 class="article-title"><i data-lucide="file-x" class="icon-inline"></i> No Articles</h1>
<h1 class="article-title"><span class="icon-inline">{{icon "file-x"}}</span> No Articles</h1>
</header>
<div class="article-content">
<p><i data-lucide="inbox" class="icon-inline"></i> No blog articles available yet.</p>
<p><span class="icon-inline">{{icon "inbox"}}</span> No blog articles available yet.</p>
</div>
</article>
{{end}}

22
templates/components.html

@ -1,21 +1,21 @@ @@ -1,21 +1,21 @@
{{/* Feed Component - Reusable feed sidebar */}}
{{define "feed"}}
<div class="feed-container">
<h3><i data-lucide="rss" class="icon-inline"></i> Recent Notes <a href="https://aitherboard.imwald.eu/feed/relay/theforest.nostr1.com" target="_blank" rel="noopener noreferrer" class="feed-link-header"><i data-lucide="external-link" class="icon-inline"></i> View Full Feed</a></h3>
<h3><span class="icon-inline">{{icon "rss"}}</span> Recent Notes <a href="https://aitherboard.imwald.eu/feed/relay/theforest.nostr1.com" target="_blank" rel="noopener noreferrer" class="feed-link-header"><span class="icon-inline">{{icon "external-link"}}</span> View Full Feed</a></h3>
<div class="feed-items">
{{range .FeedItems}}
<article class="feed-item">
<header class="feed-header">
<span class="feed-author">{{template "user-badge-simple" (dict "Pubkey" .Author "Profiles" $.Profiles)}}</span>
<time class="feed-time" datetime="{{.TimeISO}}"><i data-lucide="clock" class="icon-inline"></i> {{.Time}}</time>
<time class="feed-time" datetime="{{.TimeISO}}"><span class="icon-inline">{{icon "clock"}}</span> {{.Time}}</time>
</header>
<div class="feed-content">{{.Content}}</div>
<footer class="feed-footer">
<a href="{{.Link}}" class="feed-link" target="_blank" rel="noopener noreferrer"><i data-lucide="external-link" class="icon-inline"></i> View on Alexandria</a>
<a href="{{.Link}}" class="feed-link" target="_blank" rel="noopener noreferrer"><span class="icon-inline">{{icon "external-link"}}</span> View on Alexandria</a>
</footer>
</article>
{{else}}
<p class="feed-empty"><i data-lucide="inbox" class="icon-inline"></i> No recent notes available.</p>
<p class="feed-empty"><span class="icon-inline">{{icon "inbox"}}</span> No recent notes available.</p>
{{end}}
</div>
</div>
@ -24,14 +24,14 @@ @@ -24,14 +24,14 @@
{{/* Alert Component - Success message */}}
{{define "alert-success"}}
<div class="alert alert-success" role="alert">
<strong><i data-lucide="check-circle" class="icon-inline"></i> Success!</strong> {{.}}
<strong><span class="icon-inline">{{icon "check-circle"}}</span> Success!</strong> {{.}}
</div>
{{end}}
{{/* Alert Component - Error message */}}
{{define "alert-error"}}
<div class="alert alert-error" role="alert">
<strong><i data-lucide="alert-circle" class="icon-inline"></i> Error:</strong> {{.}}
<strong><span class="icon-inline">{{icon "alert-circle"}}</span> Error:</strong> {{.}}
</div>
{{end}}
@ -39,11 +39,11 @@ @@ -39,11 +39,11 @@
{{define "wiki-sidebar"}}
<aside class="wiki-sidebar" aria-label="About The Project navigation">
<nav class="wiki-nav">
<h2><i data-lucide="book-open" class="icon-inline"></i> About The Project</h2>
<h2><span class="icon-inline">{{icon "book-open"}}</span> About The Project</h2>
<ul class="wiki-menu">
<li><a href="/wiki"{{if eq .CanonicalURL (printf "%s/wiki" .SiteURL)}} class="active"{{end}}><i data-lucide="info" class="icon-inline"></i> Project Overview</a></li>
<li><a href="/wiki"{{if eq .CanonicalURL (printf "%s/wiki" .SiteURL)}} class="active"{{end}}><span class="icon-inline">{{icon "info"}}</span> Project Overview</a></li>
{{range .WikiPages}}
<li><a href="/wiki/{{.DTag}}"{{if eq $.CanonicalURL (printf "%s/wiki/%s" $.SiteURL .DTag)}} class="active"{{end}}><i data-lucide="file-text" class="icon-inline"></i> {{.Title}}</a></li>
<li><a href="/wiki/{{.DTag}}"{{if eq $.CanonicalURL (printf "%s/wiki/%s" $.SiteURL .DTag)}} class="active"{{end}}><span class="icon-inline">{{icon "file-text"}}</span> {{.Title}}</a></li>
{{end}}
</ul>
</nav>
@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
{{if .Picture}}
<img src="{{.Picture}}" alt="{{if .DisplayName}}{{.DisplayName}}{{else if .Name}}{{.Name}}{{else}}User{{end}}" class="user-badge-avatar" loading="lazy">
{{else}}
<span class="user-badge-avatar-placeholder"><i data-lucide="user" class="icon-inline"></i></span>
<span class="user-badge-avatar-placeholder"><span class="icon-inline">{{icon "user"}}</span></span>
{{end}}
<span class="user-badge-name">
{{if .DisplayName}}
@ -88,7 +88,7 @@ @@ -88,7 +88,7 @@
{{if and $profile $profile.Picture}}
<img src="{{$profile.Picture}}" alt="{{if $profile.DisplayName}}{{$profile.DisplayName}}{{else if $profile.Name}}{{$profile.Name}}{{else}}User{{end}}" class="user-badge-avatar" loading="lazy">
{{else}}
<span class="user-badge-avatar-placeholder"><i data-lucide="user" class="icon-inline"></i></span>
<span class="user-badge-avatar-placeholder"><span class="icon-inline">{{icon "user"}}</span></span>
{{end}}
<span class="user-badge-name">
{{if and $profile $profile.DisplayName}}

36
templates/contact.html

@ -7,12 +7,12 @@ @@ -7,12 +7,12 @@
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="margin-bottom: 0.5rem;">
<a href="https://aitherboard.imwald.eu/repos/naddr1qvzqqqrhnypzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqq9xw6t5vd5hgctyv4kqde47kt?tab=about" target="_blank" rel="noopener noreferrer" style="color: #0066cc; text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem;">
<i data-lucide="package" class="icon-inline"></i> Aitherboard Repository
<span class="icon-inline">{{icon "package"}}</span> Aitherboard Repository
</a>
</li>
<li style="margin-bottom: 0.5rem;">
<a href="https://github.com/ShadowySupercode" target="_blank" rel="noopener noreferrer" style="color: #0066cc; text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem;">
<i data-lucide="github" class="icon-inline"></i> GitHub: ShadowySupercode
<span class="icon-inline">{{icon "github"}}</span> GitHub: ShadowySupercode
</a>
</li>
</ul>
@ -38,13 +38,13 @@ @@ -38,13 +38,13 @@
{{if .Profile.Website}}
<p style="margin: 0.5rem 0 0 0;">
<a href="{{.Profile.Website}}" target="_blank" rel="noopener noreferrer" style="color: #0066cc; text-decoration: none; display: inline-flex; align-items: center; gap: 0.5rem;">
<i data-lucide="globe" class="icon-inline"></i> Website
<span class="icon-inline">{{icon "globe"}}</span> Website
</a>
</p>
{{end}}
{{if .Profile.NIP05}}
<p style="margin: 0.5rem 0 0 0; color: #666; font-size: 0.9rem; display: flex; align-items: center; gap: 0.5rem;">
<i data-lucide="check-circle" class="icon-inline" style="width: 16px; height: 16px;"></i> NIP-05: {{.Profile.NIP05}}
<span class="icon-inline">{{icon "check-circle"}}</span> NIP-05: {{.Profile.NIP05}}
</p>
{{end}}
</div>
@ -56,9 +56,9 @@ @@ -56,9 +56,9 @@
{{if .Success}}
<div class="alert alert-success" role="alert">
<strong><i data-lucide="check-circle" class="icon-inline"></i> Success!</strong> Your message has been submitted. Thank you for contacting us!
<strong><span class="icon-inline">{{icon "check-circle"}}</span> Success!</strong> Your message has been submitted. Thank you for contacting us!
{{if .EventID}}
<br><small><i data-lucide="hash" class="icon-inline"></i> Issue ID: {{.EventID}}</small>
<br><small><span class="icon-inline">{{icon "hash"}}</span> Issue ID: {{.EventID}}</small>
{{end}}
</div>
{{end}}
@ -95,8 +95,8 @@ @@ -95,8 +95,8 @@
</div>
<div class="form-actions">
<button type="submit" id="submit-btn" class="btn btn-primary"><i data-lucide="send" class="icon-inline"></i> Submit</button>
<button type="reset" class="btn btn-secondary"><i data-lucide="x" class="icon-inline"></i> Clear</button>
<button type="submit" id="submit-btn" class="btn btn-primary"><span class="icon-inline">{{icon "send"}}</span> Submit</button>
<button type="reset" class="btn btn-secondary"><span class="icon-inline">{{icon "x"}}</span> Clear</button>
</div>
</form>
@ -156,10 +156,7 @@ @@ -156,10 +156,7 @@
// Disable submit button
submitBtn.disabled = true;
submitBtn.innerHTML = '<i data-lucide="loader-2" class="icon-inline"></i> Signing...';
if (typeof lucide !== 'undefined') {
lucide.createIcons();
}
submitBtn.innerHTML = '<span class="icon-inline"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v4"/><path d="m16.2 7.8 2.9-2.9"/><path d="M18 12h4"/><path d="m16.2 16.2 2.9 2.9"/><path d="M12 18v4"/><path d="m4.9 19.1 2.9-2.9"/><path d="M2 12h4"/><path d="m4.9 4.9 2.9 2.9"/></svg></span> Signing...';
hideStatus();
try {
@ -212,10 +209,7 @@ @@ -212,10 +209,7 @@
};
// Sign the event
submitBtn.innerHTML = '<i data-lucide="loader-2" class="icon-inline"></i> Publishing...';
if (typeof lucide !== 'undefined') {
lucide.createIcons();
}
submitBtn.innerHTML = '<span class="icon-inline"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v4"/><path d="m16.2 7.8 2.9-2.9"/><path d="M18 12h4"/><path d="m16.2 16.2 2.9 2.9"/><path d="M12 18v4"/><path d="m4.9 19.1 2.9-2.9"/><path d="M2 12h4"/><path d="m4.9 4.9 2.9 2.9"/></svg></span> Publishing...';
const signedEvent = await window.nostr.signEvent(unsignedEvent);
// Send to API
@ -235,19 +229,13 @@ @@ -235,19 +229,13 @@
} else {
showStatus('Failed to publish issue: ' + (result.error || 'Unknown error'), true);
submitBtn.disabled = false;
submitBtn.innerHTML = '<i data-lucide="send" class="icon-inline"></i> Submit';
if (typeof lucide !== 'undefined') {
lucide.createIcons();
}
submitBtn.innerHTML = '<span class="icon-inline"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.854 2.147-10.94 10.939"/></svg></span> Submit';
}
} catch (error) {
console.error('Error:', error);
showStatus('Error: ' + error.message, true);
submitBtn.disabled = false;
submitBtn.innerHTML = '<i data-lucide="send" class="icon-inline"></i> Submit';
if (typeof lucide !== 'undefined') {
lucide.createIcons();
}
submitBtn.innerHTML = '<span class="icon-inline"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m22 2-7 20-4-9-9-4Z"/><path d="M22 2 11 13"/></svg></span> Submit';
}
});
})();

4
templates/ebooks.html

@ -29,12 +29,12 @@ @@ -29,12 +29,12 @@
<time datetime="{{.TimeISO}}">{{.Time}}</time>
</td>
<td>
<a href="https://alexandria.gitcitadel.eu/publication/naddr/{{.Naddr}}" target="_blank" rel="noopener noreferrer" class="btn btn-sm"><i data-lucide="external-link" class="icon-inline"></i> View</a>
<a href="https://alexandria.gitcitadel.eu/publication/naddr/{{.Naddr}}" target="_blank" rel="noopener noreferrer" class="btn btn-sm"><span class="icon-inline">{{icon "external-link"}}</span> View</a>
</td>
</tr>
{{else}}
<tr>
<td colspan="5" class="text-center"><i data-lucide="book-x" class="icon-inline"></i> No e-books found.</td>
<td colspan="5" class="text-center"><span class="icon-inline">{{icon "book-x"}}</span> No e-books found.</td>
</tr>
{{end}}
</tbody>

8
templates/landing.html

@ -9,19 +9,19 @@ @@ -9,19 +9,19 @@
<h2>Explore Our Content</h2>
<div class="feature-grid">
<div class="feature-card">
<h3><i data-lucide="book-open" class="icon-inline"></i> Wiki</h3>
<h3><span class="icon-inline">{{icon "book-open"}}</span> Wiki</h3>
<p>Browse our comprehensive wiki documentation.</p>
<ul>
{{range .WikiPages}}
<li><a href="/wiki/{{.DTag}}"><i data-lucide="file-text" class="icon-inline"></i> {{.Title}}</a></li>
<li><a href="/wiki/{{.DTag}}"><span class="icon-inline">{{icon "file-text"}}</span> {{.Title}}</a></li>
{{end}}
</ul>
</div>
<div class="feature-card">
<h3><i data-lucide="file-text" class="icon-inline"></i> Blog</h3>
<h3><span class="icon-inline">{{icon "file-text"}}</span> Blog</h3>
<p>Read the latest articles and updates.</p>
<a href="/blog" class="btn"><i data-lucide="arrow-right" class="icon-inline"></i> View Blog</a>
<a href="/blog" class="btn"><span class="icon-inline">{{icon "arrow-right"}}</span> View Blog</a>
</div>
</div>
</section>

10
templates/page.html

@ -2,14 +2,14 @@ @@ -2,14 +2,14 @@
<article class="wiki-page">
<nav class="breadcrumbs" aria-label="Breadcrumb">
<ol>
<li><a href="/"><i data-lucide="home" class="icon-inline"></i> Home</a></li>
<li><a href="/wiki"><i data-lucide="book-open" class="icon-inline"></i> Wiki</a></li>
<li aria-current="page"><i data-lucide="file-text" class="icon-inline"></i> {{.Title}}</li>
<li><a href="/"><span class="icon-inline">{{icon "home"}}</span> Home</a></li>
<li><a href="/wiki"><span class="icon-inline">{{icon "book-open"}}</span> Wiki</a></li>
<li aria-current="page"><span class="icon-inline">{{icon "file-text"}}</span> {{.Title}}</li>
</ol>
</nav>
<header class="page-header">
<h1><i data-lucide="file-text" class="icon-inline"></i> {{.Title}}</h1>
<h1><span class="icon-inline">{{icon "file-text"}}</span> {{.Title}}</h1>
{{if .Summary}}<p class="page-summary">{{.Summary}}</p>{{end}}
</header>
@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
{{if .TableOfContents}}
<aside class="table-of-contents">
<h2><i data-lucide="list" class="icon-inline"></i> Table of Contents</h2>
<h2><span class="icon-inline">{{icon "list"}}</span> Table of Contents</h2>
{{.TableOfContents}}
</aside>
{{end}}

6
templates/wiki.html

@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
{{define "content"}}
<article class="wiki-index-page">
<header class="page-header">
<h1><i data-lucide="book-open" class="icon-inline"></i> Wiki</h1>
<h1><span class="icon-inline">{{icon "book-open"}}</span> Wiki</h1>
{{if .Summary}}<p class="page-summary">{{.Summary}}</p>{{end}}
</header>
<div class="wiki-index-content">
{{if .WikiPages}}
<p><i data-lucide="arrow-right" class="icon-inline"></i> Select an article from the sidebar to get started.</p>
<p><span class="icon-inline">{{icon "arrow-right"}}</span> Select an article from the sidebar to get started.</p>
{{else}}
<p><i data-lucide="inbox" class="icon-inline"></i> No wiki articles available yet.</p>
<p><span class="icon-inline">{{icon "inbox"}}</span> No wiki articles available yet.</p>
{{end}}
</div>
</article>

Loading…
Cancel
Save