feat(site): initialise site web
This commit is contained in:
parent
172094787e
commit
5cd0d4bf4a
27 changed files with 1202 additions and 0 deletions
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# Generated files
|
||||||
|
package/generated*
|
||||||
|
|
||||||
|
# Ignore installed npm modules
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Ignore build tool output, e.g. code coverage
|
||||||
|
.nyc_output/
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# Ignore API documentation
|
||||||
|
api-docs/
|
||||||
|
|
||||||
|
# Ignore folders from source code editors
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Ignore eleventy output when doing manual tests
|
||||||
|
_site/
|
||||||
|
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
# Ignore test files
|
||||||
|
.cache
|
||||||
|
test/stubs-layout-cache/_includes/*.js
|
11
_data/metadata.js
Normal file
11
_data/metadata.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module.exports = {
|
||||||
|
title: "Missing Number",
|
||||||
|
url: "https://missingnumber.fanstuff.garden/",
|
||||||
|
language: "fr",
|
||||||
|
description: "Découvrez les secrets des premières version de Pokémon",
|
||||||
|
author: {
|
||||||
|
name: "Kazhnuz",
|
||||||
|
email: "kazhnuz@kobold.cafe",
|
||||||
|
url: "https://kazhnuz.space/"
|
||||||
|
}
|
||||||
|
}
|
34
_includes/layouts/base-subpage.njk
Normal file
34
_includes/layouts/base-subpage.njk
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
<main id="skip">
|
||||||
|
<div>
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<aside id="more-info">
|
||||||
|
<div class="card">
|
||||||
|
<ol>
|
||||||
|
{%- for post in collections.all | sort(false, true, "data.eleventySubNavigation.order") -%}
|
||||||
|
{%- if post.data.eleventyNavigation.key == eleventySubNavigation.parent -%}
|
||||||
|
<li><a href="{{ post.url }}" style="padding-left:3px;">← {{ post.data.eleventyNavigation.key }}</a></li>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sommaire</h2>
|
||||||
|
{{ content | toc | safe }}
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h2>Pages sœurs</h2>
|
||||||
|
<ol>
|
||||||
|
{%- for post in collections.all | sort(false, true, "data.eleventySubNavigation.order") -%}
|
||||||
|
{%- if post.data.eleventySubNavigation.parent == eleventySubNavigation.parent -%}
|
||||||
|
<li><a href="{{ post.url }}">{{ post.data.eleventySubNavigation.key }}</a></li>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</aside>
|
25
_includes/layouts/base-toppage.njk
Normal file
25
_includes/layouts/base-toppage.njk
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
<main id="skip">
|
||||||
|
<div>
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<aside id="more-info">
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sommaire</h2>
|
||||||
|
{{ content | toc | safe }}
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sous-pages</h2>
|
||||||
|
<ol>
|
||||||
|
{%- for post in collections.all | sort(false, true, "data.eleventySubNavigation.order") -%}
|
||||||
|
{%- if post.data.eleventySubNavigation.parent == eleventyNavigation.key -%}
|
||||||
|
<li><a href="{{ post.url }}">{{ post.data.eleventySubNavigation.key }}</a></li>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</aside>
|
15
_includes/layouts/base.njk
Normal file
15
_includes/layouts/base.njk
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
<main id="skip">
|
||||||
|
<div>
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<aside id="more-info">
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sommaire</h2>
|
||||||
|
{{ content | toc | safe }}
|
||||||
|
</div>
|
||||||
|
</aside>
|
20
_includes/layouts/category.njk
Normal file
20
_includes/layouts/category.njk
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
<main id="skip">
|
||||||
|
<div>
|
||||||
|
{{ content | safe }}
|
||||||
|
<h2 id="liste-des-pages">Liste des pages</h2>
|
||||||
|
{{ collections.all | eleventyNavigation: "Annuaire", navToHtmlOptions | eleventyNavigationToHtml | safe | json }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<aside id="more-info">
|
||||||
|
<div class="card">
|
||||||
|
<h2 class="visually-hidden">Table of Content</h2>
|
||||||
|
{{ content | toc | safe }}
|
||||||
|
<ul>
|
||||||
|
<li><a href="#liste-des-pages">Liste des pages</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</aside>
|
8
_includes/layouts/home.njk
Normal file
8
_includes/layouts/home.njk
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
<main id="skip">
|
||||||
|
<div>
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
|
</main>
|
47
_includes/layouts/parent.njk
Normal file
47
_includes/layouts/parent.njk
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="{{ metadata.language }}">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>{{ title or metadata.title }}</title>
|
||||||
|
<meta name="description" content="{{ description or metadata.description }}">
|
||||||
|
|
||||||
|
{#- Atom and JSON feeds included by default #}
|
||||||
|
<link rel="alternate" href="/feed/feed.xml" type="application/atom+xml" title="{{ metadata.title }}">
|
||||||
|
<link rel="alternate" href="/feed/feed.json" type="application/json" title="{{ metadata.title }}">
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.png">
|
||||||
|
<script src="/js/datatables.js"></script>
|
||||||
|
|
||||||
|
{#- Uncomment this if you’d like folks to know that you used Eleventy to build your site! #}
|
||||||
|
<meta name="generator" content="{{ eleventy.generator }}">
|
||||||
|
|
||||||
|
{%- css %}{% include "public/css/index.css" %}{% endcss %}
|
||||||
|
{%- css %}{% include "public/css/datatables.css" %}{% endcss %}
|
||||||
|
<style>{% getBundle "css" %}</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="#skip" class="visually-hidden">Skip to main content</a>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>
|
||||||
|
<a href="/" class="home-link"><img src="/img/logo.png" alt="{{ metadata.title }}"></a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2 class="visually-hidden">Top level navigation menu</h2>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<div class="wrapper">
|
||||||
|
<nav id="sidebar">
|
||||||
|
{{ collections.all | eleventyNavigation | eleventyNavigationToHtml({anchorClass: "itemLink",activeAnchorClass: "active",activeListItemClass: "active",activeKey: eleventyNavigation.key, listClass: "nav", listItemClass: "item"}) | safe }}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="/img/cc-by-sa.png" /><span class="visually-hidden">Tout le contenu de cette page est sous licence Creatve Common Attribution - Partage à l'identique.</span></a></footer>
|
||||||
|
|
||||||
|
<!-- Current page: {{ page.url | htmlBaseUrl }} -->
|
||||||
|
</body>
|
||||||
|
</html>
|
28
_includes/layouts/post.njk
Normal file
28
_includes/layouts/post.njk
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
layout: layouts/parent.njk
|
||||||
|
---
|
||||||
|
{# Only include the syntax highlighter CSS on blog posts #}
|
||||||
|
{%- css %}{% include "node_modules/prismjs/themes/prism-okaidia.css" %}{% endcss %}
|
||||||
|
{%- css %}{% include "public/css/prism-diff.css" %}{%- endcss %}
|
||||||
|
<h1>{{ title }}</h1>
|
||||||
|
|
||||||
|
<ul class="post-metadata">
|
||||||
|
<li><time datetime="{{ page.date | htmlDateString }}">{{ page.date | readableDate }}</time></li>
|
||||||
|
{%- for tag in tags | filterTagList %}
|
||||||
|
{%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
||||||
|
<li><a href="{{ tagUrl }}" class="post-tag">{{ tag }}</a>{%- if not loop.last %}, {% endif %}</li>
|
||||||
|
{%- endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{{ content | safe }}
|
||||||
|
|
||||||
|
{%- if collections.posts %}
|
||||||
|
{%- set previousPost = collections.posts | getPreviousCollectionItem %}
|
||||||
|
{%- set nextPost = collections.posts | getNextCollectionItem %}
|
||||||
|
{%- if nextPost or previousPost %}
|
||||||
|
<ul class="links-nextprev">
|
||||||
|
{%- if previousPost %}<li>Previous: <a href="{{ previousPost.url }}">{{ previousPost.data.title }}</a></li>{% endif %}
|
||||||
|
{%- if nextPost %}<li>Next: <a href="{{ nextPost.url }}">{{ nextPost.data.title }}</a></li>{% endif %}
|
||||||
|
</ul>
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
9
_includes/postslist.njk
Normal file
9
_includes/postslist.njk
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{%- css %}.postlist { counter-reset: start-from {{ (postslistCounter or postslist.length) + 1 }} }{% endcss %}
|
||||||
|
<ol reversed class="postlist">
|
||||||
|
{% for post in postslist | reverse %}
|
||||||
|
<li class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
||||||
|
<a href="{{ post.url }}" class="postlist-link">{% if post.data.title %}{{ post.data.title }}{% else %}<code>{{ post.url }}</code>{% endif %}</a>
|
||||||
|
<time class="postlist-date" datetime="{{ post.date | htmlDateString }}">{{ post.date | readableDate("LLLL yyyy") }}</time>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ol>
|
19
content/404.md
Normal file
19
content/404.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
layout: layouts/home.njk
|
||||||
|
permalink: 404.html
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
|
---
|
||||||
|
# Contenu non trouvé.
|
||||||
|
|
||||||
|
Retournez à l'<a href="/">accueil</a> et essayer une autre page.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Read more: https://www.11ty.dev/docs/quicktips/not-found/
|
||||||
|
|
||||||
|
This will work for both GitHub pages and Netlify:
|
||||||
|
|
||||||
|
* https://help.github.com/articles/creating-a-custom-404-page-for-your-github-pages-site/
|
||||||
|
* https://www.netlify.com/docs/redirects/#custom-404
|
||||||
|
|
||||||
|
-->
|
31
content/apropos.md
Normal file
31
content/apropos.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
layout: layouts/base.njk
|
||||||
|
eleventyNavigation:
|
||||||
|
key: À propos
|
||||||
|
parent: Accueil
|
||||||
|
order: 0
|
||||||
|
---
|
||||||
|
|
||||||
|
# À propos de Missing Number
|
||||||
|
|
||||||
|
Missing Number est un fansite pokémon orienté 1G / 2G, visant à parler des différents aspects de cette époque. Il a pour but à terme de devenir une sorte de mini "guide" de ces jeux, offrant un peu tout ce qu'il y a a savoir aussi. Il est utilise le générateur de site Eleventy pour former des pages HTML simple, et cherche à être légé et rapide à charger.
|
||||||
|
|
||||||
|
Ce site à un concept et un sujet similaire au site [Blue Moon Falls](https://bluemoonfalls.com/), mais une approche un peu différente (et Missing Number est en Français là ou BMF est en anglais). Blue Moon Fall offre une approche permettant de découvrir plus les jeux Pokémon 1G/2G et notamment certaines des mécaniques de customisations et "comment obtenir le plus de fun des jeux", là ou Missing Number vise à montrer un tas de chose qui existaient à cette époque, et tout l'aspect "méta-jeu". Si un jour peut-être qu'on aura quelques guides stratégiques pour les pokémons, pour l'instant nous n'en avons pas.
|
||||||
|
|
||||||
|
Cependant, je vous conseille de visiter aussi Blue Moon Falls si vous lisez l'anglais, le site à une approche complémentaire très intéressante, et fournis plusieurs outils dont on reparlera dans les pages adéquates.
|
||||||
|
|
||||||
|
Nous avons aussi quelques informations en commun avec le site [PRAMA Initiative](https://www.prama-initiative.com/), un fanwiki de glitchologie Pokémon, mais ceux-ci sont bieeeen plus complet sur ce sujet (même s'ils n'ont pas encore de glitchdex).
|
||||||
|
|
||||||
|
## Pourquoi ce site ?
|
||||||
|
|
||||||
|
Le but de ce site est de fournir un petit site sur un sujet très spécifique (les pokémons des générations 1 et 2) regroupant des liens vers de nombreux autres endroits ou vous aurez plus d'informations. L'idée est d'être moins complet qu'un wiki, mais un peu plus abordable, et traitant de sujets plus divers (mais centré sur la thématique commune), n'hésitant pas à aller dans les domaines moins "officiels", voir moins encyclopédique.
|
||||||
|
|
||||||
|
Il se pose en complément des gros sites Pokémon, tout en étant un petit espace ou je peux parler de la partie qui me plaît de ces sujets. L'idée est aussi de fournir un feeling un peu de cette époque, en abordant de nombreux sujets qui revenaient dans la période (ou plus tard) autour de ces jeux.
|
||||||
|
|
||||||
|
## Pourquoi la 1G/2G ?
|
||||||
|
|
||||||
|
J'ai fait ce site parce que j'ai passé d'excellent moment sur ces générations, et que je voulais aider à les rendre plus accessible aux gens voulant s'y lancer maintenant. Par rapport aux pokémon moderne, les premières générations ont pas mal d'archaïsme, mais elles ont aussi un scope plus petit qui les rends plus accessible sur certains points. N'ayant pas des centaines et centaines de pokémon avec lesquels jongler, cela en fait des jeux plus "abordable" sur certains points, ayant un peu moins de complexité.
|
||||||
|
|
||||||
|
Cela ne veut pas dire qu'elles sont toujours facile, ou n'offrent pas de richesse, mais elles ont un caractère plus simple. Mais à côté, il y a tout un univers moins connus, fondée non pas sur les jeux en eux-même mais tout les discours et les phénomènes émergeant qui ont eut lieu.
|
||||||
|
|
||||||
|
D'autres "blocs" de générations pourraient être fait avec d'autres sites similaires, tel qu'un site 3-5G, un site 6G/7G, etc.
|
3
content/feed/feed.11tydata.js
Normal file
3
content/feed/feed.11tydata.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = {
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
|
}
|
27
content/feed/feed.njk
Executable file
27
content/feed/feed.njk
Executable file
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
# Metadata comes from _data/metadata.js
|
||||||
|
permalink: /feed/feed.xml
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="{{ metadata.language }}">
|
||||||
|
<title>{{ metadata.title }}</title>
|
||||||
|
<subtitle>{{ metadata.description }}</subtitle>
|
||||||
|
<link href="{{ permalink | htmlBaseUrl(metadata.url) }}" rel="self"/>
|
||||||
|
<link href="{{ metadata.url | addPathPrefixToFullUrl }}"/>
|
||||||
|
<updated>{{ collections.posts | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
|
||||||
|
<id>{{ metadata.url }}</id>
|
||||||
|
<author>
|
||||||
|
<name>{{ metadata.author.name }}</name>
|
||||||
|
<email>{{ metadata.author.email }}</email>
|
||||||
|
</author>
|
||||||
|
{%- for post in collections.posts | reverse %}
|
||||||
|
{% set absolutePostUrl %}{{ post.url | htmlBaseUrl(metadata.url) }}{% endset %}
|
||||||
|
<entry>
|
||||||
|
<title>{{ post.data.title }}</title>
|
||||||
|
<link href="{{ absolutePostUrl }}"/>
|
||||||
|
<updated>{{ post.date | dateToRfc3339 }}</updated>
|
||||||
|
<id>{{ absolutePostUrl }}</id>
|
||||||
|
<content type="html">{{ post.templateContent | transformWithHtmlBase(absolutePostUrl, post.url) }}</content>
|
||||||
|
</entry>
|
||||||
|
{%- endfor %}
|
||||||
|
</feed>
|
29
content/feed/json.njk
Normal file
29
content/feed/json.njk
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
# Metadata comes from _data/metadata.js
|
||||||
|
permalink: /feed/feed.json
|
||||||
|
---
|
||||||
|
{
|
||||||
|
"version": "https://jsonfeed.org/version/1.1",
|
||||||
|
"title": "{{ metadata.title }}",
|
||||||
|
"language": "{{ metadata.language }}",
|
||||||
|
"home_page_url": "{{ metadata.url | addPathPrefixToFullUrl }}",
|
||||||
|
"feed_url": "{{ permalink | htmlBaseUrl(metadata.url) }}",
|
||||||
|
"description": "{{ metadata.description }}",
|
||||||
|
"author": {
|
||||||
|
"name": "{{ metadata.author.name }}",
|
||||||
|
"url": "{{ metadata.author.url }}"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{%- for post in collections.posts | reverse %}
|
||||||
|
{%- set absolutePostUrl = post.url | htmlBaseUrl(metadata.url) %}
|
||||||
|
{
|
||||||
|
"id": "{{ absolutePostUrl }}",
|
||||||
|
"url": "{{ absolutePostUrl }}",
|
||||||
|
"title": "{{ post.data.title }}",
|
||||||
|
"content_html": {% if post.templateContent %}{{ post.templateContent | transformWithHtmlBase(absolutePostUrl, post.url) | dump | safe }}{% else %}""{% endif %},
|
||||||
|
"date_published": "{{ post.date | dateToRfc3339 }}"
|
||||||
|
}
|
||||||
|
{% if not loop.last %},{% endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
]
|
||||||
|
}
|
35
content/index.md
Normal file
35
content/index.md
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
layout: layouts/base.njk
|
||||||
|
eleventyNavigation:
|
||||||
|
key: Accueil
|
||||||
|
order: 0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bienvenue sur Missing-Number
|
||||||
|
|
||||||
|
Missing-Number est un petit site Pokémon orienté 1G / 2G, qui explore les différents aspects de la série à cette époque, et parle aussi bien des jeux que des rumeurs et légendes urbaines autour. Vous pouvez y trouver quelques sujets niches, ainsi que des pokédex pour les version 1G/2G. Il est proche dans l'esprit de [Blue Moon Falls](https://bluemoonfalls.com/), un autre site parlant du sujet (en anglais).
|
||||||
|
|
||||||
|
L'idée de Missing Number est du coup d'être un peu un espace de découverte, où vous pourrez en découvrir plus sur ces deux jeux rétro à votre guise. [En savoir plus](/about).
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
- **2024/02/28** - Ouverture du site
|
||||||
|
|
||||||
|
## Todo
|
||||||
|
|
||||||
|
- Ajouter les jeux secondaires de ces générations
|
||||||
|
- Pokédex G2 béta (va compléter la page existante)
|
||||||
|
- Creepypasta et légendes urbaines du genre
|
||||||
|
- Infos sur le TGC à l'époque 1G/2G
|
||||||
|
- Ajouter une section sur les glitchs
|
||||||
|
- Créer "l'AU" Indigo Foundation, qui mélange pleins de ces éléments présentés ici sous forme d'un univers alternatif
|
||||||
|
- Ajouter un annuaire des sites web
|
||||||
|
|
||||||
|
## Sources et crédits
|
||||||
|
|
||||||
|
Ce site faisant en grande partie du regroupement et de la traduction d'informations, de nombreuses informations sont reprise de divers wiki pokémon anglophones et traduits. Les sources sont disponibles également de manière plus précise (ainsi que les artistes quand des artworks de fans sont utilisés) dans chaque page du site quand c'est pertinent.
|
||||||
|
|
||||||
|
- Les décompilations du [projet pret](https://github.com/pret/) - Les informations internes des jeux, ainsi que de nombreux sprites
|
||||||
|
- [The Cutting Room Floor]() - Toutes les informations à propos des béta et éléments de développements des jeux
|
||||||
|
- [Bulbapedia]() (en) et [Pokepedia]() (fr) - Wiki pokémon de références, où j'ai récupéré de nombreuses informations plus génériques
|
||||||
|
- [Tyradex](https://tyradex.vercel.app/) - API pokedex francophone, j'y ai récupéré quelques informations qui me manquait des décompilations (genre des tailles/poids)
|
14
content/sitemap/sitemap.xml.njk
Normal file
14
content/sitemap/sitemap.xml.njk
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
permalink: /sitemap.xml
|
||||||
|
eleventyExcludeFromCollections: true
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
{%- for page in collections.all %}
|
||||||
|
{% set absoluteUrl %}{{ page.url | htmlBaseUrl(metadata.url) }}{% endset %}
|
||||||
|
<url>
|
||||||
|
<loc>{{ absoluteUrl }}</loc>
|
||||||
|
<lastmod>{{ page.date | htmlDateString }}</lastmod>
|
||||||
|
</url>
|
||||||
|
{%- endfor %}
|
||||||
|
</urlset>
|
50
eleventy.config.drafts.js
Normal file
50
eleventy.config.drafts.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
function eleventyComputedPermalink() {
|
||||||
|
// When using `addGlobalData` and you *want* to return a function, you must nest functions like this.
|
||||||
|
// `addGlobalData` acts like a global data file and runs the top level function it receives.
|
||||||
|
return (data) => {
|
||||||
|
// Always skip during non-watch/serve builds
|
||||||
|
if(data.draft && !process.env.BUILD_DRAFTS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.permalink;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function eleventyComputedExcludeFromCollections() {
|
||||||
|
// When using `addGlobalData` and you *want* to return a function, you must nest functions like this.
|
||||||
|
// `addGlobalData` acts like a global data file and runs the top level function it receives.
|
||||||
|
return (data) => {
|
||||||
|
// Always exclude from non-watch/serve builds
|
||||||
|
if(data.draft && !process.env.BUILD_DRAFTS) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.eleventyExcludeFromCollections;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.eleventyComputedPermalink = eleventyComputedPermalink;
|
||||||
|
module.exports.eleventyComputedExcludeFromCollections = eleventyComputedExcludeFromCollections;
|
||||||
|
|
||||||
|
module.exports = eleventyConfig => {
|
||||||
|
eleventyConfig.addGlobalData("eleventyComputed.permalink", eleventyComputedPermalink);
|
||||||
|
eleventyConfig.addGlobalData("eleventyComputed.eleventyExcludeFromCollections", eleventyComputedExcludeFromCollections);
|
||||||
|
|
||||||
|
let logged = false;
|
||||||
|
eleventyConfig.on("eleventy.before", ({runMode}) => {
|
||||||
|
let text = "Excluding";
|
||||||
|
// Only show drafts in serve/watch modes
|
||||||
|
if(runMode === "serve" || runMode === "watch") {
|
||||||
|
process.env.BUILD_DRAFTS = true;
|
||||||
|
text = "Including";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only log once.
|
||||||
|
if(!logged) {
|
||||||
|
console.log( `[11ty/eleventy-base-blog] ${text} drafts.` );
|
||||||
|
}
|
||||||
|
|
||||||
|
logged = true;
|
||||||
|
});
|
||||||
|
}
|
34
eleventy.config.images.js
Normal file
34
eleventy.config.images.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
const path = require("path");
|
||||||
|
const eleventyImage = require("@11ty/eleventy-img");
|
||||||
|
|
||||||
|
module.exports = eleventyConfig => {
|
||||||
|
function relativeToInputPath(inputPath, relativeFilePath) {
|
||||||
|
let split = inputPath.split("/");
|
||||||
|
split.pop();
|
||||||
|
|
||||||
|
return path.resolve(split.join(path.sep), relativeFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eleventy Image shortcode
|
||||||
|
// https://www.11ty.dev/docs/plugins/image/
|
||||||
|
eleventyConfig.addAsyncShortcode("image", async function imageShortcode(src, alt, widths, sizes) {
|
||||||
|
// Full list of formats here: https://www.11ty.dev/docs/plugins/image/#output-formats
|
||||||
|
// Warning: Avif can be resource-intensive so take care!
|
||||||
|
let formats = ["avif", "webp", "auto"];
|
||||||
|
let file = relativeToInputPath(this.page.inputPath, src);
|
||||||
|
let metadata = await eleventyImage(file, {
|
||||||
|
widths: widths || ["auto"],
|
||||||
|
formats,
|
||||||
|
outputDir: path.join(eleventyConfig.dir.output, "img"), // Advanced usage note: `eleventyConfig.dir` works here because we’re using addPlugin.
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO loading=eager and fetchpriority=high
|
||||||
|
let imageAttributes = {
|
||||||
|
alt,
|
||||||
|
sizes,
|
||||||
|
loading: "lazy",
|
||||||
|
decoding: "async",
|
||||||
|
};
|
||||||
|
return eleventyImage.generateHTML(metadata, imageAttributes);
|
||||||
|
});
|
||||||
|
};
|
144
eleventy.config.js
Normal file
144
eleventy.config.js
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
const { DateTime } = require("luxon");
|
||||||
|
const markdownItAnchor = require("markdown-it-anchor");
|
||||||
|
|
||||||
|
const pluginRss = require("@11ty/eleventy-plugin-rss");
|
||||||
|
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
|
||||||
|
const pluginBundle = require("@11ty/eleventy-plugin-bundle");
|
||||||
|
const pluginNavigation = require("@11ty/eleventy-navigation");
|
||||||
|
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy");
|
||||||
|
|
||||||
|
const pluginDrafts = require("./eleventy.config.drafts.js");
|
||||||
|
const pluginImages = require("./eleventy.config.images.js");
|
||||||
|
const pluginTOC = require('eleventy-plugin-toc');
|
||||||
|
|
||||||
|
module.exports = function(eleventyConfig) {
|
||||||
|
// Copy the contents of the `public` folder to the output folder
|
||||||
|
// For example, `./public/css/` ends up in `_site/css/`
|
||||||
|
eleventyConfig.addPassthroughCopy({
|
||||||
|
"./public/": "/",
|
||||||
|
"./node_modules/prismjs/themes/prism-okaidia.css": "/css/prism-okaidia.css"
|
||||||
|
});
|
||||||
|
|
||||||
|
// Run Eleventy when these files change:
|
||||||
|
// https://www.11ty.dev/docs/watch-serve/#add-your-own-watch-targets
|
||||||
|
|
||||||
|
// Watch content images for the image pipeline.
|
||||||
|
eleventyConfig.addWatchTarget("content/**/*.{svg,webp,png,jpeg}");
|
||||||
|
|
||||||
|
// App plugins
|
||||||
|
eleventyConfig.addPlugin(pluginDrafts);
|
||||||
|
eleventyConfig.addPlugin(pluginImages);
|
||||||
|
|
||||||
|
// Official plugins
|
||||||
|
eleventyConfig.addPlugin(pluginRss);
|
||||||
|
eleventyConfig.addPlugin(pluginSyntaxHighlight, {
|
||||||
|
preAttributes: { tabindex: 0 }
|
||||||
|
});
|
||||||
|
eleventyConfig.addPlugin(pluginNavigation);
|
||||||
|
eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
|
||||||
|
eleventyConfig.addPlugin(pluginBundle);
|
||||||
|
eleventyConfig.addPlugin(pluginTOC, {
|
||||||
|
tags: ['h2'],
|
||||||
|
wrapper: 'div'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Filters
|
||||||
|
eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => {
|
||||||
|
// Formatting tokens for Luxon: https://moment.github.io/luxon/#/formatting?id=table-of-tokens
|
||||||
|
return DateTime.fromJSDate(dateObj, { zone: zone || "utc" }).toFormat(format || "dd LLLL yyyy");
|
||||||
|
});
|
||||||
|
|
||||||
|
eleventyConfig.addFilter('htmlDateString', (dateObj) => {
|
||||||
|
// dateObj input: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string
|
||||||
|
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat('yyyy-LL-dd');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get the first `n` elements of a collection.
|
||||||
|
eleventyConfig.addFilter("head", (array, n) => {
|
||||||
|
if(!Array.isArray(array) || array.length === 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if( n < 0 ) {
|
||||||
|
return array.slice(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array.slice(0, n);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Return the smallest number argument
|
||||||
|
eleventyConfig.addFilter("min", (...numbers) => {
|
||||||
|
return Math.min.apply(null, numbers);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Return all the tags used in a collection
|
||||||
|
eleventyConfig.addFilter("getAllTags", collection => {
|
||||||
|
let tagSet = new Set();
|
||||||
|
for(let item of collection) {
|
||||||
|
(item.data.tags || []).forEach(tag => tagSet.add(tag));
|
||||||
|
}
|
||||||
|
return Array.from(tagSet);
|
||||||
|
});
|
||||||
|
|
||||||
|
eleventyConfig.addFilter("filterTagList", function filterTagList(tags) {
|
||||||
|
return (tags || []).filter(tag => ["all", "nav", "post", "posts"].indexOf(tag) === -1);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Customize Markdown library settings:
|
||||||
|
eleventyConfig.amendLibrary("md", mdLib => {
|
||||||
|
mdLib.use(markdownItAnchor, {
|
||||||
|
permalink: markdownItAnchor.permalink.ariaHidden({
|
||||||
|
placement: "after",
|
||||||
|
class: "header-anchor",
|
||||||
|
symbol: "#",
|
||||||
|
ariaHidden: false,
|
||||||
|
}),
|
||||||
|
level: [1,2,3,4],
|
||||||
|
slugify: eleventyConfig.getFilter("slugify")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Features to make your build faster (when you need them)
|
||||||
|
|
||||||
|
// If your passthrough copy gets heavy and cumbersome, add this line
|
||||||
|
// to emulate the file copy on the dev server. Learn more:
|
||||||
|
// https://www.11ty.dev/docs/copy/#emulate-passthrough-copy-during-serve
|
||||||
|
|
||||||
|
// eleventyConfig.setServerPassthroughCopyBehavior("passthrough");
|
||||||
|
|
||||||
|
return {
|
||||||
|
// Control which files Eleventy will process
|
||||||
|
// e.g.: *.md, *.njk, *.html, *.liquid
|
||||||
|
templateFormats: [
|
||||||
|
"md",
|
||||||
|
"njk",
|
||||||
|
"html",
|
||||||
|
"liquid",
|
||||||
|
],
|
||||||
|
|
||||||
|
// Pre-process *.md files with: (default: `liquid`)
|
||||||
|
markdownTemplateEngine: "njk",
|
||||||
|
|
||||||
|
// Pre-process *.html files with: (default: `liquid`)
|
||||||
|
htmlTemplateEngine: "njk",
|
||||||
|
|
||||||
|
// These are all optional:
|
||||||
|
dir: {
|
||||||
|
input: "content", // default: "."
|
||||||
|
includes: "../_includes", // default: "_includes"
|
||||||
|
data: "../_data", // default: "_data"
|
||||||
|
output: "_site"
|
||||||
|
},
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
// Optional items:
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
|
||||||
|
// If your site deploys to a subdirectory, change `pathPrefix`.
|
||||||
|
// Read more: https://www.11ty.dev/docs/config/#deploy-to-a-subdirectory-with-a-path-prefix
|
||||||
|
|
||||||
|
// When paired with the HTML <base> plugin https://www.11ty.dev/docs/plugins/html-base/
|
||||||
|
// it will transform any absolute URLs in your HTML to include this
|
||||||
|
// folder name and does **not** affect where things go in the output folder.
|
||||||
|
pathPrefix: "/",
|
||||||
|
};
|
||||||
|
};
|
24
netlify.toml
Normal file
24
netlify.toml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
[build]
|
||||||
|
publish = "_site"
|
||||||
|
command = "npm run build"
|
||||||
|
|
||||||
|
[[plugins]]
|
||||||
|
|
||||||
|
# Opt-in to the Netlify Lighthouse plugin (choose one):
|
||||||
|
|
||||||
|
# 1. Go to your site on https://app.netlify.com and navigate to the Integrations tab, search for the `Lighthouse` plugin
|
||||||
|
# 2. Or via `npm install -D @netlify/plugin-lighthouse`
|
||||||
|
|
||||||
|
# Read more: https://github.com/netlify/netlify-plugin-lighthouse
|
||||||
|
|
||||||
|
package = "@netlify/plugin-lighthouse"
|
||||||
|
|
||||||
|
# optional, fails build when a category is below a threshold
|
||||||
|
[plugins.inputs.thresholds]
|
||||||
|
performance = 1.0
|
||||||
|
accessibility = 1.0
|
||||||
|
best-practices = 1.0
|
||||||
|
seo = 1.0
|
||||||
|
|
||||||
|
[plugins.inputs]
|
||||||
|
output_path = "reports/lighthouse/index.html"
|
47
package.json
Normal file
47
package.json
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"name": "eleventy-base-blog",
|
||||||
|
"version": "8.0.0",
|
||||||
|
"description": "A starter repository for a blog web site using the Eleventy site generator.",
|
||||||
|
"scripts": {
|
||||||
|
"build": "npx @11ty/eleventy",
|
||||||
|
"build-ghpages": "npx @11ty/eleventy --pathprefix=/eleventy-base-blog/",
|
||||||
|
"start": "npx @11ty/eleventy --serve --quiet",
|
||||||
|
"debug": "DEBUG=Eleventy* npx @11ty/eleventy",
|
||||||
|
"debugstart": "DEBUG=Eleventy* npx @11ty/eleventy --serve --quiet",
|
||||||
|
"benchmark": "DEBUG=Eleventy:Benchmark* npx @11ty/eleventy"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/11ty/eleventy-base-blog.git"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "Zach Leatherman",
|
||||||
|
"email": "zachleatherman@gmail.com",
|
||||||
|
"url": "https://zachleat.com/"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/11ty"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/11ty/eleventy-base-blog/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/11ty/eleventy-base-blog#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"@11ty/eleventy": "^2.0.1",
|
||||||
|
"@11ty/eleventy-img": "^3.1.0",
|
||||||
|
"@11ty/eleventy-navigation": "^0.3.5",
|
||||||
|
"@11ty/eleventy-plugin-bundle": "^1.0.4",
|
||||||
|
"@11ty/eleventy-plugin-rss": "^1.2.0",
|
||||||
|
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
|
||||||
|
"luxon": "^3.3.0",
|
||||||
|
"markdown-it-anchor": "^8.6.7"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eleventy-plugin-toc": "^1.1.5"
|
||||||
|
}
|
||||||
|
}
|
223
public/css/datatables.css
Normal file
223
public/css/datatables.css
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
.datatable-wrapper {
|
||||||
|
font-size:0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-top,
|
||||||
|
.datatable-bottom {
|
||||||
|
padding: 8px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-top>nav:first-child,
|
||||||
|
.datatable-top>div:first-child,
|
||||||
|
.datatable-bottom>nav:first-child,
|
||||||
|
.datatable-bottom>div:first-child {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-top>nav:last-child,
|
||||||
|
.datatable-top>div:last-child,
|
||||||
|
.datatable-bottom>nav:last-child,
|
||||||
|
.datatable-bottom>div:last-child {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-selector {
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border:1px solid rgba(0,0,0,0.1);
|
||||||
|
background-color: rgba(0,0,0,0.05);
|
||||||
|
color:var(--text-color)
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-input {
|
||||||
|
padding: 5px 10px;
|
||||||
|
background-color:rgba(0,0,0, 0.05);
|
||||||
|
color: var(--text-color);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-info {
|
||||||
|
margin: 7px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PAGER */
|
||||||
|
.datatable-pagination ul {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination li {
|
||||||
|
list-style: none;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination li.datatable-hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination a {
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||||
|
float: left;
|
||||||
|
margin-left: 2px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
position: relative;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination a:hover {
|
||||||
|
background-color: rgba(0,0,0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination .datatable-active a,
|
||||||
|
.datatable-pagination .datatable-active a:focus,
|
||||||
|
.datatable-pagination .datatable-active a:hover {
|
||||||
|
background-color: var(--text-color-link);
|
||||||
|
border-color: var(--text-color-link);
|
||||||
|
color: white;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination .datatable-ellipsis a,
|
||||||
|
.datatable-pagination .datatable-disabled a,
|
||||||
|
.datatable-pagination .datatable-disabled a:focus,
|
||||||
|
.datatable-pagination .datatable-disabled a:hover {
|
||||||
|
pointer-events: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination .datatable-disabled a,
|
||||||
|
.datatable-pagination .datatable-disabled a:focus,
|
||||||
|
.datatable-pagination .datatable-disabled a:hover {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-pagination .datatable-pagination a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TABLE */
|
||||||
|
.datatable-table {
|
||||||
|
max-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: separate;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-table>tbody>tr>td,
|
||||||
|
.datatable-table>tbody>tr>th,
|
||||||
|
.datatable-table>tfoot>tr>td,
|
||||||
|
.datatable-table>tfoot>tr>th,
|
||||||
|
.datatable-table>thead>tr>td,
|
||||||
|
.datatable-table>thead>tr>th {
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 8px 10px;;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-table>thead>tr>th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
text-align: left;
|
||||||
|
background-color: var(--text-color-link);
|
||||||
|
color: white;
|
||||||
|
border-bottom: 3px solid black;
|
||||||
|
}
|
||||||
|
.datatable-table>tfoot>tr>th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-table th {
|
||||||
|
vertical-align: bottom;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-table th a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-sorter,
|
||||||
|
.datatable-filter {
|
||||||
|
display: inline-block;
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-sorter::before,
|
||||||
|
.datatable-sorter::after {
|
||||||
|
content: "";
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: -6px;
|
||||||
|
border-left: 4px solid transparent;
|
||||||
|
border-right: 4px solid transparent;
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.datatable-sorter::before {
|
||||||
|
border-top: 4px solid white;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-sorter::after {
|
||||||
|
border-bottom: 4px solid white;
|
||||||
|
border-top: 4px solid transparent;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-ascending .datatable-sorter::after,
|
||||||
|
.datatable-descending .datatable-sorter::before,
|
||||||
|
.datatable-ascending .datatable-filter::after,
|
||||||
|
.datatable-descending .datatable-filter::before {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.datatable-sorter:hover {
|
||||||
|
color:var(--link-color-hover);
|
||||||
|
border:0;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-filter::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
right: 4px;
|
||||||
|
opacity: 0.2;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: 7px solid transparent;
|
||||||
|
border-right: 7px solid transparent;
|
||||||
|
border-radius: 50%;
|
||||||
|
border-top: 10px solid white;
|
||||||
|
top: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-filter-active .datatable-filter::before {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-empty {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-top::after,
|
||||||
|
.datatable-bottom::after {
|
||||||
|
clear: both;
|
||||||
|
content: " ";
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.datatable-table:focus tr.datatable-cursor>td:first-child {
|
||||||
|
border-left: 3px var(--text-color) solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.datatable-table:focus {
|
||||||
|
outline: solid 1px black;
|
||||||
|
outline-offset: -1px;
|
||||||
|
}
|
292
public/css/index.css
Normal file
292
public/css/index.css
Normal file
|
@ -0,0 +1,292 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "NiseSegaSonic";
|
||||||
|
src: local("NiseSegaSonic"),
|
||||||
|
url("/fonts/NiseSegaSonic.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--color-gray-20: #e0e0e0;
|
||||||
|
--color-gray-50: #C0C0C0;
|
||||||
|
--color-gray-90: #333;
|
||||||
|
|
||||||
|
/* --text-color is assigned to --color-gray-_ above */
|
||||||
|
--text-color-link: #c92a2a;
|
||||||
|
--text-color-link-active: #c92a2a;
|
||||||
|
--text-color-link-visited: #c92a2a;
|
||||||
|
--link-color-hover: #ffe8cc;
|
||||||
|
|
||||||
|
--background-color: #fff;
|
||||||
|
--background-menu: #001d6b;
|
||||||
|
|
||||||
|
--text-color: var(--color-gray-90);
|
||||||
|
|
||||||
|
--font-family: -apple-system, system-ui, sans-serif;
|
||||||
|
--font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
|
||||||
|
--font-family-logo:"NiseSegaSonic", system-ui, sans-serif;
|
||||||
|
--font-family-title:vipnagorgialla, system-ui, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 auto;
|
||||||
|
min-height:100%;
|
||||||
|
font-family: var(--font-family);
|
||||||
|
color: var(--text-color);
|
||||||
|
width:1280px;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
overflow-y: scroll;
|
||||||
|
background: center top fixed url("/img/dark-b10.png"), center top fixed url("/img/erratu18.png");
|
||||||
|
background-repeat: repeat-y, repeat;
|
||||||
|
background-color:#63ce08;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* https://www.a11yproject.com/posts/how-to-hide-content/ */
|
||||||
|
.visually-hidden {
|
||||||
|
clip: rect(0 0 0 0);
|
||||||
|
clip-path: inset(50%);
|
||||||
|
height: 1px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href] {
|
||||||
|
color: var(--text-color-link);
|
||||||
|
padding: 0.05rem;
|
||||||
|
border-radius: 0.1rem;
|
||||||
|
text-decoration: underline dashed 1px;
|
||||||
|
text-underline-offset: 0.1rem;
|
||||||
|
}
|
||||||
|
a[href]:visited {
|
||||||
|
color: var(--text-color-link-visited);
|
||||||
|
}
|
||||||
|
a[href]:hover,
|
||||||
|
a[href]:active {
|
||||||
|
color: var(--text-color-link-active);
|
||||||
|
background-color: var(--link-color-hover);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
opacity: 75%;
|
||||||
|
border-left: 3px solid currentColor;
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
font-style: italic;
|
||||||
|
border-radius:3px;
|
||||||
|
padding:0px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary:hover {
|
||||||
|
background-color: rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Direct Links / Markdown Headers */
|
||||||
|
.header-anchor {
|
||||||
|
text-decoration: none;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 1em;
|
||||||
|
margin-left: .1em;
|
||||||
|
}
|
||||||
|
a[href].header-anchor,
|
||||||
|
a[href].header-anchor:visited {
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
a[href].header-anchor:focus,
|
||||||
|
a[href].header-anchor:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
a[href].header-anchor:focus,
|
||||||
|
:hover > a[href].header-anchor {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display:flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background:center center url("/img/back2.png");
|
||||||
|
background-size: 110%;
|
||||||
|
height:240px;
|
||||||
|
box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.8);
|
||||||
|
margin:12px 12px 3px;
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 16px solid transparent;
|
||||||
|
border-image: url('/img/bgcard.png') 16 round;
|
||||||
|
border-image-outset: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 a {
|
||||||
|
font-size:5rem;
|
||||||
|
text-shadow:-2px -2px 0 #000,
|
||||||
|
0 -2px 0 #000,
|
||||||
|
2px -2px 0 #000,
|
||||||
|
2px 0 0 #000,
|
||||||
|
2px 2px 0 #000,
|
||||||
|
0 2px 0 #000,
|
||||||
|
-2px 2px 0 #000,
|
||||||
|
-2px 0 0 #000,
|
||||||
|
.05em .1em 0 #000;
|
||||||
|
color:white!important;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: uppercase;
|
||||||
|
display: block;
|
||||||
|
font-family: var(--font-family-logo);
|
||||||
|
line-height: 1;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main,
|
||||||
|
.card,
|
||||||
|
#sidebar ul > li {
|
||||||
|
padding:0px;
|
||||||
|
margin:12px;
|
||||||
|
background-color: var(--background-color);
|
||||||
|
border: 16px solid transparent;
|
||||||
|
border-image: url('/img/bgcard.png') 16 round;
|
||||||
|
border-image-outset: 4px;
|
||||||
|
line-height:1.5rem;
|
||||||
|
flex-grow:1;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pokepage .grid :first-child {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
.pokepage .grid :last-child {
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td,
|
||||||
|
table th {
|
||||||
|
text-align: center;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||||
|
height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
table thead th {
|
||||||
|
background-color: var(--text-color-link);
|
||||||
|
color: white;
|
||||||
|
border-bottom: 2px solid black;
|
||||||
|
height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
table:not(.pokedex) {
|
||||||
|
table-layout: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pokedex table:not(.pokedex) {
|
||||||
|
table-layout: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul > li {
|
||||||
|
list-style: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#more-info ol > li,
|
||||||
|
#more-info ul > li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul > li li,
|
||||||
|
#more-info li {
|
||||||
|
border-radius:0px;
|
||||||
|
padding:0px;
|
||||||
|
margin:0px;
|
||||||
|
font-weight: normal;
|
||||||
|
border:0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.nav,
|
||||||
|
#sidebar ul li ul,
|
||||||
|
#more-info ol,
|
||||||
|
.maininfo ul {
|
||||||
|
padding:0;
|
||||||
|
margin:0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul li a,
|
||||||
|
#more-info ol li a,
|
||||||
|
#more-info .maininfo ul li {
|
||||||
|
display:block;
|
||||||
|
width:100%;
|
||||||
|
text-decoration:none;
|
||||||
|
color:var(--text-color)!important;
|
||||||
|
border-radius:3px;
|
||||||
|
padding:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#more-info h2 {
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul li li a,
|
||||||
|
#more-info ul li a,
|
||||||
|
#more-info ol li a {
|
||||||
|
padding-left:18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul li a.active,
|
||||||
|
#more-info ol li a.active {
|
||||||
|
background-color:rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul li a:hover,
|
||||||
|
#more-info ol li a:hover {
|
||||||
|
background-color:rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#more-info,
|
||||||
|
#sidebar {
|
||||||
|
min-width:240px;
|
||||||
|
width:240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
line-height: 1.1rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.maininfo {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align:right;
|
||||||
|
margin:auto;
|
||||||
|
padding:12px;
|
||||||
|
width:800px;
|
||||||
|
}
|
||||||
|
|
BIN
public/favicon.png
Normal file
BIN
public/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 747 B |
0
public/img/.gitkeep
Normal file
0
public/img/.gitkeep
Normal file
8
public/js/datatables.js
Normal file
8
public/js/datatables.js
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue