fi:x modifications from Chloé

pull/89/head
Pierre-Louis Guhur 1 year ago
parent 95dd8124b6
commit d1617ea76e

@ -1,13 +1,14 @@
import { useTranslation } from 'next-i18next';
import {MAJORITY_JUDGMENT_LINK} from '@services/constants';
import {useTranslation} from 'next-i18next';
import Image from 'next/image';
import { Row, Col, Button, Container } from 'reactstrap';
import {Row, Col, Button, Container} from 'reactstrap';
import arrowRight from '../public/arrow-white.svg';
import vote from '../public/vote.svg';
const Experiencediv = () => {
const { t } = useTranslation('resource');
const {t} = useTranslation('resource');
return (
<div className="sectionTwodivTwo">
<div className="sectionTwodivTwo mt-4">
<div className="w-100 justify-content-center d-flex">
<Image
className="d-block d-md-none"
@ -17,8 +18,8 @@ const Experiencediv = () => {
</div>
<div className="d-md-block d-none vote_background"></div>
<h3 className="mb-5">{t('home.experience-name')}</h3>
<Container>
<h3>{t('home.experience-name')}</h3>
<Container className="my-5">
<Row className="sectionTwodivTwodiv mb-5">
<Col className="sectionTwodivTwodivText col-12 col-md-4">
<h5 className="">{t('home.experience-1-name')}</h5>
@ -32,6 +33,7 @@ const Experiencediv = () => {
</Row>
</Container>
<div className="d-flex w-100 justify-content-center mt-5">
<a href={MAJORITY_JUDGMENT_LINK} target="_blank" rel="noreferrer noopener">
<Button color="primary" className="p-4 fs-5">
{t('home.experience-call-to-action')}
<Image
@ -40,7 +42,7 @@ const Experiencediv = () => {
height={22}
alt="icon arrow right"
/>
</Button>
</Button></a>
</div>
</div>
);

@ -1,17 +1,21 @@
import Image from 'next/image';
import {useTranslation} from 'next-i18next';
import {HOME} from '@services/routes';
import logoWithText from '../public/logos/logo.svg';
import logo from '../public/logos/logo-footer.svg';
import { useTranslation } from 'next-i18next';
interface LogoProps {
title?: boolean;
[props: string]: any;
}
const Logo = ({ title = true, ...props }: LogoProps) => {
const { t } = useTranslation();
const Logo = ({title = true, ...props}: LogoProps) => {
const {t} = useTranslation();
const src = title ? logoWithText : logo;
return <Image src={src} alt={t('logo.alt')} className="d-block" {...props} />;
return <a href={HOME} >
<Image src={src} alt={t('logo.alt')} className="d-block" {...props} />
</a>;
};
export default Logo;

@ -1,6 +1,6 @@
import Image from 'next/image';
import { useTranslation } from 'next-i18next';
import { Row, Col } from 'reactstrap';
import {useTranslation} from 'next-i18next';
import {Row, Col} from 'reactstrap';
import twitter from '../public/twitter.svg';
import facebook from '../public/facebook.svg';
@ -8,11 +8,11 @@ interface ShareInterface {
title?: string;
}
const ShareRow = ({ title }: ShareInterface) => {
const { t } = useTranslation('resource');
const ShareRow = ({title}: ShareInterface) => {
const {t} = useTranslation('resource');
return (
<Row className="sharing justify-content-md-center">
<Col className="col-md-auto col-12">{title || t('common.share')}</Col>
<Col className="col-md-auto mb-md-0 mb-3 col-12">{title || t('common.share')}</Col>
<Col className="col-auto">
<a
target="_blank"

@ -1,20 +1,20 @@
import Image from 'next/image';
import { useTranslation } from 'next-i18next';
import { CSSProperties, useEffect, useState } from 'react';
import { faArrowRight } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Col, Container, Row } from 'reactstrap';
import {useTranslation} from 'next-i18next';
import {CSSProperties, useEffect, useState} from 'react';
import {faArrowRight} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import {Col, Container, Row} from 'reactstrap';
import Button from '@components/Button';
import ButtonCopy from '@components/ButtonCopy';
import Share from '@components/Share';
import ErrorMessage from '@components/Error';
import AdminModalEmail from '@components/admin/AdminModalEmail';
import { BallotPayload, ErrorPayload } from '@services/api';
import { AppTypes, useAppContext } from '@services/context';
import { displayRef, isEnded } from '@services/utils';
import { RESULTS } from '@services/routes';
import {BallotPayload, ErrorPayload} from '@services/api';
import {AppTypes, useAppContext} from '@services/context';
import {displayRef, isEnded} from '@services/utils';
import {RESULTS} from '@services/routes';
import Logo from './Logo';
import { FORM_FEEDBACK } from '@services/constants';
import {FORM_FEEDBACK, MAJORITY_JUDGMENT_LINK} from '@services/constants';
import urne from '../public/urne.svg';
import star from '../public/star.svg';
import logo from '../public/logo-red-blue.svg';
@ -25,8 +25,8 @@ export interface WaitingBallotInterface {
error?: ErrorPayload;
}
const ButtonResults = ({ election }) => {
const { t } = useTranslation();
const ButtonResults = ({election}) => {
const {t} = useTranslation();
if (!election.hideResults || isEnded(election.date_end)) {
return (
@ -42,14 +42,14 @@ const ButtonResults = ({ election }) => {
};
const DiscoverMajorityJudgment = () => {
const { t } = useTranslation();
const {t} = useTranslation();
return (
<Col className="d-flex flex-column justify-content-between bg-secondary p-4 text-white">
<div>
<h5>{t('vote.discover-mj')}</h5>
<p>{t('vote.discover-mj-desc')}</p>
</div>
<a href="https://mieuxvoter.fr/le-jugement-majoritaire">
<a href={MAJORITY_JUDGMENT_LINK} target="_blank" rel="noopener noreferrer">
<div className="d-flex align-items-center">
<div className="me-2">{t('common.about')}</div>
<FontAwesomeIcon icon={faArrowRight} />
@ -60,7 +60,7 @@ const DiscoverMajorityJudgment = () => {
};
const SupportBetterVote = () => {
const { t } = useTranslation();
const {t} = useTranslation();
return (
<Col className="d-flex flex-column justify-content-between text-secondary p-4 bg-white">
<div>
@ -81,7 +81,7 @@ const SupportBetterVote = () => {
};
const Thanks = () => {
const { t } = useTranslation();
const {t} = useTranslation();
return (
<>
<h5>{t('vote.thanks')}</h5>
@ -99,8 +99,8 @@ interface InfoInterface extends WaitingBallotInterface {
display: string;
}
const Info = ({ ballot, error, display }: InfoInterface) => {
const { t } = useTranslation();
const Info = ({ballot, error, display}: InfoInterface) => {
const {t} = useTranslation();
if (!ballot) return null;
@ -132,7 +132,7 @@ const Info = ({ ballot, error, display }: InfoInterface) => {
);
};
export default ({ ballot, error }: WaitingBallotInterface) => {
export default ({ballot, error}: WaitingBallotInterface) => {
const [_, dispatch] = useAppContext();
const [urneProperties, setUrne] = useState<CSSProperties>({
@ -154,7 +154,7 @@ export default ({ ballot, error }: WaitingBallotInterface) => {
});
useEffect(() => {
dispatch({ type: AppTypes.FULLPAGE, value: true });
dispatch({type: AppTypes.FULLPAGE, value: true});
setUrne((urne) => ({
...urne,
@ -193,7 +193,7 @@ export default ({ ballot, error }: WaitingBallotInterface) => {
}, 3000);
const timer3 = setTimeout(() => {
setBallot({ display: 'grid' });
setBallot({display: 'grid'});
}, 4500);
return () => {

@ -5,34 +5,42 @@ import {
KeyboardEvent,
MouseEventHandler,
} from 'react';
import { useTranslation } from 'next-i18next';
import { Container } from 'reactstrap';
import { faArrowRight } from '@fortawesome/free-solid-svg-icons';
import { DndContext } from '@dnd-kit/core';
import { arrayMove, SortableContext } from '@dnd-kit/sortable';
import { MAX_NUM_CANDIDATES } from '@services/constants';
import {useTranslation} from 'next-i18next';
import {Container} from 'reactstrap';
import {DndContext} from '@dnd-kit/core';
import {arrayMove, SortableContext} from '@dnd-kit/sortable';
import {faArrowRight, faPen} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import TitleModal from './TitleModal';
import {MAX_NUM_CANDIDATES} from '@services/constants';
import Alert from '@components/Alert';
import Button from '@components/Button';
import { ElectionTypes, useElection } from '@services/ElectionContext';
import {ElectionTypes, useElection} from '@services/ElectionContext';
import CandidateField from './CandidateField';
import { AppTypes, useAppContext } from '@services/context';
import {AppTypes, useAppContext} from '@services/context';
const CandidatesField = ({ onSubmit }) => {
const { t } = useTranslation();
const CandidatesField = ({onSubmit}) => {
const {t} = useTranslation();
const submitReference = useRef(null);
const [_, dispatchApp] = useAppContext();
const [election, dispatch] = useElection();
const candidates = election.candidates;
const [modalTitle, setModalTitle] = useState(false);
const toggleModalTitle = () => setModalTitle((m) => !m);
const [error, setError] = useState(null);
const disabled = candidates.filter((c) => c.name !== '').length < 2;
// What to do when we change the candidates
useEffect(() => {
// Initialize the list with at least two candidates
if (candidates.length < 2) {
dispatch({ type: ElectionTypes.CANDIDATE_PUSH, value: 'default' });
dispatch({type: ElectionTypes.CANDIDATE_PUSH, value: 'default'});
}
if (candidates.length > MAX_NUM_CANDIDATES) {
setError('error.too-many-candidates');
@ -67,7 +75,7 @@ const CandidatesField = ({ onSubmit }) => {
/**
* Update the list of grades after dragging an item
*/
const { active, over } = event;
const {active, over} = event;
if (over && over.id && active.id && active.id !== over.id) {
const newCandidates = arrayMove(candidates, active.id - 1, over.id - 1);
@ -83,6 +91,15 @@ const CandidatesField = ({ onSubmit }) => {
const sortIds = election.candidates.map((_, i) => i + 1);
return (
<>
<Container onClick={toggleModalTitle} className="candidate">
<h4 className="mb-4">{t('admin.confirm-question')}</h4>
<div className="d-flex justify-content-between border border-dashed border-2 border-light border-opacity-25 px-4 py-3">
<h5 className="m-0 text-white">{election.name}</h5>
<FontAwesomeIcon icon={faPen} />
</div>
<TitleModal isOpen={modalTitle} toggle={toggleModalTitle} />
</Container>
<DndContext onDragEnd={handleDragEnd}>
<SortableContext items={sortIds}>
<Container className="candidate flex-grow-1 my-5 flex-column d-flex justify-content-between">
@ -102,7 +119,6 @@ const CandidatesField = ({ onSubmit }) => {
</div>
</div>
<Container className="my-5 d-md-flex d-grid justify-content-md-center">
<div onClick={handleSubmit}>
<Button
outline={true}
@ -116,9 +132,9 @@ const CandidatesField = ({ onSubmit }) => {
</Button>
</div>
</Container>
</Container>
</SortableContext>
</DndContext>
</>
);
};

@ -1,13 +1,13 @@
/**
* This component manages the title of the election
*/
import {faPen} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import {useElection} from '@services/ElectionContext';
import {useTranslation} from 'next-i18next';
import {useState} from 'react';
import {Col, Container, Row} from 'reactstrap';
import {Container} from 'reactstrap';
import {faPen} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import TitleModal from './TitleModal';
import {useElection} from '@services/ElectionContext';
const TitleField = () => {
const {t} = useTranslation();

@ -4,6 +4,7 @@ import {Button, Row, Col} from 'reactstrap';
import Logo from '@components/Logo';
import LanguageSelector from '@components/layouts/LanguageSelector';
import {useAppContext} from '@services/context';
import {BETTER_VOTE_LINK, MAJORITY_JUDGMENT_LINK, NEWS_LINK, PAYPAL, WHO_WE_ARE_LINK} from '@services/constants';
const Footer = () => {
const {t} = useTranslation();
@ -16,24 +17,30 @@ const Footer = () => {
component: <Logo title={false} />,
},
{
component: <Link href="/">{t('menu.majority-judgment')}</Link>,
component:
<a
href={MAJORITY_JUDGMENT_LINK}
target="_blank"
rel="noopener noreferrer"
>
{t('menu.majority-judgment')}</a>,
},
{
component: (
<Link
href="https://mieuxvoter.fr/"
<a
href={WHO_WE_ARE_LINK}
target="_blank"
rel="noopener noreferrer"
>
{t('menu.whoarewe')}
</Link>
</a>
),
},
{
component: <Link href="/faq">{t('menu.faq')}</Link>,
},
{
component: <Link href="/">{t('menu.news')}</Link>,
component: <Link href={NEWS_LINK}>{t('menu.news')}</Link>,
},
{
component: (
@ -61,7 +68,7 @@ const Footer = () => {
</Col>
<Col className="col-auto">
<Button outline={false} color="info" className="noshadow">
<a href="/">{t('common.support-us')}</a>
<a href={PAYPAL}>{t('common.support-us')}</a>
</Button>
</Col>
</Row>

@ -1,6 +1,6 @@
{
"name": "mieuxvoter-app",
"version": "2.0.0a",
"version": "2.0.0c",
"private": true,
"scripts": {
"dev": "next dev",

@ -3,6 +3,7 @@ import {Container, Row, Col} from 'reactstrap';
import {useTranslation} from 'next-i18next';
import {serverSideTranslations} from 'next-i18next/serverSideTranslations';
import {GetStaticProps} from 'next';
import Logo from '@components/Logo';
export const getStaticProps: GetStaticProps = async ({locale}) => ({
props: {
@ -10,33 +11,17 @@ export const getStaticProps: GetStaticProps = async ({locale}) => ({
},
});
const FAQ = () => {
const {t} = useTranslation();
return (
<Container>
<Row>
<Link href="/" className="d-block mb-4">
<img src="/logos/logo-line-white.svg" alt="logo" height="128" />
</Link>
</Row>
<Row className="mt-4">
<Col className="text-center">
<h1>{t('FAQ')}</h1>
</Col>
</Row>
<Row className="mt-4">
<Col>
<h4 className="bold mt-5">Quest-ce que le Jugement Majoritaire ?</h4>
<p>
Un principe simple et intuitif, qui change tout : lélecteur vote en
donnant son avis sur toutes les candidatures présentées, leur
attribuant la mention de son choix (par exemple. Très bien, Bien,
Assez bien, Passable, Insuffisant, À Rejeter). La candidature
retenue est celle jugée la plus méritante par la majorité de
lélectorat (celui qui obtient la meilleure mention « majoritaire
»).
</p>
<div style={{maxWidth: '445px'}}>
<div className="min-vw-100 min-vh-100 bg-secondary py-4">
<Container className="">
<Logo />
<div className="mt-4 text-center">
<h1>{t('faq.title')}</h1>
</div>
<div className="d-flex w-100 justify-content-center">
<video width="100%" height="250" controls={true}>
<source
src="/video/Le_Jugement_Majoritaire_en_1_minute.mp4"
@ -52,83 +37,10 @@ const FAQ = () => {
/>
</video>
</div>
<h4 className="bold mt-5">Doù vient le Jugement Majoritaire ?</h4>
<p>
Le jugement majoritaire est un mode de scrutin inventé par deux
chercheurs Français du Centre National de la Recherche Scientifique
(CNRS) en 2011, <u>Michel Balinski</u> et <u>Rida Laraki</u>.
</p>
<h4 className="bold mt-5">
Quels sont les avantages du Jugement Majoritaire ?
</h4>
<p>
Une mesure précise de lopinion des participants au vote, à même
déclairer la décision collective. En demandant aux électeurs leur
opinion sur chaque option soumise au vote, on bénéficie de beaucoup
plus dinformations que dans le cadre du scrutin uninominal qui,
résumant lopinion des électeurs à un choix, ignore lessentiel de
linformation quant à ce quils pensent. En agrégeant un grand
nombre dinformations, le Jugement Majoritaire ne produit pas «
juste » un gagnant qui obtiendrait la majorité des voix. Il mesure
précisément le crédit porté à chacune des options et permet
daffiner autant que de pacifier la prise de décision.
</p>
<h4 className="bold mt-5">
Quand et comment utiliser le Jugement Majoritaire ?
</h4>
<p>
Le Jugement majoritaire sapplique à tout type de votation
collective, quil sagisse délire un candidat, de retenir une ou
plusieurs idées lors dun atelier collaboratif, de choisir entre
plusieurs projets, de classer les vins, etc. Il peut être utilisé à
toutes les échelles (locale, nationale, internationale) et dans tous
les milieux (écoles, entreprises, associations, coopératives,
collectivités publiques).
</p>
<h4 className="bold mt-5">Qui peut utiliser cette application ?</h4>
<p>
Cette application de Jugement Majoritaire est ouverte à toute
personne désireuse de prendre une décision collective, entre amis,
entre collègues, entre membres dun groupe. Elle est libre daccès
et gratuite. Notre ambition est de vous proposer la meilleure
expérience de prise de décision collective et démocratique.
</p>
<h4 className="bold mt-5">
Comment organiser une élection avec plusieurs milliers de votants ?
</h4>
<p>
Cette application ne convient pas pour les votes à plus de 1000
votants. Si cest votre cas, nous vous invitons à nous contacter par
email à ladresse{' '}
<a href="mailto:contact@mieuxvoter.fr" className="text-light">
contact@mieuxvoter.fr
</a>
. Dans le cas dun vote sur invitation nous vous suggérons de ne pas
dépasser 200 participants (le temps de création du vote peut prendre
quelques minutes).
</p>
<h4 className="bold mt-5">
Je rencontre un problème, comment obtenir de laide ?
</h4>
<p>
Si vous rencontrez un problème en utilisant notre application,
prenez contact avec nous par email à ladresse «
<a
href="mailto:app@mieuxvoter.fr?subject=[HELP]"
className="text-light"
>
app@mieuxvoter.fr
</a>
», et prenez soin de bien décrire le problème rencontré dans votre
message. Ajoutez éventuellement dans votre description le lien de
votre vote.
</p>
{[...Array(19)].map((i) => (<>
<h4 className="bold mt-5">{t(`faq.sec-${i}-title`)}</h4>
<p>{t(`faq.sec-${i}-desc`)}</p>
</>))}
<h4 className="bold mt-5">
Y-a til une limite de votants appliquée pour les votes sur
@ -203,7 +115,7 @@ const FAQ = () => {
</p>
<h4 className="bold mt-5">
Comment interpréter les résultats dun vote au Jugement Majoritaire
Comment interpréter les résultats dun vote au jugement majoritaire
?
</h4>
<p>
@ -227,7 +139,7 @@ const FAQ = () => {
</h4>
<p>
Lapplication app.mieuxvoter.fr a pour seul et unique but de faire
découvrir le vote au Jugement Majoritaire. Elle na pas de but
découvrir le vote au jugement majoritaire. Elle na pas de but
politique, ni commercial. Mieux Voter attache la plus grande
importance au strict respect de la vie privée, et utilise ces
données uniquement de manière responsable et confidentielle, dans
@ -237,13 +149,13 @@ const FAQ = () => {
<h4 className="bold mt-5">Qui est Mieux Voter ?</h4>
<p>
« Mieux Voter » est une association loi 1901 qui promeut
lutilisation du Jugement Majoritaire, nouvelle théorie du choix
lutilisation du jugement majoritaire, nouvelle théorie du choix
social, comme un outil pour améliorer les décisions collectives et
les exercices de démocratie participative à lusage de tous.
</p>
<h4 className="bold mt-5">
Comment nous aider à faire connaître le Jugement Majoritaire ?
Comment nous aider à faire connaître le jugement majoritaire ?
</h4>
<p>
Vous avez apprécié votre expérience de vote démocratique au Jugement
@ -251,9 +163,8 @@ const FAQ = () => {
Nous en sommes ravis ! Vous pouvez nous aider en faisant un don à
lassociation ici :
</p>
</Col>
</Row>
</Container>
</Container >
</div >
);
};

@ -12,10 +12,10 @@
"home.advantage-3-name": "Respecting your privacy",
"home.advantage-3-desc": "No personal data is recorded",
"home.experience-name": "A democratic and intuitive voting experience",
"home.experience-1-name": "Express your full opinion.",
"home.experience-1-desc": "With majority judgment, each candidate is evaluated on a grid of mentions. Strategic voting has no use anymore.",
"home.experience-1-name": "Express yourself to the fullest.",
"home.experience-1-desc": "With majority judgment, you evaluate each candidate based on a grid of grades. You can express yourself on everything, with nuance, in support or rejection. Strategic voting is no longer reauired and you are no longer locked into supporting a single candidate.",
"home.experience-2-name": "Get the best possible consensus.",
"home.experience-2-desc": "The merit profile provides an accurate picture of the voters' opinions. The winner of the vote is the one with the best majority rating.",
"home.experience-2-desc": "Majority judgment is a fine measure of voter opinion and provides the most accurate picture possible. The candidate with the highest majority rating wins the election.",
"home.experience-call-to-action": "Find out about the majority judgment",
"home.alt-icon-ballot-box": "icon of a ballot box",
"home.alt-icon-envelop": "icon of an envelop",
@ -63,6 +63,45 @@
"error.not-enough-grades": "Not enough grades",
"error.not-enough-candidates": "Not enough candidates",
"error.uncorrect-name": "The title is incorrect",
"faq.title": "Frequently asked questions",
"faq.sec-1-title": "What is majority judgment?",
"faq.sec-1-desc": "A simple and intuitive principle, which changes everything: the voter votes by giving his/her opinion on all the candidates, by attributing to each one a mention on a scale of values (e.g. Very good, Good, Fair, Insufficient, To be rejected). The candidate with the highest majority rating wins the election (the one with \"the highest majority\" rating).",
"faq.sec-2-title": "Where does the majority judgment come from?",
"faq.sec-2-desc": "Majority judgment is a voting method invented by two French researchers at the Centre National de la Recherche Scientifique (CNRS) in 2011, Michel Balinski and Rida Laraki.",
"faq.sec-3-title": "What are the advantages of majority judgment?",
"faq.sec-3-desc": "With majority judgment, the voter can fully express his opinion. He no longer has to vote \"useful\" or \"strategic\", and if he likes several candidates, he can evaluate them all positively. The voter can also reject candidates. Majority judgment allows for a much more accurate measure of voter opinion and thus a more democratic outcome. By asking voters for their opinion on each option on the ballot, majority judgment aggregates much more information than single-member plurality voting, which, by summarizing voters' opinions into a choice, ignores most of the information about what they think. Majority voting does not \"just\" produce a winner with a majority of votes. It accurately measures the credence given to each of the options and helps to refine as well as pacify decision making.",
"faq.sec-4-title": "When and how to use majority judgment?",
"faq.sec-4-desc": "Majority judgment applies to any type of collective vote, whether it is to elect a candidate, to retain one or several ideas during a collaborative workshop, to choose between several projects, to rank wines, etc. It can be used at all scales (local, national, international) and in all environments (schools, companies, associations, cooperatives, public communities...).",
"faq.sec-5-title": "Who can use this application?",
"faq.sec-5-desc": "This majority judgment application is open to anyone who wants to make a collective decision, between friends, between colleagues, between members of a group. It is free to use and free of charge. Our ambition is to offer you the best experience of collective and democratic decision making",
"faq.sec-6-title": "How to organize an election with several thousand voters?",
"faq.sec-6-desc": "This application is not suitable for votes with more than 1000 voters. If this is your case, we invite you to contact us by email at contact@mieuxvoter.fr. If you are organizing a closed vote with an email invitation, we suggest that you do not exceed 200 participants (the time to create the vote may then take a few minutes).",
"faq.sec-7-title": "I have a problem, how can I get help?",
"faq.sec-7-desc": "If you encounter a problem while using our application, please write us by mail at the following address: app@mieuxvoter.fr. Be sure to describe the problem in your message. Add in your description the link of your vote",
"faq.sec-8-title": "Is there a limit of voters applied for \"closed\" votes, on invitation?",
"faq.sec-8-desc": "The maximum number of voters for an invitation vote is 1000 people. However, if your need is greater than this limit, we invite you to send us an email at: contact@mieuxvoter.fr.",
"faq.sec-9-title": "How long does the link to the administration page remain active?",
"faq.sec-9-desc": "The links provided when you created your vote do not have an expiration date. Please keep them safe so that you can view the results of your vote.",
"faq.sec-10-title": "How can I ensure that the same person does not vote twice?",
"faq.sec-10-desc": "In the case of email invitation voting, only people whose email was added at the time the vote was created receive an invitation and can vote. Each invitation has a unique link with a one-time use electronic token. This token is destroyed as soon as the guest's voting participation is recorded. It therefore guarantees that each participant can only vote once. In the case of a public vote, any person can participate in the election if he or she has the link to the election.",
"faq.sec-11-title": "When I hold an election, can I know the number and identity of voters?",
"faq.sec-11-desc": "The number of voters is shown on your election results page. The identity of voters is secret, in order to respect the conditions of a democratic vote where anonymity protects the voter and guarantees the sincerity of the vote.",
"faq.sec-12-title": "Can I change my vote?",
"faq.sec-12-desc": "Once you have registered your vote, you cannot change it.",
"faq.sec-13-title": "How can I retrieve a link to the vote or the vote results if I lost it?",
"faq.sec-13-desc": "You cannot retrieve a link to vote or view results after it has been communicated to you. Please keep it safe. However, if you have the voting link, we can send you the link to the results.",
"faq.sec-14-title": "How can I retrieve a link to the admin panel if I lost it?",
"faq.sec-14-desc": "We cannot send you this link for obvious security reasons. So you have to re-create an election.",
"faq.sec-15-title": "How do we interpret the results of a majority-rule vote?",
"faq.sec-15-desc": "Candidates or proposals are ranked according to their majority mention, from best to worst. In the event of a tie in majority rating, the following is calculated for each candidate: the percentage of voters awarding strictly more than the common majority rating and the percentage of voters awarding strictly less than the common majority rating. The largest of the 4 values determines the result",
"faq.sec-16-title": "What do you do with the collected data?",
"faq.sec-16-desc": "We do not collect personal data. The sole purpose of the app.mieuxvoter.fr application is to allow everyone to organize majority judgment votes and to improve scientific research on voting methods. It has no political or commercial purpose. Better Vote attaches the utmost importance to the strict respect of privacy.",
"faq.sec-17-title": "Who is Better Vote?",
"faq.sec-17-desc": "\"Better Vote\" is an association under the French law of 1901 created in January 2018, which wants to improve the election and collective decision-making by promoting more democratic voting methods, such as majority judgment.",
"faq.sec-18-title": "How can we help spread the word about majority judgment?",
"faq.sec-18-desc": "Did you enjoy your democratic majority-judgment voting experience? We're thrilled! You can help us return elections to voters by donating to our association here: https://www.paypal.com/donate/?hosted_button_id=QD6U4D323WV4S.",
"faq.sec-19-title": "How secure is my data?",
"faq.sec-19-desc": "In order to guarantee the security of your data, their transmission is encrypted and your votes are anonymized.",
"grades.very-good": "Very good",
"grades.good": "Good",
"grades.passable": "Passable",
@ -75,11 +114,11 @@
"admin.step-candidate": "Candidates",
"admin.step-params": "Parameters",
"admin.step-confirm": "Confirm",
"admin.add-candidates": "Add the candidates.",
"admin.add-candidates": "Add the candidates",
"admin.add-candidate": "Add a candidate",
"admin.add-candidate-desc": "Add a picture, a name, and a description of the candidate.",
"admin.add-grade": "Add a grade",
"admin.add-grade-desc": "The name of the grade must be unique.",
"admin.add-grade-desc": "The name of the endorsement must be unique. Together, the statements should form a graduated scale of values. After clicking on \"Save\", drag the statement to where you want to place it on the value scale",
"admin.grade-name-placeholder": "Add the name of the grade",
"admin.candidate-confirm-del": "You want to remove a candidate",
"admin.candidate-confirm-back": "No, I keep it",

@ -12,10 +12,10 @@
"home.advantage-3-name": "Respect de votre vie privée",
"home.advantage-3-desc": "Aucune donnée personnelle n'est enregistrée",
"home.experience-name": "Une expérience de vote démocratique et intuitive",
"home.experience-1-name": "Exprimez toute votre opinion.",
"home.experience-1-desc": "Au jugement majoritaire, chaque candidat est évalué sur une grille de mention. Vous n'aurez plus besoin de faire un vote stratégique.",
"home.experience-1-name": "Exprimez vous pleinement.",
"home.experience-1-desc": "Au jugement majoritaire, vous évaluez chaque candidat à partir dune grille de mentions. Vous pouvez vous exprimer sur tout, avec nuance, dans ladhésion comme dans le rejet. Vous navez plus besoin de voter utile et vous nêtes plus enfermés dans le soutien à une seule candidature.",
"home.experience-2-name": "Obtenez le meilleur consensus.",
"home.experience-2-desc": "Le profil des mérites dresse un panorama précis de lopinion des électeurs. Le gagnant du vote est celui qui est la meilleure mention majoritaire.",
"home.experience-2-desc": "Le jugement majoritaire mesure finement lopinion des électeurs et en dresse un panorama le plus précis possible. Le candidat le mieux évalué par une majorité remporte lélection.",
"home.experience-call-to-action": "Découvrez le jugement majoritaire",
"home.alt-icon-ballot-box": "icone d'urne",
"home.alt-icon-envelop": "icone d'enveloppe",
@ -64,11 +64,50 @@
"error.uncorrect-name": "The title is incorrect",
"error.not-enough-grades": "Il manque des mentions",
"error.not-enough-candidates": "Il manque des candidats",
"faq.title": "Foire aux questions",
"faq.sec-1-title": "Qu'est-ce que le jugement majoritaire ?",
"faq.sec-1-desc": "Un principe simple et intuitif, qui change tout : lélecteur vote en donnant son avis sur tous les candidats, en leur attribuant à chacun une mention sur une échelle de valeurs (par exemple. Très bien, Bien, Assez bien, Passable, Insuffisant, À Rejeter). Le candidat le mieux évalué par une majorité remporte lélection (celui qui obtient la meilleure mention « majoritaire »).",
"faq.sec-2-title": "Doù vient le jugement majoritaire ?",
"faq.sec-2-desc": "Le jugement majoritaire est un mode de scrutin inventé par deux chercheurs Français du Centre National de la Recherche Scientifique (CNRS) en 2011, Michel Balinski et Rida Laraki.",
"faq.sec-3-title": "Quels sont les avantages du jugement majoritaire ?",
"faq.sec-3-desc": "Avec le jugement majoritaire, lélecteur peut exprimer pleinement son opinion. Il na plus à voter “utile” ou “stratégique”, et sil apprécie plusieurs candidats, il peut tous les évaluer positivement. Lélecteur peut aussi rejeter des candidats. Le jugement majoritaire permet une mesure beaucoup plus précise de lopinion des électeurs et donc, un résultat plus démocratique. En demandant aux électeurs leur opinion sur chaque option soumise au vote, le jugement majoritaire agrège beaucoup plus dinformations que le scrutin uninominal majoritaire qui, en résumant lopinion des électeurs à un choix, ignore lessentiel de linformation quant à ce quils pensent. Le jugement majoritaire ne produit pas « juste » un gagnant qui obtiendrait la majorité des voix. Il mesure précisément le crédit porté à chacune des options et permet daffiner autant que de pacifier la prise de décision.",
"faq.sec-4-title": "Quand et comment utiliser le jugement majoritaire ?",
"faq.sec-4-desc": "Le jugement majoritaire sapplique à tout type de votation collective, quil sagisse délire un candidat, de retenir une ou plusieurs idées lors dun atelier collaboratif, de choisir entre plusieurs projets, de classer les vins, etc. Il peut être utilisé à toutes les échelles (locale, nationale, internationale) et dans tous les milieux (écoles, entreprises, associations, coopératives, collectivités publiques…).",
"faq.sec-5-title": "Qui peut utiliser cette application ?",
"faq.sec-5-desc": "Cette application de jugement majoritaire est ouverte à toute personne désireuse de prendre une décision collective, entre amis, entre collègues, entre membres dun groupe. Elle est libre daccès et gratuite. Notre ambition est de vous proposer la meilleure expérience de prise de décision collective et démocratique.",
"faq.sec-6-title": "Comment organiser une élection avec plusieurs milliers de votants ?",
"faq.sec-6-desc": "Cette application ne convient pas pour les votes à plus de 1000 votants. Si cest votre cas, nous vous invitons à nous contacter par email à ladresse contact@mieuxvoter.fr. Si vous organisez un vote fermé avec invitation par mail, nous vous suggérons de ne pas dépasser 200 participants (le temps de création du vote peut alors prendre quelques minutes).",
"faq.sec-7-title": "Je rencontre un problème, comment obtenir de laide ?",
"faq.sec-7-desc": "Si vous rencontrez un problème en utilisant notre application, écrivez-nous par mail à ladresse suivante: app@mieuxvoter.fr. Prenez soin de bien décrire le problème rencontré dans votre message. Ajoutez éventuellement dans votre description le lien de votre vote.",
"faq.sec-8-title": "Y-a til une limite de votants appliquée pour les votes “fermés”, sur invitation ?",
"faq.sec-8-desc": "Le nombre maximum de votants pour un vote sur invitation est de 1000 personnes. Si toutefois votre besoin est supérieur à cette limite, nous vous invitons à nous envoyer un email à ladresse : contact@mieuxvoter.fr.",
"faq.sec-9-title": "Combien de temps le lien vers la page d'administration reste-t-il actif ?",
"faq.sec-9-desc": "Les liens fournis lors de la création de votre vote nont pas de date dexpiration. Conservez-les précieusement afin de pouvoir consulter les résultats de votre vote.",
"faq.sec-10-title": "Comment puis-je massurer quune même personne ne vote pas deux fois ?",
"faq.sec-10-desc": "Dans le cas dun vote sur invitation par email, seules les personnes dont le courriel a été ajouté à la création du vote reçoivent une invitation et peuvent voter. Chacune des invitations dispose dun lien unique auquel est associé un jeton électronique à usage unique. Ce jeton est détruit aussitôt que la participation au vote de linvité est enregistrée. Il garantit donc que chaque participant ne puisse voter quune seule fois. Dans le cas dun vote public, toute personne peut participer à lélection sil dispose du lien de lélection.",
"faq.sec-11-title": "Lorsque jorganise une élection, puis-je connaître le nombre et lidentité des votants ?",
"faq.sec-11-desc": "Le nombre de votants est indiqué sur la page de résultats de votre élection. Lidentité des votants est secrète, afin de respecter les conditions dun vote démocratique où lanonymat protège lélecteur et garantit la sincérité du vote.",
"faq.sec-12-title": "Puis-je modifier mon vote ?",
"faq.sec-12-desc": "Une fois votre vote enregistré, vous ne pouvez plus le modifier.",
"faq.sec-13-title": "Comment puis-je récupérer un lien vers le vote ou les résultats du vote si je lai perdu ?",
"faq.sec-13-desc": "Vous ne pouvez pas récupérer un lien pour voter ou consulter les résultats après quil vous ait été communiqué. Gardez le précieusement. Cependant, si vous disposez du lien du vote, nous pouvons vous transmettre le lien vers les résultats.",
"faq.sec-14-title": "Comment puis-je récupérer un lien vers le panneau d'administration si je lai perdu ?",
"faq.sec-14-desc": "Nous ne pouvons pas vous transmettre ce lien pour des raisons évidentes de sécurité. Vous devez donc ré-créer une élection.",
"faq.sec-15-title": "Comment interpréter les résultats dun vote au jugement majoritaire ?",
"faq.sec-15-desc": "Les candidats ou propositions sont classés en fonction de leur mention majoritaire, de la meilleure à la moins bonne. En cas dégalité de mention majoritaire, on calcule alors pour chaque candidat à départager: le pourcentage délecteurs attribuant strictement plus que la mention majoritaire commune et le pourcentage délecteurs attribuant strictement moins que la mention majoritaire commune. La plus grande des 4 valeurs détermine le résultat.",
"faq.sec-16-title": "Que faites-vous des données collectées ?",
"faq.sec-16-desc": "Nous ne collectons pas de données personnelles. Lapplication app.mieuxvoter.fr a pour seul et unique but de permettre à tous dorganiser des votes au jugement majoritaire et daméliorer la recherche scientifique sur les modes de scrutin. Elle na pas de but politique, ni commercial. Mieux Voter attache la plus grande importance au strict respect de la vie privée.",
"faq.sec-17-title": "Qui est Mieux Voter ?",
"faq.sec-17-desc": "« Mieux Voter » est une association loi 1901 créée en janvier 2018, qui veut améliorer lélection et la prise de décision collective en promouvant des modes de scrutin plus démocratiques, comme le jugement majoritaire.",
"faq.sec-18-title": "Comment nous aider à faire connaître le jugement majoritaire ?",
"faq.sec-18-desc": "Vous avez apprécié votre expérience de vote démocratique au jugement majoritaire ? Nous en sommes ravis ! Vous pouvez nous aider à rendre les élections aux électeurs en faisant un don à notre association ici : https://www.paypal.com/donate/?hosted_button_id=QD6U4D323WV4S",
"faq.sec-19-title": "Quelle sécurité pour mes données ?",
"faq.sec-19-desc": "Afin de garantir la sécurité de vos données, leur transmission est chiffrée et vos votes sont anonymisés.",
"grades.very-good": "Très bien",
"grades.good": "Bien",
"grades.passable": "Passable",
"grades.inadequate": "Insuffisant",
"grades.mediocre": "Médiocre",
"grades.mediocre": "À rejeter",
"admin.admin-title": "Administration du vote",
"admin.close-election": "Clôturer l'élection",
"admin.date-limit": "Fixer une date limite pour le vote",
@ -76,13 +115,13 @@
"admin.step-candidate": "Les candidats",
"admin.step-params": "Paramètres du vote",
"admin.step-confirm": "Confirmation",
"admin.add-candidates": "Ajouter les candidats.",
"admin.add-candidates": "Ajouter les candidats",
"admin.add-candidate": "Ajouter un candidat",
"admin.candidate-name-placeholder": "Ajouter le nom ou le titre du candidat.",
"admin.candidate-desc-placeholder": "Ajouter la description du candidat.",
"admin.add-candidate-desc": "Ajouter une photo, le nom et une description au candidat.",
"admin.add-grade": "Ajouter une mention",
"admin.add-grade-desc": "Le nom de la mention doit être unique.",
"admin.add-grade-desc": "Le nom de la mention doit être unique. Prises ensemble, les mentions doivent constituer une échelle graduée de valeurs. Après avoir cliqué sur “Sauvegarder”, faites glisser la mention où vous voulez la placer sur léchelle de valeurs.",
"admin.grade-name-placeholder": "Ajoutez le nom de la mention.",
"admin.candidate-confirm-del": "Vous souhaitez supprimer un candidat",
"admin.candidate-confirm-back": "Non, je le garde",
@ -97,14 +136,14 @@
"admin.limit-duration-desc": "",
"admin.modal-title": "Administration du vote",
"admin.modal-desc": "Ce lien vous permet de modifier votre vote. Conservez le précieusement, ca il ne vous sera pas transmis une seconde fois.",
"admin.modal-email": "Pour recevoir une copie par courriel, indiquez nous votre adresse courrielle",
"admin.modal-disclaimer": "Nous ne stockons aucune adresse courrielle. Nous ne vous enverrons donc aucun contenu publicitaire.",
"admin.modal-email": "Pour recevoir une copie par courriel, indiquez nous votre adresse courriel",
"admin.modal-disclaimer": "Nous ne stockons aucune adresse courriel. Nous ne vous enverrons donc aucun contenu publicitaire.",
"admin.modal-email-placeholder": "Votre adresse email",
"admin.photo": "Photo",
"admin.optional": "facultatif",
"admin.photo-import": "Importer une photo",
"admin.photo-type": "Format supporté :",
"admin.grades-desc": "Vous pouvez choisir de personaliser le nom et le nombre de mentions. En cas de doute, gardez les mentions par défaut.",
"admin.grades-desc": "Vous pouvez choisir de personnaliser le nom et le nombre de mentions. En cas de doute, gardez les mentions par défaut.",
"admin.ending-in": "Dans",
"admin.until": "Jusqu'au",
"admin.order-title": "Les candidats sont dans un ordre aléatoire",

@ -2,10 +2,10 @@
* This file provides useful constants for the project
*/
export const MAX_NUM_CANDIDATES = process.env.MAX_NUM_CANDIDATES || 1000;
export const CONTACT_MAIL = process.env.CONTACT_MAIL || 'app@mieuxvoter.fr';
export const DEFAULT_GRADES = process.env.DEFAULT_GRADES
? process.env.DEFAULT_GRADES.split(',')
export const MAX_NUM_CANDIDATES = process.env.NEXT_PUBLIC_MAX_NUM_CANDIDATES || 1000;
export const CONTACT_MAIL = process.env.NEXT_PUBLIC_CONTACT_MAIL || 'app@mieuxvoter.fr';
export const DEFAULT_GRADES = process.env.NEXT_PUBLIC_DEFAULT_GRADES
? process.env.NEXT_PUBLIC_DEFAULT_GRADES.split(',')
: [
'grades.very-good',
'grades.good',
@ -14,7 +14,7 @@ export const DEFAULT_GRADES = process.env.DEFAULT_GRADES
'grades.mediocre',
];
export const IMGPUSH_URL =
process.env.IMGPUSH_URL || 'https://imgpush.mieuxvoter.fr';
process.env.NEXT_PUBLIC_IMGPUSH_URL || 'https://imgpush.mieuxvoter.fr';
export const GRADE_COLORS = [
'#3A9918',
'#A0CF1C',
@ -25,6 +25,12 @@ export const GRADE_COLORS = [
'#F2F0FF',
];
export const FORM_FEEDBACK = process.env.FORM_FEEDBACK || "https://forms.gle/JZ1Mtbz8gt3Fpwnx5";
export const FORM_FEEDBACK = process.env.NEXT_PUBLIC_FORM_FEEDBACK || "https://forms.gle/JZ1Mtbz8gt3Fpwnx5";
export const PAYPAL = process.env.FORM_FEEDBACK || "https://www.paypal.com/donate/?hosted_button_id=QD6U4D323WV4S";
export const PAYPAL = process.env.NEXT_PUBLIC_PAYPAL || "https://www.paypal.com/donate/?hosted_button_id=QD6U4D323WV4S";
export const BETTER_VOTE_LINK = process.env.NEXT_PUBLIC_BETTER_VOTE || "https://mieuxvoter.fr";
export const MAJORITY_JUDGMENT_LINK = process.env.NEXT_PUBLIC_MAJORITY_JUDGMENT || "https://mieuxvoter.fr/le-jugement-majoritaire";
export const WHO_WE_ARE_LINK = process.env.NEXT_PUBLIC_WHO_WE_ARE || "https://mieuxvoter.fr/qui-sommes-nous";
export const NEWS_LINK = process.env.NEXT_PUBLIC_NEWS || "https://mieuxvoter.fr/presse";

@ -4,6 +4,7 @@
import {getWindowUrl, displayRef} from './utils';
export const HOME = '/';
export const CREATE_ELECTION = '/admin/new';
export const BALLOT = '/ballot';
export const ENDED_VOTE = '/end';

Loading…
Cancel
Save