From ae3ed05a7de7b9dcdd6cfd8925ee4c743dff975c Mon Sep 17 00:00:00 2001 From: Bob Farrell Date: Tue, 6 May 2025 19:41:33 +0100 Subject: [PATCH] WIP --- demo/src/app/views/websockets.zig | 10 ++++++++-- demo/src/app/views/websockets/index.zmpl | 7 ++++++- src/jetzig/channels/Channel.zig | 3 ++- src/jetzig/http/Server.zig | 2 +- src/jetzig/middleware/ChannelsMiddleware.zig | 5 +++-- src/jetzig/middleware/channels/channels.js | 8 ++++++-- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/demo/src/app/views/websockets.zig b/demo/src/app/views/websockets.zig index a823d4f..097d427 100644 --- a/demo/src/app/views/websockets.zig +++ b/demo/src/app/views/websockets.zig @@ -9,6 +9,12 @@ pub fn index(request: *jetzig.Request) !jetzig.View { return request.render(.ok); } +pub fn get(id: []const u8, request: *jetzig.Request) !jetzig.View { + var root = try request.data(.object); + try root.put("join_token", id); + return request.renderTemplate("websockets/index", .ok); +} + pub const Channel = struct { pub fn open(channel: jetzig.channels.Channel) !void { var state = try channel.state("game"); @@ -17,8 +23,8 @@ pub const Channel = struct { } pub const Actions = struct { - pub fn join(channel: jetzig.channels.Channel, token: []const u8) !void { - try channel.connect("game", token); + pub fn join(channel: jetzig.channels.Channel, join_token: []const u8) !void { + try channel.connect("game", join_token); } pub fn move(channel: jetzig.channels.Channel, cell: usize) !void { diff --git a/demo/src/app/views/websockets/index.zmpl b/demo/src/app/views/websockets/index.zmpl index 07b8b4f..3adee66 100644 --- a/demo/src/app/views/websockets/index.zmpl +++ b/demo/src/app/views/websockets/index.zmpl @@ -3,6 +3,10 @@
+@if ($.join_token) |join_token| + Join Game +@end +
🏆 @@ -45,9 +49,10 @@

Share this link to invite another player

-
+
+ \\ - , .{ host, request.path.base_path }); + , .{ host, route.view_name }); } }; diff --git a/src/jetzig/middleware/channels/channels.js b/src/jetzig/middleware/channels/channels.js index ae6828f..7a16b2b 100644 --- a/src/jetzig/middleware/channels/channels.js +++ b/src/jetzig/middleware/channels/channels.js @@ -104,9 +104,9 @@ const Jetzig = window.Jetzig; element.addEventListener('click', () => { const args = []; action.spec.params.forEach(param => { - const arg = element.dataset[param.name]; + const arg = element.dataset[transformParam(param.name)]; if (arg === undefined) { - throw new Error(`Expected 'data-${param.name}' attribute for '${action.name}' click handler.`); + throw new Error(`Expected 'data-${param.name}' HTML attribute for '${action.spec.name}' click handler.`); } else { args.push(element.dataset[param.name]); } @@ -119,6 +119,10 @@ const Jetzig = window.Jetzig; }); }; + const transformParam = (param) => param.toLowerCase() + .replace(/([-_][a-z])/g, + group => group.toUpperCase().replace('-', '').replace('_', '')); + const initScopes = (channel) => { document.querySelectorAll('jetzig-scope').forEach(element => { channel.scopeWrappers.push(element);