Update .gitignore and enhance project structure
- Add 'privacy.txt' to .gitignore to prevent checking it in - Refactor data storage from arrays to dictionaries for better data handling in 'main.py' - Include 'pathlib' import for handling filesystem paths - Introduce new CSS and Bootstrap files providing updated styles and responsive design elements - Modify HTML templates to use updated data structures and enhance accessibility These changes improve code readability, maintain project consistency, and enhance the front-end presentation. This work is part of ongoing efforts to better manage project data, secure sensitive information, and provide a more robust user interface.
This commit is contained in:
parent
f60494af6e
commit
232a1504fb
28 changed files with 761 additions and 892 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ venv/
|
|||
*.pyc
|
||||
__pycache__/
|
||||
.vscode
|
||||
privacy.txt
|
335
main.py
335
main.py
|
@ -24,6 +24,7 @@ import os
|
|||
import json
|
||||
import re
|
||||
import logging
|
||||
import pathlib
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
|
@ -126,17 +127,17 @@ def update_data():
|
|||
favorites = ible["document"]["favorites"]
|
||||
|
||||
global_ibles["/projects"].append(
|
||||
[
|
||||
link,
|
||||
img,
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
favorites,
|
||||
]
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"title": title,
|
||||
"author": author,
|
||||
"author_link": author_link,
|
||||
"channel": channel,
|
||||
"channel_link": channel_link,
|
||||
"views": views,
|
||||
"favorites": favorites,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
|
@ -204,18 +205,18 @@ def explore_lists(soup):
|
|||
if ible.select("span.ible-favorites") != []:
|
||||
favorites = ible.select("span.ible-favorites")[0].text
|
||||
list_.append(
|
||||
[
|
||||
link,
|
||||
img,
|
||||
alt,
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
channel,
|
||||
channel_link,
|
||||
favorites,
|
||||
views,
|
||||
]
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"alt": alt,
|
||||
"title": title,
|
||||
"author": author,
|
||||
"author_link": author_link,
|
||||
"channel": channel,
|
||||
"channel_link": channel_link,
|
||||
"favorites": favorites,
|
||||
"views": views,
|
||||
}
|
||||
)
|
||||
return list_
|
||||
|
||||
|
@ -275,20 +276,22 @@ def member_header(header):
|
|||
else:
|
||||
bio = ""
|
||||
|
||||
return [
|
||||
avatar,
|
||||
title,
|
||||
location,
|
||||
signup,
|
||||
instructables,
|
||||
views,
|
||||
comments,
|
||||
followers,
|
||||
bio,
|
||||
]
|
||||
return {
|
||||
"avatar": avatar,
|
||||
"title": title,
|
||||
"location": location,
|
||||
"signup": signup,
|
||||
"instructables": instructables,
|
||||
"views": views,
|
||||
"comments": comments,
|
||||
"followers": followers,
|
||||
"bio": bio,
|
||||
}
|
||||
|
||||
|
||||
def category_page(path, name, teachers=False):
|
||||
# TODO: Figure out why this doesn't work - probably using the search function would help...
|
||||
|
||||
try:
|
||||
data = urlopen("https://www.instructables.com" + path)
|
||||
except HTTPError as e:
|
||||
|
@ -304,7 +307,7 @@ def category_page(path, name, teachers=False):
|
|||
)
|
||||
title = card.select("a img")[0].get("alt")
|
||||
|
||||
channels.append([link, title, img])
|
||||
channels.append({"link": link, "title": title, "img": img})
|
||||
|
||||
ibles = []
|
||||
for ible in soup.select(
|
||||
|
@ -329,17 +332,17 @@ def category_page(path, name, teachers=False):
|
|||
favorites = stats.select("span.ible-favorites")[0].text
|
||||
|
||||
ibles.append(
|
||||
[
|
||||
link,
|
||||
img,
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
favorites,
|
||||
]
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"title": title,
|
||||
"author": author,
|
||||
"author_link": author_link,
|
||||
"channel": channel,
|
||||
"channel_link": channel_link,
|
||||
"views": views,
|
||||
"favorites": favorites,
|
||||
}
|
||||
)
|
||||
|
||||
contests = []
|
||||
|
@ -350,10 +353,15 @@ def category_page(path, name, teachers=False):
|
|||
img = proxy(contest.select("a noscript img")[0].get("src"))
|
||||
title = contest.select("a img")[0].get("alt")
|
||||
|
||||
contests.append([link, img, title])
|
||||
contests.append({"link": link, "img": img, "title": title})
|
||||
|
||||
return render_template(
|
||||
"category.html", data=[name, channels, ibles, contests, path]
|
||||
"category.html",
|
||||
name=name,
|
||||
channels=channels,
|
||||
ibles=ibles,
|
||||
contests=contests,
|
||||
path=path,
|
||||
)
|
||||
|
||||
|
||||
|
@ -393,23 +401,24 @@ def project_list(path, head, sort=""):
|
|||
favorites = ible["document"]["favorites"]
|
||||
|
||||
ibles.append(
|
||||
[
|
||||
link,
|
||||
img,
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
favorites,
|
||||
]
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"title": title,
|
||||
"author": author,
|
||||
"author_link": author_link,
|
||||
"channel": channel,
|
||||
"channel_link": channel_link,
|
||||
"views": views,
|
||||
"favorites": favorites,
|
||||
}
|
||||
)
|
||||
|
||||
if len(ibles) >= 8:
|
||||
break
|
||||
|
||||
return render_template("projects.html", data=[head, ibles, path])
|
||||
print(ibles)
|
||||
return render_template("projects.html", title=head, ibles=ibles, path=path)
|
||||
|
||||
|
||||
@app.route("/sitemap/")
|
||||
|
@ -447,7 +456,7 @@ def route_sitemap(path=""):
|
|||
channels.append([channel, channel_link])
|
||||
groups.append(["", "", channels])
|
||||
|
||||
return render_template("sitemap.html", data=groups)
|
||||
return render_template("sitemap.html", title="Sitemap", groups=groups)
|
||||
|
||||
|
||||
@app.route("/contest/archive/")
|
||||
|
@ -488,7 +497,12 @@ def route_contest_archive():
|
|||
pagination = main.select("nav.pagination ul.pagination")[0]
|
||||
|
||||
return render_template(
|
||||
"archives.html", data=[page, contest_count, pagination, contest_list]
|
||||
"archives.html",
|
||||
title=f"Contest Archives (Page {page})",
|
||||
page=page,
|
||||
contest_count=contest_count,
|
||||
pagination=pagination,
|
||||
contest_list=contest_list,
|
||||
)
|
||||
|
||||
|
||||
|
@ -530,20 +544,26 @@ def route_contest(contest):
|
|||
views = entry.select(".ible-views")[0].text
|
||||
|
||||
entry_list.append(
|
||||
[
|
||||
link,
|
||||
entry_img,
|
||||
entry_title,
|
||||
author,
|
||||
author_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
]
|
||||
{
|
||||
"link": link,
|
||||
"entry_img": entry_img,
|
||||
"entry_title": entry_title,
|
||||
"author": author,
|
||||
"author_link": author_link,
|
||||
"channel": channel,
|
||||
"channel_link": channel_link,
|
||||
"views": views,
|
||||
}
|
||||
)
|
||||
|
||||
return render_template(
|
||||
"contest.html", data=[title, img, entry_count, prizes, info, entry_list]
|
||||
"contest.html",
|
||||
title=title,
|
||||
img=img,
|
||||
entry_count=entry_count,
|
||||
prizes=prizes,
|
||||
info=info,
|
||||
entry_list=entry_list,
|
||||
)
|
||||
|
||||
|
||||
|
@ -567,7 +587,16 @@ def route_contests():
|
|||
prizes = contest.select("span.contest-meta-count")[0].text
|
||||
entries = contest.select("span.contest-meta-count")[1].text
|
||||
|
||||
contests.append([link, img, alt, deadline, prizes, entries])
|
||||
contests.append(
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"alt": alt,
|
||||
"deadline": deadline,
|
||||
"prizes": prizes,
|
||||
"entries": entries,
|
||||
}
|
||||
)
|
||||
|
||||
closed = []
|
||||
for display in soup.select("div.contest-winner-display"):
|
||||
|
@ -583,11 +612,25 @@ def route_contests():
|
|||
item_author_link = featured_item.select("a.author")[0].get("href")
|
||||
|
||||
featured_items.append(
|
||||
[item_link, item_img, item_title, item_author, item_author_link]
|
||||
{
|
||||
"link": item_link,
|
||||
"img": item_img,
|
||||
"title": item_title,
|
||||
"author": item_author,
|
||||
"author_link": item_author_link,
|
||||
}
|
||||
)
|
||||
closed.append(
|
||||
{"link": link, "img": img, "alt": alt, "featured_items": featured_items}
|
||||
)
|
||||
closed.append([link, img, alt, featured_items])
|
||||
|
||||
return render_template("contests.html", data=[contest_count, contests, closed])
|
||||
return render_template(
|
||||
"contests.html",
|
||||
title="Contests",
|
||||
contest_count=contest_count,
|
||||
contests=contests,
|
||||
closed=closed,
|
||||
)
|
||||
|
||||
|
||||
@app.route("/<category>/<channel>/projects/")
|
||||
|
@ -623,6 +666,7 @@ def route_projects():
|
|||
|
||||
@app.route("/search")
|
||||
def route_search():
|
||||
# TODO: Fix this (using search function)
|
||||
return project_list("/search/?q=" + request.args["q"] + "&projects=all", "Search")
|
||||
|
||||
|
||||
|
@ -700,10 +744,21 @@ def route_member_instructables(member):
|
|||
if stats.select("span.ible-favorites") != []:
|
||||
favorites = stats.select("span.ible-favorites")[0].text
|
||||
|
||||
ible_list.append([link, img, title, views, favorites])
|
||||
ible_list.append(
|
||||
{
|
||||
"link": link,
|
||||
"img": img,
|
||||
"title": title,
|
||||
"views": views,
|
||||
"favorites": favorites,
|
||||
}
|
||||
)
|
||||
|
||||
return render_template(
|
||||
"member-instructables.html", data=header_content + [ible_list]
|
||||
"member-instructables.html",
|
||||
title=f"{header_content['title']}'s Instructables",
|
||||
header_content=header_content,
|
||||
ibles=ible_list,
|
||||
)
|
||||
|
||||
|
||||
|
@ -741,7 +796,7 @@ def route_member(member):
|
|||
ible_link = ible.select("div.image-wrapper")[0].a.get("href")
|
||||
ible_img = proxy(ible.select("div.image-wrapper a img")[0].get("src"))
|
||||
|
||||
ibles.append([ible_title, ible_link, ible_img])
|
||||
ibles.append({"title": ible_title, "link": ible_link, "img": ible_img})
|
||||
|
||||
ach_list = body.select(
|
||||
"div.two-col-section div.right-col-section.centered-sidebar div.boxed-content.about-me"
|
||||
|
@ -766,7 +821,12 @@ def route_member(member):
|
|||
|
||||
return render_template(
|
||||
"member.html",
|
||||
data=header_content + [ible_list_title, ibles, ach_list_title, achs],
|
||||
title=header_content["title"] + "'s Profile",
|
||||
header_content=header_content,
|
||||
ible_list_title=ible_list_title,
|
||||
ibles=ibles,
|
||||
ach_list_title=ach_list_title,
|
||||
achs=achs,
|
||||
)
|
||||
|
||||
|
||||
|
@ -782,7 +842,7 @@ def route_article(article):
|
|||
try:
|
||||
header = soup.select("header")
|
||||
if len(header) < 2 and soup.select("title")[0].text.contains("Pending Review"):
|
||||
return render_template("article-review.html")
|
||||
return render_template("article-review.html", title="Pending Review")
|
||||
else:
|
||||
header = header[1]
|
||||
title = header.find("h1").text
|
||||
|
@ -807,11 +867,15 @@ def route_article(article):
|
|||
|
||||
steps = []
|
||||
for step in body.select("section.step"):
|
||||
print(step)
|
||||
step_title = step.select("h2")[0].text
|
||||
|
||||
step_imgs = []
|
||||
for img in step.select("div.no-js-photoset img"):
|
||||
step_imgs.append([proxy(img.get("src")), img.get("alt")])
|
||||
# TODO: Handle download links
|
||||
for img in step.select("img"):
|
||||
step_imgs.append(
|
||||
{"src": proxy(img.get("src")), "alt": img.get("alt")}
|
||||
)
|
||||
|
||||
step_videos = []
|
||||
for img in step.select("video"):
|
||||
|
@ -822,11 +886,20 @@ def route_article(article):
|
|||
"https://content.instructables.com",
|
||||
"/proxy/?url=https://content.instructables.com",
|
||||
)
|
||||
steps.append([step_title, step_imgs, step_text, step_videos])
|
||||
steps.append(
|
||||
{
|
||||
"title": step_title,
|
||||
"imgs": step_imgs,
|
||||
"text": step_text,
|
||||
"videos": step_videos,
|
||||
}
|
||||
)
|
||||
|
||||
comments_list = []
|
||||
comment_count = 0
|
||||
|
||||
# TODO: Fix comments
|
||||
|
||||
# comments = body.select("section.discussion")[0]
|
||||
|
||||
# comment_count = comments.select("h2")[0].text
|
||||
|
@ -865,20 +938,18 @@ def route_article(article):
|
|||
# comments_list.append([comment_votes, comment_author_img_src, comment_author_img_alt, comment_author, comment_author_link, comment_date, comment_text, comment_reply_count, reply_list])
|
||||
return render_template(
|
||||
"article.html",
|
||||
data=[
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
category,
|
||||
category_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
favorites,
|
||||
steps,
|
||||
comment_count,
|
||||
comments_list,
|
||||
],
|
||||
title=title,
|
||||
author=author,
|
||||
author_link=author_link,
|
||||
category=category,
|
||||
category_link=category_link,
|
||||
channel=channel,
|
||||
channel_link=channel_link,
|
||||
views=views,
|
||||
favorites=favorites,
|
||||
steps=steps,
|
||||
comment_count=comment_count,
|
||||
comments_list=comments_list,
|
||||
enumerate=enumerate,
|
||||
)
|
||||
else:
|
||||
|
@ -924,32 +995,30 @@ def route_article(article):
|
|||
"div.thumbnail div.thumbnail-info span.origin a"
|
||||
)[0].get("href")
|
||||
thumbnails.append(
|
||||
[
|
||||
text,
|
||||
link,
|
||||
img,
|
||||
thumbnail_title,
|
||||
thumbnail_author,
|
||||
thumbnail_author_link,
|
||||
thumbnail_channel,
|
||||
thumbnail_channel_link,
|
||||
]
|
||||
{
|
||||
"text": text,
|
||||
"link": link,
|
||||
"img": img,
|
||||
"title": thumbnail_title,
|
||||
"author": thumbnail_author,
|
||||
"author_link": thumbnail_author_link,
|
||||
"channel": thumbnail_channel,
|
||||
"channel_link": thumbnail_channel_link,
|
||||
}
|
||||
)
|
||||
|
||||
return render_template(
|
||||
"collection.html",
|
||||
data=[
|
||||
title,
|
||||
author,
|
||||
author_link,
|
||||
category,
|
||||
category_link,
|
||||
channel,
|
||||
channel_link,
|
||||
views,
|
||||
favorites,
|
||||
thumbnails,
|
||||
],
|
||||
title=title,
|
||||
author=author,
|
||||
author_link=author_link,
|
||||
category=category,
|
||||
category_link=category_link,
|
||||
channel=channel,
|
||||
channel_link=channel_link,
|
||||
views=views,
|
||||
favorites=favorites,
|
||||
thumbnails=thumbnails,
|
||||
)
|
||||
|
||||
except Exception:
|
||||
|
@ -1003,7 +1072,16 @@ def route_explore():
|
|||
|
||||
return render_template(
|
||||
"index.html",
|
||||
data=[title, circuits, workshop, craft, cooking, living, outside, teachers],
|
||||
title=title,
|
||||
sections=[
|
||||
("Circuits", "/circuits", circuits),
|
||||
("Workshop", "/workshop", workshop),
|
||||
("Craft", "/craft", craft),
|
||||
("Cooking", "/cooking", cooking),
|
||||
("Living", "/living", living),
|
||||
("Outside", "/outside", outside),
|
||||
("Teachers", "/teachers", teachers),
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
@ -1028,8 +1106,17 @@ def route_proxy():
|
|||
|
||||
@app.route("/privacypolicy/")
|
||||
def privacypolicy():
|
||||
# TODO: Make this dynamic
|
||||
return render_template("privacypolicy.html")
|
||||
content = "No privacy policy found."
|
||||
|
||||
try:
|
||||
with (pathlib.Path(__file__).parent / "privacy.txt").open() as f:
|
||||
content = f.read()
|
||||
except:
|
||||
pass
|
||||
|
||||
return render_template(
|
||||
"privacypolicy.html", title="Privacy Policy", content=content
|
||||
)
|
||||
|
||||
|
||||
@app.errorhandler(404)
|
||||
|
|
202
static/css/style.css
Normal file
202
static/css/style.css
Normal file
|
@ -0,0 +1,202 @@
|
|||
body {
|
||||
font-family: DejaVu Sans Mono, monospace;
|
||||
margin: 20px auto;
|
||||
line-height: 1.5em;
|
||||
font-size: 1.1em;
|
||||
max-width: 100vw;
|
||||
color: #bbc2cf;
|
||||
padding: 0 10px;
|
||||
hyphens: auto;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #ff6c6b;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
color: #ff6c6b;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
.fact_check_info_title {
|
||||
line-height: 1.2;
|
||||
color: #51afef;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
h3,
|
||||
.fact_check_info_title {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
tab-size: 8;
|
||||
background: #20232a;
|
||||
color: #969ba6;
|
||||
border: 1px solid lightgrey;
|
||||
padding: 5px;
|
||||
tab-size: 4;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: 10px solid #969ba6;
|
||||
padding-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.ibles {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.ible-small {
|
||||
font-size: 0.7em;
|
||||
font-weight: thin;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
.step-imgs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.step-imgs img {
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.reply-button,
|
||||
.replies {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.reply-button + label {
|
||||
position: relative;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input.reply-button:checked + label + .replies {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.member-list {
|
||||
display: inline-block;
|
||||
max-width: 200px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.ible-list-item {
|
||||
display: inline-block;
|
||||
max-width: 350px;
|
||||
vertical-align: top;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.contest-list-item {
|
||||
display: inline-block;
|
||||
max-width: 500px;
|
||||
vertical-align: top;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.archive-month-wrapper {
|
||||
display: inline-block;
|
||||
width: 30vw;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.archive-month {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: -10px;
|
||||
margin-bottom: 1rem;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.archive {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
ul.pagination {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
padding: 0 33vw;
|
||||
list-style-type: none;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
ul.pagination li.active a,
|
||||
ul.pagination li.disabled a,
|
||||
ul.pagination li.active a:hover,
|
||||
ul.pagination li.disabled a:hover {
|
||||
color: #bbc2cf;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.closed-contest-contest {
|
||||
object-fit: cover;
|
||||
width: 33vw;
|
||||
height: 15vw;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.closed-contest-winner,
|
||||
.closed-contest-winner-img {
|
||||
width: 15vw;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
padding: 0 10px;
|
||||
font-size: 0.8em;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.sitemap-group {
|
||||
margin-top: 2em;
|
||||
display: inline-block;
|
||||
width: 30vw;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.sitemap-group h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin-top: 20px !important;
|
||||
}
|
||||
|
||||
header {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.go_here_link {
|
||||
background-color: #4caf50;
|
||||
/* Green */
|
||||
border: none;
|
||||
color: white;
|
||||
padding: 15px 32px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.go_here_link:hover {
|
||||
color: black;
|
||||
}
|
6
static/dist/css/bootstrap.min.css
vendored
Normal file
6
static/dist/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/dist/css/bootstrap.min.css.map
vendored
Normal file
1
static/dist/css/bootstrap.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
static/dist/js/bootstrap.bundle.min.js
vendored
Normal file
7
static/dist/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
1
static/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,21 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>400 - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1 style="font-size:10em;line-height:0em;">400</h1>
|
||||
<h1>400</h1>
|
||||
<p>The request was malformed</p>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,35 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>404 - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
<style>
|
||||
.go_here_link {
|
||||
background-color: #4CAF50;
|
||||
/* Green */
|
||||
border: none;
|
||||
color: white;
|
||||
padding: 15px 32px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.go_here_link:hover {
|
||||
color: black;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1 style="font-size:10em;line-height:0em;">404</h1>
|
||||
<h1>404</h1>
|
||||
<p>This resource cannot be found</p>
|
||||
<br>
|
||||
<p>Why don't you try one of these instead?</p>
|
||||
|
@ -37,7 +10,4 @@
|
|||
<a href="/contest" class="go_here_link">Contests</a>
|
||||
<br><br>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,21 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>429 - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block content %}
|
||||
{% include "header.html" %}
|
||||
<center>
|
||||
<h1 style="font-size:10em;line-height:0em;">429</h1>
|
||||
<h1>429</h1>
|
||||
<p>This instance is being rate-limited</p>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,21 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>500 - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1 style="font-size:10em;line-height:0em;">500</h1>
|
||||
<h1>500</h1>
|
||||
<p>An internal server error has occurred. Please try again later, or notify the administrator if this keeps happening.</p>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,22 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>Contests Archive, Page {{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>Past Contests</h1>
|
||||
<p>{{ data[1] }}</p>
|
||||
<p>{{ contest_count }}</p>
|
||||
<p><a href="/contest/">See running contests</a></p>
|
||||
</center>
|
||||
{% for year in data[3] %}
|
||||
{% for year in contest_list %}
|
||||
<div class="archive-year">
|
||||
<hr>
|
||||
<h2>{{ year[0] }}</h2>
|
||||
|
@ -37,8 +27,5 @@
|
|||
</div>
|
||||
{% endfor %}
|
||||
<hr>
|
||||
{{ data[2]|safe }}
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{{ pagination|safe }}
|
||||
{% endblock %}
|
|
@ -1,21 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Pending Review - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>This content is being reviewed</h1>
|
||||
<p>This Instructable was just published and is still pending review.</p>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,55 +1,62 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% extends "base.html" %} {% block content %}
|
||||
<center>
|
||||
<h1>{{ data[0] }}</h1>
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<p>by <a href="{{ data[2] }}">{{ data[1] }}</a> in <a href="{{ data[4] }}">{{ data[3] }}</a> > <a
|
||||
href="{{ data[6] }}">{{ data[5] }}</a></p>
|
||||
<p>{{ data[7] }} Views, {{ data[8] }} Favorites, {{ data[10] }}</p>
|
||||
<p>
|
||||
by <a href="{{ author_link }}">{{ author }}</a> in
|
||||
<a href="{{ category_link }}">{{ category }}</a> >
|
||||
<a href="{{ channel_link }}">{{ channel }}</a>
|
||||
</p>
|
||||
<p>
|
||||
{{ views }} Views, {{ favorites }} Favorites, {{ comment_count }} Comments
|
||||
</p>
|
||||
</center>
|
||||
|
||||
{% for step in data[9] %}
|
||||
<h2>{{ step[0] }}</h2>
|
||||
<div class="container">
|
||||
{% for step in steps %}
|
||||
<div class="row">
|
||||
<h2>{{ step.title }}</h2>
|
||||
<div class="step-imgs">
|
||||
{% for step_img in step[1] %}
|
||||
<img src="{{ step_img[0] }}" alt="{{ step_img[1] }}">
|
||||
{% for step_img in step.imgs %}
|
||||
<img src="{{ step_img.src }}" alt="{{ step_img.alt }}" />
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="step-vids">
|
||||
{% for step_video in step[3] %}
|
||||
<video src="{{ step_video[0] }}"></video>
|
||||
{% for step_video in step.videos %}
|
||||
<video src="{{ step_video }}"></video>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{{ step[2]|safe }}
|
||||
{% endfor %}
|
||||
{{ step.text|safe }} {% endfor %}
|
||||
|
||||
<br>
|
||||
{% for index, comment in enumerate(data[11]) %}
|
||||
<br />
|
||||
{% for index, comment in enumerate(comments) %}
|
||||
<!-- TODO: Fix comments -->
|
||||
<a href="{{ comment[4] }}">
|
||||
<img style="display:inline-block;" width=30px height=30px src="{{ comment[1] }}" alt="{{ comment[2] }}">
|
||||
<img
|
||||
style="display: inline-block"
|
||||
width="30px"
|
||||
height="30px"
|
||||
src="{{ comment[1] }}"
|
||||
alt="{{ comment[2] }}"
|
||||
/>
|
||||
<span>{{ comment[3] }}</span>
|
||||
</a>
|
||||
<span>{{ comment[5] }}</span>
|
||||
<span>{{ comment[0] }} votes</span>
|
||||
{{ comment[6]|safe }}
|
||||
<input type="checkbox" id="replies{{ index }}" class="reply-button">
|
||||
<input type="checkbox" id="replies{{ index }}" class="reply-button" />
|
||||
<label for="replies{{ index }}"><b>{{ comment[7] }} replies</b></label>
|
||||
<div class="replies">
|
||||
{% for reply in comment[8] %}
|
||||
<blockquote>
|
||||
<a href="{{ reply[4] }}">
|
||||
<img style="display:inline-block;" width=30px height=30px src="{{ reply[1] }}" alt="{{ comment[2] }}">
|
||||
<img
|
||||
style="display: inline-block"
|
||||
width="30px"
|
||||
height="30px"
|
||||
src="{{ reply[1] }}"
|
||||
alt="{{ comment[2] }}"
|
||||
/>
|
||||
<span>{{ reply[3] }}</span>
|
||||
</a>
|
||||
<span>{{ reply[5] }}</span>
|
||||
|
@ -58,9 +65,8 @@
|
|||
</blockquote>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<br>
|
||||
<br />
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
20
templates/base.html
Normal file
20
templates/base.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{% if title %}{{ title }} - {% endif %}Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/bootstrap.min.css') }}">
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,55 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>{{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>{{ data[0] }}</h1>
|
||||
<h1>{{ title }}</h1>
|
||||
<div class="channel-list">
|
||||
{% for channel in data[1] %}
|
||||
{% for channel in channels %}
|
||||
<div style="display:inline-block">
|
||||
<a href="{{ channel[0] }}" style="position:relative;text-align:center;color:white;">
|
||||
<img src="{{ channel[2] }}" alt="{{ channel[1] }}" style="display:inline-block;max-width:200px;">
|
||||
<p style="position:absolute;bottom:0px;left:4px;font-weight:thin;">{{ channel[1] }}</p>
|
||||
<a href="{{ channel.link }}" style="position:relative;text-align:center;color:white;">
|
||||
<img src="{{ channel.img }}" alt="{{ channel.title }}" style="display:inline-block;max-width:200px;">
|
||||
<p style="position:absolute;bottom:0px;left:4px;font-weight:thin;">{{ channel.title }}</p>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<h2><a href="{{ data[4] }}projects/">Featured Projects</a></h2>
|
||||
<h2><a href="{{ path }}projects/">Featured Projects</a></h2>
|
||||
<div class="project-list">
|
||||
{% for ible in data[2] %}
|
||||
{% for ible in ibles %}
|
||||
<div class="ible-list-item">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<a href="{{ ible.link }}">
|
||||
<img src="{{ ible.img }}" alt="{{ ible.title }}">
|
||||
<br>
|
||||
<span><b>{{ ible[2] }}</b></span>
|
||||
<span><b>{{ ible.title }}</b></span>
|
||||
</a>
|
||||
<span>by <a href="{{ ible[4] }}">{{ ible[3] }}</a></span>
|
||||
<span>in <a href="{{ ible[6] }}">{{ ible[5] }}</a></span>
|
||||
<span>by <a href="{{ ible.author_link }}">{{ ible.author }}</a></span>
|
||||
<span>in <a href="{{ ible.channel_link }}">{{ ible.channel }}</a></span>
|
||||
<br>
|
||||
<span>{{ ible[7] }} Views </span>
|
||||
<span>{{ ible[8] }} Favorites</span>
|
||||
<span>{{ ible.views }} Views </span>
|
||||
<span>{{ ible.favorites }} Favorites</span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<h2><a href="/contest/">Contests</a></h2>
|
||||
<div style="display:inline-block;">
|
||||
{% for contest in data[3] %}
|
||||
<a href="{{ contest[0] }}" style="color:#bbc2cf;">
|
||||
<img src="{{ contest[1] }}" alt="{{ contest[2] }}" style="max-width:400px;">
|
||||
{% for contest in contests %}
|
||||
<a href="{{ contest.link }}" style="color:#bbc2cf;">
|
||||
<img src="{{ contest.img }}" alt="{{ contest.title }}" style="max-width:400px;">
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,41 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>{{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>{{ data[0] }}</h1>
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<p>by <a href="{{ data[2] }}">{{ data[1] }}</a> in <a href="{{ data[4] }}">{{ data[3] }}</a> > <a
|
||||
href="{{ data[6] }}">{{ data[5] }}</a></p>
|
||||
<p>{{ data[7] }} Views, {{ data[8] }} Favorites, {{ data[10] }}</p>
|
||||
<p>by <a href="{{ author_link }}">{{ author }}</a> in <a href="{{ category_link }}">{{ category }}</a> > <a
|
||||
href="{{ channel_link }}">{{ channel }}</a></p>
|
||||
<p>{{ views }} Views, {{ favorites }} Favorites</p>
|
||||
|
||||
<div style="max-width:90%;">
|
||||
{% for thumbnail in data[9] %}
|
||||
{% for thumbnail in thumbnails %}
|
||||
<div class="ible-list-item">
|
||||
{% if thumbnail[0] == '' %}
|
||||
<a href="{{ thumbnail[1] }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ thumbnail[2] }}" alt="{{ thumbnail[3] }}">
|
||||
<p>{{ thumbnail[3] }}</p>
|
||||
{% if thumbnail.title == '' %}
|
||||
<a href="{{ thumbnail.link }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ thumbnail.img }}" alt="{{ thumbnail.author }}">
|
||||
<p>{{ thumbnail.author }}</p>
|
||||
</a>
|
||||
<p>by <a href="{{ thumbnail[5] }}">{{ thumbnail[4] }}</a> in <a href="{{ thumbnail[7] }}">{{
|
||||
thumbnail[6] }}</a> </p>
|
||||
<p>by <a href="{{ thumbnail.author_link }}">{{ thumbnail.author }}</a> in <a href="{{ thumbnail.channel_link }}">{{
|
||||
thumbnail.channel }}</a> </p>
|
||||
{% else %}
|
||||
{{ thumbnail[0]|safe }}
|
||||
{{ thumbnail.text|safe }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,35 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<img src="{{ data[1] }}" alt="{{ data[0] }}" style="max-width:98vw;">
|
||||
<p>{{ data[2] }} Entries, {{ data[3] }} Prizes</p>
|
||||
<img src="{{ img }}" alt="{{ title }}" style="max-width:98vw;">
|
||||
<p>{{ entry_count }} Entries, {{ prizes }} Prizes</p>
|
||||
<br>
|
||||
{{ data[4]|safe }}
|
||||
{{ info|safe }}
|
||||
<div class="ible-list">
|
||||
{% for ible in data[5] %}
|
||||
{% for ible in entries %}
|
||||
<div class="ible-list-item">
|
||||
<a href="{{ ible[0] }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<p>{{ ible[2] }}</p>
|
||||
<a href="{{ ible.link }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ ible.entry_img }}" alt="{{ ible.entry_title }}">
|
||||
<p>{{ ible.entry_title }}</p>
|
||||
</a>
|
||||
<p>by <a href="{{ ible[4] }}">{{ ible[3] }}</a> in <a href="{{ ible[6] }}">{{ ible[5] }}</a></p>
|
||||
<p>{{ ible[7] }} Views</p>
|
||||
<p>by <a href="{{ ible.author_link }}">{{ ible.author }}</a> in <a href="{{ ible.channel_link }}">{{ ible.channel }}</a></p>
|
||||
<p>{{ ible.views }} Views</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,53 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>Contests - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>Contests</h1>
|
||||
{{ data[0]|safe }}
|
||||
<h1>{{ title }}</h1>
|
||||
{{ contest_count|safe }}
|
||||
<br>
|
||||
<div class="contest-list">
|
||||
{% for contest in data[1] %}
|
||||
{% for contest in contests %}
|
||||
<div class="contest-list-item">
|
||||
<a href="{{ contest[0] }}">
|
||||
<img src="{{ contest[1] }}" alt="{{ contest[2] }}" style="max-width:500px;">
|
||||
<a href="{{ contest.link }}">
|
||||
<img src="{{ contest.img }}" alt="{{ contest.alt }}" style="max-width:500px;">
|
||||
</a>
|
||||
<p>Closes {{ contest[3] }}</p>
|
||||
<p class="ible-small">{{ contest[4] }} Prizes, {{ contest[5] }} Entries</p>
|
||||
<p>Closes {{ contest.deadline }}</p>
|
||||
<p class="ible-small">{{ contest.prizes }} Prizes, {{ contest.entries }} Entries</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="closed-contests" id="contest-winners">
|
||||
<h2>Winner's Circle</h2>
|
||||
{% for closed in data[2] %}
|
||||
{% for closed in closed %}
|
||||
<div class="closed-contest">
|
||||
<a href="{{ closed[0] }}"><img class="closed-contest-contest" src="{{ closed[1] }}"
|
||||
alt="{{ closed[2] }}"></a>
|
||||
{% for featured_items in closed[3] %}
|
||||
<a href="{{ closed.link }}"><img class="closed-contest-contest" src="{{ closed.img }}"
|
||||
alt="{{ closed.alt }}"></a>
|
||||
{% for featured_items in closed.featured_items %}
|
||||
<div class="closed-contest-winner">
|
||||
<a href="{{ featured_items[0] }}">
|
||||
<img class="closed-contest-winner-img" src="{{ featured_items[1] }}"
|
||||
alt="{{ featured_items[2] }}">
|
||||
<a href="{{ featured_items.link }}">
|
||||
<img class="closed-contest-winner-img" src="{{ featured_items.img }}"
|
||||
alt="{{ featured_items.title}}">
|
||||
<br>
|
||||
<b>{{ featured_items[2] }}</b>
|
||||
<b>{{ featured_items.title }}</b>
|
||||
</a>
|
||||
<p>by <a href="{{ featured_items[4] }}">{{ featured_items[3] }}</a></p>
|
||||
<p>by <a href="{{ featured_items.author_link }}">{{ featured_items.author }}</a></p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,26 +1,43 @@
|
|||
<header>
|
||||
<ul
|
||||
style="display:flex;justify-content:flex-start;list-style-type:none;padding-left:0px;align-items:center;flex-wrap:wrap;">
|
||||
<div style="width: 20px; height: 0px"> </div>
|
||||
<li><a href="/"><img style="display:inline" src="{{ url_for('static', filename='img/logo.png') }}"
|
||||
height=75px></a></li>
|
||||
<div style="width: 40px; height: 0px"> </div>
|
||||
<li><a href="/projects/">Projects</a></li>
|
||||
<div style="width: 40px; height: 0px"> </div>
|
||||
<li><a href="/contest/">Contests</a></li>
|
||||
<div style="width: 40px; height: 0px"> </div>
|
||||
<li><a href="/teachers/">Teachers</a></li>
|
||||
|
||||
<div style="width: 60px; height: 0px"> </div>
|
||||
|
||||
<form action="/search" method="GET">
|
||||
<input type="search" placeholder="Search" name="q" maxlength="88" autocapitalize="none" autocorrect="off"
|
||||
autocomplete="off" value="" style="width: 720%; font-size: medium; padding: 3%;">
|
||||
</form>
|
||||
|
||||
<div style="width: 60%; height: 0px"> </div>
|
||||
|
||||
<li><a href="/sitemap/">Sitemap</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<a class="navbar-brand" href="/">
|
||||
<img src="/static/img/logo.png" alt="Indestructables" height="75px" />
|
||||
</a>
|
||||
<div class="container-fluid">
|
||||
<div class="row flex-grow-1">
|
||||
<div class="col">
|
||||
<ul class="nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/projects/">Projects</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/contest/">Contests</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/teachers/">Teachers</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<form class="form-inline" action="/search" method="GET">
|
||||
<input
|
||||
class="form-control mr-2"
|
||||
type="search"
|
||||
placeholder="Search"
|
||||
name="q"
|
||||
aria-label="Search"
|
||||
/>
|
||||
<button style="display: none" type="submit">Search</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col col-lg-2 text-right">
|
||||
<ul class="nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/sitemap/">Sitemap</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
|
@ -1,145 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>{{ data[0] }}</h1>
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<b><a href="/circuits/">Circuits</a></b>
|
||||
<br>
|
||||
{% for ible in data[1] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
{% for section in sections %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<h3></strong><a href="{{ section[1] }}">{{ section[0] }}</a></h3>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
{% for ible in section[2] %}
|
||||
<div class="ibles col-xs-12 col-sm-6 col-lg-4">
|
||||
<a href="{{ ible.link }}">
|
||||
<img style="max-width:19vw;" src="{{ ible.img }}" alt="{{ ible.alt }}">
|
||||
<p>
|
||||
<strong style="max-width:19vw;">{{ ible.title }}</strong>
|
||||
</p>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
<p>by <a href="{{ ible.author_link }}">{{ ible.author }}</a></p>
|
||||
<p>in <a href="{{ ible.channel_link }}">{{ ible.channel }}</a></p>
|
||||
<p>{{ ible.favorites }} Favorites, {{ ible.views }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/workshop/">Workshop</a></b>
|
||||
<br>
|
||||
{% for ible in data[2] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/craft/">Craft</a></b>
|
||||
<br>
|
||||
{% for ible in data[3] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/cooking/">Cooking</a></b>
|
||||
<br>
|
||||
{% for ible in data[4] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/living/">Living</a></b>
|
||||
<br>
|
||||
{% for ible in data[5] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/outside/">Outside</a></b>
|
||||
<br>
|
||||
{% for ible in data[6] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<b><a href="/teachers/">Teachers</a></b>
|
||||
<br>
|
||||
{% for ible in data[7] %}
|
||||
<div class="ibles">
|
||||
<a href="{{ ible[0] }}">
|
||||
<img style="max-width:19vw;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<h3 style="max-width:19vw;">{{ ible[3] }}</h3>
|
||||
</a>
|
||||
<div class="ible-small">
|
||||
<p>by <a href="{{ ible[5] }}">{{ ible[4] }}</a></p>
|
||||
<p>in <a href="{{ ible[7] }}">{{ ible[6] }}</a></p>
|
||||
<p>{{ ible[8] }} Favorites, {{ ible[9] }} Views</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,45 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>{{ data[1] }}'s Instructables - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<img width=150px height=150px style="display:inline-block;" src="{{ data[0] }}" alt="{{ data[1] }}">
|
||||
<h1>{{ data[1] }}</h1>
|
||||
<span>{{ data[2] }} </span>
|
||||
<span>{{ data[3] }}</span>
|
||||
<img width=150px height=150px style="display:inline-block;" src="{{ header_content.avatar }}" alt="{{ header_content.title }}">
|
||||
<h1>{{ header_content.title }}</h1>
|
||||
<span>{{ header_content.location }} </span>
|
||||
<span>{{ header_content.signup }}</span>
|
||||
<br>
|
||||
<span>{{ data[4] }} Instructables </span>
|
||||
<span>{{ data[5] }} Views </span>
|
||||
<span>{{ data[6] }} Comments </span>
|
||||
<span>{{ data[7] }} Followers</span>
|
||||
<span>{{ header_content.instructables }} Instructables </span>
|
||||
<span>{{ header_content.views }} Views </span>
|
||||
<span>{{ header_content.comments }} Comments </span>
|
||||
<span>{{ header_content.followers }} Followers</span>
|
||||
<br>
|
||||
<p>{{ data[8] }}</p>
|
||||
<p>{{ header_content.bio }}</p>
|
||||
<hr>
|
||||
<h2>Instructables</h2>
|
||||
|
||||
<div style="max-width:90%;">
|
||||
{% for ible in data[9] %}
|
||||
{% for ible in ibles %}
|
||||
<div class="ible-list-item">
|
||||
<a href="{{ ible[0] }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<p>{{ ible[2] }}</p>
|
||||
<p>{{ ible[3] }} Views, {{ ible[4] }} Favorites</p>
|
||||
<a href="{{ ible.link }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ ible.img }}" alt="{{ ible.title }}">
|
||||
<p>{{ ible.title }}</p>
|
||||
<p>{{ ible.views }} Views, {{ ible.favorites }} Favorites</p>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,44 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>{{ data[1] }}'s Profile - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<img width=150px height=150px style="display:inline-block;" src="{{ data[0] }}" alt="{{ data[1] }}">
|
||||
<h1>{{ data[1] }}</h1>
|
||||
<span>{{ data[2] }} </span>
|
||||
<span>{{ data[3] }}</span>
|
||||
<img width=150px height=150px style="display:inline-block;" src="{{ header_content.avatar }}" alt="{{ header_content.title }}">
|
||||
<h1>{{ header_content.title }}</h1>
|
||||
<span>{{ header_content.location }} </span>
|
||||
<span>{{ header_content.signup }}</span>
|
||||
<br>
|
||||
<span>{{ data[4] }} Instructables </span>
|
||||
<span>{{ data[5] }} Views </span>
|
||||
<span>{{ data[6] }} Comments </span>
|
||||
<span>{{ data[7] }} Followers</span>
|
||||
<span>{{ header_content.instructables }} Instructables </span>
|
||||
<span>{{ header_content.views }} Views </span>
|
||||
<span>{{ header_content.comments }} Comments </span>
|
||||
<span>{{ header_content.followers }} Followers</span>
|
||||
<br>
|
||||
<p>{{ data[8] }}</p>
|
||||
{% if data[9] != "" %}
|
||||
<p>{{ header_content.bio }}</p>
|
||||
{% if ible_list_title != "" %}
|
||||
<hr>
|
||||
{% endif %}
|
||||
<h2>{{ data[9] }}</h2>
|
||||
{% for ible in data[10] %}
|
||||
<h2>{{ ible_list_title }}</h2>
|
||||
{% for ible in ibles %}
|
||||
<div class="member-list">
|
||||
<a href="{{ ible[1] }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:200px;" src="{{ ible[2] }}" alt="{{ ible[0] }}">
|
||||
<p>{{ ible[0] }}</p>
|
||||
<a href="{{ ible.link }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:200px;" src="{{ ible.img }}" alt="{{ ible.title }}">
|
||||
<p>{{ ible.title }}</p>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<p><a href="/member/{{ data[1] }}/instructables/">View all Instructables</a></p>
|
||||
<p><a href="/member/{{ header_content.title }}/instructables/">View all Instructables</a></p>
|
||||
<br>
|
||||
<h2>{{ data[11] }}</h2>
|
||||
{% for ach in data[12] %}
|
||||
<h2>{{ ach_list_title }}</h2>
|
||||
{% for ach in achs %}
|
||||
<div class="member-list">
|
||||
<p><b>{{ ach[0] }}</b></p>
|
||||
<p>{{ ach[1] }}</p>
|
||||
|
@ -46,7 +36,4 @@
|
|||
{% endfor %}
|
||||
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,23 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends 'base.html' %}
|
||||
|
||||
<head>
|
||||
<title>Privacy Policy - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<br>
|
||||
<h1 style="font-size:2em;line-height:0em;">Privacy Policy</h1>
|
||||
<br>
|
||||
<p>{% include "privacypolicy.txt" %}</p>
|
||||
<p>{{ content }}</p>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1 +0,0 @@
|
|||
Nothing here, yet!
|
|
@ -1,39 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>{{ data[0] }} - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% extends "base.html" %} {% block content %}
|
||||
<center>
|
||||
<h1>{{ data[0] }}</h1>
|
||||
<span><a href="{{ data[2] }}/">Featured</a></span>
|
||||
<span><a href="{{ data[2] }}/recent/">Recent</a></span>
|
||||
<span><a href="{{ data[2] }}/popular/">Popular</a></span>
|
||||
<span><a href="{{ data[2] }}/views/">Views</a></span>
|
||||
<span><a href="{{ data[2] }}/winners/">Winners</a></span>
|
||||
<br>
|
||||
<h1>{{ title }}</h1>
|
||||
<span><a href="{{ path }}/">Featured</a></span>
|
||||
<span><a href="{{ path }}/recent/">Recent</a></span>
|
||||
<span><a href="{{ path }}/popular/">Popular</a></span>
|
||||
<span><a href="{{ path }}/views/">Views</a></span>
|
||||
<span><a href="{{ path }}/winners/">Winners</a></span>
|
||||
<br />
|
||||
|
||||
<div style="max-width:90%;">
|
||||
{% for ible in data[1] %}
|
||||
<div class="ible-list-item">
|
||||
<a href="{{ ible[0] }}" style="color:#bbc2cf;">
|
||||
<img style="max-width:350px;" src="{{ ible[1] }}" alt="{{ ible[2] }}">
|
||||
<p>{{ ible[2] }}</p>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{% for ible in ibles %}
|
||||
<div class="ible-list-item col-xs-12 col-sm-6 col-lg-4">
|
||||
<a href="{{ ible.link }}" style="color: #bbc2cf">
|
||||
<img
|
||||
style="max-width: 350px"
|
||||
src="{{ ible.img }}"
|
||||
alt="{{ ible.title }}"
|
||||
/>
|
||||
<p>{{ ible.title }}</p>
|
||||
</a>
|
||||
<p>by <a href="{{ ible[4] }}">{{ ible[3] }}</a> in <a href="{{ ible[6] }}">{{ ible[5] }}</a></p>
|
||||
<p>{{ ible[7] }} Views, {{ ible[8] }} Favorites</p>
|
||||
<p>
|
||||
by <a href="{{ ible.author_link }}">{{ ible.author }}</a> in
|
||||
<a href="{{ ible.channel_link }}">{{ ible.channel }}</a>
|
||||
</p>
|
||||
<p>{{ ible.views }} Views, {{ ible.favorites }} Favorites</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,21 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
{% extends "base.html" %}
|
||||
|
||||
<head>
|
||||
<title>Sitemap - Indestructables</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{% include "style.html" %}
|
||||
<link rel="icon" type="image/png" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include "header.html" %}
|
||||
{% block content %}
|
||||
<center>
|
||||
<h1>Sitemap</h1>
|
||||
<div class="sitemap-groups">
|
||||
{% for group in data %}
|
||||
<div class="sitemap-group">
|
||||
<div class="container">
|
||||
<div class="row sitemap-groups"></div>
|
||||
{% for group in groups %}
|
||||
<div class="sitemap-group col-xs-12 col-sm-6 col-lg-4">
|
||||
<a href="{{ group[1] }}">
|
||||
<h2>{{ group[0] }}</h2>
|
||||
</a>
|
||||
|
@ -27,8 +18,6 @@
|
|||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% endblock %}
|
|
@ -1,166 +1,2 @@
|
|||
<style>
|
||||
body {
|
||||
font-family: DejaVu Sans Mono, monospace;
|
||||
margin:20px auto;
|
||||
line-height:1.5em;
|
||||
font-size:1.1em;
|
||||
background-color:#282c34;
|
||||
max-width:100vw;
|
||||
color:#bbc2cf;
|
||||
padding:0 10px;
|
||||
hyphens:auto;
|
||||
}
|
||||
|
||||
|
||||
a { color:#ff6c6b; text-decoration:none; }
|
||||
a:hover { color:#ff6c6b; text-decoration:underline; }
|
||||
|
||||
h1,h2,h3,.fact_check_info_title {
|
||||
line-height:1.2;
|
||||
color:#51afef;
|
||||
font-size:1.3em;
|
||||
}
|
||||
h2 { font-size:1.2em; }
|
||||
h3,.fact_check_info_title { font-size:1.1em; }
|
||||
|
||||
pre,code {
|
||||
tab-size:8;
|
||||
background: #20232a;
|
||||
color: #969ba6;
|
||||
border: 1px solid lightgrey;
|
||||
padding: 5px;
|
||||
tab-size:4;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border-left: 10px solid #969ba6;
|
||||
padding-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.ibles {
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.ible-small {
|
||||
font-size:0.7em;
|
||||
font-weight:thin;
|
||||
line-height:1em;
|
||||
}
|
||||
|
||||
.step-imgs {
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
flex-wrap:wrap;
|
||||
}
|
||||
|
||||
.step-imgs img {
|
||||
max-width:300px;
|
||||
}
|
||||
|
||||
.reply-button,.replies {
|
||||
display:none;
|
||||
}
|
||||
|
||||
.reply-button + label {
|
||||
position:relative;
|
||||
display:block;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
input.reply-button:checked + label + .replies {
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:1rem;
|
||||
margin-top:1rem;
|
||||
}
|
||||
|
||||
.member-list {
|
||||
display:inline-block;
|
||||
max-width:200px;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.ible-list-item {
|
||||
display:inline-block;
|
||||
max-width:350px;
|
||||
vertical-align:top;
|
||||
margin-bottom:2rem;
|
||||
}
|
||||
|
||||
.contest-list-item {
|
||||
display:inline-block;
|
||||
max-width:500px;
|
||||
vertical-align:top;
|
||||
margin-bottom:2rem;
|
||||
}
|
||||
|
||||
.archive-month-wrapper {
|
||||
display:inline-block;
|
||||
width:30vw;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.archive-month {
|
||||
display:flex;
|
||||
flex-direction:column;
|
||||
gap:-10px;
|
||||
margin-bottom:1rem;
|
||||
justify-content:space-between;
|
||||
}
|
||||
|
||||
.archive {
|
||||
margin-bottom:-20px;
|
||||
}
|
||||
|
||||
ul.pagination {
|
||||
display:flex;
|
||||
justify-content:space-around;
|
||||
padding: 0 33vw;
|
||||
list-style-type:none;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
ul.pagination li.active a,
|
||||
ul.pagination li.disabled a,
|
||||
ul.pagination li.active a:hover,
|
||||
ul.pagination li.disabled a:hover {
|
||||
color:#bbc2cf;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.closed-contest-contest {
|
||||
object-fit:cover;
|
||||
width:33vw;
|
||||
height:15vw;
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
padding:0 10px;
|
||||
}
|
||||
|
||||
.closed-contest-winner,
|
||||
.closed-contest-winner-img {
|
||||
width:15vw;
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
padding:0 10px;
|
||||
font-size:0.8em;
|
||||
text-overflow:ellipsis;
|
||||
white-space:nowrap;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
.sitemap-group {
|
||||
margin-top:2em;
|
||||
display:inline-block;
|
||||
width:30vw;
|
||||
text-align:left;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.sitemap-group h2 {
|
||||
text-align:center;
|
||||
}
|
||||
</style>
|
||||
<!-- TODO: Get rid of this -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
Loading…
Reference in a new issue