1
0
Fork 0

Apply ESLint rules

This commit is contained in:
Moritz Ruth 2021-12-18 19:45:13 +01:00
parent 73c361344a
commit 7ad56aa98b
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
15 changed files with 79 additions and 58 deletions

View file

@ -5,7 +5,7 @@
"dev": "vite --host", "dev": "vite --host",
"build": "vite-ssg build", "build": "vite-ssg build",
"start": "vite preview", "start": "vite preview",
"lint": "eslint . --fix" "lint": "eslint . --fix --ignore-path .gitignore"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^2.0.1", "@vitejs/plugin-vue": "^2.0.1",

View file

@ -31,7 +31,6 @@
overflow-x: hidden; overflow-x: hidden;
width: 100vw; width: 100vw;
min-height: 100vh; min-height: 100vh;
font-size: 17px;
} }
.centerLoadingText { .centerLoadingText {
@ -64,8 +63,8 @@
<script lang="ts"> <script lang="ts">
import { computed, ref } from "vue" import { computed, ref } from "vue"
import { useIntervalFn, useWindowSize, whenever } from "@vueuse/core" import { useIntervalFn, useWindowSize, whenever } from "@vueuse/core"
import { pageComponentLoading } from "./store"
import { useRouter } from "vue-router" import { useRouter } from "vue-router"
import { pageComponentLoading } from "./store"
export default { export default {
name: "App", name: "App",
@ -75,7 +74,7 @@
const START_TRANSITION_DURATION = 200 const START_TRANSITION_DURATION = 200
const START_TRANSITION_DELAY = 0 const START_TRANSITION_DELAY = 0
const loadingTexts = ref<Array<{ x: number, y: number }>>([]) const loadingTexts = ref<Array<{ x: number; y: number }>>([])
const stopLoading = () => { const stopLoading = () => {
isLoadingScreenActive.value = false isLoadingScreenActive.value = false
@ -130,32 +129,30 @@
return { return {
"--tw-bg-opacity": 1, "--tw-bg-opacity": 1,
"--tw-backdrop-blur": "blur(20px)", "--tw-backdrop-blur": "blur(20px)",
transitionDelay: `${START_TRANSITION_DELAY}ms`, "transitionDelay": `${START_TRANSITION_DELAY}ms`,
transition: `background ${START_TRANSITION_DURATION}ms ease, backdrop-filter 100ms linear` "transition": `background ${START_TRANSITION_DURATION}ms ease, backdrop-filter 100ms linear`
}
} }
} else {
return { return {
"--tw-bg-opacity": 0, "--tw-bg-opacity": 0,
"--tw-backdrop-blur": 0, "--tw-backdrop-blur": 0,
transition: "background 200ms ease, backdrop-filter 200ms linear", "transition": "background 200ms ease, backdrop-filter 200ms linear",
pointerEvents: "none" "pointerEvents": "none"
}
} }
}), }),
loadingOverlayContentStyle: computed(() => { loadingOverlayContentStyle: computed(() => {
if (isLoadingScreenActive.value) { if (isLoadingScreenActive.value) {
return { return {
opacity: 1, opacity: 1,
transition: `opacity 2s ease-out`, transition: "opacity 2s ease-out",
transitionDelay: "1s" transitionDelay: "1s"
} }
} else { }
return { return {
opacity: 0, opacity: 0,
transition: `opacity 100ms ease-out`, transition: "opacity 100ms ease-out",
pointerEvents: "none" pointerEvents: "none"
} }
}
}) })
} }
} }

View file

