generated from Seekra/repository-template
Compare commits
10
Commits
7a68e5fde8
...
c739442cfc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c739442cfc
|
||
|
|
56fb495b62
|
||
|
|
f8915297f4
|
||
|
|
5bf6711eb7
|
||
|
|
55164c3b2f
|
||
|
|
b245aa4a39
|
||
|
|
5b93f547f3
|
||
|
|
3e30e85354
|
||
|
|
f4d8952c54
|
||
|
|
2206b9952b
|
+26
-7
@@ -18,21 +18,40 @@ limitations under the License.
|
||||
import Navbar from './features/nav/components/Navbar.vue';
|
||||
import Footer from './features/footer/components/Footer.vue';
|
||||
|
||||
import { updatePageTitle } from './router';
|
||||
import { useColorScheme } from './features/colorScheme/composables/useColorScheme';
|
||||
import { ref, provide, watch } from 'vue';
|
||||
import { ref, provide, watch, watchEffect } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
const { getColorScheme, updateColorScheme } = useColorScheme();
|
||||
const colorScheme = ref(getColorScheme());
|
||||
provide('colorScheme', colorScheme);
|
||||
watch(colorScheme, val => updateColorScheme(val))
|
||||
watch(colorScheme, (newValue) => {
|
||||
updateColorScheme(newValue);
|
||||
document.body.style.setProperty(colorScheme, {
|
||||
auto: 'normal',
|
||||
dark: 'dark',
|
||||
light: 'light'
|
||||
});
|
||||
if (newValue === 'dark') {
|
||||
document.body.classList.add('dark');
|
||||
} else {
|
||||
document.body.classList.remove('dark');
|
||||
}
|
||||
if (newValue === 'auto') {
|
||||
document.body.classList.add('color-scheme-auto');
|
||||
} else {
|
||||
document.body.classList.remove('color-scheme-auto');
|
||||
}
|
||||
});
|
||||
|
||||
watchEffect(() => updatePageTitle(route));
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div
|
||||
:style="{ colorScheme: colorScheme === 'auto' ? 'normal' : (colorScheme === 'dark' ? 'dark' : 'light')}"
|
||||
:class="{ dark: colorScheme === 'dark', 'color-scheme-auto': colorScheme === 'auto' }"
|
||||
id="app-wrapper"
|
||||
>
|
||||
<div id="app-wrapper">
|
||||
<Navbar />
|
||||
|
||||
<router-view class="main-content" />
|
||||
|
||||
@@ -39,7 +39,7 @@ vi.mock('@/features/icons/components/Icon.vue', () => ({
|
||||
}
|
||||
}));
|
||||
|
||||
describe('LanguageSwitchButton.vue', () => {
|
||||
describe('LanguageSwitchButton', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
localStorage.clear();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+5
-6
@@ -59,18 +59,17 @@ const router = createRouter({
|
||||
routes
|
||||
});
|
||||
|
||||
// set page title
|
||||
router.afterEach(to => {
|
||||
export const updatePageTitle = function updatePageTitle (route) {
|
||||
const title =
|
||||
typeof to.meta.title === 'function'
|
||||
? to.meta.title(to)
|
||||
: to.meta.title;
|
||||
typeof route.meta.title === 'function'
|
||||
? route.meta.title(route)
|
||||
: route.meta.title;
|
||||
|
||||
if (title) {
|
||||
document.title = `${title} - Seekra`;
|
||||
} else {
|
||||
document.title = 'Seekra';
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export default router;
|
||||
@@ -15,6 +15,8 @@ limitations under the License.
|
||||
*/
|
||||
|
||||
body {
|
||||
background-color: var(--light-bg);
|
||||
color: var(--dark);
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#app-wrapper {
|
||||
body {
|
||||
--primary-color-l-8: oklch(0.897 0.202 260);
|
||||
--primary-color-l-7: oklch(0.847 0.202 260);
|
||||
--primary-color-l-6: oklch(0.797 0.202 260);
|
||||
@@ -87,7 +87,7 @@ limitations under the License.
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#app-wrapper.color-scheme-auto {
|
||||
body.color-scheme-auto {
|
||||
--dark-l-8: var(--white-d-8);
|
||||
--dark-l-7: var(--white-d-7);
|
||||
--dark-l-6: var(--white-d-6);
|
||||
@@ -121,7 +121,7 @@ limitations under the License.
|
||||
}
|
||||
}
|
||||
|
||||
#app-wrapper.dark {
|
||||
body.dark {
|
||||
--dark-l-8: var(--white-d-8);
|
||||
--dark-l-7: var(--white-d-7);
|
||||
--dark-l-6: var(--white-d-6);
|
||||
|
||||
@@ -14,109 +14,111 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { expect, test } from 'vitest';
|
||||
import { describe, expect, test } from 'vitest';
|
||||
import { ensureUnit } from '../cssDimensions';
|
||||
|
||||
test.for([
|
||||
{ dimension: null, expected: '0px' },
|
||||
{ dimension: undefined, expected: '0px' },
|
||||
describe('cssDimensions', () => {
|
||||
test.for([
|
||||
{ dimension: null, expected: '0px' },
|
||||
{ dimension: undefined, expected: '0px' },
|
||||
|
||||
{ dimension: 0, expected: '0px' },
|
||||
{ dimension: -0, expected: '0px' },
|
||||
{ dimension: -1, expected: '-1px' },
|
||||
{ dimension: -42, expected: '-42px' },
|
||||
{ dimension: 1, expected: '1px' },
|
||||
{ dimension: 42, expected: '42px' },
|
||||
{ dimension: 0, expected: '0px' },
|
||||
{ dimension: -0, expected: '0px' },
|
||||
{ dimension: -1, expected: '-1px' },
|
||||
{ dimension: -42, expected: '-42px' },
|
||||
{ dimension: 1, expected: '1px' },
|
||||
{ dimension: 42, expected: '42px' },
|
||||
|
||||
{ dimension: 0.0, expected: '0px' },
|
||||
{ dimension: -0.0, expected: '0px' },
|
||||
{ dimension: -1.0, expected: '-1px' },
|
||||
{ dimension: -42.0, expected: '-42px' },
|
||||
{ dimension: 1.0, expected: '1px' },
|
||||
{ dimension: 42.0, expected: '42px' },
|
||||
{ dimension: 0.0, expected: '0px' },
|
||||
{ dimension: -0.0, expected: '0px' },
|
||||
{ dimension: -1.0, expected: '-1px' },
|
||||
{ dimension: -42.0, expected: '-42px' },
|
||||
{ dimension: 1.0, expected: '1px' },
|
||||
{ dimension: 42.0, expected: '42px' },
|
||||
|
||||
{ dimension: 0.42, expected: '0.42px' },
|
||||
{ dimension: -0.42, expected: '-0.42px' },
|
||||
{ dimension: -1.42, expected: '-1.42px' },
|
||||
{ dimension: -42.42, expected: '-42.42px' },
|
||||
{ dimension: 1.42, expected: '1.42px' },
|
||||
{ dimension: 42.42, expected: '42.42px' },
|
||||
{ dimension: 0.42, expected: '0.42px' },
|
||||
{ dimension: -0.42, expected: '-0.42px' },
|
||||
{ dimension: -1.42, expected: '-1.42px' },
|
||||
{ dimension: -42.42, expected: '-42.42px' },
|
||||
{ dimension: 1.42, expected: '1.42px' },
|
||||
{ dimension: 42.42, expected: '42.42px' },
|
||||
|
||||
{ dimension: '0', expected: '0px' },
|
||||
{ dimension: '-0', expected: '-0px' },
|
||||
{ dimension: '-1', expected: '-1px' },
|
||||
{ dimension: '-42', expected: '-42px' },
|
||||
{ dimension: '1', expected: '1px' },
|
||||
{ dimension: '42', expected: '42px' },
|
||||
{ dimension: '0', expected: '0px' },
|
||||
{ dimension: '-0', expected: '-0px' },
|
||||
{ dimension: '-1', expected: '-1px' },
|
||||
{ dimension: '-42', expected: '-42px' },
|
||||
{ dimension: '1', expected: '1px' },
|
||||
{ dimension: '42', expected: '42px' },
|
||||
|
||||
{ dimension: '0.0', expected: '0.0px' },
|
||||
{ dimension: '-0.0', expected: '-0.0px' },
|
||||
{ dimension: '-1.0', expected: '-1.0px' },
|
||||
{ dimension: '-42.0', expected: '-42.0px' },
|
||||
{ dimension: '1.0', expected: '1.0px' },
|
||||
{ dimension: '42.0', expected: '42.0px' },
|
||||
{ dimension: '0.0', expected: '0.0px' },
|
||||
{ dimension: '-0.0', expected: '-0.0px' },
|
||||
{ dimension: '-1.0', expected: '-1.0px' },
|
||||
{ dimension: '-42.0', expected: '-42.0px' },
|
||||
{ dimension: '1.0', expected: '1.0px' },
|
||||
{ dimension: '42.0', expected: '42.0px' },
|
||||
|
||||
{ dimension: '0.42', expected: '0.42px' },
|
||||
{ dimension: '-0.42', expected: '-0.42px' },
|
||||
{ dimension: '-1.42', expected: '-1.42px' },
|
||||
{ dimension: '-42.42', expected: '-42.42px' },
|
||||
{ dimension: '1.42', expected: '1.42px' },
|
||||
{ dimension: '42.42', expected: '42.42px' },
|
||||
{ dimension: '0.42', expected: '0.42px' },
|
||||
{ dimension: '-0.42', expected: '-0.42px' },
|
||||
{ dimension: '-1.42', expected: '-1.42px' },
|
||||
{ dimension: '-42.42', expected: '-42.42px' },
|
||||
{ dimension: '1.42', expected: '1.42px' },
|
||||
{ dimension: '42.42', expected: '42.42px' },
|
||||
|
||||
{ dimension: '0px', expected: '0px' },
|
||||
{ dimension: '-0px', expected: '-0px' },
|
||||
{ dimension: '-1px', expected: '-1px' },
|
||||
{ dimension: '-42px', expected: '-42px' },
|
||||
{ dimension: '1px', expected: '1px' },
|
||||
{ dimension: '42px', expected: '42px' },
|
||||
{ dimension: '0px', expected: '0px' },
|
||||
{ dimension: '-0px', expected: '-0px' },
|
||||
{ dimension: '-1px', expected: '-1px' },
|
||||
{ dimension: '-42px', expected: '-42px' },
|
||||
{ dimension: '1px', expected: '1px' },
|
||||
{ dimension: '42px', expected: '42px' },
|
||||
|
||||
{ dimension: '0.0px', expected: '0.0px' },
|
||||
{ dimension: '-0.0px', expected: '-0.0px' },
|
||||
{ dimension: '-1.0px', expected: '-1.0px' },
|
||||
{ dimension: '-42.0px', expected: '-42.0px' },
|
||||
{ dimension: '1.0px', expected: '1.0px' },
|
||||
{ dimension: '42.0px', expected: '42.0px' },
|
||||
{ dimension: '0.0px', expected: '0.0px' },
|
||||
{ dimension: '-0.0px', expected: '-0.0px' },
|
||||
{ dimension: '-1.0px', expected: '-1.0px' },
|
||||
{ dimension: '-42.0px', expected: '-42.0px' },
|
||||
{ dimension: '1.0px', expected: '1.0px' },
|
||||
{ dimension: '42.0px', expected: '42.0px' },
|
||||
|
||||
{ dimension: '0.42px', expected: '0.42px' },
|
||||
{ dimension: '-0.42px', expected: '-0.42px' },
|
||||
{ dimension: '-1.42px', expected: '-1.42px' },
|
||||
{ dimension: '-42.42px', expected: '-42.42px' },
|
||||
{ dimension: '1.42px', expected: '1.42px' },
|
||||
{ dimension: '42.42px', expected: '42.42px' },
|
||||
{ dimension: '0.42px', expected: '0.42px' },
|
||||
{ dimension: '-0.42px', expected: '-0.42px' },
|
||||
{ dimension: '-1.42px', expected: '-1.42px' },
|
||||
{ dimension: '-42.42px', expected: '-42.42px' },
|
||||
{ dimension: '1.42px', expected: '1.42px' },
|
||||
{ dimension: '42.42px', expected: '42.42px' },
|
||||
|
||||
{ dimension: '0em', expected: '0em' },
|
||||
{ dimension: '-0em', expected: '-0em' },
|
||||
{ dimension: '-1em', expected: '-1em' },
|
||||
{ dimension: '-42em', expected: '-42em' },
|
||||
{ dimension: '1em', expected: '1em' },
|
||||
{ dimension: '42em', expected: '42em' },
|
||||
{ dimension: '0em', expected: '0em' },
|
||||
{ dimension: '-0em', expected: '-0em' },
|
||||
{ dimension: '-1em', expected: '-1em' },
|
||||
{ dimension: '-42em', expected: '-42em' },
|
||||
{ dimension: '1em', expected: '1em' },
|
||||
{ dimension: '42em', expected: '42em' },
|
||||
|
||||
{ dimension: '0.0em', expected: '0.0em' },
|
||||
{ dimension: '-0.0em', expected: '-0.0em' },
|
||||
{ dimension: '-1.0em', expected: '-1.0em' },
|
||||
{ dimension: '-42.0em', expected: '-42.0em' },
|
||||
{ dimension: '1.0em', expected: '1.0em' },
|
||||
{ dimension: '42.0em', expected: '42.0em' },
|
||||
{ dimension: '0.0em', expected: '0.0em' },
|
||||
{ dimension: '-0.0em', expected: '-0.0em' },
|
||||
{ dimension: '-1.0em', expected: '-1.0em' },
|
||||
{ dimension: '-42.0em', expected: '-42.0em' },
|
||||
{ dimension: '1.0em', expected: '1.0em' },
|
||||
{ dimension: '42.0em', expected: '42.0em' },
|
||||
|
||||
{ dimension: '0.42em', expected: '0.42em' },
|
||||
{ dimension: '-0.42em', expected: '-0.42em' },
|
||||
{ dimension: '-1.42em', expected: '-1.42em' },
|
||||
{ dimension: '-42.42em', expected: '-42.42em' },
|
||||
{ dimension: '1.42em', expected: '1.42em' },
|
||||
{ dimension: '42.42em', expected: '42.42em' },
|
||||
{ dimension: '0.42em', expected: '0.42em' },
|
||||
{ dimension: '-0.42em', expected: '-0.42em' },
|
||||
{ dimension: '-1.42em', expected: '-1.42em' },
|
||||
{ dimension: '-42.42em', expected: '-42.42em' },
|
||||
{ dimension: '1.42em', expected: '1.42em' },
|
||||
{ dimension: '42.42em', expected: '42.42em' },
|
||||
|
||||
{ dimension: 'calc(42px - 1em)', expected: 'calc(42px - 1em)' },
|
||||
{ dimension: 'calc(42px)', expected: 'calc(42px)' },
|
||||
{ dimension: 'calc(42vh)', expected: 'calc(42vh)' },
|
||||
{ dimension: 'min(42px, 1em)', expected: 'min(42px, 1em)' },
|
||||
{ dimension: 'max(42px, 5rem)', expected: 'max(42px, 5rem)' },
|
||||
{ dimension: 'clamp(42vh, 23vw, 13cap)', expected: 'clamp(42vh, 23vw, 13cap)' },
|
||||
{ dimension: 'calc(42px - 1em)', expected: 'calc(42px - 1em)' },
|
||||
{ dimension: 'calc(42px)', expected: 'calc(42px)' },
|
||||
{ dimension: 'calc(42vh)', expected: 'calc(42vh)' },
|
||||
{ dimension: 'min(42px, 1em)', expected: 'min(42px, 1em)' },
|
||||
{ dimension: 'max(42px, 5rem)', expected: 'max(42px, 5rem)' },
|
||||
{ dimension: 'clamp(42vh, 23vw, 13cap)', expected: 'clamp(42vh, 23vw, 13cap)' },
|
||||
|
||||
{ dimension: 'calc(42px-1em)', expected: 'calc(42px-1em)' },
|
||||
{ dimension: 'min(42px,1em)', expected: 'min(42px,1em)' },
|
||||
{ dimension: 'max(42px,5rem)', expected: 'max(42px,5rem)' },
|
||||
{ dimension: 'clamp(42vh,23vw,13cap)', expected: 'clamp(42vh,23vw,13cap)' },
|
||||
{ dimension: 'clamp( 42vh,23vw,13cap )', expected: 'clamp( 42vh,23vw,13cap )' }
|
||||
])('ensureUnit returns $expected with input $dimension', ({ dimension, expected }) => {
|
||||
expect(ensureUnit(dimension)).toBe(expected);
|
||||
{ dimension: 'calc(42px-1em)', expected: 'calc(42px-1em)' },
|
||||
{ dimension: 'min(42px,1em)', expected: 'min(42px,1em)' },
|
||||
{ dimension: 'max(42px,5rem)', expected: 'max(42px,5rem)' },
|
||||
{ dimension: 'clamp(42vh,23vw,13cap)', expected: 'clamp(42vh,23vw,13cap)' },
|
||||
{ dimension: 'clamp( 42vh,23vw,13cap )', expected: 'clamp( 42vh,23vw,13cap )' }
|
||||
])('ensureUnit returns $expected with input $dimension', ({ dimension, expected }) => {
|
||||
expect(ensureUnit(dimension)).toBe(expected);
|
||||
});
|
||||
});
|
||||
@@ -14,48 +14,48 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { expect, test } from 'vitest';
|
||||
import { describe, expect, test } from 'vitest';
|
||||
import getCurrentLanguage from '../currentLanguage';
|
||||
|
||||
const locales = [
|
||||
{ navigatorLanguage: 'en', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr', localStorageLanguage: null, expected: 'fr'},
|
||||
describe('currentLanguage', () => {
|
||||
test.for([
|
||||
{ navigatorLanguage: 'en', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr', localStorageLanguage: null, expected: 'fr'},
|
||||
|
||||
{ navigatorLanguage: 'en-US', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'en-AU', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-DE', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr-FR', localStorageLanguage: null, expected: 'fr'},
|
||||
{ navigatorLanguage: 'en-US', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'en-AU', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-DE', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr-FR', localStorageLanguage: null, expected: 'fr'},
|
||||
|
||||
{ navigatorLanguage: 'en-us', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'en-au', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-de', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr-fr', localStorageLanguage: null, expected: 'fr'},
|
||||
{ navigatorLanguage: 'en-us', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'en-au', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-de', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'fr-fr', localStorageLanguage: null, expected: 'fr'},
|
||||
|
||||
{ navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: null, expected: 'zh'},
|
||||
{ navigatorLanguage: 'zh-Hant-TW', localStorageLanguage: null, expected: 'zh'},
|
||||
{ navigatorLanguage: 'uz-Latn-UZ', localStorageLanguage: null, expected: 'uz'},
|
||||
{ navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: null, expected: 'zh'},
|
||||
{ navigatorLanguage: 'zh-Hant-TW', localStorageLanguage: null, expected: 'zh'},
|
||||
{ navigatorLanguage: 'uz-Latn-UZ', localStorageLanguage: null, expected: 'uz'},
|
||||
|
||||
{ navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-DE-u-co-phonebk', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'zh-Hant-TW-u-co-phonebk', localStorageLanguage: null, expected: 'zh'},
|
||||
{ navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: null, expected: 'en'},
|
||||
{ navigatorLanguage: 'de-DE-u-co-phonebk', localStorageLanguage: null, expected: 'de'},
|
||||
{ navigatorLanguage: 'zh-Hant-TW-u-co-phonebk', localStorageLanguage: null, expected: 'zh'},
|
||||
|
||||
{ navigatorLanguage: 'en', localStorageLanguage: 'de', expected: 'de'},
|
||||
{ navigatorLanguage: 'de-DE', localStorageLanguage: 'en', expected: 'en'},
|
||||
{ navigatorLanguage: 'de-de', localStorageLanguage: 'en', expected: 'en'},
|
||||
{ navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: 'fr', expected: 'fr'},
|
||||
{ navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: 'zh', expected: 'zh'}
|
||||
];
|
||||
{ navigatorLanguage: 'en', localStorageLanguage: 'de', expected: 'de'},
|
||||
{ navigatorLanguage: 'de-DE', localStorageLanguage: 'en', expected: 'en'},
|
||||
{ navigatorLanguage: 'de-de', localStorageLanguage: 'en', expected: 'en'},
|
||||
{ navigatorLanguage: 'zh-Hans-CN', localStorageLanguage: 'fr', expected: 'fr'},
|
||||
{ navigatorLanguage: 'en-US-u-ca-gregory', localStorageLanguage: 'zh', expected: 'zh'}
|
||||
])('returns the language $expected (navigator: $navigatorLanguage; local storage: $localStorageLanguage)', ({ navigatorLanguage, localStorageLanguage, expected }) => {
|
||||
Object.defineProperty(navigator, 'language', {
|
||||
value: navigatorLanguage,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
test.for(locales)('returns the language $expected (navigator: $navigatorLanguage; local storage: $localStorageLanguage)', ({ navigatorLanguage, localStorageLanguage, expected }) => {
|
||||
Object.defineProperty(navigator, 'language', {
|
||||
value: navigatorLanguage,
|
||||
configurable: true
|
||||
if (localStorageLanguage) {
|
||||
localStorage.setItem('locale', localStorageLanguage);
|
||||
};
|
||||
|
||||
expect(getCurrentLanguage()).toBe(expected);
|
||||
});
|
||||
|
||||
if (localStorageLanguage) {
|
||||
localStorage.setItem('locale', localStorageLanguage);
|
||||
};
|
||||
|
||||
expect(getCurrentLanguage()).toBe(expected);
|
||||
});
|
||||
Reference in New Issue
Block a user