#164 dynamic /team page and footer
This commit is contained in:
parent
c465be5d56
commit
df5f5df037
|
@ -1,30 +1,39 @@
|
||||||
<template>
|
<template>
|
||||||
<ul :class="{'list-unstyled': !expanded}">
|
<ul class="list-unstyled">
|
||||||
<li v-for="author in config.contact.authors" class="mb-2">
|
<li class="mb-2">
|
||||||
<Icon v-if="!expanded" :v="author.group ? 'users' : 'user'"/>
|
<Icon v="collective-logo.svg"/>
|
||||||
<a :href="author.link" target="_blank" rel="noopener">
|
<nuxt-link :to="`/${config.contact.team.route}`">
|
||||||
{{ author.name }}
|
<T>contact.team.name</T>
|
||||||
</a>
|
|
||||||
<nuxt-link v-if="author.profile" :to="`/@${author.profile}`" class="badge badge-light border">
|
|
||||||
@{{author.profile}}
|
|
||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
<br v-if="author.areas && Object.keys(author.areas).length"/>
|
|
||||||
<small v-for="(link, area, index) in author.areas">
|
|
||||||
<Spaceless>
|
|
||||||
<nuxt-link v-if="link && link.indexOf('/') === 0" :to="link">{{ area.replace(/_/g, ' ') }}</nuxt-link>
|
|
||||||
<a v-else-if="link" :href="link" target="_blank" rel="noopener">{{ area.replace(/_/g, ' ') }}</a>
|
|
||||||
<span v-else>{{ area.replace(/_/g, ' ') }}</span>
|
|
||||||
<span v-if="index < Object.keys(author.areas).length - 1">, </span>
|
|
||||||
</Spaceless>
|
|
||||||
</small>
|
|
||||||
</li>
|
</li>
|
||||||
|
<li v-if="authors === undefined">
|
||||||
|
<Spinner/>
|
||||||
|
</li>
|
||||||
|
<template v-else>
|
||||||
|
<li v-for="author in authors" class="mb-2">
|
||||||
|
<Icon v="user"/>
|
||||||
|
{{ author.footerName }}
|
||||||
|
<nuxt-link :to="`/@${author.username}`" class="badge badge-light border">
|
||||||
|
@{{author.username}}
|
||||||
|
</nuxt-link>
|
||||||
|
<br/>
|
||||||
|
<small>
|
||||||
|
{{author.footerAreas.replace(/,/g, ', ')}}
|
||||||
|
</small>
|
||||||
|
</li>
|
||||||
|
</template>
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
props: {
|
data() {
|
||||||
expanded: { type: Boolean }
|
return {
|
||||||
|
authors: undefined,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
this.authors = await this.$axios.$get(`/admin/list/footer`);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -181,6 +181,7 @@
|
||||||
link: '/' + this.config.contact.route,
|
link: '/' + this.config.contact.route,
|
||||||
icon: 'comment-alt-smile',
|
icon: 'comment-alt-smile',
|
||||||
text: this.$t('contact.header'),
|
text: this.$t('contact.header'),
|
||||||
|
extra: ['/' + this.config.contact.team.route],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<span :class="['fa' + set, 'fa-' + v, 'fa-fw']" :style="`font-size: ${size}em`"></span>
|
<img v-if="v.endsWith('.svg')" :src="`/img/${v}`" :style="`height: ${size}em; width: 1.25em; display: inline;`" alt=""/>
|
||||||
|
<span v-else :class="['fa' + set, 'fa-' + v, 'fa-fw']" :style="`font-size: ${size}em`"></span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -180,43 +180,12 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'The “Neutral Language Council” collective'
|
route: 'team' # TODO
|
||||||
link: '/blog/neutral-language-council'
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
group: true
|
blog: {}
|
||||||
-
|
|
||||||
name: 'Andrea'
|
|
||||||
profile: 'andrea'
|
|
||||||
pronouns: 'they'
|
|
||||||
pronounsLink: '/they'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
code: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
language: ~
|
|
||||||
faq: '/faq'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'Ausir'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
-
|
|
||||||
name: 'Szymon Misiek'
|
|
||||||
profile: 'szymon'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
mail: 'misiek.sz.93@gmail.com'
|
|
||||||
orcid: '0000-0002-0214-0387'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -311,6 +311,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contact'
|
header: 'Contact'
|
||||||
authors: 'Authors of the website'
|
authors: 'Authors of the website'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Support'
|
header: 'Support'
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# How to create a new language version of Pronouns.page
|
# How to create a new language version of Pronouns.page
|
||||||
|
|
||||||
|
<small>06.12.2020 | [@andrea](/@andrea)</small>
|
||||||
|
|
||||||
So you're interested in helping us extend the platform to your native language? Awesome! 🥰
|
So you're interested in helping us extend the platform to your native language? Awesome! 🥰
|
||||||
|
|
||||||
But how do I do that, you ask?
|
But how do I do that, you ask?
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
# The “Neutral Language Council” collective
|
|
||||||
|
|
||||||
<figure class="float-right">
|
|
||||||
<img src="/img/łoś.jpg"/>
|
|
||||||
<figcaption>Our logo is a black moose (pl. “łoś”) with a crowbar (pol. “łom”) (a nod to Polish neuter verb endings “-łom” and “-łoś”) against the background of the non-binary pride flag.</figcaption>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
[Pronouns.page](https://pronouns.page)
|
|
||||||
and the Facebook fanpage [Słownik Neutratywów Języka Polskiego](https://facebook.com/neutratywy) (in Polish)
|
|
||||||
are created by the “Neutral Language Council” collective.
|
|
||||||
|
|
||||||
## <span class="fal fa-user-friends"></span> Current members:
|
|
||||||
|
|
||||||
- [@andrea](/@andrea)
|
|
||||||
- [@Archie](/@Archie)
|
|
||||||
- [@ausir](/@ausir)
|
|
||||||
- [@Kafka](/@Kafka)
|
|
||||||
- [@Łucja](/@Łucja)
|
|
||||||
- [@Nikita](/@Nikita)
|
|
||||||
- [@Sybil](/@Sybil)
|
|
||||||
- [@szymon](/@szymon)
|
|
||||||
- [@Tess](/@Tess)
|
|
||||||
|
|
||||||
## <span class="fal fa-link"></span> [Polish page](https://zaimki.pl/blog/rada-j%C4%99zyka-neutralnego)
|
|
|
@ -180,43 +180,12 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'The “Neutral Language Council” collective'
|
route: 'team'
|
||||||
link: '/blog/neutral-language-council'
|
name: 'The “Neutral Language Council” collective'
|
||||||
group: true
|
blog:
|
||||||
-
|
creating-new-language-version: 'How to create a new language version of Pronouns.page'
|
||||||
name: 'Andrea'
|
|
||||||
profile: 'andrea'
|
|
||||||
pronouns: 'they'
|
|
||||||
pronounsLink: '/they'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
code: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
language: ~
|
|
||||||
faq: '/faq'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'ausir'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
-
|
|
||||||
name: 'Szymon Misiek'
|
|
||||||
profile: 'szymon'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
mail: 'misiek.sz.93@gmail.com'
|
|
||||||
orcid: '0000-0002-0214-0387'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -312,6 +312,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contact'
|
header: 'Contact'
|
||||||
authors: 'Authors of the website'
|
authors: 'Authors of the website'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Support'
|
header: 'Support'
|
||||||
|
|
|
@ -85,36 +85,11 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'Andrea'
|
route: 'team' # TODO
|
||||||
profile: 'andrea'
|
name: 'Cooperativa “Revolucionaria Academia Española”'
|
||||||
pronouns: 'elle'
|
blog: {}
|
||||||
pronounsLink: '/elle'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
código: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'ausir'
|
|
||||||
pronouns: 'él'
|
|
||||||
pronounsLink: '/él'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
idioma: ~
|
|
||||||
fuentes: '/fuentes'
|
|
||||||
-
|
|
||||||
name: 'Dante'
|
|
||||||
profile: 'AkerAdardun'
|
|
||||||
pronouns: 'él'
|
|
||||||
pronounsLink: '/él'
|
|
||||||
twitter: 'AkerAdardun'
|
|
||||||
mail: 'danteu2998@gmail.com'
|
|
||||||
areas:
|
|
||||||
traducción: ~
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -94,11 +94,11 @@ sources:
|
||||||
thanks: '¡Gracias por contribuir!'
|
thanks: '¡Gracias por contribuir!'
|
||||||
another: 'Enviar otro'
|
another: 'Enviar otro'
|
||||||
moderation: 'Los envíos deben ser aprobados antes de ser publicados.'
|
moderation: 'Los envíos deben ser aprobados antes de ser publicados.'
|
||||||
key: 'Clave'
|
key: 'Clave'
|
||||||
keyInfo: 'Identificador para vincular fuentes entre versiones en varios idiomas y vincularlas con el diccionario'
|
keyInfo: 'Identificador para vincular fuentes entre versiones en varios idiomas y vincularlas con el diccionario'
|
||||||
images: 'Imágenes'
|
images: 'Imágenes'
|
||||||
otherVersions: 'En otros idiomas'
|
otherVersions: 'En otros idiomas'
|
||||||
referenced: 'Ejemplos del uso'
|
referenced: 'Ejemplos del uso'
|
||||||
|
|
||||||
nouns:
|
nouns:
|
||||||
header: 'Diccionario'
|
header: 'Diccionario'
|
||||||
|
@ -319,6 +319,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contacto'
|
header: 'Contacto'
|
||||||
authors: 'Autores/as/xs del sitio web'
|
authors: 'Autores/as/xs del sitio web'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Apóyanos'
|
header: 'Apóyanos'
|
||||||
|
@ -343,7 +353,7 @@ user:
|
||||||
Si no solicitaste este código, simplemente ignora este mensaje.
|
Si no solicitaste este código, simplemente ignora este mensaje.
|
||||||
why: >
|
why: >
|
||||||
Registrarte te permite manejar tus tarjetas ({/@andrea=como esta}).
|
Registrarte te permite manejar tus tarjetas ({/@andrea=como esta}).
|
||||||
passwordless: 'Este sitio web no guarda las contraseñas. {https://avris.it/blog/passwords-are-passé=More info.}'
|
passwordless: 'Este sitio web no guarda las contraseñas. {https://avris.it/blog/passwords-are-passé=More info.}'
|
||||||
code:
|
code:
|
||||||
action: 'Validar'
|
action: 'Validar'
|
||||||
invalid: 'Código inválido.'
|
invalid: 'Código inválido.'
|
||||||
|
@ -470,11 +480,11 @@ localise:
|
||||||
|
|
||||||
images:
|
images:
|
||||||
upload:
|
upload:
|
||||||
instruction: 'Haz clic aquí o arrastra tus imágenes aquí'
|
instruction: 'Haz clic aquí o arrastra tus imágenes aquí'
|
||||||
instructionShort: 'Subir'
|
instructionShort: 'Subir'
|
||||||
|
|
||||||
error:
|
error:
|
||||||
generic: 'Algo salió mal. Por favor, vuelve a intentarlo…'
|
generic: 'Algo salió mal. Por favor, vuelve a intentarlo…'
|
||||||
|
|
||||||
flags:
|
flags:
|
||||||
Abroromantic: 'Abrorrománti{inflection_c}'
|
Abroromantic: 'Abrorrománti{inflection_c}'
|
||||||
|
|
|
@ -179,43 +179,11 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'The “Neutral Language Council” collective'
|
route: 'team' # TODO
|
||||||
link: '/blog/neutral-language-council'
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
group: true
|
blog: {}
|
||||||
-
|
|
||||||
name: 'Andrea'
|
|
||||||
profile: 'andrea'
|
|
||||||
pronouns: 'they'
|
|
||||||
pronounsLink: '/they'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
code: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
language: ~
|
|
||||||
faq: '/faq'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'Ausir'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
-
|
|
||||||
name: 'Szymon Misiek'
|
|
||||||
profile: 'szymon'
|
|
||||||
pronouns: 'he'
|
|
||||||
pronounsLink: '/he'
|
|
||||||
mail: 'misiek.sz.93@gmail.com'
|
|
||||||
orcid: '0000-0002-0214-0387'
|
|
||||||
areas:
|
|
||||||
language: ~
|
|
||||||
sources: '/sources'
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -311,6 +311,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contact'
|
header: 'Contact'
|
||||||
authors: 'Authors of the website'
|
authors: 'Authors of the website'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Support'
|
header: 'Support'
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
# Kolektyw „Rada Języka Neutralnego”
|
|
||||||
|
|
||||||
<figure class="float-right">
|
|
||||||
<img src="/img/łoś.jpg"/>
|
|
||||||
<figcaption>Logo kolektywu to czarny łoś z łomem (ze względu na neutralne końcówki czasowników: „-łom” i „-łoś”) na tle flagi osób niebinarnych.</figcaption>
|
|
||||||
</figure>
|
|
||||||
|
|
||||||
Inicjatywy [zaimki.pl](https://zaimki.pl) oraz [Słownik Neutratywów Języka Polskiego](https://facebook.com/neutratywy)
|
|
||||||
są tworzone przez kolektyw **„Rada Języka Neutralnego”**.
|
|
||||||
|
|
||||||
## <span class="fal fa-user-friends"></span> Obecny skład
|
|
||||||
|
|
||||||
- [@andrea](/@andrea)
|
|
||||||
- [@Archie](/@Archie)
|
|
||||||
- [@ausir](/@ausir)
|
|
||||||
- [@Kafka](/@Kafka)
|
|
||||||
- [@Łucja](/@Łucja)
|
|
||||||
- [@Nikita](/@Nikita)
|
|
||||||
- [@Sybil](/@Sybil)
|
|
||||||
- [@szymon](/@szymon)
|
|
||||||
- [@Tess](/@Tess)
|
|
||||||
|
|
||||||
## <span class="fal fa-pen-nib"></span> Blog
|
|
||||||
|
|
||||||
- [Podsumowanie działalności w roku 2020](/blog/podsumowanie-2020)
|
|
||||||
- [Niebinarność w „Gwiezdnych Wojnach”](/blog/gwiezdne-wojny)
|
|
||||||
- [Nadszedł czas się obnosić!](/blog/czas-się-obnosić) – przemówienie Sybila z Wrocławskiego Marszu Równości
|
|
|
@ -444,44 +444,14 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'Rada Języka Neutralnego'
|
route: 'kolektyw-rjn'
|
||||||
link: '/blog/rada-języka-neutralnego'
|
name: 'Kolektyw „Rada Języka Neutralnego”'
|
||||||
group: true
|
blog:
|
||||||
-
|
podsumowanie-2020: 'Podsumowanie działalności w roku 2020'
|
||||||
name: 'Andrea'
|
gwiezdne-wojny: 'Niebinarność w „Gwiezdnych Wojnach”'
|
||||||
profile: 'andrea'
|
czas-się-obnosić: 'Nadszedł czas się obnosić! – przemówienie Sybila z Wrocławskiego Marszu Równości'
|
||||||
pronouns: 'onu'
|
|
||||||
pronounsLink: '/onu'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
kod: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
język: ~
|
|
||||||
pytania: '/pytania'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'ausir'
|
|
||||||
pronouns: 'on'
|
|
||||||
pronounsLink: '/on'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
język: ~
|
|
||||||
literatura: '/literatura'
|
|
||||||
-
|
|
||||||
name: 'Sybil Zuz Grzybowskie'
|
|
||||||
profile: 'Sybil'
|
|
||||||
pronouns: 'on'
|
|
||||||
pronounsLink: '/on'
|
|
||||||
twitter: 'mykofanes'
|
|
||||||
mail: 'zuzannagrzybowska@protonmail.com'
|
|
||||||
areas:
|
|
||||||
neutratywy: '/słowniki'
|
|
||||||
# imiona: '/imiona'
|
|
||||||
social_media: ~
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -853,6 +853,17 @@ english:
|
||||||
contact:
|
contact:
|
||||||
header: 'Kontakt'
|
header: 'Kontakt'
|
||||||
authors: '{/słowniki#autor=Autorza} strony'
|
authors: '{/słowniki#autor=Autorza} strony'
|
||||||
|
team:
|
||||||
|
name: 'Kolektyw „Rada Języka Neutralnego”'
|
||||||
|
description:
|
||||||
|
- >
|
||||||
|
Inicjatywy zaimki.pl / {https://pronouns.page=pronouns.page}
|
||||||
|
oraz {https://facebook.com/neutratywy=Słownik Neutratywów Języka Polskiego}
|
||||||
|
są tworzone przez kolektyw „Rada Języka Neutralnego”.
|
||||||
|
logo: 'Logo kolektywu to połączenie symbolu transpłciowości z chmurką dialogową symbolizującą język.'
|
||||||
|
members: 'Obecny skład'
|
||||||
|
blog: 'Blog'
|
||||||
|
upcoming: 'Nadchodzące wersje językowe'
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Wsparcie'
|
header: 'Wsparcie'
|
||||||
|
|
|
@ -85,40 +85,11 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: 'The “Neutral Language Council” collective'
|
route: 'team' # TODO
|
||||||
link: '/blog/neutral-language-council'
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
group: true
|
blog: {}
|
||||||
-
|
|
||||||
name: 'Andrea'
|
|
||||||
profile: 'andrea'
|
|
||||||
pronouns: 'elle'
|
|
||||||
pronounsLink: '/elle'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
code: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'Ausir'
|
|
||||||
pronouns: 'él'
|
|
||||||
pronounsLink: '/él'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
idioma: ~
|
|
||||||
fuentes: '/fuentes'
|
|
||||||
-
|
|
||||||
name: 'Dante'
|
|
||||||
profile: 'AkerAdardun'
|
|
||||||
pronouns: 'él'
|
|
||||||
pronounsLink: '/él'
|
|
||||||
twitter: 'AkerAdardun'
|
|
||||||
mail: 'danteu2998@gmail.com'
|
|
||||||
areas:
|
|
||||||
traducción: ~
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -319,6 +319,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contato'
|
header: 'Contato'
|
||||||
authors: 'Autores/as/xs do site'
|
authors: 'Autores/as/xs do site'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Apoie-nos'
|
header: 'Apoie-nos'
|
||||||
|
|
|
@ -88,51 +88,11 @@ contact:
|
||||||
icon: 'envelope'
|
icon: 'envelope'
|
||||||
url: 'mailto:contact@pronouns.page'
|
url: 'mailto:contact@pronouns.page'
|
||||||
headline: 'contact@pronouns.page'
|
headline: 'contact@pronouns.page'
|
||||||
authors:
|
team:
|
||||||
-
|
enabled: true
|
||||||
name: '台灣非二元酷兒浪子'
|
route: 'team' # TODO
|
||||||
link: 'https://www.facebook.com/TaiwanNonbinary/'
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
group: true
|
blog: {}
|
||||||
-
|
|
||||||
name: 'Andrea'
|
|
||||||
profile: 'andrea'
|
|
||||||
website: 'https://avris.it'
|
|
||||||
twitter: 'AvrisIT'
|
|
||||||
mail: 'andrea@avris.it'
|
|
||||||
areas:
|
|
||||||
編碼: 'https://gitlab.com/Avris/Zaimki'
|
|
||||||
|
|
||||||
-
|
|
||||||
name: 'Paweł Dembowski'
|
|
||||||
profile: 'ausir'
|
|
||||||
pronouns: '他'
|
|
||||||
pronounsLink: '/他'
|
|
||||||
twitter: 'VaultAusir'
|
|
||||||
mail: 'pawel.dembowski@gmail.com'
|
|
||||||
areas:
|
|
||||||
翻譯監管: ~
|
|
||||||
|
|
||||||
-
|
|
||||||
name: '曹冠霖'
|
|
||||||
profile: 'zoruaniac'
|
|
||||||
pronouns: '佢'
|
|
||||||
pronounsLink: '佢'
|
|
||||||
twitter: 'zoruaniac'
|
|
||||||
mail: 'mimakatta.00@gmail.com'
|
|
||||||
facebook: 'zoruaniac'
|
|
||||||
instagram: 'zoruaniac'
|
|
||||||
areas:
|
|
||||||
術語學: ~
|
|
||||||
翻譯: ~
|
|
||||||
-
|
|
||||||
name: '曹昌倫'
|
|
||||||
profile: 'TWFoodLover'
|
|
||||||
pronouns: '他'
|
|
||||||
pronounsLink: '他'
|
|
||||||
twitter: 'TWFoodLover'
|
|
||||||
mail: 'atsaotw@gmail.com'
|
|
||||||
areas:
|
|
||||||
翻譯: ~
|
|
||||||
|
|
||||||
|
|
||||||
support:
|
support:
|
||||||
|
|
|
@ -298,6 +298,16 @@ english: ~
|
||||||
contact:
|
contact:
|
||||||
header: 'Contact'
|
header: 'Contact'
|
||||||
authors: 'Authors of the website'
|
authors: 'Authors of the website'
|
||||||
|
team:
|
||||||
|
name: 'The “Neutral Language Council” collective' # TODO
|
||||||
|
description: # TODO
|
||||||
|
- >
|
||||||
|
{https://pronouns.page=Pronouns.page} and related initiatives
|
||||||
|
are created by the “Neutral Language Council” collective.
|
||||||
|
logo: 'Logo of the collective is a combination of the transgender symbol and a speech bubble that symbolises language.' # TODO
|
||||||
|
members: 'Current members' # TODO
|
||||||
|
blog: 'Blog' # TODO
|
||||||
|
upcoming: 'Upcoming language versions' # TODO
|
||||||
|
|
||||||
support:
|
support:
|
||||||
header: 'Support'
|
header: 'Support'
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
-- Up
|
||||||
|
|
||||||
|
ALTER TABLE profiles ADD COLUMN teamName TEXT NULL DEFAULT NULL;
|
||||||
|
ALTER TABLE profiles ADD COLUMN footerName TEXT NULL DEFAULT NULL;
|
||||||
|
ALTER TABLE profiles ADD COLUMN footerAreas TEXT NULL DEFAULT NULL;
|
||||||
|
|
||||||
|
-- Down
|
|
@ -161,7 +161,7 @@ export default {
|
||||||
|
|
||||||
if (config.links.enabled) {
|
if (config.links.enabled) {
|
||||||
routes.push({ path: '/' + config.links.route, component: resolve(__dirname, 'routes/links.vue') });
|
routes.push({ path: '/' + config.links.route, component: resolve(__dirname, 'routes/links.vue') });
|
||||||
routes.push({ path: '/' + config.links.blogRoute + '/:slug', component: resolve(__dirname, 'routes/blog.vue') });
|
routes.push({ path: '/' + config.links.blogRoute + '/:slug', component: resolve(__dirname, 'routes/blog.vue'), name: 'blog' });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.people.enabled) {
|
if (config.people.enabled) {
|
||||||
|
@ -175,6 +175,9 @@ export default {
|
||||||
if (config.contact.enabled) {
|
if (config.contact.enabled) {
|
||||||
routes.push({ path: '/' + config.contact.route, component: resolve(__dirname, 'routes/contact.vue') });
|
routes.push({ path: '/' + config.contact.route, component: resolve(__dirname, 'routes/contact.vue') });
|
||||||
}
|
}
|
||||||
|
if (config.contact.team.enabled) {
|
||||||
|
routes.push({ path: '/' + config.contact.team.route, component: resolve(__dirname, 'routes/team.vue') });
|
||||||
|
}
|
||||||
|
|
||||||
if (config.census.enabled) {
|
if (config.census.enabled) {
|
||||||
routes.push({ path: '/' + config.census.route, component: resolve(__dirname, 'routes/census.vue') });
|
routes.push({ path: '/' + config.census.route, component: resolve(__dirname, 'routes/census.vue') });
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<Icon v="users"/>
|
<Icon v="users"/>
|
||||||
<T>contact.authors</T>
|
<T>contact.authors</T>
|
||||||
</h3>
|
</h3>
|
||||||
<Authors expanded/>
|
<Authors/>
|
||||||
<small>
|
<small>
|
||||||
<T>localise.long</T>
|
<T>localise.long</T>
|
||||||
<LocaleLink locale="en" link="/blog/creating-new-language-version">
|
<LocaleLink locale="en" link="/blog/creating-new-language-version">
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
return head({
|
return head({
|
||||||
title: this.$t('names.headerLong'),
|
title: this.$t('names.headerLong'),
|
||||||
description: this.$t('names.description'),
|
description: this.$t('names.description'),
|
||||||
banner: 'bannerNouns.png',
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
return head({
|
return head({
|
||||||
title: this.$t('nouns.headerLonger'),
|
title: this.$t('nouns.headerLonger'),
|
||||||
description: this.$t('nouns.description'),
|
description: this.$t('nouns.description'),
|
||||||
banner: this.config.locale === 'pl' ? 'bannerNouns.png' : undefined,
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,48 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section>
|
|
||||||
<OpinionLegend/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<form @submit.prevent="save" :class="[saving ? 'saving' : '']">
|
<form @submit.prevent="save" :class="[saving ? 'saving' : '']">
|
||||||
|
<div v-if="$isGranted('users')" class="border border-primary rounded p-4">
|
||||||
|
<h3 class="h4 mb-3">
|
||||||
|
<Icon v="user-cog"/>
|
||||||
|
Admin section
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<p class="small text-muted mb-0">
|
||||||
|
This will be shown on the “Team” page.
|
||||||
|
If you leave it empty, you won't show up there (for this language version).
|
||||||
|
You can use a different display name in different language versions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="teamName">Team page display name:</label>
|
||||||
|
<input class="form-control" name="teamName" maxlength="36" v-model="teamName"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<p class="small text-muted mb-0">
|
||||||
|
If you feel that you've contributed to this language version enough to get credited in the footer
|
||||||
|
(not saying how much that is, that's on you to decide 😉),
|
||||||
|
then add your name and areas here (in the local language!).
|
||||||
|
The team as a whole will be credited in the footer either way.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="footerName">Footer display name:</label>
|
||||||
|
<input class="form-control" name="footerName" maxlength="36" v-model="footerName"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="footerAreas">Areas responsible for / contributing to:</label>
|
||||||
|
<ListInput v-model="footerAreas"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<OpinionLegend/>
|
||||||
|
</section>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<h3 class="h4">
|
<h3 class="h4">
|
||||||
<Icon v="signature"/>
|
<Icon v="signature"/>
|
||||||
|
@ -142,6 +179,9 @@
|
||||||
links: Object.keys(profile.links).length ? profile.links : [],
|
links: Object.keys(profile.links).length ? profile.links : [],
|
||||||
flags: profile.flags,
|
flags: profile.flags,
|
||||||
words: profile.words.map(x => dictToList(x)),
|
words: profile.words.map(x => dictToList(x)),
|
||||||
|
teamName: profile.teamName,
|
||||||
|
footerName: profile.footerName,
|
||||||
|
footerAreas: profile.footerAreas,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,6 +199,9 @@
|
||||||
links: Object.keys(profile.links).length ? profile.links : [],
|
links: Object.keys(profile.links).length ? profile.links : [],
|
||||||
flags: profile.flags.filter(f => !f.startsWith('-')),
|
flags: profile.flags.filter(f => !f.startsWith('-')),
|
||||||
words: defaultWords,
|
words: defaultWords,
|
||||||
|
teamName: profile.teamName,
|
||||||
|
footerName: profile.footerName,
|
||||||
|
footerAreas: [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,6 +213,9 @@
|
||||||
links: [],
|
links: [],
|
||||||
flags: [],
|
flags: [],
|
||||||
words: defaultWords,
|
words: defaultWords,
|
||||||
|
teamName: '',
|
||||||
|
footerName: '',
|
||||||
|
footerAreas: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -189,6 +235,9 @@
|
||||||
links: [...this.links],
|
links: [...this.links],
|
||||||
flags: [...this.flags],
|
flags: [...this.flags],
|
||||||
words: this.words.map(x => listToDict(x)),
|
words: this.words.map(x => listToDict(x)),
|
||||||
|
teamName: this.teamName,
|
||||||
|
footerName: this.footerName,
|
||||||
|
footerAreas: this.footerAreas,
|
||||||
});
|
});
|
||||||
this.saving = false;
|
this.saving = false;
|
||||||
this.$router.push(`/@${this.$user().username}`)
|
this.$router.push(`/@${this.$user().username}`)
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h2>
|
||||||
|
<Icon v="collective-logo.svg"/>
|
||||||
|
<T>contact.team.name</T>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<figure class="float-right border rounded">
|
||||||
|
<img src="/img/collective-logo.svg" alt=""/>
|
||||||
|
<figcaption>
|
||||||
|
<p><T>contact.team.logo</T></p>
|
||||||
|
<p class="text-center bigger mb-0">
|
||||||
|
<Icon v="transgender-alt"/>
|
||||||
|
+
|
||||||
|
<Icon v="comment"/>
|
||||||
|
=
|
||||||
|
<Icon v="collective-logo.svg"/>
|
||||||
|
</p>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<T>contact.team.description</T>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section v-if="Object.keys(config.contact.blog).length">
|
||||||
|
<h3>
|
||||||
|
<Icon v="pen-nib"/>
|
||||||
|
<T>contact.team.blog</T>
|
||||||
|
</h3>
|
||||||
|
<ul>
|
||||||
|
<li v-for="(title, slug) in config.contact.blog" class="mb-2">
|
||||||
|
<nuxt-link :to="`/blog/${slug}`">
|
||||||
|
{{title}}
|
||||||
|
</nuxt-link>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h3>
|
||||||
|
<Icon v="user-friends"/>
|
||||||
|
<T>contact.team.members</T>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<template v-for="(members, locale) in membersByLocale" v-if="members.length">
|
||||||
|
<h4 class="mt-4">
|
||||||
|
<template v-if="locale === ''">
|
||||||
|
<T>contact.team.upcoming</T>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="locale === config.locale">
|
||||||
|
{{locales[locale].name}}
|
||||||
|
</template>
|
||||||
|
<a v-else :href="locales[locale].url">
|
||||||
|
{{locales[locale].name}}
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
<ul class="list-unstyled member-list">
|
||||||
|
<li v-for="member in members" class="mb-2 d-flex">
|
||||||
|
<a :href="`https://pronouns.page/@${member.username}`">
|
||||||
|
<Avatar :user="member" dsize="4rem"/>
|
||||||
|
</a>
|
||||||
|
<span class="ml-2">
|
||||||
|
{{ member.teamName }}
|
||||||
|
<br/>
|
||||||
|
<a :href="`https://pronouns.page/@${member.username}`" class="badge badge-light border">
|
||||||
|
@{{member.username}}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { head } from "../src/helpers";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
head() {
|
||||||
|
return head({
|
||||||
|
title: this.$t('contact.team.name'),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async asyncData({app}) {
|
||||||
|
return {
|
||||||
|
membersByLocale: await app.$axios.$get(`/admin/list`),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "assets/variables";
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 18rem;
|
||||||
|
padding: $spacer;
|
||||||
|
> img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
figcaption {
|
||||||
|
font-size: $small-font-size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bigger {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up('md', $grid-breakpoints) {
|
||||||
|
.member-list {
|
||||||
|
column-count: 3;
|
||||||
|
column-width: 16rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -2,10 +2,56 @@ import { Router } from 'express';
|
||||||
import SQL from 'sql-template-strings';
|
import SQL from 'sql-template-strings';
|
||||||
import avatar from '../avatar';
|
import avatar from '../avatar';
|
||||||
import {config as socialLoginConfig} from "../social";
|
import {config as socialLoginConfig} from "../social";
|
||||||
import {now, sortByValue} from "../../src/helpers";
|
import {buildDict, now, sortByValue} from "../../src/helpers";
|
||||||
|
import locales from '../../src/locales';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
|
router.get('/admin/list', async (req, res) => {
|
||||||
|
const admins = await req.db.all(SQL`
|
||||||
|
SELECT u.username, p.teamName, p.locale, u.id, u.email, u.avatarSource
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN profiles p ON p.userId = u.id
|
||||||
|
WHERE p.teamName IS NOT NULL AND p.teamName != ''
|
||||||
|
ORDER BY RANDOM()
|
||||||
|
`);
|
||||||
|
|
||||||
|
const adminsGroupped = buildDict(function*() {
|
||||||
|
yield [req.config.locale, []];
|
||||||
|
for (let [locale, , , published] of locales) {
|
||||||
|
if (locale !== req.config.locale && published) {
|
||||||
|
yield [locale, []];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yield ['', []];
|
||||||
|
});
|
||||||
|
for (let admin of admins) {
|
||||||
|
admin.avatar = await avatar(req.db, admin);
|
||||||
|
delete admin.id;
|
||||||
|
delete admin.email;
|
||||||
|
|
||||||
|
if (adminsGroupped[admin.locale] !== undefined) {
|
||||||
|
adminsGroupped[admin.locale].push(admin);
|
||||||
|
} else {
|
||||||
|
adminsGroupped[''].push(admin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.json(adminsGroupped);
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get('/admin/list/footer', async (req, res) => {
|
||||||
|
return res.json(await req.db.all(SQL`
|
||||||
|
SELECT u.username, p.footerName, p.footerAreas, p.locale
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN profiles p ON p.userId = u.id
|
||||||
|
WHERE p.locale = ${req.config.locale}
|
||||||
|
AND p.footerName IS NOT NULL AND p.footerName != ''
|
||||||
|
AND p.footerAreas IS NOT NULL AND p.footerAreas != ''
|
||||||
|
ORDER BY RANDOM()
|
||||||
|
`));
|
||||||
|
});
|
||||||
|
|
||||||
router.get('/admin/users', async (req, res) => {
|
router.get('/admin/users', async (req, res) => {
|
||||||
if (!req.isGranted('users')) {
|
if (!req.isGranted('users')) {
|
||||||
return res.status(401).json({error: 'Unauthorised'});
|
return res.status(401).json({error: 'Unauthorised'});
|
||||||
|
|
|
@ -47,6 +47,9 @@ const fetchProfiles = async (db, username, self) => {
|
||||||
words: JSON.parse(profile.words),
|
words: JSON.parse(profile.words),
|
||||||
avatar: await avatar(db, profile),
|
avatar: await avatar(db, profile),
|
||||||
birthday: self ? profile.birthday : undefined,
|
birthday: self ? profile.birthday : undefined,
|
||||||
|
teamName: profile.teamName,
|
||||||
|
footerName: profile.footerName,
|
||||||
|
footerAreas: profile.footerAreas ? profile.footerAreas.split(',') : [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
|
@ -64,10 +67,13 @@ router.post('/profile/save', async (req, res) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
await req.db.get(SQL`DELETE FROM profiles WHERE userId = ${req.user.id} AND locale = ${req.config.locale}`);
|
await req.db.get(SQL`DELETE FROM profiles WHERE userId = ${req.user.id} AND locale = ${req.config.locale}`);
|
||||||
await req.db.get(SQL`INSERT INTO profiles (id, userId, locale, names, pronouns, description, birthday, links, flags, words, active)
|
await req.db.get(SQL`INSERT INTO profiles (id, userId, locale, names, pronouns, description, birthday, links, flags, words, active, teamName, footerName, footerAreas)
|
||||||
VALUES (${ulid()}, ${req.user.id}, ${req.config.locale}, ${JSON.stringify(req.body.names)}, ${JSON.stringify(req.body.pronouns)},
|
VALUES (${ulid()}, ${req.user.id}, ${req.config.locale}, ${JSON.stringify(req.body.names)}, ${JSON.stringify(req.body.pronouns)},
|
||||||
${req.body.description}, ${req.body.birthday || null}, ${JSON.stringify(req.body.links.filter(x => !!x))}, ${JSON.stringify(req.body.flags)},
|
${req.body.description}, ${req.body.birthday || null}, ${JSON.stringify(req.body.links.filter(x => !!x))}, ${JSON.stringify(req.body.flags)},
|
||||||
${JSON.stringify(req.body.words)}, 1
|
${JSON.stringify(req.body.words)}, 1,
|
||||||
|
${req.isGranted('users') ? req.body.teamName || null : ''},
|
||||||
|
${req.isGranted('users') ? req.body.footerName || null : ''},
|
||||||
|
${req.isGranted('users') ? req.body.footerAreas.join(',').toLowerCase() || null : ''}
|
||||||
)`);
|
)`);
|
||||||
|
|
||||||
return res.json(await fetchProfiles(req.db, req.user.username, true));
|
return res.json(await fetchProfiles(req.db, req.user.username, true));
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 40 KiB |
Binary file not shown.
Before Width: | Height: | Size: 55 KiB |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||||
|
<path d="M 30.943359 -0.65625 C 24.343359 -0.65625 18.943359 4.7437496 18.943359 11.34375 L 18.943359 99.34375 C 18.943359 105.94375 24.343359 111.34375 30.943359 111.34375 L 38.943359 111.34375 C 45.543359 111.34375 50.943359 105.94375 50.943359 99.34375 L 50.943359 53.943359 L 94.943359 97.943359 L 63.84375 129.04297 C 59.14375 133.74297 59.14375 141.34297 63.84375 146.04297 L 69.542969 151.74219 C 74.242969 156.44219 81.842969 156.44219 86.542969 151.74219 L 117.64258 120.64258 L 136.84961 139.84961 C 102.78259 166.13511 81.539062 203.29838 81.539062 244.50781 C 81.539062 277.52252 95.33241 307.76253 118.20703 332.10742 C 107.87879 359.43471 86.391511 382.60147 86.044922 382.87891 C 81.470001 387.73401 80.221432 394.80855 82.855469 400.91211 C 85.489519 407.01567 91.451035 410.96875 98.105469 410.96875 C 140.73544 410.96875 174.35414 393.14334 194.52539 378.85547 C 209.84027 383.66406 226.04209 386.89627 242.94336 388.16602 L 242.94336 423.34375 L 190.94336 423.34375 C 184.34336 423.34375 178.94336 428.74375 178.94336 435.34375 L 178.94336 443.34375 C 178.94336 449.94375 184.34336 455.34375 190.94336 455.34375 L 242.94336 455.34375 L 242.94336 499.34375 C 242.94336 505.94375 248.34336 511.34375 254.94336 511.34375 L 262.94336 511.34375 C 269.54336 511.34375 274.94336 505.94375 274.94336 499.34375 L 274.94336 455.34375 L 326.94336 455.34375 C 333.54336 455.34375 338.94336 449.94375 338.94336 443.34375 L 338.94336 435.34375 C 338.94336 428.74375 333.54336 423.34375 326.94336 423.34375 L 274.94336 423.34375 L 274.94336 388.1875 C 365.47903 381.63033 436.44141 319.82778 436.44141 244.50781 C 436.44141 203.2771 415.17598 166.09642 381.07812 139.80859 L 466.94336 53.943359 L 466.94336 99.34375 C 466.94336 105.94375 472.34336 111.34375 478.94336 111.34375 L 486.94336 111.34375 C 493.54336 111.34375 498.94336 105.94375 498.94336 99.34375 L 498.94336 11.34375 C 498.94336 4.7437496 493.54336 -0.65625 486.94336 -0.65625 L 398.94336 -0.65625 C 392.34336 -0.65625 386.94336 4.7437496 386.94336 11.34375 L 386.94336 19.34375 C 386.94336 25.94375 392.34336 31.34375 398.94336 31.34375 L 444.34375 31.34375 L 353.36719 122.32031 C 326.03085 108.33734 293.67754 100.24219 258.99023 100.24219 C 224.27662 100.24219 191.90022 108.34904 164.55078 122.35156 L 140.14258 97.943359 L 171.24219 66.84375 C 175.94219 62.14375 175.94219 54.54375 171.24219 49.84375 L 165.54297 44.142578 C 160.84297 39.442578 153.24297 39.442578 148.54297 44.142578 L 117.54297 75.34375 L 73.542969 31.34375 L 118.94336 31.34375 C 125.54336 31.34375 130.94336 25.94375 130.94336 19.34375 L 130.94336 11.34375 C 130.94336 4.7437496 125.54336 -0.65625 118.94336 -0.65625 L 30.943359 -0.65625 z M 258.87305 132.41602 C 338.44473 132.41602 403.19727 184.0002 403.19727 247.33789 C 403.19727 310.67559 338.44473 362.25977 258.87305 362.25977 C 240.6392 362.25977 222.59939 359.45255 205.26758 353.90234 L 195.47461 350.76758 L 187.09766 356.77539 C 172.27866 367.41873 149.40604 379.82506 120.99219 382.63281 C 128.72384 372.77302 140.19194 356.25215 147.2793 337.18555 L 151.85547 324.97461 L 143.02734 315.44141 C 124.40692 295.46065 114.54883 271.88942 114.54883 247.33789 C 114.54883 184.00019 179.30134 132.41602 258.87305 132.41602 z " />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
Reference in New Issue