From 05f64c6d527487a2c23eb376231459a7ed84a2fe Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 7 Apr 2022 20:14:00 -0500 Subject: [PATCH] update stuff --- package.json | 2 +- src/app.css | 13 +- src/hooks.ts | 33 - src/lib/BackAnchor.svelte | 12 + src/lib/PostPreview.svelte | 33 + src/lib/blog.ts | 6 +- src/posts/hello/index.md | 12 - .../the-story-of-reportscammers/index.md | 3 +- ...thats-crazy-but-i-dont-remember-asking.png | Bin 0 -> 10288 bytes src/posts/who-is-mat/favicon.png | Bin 0 -> 11666 bytes src/posts/who-is-mat/index.md | 5 +- src/routes/__error.svelte | 19 +- src/routes/__layout.svelte | 5 +- src/routes/blog/index.json.ts | 8 +- src/routes/blog/index.svelte | 35 +- src/routes/blog/post/[slug].svelte | 24 +- src/routes/index.svelte | 12 +- static/twitter.svg | 1 - svelte.config.js | 13 +- tsconfig.json | 3 +- yarn.lock | 629 ++++++++++-------- 21 files changed, 450 insertions(+), 418 deletions(-) delete mode 100644 src/hooks.ts create mode 100644 src/lib/BackAnchor.svelte create mode 100644 src/lib/PostPreview.svelte delete mode 100644 src/posts/hello/index.md create mode 100644 src/posts/the-story-of-reportscammers/thats-crazy-but-i-dont-remember-asking.png create mode 100644 src/posts/who-is-mat/favicon.png delete mode 100644 static/twitter.svg diff --git a/package.json b/package.json index fb6377f..140b575 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." }, "devDependencies": { - "@sveltejs/kit": "next", + "@sveltejs/kit": "^1.0.0-next.306", "@types/cookie": "^0.4.1", "@types/html-minifier": "^4.0.1", "@types/marked": "^4.0.0", diff --git a/src/app.css b/src/app.css index 7da8cc8..d5c2dbc 100644 --- a/src/app.css +++ b/src/app.css @@ -1,16 +1,18 @@ @import '$lib/atkinson-hyperlegible.css'; :root { - --background-color: #000; + --background-color: #010502; --background-color-alt: #111; --background-color-alt-2: #222; --background-color-alt-3: #333; - --text-color: #f0f0f0; + --text-color: #f7f4f4; --text-color-alt: #ddd; --text-color-alt-2: #bbb; --text-color-alt-3: #999; + --accent-color: #0dc7f9; + --text-font: 'Atkinson Hyperlegible'; } @@ -34,11 +36,16 @@ button { color: var(--text-color); font-size: inherit; border-radius: 0.25em; - padding: 0.1em 0.5em; + padding: 0.2em 0.6em; cursor: pointer; font-family: inherit; + box-shadow: 0 0.1em 0.2em #000; } p { margin-top: 0; } + +a { + color: var(--accent-color); +} diff --git a/src/hooks.ts b/src/hooks.ts deleted file mode 100644 index 2b1eb8a..0000000 --- a/src/hooks.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { minify } from 'html-minifier' -import type { Options } from 'html-minifier' -import { prerendering } from '$app/env' -import type { Handle } from '@sveltejs/kit' - -const minificationOptions: Options = { - collapseBooleanAttributes: true, - collapseWhitespace: true, - // conservativeCollapse: true, - decodeEntities: true, - html5: true, - ignoreCustomComments: [/^#/], - minifyCSS: true, - minifyJS: false, - removeAttributeQuotes: true, - removeComments: true, - removeOptionalTags: true, - removeRedundantAttributes: true, - removeScriptTypeAttributes: true, - removeStyleLinkTypeAttributes: true, - sortAttributes: true, - sortClassName: true, -} - -export const handle: Handle = async ({ request, resolve }) => { - const response = await resolve(request) - - if (prerendering && response.headers['content-type'] === 'text/html') { - response.body = minify(response.body?.toString() ?? '', minificationOptions) - } - - return response -} diff --git a/src/lib/BackAnchor.svelte b/src/lib/BackAnchor.svelte new file mode 100644 index 0000000..ecb67e1 --- /dev/null +++ b/src/lib/BackAnchor.svelte @@ -0,0 +1,12 @@ + + +← Back + + diff --git a/src/lib/PostPreview.svelte b/src/lib/PostPreview.svelte new file mode 100644 index 0000000..8c4b852 --- /dev/null +++ b/src/lib/PostPreview.svelte @@ -0,0 +1,33 @@ + + + +
+

