From: Chris Fulljames Date: Tue, 18 Feb 2025 01:23:10 +0000 (-0500) Subject: More ajax X-Git-Url: https://littlesong.place/gitweb/?a=commitdiff_plain;h=65d5087aa2d782df62128e744f5da879bc6848af;p=littlesongplace.git More ajax --- diff --git a/main.py b/main.py index 3e16b75..37baa57 100644 --- a/main.py +++ b/main.py @@ -97,7 +97,7 @@ def signup_post(): if error: app.logger.info("Failed signup attempt") - return redirect(request.referrer) + return auto_redirect(request.referrer) password = bcrypt.hashpw(password.encode(), bcrypt.gensalt()) timestamp = datetime.now(timezone.utc).isoformat() @@ -107,7 +107,7 @@ def signup_post(): flash("User created. Please sign in to continue.", "success") app.logger.info(f"Created user {username}") - return redirect("/login") + return auto_redirect("/login") @app.get("/login") def login_get(): @@ -127,7 +127,7 @@ def login_post(): session.permanent = True app.logger.info(f"{username} logged in") - return redirect(f"/users/{username}") + return auto_redirect(f"/users/{username}") flash("Invalid username/password", "error") app.logger.info(f"Failed login for {username}") @@ -142,7 +142,7 @@ def logout(): if "userid" in session: session.pop("userid") - return redirect("/") + return auto_redirect("/") @app.get("/users/") def users_profile(profile_username): @@ -227,7 +227,7 @@ def edit_profile(): app.logger.info(f"{session['username']} updated bio") - return redirect(f"/users/{session['username']}") + return auto_redirect(f"/users/{session['username']}") @app.get("/pfp/") def pfp(userid): @@ -236,7 +236,7 @@ def pfp(userid): @app.get("/edit-song") def edit_song(): if not "userid" in session: - return redirect("/login") # Must be logged in to edit + return auto_redirect("/login") # Must be logged in to edit song = None @@ -264,7 +264,7 @@ def edit_song(): @app.post("/upload-song") def upload_song(): if not "userid" in session: - return redirect("/login") # Must be logged in to edit + return auto_redirect("/login") # Must be logged in to edit error = validate_song_form() @@ -278,12 +278,12 @@ def upload_song(): if not error: username = session["username"] app.logger.info(f"{username} uploaded/modified a song") - return redirect(f"/users/{username}") + return auto_redirect(f"/users/{username}") else: username = session["username"] app.logger.info(f"Failed song update - {username}") - return redirect(request.referrer) + return auto_redirect(request.referrer) def validate_song_form(): title = request.form["title"] @@ -504,7 +504,7 @@ def delete_song(songid): app.logger.info(f"{session['username']} deleted song: {song_data['title']}") flash_and_log(f"Deleted '{song_data['title']}'", "success") - return redirect(request.referrer) + return auto_redirect(request.referrer) @app.get("/song//") def song(userid, songid): @@ -550,7 +550,7 @@ def songs(): @app.route("/comment", methods=["GET", "POST"]) def comment(): if not "userid" in session: - return redirect("/login") + return auto_redirect("/login") if not "songid" in request.args: abort(400) # Must have songid @@ -629,12 +629,12 @@ def redirect_to_previous_page(): if "previous_page" in session: previous_page = session["previous_page"] session.pop("previous_page") - return redirect(previous_page) + return auto_redirect(previous_page) @app.get("/delete-comment/") def comment_delete(commentid): if "userid" not in session: - return redirect("/login") + return auto_redirect("/login") comment = query_db("select c.userid as comment_user, s.userid as song_user from song_comments as c inner join songs as s on c.songid == s.songid where commentid = ?", [commentid], one=True) if not comment: @@ -648,12 +648,12 @@ def comment_delete(commentid): query_db("delete from song_comments where (commentid = ?) or (replytoid = ?)", [commentid, commentid]) get_db().commit() - return redirect(request.referrer) + return auto_redirect(request.referrer) @app.get("/activity") def activity(): if not "userid" in session: - return redirect("/login") + return auto_redirect("/login") # Get comment notifications comments = query_db( @@ -707,12 +707,12 @@ def site_news(): @app.post("/create-playlist") def create_playlist(): if not "userid" in session: - return redirect("/login") + return auto_redirect("/login") name = request.form["name"] if not name or len(name) > 200: flash_and_log("Playlist must have a name", "error") - return redirect(request.referrer) + return auto_redirect(request.referrer) timestamp = datetime.now(timezone.utc).isoformat() @@ -730,7 +730,7 @@ def create_playlist(): ) get_db().commit() flash_and_log(f"Created playlist {name}", "success") - return redirect(request.referrer) + return auto_redirect(request.referrer) @app.get("/delete-playlist/") def delete_playlist(playlistid): @@ -751,7 +751,7 @@ def delete_playlist(playlistid): get_db().commit() flash_and_log(f"Deleted playlist {plist_data['name']}", "success") - return redirect(f"/users/{session['username']}") + return auto_redirect(f"/users/{session['username']}") @app.post("/append-to-playlist") def append_to_playlist(): @@ -793,7 +793,7 @@ def append_to_playlist(): flash_and_log(f"Added '{song_data['title']}' to {plist_data['name']}", "success") - return redirect(request.referrer) + return auto_redirect(request.referrer) @app.post("/edit-playlist/") def edit_playlist_post(playlistid): @@ -813,7 +813,7 @@ def edit_playlist_post(playlistid): name = request.form["name"] if not name or len(name) > 200: flash_and_log("Playlist must have a name", "error") - return redirect(request.referrer) + return auto_redirect(request.referrer) # Make sure all songs are valid songids = [] @@ -844,7 +844,7 @@ def edit_playlist_post(playlistid): get_db().commit() flash_and_log("Playlist updated", "success") - return redirect(request.referrer) + return auto_redirect(request.referrer) @app.get("/playlists/") def playlists(playlistid): @@ -927,6 +927,12 @@ def get_current_user_playlists(): return plist_data +def auto_redirect(url): + if request.args.get("request-type", None) == "ajax": + return redirect(url + "?request-type=ajax") + else: + return redirect(url) + @app.context_processor def inject_global_vars(): use_json = request.args.get("request-type", None) == "ajax" diff --git a/templates/activity.html b/templates/activity.html index d802b5b..05ba9bf 100644 --- a/templates/activity.html +++ b/templates/activity.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Activity{% endblock %} diff --git a/templates/base.html b/templates/base.html index 91759b7..387d8a2 100644 --- a/templates/base.html +++ b/templates/base.html @@ -18,7 +18,7 @@ event.preventDefault(); // Update URL in browser window - window.history.pushState({}, "", event.target.href); + //window.history.pushState({}, "", event.target.href); // Make AJAX request var url = new URL(event.target.href); @@ -28,8 +28,17 @@ getPageAjax(url); }); async function getPageAjax(url) { - var data = await fetch(url).then((response) => response.json()); - console.log(data); + fetch(url, {redirect: "follow"}).then(async (response) => { + console.log(response); + window.history.pushState({}, "", response.url); + var data = await response.json(); + console.log(data); + document.getElementById("main").innerHTML = data.body; + document.title = data.title; + var event = new Event("DOMContentLoaded"); + document.dispatchEvent(event); + }); + } @@ -143,7 +152,7 @@ {% endwith %} -
+
{% block body %} {% endblock %}
diff --git a/templates/comment.html b/templates/comment.html index dc6cbb0..7800798 100644 --- a/templates/comment.html +++ b/templates/comment.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Write a Comment{% endblock %} diff --git a/templates/edit-song.html b/templates/edit-song.html index 3299a72..969fa7b 100644 --- a/templates/edit-song.html +++ b/templates/edit-song.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}{% if song %}Edit Song{% else %}Upload Song{% endif %}{% endblock %} diff --git a/templates/login.html b/templates/login.html index 9c17e39..c1af499 100644 --- a/templates/login.html +++ b/templates/login.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Sign In{% endblock %} diff --git a/templates/news.html b/templates/news.html index 27da4fe..90d11d8 100644 --- a/templates/news.html +++ b/templates/news.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Site News{% endblock %} diff --git a/templates/playlist.html b/templates/playlist.html index 90ef05f..f963d79 100644 --- a/templates/playlist.html +++ b/templates/playlist.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}{{ name }}{% endblock %} diff --git a/templates/profile.html b/templates/profile.html index 0186d8b..e002a66 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}{{ name }}'s profile{% endblock %} diff --git a/templates/signup.html b/templates/signup.html index 09bd893..4b474bd 100644 --- a/templates/signup.html +++ b/templates/signup.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Create Account{% endblock %} diff --git a/templates/song.html b/templates/song.html index 65012ad..571a731 100644 --- a/templates/song.html +++ b/templates/song.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block head %} diff --git a/templates/songs-by-tag.html b/templates/songs-by-tag.html index a8e3dba..12fc50b 100644 --- a/templates/songs-by-tag.html +++ b/templates/songs-by-tag.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %} {% block title %}Songs{% endblock %} diff --git a/todo.txt b/todo.txt index 8f64c6b..c61f7bf 100644 --- a/todo.txt +++ b/todo.txt @@ -4,6 +4,7 @@ NOW - Forms - Back (history stack) - Other on-site links (songs, profiles, tags, etc.) + - Update page colors - Break up main.py, test_offline.py - Pinned profile playlists