From ce9283e50658c8c0fe9ab9cc4fcb877f8b25bbca Mon Sep 17 00:00:00 2001 From: Janis Date: Wed, 19 Nov 2025 22:53:41 +0100 Subject: [PATCH] feat(nav): Implement SPA navigation for main menu and rules --- .../JavaScriptRoutingController.scala | 3 +- .../app/controllers/MainMenuController.scala | 27 +++++++++++++++-- .../app/views/mainmenu/navbar.scala.html | 4 +-- .../app/views/mainmenu/rules.scala.html | 3 -- knockoutwhistweb/conf/routes | 1 + knockoutwhistweb/public/javascripts/main.js | 30 ++++++++++++++++++- 6 files changed, 59 insertions(+), 9 deletions(-) diff --git a/knockoutwhistweb/app/controllers/JavaScriptRoutingController.scala b/knockoutwhistweb/app/controllers/JavaScriptRoutingController.scala index b2869d6..b625e13 100644 --- a/knockoutwhistweb/app/controllers/JavaScriptRoutingController.scala +++ b/knockoutwhistweb/app/controllers/JavaScriptRoutingController.scala @@ -17,8 +17,9 @@ class JavaScriptRoutingController @Inject()( Ok( JavaScriptReverseRouter("jsRoutes")( routes.javascript.MainMenuController.createGame, - routes.javascript.IngameController.startGame, routes.javascript.MainMenuController.joinGame, + routes.javascript.MainMenuController.navSPA, + routes.javascript.IngameController.startGame, routes.javascript.IngameController.kickPlayer, routes.javascript.IngameController.leaveGame, routes.javascript.IngameController.playCard, diff --git a/knockoutwhistweb/app/controllers/MainMenuController.scala b/knockoutwhistweb/app/controllers/MainMenuController.scala index bf41033..63d03ab 100644 --- a/knockoutwhistweb/app/controllers/MainMenuController.scala +++ b/knockoutwhistweb/app/controllers/MainMenuController.scala @@ -23,7 +23,7 @@ class MainMenuController @Inject()( // Pass the request-handling function directly to authAction (no nested Action) def mainMenu(): Action[AnyContent] = authAction { implicit request: AuthenticatedRequest[AnyContent] => - Ok(views.html.main("KnockOutWhist")(views.html.mainmenu.creategame(Some(request.user)))) + Ok(views.html.main("Knockout Whist - Create Game")(views.html.mainmenu.creategame(Some(request.user)))) } def index(): Action[AnyContent] = authAction { implicit request: AuthenticatedRequest[AnyContent] => @@ -88,6 +88,29 @@ class MainMenuController @Inject()( } def rules(): Action[AnyContent] = authAction { implicit request: AuthenticatedRequest[AnyContent] => - Ok(views.html.mainmenu.rules(Some(request.user))) + Ok(views.html.main("Knockout Whist - Rules")(views.html.mainmenu.rules(Some(request.user)))) } + + def navSPA(location: String) : Action[AnyContent] = authAction { implicit request: AuthenticatedRequest[AnyContent] => + location match { + case "0" => // Main Menu + Ok(Json.obj( + "status" -> "success", + "redirectUrl" -> routes.MainMenuController.mainMenu().url, + "content" -> views.html.mainmenu.creategame(Some(request.user)).toString + )) + case "1" => // Rules + Ok(Json.obj( + "status" -> "success", + "redirectUrl" -> routes.MainMenuController.rules().url, + "content" -> views.html.mainmenu.rules(Some(request.user)).toString + )) + case _ => + BadRequest(Json.obj( + "status" -> "failure", + "errorMessage" -> "Invalid form submission" + )) + } + } + } \ No newline at end of file diff --git a/knockoutwhistweb/app/views/mainmenu/navbar.scala.html b/knockoutwhistweb/app/views/mainmenu/navbar.scala.html index c19cd00..5eb501a 100644 --- a/knockoutwhistweb/app/views/mainmenu/navbar.scala.html +++ b/knockoutwhistweb/app/views/mainmenu/navbar.scala.html @@ -13,14 +13,14 @@