@ -1,6 +1,6 @@
<template> <template>
<NotFoundPage v-if="post === null" object-name="post" back-target="/blog"/> <NotFoundPage v-if="post === null" object-name="post" back-target="/blog"/>
<TopBarLayout title="Blog" back-target="/blog" v-else> <TopBarLayout v-else title="Blog" back-target="/blog">
<article> <article>
<h1 class="font-bold text-3xl sm:text-3xl sm:text-center font-special"> <h1 class="font-bold text-3xl sm:text-3xl sm:text-center font-special">
{{ post.title }} {{ post.title }}
@ -28,9 +28,9 @@
</style> </style>
<script lang="ts"> <script lang="ts">
import TopBarLayout from "./TopBarLayout.vue"
import { getPostBySlug } from "../posts"
import { useRoute } from "vue-router" import { useRoute } from "vue-router"
import { getPostBySlug } from "../posts"
import TopBarLayout from "./TopBarLayout.vue"
import Prose from "./Prose.vue" import Prose from "./Prose.vue"
import XSpacer from "./XSpacer.vue" import XSpacer from "./XSpacer.vue"
import NotFoundPage from "./NotFoundPage.vue" import NotFoundPage from "./NotFoundPage.vue"

View file

@ -19,8 +19,8 @@
</style> </style>
<script> <script>
import ArrowLeftIcon from "~icons/ph/arrow-left"
import XSpacer from "../components/XSpacer.vue" import XSpacer from "../components/XSpacer.vue"
import ArrowLeftIcon from "~icons/ph/arrow-left"
export default { export default {
name: "NotFoundPage", name: "NotFoundPage",

View file

@ -9,11 +9,12 @@
<script> <script>
import { $fetch } from "ohmyfetch" import { $fetch } from "ohmyfetch"
// eslint-disable-next-line no-promise-executor-return
const waitForAnimationFrame = () => new Promise(resolve => requestAnimationFrame(resolve)) const waitForAnimationFrame = () => new Promise(resolve => requestAnimationFrame(resolve))
const asyncSetup = async src => { const asyncSetup = async src => {
const blob = await $fetch(src) const blob = await $fetch(src)
await waitForAnimationFrame() await waitForAnimationFrame() // makes sure the browser is idle
return { return {
objectUrl: URL.createObjectURL(blob) objectUrl: URL.createObjectURL(blob)
} }
@ -36,9 +37,8 @@
return { return {
objectUrl: props.src objectUrl: props.src
} }
} else { }
return asyncSetup(props.src) return asyncSetup(props.src)
} }
} }
}
</script> </script>

View file

