diff --git a/assets.zig b/assets.zig index 5a57d7c..28c4dde 100644 --- a/assets.zig +++ b/assets.zig @@ -1,3 +1,6 @@ -/// Generated by build script +/// JS Generated by build script pub const @"index.js" = @embedFile("zig-cache/index.js"); + pub const @"index.css" = @embedFile("assets/index.css"); +pub const @"vidzig.png" = @embedFile("assets/vidzig.png"); +pub const @"vidzig.svg" = @embedFile("assets/vidzig.svg"); diff --git a/assets/index.css b/assets/index.css index 29aa875..69ef119 100644 --- a/assets/index.css +++ b/assets/index.css @@ -72,3 +72,11 @@ ul { .description_txt { color: #8be9fd; } + +#head_div { + display: flex; +} + +#head_div * { + padding: 5px; +} diff --git a/assets/vidzig.inkscape.svg b/assets/vidzig.inkscape.svg new file mode 100644 index 0000000..44ca6f7 --- /dev/null +++ b/assets/vidzig.inkscape.svg @@ -0,0 +1,80 @@ + + + + diff --git a/assets/vidzig.png b/assets/vidzig.png new file mode 100644 index 0000000..102b52a Binary files /dev/null and b/assets/vidzig.png differ diff --git a/assets/vidzig.svg b/assets/vidzig.svg new file mode 100644 index 0000000..a6e1aeb --- /dev/null +++ b/assets/vidzig.svg @@ -0,0 +1,39 @@ + + + + diff --git a/src/main.zig b/src/main.zig index c7a06e1..e6051b3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,6 +3,7 @@ const assets = @import("assets"); const routes = @import("routes.zig"); +const minify = @import("minify.zig"); const sendPlainResponseText = @import("status_response.zig").sendPlainResponseText; const DownloadQueue = @import("DownloadQueue.zig"); const Config = @import("Config.zig"); @@ -127,7 +128,17 @@ fn tryHandleRequest(state: *State, res: *std.http.Server.Response) !void { } else if (std.mem.eql(u8, path, "/static/index.js")) { try routes.static(res, assets.@"index.js", "application/javascript"); } else if (std.mem.eql(u8, path, "/static/index.css")) { - try routes.static(res, assets.@"index.css", "text/css"); + try routes.static(res, comptime minify.minifyCSS(assets.@"index.css"), "text/css"); + } else if (std.mem.eql(u8, path, "/static/vidzig.png") or + std.mem.eql(u8, path, "/favicon.ico")) + { + try routes.static(res, assets.@"vidzig.png", "image/png"); + } else if (std.mem.eql(u8, path, "/static/vidzig.svg")) { + try routes.static( + res, + comptime minify.minifyHTML(assets.@"vidzig.svg"), + "image/svg+xml", + ); } else if (std.mem.startsWith(u8, path, "/vids/")) { try routes.vidsRoute(state, res); } else { diff --git a/src/minify.zig b/src/minify.zig index 3f3e6ee..1a1b830 100644 --- a/src/minify.zig +++ b/src/minify.zig @@ -2,18 +2,30 @@ const std = @import("std"); /// Very basic comptime HTML minification pub fn minifyHTML(comptime html: []const u8) []const u8 { - var out: []const u8 = &[_]u8{}; + @setEvalBranchQuota(10000); + + var out: []const u8 = ""; var i = 0; while (i < html.len) { if (html[i] == '\n' or i == 0) { if (i != 0) { i += 1; } - while (html[i] == ' ') { + while (i < html.len and html[i] == ' ') { i += 1; } + + if (i < html.len and html[i] != '<') { + out = out ++ " "; + } } + if (i >= html.len) + break; + + if (html[i] == '\n') + continue; + out = out ++ [_]u8{html[i]}; i += 1; @@ -21,3 +33,24 @@ pub fn minifyHTML(comptime html: []const u8) []const u8 { return out; } + +/// Minify CSS. Guaranteed to break the majority of CSS files. +pub fn minifyCSS(comptime css: []const u8) []const u8 { + @setEvalBranchQuota(10000); + + var out: []const u8 = ""; + var i = 0; + while (i < css.len) { + const c = css[i]; + + const is_whitespace = std.ascii.isWhitespace(c); + + if (!is_whitespace or (i + 1 < css.len and css[i + 1] == '*')) { + out = out ++ [_]u8{c}; + } + + i += 1; + } + + return out; +} diff --git a/src/routes.zig b/src/routes.zig index 01aa7e6..e7ef495 100644 --- a/src/routes.zig +++ b/src/routes.zig @@ -50,6 +50,10 @@ pub fn indexRoute( \\ \\ \\ + \\
+ \\ logo + \\

Vidzig

+ \\
)); var paused = false;