From cd69584b6692f9d844c4b10c2d55614f1d31df71 Mon Sep 17 00:00:00 2001 From: DrMint <29893320+DrMint@users.noreply.github.com> Date: Thu, 21 Sep 2023 21:32:41 +0200 Subject: [PATCH] Improve everything --- .vscode/settings.json | 3 +- TODO.md | 2 + bun.lockb | Bin 230859 -> 242101 bytes public/css/global.css | 28 -- public/css/tippy.css | 88 ++++ public/robots.txt | 2 + src/components/Button.astro | 20 - src/components/MenuPanel.astro | 262 ------------ src/components/Navbar.astro | 75 ---- src/env.d.ts | 2 + src/layouts/Html.astro | 159 ------- src/pages/[locale]/archives.astro | 6 +- src/pages/[locale]/contents.astro | 15 + src/pages/[locale]/index.astro | 10 +- src/pages/[locale]/library.astro | 6 +- .../_components/AppLayout}/AppLayout.astro | 133 ++++-- .../AppLayout/components/MenuPanel.astro | 162 ++++++++ .../components/MenuPanelReduced.astro | 159 +++++++ .../AppLayout/components/Navbar.astro | 93 +++++ .../components/ReduceToggleButton.astro | 45 ++ .../components/ThemeToggleButton.astro | 87 ++++ src/pages/_components/HorizontalLine.astro | 17 + src/pages/_components/Html.astro | 388 ++++++++++++++++++ .../_components}/NavOption.astro | 56 +-- src/pages/_components/NavOptionIcon.astro | 93 +++++ src/utils/Elementos.ts | 20 +- src/utils/astro.ts | 8 + src/utils/events.ts | 5 + .../micro-observables/withPersistence.ts | 6 +- 29 files changed, 1330 insertions(+), 620 deletions(-) create mode 100644 TODO.md delete mode 100644 public/css/global.css create mode 100644 public/css/tippy.css create mode 100644 public/robots.txt delete mode 100644 src/components/Button.astro delete mode 100644 src/components/MenuPanel.astro delete mode 100644 src/components/Navbar.astro create mode 100644 src/env.d.ts delete mode 100644 src/layouts/Html.astro create mode 100644 src/pages/[locale]/contents.astro rename src/{layouts => pages/_components/AppLayout}/AppLayout.astro (54%) create mode 100644 src/pages/_components/AppLayout/components/MenuPanel.astro create mode 100644 src/pages/_components/AppLayout/components/MenuPanelReduced.astro create mode 100644 src/pages/_components/AppLayout/components/Navbar.astro create mode 100644 src/pages/_components/AppLayout/components/ReduceToggleButton.astro create mode 100644 src/pages/_components/AppLayout/components/ThemeToggleButton.astro create mode 100644 src/pages/_components/HorizontalLine.astro create mode 100644 src/pages/_components/Html.astro rename src/{components => pages/_components}/NavOption.astro (70%) create mode 100644 src/pages/_components/NavOptionIcon.astro create mode 100644 src/utils/astro.ts create mode 100644 src/utils/events.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 8e0663d..9a4c2b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "editor.rulers": [100], - "editor.tabSize": 2 + "editor.tabSize": 2, + "typescript.preferences.importModuleSpecifier": "non-relative" } diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..0cdd348 --- /dev/null +++ b/TODO.md @@ -0,0 +1,2 @@ +- [ ] Check why I'm getting NS_BINDING_ABORTED on fonts when fetched in the network browser dev tool tab +- [ ] Add a background when opening menus in mobile mode \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index fa563099c018519bb4cea6c02c6ff9c2e7531261..85ca21bfb4c6505a964946e8504d24d9c2b00e52 100755 GIT binary patch delta 61296 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 YPm~%6nwTPeMVoA;x&?z%rIF7619^s)@c;k- delta 53855 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 diff --git a/public/css/global.css b/public/css/global.css deleted file mode 100644 index c3d0c93..0000000 --- a/public/css/global.css +++ /dev/null @@ -1,28 +0,0 @@ -/* -original light mode -color: #fff1e0; - color: #ffedd8; - color: #f0d1b3; - color: #c0845e; - color: #9c6644; - color: #1b1811; */ - -/* - original dark mode - color: #191914; - color: #26221e; - color: #2c2803; - color: #392d22; - color: #c0845e; - color: #ebeae7; */ - -/* new version using https://leonardocolor.io/theme.html */ - -:where(button) { - background-color: inherit; - color: inherit; - border: initial; - padding: initial; - margin: initial; - cursor: pointer; -} diff --git a/public/css/tippy.css b/public/css/tippy.css new file mode 100644 index 0000000..0d4fe75 --- /dev/null +++ b/public/css/tippy.css @@ -0,0 +1,88 @@ +.tippy-box[data-animation="fade"][data-state="hidden"] { + opacity: 0; +} +[data-tippy-root] { + max-width: calc(100vw - 10px); +} +.tippy-box { + position: relative; + background-color: var(--color-elevation-1); + color: var(--color-base-1000); + border-radius: 0.5rem; + box-shadow: 0 20px 25px -5px var(--color-shadow), + 0 0 10px -6px var(--color-shadow); + transition-property: transform, visibility, opacity; +} +.tippy-box[data-placement^="top"] > .tippy-arrow { + bottom: 0; +} +.tippy-box[data-placement^="top"] > .tippy-arrow:before { + bottom: -7px; + left: 0; + border-width: 8px 8px 0; + border-top-color: initial; + transform-origin: center top; +} +.tippy-box[data-placement^="bottom"] > .tippy-arrow { + top: 0; +} +.tippy-box[data-placement^="bottom"] > .tippy-arrow:before { + top: -7px; + left: 0; + border-width: 0 8px 8px; + border-bottom-color: initial; + transform-origin: center bottom; +} +.tippy-box[data-placement^="left"] > .tippy-arrow { + right: 0; +} +.tippy-box[data-placement^="left"] > .tippy-arrow:before { + border-width: 8px 0 8px 8px; + border-left-color: initial; + right: -7px; + transform-origin: center left; +} +.tippy-box[data-placement^="right"] > .tippy-arrow { + left: 0; +} +.tippy-box[data-placement^="right"] > .tippy-arrow:before { + left: -7px; + border-width: 8px 8px 8px 0; + border-right-color: initial; + transform-origin: center right; +} +.tippy-box[data-inertia][data-state="visible"] { + transition-timing-function: cubic-bezier(0.54, 1.5, 0.38, 1.11); +} +.tippy-arrow { + width: 16px; + height: 16px; + color: var(--color-elevation-1); +} +.tippy-arrow:before { + content: ""; + position: absolute; + border-color: transparent; + border-style: solid; +} +.tippy-content { + position: relative; + padding: 1rem 1.5rem; + z-index: 1; +} +.tippy-box[data-placement^="top"] { + transform-origin: bottom; +} +.tippy-box[data-placement^="bottom"] { + transform-origin: top; +} +.tippy-box[data-placement^="left"] { + transform-origin: right; +} +.tippy-box[data-placement^="right"] { + transform-origin: left; +} +.tippy-box[data-state="hidden"] { + transform: scale(0.8); + opacity: 0; +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/src/components/Button.astro b/src/components/Button.astro deleted file mode 100644 index 6d0c52b..0000000 --- a/src/components/Button.astro +++ /dev/null @@ -1,20 +0,0 @@ ---- -import { Icon } from "astro-icon/components"; -import { getLocalizedUrl } from "utils/urls"; -interface Props { - href: string; - isActive?: boolean; - text?: string; - icon?: string; -} - -const { locale } = Astro.params; -const { href, text, icon, isActive } = Astro.props; ---- - - - {text && text} - {icon && } - - - diff --git a/src/components/MenuPanel.astro b/src/components/MenuPanel.astro deleted file mode 100644 index f3cef9c..0000000 --- a/src/components/MenuPanel.astro +++ /dev/null @@ -1,262 +0,0 @@ ---- -import { Icon } from "astro-icon/components"; -import { getLocalizedUrl } from "utils/urls"; -import { CookieNames } from "utils/cookies"; -import NavOption from "./NavOption.astro"; - -const { locale = "en" } = Astro.params; -const isReduced = - Astro.cookies.get(CookieNames.MENU_PANEL_REDUCED)?.boolean() ?? false; -const themeColors = - Astro.cookies.get(CookieNames.THEME_COLOR)?.value ?? "theme-color-light"; ---- - -
- - -

