Skip to content
Snippets Groups Projects
Commit f6656672 authored by Pierre-Jean CHANCELLIER's avatar Pierre-Jean CHANCELLIER
Browse files

v0.01

parent 2ff78f3d
No related branches found
No related tags found
No related merge requests found
<template> <template>
<span class="font-weight-normal" :class="classWarning" :title="textWarning" v-if="($options.filters.dateStatus(limitDate) != 'success') && (['MEMBER', 'MISSING'].includes(memberStatus))"> <span class="danger font-weight-normal" :class="classWarning" :title="textWarning" v-if="($options.filters.dateStatus(limitDate) != 'success') && (['MEMBER', 'MISSING'].includes(memberStatus))">
<span class="sr-only">{{ textWarning }}</span> <span class="sr-only">{{ textWarning }}</span>
</span> </span>
</template> </template>
...@@ -25,4 +25,10 @@ export default { ...@@ -25,4 +25,10 @@ export default {
} }
} }
} }
</script> </script>
\ No newline at end of file
<style lang="scss" scoped>
.danger {
cursor: default;
}
</style>
\ No newline at end of file
<template>
<small>
<span class="badge"
:class="{
'badge-success': isDispo,
'badge-danger': !isDispo,
}">
{{ isDispo ? $t('membre.dispo') : $t('membre.nodispo') + ' >&nbsp;' + $d(new Date(dateDispo*1000), 'short') }}
</span>
</small>
</template>
<script>
export default {
props: {
isDispo: {
type: Boolean,
required: true
},
dateDispo: {
type: Number
}
}
}
</script>
\ No newline at end of file
...@@ -4,14 +4,19 @@ ...@@ -4,14 +4,19 @@
<tbody> <tbody>
<tr v-for="certif in certifsTriees" :key="getNeighbor(certif).uid" <tr v-for="certif in certifsTriees" :key="getNeighbor(certif).uid"
@click="$router.push(localePath({name:'membres-hash', params: {hash: getNeighbor(certif).hash}}))"> @click="$router.push(localePath({name:'membres-hash', params: {hash: getNeighbor(certif).hash}}))">
<th scope="row"> <th scope="row" class="py-1">
{{ getNeighbor(certif).uid }} <div>
<BadgeCertifStatus :limitDate="getNeighbor(certif).received_certifications.limit" :memberStatus="getNeighbor(certif).status" /> {{ getNeighbor(certif).uid }}
<BadgeStatus :membre="getNeighbor(certif)" /> <BadgeCertifStatus :limitDate="getNeighbor(certif).received_certifications.limit" :memberStatus="getNeighbor(certif).status" />
<BadgeQuality :quality="getNeighbor(certif).quality.ratio" v-if="getNeighbor(certif).status != 'REVOKED'" /> <BadgeQuality :quality="getNeighbor(certif).quality.ratio" v-if="getNeighbor(certif).status != 'REVOKED'" />
</div>
<div>
<BadgeStatus :membre="getNeighbor(certif)" />
<BadgeDispo :isDispo="getNeighbor(certif).minDatePassed" :dateDispo="getNeighbor(certif).minDate" v-if="getNeighbor(certif).status == 'MEMBER'" />
</div>
</th> </th>
<td class="text-right"> <td class="text-right py-1">
<small><span class="badge" :class="'badge-'+ $options.filters.dateStatus(certif.expires_on)">{{ $t('expire') }} {{ $d(new Date(certif.expires_on*1000), 'long') }}</span></small> <small><span class="badge" :class="'badge-'+ $options.filters.dateStatus(certif.expires_on)">{{ $t('expire') }} {{ $d(new Date(certif.expires_on*1000), 'short') }}</span></small>
</td> </td>
</tr> </tr>
</tbody> </tbody>
......
...@@ -19,12 +19,12 @@ ...@@ -19,12 +19,12 @@
'list-group-item-warning': hash.quality.ratio < 80, 'list-group-item-warning': hash.quality.ratio < 80,
}">{{ Math.round(hash.quality.ratio*100)/100 }}</td> }">{{ Math.round(hash.quality.ratio*100)/100 }}</td>
</tr> </tr>
<tr v-if="hash.status != 'NEWCOMER'"> <tr>
<th scope="row">{{ $t('membre.distance') }} :</th> <th scope="row">{{ $t('membre.distance') }} :</th>
<td :class="{ <td :class="{
'list-group-item-success': hash.distance.dist_ok, 'list-group-item-success': hash.status != 'NEWCOMER' ? hash.distance.dist_ok : hash.distanceE.dist_ok,
'list-group-item-danger': !hash.distance.dist_ok, 'list-group-item-danger': hash.status != 'NEWCOMER' ? !hash.distance.dist_ok : !hash.distanceE.dist_ok,
}">{{ Math.round(hash.distance.value.ratio*100)/100 }}</td> }">{{ hash.status != 'NEWCOMER' ? Math.round(hash.distance.value.ratio*100)/100 : Math.round(hash.distanceE.value.ratio*100)/100 }}</td>
</tr> </tr>
<tr> <tr>
<th scope="row">{{ hash.status != 'MISSING' ? $t('membre.datelimadhesion') : $t('membre.datelimrevoc')}} :</th> <th scope="row">{{ hash.status != 'MISSING' ? $t('membre.datelimadhesion') : $t('membre.datelimrevoc')}} :</th>
......
<template> <template>
<aside class="menu shadow position-fixed"> <aside class="menu shadow position-fixed">
<div class="nav_header pb-3 mb-5"> <div class="nav_header pb-3 mb-5">
<nuxt-link :to="localePath('/')"><h1 class="h2 d-flex"><img src="@/assets/img/logo.png" alt="Accueil" class="logo">&nbsp;Wotwizard</h1></nuxt-link>
<nuxt-link :to="localePath('/')" class="d-flex">
<div><img src="@/assets/img/logo.png" alt="Accueil" class="logo"></div>
<div><h1 class="h2">Wotwizard</h1><small class="text-muted">{{ $t('slogan') }}</small></div>
</nuxt-link>
<button type="button" class="close position-absolute d-xl-none" aria-label="Close" @click="toggleMenu"> <button type="button" class="close position-absolute d-xl-none" aria-label="Close" @click="toggleMenu">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
...@@ -9,6 +15,7 @@ ...@@ -9,6 +15,7 @@
<nav> <nav>
<NavigationMenuGroup v-for="menu in menus" :key="menu.title" :menu="menu"/> <NavigationMenuGroup v-for="menu in menus" :key="menu.title" :menu="menu"/>
</nav> </nav>
<div class="version position-absolute p-3 text-muted"><br>v0.01</div>
</aside> </aside>
</template> </template>
...@@ -23,4 +30,11 @@ export default { ...@@ -23,4 +30,11 @@ export default {
} }
} }
} }
</script> </script>
\ No newline at end of file
<style lang="scss">
.version {
bottom: 0;
right: 0;
}
</style>
\ No newline at end of file
...@@ -113,57 +113,6 @@ export const PREVISIONS = gql`query GetDossiers { ...@@ -113,57 +113,6 @@ export const PREVISIONS = gql`query GetDossiers {
} }
}` }`
// Pour la page previsions/_hash
export const PREVISION = gql`query SearchForecast($hash: Hash!) {
idFromHash(hash: $hash) {
...memberAttributes
pubkey
isLeaving
sentry
minDate
minDatePassed
membership_pending
limitDate
distance {
__typename
value {
__typename
ratio
}
dist_ok
}
received_certifications {
__typename
certifications {
__typename
from {
...memberAttributes
}
expires_on
}
}
sent_certifications {
__typename
to {
...memberAttributes
}
expires_on
}
}
}
fragment memberAttributes on Identity {
__typename
uid
hash
status
quality {
ratio
}
received_certifications {
limit
}
}`
// Pour la page previsions/newcomers // Pour la page previsions/newcomers
export const NEWCOMERS = gql`query GetNewcomers{ export const NEWCOMERS = gql`query GetNewcomers{
wwResult { wwResult {
...@@ -218,10 +167,16 @@ export const SEARCH_MEMBER = gql`query SearchMemberWithHash($hash: Hash!) { ...@@ -218,10 +167,16 @@ export const SEARCH_MEMBER = gql`query SearchMemberWithHash($hash: Hash!) {
pubkey pubkey
isLeaving isLeaving
sentry sentry
minDate
minDatePassed
membership_pending membership_pending
limitDate limitDate
distanceE {
__typename
value {
__typename
ratio
}
dist_ok
}
distance { distance {
__typename __typename
value { value {
...@@ -254,6 +209,8 @@ fragment attr on Identity { ...@@ -254,6 +209,8 @@ fragment attr on Identity {
uid uid
hash hash
status status
minDate
minDatePassed
quality { quality {
__typename __typename
ratio ratio
......
...@@ -2,8 +2,8 @@ export const dateTimeFormats = { ...@@ -2,8 +2,8 @@ export const dateTimeFormats = {
'fr': { 'fr': {
short: { short: {
day: 'numeric', day: 'numeric',
month: 'long', month: 'short',
year: 'numeric' year: '2-digit'
}, },
long: { long: {
day: 'numeric', day: 'numeric',
...@@ -17,8 +17,8 @@ export const dateTimeFormats = { ...@@ -17,8 +17,8 @@ export const dateTimeFormats = {
'en': { 'en': {
short: { short: {
day: 'numeric', day: 'numeric',
month: 'long', month: 'short',
year: 'numeric' year: '2-digit'
}, },
long: { long: {
month: 'long', month: 'long',
...@@ -32,8 +32,8 @@ export const dateTimeFormats = { ...@@ -32,8 +32,8 @@ export const dateTimeFormats = {
'es': { 'es': {
short: { short: {
day: 'numeric', day: 'numeric',
month: 'long', month: 'short',
year: 'numeric' year: '2-digit'
}, },
long: { long: {
day: 'numeric', day: 'numeric',
......
...@@ -16,9 +16,11 @@ ...@@ -16,9 +16,11 @@
"datelimadhesion": "Membership deadline", "datelimadhesion": "Membership deadline",
"datelimrevoc" : "Deadline before revocation ", "datelimrevoc" : "Deadline before revocation ",
"datemanquecertifs": "Date before running out of certs", "datemanquecertifs": "Date before running out of certs",
"dispo": "Available",
"dispocertif": "Available to certify", "dispocertif": "Available to certify",
"distance": "Distance", "distance": "Distance",
"nb_certifs": "Nb of available certs", "nb_certifs": "Nb of available certs",
"nodispo": "Unavailable",
"qualite": "Quality", "qualite": "Quality",
"referent": "Referent" "referent": "Referent"
}, },
...@@ -38,6 +40,7 @@ ...@@ -38,6 +40,7 @@
"title": "Your search" "title": "Your search"
}, },
"revoila": "Here they are again", "revoila": "Here they are again",
"slogan": "The Web of Trust’s wizard",
"statut" : { "statut" : {
"bientotmanquecertif": "Needs certifications soon", "bientotmanquecertif": "Needs certifications soon",
"manquecertif": "Needs certifications", "manquecertif": "Needs certifications",
......
...@@ -16,9 +16,11 @@ ...@@ -16,9 +16,11 @@
"datelimadhesion": "Fecha límite de membresía", "datelimadhesion": "Fecha límite de membresía",
"datelimrevoc" : "Fecha límite de la autorevocación", "datelimrevoc" : "Fecha límite de la autorevocación",
"datemanquecertifs": "Fecha antes de quedarse sin certificaciones", "datemanquecertifs": "Fecha antes de quedarse sin certificaciones",
"dispo": "Disponible",
"dispocertif": "Disponible para certificar", "dispocertif": "Disponible para certificar",
"distance": "Distancia", "distance": "Distancia",
"nb_certifs": "Núm. de certificaciones disponibles", "nb_certifs": "Núm. de certificaciones disponibles",
"nodispo": "Indisponible",
"qualite": "Calidad de enlace", "qualite": "Calidad de enlace",
"referent": "Referente o de control" "referent": "Referente o de control"
}, },
...@@ -38,6 +40,7 @@ ...@@ -38,6 +40,7 @@
"title": "Buscar" "title": "Buscar"
}, },
"revoila": "Regresan", "revoila": "Regresan",
"slogan": "El mago de la Red de Confianza",
"statut" : { "statut" : {
"bientotmanquecertif": "Pronto necesitará certificaciones", "bientotmanquecertif": "Pronto necesitará certificaciones",
"manquecertif": "Faltan certificaciones", "manquecertif": "Faltan certificaciones",
......
...@@ -16,9 +16,11 @@ ...@@ -16,9 +16,11 @@
"datelimadhesion": "Date limite d'adhésion", "datelimadhesion": "Date limite d'adhésion",
"datelimrevoc" : "Date limite avant révocation ", "datelimrevoc" : "Date limite avant révocation ",
"datemanquecertifs": "Date avant de manquer de certifs", "datemanquecertifs": "Date avant de manquer de certifs",
"dispo": "Disponible",
"dispocertif": "Disponible pour certifier", "dispocertif": "Disponible pour certifier",
"distance": "Distance", "distance": "Distance",
"nb_certifs": "Nbre de certifs disponibles", "nb_certifs": "Nbre de certifs disponibles",
"nodispo": "Indisponible",
"qualite": "Qualité", "qualite": "Qualité",
"referent": "Référent" "referent": "Référent"
}, },
...@@ -38,6 +40,7 @@ ...@@ -38,6 +40,7 @@
"title": "Votre recherche" "title": "Votre recherche"
}, },
"revoila": "Les revoilà", "revoila": "Les revoilà",
"slogan": "Le magicien de la Toile de Confiance",
"statut" : { "statut" : {
"bientotmanquecertif": "Bientôt en manque de certifications", "bientotmanquecertif": "Bientôt en manque de certifications",
"manquecertif": "En manque de certifications", "manquecertif": "En manque de certifications",
......
...@@ -13,15 +13,15 @@ export default { ...@@ -13,15 +13,15 @@ export default {
// Les title correspondent aux chaînes de traduction dans /i18n/locales // Les title correspondent aux chaînes de traduction dans /i18n/locales
menus : [ menus : [
{ {
title: 'previsions.title', title: 'wot',
items : [ items : [
{path: '/previsions/futurs_membres',title: 'futuremembers'} {path: '/membres',title: 'membres'}
] ]
}, },
{ {
title: 'wot', title: 'previsions.title',
items : [ items : [
{path: '/membres',title: 'membres'} {path: '/previsions/futurs_membres',title: 'futuremembers'}
] ]
} }
] ]
......
...@@ -12,14 +12,17 @@ ...@@ -12,14 +12,17 @@
</div> </div>
</div> </div>
<div class="row mt-3" v-if="idFromHash.status != 'REVOKED'"> <div class="row mt-3" v-if="idFromHash.status != 'REVOKED'">
<div class="col-12 col-md-6 mb-3"> <div class="col-sm-8 col-lg-5 mb-3 mx-auto">
<h3>{{ $t('certifications.recues') }} ({{ idFromHash.received_certifications.certifications.length }}) <h3 class="h4" :class="{
'text-success' : ['NEWCOMER','MISSING'].includes(idFromHash.status) && idFromHash.received_certifications.certifications.length>=5,
'text-danger' : ['NEWCOMER','MISSING'].includes(idFromHash.status) && idFromHash.received_certifications.certifications.length<5,
}">{{ $t('certifications.recues') }} ({{ idFromHash.received_certifications.certifications.length }})
<BadgeCertifStatus :limitDate="idFromHash.received_certifications.limit" :memberStatus="idFromHash.status" /> <BadgeCertifStatus :limitDate="idFromHash.received_certifications.limit" :memberStatus="idFromHash.status" />
</h3> </h3>
<CertifList :certifs="idFromHash.received_certifications.certifications" type="received" /> <CertifList :certifs="idFromHash.received_certifications.certifications" type="received" />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-sm-8 col-lg-5 mx-auto" v-if="['MISSING','MEMBER'].includes(idFromHash.status)">
<h3>{{ $t('certifications.envoyees') }} ({{ idFromHash.sent_certifications.length }})</h3> <h3 class="h4">{{ $t('certifications.envoyees') }} ({{ idFromHash.sent_certifications.length }})</h3>
<CertifList :certifs="idFromHash.sent_certifications" type="sent" /> <CertifList :certifs="idFromHash.sent_certifications" type="sent" />
</div> </div>
</div> </div>
......
<template>
<main class="content container">
<NavigationLoader :isLoading="$apollo.queries.idFromHash.loading" />
<transition name="fade">
<div class="alert alert-danger" v-if="error">{{ error }}</div>
</transition>
<transition name="fade">
<div v-if="idFromHash">
<div class="row">
<div class="col-md-10 col-lg-8 col-xl-6 mx-auto mt-3">
<h2 class="text-center mb-5 font-weight-light">Prévisions <small><span class="badge badge-secondary">{{ idFromHash.uid }}</span></small></h2>
<MemberCard :hash="idFromHash" />
</div>
</div>
</div>
</transition>
</main>
</template>
<script>
import {PREVISION} from "@/graphql/queries"
export default {
data() {
return {
breadcrumb: [
{
text: this.$t('accueil'),
to: '/'
},
{
text: this.$t('previsions.title'),
to: '/previsions'
},
{
text: '',
active: true
}
],
error: null
};
},
apollo: {
idFromHash: {
query: PREVISION,
variables() {return { hash: this.$route.params.hash }},
error (err) {this.error = err.message}
},
},
nuxtI18n: {
paths: {
fr: '/previsions/:hash',
en: '/forecasts/:hash',
es: '/pronosticos/:hash'
}
},
computed: {
classWarning: function() {
return {
'text-danger' : !this.idFromHash.received_certifications.limit,
'text-warning' : this.$options.filters.dateStatus(this.idFromHash.received_certifications.limit) == 'warning'
}
}
},
watch: {
idFromHash: {
handler(n,o) {
this.breadcrumb[2].text = this.idFromHash.uid
$nuxt.$emit("changeRoute", this.breadcrumb);
}
}
}
};
</script>
\ No newline at end of file
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-hover"> <table class="table table-striped table-hover">
<tbody> <tbody>
<tr v-for="forecast in wwResult.forecastsByNames" :key="forecast.member.uid" @click="$router.push(localePath({name:'previsions-hash', params:{hash:forecast.member.hash}}))"> <tr v-for="forecast in wwResult.forecastsByNames" :key="forecast.member.uid" @click="$router.push(localePath({name:'membres-hash', params:{hash:forecast.member.hash}}))">
<th scope="row"> <th scope="row">
{{ forecast.member.uid }} {{ forecast.member.uid }}
<BadgeStatus :membre="forecast.member" /> <BadgeStatus :membre="forecast.member" />
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<th scope="row">{{ $d(new Date(forecast.date*1000), 'long') }} {{ $t('time.a') }} {{ $d(new Date(forecast.date*1000), 'hour') }}</th> <th scope="row">{{ $d(new Date(forecast.date*1000), 'long') }} {{ $t('time.a') }} {{ $d(new Date(forecast.date*1000), 'hour') }}</th>
<td class="p-0"> <td class="p-0">
<div class="list-group rounded-0"> <div class="list-group rounded-0">
<nuxt-link class="list-group-item list-group-item-action border-0 d-flex justify-content-between" :to="localePath('/previsions/' + member.member.hash)" v-for="member in forecast.forecasts" :key="member.member.uid"> <nuxt-link class="list-group-item list-group-item-action border-0 d-flex justify-content-between" :to="localePath('/membres/' + member.member.hash)" v-for="member in forecast.forecasts" :key="member.member.uid">
<div>{{ member.member.uid }} <BadgeStatus :membre="member.member" /></div> <div>{{ member.member.uid }} <BadgeStatus :membre="member.member" /></div>
<div>{{ member.proba * 100 }} %</div> <div>{{ member.proba * 100 }} %</div>
</nuxt-link> </nuxt-link>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment