#61 [english] wip

This commit is contained in:
Avris 2020-10-31 13:10:25 +01:00
parent d20c24db25
commit a5eef76670
6 changed files with 65 additions and 41 deletions

View File

@ -51,7 +51,7 @@
<ul class="list-singular">
<li v-for="w in s.el.masc">{{ w }}</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in s.el.mascPl">{{ w }}</li>
</ul>
@ -60,7 +60,7 @@
<ul class="list-singular">
<li v-for="w in nouns[s.el.base].masc">{{ w }}</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in nouns[s.el.base].mascPl">{{ w }}</li>
</ul>
</small>
@ -74,7 +74,7 @@
<ul class="list-singular">
<li v-for="w in s.el.fem">{{ w }}</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in s.el.femPl">{{ w }}</li>
</ul>
@ -83,7 +83,7 @@
<ul class="list-singular">
<li v-for="w in nouns[s.el.base].fem">{{ w }}</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in nouns[s.el.base].femPl">{{ w }}</li>
</ul>
</small>
@ -91,12 +91,14 @@
<td>
<ul class="list-singular">
<li v-for="w in s.el.neutr">
<Declension :word="w"/>
<Declension v-if="config.nouns.declension" :word="w"/>
<template v-else>{{w}}</template>
</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in s.el.neutrPl">
<Declension :word="w" plural :singularOptions="s.el.neutr"/>
<Declension v-if="config.nouns.declension" :word="w" plural :singularOptions="s.el.neutr"/>
<template v-else>{{w}}</template>
</li>
</ul>
@ -105,7 +107,7 @@
<ul class="list-singular">
<li v-for="w in nouns[s.el.base].neutr">{{ w }}</li>
</ul>
<ul class="list-plural">
<ul v-if="config.nouns.plurals" class="list-plural">
<li v-for="w in nouns[s.el.base].neutrPl">{{ w }}</li>
</ul>
</small>
@ -146,11 +148,13 @@
</template>
</Table>
<Separator icon="plus"/>
<template v-if="config.nouns.submit">
<Separator icon="plus"/>
<div class="px-3">
<NounSubmitForm ref="form"/>
</div>
<div class="px-3">
<NounSubmitForm ref="form"/>
</div>
</template>
</Loading>
</template>
@ -178,7 +182,7 @@
if (this.nounsRaw !== undefined) {
return;
}
this.nounsRaw = await this.$axios.$get(`/nouns/all`, { headers: this.$auth() });
this.nounsRaw = await this.$axios.$get(`/nouns/all/${this.config.locale}`, { headers: this.$auth() });
},
async setFilter(filter) {
this.filter = filter;

View File

@ -13,10 +13,10 @@
</div>
<form v-else @submit.prevent="submit">
<div class="table-responsive">
<table class="table table-borderless table-sm table-fixed-4">
<table :class="'table table-borderless table-sm table-fixed-' + (config.nouns.plurals ? '4' : '3')">
<thead>
<tr>
<th></th>
<th v-if="config.nouns.plurals"></th>
<th class="text-nowrap">
<Icon v="mars"/>
<span class="d-none d-md-inline"><T>nouns.masculine</T></span>
@ -37,7 +37,7 @@
</thead>
<tbody>
<tr>
<th class="text-nowrap">
<th v-if="config.nouns.plurals" class="text-nowrap">
<span class="d-none d-md-inline"> <T>nouns.singular</T></span>
<span class="d-md-none"> <T>nouns.singularShort</T></span>
</th>
@ -51,7 +51,7 @@
<NounForm v-model="form.neutr"/>
</td>
</tr>
<tr>
<tr v-if="config.nouns.plurals">
<th class="text-nowrap">
<span class="d-none d-md-inline"> <T>nouns.plural</T></span>
<span class="d-md-none"> <T>nouns.pluralShort</T></span>
@ -77,28 +77,30 @@
</button>
</div>
<a v-if="!templateVisible" href="#" @click.prevent="templateVisible = true" class="btn btn-outline-primary btn-block">
<Icon v="copy"/>
<T>nouns.template</T>
</a>
<div v-else class="card mb-3">
<a href="#" class="card-header" @click.prevent="templateVisible = false">
<template v-if="config.nouns.templates">
<a v-if="!templateVisible" href="#" @click.prevent="templateVisible = true" class="btn btn-outline-primary btn-block">
<Icon v="copy"/>
<T>nouns.template</T>
</a>
<div class="card-body">
<T>nouns.root</T>: <input class="form-control form-control-sm d-inline-block w-auto" v-model="templateBase" autofocus/>
<div v-else class="card mb-3">
<a href="#" class="card-header" @click.prevent="templateVisible = false">
<Icon v="copy"/>
<T>nouns.template</T>
</a>
<div class="card-body">
<T>nouns.root</T>: <input class="form-control form-control-sm d-inline-block w-auto" v-model="templateBase" autofocus/>
<ul>
<li v-for="template in templates" class="my-2">
{{ template.toString() }}
<button type="button" class="btn btn-outline-primary btn-sm" @click="form = template.fill(templateBase)">
<Icon v="copy"/>
</button>
</li>
</ul>
<ul>
<li v-for="template in templates" class="my-2">
{{ template.toString() }}
<button type="button" class="btn btn-outline-primary btn-sm" @click="form = template.fill(templateBase)">
<Icon v="copy"/>
</button>
</li>
</ul>
</div>
</div>
</div>
</template>
<button class="btn btn-primary btn-block" :disabled="submitting">
<template v-if="submitting">
@ -116,6 +118,7 @@
<script>
import { nounTemplates } from '../src/data';
import config from "../data/config.suml";
export default {
data() {
@ -139,7 +142,7 @@
methods: {
async submit(event) {
this.submitting = true;
await this.$axios.$post(`/nouns/submit`, {
await this.$axios.$post(`/nouns/submit/${this.config.locale}`, {
data: this.form,
}, { headers: this.$auth() });

View File

@ -16,6 +16,10 @@ nouns:
enabled: true
route: 'nouns'
collapsable: false
plurals: false
declension: false
submit: true
templates: false
names:
enabled: false

View File

@ -16,6 +16,10 @@ nouns:
enabled: true
route: 'rzeczowniki'
collapsable: true
plurals: true
declension: true
submit: true
templates: true
names:
enabled: false

View File

@ -0,0 +1,6 @@
-- Up
ALTER TABLE nouns ADD COLUMN locale TEXT NOT NULL DEFAULT 'pl';
-- Down

View File

@ -62,24 +62,27 @@ export default async function (req, res, next) {
const user = authenticate(req);
const isAdmin = user && user.authenticated && user.roles === 'admin';
if (req.method === 'GET' && req.url === '/all') {
return renderJson(res, await db.all(`
if (req.method === 'GET' && req.url.startsWith('/all/')) {
const locale = req.url.substring(5);
return renderJson(res, await db.all(SQL`
SELECT * FROM nouns
${isAdmin ? '' : 'WHERE approved = 1'}
WHERE locale = ${locale}
AND approved >= ${isAdmin ? 0 : 1}
ORDER BY approved, masc
`));
}
if (req.method === 'POST' && req.url === '/submit') {
if (req.method === 'POST' && req.url.startsWith('/submit/')) {
const locale = req.url.substring(8);
if (isAdmin || !isTroll(req.body.data)) {
const id = ulid()
await db.get(SQL`
INSERT INTO nouns (id, masc, fem, neutr, mascPl, femPl, neutrPl, approved, base_id)
INSERT INTO nouns (id, masc, fem, neutr, mascPl, femPl, neutrPl, approved, base_id, locale)
VALUES (
${id},
${req.body.data.masc.join('|')}, ${req.body.data.fem.join('|')}, ${req.body.data.neutr.join('|')},
${req.body.data.mascPl.join('|')}, ${req.body.data.femPl.join('|')}, ${req.body.data.neutrPl.join('|')},
0, ${req.body.data.base}
0, ${req.body.data.base}, ${locale}
)
`);
if (isAdmin) {