diff --git a/components/Mission.vue b/components/Mission.vue index 1fe78201..6bd4a6d1 100644 --- a/components/Mission.vue +++ b/components/Mission.vue @@ -2,7 +2,7 @@

- home.mission.header: + home.mission.header

diff --git a/locale/_/img/logo/logo-full.png b/locale/_/img/logo/logo-full.png new file mode 100644 index 00000000..99f70d83 Binary files /dev/null and b/locale/_/img/logo/logo-full.png differ diff --git a/locale/_/img/logo/logo-full.svg b/locale/_/img/logo/logo-full.svg new file mode 100644 index 00000000..00c5d316 --- /dev/null +++ b/locale/_/img/logo/logo-full.svg @@ -0,0 +1,98 @@ + + + + + + image/svg+xml + + + + + + + + + + NeutralLanguageCouncil + + pronouns.page + diff --git a/locale/de/img/logo/logo-full.png b/locale/de/img/logo/logo-full.png new file mode 100644 index 00000000..2bf971b0 Binary files /dev/null and b/locale/de/img/logo/logo-full.png differ diff --git a/locale/de/img/logo/logo-full.svg b/locale/de/img/logo/logo-full.svg new file mode 100644 index 00000000..1bd8c417 --- /dev/null +++ b/locale/de/img/logo/logo-full.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + Rat fürneutraleSprache + + pronouns.page + diff --git a/locale/de/translations.suml b/locale/de/translations.suml index 5ddec3c3..37027052 100644 --- a/locale/de/translations.suml +++ b/locale/de/translations.suml @@ -342,10 +342,10 @@ contact: header: 'Kontakt' authors: 'Autor*innen der Website' team: - name: 'Das „Neutral Language Council“ Kollektiv' + name: 'Das „Rat für neutrale Sprache“ Kollektiv' description: - > - {https://pronouns.page=Pronouns.page} und damit verbundene Initiativen sind vom Kollektiv „Neutral Language Council“ erstellt. + {https://pronouns.page=Pronouns.page} und damit verbundene Initiativen sind vom Kollektiv „Rat für neutrale Sprache“ erstellt. logo: 'Das Logo des Kollektivs ist eine Kombination des Transgender Symbols und einer Sprechblase, die Sprache symbolisiert.' members: 'aktuelle Mitglieder' member: 'Mitglied des Kollektivs' diff --git a/locale/en/img/logo/logo-full.png b/locale/en/img/logo/logo-full.png new file mode 100644 index 00000000..99f70d83 Binary files /dev/null and b/locale/en/img/logo/logo-full.png differ diff --git a/locale/en/img/logo/logo-full.svg b/locale/en/img/logo/logo-full.svg new file mode 100644 index 00000000..00c5d316 --- /dev/null +++ b/locale/en/img/logo/logo-full.svg @@ -0,0 +1,98 @@ + + + + + + image/svg+xml + + + + + + + + + + NeutralLanguageCouncil + + pronouns.page + diff --git a/locale/es/img/logo/logo-full.png b/locale/es/img/logo/logo-full.png new file mode 100644 index 00000000..200c7ba9 Binary files /dev/null and b/locale/es/img/logo/logo-full.png differ diff --git a/locale/es/img/logo/logo-full.svg b/locale/es/img/logo/logo-full.svg new file mode 100644 index 00000000..ccda49ec --- /dev/null +++ b/locale/es/img/logo/logo-full.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + Consejo deLenguajeNeutro + + pronouns.page + diff --git a/locale/fr/img/logo/logo-full.png b/locale/fr/img/logo/logo-full.png new file mode 100644 index 00000000..ccc3a2fc Binary files /dev/null and b/locale/fr/img/logo/logo-full.png differ diff --git a/locale/fr/img/logo/logo-full.svg b/locale/fr/img/logo/logo-full.svg new file mode 100644 index 00000000..1108accd --- /dev/null +++ b/locale/fr/img/logo/logo-full.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + Conseil duLangageNeutre + + pronouns.page + diff --git a/locale/nl/img/logo/logo-full.png b/locale/nl/img/logo/logo-full.png new file mode 100644 index 00000000..d41216ad Binary files /dev/null and b/locale/nl/img/logo/logo-full.png differ diff --git a/locale/nl/img/logo/logo-full.svg b/locale/nl/img/logo/logo-full.svg new file mode 100644 index 00000000..bc37e306 --- /dev/null +++ b/locale/nl/img/logo/logo-full.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + Raad vanNeutraleTaal + + pronouns.page + diff --git a/locale/no/img/logo/logo-full.png b/locale/no/img/logo/logo-full.png new file mode 100644 index 00000000..99f70d83 Binary files /dev/null and b/locale/no/img/logo/logo-full.png differ diff --git a/locale/no/img/logo/logo-full.svg b/locale/no/img/logo/logo-full.svg new file mode 100644 index 00000000..00c5d316 --- /dev/null +++ b/locale/no/img/logo/logo-full.svg @@ -0,0 +1,98 @@ + + + + + + image/svg+xml + + + + + + + + + + NeutralLanguageCouncil + + pronouns.page + diff --git a/locale/pl/blog/skąd-nazwa-kolektywu.md b/locale/pl/blog/skąd-nazwa-kolektywu.md index f814fb8d..3bbb20e8 100644 --- a/locale/pl/blog/skąd-nazwa-kolektywu.md +++ b/locale/pl/blog/skąd-nazwa-kolektywu.md @@ -2,7 +2,7 @@ 2021-08-15 | [@andrea](/@andrea) -![Logo RJN](/img/logo-full.png) +![Logo RJN](/img-local/logo/logo-full.png) Nie jest tajemnicą ani zagadką, że nazwa [naszego kolektywu](/kolektyw-rjn) nawiązuje do [Rady Języka Polskiego przy Polskiej Akademii Nauk](https://pl.wikipedia.org/wiki/Rada_J%C4%99zyka_Polskiego). diff --git a/static/img/logo-full.png b/locale/pl/img/logo/logo-full.png similarity index 100% rename from static/img/logo-full.png rename to locale/pl/img/logo/logo-full.png diff --git a/static/img/logo-full.svg b/locale/pl/img/logo/logo-full.svg similarity index 100% rename from static/img/logo-full.svg rename to locale/pl/img/logo/logo-full.svg diff --git a/locale/pl/translations.suml b/locale/pl/translations.suml index 967e5a1e..ab75aa3c 100644 --- a/locale/pl/translations.suml +++ b/locale/pl/translations.suml @@ -924,19 +924,57 @@ contact: Wrzucenie wiadomości do spamu zajmie nam mniej czasu niż tobie naskrobanie jej. 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” - - > - → {/blog/skąd-nazwa-kolektywu=Skąd nazwa?} - - > - → Logo: {https://zaimki.pl/img/logo-full.png=PNG}, {https://zaimki.pl/img/logo-full.svg=SVG} + description: > + Jesteśmy kolektywem queerowym zajmującym się + zbieraniem, badaniem, kształtowaniem i promowaniem języka niebinarnego i języka neutralnego płciowo. + Wspieramy również działania na rzecz równości i sprawiedliwości społecznej. + extra: + - '{/blog/skąd-nazwa-kolektywu=Skąd nazwa?}' logo: 'Logo kolektywu to połączenie symbolu transpłciowości z chmurką dialogową symbolizującą język.' members: 'Obecny skład' member: 'Osoba członkowska kolektywu' upcoming: 'Nadchodzące wersje językowe' + credentials: + header: 'Kwalifikacje' + description: + - > + Promujemy postrzeganie kształtowania języka jako procesu oddolnego, + w którym uczestniczy każda używająca go osoba, dlatego „legitymizując” naszą działalność + wolimy skupiać się raczej na fakcie bycia po prostu + 1) osobami używającymi języka polskiego, 2) osobami niebinarnymi i sojuszniczymi. + Wszystkie mamy prawo kształtować nasz język! + - > + Rozumiemy też jednak, że aby niektóre osoby brały nas na poważnie, + chciałyby poznać nasze formalne wykształcenie i doświadczenie zawodowe. + Oto zatem lista osób członkowskich chcących się tymi informacjami podzielić: + join: + header: 'Dołącz do nas!' + encouragement: > + Zależy Ci na rozwoju języka niebinarnego i neutralnego płciowo? + Bliska jest Ci działalność naszego kolektywu i chcesz nam w niej pomóc? Super! + Dodatkowe ręce do pracy są bardzo mile widziane! + areasIntro: 'Obszary, w których możesz pomóc, to na przykład:' + areas: + - 'uzupełnianie i moderowanie słowników,' + - 'uzupełnianie i moderowanie korpusu,' + - 'tworzenie grafik i postów na social media,' + - 'odpowiadanie na wiadomości,' + - 'moderacja wizytówek,' + - 'tłumaczenie,' + - 'koordynacja tworzenia nowych wersji językowych,' + - 'teksty na bloga,' + - 'programowanie,' + - '…' + allies: > + Niektóre z tych rzeczy wymagają perspektywy osoby niebinarnej, ale inne niekoniecznie, + dlatego zapraszamy do współpracy również binarne osoby sojusznicze. + how: 'Jak dołączyć? Przyślij nam maila na {mailto:kontakt@zaimki.pl=kontakt@zaimki.pl}, a w nim:' + application: + - 'przedstaw się,' + - 'podlinkuj do swojego profilu na portalu zaimki.pl,' + - 'podlinkuj do swoich mediów społecznościowych,' + - 'napisz, czy masz jakieś doświadczenie aktywistyczne,' + - 'napisz, czym chcesz się zajmować w kolektywie.' support: header: 'Wsparcie' diff --git a/locale/pt/img/logo/logo-full.png b/locale/pt/img/logo/logo-full.png new file mode 100644 index 00000000..8af86e30 Binary files /dev/null and b/locale/pt/img/logo/logo-full.png differ diff --git a/locale/pt/img/logo/logo-full.svg b/locale/pt/img/logo/logo-full.svg new file mode 100644 index 00000000..9476049a --- /dev/null +++ b/locale/pt/img/logo/logo-full.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + Conselhoda LínguaNeutra + + pronouns.page + diff --git a/locale/yi/img/logo/logo-full.png b/locale/yi/img/logo/logo-full.png new file mode 100644 index 00000000..99f70d83 Binary files /dev/null and b/locale/yi/img/logo/logo-full.png differ diff --git a/locale/yi/img/logo/logo-full.svg b/locale/yi/img/logo/logo-full.svg new file mode 100644 index 00000000..00c5d316 --- /dev/null +++ b/locale/yi/img/logo/logo-full.svg @@ -0,0 +1,98 @@ + + + + + + image/svg+xml + + + + + + + + + + NeutralLanguageCouncil + + pronouns.page + diff --git a/locale/zh/img/logo/logo-full.png b/locale/zh/img/logo/logo-full.png new file mode 100644 index 00000000..99f70d83 Binary files /dev/null and b/locale/zh/img/logo/logo-full.png differ diff --git a/locale/zh/img/logo/logo-full.svg b/locale/zh/img/logo/logo-full.svg new file mode 100644 index 00000000..00c5d316 --- /dev/null +++ b/locale/zh/img/logo/logo-full.svg @@ -0,0 +1,98 @@ + + + + + + image/svg+xml + + + + + + + + + + NeutralLanguageCouncil + + pronouns.page + diff --git a/migrations/035-credentials.sql b/migrations/035-credentials.sql new file mode 100644 index 00000000..3368c2b4 --- /dev/null +++ b/migrations/035-credentials.sql @@ -0,0 +1,40 @@ +-- Up + +ALTER TABLE profiles ADD COLUMN credentials TEXT NULL DEFAULT NULL; +ALTER TABLE profiles ADD COLUMN credentialsLevel INTEGER NULL DEFAULT NULL; +ALTER TABLE profiles ADD COLUMN credentialsName INTEGER NULL DEFAULT NULL; + +UPDATE profiles +SET credentials = 'magistra filologii angielskiej', + credentialsLevel = 5, + credentialsName = 'Karolina Grenda' +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'kafka'); + +UPDATE profiles +SET credentials = 'magister filologii angielskiej|student filologii hiszpańskiej|tłumacz', + credentialsLevel = 5 +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'ausir'); + +UPDATE profiles +SET credentials = 'magistra filologii słowiańskiej (z językiem czeskim) i filologii polskiej na UAM|dziennikarka {http://gazetylokalne.pl/sgl-local-press-2018-nominacje/=nominowana do SGL Local Press 2018} za reportaż „Film »Kler« i kler wrzesiński”', + credentialsLevel = 5, + credentialsName = 'Anna Tess Gołębiowska' +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'tess'); + +UPDATE profiles +SET credentials = 'magistru językoznawstwa', + credentialsLevel = 5 +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'cake'); + +UPDATE profiles +SET credentials = 'magister językoznawstwa|absolwent Gender Studies w PAN|doktorant w Instytucie Anglistyki UW|https://orcid.org/0000-0002-0214-0387', + credentialsLevel = 6 +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'szymon'); + +UPDATE profiles +SET credentials = 'inżynierze informatyki|finaliszcze Olimpiady Literatury i Języka Polskiego', + credentialsLevel = 1 +WHERE locale = 'pl' AND userId = (SELECT id FROM users WHERE usernameNorm = 'andrea'); + +-- Down + diff --git a/nuxt.config.js b/nuxt.config.js index 2137a5a5..98463a11 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -13,13 +13,16 @@ const banner = process.env.BASE_URL + '/api/banner/zaimki.png'; const colour = '#C71585'; process.env.LOCALE = locale; +if (process.env.ENV) { + process.env.NODE_ENV = process.env.ENV; +} const allVersionsUrls = buildList(function*() { if (process.env.NODE_ENV === 'development') { yield 'http://pronouns.test:3000'; yield 'http://localhost:3000'; } else if (process.env.NODE_ENV === 'test') { - // nothing + yield 'https://test.pronouns.page'; } else { yield 'https://pronouns.page'; for (let loc in locales) { diff --git a/plugins/link.js b/plugins/link.js index 1e1d2808..91fe5c7b 100644 --- a/plugins/link.js +++ b/plugins/link.js @@ -46,6 +46,10 @@ const LINK_PROVIDERS = { homepage: 'https://cake.avris.it', name: 'Attraction Layer Cake', }, + orcid: { + regex: '^https?://(?:www.)?orcid.org/([^/]+)', + icon: 'https://orcid.org/assets/icons/favicon.ico', + }, }; export default { diff --git a/routes/profileEditor.vue b/routes/profileEditor.vue index 5a260780..ba7ff9e7 100644 --- a/routes/profileEditor.vue +++ b/routes/profileEditor.vue @@ -50,6 +50,40 @@ + +

@@ -215,6 +249,9 @@ teamName: profile.teamName, footerName: profile.footerName, footerAreas: profile.footerAreas, + credentials: profile.credentials, + credentialsLevel: profile.credentialsLevel, + credentialsName: profile.credentialsName, }; } } @@ -236,6 +273,9 @@ teamName: profile.teamName, footerName: profile.footerName, footerAreas: [], + credentials: [], + credentialsLevel: null, + credentialsName: null, }; } @@ -251,6 +291,9 @@ teamName: '', footerName: '', footerAreas: [], + credentials: [], + credentialsLevel: null, + credentialsName: null, }; }, mounted() { @@ -275,6 +318,9 @@ teamName: this.teamName, footerName: this.footerName, footerAreas: this.footerAreas, + credentials: this.credentials, + credentialsLevel: this.credentialsLevel, + credentialsName: this.credentialsName, }); this.$router.push(`/@${this.$user().username}`); } finally { diff --git a/routes/team.vue b/routes/team.vue index 81ed204d..58f2be0c 100644 --- a/routes/team.vue +++ b/routes/team.vue @@ -16,15 +16,71 @@ =

+
- contact.team.description +

contact.team.description

+
    +
  • + +
  • +
+
+

+ + contact.team.credentials.header +

+ + contact.team.credentials.description + + +
+ +
+

+ + contact.team.join.header +

+

contact.team.join.encouragement

+

contact.team.join.areasIntro

+
    +
  • {{item}}
  • +
+

contact.team.join.allies

+

contact.team.join.how

+
    +
  • {{item}}
  • +
+
+

@@ -76,6 +132,26 @@ membersByLocale: await app.$axios.$get(`/admin/list`), } }, + computed: { + credentials() { + const r = []; + for (let locale in this.membersByLocale) { + if (!this.membersByLocale.hasOwnProperty(locale)) { continue; } + for (let member of this.membersByLocale[locale]) { + if (member.locale === this.config.locale && member.credentials !== null) { + r.push(member); + } + } + } + + return r.sort((a, b) => { + if (a.credentialsLevel > b.credentialsLevel) { return -1; } + if (a.credentialsLevel < b.credentialsLevel) { return 1; } + + return Math.random() > 0.5 ? 1 : -1; + }); + }, + }, } diff --git a/server/routes/admin.js b/server/routes/admin.js index 9b208963..5d1c0f1a 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -13,7 +13,7 @@ const router = Router(); router.get('/admin/list', handleErrorAsync(async (req, res) => { return res.json(await caches.admins.fetch(async () => { const admins = await req.db.all(SQL` - SELECT u.username, p.teamName, p.locale, u.id, u.email, u.avatarSource + SELECT u.username, p.teamName, p.locale, u.id, u.email, u.avatarSource, p.credentials, p.credentialsLevel, p.credentialsName FROM users u LEFT JOIN profiles p ON p.userId = u.id WHERE p.teamName IS NOT NULL @@ -34,6 +34,9 @@ router.get('/admin/list', handleErrorAsync(async (req, res) => { admin.avatar = await avatar(req.db, admin); delete admin.id; delete admin.email; + if (admin.credentials) { + admin.credentials = admin.credentials.split('|'); + } if (adminsGroupped[admin.locale] !== undefined) { adminsGroupped[admin.locale].push(admin); diff --git a/server/routes/profile.js b/server/routes/profile.js index 24e14475..d6ca9cca 100644 --- a/server/routes/profile.js +++ b/server/routes/profile.js @@ -47,6 +47,9 @@ const fetchProfiles = async (db, username, self, isAdmin) => { teamName: profile.teamName, footerName: profile.footerName, footerAreas: profile.footerAreas ? profile.footerAreas.split(',') : [], + credentials: profile.credentials ? profile.credentials.split('|') : [], + credentialsLevel: profile.credentialsLevel, + credentialsName: profile.credentialsName, card: profile.card, }; } @@ -160,6 +163,9 @@ router.post('/profile/save', handleErrorAsync(async (req, res) => { teamName = ${req.isGranted() ? req.body.teamName || null : ''}, footerName = ${req.isGranted() ? req.body.footerName || null : ''}, footerAreas = ${req.isGranted() ? req.body.footerAreas.join(',') || null : ''}, + credentials = ${req.isGranted() ? req.body.credentials.join('|') || null : null}, + credentialsLevel = ${req.isGranted() ? req.body.credentialsLevel || null : null}, + credentialsName = ${req.isGranted() ? req.body.credentialsName || null : null}, card = NULL WHERE id = ${ids[0]} `);