]> littlesong.place Git - littlesongplace.git/commitdiff
More ajax
authorChris Fulljames <christianfulljames@gmail.com>
Tue, 18 Feb 2025 01:23:10 +0000 (20:23 -0500)
committerChris Fulljames <christianfulljames@gmail.com>
Tue, 18 Feb 2025 01:23:10 +0000 (20:23 -0500)
13 files changed:
main.py
templates/activity.html
templates/base.html
templates/comment.html
templates/edit-song.html
templates/login.html
templates/news.html
templates/playlist.html
templates/profile.html
templates/signup.html
templates/song.html
templates/songs-by-tag.html
todo.txt

diff --git a/main.py b/main.py
index 3e16b752f2c22156df40331d29b715d3d4290cf6..37baa5703e57c37c2000f17197984efaed5005c6 100644 (file)
--- 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/<profile_username>")
 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/<int:userid>")
 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/<int:userid>/<int:songid>")
 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/<int:commentid>")
 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/<int:playlistid>")
 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/<int:playlistid>")
 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/<int:playlistid>")
 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"
index d802b5bd1f5a2033fc452a6abb6d7259a0ca4b09..05ba9bff5a34a5023b7f0b07ce9d7643b7245f4a 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Activity{% endblock %}
 
index 91759b747c0535362e5a4c5af62964b52d360058..387d8a22f2441fcde8e2272f78bcb7bb9d18a3e6 100644 (file)
@@ -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);
                 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);
+                });
+
             }
         </script>
     </head>
         {% endwith %}
 
         <!-- Page-Specific Content -->
-        <div class="main">
+        <div class="main" id="main">
         {% block body %}
         {% endblock %}
         </div>
index dc6cbb086cb140843099b00782e4c7cc6ed6bfad..7800798778214a3600e5fe302106bb1986723eaa 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Write a Comment{% endblock %}
 
index 3299a72d547de63cd7b18249aefc2cea600981e0..969fa7b1240adfa07130b075986840f78109fb00 100644 (file)
@@ -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 %}
 
index 9c17e3950f054ca4615d11c318aba66bbcb1f738..c1af499fdc531ae5cf323cb908beb6248a422171 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Sign In{% endblock %}
 
index 27da4fee4b1078ac8e3d79fdf31e5f97c85708c5..90d11d8ffdc08449326e236bab22561d9aba780c 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Site News{% endblock %}
 
index 90ef05fb2318d4b68711a7842b1500b5fca8cf78..f963d79cca6e2821e347a200d14a210c95eaa114 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}{{ name }}{% endblock %}
 
index 0186d8b25417c398539d8c323b644fba67aeea35..e002a660e33b85679b5fa6b1f2c3772d33cdffbd 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}{{ name }}'s profile{% endblock %}
 
index 09bd89369083c3025ac53108b528606da192300f..4b474bd68a8d798e4a29e35b85ce824672fc8d02 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Create Account{% endblock %}
 
index 65012ad79aedc3955cf4d4c40ee9d6b2ad45ae2f..571a731f30d218438ea8f75e413ae569a5ece58e 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block head %}
 <meta property="og:title" content="{{ song.title }}" />
index a8e3dbac7d0a7666f269be2dbd559632f710c3c7..12fc50be994aa5f08d3c41fa0caf06197dd907e9 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
 
 {% block title %}Songs{% endblock %}
 
index 8f64c6b6389fadd4eeebdb321db47da195a21ddc..c61f7bf420420b53b08945cb7874be39e2729f78 100644 (file)
--- 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