@ -1,7 +1,8 @@
<template> <template>
<div class="h-100vh flex flex-col justify-between"> <div class="h-100vh flex flex-col justify-between">
<div class="w-full max-w-1000px mx-auto"> <div class="w-full max-w-1000px mx-auto">
<div class="bg-background bg-opacity-70 backdrop-filter backdrop-blur-sm backdrop-saturate-200 px-6 py-4 sm:py-8 text-light-900 sticky top-0 z-10 flex items-center justify-between"> <div class="bg-background bg-opacity-70 backdrop-filter backdrop-blur-sm backdrop-saturate-200 px-6 py-4 sm:py-8 text-light-900 sticky top-0 z-10
flex items-center justify-between">
<div class="w-0"> <div class="w-0">
<router-link :to="backTarget" class="w-8 flex items-center group relative"> <router-link :to="backTarget" class="w-8 flex items-center group relative">
<ArrowLeftIcon class="text-2xl"/> <ArrowLeftIcon class="text-2xl"/>
@ -35,12 +36,13 @@
</style> </style>
<script> <script>
import ArrowLeftIcon from "~icons/ph/arrow-left"
import { useHead } from "@vueuse/head" import { useHead } from "@vueuse/head"
import ArrowLeftIcon from "~icons/ph/arrow-left"
export default { export default {
name: "TopBarLayout", name: "TopBarLayout",
components: { ArrowLeftIcon }, components: { ArrowLeftIcon },
inheritAttrs: false,
props: { props: {
backTarget: { backTarget: {
type: String, type: String,

View file

@ -3,12 +3,10 @@
</template> </template>
<script> <script>
import ArrowLeftIcon from "~icons/ph/arrow-left"
import XSpacer from "../components/XSpacer.vue"
import NotFoundPage from "../components/NotFoundPage.vue" import NotFoundPage from "../components/NotFoundPage.vue"
export default { export default {
name: "FallbackPage", name: "FallbackPage",
components: { NotFoundPage, XSpacer, ArrowLeftIcon } components: { NotFoundPage }
} }
</script> </script>

View file

@ -1,6 +1,6 @@
<template> <template>
<NotFoundPage v-if="post === null" object-name="post" back-target="/blog"/> <NotFoundPage v-if="post === null" object-name="post" back-target="/blog"/>
<TopBarLayout title="Blog" back-target="/blog" v-else> <TopBarLayout v-else title="Blog" back-target="/blog">
<article> <article>
<h1 class="font-bold text-3xl sm:text-3xl sm:text-center font-special"> <h1 class="font-bold text-3xl sm:text-3xl sm:text-center font-special">
{{ post.title }} {{ post.title }}
@ -28,9 +28,9 @@
</style> </style>
<script lang="ts"> <script lang="ts">
import { useRoute } from "vue-router"
import TopBarLayout from "../../components/TopBarLayout.vue" import TopBarLayout from "../../components/TopBarLayout.vue"
import { getPostBySlug } from "../../posts" import { getPostBySlug } from "../../posts"
import { useRoute } from "vue-router"
import Prose from "../../components/Prose.vue" import Prose from "../../components/Prose.vue"
import XSpacer from "../../components/XSpacer.vue" import XSpacer from "../../components/XSpacer.vue"
import NotFoundPage from "../../components/NotFoundPage.vue" import NotFoundPage from "../../components/NotFoundPage.vue"

View file

@ -30,14 +30,14 @@
</style> </style>
<script> <script>
import { computed } from "vue"
import { useRoute } from "vue-router"
import TopBarLayout from "../components/TopBarLayout.vue" import TopBarLayout from "../components/TopBarLayout.vue"
import LinkCardList from "../components/LinkCardList.vue" import LinkCardList from "../components/LinkCardList.vue"
import BlurredBlobCanvas from "../components/BlurredBlobCanvas.vue" import BlurredBlobCanvas from "../components/BlurredBlobCanvas.vue"
import MatrixIcon from "~icons/simple-icons/matrix" import MatrixIcon from "~icons/simple-icons/matrix"
import TwitterIcon from "~icons/simple-icons/twitter" import TwitterIcon from "~icons/simple-icons/twitter"
import EmailIcon from "~icons/carbon/email" import EmailIcon from "~icons/carbon/email"
import { computed } from "vue"
import { useRoute } from "vue-router"
export default { export default {
name: "ContactPage", name: "ContactPage",

View file

@ -93,10 +93,10 @@
</style> </style>
<script> <script>
import { useHead } from "@vueuse/head"
import BlurredBlobCanvas from "../components/BlurredBlobCanvas.vue" import BlurredBlobCanvas from "../components/BlurredBlobCanvas.vue"
import XSpacer from "../components/XSpacer.vue" import XSpacer from "../components/XSpacer.vue"
import LinkCardList from "../components/LinkCardList.vue" import LinkCardList from "../components/LinkCardList.vue"
import { useHead } from "@vueuse/head"
const NAVIGATION_LINKS = [ const NAVIGATION_LINKS = [
{ {

View file

@ -34,14 +34,12 @@
<script lang="ts"> <script lang="ts">
import TopBarLayout from "../components/TopBarLayout.vue" import TopBarLayout from "../components/TopBarLayout.vue"
import { photos } from "../photos" import { photos } from "../photos"
import XSpacer from "../components/XSpacer.vue"
import SuspendingImage from "../components/SuspendingImage.vue" import SuspendingImage from "../components/SuspendingImage.vue"
export default { export default {
name: "PhotographyPage", name: "PhotographyPage",
components: { SuspendingImage, XSpacer, TopBarLayout }, components: { SuspendingImage, TopBarLayout },
setup() { setup() {
return { return {
photos photos
} }

View file

@ -12,12 +12,11 @@
<script> <script>
import TopBarLayout from "../components/TopBarLayout.vue" import TopBarLayout from "../components/TopBarLayout.vue"
import ArrowRightIcon from "~icons/ph/arrow-right"
import LinkCardList from "../components/LinkCardList.vue" import LinkCardList from "../components/LinkCardList.vue"
export default { export default {
name: "ProjectsPage", name: "ProjectsPage",
components: { LinkCardList, TopBarLayout, ArrowRightIcon }, components: { LinkCardList, TopBarLayout },
setup() { setup() {
const projects = [ const projects = [
{ {

View file

@ -8,7 +8,10 @@
<h2>1. Generelles</h2> <h2>1. Generelles</h2>
<ol> <ol>
<li>Die nachfolgenden Bestimmungen gelten für alle zwischen Moritz Ruth und dem Auftraggeber geschlossenen Verträge.</li> <li>Die nachfolgenden Bestimmungen gelten für alle zwischen Moritz Ruth und dem Auftraggeber geschlossenen Verträge.</li>
<li>Abweichende, widersprüchliche oder ergänzende Allgemeine Geschäftsbedingungen des Auftraggebers gelten nur nach ausdrücklicher, schriftlicher Zustimmung von Moritz Ruth.</li> <li>
Abweichende, widersprüchliche oder ergänzende Allgemeine Geschäftsbedingungen des Auftraggebers gelten nur nach ausdrücklicher,
schriftlicher Zustimmung von Moritz Ruth.
</li>
<li>Änderungen und Ergänzungen des Vertrags bedürfen der Schriftform, um wirksam zu sein.</li> <li>Änderungen und Ergänzungen des Vertrags bedürfen der Schriftform, um wirksam zu sein.</li>
</ol> </ol>
</section> </section>
@ -18,8 +21,14 @@
<li>Moritz Ruth führt den Auftrag in eigener Verantwortung durch und hat Gestaltungsfreiheit im Rahmen dessen.</li> <li>Moritz Ruth führt den Auftrag in eigener Verantwortung durch und hat Gestaltungsfreiheit im Rahmen dessen.</li>
<li>Handelt es sich um einen Werkvertrag, sind in der Konzeptions- und Entwurfsphase zwei Korrekturschleifen zulässig.</li> <li>Handelt es sich um einen Werkvertrag, sind in der Konzeptions- und Entwurfsphase zwei Korrekturschleifen zulässig.</li>
<li>Die Mehrkosten durch eventuelle, von der Leistungsbeschreibung im Angebot abweichende Änderungswünsche hat der Auftraggeber zu tragen.</li> <li>Die Mehrkosten durch eventuelle, von der Leistungsbeschreibung im Angebot abweichende Änderungswünsche hat der Auftraggeber zu tragen.</li>
<li>Wurde dem Auftraggeber die Fertigstellung einer Werkleistung in Textform mitgeteilt, hat er 14 Tage Zeit, die Abnahme zu verweigern. Tut er dies nicht, gilt die Leistung als abgenommen.</li> <li>
<li>Moritz Ruth ist nicht verpflichtet, Quellcode und offene Dateien herauszugeben. Ist dies dennoch gewünscht, so muss es schriftlich vereinbart und gesondert vergütet werden.</li> Wurde dem Auftraggeber die Fertigstellung einer Werkleistung in Textform mitgeteilt, hat er 14 Tage Zeit, die Abnahme zu verweigern. Tut er dies nicht,
gilt die Leistung als abgenommen.
</li>
<li>
Moritz Ruth ist nicht verpflichtet, Quellcode und offene Dateien herauszugeben. Ist dies dennoch gewünscht,
so muss es schriftlich vereinbart und gesondert vergütet werden.
</li>
<li>Moritz Ruth bestimmt den Tätigkeitsort nach freiem Ermessen.</li> <li>Moritz Ruth bestimmt den Tätigkeitsort nach freiem Ermessen.</li>
<li>Moritz Ruth steht es frei, auch für andere Auftraggeber tätig zu werden.</li> <li>Moritz Ruth steht es frei, auch für andere Auftraggeber tätig zu werden.</li>
<li>Moritz Ruth unterliegt keinem Weisungs- oder Direktionsrecht des Auftraggebers.</li> <li>Moritz Ruth unterliegt keinem Weisungs- oder Direktionsrecht des Auftraggebers.</li>
@ -32,9 +41,14 @@
<h2>3. Pflichten des Auftraggebers</h2> <h2>3. Pflichten des Auftraggebers</h2>
<ol> <ol>
<li>Der Auftraggeber ist verpflichtet, Moritz Ruth sämtliche zur Erfüllung des Vertrags erforderlichen Daten und Dateien zur Verfügung zu stellen.</li> <li>Der Auftraggeber ist verpflichtet, Moritz Ruth sämtliche zur Erfüllung des Vertrags erforderlichen Daten und Dateien zur Verfügung zu stellen.</li>
<li>Der Auftraggeber ist zum Ersatz von Schäden, die Moritz Ruth durch Schadprogramme in den vom Auftraggeber bereitgestellten Dateien und Daten entstehen, verpflichtet.</li> <li>
Der Auftraggeber ist zum Ersatz von Schäden, die Moritz Ruth durch Schadprogramme in den vom Auftraggeber bereitgestellten Dateien und Daten entstehen, verpflichtet.
</li>
<li>Das Anfertigen von Sicherungskopien liegt allein in der Verantwortung des Auftraggebers.</li> <li>Das Anfertigen von Sicherungskopien liegt allein in der Verantwortung des Auftraggebers.</li>
<li>Ist zur Erfüllung des Auftrags die Mitwirkung des Auftraggebers erforderlich, muss dieser seiner Mitwirkungspflicht innerhalb von 14 Tagen nach Aufforderung durch Moritz Ruth nachkommen. Andernfalls kann Moritz Ruth den Vertrag kündigen. Sein Entschädigungsanspruch nach § 642 BGB bleibt hiervon unberührt.</li> <li>
Ist zur Erfüllung des Auftrags die Mitwirkung des Auftraggebers erforderlich, muss dieser seiner Mitwirkungspflicht innerhalb von 14 Tagen nach
Aufforderung durch Moritz Ruth nachkommen. Andernfalls kann Moritz Ruth den Vertrag kündigen. Sein Entschädigungsanspruch nach § 642 BGB bleibt hiervon unberührt.
</li>
</ol> </ol>
</section> </section>
<section> <section>
@ -47,22 +61,39 @@
<section> <section>
<h2>Nutzungsrechte</h2> <h2>Nutzungsrechte</h2>
<ol> <ol>
<li>Moritz Ruth ist es erlaubt, die im Rahmen des Auftrags entstandenen Ergebnisse zur Selbstdarstellung zu verwenden (z. B. auf einer Website). Zudem darf er den Auftraggeber als Referenz nennen und in diesem Zuge auch dessen Logo verwenden.</li> <li>
Moritz Ruth ist es erlaubt, die im Rahmen des Auftrags entstandenen Ergebnisse zur Selbstdarstellung zu verwenden (z. B. auf einer Website).
Zudem darf er den Auftraggeber als Referenz nennen und in diesem Zuge auch dessen Logo verwenden.
</li>
<li>Moritz Ruth überträgt nur die Nutzungsrechte, die zur Erfüllung des Vertrages erforderlich sind.</li> <li>Moritz Ruth überträgt nur die Nutzungsrechte, die zur Erfüllung des Vertrages erforderlich sind.</li>
</ol> </ol>
</section> </section>
<section> <section>
<h2>Haftung</h2> <h2>Haftung</h2>
<ol> <ol>
<li>Moritz Ruth haftet dem Auftraggeber gegenüber für die von ihm vorsätzlich oder grob fahrlässig verursachten Schäden sowie bei der Verletzung von Leben, Körper oder Gesundheit.</li> <li>
<li>Moritz Ruth haftet nicht bei leichter Fahrlässigkeit, außer es handelt sich um die Verletzung wesentlicher Vertragspflichten nach den gesetzlichen Bestimmungen, wobei wesentliche Vertragspflichten solche sind, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages überhaupt erst ermöglichen und auf deren Einhaltung der Auftraggeber regelmäßig vertrauen darf.</li> Moritz Ruth haftet dem Auftraggeber gegenüber für die von ihm vorsätzlich oder grob fahrlässig verursachten Schäden sowie bei der Verletzung von Leben,
Körper oder Gesundheit.
</li>
<li>
Moritz Ruth haftet nicht bei leichter Fahrlässigkeit, außer es handelt sich um die Verletzung wesentlicher Vertragspflichten nach den gesetzlichen Bestimmungen,
wobei wesentliche Vertragspflichten solche sind, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages überhaupt erst ermöglichen und auf deren Einhaltung der
Auftraggeber regelmäßig vertrauen darf.
</li>
</ol> </ol>
</section> </section>
<section> <section>
<h2>Schlussbestimmungen</h2> <h2>Schlussbestimmungen</h2>
<ol> <ol>
<li>Erfüllungsort und Gerichtsstand für alle Streitigkeiten aus und im Zusammenhang mit dieser Vereinbarung ist der Sitz von Moritz Ruth, sofern der Auftraggeber Kaufmann, juristische Person des öffentlichen Rechts oder öffentlich-rechtliches Sondervermögen ist.</li> <li>
<li>Sollte eine Bestimmung dieser Vereinbarung ganz oder teilweise unwirksam sein oder werden oder sollte die Vereinbarung unvollständig sein, so wird die Vereinbarung im Übrigen Inhalt nicht berührt. Die Vertragspartner verpflichten sich, die unwirksame Bestimmung durch eine solche Bestimmung zu ersetzen, welche dem Sinn und Zweck der unwirksamen Bestimmung in rechtswirksamer Weise wirtschaftlich am nächsten kommt.</li> Erfüllungsort und Gerichtsstand für alle Streitigkeiten aus und im Zusammenhang mit dieser Vereinbarung ist der Sitz von Moritz Ruth, sofern der Auftraggeber Kaufmann,
juristische Person des öffentlichen Rechts oder öffentlich-rechtliches Sondervermögen ist.
</li>
<li>
Sollte eine Bestimmung dieser Vereinbarung ganz oder teilweise unwirksam sein oder werden oder sollte die Vereinbarung unvollständig sein,
so wird die Vereinbarung im Übrigen Inhalt nicht berührt. Die Vertragspartner verpflichten sich, die unwirksame Bestimmung durch eine solche Bestimmung zu ersetzen,
welche dem Sinn und Zweck der unwirksamen Bestimmung in rechtswirksamer Weise wirtschaftlich am nächsten kommt.
</li>
<li>Es gilt deutsches Recht unter Ausschluss des UN-Kaufrechts.</li> <li>Es gilt deutsches Recht unter Ausschluss des UN-Kaufrechts.</li>
</ol> </ol>
</section> </section>

View file

@ -16,9 +16,7 @@ export default defineConfig({
ssgOptions: { ssgOptions: {
formatting: "minify", formatting: "minify",
includedRoutes(routes) { includedRoutes(routes) {
return routes.filter(route => { return routes.filter(route => !route.includes(":") && route !== "/blog")
return /* Dynamic routes: */ !route.includes(":") && /* Blog post overview: */route !== "/blog"
})
} }
} }
}) })

View file

@ -25,9 +25,7 @@ export default defineConfig({
plugins: [ plugins: [
scrollSnapPlugin, scrollSnapPlugin,
plugin(({ addVariant }) => { plugin(({ addVariant }) => {
addVariant("can-hover", ({ atRule }) => { addVariant("can-hover", ({ atRule }) => atRule("@media(hover: hover)"))
return atRule("@media(hover: hover)")
})
}) })
] ]
}) })