Accord’s Library

- - - - - - - - - - - - - - - - - - - - - -

- This website’s content is made available under CC-BY-SA unless otherwise noted. -

- -
- - - -
- -

- Accord’s Library is not affiliated with or endorsed by SQUARE ENIX CO. LTD. - All game assets and promotional materials belongs to © SQUARE ENIX CO. LTD. -

- - -
- - - - diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro deleted file mode 100644 index 6b732de..0000000 --- a/src/components/Navbar.astro +++ /dev/null @@ -1,75 +0,0 @@ ---- -import { Icon } from "astro-icon/components"; -interface Props { - title: string; - showSubPanel: boolean; -} - -const { title, showSubPanel } = Astro.props; ---- - -
- -

{title}

-
- { - showSubPanel && ( - - ) - } -
-
- - diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..5b0a7e0 --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// \ No newline at end of file diff --git a/src/layouts/Html.astro b/src/layouts/Html.astro deleted file mode 100644 index ca61133..0000000 --- a/src/layouts/Html.astro +++ /dev/null @@ -1,159 +0,0 @@ ---- -import { CookieNames } from "utils/cookies"; -interface Props { - title: string; -} - -const { title } = Astro.props; -const themeColors = - Astro.cookies.get(CookieNames.THEME_COLOR)?.value ?? "theme-color-light"; ---- - - - - - - - - {title} - - - - - - - - - - - - - diff --git a/src/pages/[locale]/archives.astro b/src/pages/[locale]/archives.astro index ffd0a1a..acc7d95 100644 --- a/src/pages/[locale]/archives.astro +++ b/src/pages/[locale]/archives.astro @@ -1,7 +1,11 @@ --- -import AppLayout from "layouts/AppLayout.astro"; +import AppLayout from "pages/_components/AppLayout/AppLayout.astro"; --- +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} +
Besides physical medias, we also archive digital contents such as websites, diff --git a/src/pages/[locale]/contents.astro b/src/pages/[locale]/contents.astro new file mode 100644 index 0000000..1038adb --- /dev/null +++ b/src/pages/[locale]/contents.astro @@ -0,0 +1,15 @@ +--- +import AppLayout from "pages/_components/AppLayout/AppLayout.astro"; +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + +

