[blog] nicer design of post list
This commit is contained in:
parent
1e3c5e4713
commit
2e1aaf2d03
1
Makefile
1
Makefile
|
@ -25,4 +25,5 @@ deploy: install
|
|||
|
||||
switch:
|
||||
-rm data
|
||||
rm -rf cache
|
||||
ln -s ./locale/${LANG} ./data
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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>
|
|
@ -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) {
|
||||
|
|
|
@ -173,7 +173,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -98,7 +98,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -176,7 +176,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -95,7 +95,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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…
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Czytanie ze zrozumieniem
|
||||
|
||||
<small>13.02.2021 | [@andrea](/@andrea)</small>
|
||||
<small>2021-02-13 | [@andrea](/@andrea)</small>
|
||||
|
||||
![](/img/wpolityce.png)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 –
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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)).
|
||||
|
|
|
@ -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!
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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_.
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -77,7 +77,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -180,7 +180,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -80,7 +80,7 @@ links:
|
|||
url: 'https://twitter.com/PronounsPage'
|
||||
headline: '@PronounsPage'
|
||||
recommended: []
|
||||
blog: {}
|
||||
blog: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
|
|
|
@ -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') });
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
|
@ -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"
|
||||
|
|
Reference in New Issue