{post.title}

+
{@html post.html}
+
+
+ + diff --git a/src/lib/blog.ts b/src/lib/blog.ts index d39cc3c..fc90181 100644 --- a/src/lib/blog.ts +++ b/src/lib/blog.ts @@ -18,7 +18,7 @@ async function doesBlogPostExist(slug: string) { } /** Checks whether an asset exists in a blog post */ -export async function doesAssetExist(postSlug: string, assetName: string) { +export async function doesAssetExist(postSlug: string, assetName: string): Promise { // return false if the blog post doesn't exist if (!(await doesBlogPostExist(postSlug))) return false @@ -32,7 +32,9 @@ export async function getPost(slug: string): Promise { if (!doesBlogPostExist(slug)) return null // ok the post exists, so we can safely read the md file - const postMarkdown = await fs.promises.readFile(path.join(postsDir, slug, 'index.md'), 'utf8') + const postMarkdown = ( + await fs.promises.readFile(path.join(postsDir, slug, 'index.md'), 'utf8') + ).replace(/\r\n/g, '\n') const [_, yamlMetadata = null, markdownContent = null] = postMarkdown.match(/^---\n([\w\W]+?)\n---\n([\w\W]+)$/) ?? [] diff --git a/src/posts/hello/index.md b/src/posts/hello/index.md deleted file mode 100644 index e5416f2..0000000 --- a/src/posts/hello/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: hello -published: 2021-11-18T15:58:39.082Z ---- - -Tempor id lorem sit velit. Amet labore tempor mollit ad dolore exercitation ipsum dolore ipsum nostrud nulla nulla. Tempor laboris laboris cillum voluptate commodo duis aliqua. Do deserunt irure dolor quis elit irure occaecat excepteur laboris ipsum pariatur nostrud. Enim duis nostrud enim quis reprehenderit sunt officia aliquip laboris non non tempor cupidatat. - -Id non reprehenderit velit ipsum anim. Incididunt tempor incididunt ut occaecat irure aliquip veniam. Nisi nisi sunt commodo esse eu. Ullamco nisi officia et exercitation lorem pariatur qui consectetur aliquip aliqua consectetur in irure mollit. Eiusmod sunt deserunt eu quis duis ipsum eu commodo. - -Eu tempor id esse reprehenderit laboris eu magna laboris veniam ullamco tempor commodo duis dolore minim cupidatat. Sint id proident laboris ullamco occaecat magna esse duis ex excepteur proident labore tempor pariatur minim occaecat adipisicing quis. Sint nisi deserunt aute pariatur pariatur enim pariatur culpa nostrud aute tempor amet eiusmod elit pariatur. Aute anim cupidatat voluptate ut mollit incididunt laborum duis mollit aute veniam minim esse ad ad nostrud cupidatat lorem. - -Voluptate incididunt ea consectetur eiusmod est sunt eu quis laboris duis officia laborum id deserunt commodo do veniam elit. Ullamco sunt esse aliqua eiusmod excepteur est nisi sit veniam aliquip laboris. Fugiat exercitation esse reprehenderit sint aute nostrud esse adipisicing ipsum laboris amet culpa. Sint ullamco cillum quis commodo aliquip aliqua do elit consequat aliqua duis proident anim adipisicing sit dolor anim veniam. diff --git a/src/posts/the-story-of-reportscammers/index.md b/src/posts/the-story-of-reportscammers/index.md index 2c1c9b5..e564ddc 100644 --- a/src/posts/the-story-of-reportscammers/index.md +++ b/src/posts/the-story-of-reportscammers/index.md @@ -13,8 +13,7 @@ It all started on April 27th, 2020. I was bored and wanted to make a Hypixel For # madcausebad11 I didn’t do anything with this idea until a couple weeks later on May 14th, when I remembered it, and was actually motivated to create it. I asked around on the SkyBlock Community Discord for what it should be called and what it should do, and I decided on calling it madcausebad11 (name chosen by @TatorCheese), and making it say “thats crazy but I dont remember asking” (@Bliziq chose that one) to all posts that mentioned being scammed. -.![Screenshot of a post on the Hypixel Forums where a user named madcausebad11 says "thats crazy but i dont remember asking"](https://lh3.googleusercontent.com/qHrXN2ZVQSXtJ8PgQyXm5R22eUPiayAkZKdwxPLKfRIk5hQdXfLCUon5t2mU_fM3fXrw8AROEk-E0UYhBqfmit9udhvcURqpJLnDKqLaMVDjovx3n0-fYb20RRlOTqTJYtMedr5l) -When that had been decided, I started working on the code. It was written in Python, using BeautifulSoup to scrape the web pages and aiohttp to make the requests. After an hour of writing code, madcausebad11 was working. +.![Screenshot of a post on the Hypixel Forums where a user named madcausebad11 says "thats crazy but i dont remember asking"](thats-crazy-but-i-dont-remember-asking.png) to make the requests. After an hour of writing code, madcausebad11 was working. Less than an hour after the bot started working, it got banned for the reason “spam”. diff --git a/src/posts/the-story-of-reportscammers/thats-crazy-but-i-dont-remember-asking.png b/src/posts/the-story-of-reportscammers/thats-crazy-but-i-dont-remember-asking.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ab62b7676d70eab1d798716163afb2e18a3b6c GIT binary patch literal 10288 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 -import type { ErrorLoad } from "@sveltejs/kit"; - + import type { ErrorLoad } from '@sveltejs/kit' export const load: ErrorLoad = ({ error, status }) => { return { props: { status, - message: error?.message - } + message: error?.message, + }, } }
-

{status}

-

{message}

-
+

{status}

+

{message}

+
\ No newline at end of file + diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index 257a9d2..a3e8397 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -26,8 +26,11 @@ } main { - margin: 1em; + padding: 1em; + margin: auto; flex: 1 0; + max-width: 50em; + width: calc(100% - 2em); } footer { text-align: center; diff --git a/src/routes/blog/index.json.ts b/src/routes/blog/index.json.ts index 153b6fa..414fbf9 100644 --- a/src/routes/blog/index.json.ts +++ b/src/routes/blog/index.json.ts @@ -25,7 +25,13 @@ export const get: RequestHandler = async () => { return { title: blogPost.title, // cut it off after 255 characters because that's a nice number - html: markdownToHtml(blogPost.body.slice(0, 512), `/blog/post/${blogPost.slug}/index.md`), + html: markdownToHtml( + blogPost.body + .slice(0, 512) + .replace(/!\[[^\]]+?\]\([^)]+?\)/g, '') + .replace(/\[([^\]]+?)\]\([^)]+?\)/g, '$1'), + `/blog/post/${blogPost.slug}/index.md` + ), slug: blogPost.slug, } }) diff --git a/src/routes/blog/index.svelte b/src/routes/blog/index.svelte index 7c20c49..04c8240 100644 --- a/src/routes/blog/index.svelte +++ b/src/routes/blog/index.svelte @@ -17,37 +17,18 @@
+ + {#each posts as post} - -
-

{post.title}

-
{@html post.html}
-
-
+ {/each}
- - diff --git a/src/routes/blog/post/[slug].svelte b/src/routes/blog/post/[slug].svelte index 5170209..b0234a4 100644 --- a/src/routes/blog/post/[slug].svelte +++ b/src/routes/blog/post/[slug].svelte @@ -3,13 +3,15 @@ import type { Load } from '@sveltejs/kit' export const prerender = true - // export const router = false - export const load: Load = async ({ page, fetch }) => { - const slug: string = page.params.slug ?? '' + export const load: Load = async ({ params, fetch }) => { + const slug: string = params.slug ?? '' const resp = await fetch(`/blog/post/${slug}.json`) - if (resp.status === 404) return + if (resp.status === 404) + return { + status: 404, + } const body: APIBlogPost = await resp.json() @@ -23,13 +25,15 @@

{title}

@@ -38,16 +42,6 @@