From 4d583988c1817e4502e66ef794fa613ae742ac8e Mon Sep 17 00:00:00 2001 From: afknero Date: Wed, 1 May 2024 12:44:16 -0400 Subject: [PATCH 1/3] Implement sent and received offers and lint app.py --- src/app.py | 351 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 232 insertions(+), 119 deletions(-) diff --git a/src/app.py b/src/app.py index 7515d4a..ed59cb4 100644 --- a/src/app.py +++ b/src/app.py @@ -7,32 +7,33 @@ # from markupsafe import escape import pymongo from dotenv import load_dotenv -import flask_login #this will be used for user authentication -from flask_bcrypt import Bcrypt +import flask_login # this will be used for user authentication +from flask_bcrypt import Bcrypt from flask_login import LoginManager from bson.decimal128 import Decimal128 -from bson.objectid import ObjectId #used to search db using objec ids +from bson.objectid import ObjectId # used to search db using objec ids + # load credentials and configuration options from .env file # if you do not yet have a file named .env, make one based on the template in env.example load_dotenv() # take environment variables from .env. # instantiate the app -app = Flask(__name__, template_folder='templates') +app = Flask(__name__, template_folder="templates") app.secret_key = os.getenv("SECRET_KEY") -bcrypt = Bcrypt(app) -#these 2 are for flask login +bcrypt = Bcrypt(app) +# these 2 are for flask login login_manager = LoginManager() login_manager.init_app(app) -#if using Atlas database uncomment next line!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! and comment out the next four lines +# if using Atlas database uncomment next line!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! and comment out the next four lines client = pymongo.MongoClient(os.getenv("MONGO_URI")) -#if using containerized instance of mongo uncomment next 4 lines else comment them out -#root_username = os.environ["MONGO_INITDB_ROOT_USERNAME"] #1 -#root_password = os.environ["MONGO_INITDB_ROOT_PASSWORD"] #2 -#uri = f"mongodb://{root_username}:{root_password}@mongodb:27017/db?authSource=admin" #3 -#client = pymongo.MongoClient(uri) #4 +# if using containerized instance of mongo uncomment next 4 lines else comment them out +# root_username = os.environ["MONGO_INITDB_ROOT_USERNAME"] #1 +# root_password = os.environ["MONGO_INITDB_ROOT_PASSWORD"] #2 +# uri = f"mongodb://{root_username}:{root_password}@mongodb:27017/db?authSource=admin" #3 +# client = pymongo.MongoClient(uri) #4 db = client[os.getenv("MONGO_DBNAME")] # store a reference to the database @@ -52,19 +53,19 @@ # if os.getenv("FLASK_ENV", "development") == "development": # # turn on debugging, if in development # app.debug = True # debug mnode - -#this is the class user which will be stored in a session -#i think the flask_login.Usermixin handles all of the methods needed + +# this is the class user which will be stored in a session +# i think the flask_login.Usermixin handles all of the methods needed class User(flask_login.UserMixin): pass -#this callback is used to reload the user object from the user ID stored in the session.It should take the str ID of a user, and return the corresponding user object +# this callback is used to reload the user object from the user ID stored in the session.It should take the str ID of a user, and return the corresponding user object @login_manager.user_loader def user_loader(username): founduser = db.users.find_one({"username": username}) - if not founduser: + if not founduser: return user = User() @@ -74,9 +75,9 @@ def user_loader(username): @login_manager.request_loader def request_loader(request): - username = request.form.get('username') + username = request.form.get("username") founduser = db.users.find_one({"username": username}) - if not founduser: + if not founduser: return user = User() @@ -89,17 +90,17 @@ def home(): """ Route for the home page """ - sort_option = request.args.get('sort') + sort_option = request.args.get("sort") - if sort_option == 'oldest': + if sort_option == "oldest": docs_cursor = db.items.find({"public": True}).sort("created_at", 1) - elif sort_option == 'lowest': + elif sort_option == "lowest": docs_cursor = db.items.find({"public": True}).sort("price", 1) - elif sort_option == 'highest': + elif sort_option == "highest": docs_cursor = db.items.find({"public": True}).sort("price", -1) else: docs_cursor = db.items.find({"public": True}).sort("created_at", -1) - + docs = list(docs_cursor) return render_template("index.html", docs=docs) # render the hone template @@ -117,12 +118,19 @@ def sign_up(): if user: return render_template("signup.html", error="Username already in use.") else: - hashed_password = bcrypt.generate_password_hash(password).decode('utf-8') - new_user = {'username': username, 'password': hashed_password, 'items': [], 'bio':"", 'pic': "https://i.imgur.com/xCvzudW.png", 'friends': []} + hashed_password = bcrypt.generate_password_hash(password).decode("utf-8") + new_user = { + "username": username, + "password": hashed_password, + "items": [], + "bio": "", + "pic": "https://i.imgur.com/xCvzudW.png", + "friends": [], + } db.users.insert_one(new_user) return redirect(url_for("log_in")) if flask_login.current_user.is_authenticated: - return redirect(url_for('home')) + return redirect(url_for("home")) return render_template("signup.html") @@ -136,97 +144,117 @@ def log_in(): password = request.form["fpassword"] found_user = db.users.find_one({"username": username}) if not found_user: - return render_template('login.html', error="User not found.") + return render_template("login.html", error="User not found.") else: - is_valid = bcrypt.check_password_hash(found_user['password'], password) + is_valid = bcrypt.check_password_hash(found_user["password"], password) if not is_valid: - return render_template('login.html', error="Username or password is invalid.") + return render_template( + "login.html", error="Username or password is invalid." + ) user = User() user.id = username flask_login.login_user(user) - return redirect(url_for('home')) + return redirect(url_for("home")) if flask_login.current_user.is_authenticated: - return redirect(url_for('home')) + return redirect(url_for("home")) return render_template("login.html") -@app.route('/protected') +@app.route("/protected") @flask_login.login_required def protected(): - return render_template('protected.html') + return render_template("protected.html") -@app.route('/logout') +@app.route("/logout") def logout(): flask_login.logout_user() - return redirect(url_for('log_in')) + return redirect(url_for("log_in")) + @app.route("/item/") @flask_login.login_required def item(item_id): try: - founditem = db.items.find_one({'_id': ObjectId(item_id)}) + founditem = db.items.find_one({"_id": ObjectId(item_id)}) userid = flask_login.current_user.id - user = db.users.find_one({"_id":ObjectId(userid)}) - return render_template("item.html", founditem = founditem, user = user) + user = db.users.find_one({"_id": ObjectId(userid)}) + return render_template("item.html", founditem=founditem, user=user) except Exception as e: print(e) - return redirect(url_for('home')) #redirect to an error page ideally + return redirect(url_for("home")) # redirect to an error page ideally -#add item here + +# add item here @app.route("/add") @flask_login.login_required def add(): - #TODO make this an actual userid fetch + # TODO make this an actual userid fetch try: userid = flask_login.current_user.id - return render_template("add.html", userid = userid) + return render_template("add.html", userid=userid) except: - #error handle - return redirect(url_for('home')) + # error handle + return redirect(url_for("home")) + -@app.route("/add/", methods= ["GET", "POST"]) +@app.route("/add/", methods=["GET", "POST"]) @flask_login.login_required def create_item(user_id): - user = db.users.find_one({"_id":ObjectId(user_id)}) + user = db.users.find_one({"_id": ObjectId(user_id)}) print(user) username = user["username"] name = request.form["itemname"] desc = request.form["description"] price = Decimal128(request.form["price"]) url = request.form["url"] - item = {"name": name, "description" :desc, "user":ObjectId(user_id),"username":username, "image_url":url, "price": price, "created_at": datetime.datetime.utcnow(), "public": True} + item = { + "name": name, + "description": desc, + "user": ObjectId(user_id), + "username": username, + "image_url": url, + "price": price, + "created_at": datetime.datetime.utcnow(), + "public": True, + } db.items.insert_one(item) - return redirect(url_for('view_listings')) + return redirect(url_for("view_listings")) -#delete has no html but should be invoked later from the my listings page, pass the item id through + +# delete has no html but should be invoked later from the my listings page, pass the item id through @app.route("/delete/") @flask_login.login_required def delete(item_id): - db.items.delete_one({"_id": ObjectId(item_id)}) - #TODO can redirect to the my listings page later - return redirect(url_for('purge', item_id = item_id)) + db.items.delete_one({"_id": ObjectId(item_id)}) + # TODO can redirect to the my listings page later + return redirect(url_for("purge", item_id=item_id)) + + @app.route("/deleteoffer/") @flask_login.login_required def deleteoffer(offer_id): db.offers.delete_one({"_id": ObjectId(offer_id)}) - return redirect(url_for('sentoffers')) + return redirect(url_for("sentoffers")) + + @app.route("/edit/") @flask_login.login_required def edit(item_id): - founditem = db.items.find_one({'_id': ObjectId(item_id)}) - return render_template("edit.html", founditem = founditem, item_id = item_id) + founditem = db.items.find_one({"_id": ObjectId(item_id)}) + return render_template("edit.html", founditem=founditem, item_id=item_id) + -@app.route("/update/", methods= ["GET", "POST"]) +@app.route("/update/", methods=["GET", "POST"]) @flask_login.login_required def update_item(item_id): name = request.form["itemname"] desc = request.form["description"] price = Decimal128(request.form["price"]) url = request.form["url"] - item = {"name": name, "description" :desc, "image_url":url, "price": price} + item = {"name": name, "description": desc, "image_url": url, "price": price} db.items.update_one({"_id": ObjectId(item_id)}, {"$set": item}) - return redirect(url_for('view_listings')) + return redirect(url_for("view_listings")) @app.route("/viewListings") @@ -235,67 +263,140 @@ def view_listings(): user_to_find = flask_login.current_user.id print(user_to_find) items = list(db.items.find({"user": ObjectId(user_to_find)})) - return render_template("viewlisting.html", docs = items) + return render_template("viewlisting.html", docs=items) + @app.route("/setpublic/") @flask_login.login_required def setpublic(item_id): - item = {"public":True} + item = {"public": True} db.items.update_one({"_id": ObjectId(item_id)}, {"$set": item}) - return redirect(url_for('view_listings')) + return redirect(url_for("view_listings")) + @app.route("/setprivate/") @flask_login.login_required def setprivate(item_id): - item = {"public":False} + item = {"public": False} db.items.update_one({"_id": ObjectId(item_id)}, {"$set": item}) - return redirect(url_for('view_listings')) + return redirect(url_for("view_listings")) + + @app.route("/offer/") @flask_login.login_required def offer(item_id): - founditem = db.items.find_one({'_id': ObjectId(item_id)}) + founditem = db.items.find_one({"_id": ObjectId(item_id)}) user_to_find = flask_login.current_user.id items = list(db.items.find({"user": ObjectId(user_to_find)})) - return render_template("offer.html", founditem = founditem, item_id = item_id, docs=items) + return render_template( + "offer.html", founditem=founditem, item_id=item_id, docs=items + ) -@app.route("/newoffer/", methods= ["GET", "POST"]) +@app.route("/newoffer/", methods=["GET", "POST"]) @flask_login.login_required def new_offer(item_id): offered = request.form.getlist("mycheckbox") - touser = db.items.find_one({"_id": ObjectId(item_id)}).get('user') + touser = db.items.find_one({"_id": ObjectId(item_id)}).get("user") curuser = flask_login.current_user.id - offer = {"offerforid": item_id, "offereditems" : offered, "sentby": ObjectId(curuser) ,"status": "sent", "sendtouser": touser} + offer = { + "offerforid": item_id, + "offereditems": offered, + "sentby": ObjectId(curuser), + "status": "sent", + "sendtouser": touser, + } db.offers.insert_one(offer) - return redirect(url_for('sentoffers')) + return redirect(url_for("sentoffers")) + @app.route("/sentoffers") @flask_login.login_required def sentoffers(): - curuser = flask_login.current_user.id - offers = list(db.offers.find({"sentby": ObjectId(curuser)})) - return render_template("sentoffers.html", docs = offers) + """ """ + # find the current user's offers + user = flask_login.current_user.id + offers = list(db.offers.find({"sentby": ObjectId(user)})) + + # create a set of all item IDs + item_ids = set() + for offer in offers: + item_ids.add(offer.get("offerforid")) + item_ids.update(offer.get("offereditems", [])) + + item_ids = [ObjectId(item_id) for item_id in item_ids] + + # find all items + items_cursor = db.items.find( + {"_id": {"$in": item_ids}}, + {"name": 1, "username": 1, "user": 1, "image_url": 1}, + ) + items = {str(item["_id"]): item for item in items_cursor} + + # populate item ids with item details + for offer in offers: + offerforid = offer.get("offerforid") + if offerforid: + offer["offerforid"] = items.get(str(offerforid)) + + offereditems = offer.get("offereditems", []) + offer["offereditems"] = [items.get(str(item_id)) for item_id in offereditems] + print(offer) + + return render_template("sentoffers.html", offers=offers) + + @app.route("/recievedoffers") @flask_login.login_required def recievedoffers(): - curuser = flask_login.current_user.id - offers = list(db.offers.find({"sendtouser": ObjectId(curuser)})) - return render_template("recievedoffers.html", docs = offers) + # find the current user's offers + user = flask_login.current_user.id + offers = list(db.offers.find({"sendtouser": ObjectId(user)})) + + # create a set of all item IDs + item_ids = set() + for offer in offers: + item_ids.add(offer.get("offerforid")) + item_ids.update(offer.get("offereditems", [])) + + item_ids = [ObjectId(item_id) for item_id in item_ids] + + # find all items + items_cursor = db.items.find( + {"_id": {"$in": item_ids}}, + {"name": 1, "username": 1, "user": 1, "image_url": 1}, + ) + items = {str(item["_id"]): item for item in items_cursor} + + # populate item ids with item details + for offer in offers: + offerforid = offer.get("offerforid") + if offerforid: + offer["offerforid"] = items.get(str(offerforid)) + + offereditems = offer.get("offereditems", []) + offer["offereditems"] = [items.get(str(item_id)) for item_id in offereditems] + print(offer) + + return render_template("recievedoffers.html", offers=offers) + @app.route("/acceptoffer/") @flask_login.login_required def acceptoffer(offer_id): - item = {"status":"accepted"} + item = {"status": "accepted"} db.offers.update_one({"_id": ObjectId(offer_id)}, {"$set": item}) - return redirect(url_for('recievedoffers')) + return redirect(url_for("recievedoffers")) + @app.route("/rejectoffer/") @flask_login.login_required def rejectoffer(offer_id): - item = {"status":"rejected"} + item = {"status": "rejected"} db.offers.update_one({"_id": ObjectId(offer_id)}, {"$set": item}) - return redirect(url_for('recievedoffers')) + return redirect(url_for("recievedoffers")) + @app.route("/purge/") @flask_login.login_required @@ -306,27 +407,37 @@ def purge(item_id): db.offers.delete_many(query2) return redirect(url_for("view_listings")) + @app.route("/profile") @flask_login.login_required def profile(): user_to_find = flask_login.current_user.id user = db.users.find_one({"_id": ObjectId(user_to_find)}) - - user_profile = {"username":user["username"], "bio":user["bio"], "pic": user["pic"]} + + user_profile = { + "username": user["username"], + "bio": user["bio"], + "pic": user["pic"], + } user_items = list(db.items.find({"user": ObjectId(user_to_find)})) - return render_template("viewProfile.html", user = user_profile, docs = user_items) + return render_template("viewProfile.html", user=user_profile, docs=user_items) + -@app.route("/viewUser/", methods= ["GET"]) +@app.route("/viewUser/", methods=["GET"]) @flask_login.login_required def view_user(user_name): - #gets the other user profile + # gets the other user profile user = db.users.find_one({"username": user_name}) if user["_id"] == flask_login.current_user.id: return redirect(url_for("profile")) - user_profile = {"username":user["username"], "bio":user["bio"], "pic": user["pic"]} + user_profile = { + "username": user["username"], + "bio": user["bio"], + "pic": user["pic"], + } user_items = list(db.items.find({"user": ObjectId(user["_id"])})) - #checks if user is in logged in user's friends - logged_in_user = db.users.find_one({'_id': ObjectId(flask_login.current_user.id)}) + # checks if user is in logged in user's friends + logged_in_user = db.users.find_one({"_id": ObjectId(flask_login.current_user.id)}) print(list(logged_in_user["friends"])) logged_in_user_friends = list(logged_in_user["friends"]) if user["_id"] in logged_in_user_friends: @@ -336,62 +447,64 @@ def view_user(user_name): friends = False print("false") - return render_template("viewUserProfile.html", user = user_profile, docs = user_items, friends=friends) + return render_template( + "viewUserProfile.html", user=user_profile, docs=user_items, friends=friends + ) -@app.route("/editProfile/", methods= ["GET","POST"]) + +@app.route("/editProfile/", methods=["GET", "POST"]) @flask_login.login_required def edit_profile(): if request.method == "POST": bio = request.form["bio"] pic = request.form["pic"] - db.users.update_one({'_id': ObjectId(flask_login.current_user.id)}, - { - '$set': { - 'bio': bio, - 'pic':pic - }}) - return redirect(url_for('profile')) + db.users.update_one( + {"_id": ObjectId(flask_login.current_user.id)}, + {"$set": {"bio": bio, "pic": pic}}, + ) + return redirect(url_for("profile")) user = db.users.find_one({"_id": ObjectId(flask_login.current_user.id)}) - return render_template("editProfile.html", user = user) + return render_template("editProfile.html", user=user) -@app.route("/addFriend/", methods= ["GET"]) +@app.route("/addFriend/", methods=["GET"]) @flask_login.login_required def add_friend(user_name): user = db.users.find_one({"username": user_name}) - logged_in_user = db.users.find_one({'_id': ObjectId(flask_login.current_user.id)}) - logged_in_user_friends = list(logged_in_user['friends']) - if user['_id'] in logged_in_user_friends: - return redirect(url_for('view_user',user_name=user_name )) - - db.users.update_one({ '_id': ObjectId(flask_login.current_user.id) },{ '$push': { 'friends': user['_id']}}) - return redirect(url_for('view_user',user_name=user_name )) - -@app.route("/friends", methods= ["GET"]) + logged_in_user = db.users.find_one({"_id": ObjectId(flask_login.current_user.id)}) + logged_in_user_friends = list(logged_in_user["friends"]) + if user["_id"] in logged_in_user_friends: + return redirect(url_for("view_user", user_name=user_name)) + + db.users.update_one( + {"_id": ObjectId(flask_login.current_user.id)}, + {"$push": {"friends": user["_id"]}}, + ) + return redirect(url_for("view_user", user_name=user_name)) + + +@app.route("/friends", methods=["GET"]) @flask_login.login_required def friends(): user = db.users.find_one({"_id": ObjectId(flask_login.current_user.id)}) - friends_list = list(user['friends']) + friends_list = list(user["friends"]) print(friends_list) - friends =[] + friends = [] for friend in friends_list: - current_friend = db.users.find_one({'_id': ObjectId(friend)}) + current_friend = db.users.find_one({"_id": ObjectId(friend)}) print(current_friend["username"]) friend_info = { - "pic":current_friend["pic"], - "username":current_friend["username"], + "pic": current_friend["pic"], + "username": current_friend["username"], } friends.append(friend_info) print(friends) - return render_template('friends.html', friends=friends) - - - + return render_template("friends.html", friends=friends) @login_manager.unauthorized_handler def unauthorized_handler(): - return redirect(url_for('log_in')) + return redirect(url_for("log_in")) # run the app @@ -401,4 +514,4 @@ def unauthorized_handler(): # import logging # logging.basicConfig(filename='/home/ak8257/error.log',level=logging.DEBUG) - app.run(host="0.0.0.0", port=FLASK_PORT) \ No newline at end of file + app.run(host="0.0.0.0", port=FLASK_PORT) From 0f242f8467d020f59fc46b574a4a1c0d66e57e85 Mon Sep 17 00:00:00 2001 From: afknero Date: Wed, 1 May 2024 12:44:35 -0400 Subject: [PATCH 2/3] Add placeholder images --- src/static/browse.jpg | Bin 0 -> 101596 bytes src/static/swap.png | Bin 0 -> 13838 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/static/browse.jpg create mode 100644 src/static/swap.png diff --git a/src/static/browse.jpg b/src/static/browse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1cce5835c0e98e1d1f8e14e1bec9a88f489dbfd GIT binary patch literal 101596 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 U1^-)p*8ht(=N~pw$b->;29fj_uK)l5 literal 0 HcmV?d00001 diff --git a/src/static/swap.png b/src/static/swap.png new file mode 100644 index 0000000000000000000000000000000000000000..dd36da77245b6db4b202aa220303cbd07f3a60fa GIT binary patch literal 13838 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 literal 0 HcmV?d00001 From 22d4919287171a87c3f158102cfe253be85c8079 Mon Sep 17 00:00:00 2001 From: afknero Date: Wed, 1 May 2024 12:45:23 -0400 Subject: [PATCH 3/3] Add major changes to CSS and templates --- src/static/style.css | 358 ++++++++++++++++++++++++------ src/templates/login.html | 52 +++-- src/templates/offer.html | 72 +++--- src/templates/recievedoffers.html | 102 +++++++-- src/templates/sentoffers.html | 99 ++++++++- src/templates/signup.html | 47 ++-- src/templates/viewProfile.html | 32 +-- src/templates/viewlisting.html | 152 +++++++------ 8 files changed, 655 insertions(+), 259 deletions(-) diff --git a/src/static/style.css b/src/static/style.css index 7a2453d..a4e6c1f 100644 --- a/src/static/style.css +++ b/src/static/style.css @@ -9,20 +9,20 @@ header { left: 0; z-index: 1; box-sizing: border-box; - height: 60px; + height: 80px; width: 100%; padding: 0rem 2rem; display: flex; justify-content: space-between; align-items: center; - background-color: #56018D; + background-color: #56018d; color: #ededed; } header a { text-decoration: none; color: inherit; - font-size: 1.4rem; + font-size: 1.5rem; font-weight: bold; } @@ -33,7 +33,7 @@ header a { main { border-bottom: 1px solid black; font-size: 1rem; - margin-top: 60px; + margin-top: 80px; } footer { @@ -50,7 +50,7 @@ footer { #menuToggle a { text-decoration: none; - color: #56018D; + color: #56018d; transition: color 0.3s ease; } @@ -101,7 +101,7 @@ footer { #menuToggle input:checked ~ span { opacity: 1; transform: rotate(-45deg) translate(0px, 0px); - background-color: #56018D; + background-color: #56018d; position: relative; } @@ -127,9 +127,9 @@ footer { position: absolute; height: 100vh; width: 70%; - margin: -45px 0 0 -32px; + margin: -54px 0 0 -32px; padding: 24px; - padding-top: 125px; + padding-top: 112px; background: #ededed; list-style-type: none; -webkit-font-smoothing: antialiased; @@ -160,29 +160,34 @@ footer { } #results { - font-size: 1.1rem; + font-size: large; font-weight: bold; } #sort { min-width: 7rem; - height: 1.75rem; + height: 2rem; text-align: center; background-color: white; - border: 2px solid #56018D; + border: 2px solid #56018d; border-radius: 0.5em; + font-size: large; } #listings { margin: 0rem 2rem 1rem 2rem; - display: grid; + /* display: grid; grid-template-columns: 1fr; - grid-gap: 1rem; + grid-gap: 1rem; */ + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; } .listing { height: 350px; - border: 3px solid #56018D; + border: 3px solid #56018d; box-sizing: border-box; border-radius: 1rem; overflow: hidden; @@ -202,6 +207,7 @@ footer { height: 100px; padding: 1rem; background-color: #ededed; + font-size: 1.1rem; } .details-primary { @@ -210,6 +216,7 @@ footer { align-items: center; height: 20px; font-weight: bold; + margin-bottom: 4px; } .details > p { @@ -219,9 +226,10 @@ footer { /* Alternative listing styling used in 'Your Listings' page */ .listing-alt { - border: 3px solid #56018D; + border: 3px solid #56018d; box-sizing: border-box; border-radius: 0.5rem; + width: 370px; } .listing-context-alt { @@ -229,24 +237,23 @@ footer { flex-direction: row; align-items: center; height: 175px; - overflow: hidden; + width: 100%; } -.listing-alt-image { - +.listing-image-alt { max-width: 100px; overflow: hidden; } .listing-alt img { - width: 100%; height: 100%; - + width: 100px; } .details-alt { padding: 1rem; + width: 264px; } .details-alt > p { @@ -255,23 +262,31 @@ footer { } #profile { + display: flex; + flex-direction: column; +} + +#profile-header{ padding: 2rem; } -#new-listing { +#new-listing, +#browse-collection > div{ display: flex; - background-color: #56018D; + background-color: #56018d; height: 40px; align-items: center; padding: 1.2rem; border-radius: 0.5rem; gap: 0.5rem; + width: 100%; } -#new-listing input { +#new-listing input, +#browse-collection > div input { width: 100%; - background-color: #56018D; - color:#ededed; + background-color: #56018d; + color: #ededed; display: flex; border: none; font-weight: bold; @@ -284,11 +299,11 @@ footer { } .item-buttons a { - width: 40%; + width: 32%; text-align: center; box-sizing: border-box; - background-color: #56018D; - color:#ededed; + background-color: #56018d; + color: #ededed; text-decoration: none; cursor: pointer; padding: 0.5rem; @@ -301,13 +316,19 @@ footer { min-height: 80vh; } +.item-alt { + display: flex; + flex-direction: column; +} + .item-image { border-bottom: 2px solid silver; box-sizing: border-box; background-color: #ededed; } -.item img { +.item img, +.item-alt img { display: block; margin: 0 auto; max-width: 80%; @@ -323,8 +344,13 @@ footer { } #item-primary { - font-size: 1.2rem; - font-weight: bold; + font-size: 1.2rem; + font-weight: bold; +} + +#item-details { + font-size: 1.1rem; + margin-top: 1rem; } #login-signup { @@ -335,7 +361,7 @@ footer { #login-signup a { width: 50%; padding: 1rem; - font-size: 1rem; + font-size: 1.1rem; text-align: center; box-sizing: border-box; font-weight: bold; @@ -345,7 +371,7 @@ footer { } .active { - border-bottom: 2px solid #56018D; + border-bottom: 2px solid #56018d; } form { @@ -364,17 +390,21 @@ form div { form div input { width: 100%; - padding: 0.5rem; + padding: 0.75rem; font-size: inherit; - border: 2px solid #56018D; + border: 2px solid #56018d; border-radius: 8px; margin-top: 0.25rem; margin-bottom: 1.5rem; } +form div label { + font-size: 1.1rem; +} + #form-submit input { - background-color: #56018D; - color:#ededed; + background-color: #56018d; + color: #ededed; } .instruction { @@ -384,7 +414,7 @@ form div input { } .instruction-step { - background-color: #56018D; + background-color: #56018d; color: #ededed; border-radius: 100%; width: 20px; @@ -393,7 +423,7 @@ form div input { } .instruction-details { - font-size: 0.8rem; + font-size: 0.9rem; display: flex; align-items: center; } @@ -407,100 +437,290 @@ form div input { .step textarea { height: 100px; padding: 0.5rem; - border: 2px solid #56018D; + border: 2px solid #56018d; border-radius: 8px; + font-family: inherit; + font-size: inherit; } #add-edit input[type='submit'] { width: 300px; box-sizing: border-box; - background-color: #56018D; - color:#ededed; + background-color: #56018d; + color: #ededed; cursor: pointer; - padding: 0.5rem; + padding: 0.75rem; border-radius: 0.5rem; margin: 1rem; } #add-edit-header { width: 100%; - margin-bottom: 1rem; + margin-bottom: 2rem; font-size: 1.2rem; display: flex; justify-content: center; } -#profile img{ +#profile-header img { border-radius: 40%; float: left; margin-right: 1em; } -.edit-profile-pic{ +.edit-profile-pic { display: block; margin: auto; width: 20%; - } -.edit-profile-btn{ +.edit-profile-btn { text-align: center; box-sizing: border-box; - background-color: #56018D; - color:#ededed; + background-color: #56018d; + color: #ededed; text-decoration: none; cursor: pointer; padding: 0.4rem; - border: #56018D 1px solid; + border: #56018d 1px solid; border-radius: 10px; } -.edit-profile-btn:hover{ - border:#56018D solid 1px; - background-color: white; - color: #56018D; +.edit-profile-btn:hover { + border: #56018d solid 1px; + background-color: white; + color: #56018d; } -.edit-profile-btn:active{ - border:#56018D solid 1px; - background-color: #56018D; +.edit-profile-btn:active { + border: #56018d solid 1px; + background-color: #56018d; color: white; - } +} -.friends-tag{ +.friends-tag { text-align: center; box-sizing: border-box; background-color: white; - color:#56018D; + color: #56018d; text-decoration: none; padding: 0.4rem; - border: #56018D 1px solid; + border: #56018d 1px solid; border-radius: 10px; pointer-events: none; } -#friends{ +#friends { margin: 1em; } -.friend-listing{ +.friend-listing { display: grid; grid-template-columns: 1fr 2fr; - border: #56018D solid 2px; + border: #56018d solid 2px; border-radius: 10px; padding: 1em; margin: 1em; } -.friend-user{ +.friend-user { font-size: 2em; - color: #56018D; - font-family:Verdana, Geneva, Tahoma, sans-serif; + color: #56018d; + font-family: Verdana, Geneva, Tahoma, sans-serif; } -.friend-image img{ +.friend-image img { border-radius: 50%; } +#offer-items { + border-top: 2px solid #56018d; +} + +.offer-header { + font-size: 1.2rem; + font-weight: bold; + margin: 1rem 1rem 2rem 1rem; + display: flex; + justify-content: space-evenly; +} + +#offer-form { + padding: 0rem; + height: auto; +} + +#offer-form input { + margin: 0; +} + +#offer-submit { + background-color: #56018d; + color: white; + width: 90%; +} + +.offer-details { + padding: 1rem 0rem 1rem 3rem; + min-width: 240px; + font-size: 1.1rem; + display: flex; +} + +.offer-details > div { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + gap: 8px; +} + +.offer-details > p { + height: 38px; + overflow: hidden; +} + +.offer-details input[type='checkbox'] { + height: 24px; +} + +#offers-sent { + display: flex; + flex-direction: column; + align-items: center; + min-height: 80vh; + gap: 1rem; + padding: 1rem 0rem 0rem 0rem; +} + +.offer-sent { + box-sizing: border-box; + width: 100%; + border-top: 3px solid #56018d; + border-bottom: 3px solid #56018d; +} + +.offer-image { + width: 100px; + height: 150px; + display: flex; + align-items: center; + overflow: hidden; + border: 3px solid #56018d; + border-radius: 16px; +} + +.offer-image-alt { + width: 100px; + height: 150px; + display: flex; + align-items: center; + overflow: hidden; + border: 3px solid #56018d; + border-radius: 16px; +} + +.offer-sent img { + height: 100%; + width: 100px; +} + +.offer-content { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.item-wanted { + width: 183px; + height: 180px; + display: flex; + justify-content: flex-end; + align-items: flex-end; +} + +.swap-icon { + width: 60px; + height: 96px; + display: flex; + justify-content: center; + align-items: flex-end; +} + +.swap-icon img { + width: 48px; + height: 48px; +} + +.items-offered { + width: 183px; + height: 120px; +} + + +.items-transformed { + position: relative; +} + +.offer-image-alt { + position: absolute; +} + +.offer-image-alt:nth-child(2) { + top: -20px; + left: 20px; + z-index: -1; +} + +.offer-image-alt:nth-child(3) { + top: -40px; + left: 40px; + z-index: -2; +} + +.offer-details-alt { + display: flex; + justify-content: space-evenly; + font-size: large; + margin-top: 1rem; +} + +.offer-details-alt > div:nth-child(1) { + width: 50%; + margin: 0rem 0rem 0rem 3rem; +} + +.offer-details-alt > div:nth-child(2) { + width: 50%; + margin: 0rem 3rem 0rem 0rem; +} + +.item-buttons-alt { + display: flex; + justify-content: space-evenly; + margin: 1rem; +} + +.item-buttons-alt a{ + width: 45%; + text-align: center; + box-sizing: border-box; + background-color: #56018d; + color: #ededed; + text-decoration: none; + cursor: pointer; + padding: 0.75rem; + border-radius: 0.2rem; +} + +#browse { + margin: 1rem; +} + +#browse-collection { + margin: 1rem; +} + @media (min-width: 600px) { header, footer { diff --git a/src/templates/login.html b/src/templates/login.html index 696808a..c0fd9f6 100644 --- a/src/templates/login.html +++ b/src/templates/login.html @@ -1,30 +1,34 @@ -{% extends 'base.html' %} - -{% block container %} +{% extends 'base.html' %} {% block container %}

