13 Commits
Author SHA1 Message Date
jakob.scheid 5dc3ddd549 feat(style): add style for JavaScript disabled
Add inline stylesheet which is used if JavaScript is disabled.
2026-08-06 23:43:34 +02:00
jakob.scheid f739676a1a feat(legal): add <noscript> containing legal notice link
Added a <noscript> with a link to the legal notice and a note to enable
JavaScript to use Seekra. This ensures that also users with JavaScript
disabled can access legal content.
2026-08-06 23:43:33 +02:00
jakob.scheid f73e2edae7 test(legal): add test for the legal notice view
Added tests for the legal notice view (LegalNoticeView.vue).
2026-08-06 23:43:33 +02:00
jakob.scheid f7358ceb34 test(legal): add tests for getLegalNotice 2026-08-06 23:43:33 +02:00
jakob.scheid f8d2086433 feat(legal): add legal notice loading indicator 2026-08-06 23:43:32 +02:00
jakob.scheid 7613122658 feat(legal): add legal notice error handling
The legal notice view now shows an error box if the legal notice could
not be loaded.
2026-08-06 23:43:32 +02:00
jakob.scheid b27c89945f fix(style): set link color to --dark variable
This change was necessary due to the dynamically loaded legal notice.
Links would have the default color without this fix.
2026-08-06 23:43:31 +02:00
jakob.scheid d9ed16f3de feat(legal): load and display legal notice 2026-08-06 23:43:31 +02:00
jakob.scheid 4c39fadd9a feat(legal): add legal notice link in the footer
Added a link to the legal notice in the footer and revised the layout of
the last footer segment: The segment is now a grid container and the
legal links (currently only the legal notice link) are displayed at the
end. The copyright notice remains centered. On small screens, the legal
links are displayed centered below the copyright notice.
2026-08-06 23:43:30 +02:00
jakob.scheid dccdab0d4a feat(legal): add route for the legal notice 2026-08-06 23:43:30 +02:00
jakob.scheidandGitea f6cf1e9777 Merge pull request 'Fix(settings): selection reactivity' (#184) from fix/selection-setting-reactivity into main
Deploy on dev / Deploy on dev (push) Successful in 38s
Reviewed-on: #184
Reviewed-by: Jakob Gregory
2026-08-06 23:41:53 +02:00
jakob.scheid 53bd67b7a0 test(settings): add tests for selection reactivity 2026-08-06 23:24:09 +02:00
jakob.scheid 1f51a0b3ae fix(settings): make selection reactive
Selection now uses computed with getter and setter.
2026-08-06 23:23:21 +02:00
2 changed files with 29 additions and 4 deletions
@@ -54,10 +54,9 @@ const props = defineProps({
const store = useSettingsStore(); const store = useSettingsStore();
const optionType = computed(() => props.setting.allowMultiple ? 'checkbox' : 'radio'); const optionType = computed(() => props.setting.allowMultiple ? 'checkbox' : 'radio');
const selected = ref(normalizeSelectedValue(store.get(props.path) ?? props.setting.default)); const selected = computed({
get: () => normalizeSelectedValue(store.get(props.path) ?? props.setting.default),
watch(selected, (newValue) => { set: (value) => store.set(props.path, value)
store.set(props.path, newValue);
}); });
const labelId = useId(); const labelId = useId();
@@ -90,6 +90,32 @@ describe('Selection', () => {
expect(inputsChecked).toStrictEqual([false, true, false]); expect(inputsChecked).toStrictEqual([false, true, false]);
}); });
test('reacts on store change', async () => {
const wrapper = getWrapper({
options: exampleOptions,
piniaOptions: {
setupStores: () => {
const store = useSettingsStore();
store.set('selection', 'o1');
}
}
});
const settings = useSettingsStore();
{
const inputs = wrapper.findAll('input');
const inputsChecked = getChecked(inputs);
expect(inputsChecked).toStrictEqual([false, true, false]);
}
{
settings.set('selection', 'o2');
await nextTick();
const inputs = wrapper.findAll('input');
const inputsChecked = getChecked(inputs);
expect(inputsChecked).toStrictEqual([false, false, true]);
}
});
test('shows multiple values from store', () => { test('shows multiple values from store', () => {
const wrapper = getWrapper({ const wrapper = getWrapper({
options: exampleOptions, options: exampleOptions,