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
Commits on Source (1053)
Showing
with 362 additions and 63 deletions
v16.15.1
......@@ -29,6 +29,14 @@ html {
@apply text-white;
}
/* For emojis from discourse */
img.emoji {
width: 20px;
height: 20px;
vertical-align: middle;
display: inline;
}
/* Loader */
@keyframes spinner {
to {
......
......@@ -40,7 +40,17 @@
</slot>
<div
class="flex items-center w-full lg:w-max justify-center px-2 lg:px-0 pt-2 lg:pt-0"
class="
flex
items-center
w-full
lg:w-max
justify-center
px-2
lg:px-0
pt-2
lg:pt-0
"
>
<slot
v-if="!isKeyCopied"
......@@ -140,9 +150,8 @@ export default {
computed: {
endpoint() {
// Build url from props. Prevent missing protocol.
return (/^https:\/\//.test(this.node)
? this.node
: `https://${this.node}`
return (
/^https:\/\//.test(this.node) ? this.node : `https://${this.node}`
).replace(/\/$/, '')
},
startDateTimestamp() {
......
......@@ -14,7 +14,22 @@
<client-only>
<div
v-if="document"
class="tooltip absolute bg-blue-100 border-blue-200 border invisible opacity-0 left-1/2 px-4 py-3 rounded-xl shadow-2xl text-gray-600 text-sm z-50 dark:bg-blue-900 dark:text-gray-100 dark:border-blue-800"
class="
tooltip
absolute
bg-blue-100
border-blue-200 border
invisible
opacity-0
left-1/2
px-4
py-3
rounded-xl
shadow-2xl
text-gray-600 text-sm
z-50
dark:bg-blue-900 dark:text-gray-100 dark:border-blue-800
"
>
<span class="triangle absolute"></span>
......@@ -25,7 +40,13 @@
<span>{{ document.description }}</span>
<span
class="block font-light mt-3 text-xs text-purple-800 dark:text-purple-500"
class="
block
font-light
mt-3
text-xs text-purple-800
dark:text-purple-500
"
>
{{ $t('lexique.tooltipReadmore') }}
</span>
......
......@@ -7,7 +7,16 @@
</div>
<SuperHero
class="superhero absolute h-40 hidden lg:h-full lg:relative lg:right-0 lg:w-full md:block right-6 w-1/3"
class="
superhero
absolute
h-40
hidden
lg:h-full lg:relative lg:right-0 lg:w-full
md:block
right-6
w-1/3
"
/>
</div>
</template>
......
<template>
<section id="map">
<div class="container flex items-end mb-3">
<div class="container flex items-end mb-3 pl-8">
<FaviconMap class="w-12 h-12 mr-3 fill-current dark:text-gray-100" />
<a
href="https://carte.monnaie-libre.fr"
......@@ -27,7 +27,7 @@
<iframe
:src="intersected ? $config.map_url : null"
class="w-screen bg-gray-200"
class="w-full bg-gray-200"
style="height: 50vh; min-height: 600px"
title="Carte monnaie-libre"
/>
......
<template>
<section id="agenda" class="container py-12">
<div class="border-b-2 container flex items-end mb-3 pb-2">
<div class="border-b-2 container flex items-end mb-3 pb-2 pl-1">
<JuneCalendar class="w-12 mr-3 fill-current dark:text-gray-100" />
<a
:href="`${$config.forum_url}/calendar`"
......@@ -35,7 +35,7 @@
<a
v-for="(event, index) in column"
:key="index"
:href="`${$config.forum_url}/t/${event.slug}/${event.id}`"
:href="`${$config.forum_url}${event.post.url}`"
target="_blank"
class="
block
......@@ -49,10 +49,11 @@
rel="noopener noreferrer"
>
<div class="event-date text-sm text-gray-500">
{{ prettyDate(event.event.start) }}
{{ prettyDate(event.starts_at) }}
<!-- poka: I don't find tags anymore with new api, so this line is actually unused -->
<div v-for="(tag, i) in event.tag" :key="i">{{ tag }}</div>
</div>
<div>{{ event.title }}</div>
<div v-html="emojify(event.post.topic.title)" />
</a>
</div>
</aside>
......@@ -66,6 +67,7 @@
<script>
import JuneCalendar from '~/static/img/june-calendar.svg?inline'
import { fetchNextEvents } from '~/libs/api-forum'
import { performEmojiUnescape } from '~/libs/emoji'
export default {
name: 'HomeNextEvents',
......@@ -118,6 +120,13 @@ export default {
})
.reduce((string, part) => string + part)
},
emojify(text) {
return performEmojiUnescape(text, {
emojiSet: 'images/emoji/twitter',
emojiCDNUrl: 'https://forum.monnaie-libre.fr',
getURL: (url) => url,
})
},
},
}
</script>
......
......@@ -76,6 +76,17 @@
<div class="sm:col-span-2">
<h3 class="text-3xl py-4">Suivez-nous</h3>
<div class="text-xl">
<a
v-if="$config.mastodon_link && $config.mastodon_user"
:href="$config.mastodon_link"
target="_blank"
class="flex items-center mb-2 hover:underline"
rel="noopener noreferrer"
>
<fa :icon="['fab', 'mastodon']" class="text-2xl mr-2.5" />
<span>{{ $config.mastodon_user }}</span>
</a>
<a
v-if="$config.twitter_user"
:href="`https://twitter.com/${$config.twitter_user}`"
......@@ -97,6 +108,27 @@
<fa :icon="['fab', 'facebook']" class="text-2xl mr-2.5" />
<span>Groupe Facebook</span>
</a>
<a
href="https://t.me/monnaielibrejune"
target="_blank"
class="flex items-center mb-2 hover:underline"
rel="noopener noreferrer"
>
<fa :icon="['fab', 'telegram']" class="text-2xl mr-2.5" />
<span>Groupe de discussion Telegram</span>
</a>
<a
href="https://t.me/infomonnaielibre"
target="_blank"
class="flex items-center mb-2 hover:underline"
rel="noopener noreferrer"
>
<fa :icon="['fab', 'telegram']" class="text-2xl mr-2.5" />
<span>Canal d'info Telegram</span>
</a>
<nuxt-link
to="/feed"
class="flex items-center mb-2 hover:underline"
......
......@@ -16,16 +16,20 @@
:class="{ '-translate-y-20': scrolled }"
>
<nav class="container flex justify-between items-center mx-auto h-16">
<LayoutHeaderMenuHamburger class="mr-3 flex lg:hidden">
<LayoutHeaderMenu class="flex-col space-y-4" />
</LayoutHeaderMenuHamburger>
<LayoutHeaderLogo :show-title="!searchFocus" />
<div class="flex justify-end items-center relative">
<LayoutHeaderMenuSearch @search-focus="searchFocus = $event" />
<LayoutHeaderMenu />
<LayoutHeaderMenu class="hidden lg:flex" />
<AppDarkModeToggle class="hidden lg:inline-flex ml-3" />
<AppDarkModeToggle class="hidden xl:inline-flex ml-3" />
<LayoutHeaderMenuAvatar />
<LayoutHeaderMenuAvatar class="hidden sm:block" />
</div>
</nav>
</div>
......@@ -75,13 +79,4 @@ export default {
/* Copied from discourse */
box-shadow: 0 2px 4px -1px rgb(0 0 0 / 25%);
}
.menu-hamburger {
display: block;
fill: none;
height: 16px;
width: 16px;
stroke: currentcolor;
stroke-width: 3;
overflow: visible;
}
</style>
......@@ -4,12 +4,31 @@
class="group inline-flex items-center focus:outline-none py-3"
>
<div
class="w-9 mr-4 fill-current group-hover:text-purple-800 transition-colors"
class="
w-6
sm:w-9
mr-4
fill-current
group-hover:text-purple-800
transition-colors
"
v-html="$options.rawLogo"
/>
<span
class="bg-clip-text bg-gradient-to-r font-semibold from-purple-800 group-hover:text-transparent text-2xl to-blue-700 tracking-tight transition-colors whitespace-nowrap"
class="
bg-clip-text bg-gradient-to-r
font-semibold
from-purple-800
group-hover:text-transparent
text-lg
sm:text-xl
lg:text-2xl
to-blue-700
tracking-tight
transition-colors
whitespace-nowrap
"
:class="!props.showTitle && 'hidden lg:block'"
>
{{ $options.config.site_title }}
......
......@@ -69,15 +69,39 @@
</div>
<div v-if="git">
<span
class="bg-purple-200 text-purple-800 font-medium py-0.5 px-1 text-sm rounded"
class="
bg-purple-200
text-purple-800
font-medium
py-0.5
px-1
text-sm
rounded
"
v-text="git.draft.count"
/>
<span
class="bg-yellow-200 text-yellow-800 font-medium py-0.5 px-1 text-sm rounded"
class="
bg-yellow-200
text-yellow-800
font-medium
py-0.5
px-1
text-sm
rounded
"
v-text="git.pending_review.count"
/>
<span
class="bg-green-200 text-green-800 font-medium py-0.5 px-1 text-sm rounded"
class="
bg-green-200
text-green-800
font-medium
py-0.5
px-1
text-sm
rounded
"
v-text="git.pending_publish.count"
/>
</div>
......@@ -123,7 +147,15 @@
>
<div>Mes tickets</div>
<div
class="bg-gray-200 text-gray-800 font-medium w-5 h-5 text-center text-sm rounded-full"
class="
bg-gray-200
text-gray-800
font-medium
w-5
h-5
text-center text-sm
rounded-full
"
v-text="git.my_issues.count"
/>
</a>
......@@ -134,7 +166,15 @@
>
<div>Mes demandes de fusion</div>
<div
class="bg-gray-200 text-gray-800 font-medium w-5 h-5 text-center text-sm rounded-full"
class="
bg-gray-200
text-gray-800
font-medium
w-5
h-5
text-center text-sm
rounded-full
"
v-text="git.my_merge_requests.count"
/>
</a>
......@@ -167,7 +207,7 @@
<span>Aide</span>
</nuxt-link>
<div><AppDarkModeToggle class="lg:hidden ml-2" /></div>
<AppDarkModeToggle class="xl:hidden ml-2" />
<AppA11y class="ml-2" />
</div>
......
<template>
<div v-if="!loading" class="flex items-center">
<div v-if="!loading" class="menu-forum flex items-center">
<MiniMap class="mx-4" style="min-width: 440px" />
<div class="text-left text-xs py-1 w-80 border-l dark:border-gray-500">
......@@ -58,4 +58,7 @@ export default {
margin-right: 5px;
display: inline-block;
}
.hamburger-menu .menu-forum {
display: none;
}
</style>
<script>
export default {
name: 'LayoutHeaderMenuHamburger',
data() {
return {
isOpen: false,
}
},
}
</script>
<template>
<div>
<div
class="hamburger flex flex-col space-between space-y-1.5 p-6 -mx-6"
:class="isOpen ? 'is-open' : ''"
@click="isOpen = !isOpen"
>
<span class="hamburger-item" />
<span class="hamburger-item" />
<span class="hamburger-item" />
</div>
<transition :name="isOpen ? 'slideback' : 'slide'">
<div
v-show="isOpen"
class="hamburger-menu fixed bg-white left-0 top-0 w-min z-10 shadow p-8"
>
<slot />
</div>
</transition>
</div>
</template>
<style lang="postcss" scoped>
.hamburger-item {
@apply block w-6 h-0.5 bg-gray-800 dark:bg-gray-300 transition;
}
.is-open.hamburger > span:nth-child(1) {
transform: translate(0, 0.5rem) rotate(45deg);
}
.is-open.hamburger > span:nth-child(2) {
opacity: 0;
}
.is-open.hamburger > span:nth-child(3) {
transform: translate(0, -0.5rem) rotate(-45deg);
}
.hamburger-menu {
top: 65px;
height: calc(100vh - 65px);
}
.slide-leave-active,
.slide-enter-active {
transition: 0.5s;
}
.slide-enter {
transform: translate(100%, 0);
}
.slide-leave-to {
transform: translate(-100%, 0);
}
.slideback-leave-active,
.slideback-enter-active {
transition: 0.5s;
}
.slideback-enter {
transform: translate(-100%, 0);
}
.slideback-leave-to {
transform: translate(100%, 0);
}
</style>
......@@ -5,7 +5,7 @@
v-model="query"
:class="!isVisible && 'hidden'"
type="search"
:placeholder="$t('search') + ' (ctrl + F)'"
:placeholder="$t('search') + ` [${isMac ? 'cmd' : 'ctrl'} K]`"
class="pl-12 w-full text-base rounded-full"
@keyup.enter="search()"
@blur="isVisible = false"
......@@ -32,6 +32,7 @@ export default {
return {
query: '',
isVisible: false,
isMac: false,
}
},
watch: {
......@@ -46,6 +47,9 @@ export default {
},
mounted() {
this.isMac = /(macintosh|macintel|macppc|mac68k|macos)/i.test(
navigator.userAgentData.platform
)
document.addEventListener('keydown', this.searchShortcut)
},
beforeDestroy() {
......@@ -60,11 +64,10 @@ export default {
}
},
searchShortcut(e) {
if (e.key === 'f' && e.ctrlKey) {
// (e.ctrlKey || e.metaKey)) {
if (e.key === 'k' && (e.ctrlKey || e.metaKey)) {
e.preventDefault() // present "Save Page" from getting triggered.
this.setVisible()
this.isVisible = !this.isVisible
}
},
},
......
......@@ -19,7 +19,18 @@
v-for="(section, i) in sections"
:key="i"
:to="section.to"
class="bg-blue-100 dark:bg-blue-900 px-4 py-4 pb-3 rounded transition hover:shadow-xl transform hover:-translate-y-0.5"
class="
bg-blue-100
dark:bg-blue-900
px-4
py-4
pb-3
rounded
transition
hover:shadow-xl
transform
hover:-translate-y-0.5
"
:class="
showNext &&
(nextPage && nextPage.to === section.to
......
......@@ -2,7 +2,19 @@
<div class="flex items-center justify-between">
<h1
v-prevent-last-char-break
class="text-3xl md:text-4xl 2xl:text-5xl bg-clip-text text-transparent bg-gradient-to-r from-purple-800 to-blue-600 font-extrabold leading-tight py-10"
class="
text-3xl
md:text-4xl
2xl:text-5xl
bg-clip-text
text-transparent
bg-gradient-to-r
from-purple-800
to-blue-600
font-extrabold
leading-tight
py-10
"
>
{{ document.title }}
</h1>
......
......@@ -3,7 +3,16 @@
<div class="text-xs font-semibold mr-3 whitespace-nowrap">Filtres :</div>
<div class="flex items-center flex-wrap">
<div
class="text-xs uppercase font-semibold mr-3 rounded px-1 py-0.5 cursor-pointer"
class="
text-xs
uppercase
font-semibold
mr-3
rounded
px-1
py-0.5
cursor-pointer
"
:class="
selectedCategories.length !== categories.length
? 'text-gray-400 hover:text-hover'
......@@ -16,7 +25,17 @@
<div
v-for="(category, index) in categories"
:key="index"
class="text-xs uppercase font-semibold mr-3 rounded px-1 py-0.5 my-0.5 cursor-pointer"
class="
text-xs
uppercase
font-semibold
mr-3
rounded
px-1
py-0.5
my-0.5
cursor-pointer
"
:class="
!selectedCategories.includes(category) ||
selectedCategories.length === categories.length
......
......@@ -6,7 +6,14 @@
v-for="(category, index) in item.categories"
v-else
:key="index"
class="text-gray-400 hover:text-hover text-xs uppercase font-semibold mr-3"
class="
text-gray-400
hover:text-hover
text-xs
uppercase
font-semibold
mr-3
"
@click="$emit('select', [category])"
>
{{ category }}
......@@ -29,7 +36,20 @@
<div
v-if="item.wallet"
class="relative bg-purple-500 flex font-semibold h-6 items-center justify-center ml-1 rounded text-white text-xs w-6 cursor-pointer"
class="
relative
bg-purple-500
flex
font-semibold
h-6
items-center
justify-center
ml-1
rounded
text-white text-xs
w-6
cursor-pointer
"
@click="onCopy(item.wallet)"
@mouseenter="isHover = `PubKey : ${item.wallet}`"
@mouseleave="isHover = false"
......
......@@ -2,13 +2,16 @@
title: A quoi ça sert d'être référent ?
description: Les référents renforcent la toile de confiance.
---
## A rien
Les cocréateurs <lexique>référents</lexique> n'ont aucun droit supplémentaire, aucun privilège, ils ne sont pas non plus des références en connaissance de la monnaie libre.
On peut juste supposer qu'ils sont plus actifs dans la toile de confiance, car il ont reçu **et** émis un certain nombres de certifications.
## Cela n'apporte aucun avantage
Les cocréateurs <lexique title="référent">référents</lexique> n'ont aucun droit supplémentaire, aucun privilège, ils ne sont pas non plus des références en connaissance de la monnaie libre.
On peut juste supposer qu'ils sont plus actifs dans la toile de confiance et qu'ils ont un peu d'expérience, car il ont reçu **et** émis un certain nombre de certifications.
## Pour la règle de distance.
La [règle de distance](/faq/regle-de-distance) se mesure en passant par les certifications émise. Il est donc impossible de mesurer une distance à partir de quelqu'un qui n'a pas émis de certifications. C'est difficile de respecter cette règle si la personne n'a émis qu'une seule certification.
## Pour la règle de distance
Il a été prouvé que, sur la planète, [tous les humains sont à moins de 5 ou 6 pas les uns des autres](https://fr.wikipedia.org/wiki/Six_degr%C3%A9s_de_s%C3%A9paration) (je connais quelqu'un qui connaît quelqu'un qui connaît quelqu'un ...).
Pour garder une certaine forme de sécurité dans la toile de confiance et surtout pour faciliter les calculs pour les serveurs Duniter, il a été jugé, pour la toile de confiance de la June, que si 100% des membres pouvaient rejoindre 80% des membres **référents** en moins de 5 pas, ce serait suffisant.
C'est ce qu'on appelle la <lexique>règle de distance</lexique> : une personne ne peut être membre que si elle arrive à rejoindre au moins 80% des membres référents en 5 pas ou moins.
Un membre référent étant un membre qui a émis **et** reçus un certain nombre de certifications en fonction de la taille de la toile de confiance.
Pour mesurer la règle distance, le logiciel ne le fait que à partir des personnes ayant émis et reçus un certain nombre de certification, sinon cette règle serait impossible à appliquer.
Plus d'infos sur [cette présentation d'Eloïs](https://www.youtube.com/watch?v=8GaTKfa-ADU) lors des RML11 de Douarnenez en 2018.
Voir le lexique pour connaître le nombre de certifications pour être <lexique>référent</lexique>
\ No newline at end of file
Voir le lexique pour connaître le nombre de certifications nécessaires pour être <lexique>référent</lexique>.
\ No newline at end of file
......@@ -5,28 +5,35 @@ description: "Procédure à suivre pour cocréer sa part de monnaie. "
## Pas d'urgence
Devenir cocréateur de monnaie n'est pas indispensable pour utiliser la monnaie libre.
Il suffit d'ouvrir un compte pour commencer à vendre et acheter en Ğ1.
Il suffit d'ouvrir un compte pour commencer à vendre et à acheter en Ğ1.
Il est tout aussi important de faire vivre la Ğ1 que de la créer.
## D'abord faire des rencontres
Pour devenir cocréateur il faut être identifié en tant qu'humain vivant unique, par des cocréateurs qui vous connaissent.
Le meilleur moyen de connaître quelqu'un est de le rencontrer plusieurs fois.
Donc commencez par venir aux rencontres pour discuter et faire des échanges.
Quand les cocréateurs vous connaissent vous pouvez leur demander de vous certifier.
Pour devenir cocréateur, il faut être identifié en tant qu'humain vivant unique, par des cocréateurs qui vous connaissent.
Le meilleur moyen de connaître quelqu'un est de le rencontrer plusieurs fois.
Donc commencez par venir aux rencontres pour discuter et faire des échanges.
Vous trouverez sur la page d'accueil [l'agenda](/#agenda) des rencontres.
Quand les cocréateurs vous connaissent, vous pouvez leur demander de vous certifier.
## S'engager
Le futur cocréateur doit avoir pris le temps de lire et bien comprendre la [licence Ğ1](https://duniter.org/fr/monnaie-libre-g1/licence-g1/).
Il doit s'engager à respecter et faire respecter cette licence.
Le futur cocréateur doit avoir pris le temps de lire et bien comprendre la [licence Ğ1](/licence-g1).
Il doit s'engager à respecter et à faire respecter cette licence.
Il s'engage entre autre à ne pas certifier ni re-certifier quelqu'un qui ne respecterait pas cette licence
## Cinq certifications
Pour devenir membre il faut recevoir au moins 5 certifications et respecter la <lexique>règle de distance</lexique>.
Il est préférable d'avoir cinq cocréateur prêts à vous certifier (5 promesses) avant de commencer la procédure.
Pour respecter la règle de distance il est préférable d'avoir des connaissances venant de communautés différentes.
Pour devenir membre, il faut recevoir au moins 5 certifications et respecter la <lexique>règle de distance</lexique>.
Il est préférable d'avoir cinq cocréateurs prêts à vous certifier (5 promesses) avant de commencer la procédure.
Pour respecter la règle de distance, il est préférable d'avoir des connaissances venant de communautés différentes.
## Continuer à faire des rencontres.
## Faire la demande de transformation en compte membre
Devenir cocréateur n'est pas un but, c'est un début. Il est important de continuer à participer aux rencontres pour faire circuler la monnaie, pour rencontrer des nouveaux membres et continuer de recevoir des certifications.
\ No newline at end of file
Dans césium aller sur l'onglet "mon compte" puis bouton "options" choix "compte et sécurité" choix "transformer mon compte en compte membre".
Suivre la procédure, ne pas oublier de vérifier le téléchargement du [fichier de révocation](faq/comment-telecharger-le-fichier-de-revocation).
<iframe title="Césium : Comment passer d'un compte simple à un compte membre." src="https://video.tedomum.net/videos/embed/6b48e531-1af8-4d94-96cc-6011e9e14482" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="100%" height="405" frameborder="0"></iframe>
## Continuer à faire des rencontres
Devenir cocréateur n'est pas un but, c'est un début. Il est important de continuer à participer aux rencontres pour faire circuler la monnaie, pour rencontrer des nouveaux membres et continuer de recevoir des certifications.