base.templ (1912B)
1 package base 2 3 templ Header() { 4 <header class="header" role="banner"> 5 <a href="/">lyrics</a> 6 <nav aria-label="Primary navigation"> 7 <ul> 8 <li><a href="/song/new">new song</a></li> 9 <li><a href="/release/new">new release</a></li> 10 <li><a href="/artist/new">new artist</a></li> 11 </ul> 12 </nav> 13 <form hx-get="/search"> 14 <input name="query" type="text" placeholder="search"/> 15 <select name="type"> 16 <option value="artist">artist</option> 17 <option value="release">release</option> 18 <option value="song">song</option> 19 </select> 20 </form> 21 </header> 22 } 23 24 templ Footer() { 25 <footer role="contentinfo"> 26 <a href="/">lyrics</a> 27 </footer> 28 } 29 30 templ Base(params BaseParams) { 31 <!DOCTYPE html> 32 <html lang="en"> 33 <head> 34 <meta charset="UTF-8"/> 35 <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 36 <script src="/static/js/htmx.min.js" defer></script> 37 <script src="/static/js/alpine.min.js" defer></script> 38 <script src="/static/js/lucide.min.js"></script> 39 <script src="/static/js/lucide-utils.js"></script> 40 <script src="/static/js/toast.js" defer></script> 41 <script src="/static/js/string-utils.js"></script> 42 <link rel="stylesheet" href="/static/minimal.css" type="text/css"/> 43 <link rel="stylesheet" href="/static/style.css" type="text/css"/> 44 <link rel="stylesheet" href="/static/picker-list.css" type="text/css"/> 45 <link rel="stylesheet" href="/static/toast.css" type="text/css"/> 46 <link rel="stylesheet" href="/static/table.css" type="text/css"/> 47 for _, stylesheet := range params.PageStylesheets { 48 <link rel="stylesheet" href={ "/static/" + stylesheet } type="text/css"/> 49 } 50 <title>{ params.Title }</title> 51 </head> 52 <body> 53 @Header() 54 <main> 55 <section class="toast-container"></section> 56 { children... } 57 </main> 58 @Footer() 59 </body> 60 <script> 61 initLucideIcons(); 62 </script> 63 </html> 64 }