[blog] nicer design of post list

This commit is contained in:
Avris 2021-06-23 19:25:56 +02:00
parent 1e3c5e4713
commit 2e1aaf2d03
39 changed files with 142 additions and 67 deletions

View File

@ -25,4 +25,5 @@ deploy: install
switch:
-rm data
rm -rf cache
ln -s ./locale/${LANG} ./data

View File

@ -7,7 +7,7 @@
@import "~bootstrap/scss/type";
//@import "~bootstrap/scss/images";
//@import "~bootstrap/scss/containers";
//@import "~bootstrap/scss/grid";
@import "~bootstrap/scss/grid";
@import "~bootstrap/scss/tables";
@import "~bootstrap/scss/forms";
@import "~bootstrap/scss/buttons";

View File

@ -1,15 +0,0 @@
<template>
<section v-if="Object.keys(config.links.blog).length">
<h2>
<Icon v="pen-nib"/>
<T>links.blog</T>
</h2>
<ul>
<li v-for="(title, slug) in config.links.blog" class="mb-2">
<nuxt-link :to="`/blog/${slug}`">
{{title}}
</nuxt-link>
</li>
</ul>
</section>
</template>

View File

@ -29,7 +29,7 @@
if (this.config.links.academic.length) {
links.push({name: 'links.academic', route: this.config.links.academicRoute, icon: 'vial'});
}
if (Object.keys(this.config.links.blog).length) {
if (this.config.links.blog) {
links.push({name: 'links.blog', route: this.config.links.blogRoute, icon: 'pen-nib'});
}
if (this.config.links.mediaGuests.length || this.config.links.mediaMentions.length) {

View File

@ -173,7 +173,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -183,8 +183,7 @@ links:
headline: '@PronounsPage'
recommended: []
blog:
creating-new-language-version: 'How to create a new language version of Pronouns.page'
blog: false
contact:
enabled: true

View File

@ -98,7 +98,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -176,7 +176,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -95,7 +95,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -1,6 +1,6 @@
# Przemówienie Archiego na konferencji prasowej ws. transfobii w Gazecie Wyborczej
<small>03.10.2020 | [@Archie](/@Archie)</small>
<small>2020-10-03 | [@Archie](/@Archie)</small>
![](/img/lobby-lgbt-wyborcza.jpg)

View File

@ -1,6 +1,6 @@
# Nadszedł czas się obnosić!
<small>03.10.2020 | [@Sybil](/@Sybil)</small>
<small>2020-10-03 | [@Sybil](/@Sybil)</small>
![](/img/czas-sie-obnosic.jpg)

View File

@ -1,6 +1,6 @@
# Zamiast pierdyliarda dyskusji czy wolno używać zróbmy pierdyliard użyć
<small>07.08.2021 | [@andrea](/@andrea)</small>
<small>2020-08-07 | [@andrea](/@andrea)</small>
Gdy wpiszecie w wyszukiwarkę słowo „psycholog”, zobaczycie zgodnie z oczekiwaniami
jego definicję, reklamy poradni psychologicznych, wypowiedzi psychologów…

View File

@ -1,6 +1,6 @@
# Czytanie ze zrozumieniem
<small>13.02.2021 | [@andrea](/@andrea)</small>
<small>2021-02-13 | [@andrea](/@andrea)</small>
![](/img/wpolityce.png)

View File

@ -1,6 +1,6 @@
# Niebinarność w „Gwiezdnych Wojnach”
<small>11.11.2020 | [@ausir](/@ausir)</small>
<small>2020-11-11 | [@ausir](/@ausir)</small>
![](/img/gwiezdne-wojny.jpg)

View File

@ -1,6 +1,6 @@
# Imiona „unisex” w rejestrze PESEL
<small>18.06.2021 | [@andrea](/@andrea)</small>
<small>2021-06-18 | [@andrea](/@andrea)</small>
Wszystkie imiona są unisex.
W końcu słowa to tylko zlepki głosek, którym osoby używające języka nadają znaczenie

View File

@ -1,6 +1,6 @@
# Inkluzywne liczebniki
<small>13.02.2021 | [@andrea](/@andrea)</small>
<small>2021-02-13 | [@andrea](/@andrea)</small>
Choć inne części mowy sprawiają problemy, gdy chce się ich użyć w sposób neutralny płciowo,
to liczebniki oferują nam piękne formy opisujące grupy osób niezależnie od ich płci:

View File

@ -1,6 +1,6 @@
# Krótka notka o osobatywach
<small>27.03.2021 | [@Sybil](/@Sybil) | [mykofanes.blogspot.com](https://mykofanes.blogspot.com/2021/03/krotka-notka-o-osobatywach.html)</small>
<small>2021-03-27 | [@Sybil](/@Sybil) | [mykofanes.blogspot.com](https://mykofanes.blogspot.com/2021/03/krotka-notka-o-osobatywach.html)</small>
_Osoba_ jest bardziej uniwersalna niż _człowiek_, bo może dotyczyć osób kosmicznych, bóstw i australopitejek_ków.

View File

@ -1,6 +1,6 @@
# Manifest Niebinarnej Polszczyzny
<small>20.04.2021 | [@andrea](/@andrea)</small>
<small>2021-04-20 | [@andrea](/@andrea)</small>
Jako [Rada Języka Neutralnego](/kolektyw-rjn) zawsze stroniłośmy od
[preskryptywizmu](https://pl.wikipedia.org/wiki/Preskryptywizm_(j%C4%99zykoznawstwo)).

View File

@ -1,6 +1,6 @@
# Podsumowanie roku 2020
<small>31.12.2020 | [@andrea](/@andrea)</small>
<small>2020-12-31 | [@andrea](/@andrea)</small>
Cóż to był za rok!

View File

@ -1,6 +1,6 @@
# Polskie media o coming oucie Demi Lovato
<small>03.10.2020 | [@Sybil](/@Sybil), [@andrea](/@andrea)</small>
<small>2021-05-03 | [@Sybil](/@Sybil), [@andrea](/@andrea)</small>
![](/img/Demi-Lovato.jpg)

View File

@ -1,6 +1,6 @@
# Rekomendacja Rady w sprawie pytania o płeć w formularzach
<small>24.01.2020 | [@andrea](/@andrea), [@szymon](/@szymon)</small>
<small>2020-01-24 | [@andrea](/@andrea), [@szymon](/@szymon)</small>
Formularze, czy to online czy papierowe, najczęściej są bardzo nieprzyjazne osobom niebinarnym.
Narzucają nam wybór, w którym żadna opcja nie jest prawdą. Mężczyzna czy kobieta? Pan czy Pani?

View File

@ -1,6 +1,6 @@
# Rodzaj żeńskoosobowy
<small>12.05.2021 | [Julia Brodowska](mailto:kontaktjuliabrodowska@gmail.com)</small>
<small>2021-05-12 | [Julia Brodowska](mailto:kontaktjuliabrodowska@gmail.com)</small>
<div class="alert alert-info">
<span class="fal fa-info-circle"></span>

View File

@ -1,6 +1,6 @@
# Niebinarny Spis Powszechny 2021 wnioski
<small>22.03.2021 | [@andrea](/@andrea)</small>
<small>2021-03-22 | [@andrea](/@andrea)</small>
W lutym przeprowadziłośmy pierwszy Niebinarny Spis Powszechny mający na celu zbadanie,
jakim językiem opisują się osoby niebinarne.

View File

@ -1,6 +1,6 @@
# Wystarczyło zapytać…
<small>29.03.2021 | [@Sybil](/@Sybil) | [Facebook](https://www.facebook.com/neutratywy/posts/252705383203921) | [Twitter](https://twitter.com/neutratywy/status/1376518731774500873)</small>
<small>2021-03-29 | [@Sybil](/@Sybil) | [Facebook](https://www.facebook.com/neutratywy/posts/252705383203921) | [Twitter](https://twitter.com/neutratywy/status/1376518731774500873)</small>
![](/img/masha-gessen.jpg)

View File

@ -1,6 +1,6 @@
# Zaimki nie tylko osobowe
<small>13.02.2021 | [@andrea](/@andrea)</small>
<small>2021-02-13 | [@andrea](/@andrea)</small>
Język polski jest na tyle <strike>skomplikowany</strike> bogaty, że chcąc stworzyć stronę
o formach nacechowanych płciowo musiałośmy skupić się na początku tylko na najważniejszych aspektach.

View File

@ -1,6 +1,6 @@
# Zaimki w rodzaju postpłciowym
<small>13.02.2021 | [@andrea](/@andrea)</small>
<small>2021-02-13 | [@andrea](/@andrea)</small>
Czasowniki w [rodzaju postpłciowym](/onu) są bardzo proste: wystarczy wziąć formę żeńską i zamienić „a” na „u”.
_Chciałam → chciałum; poszłaś → poszłuś; zrobiła → zrobiłu_.

View File

@ -121,24 +121,7 @@ links:
academicRoute: 'nauka'
mediaRoute: 'media'
blog:
imiona-unisex-pesel: 'Imiona „unisex” w rejestrze PESEL'
polskie-media-o-demi-lovato: 'Polskie media o coming oucie Demi Lovato'
rodzaj-żeńskoosobowy: 'Rodzaj żeńskoosobowy'
manifest: 'Manifest Niebinarnej Polszczyzny'
wystarczyło-zapytać: 'Wystarczyło zapytać…'
krótka-notka-o-osobatywach: 'Krótka notka o osobatywach'
czytanie-ze-zrozumieniem: 'Czytanie ze zrozumieniem'
spis-2021: 'Niebinarny Spis Powszechny 2021 wnioski'
czy-wolno-uzywac: 'Zamiast pierdyliarda dyskusji czy wolno używać zróbmy pierdyliard użyć'
inkluzywne-liczebniki: 'Inkluzywne liczebniki'
zaimki-postpłciowe: 'Zaimki w rodzaju postpłciowym'
zaimki-nie-tylko-osobowe: 'Zaimki nie tylko osobowe'
archie-wyborcza: 'Przemówienie Arcziego na konferencji prasowej ws. transfobii w Gazecie Wyborczej'
rekomendacja-formularze: 'Rekomendacja Rady w sprawie pytania o płeć w formularzach'
podsumowanie-2020: 'Podsumowanie działalności w roku 2020'
gwiezdne-wojny: 'Niebinarność w „Gwiezdnych Wojnach”'
czas-się-obnosić: 'Nadszedł czas się obnosić! przemówienie Sybila z Wrocławskiego Marszu Równości'
blog: true
academic:
-
icon: 'comment-alt-edit'

View File

@ -77,7 +77,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -379,7 +379,7 @@ english:
description:
- >
Many nonbinary people use more than one form interchangeably and are fine with being called either of them.
blog: {}
blog: false
contact:

View File

@ -180,7 +180,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -80,7 +80,7 @@ links:
url: 'https://twitter.com/PronounsPage'
headline: '@PronounsPage'
recommended: []
blog: {}
blog: false
contact:
enabled: true

View File

@ -196,10 +196,10 @@ export default {
}
}
if (config.links.blog && Object.keys(config.links.blog).length) {
if (config.links.blog) {
routes.push({ path: '/' + config.links.blogRoute, component: resolve(__dirname, 'routes/blog.vue'), name: 'blog' });
routes.push({ path: '/' + config.links.blogRoute + '/:slug', component: resolve(__dirname, 'routes/blogEntry.vue'), name: 'blogEntry' });
}
routes.push({ path: '/' + config.links.blogRoute + '/:slug', component: resolve(__dirname, 'routes/blogEntry.vue'), name: 'blogEntry' });
if (config.people.enabled) {
routes.push({ path: '/' + config.people.route, component: resolve(__dirname, 'routes/people.vue') });

View File

@ -13,6 +13,7 @@
"@nuxtjs/axios": "^5.12.0",
"@nuxtjs/pwa": "^3.0.0-beta.20",
"@nuxtjs/redirect-module": "^0.3.1",
"avris-columnist": "^0.2.2",
"avris-sorter": "^0.0.3",
"aws-sdk": "^2.799.0",
"body-parser": "^1.19.0",

View File

@ -1,7 +1,35 @@
<template>
<div>
<LinksNav/>
<Blog/>
<h2>
<Icon v="pen-nib"/>
<T>links.blog</T>
</h2>
<div class="columnist-wall row" ref="posts">
<div v-for="post in posts" class="columnist-column col-12 col-sm-6 col-md-4 mb-3">
<div class="card shadow">
<nuxt-link v-if="post.hero" :to="`/blog/${post.slug}`" class="">
<img :src="post.hero" class="w-100"/>
</nuxt-link>
<nuxt-link :to="`/blog/${post.slug}`" class="card-body text-center h4 p-3 mb-0">
<span>{{post.title}}</span>
</nuxt-link>
<div class="card-footer small">
<ul class="list-inline mb-0">
<li class="list-inline-item small">
<Icon v="calendar"/>
{{post.date}}
</li>
<li v-for="author in post.authors" class="list-inline-item">
<a :href="`https://pronouns.page/@${author}`" class="badge bg-light text-dark border">
@{{author}}
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<Support/>
<section>
<Share :title="$t('links.blog')"/>
@ -11,8 +39,20 @@
<script>
import { head } from "../src/helpers";
import Columnist from 'avris-columnist';
export default {
async asyncData({app}) {
return {
posts: await app.$axios.$get(`/blog`),
}
},
mounted() {
if (!process.client) { return; }
const columnist = new Columnist(this.$refs.posts);
columnist.start();
},
head() {
return head({
title: this.$t('links.blog'),
@ -20,3 +60,9 @@
},
};
</script>
<style lang="scss" scoped>
.columnist-wall > .columnist-column {
transition: margin-top .2s ease-in-out;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<NotFound v-if="!content"/>
<div v-else class="blog-post">
<router-link :to="'/' + config.links.blogRoute" v-if="Object.keys(config.links.blog).length">
<router-link :to="'/' + config.links.blogRoute" v-if="config.links.blog">
<Icon v="pen-nib"/>
<T>links.blog</T>
</router-link>

View File

@ -23,7 +23,7 @@
<T>contact.team.description</T>
</section>
<router-link :to="'/' + config.links.blogRoute" v-if="Object.keys(config.links.blog).length"
<router-link :to="'/' + config.links.blogRoute" v-if="config.links.blog"
class="btn btn-outline-primary btn-lg">
<Icon v="pen-nib"/>
<T>links.blog</T>

View File

@ -83,6 +83,7 @@ app.use(require('./routes/pronounce').default);
app.use(require('./routes/census').default);
app.use(require('./routes/images').default);
app.use(require('./routes/blog').default);
app.use(function (err, req, res, next) {
console.error(err.stack);

54
server/routes/blog.js Normal file
View File

@ -0,0 +1,54 @@
import { Router } from 'express';
import {handleErrorAsync, shuffle} from "../../src/helpers";
import fs from 'fs';
import cache from "../../src/cache";
const router = Router();
router.get('/blog', handleErrorAsync(async (req, res) => {
return res.json(await cache('main', 'blog.js', Infinity, async () => {
const dir = __dirname + '/../../data/blog';
const posts = [];
fs.readdirSync(dir).forEach(file => {
if (!file.endsWith('.md')) {
return;
}
const slug = file.substring(0, file.length - 3);
const content = fs.readFileSync(dir + '/' + file)
.toString('utf-8')
.split('\n')
.filter(l => !!l);
let title = '', date = '', authorsRaw = '', authors = [], hero = null;
try {
title = content[0].match(/^# (.*)$/)[1];
} catch {
return;
}
try {
[, date, authorsRaw] = content[1].match(/^<small>(\d\d\d\d-\d\d-\d\d) \| ([^|]*).*<\/small>$/);
authors = authorsRaw.split(',').map(a => a.trim().match(/^\[@([^\]]+)]/)[1])
} catch {
return;
}
try {
hero = content[2].match(/^!\[[^\]]*]\(([^)]+)\)$/)[1];
} catch {
}
posts.push({slug, title, date, authors, hero});
});
return posts.sort((a, b) => {
if (a.date < b.date) { return 1; }
if (a.date > b.date) { return -1; }
return 0;
});
}));
}));
export default router;

View File

@ -2003,6 +2003,11 @@ autoprefixer@^9.6.1:
postcss "^7.0.32"
postcss-value-parser "^4.1.0"
avris-columnist@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/avris-columnist/-/avris-columnist-0.2.2.tgz#9da20f4fbd475d48bfd269258ab085d40f5933e6"
integrity sha512-SAqMZz0nwoBcytp7mMCifQQ3vaG6FB3Aanqpj8sl2ZIKPW53GkHBLnxsC7mN0KRpzaxVYqtbBpMlm4sW8JYfIg==
avris-daemonise@^0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/avris-daemonise/-/avris-daemonise-0.0.2.tgz#acc8eab86fb396cf3953d5fb96217d5eafe64b37"