Make page not look shit

This commit is contained in:
Michał 2023-02-05 14:19:21 +00:00
parent c1559307b6
commit c32d7e3246
33 changed files with 716 additions and 715 deletions

124
app.py
View file

@ -1,10 +1,78 @@
from flask import Flask, render_template, send_from_directory, abort, url_for, jsonify, redirect, request, session
from werkzeug.utils import secure_filename
import os
import random
from flask import Flask, render_template, redirect
from flask_compress import Compress
import requests
from random import choice
import json
app = Flask(__name__)
Compress(app)
#
# ROUTES
#
@app.route('/')
def index():
msg = ['This is a test string',
'This could go one of two ways...',
'Gwa Gwa', 'It\'s a UNIX system! I know this!',
'They turned him into a pickle, its the funnies shit I\'ve ever seen',
'*internal screaming*',
'Don\'t forget to drink water!',
'Fluffy made this!',
'I wish we were better strangers.',
'If I were you, I\'d run now',
'SILICA GEL "DO NOT EAT".',
'AAAAAAAAAAAAAAAAAAAA',
'The weather is dry',
'Gods die too.',
'Eat hotchip and lie']
return render_template('index.html', msg=choice(msg))
@app.route('/cretura')
def cretura():
return render_template('cretura.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/music')
def music():
current_tracks = requests.get(
'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=Fluffy_Bean_&api_key=a6793a0176141e5cf7767c4cec1bda6f&limit=5&format=json')
current_tracks = json.loads(current_tracks.text)
tracks = []
for track in current_tracks['recenttracks']['track']:
nowPlaying = False
if '@attr' in track:
nowPlaying = True
tmp_track = {
'name': track['name'],
'artist': track['artist']['#text'],
'album': track['album']['#text'],
'url': track['url'],
'image': track['image'][2]['#text'],
'nowPlaying': nowPlaying,
}
tracks.append(tmp_track)
return render_template('music.html', tracks=tracks)
@app.route('/blog')
def blog():
return render_template('blog.html')
#
@ -42,50 +110,4 @@ def gone(e):
def internal_server_error(e):
error = '500'
msg = 'Server died inside :c'
return render_template('error.html', error=error, msg=msg), 500
#
# ROUTES
#
@app.route('/')
def index():
msg = ['Some interesting text', 'Balls', 'hiiiiii']
return render_template('index.html', title=random.choice(msg))
@app.route('/thankies')
def thankies():
return render_template('thankies.html')
@app.route('/funny')
def funny():
return render_template('funny.html')
@app.route('/status')
def status():
abort(403)
@app.route('/error/<error>/<msg>')
def error(error, msg):
try:
error = str(error)
except:
abort(405)
try:
msg = str(msg)
except:
abort(405)
return render_template('error.html', error=error, msg=msg)
#
# METHODS
#
@app.route('/fileList/<item_type>', methods=['GET'])
def image_list(item_type):
if request.method != 'GET':
abort(405)
#return jsonify(item_list)
return render_template('error.html', error=error, msg=msg), 500

View file

