diff options
-rw-r--r-- | package.json | 3 | ||||
-rw-r--r-- | pages/post/[id].tsx | 10 | ||||
-rw-r--r-- | styles/layout.css | 14 | ||||
-rw-r--r-- | yarn.lock | 18 |
4 files changed, 39 insertions, 6 deletions
diff --git a/package.json b/package.json index 4f17d12..f4c4d42 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "react-markdown": "^6.0.0", "react-syntax-highlighter": "^15.4.3", "rehype-raw": "^5.1.0", - "remark-gfm": "^1.0.0" + "remark-gfm": "^1.0.0", + "use-mousetrap": "^1.0.4" }, "devDependencies": { "@types/node": "^14.14.36", diff --git a/pages/post/[id].tsx b/pages/post/[id].tsx index 70347c8..35a41e6 100644 --- a/pages/post/[id].tsx +++ b/pages/post/[id].tsx @@ -1,7 +1,7 @@ import Head from 'next/head'; import { readdirSync, readFileSync } from 'fs'; import { join } from 'path'; -import { ReactNode } from 'react'; +import { CSSProperties, ReactNode, useState } from 'react'; import ReactMarkdown from 'react-markdown'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import rehypeRaw from 'rehype-raw'; @@ -76,6 +76,12 @@ export function RenderedArticle(props: { content: string; }) { />; } +var collapsed = false; +function toggle() { + collapsed = !collapsed; + document.documentElement.style.setProperty('--collapse-horizontal-gap', Number(collapsed).toString()); +} + export default function Post(props: { content: string; meta: ArticleMeta; @@ -89,7 +95,7 @@ export default function Post(props: { </Head> <div className='centeredPage'> <div className='titleWrapper'> - <h1>{props.meta.title}</h1> + <h1 onClick={toggle}>{props.meta.title}</h1> <p className='subtile'>{props.meta.subtitle}</p> {props.meta.tags && <Tags tags={props.meta.tags} />} </div> diff --git a/styles/layout.css b/styles/layout.css index 70f94dc..96a3604 100644 --- a/styles/layout.css +++ b/styles/layout.css @@ -1,19 +1,23 @@ :root { - --nav-width: 200px; + --collapse-horizontal-gap: 0; + --nav-width: calc(200px * (1 - var(--collapse-horizontal-gap))) !important; --page-width: 700px; --page-margins: 24px; } .centeredPage { + transition-property: gap, max-width; + transition-duration: 500ms; + max-width: calc(var(--nav-width) + var(--page-width) + var(--page-margins)); margin: 0 auto; margin-top: 96px; padding: 0 var(--page-margins); display: grid; - gap: var(--page-margins); - grid-template-columns: var(--nav-width) 1fr; grid-auto-rows: auto; + + gap: var(--page-margins) calc((1 - var(--collapse-horizontal-gap)) * var(--page-margins)); } .titleWrapper { @@ -28,6 +32,10 @@ .navAreaWrapper { grid-column: 1; grid-row: 2; + + transition-property: width; + transition-duration: 500ms; + width: var(--nav-width); } .navAreaWrapper > .sticky { position: sticky; @@ -200,6 +200,11 @@ dependencies: "@types/unist" "*" +"@types/mousetrap@^1.6.4": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.8.tgz#448929e6dc21126392830465fdb9d4a2cfc16a88" + integrity sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA== + "@types/node@^14.14.36": version "14.14.36" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.36.tgz#5637905dbb15c30a33a3c65b9ef7c20e3c85ebad" @@ -1503,6 +1508,11 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +mousetrap@^1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" + integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2365,6 +2375,14 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-mousetrap@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/use-mousetrap/-/use-mousetrap-1.0.4.tgz#9ec635821140e702cc873f41880a5cbd46d1d09a" + integrity sha512-+limiYsm2e1Xs/tnwfEqSCcvh6XTcfLTpCoJFA+mu+btInnlrkFkZ48DLwVGejJdvP5H3Ge79t0bcRKepncvbQ== + dependencies: + "@types/mousetrap" "^1.6.4" + mousetrap "^1.6.5" + use-subscription@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" |