mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-24 05:05:20 -04:00
#19 formy wymienne - base
This commit is contained in:
parent
81a78e4186
commit
a410f8f5fc
14
pages/_.vue
14
pages/_.vue
@ -14,7 +14,10 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<p class="h6 small text-center mb-0 mt-2" v-if="selectedTemplate.description">
|
<p class="h6 small text-center mb-0 mt-2" v-if="selectedTemplate.description">
|
||||||
<em>
|
<em>
|
||||||
({{selectedTemplate.description}})
|
({{Array.isArray(selectedTemplate.description)
|
||||||
|
? ('Formy wymienne: ' + selectedTemplate.description.join(' lub '))
|
||||||
|
: selectedTemplate.description
|
||||||
|
}})
|
||||||
</em>
|
</em>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -29,7 +32,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li v-for="example in examples" class="my-1">
|
<li v-for="example in examples" class="my-1">
|
||||||
<span v-for="part in example[(example.isHonorific ? selectedTemplate.pluralHonorific : selectedTemplate.plural) ? 'pluralParts' : 'singularParts']">
|
<span v-for="part in example[(example.isHonorific ? selectedTemplate.pluralHonorific : selectedTemplate.plural) ? 'pluralParts' : 'singularParts']">
|
||||||
<strong v-if="part.variable">{{selectedTemplate.morphemes[part.str]}}</strong>
|
<strong v-if="part.variable">{{selectedTemplate.getMorpheme(part.str, counter)}}</strong>
|
||||||
<span v-else>{{part.str}}</span>
|
<span v-else>{{part.str}}</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
@ -75,6 +78,13 @@
|
|||||||
getTemplate: getTemplate,
|
getTemplate: getTemplate,
|
||||||
|
|
||||||
selectedTemplate: buildTemplate(templates, this.$route.path.substr(1)),
|
selectedTemplate: buildTemplate(templates, this.$route.path.substr(1)),
|
||||||
|
|
||||||
|
counter: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
if (process.client) {
|
||||||
|
setInterval(_ => this.counter++, 1000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
head() {
|
head() {
|
||||||
|
@ -24,10 +24,18 @@ export const buildTemplate = (templates, path) => {
|
|||||||
const templatesWithAliases = addAliasesToTemplates(templates);
|
const templatesWithAliases = addAliasesToTemplates(templates);
|
||||||
|
|
||||||
const templateStr = path.split(',');
|
const templateStr = path.split(',');
|
||||||
const base = templatesWithAliases[templateStr[0]]
|
|
||||||
|
let base = null;
|
||||||
|
for (let option of templateStr[0].split('&')) {
|
||||||
|
if (!base) {
|
||||||
|
base = templatesWithAliases[option]
|
||||||
|
} else {
|
||||||
|
base = base.merge(templatesWithAliases[option])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return templateStr.length === 1
|
return templateStr.length === 1
|
||||||
? templatesWithAliases[templateStr[0]]
|
? base
|
||||||
: Template.from(Compressor.uncompress(templateStr, base ? base.toArray() : null));
|
: Template.from(Compressor.uncompress(templateStr, base ? base.toArray() : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import {buildDict} from "./helpers";
|
||||||
|
|
||||||
export class ExamplePart {
|
export class ExamplePart {
|
||||||
constructor(variable, str) {
|
constructor(variable, str) {
|
||||||
this.variable = variable;
|
this.variable = variable;
|
||||||
@ -106,14 +108,16 @@ export const MORPHEMES = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const escape = s => {
|
const escape = s => {
|
||||||
|
if (Array.isArray(s)) {
|
||||||
|
s = s.join('&');
|
||||||
|
}
|
||||||
return (s || '')
|
return (s || '')
|
||||||
.replace(/,/g, '')
|
.replace(/,/g, '')
|
||||||
.replace(/!/g, '')
|
.replace(/!/g, '')
|
||||||
.replace(/\./g, '')
|
.replace(/\./g, '')
|
||||||
//.replace(/\/', '%2F')
|
//.replace(/\/', '%2F')
|
||||||
.replace(/#/g, '%23')
|
.replace(/#/g, '%23')
|
||||||
.replace(/\?/g, '%3F')
|
.replace(/\?/g, '%3F');
|
||||||
.replace(/&/g, '%26');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Template {
|
export class Template {
|
||||||
@ -131,8 +135,19 @@ export class Template {
|
|||||||
return this.morphemes['pronoun_n'];
|
return this.morphemes['pronoun_n'];
|
||||||
}
|
}
|
||||||
|
|
||||||
name() {
|
nameOptions() {
|
||||||
return this.morphemes['pronoun_n'] + '/' + this.morphemes['pronoun_g'];
|
const options = new Set();
|
||||||
|
const optionsN = this.morphemes.pronoun_n.split('&');
|
||||||
|
const optionsG = this.morphemes.pronoun_g.split('&');
|
||||||
|
for (let i in optionsN) {
|
||||||
|
options.add(optionsN[i] + '/' + optionsG[i < optionsG.length - 1 ? i : optionsG.length - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [...options]
|
||||||
|
}
|
||||||
|
|
||||||
|
name(glue = ' lub ') {
|
||||||
|
return this.nameOptions().join(glue)
|
||||||
}
|
}
|
||||||
|
|
||||||
clone() {
|
clone() {
|
||||||
@ -143,6 +158,34 @@ export class Template {
|
|||||||
return this.toString() === other.toString();
|
return this.toString() === other.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
merge(other) {
|
||||||
|
if (this.plural !== other.plural || this.pluralHonorific !== other.pluralHonorific) {
|
||||||
|
// Cannot mix plurality
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Template(
|
||||||
|
Array.isArray(this.description) ? [...this.description, other.description] : [this.description, other.description],
|
||||||
|
buildDict(function* (that, other) {
|
||||||
|
for (let morpheme of MORPHEMES) {
|
||||||
|
yield [morpheme, (that.morphemes[morpheme] || '') + '&' + (other.morphemes[morpheme] || '')]
|
||||||
|
}
|
||||||
|
}, this, other),
|
||||||
|
this.plural,
|
||||||
|
this.pluralHonorific,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getMorpheme(morpheme, counter = 0) {
|
||||||
|
if (!this.morphemes[morpheme]) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const options = this.morphemes[morpheme].split('&');
|
||||||
|
|
||||||
|
return options[counter % options.length]
|
||||||
|
}
|
||||||
|
|
||||||
toArray() {
|
toArray() {
|
||||||
return [
|
return [
|
||||||
...Object.values(this.morphemes).map(s => escape(s)),
|
...Object.values(this.morphemes).map(s => escape(s)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user