diff --git a/.gitignore b/.gitignore index e01c8f5..5f48730 100644 --- a/.gitignore +++ b/.gitignore @@ -131,6 +131,4 @@ dist .pnp.* # Violet's Purgatory -static/index.html -static/cached -static/style.css \ No newline at end of file +static/cached \ No newline at end of file diff --git a/config.json b/config.json index ce184ad..c8a756e 100644 --- a/config.json +++ b/config.json @@ -62,6 +62,7 @@ "highlightedWords": { "birds": "yellow", "Pissing": "yellow", - "Starwalker": "yellow" + "Starwalker": "yellow", + "word highlighting": "yellow" } } \ No newline at end of file diff --git a/index.js b/index.js index bcb0e2a..40e83dc 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,8 @@ const express = require('express'), path = require('path'), fs = require('fs'), WebSocket = require('ws'), - minify = require('minify-html') + minify = require('minify-html'), + pageUpdater = require('./pageUpdater.js') var app = express() @@ -98,287 +99,7 @@ function gameTimeFormatter(seconds) { } -async function pageUpdate() { - - var genStart = Date.now() - - var statuses = { - "online": { - "text": "Online", - "color": "rgb(100, 255, 100)" - }, - "dnd": { - "text": "DND", - "color": "rgb(255, 100, 100)" - }, - "idle": { - "text": "Idle", - "color": "rgb(255, 255, 75)" - }, - "offline": { - "text": "", - "color": "rgb(255, 255, 255)" - } - } - - var html = fs.readFileSync(mainpage).toString() - - var addedHTML = "" - - if (lanyardData) { - var statusData = statuses[lanyardData.discord_status] - - addedHTML += `

${statusData.text}

` - addedHTML += `` - } - - html = html.replace("{LANYARD_STATUS}", addedHTML) - - addedHTML = "" - - if (lanyardData && lanyardData.activities.length > 0) { - if (lanyardData.activities[0].type == 4) { - var status = lanyardData.activities[0] - addedHTML += "

" - if (status.emoji) { - if (status.emoji.id) { - addedHTML += ` ` - } else { - addedHTML += status.emoji.name - } - } - if (status.state) { - addedHTML += `"` - // addedHTML += (status.state || "") - var splitStatus = status.state.split(' ') - - for (let index = 0; index < splitStatus.length; index++) { - const text = splitStatus[index]; - if (highlight[text]) { - addedHTML += `${text}` - } else { - addedHTML += text - } - addedHTML += ' ' - } - addedHTML = addedHTML.trim() - addedHTML += `"` - } - addedHTML += ` - ${lanyardData.discord_user.display_name} ${new Date(Date.now()).getFullYear()}

` - } - } - - html = html.replace("{LANYARD_QUOTE}", addedHTML) - - addedHTML = "" - - var debounce = false - - if (lanyardData && lanyardData.activities.length > 0) { - for (let index = 0; index < lanyardData.activities.length; index++) { - const activity = lanyardData.activities[index]; - - var found = false - for (let index = 0; index < lanyardData.activities.length; index++) { - const act = lanyardData.activities[index] - if (act.name == activity.name) { - if (Object.keys(act).length > Object.keys(activity).length) { - found = true - } - } - } - if (found) { - continue - } - - if (!debounce && activity.type != 4) { - addedHTML += `


What I'm up to:

` - debounce = true - } - - - function get_img(activity, size = "large_image") { - if (cachedImages[get_img_url(activity, size)]) { - var fn = cachedImages[get_img_url(activity, size)] - var fp = path.join(staticpath, 'cached', fn) - } else { - return 'imgs/notFound.png' - } - - return '/cached/' + fn - } - - function songStats() { - var html = `` - - if (activity.assets && activity.assets.large_text != activity.details) { - html += ` -
Album: ${activity.assets.large_text || " "} -
Artist: ${activity.state || " "} - ` - } else { - html += `
Artist: ${activity.state || " "}` - } - - return html - } - if (activity.type == 2) { - var timeLeft = Math.round((activity.timestamps.end - Date.now()) / 1000) - var currentPercent = (Date.now() - activity.timestamps.start) / (activity.timestamps.end - activity.timestamps.start) * 100 - addedHTML += ` -
- -

