diff --git a/templates/challenge.html b/templates/challenge.html index 7787afc..a0bcba7 100644 --- a/templates/challenge.html +++ b/templates/challenge.html @@ -260,7 +260,9 @@ diff --git a/templates/components/challenge_area.html b/templates/components/challenge_area.html index c1916c4..5bbb772 100644 --- a/templates/components/challenge_area.html +++ b/templates/components/challenge_area.html @@ -19,7 +19,7 @@ -
+
{% endblock %} diff --git a/views/challenge.py b/views/challenge.py index ba4a14e..e4795d4 100644 --- a/views/challenge.py +++ b/views/challenge.py @@ -98,10 +98,10 @@ def run_challenge(self, key: ChallengeKey, user_code: str) -> TypeCheckResult: # Make sure user code ends with a new line to avoid issue #63. return self._type_check_with_pyright(user_code + "\n", challenge.test_code) - def get_random_challenge(self) -> dict[str, str]: + def get_random_challenge_pathname(self) -> str: level = random.choice(list(self.challenges_groupby_level.keys())) name = random.choice(self.challenges_groupby_level[level]) - return {"level": level, "name": name} + return f"/{level}/{name}" @staticmethod def _load_challenges(root_dir: Path) -> dict[ChallengeKey, Challenge]: diff --git a/views/views.py b/views/views.py index cf54522..bdcf8b3 100644 --- a/views/views.py +++ b/views/views.py @@ -2,14 +2,7 @@ import platform from functools import wraps -from flask import ( - abort, - Blueprint, - jsonify, - redirect, - render_template, - request, -) +from flask import Blueprint, abort, jsonify, redirect, render_template, request from flask_htmx import HTMX from .challenge import ChallengeKey, Level, challenge_manager @@ -38,6 +31,7 @@ def index(): return render_template( "index.html", challenges_groupby_level=challenge_manager.challenges_groupby_level, + pathname=challenge_manager.get_random_challenge_pathname(), ) @@ -66,7 +60,12 @@ def get_challenge(level: str, name: str): if htmx: # In this case, challenges_groupby_level is transferred, since it's not # used in challenge_area.html + params[ + "challenge_main_htmx" + ] = "hx-get=/random hx-target=#sidebar-actions-random hx-trigger=load" return render_template("components/challenge_area.html", **params) + + params["pathname"] = challenge_manager.get_random_challenge_pathname() return render_template("challenge.html", **params) @@ -98,6 +97,13 @@ def run_challenge(level: str, name: str): @app_views.route("/random", methods=["GET"]) -def run_random_challenge(): - challenge = challenge_manager.get_random_challenge() - return redirect(f"/{challenge['level']}/{challenge['name']}") +def get_random(): + pathname = challenge_manager.get_random_challenge_pathname() + + if htmx: + return render_template( + "components/randomizer.html", + pathname=pathname, + ) + + return redirect(pathname)