mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-09 07:26:01 -04:00
(ts) migrate pl noun pages to composition API with typescript
This commit is contained in:
parent
7ec96ac130
commit
d7794ffdab
@ -7,7 +7,7 @@ const props = withDefaults(defineProps<{
|
||||
word: string;
|
||||
plural?: boolean;
|
||||
singularOptions?: string[];
|
||||
template?: NounDeclension;
|
||||
template?: NounDeclension | null;
|
||||
open?: boolean;
|
||||
condense?: boolean;
|
||||
tooltip?: boolean;
|
||||
|
14
locale/dataFiles.d.ts
vendored
14
locale/dataFiles.d.ts
vendored
@ -40,6 +40,20 @@ declare module '*/nouns/nounTemplates.tsv' {
|
||||
export default data;
|
||||
}
|
||||
|
||||
declare module 'locale/pl/nouns/dukatywy.tsv' {
|
||||
import type { NounTemplatesData } from '~/locale/data.ts';
|
||||
|
||||
const data: NounTemplatesData[];
|
||||
export default data;
|
||||
}
|
||||
|
||||
declare module 'locale/pl/nouns/iksatywy.tsv' {
|
||||
import type { NounTemplatesData } from '~/locale/data.ts';
|
||||
|
||||
const data: NounTemplatesData[];
|
||||
export default data;
|
||||
}
|
||||
|
||||
declare module '*.tsv' {
|
||||
const data: Record<string, any>[];
|
||||
export default data;
|
||||
|
@ -1,3 +1,218 @@
|
||||
<script setup lang="ts">
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
import templates from './dukatywy.tsv';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import type { NounTemplatesData } from '~/locale/data.ts';
|
||||
import { gendersWithNumerus, Noun, NounDeclension, SourceLibrary } from '~/src/classes.ts';
|
||||
import type { NounRaw, Source } from '~/src/classes.ts';
|
||||
|
||||
const dukajDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'u',
|
||||
C: 'u',
|
||||
B: 'u',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'y',
|
||||
D_pl: 'ych',
|
||||
C_pl: 'ym',
|
||||
B_pl: 'ych',
|
||||
N_pl: 'ymi',
|
||||
Msc_pl: 'ych',
|
||||
W_pl: 'y',
|
||||
});
|
||||
const dukajAdjectiveDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'enu',
|
||||
C: 'ewu',
|
||||
B: 'enu',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'y',
|
||||
D_pl: 'ych',
|
||||
C_pl: 'ym',
|
||||
B_pl: 'ych',
|
||||
N_pl: 'ymi',
|
||||
Msc_pl: 'ych',
|
||||
W_pl: 'y',
|
||||
});
|
||||
const dukajIDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'u',
|
||||
C: 'u',
|
||||
B: 'u',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'i',
|
||||
D_pl: 'ich',
|
||||
C_pl: 'im',
|
||||
B_pl: 'ich',
|
||||
N_pl: 'imi',
|
||||
Msc_pl: 'ich',
|
||||
W_pl: 'i',
|
||||
});
|
||||
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.dukajNouns.header'),
|
||||
banner: 'img-local/flags/dukaizmy.jpg',
|
||||
description: translator.translate('nouns.dukajNouns.info')[0],
|
||||
}, translator);
|
||||
|
||||
const config = useConfig();
|
||||
|
||||
const dukajNouns = [
|
||||
new Noun(config, {
|
||||
id: 'astronauta',
|
||||
masc: 'astronauta',
|
||||
fem: 'astronautka',
|
||||
neutr: 'astronautu',
|
||||
mascPl: 'astronauci',
|
||||
femPl: 'astronautki',
|
||||
neutrPl: 'astronauty',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'przyjaciel',
|
||||
masc: 'przyjaciel',
|
||||
fem: 'przyjaciółka',
|
||||
neutr: 'przyjaciołu',
|
||||
mascPl: 'przyjaciele',
|
||||
femPl: 'przyjaciółki',
|
||||
neutrPl: 'przyjacioły',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'twórca',
|
||||
masc: 'twórca',
|
||||
fem: 'twórczyni',
|
||||
neutr: 'twórcu',
|
||||
mascPl: 'twórcy',
|
||||
femPl: 'twórczynie',
|
||||
neutrPl: 'twórcy',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'radny',
|
||||
masc: 'radny',
|
||||
fem: 'radna',
|
||||
neutr: 'radnu',
|
||||
mascPl: 'radni',
|
||||
femPl: 'radne',
|
||||
neutrPl: 'radny',
|
||||
declension: dukajAdjectiveDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'jegomość',
|
||||
masc: 'jegomość',
|
||||
fem: 'jejmość',
|
||||
neutr: 'jenumość',
|
||||
mascPl: 'ichmoście',
|
||||
femPl: 'ichmoście',
|
||||
neutrPl: 'ichmoście',
|
||||
// declension: new NounDeclension({
|
||||
// M: 'mość', D: 'mościa', C: 'mościowi', B: 'mościa', N: 'mościem', Msc: 'mościem', W: 'mościu',
|
||||
// M_pl: 'moście', D_pl: 'mościów', C_pl: 'mościom', B_pl: 'mościów', N_pl: 'mościami', Msc_pl: 'mościami', W_pl: 'moście',
|
||||
// }),
|
||||
declension: new NounDeclension({
|
||||
M: 'mość',
|
||||
D: 'mościu',
|
||||
C: 'mościu',
|
||||
B: 'mościu',
|
||||
N: 'mościum',
|
||||
Msc: 'mościum',
|
||||
W: 'mościu',
|
||||
M_pl: 'moście',
|
||||
D_pl: 'mościch',
|
||||
C_pl: 'mościm',
|
||||
B_pl: 'mościm',
|
||||
N_pl: 'mościch',
|
||||
Msc_pl: 'mościmi',
|
||||
W_pl: 'moście',
|
||||
}),
|
||||
}),
|
||||
];
|
||||
const dukajExtendedDeclension = new NounDeclension({
|
||||
M: 'tenu kosmicznu twórcu',
|
||||
D: 'tenu kosmicznenu twórcu',
|
||||
C: 'tewu kosmicznewu twórcu',
|
||||
B: 'tenu kosmicznenu twórcu',
|
||||
N: 'tum kosmicznum twórcum',
|
||||
Msc: 'tum kosmicznum twórcum',
|
||||
W: 'ty kosmicznu twórcu',
|
||||
|
||||
M_pl: 'teny kosmiczny twórcy',
|
||||
D_pl: 'tych kosmicznych twórcych',
|
||||
C_pl: 'tym kosmicznym twórcym',
|
||||
B_pl: 'tych kosmicznych twórcych',
|
||||
N_pl: 'tymi kosmicznymi twórcymi',
|
||||
Msc_pl: 'tych kosmicznych twórcych',
|
||||
W_pl: 'wy kosmiczny twórcy',
|
||||
});
|
||||
|
||||
const generatorWord = ref('fotograf');
|
||||
|
||||
const template = computed((): NounTemplatesData | null => {
|
||||
let longestMatch = 0;
|
||||
let matchingTemplates: NounTemplatesData[] = [];
|
||||
for (const t of templates) {
|
||||
if (!generatorWord.value.endsWith(t.masc)) {
|
||||
continue;
|
||||
}
|
||||
if (t.masc.length > longestMatch) {
|
||||
longestMatch = t.masc.length;
|
||||
matchingTemplates = [t];
|
||||
} else if (t.masc.length === longestMatch) {
|
||||
matchingTemplates.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchingTemplates.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matchingTemplates[0];
|
||||
});
|
||||
|
||||
const generatorResult = computed(() => {
|
||||
if (!template.value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const root = generatorWord.value.substring(0, generatorWord.value.length - (template.value.masc?.length ?? 0));
|
||||
|
||||
const result: Partial<NounRaw> = { id: undefined };
|
||||
for (const genderWithNumerus of gendersWithNumerus) {
|
||||
result[genderWithNumerus] = template.value[genderWithNumerus]?.split('/').map((ending) => root + ending)
|
||||
.join(' / ');
|
||||
}
|
||||
|
||||
result.declension = generatorWord.value.endsWith('y') || generatorWord.value.endsWith('i')
|
||||
? dukajAdjectiveDeclension
|
||||
: dukajDeclension;
|
||||
|
||||
if (template.value.neutrPl?.endsWith('i')) {
|
||||
result.declension = dukajIDeclension;
|
||||
}
|
||||
|
||||
return new Noun(config, result as NounRaw);
|
||||
});
|
||||
|
||||
const sources = ref<Record<string, Source[] | undefined>>();
|
||||
onMounted(async () => {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=dukatywy');
|
||||
sources.value = {
|
||||
'': new SourceLibrary(config, rawSources).getForPronoun('dukatywy'),
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Page>
|
||||
<NounsNav />
|
||||
@ -211,232 +426,6 @@
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
import templates from './dukatywy.tsv';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import { Noun, NounDeclension, SourceLibrary } from '~/src/classes.ts';
|
||||
|
||||
const dukajDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'u',
|
||||
C: 'u',
|
||||
B: 'u',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'y',
|
||||
D_pl: 'ych',
|
||||
C_pl: 'ym',
|
||||
B_pl: 'ych',
|
||||
N_pl: 'ymi',
|
||||
Msc_pl: 'ych',
|
||||
W_pl: 'y',
|
||||
});
|
||||
const dukajAdjectiveDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'enu',
|
||||
C: 'ewu',
|
||||
B: 'enu',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'y',
|
||||
D_pl: 'ych',
|
||||
C_pl: 'ym',
|
||||
B_pl: 'ych',
|
||||
N_pl: 'ymi',
|
||||
Msc_pl: 'ych',
|
||||
W_pl: 'y',
|
||||
});
|
||||
const dukajIDeclension = new NounDeclension({
|
||||
M: 'u',
|
||||
D: 'u',
|
||||
C: 'u',
|
||||
B: 'u',
|
||||
N: 'um',
|
||||
Msc: 'um',
|
||||
W: 'u',
|
||||
M_pl: 'i',
|
||||
D_pl: 'ich',
|
||||
C_pl: 'im',
|
||||
B_pl: 'ich',
|
||||
N_pl: 'imi',
|
||||
Msc_pl: 'ich',
|
||||
W_pl: 'i',
|
||||
});
|
||||
|
||||
export default {
|
||||
components: { NounsNav },
|
||||
setup() {
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.dukajNouns.header'),
|
||||
banner: 'img-local/flags/dukaizmy.jpg',
|
||||
description: translator.translate('nouns.dukajNouns.info')[0],
|
||||
}, translator);
|
||||
return {
|
||||
config: useConfig(),
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dukajNouns: [
|
||||
new Noun(this.config, {
|
||||
id: 'astronauta',
|
||||
masc: 'astronauta',
|
||||
fem: 'astronautka',
|
||||
neutr: 'astronautu',
|
||||
mascPl: 'astronauci',
|
||||
femPl: 'astronautki',
|
||||
neutrPl: 'astronauty',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'przyjaciel',
|
||||
masc: 'przyjaciel',
|
||||
fem: 'przyjaciółka',
|
||||
neutr: 'przyjaciołu',
|
||||
mascPl: 'przyjaciele',
|
||||
femPl: 'przyjaciółki',
|
||||
neutrPl: 'przyjacioły',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'twórca',
|
||||
masc: 'twórca',
|
||||
fem: 'twórczyni',
|
||||
neutr: 'twórcu',
|
||||
mascPl: 'twórcy',
|
||||
femPl: 'twórczynie',
|
||||
neutrPl: 'twórcy',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'radny',
|
||||
masc: 'radny',
|
||||
fem: 'radna',
|
||||
neutr: 'radnu',
|
||||
mascPl: 'radni',
|
||||
femPl: 'radne',
|
||||
neutrPl: 'radny',
|
||||
declension: dukajAdjectiveDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'jegomość',
|
||||
masc: 'jegomość',
|
||||
fem: 'jejmość',
|
||||
neutr: 'jenumość',
|
||||
mascPl: 'ichmoście',
|
||||
femPl: 'ichmoście',
|
||||
neutrPl: 'ichmoście',
|
||||
// declension: new NounDeclension({
|
||||
// M: 'mość', D: 'mościa', C: 'mościowi', B: 'mościa', N: 'mościem', Msc: 'mościem', W: 'mościu',
|
||||
// M_pl: 'moście', D_pl: 'mościów', C_pl: 'mościom', B_pl: 'mościów', N_pl: 'mościami', Msc_pl: 'mościami', W_pl: 'moście',
|
||||
// }),
|
||||
declension: new NounDeclension({
|
||||
M: 'mość',
|
||||
D: 'mościu',
|
||||
C: 'mościu',
|
||||
B: 'mościu',
|
||||
N: 'mościum',
|
||||
Msc: 'mościum',
|
||||
W: 'mościu',
|
||||
M_pl: 'moście',
|
||||
D_pl: 'mościch',
|
||||
C_pl: 'mościm',
|
||||
B_pl: 'mościm',
|
||||
N_pl: 'mościch',
|
||||
Msc_pl: 'mościmi',
|
||||
W_pl: 'moście',
|
||||
}),
|
||||
}),
|
||||
],
|
||||
dukajDeclension,
|
||||
dukajAdjectiveDeclension,
|
||||
dukajExtendedDeclension: new NounDeclension({
|
||||
M: 'tenu kosmicznu twórcu',
|
||||
D: 'tenu kosmicznenu twórcu',
|
||||
C: 'tewu kosmicznewu twórcu',
|
||||
B: 'tenu kosmicznenu twórcu',
|
||||
N: 'tum kosmicznum twórcum',
|
||||
Msc: 'tum kosmicznum twórcum',
|
||||
W: 'ty kosmicznu twórcu',
|
||||
|
||||
M_pl: 'teny kosmiczny twórcy',
|
||||
D_pl: 'tych kosmicznych twórcych',
|
||||
C_pl: 'tym kosmicznym twórcym',
|
||||
B_pl: 'tych kosmicznych twórcych',
|
||||
N_pl: 'tymi kosmicznymi twórcymi',
|
||||
Msc_pl: 'tych kosmicznych twórcych',
|
||||
W_pl: 'wy kosmiczny twórcy',
|
||||
}),
|
||||
sources: undefined,
|
||||
templates,
|
||||
generatorWord: 'fotograf',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
template() {
|
||||
let longestMatch = 0;
|
||||
let matchingTemplates = [];
|
||||
for (const t of templates) {
|
||||
if (!this.generatorWord.endsWith(t.masc)) {
|
||||
continue;
|
||||
}
|
||||
if (t.masc.length > longestMatch) {
|
||||
longestMatch = t.masc.length;
|
||||
matchingTemplates = [t];
|
||||
} else if (t.masc.length === longestMatch) {
|
||||
matchingTemplates.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchingTemplates.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matchingTemplates[0];
|
||||
},
|
||||
generatorResult() {
|
||||
if (!this.template) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const root = this.generatorWord.substring(0, this.generatorWord.length - this.template.masc.length);
|
||||
|
||||
const result = { id: null };
|
||||
for (const k in this.template) {
|
||||
if (!this.template.hasOwnProperty(k)) {
|
||||
continue;
|
||||
}
|
||||
result[k] = this.template[k].split('/').map((ending) => root + ending)
|
||||
.join(' / ');
|
||||
}
|
||||
|
||||
result.declension = this.generatorWord.endsWith('y') || this.generatorWord.endsWith('i')
|
||||
? dukajAdjectiveDeclension
|
||||
: dukajDeclension;
|
||||
|
||||
if (this.template.neutrPl.endsWith('i')) {
|
||||
result.declension = dukajIDeclension;
|
||||
}
|
||||
|
||||
return new Noun(this.config, result);
|
||||
},
|
||||
},
|
||||
async mounted() {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=dukatywy');
|
||||
this.sources = {
|
||||
'': new SourceLibrary(this.config, rawSources).getForPronoun('dukatywy'),
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "assets/variables";
|
||||
|
||||
|
@ -1,3 +1,160 @@
|
||||
<script setup lang="ts">
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
import templates from './iksatywy.tsv';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import type { NounTemplatesData } from '~/locale/data.ts';
|
||||
import { gendersWithNumerus, Noun, NounDeclension, SourceLibrary } from '~/src/classes.ts';
|
||||
import type { NounRaw, Source } from '~/src/classes.ts';
|
||||
|
||||
const xDeclension = new NounDeclension({
|
||||
M: 'x',
|
||||
D: 'x',
|
||||
C: 'x',
|
||||
B: 'x',
|
||||
N: 'x',
|
||||
Msc: 'x',
|
||||
W: 'x',
|
||||
M_pl: 'xx',
|
||||
D_pl: 'xx',
|
||||
C_pl: 'xx',
|
||||
B_pl: 'xx',
|
||||
N_pl: 'xx',
|
||||
Msc_pl: 'xx',
|
||||
W_pl: 'xx',
|
||||
});
|
||||
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.xNouns.header'),
|
||||
banner: 'img-local/flags/iksatywy.png',
|
||||
description: translator.translate('nouns.xNouns.info')[0],
|
||||
}, translator);
|
||||
|
||||
const config = useConfig();
|
||||
|
||||
const xNouns = [
|
||||
new Noun(config, {
|
||||
id: 'astronauta',
|
||||
masc: 'astronauta',
|
||||
fem: 'astronautka',
|
||||
neutr: 'astronautxa',
|
||||
mascPl: 'astronauci',
|
||||
femPl: 'astronautki',
|
||||
neutrPl: 'astronautxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'Europejczyk',
|
||||
masc: 'Europejczyk',
|
||||
fem: 'Europejka',
|
||||
neutr: 'Europejkx',
|
||||
mascPl: 'Europejczycy',
|
||||
femPl: 'Europejki',
|
||||
neutrPl: 'Europejkxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'przyjaciel',
|
||||
masc: 'przyjaciel',
|
||||
fem: 'przyjaciółka',
|
||||
neutr: 'przyjaciołx',
|
||||
mascPl: 'przyjaciele',
|
||||
femPl: 'przyjaciółki',
|
||||
neutrPl: 'przyjaciołxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'twórca',
|
||||
masc: 'twórca',
|
||||
fem: 'twórczyni',
|
||||
neutr: 'twórcx',
|
||||
mascPl: 'twórcy',
|
||||
femPl: 'twórczynie',
|
||||
neutrPl: 'twórcxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'radny',
|
||||
masc: 'radny',
|
||||
fem: 'radna',
|
||||
neutr: 'radnx',
|
||||
mascPl: 'radni',
|
||||
femPl: 'radne',
|
||||
neutrPl: 'radnxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
];
|
||||
const xExtendedDeclension = new NounDeclension({
|
||||
M: 'tx kosmicznx twórcx',
|
||||
D: 'tx kosmicznx twórcx',
|
||||
C: 'tx kosmicznx twórcx',
|
||||
B: 'tx kosmicznx twórcx',
|
||||
N: 'tx kosmicznx twórcx',
|
||||
Msc: 'tx kosmicznx twórcx',
|
||||
W: 'tx kosmicznx twórcx',
|
||||
|
||||
M_pl: 'txx kosmicznxx twórcxx',
|
||||
D_pl: 'txx kosmicznxx twórcxx',
|
||||
C_pl: 'txx kosmicznxx twórcxx',
|
||||
B_pl: 'txx kosmicznxx twórcxx',
|
||||
N_pl: 'txx kosmicznxx twórcxx',
|
||||
Msc_pl: 'txx kosmicznxx twórcxx',
|
||||
W_pl: 'txx kosmicznxx twórcxx',
|
||||
});
|
||||
|
||||
const generatorWord = ref('fotograf');
|
||||
|
||||
const template = computed((): NounTemplatesData | null => {
|
||||
let longestMatch = 0;
|
||||
let matchingTemplates: NounTemplatesData[] = [];
|
||||
for (const t of templates) {
|
||||
if (!generatorWord.value.endsWith(t.masc)) {
|
||||
continue;
|
||||
}
|
||||
if (t.masc.length > longestMatch) {
|
||||
longestMatch = t.masc.length;
|
||||
matchingTemplates = [t];
|
||||
} else if (t.masc.length === longestMatch) {
|
||||
matchingTemplates.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchingTemplates.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matchingTemplates[0];
|
||||
});
|
||||
const generatorResult = computed(() => {
|
||||
if (!template.value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const root = generatorWord.value.substring(0, generatorWord.value.length - (template.value.masc?.length ?? 0));
|
||||
|
||||
const result: Partial<NounRaw> = { id: undefined };
|
||||
for (const genderWithNumerus of gendersWithNumerus) {
|
||||
result[genderWithNumerus] = template.value[genderWithNumerus]?.split('/').map((ending) => root + ending)
|
||||
.join(' / ');
|
||||
}
|
||||
|
||||
result.declension = xDeclension;
|
||||
|
||||
return new Noun(config, result as NounRaw);
|
||||
});
|
||||
|
||||
const sources = ref<Record<string, Source[] | undefined>>();
|
||||
onMounted(async () => {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=iksatywy');
|
||||
sources.value = {
|
||||
'': new SourceLibrary(config, rawSources).getForPronoun('iksatywy'),
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Page>
|
||||
<NounsNav />
|
||||
@ -210,174 +367,6 @@
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
import templates from './iksatywy.tsv';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import { Noun, NounDeclension, SourceLibrary } from '~/src/classes.ts';
|
||||
|
||||
const xDeclension = new NounDeclension({
|
||||
M: 'x',
|
||||
D: 'x',
|
||||
C: 'x',
|
||||
B: 'x',
|
||||
N: 'x',
|
||||
Msc: 'x',
|
||||
W: 'x',
|
||||
M_pl: 'xx',
|
||||
D_pl: 'xx',
|
||||
C_pl: 'xx',
|
||||
B_pl: 'xx',
|
||||
N_pl: 'xx',
|
||||
Msc_pl: 'xx',
|
||||
W_pl: 'xx',
|
||||
});
|
||||
|
||||
export default {
|
||||
components: { NounsNav },
|
||||
setup() {
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.xNouns.header'),
|
||||
banner: 'img-local/flags/iksatywy.png',
|
||||
description: translator.translate('nouns.xNouns.info')[0],
|
||||
}, translator);
|
||||
return {
|
||||
config: useConfig(),
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
xNouns: [
|
||||
new Noun(this.config, {
|
||||
id: 'astronauta',
|
||||
masc: 'astronauta',
|
||||
fem: 'astronautka',
|
||||
neutr: 'astronautxa',
|
||||
mascPl: 'astronauci',
|
||||
femPl: 'astronautki',
|
||||
neutrPl: 'astronautxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'Europejczyk',
|
||||
masc: 'Europejczyk',
|
||||
fem: 'Europejka',
|
||||
neutr: 'Europejkx',
|
||||
mascPl: 'Europejczycy',
|
||||
femPl: 'Europejki',
|
||||
neutrPl: 'Europejkxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'przyjaciel',
|
||||
masc: 'przyjaciel',
|
||||
fem: 'przyjaciółka',
|
||||
neutr: 'przyjaciołx',
|
||||
mascPl: 'przyjaciele',
|
||||
femPl: 'przyjaciółki',
|
||||
neutrPl: 'przyjaciołxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'twórca',
|
||||
masc: 'twórca',
|
||||
fem: 'twórczyni',
|
||||
neutr: 'twórcx',
|
||||
mascPl: 'twórcy',
|
||||
femPl: 'twórczynie',
|
||||
neutrPl: 'twórcxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'radny',
|
||||
masc: 'radny',
|
||||
fem: 'radna',
|
||||
neutr: 'radnx',
|
||||
mascPl: 'radni',
|
||||
femPl: 'radne',
|
||||
neutrPl: 'radnxx',
|
||||
declension: xDeclension,
|
||||
}),
|
||||
],
|
||||
xDeclension,
|
||||
xExtendedDeclension: new NounDeclension({
|
||||
M: 'tx kosmicznx twórcx',
|
||||
D: 'tx kosmicznx twórcx',
|
||||
C: 'tx kosmicznx twórcx',
|
||||
B: 'tx kosmicznx twórcx',
|
||||
N: 'tx kosmicznx twórcx',
|
||||
Msc: 'tx kosmicznx twórcx',
|
||||
W: 'tx kosmicznx twórcx',
|
||||
|
||||
M_pl: 'txx kosmicznxx twórcxx',
|
||||
D_pl: 'txx kosmicznxx twórcxx',
|
||||
C_pl: 'txx kosmicznxx twórcxx',
|
||||
B_pl: 'txx kosmicznxx twórcxx',
|
||||
N_pl: 'txx kosmicznxx twórcxx',
|
||||
Msc_pl: 'txx kosmicznxx twórcxx',
|
||||
W_pl: 'txx kosmicznxx twórcxx',
|
||||
}),
|
||||
sources: undefined,
|
||||
templates,
|
||||
generatorWord: 'fotograf',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
template() {
|
||||
let longestMatch = 0;
|
||||
let matchingTemplates = [];
|
||||
for (const t of templates) {
|
||||
if (!this.generatorWord.endsWith(t.masc)) {
|
||||
continue;
|
||||
}
|
||||
if (t.masc.length > longestMatch) {
|
||||
longestMatch = t.masc.length;
|
||||
matchingTemplates = [t];
|
||||
} else if (t.masc.length === longestMatch) {
|
||||
matchingTemplates.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchingTemplates.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matchingTemplates[0];
|
||||
},
|
||||
generatorResult() {
|
||||
if (!this.template) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const root = this.generatorWord.substring(0, this.generatorWord.length - this.template.masc.length);
|
||||
|
||||
const result = { id: null };
|
||||
for (const k in this.template) {
|
||||
if (!this.template.hasOwnProperty(k)) {
|
||||
continue;
|
||||
}
|
||||
result[k] = this.template[k].split('/').map((ending) => root + ending)
|
||||
.join(' / ');
|
||||
}
|
||||
|
||||
result.declension = xDeclension;
|
||||
|
||||
return new Noun(this.config, result);
|
||||
},
|
||||
},
|
||||
async mounted() {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=iksatywy');
|
||||
this.sources = {
|
||||
'': new SourceLibrary(this.config, rawSources).getForPronoun('iksatywy'),
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "assets/variables";
|
||||
|
||||
|
@ -1,3 +1,129 @@
|
||||
<script setup lang="ts">
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
|
||||
import useSimpleHead from '~/composables/useSimpleHead.ts';
|
||||
import { NounDeclension } from '~/src/classes.ts';
|
||||
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.neuterNouns.header'),
|
||||
banner: 'img-local/flags/łoś.jpg',
|
||||
description: translator.translate('nouns.neuterNouns.info')[0],
|
||||
}, translator);
|
||||
|
||||
const neuterExtendedDeclension = new NounDeclension({
|
||||
M: 'to kosmiczne twórcze',
|
||||
D: 'tego kosmicznego twórcza',
|
||||
C: 'temu kosmicznemu twórczu',
|
||||
B: 'to kosmiczne twórcze',
|
||||
N: 'tym kosmicznym twórczem',
|
||||
Msc: 'tym kosmicznym twórczu',
|
||||
W: 'to kosmiczne twórcze',
|
||||
|
||||
M_pl: 'te kosmiczne twórcza',
|
||||
D_pl: 'tych kosmicznych twórczy',
|
||||
C_pl: 'tym kosmicznym twórczom',
|
||||
B_pl: 'te kosmiczne twórcza',
|
||||
N_pl: 'tymi kosmicznymi twórczami',
|
||||
Msc_pl: 'tych kosmicznych twórczach',
|
||||
W_pl: 'te kosmiczne twórcza',
|
||||
});
|
||||
const neuterAltDeclensionTemplates = [
|
||||
['ono/jego'], // , 'vono/vego', 'ono/jejgo'],
|
||||
['ono/jej'],
|
||||
['ono/jeno'],
|
||||
['ono/jenu'],
|
||||
];
|
||||
const neuterAltDeclension = {
|
||||
księgowe: [
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owego', C: 'owemu', B: 'owe', N: 'owem/owym', Msc: 'owem/owym', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owej', C: 'owej', B: 'owe', N: 'ową', Msc: 'owej', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'oweno', C: 'owenu', B: 'owe/oweno', N: 'owem', Msc: 'owem', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owu', C: 'owenu', B: 'owe', N: 'owum', Msc: 'owum', W: 'owe',
|
||||
}),
|
||||
],
|
||||
pracownicze: [
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'cza', C: 'czu', B: 'cze', N: 'czem', Msc: 'czu', W: 'cze',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'czy', C: 'czy', B: 'czę', N: 'czą', Msc: 'czy', W: 'czo',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'cza', C: 'czu', B: 'cze', N: 'czem', Msc: 'czu', W: 'cze',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'ku', C: 'ku', B: 'cze', N: 'kum', Msc: 'kum', W: 'cze',
|
||||
}),
|
||||
],
|
||||
kochanie: [
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'nia', C: 'niu', B: 'nie', N: 'niem', Msc: 'niu', W: 'nie',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'ni', C: 'ni', B: 'nię', N: 'nią', Msc: 'ni', W: 'niu',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'nia', C: 'niu', B: 'nie', N: 'niem', Msc: 'niu', W: 'nie',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'niu', C: 'niu', B: 'nie', N: 'nium', Msc: 'nium', W: 'nie',
|
||||
}),
|
||||
],
|
||||
wnuczę: [
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częcia', C: 'częciu', B: 'czę', N: 'częciem', Msc: 'częciu', W: 'czę',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częty', C: 'częcie', B: 'czętę', N: 'czętą', Msc: 'częcie', W: 'częto',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częcia', C: 'częciu', B: 'czę', N: 'częciem', Msc: 'częciu', W: 'czę',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'czu', C: 'czu', B: 'czę', N: 'czum', Msc: 'czum', W: 'czę',
|
||||
}),
|
||||
],
|
||||
Polko: [
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ka', C: 'ku', B: 'ko', N: 'kiem', Msc: 'ku', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ki', C: 'ce', B: 'ko', N: 'ką', Msc: 'ce', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ka', C: 'ku', B: 'ko', N: 'kiem', Msc: 'ku', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ku', C: 'ku', B: 'ko', N: 'kum', Msc: 'kum', W: 'ko',
|
||||
}),
|
||||
],
|
||||
kociaro: [
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ra', C: 'rzu', B: 'ro', N: 'rem', Msc: 'rzu', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ry', C: 'rze', B: 'rę', N: 'rą', Msc: 'rze', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ra', C: 'rzu', B: 'ro', N: 'rem', Msc: 'rzu', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ru', C: 'ru', B: 'ro', N: 'rum', Msc: 'rum', W: 'ro',
|
||||
}),
|
||||
],
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Page>
|
||||
<NounsNav />
|
||||
@ -97,159 +223,10 @@
|
||||
|
||||
<Separator icon="atom-alt" />
|
||||
|
||||
<NounsDictionary ref="dictionary" load />
|
||||
<NounsDictionary load />
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
|
||||
import type Dictionary from '~/components/nouns/NounsDictionary.vue';
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import useSimpleHead from '~/composables/useSimpleHead.ts';
|
||||
import { NounDeclension } from '~/src/classes.ts';
|
||||
|
||||
interface Refs {
|
||||
dictionary: InstanceType<typeof Dictionary> | undefined;
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
components: { NounsNav },
|
||||
setup() {
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.neuterNouns.header'),
|
||||
banner: 'img-local/flags/łoś.jpg',
|
||||
description: translator.translate('nouns.neuterNouns.info')[0],
|
||||
}, translator);
|
||||
return {
|
||||
config: useConfig(),
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
neuterExtendedDeclension: new NounDeclension({
|
||||
M: 'to kosmiczne twórcze',
|
||||
D: 'tego kosmicznego twórcza',
|
||||
C: 'temu kosmicznemu twórczu',
|
||||
B: 'to kosmiczne twórcze',
|
||||
N: 'tym kosmicznym twórczem',
|
||||
Msc: 'tym kosmicznym twórczu',
|
||||
W: 'to kosmiczne twórcze',
|
||||
|
||||
M_pl: 'te kosmiczne twórcza',
|
||||
D_pl: 'tych kosmicznych twórczy',
|
||||
C_pl: 'tym kosmicznym twórczom',
|
||||
B_pl: 'te kosmiczne twórcza',
|
||||
N_pl: 'tymi kosmicznymi twórczami',
|
||||
Msc_pl: 'tych kosmicznych twórczach',
|
||||
W_pl: 'te kosmiczne twórcza',
|
||||
}),
|
||||
neuterAltDeclensionTemplates: [
|
||||
['ono/jego'], // , 'vono/vego', 'ono/jejgo'],
|
||||
['ono/jej'],
|
||||
['ono/jeno'],
|
||||
['ono/jenu'],
|
||||
],
|
||||
neuterAltDeclension: {
|
||||
księgowe: [
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owego', C: 'owemu', B: 'owe', N: 'owem/owym', Msc: 'owem/owym', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owej', C: 'owej', B: 'owe', N: 'ową', Msc: 'owej', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'oweno', C: 'owenu', B: 'owe/oweno', N: 'owem', Msc: 'owem', W: 'owe',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'owe', D: 'owu', C: 'owenu', B: 'owe', N: 'owum', Msc: 'owum', W: 'owe',
|
||||
}),
|
||||
],
|
||||
pracownicze: [
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'cza', C: 'czu', B: 'cze', N: 'czem', Msc: 'czu', W: 'cze',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'czy', C: 'czy', B: 'czę', N: 'czą', Msc: 'czy', W: 'czo',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'cza', C: 'czu', B: 'cze', N: 'czem', Msc: 'czu', W: 'cze',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'cze', D: 'ku', C: 'ku', B: 'cze', N: 'kum', Msc: 'kum', W: 'cze',
|
||||
}),
|
||||
],
|
||||
kochanie: [
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'nia', C: 'niu', B: 'nie', N: 'niem', Msc: 'niu', W: 'nie',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'ni', C: 'ni', B: 'nię', N: 'nią', Msc: 'ni', W: 'niu',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'nia', C: 'niu', B: 'nie', N: 'niem', Msc: 'niu', W: 'nie',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'nie', D: 'niu', C: 'niu', B: 'nie', N: 'nium', Msc: 'nium', W: 'nie',
|
||||
}),
|
||||
],
|
||||
wnuczę: [
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częcia', C: 'częciu', B: 'czę', N: 'częciem', Msc: 'częciu', W: 'czę',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częty', C: 'częcie', B: 'czętę', N: 'czętą', Msc: 'częcie', W: 'częto',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'częcia', C: 'częciu', B: 'czę', N: 'częciem', Msc: 'częciu', W: 'czę',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'czę', D: 'czu', C: 'czu', B: 'czę', N: 'czum', Msc: 'czum', W: 'czę',
|
||||
}),
|
||||
],
|
||||
Polko: [
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ka', C: 'ku', B: 'ko', N: 'kiem', Msc: 'ku', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ki', C: 'ce', B: 'ko', N: 'ką', Msc: 'ce', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ka', C: 'ku', B: 'ko', N: 'kiem', Msc: 'ku', W: 'ko',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ko', D: 'ku', C: 'ku', B: 'ko', N: 'kum', Msc: 'kum', W: 'ko',
|
||||
}),
|
||||
],
|
||||
kociaro: [
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ra', C: 'rzu', B: 'ro', N: 'rem', Msc: 'rzu', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ry', C: 'rze', B: 'rę', N: 'rą', Msc: 'rze', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ra', C: 'rzu', B: 'ro', N: 'rem', Msc: 'rzu', W: 'ro',
|
||||
}),
|
||||
new NounDeclension({
|
||||
M: 'ro', D: 'ru', C: 'ru', B: 'ro', N: 'rum', Msc: 'rum', W: 'ro',
|
||||
}),
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
$tRefs(): Refs {
|
||||
return this.$refs as unknown as Refs;
|
||||
},
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "assets/variables";
|
||||
|
||||
|
@ -1,3 +1,76 @@
|
||||
<script setup lang="ts">
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import { Noun, type Source, SourceLibrary } from '~/src/classes.ts';
|
||||
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.personNouns.header'),
|
||||
description: translator.translate('nouns.personNouns.info')[0],
|
||||
}, translator);
|
||||
|
||||
const config = useConfig();
|
||||
|
||||
const personNouns = [
|
||||
new Noun(config, {
|
||||
id: 'kandydat',
|
||||
masc: 'kandydat',
|
||||
fem: 'kandydatka',
|
||||
neutr: 'osoba kandydująca',
|
||||
mascPl: 'kandydaci',
|
||||
femPl: 'kandydatki',
|
||||
neutrPl: 'osoby kandydujące',
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'kucharz',
|
||||
masc: 'kucharz',
|
||||
fem: 'kucharka',
|
||||
neutr: 'osoba gotująca|osoba kucharska',
|
||||
mascPl: 'kucharze',
|
||||
femPl: 'kucharki',
|
||||
neutrPl: 'osoby gotujące|osoby kucharskie',
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'mężczyzna',
|
||||
masc: 'mężczyzna',
|
||||
fem: 'kobieta',
|
||||
neutr: 'osoba|osoba niebinarna',
|
||||
mascPl: 'mężczyźni',
|
||||
femPl: 'kobiety',
|
||||
neutrPl: 'osoby|osoby niebinarne',
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'partner',
|
||||
masc: 'partner',
|
||||
fem: 'partnerka',
|
||||
neutr: 'osoba partnerska',
|
||||
mascPl: 'partnerzy',
|
||||
femPl: 'partnerki',
|
||||
neutrPl: 'osoby partnerskie',
|
||||
}),
|
||||
new Noun(config, {
|
||||
id: 'prezes',
|
||||
masc: 'prezes',
|
||||
fem: 'prezeska',
|
||||
neutr: 'osoba prezesująca',
|
||||
mascPl: 'prezesi',
|
||||
femPl: 'prezeski',
|
||||
neutrPl: 'osoby prezesujące',
|
||||
}),
|
||||
];
|
||||
|
||||
const sources = ref<Record<string, Source[] | undefined>>();
|
||||
onMounted(async () => {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=osobatywy');
|
||||
sources.value = {
|
||||
'': new SourceLibrary(config, rawSources).getForPronoun('osobatywy'),
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Page>
|
||||
<NounsNav />
|
||||
@ -91,84 +164,3 @@
|
||||
</section>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { useNuxtApp } from 'nuxt/app';
|
||||
|
||||
import NounsNav from './NounsNav.vue';
|
||||
|
||||
import useConfig from '~/composables/useConfig.ts';
|
||||
import { Noun, SourceLibrary } from '~/src/classes.ts';
|
||||
|
||||
export default {
|
||||
components: { NounsNav },
|
||||
setup() {
|
||||
const { $translator: translator } = useNuxtApp();
|
||||
useSimpleHead({
|
||||
title: translator.translate('nouns.personNouns.header'),
|
||||
description: translator.translate('nouns.personNouns.info')[0],
|
||||
}, translator);
|
||||
return {
|
||||
config: useConfig(),
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
personNouns: [
|
||||
new Noun(this.config, {
|
||||
id: 'kandydat',
|
||||
masc: 'kandydat',
|
||||
fem: 'kandydatka',
|
||||
neutr: 'osoba kandydująca',
|
||||
mascPl: 'kandydaci',
|
||||
femPl: 'kandydatki',
|
||||
neutrPl: 'osoby kandydujące',
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'kucharz',
|
||||
masc: 'kucharz',
|
||||
fem: 'kucharka',
|
||||
neutr: 'osoba gotująca|osoba kucharska',
|
||||
mascPl: 'kucharze',
|
||||
femPl: 'kucharki',
|
||||
neutrPl: 'osoby gotujące|osoby kucharskie',
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'mężczyzna',
|
||||
masc: 'mężczyzna',
|
||||
fem: 'kobieta',
|
||||
neutr: 'osoba|osoba niebinarna',
|
||||
mascPl: 'mężczyźni',
|
||||
femPl: 'kobiety',
|
||||
neutrPl: 'osoby|osoby niebinarne',
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'partner',
|
||||
masc: 'partner',
|
||||
fem: 'partnerka',
|
||||
neutr: 'osoba partnerska',
|
||||
mascPl: 'partnerzy',
|
||||
femPl: 'partnerki',
|
||||
neutrPl: 'osoby partnerskie',
|
||||
}),
|
||||
new Noun(this.config, {
|
||||
id: 'prezes',
|
||||
masc: 'prezes',
|
||||
fem: 'prezeska',
|
||||
neutr: 'osoba prezesująca',
|
||||
mascPl: 'prezesi',
|
||||
femPl: 'prezeski',
|
||||
neutrPl: 'osoby prezesujące',
|
||||
}),
|
||||
],
|
||||
sources: undefined,
|
||||
};
|
||||
},
|
||||
async mounted() {
|
||||
const rawSources = await $fetch('/api/sources?pronoun=osobatywy');
|
||||
this.sources = {
|
||||
'': new SourceLibrary(this.config, rawSources).getForPronoun('osobatywy'),
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@ -932,7 +932,7 @@ export interface NounRaw {
|
||||
approved?: boolean;
|
||||
base_id?: string | null;
|
||||
author?: string | null;
|
||||
declension: unknown;
|
||||
declension?: NounDeclension | null;
|
||||
}
|
||||
|
||||
export const genders = ['masc', 'fem', 'neutr'] as const;
|
||||
@ -952,7 +952,7 @@ export class Noun implements Entry {
|
||||
approved: boolean;
|
||||
base: string | null;
|
||||
author: string | null;
|
||||
declension: unknown;
|
||||
declension: NounDeclension | null;
|
||||
|
||||
constructor(config: Config, {
|
||||
id, masc, fem, neutr, mascPl, femPl, neutrPl, categories = null, sources = null, sourcesData = [],
|
||||
|
Loading…
x
Reference in New Issue
Block a user