7 Commits

21 changed files with 1945 additions and 181 deletions
+1071 -2
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -0,0 +1,15 @@
# Changelog
## [Unreleased]
### Added
- Start page
- Settings page
- Footer
- Navbar
- Searchbar
- Icons
- Internationalization and some major languages
- Color scheme
- Search results view with error message which indicates that the search is not available
+836 -1
View File
File diff suppressed because it is too large Load Diff
+6 -2
View File
@@ -6,7 +6,9 @@
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"preview": "vite preview" "preview": "vite preview",
"test": "vitest",
"test:run": "vitest run"
}, },
"dependencies": { "dependencies": {
"terser": "^5.47.1", "terser": "^5.47.1",
@@ -16,7 +18,9 @@
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^6.0.6", "@vitejs/plugin-vue": "^6.0.6",
"jsdom": "^29.1.1",
"vite": "^8.0.10", "vite": "^8.0.10",
"vite-plugin-html": "^3.2.2" "vite-plugin-html": "^3.2.2",
"vitest": "^4.1.7"
} }
} }
-15
View File
@@ -1,15 +0,0 @@
/*
Copyright 2026 Seekra
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
-15
View File
@@ -1,15 +0,0 @@
/*
Copyright 2026 Seekra
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
@@ -1,69 +0,0 @@
```vue
<!--
Copyright 2026 Seekra
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<script setup>
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
// 1. ALLE Sprachen importieren (Verhindert den ReferenceError)
import de from '@/legal/privacy/de.md?raw';
import en from '@/legal/privacy/en.md?raw';
import fr from '@/legal/privacy/fr.md?raw';
import es from '@/legal/privacy/es.md?raw';
import it from '@/legal/privacy/it.md?raw';
import pt from '@/legal/privacy/pt.md?raw';
const { locale } = useI18n();
const content = computed(() => {
const map = {
de,
en,
fr,
es,
it,
pt
};
// Falls eine Sprache mal nicht existiert, nutzen wir 'de' oder 'en' als Fallback
return map[locale.value] || de;
});
</script>
<template>
<main class="privacy-policy-content main-content-padding">
<h1>{{ $t('legal.privacy.title') }}</h1>
<div class="markdown-body">{{ content }}</div>
</main>
</template>
<style scoped>
.privacy-policy-content {
max-width: 900px;
margin: 0 auto;
padding-top: 40px;
padding-bottom: 40px;
}
/* Sorgt dafür, dass die Zeilenumbrüche aus den .md Dateien erhalten bleiben */
.markdown-body {
white-space: pre-wrap;
font-family: inherit;
line-height: 1.6;
}
</style>
-3
View File
@@ -1,3 +0,0 @@
# Datenschutzerklärung
Hier steht deine Datenschutzerklärung auf Deutsch.
-3
View File
@@ -1,3 +0,0 @@
# Privacy Policy
Here is your privacy policy in English.
-3
View File
@@ -1,3 +0,0 @@
# Política de privacidad
Aquí tienes tu política de privacidad en español.
-3
View File
@@ -1,3 +0,0 @@
# Politique de confidentialité
Voici ta politique de confidentialité en français.
-3
View File
@@ -1,3 +0,0 @@
# Informativa sulla privacy
Qui trovi la tua informativa sulla privacy in italiano.
-3
View File
@@ -1,3 +0,0 @@
# Política de Privacidade
Aqui está a tua Política de Privacidade em português.
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Gebaut zum Suchen.", "slogan": "Gebaut zum Suchen."
}
"legal": {
"privacy": {
"title": "Datenschutzerklärung"
}
}
}
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Built to search.", "slogan": "Built to search."
}
"legal": {
"privacy": {
"title": "Privacy Policy"
}
}
}
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Hecho para buscar.", "slogan": "Hecho para buscar."
}
"legal": {
"privacy": {
"title": "Política de Privacidad"
}
}
}
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Conçu pour chercher.", "slogan": "Conçu pour chercher."
}
"legal": {
"privacy": {
"title": "Politique de Confidentialité"
}
}
}
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Costruito per cercare.", "slogan": "Costruito per cercare."
}
"legal": {
"privacy": {
"title": "Politica di Privacy"
}
}
}
+2 -8
View File
@@ -37,11 +37,5 @@
} }
} }
}, },
"slogan": "Feito para pesquisar.", "slogan": "Feito para pesquisar."
}
"legal": {
"privacy": {
"title": "Política de Privacidade"
}
}
}
+1 -11
View File
@@ -21,7 +21,6 @@ import SearchView from '../views/SearchView.vue';
import SearchResultsView from '@/features/search/views/SearchResultsView.vue'; import SearchResultsView from '@/features/search/views/SearchResultsView.vue';
import SettingsView from '@/features/settings/views/SettingsView.vue'; import SettingsView from '@/features/settings/views/SettingsView.vue';
import NotFound from '../views/NotFound.vue'; import NotFound from '../views/NotFound.vue';
import PrivacyPolicyView from '@/features/legal/views/PrivacyPolicyView.vue';
const routes = [ const routes = [
{ {
@@ -53,15 +52,6 @@ const routes = [
name: 'notFound', name: 'notFound',
component: NotFound component: NotFound
}, },
{
path: '/privacy',
name: 'privacyPolicy',
component: PrivacyPolicyView,
meta: {
title: () => 'Privacy Policy'
}
},
]; ];
const router = createRouter({ const router = createRouter({
@@ -83,4 +73,4 @@ router.afterEach(to => {
}; };
}); });
export default router; export default router;
+4
View File
@@ -31,5 +31,9 @@ export default defineConfig({
alias: { alias: {
'@': path.resolve(__dirname, './src') '@': path.resolve(__dirname, './src')
} }
},
test: {
globals: false,
environment: 'jsdom'
} }
}) })