-
-
-
- -
-
-
- -
-
- -
+ +
+
+ +
+
+
+ +
+
+ +
{% if error %}

{{error}}

-{% endif %} - - - -{% endblock %} \ No newline at end of file +{% endif %} {% endblock %} diff --git a/src/templates/offer.html b/src/templates/offer.html index 311caf1..cfa3a0e 100644 --- a/src/templates/offer.html +++ b/src/templates/offer.html @@ -1,5 +1,5 @@ {% extends 'base.html' %} {% block container %} -
+
-
-

Your Items

-
-
- {% if docs|length ==0%} -
- Add Item - -
- {%endif%} + +
+
Your Items
- {% for doc in docs %} -
-
-
- {{ doc.title }} -
-
-
- {{ doc.name }} -

${{ doc.price }}

+
+ {% if docs|length == 0 %} +
+ Add Item + +
+ {%endif%} {% for doc in docs %} +
+
+
+ {{ doc.title }} +
+
+
+

{{ doc.name }}

+

${{ doc.price }}

+
+
+ +
-

{{ doc.description }}

- Select -
+ {%endfor%} +
- {%endfor%} -
{% endblock %} diff --git a/src/templates/recievedoffers.html b/src/templates/recievedoffers.html index d064068..890f036 100644 --- a/src/templates/recievedoffers.html +++ b/src/templates/recievedoffers.html @@ -1,19 +1,95 @@ {% extends 'base.html' %} {% block container %} - -
- {% for doc in docs %} -
- Offered for item {{doc.offerforid}} - {{doc.status}} + +
+ {% if not offers %} + +
+ user profile image +
+
+ Add Item + +
+
-
- Reject Offer -
- Accept Offer + {% else %} {% for offer in offers %} +
+
+
Your Item
+
Their Item(s)
+
+ +
+
+
+ {{ offer.offerforid.name }} +
+
+ +
+ Add Item +
+ +
+
+ {% for item in offer.offereditems %} +
+ {{ item.name }} +
+ {% endfor %} +
+
+
+ +
+
+
    +
  • {{offer.offerforid.name}}
  • +
