Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • websites/monnaie-libre-fr
  • midiland/monnaie-libre-fr
  • websites/moneda-libre-org
  • atlasan/g1-monetalibera-it
  • Processus42/monnaie-libre-fr
  • diablade/monnaie-libre-fr
  • Spiranne/monnaie-libre-fr
7 results
Show changes
Showing
with 10460 additions and 101 deletions
{
"url": "https://worldwotmap.duniter.org/",
"title": "Toile de confiance mondiale",
"description": "La position de tous les membres et portefeuilles géolocalisés, avec leur liens. Et densité de la monnaie.",
"image": "/uploads/capture-d’ecran-de-2022-08-11-13-45-30.png",
"categories": [
"Monitoring"
],
"related": [
{
"url": "https://txmn.tk/g1/worldwotmap/"
},
{
"url": "https://worldwotmap.duniter.org/"
}
]
}
\ No newline at end of file
{
"image": "/uploads/tutovideo.jpg",
"url": "https://video.tedomum.net/c/monnaie_libre_974_g1/videos?s=1",
"title": "Tutoriels videos",
"description": "Installer cesium, ouvrir un compte, le transformer en compte membre,...",
"categories": [
"Vidéo",
"Tutoriel"
],
"wallet": "7f8Mg4AaDX2JX9c9C3PHjvQkq4Xr6tBhmg1WRQUR9J95"
}
\ No newline at end of file
{
"image": "/uploads/wotwizard.png",
"url": "https://wotwizard.axiom-team.fr/fr",
"title": "Wotwizard",
"description": "Permet de voir les disponibilités et qualités de chacun, et tout un tas d'info sur l'état de la toile de confiance.",
"categories": ["Top", "Monitoring"],
"wallet": "78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8",
"related": [
{
"url": "https://wotwizard.coinduf.eu/"
},
{
"url": "https://wot-wizard.duniter.org"
}
]
}
......@@ -3,8 +3,7 @@ title: Posez une question
inputTitle: null
inputPrecision: null
---
Vous ne trouvez pas de réponses à votre question dans la FAQ ?
Vous ne trouvez pas de réponses à votre question dans la FAQ ??
Proposez votre question !
<t-input-group label="Votre question" description="Intitulé de la question tel que vous auriez aimé la trouver." class="mt-3">
......@@ -16,4 +15,4 @@ Proposez votre question !
</t-input-group>
Merci pour votre avis !
Nous nous efforcerons de répondre le plus rapidement possible...
Nous nous efforcerons de répondre le plus rapidement possible...
\ No newline at end of file
---
title: Foire aux questions
---
## Des groupes locaux pour poser vos questions de vive voix
## Les groupes locaux, pour poser vos questions de vive voix
N’hésitez pas à vous rapprocher de votre groupe local pour discuter monnaie libre avec des gens qui utilisent déjà la Ğ1 :
### [Voir la carte des groupes locaux](https://framacarte.org/fr/map/monnaie-libre-g1_8702#5/46.104/5.339)
Un plateforme de discussion pour poser vos questions en ligne
Si vous avez besoin de davantage d’explications, il existe une plateforme de discussion à l’intérieur de laquelle vous pouvez poser vos questions :
### [Visiter la plateforme de discussion](https://forum.monnaie-libre.fr/)
**[Voir la carte des groupes locaux](https://carte.monnaie-libre.fr?members=false)**
## Un forum de discussion pour poser vos questions en ligne
Pour davantage d’explications, il existe une plateforme de discussion à l’intérieur de laquelle vous pouvez poser vos questions :
**[Visiter le forum de discussion](https://forum.monnaie-libre.fr/)**
Attention : si la plupart des membres de la plateforme vous répondront de façon cordiale, les membres les plus actifs sont parfois aussi les plus agacés de répondre souvent aux mêmes questions. Pensez donc à utiliser [la fonction de recherche](https://forum.monnaie-libre.fr/search), car il y a fort à parier que votre question ait déjà été posée.
\ No newline at end of file
Attention : si la plupart des membres du forum vous répondront de façon cordiale, les membres les plus actifs sont parfois aussi lassés de répondre souvent aux mêmes questions. Pensez donc à utiliser [la fonction de recherche](https://forum.monnaie-libre.fr/search), car il y a des chances que votre question ait déjà été posée et traitée.
\ No newline at end of file
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud xercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
---
title: Footer
---
La monnaie libre est portée par un collectif d’êtres humains, elle ne dépend d’aucune organisation "officielle".
De nombreux [collectifs](/ressources?filters=Asso&filters=Groupe%20local) et [autres sites](/ressources?filters=Blog) sur la monnaie libre existent pour en parler…
Bien que francophone, ce site se veut compréhensible et utile pour le plus grand nombre.
Il est possible de rencontrer les contributeurs de ce site lors des [événements](/#agenda) monnaie libre et discuter avec eux sur les 2 forums historiques afin de [contribuer](/contribuer) vous aussi.
<h1 class="mb-4 text-3xl md:text-7xl bg-clip-text text-transparent bg-gradient-to-r from-purple-800 to-blue-600 font-extrabold leading-tight slide-in-bottom-h1">
La monnaie libre
</h1>
---
title: Héro page d'accueil
---
<section class="xl:mr-20">
<h1 class="mb-4 text-3xl md:text-4xl xl:text-5xl bg-clip-text text-transparent bg-gradient-to-r from-purple-800 to-blue-600 font-extrabold leading-tight slide-in-bottom-h1">
La monnaie libre
</h1>
<p class="leading-normal text-base text-gray-700 dark:text-gray-300 md:text-5xl mb-8 slide-in-bottom-subtitle">
Repenser la création monétaire...<br />et l'expérimenter !
</p>
<p class="leading-normal text-xl text-gray-700 dark:text-gray-300 md:text-2xl xl:text-3xl mb-12 font-semibold slide-in-bottom-subtitle">
Une autre création monétaire...<br />à expérimenter !
</p>
<p class="leading-normal text-base text-gray-700 dark:text-gray-300 md:text-2xl mb-6 slide-in-bottom-subtitle">
Une économie garantissant plus de liberté&nbsp;🕊,
d'égalité&nbsp;⚖️&nbsp;et de fraternité&nbsp;🤝 ; c'est possible !
<nuxt-link
to="/decouvrir"
class="block hover:underline text-red-600 font-semibold mt-1"
>
<fa icon="arrow-right"></fa><span class="ml-2">Découvrir comment...</span>
</nuxt-link>
</p>
<p class="leading-normal text-base text-gray-700 dark:text-gray-300 xl:text-xl mb-4 slide-in-bottom-subtitle">
La monnaie libre rend possible un modèle économique plus juste et durable, modèle à concevoir et mettre en oeuvre.<br /><br />La monnaie libre ne privilégie personne, ni géographiquement, ni d'une génération à une autre : chaque personne crée sa part égale relative de monnaie, chaque jour.
</p>
<p class="leading-normal text-base text-gray-700 dark:text-gray-300 md:text-2xl mb-8 slide-in-bottom-subtitle">
Une expérience citoyenne, solidaire... et subversive&nbsp;
<nuxt-link
to="/contribuer"
class="link-contribute block hover:underline text-red-600 font-semibold mt-1"
>
<fa icon="arrow-right"></fa><span class="ml-2">Je participe !</span>
</nuxt-link>
<p class="leading-normal text-base text-gray-700 dark:text-gray-300 xl:text-xl mb-4 slide-in-bottom-subtitle">La June est une expérience en cours, accessible à tout le monde, sans autre condition que de la choisir.
</p>
<p>
<a href="maj-v2/" style ="font-size:1.8em; font-weight: bold; color:#34A1FF">
<div style ="border: solid #34A1FF; border-radius: 25px; background: gold; width:25em; padding:0.5em;">
<img src="https://forum.monnaie-libre.fr/uploads/default/optimized/2X/b/b0cf4175b437b18b8f9f8f66ec5ddee2eb9d0daa_2_499x499.png" width=90 align=left>
Détails sur la Mise </br> à Jour Duniter V2
</div>
</a>
</p>
</section>
---
title: Introduction page d'accueil
description: Texte d'introduction en page d'accueil sous la section de recherche
---
<img src="/uploads/logo-monnaie-libre.svg" align ="right" style="width:300px;height:300px;margin:30px" >
## Avons-nous besoin d'une monnaie ?
Un outil de mesure ; une unité de compte. Elle mesure les échanges et les stocks.
Un outil pour les échanges ; une valeur d'échange. Elle rend possible tous les échanges, de natures différentes, de biens et services différents, à des moments différents.
Un outil pour construire l'avenir ; une valeur de réserve. Elle permet de prévoir des situations à venir, de rassembler des moyens pour agir.
Une monnaie a - *ou peut avoir* - d'autres fonctions, mais ce sont les 3 principaux usages partagés par tout le monde.
### Peut-on s'en passer ?
On peut toujours trouver des situations et des contextes où l'on peut mesurer, échanger, épargner, sans recours à la monnaie.
Mais la monnaie est le meilleur moyen que nous ayons pour faire tout cela dès qu'il y a ... asymétrie. Or dans les échanges, les asymétries sont ce qu'il y a de plus courant. **Gérer les asymétries à grande échelle** est donc le rôle principal d'une monnaie.
Il est très pertinent de se poser la question : d'où vient la monnaie ? Comment est-elle créée ? Par qui ?
## Pourquoi une autre monnaie ? Quel est le problème ?
Tout peut être une monnaie, c'est l'usage qui fait d'un objet une monnaie. Les céréales (dont le blé), le sel (d'où vient le mot salaire), les pièces d'or, ont longtemps servi de monnaie. Aujourd'hui les monnaies sont fiduciaires, elles reposent sur la confiance.
Aujourd'hui pour simplifier, 90% de la monnaie est créée par les banques privées, lorsqu'un crédit est accordé. C'est le fait de contracter une dette auprès d'une banque qui crée la monnaie. Aussi l'appelle-t-on communément ... **monnaie-dette**. C'est une monnaie scripturale, une simple ligne d'écriture.
Notre euro est une monnaie-dette, et il n'est pas le nôtre, il appartient aux banques. On ne fait que le louer, et il nous coûte - très - cher. **En utilisant la monnaie-dette vous faites confiance ... aux banquiers.**
En souscrivant un crédit, on s'engage à créer une valeur qui n'existe pas encore (production d'un bien ou d'un service, travail salarié, ...). Or ce sont les banques qui accordent ce crédit, ce sont donc elles qui décident ce qui pourra être produit ou pas, **ce qui a de la valeur et ce qui n'en a pas**. Selon des critères qui lui appartiennent. Nous n'avons pas vraiment - du tout - droit au chapitre sur cette question.
En souscrivant un crédit de 10.000, nous devons rembourser les 10.000 (qui seront détruits comme ils ont été créés), mais également lesdits "intérêts". Or les intérêts eux, ne sont pas créés par la souscription du crédit. Nous devons collectivement - en permanence - rembourser plus de monnaie qu'il n'en a été créée, en **rendre plus qu'il n'en existe**.
On peut appeler cela une "chaise musicale", ou une "machine à faillite". Libre à chacun(e) de ne pas y voir de problème.
Seule alternative possible : quel que soit le lieu, et quelle que soit l'époque, chaque individu crée la même proportion relative de monnaie, durant toute sa vie.
## Une monnaie relative
Ce n'est pas la quantité de monnaie que l'on possède qui compte, mais bien la part relative que représente cette quantité, par rapport à la masse monétaire globale existante et par rapport au nombre de personnes qui la "partagent".\
En monnaie libre, on ne compte plus en quantitatif mais en relatif. On utilise une **unité relative de monnaie : le <lexique>DU</lexique> quotidien**.
\ No newline at end of file
---
title: Sobriété numérique et démocratie
dev-notes: It's look ugly for now, but it will be better and easier to build
block in next version with vuejs component in markdown...
---
<nuxt-link to="/la-monnaie-libre-et-lenvironnement" class="group block mt-6 lg:mt-12 p-8 hover:shadow-xl rounded-lg transition transform hover:-translate-y-1">
<section class="flex flex-col md:flex-row items-center gap-8">
<img src="/img/healthy-eating.svg" class="w-4/5 md:w-2/5" />
<div>
<h2 class="text-purple-800 dark:text-purple-600 text-2xl lg:text-3xl mb-4">L'environnement</h2>
<p class="text-base lg:text-lg">Il serait abusif de qualifier la Ğ1 de monnaie écologique, car il est difficile de considérer un système numérique comme tel. Mais la Ğ1 est concue pour sa sobriété dans la très longue durée.
Elle n'utilise pas une puissance de calcul pour sécuriser la blockchain.
Elle a de plus un impact très concret sur notre économie. La monnaie-dette oblige chacun(e) et toute la société à produire toujours davantage. Dans ce référentiel de création monétaire, ladite croissance n'est pas une option. Lorsqu'on rembourse le capital d'une dette, la monnaie disparait (le capital est détruit, supprimé). Donc plus de nouvelle dette, plus de monnaie. Pas de monnaie, pas d'économie. Elle s'effondre, et nous avec.
Une seule solution possible, changer de référentiel de création monétaire.
La création monétaire par DU permet de ne plus passer par cet dette perpétuelle. Nous ne sommes plus obligés de produire toujours plus comme une fin en soi, quoi qu'il en coûte. Il devient alors possible de concevoir et mettre en oeuvre une économie qui cherche simplement à couvrir nos besoins et *vivre heureux*, en hamonie avec les ressources disponibles.</p>
<div class="opacity-100 md:opacity-0 transition group-hover:opacity-100 underline pt-4 group-hover:text-hover">En savoir plus...</div>
</div>
</section>
</nuxt-link>
<nuxt-link to="/la-monnaie-libre-et-la-democratie" class="group block mt-6 lg:mt-12 p-8 hover:shadow-xl rounded-lg transition transform hover:-translate-y-1">
<section class="flex flex-col md:flex-row items-center gap-8 flex-col-reverse">
<div>
<h2 class="text-purple-800 dark:text-purple-600 text-2xl lg:text-3xl mb-4">La démocratie</h2>
<p class="text-base lg:text-lg">"Laissez-moi créer la monnaie et contrôler la circulation des crédits, et je me fiche de qui écrit les lois - let me issue the money and control credits, then I care not who writes the law". Cette phrase a réellement été dite un jour par un homme, et "on" lui a accordé ce petit privilège. La création monétaire est un pouvoir, la monnaie libre le rend à chacun(e). On peut y voir un début de démocratie, au-delà de tout discours.</p>
<div class="opacity-100 md:opacity-0 transition group-hover:opacity-100 underline pt-4 group-hover:text-hover">En savoir plus...</div>
</div>
<img src="/img/work-life-balance.svg" class="w-3/5 md:w-1/4" />
</section>
</nuxt-link>
<nuxt-link to="/la-monnaie-libre-et-les-crypto-monnaies" class="group block mt-6 lg:mt-12 p-8 hover:shadow-xl rounded-lg transition transform hover:-translate-y-1">
<section class="flex flex-col md:flex-row items-center gap-8">
<img src="/img/High-quality-products.svg" class="w-3/5 md:w-1/3" />
<div>
<h2 class="text-purple-800 dark:text-purple-600 text-2xl lg:text-3xl mb-4">Les crypto-monnaies</h2>
<p class="text-base lg:text-lg">La Ğ1 repose sur une "chaine de blocs chiffrée - blockchain", deux en fait, comme les maintenant fameuses crypto-monnaies.
Mais son modèle spécifique de création monétaire en fait une monnaie bien plus équitable que toute autre "crypto". Tout le monde a le même accès à la création monétaire, en tout lieu et en tout temps, le flux monétaire est directement corrélé au flux de la vie, de chaque vie humaine.</p>
<div class="opacity-100 md:opacity-0 transition group-hover:opacity-100 underline pt-4 group-hover:text-hover">En savoir plus...</div>
</div>
</section>
</nuxt-link>
<nuxt-link to="/la-monnaie-libre-et-les-monnaies-locales" class="group block mt-6 lg:mt-12 p-8 hover:shadow-xl rounded-lg transition transform hover:-translate-y-1">
<section class="flex flex-col md:flex-row items-center gap-8 flex-col-reverse">
<div>
<h2 class="text-purple-800 dark:text-purple-600 text-2xl lg:text-3xl mb-4">Les monnaies locales</h2>
<p class="text-base lg:text-lg">Sauf exceptions, les monnaies locales sont indexées à l'Euro. Ce n'est pas un changement de référentiel, juste un "changement de couleur" du billet. Dans son bassin de vie il est possible d'utiliser la monnaie libre comme une monnaie locale, ou un SEL - système d'échanges local, mais elle est fondamentalement autre chose ; la monnaie libre va bien au-delà.</p>
<div class="opacity-100 md:opacity-0 transition group-hover:opacity-100 underline pt-4 group-hover:text-hover">En savoir plus...</div>
</div>
<img src="/img/MLC.svg" class="w-3/5 md:w-1/3" />
</section>
</nuxt-link>
\ No newline at end of file
<alert type="info">[Page de test](/test)</alert>
### Préambule
Les personnes qui créent la monnaie sont avantagées sur celles qui ne le font pas, car les seconds, pour se procurer la monnaie dont ils ont besoin, doivent travailler pour ceux qui en ont afin d’en obtenir. Les personnes qui créent la monnaie sont donc privilégiés et peuvent ainsi contrôler les autres.
Dans les systèmes de monnaie dette comme l’euro, la monnaie est créée par crédit bancaire. Et oui, contrairement à une croyance très répandue, les banques ne prêtent pas de la monnaie qu’elles possèdent, mais créent ex-nihilo (à partir de rien) de la nouvelle monnaie pour l’occasion. Cette monnaie est détruite lorsque le capital emprunté est remboursé. Il y a donc asservissement du plus grand nombre par la dette, enrichissement d’une minorité par l’intérêt perçu (qui est bel et bien empoché), et un risque permanent de raréfaction ou même disparition de la monnaie si l’ensemble des dettes étaient remboursées.
### Une MONNAIE LIBRE
La Ğ1 (la "June") est la première MONNAIE LIBRE de l'histoire de l'humanité.
Conformément à la Théorie Relative de la Monnaie (TRM) écrite en 2010 par Stéphane Laborde, elle est co-créée sans dette, et à part égale, entre tous les êtres humains de toutes les générations présentes et à venir, sous la forme d'un "paquet" de monnaie, une quantité de Ğ1 (une quantité de "junes"), appelée DIVIDENDE UNIVERSEL (DU).
Je précise tout de suite que, comme les enfants sont des êtres humains à part entière, ils participent à la création monétaire en créant tous les jours leur part de monnaie !
### Un REVENU DE BASE ?...
Pas besoin de se torturer l'esprit pour se demander où, et auprès de qui, collecter de la monnaie à redistribuer pour financer un revenu de base. Le DU de la monnaie libre EST un revenu de base, créé directement sur le compte de chacun-e. C'est tellement plus simple !
### Réduction des inégalités...
Propriété intéressante de ce mode de création monétaire : tous les comptes créateurs de nouvelle monnaie rejoignent la moyenne avec le temps. Ainsi, le solde relatif des riches diminue pendant que celui des pauvres augmente. Cela correspond à prendre aux riches pour donner aux pauvres, mais au lieu de prendre à qui que ce soit, on donne à tous ! C'est pas magique, ça ?
### Une UNITÉ DE MESURE INVARIANTE de la valeur
La Ğ1 est la première monnaie à assurer correctement sa fonction d'unité de compte.
En effet, son DU est une unité de mesure INVARIANTE de la valeur.
De la même manière qu'on ne mesure pas les longueurs avec un mètre élastique pour construire une maison, il serait souhaitable, pour nos échanges économiques, et pour étudier les différents phénomènes de l'économie, d'avoir une unité de mesure qui soit stable, et donc invariante, en tout lieu et en tous temps. Mais est-ce le cas pour la monnaie que nous utilisons tous les jours ? Et bien non !
Toutes les monnaies actuellement en circulation provoquent une instabilité des prix, car la valeur de la monnaie varie à chaque fois qu'on créée ou qu'on détruit de la monnaie. C'est ce qui fait peur à tous les économistes, et qu'on appelle l'inflation "nominale".
Et bien la monnaie libre résout ce problème ! Car si on exprime les prix en nombre de DU, alors la variation des prix n'est plus due à l'inflation nominale, mais uniquement à la variation réelle de la valeur des choses.
### Relativité de toute valeur
La valeur des choses, elle, dépend du fait que ces choses (biens ou services) correspondent plus ou moins bien à nos besoins, qui eux aussi varient en fonction des individus. Et oui, c'est une évidence que ce que qui a valeur pour une personne a une valeur différente pour d'autres. Et aussi, pour une même personne, ce qui a valeur à un moment donné n'aura pas la même valeur à ses yeux.
### Liberté de produire et estimer toute valeur
Cette relativité de toute valeur rend légitime toute personne ainsi que toutes les personnes d'une génération donnée, à estimer pour elle même ce qui a valeur ou non.
Comme tout le monde et toutes les générations créent la même part relative de monnaie, elle sont du coup à même d'utiliser leur part de monnaie pour financer et exercer des activités en accord avec leurs valeurs propres, sans subir le poids économique des autres ou des générations précédentes, ou le faire subir aux autres ou aux générations futures. Chacun-e reste libre !
### Démocratie
Avec la monnaie libre, le choix de création et l'injection de monnaie dans l'économie, pour financer une chose ou une autre, n'est plus le privilèges des banquiers ou des ministres (via la création monétaire qui se fait actuellement par crédit bancaire) mais elle est réalisée par chaque individu, via le DU qui est créé chaque jour (sans dette ni contre-partie de quelque nature que ce soit) sur son compte membre, et qu'il injecte lui-même dans l'économie quand il dépense ses Ğ1 nouvellement créées. Ce faisant, il vote pour et exprime ses valeurs, et influence lui même et directement la société dans laquelle il s’inscrit.
### Lien social
Pour garantir à toute la communauté que chaque personne ne va créer qu’une seule fois sa part de monnaie, une toile de confiance a été créée. Chaque nouveau membre de la communauté doit être connu et reconnu par 5 personnes qui sont déjà membres, qui se portent garantes de l’unicité du compte sur lequel est généré le DU quotidien du nouveau membre. Cette reconnaissance se faisant entre êtres humains réels, et non par des machines ou une entité centrale chargée d’émettre des documents d’identification, les gens sont amenés à se connaître et à se rencontrer, renforçant ainsi le lien social et les opportunités de faire des échanges.
### Cryptomonnaie et technologie blockchain
Imprimer des billets ou frapper des pièces est une manière complexe et coûteuse de gérer la monnaie. À l’heure actuelle, on ne sait pas le faire d’une façon qui soit suffisamment fiable, sécurisée et résiliente. Le contrôle de l’émission de la monnaie sur un support matériel est toujours centralisé, et peut donc être corrompu ou violé.
C’est pourquoi la Ğ1 est une cryptomonnaie, c’est à dire une monnaie numérique décentralisée et sécurisée par cryptographie, grâce à la technologie blockchain.
De plus, Duniter (DU-uniter), le logiciel qui génère le DU, qui gère la monnaie et la toile de confiance, est un logiciel sous licence libre : son code est ouvert, accessible, et vérifiable par tous.
### Sobriété énergétique
Les serveurs qui gèrent la monnaie tournent très bien sur des ordinateurs de taille très modeste du type RaspberryPi, un nano-ordinateur qui consomme (seulement) 5W d’électricité. Cela fait de la Ğ1 une monnaie low-tech, très sobre énergétiquement, et dont l’emprunte écologique est très faible (bien plus faible que celle de l’euro, et infiniment inférieure à celle du Bitcoin, où des fermes de calcul gigantesques sont en compétition les unes contre les autres et se disputent la création monétaire).
\ No newline at end of file
---
title: Chemin de fer
description: Parcours de lecture. Affiché sous le héro de la page d'accueil, et dans les pages concernées.
layout: cdc
---
# [1. Découvrir](/decouvrir)
- D'où vient l'argent ?
- La création monétaire en monnaie libre
---
# [2. Comprendre](/comprendre)
- La théorie relative de la monnaie
- La toile de confiance et la blockchain de la Ğ1
---
# [3. Débuter](/debuter)
- Ouvrir un compte
- Les outils de la Ğ1
---
# [4. Contribuer](/contribuer)
- Rencontrer des utilisateurs
- Participer
<template>
<div class="prose mx-auto">
<div
class="flex justify-center items-center"
style="height: calc(80vh - 5rem)"
>
<div>
<div class="flex items-center text-red-400 scale-150 transform">
<div
class="
bg-gradient-to-b
flex
from-blue-100
relative
to-blue-50
overflow-hidden
"
style="height: 80vh"
>
<div class="container flex items-center justify-center">
<div class="absolute z-10">
<div
class="
flex
items-center
text-red-400
dark:text-red-600
scale-150
transform
"
>
<span class="text-9xl">4</span>
<fa
:icon="['fab', 'creative-commons-nc-eu']"
......@@ -15,20 +31,95 @@
<span class="text-9xl">4</span>
</div>
<div class="v-full flex">
<div class="flex">
<t-button
variant="custom"
class="m-auto mt-20 bg-gray-500 hover:bg-gray-600"
class="mr-8 mt-20 bg-gray-500 hover:bg-gray-600 shadow-xl text-2xl"
icon="chevron-left"
@click="$router.go(-1)"
>
<fa icon="chevron-left" class="mr-3" />{{ $t('goBack') }}
</t-button>
<t-button class="m-auto mt-20" @click="$router.push('/')">
<t-button class="mt-20 shadow-xl text-2xl" @click="$router.push('/')">
<fa icon="home" class="mr-3" />{{ $t('home.title') }}
</t-button>
</div>
</div>
</div>
<LazySky class="fill-current text-white absolute" />
<LazyParticlesML v-if="isDesktop" />
<div
class="absolute bottom-0 h-16 w-full z-0"
style="backdrop-filter: blur(2px)"
/>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100%"
height="700"
preserveAspectRatio="none"
viewBox="0 0 3000 700"
class="bottom-0 absolute"
style="margin-bottom: -500px"
>
<g transform="translate(1500,350) scale(1,1) translate(-1500,-350)">
<linearGradient id="wave-color" x1="0" x2="1" y1="0" y2="0">
<stop stop-color="#7c3aed" offset="0"></stop>
<stop stop-color="#a78bfa" offset="1"></stop>
</linearGradient>
<path d="" fill="url(#wave-color)" opacity="0.3">
<animate
attributeName="d"
dur="10s"
repeatCount="indefinite"
keyTimes="0;0.333;0.667;1"
calcmod="spline"
keySplines="0.2 0 0.2 1;0.2 0 0.2 1;0.2 0 0.2 1"
begin="0s"
values="M0 0M 0 538.6197230687883Q 500 574.6819201141337 1000 574.575666670496T 2000 528.2190300776177T 3000 527.9222284268443L 3000 115.4395609622847Q 2500 122.11205254010194 2000 112.64297809895902T 1000 141.3855421925954T 0 166.56344278918195Z;M0 0M 0 588.7850739966284Q 500 593.4766386389036 1000 589.7625799078935T 2000 551.7945119708431T 3000 578.5077673498635L 3000 169.7675721459745Q 2500 125.67810753789244 2000 116.51196847367086T 1000 126.5496708214944T 0 168.4786767549831Z;M0 0M 0 531.1090348755101Q 500 557.1270943668658 1000 554.5419554069241T 2000 545.9865154592908T 3000 569.5619790716728L 3000 126.52765717058406Q 2500 154.4510819017288 2000 145.51367313923492T 1000 173.5431781037003T 0 152.16935842768572Z;M0 0M 0 538.6197230687883Q 500 574.6819201141337 1000 574.575666670496T 2000 528.2190300776177T 3000 527.9222284268443L 3000 115.4395609622847Q 2500 122.11205254010194 2000 112.64297809895902T 1000 141.3855421925954T 0 166.56344278918195Z"
></animate>
</path>
<path d="" fill="url(#wave-color)" opacity="0.3">
<animate
attributeName="d"
dur="10s"
repeatCount="indefinite"
keyTimes="0;0.333;0.667;1"
calcmod="spline"
keySplines="0.2 0 0.2 1;0.2 0 0.2 1;0.2 0 0.2 1"
begin="-3.3333333333333335s"
values="M0 0M 0 590.6448658165359Q 500 559.7529084945777 1000 557.6861681027829T 2000 561.5267270090096T 3000 593.9178925323536L 3000 114.18322607589454Q 2500 166.66199791810573 2000 162.8315286347745T 1000 160.3215475477619T 0 107.78843290213965Z;M0 0M 0 585.7333909305496Q 500 544.8442474547807 1000 537.1154758997013T 2000 552.1278283483364T 3000 540.760640040708L 3000 146.52147135465333Q 2500 113.81907823669863 2000 111.7307131744789T 1000 115.35203072555836T 0 110.67481984112672Z;M0 0M 0 543.131818899705Q 500 589.9945665811799 1000 586.6098547370501T 2000 584.5365631772061T 3000 581.8427322344887L 3000 145.84962300077729Q 2500 154.00891194415192 2000 149.856911020101T 1000 115.72184159380231T 0 138.76577509540138Z;M0 0M 0 590.6448658165359Q 500 559.7529084945777 1000 557.6861681027829T 2000 561.5267270090096T 3000 593.9178925323536L 3000 114.18322607589454Q 2500 166.66199791810573 2000 162.8315286347745T 1000 160.3215475477619T 0 107.78843290213965Z"
></animate>
</path>
<path d="" fill="url(#wave-color)" opacity="0.3">
<animate
attributeName="d"
dur="10s"
repeatCount="indefinite"
keyTimes="0;0.333;0.667;1"
calcmod="spline"
keySplines="0.2 0 0.2 1;0.2 0 0.2 1;0.2 0 0.2 1"
begin="-6.666666666666667s"
values="M0 0M 0 577.3279699785157Q 500 596.5194960333786 1000 591.0515207168066T 2000 580.7438383793185T 3000 559.5043698739771L 3000 106.40480611640268Q 2500 158.55578293506778 2000 155.42053618954887T 1000 125.62767807693737T 0 122.13819191110474Z;M0 0M 0 549.1585595469946Q 500 576.0564903157024 1000 572.0145684353647T 2000 536.8811706818898T 3000 539.2410439119517L 3000 150.739380000344Q 2500 122.68200223973729 2000 117.80547834149974T 1000 130.7528253401447T 0 114.62861752105474Z;M0 0M 0 544.9971494193371Q 500 591.2702407207314 1000 586.3395289570205T 2000 535.4362929322266T 3000 559.0140529154019L 3000 137.58917569157174Q 2500 135.2633200441013 2000 129.28903611617616T 1000 160.0439061679986T 0 161.57296247749883Z;M0 0M 0 577.3279699785157Q 500 596.5194960333786 1000 591.0515207168066T 2000 580.7438383793185T 3000 559.5043698739771L 3000 106.40480611640268Q 2500 158.55578293506778 2000 155.42053618954887T 1000 125.62767807693737T 0 122.13819191110474Z"
></animate>
</path>
</g>
</svg>
</div>
</template>
<script>
export default {
data() {
return {
isDesktop: false,
}
},
mounted() {
if (window.innerWidth > 640) this.isDesktop = true
},
}
</script>
......@@ -26,19 +26,19 @@ export async function fetchCategories() {
*
* @return {Array} An array of events
*/
export async function fetchNextEvents() {
export async function fetchNextEvents(params) {
// Caches to avoid fetching each time it's mounted
if (sessionStorage.getItem('events_forum')) {
return JSON.parse(sessionStorage.getItem('events_forum'))
} else {
const events = await fetch(`${forumUrl}/calendar.json`)
const events = await fetch(
`${forumUrl}/discourse-post-event/events.json?include_details=true${params}`
)
.then((response) => response.json())
.then((data) =>
data.topic_list.topics.filter(
(event) => Date.parse(event.event.start) > Date.now()
)
data.events.filter((event) => Date.parse(event.starts_at) > Date.now())
)
// console.log(events)
sessionStorage.setItem('events_forum', JSON.stringify(events))
return events
}
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
// prettier-ignore
/* eslint-disable */
/**
* Forked from https://github.com/discourse/discourse/blob/6f8c91254ec816b25d73b9edadebc8db2e76edd2/app/assets/javascripts/pretty-text/addon/emoji.js
*/
import {
// aliases,
emojis,
// replacements,
// searchAliases,
// tonableEmojis,
// translations,
} from './emoji-data'
const aliases = {}
// const emojis = []
const replacements = {}
const searchAliases = {}
const tonableEmojis = []
const translations = {}
const IMAGE_VERSION = 12
const extendedEmoji = {}
export function registerEmoji(code, url, group) {
code = code.toLowerCase()
extendedEmoji[code] = { url, group }
}
export function extendedEmojiList() {
return extendedEmoji
}
const emojiHash = {}
// https://github.com/mathiasbynens/emoji-regex/blob/main/text.js
export const emojiReplacementRegex =
'\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|☻|♡)\uFE0F?'
function textEmojiRegex(inlineEmoji) {
return inlineEmoji ? /:[^\s:]+(?::t\d)?:?/g : /\B:[^\s:]+(?::t\d)?:?\B/g
}
// add all default emojis
emojis.forEach((code) => (emojiHash[code] = true))
// and their aliases
const aliasHash = {}
Object.keys(aliases).forEach((name) => {
aliases[name].forEach((alias) => (aliasHash[alias] = name))
})
function isReplacableInlineEmoji(string, index, inlineEmoji) {
if (inlineEmoji) {
return true
}
// index depends on regex; when `inlineEmoji` is false, the regex starts
// with a `\B` character, so there's no need to subtract from the index
const beforeEmoji = string.slice(0, index)
return (
beforeEmoji.length === 0 ||
/(?:\s|[>.,\/#!$%^&*;:{}=\-_`~()])$/.test(beforeEmoji) ||
new RegExp(`(?:${emojiReplacementRegex})$`, 'g').test(beforeEmoji)
)
}
export function performEmojiUnescape(string, opts) {
if (!string) {
return
}
const allTranslations = Object.assign(
{},
translations,
opts.customEmojiTranslation || {}
)
const replacementFunction = (m, index) => {
const isEmoticon = opts.enableEmojiShortcuts && !!allTranslations[m]
const isUnicodeEmoticon = !!replacements[m]
let emojiVal
if (isEmoticon) {
emojiVal = allTranslations[m]
} else if (isUnicodeEmoticon) {
emojiVal = replacements[m]
} else {
emojiVal = m.slice(1, m.length - 1)
}
const hasEndingColon = m.lastIndexOf(':') === m.length - 1
const url = buildEmojiUrl(emojiVal, opts)
let classes = isCustomEmoji(emojiVal, opts) ? 'emoji emoji-custom' : 'emoji'
if (opts.class) {
classes = `${classes} ${opts.class}`
}
const isReplacable =
(isEmoticon || hasEndingColon || isUnicodeEmoticon) &&
isReplacableInlineEmoji(string, index, opts.inlineEmoji)
return url && isReplacable
? `<img width="20" height="20" src='${url}' ${
opts.skipTitle ? '' : `title='${emojiVal}'`
} ${
opts.lazy ? "loading='lazy' " : ''
}alt='${emojiVal}' class='${classes}'>`
: m
}
return string
.replace(new RegExp(emojiReplacementRegex, 'g'), replacementFunction)
.replace(textEmojiRegex(opts.inlineEmoji), replacementFunction)
}
export function performEmojiEscape(string, opts) {
const allTranslations = Object.assign(
{},
translations,
opts.customEmojiTranslation || {}
)
const replacementFunction = (m, index) => {
if (isReplacableInlineEmoji(string, index, opts.inlineEmoji)) {
if (allTranslations[m]) {
return opts.emojiShortcuts ? `:${allTranslations[m]}:` : m
} else if (replacements[m]) {
return `:${replacements[m]}:`
}
}
return m
}
return string
.replace(new RegExp(emojiReplacementRegex, 'g'), replacementFunction)
.replace(textEmojiRegex(opts.inlineEmoji), replacementFunction)
}
export function isCustomEmoji(code, opts) {
code = code.toLowerCase()
if (extendedEmoji.hasOwnProperty(code)) {
return true
}
if (opts && opts.customEmoji && opts.customEmoji.hasOwnProperty(code)) {
return true
}
return false
}
export function buildEmojiUrl(code, opts) {
let url
code = String(code).toLowerCase()
if (extendedEmoji.hasOwnProperty(code)) {
url = extendedEmoji[code].url
}
if (opts && opts.customEmoji && opts.customEmoji[code]) {
url = opts.customEmoji[code].url || opts.customEmoji[code]
}
const noToneMatch = code.match(/([^:]+):?/)
let emojiBasePath = '/images/emoji'
if (opts.emojiCDNUrl) {
emojiBasePath = opts.emojiCDNUrl
}
if (
noToneMatch &&
!url &&
(emojiHash.hasOwnProperty(noToneMatch[1]) ||
aliasHash.hasOwnProperty(noToneMatch[1]))
) {
url = opts.getURL(
`${emojiBasePath}/${opts.emojiSet}/${code.replace(/:t/, '/')}.png`
)
}
if (url) {
url = url + '?v=' + IMAGE_VERSION
}
return url
}
export function emojiExists(code) {
code = code.toLowerCase()
return !!(
extendedEmoji.hasOwnProperty(code) ||
emojiHash.hasOwnProperty(code) ||
aliasHash.hasOwnProperty(code)
)
}
let toSearch
export function emojiSearch(term, options) {
const maxResults = (options && options.maxResults) || -1
const diversity = options && options.diversity
if (maxResults === 0) {
return []
}
toSearch =
toSearch ||
[
...Object.keys(emojiHash),
...Object.keys(extendedEmoji),
...Object.keys(aliasHash),
].sort()
const results = []
function addResult(t) {
const val = aliasHash[t] || t
if (!results.includes(val)) {
if (diversity && diversity > 1 && isSkinTonableEmoji(val)) {
results.push(`${val}:t${diversity}`)
} else {
results.push(val)
}
}
}
// if term matches from beginning
for (let i = 0; i < toSearch.length; i++) {
const item = toSearch[i]
if (item.indexOf(term) === 0) {
addResult(item)
}
}
for (const [key, value] of Object.entries(searchAliases)) {
if (key.startsWith(term)) {
for (const emoji of value) {
addResult(emoji)
}
}
}
for (let i = 0; i < toSearch.length; i++) {
const item = toSearch[i]
if (item.indexOf(term) > 0) {
addResult(item)
}
}
if (maxResults === -1) {
return results
} else {
return results.slice(0, maxResults)
}
}
export function isSkinTonableEmoji(term) {
const match = term.split(':').filter(Boolean)[0]
if (match) {
return tonableEmojis.includes(match)
}
return false
}
// https://sebastianlandwehr.com/blog/creating-an-rss-feed-from-nuxt-content-with-full-body-html-code/
export default async ({ publicRuntimeConfig, config, paths }) => {
const { $content } = require('@nuxt/content')
const siteUrl = publicRuntimeConfig.site_url
const basePath = '/feed'
// auto fetch all first level dirs in content
if (!paths) {
const dirs = await $content('/', { deep: true })
.where({ dir: { $nin: ['/ui', '/ressources'] } })
.only('dir')
.fetch()
paths = [
{
path: '',
$content: $content({ deep: true }).where({
dir: { $nin: ['/ui', '/ressources'] },
}),
},
...[...new Set(dirs.map((item) => item.dir))],
]
}
const feedTypes = [
{ ext: '.rss', type: 'rss2' },
{ ext: '.xml', type: 'rss2' },
// { ext: '.atom', type: 'atom1' },
{ ext: '.json', type: 'json1' },
]
const feeds = []
for (let path of paths) {
if (typeof path === 'string') path = { path, $content: $content(path) }
const posts = await path.$content.sortBy('createdAt', 'desc').fetch()
for (const { ext, type } of feedTypes) {
const feedOptions = {
title: config.site_title + path.path,
link: siteUrl + path.path,
description:
path.path === ''
? config.site_description
: `[${path.path}] ${config.site_description}`,
language: 'fr',
}
feeds.push({
path: basePath + path.path + ext,
type,
create: (feed) => {
feed.options = feedOptions
posts.forEach((post) => {
const url = siteUrl + post.path.replace(/^\/pages\//, '/')
feed.addItem({
id: url,
link: url,
title: post.title,
description: post.description,
// author: post.authors,
date: new Date(post.createdAt),
content: post.bodyHtml,
})
})
},
})
}
}
return feeds
}
......@@ -60,31 +60,46 @@ export function reduceResults(results) {
* @return {Object} An object with meta good for SEO :)
*/
export function headDocument() {
const title = this.document.title || this.$config.site_title
const content = this.document.description || this.$config.site_description
const image =
this.document.image || `${this.$config.site_url}/img/og-home.jpeg`
return {
title: this.document.title,
title,
meta: [
{
hid: 'description',
name: 'description',
content: this.document.description,
content,
},
// Open Graph
{ hid: 'og:title', property: 'og:title', content: this.document.title },
{ hid: 'og:title', property: 'og:title', content: title },
{
hid: 'og:description',
property: 'og:description',
content: this.document.description,
content,
},
{
hid: 'og:image',
property: 'og:image',
content: image,
},
// Twitter Card
{
hid: 'twitter:title',
name: 'twitter:title',
content: this.document.title,
content: title,
},
{
hid: 'twitter:description',
name: 'twitter:description',
content: this.document.description,
content,
},
{
hid: 'twitter:image',
name: 'twitter:image',
content: image,
},
],
}
......
export default {
'content:file:beforeParse': (file) => {
// Netlifycms cannot create array in json file at root level and nuxt-content need an array. So, ressources.json is parsed to fetch 'ressources' key.
if (file.extension === '.json' && /.*ressources.json$/.test(file.path)) {
file.data = JSON.stringify(JSON.parse(file.data).ressources)
}
// Split md file with `---`. Used for flat plan.
if (file.extension === '.md' && /^---.*layout:.*---/s.test(file.data)) {
let t = 0
const data = file.data.replace(/---/g, (match) => {
++t
if (t === 2) return '---\n<section>'
if (t > 2) return '</section>\n<section>'
return match
})
file.data = data + '\n</section>'
}
},
async 'content:file:beforeInsert'(document) {
if (document.extension === '.md') {
/*
* Add reading time
*/
document.readingTime = require('reading-time')(document.text)
/*
* Add lexique terms and check if terms exist
*/
// Search lexique terms
const lexiqueTerms = [
...document.text.matchAll(
/<lexique[>]([^<]*)<\/|<lexique\s+title="(.*)"/g
),
].map((match) => {
return (match[1] || match[2]).toLowerCase() // Priority for term in title=""
})
if (lexiqueTerms.length) {
// Add terms to document
document.lexiqueTerms = [...new Set(lexiqueTerms)] // remove duplicate
const { $content } = require('@nuxt/content')
// Check if term exists
if ($content) {
for (let i = 0; i < document.lexiqueTerms.length; i++) {
const term = document.lexiqueTerms[i]
const lexique = await $content('lexique')
.where({
$or: [
{ title: { $regex: [`^${term}$`, 'i'] } }, // case insensitive
{ synonyms: { $contains: term } }, // search in synonyms
],
})
.limit(1)
.fetch()
if (!lexique.length) {
// eslint-disable-next-line no-console
console.warn(
`Term "${term}" in file ${
document.path + document.extension
} doesn't exist`
)
}
}
}
}
}
},
}
/*
Icons are here https://fontawesome.com/v5.15/icons?d=gallery&p=2
*/
export default {
regular: ['faClock'],
solid: [
'faHome',
'faSearch',
'faSkullCrossbones',
'faChevronLeft',
'faChevronRight',
'faArrowLeft',
'faArrowRight',
'faSun',
'faMoon',
'faHeart',
'faInfoCircle',
'faCheckCircle',
'faCheck',
'faExclamationCircle',
'faExclamationTriangle',
'faExternalLinkAlt',
'faBars',
'faUserCircle',
'faGlobe',
'faAngry',
'faCompressArrowsAlt',
'faExpandArrowsAlt',
'faFont',
'faWheelchair',
'faCaretDown',
'faShareAlt',
'faEnvelope',
'faComment',
'faRssSquare',
],
brands: [
'faCreativeCommonsNcEu',
'faDiaspora',
'faDiscourse',
'faGithub',
'faGitlab',
'faYoutube',
'faRocketchat',
'faFacebook',
'faTwitter',
'faDiscord',
'faApple',
'faAndroid',
'faBitcoin',
'faChrome',
'faFirefox',
'faCodepen',
'faDev',
'faDocker',
'faDropbox',
'faMastodon',
'faMedium',
'faNpm',
'faReddit',
'faSlack',
'faSoundcloud',
'faSpotify',
'faSteam',
'faTeamspeak',
'faTelegram',
'faTrello',
'faVimeo',
'faWhatsapp',
'faWikipediaW',
'faWordpress',
'faLinkedin',
'faSkype',
],
}
export default async () => {
const { $content } = require('@nuxt/content')
const routes = []
const posts = await $content({ deep: true })
.where({ dir: { $nin: ['/ui', '/ressources'] } })
.only('path')
.fetch()
for (const post of posts) {
routes.push(post.path)
}
return routes
}