Contents

+
+ All the contents (textual, audio, and video) from the Library or other + online sources. +
+
diff --git a/src/pages/[locale]/index.astro b/src/pages/[locale]/index.astro index b02acd5..cb8e7cd 100644 --- a/src/pages/[locale]/index.astro +++ b/src/pages/[locale]/index.astro @@ -1,8 +1,12 @@ --- import { Icon } from "astro-icon/components"; -import AppLayout from "layouts/AppLayout.astro"; +import AppLayout from "pages/_components/AppLayout/AppLayout.astro"; --- +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} +
+{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + diff --git a/src/pages/_components/AppLayout/components/MenuPanelReduced.astro b/src/pages/_components/AppLayout/components/MenuPanelReduced.astro new file mode 100644 index 0000000..a1d1597 --- /dev/null +++ b/src/pages/_components/AppLayout/components/MenuPanelReduced.astro @@ -0,0 +1,159 @@ +--- +import { Icon } from "astro-icon/components"; +import { getLocalizedUrl } from "utils/urls"; +import { CookieNames } from "utils/cookies"; +import NavOptionIcon from "pages/_components/NavOptionIcon.astro"; +import { parseCookie } from "utils/astro"; +import HorizontalLine from "pages/_components/HorizontalLine.astro"; +import ReduceToggleButton from "./ReduceToggleButton.astro"; + +const { locale = "en" } = Astro.params; + +const themeColors = parseCookie( + Astro.cookies.get(CookieNames.THEME_COLOR), + "theme-color-light" +); +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + + +{ + /* -------------------------------------------- JS -------------------------------------------- */ +} + + diff --git a/src/pages/_components/AppLayout/components/Navbar.astro b/src/pages/_components/AppLayout/components/Navbar.astro new file mode 100644 index 0000000..ed1d0ef --- /dev/null +++ b/src/pages/_components/AppLayout/components/Navbar.astro @@ -0,0 +1,93 @@ +--- +import { Icon } from "astro-icon/components"; +interface Props { + title: string; + showSubPanel: boolean; +} + +const { title, showSubPanel } = Astro.props; +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + +

{title}

+
+ { + showSubPanel && ( + + ) + } +
+ +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + + +{ + /* -------------------------------------------- JS -------------------------------------------- */ +} + + diff --git a/src/pages/_components/AppLayout/components/ReduceToggleButton.astro b/src/pages/_components/AppLayout/components/ReduceToggleButton.astro new file mode 100644 index 0000000..797c9b6 --- /dev/null +++ b/src/pages/_components/AppLayout/components/ReduceToggleButton.astro @@ -0,0 +1,45 @@ +--- +import { Icon } from "astro-icon/components"; + +interface Props { + icon: string; +} + +const { icon } = Astro.props; +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + + +{ + /* -------------------------------------------- JS -------------------------------------------- */ +} + + diff --git a/src/pages/_components/AppLayout/components/ThemeToggleButton.astro b/src/pages/_components/AppLayout/components/ThemeToggleButton.astro new file mode 100644 index 0000000..fe619cf --- /dev/null +++ b/src/pages/_components/AppLayout/components/ThemeToggleButton.astro @@ -0,0 +1,87 @@ +--- +import { Icon } from "astro-icon/components"; +import { parseCookie } from "utils/astro"; +import { CookieNames } from "utils/cookies"; + +const themeColors = parseCookie( + Astro.cookies.get(CookieNames.THEME_COLOR), + "theme-color-light" +); +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + + +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + + +{ + /* -------------------------------------------- JS -------------------------------------------- */ +} + + diff --git a/src/pages/_components/HorizontalLine.astro b/src/pages/_components/HorizontalLine.astro new file mode 100644 index 0000000..396ea05 --- /dev/null +++ b/src/pages/_components/HorizontalLine.astro @@ -0,0 +1,17 @@ +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + +
+ +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + diff --git a/src/pages/_components/Html.astro b/src/pages/_components/Html.astro new file mode 100644 index 0000000..c857f3d --- /dev/null +++ b/src/pages/_components/Html.astro @@ -0,0 +1,388 @@ +--- +import { parseCookie } from "utils/astro"; +import { CookieNames } from "utils/cookies"; + +interface Props { + title: string; +} + +const { title } = Astro.props; +const themeColors = parseCookie( + Astro.cookies.get(CookieNames.THEME_COLOR), + "theme-color-light" +); +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + + + + + {title} + + + + + + + + + + + +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + diff --git a/src/components/NavOption.astro b/src/pages/_components/NavOption.astro similarity index 70% rename from src/components/NavOption.astro rename to src/pages/_components/NavOption.astro index f40b958..1dbd8df 100644 --- a/src/components/NavOption.astro +++ b/src/pages/_components/NavOption.astro @@ -18,35 +18,30 @@ const currentPath = new URL(Astro.request.url).pathname.slice( const isActive = currentPath.startsWith(href); --- +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + {icon && } -
-

+

+

{title}

-

- {subtitle} -

+ {subtitle &&

{subtitle}

}
+{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + diff --git a/src/pages/_components/NavOptionIcon.astro b/src/pages/_components/NavOptionIcon.astro new file mode 100644 index 0000000..2fc3ae1 --- /dev/null +++ b/src/pages/_components/NavOptionIcon.astro @@ -0,0 +1,93 @@ +--- +import { Icon } from "astro-icon/components"; +import { getLocalizedUrl } from "utils/urls"; +interface Props { + href: string; + icon?: string; + title: string | null | undefined; + subtitle?: string | null | undefined; +} + +const { locale } = Astro.params; +const { href, icon, title, subtitle } = Astro.props; + +const currentPath = new URL(Astro.request.url).pathname.slice( + `/${locale}`.length +); + +const isActive = currentPath.startsWith(href); +--- + +{ + /* ------------------------------------------- HTML ------------------------------------------- */ +} + + + {icon && } +
+

+ {title} +

+ {subtitle &&

{subtitle}

} +
+
+ +{ + /* ------------------------------------------- CSS -------------------------------------------- */ +} + + diff --git a/src/utils/Elementos.ts b/src/utils/Elementos.ts index 0cf95f2..90ee289 100644 --- a/src/utils/Elementos.ts +++ b/src/utils/Elementos.ts @@ -1,13 +1,13 @@ import type { Observable } from "./micro-observables"; export class Elementos { - readonly element: HTMLElement; + readonly element: NodeListOf; constructor(readonly selector: string) { - this.element = document.querySelector(selector)!; + this.element = document.querySelectorAll(selector)!; } onClick(listener: () => void) { - this.element.addEventListener("click", listener); + this.element.forEach((e) => e.addEventListener("click", listener)); } setClass( @@ -15,12 +15,14 @@ export class Elementos { observable: Observable ) { observable.subscribe((val) => { - if (typeof className === "string") { - this.element.classList.toggle(className, val); - } else { - this.element.classList.toggle(className.ifFalse, val === false); - this.element.classList.toggle(className.ifTrue, val === true); - } + this.element.forEach((e) => { + if (typeof className === "string") { + e.classList.toggle(className, val); + } else { + e.classList.toggle(className.ifFalse, val === false); + e.classList.toggle(className.ifTrue, val === true); + } + }); }); } } diff --git a/src/utils/astro.ts b/src/utils/astro.ts new file mode 100644 index 0000000..4176051 --- /dev/null +++ b/src/utils/astro.ts @@ -0,0 +1,8 @@ +import { type AstroCookies } from "astro"; + +type AstroCookie = ReturnType; + +export const parseCookie = (cookies: AstroCookie, defaultValue: T): T => { + const value: T | null = JSON.parse(cookies?.value ?? "null"); + return value ?? defaultValue; +}; diff --git a/src/utils/events.ts b/src/utils/events.ts new file mode 100644 index 0000000..a0de62f --- /dev/null +++ b/src/utils/events.ts @@ -0,0 +1,5 @@ +export const customEvents = { + mainPanel: { + reduce: { toggle: "mainPanel.reduce.toggle" }, + }, +}; diff --git a/src/utils/micro-observables/withPersistence.ts b/src/utils/micro-observables/withPersistence.ts index 124625a..a4dc90a 100644 --- a/src/utils/micro-observables/withPersistence.ts +++ b/src/utils/micro-observables/withPersistence.ts @@ -5,8 +5,10 @@ export const observableWithPersistence = ( cookieKey: string, defaultValue: T ): WritableObservable => { - const valueFromCookie = Cookies.get(cookieKey) as T | undefined; + const valueFromCookie: T | null = JSON.parse( + Cookies.get(cookieKey) ?? "null" + ); const obs = observable(valueFromCookie ?? defaultValue); - obs.subscribe((val) => Cookies.set(cookieKey, val as string)); + obs.subscribe((val) => Cookies.set(cookieKey, JSON.stringify(val))); return obs; };