This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Zaimki/pages/literatura.vue

189 lines
6.6 KiB
Vue
Raw Normal View History

2020-07-22 13:19:23 -07:00
<template>
<div class="container">
2020-09-11 03:17:29 -07:00
<Header/>
<h2>
2020-07-22 13:19:23 -07:00
<Icon v="books"/>
2020-08-25 00:43:21 -07:00
Niebinarna polszczyzna w tekstach kultury
2020-09-11 03:17:29 -07:00
</h2>
2020-07-22 13:19:23 -07:00
<LiteratureMenu all/>
2020-07-24 07:15:28 -07:00
<section>
2020-09-08 09:10:04 -07:00
<Share title="Niebinarna polszczyzna w tekstach kultury"/>
2020-07-24 07:15:28 -07:00
</section>
2020-07-24 05:14:37 -07:00
<section>
2020-09-08 09:10:04 -07:00
<button v-if="!tocShown" class="btn btn-outline-primary btn-block" @click="tocShown = true">
<Icon v="list"/>
Pokaż spis treści
</button>
<ul v-if="tocShown" class="list-group">
<li v-for="[group, groupTemplates] in templateLibrary.split(filterTemplate, false)" class="list-group-item">
<p class="h5">
{{ group.name }}
</p>
<div class="small my-1" v-if="group.description">
<Icon v="info-circle"/>
<em>{{ group.description }}</em>
</div>
<ul class="list-unstyled">
<li v-for="template in groupTemplates" :key="template.canonicalName">
<a v-if="typeof template === 'string'" :href="'#' + toId(template)">
<strong>{{ template.replace(/&/g, ' lub ') }}</strong>
</a>
<a v-else :href="'#' + toId(template.name())">
<strong>{{ template.name() }}</strong>
<small>{{ template.description }}</small>
</a>
</li>
</ul>
</li>
<li class="list-group-item">
<p class="h5 mb-0">
<a href="#inne">
<strong>Inne formy</strong>
</a>
</p>
</li>
</ul>
2020-07-24 05:14:37 -07:00
</section>
2020-07-27 10:06:41 -07:00
<section>
<span class="mr-2 mb-3">
<Icon v="filter"/>
Filtruj:
</span>
2020-08-25 01:41:38 -07:00
<div class="d-inline-block d-md-none">
<div class="btn-group-vertical">
<button v-for="(config, type) in sourceTypes"
:class="['btn', type === filter ? 'btn-primary' : 'btn-outline-primary']"
@click="filter = type"
>
<Icon :v="config.icon"/>
{{ config.text }}
</button>
</div>
</div>
<div class="d-none d-md-inline-block">
<div class="btn-group">
<button v-for="(config, type) in sourceTypes"
:class="['btn', type === filter ? 'btn-primary' : 'btn-outline-primary']"
@click="filter = type"
>
<Icon :v="config.icon"/>
{{ config.text }}
</button>
</div>
2020-07-27 10:06:41 -07:00
</div>
</section>
<section v-for="template in templates" v-if="template.sources.length">
<h2 class="h4" :id="toId(template.name())">
2020-07-24 07:15:28 -07:00
<nuxt-link :to="'/' + template.pronoun()">
2020-07-22 13:19:23 -07:00
{{ template.description }}
2020-07-24 07:15:28 -07:00
<small>({{ template.name() }})</small>
</nuxt-link>
</h2>
2020-07-22 13:19:23 -07:00
2020-07-24 07:15:28 -07:00
<ul class="list-unstyled">
<li v-for="source in template.sources">
2020-07-27 10:06:41 -07:00
<Source :name="source" :filter="filter"/>
2020-07-24 07:15:28 -07:00
</li>
</ul>
</section>
<section v-for="(sources, multiple) in sourcesForMultipleForms">
<h2 class="h4" :id="toId(multiple)">
<nuxt-link :to="'/' + multiple">
Formy wymienne
<small>({{ multiple.replace(/&/g, ' lub ') }})</small>
</nuxt-link>
</h2>
<ul class="list-unstyled">
<li v-for="source in sources">
2020-07-27 10:06:41 -07:00
<Source :name="source" :filter="filter"/>
</li>
</ul>
</section>
<section>
<h2 class="h4" id="inne">
Inne formy
</h2>
<ul class="list-unstyled">
<li v-for="source in otherSources">
2020-07-27 10:06:41 -07:00
<Source :name="source" :filter="filter"/>
</li>
</ul>
</section>
2020-09-04 08:51:26 -07:00
<ScrollButton/>
2020-07-22 13:19:23 -07:00
</div>
</template>
<script>
2020-09-08 09:10:04 -07:00
import { templates, sources, sourcesForMultipleForms, templateLibrary } from '../src/data'
2020-07-27 10:06:41 -07:00
import { Source } from "../src/classes";
2020-07-22 13:19:23 -07:00
export default {
data() {
return {
templates: templates,
sourcesForMultipleForms: sourcesForMultipleForms,
2020-09-08 09:10:04 -07:00
templateLibrary: templateLibrary,
tocShown: false,
2020-07-27 10:06:41 -07:00
sourceTypes: Source.TYPES,
filter: '',
2020-07-22 13:19:23 -07:00
};
},
mounted() {
if (process.client && window.location.hash) {
const $hashEl = this.$el.querySelector(window.location.hash);
if ($hashEl) {
$hashEl.scrollIntoView();
}
}
},
2020-07-22 13:19:23 -07:00
head() {
2020-08-25 00:43:21 -07:00
const title = 'Niebinarna polszczyzna w tekstach kultury';
2020-07-22 13:19:23 -07:00
return {
title: title,
meta: [
{ hid: 'og:title', property: 'og:title', content: title },
{ hid: 'twitter:title', property: 'twitter:title', content: title },
],
}
},
computed: {
otherSources() {
const other = new Set(Object.keys(sources));
for (let template of Object.values(this.templates)) {
for (let source of template.sources) {
other.delete(source);
}
}
for (let sources of Object.values(this.sourcesForMultipleForms)) {
for (let source of sources) {
other.delete(source);
}
}
return other;
},
},
methods: {
toId(str) {
return str.replace(/\//g, '-').replace(/&/g, '_');
2020-09-08 09:10:04 -07:00
},
filterTemplate(t) {
if (typeof t === 'string') {
return Object.keys(sourcesForMultipleForms).includes(t);
}
return t.sources.length;
}
},
2020-07-22 13:19:23 -07:00
}
</script>