diff --git a/docker-compose.yml b/docker-compose.yml index c7eafd145..7cab26997 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: - MASTER_KEY=3435tdfsdudebussylmaoxxt43 - REDIS_URL=redis://redis - DOMAIN=localhost - - SITE_NAME=2Much4You + - SITE_NAME=Drama - GIPHY_KEY=3435tdfsdudebussylmaoxxt43 - DISCORD_SERVER_ID=3435tdfsdudebussylmaoxxt43 - DISCORD_CLIENT_ID=3435tdfsdudebussylmaoxxt43 diff --git a/files/classes/comment.py b/files/classes/comment.py index d520e4d82..ac4dd90a4 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -422,6 +422,10 @@ class Comment(Base): return body + def print(self): + print(f'post: {self.id}, comment: {self.author_id}', flush=True) + return '' + @lazy def collapse_for_user(self, v, path): if v and self.author_id == v.id: return False diff --git a/files/classes/marsey.py b/files/classes/marsey.py index e4694e0e1..0f1a8d0b6 100644 --- a/files/classes/marsey.py +++ b/files/classes/marsey.py @@ -1,6 +1,5 @@ from sqlalchemy import * from files.__main__ import Base -from files.helpers.lazy import lazy class Marsey(Base): __tablename__ = "marseys" diff --git a/files/classes/sub.py b/files/classes/sub.py index aef5b8217..f63ce0b91 100644 --- a/files/classes/sub.py +++ b/files/classes/sub.py @@ -1,6 +1,9 @@ from sqlalchemy import * -from sqlalchemy.orm import relationship from files.__main__ import Base +from files.helpers.lazy import lazy +from os import environ + +SITE_NAME = environ.get("SITE_NAME", '').strip() class Sub(Base): @@ -8,6 +11,20 @@ class Sub(Base): name = Column(String, primary_key=True) sidebar = Column(String) sidebar_html = Column(String) + sidebarurl = Column(String) + bannerurl = Column(String) def __repr__(self): - return f"" \ No newline at end of file + return f"" + + @property + @lazy + def sidebar_url(self): + if self.sidebarurl: return self.sidebarurl + return f'/static/assets/images/{SITE_NAME}/sidebar.webp?a=1039' + + @property + @lazy + def banner_url(self): + if self.bannerurl: return self.bannerurl + return f'/static/assets/images/{SITE_NAME}/banner.webp?a=1039' \ No newline at end of file diff --git a/files/classes/submission.py b/files/classes/submission.py index 639817469..bb4a42102 100644 --- a/files/classes/submission.py +++ b/files/classes/submission.py @@ -440,6 +440,10 @@ class Submission(Base): return body + def print(self): + print(f'post: {self.id}, author: {self.author_id}', flush=True) + return '' + @lazy def realtitle(self, v): if self.club and not (v and (v.paid_dues or v.id == self.author_id)): diff --git a/files/classes/user.py b/files/classes/user.py index 2d076a66d..92456a5bb 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -127,7 +127,8 @@ class User(Base): original_username = deferred(Column(String)) referred_by = Column(Integer, ForeignKey("users.id")) nwordpass = Column(Boolean) - + subs_created = Column(Integer, default=0) + badges = relationship("Badge", viewonly=True) subscriptions = relationship("Subscription", viewonly=True) following = relationship("Follow", primaryjoin="Follow.user_id==User.id", viewonly=True) diff --git a/files/helpers/const.py b/files/helpers/const.py index c1a302a51..48430a0f5 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -142,7 +142,7 @@ AGENDAPOSTER_MSG = """Hi @{username},\n\nYour {type} has been automatically remo included. \n\n*This is an automated message; if you need help, you can message us [here](/contact).*""" -if SITE_NAME in ('Drama','2Much4You'): +if SITE in ('rdrama.net','devrama.xyz','2much4you.net','ruqqus.ga'): PW_ID = 3750 BASEDBOT_ID = 0 KIPPY_ID = 7150 @@ -575,10 +575,6 @@ FORTUNE_REPLIES = ('Your fortune: Allah Wills It',' no_pass_phrase = """