@ -1,130 +0,0 @@
@mixin aside-item($color) {
background-color: rgba($color, 0.1);
border: 1px solid rgba($color, 0.5);
color: $color;
}
.aside {
margin: 0;
padding: 0;
background-color: $black;
box-sizing: border-box;
z-index: 68;
hr {
margin: 0.5rem auto;
padding: 0;
width: 80%;
height: 1px;
background-color: $white;
border: none;
}
br {
margin: 0.5rem 0;
padding: 0;
}
}
.aside-container {
margin: 0;
padding: 1rem;
position: sticky;
top: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.aside-item {
margin: 0;
padding: 0.75rem;
width: 100%;
height: auto;
background-color: transparent;
color: $white;
text-decoration: none;
display: flex;
align-items: center;
gap: 0.5rem;
border: 1px solid transparent;
border-radius: 3px;
transition: all 0.2s ease-in-out;
cursor: pointer;
i {
opacity: 0;
transform: translateX(1rem);
transition: all 0.2s ease-in-out;
filter: blur(0.1rem);
pointer-events: none;
}
&:hover i {
opacity: 1;
transform: translateX(0);
filter: blur(0);
}
}
.aside-red {
@include aside-item($red);
}
.aside-yellow {
@include aside-item($yellow);
}
.aside-green {
@include aside-item($green);
}
.aside-blue {
@include aside-item($blue);
}
.aside-purple {
@include aside-item($purple);
}
@media screen and (max-width: $phone-width) {
@media screen and (min-width: calc(#{$phone-width} * 0.6)) {
.aside {
max-width: 20rem;
}
}
.aside {
display: block;
position: fixed;
top: 3rem;
left: -100vw;
width: 100vw;
height: calc(100vh - 3rem);
background-color: #121212;
overflow-y: auto;
box-shadow: 0 0 0.5rem 5px rgba($black, 0.5);
transition: left 0.2s ease-in-out, opacity 0.2s ease-in-out;
hr {
margin: 1rem auto;
width: 100%;
}
}
.aside-active {
opacity: 1;
left: 0;
}
}

View file

@ -1,25 +0,0 @@
.footer {
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
background-color: $black;
color: $white;
p {
margin: 0;
padding: 0;
font-size: 0.8rem;
}
}
@media screen and (max-width: $phone-width) {
.footer {
background-color: $black;
color: $white;
}
}

View file

@ -1,67 +0,0 @@
.nav {
margin: 0;
padding: 0;
background-color: $black;
color: $white;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
position: relative;
z-index: 69;
p {
margin: 0 1rem;
padding: 0;
font-size: 1rem;
}
}
.nav-toggle {
margin: 0;
padding: 0.5rem 1rem;
display: none;
background-color: transparent;
color: $white;
border: none;
i {
font-size: 1.5rem;
display: inline-block;
// display the hamburger icon vertically centered
line-height: 1.5rem;
}
}
@media screen and (max-width: $phone-width) {
.nav {
margin: 0;
padding: 0;
width: 100vw;
height: 3rem;
position: fixed;
top: 0;
left: 0;
justify-content: space-between;
background-color: $black;
color: $white;
}
.nav-toggle {
display: flex;
justify-content: center;
align-items: center;
}
}

View file

@ -1,147 +0,0 @@
@mixin btn-hover($color) {
background-color: rgba($color, 0.1);
border: 1px solid rgba($color, 0.5);
color: $color;
}
.wrapper {
margin: 0;
padding: 0;
background-color: #101010;
color: $white;
border-radius: calc(0.8rem + 3px) 0 0 0;
position: relative;
overflow: hidden;
hr {
margin: 0.5rem 1rem;
padding: 0;
height: 1px;
background-color: $white;
border: none;
}
}
.content {
margin: 1rem;
position: relative;
p {
margin: 0;
padding: 0;
font-size: 1rem;
}
}
.content-header {
padding: 1rem;
display: flex;
flex-direction: column;
gap: 1rem;
background-color: rgba($white, 0.1);
border: 1px solid rgba($white, 0.5);
border-radius: 3px;
p {
margin: 0;
padding: 0;
font-size: 2rem;
font-weight: 600;
text-align: center;
}
}
.content-default {
padding: 1rem;
display: flex;
flex-direction: column;
gap: 1rem;
background-color: rgba($white, 0.1);
border: 1px solid rgba($white, 0.5);
border-radius: 3px;
}
.content-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.content-img {
padding: 1rem;
display: flex;
background-color: rgba($white, 0.1);
border: 1px solid rgba($white, 0.5);
border-radius: 3px;
img {
margin: auto;
padding: 0;
width: 100%;
height: auto;
border-radius: 3px;
object-fit: cover;
}
}
.btn {
margin: 0;
padding: 1.5rem;
width: auto;
height: auto;
background-color: transparent;
color: $white;
text-decoration: none;
font-size: 1rem;
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
border: 1px solid transparent;
border-radius: 3px;
transition: all 0.2s ease-in-out;
}
.btn-red:hover {
@include btn-hover($red);
}
.btn-yellow:hover {
@include btn-hover($yellow);
}
.btn-green:hover {
@include btn-hover($green);
}
.btn-blue:hover {
@include btn-hover($blue);
}
.btn-purple:hover {
@include btn-hover($purple);
}
@media screen and (max-width: $phone-width) {
.wrapper {
margin: 0;
padding: 3rem 0 0 0;
border-radius: 0;
}
}

36
static/css/buttons.sass Normal file
View file

@ -0,0 +1,36 @@
.btn
margin: 0
padding: 0.5rem 1rem
width: auto
height: 2.5rem
position: relative
display: flex
justify-content: center
align-items: center
border: transparent 0 solid
border-radius: 2px
background: $black
color: $white !important
font-size: 1rem
font-weight: 500
line-height: 1
text-decoration: none
text-align: center
text-transform: uppercase
cursor: pointer
transition: all 0.2s ease-in-out
&:hover
background: $white
color: $black !important
&:focus
outline: none

View file

@ -1,34 +0,0 @@
body {
min-height: 100vh;
display: grid;
grid-template-areas: 'aside nav'
'aside wrapper'
'footer wrapper';
grid-template-rows: 3rem auto 3rem;
grid-template-columns: 20rem 1fr;
}
.nav {
grid-area: nav;
}
.wrapper {
grid-area: wrapper;
}
.aside {
grid-area: aside;
}
.footer {
grid-area: footer;
}
@media screen and (max-width: $phone-width) {
body {
grid-template-areas: 'wrapper'
'footer';
grid-template-rows: 1fr 3rem;
grid-template-columns: 1fr;
}
}

View file

@ -1,32 +0,0 @@
* {
box-sizing: border-box;
font-family: $font-header;
font-weight: 400;
}
html {
margin: 0;
padding: 0;
background-color: $black;
color: $white;
-ms-overflow-style: none;
scrollbar-width: none;
::-webkit-scrollbar {
display: none;
}
}
body {
margin: 0;
padding: 0;
min-height: 100vh;
background-color: $black;
scroll-behavior: smooth;
}

View file

@ -1,46 +0,0 @@
$black: #151515;
$white: #e8e3e3;
$red: #B66467;
$yellow: #D9BC8C;
$green: #8C977D;
$blue: #8DA3B9;
//$dblue: #222c45;
$purple: #A988B0;
$primary: #f5622d;
@font-face {
font-family: 'Mona-Sans';
src: url('../fonts/Mona-Sans.woff2') format('woff2 supports variations'),
url('../fonts/Mona-Sans.woff2') format('woff2-variations');
font-weight: 200 900;
font-stretch: 75% 125%;
}
@font-face {
font-family: 'Hubot-Sans';
src: url('../fonts/Hubot-Sans.woff2') format('woff2 supports variations'),
url('../fonts/Hubot-Sans.woff2') format('woff2-variations');
font-weight: 200 900;
font-stretch: 75% 125%;
}
$font-header: "Mona-Sans", sans-serif;
$font-body: "Hubot-Sans", sans-serif;
$phone-width: 900px;
@function hexToRGB($hex) {
@return red($hex), green($hex), blue($hex);
}
:root {
--red: #{hexToRGB($red)};
--yellow: #{hexToRGB($yellow)};
--green: #{hexToRGB($green)};
--blue: #{hexToRGB($blue)};
--purple: #{hexToRGB($purple)};
}
// I want to use this somewhere
//background: linear-gradient(200deg, rgba($primary, 0.5) 1.7%, rgba($black, 0) 30%);

300
static/css/style.sass Normal file
View file

@ -0,0 +1,300 @@
$black: #101010
$dark: #151515
$grey: #808080
$white: #e8e3e3
$primary: #8C977D
@font-face
font-family: 'jetbrains_monoitalic'
src: url('../fonts/jetbrainsmono-italic-variablefont_wght-webfont.woff2') format('woff2'), url('../fonts/jetbrainsmono-italic-variablefont_wght-webfont.woff') format('woff')
font-weight: normal
font-style: normal
font-display: swap
@font-face
font-family: 'jetbrains_monoregular'
src: url('../fonts/jetbrainsmono-variablefont_wght-webfont.woff2') format('woff2'), url('../fonts/jetbrainsmono-variablefont_wght-webfont.woff') format('woff')
font-weight: normal
font-style: normal
font-display: swap
html
margin: 0
padding: 0
body
margin: 0
padding: 3rem 1rem 1rem
width: 100vw
min-height: 100vh
background-color: $black
font-family: 'jetbrains_monoregular', sans-serif
display: flex
justify-content: center
align-items: center
overflow-x: hidden
box-sizing: border-box
*
box-sizing: border-box
nav
margin: 0
padding: 0.5rem 1rem
width: 100vw
height: 3rem
position: fixed
top: 0
left: 0
display: flex
justify-content: center
align-items: center
gap: 1rem
z-index: 1
color: $white
a
margin: 0
padding: 0
width: auto
height: 2rem
position: relative
display: flex
justify-content: center
align-items: center
font-size: 1.1rem
font-weight: 400
line-height: 1
text-align: left
text-decoration: none
text-transform: uppercase
color: $grey
&:hover
color: $white
a.selected
color: $primary
&:hover
color: $white
span
margin: 0 0 0.2rem 0
padding: 0
width: 2px
height: 1.25rem
position: relative
display: flex
justify-content: center
align-items: center
background-color: $grey
.wrapper
margin: 0 auto
padding: 1rem
width: 100%
max-width: 621px
min-height: auto
position: relative
display: flex
flex-direction: column
gap: 1rem
background: $dark
color: $white
border-radius: 2px
z-index: 2
box-sizing: border-box
overflow: hidden
h1
margin: 0 // 0 1rem 0
padding: 0
font-size: 2.25rem
font-weight: 600
line-height: 1
text-align: left
text-transform: uppercase
white-space: break-spaces
h2
margin: 0
padding: 0
font-size: 1.5rem
font-weight: 600
line-height: 1
text-align: left
text-transform: uppercase
h3
margin: 0
padding: 0
font-size: 1.25rem
font-weight: 600
line-height: 1
text-align: left
text-transform: uppercase
p
margin: 0
padding: 0
font-size: 1.1rem
font-weight: 400
line-height: 1.2
text-align: left
color: $grey
a
margin: 0
padding: 0
font-size: 1.1rem
font-weight: 400
line-height: 1.2
text-align: left
color: $primary
&:hover
color: $white
img
margin: 0 auto
padding: 0
width: auto
max-width: 100%
position: relative
display: block
border-radius: 2px
object-fit: cover
z-index: 1
p.subtitle
color: $white
text-transform: uppercase
.content
display: flex
flex-direction: column
justify-content: space-between
gap: 0.5rem
overflow: hidden
.music
display: flex
flex-direction: row
gap: 1rem
overflow: hidden
.music-image
width: 5rem
height: 5rem
border-radius: 2px
background-color: $black
img
margin: 0
padding: 0
width: 5rem
height: 5rem
display: block
float: left
border-radius: 2px
background-color: $dark
object-fit: cover
.music-info
display: flex
flex-direction: column
//justify-content: space-between
gap: 0.5rem
overflow: hidden
a
margin: 0
padding: 0
font-size: 1.1rem
font-weight: 600
line-height: 1.2
text-align: left
text-decoration: none
color: $white
&:hover
color: $primary
p.music-nowplaying
color: $primary
@import "buttons"
@import "toast"
@media (max-width: 669px)
.wrapper
max-width: 100%
border-radius: 0
h1
font-size: 2rem
text-align: center
p.subtitle
text-align: center
.music
padding-left: 0.5rem
border-left: 2px solid $primary
span, img
display: none

View file

@ -1,64 +0,0 @@
@import 'scss/variables';
@import 'scss/grid';
@import 'scss/normalize';
@import 'nav';
@import 'aside';
@import 'wrapper';
@import 'footer';
h1 {
margin: 0;
padding: 0;
font-size: 2rem;
text-align: center;
font-weight: 600;
}
h2 {
margin: 0;
padding: 0;
font-size: 1.5rem;
font-weight: 600;
}
h3 {
margin: 0;
padding: 0;
font-size: 1rem;
font-weight: 600;
}
.error {
margin: 0;
padding: 0;
width: 80%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
h1 {
margin: 0;
padding: 0;
font-size: 5rem;
text-align: center;
font-weight: 700;
}
p {
margin: 0;
padding: 0;
font-size: 1.5rem;
text-align: center;
font-weight: 400;
}
}

89
static/css/toast.sass Normal file
View file

@ -0,0 +1,89 @@
@keyframes toastTimeout
0%
left: -100%
100%
left: 0%
.toast-container
margin: 0
padding: 0
width: 100%
height: auto
max-width: 400px
position: fixed
bottom: 0.5rem
left: 50%
transform: translateX(-50%)
display: flex
flex-direction: column
gap: 0.5rem
font-size: 1rem
font-weight: 500
line-height: 1
text-align: center
z-index: 9999
.toast
margin: 0
padding: 0.5rem 1rem
min-height: 2.5rem
position: relative
display: flex
justify-content: center
align-items: center
transform: scaleY(0)
color: $white
background-color: $dark
border-radius: 2px
opacity: 0
transition: all 0.3s ease-in-out
overflow: hidden
&:hover
cursor: pointer
.toast-show
opacity: 1
transform: scaleY(1)
.toast-hide
opacity: 0
tansform: translateY(5rem)
.toast-time
margin: 0
padding: 0
width: 100%
height: 2px
position: absolute
bottom: 0
left: 0%
background-color: $primary
animation: toastTimeout 5s linear forwards
@media (max-width: 669px)
.toast-container
padding: 0.5rem
width: 100%
max-width: 100%
bottom: 0
left: 0
transform: none

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

BIN
static/images/ref.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
static/images/taidum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

87
static/js/main.js Normal file
View file

@ -0,0 +1,87 @@
function addToast(text='Sample toast notification') {
var container = document.querySelector('.toast-container');
// Create notification element
var parent = document.createElement('span');
parent.classList.add('toast');
parent.innerText = text;
parent.onclick = function() {
if (parent.parentNode) {
parent.classList.add('toast-hide');
setTimeout(function() {
container.removeChild(parent);
}, 500);
}
};
// Create span to show time remaining
var timer = document.createElement('span');
timer.classList.add('toast-time');
parent.appendChild(timer);
// Append notification to container
container.appendChild(parent);
setTimeout(function() {
parent.classList.add('toast-show');
}, 1);
// Remove notification after 5 seconds
setTimeout(function() {
if (parent.parentNode) {
parent.classList.add('toast-hide');
setTimeout(function() {
container.removeChild(parent);
}, 500);
}
}, 5000);
}
function garble(obj, speed=1) {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_-"
let interval = null;
let iteration = 0;
clearInterval(interval);
interval = setInterval(() => {
obj.innerText = obj.innerText
.split("")
.map((letter, index) => {
if (index < iteration) {
return obj.dataset.value[index];
}
// 27 as hyphens wrap text that can make page jump a lot
return letters[Math.floor(Math.random() * 27)]
})
.join("");
if(iteration >= obj.dataset.value.length){
clearInterval(interval);
}
iteration += 1 / speed;
}, 30);
}
// Main title and subtitle, should only be one of each per page
if (document.querySelector("h1")) {
const title = document.querySelector("h1");
garble(title, 1.5);
}
if (document.querySelector(".subtitle")) {
const subtitle = document.querySelector(".subtitle");
garble(subtitle);
}
// h2 and h3 headers on page, there can be multiple so we need to loop through them
if (document.querySelectorAll("h2, h3")) {
const headers = document.querySelectorAll("h2, h3");
headers.forEach((header) => {
garble(header);
});
}

41
templates/about.html Normal file
View file

@ -0,0 +1,41 @@
{% extends 'layout.html' %}
{% block nav_about %}selected{% endblock %}
{% block content %}
<div class="content">
<h1 data-value="About-Me">About-Me</h1>
</div>
<div class="content">
<h2 data-value="Meeee :3">Meeee :3</h2>
<p>Hewwo, I'm a 17 year old nerd, who likes to code and tinker with computers!</p>
<p>I'm mostly a frontend developer, with some knowlage of the backend. I also enjoy programming for the hell of it</p>
</div>
<div class="content">
<h2 data-value="Fluffy-Bean">Fluffy-Bean</h2>
<p>Fluffy Bean is a maned wolf, he reflects my personality and is my fursona</p>
<p>Refsheet made by mrHDash</p>
</div>
<img src="{{ url_for('static', filename='images/ref.png') }}" alt="Orange maned wolf sneaking under a yellow sheet" style="opacity:0" onload="fadeOnLoad(this)">
<div class="content">
<h2 data-value="Experiance">Experiance</h2>
<p>
I'm quite well experianced with Python, HTML, CSS/Sass, and Shell Scripting.
And have some experiance with JavaScript, PHP, MySQL and a few other languages
</p>
<p>My main operating system has been Linux for about 1.5 years (Arch btw)</p>
<p>Now I have started to learn hardware and been messing around with Pi Picos!</p>
</div>
<div class="content">
<h2 data-value="Projects">Projects</h2>
<p>Recently I have started working on a gallery, originally written in PHP for my own use before making it public</p>
<p>
It is now written in Python with Flask and is open source! You can find it on <a href="https://github.com/Fluffy-Bean/onlylegs">GitHub</a>.
Or on my self hosted instance of <a href="https://git.leggy.dev/Fluffy/onlylegs">Gitea</a>!
</p>
</div>
{% endblock %}

9
templates/blog.html Normal file
View file

@ -0,0 +1,9 @@
{% extends 'layout.html' %}
{% block nav_blog %}selected{% endblock %}
{% block content %}
<div class="content">
<h1 data-value="Blog">Blog</h1>
<p class="subtitle" data-value="*sound of crickets chirping*">*sound of crickets chirping*</p>
</div>
{% endblock %}

23
templates/cretura.html Normal file
View file

@ -0,0 +1,23 @@
{% extends 'layout.html' %}
{% block nav_cretura %}selected{% endblock %}
{% block content %}
<h1 data-value="Cretura">Cretura</h1>
<p class="subtitle" data-value="Thanks to these critters!">Thanks to these critters!</p>
<div class="content" id="about">
<p>Jeetix: Helping me with learning how to make websites!</p>
<p>Carty: Teaching me how to run servers and the networking!</p>
<p>mrHDash: For the Ref Sheet, also my smelly brother</p>
<p>Zadok: Silly taidum art on the icon of this page!</p>
<!--
<p>
Shep: Provided free YCH,
<a href="https://twitter.com/ShepGoesBlep/status/1563946805062148102?s=20&t=0wVGqoYa74AsjSSnkZbzjA">you can find it here</a>
</p>
<img src="{{ url_for('static', filename='images/sneak.png') }}" alt="Orange maned wolf sneaking under a yellow sheet" height="200px" style="opacity:0" onload="fadeOnLoad(this)">
-->
</div>
<img src="{{url_for('static', filename='images/ny.png')}}" style="opacity:0" onload="fadeOnLoad(this)">
{% endblock %}

View file

@ -1,7 +1,7 @@
{% extends 'layout.html' %}
{% block content %}
<div class="error">
<h1>{{error}}</h1>
<p style="text-align: center;">{{msg}}</p>
<div class="content">
<h1 data-value="{{error}}">{{error}}</h1>
<p class="subtitle" data-value="{{msg}}">{{msg}}</p>
</div>
{% endblock %}

View file

@ -1,6 +0,0 @@
{% extends 'layout.html' %}
{% block content %}
<div class="content content-img">
<img src="{{ url_for('static', filename='images/funny.jpg') }}" alt="Funny" id="funny">
</div>
{% endblock %}

View file

@ -1,33 +1,17 @@
{% extends 'layout.html' %}
{% block nav_home %}selected{% endblock %}
{% block content %}
<div class="content content-header">
<p>{{title}}</p>
<div class="content">
<h1 data-value="Social-Media">Social-Media</h1>
<p class="subtitle" data-value="{{msg}}">{{msg}}</p>
</div>
<div class="content content-list" id="contact">
<button class="btn btn-blue">
Twitter
<i class="ph-twitter-logo"></i>
</button>
<button class="btn btn-purple">
Mastodon
<i class="ph-linux-logo"></i>
</button>
<button class="btn btn-blue">
Telegram
<i class="ph-telegram-logo"></i>
</button>
<button class="btn btn-yellow">
Github
<i class="ph-github-logo"></i>
</button>
<button class="btn btn-red">
Discord
<i class="ph-discord-logo"></i>
</button>
</div>
<div class="content content-img" id="contact">
<img src="{{ url_for('static', filename='images/sneak.png') }}" alt="Fluffy the maned wolf art, line art by Shep, colouring by meeee" style="max-width: 500px;">
<div class="content">
<a href="https://twitter.com/fluffybeanUwU" class="btn" data-value="Twitter">Twitter</a>
<a href="https://meow.social/@Fluffy_Bean" class="btn" data-value="Mastodon">Mastodon</a>
<a href="https://t.me/Fluffy_Bean" class="btn" data-value="Telegram">Telegram</a>
<a href="https://github.com/Fluffy-Bean" class="btn" data-value="Github">Github</a>
<button class="btn" data-value="Discord" id="discord">Discord</button>
</div>
{% endblock %}

View file

@ -4,81 +4,30 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Leggy land</title>
<link rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}" defer>
<script
src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous">
<meta name="description" content="Fluffy Bean's amazing website">
<link rel="icon" href="{{url_for('static', filename='images/taidum.png')}}">
<link rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}">
<script src="{{ url_for('static', filename='js/main.js') }}" defer></script>
<script>
function fadeOnLoad(obj) {
obj.style.transition = "opacity 1s";
obj.style.opacity = 1;
}
</script>
<script src="https://unpkg.com/phosphor-icons" defer></script>
</head>
<body>
<div class="nav">
<button class="nav-toggle"><i class="ph-list"></i></button>
<p>Leggy land</p>
</div>
<nav>
<a class="{% block nav_home %}{% endblock %}" href="/">Home</a>
<a class="{% block nav_cretura %}{% endblock %}" href="/cretura">Cretura</a>
<a class="{% block nav_about %}{% endblock %}" href="/about">About</a>
<span class="spacer"></span>
<a class="{% block nav_music %}{% endblock %}" href="/music">Music</a>
</nav>
<div class="aside">
<div class="aside-container">
<a href="/#" class="aside-item">
Home
<i class="ph-arrow-right"></i>
</a>
<a href="/thankies" class="aside-item">
Thankies
<i class="ph-heart"></i>
</a>
<a href="/funny" class="aside-item">
lol
<i class="ph-arrow-right"></i>
</a>
<hr>
<a href="/" class="aside-item">
Gallery
<i class="ph-image"></i>
</a>
<a href="/status" class="aside-item">
Server Status
<i class="ph-cpu"></i>
</a>
</div>
</div>
<div class="wrapper">
{% block content %} {% endblock %}
</div>
<div class="footer">
<p>Last updated 27th Dec</p>
</div>
<script>
let btnColours = [ 'red', 'yellow', 'green', 'blue', 'purple']
let asideElements = document.querySelectorAll('.aside-item');
for (let i = 0; i < asideElements.length; i++) {
asideElements[i].addEventListener("mouseover", function() {
let randomColour = Math.floor(Math.random() * btnColours.length);
this.classList.add(`aside-${btnColours[randomColour]}`);
});
asideElements[i].addEventListener("mouseout", function() {
this.classList = 'aside-item';
});
}
let navToggle = document.querySelector('.nav-toggle');
let aside = document.querySelector('.aside');
navToggle.addEventListener('click', function() {
aside.classList.toggle('aside-active');
});
function fadeOnLoad(obj) {
$(obj).fadeIn(621);
}
</script>
<div class="toast-container"></div>
</body>
</html>