+
+ +
+
    + {% for item in offer.offereditems %} +
  • {{item.name}}
  • + {% endfor %} +
+
+
+ +
- {%endfor%} + {% endfor %} {% endif %}
{% endblock %} diff --git a/src/templates/sentoffers.html b/src/templates/sentoffers.html index 5d2a376..5c8e27c 100644 --- a/src/templates/sentoffers.html +++ b/src/templates/sentoffers.html @@ -1,17 +1,94 @@ {% extends 'base.html' %} {% block container %} - -
- {% for doc in docs %} -
- Offered for item {{doc.offerforid}} - {{doc.status}} + +
+ {% if not offers %} + +
+ user profile image + +
+
+ Add Item + +
+
-
- Delete Offer + {% else %} {% for offer in offers %} +
+
+
Their Item
+
Your Item(s)
+
+ +
+
+
+ {{ offer.offerforid.name }} +
+
+ +
+ Add Item +
+ +
+
+ {% for item in offer.offereditems %} +
+ {{ item.name }} +
+ {% endfor %} +
+
+
+ +
+
+
    +
  • {{offer.offerforid.name}}
  • +
+
+ +
+
    + {% for item in offer.offereditems %} +
  • {{item.name}}
  • + {% endfor %} +
+
+
+ +
- {%endfor%} + {% endfor %} {% endif %}
{% endblock %} diff --git a/src/templates/signup.html b/src/templates/signup.html index 22e8e2e..283cf62 100644 --- a/src/templates/signup.html +++ b/src/templates/signup.html @@ -1,25 +1,34 @@ -{% extends 'base.html' %} - -{% block container %} +{% extends 'base.html' %} {% block container %} -
-
-
- -
-
-
- -
-
- -
+ +
+
+ +
+
+
+ +
+
+ +
{% if error %}