Sorry whiteboy, we're gonna need to see some ID before you start throwin that word around like it's nothing.\n\nTake a 10 minute time-out and come back when you've learned your lesson and/or paid reparations (by purchasing a BIPOC Approved™ rDrama NWord Pass© from the shop) \n\nThis is an automated message; if you need help, you can message us here.

""" -db = db_session() -SUBS = [x[0] for x in db.query(Sub.name).all()] -db.close() - ROLES={ "owner": "864612849199480914", "admin": "879459632656048180" if environ.get("DOMAIN") == "pcmemes.net" else "846509661288267776", @@ -600,4 +596,6 @@ REDDIT_NOTIFS = { 'carpathianflorist': CARP_ID, 'carpathian florist': CARP_ID, 'the_homocracy': HOMO_ID -} \ No newline at end of file +} + +toomuch_subs = ('2much4you','2balkan4you','2middleeast4you','2asia4you','2caucasian4you','2european4you','2american4you') \ No newline at end of file diff --git a/files/helpers/get.py b/files/helpers/get.py index a1e544c2c..b5e2e7262 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -32,9 +32,7 @@ def get_user(username, v=None, graceful=False): if not graceful: abort(404) else: return None - username = username.replace('\\', '') - username = username.replace('_', '\_') - username = username.replace('%', '') + username = username.replace('\\', '').replace('_', '\_').replace('%', '').strip() user = g.db.query( User diff --git a/files/helpers/jinja2.py b/files/helpers/jinja2.py index 944921aac..415f71e9f 100644 --- a/files/helpers/jinja2.py +++ b/files/helpers/jinja2.py @@ -16,4 +16,4 @@ def post_embed(id, v): @app.context_processor def inject_constants(): - return {"environ":environ, "SITE":SITE, "SITE_NAME":SITE_NAME, "SITE_FULL":SITE_FULL, "AUTOJANNY_ID":AUTOJANNY_ID, "NOTIFICATIONS_ID":NOTIFICATIONS_ID, "PUSHER_ID":PUSHER_ID, "CC":CC, "CC_TITLE":CC_TITLE, "listdir":listdir, "MOOSE_ID":MOOSE_ID, "AEVANN_ID":AEVANN_ID, "config":app.config.get, "DEFAULT_COLOR":DEFAULT_COLOR, "COLORS":COLORS, "SUBS": SUBS} + return {"environ":environ, "SITE":SITE, "SITE_NAME":SITE_NAME, "SITE_FULL":SITE_FULL, "AUTOJANNY_ID":AUTOJANNY_ID, "NOTIFICATIONS_ID":NOTIFICATIONS_ID, "PUSHER_ID":PUSHER_ID, "CC":CC, "CC_TITLE":CC_TITLE, "listdir":listdir, "MOOSE_ID":MOOSE_ID, "AEVANN_ID":AEVANN_ID, "config":app.config.get, "DEFAULT_COLOR":DEFAULT_COLOR, "COLORS":COLORS} \ No newline at end of file diff --git a/files/routes/__init__.py b/files/routes/__init__.py index c0f156676..e9121b46a 100644 --- a/files/routes/__init__.py +++ b/files/routes/__init__.py @@ -14,4 +14,5 @@ from .users import * from .votes import * from .feeds import * from .awards import * -from .giphy import * \ No newline at end of file +from .giphy import * +from .subs import * \ No newline at end of file diff --git a/files/routes/admin.py b/files/routes/admin.py index 5e2bc07bd..af067a43d 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -340,42 +340,6 @@ def post_sidebar(v): return render_template('admin/sidebar.html', v=v, sidebar=sidebar, msg='Sidebar edited successfully!') - -@app.get('/s//sidebar') -@auth_required -def get_sub_sidebar(v, sub): - sub = g.db.query(Sub).filter_by(name=sub).one_or_none() - if not sub: abort(404) - - if not v.mods(sub.name): abort(403) - - return render_template('admin/sidebar.html', v=v, sidebar=sub.sidebar, sub=sub) - - -@app.post('/s//sidebar') -@limiter.limit("1/second;30/minute;200/hour;1000/day") -@auth_required -def post_sub_sidebar(v, sub): - sub = g.db.query(Sub).filter_by(name=sub).one_or_none() - if not sub: abort(404) - - if not v.mods(sub.name): abort(403) - - sub.sidebar = request.values.get('sidebar', '').strip() - sub.sidebar_html = sanitize(sub.sidebar) - g.db.add(sub) - - ma = ModAction( - kind="change_sidebar", - user_id=v.id - ) - g.db.add(ma) - - g.db.commit() - - return render_template('admin/sidebar.html', v=v, sidebar=sub.sidebar, msg='Sidebar edited successfully!', sub=sub) - - @app.get("/admin/shadowbanned") @auth_required def shadowbanned(v): diff --git a/files/routes/front.py b/files/routes/front.py index d9965b379..892b891b3 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -133,7 +133,7 @@ def notifications(v): @limiter.limit("3/second;30/minute;400/hour;2000/day") @auth_desired def front_all(v, sub=None): - if sub: sub = g.db.query(Sub).filter_by(name=sub).one_or_none() + if sub: sub = g.db.query(Sub).filter_by(name=sub..strip().lower()).one_or_none() if request.path.startswith('/s/') and not sub: abort(404) @@ -151,11 +151,11 @@ def front_all(v, sub=None): if v: defaultsorting = v.defaultsorting - if sub or SITE_NAME == '2Much4You': defaulttime = 'all' + if sub or SITE_NAME != 'Drama': defaulttime = 'all' else: defaulttime = v.defaulttime else: defaultsorting = "hot" - if sub or SITE_NAME == '2Much4You': defaulttime = 'all' + if sub or SITE_NAME != 'Drama': defaulttime = 'all' else: defaulttime = defaulttimefilter sort=request.values.get("sort", defaultsorting) @@ -268,7 +268,8 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, ccmode="false" posts = g.db.query(Submission) if sub: posts = posts.filter_by(sub=sub.name) - elif SITE_NAME == '2Much4You': posts = posts.filter(Submission.sub != None) + elif SITE_NAME == '2Much4You': posts = posts.filter(Submission.sub.in_(toomuch_subs)) + elif SITE_NAME == 'ruqqus': posts = posts.filter(Submission.sub != None) else: posts = posts.filter_by(sub=None) if gt: posts = posts.filter(Submission.created_utc > gt) @@ -343,7 +344,8 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, ccmode="false" if (sort == "hot" or (v and v.id == Q_ID)) and page == 1 and ccmode == "false" and not gt and not lt: pins = g.db.query(Submission).filter(Submission.stickied != None, Submission.is_banned == False) if sub: pins = pins.filter_by(sub=sub.name) - elif SITE_NAME == '2Much4You': pins = pins.filter(Submission.sub != None) + elif SITE_NAME == '2Much4You': pins = pins.filter(Submission.sub.in_(toomuch_subs)) + elif SITE_NAME == 'ruqqus': pins = pins.filter(Submission.sub != None) else: pins = pins.filter_by(sub=None) if v and v.admin_level == 0: diff --git a/files/routes/posts.py b/files/routes/posts.py index c27929af7..cc025f523 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -91,11 +91,11 @@ def publish(pid, v): @app.get("/s//submit") @auth_required def submit_get(v, sub=None): - if sub: sub = g.db.query(Sub.name).filter_by(name=sub).one_or_none() + if sub: sub = g.db.query(Sub.name).filter_by(name=sub.strip().lower()).one_or_none() if request.path.startswith('/s/') and not sub: abort(404) - return render_template("submit.html", v=v, sub=sub) + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, sub=sub) @app.get("/post/") @app.get("/post//") @@ -804,7 +804,7 @@ def thumbnail_thread(pid): @auth_required def submit_post(v, sub=None): if not sub: sub = request.values.get("sub") - sub = g.db.query(Sub.name).filter_by(name=sub).one_or_none() + sub = g.db.query(Sub.name).filter_by(name=sub.strip().lower()).one_or_none() if sub: sub = sub[0] else: sub = None @@ -879,7 +879,7 @@ def submit_post(v, sub=None): if domain_obj: reason = f"Remove the {domain_obj.domain} link from your post and try again. {domain_obj.reason}" if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error":reason}, 400 - return render_template("submit.html", v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 400 elif "twitter.com" == domain: try: embed = requests.get("https://publish.twitter.com/oembed", timeout=5, params={"url":url, "omit_script":"t"}).json()["html"] except: embed = None @@ -901,16 +901,16 @@ def submit_post(v, sub=None): if not url and not request.values.get("body") and not request.files.get("file", None): if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "`url` or `body` parameter required."}, 400 - return render_template("submit.html", v=v, error="Please enter a url or some text.", title=title, url=url, body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="Please enter a url or some text.", title=title, url=url, body=request.values.get("body", "")), 400 if not title: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "Please enter a better title"}, 400 - return render_template("submit.html", v=v, error="Please enter a better title.", title=title, url=url, body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="Please enter a better title.", title=title, url=url, body=request.values.get("body", "")), 400 elif len(title) > 500: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "500 character limit for titles"}, 400 - else: render_template("submit.html", v=v, error="500 character limit for titles.", title=title[:500], url=url, body=request.values.get("body", "")), 400 + else: render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="500 character limit for titles.", title=title[:500], url=url, body=request.values.get("body", "")), 400 if v.marseyawarded: marregex = list(re.finditer("^(:[!#]{0,2}m\w+:\s*)+$", title, re.A)) @@ -979,12 +979,12 @@ def submit_post(v, sub=None): if len(str(body)) > 20000: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error":"There's a 20000 character limit for text body."}, 400 - return render_template("submit.html", v=v, error="There's a 20000 character limit for text body.", title=title, url=url, body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="There's a 20000 character limit for text body.", title=title, url=url, body=request.values.get("body", "")), 400 if len(url) > 2048: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error":"2048 character limit for URLs."}, 400 - return render_template("submit.html", v=v, error="2048 character limit for URLs.", title=title, url=url,body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="2048 character limit for URLs.", title=title, url=url,body=request.values.get("body", "")), 400 for i in re.finditer('^(https:\/\/.*\.(png|jpg|jpeg|gif|webp|PNG|JPG|JPEG|GIF|WEBP|9999)($|\s|\n))', body, re.M|re.A): if "wikipedia" not in i.group(1): body = body.replace(i.group(1), f'![]({i.group(1)})') @@ -1022,7 +1022,7 @@ def submit_post(v, sub=None): body += f"\n\n{url}" else: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "Image/Video files only"}, 400 - return render_template("submit.html", v=v, error="Image/Video files only."), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="Image/Video files only."), 400 if '#fortune' in body: body = body.replace('#fortune', '') @@ -1045,7 +1045,7 @@ def submit_post(v, sub=None): reason = f"Remove the {ban.domain} link from your post and try again." if ban.reason: reason += f" {ban.reason}" if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": reason}, 403 - return render_template("submit.html", v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 403 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error=reason, title=title, url=url, body=request.values.get("body", "")), 403 if v.club_allowed == False: club = False else: club = bool(request.values.get("club","")) @@ -1131,7 +1131,7 @@ def submit_post(v, sub=None): new_post.url = url else: if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "File type not allowed"}, 400 - return render_template("submit.html", v=v, error="File type not allowed.", title=title, body=request.values.get("body", "")), 400 + return render_template("submit.html", SUBS=tuple(x[0] for x in g.db.query(Sub.name).all()) if SITE_NAME == 'Drama' else None, v=v, error="File type not allowed.", title=title, body=request.values.get("body", "")), 400 if not new_post.thumburl and new_post.url: diff --git a/files/routes/subs.py b/files/routes/subs.py new file mode 100644 index 000000000..d7de32117 --- /dev/null +++ b/files/routes/subs.py @@ -0,0 +1,204 @@ +from files.__main__ import app, limiter, mail +from files.helpers.alerts import * +from files.helpers.wrappers import * +from files.classes import * +from .front import frontlist + +valid_sub_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$") + +@app.get("/s//mods") +@auth_required +def mods(v, sub): + sub = g.db.query(Sub).filter_by(name=sub.lower()).one_or_none() + if not sub: abort(404) + + mods = [x[0] for x in g.db.query(Mod.user_id).filter_by(sub=sub.name).all()] + users = g.db.query(User).filter(User.id.in_(mods)).all() + return render_template("sub/mods.html", v=v, sub=sub, users=users) + + +@app.post("/s//add_mod") +@auth_required +def add_mod(v, sub): + sub = g.db.query(Sub).filter_by(name=sub.lower()).one_or_none() + if not sub: abort(404) + sub = sub.name + + if not v.mods(sub): abort(403) + + user = request.values.get('user') + + if not user: abort(400) + + user = get_user(user) + + mod = Mod(user_id=user.id, sub=sub) + g.db.add(mod) + + send_repeatable_notification(user.id, f"You have been added as a mod to /s/{sub}") + + g.db.commit() + + return redirect(f'/s/{sub}/mods') + + +@app.get("/create_sub") +@auth_required +def create_sub(v): + return render_template("sub/create_sub.html", v=v) + + +@app.post("/create_sub") +@auth_required +def create_sub2(v): + name = request.values.get('name') + if not name: abort(400) + name = name.strip().lower() + + if not re.fullmatch(valid_sub_regex, name): + return render_template("sub/create_sub.html", v=v, error="Sub name not allowed."), 400 + + sub = g.db.query(Sub).filter_by(name=name).one_or_none() + if not sub: + cost = v.subs_created * 25 + if v.coins < cost: + return render_template("sub/create_sub.html", v=v, error="You don't have enough coins!"), 403 + + v.coins -= cost + v.subs_created += 1 + g.db.add(v) + + sub = Sub(name=name) + g.db.add(sub) + mod = Mod(user_id=v.id, sub=sub.name) + g.db.add(mod) + g.db.commit() + + return redirect(f'/s/{sub.name}') + +@app.post("/kick/") +@auth_required +def kick(v, pid): + try: pid = int(pid) + except: abort(400) + + post = get_post(pid) + + if not post.sub: abort(403) + if not v.mods(post.sub): abort(403) + + post.sub = 'general' + g.db.add(post) + g.db.commit() + + cache.delete_memoized(frontlist) + + return {"message": "Post kicked successfully!"} + + +@app.get('/s//settings') +@auth_required +def sub_settings(v, sub): + sub = g.db.query(Sub).filter_by(name=sub.strip().lower()).one_or_none() + if not sub: abort(404) + + if not v.mods(sub.name): abort(403) + + return render_template('sub/settings.html', v=v, sidebar=sub.sidebar, sub=sub) + + +@app.post('/s//sidebar') +@limiter.limit("1/second;30/minute;200/hour;1000/day") +@auth_required +def post_sub_sidebar(v, sub): + sub = g.db.query(Sub).filter_by(name=sub.lower()).one_or_none() + if not sub: abort(404) + + if not v.mods(sub.name): abort(403) + + sub.sidebar = request.values.get('sidebar', '').strip() + sub.sidebar_html = sanitize(sub.sidebar) + g.db.add(sub) + + ma = ModAction( + kind="change_sidebar", + user_id=v.id + ) + g.db.add(ma) + + g.db.commit() + + return redirect(f'/s/{sub.name}/settings') + + +@app.post("/s//banner") +@limiter.limit("1/second;30/minute;200/hour;1000/day") +@auth_required +def sub_banner(v, sub): + if v and v.patron: + if request.content_length > 8 * 1024 * 1024: return {"error":"Max file size is 8 MB."}, 413 + elif request.content_length > 4 * 1024 * 1024: return {"error":"Max file size is 4 MB."}, 413 + + if request.headers.get("cf-ipcountry") == "T1": return {"error":"Image uploads are not allowed through TOR."}, 403 + + sub = g.db.query(Sub).filter_by(name=sub.lower().strip()).one_or_none() + if not sub: abort(404) + + if not v.mods(sub.name): abort(403) + + file = request.files["banner"] + + name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp' + file.save(name) + bannerurl = process_image(name) + + if bannerurl: + if sub.bannerurl and '/images/' in sub.bannerurl: + fpath = '/images/' + sub.bannerurl.split('/images/')[1] + if path.isfile(fpath): os.remove(fpath) + sub.bannerurl = bannerurl + g.db.add(sub) + g.db.commit() + + return redirect(f'/s/{sub.name}/settings') + +@app.post("/s//sidebar_image") +@limiter.limit("1/second;30/minute;200/hour;1000/day") +@auth_required +def sub_sidebar(v, sub): + if v and v.patron: + if request.content_length > 8 * 1024 * 1024: return {"error":"Max file size is 8 MB."}, 413 + elif request.content_length > 4 * 1024 * 1024: return {"error":"Max file size is 4 MB."}, 413 + + if request.headers.get("cf-ipcountry") == "T1": return {"error":"Image uploads are not allowed through TOR."}, 403 + + sub = g.db.query(Sub).filter_by(name=sub.lower().strip()).one_or_none() + if not sub: abort(404) + + if not v.mods(sub.name): abort(403) + + file = request.files["sidebar"] + name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp' + file.save(name) + sidebarurl = process_image(name) + + if sidebarurl: + if sub.sidebarurl and '/images/' in sub.sidebarurl: + fpath = '/images/' + sub.sidebarurl.split('/images/')[1] + if path.isfile(fpath): os.remove(fpath) + sub.sidebarurl = sidebarurl + g.db.add(sub) + g.db.commit() + + return redirect(f'/s/{sub.name}/settings') + + +#create general +#subs urls +#----- +#mods id seq +#css +#exile +#guild mod log +#remove mod +#search sub \ No newline at end of file diff --git a/files/templates/admin/sidebar.html b/files/templates/admin/sidebar.html index 27650b604..a0f29c8a7 100644 --- a/files/templates/admin/sidebar.html +++ b/files/templates/admin/sidebar.html @@ -20,7 +20,7 @@
-

Edit {% if sub %}/s/{{sub.name}}{% endif %} sidebar

+

Edit Sidebar


diff --git a/files/templates/comments.html b/files/templates/comments.html index f49139c7a..76a69c88d 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -231,7 +231,9 @@ {% if c.author.verified %} {% endif %} - + {% if not c.author %} + {{c.print()}} + {% endif %} @{{c.author_name}}'s profile picture{{c.author_name}} {% if c.author.customtitle %}  {% if c.author.quadrant %}{{c.author.quadrant}} quadrant{% endif %}{{c.author.customtitle | safe}}{% endif %} {% endif %} diff --git a/files/templates/default.html b/files/templates/default.html index c11a6df64..2782fdf66 100644 --- a/files/templates/default.html +++ b/files/templates/default.html @@ -223,6 +223,10 @@ site banner + {% elif sub %} + + sub banner + {% else %} site banner diff --git a/files/templates/emoji_modal.html b/files/templates/emoji_modal.html index 02df375f8..3635da6dd 100644 --- a/files/templates/emoji_modal.html +++ b/files/templates/emoji_modal.html @@ -8,6 +8,13 @@ + + {% if SITE_NAME == 'ruqqus' %} + + {% endif %} + @@ -52,6 +59,13 @@
+ + {% if SITE_NAME == 'ruqqus' %} +
+
+
+ {% endif %} +
@@ -86,7 +100,7 @@
- +