Version 1.0.5

Fix #2, #3, #6, #10, #15, #19, #21, #29
This commit is contained in:
Stanislas Ormières 2020-10-30 15:41:15 +01:00
parent bdad4c95c2
commit 0ab3aad98c
11 changed files with 259 additions and 54 deletions

207
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "attestation-couvre-feu",
"version": "1.0.3",
"name": "attestation-derogatoire-de-deplacement",
"version": "1.0.5",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "attestation-couvre-feu",
"version": "1.0.3",
"name": "attestation-derogatoire-de-deplacement",
"version": "1.0.5",
"license": "MIT",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.32",
@ -34,6 +34,7 @@
"postcss-nested": "^4.2.3",
"postcss-nested-ancestors": "^2.0.0",
"postcss-preset-env": "^6.7.0",
"posthtml-expressions": "^1.6.0",
"prettier": "^2.1.2",
"react-snap": "^1.23.0",
"rimraf": "^3.0.2",
@ -5615,6 +5616,12 @@
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
"dev": true
},
"node_modules/fclone": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz",
"integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=",
"dev": true
},
"node_modules/fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@ -10113,6 +10120,115 @@
"node": ">=6.0.0"
}
},
"node_modules/posthtml-expressions": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/posthtml-expressions/-/posthtml-expressions-1.6.0.tgz",
"integrity": "sha512-BEaNitW8WXwv/EZA2zNa7vxFHqCOe0IMCGXxVoQwel0NbJsL+NtCifu99bRF4fhDarV43QVCBkQDaPCUdPbxPA==",
"dev": true,
"dependencies": {
"fclone": "^1.0.11",
"posthtml-parser": "^0.5.2",
"posthtml-render": "^1.2.3"
},
"engines": {
"node": ">=10"
}
},
"node_modules/posthtml-expressions/node_modules/dom-serializer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz",
"integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==",
"dev": true,
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^3.0.0",
"entities": "^2.0.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/posthtml-expressions/node_modules/domelementtype": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
"integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
]
},
"node_modules/posthtml-expressions/node_modules/domhandler": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
"integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
"dev": true,
"dependencies": {
"domelementtype": "^2.0.1"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/posthtml-expressions/node_modules/domutils": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
"integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
"dev": true,
"dependencies": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.0.1",
"domhandler": "^3.3.0"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/posthtml-expressions/node_modules/entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true,
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/posthtml-expressions/node_modules/htmlparser2": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz",
"integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==",
"dev": true,
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^3.3.0",
"domutils": "^2.4.2",
"entities": "^2.0.0"
},
"funding": {
"url": "https://github.com/fb55/htmlparser2?sponsor=1"
}
},
"node_modules/posthtml-expressions/node_modules/posthtml-parser": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.5.2.tgz",
"integrity": "sha512-rwRA0TyUTivQN6NAG8CLhi8KEdqjWQMZSAJQedxkuH1c8/hme99WDVOW+z8Ony+YLmoaH0sJRUk6RCWVFQ6Rkw==",
"dev": true,
"dependencies": {
"htmlparser2": "^5.0.1"
},
"engines": {
"node": ">=10.0.0"
},
"funding": {
"type": "patreon",
"url": "https://opencollective.com/posthtml"
}
},
"node_modules/posthtml-parser": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz",
@ -18252,6 +18368,12 @@
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
"dev": true
},
"fclone": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz",
"integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=",
"dev": true
},
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@ -21944,6 +22066,83 @@
"posthtml-render": "^1.1.5"
}
},
"posthtml-expressions": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/posthtml-expressions/-/posthtml-expressions-1.6.0.tgz",
"integrity": "sha512-BEaNitW8WXwv/EZA2zNa7vxFHqCOe0IMCGXxVoQwel0NbJsL+NtCifu99bRF4fhDarV43QVCBkQDaPCUdPbxPA==",
"dev": true,
"requires": {
"fclone": "^1.0.11",
"posthtml-parser": "^0.5.2",
"posthtml-render": "^1.2.3"
},
"dependencies": {
"dom-serializer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.1.0.tgz",
"integrity": "sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ==",
"dev": true,
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^3.0.0",
"entities": "^2.0.0"
}
},
"domelementtype": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
"integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==",
"dev": true
},
"domhandler": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
"integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
"dev": true,
"requires": {
"domelementtype": "^2.0.1"
}
},
"domutils": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
"integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
"dev": true,
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.0.1",
"domhandler": "^3.3.0"
}
},
"entities": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true
},
"htmlparser2": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz",
"integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==",
"dev": true,
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^3.3.0",
"domutils": "^2.4.2",
"entities": "^2.0.0"
}
},
"posthtml-parser": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.5.2.tgz",
"integrity": "sha512-rwRA0TyUTivQN6NAG8CLhi8KEdqjWQMZSAJQedxkuH1c8/hme99WDVOW+z8Ony+YLmoaH0sJRUk6RCWVFQ6Rkw==",
"dev": true,
"requires": {
"htmlparser2": "^5.0.1"
}
}
}
},
"posthtml-parser": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "attestation-couvre-feu",
"version": "1.0.3",
"name": "attestation-derogatoire-de-deplacement",
"version": "1.0.5",
"description": "Générateur d'attestation de déplacement dérogatoire'",
"main": "certificate.js",
"scripts": {
@ -51,6 +51,7 @@
"postcss-nested": "^4.2.3",
"postcss-nested-ancestors": "^2.0.0",
"postcss-preset-env": "^6.7.0",
"posthtml-expressions": "^1.6.0",
"prettier": "^2.1.2",
"react-snap": "^1.23.0",
"rimraf": "^3.0.2",

9
posthtml.config.js Normal file
View File

@ -0,0 +1,9 @@
module.exports = {
plugins: {
'posthtml-expressions': {
locals: {
PUBLIC_URL: process.env.PUBLIC_URL,
},
},
},
}

Binary file not shown.

View File

@ -31,7 +31,7 @@ html {
}
body {
margin: 20px;
margin: 1.25em;
background: white;
padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
@ -650,10 +650,10 @@ input[type=number] {
}
.fieldset {
margin-left: -2em;
margin-right: -2em;
padding-left: 2em;
padding-right: 2em;
margin-left: -1.25em;
margin-right: -1.25em;
padding-left: 1.25em;
padding-right: 1.25em;
border: 3px solid transparent;
}

View File

@ -103,31 +103,31 @@
"items": [
{
"code": "travail",
"label": "Déplacements entre le domicile et le lieu d'exercice de l'activité professionnelle ou les déplacements professionnels ne pouvant être différés <a class=\"footnote\" id=\"footnote2\" href=\"#footnote2\">[2]</a>;"
"label": "Déplacements entre le domicile et le lieu dexercice de lactivité professionnelle ou un établissement denseignement ou de formation, déplacements professionnels ne pouvant être différés <a class=\"footnote\" href=\"#footnote2\">[2]</a> , déplacements pour un concours ou un examen."
},
{
"code": "achats",
"label": "Déplacements pour effectuer des achats de fournitures nécessaires à l'activité professionnelle, des achats de première nécessité <a class=\"footnote\" id=\"footnote3\" href=\"#footnote3\">[3]</a> dans des établissements dont les activités demeurent autorisées (liste sur gouvernement.fr) et les livraisons à domicile;"
"label": "Déplacements pour effectuer des achats de fournitures nécessaires à l'activité professionnelle, des achats de première nécessité <a class=\"footnote\" href=\"#footnote3\">[3]</a> dans des établissements dont les activités demeurent autorisées, le retrait de commande et les livraisons à domicile;"
},
{
"code": "sante",
"label": "Consultations et soins ne pouvant être assurés à distance et ne pouvant être différés et lachat de médicaments;"
"label": "Consultations, examens et soins ne pouvant être assurés à distance et lachat de médicaments;"
},
{
"code": "famille",
"label": "Déplacements pour motif familial impérieux, pour l'assistance aux personnes vulnérables et précaires ou la garde d'enfants;"
"label": " Déplacements pour motif familial impérieux, pour l'assistance aux personnes vulnérables et précaires ou la garde d'enfants;"
},
{
"code": "handicap",
"label": "Déplacements des personnes en situation de handicap et de leur accompagnant;"
"label": "Déplacement des personnes en situation de handicap et leur accompagnant;"
},
{
"code": "sport_animaux",
"label": "Déplacements brefs, dans la limite d'une heure quotidienne et dans un rayon maximal d'un kilomètre autour du domicile, liés soit à l'activité physique individuelle des personnes, à l'exclusion de toute pratique sportive collective et de toute proximité avec d'autres personnes, soit à la promenade avec les seules personnes regroupées dans un même domicile, soit aux besoins des animaux de compagnie."
"label": "Déplacements brefs, dans la limite d'une heure quotidienne et dans un rayon maximal d'un kilomètre autour du domicile, liés soit à l'activité physique individuelle des personnes, à l'exclusion de toute pratique sportive collective et de toute proximité avec d'autres personnes, soit à la promenade avec les seules personnes regroupées dans un même domicile, soit aux besoins des animaux de compagnie ;"
},
{
"code": "convocation",
"label": " Convocation judiciaire ou administrative et rendez-vous dans un service public;"
"label": " Convocation judiciaire ou administrative et pour se rendre dans un service public;"
},
{
"code": "missions",

View File

@ -15,8 +15,8 @@
<meta property="og:title" content="Générateur d'attestation de déplacement dérogatoire - COVID-19" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:description" content="Ce service officiel génère une version numérique de la déclaration de déplacement covid-19 à présenter aux forces de sécurité lors dun contrôle." />
<link rel="canonical" href="https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/" />
<meta property="og:url" content="https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/" />
<link rel="canonical" href="https://media.interieur.gouv.fr{{ PUBLIC_URL || '/deplacement-covid-19' }}" />
<meta property="og:url" content="https://media.interieur.gouv.fr{{ PUBLIC_URL || '/deplacement-covid-19' }}" />
<meta property="og:site_name" content="Générateur d'attestation de déplacement dérogatoire - COVID-19" />
<script type='application/ld+json'>{"@context":"http://www.schema.org","@type":"GovernmentOrganization","name":"Générateur d'attestation de déplacement dérogatoire - COVID-19","description":"Ce service officiel génère une version numérique de la déclaration de déplacement covid-19 à présenter aux forces de sécurité lors dun contrôle.","address":{"@type":"PostalAddress","addressCountry":"France"}}</script>
@ -46,42 +46,41 @@
</span>
</h1>
<p class="text-desc">
En application des mesures générales nécessaires pour faire face à lépidémie de covid-19
dans le cadre de létat durgence sanitaire
En application du décret n°2020-1310 du 29 octobre 2020 prescrivant les mesures générales
nécessaires pour faire face à l'épidémie de Covid19 dans le cadre de l'état d'urgence sanitaire
</p>
</div>
</header>
<main role="main">
<p
class="alert alert-danger d-none"
role="alert"
id="alert-facebook"
></p>
<p
class="alert alert-danger d-none"
role="alert"
id="alert-facebook"
></p>
<div class="wrapper">
<form id="form-profile" accept-charset="UTF-8"></form>
<p class="text-center mt-5">
<button type="button" id="generate-btn" class="btn btn-primary btn-attestation"><span ><i class="fa fa-file-pdf inline-block mr-1"></i> Générer mon attestation</span></button>
</p>
<div class="wrapper">
<form id="form-profile" accept-charset="UTF-8"></form>
<p class="text-center mt-5">
<button type="button" id="generate-btn" class="btn btn-primary btn-attestation"><span ><i class="fa fa-file-pdf inline-block mr-1"></i> Générer mon attestation</span></button>
</p>
<div class="bg-primary d-none" id="snackbar">
L'attestation est téléchargée sur votre appareil.
<div class="bg-primary d-none" id="snackbar">
L'attestation est téléchargée sur votre appareil.
</div>
</div>
</div>
<div class="">
<p id="footnotes">
<span id="footnote1">
<div id="footnotes">
<p id="footnote1">
[1] Les personnes souhaitant bénéficier de l'une de ces exceptions doivent se munir s'il y a lieu, lors de leurs déplacements hors de leur domicile, d'un document leur permettant de justifier que le déplacement considéré entre dans le champ de l'une de ces exceptions.
</span><br>
<span id="footnote2">
</p>
<p id="footnote2">
[2] A utiliser par les travailleurs non salariés, lorsqu'ils ne peuvent disposer d'un justificatif de déplacement établi par leur employeur.
</span><br>
<span id="footnote3">
</p>
<p id="footnote3">
[3] Y compris les acquisitions à titre gratuit (distribution de denrées alimentaires...) et les déplacements liés à la perception de prestations sociales et au retrait d'espèces.
</span><br>
</p>
</p>
</div>
<p class="github">
Le code source de ce service est consultable sur <a href="https://github.com/LAB-MI/attestation-deplacement-derogatoire-q4-2020" class="github-link">GitHub</a>.
</p>
@ -92,7 +91,6 @@
<source srcset="/logo_dnum_dark.svg" media="(prefers-color-scheme: dark)">
<img class="center" src="/logo_dnum.svg" alt="logo dnum">
</picture>
</div>
</main>
<footer role="contentinfo" class="main-footer">
<div class="footer-links">

View File

@ -103,7 +103,7 @@ const createReasonFieldset = (reasonsData) => {
const appendToFieldset = appendTo(fieldset)
const legendAttrs = {
className: 'legend titre 3 ',
className: 'legend titre-3',
innerHTML: 'Choisissez un motif de déplacement',
}
const legend = createElement('legend', legendAttrs)
@ -112,9 +112,7 @@ const createReasonFieldset = (reasonsData) => {
const textAlert = createElement('p', textAlertAttrs)
const textSubscribeReasonAttrs = {
innerHTML: `certifie que mon déplacement est lié au motif suivant (cocher la case) autorisé en application des
mesures générales nécessaires pour faire face à l'épidémie de Covid19 dans le cadre de l'état
d'urgence sanitaire <a class="footnote" id="footnote1" href="#footnote1">[1]</a>&nbsp;:`,
innerHTML: 'certifie que mon déplacement est lié au motif suivant (cocher la case) autorisé par le décret n°2020-1310 du 29 octobre 2020 prescrivant les mesures générales nécessaires pour faire face à l\'épidémie de Covid19 dans le cadre de l\'état d\'urgence sanitaire <a class="footnote" href="#footnote1">[1]</a>&nbsp;:',
}
const textSubscribeReason = createElement('p', textSubscribeReasonAttrs)

View File

@ -77,7 +77,7 @@ export async function generatePdf (profile, reasons, pdfBase) {
reasons
.split(', ')
.forEach(reason => {
drawText('x', 84, ys[reason], 18)
drawText('x', 78, ys[reason], 18)
})
let locationSize = getIdealFontSize(font, profile.city, 83, 7, 11)

View File

@ -1 +1 @@
Sitemap: https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/sitemap.xml
Sitemap: https://media.interieur.gouv.fr/deplacement-covid-19/sitemap.xml

View File

@ -8,17 +8,17 @@
<url>
<loc>https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/</loc>
<loc>https://media.interieur.gouv.fr/deplacement-covid-19/</loc>
<lastmod>2020-04-06T04:22:03+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/confidentialite.html</loc>
<loc>https://media.interieur.gouv.fr/deplacement-covid-19/confidentialite.html</loc>
<lastmod>2020-04-06T04:22:03+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://media.interieur.gouv.fr/attestation-couvre-feu-covid-19/index.html</loc>
<loc>https://media.interieur.gouv.fr/deplacement-covid-19/index.html</loc>
<lastmod>2020-04-06T04:22:03+00:00</lastmod>
<priority>0.64</priority>
</url>