{{error}}

-{% endif %} -{% endblock %} \ No newline at end of file +{% endif %} {% endblock %} diff --git a/src/templates/viewProfile.html b/src/templates/viewProfile.html index 140ba11..9c69261 100644 --- a/src/templates/viewProfile.html +++ b/src/templates/viewProfile.html @@ -1,25 +1,26 @@ {% extends 'base.html' %} {% block container %}
- user profile image -

Username: {{user.username}}

-

Bio: {{user.bio}}

- - +
+ user profile image + {{user.username}} +

Bio: {{user.bio}}

+ +
{% if docs|length ==0%}
Nothing to see...
- {% else %} - - {% for doc in docs %} {% if doc.public == True %} + {% else %} {% for doc in docs %} {% if doc.public == True %}
@@ -37,6 +38,7 @@

{{ doc.description }}

-
{% endif %} {% endfor %} {% endif %} +
+ {% endif %} {% endfor %} {% endif %}
{% endblock %} diff --git a/src/templates/viewlisting.html b/src/templates/viewlisting.html index 0c098f8..44820e3 100644 --- a/src/templates/viewlisting.html +++ b/src/templates/viewlisting.html @@ -1,87 +1,95 @@ {% extends 'base.html' %} {% block container %}
- user profile image -
- -
- {% if docs|length ==0%} -
- Add Item - -
- {% else %} -
+
Add Item -
- {% for doc in docs %} {% if doc.public == True %} -
-
-
- {{ doc.title }} -
-
-
- {{ doc.name }} -

${{ doc.price }}

-
-

{{ doc.description }}

-
+ +
+ {% if docs|length == 0 %} +
+ Add Item +
-
- Edit -
- Delete -
- Set Private + {% else %} +
+ Add Item +
-
- {% else %} -
-
-
- {{ doc.title }} -
-
-
- {{ doc.name }} -

${{ doc.price }}

+ {% for doc in docs %} {% if doc.public == True %} +
+
+
+ {{ doc.title }}
-

{{ doc.description }}

+
+
+ {{ doc.name }} +

${{ doc.price }}

+
+

{{ doc.description }}

+
+
+
+ Edit +
+ Delete +
+ Set Private
-
- Edit -
- Delete -
- Set Public + {% else %} +
+
+
+ {{ doc.title }} +
+
+
+ {{ doc.name }} +

${{ doc.price }}

+
+

{{ doc.description }}

+
+
+
+ Edit +
+ Delete +
+ Set Public +
+ {% endif %} {% endfor %} {% endif %}
- {% endif %} {% endfor %} {% endif %}
{% endblock %}