diff --git a/public/android-icon-144x144.png b/public/android-icon-144x144.png new file mode 100644 index 0000000..101f25a Binary files /dev/null and b/public/android-icon-144x144.png differ diff --git a/public/android-icon-192x192.png b/public/android-icon-192x192.png new file mode 100644 index 0000000..6598164 Binary files /dev/null and b/public/android-icon-192x192.png differ diff --git a/public/android-icon-36x36.png b/public/android-icon-36x36.png new file mode 100644 index 0000000..2c73870 Binary files /dev/null and b/public/android-icon-36x36.png differ diff --git a/public/android-icon-48x48.png b/public/android-icon-48x48.png new file mode 100644 index 0000000..e3e167d Binary files /dev/null and b/public/android-icon-48x48.png differ diff --git a/public/android-icon-72x72.png b/public/android-icon-72x72.png new file mode 100644 index 0000000..363ae89 Binary files /dev/null and b/public/android-icon-72x72.png differ diff --git a/public/android-icon-96x96.png b/public/android-icon-96x96.png new file mode 100644 index 0000000..f18359d Binary files /dev/null and b/public/android-icon-96x96.png differ diff --git a/public/apple-icon-114x114.png b/public/apple-icon-114x114.png new file mode 100644 index 0000000..d928a1d Binary files /dev/null and b/public/apple-icon-114x114.png differ diff --git a/public/apple-icon-120x120.png b/public/apple-icon-120x120.png new file mode 100644 index 0000000..cbb2631 Binary files /dev/null and b/public/apple-icon-120x120.png differ diff --git a/public/apple-icon-144x144.png b/public/apple-icon-144x144.png new file mode 100644 index 0000000..101f25a Binary files /dev/null and b/public/apple-icon-144x144.png differ diff --git a/public/apple-icon-152x152.png b/public/apple-icon-152x152.png new file mode 100644 index 0000000..395c7bf Binary files /dev/null and b/public/apple-icon-152x152.png differ diff --git a/public/apple-icon-180x180.png b/public/apple-icon-180x180.png new file mode 100644 index 0000000..68f9070 Binary files /dev/null and b/public/apple-icon-180x180.png differ diff --git a/public/apple-icon-57x57.png b/public/apple-icon-57x57.png new file mode 100644 index 0000000..ef69c3d Binary files /dev/null and b/public/apple-icon-57x57.png differ diff --git a/public/apple-icon-60x60.png b/public/apple-icon-60x60.png new file mode 100644 index 0000000..a833697 Binary files /dev/null and b/public/apple-icon-60x60.png differ diff --git a/public/apple-icon-72x72.png b/public/apple-icon-72x72.png new file mode 100644 index 0000000..363ae89 Binary files /dev/null and b/public/apple-icon-72x72.png differ diff --git a/public/apple-icon-76x76.png b/public/apple-icon-76x76.png new file mode 100644 index 0000000..fe344c2 Binary files /dev/null and b/public/apple-icon-76x76.png differ diff --git a/public/apple-icon-precomposed.png b/public/apple-icon-precomposed.png new file mode 100644 index 0000000..52ec936 Binary files /dev/null and b/public/apple-icon-precomposed.png differ diff --git a/public/apple-icon.png b/public/apple-icon.png new file mode 100644 index 0000000..52ec936 Binary files /dev/null and b/public/apple-icon.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..e1ea7b4 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..b769ca1 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon-96x96.png b/public/favicon-96x96.png new file mode 100644 index 0000000..f18359d Binary files /dev/null and b/public/favicon-96x96.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..68921fd Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/logo_nounder.svg b/public/logo_nounder.svg new file mode 100644 index 0000000..841809f --- /dev/null +++ b/public/logo_nounder.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/public/logo_underscore.svg b/public/logo_underscore.svg new file mode 100644 index 0000000..03f3088 --- /dev/null +++ b/public/logo_underscore.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + diff --git a/public/style.css b/public/style.css index e88c6dd..ba65c40 100644 --- a/public/style.css +++ b/public/style.css @@ -7253,8 +7253,7 @@ body { box-sizing: border-box; font-size: 0.875rem; line-height: 1.5em; - font-weight: 400; - background-image: url("data:image/png;iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAEGGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjcyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzIiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iNzIiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjcyIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni4wIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni4wIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjcuMSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+87tjqAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZG/S0JRFMc/amGUYZBDQ4NENVmUgdTSoJQF1WAG/Vr05Y9A7fGeEdIatAoFUUu/hvoLag2ag6AogmgLmotaSl7n+QQl8l7OOZ/7vfcc7j0X7NGMktUbBiCby2uRcNA7v7Dodb7iwCXmwRNTdHV6djxK3fH1gM2Md31mrfrn/h0tKwldAVuT8KiiannhCeGpjbxq8q6wR0nHVoTPhX2aXFD43tTjFr+ZnLL4x2QtGgmBvU3Ym6rheA0raS0rLC+nO5tZVyr3MV/iSuTmZiV2iXWiEyFMEC+TjBEiwCAj4gP04adfVtTJHyjnz7AmuYp4lQIaq6RIk8cn6rpUT0hMip6QmaFg9v9vX/XkkN+q7gpC44thfPSAcwdKRcP4PjaM0gk4nuEqV81fO4LhT9GLVa37ENxbcHFd1eJ7cLkNHU9qTIuVJYeYPZmE9zNoXYD2W2hesnpW2ef0EaKb8lU3sH8AvXLevfwLEU5nv19tQRgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJSSURBVHic7ZvBbsMgDIaTHKbtnNO0vf/bcW7VS3uoFlWhgAEb//bwrVrzyxjHhq/euu/7fam0z4+v5Xq7JD970llbApQT9aaz5b7A4QyXTghh1fAnm0FouxpC6M74Wn+iDHqN8PV2IUU85QSHzmvm7Pt+p2QSpz9RgM4Pty6OS+cclNYgtfpzBCj3cM3iuHRyQakJUq8/R4BKD1MXx6VTCgo1SL3+REUP7WxyLsythbrVn1mDCpbcjdnin5Y8KFIjXNpNqk7pO9TMKenU+tO1K1q7OlJn6znAnYtnrzN/n5F0NoudZaTO24NizkrBqTnA5RZVczCV1Nne/TFllOBQMomyKIo/I3TWn+/f+3zN0jqzBhV0utu091bfRRQpwbFOJk0RRY1rCzxR1CaT8Ld5bSoASxRRyCQsUUQhk/BEUZtMzhpUMDNEUYtMdhNFboInrVNLJruuCWjZAUUU0UmgKlFE61BQRNEKCeTSqSKKlkggl04zUbTweqgRRfRFQRFF5BbNoZM8KGrNBKLpZDPIO2+mWJRB2jOBaDpRgLTncdB0jgChzASi6RwBQpkJRNOJivB/+tWUojNrUMGS2TFb/NOSB0WtmcBeHe6ZSVdEUSLr3RBFqZlJF7d5yc5rnihKz0yaJoojZibdEEWp12zWoII/7ogid6sX/6/nkWRSYmZyyIyi5WuL2IyiFzIpNh/khQqwzyh6I5PsM4reyKTYjKIXMjlrUMHEZxQtt/hlGTCjaJVMuiSKEjpuiKKUjovbvKSOeaIorWOaKI7QcUMUpXQe+31Pc6xeN0AAAAAASUVORK5CYII="); } + font-weight: 400; } a { color: #666; diff --git a/public/themes/dark/accent_bg.svg b/public/themes/dark/accent_bg.svg new file mode 100644 index 0000000..739c4e8 --- /dev/null +++ b/public/themes/dark/accent_bg.svg @@ -0,0 +1,1482 @@ + + + + + +] + + +: + + ++ + + +~ + + += + + + + + +p + + + + + +h + + +[ + + + + + + + + +1 + + +? + + +$ + + +* + + + + + +l + + +( + + +] + + + + + +o + + + + + + + + +! + + + + + +b + + + + + +6 + + + + + + + + + + + + + + + + + +u + + +j + + +b + + +k + + ++ + + +] + + +] + + + + + +n + + + + + + + + + + + + + + + + + + + + +5 + + + + + + + + +| + + +w + + +p + + + + + + + + + + + +5 + + + + + +d + + + + + + + + +q + + +s + + +x + + +e + + +] + + +9 + + +l + + +g + + +a + + + + + + + + + + + + + + + + + +] + + + + + +u + + +2 + + +5 + + +~ + + + + + +/ + + +| + + + + + + + + +- + + +d + + +[ + + + + + + + + +x + + + + + + + + +( + + + + + +s + + + + + +$ + + +z + + + + + +c + + + + + +9 + + +j + + +v + + + + + +{ + + +/ + + + + + +{ + + +c + + +c + + +l + + +r + + + + + +g + + + + + +y + + +( + + +{ + + + + + +] + + += + + +3 + + + + + +/ + + +9 + + + + + + + + + + + +$ + + +$ + + +q + + + + + + + + + + + +4 + + + + + + + + +w + + + + + +: + + +6 + + +n + + +n + + + + + +3 + + + + + + + + +h + + +d + + +4 + + +@ + + + + + +i + + +~ + + +x + + +u + + +h + + +3 + + +8 + + + + + + + + +- + + ++ + + + + + +2 + + +i + + + + + + + + +r + + +y + + +a + + +t + + +[ + + + + + +/ + + +i + + +3 + + +7 + + +t + + +9 + + +! + + +) + + +6 + + +3 + + +[ + + +e + + + + + + + + + + + +z + + +0 + + +a + + +u + + + + + +o + + + + + + + + +b + + +c + + +1 + + +a + + + + + + + + +/ + + +9 + + +t + + + + + +c + + ++ + + + + + + + + +v + + + + + + + + + + + +0 + + + + + +d + + +l + + +r + + +p + + + + + + + + + + + +z + + +( + + + + + +e + + + + + + + + +3 + + +h + + +5 + + +0 + + +a + + +i + + +g + + + + + + + + + + + + + + +{ + + +[ + + +e + + +h + + + + + +4 + + + + + + + + + + + +) + + + + + +q + + +5 + + +: + + +- + + ++ + + +2 + + +g + + + + + +l + + +v + + += + + + + + + + + + + + +m + + +q + + + + + + + + +? + + + + + +j + + +q + + + + + + + + + + + + + + +@ + + +h + + + + + + + + +g + + +c + + +r + + +b + + +5 + + +@ + + + + + + + + + + + +$ + + + + + +s + + +} + + + + + + + + +| + + +o + + + + + +j + + + + + + + + + + + + + + +0 + + + + + +c + + +9 + + + + + + + + +3 + + + + + + + + +a + + + + + +x + + + + + + + + + + + +l + + +| + + +1 + + + + + += + + +| + + +5 + + +x + + +r + + +! + + +) + + +m + + +g + + +] + + + + + +9 + + ++ + + + + + + + + + + + + + + + + + + + + + + + +6 + + +m + + + + + +; + + + + + + + + + + + + + + +{ + + +c + + + + + +o + + +@ + + +x + + + + + + + + + + + +e + + +x + + + + + +m + + +u + + +9 + + + + + + + + + + + + + + + + + +s + + + + + + + + +5 + + ++ + + + + + + + + + + + + + + +y + + +b + + + + + +a + + +u + + + + + + + + +[ + + +h + + +7 + + +: + + + + + + + + +x + + +k + + +k + + +u + + + + + += + + +x + + +e + + +s + + + + + +g + + +e + + + + + + + + +3 + + + + + + + + +d + + + + + +1 + + +~ + + + + + + + + +2 + + +r + + + + + + + + +z + + + + + + + + +b + + +w + + + + + +7 + + + + + +0 + + + + + +! + + + + + + + + +u + + +5 + + + + + +t + + +~ + + +) + + + + + + + + + + + +r + + +9 + + +} + + +@ + + +? + + + + + +$ + + +k + + +b + + +6 + + +q + + +p + + + + + +f + + +n + + +? + + + + + +; + + + + + + + + +( + + +; + + + + + + + + +9 + + + + + +z + + + + + + + + +n + + +y + + + + + +9 + + +) + + +7 + + + + + +6 + + + + + +m + + + + + +) + + +m + + + + + +v + + diff --git a/public/themes/dark/accent_top_a.svg b/public/themes/dark/accent_top_a.svg new file mode 100644 index 0000000..347800c --- /dev/null +++ b/public/themes/dark/accent_top_a.svg @@ -0,0 +1,912 @@ + + +s + + +6 + + + + + +u + + +- + + + + + +6 + + +7 + + +0 + + +v + + +p + + += + + +a + + + + + +e + + + + + +6 + + + + + +d + + + + + +/ + + + + + + + + + + + + + + + + + + + + +) + + +h + + + + + +$ + + + + + ++ + + +a + + + + + +u + + + + + + + + +7 + + + + + +q + + + + + +v + + + + + +} + + +n + + +h + + +0 + + +b + + +g + + + + + +0 + + +p + + + + + + + + + + + + + + + + + + + + +| + + + + + + + + +x + + + + + +- + + +m + + +! + + + + + +- + + +l + + +{ + + + + + +~ + + + + + + + + +g + + + + + + + + + + + +v + + + + + + + + +! + + +u + + +- + + +l + + + + + +w + + + + + +( + + +d + + +o + + +/ + + +h + + +p + + + + + +b + + + + + + + + + + + +t + + += + + +8 + + +{ + + +k + + +0 + + + + + + + + +l + + + + + + + + + + + + + + +! + + +g + + +s + + + + + +( + + +/ + + +6 + + + + + +z + + +g + + +: + + +$ + + + + + +8 + + + + + +1 + + +3 + + +! + + +- + + +/ + + + + + + + + +! + + + + + + + + +r + + +3 + + + + + +q + + + + + +d + + + + + +s + + +$ + + +: + + +l + + + + + + + + +q + + +6 + + +e + + +z + + +7 + + +] + + + + + +6 + + +s + + + + + + + + + + + +c + + + + + +n + + + + + +f + + +n + + +z + + + + + +( + + +r + + + + + + + + +6 + + +[ + + + + + +4 + + +$ + + +u + + +f + + + + + + + + + + + + + + +| + + +p + + +0 + + +f + + + + + + + + +{ + + + + + + + + + + + +) + + +e + + + + + +} + + +[ + + +0 + + +l + + +y + + +9 + + +j + + +$ + + +x + + +3 + + + + + + + + + + + + + + +i + + +| + + + + + + + + ++ + + +5 + + +6 + + +s + + +k + + +! + + +d + + +a + + +/ + + + + + + + + + + + +3 + + + + + + + + +* + + +( + + +j + + +i + + +@ + + + + + +4 + + +h + + + + + +9 + + + + + + + + + + + + + + + + + +v + + +r + + +q + + + + + +d + + +) + + + + + +8 + + +: + + + + + +h + + +z + + +r + + + + + +} + + + + + +j + + + + + +9 + + +) + + +7 + + + + + +q + + +t + + +n + + + + + +b + + + + + +2 + + + + + +4 + + + + + + + + +: + + + + + +u + + +r + + + + + + + + + + + + + + +} + + + + + + + + +2 + + + + + +z + + +@ + + +p + + + + + +$ + + +? + + +k + + + + + +s + + +| + + diff --git a/public/themes/dark/empty-avatar.svg b/public/themes/dark/empty-avatar.svg new file mode 100644 index 0000000..acb0354 --- /dev/null +++ b/public/themes/dark/empty-avatar.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/public/themes/dark/gitlab.svg b/public/themes/dark/gitlab.svg new file mode 100644 index 0000000..46d2b7e --- /dev/null +++ b/public/themes/dark/gitlab.svg @@ -0,0 +1,77 @@ + + + + wm_grayscale + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/themes/dark/patreon_large.svg b/public/themes/dark/patreon_large.svg new file mode 100644 index 0000000..db30a77 --- /dev/null +++ b/public/themes/dark/patreon_large.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + diff --git a/public/themes/light/accent_bg.svg b/public/themes/light/accent_bg.svg new file mode 100644 index 0000000..894e9fe --- /dev/null +++ b/public/themes/light/accent_bg.svg @@ -0,0 +1,1482 @@ + + + + + +] + + + + + +m + + +2 + + + + + + + + +8 + + + + + + + + + + + + + + + + + +( + + +k + + + + + += + + +* + + + + + += + + + + + +} + + + + + + + + + + + + + + +[ + + +$ + + + + + +~ + + + + + +o + + + + + + + + +[ + + +) + + +n + + +z + + +8 + + +k + + + + + +( + + + + + +| + + ++ + + + + + +3 + + +u + + +j + + +: + + +0 + + +@ + + + + + + + + + + + +[ + + +t + + + + + + + + +h + + +! + + +i + + +5 + + + + + +$ + + +0 + + + + + + + + +j + + +l + + + + + + + + + + + + + + + + + + + + + + + + + + +x + + += + + +{ + + + + + +2 + + +9 + + +6 + + +g + + +2 + + + + + + + + + + + +9 + + + + + +g + + +6 + + + + + +3 + + +- + + +p + + +1 + + + + + +x + + + + + +: + + +d + + +r + + +i + + + + + +4 + + + + + +~ + + + + + +v + + + + + +v + + +l + + + + + +y + + +2 + + + + + + + + + + + + + + +n + + + + + +8 + + +w + + + + + + + + +1 + + + + + +? + + +~ + + +u + + + + + +k + + +} + + +b + + +2 + + + + + +q + + +x + + +7 + + + + + + + + + + + +h + + +h + + +1 + + +8 + + +b + + +r + + +| + + += + + + + + +u + + + + + +? + + + + + +k + + + + + +w + + +w + + +t + + +r + + +u + + + + + + + + +m + + + + + + + + += + + +r + + +9 + + +( + + +y + + +[ + + +n + + + + + +( + + +n + + +7 + + +l + + +- + + +y + + +m + + +] + + + + + +o + + + + + + + + + + + +( + + +9 + + + + + +x + + +/ + + +( + + +d + + + + + +x + + + + + +a + + +b + + + + + + + + +4 + + +p + + +t + + += + + + + + + + + + + + +7 + + +} + + + + + +k + + +c + + + + + +n + + + + + + + + + + + + + + + + + +: + + +@ + + +3 + + +s + + +j + + + + + + + + + + + + + + + + + + + + +7 + + + + + + + + + + + +| + + + + + +n + + + + + +b + + + + + +s + + + + + +d + + + + + +| + + + + + + + + +o + + +s + + + + + +x + + + + + + + + + + + +r + + +~ + + + + + +8 + + +} + + + + + + + + + + + + + + + + + +7 + + + + + + + + +l + + + + + +e + + +e + + + + + + + + + + + +a + + +l + + + + + +@ + + +1 + + +n + + +/ + + + + + +i + + +7 + + +q + + +6 + + +0 + + +s + + + + + + + + +l + + +6 + + +6 + + + + + + + + + + + + + + +] + + + + + += + + + + + + + + + + + +3 + + + + + +u + + +u + + +m + + + + + + + + + + + +$ + + + + + + + + + + + +b + + +v + + + + + += + + +l + + +! + + +| + + + + + + + + +? + + + + + +k + + + + + + + + + + + +: + + + + + += + + + + + + + + +u + + +w + + + + + + + + +e + + +f + + +1 + + +x + + +j + + +f + + + + + +; + + + + + +z + + +; + + + + + + + + +r + + +j + + + + + +[ + + +! + + +[ + + + + + +a + + + + + +8 + + + + + +6 + + + + + +6 + + + + + +) + + + + + +s + + + + + + + + +e + + + + + +! + + +z + + + + + +g + + + + + +- + + + + + ++ + + +c + + +b + + + + + + + + + + + + + + +i + + + + + +i + + +/ + + +( + + +6 + + +v + + +m + + +c + + + + + + + + + + + + + + +z + + +o + + +} + + +{ + + + + + +m + + +h + + +) + + +n + + +1 + + +i + + +v + + +? + + +g + + +/ + + + + + +! + + +( + + + + + +a + + + + + + + + +n + + +: + + +1 + + + + + +q + + +* + + +! + + +] + + +6 + + +$ + + +4 + + + + + +j + + + + + +7 + + +) + + +( + + + + + + + + + + + + + + + + + +( + + +j + + + + + +r + + +8 + + +! + + +x + + +q + + +d + + +e + + + + + + + + + + + +h + + +~ + + + + + + + + + + + +a + + +o + + +p + + + + + + + + +b + + + + + +5 + + + + + + + + + + + +: + + +| + + ++ + + + + + + + + + + + + + + +* + + + + + + + + +b + + +l + + +q + + + + + diff --git a/public/themes/light/accent_top_a.svg b/public/themes/light/accent_top_a.svg new file mode 100644 index 0000000..77a7af1 --- /dev/null +++ b/public/themes/light/accent_top_a.svg @@ -0,0 +1,903 @@ + + +d + + +k + + +{ + + + + + + + + + + + + + + += + + +/ + + +: + + + + + +~ + + + + + +f + + +2 + + +w + + +1 + + + + + +l + + + + + +} + + + + + +k + + + + + +! + + +y + + +/ + + + + + +@ + + +7 + + +* + + + + + + + + +p + + +8 + + +~ + + +s + + +0 + + +a + + +l + + +m + + +] + + + + + + + + + + + + + + +} + + +z + + + + + +f + + + + + +d + + + + + +j + + + + + +( + + +- + + +? + + +b + + +o + + + + + +j + + + + + + + + + + + + + + +y + + +2 + + + + + + + + +{ + + + + + +w + + +@ + + + + + +~ + + +b + + +l + + +n + + + + + + + + + + + +{ + + +o + + +c + + +] + + +7 + + +1 + + +g + + +o + + + + + +@ + + + + + + + + +) + + + + + +: + + +b + + +r + + +~ + + + + + +9 + + +! + + +: + + +[ + + + + + +| + + +: + + +7 + + + + + +t + + +9 + + + + + +v + + + + + + + + +0 + + +z + + +y + + + + + +) + + +i + + +6 + + +x + + +$ + + + + + + + + +8 + + +c + + +r + + +y + + +c + + +$ + + + + + +/ + + + + + +1 + + +; + + + + + +u + + +| + + + + + + + + +h + + + + + +! + + + + + + + + + + + +m + + + + + + + + +i + + +e + + + + + + + + +! + + +| + + +; + + +! + + + + + +: + + +j + + +c + + +e + + +z + + + + + +w + + +| + + + + + +* + + +@ + + + + + +l + + + + + +i + + +6 + + +w + + +e + + +g + + +2 + + + + + +s + + +x + + + + + +j + + + + + + + + +: + + +z + + + + + +0 + + +j + + +d + + +9 + + + + + +( + + + + + + + + + + + ++ + + +i + + + + + +4 + + +d + + + + + + + + + + + +m + + + + + +: + + +5 + + +{ + + + + + + + + +h + + + + + + + + + + + +7 + + + + + + + + +l + + + + + + + + + + + +j + + + + + + + + + + + +) + + +) + + +! + + + + + +y + + +; + + +b + + + + + +0 + + +j + + +u + + + + + + + + +h + + + + + + + + +d + + +[ + + +* + + +} + + +l + + +* + + + + + + + + +[ + + +g + + +4 + + +5 + + +) + + +i + + + + + +u + + + + + +4 + + + + + + + + + + + + + + + + + +@ + + + + + + + + + + + +x + + +) + + + + + +0 + + + + + + + + +$ + + +4 + + +c + + +n + + +k + + + + + + + + +k + + + + + +} + + += + + + + + + + + +l + + +[ + + + + + + + + +l + + +8 + + +r + + += + + diff --git a/public/themes/light/empty-avatar.svg b/public/themes/light/empty-avatar.svg new file mode 100644 index 0000000..62aaa3e --- /dev/null +++ b/public/themes/light/empty-avatar.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/public/themes/light/gitlab.svg b/public/themes/light/gitlab.svg new file mode 100644 index 0000000..46d2b7e --- /dev/null +++ b/public/themes/light/gitlab.svg @@ -0,0 +1,77 @@ + + + + wm_grayscale + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/public/themes/light/patreon_large.svg b/public/themes/light/patreon_large.svg new file mode 100644 index 0000000..b40cf2f --- /dev/null +++ b/public/themes/light/patreon_large.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + diff --git a/src/config/types.go b/src/config/types.go index ab18b76..b935cad 100644 --- a/src/config/types.go +++ b/src/config/types.go @@ -13,6 +13,7 @@ const ( type HMNConfig struct { Env Environment Addr string + BaseUrl string Postgres PostgresConfig } diff --git a/src/hmnurl/hmnurl.go b/src/hmnurl/hmnurl.go new file mode 100644 index 0000000..d2be1e7 --- /dev/null +++ b/src/hmnurl/hmnurl.go @@ -0,0 +1,46 @@ +package hmnurl + +import ( + "net/url" + + "git.handmade.network/hmn/hmn/src/config" +) + +const StaticPath = "/public" +const StaticThemePath = "/public/themes" + +type Q struct { + Name string + Value string +} + +func Url(path string, query []Q) string { + result := config.Config.BaseUrl + "/" + trim(path) + if q := encodeQuery(query); q != "" { + result += "?" + q + } + return result +} + +func StaticUrl(path string, query []Q) string { + return Url(StaticPath+"/"+trim(path), query) +} + +func StaticThemeUrl(path string, theme string, query []Q) string { + return Url(StaticThemePath+"/"+theme+"/"+trim(path), query) +} + +func trim(path string) string { + if path[0] == '/' { + return path[1:] + } + return path +} + +func encodeQuery(query []Q) string { + result := url.Values{} + for _, q := range query { + result.Set(q.Name, q.Value) + } + return result.Encode() +} diff --git a/src/hmnurl/hmnurl_test.go b/src/hmnurl/hmnurl_test.go new file mode 100644 index 0000000..959c016 --- /dev/null +++ b/src/hmnurl/hmnurl_test.go @@ -0,0 +1,24 @@ +package hmnurl + +import ( + "testing" + + "git.handmade.network/hmn/hmn/src/config" + "github.com/stretchr/testify/assert" +) + +func TestUrl(t *testing.T) { + defer func(original string) { + config.Config.BaseUrl = original + }(config.Config.BaseUrl) + config.Config.BaseUrl = "http://handmade.test" + + t.Run("no query", func(t *testing.T) { + result := Url("/test/foo", nil) + assert.Equal(t, "http://handmade.test/test/foo", result) + }) + t.Run("yes query", func(t *testing.T) { + result := Url("/test/foo", []Q{{"bar", "baz"}, {"zig??", "zig & zag!!"}}) + assert.Equal(t, "http://handmade.test/test/foo?bar=baz&zig%3F%3F=zig+%26+zag%21%21", result) + }) +} diff --git a/src/templates/src/include/footer.html b/src/templates/src/include/footer.html index cebc102..e1be899 100644 --- a/src/templates/src/include/footer.html +++ b/src/templates/src/include/footer.html @@ -1 +1,35 @@ -I'm a footer~! \ No newline at end of file + diff --git a/src/templates/src/include/header.html b/src/templates/src/include/header.html index 7e685d8..84f5165 100644 --- a/src/templates/src/include/header.html +++ b/src/templates/src/include/header.html @@ -1 +1,96 @@ -I'm a header! \ No newline at end of file +
+ {{/* TODO */}} + {{/*
+ {% if user.is_authenticated %} + {% if user.is_superuser %} + Admin + {% endif %} + {{user.username}} + Logout + {% else %} + Register + +
+
+ {% csrf_token %} + + {% if error_message %} + + {% endif %} + + + + + + + + + + {# #} + +
{{ error_message }}
Forgot your password?
+
+ +
+
+
+ {% endif %} +
*/}} + +
+ + diff --git a/src/templates/src/layouts/base.html b/src/templates/src/layouts/base.html index cbd07da..734c5ca 100644 --- a/src/templates/src/layouts/base.html +++ b/src/templates/src/layouts/base.html @@ -18,7 +18,7 @@ {{ end }} - + {{/* TODO: These are the base64 encodings of bglight.png and bgdark.png. Rather than manually putting the encoding here, it would be nice to automatically calculate it when the server starts up and pass it in. */}} {{ $bglight := "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAEGGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjcyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzIiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iNzIiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjcyIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni4wIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni4wIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjcuMSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQyMToyMjozMC0wNjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+NRFFrAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZG/S0JRFMc/amGUYZBDQ4NENVmUgdTSoJQF1WAG/Vr05Y9A7fGeEdIatAoFUUu/hvoLag2ag6AogmgLmotaSl7n+QQl8l7OOZ/7vfcc7j0X7NGMktUbBiCby2uRcNA7v7Dodb7iwCXmwRNTdHV6djxK3fH1gM2Md31mrfrn/h0tKwldAVuT8KiiannhCeGpjbxq8q6wR0nHVoTPhX2aXFD43tTjFr+ZnLL4x2QtGgmBvU3Ym6rheA0raS0rLC+nO5tZVyr3MV/iSuTmZiV2iXWiEyFMEC+TjBEiwCAj4gP04adfVtTJHyjnz7AmuYp4lQIaq6RIk8cn6rpUT0hMip6QmaFg9v9vX/XkkN+q7gpC44thfPSAcwdKRcP4PjaM0gk4nuEqV81fO4LhT9GLVa37ENxbcHFd1eJ7cLkNHU9qTIuVJYeYPZmE9zNoXYD2W2hesnpW2ef0EaKb8lU3sH8AvXLevfwLEU5nv19tQRgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJOSURBVHic7ZtRksMgCIaTPOcI3v9MPYBHyHv2obOZTlIVFeSHyltnm38QCehXdo0xnkulHcex7Pue/OxJZ20JUE7Um86W+wKHM1w6IYRVw59sBqHtagihO+Nr/Xlk0GeE930nRTzlBIfOZ+bEGE9KJnH68wjQ/eHWxXHp3IPSGqRWf64A5R6uWRyXTi4oNUHq9ecKUOlh6uK4dEpBoQap159H0UM7m9wLc2uhbvVn1qCCJXdjtvi3JQ+K1AiXdpOqU/oONXNKOrX+dO2K1q6O1Nl6DnD34tnrzP9nJJ3NYmcZqfP1oJizUnBqDnC5RdUcTCV1tm9/TBklOJRMoiyK4s8InfX1ep3zNUvrzBpU0Olu095bfRdRpATHOpk0RRQ1ri3wRFGbTMLf5rWpACxRRCGTsEQRhUzCE0VtMjlrUMHMEEUtMtlNFLkJnrROLZnsuiagZQcUUUQngapEEa1DQRFFKySQS6eKKFoigVw6zUTRwuuhRhTRFwVFFJFbNIdO8qCoNROIppPNIO+8mWKPDNKeCUTTeQRIex4HTecKEMpMIJrOFSCUmUA0nUcR/qVfTSk6swYVLJkds8W/LXlQ1JoJ7NXhnpl0RRQlst4NUZSamXRxm5fsvOaJovTMpGmiOGJm0g1RlHrNZg0q+OOOKHK3evH/eh5JJiVmJofMKFq+tojNKHohk2LzQV6oAPuMojcyyT6j6I1Mis0oeiGTswYVTHxG0XKLX5YBM4pWyaRLoiih44YoSum4uM1L6pgnitI6poniCB03RFFK5w8yFS9yPecAUAAAAABJRU5ErkJggg==" }} {{ $bgdark := "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAEGGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjcyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNzIiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iNzIiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjcyIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI5Ni4wIgogICB0aWZmOllSZXNvbHV0aW9uPSI5Ni4wIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjcuMSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQyMToyMzoxNS0wNjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+87tjqAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZG/S0JRFMc/amGUYZBDQ4NENVmUgdTSoJQF1WAG/Vr05Y9A7fGeEdIatAoFUUu/hvoLag2ag6AogmgLmotaSl7n+QQl8l7OOZ/7vfcc7j0X7NGMktUbBiCby2uRcNA7v7Dodb7iwCXmwRNTdHV6djxK3fH1gM2Md31mrfrn/h0tKwldAVuT8KiiannhCeGpjbxq8q6wR0nHVoTPhX2aXFD43tTjFr+ZnLL4x2QtGgmBvU3Ym6rheA0raS0rLC+nO5tZVyr3MV/iSuTmZiV2iXWiEyFMEC+TjBEiwCAj4gP04adfVtTJHyjnz7AmuYp4lQIaq6RIk8cn6rpUT0hMip6QmaFg9v9vX/XkkN+q7gpC44thfPSAcwdKRcP4PjaM0gk4nuEqV81fO4LhT9GLVa37ENxbcHFd1eJ7cLkNHU9qTIuVJYeYPZmE9zNoXYD2W2hesnpW2ef0EaKb8lU3sH8AvXLevfwLEU5nv19tQRgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJSSURBVHic7ZvBbsMgDIaTHKbtnNO0vf/bcW7VS3uoFlWhgAEb//bwrVrzyxjHhq/euu/7fam0z4+v5Xq7JD970llbApQT9aaz5b7A4QyXTghh1fAnm0FouxpC6M74Wn+iDHqN8PV2IUU85QSHzmvm7Pt+p2QSpz9RgM4Pty6OS+cclNYgtfpzBCj3cM3iuHRyQakJUq8/R4BKD1MXx6VTCgo1SL3+REUP7WxyLsythbrVn1mDCpbcjdnin5Y8KFIjXNpNqk7pO9TMKenU+tO1K1q7OlJn6znAnYtnrzN/n5F0NoudZaTO24NizkrBqTnA5RZVczCV1Nne/TFllOBQMomyKIo/I3TWn+/f+3zN0jqzBhV0utu091bfRRQpwbFOJk0RRY1rCzxR1CaT8Ld5bSoASxRRyCQsUUQhk/BEUZtMzhpUMDNEUYtMdhNFboInrVNLJruuCWjZAUUU0UmgKlFE61BQRNEKCeTSqSKKlkggl04zUbTweqgRRfRFQRFF5BbNoZM8KGrNBKLpZDPIO2+mWJRB2jOBaDpRgLTncdB0jgChzASi6RwBQpkJRNOJivB/+tWUojNrUMGS2TFb/NOSB0WtmcBeHe6ZSVdEUSLr3RBFqZlJF7d5yc5rnihKz0yaJoojZibdEEWp12zWoII/7ogid6sX/6/nkWRSYmZyyIyi5WuL2IyiFzIpNh/khQqwzyh6I5PsM4reyKTYjKIXMjlrUMHEZxQtt/hlGTCjaJVMuiSKEjpuiKKUjovbvKSOeaIorWOaKI7QcUMUpXQe+31Pc6xeN0AAAAAASUVORK5CYII=" }} @@ -31,18 +31,16 @@ background-size: "{{ . }}"; {{ end }} {{ else }} - background-color: #{{ or .ProjectColor "999999" }}; - {{ if eq .Theme "dark" }} - background-image: url('data:image/png;{{ $bgdark }}'); - {{ else }} - background-image: url('data:image/png;{{ $bglight }}'); - {{ end }} + {{ $bgcolor := or .Project.Color "999999" }} + background-color: #{{ eq .Theme "dark" | ternary (darken $bgcolor 0.6) (brighten $bgcolor 0.6) }}; + background-image: url('data:image/png;base64,{{ eq .Theme "dark" | ternary $bgdark $bglight }}'); + background-size: auto; {{ end }} } {{ block "extrahead" . }}{{ end }} - + @@ -64,9 +62,9 @@
- {{ template "header.html" }} + {{ template "header.html" . }} based - {{ template "footer.html" }} + {{ template "footer.html" . }}
diff --git a/src/templates/src/project.css b/src/templates/src/project.css index ce071e7..9748bc1 100644 --- a/src/templates/src/project.css +++ b/src/templates/src/project.css @@ -99,6 +99,7 @@ all of this CSS. header .menu-bar .hmdev-logo { background-image:url("{{ static "logo_nounder.svg" }}"); } + header .menu-bar .hmdev-logo .underscore { background-image:url("{{ static "logo_underscore.svg" }}"); } @@ -107,18 +108,6 @@ header .menu-bar .hmdev-logo.project { background-image:url("{{ static "logo_net.svg" }}"); } -.links .thing#projects { - background-image:url("{{ statictheme .Theme "project_thing.svg" }}"); -} - -.links .thing#discussion { - background-image:url("{{ statictheme .Theme "discuss_thing.svg" }}"); -} - -.links .thing#blogs { - background-image:url("{{ statictheme .Theme "blog_thing.svg" }}"); -} - .half.light { background-image:url("{{ statictheme "light" "accent_top_a.svg" }}"); } diff --git a/src/templates/templates.go b/src/templates/templates.go index b3bdd81..9184fd6 100644 --- a/src/templates/templates.go +++ b/src/templates/templates.go @@ -4,9 +4,11 @@ import ( "embed" "fmt" "html/template" + "net/url" "strings" "time" + "git.handmade.network/hmn/hmn/src/hmnurl" "git.handmade.network/hmn/hmn/src/logging" "github.com/Masterminds/sprig" "github.com/teacat/noire" @@ -77,21 +79,38 @@ var HMNTemplateFuncs = template.FuncMap{ } return noire.NewHex(hexColor).Shade(amount).Hex(), nil }, - // TODO: Actually put paths in here, duh + "projecturl": func(url string) string { + return hmnurl.Url(url, nil) // TODO: Use project subdomain + }, + "projecturlq": func(url string, query string) string { + absUrl := hmnurl.Url(url, nil) + return fmt.Sprintf("%s?%s", absUrl, query) // TODO: Use project subdomain + }, + "query": func(args ...string) string { + query := url.Values{} + for i := 0; i < len(args); i += 2 { + query.Set(args[i], args[i+1]) + } + return query.Encode() + }, "static": func(filepath string) string { - return fmt.Sprintf("A static file at %v, busted with %v", filepath, cachebust) + return hmnurl.StaticUrl(filepath, []hmnurl.Q{{"v", cachebust}}) }, "staticnobust": func(filepath string) string { - return fmt.Sprintf("A static file at %v", filepath) + return hmnurl.StaticUrl(filepath, nil) }, "statictheme": func(theme string, filepath string) string { - return fmt.Sprintf("A static file for the current theme at %v, busted with %v", filepath, cachebust) + return hmnurl.StaticThemeUrl(filepath, theme, []hmnurl.Q{{"v", cachebust}}) }, "staticthemenobust": func(theme string, filepath string) string { - return fmt.Sprintf("A static file for the current theme at %v", filepath) + return hmnurl.StaticThemeUrl(filepath, theme, nil) }, "url": func(url string) string { - return "/" + url + return hmnurl.Url(url, nil) + }, + "urlq": func(url string, query string) string { + absUrl := hmnurl.Url(url, nil) + return fmt.Sprintf("%s?%s", absUrl, query) }, } diff --git a/src/templates/types.go b/src/templates/types.go index 4a5144b..5875ac3 100644 --- a/src/templates/types.go +++ b/src/templates/types.go @@ -5,11 +5,24 @@ type BaseData struct { CanonicalLink string OpenGraphItems []OpenGraphItem BackgroundImage BackgroundImage - ProjectColor string + Project Project Theme string BodyClasses []string } +type Project struct { + Name string + Subdomain string + Color string + + IsHMN bool + + HasBlog bool + HasForum bool + HasWiki bool + HasLibrary bool +} + type OpenGraphItem struct { Property string Name string diff --git a/src/website/routes.go b/src/website/routes.go index 5faab94..7cce840 100644 --- a/src/website/routes.go +++ b/src/website/routes.go @@ -28,6 +28,7 @@ func NewWebsiteRoutes(conn *pgxpool.Pool) http.Handler { routes.GET("/", routes.Index) routes.GET("/project/:id", routes.Project) routes.GET("/assets/project.css", routes.ProjectCSS) + routes.ServeFiles("/public/*filepath", http.Dir("public")) return routes } @@ -42,10 +43,23 @@ This context should also provide a sub-logger with request fields so we can easi which URLs are having problems. */ +// TODO: Make all these routes automatically pull general template data +// TODO: + func (s *websiteRoutes) Index(rw http.ResponseWriter, r *http.Request, p httprouter.Params) { err := templates.Templates["index.html"].Execute(rw, templates.BaseData{ - ProjectColor: "cd4e31", - Theme: "dark", + Project: templates.Project{ + Name: "Handmade Network", + Color: "cd4e31", + + IsHMN: true, + + HasBlog: true, + HasForum: true, + HasWiki: true, + HasLibrary: true, + }, + Theme: "dark", }) if err != nil { panic(err) @@ -80,6 +94,7 @@ func (s *websiteRoutes) ProjectCSS(rw http.ResponseWriter, r *http.Request, p ht Theme: "dark", } + rw.Header().Add("Content-Type", "text/css") err := templates.Templates["project.css"].Execute(rw, templateData) if err != nil { logging.Error().Err(err).Msg("failed to generate project CSS")