27
templates/music.html Normal file
View file

@ -0,0 +1,27 @@
{% extends 'layout.html' %}
{% block nav_music %}selected{% endblock %}
{% block content %}
<h1 data-value="Enslaved-Sound">Enslaved-Sound</h1>
{% for track in tracks %}
<div class="music">
<span class="music-image"><img src="{{track.image}}" style="opacity:0" onload="fadeOnLoad(this)"></span>
<div class="music-info">
{% if track.nowPlaying %}
<p class="music-nowplaying">Now Playing:</p>
<a href={{track.url}}>{{track.name}}</a>
<p>by {{track.artist}}</p>
{% else %}
<a href={{track.url}}>{{track.name}}</a>
<p>by {{track.artist}}</p>
<p>on {{track.album}}</p>
{% endif %}
</div>
</div>
{% endfor %}
<div class="content">
<p>Provided by <a href="http://www.last.fm">Last.fm</a></p>
</div>
{% endblock %}

View file

@ -1,15 +0,0 @@
{% extends 'layout.html' %}
{% block content %}
<div class="content content-default" id="about">
<h2>Special thanks to these wonderful cretura</h2>
<p>Jeetix: Helping me with learning how to make websites!</p>
<p>Carty: Teaching me how to run servers and the networking!</p>
<p>mrHDash: For the Ref Sheet and most other art on the page!</p>
<p>Zadok: Silly taidum art!</p>
<p>Shep: For the free YHC!</p>
</div>
<div class="content content-img">
<img src="{{url_for('static', filename='images/ny.png')}}" style="max-width: 800px;">
</div>
{% endblock %}