diff --git a/src/App.vue b/src/App.vue index 2f0b073..ef2db36 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,7 +2,7 @@
- +
+ @@ -22,23 +23,47 @@ import Navbar from "@/components/Navbar/index.vue" import Footer from "@/components/Footer.vue" import ArchiveBanner from "./components/ArchiveBanner.vue" +import BackToTop from "@/components/BackToTop.vue" export default { name: "App", components: { Navbar, Footer, - ArchiveBanner + ArchiveBanner, + BackToTop }, data() { return { showBanner: true, + darkMode: localStorage.getItem('darkMode') === 'true', footer: [ { text: "Home", url: "/" }, { text: "Promises", url: "/promises" }, { text: "Politicians", url: "/politicians" }, ], } + }, + watch: { + darkMode(val) { + localStorage.setItem('darkMode', val) + this.applyTheme() + } + }, + mounted() { + this.applyTheme() + }, + methods: { + toggleDarkMode() { + this.darkMode = !this.darkMode + }, + applyTheme() { + if (this.darkMode) { + document.body.classList.add('dark') + } else { + document.body.classList.remove('dark') + } + } } }; @@ -60,4 +85,15 @@ export default { .title { font-size: 36px; } + +body.dark { + background-color: #121212; + color: #e0e0e0; +} + +body.dark #navbar, +body.dark #footer { + background-color: #1e1e1e; + color: #e0e0e0; +} diff --git a/src/components/BackToTop.vue b/src/components/BackToTop.vue new file mode 100644 index 0000000..76cbe2b --- /dev/null +++ b/src/components/BackToTop.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/Footer.vue b/src/components/Footer.vue index 8c62a34..574d56c 100644 --- a/src/components/Footer.vue +++ b/src/components/Footer.vue @@ -63,6 +63,9 @@ export default { padding: 10px 5px 20px; color: white } +body.dark #footer { + background-color: #1e1e1e; +} .footer-link { color: white; text-decoration: none; diff --git a/src/components/Navbar/Desktop.vue b/src/components/Navbar/Desktop.vue index 5d616be..b1b05a4 100644 --- a/src/components/Navbar/Desktop.vue +++ b/src/components/Navbar/Desktop.vue @@ -52,6 +52,14 @@ Submit A Promise + + + @@ -59,7 +67,7 @@