- Listening to ${activity.name} -
Song: ${activity.details || " "} - ${songStats()} -
- - ${timeFormatter((activity.timestamps.end - activity.timestamps.start) / 1000)} -

-
- - - ` - } else if (activity.type == 0) { - var time = activity.created_at - if (activity.timestamps) { - time = activity.timestamps.start - } - if (!activity.assets) { - activity.assets = { "large_text": " ", "small_text": " " } - } - - function smch() { - if (get_img_url(activity, "small_image")) { - return `` - } - return "" - } - - - addedHTML += ` -
- - ${smch()} -

- Playing ${activity.name} -
${(activity.details || activity.assets.large_text || " ")} -
${(activity.state || activity.assets.small_text || " ")} -
${gameTimeFormatter((Date.now() - time) / 1000)} -

- -
- ` - } else if (activity.type != 4) { - var time = activity.created_at - if (activity.timestamps) { - time = activity.timestamps.start - } - if (!activity.assets) { - activity.assets = { "large_text": " ", "small_text": " " } - } - - addedHTML += ` -
- -

- ${activity.name} -
${(activity.details || activity.assets.large_text || " ")} -
${(activity.state || activity.assets.small_text || " ")} -
${gameTimeFormatter((Date.now() - time) / 1000)} -

- -
- ` - } - } - } - - if (addedHTML) { - addedHTML += "
" - } - - html = html.replace("{LANYARD_FULL}", addedHTML) - - addedHTML = "" - - var socialsHTML = fs.readFileSync(path.join(__dirname, 'static/socials/index.html')).toString() - // socialsHTML = socialsHTML.substring(0, socialsHTML.lastIndexOf("")) - addedHTML += "


Socials

" - addedHTML += socialsHTML.substring(socialsHTML.indexOf("") + 6) - - html = html.replace("{SOCIALS}", addedHTML) - - var now = new Date() - - currentMonth = now.getMonth() + 1 - - if ([11, 12].includes(currentMonth)) { // The Below HTML is copy and pasted from that one site :> - html = html.replace("{SEASONAL_EFFECT}", fs.readFileSync(path.join(__dirname, 'static/snow.html'))) - } else { - html = html.replace("{SEASONAL_EFFECT}", "") - } - - var quote = randomQuotes[Math.floor(Math.random() * randomQuotes.length)] - - var splitQuote = quote.split(' ') - - var finalQuote = '' - - for (let index = 0; index < splitQuote.length; index++) { - const text = splitQuote[index]; - if (highlight[text]) { - finalQuote += `${text}` - } else { - finalQuote += text - } - finalQuote += ' ' - } - - quote = finalQuote.trim() - - quote = quote.replace("{QUOTE_COUNT}", randomQuotes.length) - - html = html.replace("{RANDOM_QUOTE}", quote) - - if (process.env.BRANCH == "dev") { - html = html.replace("{OPPOSITE_URL}", "www") - html = html.replace("{OPPOSITE_BRANCH}", "Main") - } else { - html = html.replace("{OPPOSITE_URL}", "beta") - html = html.replace("{OPPOSITE_BRANCH}", "Beta") - } - - html = html.replace("{COMMIT_COUNT}", commitCount) - - html = html.replace("{UPTIME}", gameTimeFormatter((Date.now() - uptime) / 1000)) - html = html.replace("{LAST_LANYARD}", gameTimeFormatter((Date.now() - lastLanyardUpdate) / 1000) + ' ago') - html = html.replace("{QUOTE_COUNT}", randomQuotes.length) - html = html.replace("{CACHED_IMAGES}", fs.readdirSync(path.join(staticpath, 'cached')).length) - - html = html.replace("{GENERATION_TIME}", Math.ceil(Date.now() - genStart).toString() + 'ms') - - //fs.writeFileSync(path.join(__dirname, 'static/index.html'), html) - return html -} - +app.use(pageUpdater.middleWare) // Lanyard Stuffs @@ -447,12 +168,11 @@ function socketeer() { socketeer() -app.get('/', async (req, res) => { - var html = await (pageUpdate()) - res.send(minify.minify(html).toString('utf-8')) -}) - -app.use(express.static(staticpath)) +// app.get('/index.html', async (req, res) => { +// console.log(req.params[0]) +// var html = await (pageUpdate(req.params[0])) +// res.send(minify.minify(html)) +// }) app.use((req, res, next) => { res.status(404).send(` diff --git a/pageUpdater.js b/pageUpdater.js new file mode 100644 index 0000000..2ab544f --- /dev/null +++ b/pageUpdater.js @@ -0,0 +1,34 @@ +const path = require('path'), +fs = require('fs') + +var config = JSON.parse(fs.readFileSync(path.join(__dirname, 'config.json'))) +var highlightedWords = config.highlightedWords + +function converter(html) { + var highTable = Object.keys(highlightedWords) + for (let index = 0; index < highTable.length; index++) { + var term = highTable[index]; + var replacement = `${term}` + html = html.replaceAll(term, replacement) + } + + return html +} + +module.exports = { middleWare: function(req, res, next) { + + var filePath = req.baseUrl + req.path + if (filePath.trim() == "/") { + filePath = "/index.html" + } + filePath = path.join(__dirname, 'static', filePath || 'index.html') + var data = fs.readFileSync(filePath).toString() + if (req.path.includes("style.css")) { + res.setHeader("Content-Type", "text/css") + res.send(data) + } else { + data = converter(data) + res.send(data) + } +} +} \ No newline at end of file diff --git a/resources/mainPage.html b/resources/mainPage.html deleted file mode 100644 index adfc9e0..0000000 --- a/resources/mainPage.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - Violet's Purgatory - - - - - - - - - - - - -

