From ad33191a4d9a557b70a314ddb3ee1abca9865f7c Mon Sep 17 00:00:00 2001 From: Clement G Date: Fri, 1 May 2020 12:32:09 +0200 Subject: [PATCH 01/30] feat(static-pages) : add views components (with lorem ipsum) --- public/locale/i18n/de/resource.json | 3 + public/locale/i18n/en/resource.json | 3 + public/locale/i18n/es/resource.json | 3 + public/locale/i18n/fr/resource.json | 3 + public/locale/i18n/ru/resource.json | 3 + src/Routes.jsx | 7 ++ src/components/layouts/Footer.jsx | 12 ++++ src/components/views/Faq.jsx | 79 ++++++++++++++++++++++ src/components/views/LegalNotices.jsx | 93 ++++++++++++++++++++++++++ src/components/views/PrivacyPolicy.jsx | 79 ++++++++++++++++++++++ 10 files changed, 285 insertions(+) create mode 100644 src/components/views/Faq.jsx create mode 100644 src/components/views/LegalNotices.jsx create mode 100644 src/components/views/PrivacyPolicy.jsx diff --git a/public/locale/i18n/de/resource.json b/public/locale/i18n/de/resource.json index 78c208f..e7e4119 100644 --- a/public/locale/i18n/de/resource.json +++ b/public/locale/i18n/de/resource.json @@ -2,6 +2,9 @@ "Homepage": "Homepage", "Source code": "Quellcode", "Who are we?": "Wer wir sind?", + "Privacy policy": "Datenschutzerklärung", + "Legal notices": "Rechtliche Hinweise", + "FAQ": "FAQ", "BetterVote": " BetterVote", "Voting platform": "Wahlplattform", "Majority Judgment": " Mehrheitswahl ", diff --git a/public/locale/i18n/en/resource.json b/public/locale/i18n/en/resource.json index 8be6f24..3064f99 100644 --- a/public/locale/i18n/en/resource.json +++ b/public/locale/i18n/en/resource.json @@ -2,6 +2,9 @@ "Homepage": "Homepage", "Source code": "Source code", "Who are we?": "Who are we?", + "Privacy policy": "Privacy policy", + "Legal notices": "Legal notices", + "FAQ": "FAQ", "BetterVote": "BetterVote", "Voting platform": "Voting platform", "Majority Judgment": "Majority Judgment", diff --git a/public/locale/i18n/es/resource.json b/public/locale/i18n/es/resource.json index 1176d17..bd88b23 100644 --- a/public/locale/i18n/es/resource.json +++ b/public/locale/i18n/es/resource.json @@ -2,6 +2,9 @@ "Homepage": "Página de inicio", "Source code": "Código fuente", "Who are we": "Quiénes somos", + "Privacy policy": "Política de privacidad", + "Legal notices": "Avisos legales", + "FAQ": "FAQ", "BetterVote": "VotarMejor", "Voting platform": "Plataforma de votación", "Majority Judgment": "Juicio Mayoritario", diff --git a/public/locale/i18n/fr/resource.json b/public/locale/i18n/fr/resource.json index f2c0857..fe11f3e 100644 --- a/public/locale/i18n/fr/resource.json +++ b/public/locale/i18n/fr/resource.json @@ -2,6 +2,9 @@ "Homepage": "Accueil", "Source code": "Code source", "Who are we?": "Qui sommes-nous ?", + "Privacy policy": "Politique de confidentialité", + "Legal notices": "Mentions légales", + "FAQ": "FAQ", "BetterVote": "MieuxVoter", "Voting platform": "Plateforme de vote", "Majority Judgment": "Jugement Majoritaire", diff --git a/public/locale/i18n/ru/resource.json b/public/locale/i18n/ru/resource.json index 7a0ccca..d75c89e 100644 --- a/public/locale/i18n/ru/resource.json +++ b/public/locale/i18n/ru/resource.json @@ -2,6 +2,9 @@ "Homepage": "Главная страница", "Source code": "Исходный код", "Who are we?": "Кто мы?", + "Privacy policy": "Политика конфиденциальности", + "Legal notices": "Официальные уведомления", + "FAQ": "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ", "BetterVote": "BetterVote", "Voting platform": "Платформа голосования", "Majority Judgment": "Решение Большинства", diff --git a/src/Routes.jsx b/src/Routes.jsx index 5ba8853..61b453b 100644 --- a/src/Routes.jsx +++ b/src/Routes.jsx @@ -9,6 +9,10 @@ import UnknownView from "./components/views/UnknownView"; import UnknownElection from "./components/views/UnknownElection"; import CreateSuccess from "./components/views/CreateSuccess"; import VoteSuccess from "./components/views/VoteSuccess"; +import LegalNotices from "./components/views/LegalNotices"; +import PrivacyPolicy from "./components/views/PrivacyPolicy"; +import Faq from "./components/views/Faq"; + function Routes() { return ( @@ -32,6 +36,9 @@ function Routes() { /> + + + diff --git a/src/components/layouts/Footer.jsx b/src/components/layouts/Footer.jsx index eaf3cb4..70ee6b9 100644 --- a/src/components/layouts/Footer.jsx +++ b/src/components/layouts/Footer.jsx @@ -38,6 +38,18 @@ class Footer extends Component { {t("Who are we?")} + - + + {t('Legal notices')} + + - + + {t('Privacy policy')} + + - + + {t('faq')} +
diff --git a/src/components/views/Faq.jsx b/src/components/views/Faq.jsx new file mode 100644 index 0000000..bc850b5 --- /dev/null +++ b/src/components/views/Faq.jsx @@ -0,0 +1,79 @@ +/* eslint react/prop-types: 0 */ +import React, { Component } from "react"; +import { Col, Container, Row } from "reactstrap"; +import logoLine from "../../logos/logo-line-white.svg"; +import { Link } from "react-router-dom"; +import { AppContext } from "../../AppContext"; +import { withTranslation } from "react-i18next"; + +class Faq extends Component { + static contextType = AppContext; + + constructor(props) { + super(props); + this.state = {}; + } + + render() { + const { t } = this.props; + return ( + + + + logo + + + + +

{t("FAQ")}

+ +
+ + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+ +
+ + + + {t("Go back to homepage")} + + + +
+ ); + } +} + +export default withTranslation()(Faq); \ No newline at end of file diff --git a/src/components/views/LegalNotices.jsx b/src/components/views/LegalNotices.jsx new file mode 100644 index 0000000..6acefc0 --- /dev/null +++ b/src/components/views/LegalNotices.jsx @@ -0,0 +1,93 @@ +/* eslint react/prop-types: 0 */ +import React, { Component } from "react"; +import { Col, Container, Row } from "reactstrap"; +import logoLine from "../../logos/logo-line-white.svg"; +import { Link } from "react-router-dom"; +import { AppContext } from "../../AppContext"; +import { withTranslation } from "react-i18next"; + +class LegalNotices extends Component { + static contextType = AppContext; + constructor(props) { + super(props); + this.state = {}; + } + + render() { + const { t } = this.props; + return ( + + + + logo + + + + +

{t("Legal notices")}

+ +
+ + +

Editeur du Site

+

+ Association MIEUX VOTER +
+ 59 Rue Saint-André des Arts, 75006 Paris +

+

+ + https://mieuxvoter.fr/ + +

+

Hébergement

+

+ Association MIEUX VOTER +
+ 59 Rue Saint-André des Arts, 75006 Paris +

+

+ + https://mieuxvoter.fr/ + +

+

Développement

+

+ Association MIEUX VOTER +
+ 59 Rue Saint-André des Arts, 75006 Paris +

+

+ + https://mieuxvoter.fr/ + +

+ +
+ + + + {t("Go back to homepage")} + + + +
+ ); + } +} +export default withTranslation()(LegalNotices); \ No newline at end of file diff --git a/src/components/views/PrivacyPolicy.jsx b/src/components/views/PrivacyPolicy.jsx new file mode 100644 index 0000000..062bf75 --- /dev/null +++ b/src/components/views/PrivacyPolicy.jsx @@ -0,0 +1,79 @@ +/* eslint react/prop-types: 0 */ +import React, { Component } from "react"; +import { Col, Container, Row } from "reactstrap"; +import logoLine from "../../logos/logo-line-white.svg"; +import { Link } from "react-router-dom"; +import { AppContext } from "../../AppContext"; +import { withTranslation } from "react-i18next"; + +class PrivacyPolicy extends Component { + static contextType = AppContext; + + constructor(props) { + super(props); + this.state = {}; + } + + render() { + const { t } = this.props; + return ( + + + + logo + + + + +

{t("Privacy policy")}

+ +
+ + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Suspendisse tristique eros dictum, tempor libero quis, tincidunt + velit. Vestibulum non diam rutrum nisl consequat pulvinar. + Phasellus fermentum, massa at pulvinar eleifend, tellus nibh + dictum nulla, et gravida lectus lacus a mauris. Nunc a augue eget + risus commodo blandit. +

+ +
+ + + + {t("Go back to homepage")} + + + +
+ ); + } +} + +export default withTranslation()(PrivacyPolicy); \ No newline at end of file From d83544820686bae78656e0a87b6f9145a1154830 Mon Sep 17 00:00:00 2001 From: Clement G Date: Fri, 1 May 2020 13:22:49 +0200 Subject: [PATCH 02/30] feat(static-pages) : hide/show tack(dash) on footer --- src/components/layouts/Footer.jsx | 119 ++++++++++++++++------------- src/components/layouts/footer.css | 25 ++++++ src/components/layouts/useBbox.jsx | 20 +++++ 3 files changed, 111 insertions(+), 53 deletions(-) create mode 100644 src/components/layouts/footer.css create mode 100644 src/components/layouts/useBbox.jsx diff --git a/src/components/layouts/Footer.jsx b/src/components/layouts/Footer.jsx index 70ee6b9..2305599 100644 --- a/src/components/layouts/Footer.jsx +++ b/src/components/layouts/Footer.jsx @@ -1,60 +1,73 @@ /* eslint react/prop-types: 0 */ -import React, { Component } from "react"; +import React from "react"; import { withTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import Paypal from "../banner/Paypal"; +import {useBbox} from "./useBbox"; +import "./footer.css"; -class Footer extends Component { - constructor(props) { - super(props); - this.state = {}; - } +const Footer = props => { + const linkStyle = { whiteSpace: "nowrap" }; + const { t } = props; - render() { - const linkStyle = { whiteSpace: "nowrap" }; - const { t } = this.props; - return ( - - ); - } -} + const [bboxLink1, link1] = useBbox(); + const [bboxLink2, link2] = useBbox(); + const [bboxLink3, link3] = useBbox(); + const [bboxLink4, link4] = useBbox(); + const [bboxLink5, link5] = useBbox(); + const [bboxLink6, link6] = useBbox(); + + return ( + + ); +}; export default withTranslation()(Footer); diff --git a/src/components/layouts/footer.css b/src/components/layouts/footer.css new file mode 100644 index 0000000..45a16dd --- /dev/null +++ b/src/components/layouts/footer.css @@ -0,0 +1,25 @@ +.tacky { + margin: 0; + padding: 0; + list-style-type: none; +} + +.tacky li { + display: inline-block; +} + +.tacky li:after { + content: "-"; + margin: 0 5px; +} + +.tacky li:last-of-type:after { + content: ""; + margin: 0; +} + +.tacky li.no-tack:after { + content: ""; + margin: 0; + display: none; +} diff --git a/src/components/layouts/useBbox.jsx b/src/components/layouts/useBbox.jsx new file mode 100644 index 0000000..42e11f8 --- /dev/null +++ b/src/components/layouts/useBbox.jsx @@ -0,0 +1,20 @@ +/* eslint react/prop-types: 0 */ +import { useState } from 'react'; +import { useRef } from 'react'; +import { useEffect } from 'react'; + +export const useBbox = () => { + const ref = useRef(); + const [bbox, setBbox] = useState({}); + + const set = () => + setBbox(ref && ref.current ? ref.current.getBoundingClientRect() : {}); + + useEffect(() => { + set(); + window.addEventListener('resize', set); + return () => window.removeEventListener('resize', set); + }, []); + + return [bbox, ref]; +}; \ No newline at end of file From 4b959c244011f5c33c4fbfaf2bbcc11b8b7f5de2 Mon Sep 17 00:00:00 2001 From: Clement G Date: Fri, 1 May 2020 14:26:30 +0200 Subject: [PATCH 03/30] feat(static-pages) : add mailto --- public/locale/i18n/de/resource.json | 1 + public/locale/i18n/en/resource.json | 1 + public/locale/i18n/es/resource.json | 1 + public/locale/i18n/fr/resource.json | 1 + public/locale/i18n/ru/resource.json | 1 + src/components/layouts/Footer.jsx | 74 +++++++++++++++++++---------- 6 files changed, 54 insertions(+), 25 deletions(-) diff --git a/public/locale/i18n/de/resource.json b/public/locale/i18n/de/resource.json index e7e4119..b84edba 100644 --- a/public/locale/i18n/de/resource.json +++ b/public/locale/i18n/de/resource.json @@ -5,6 +5,7 @@ "Privacy policy": "Datenschutzerklärung", "Legal notices": "Rechtliche Hinweise", "FAQ": "FAQ", + "Need help?": "Brauchen Sie Hilfe?", "BetterVote": " BetterVote", "Voting platform": "Wahlplattform", "Majority Judgment": " Mehrheitswahl ", diff --git a/public/locale/i18n/en/resource.json b/public/locale/i18n/en/resource.json index 3064f99..25a2cba 100644 --- a/public/locale/i18n/en/resource.json +++ b/public/locale/i18n/en/resource.json @@ -5,6 +5,7 @@ "Privacy policy": "Privacy policy", "Legal notices": "Legal notices", "FAQ": "FAQ", + "Need help?": "Need help?", "BetterVote": "BetterVote", "Voting platform": "Voting platform", "Majority Judgment": "Majority Judgment", diff --git a/public/locale/i18n/es/resource.json b/public/locale/i18n/es/resource.json index bd88b23..7d6baa0 100644 --- a/public/locale/i18n/es/resource.json +++ b/public/locale/i18n/es/resource.json @@ -5,6 +5,7 @@ "Privacy policy": "Política de privacidad", "Legal notices": "Avisos legales", "FAQ": "FAQ", + "Need help?": "¿Necesitas ayuda?", "BetterVote": "VotarMejor", "Voting platform": "Plataforma de votación", "Majority Judgment": "Juicio Mayoritario", diff --git a/public/locale/i18n/fr/resource.json b/public/locale/i18n/fr/resource.json index fe11f3e..96b2746 100644 --- a/public/locale/i18n/fr/resource.json +++ b/public/locale/i18n/fr/resource.json @@ -5,6 +5,7 @@ "Privacy policy": "Politique de confidentialité", "Legal notices": "Mentions légales", "FAQ": "FAQ", + "Need help?": "Besoin d'aide ?", "BetterVote": "MieuxVoter", "Voting platform": "Plateforme de vote", "Majority Judgment": "Jugement Majoritaire", diff --git a/public/locale/i18n/ru/resource.json b/public/locale/i18n/ru/resource.json index d75c89e..f6de898 100644 --- a/public/locale/i18n/ru/resource.json +++ b/public/locale/i18n/ru/resource.json @@ -5,6 +5,7 @@ "Privacy policy": "Политика конфиденциальности", "Legal notices": "Официальные уведомления", "FAQ": "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ", + "Need help?": "Нужна помощь?", "BetterVote": "BetterVote", "Voting platform": "Платформа голосования", "Majority Judgment": "Решение Большинства", diff --git a/src/components/layouts/Footer.jsx b/src/components/layouts/Footer.jsx index 2305599..65b7800 100644 --- a/src/components/layouts/Footer.jsx +++ b/src/components/layouts/Footer.jsx @@ -3,7 +3,7 @@ import React from "react"; import { withTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import Paypal from "../banner/Paypal"; -import {useBbox} from "./useBbox"; +import { useBbox } from "./useBbox"; import "./footer.css"; const Footer = props => { @@ -16,52 +16,76 @@ const Footer = props => { const [bboxLink4, link4] = useBbox(); const [bboxLink5, link5] = useBbox(); const [bboxLink6, link6] = useBbox(); + const [bboxLink7, link7] = useBbox(); return (