diff --git a/DV8-Expo/.gitignore b/DV8-Expo/.gitignore index 6aa0d37..4a23660 100644 --- a/DV8-Expo/.gitignore +++ b/DV8-Expo/.gitignore @@ -159,5 +159,10 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. # remove development files +/instance +/migrations /storage /logs +/website/static/.webpack-cache +/website/static/gen + diff --git a/DV8-Expo/website/models.py b/DV8-Expo/website/models.py index d2bb9f2..531669c 100644 --- a/DV8-Expo/website/models.py +++ b/DV8-Expo/website/models.py @@ -5,17 +5,6 @@ from website.extensions import db from flask_login import UserMixin -class Games(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String, nullable=False) - ageRating = db.Column(db.String, nullable=False) - description = db.Column(db.String, nullable=False) - thumbnail = db.Column(db.String, nullable=False) - background = db.Column(db.String, nullable=False) - downloadLink = db.Column(db.String, nullable=False) - approved = db.Column(db.Boolean, nullable=False, default=False) - - class Images(db.Model): id = db.Column(db.Integer, primary_key=True) image = db.Column(db.String, nullable=False) @@ -38,6 +27,23 @@ class Authors(db.Model): class Users(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) uuid = db.Column(db.String, nullable=False) + game_id = db.Column(db.Integer, db.ForeignKey("games.id")) def get_id(self): return int(self.id) + + +class Games(db.Model): + id = db.Column(db.Integer, primary_key=True) + approved = db.Column(db.Boolean, nullable=False, default=False) + visible = db.Column(db.Boolean, nullable=False, default=False) + + name = db.Column(db.String, nullable=False) + description = db.Column(db.String, nullable=False) + thumbnail = db.Column(db.String, nullable=False) + background = db.Column(db.String, nullable=False) + downloadLink = db.Column(db.String) + ageRating = db.Column(db.String, nullable=False) + + tags = db.relationship("Tags", backref="game", lazy=True) + owner_id = db.relationship("Users", backref="game", lazy=True) diff --git a/DV8-Expo/website/routes.py b/DV8-Expo/website/routes.py index c09c745..1d25ecd 100644 --- a/DV8-Expo/website/routes.py +++ b/DV8-Expo/website/routes.py @@ -1,9 +1,10 @@ -from flask import Blueprint, render_template, redirect, flash -from flask_login import login_user, logout_user, login_required +from flask import Blueprint, render_template, redirect, flash, abort +from flask_login import login_user, logout_user, login_required, current_user from flask_wtf import FlaskForm from wtforms import StringField from wtforms.validators import DataRequired -from website.models import Users +from website.models import Users, Games +from website.extensions import db blueprint = Blueprint("website", __name__) @@ -19,7 +20,25 @@ class LoginForm(FlaskForm): @blueprint.route("/") def index(): - return render_template("index.html") + games = (Games.query + .filter_by(approved=True) + .filter_by(visible=True) + .all()) + return render_template("index.html", games=games) + + +@blueprint.route("/g/") +def g(game_id): + game = (Games.query + .filter_by(id=game_id) + .filter_by(approved=True) + .filter_by(visible=True) + .first()) + + if not game: + abort(404) + + return render_template("game.html", game=game) @blueprint.route("/login", methods=["GET", "POST"]) @@ -35,6 +54,7 @@ def login(): return render_template("login.html", form=form) + @blueprint.route("/logout") @login_required def logout(): diff --git a/DV8-Expo/website/static/backgrounds/1.png b/DV8-Expo/website/static/backgrounds/1.png new file mode 100644 index 0000000..4f5032f Binary files /dev/null and b/DV8-Expo/website/static/backgrounds/1.png differ diff --git a/DV8-Expo/website/static/backgrounds/default.jpg b/DV8-Expo/website/static/backgrounds/default.jpg new file mode 100644 index 0000000..638ee6c Binary files /dev/null and b/DV8-Expo/website/static/backgrounds/default.jpg differ diff --git a/DV8-Expo/website/static/gen/packed.css b/DV8-Expo/website/static/gen/packed.css index 2ac2c87..bd49ace 100644 --- a/DV8-Expo/website/static/gen/packed.css +++ b/DV8-Expo/website/static/gen/packed.css @@ -1 +1 @@ -:root{--primary:#332f2f;--secondary:#d7cec9;--primary-button:#C0AB83;--secondary-button:#DDD1C1;--accent:#c2a588;--radius:1rem;--main-font:'Rubik',sans-serif;--monospace-font:'JetBrains Mono',monospace;--nav:#262323}@keyframes glow{0%{opacity:0}50%{opacity:1}100%{opacity:0}}nav{padding:0 .5rem;width:100%;height:3rem;display:flex;flex-direction:row;align-items:center;position:fixed;top:0;left:0;background:transparent;color:var(--primary);z-index:100;transition:color .1s ease-in-out}nav::before{content:"";position:absolute;top:-100%;left:0;width:100%;height:100%;background:var(--nav);transition:top .2s ease-in-out;z-index:-1}nav>span{width:100%}nav>a{margin:0 .75rem;font-size:1.1rem;font-weight:bold;font-family:var(--main-font);text-decoration:none;color:inherit;transition:color .1s ease-in-out,font-weight .1s ease-in-out}nav>a:hover{color:var(--accent)}nav.scrolled{color:var(--secondary)}nav.scrolled>a{font-weight:normal}nav.scrolled::before{top:0}header{margin-bottom:3rem;padding:2rem;height:calc(100vh - 6rem);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;font-family:var(--main-font);color:var(--primary)}header>h1{margin:0;font-size:3rem}header>h1>span{font-family:var(--monospace-font);color:var(--accent)}header>p{margin:0;font-size:1.2rem}header>i{margin:1rem 0 0;font-size:1.2rem;animation:glow 3s ease-in-out infinite}section{margin:0 auto 1rem;padding:1rem;max-width:75rem;display:flex;flex-direction:column;justify-content:center;text-align:center}section>h2{margin:0 0 1rem;font-size:2rem;font-weight:bold}section>p{margin:0 0 1rem;font-size:1rem}section.center{height:100%;justify-content:center;align-items:center}div.games{margin:1rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:2rem}@media(max-width:24rem){div.games{margin:0;display:flex;flex-direction:column;gap:1rem}}div.login{padding:.5rem;background-color:var(--primary);color:var(--secondary);border-radius:var(--radius)}div.login>p{margin:0 0 .5rem;padding:.5rem;background-color:var(--accent);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2)}div.login>p:first-child{border-top-left-radius:calc(var(--radius) - .5rem);border-top-right-radius:calc(var(--radius) - .5rem)}div.login>form{display:flex;flex-direction:row}div.login>form>input{padding:.5rem 1rem;width:100%;font-size:1rem;font-family:var(--monospace-font);background-color:var(--secondary);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2) 0 0 calc(var(--radius) - .5rem);border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>input:hover,div.login>form>input:focus-visible{outline:none}div.login>form>button{padding:.5rem 1rem;font-size:1rem;background-color:var(--primary-button);color:var(--primary);border-radius:0 calc(calc(var(--radius) - .5rem) / 2) calc(var(--radius) - .5rem) 0;border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>button:hover,div.login>form>button:focus-visible{outline:none;background-color:var(--secondary-button)}.game-box{margin:0 auto;padding:.5rem;width:100%;height:auto;display:flex;flex-direction:column;font-family:var(--main-font);background-color:var(--primary);color:var(--secondary);border-radius:var(--radius);box-shadow:0 .2rem 1rem 0 var(--primary);overflow:hidden;transition:box-shadow .1s ease-in-out,transform .1s ease-in-out}.game-box>img{margin:0 0 .5rem;width:auto;height:10rem;object-fit:cover;display:block;border-radius:calc(var(--radius) - .5rem) calc(var(--radius) - .5rem) calc(calc(var(--radius) - .5rem) / 2) calc(calc(var(--radius) - .5rem) / 2)}.game-box>h2{margin:0 0 .5rem;font-size:1.5rem;font-weight:bold}.game-box>p{height:100%;margin:0 0 1rem;font-size:1rem}.game-box>.options{display:flex;flex-direction:row;gap:.5rem;font-family:var(--monospace-font)}.game-box>.options>a{margin:0;padding:.5rem 1rem;height:2.5rem;display:flex;justify-content:center;align-items:center;font-size:1rem;text-decoration:none;background-color:var(--primary-button);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2);transition:transform .1s ease-in-out,border-radius .1s ease-in-out}.game-box>.options>a>i{font-size:1.2rem}.game-box>.options>a:first-child{border-bottom-left-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:last-child{border-bottom-right-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:hover,.game-box>.options>a:focus-visible{outline:none;transform:translateY(-0.1rem)}*{box-sizing:border-box}html{font-family:var(--main-font);background-color:var(--secondary);color:var(--primary)}body{margin:0;padding:0;min-height:100vh;display:grid;grid-template-rows:1fr auto}.background{background-color:var(--primary);position:absolute;inset:0;overflow:hidden;z-index:1}.background>img{position:absolute;inset:-5%;width:110%;height:110%;object-fit:cover;filter:blur(0.25rem);opacity:.3}.background::after{content:'';position:absolute;inset:0;background-image:linear-gradient(to top,var(--secondary),transparent);z-index:+1}main{padding-top:3rem;position:relative;z-index:2}footer{margin:auto 0 0;padding:.5rem;position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--primary);color:var(--secondary);z-index:2}footer>p{margin:0;font-size:.8rem;font-family:var(--monospace-font);text-align:center;color:var(--secondary)}footer>p>a{margin:0;font-size:inherit;font-family:inherit;color:var(--accent);text-decoration:none;cursor:pointer}footer>p>a:hover{text-decoration:underline} \ No newline at end of file +:root{--primary:#332f2f;--secondary:#d7cec9;--primary-button:#C0AB83;--secondary-button:#DDD1C1;--accent:#c2a588;--radius:1rem;--main-font:'Rubik',sans-serif;--monospace-font:'JetBrains Mono',monospace;--nav:#262323}@keyframes glow{0%{opacity:0}50%{opacity:1}100%{opacity:0}}@keyframes title-change{0%{transform:translateX(-3rem);opacity:0}100%{transform:translateX(0);opacity:1}}nav{padding:0 .5rem;width:100%;height:3rem;display:flex;flex-direction:row;align-items:center;position:fixed;top:0;left:0;font-weight:bold;font-family:var(--main-font);font-size:1.1rem;white-space:nowrap;background:transparent;color:var(--primary);z-index:100;transition:color .1s ease-in-out}nav::before{content:"";position:absolute;inset:0;background:var(--nav);transform:translateY(-100%);transition:transform .2s ease-in-out;z-index:-1}nav>span{width:100%}nav>a{margin:0 .75rem;padding:.1rem .5rem;text-decoration:none;color:inherit;transition:color .1s ease-in-out}nav>a:hover{color:var(--accent)}nav>h1{font-size:inherit;text-decoration:none;color:var(--secondary);opacity:0;transition:opacity .1s ease-in-out}nav>h1>span{font-family:var(--monospace-font);color:var(--accent)}nav.scrolled{color:var(--secondary)}nav.scrolled>h1{opacity:1}nav.scrolled::before{transform:translateY(0)}header{margin-bottom:3rem;padding:2rem;height:calc(100vh - 6rem);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;font-family:var(--main-font);color:var(--primary)}header>h1{margin:0;font-size:3rem}header>h1>span{font-family:var(--monospace-font);color:var(--accent)}header>p{margin:0;font-size:1.2rem}header>i{margin:1rem 0 0;font-size:1.2rem;animation:glow 3s ease-in-out infinite}section{margin:0 auto 1rem;padding:1rem;max-width:75rem;display:flex;flex-direction:column;justify-content:center;text-align:center}section>h2{margin:0 0 1rem;font-size:2rem;font-weight:bold}section>p{margin:0 0 1rem;font-size:1rem}section.center{height:100%;justify-content:center;align-items:center}section.fill{background-color:var(--secondary);color:var(--primary);border-radius:var(--radius)}div.games{margin:1rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:2rem}@media(max-width:24rem){div.games{margin:0;display:flex;flex-direction:column;gap:1rem}}div.login{padding:.5rem;background-color:var(--primary);color:var(--secondary);border-radius:var(--radius)}div.login>p{margin:0 0 .5rem;padding:.5rem;background-color:var(--accent);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2)}div.login>p:first-child{border-top-left-radius:calc(var(--radius) - .5rem);border-top-right-radius:calc(var(--radius) - .5rem)}div.login>form{display:flex;flex-direction:row}div.login>form>input{padding:.5rem 1rem;width:100%;font-size:1rem;font-family:var(--monospace-font);background-color:var(--secondary);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2) 0 0 calc(var(--radius) - .5rem);border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>input:hover,div.login>form>input:focus-visible{outline:none}div.login>form>button{padding:.5rem 1rem;font-size:1rem;background-color:var(--primary-button);color:var(--primary);border-radius:0 calc(calc(var(--radius) - .5rem) / 2) calc(var(--radius) - .5rem) 0;border:none;transition:transform .1s ease-in-out,border-radius .1s ease-in-out}div.login>form>button:hover,div.login>form>button:focus-visible{outline:none;background-color:var(--secondary-button)}.game-box{margin:0 auto;padding:.5rem;width:100%;height:auto;display:flex;flex-direction:column;font-family:var(--main-font);background-color:var(--primary);color:var(--secondary);border-radius:var(--radius);box-shadow:0 .2rem 1rem 0 var(--primary);overflow:hidden;transition:box-shadow .1s ease-in-out,transform .1s ease-in-out}.game-box>img{margin:0 0 .5rem;width:auto;height:10rem;object-fit:cover;display:block;border-radius:calc(var(--radius) - .5rem) calc(var(--radius) - .5rem) calc(calc(var(--radius) - .5rem) / 2) calc(calc(var(--radius) - .5rem) / 2)}.game-box>h2{margin:0 0 .5rem;font-size:1.5rem;font-weight:bold}.game-box>p{height:100%;margin:0 0 1rem;font-size:1rem}.game-box>.options{display:flex;flex-direction:row;gap:.5rem;font-family:var(--monospace-font)}.game-box>.options>a{margin:0;padding:.5rem 1rem;height:2.5rem;display:flex;justify-content:center;align-items:center;font-size:1rem;text-decoration:none;background-color:var(--primary-button);color:var(--primary);border-radius:calc(calc(var(--radius) - .5rem) / 2);transition:transform .1s ease-in-out,border-radius .1s ease-in-out}.game-box>.options>a>i{font-size:1.2rem}.game-box>.options>a:first-child{border-bottom-left-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:last-child{border-bottom-right-radius:calc(var(--radius) - .5rem)}.game-box>.options>a:hover,.game-box>.options>a:focus-visible{outline:none;transform:translateY(-0.1rem)}*{box-sizing:border-box}html{font-family:var(--main-font);background-color:var(--secondary);color:var(--primary)}body{margin:0;padding:0;min-height:100vh;display:grid;grid-template-rows:1fr auto}.background{background-color:var(--primary);position:absolute;inset:0;overflow:hidden;z-index:1}.background>img{position:absolute;inset:-5%;width:110%;height:110%;object-fit:cover;filter:blur(0.25rem);opacity:.3}.background::after{content:'';position:absolute;inset:0;background-image:linear-gradient(to top,var(--secondary),transparent);z-index:+1}main{padding-top:3rem;position:relative;z-index:2}footer{margin:auto 0 0;padding:.5rem;position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--primary);color:var(--secondary);z-index:2}footer>p{margin:0;font-size:.8rem;font-family:var(--monospace-font);text-align:center;color:var(--secondary)}footer>p>a{margin:0;font-size:inherit;font-family:inherit;color:var(--accent);text-decoration:none;cursor:pointer}footer>p>a:hover{text-decoration:underline} \ No newline at end of file diff --git a/DV8-Expo/website/static/gen/packed.js b/DV8-Expo/website/static/gen/packed.js index e6961b2..4e724de 100644 --- a/DV8-Expo/website/static/gen/packed.js +++ b/DV8-Expo/website/static/gen/packed.js @@ -1 +1,3 @@ -window.onscroll=()=>{scrollFunction()};window.onload=()=>{scrollFunction()};function scrollFunction(){let nav=document.querySelector("nav");let scrollHeight=0;if(document.body.scrollTop>scrollHeight||document.documentElement.scrollTop>scrollHeight){nav.classList.add("scrolled");}else{nav.classList.remove("scrolled");}} \ No newline at end of file +const defaultTitle="DV8 Game Expo 2023";let prevTitle;window.onscroll=()=>{scrollFunction();checkSection();};window.onload=()=>{scrollFunction()};function scrollFunction(){let nav=document.querySelector("nav");let scrollHeight=0;if(document.body.scrollTop>scrollHeight||document.documentElement.scrollTop>scrollHeight){nav.classList.add("scrolled");}else{nav.classList.remove("scrolled");}} +function checkSection(){let navTitle=document.querySelector("nav > h1");let sections=document.querySelectorAll("section");if(window.pageYOffset{navTitle.style.animation="";},200);} +sections.forEach((section)=>{let top=section.offsetTop;let bottom=section.offsetTop+section.offsetHeight;if(window.pageYOffset>=top&&window.pageYOffset{navTitle.style.animation="";},200);}});} \ No newline at end of file diff --git a/DV8-Expo/website/static/js/nav.js b/DV8-Expo/website/static/js/nav.js index 2aaa700..d2c7c60 100644 --- a/DV8-Expo/website/static/js/nav.js +++ b/DV8-Expo/website/static/js/nav.js @@ -1,4 +1,10 @@ -window.onscroll = () => { scrollFunction() }; +const defaultTitle = "DV8 Game Expo 2023"; +let prevTitle; + +window.onscroll = () => { + scrollFunction(); + checkSection(); +}; window.onload = () => { scrollFunction() }; function scrollFunction() { @@ -12,4 +18,46 @@ function scrollFunction() { } else { nav.classList.remove("scrolled"); } -} \ No newline at end of file +} + +function checkSection() { + // Get the nav and sections + let navTitle = document.querySelector("nav > h1"); + let sections = document.querySelectorAll("section"); + + // If we're at the top of the page, set the title to the default + if (window.pageYOffset < sections[0].offsetTop) { + // If we're already on the default title, don't do anything as it'll break the animation + if (prevTitle === defaultTitle) return; + + navTitle.innerHTML = defaultTitle; + navTitle.style.animation = "title-change 0.2s ease-in-out"; + prevTitle = defaultTitle; + + // Remove the animation after it's done, so we can animate again + setTimeout(() => { navTitle.style.animation = ""; }, 200); + } + + // While at this point we may not need to check for the sections + // There aren't many sections, so it's not a big deal + sections.forEach((section) => { + // Get the position of the section + let top = section.offsetTop; + let bottom = section.offsetTop + section.offsetHeight; + + // If the section is on the screen is: + // 1. The top of the section is above the top of the screen + // 2. The bottom of the section is below the bottom of the screen + if (window.pageYOffset >= top && window.pageYOffset < bottom) { + // If we're already on the section, don't do anything as it'll break the animation + if (prevTitle === section.id) return; + + navTitle.innerHTML = section.id; + navTitle.style.animation = "title-change 0.2s ease-in-out"; + prevTitle = section.id; + + // Remove the animation after it's done, so we can animate again + setTimeout(() => { navTitle.style.animation = ""; }, 200); + } + }); +} diff --git a/DV8-Expo/website/static/sass/animations.sass b/DV8-Expo/website/static/sass/animations.sass index 90a4441..937b2d8 100644 --- a/DV8-Expo/website/static/sass/animations.sass +++ b/DV8-Expo/website/static/sass/animations.sass @@ -8,3 +8,11 @@ 100% opacity: 0 // text-shadow: 0 0 0 $primary + +@keyframes title-change + 0% + transform: translateX(-3rem) + opacity: 0 + 100% + transform: translateX(0) + opacity: 1 diff --git a/DV8-Expo/website/static/sass/header.sass b/DV8-Expo/website/static/sass/header.sass index e0eee82..c010c51 100644 --- a/DV8-Expo/website/static/sass/header.sass +++ b/DV8-Expo/website/static/sass/header.sass @@ -17,7 +17,6 @@ header > span font-family: $monospace-font color: $accent - > p margin: 0 font-size: 1.2rem diff --git a/DV8-Expo/website/static/sass/nav.sass b/DV8-Expo/website/static/sass/nav.sass index 586e4ef..c298872 100644 --- a/DV8-Expo/website/static/sass/nav.sass +++ b/DV8-Expo/website/static/sass/nav.sass @@ -11,6 +11,11 @@ nav top: 0 left: 0 + font-weight: bold + font-family: $main-font + font-size: 1.1rem + white-space: nowrap + background: transparent color: $primary @@ -20,12 +25,10 @@ nav &::before content: "" position: absolute - top: -100% - left: 0 - width: 100% - height: 100% + inset: 0 background: var(--nav) - transition: top 0.2s ease-in-out + transform: translateY(-100%) + transition: transform 0.2s ease-in-out z-index: -1 > span @@ -33,23 +36,30 @@ nav > a margin: 0 0.75rem - - font-size: 1.1rem - font-weight: bold - font-family: $main-font + padding: 0.1rem 0.5rem text-decoration: none - color: inherit - transition: color 0.1s ease-in-out, font-weight 0.1s ease-in-out + transition: color 0.1s ease-in-out &:hover color: $accent + > h1 + font-size: inherit + text-decoration: none + color: $secondary + opacity: 0 + transition: opacity 0.1s ease-in-out + + > span + font-family: $monospace-font + color: $accent + &.scrolled color: $secondary - > a - font-weight: normal + > h1 + opacity: 1 &::before - top: 0 \ No newline at end of file + transform: translateY(0) \ No newline at end of file diff --git a/DV8-Expo/website/static/sass/sections.sass b/DV8-Expo/website/static/sass/sections.sass index 0f09d26..3ebea45 100644 --- a/DV8-Expo/website/static/sass/sections.sass +++ b/DV8-Expo/website/static/sass/sections.sass @@ -21,6 +21,11 @@ section justify-content: center align-items: center + &.fill + background-color: $secondary + color: $primary + border-radius: $radius + div.games margin: 1rem display: grid diff --git a/DV8-Expo/website/static/sass/styles.sass b/DV8-Expo/website/static/sass/styles.sass index 81c27d9..4ad2463 100644 --- a/DV8-Expo/website/static/sass/styles.sass +++ b/DV8-Expo/website/static/sass/styles.sass @@ -9,6 +9,12 @@ $radius: var(--radius) $main-font: var(--main-font) $monospace-font: var(--monospace-font) +// Accessibility setting +//*, *::before, *::after +// animation-duration: 0s !important +// transition: none !important + + \:root --primary: #332f2f --secondary: #d7cec9 diff --git a/DV8-Expo/website/static/thumbnails/default.jpg b/DV8-Expo/website/static/thumbnails/default.jpg new file mode 100644 index 0000000..638ee6c Binary files /dev/null and b/DV8-Expo/website/static/thumbnails/default.jpg differ diff --git a/DV8-Expo/website/templates/base.html b/DV8-Expo/website/templates/base.html index a5a3129..705eeda 100644 --- a/DV8-Expo/website/templates/base.html +++ b/DV8-Expo/website/templates/base.html @@ -7,6 +7,8 @@ Game Event 23 + + @@ -14,20 +16,18 @@ - {% assets "scripts" %} - - {% endassets %} + {% assets "scripts" %}{% endassets %} - {% assets "styles" %} - - {% endassets %} + {% assets "styles" %}{% endassets %} diff --git a/DV8-Expo/website/templates/game.html b/DV8-Expo/website/templates/game.html new file mode 100644 index 0000000..0e31947 --- /dev/null +++ b/DV8-Expo/website/templates/game.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} +{% block background %} + {% if game.background %} + {{ url_for('static', filename='backgrounds/' + game.background) }} + {% else %} + {{ url_for('static', filename='backgrounds/default.jpg') }} + {% endif %} +{% endblock %} +{% block content %} +
+

{{ game.name }}

+
+ +
+

Games

+

Here are some games AAAA

+
+{% endblock %} \ No newline at end of file diff --git a/DV8-Expo/website/templates/index.html b/DV8-Expo/website/templates/index.html index b2fd067..bc62119 100644 --- a/DV8-Expo/website/templates/index.html +++ b/DV8-Expo/website/templates/index.html @@ -7,30 +7,34 @@ -
+

About

Tap to add text

-
+

Games

Here are some games AAAA

- {% for game in range(10) %} + {% for game in games %}
- game image -

game name

-

mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow mow

+ {% if game.thumbnail %} + game image + {% else %} + game image + {% endif %} + +

{{ game.name }}

+

{{ game.description|truncate(100) }}

- View - + View + {% if game.downloadLink %}{% endif %}
{% endfor %}
- {% endblock %} \ No newline at end of file