Welcome to Violet's Purgatory

-

{RANDOM_QUOTE}

-

{COMMIT_COUNT} Commits

-
-
-

Violet

-
- -
-

They/Them

-

Developer

- {LANYARD_STATUS} -
-
-
-
- - -

FileShare

-

Socials

-

Projects

-

Donate

- - -
- -

Blog

-

FAQ

-

{OPPOSITE_BRANCH}

- - {LANYARD_QUOTE} -
-
- -

Check out the source code on Codeberg

- {LANYARD_FULL} - -


Announcement!

-

Soon enough, I will begin work on a complete rewrite for Violet's Purgatory. This rework will be done in hopes of:
-

- -

- The codeberg repository for this site was made 6 months ago, not counting all the contributions I had done before then. Thats alot of time, and i've learnt so much since then! This was even my first project to do Dynamic HTML!
- It has been an absolutely wonderful journey, but as per usual, its about time we do some reworking!
- I may still keep this version of the website up for archival sake (And, worst comes to worst, I'll still have it on archive.org)
- This rewrite will take time, so from now on, updates to Violet's Purgatory will be slow or nonexistant.
- And if you're curious, you can always check the beta branch to see how progress is going!
- Thank you for your time and encouragement, It's been a fun year on violets-purgatory.dev :) -

-

P.S.: As my final gift, CSS is now minified!!! woohoo!!!

- - {SOCIALS} - -


Silly Stats:

-

Just some funny stats for the site :3

- - - {SEASONAL_EFFECT} -
- - - \ No newline at end of file diff --git a/static/extras/discord/index.html b/static/extras/discord/index.html deleted file mode 100644 index f161b29..0000000 --- a/static/extras/discord/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - Discord Status - Violet's Purgatory - - - - Home -
- -

Discord Status (W.I.P)

-

This is a more fleshed out version of the main discord status on my site, issue being, it requires Javascript. So, I choose not to use it, though it coulda been cool...

-

I still am tempted to add something like it to the main page, and just make it compatible without javascript, but I worry that'd upset people.

- -
-

Violet

-
- -
-

Developer

-

Offline

-
-
-
-

-
-
-
- - - \ No newline at end of file diff --git a/static/extras/discord/index.js b/static/extras/discord/index.js deleted file mode 100644 index 7053ede..0000000 --- a/static/extras/discord/index.js +++ /dev/null @@ -1,74 +0,0 @@ -var lanyard = new WebSocket('wss://api.lanyard.rest/socket') - -var statuses = { - "online": { - "text": "Online", - "color": "rgb(100, 255, 100)" - }, - "dnd": { - "text": "DND", - "color": "rgb(255, 100, 100)" - }, - "idle": { - "text": "Idle", - "color": "rgb(255, 255, 75)" - }, - "offline": { - "text": "Offline", - "color": "rgb(125, 125, 125)" - } -} - -function beat(dur) { - lanyard.send(JSON.stringify({ - op: 3 - })) - setTimeout(() => { - beat(dur) - }, dur); -} - -lanyard.addEventListener("message", (res) => { - var data = JSON.parse(res.data) - if (data.op == 1) { - beat(data.d.heartbeat_interval) - lanyard.send(JSON.stringify({ - op: 2, - d: { - subscribe_to_id: "534132311781015564" - } - })) - } else if (data.op == 0) { - var lanyardData = data.d - // $("*").text(JSON.stringify(lanyardData)) - - - var statusData = statuses[lanyardData.discord_status] - - $("#discStatus").text(statusData.text) - $("#discStatus").css("color", statusData.color) - $(".pfp").css("border-color", statusData.color) - - if (lanyardData) { - $("#discQuote").html("") - for (let index = 0; index < lanyardData.activities.length; index++) { - const activity = lanyardData.activities[index]; - var status = lanyardData.activities[0] - var addedHTML = "" - addedHTML += "
" - - if (activity.type == 4) { - if (status.emoji) { - if (status.emoji.id) { - addedHTML += ` ` - } else { - addedHTML += status.emoji.name - } - } - addedHTML += `"${lanyardData.activities[0].state}" - ${lanyardData.discord_user.display_name} ${new Date(Date.now()).getFullYear()}` - $("#discQuote").html(addedHTML) - } - } - } - } -}) \ No newline at end of file diff --git a/static/extras/index.html b/static/extras/index.html deleted file mode 100644 index 5c01a60..0000000 --- a/static/extras/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - Extras - Violet's Purgatory - -

Extras

-

Just some fun things that really don't have use on the main page but exist anyway!

- -
-

Dynamic Discord Status (Javascript, W.I.P)

-

Pronouns (here bc it's hard to find on main page)

-
- Home - - \ No newline at end of file diff --git a/static/faq/index.html b/static/faq/index.html deleted file mode 100644 index 0193a2d..0000000 --- a/static/faq/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - FAQ - Violet's Purgatory - - - -

FAQ

-

Some questions that, nobody has ever actually asked, but I'm gonna act like they have because its fun!

-
-


How?

-

Well, believe it or not, there's no javascript involved!!!! :D
Or well no client side javascript anyway...

-

Using a wonderful program called lanyard, my website is connected to a websocket that sends a signal every time my discord updates (E.G. My status changes... or I open a game...)

-

Then, it uses the new info to dynamically generate the main page!
The more technically advanced of you can check it out on Codeberg, but be warned, it's coded TERRIBLY. I didn't really wanna use a library so i coded it all myself, and there's no actual system, just pure chaos :/

-


Why?

-

Actually, i'm not really sure
- Originally I think this site started out because I saw people had these cool "carrd" sites and stuff - in their bio and wanted to make something close to carrd but made by myself.

-

Nowadays, though, this site is used more as a learning opportunity! - I try to do new, experimental, wacky things here, and use them in projects later.

-

For example, my Youtube Converter, Univerter, I was only able to make because I already learnt how to make - dynamically generated HTML. (Univerter, as I am writing this, has no dynamically generated HTML, but it used to!) -

-


How does it update?

-

- I use a site called railway for hosting, which connects to a github repository, which is synced with a codeberg repository. The github repo is only there because, annoyingly, Railway only supports docker and Github. -
- The main site (violets-purgatory.dev) updates with the origin branch, while the beta site (beta.violets-purgatory.dev) updates with the dev branch. I originally wanted to use dev as the subdomain for the sake of consistancy, but, dev.violets-purgatory.dev just doesn't really roll off the tongue... -

-


Why do you (hate/never use) Javascript?

-

Because its more fun :D Inevitably, I would put something more informative here, like "for the sake of compatibility" which, don't get me wrong, a huge part of it is so that people who disable javascript can use my site, but also, if you've seen my CSS it should be clear I don't try to be the most backwards compatible.

-
- Home - - \ No newline at end of file diff --git a/static/imgs/Simpletube-screenshot.png b/static/imgs/Simpletube-screenshot.png deleted file mode 100644 index a1dc7d0..0000000 Binary files a/static/imgs/Simpletube-screenshot.png and /dev/null differ diff --git a/static/imgs/notFound.png b/static/imgs/notFound.png deleted file mode 100644 index a750080..0000000 Binary files a/static/imgs/notFound.png and /dev/null differ diff --git a/static/imgs/steamrpc-screenshot.png b/static/imgs/steamrpc-screenshot.png deleted file mode 100644 index 81c8e77..0000000 Binary files a/static/imgs/steamrpc-screenshot.png and /dev/null differ diff --git a/static/imgs/univerter-screenshot.png b/static/imgs/univerter-screenshot.png deleted file mode 100644 index e8e9af8..0000000 Binary files a/static/imgs/univerter-screenshot.png and /dev/null differ diff --git a/static/imgs/violets-limbo-screenshot.png b/static/imgs/violets-limbo-screenshot.png deleted file mode 100644 index b60c6a3..0000000 Binary files a/static/imgs/violets-limbo-screenshot.png and /dev/null differ diff --git a/static/imgs/violets-purgatory-screenshot.png b/static/imgs/violets-purgatory-screenshot.png deleted file mode 100644 index 505d721..0000000 Binary files a/static/imgs/violets-purgatory-screenshot.png and /dev/null differ diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..6e1e279 --- /dev/null +++ b/static/index.html @@ -0,0 +1,29 @@ + + + + + + + + + + Violet's Purgatory + + + + + + + + + + + + +

Welcome to Violet's Purgatory

+

Currently i'm working on the new system for word highlighting!

+

You can see that it is pretty much the same as before, outside of the code being a little bit shorter and more dispersed (I didn't know until recently that "replaceAll" was a function...)

+

The big difference, is unlike the original site, this can apply to all pages!

+ + + \ No newline at end of file diff --git a/static/projects/index.html b/static/projects/index.html deleted file mode 100644 index 2e6c86e..0000000 --- a/static/projects/index.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - Projects - Violet's Purgatory - - - -

Projects

-

All my silly lil projects in one, concise(?) page. To be updated over time!

-
-
-

Violet's Purgatory

-
-
- -
-
-

Nothing much to be said- its the site you're using right now! I've made many variations of it over the years, and it's been on 3 different domains. First it was "violets-puragtory.github.io", then moved to "violets-puragtory.com", and lastly (now) to violets-purgatory.dev! My first time coding any HTML on my own, and technically the first iteration of this site, was a css animation of the "homophobic dog" meme sliding on screen accompanied by the role sound effect from amongus. I was like 13 don't judge me I thought it was funny.

-
- -
-
- -
-

Univerter

-
-
- -
-
-

Univerter is my Javascriptless Youtube video downloader! I tend to call it a "converter" rather than a downloader, because unlike many other youtube downloaders, mine actually converts to more formats than youtube supports! I've been working on Univerter for a long time, and i hope to support more sites soon :>. It also comes with a (experimental) standalone video converter! Please, check it out at yt.violets-purgatory.dev and report any issues or feature requests!

-
-
-
- -
-

Violet's Limbo

-
-
- -
-
-

Don't get it confused with Violet's Purgatory! I know, me and my stupid naming schemes T^T. Violet's Limbo is the name for my blog site, where i just kinda post unimportant game rants! Currently it's very early in development, and much of it's code is sorta "Make now fix later"... But despite its rushed development, i love posting blogs on there! Currently there isn't much, but feel free to check it out at blog.violets-purgatory.dev!

-
-
-
- -
-

Simpletube

-
-
- -
-
-

Simpletube is my work in progress Javascriptless Youtube Frontend! It's not quite done, but it does support many features, and i'm quite happy with how it's going so far! Sadly, it currently isn't hosted anywhere, but the code can be found here! I hope to re-continue development on it soon, and finally find somewhere to host it!

-
-
-
- -
-

SteamRPC

-
-
- -
-
-

When playing games like Gunfire Reborn, I was annoyed that they'd only support Rich presence on Steam but not Discord. I was also having issues at the time with getting games under proton to show up on discord in general. As a solution, i made a (Linux only, sadly) software called SteamRPC, which converts the presence of any Steam game onto Discord using a Rich presence bot. It certainly needs optimization, but it's a project im proud of, and one of my few projects I use all the time! Find it here!

-
-
-
- -

There are, of course, a few more projects (E.G. Discord Embedder) but I feel they're too early in development for me to want to put them here.

- Home -
- - - \ No newline at end of file diff --git a/static/pronouns/index.html b/static/pronouns/index.html deleted file mode 100644 index 2468902..0000000 --- a/static/pronouns/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - Pronouns - Violet's Purgatory - - - - -

Pronouns

-
-
-

Love

- -

Fine if used Silly/Jokingly

-

Neutral

-

Hate

-
-
-
-

Names

-

Violet, Vivi, Vi, V

- -

Purple guy

-
- -
-
-

Pronouns

-

They/Them

-

She/Her, etc...

-

He/Him

-
- -
-
-

Honorifics

- -

Sir, Mr

-

Mx

-
- -
-
-

Other words

-

Any silly Enby/Slime/Moth related terms

- -

Guy, Pardner

-
-
-
-

If there's any more confusion, or a section you'd want me to add, please put an issue on codeberg :D

- Home - - - \ No newline at end of file diff --git a/static/socials/index.html b/static/socials/index.html deleted file mode 100644 index fb11555..0000000 --- a/static/socials/index.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - Socials - Violet's Purgatory - - - -

Socials

-
- -

Here's where you can find me most... if you wanted to do that for some reason?

-
-
-

Chat Applications:

-

Matrix: @bingus_violet​:catgirl.cloud

-

Revolt: BingusViolet#5573

-

Discord: bingus_violet

- -
- -
-
-

Social media:

-

Fedi: @Bingus_Violet​@void.lgbt

-

Youtube: Violet's Fiasco

-
- -
-
-

Coding sites:

-

Codeberg: Bingus_Violet -

Docker: bingusviolet -

Github: Violets-puragtory

-

-
- -
-
-

Game sites:

-

Steam: Violet

-
-
- Home - - \ No newline at end of file diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..4e75b09 --- /dev/null +++ b/static/style.css @@ -0,0 +1 @@ +@import url('./bootstrap.css');@font-face {font-display: swap;font-family: 'Rubik';font-style: normal;font-weight: 400;src: url('./fonts/rubik-v28-latin-regular.woff2') format('woff2');}* {font-family: 'Rubik', Verdana, Geneva, Tahoma, sans-serif;padding: 0;text-align: center;}h1 {color: rgb(225, 215, 255);font-size: 2.5rem;}h2 {font-size: 2rem;color: rgb(225, 215, 255)}h3 {font-size: 1.65rem}h3,li {color: white;}ul, ol {display: inline-block}li {font-size: 1.2rem;text-align: left;}body,html {overflow-x: hidden;margin: auto;background-color: rgb(15, 4, 45);background: linear-gradient(rgb(20, 4, 55), black);width: 100vw;height: 100vh;margin: 0;padding: 0;background-attachment: local;}body {padding: 2.5%;}.fadediv {animation-name: fade-in;animation-duration: .75s;animation-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);margin: auto;max-width: 1000px;}a {color: rgb(175, 225, 255);display: inline-block;transition: 1.5s all cubic-bezier(0.075, 0.82, 0.165, 1);}.chip {position: relative;z-index: 3;font-size: 1.3rem;border: 2px gray solid;border-radius: 6px;background-color: black;padding: 8px;margin: 3px;display: inline-block;transform: scale(0.95);transition: transform 1.25s cubic-bezier(0.075, 0.82, 0.165, 1), background-color 2s cubic-bezier(0.075, 0.82, 0.165, 1);}.chip,.chip>* {text-decoration: none;}.chip:hover {background-color: rgb(10, 0, 25);transform: scale(1);/* font-size: 1.35rem; */border-color: white;transition: transform 0.75s cubic-bezier(0.075, 0.82, 0.165, 1), background-color 3s cubic-bezier(0.075, 0.82, 0.165, 1);}.chip:hover > .smallimg {background-color: rgb(10, 0, 25);}.activity {border-width: 3px;border-radius: 10px;overflow: hidden;margin: auto;padding: 0;display: flex;position: relative;z-index: 3;}.activity>p {width: 100%;overflow-wrap: break-word;}.activity>img {width: 128px;aspect-ratio: 1/1;object-fit: cover;}.activity>.smallimg {width: 64px;height: 64px;position: absolute;bottom: 0px;left: 72px;border-radius: 50px;background: black;padding: 5px;/* border: 2px gray solid; */transform: scale(0.9);}.activity>.smallimg:hover {transform: scale(1);}a:hover {color: white;transition: 0.5s all cubic-bezier(0.075, 0.82, 0.165, 1);}p {color: white;font-size: 1.2rem;padding: 0;margin: 10px;}img:not(.project-inner > div > img) {width: 100%;max-width: 135px;transition: all 2s cubic-bezier(0.075, 0.82, 0.165, 1);}.pfp {border-radius: 15px;border: darkgray 4px solid;width: 60%;aspect-ratio: 1/1;transform: scale(0.9);border-radius: 50%;}.pfp:hover {transform: scale(1);border-color: rgb(255, 200, 255);object-fit: cover;}.emoji {width: 32px;border-radius: 10%;/* border: 1px gray solid; */}hr {color: white;opacity: 0.25;border-width: 2px;margin: 15px 10%;}#card {background-color: rgb(15, 5, 80);padding: 15px;border: 2px white solid;margin: 20px auto;width: 95%;max-width: 800px;z-index: 3;position: relative;}.me {border-color: limegreen;}.project {background-color: rgba(35, 35, 35, 0.8);padding: 15px;border: 2px gray solid;margin: 20px 0px;border-radius: 15px;}.project-inner {overflow: hidden;padding: 0;margin: auto;z-index: 3;}.project-inner>div>img {object-fit: cover;border: 2px white solid;width: 80%;max-width: 500px;margin: auto;border-radius: 10px;}.project>p {display: inline-block;}/* I am so sorry about this code,,, */.love::before {content: "<3 ";color: rgb(255, 100, 150);}.like::before {content: ":) ";color: limegreen;}.silly::before {content: ":P ";color: aqua;}.fine::before {content: ":/ ";color: yellow;}.hate::before {content: ">:( ";color: red;}.love {border-color: rgb(255, 100, 150);}.like {border-color: limegreen;}.silly {border-color: aqua;}.fine {border-color: yellow;}.hate {border-color: red;}.up {border-color: limegreen;}.mid {border-color: yellow;}.down {border-color: red;}.post {background-color: rgba(85, 50, 150, 0.3);border: 2px gray solid;display: inline-block;/* border-radius: 15px; */padding: 10px;margin: 8px;}.minipfp {width: 70px;display: inline-block;margin-right: 10px;border: 2px lightgray solid;border-radius: 5px;}.lengthBar {background-color: rgb(50, 40, 60);display: inline-block;width: 80%;height: 10px;padding: 0;overflow: hidden;border-radius: 5px;margin-right: 1.9%;}.lengthBar>span {margin: 0;padding: 0;width: 100%;background-color: rgb(200, 200, 230);height: 20px;display: block;position: relative;}.note {font-size: 0.95rem;color: lightgray;}@keyframes fade-in {0% {opacity: 0;transform: translateY(50vh);}100% {opacity: 1;transform: none;}} \ No newline at end of file diff --git a/static/test.html b/static/test.html new file mode 100644 index 0000000..fd0e7ba --- /dev/null +++ b/static/test.html @@ -0,0 +1,27 @@ + + + + + + + + + + Violet's Purgatory + + + + + + + + + + + + +

Starwalker

+

See? I told you!

+ + + \ No newline at end of file diff --git a/static/todo/index.html b/static/todo/index.html deleted file mode 100644 index 8822a29..0000000 --- a/static/todo/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - Todo - Violet's Purgatory - - - -

To-do

-
-

Not only does this page list things that are currently being worked on, but also links to those things. Keep in mind that most of these, though, might not even have development started on them, so please be patient

-

To-do:

- -
- - - \ No newline at end of file