first commit
This commit is contained in:
commit
52cf4821d7
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
dsfr/
|
||||
dila_refOrga_admin_Etat_fr_20230719.json
|
33
gen_dict.py
Normal file
33
gen_dict.py
Normal file
@ -0,0 +1,33 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#Générateur Rationel d'Organisations Spéciales, Complexes, Ordinaires ou Nationales
|
||||
|
||||
import json
|
||||
import re
|
||||
from collections import defaultdict
|
||||
from random import choice
|
||||
|
||||
pattern = re.compile(r"(?P<mot>(?:\w{1,3}\W)*(?P<initiale>\w)\S{2,}\w)")
|
||||
noms = [defaultdict(set), defaultdict(set)]
|
||||
|
||||
# https://www.data.gouv.fr/fr/datasets/referentiel-de-lorganisation-administrative-de-letat/#/resources
|
||||
with open(r"./dila_refOrga_admin_Etat_fr_20230719.json", 'r', encoding="utf-8") as f:
|
||||
services = json.load(f)["service"]
|
||||
|
||||
for service in services:
|
||||
matches = pattern.finditer(service["nom"])
|
||||
premier_match = next(matches)
|
||||
noms[0][premier_match.group("initiale").upper()].add(premier_match.group("mot"))
|
||||
for match in matches:
|
||||
noms[1][match.group("initiale").upper()].add(match.group("mot"))
|
||||
|
||||
noms[0] = {initiale: sorted(noms) for initiale, noms in sorted(noms[0].items())}
|
||||
noms[1] = {initiale: sorted(noms) for initiale, noms in sorted(noms[1].items())}
|
||||
|
||||
with open(r"noms.json", 'w', encoding="utf-8") as f:
|
||||
json.dump(noms, f)
|
||||
|
||||
def baptise(sigle):
|
||||
sigle = sigle.upper()
|
||||
return choice(noms[0][sigle[0].upper()]) + " " + " ".join(
|
||||
choice(noms[1][lettre]) for lettre in sigle[1:]
|
||||
)
|
285
index.html
Normal file
285
index.html
Normal file
@ -0,0 +1,285 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr" data-fr-scheme="system">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<meta name="theme-color" content="#000091"><!-- Défini la couleur de thème du navigateur (Safari/Android) -->
|
||||
<link rel="apple-touch-icon" href="dsfr/favicon/apple-touch-icon.png"><!-- 180×180 -->
|
||||
<link rel="icon" href="dsfr/favicon/favicon.svg" type="image/svg+xml">
|
||||
<link rel="shortcut icon" href="dsfr/favicon/favicon.ico" type="image/x-icon"><!-- 32×32 -->
|
||||
<link rel="manifest" href="dsfr/favicon/manifest.webmanifest" crossorigin="use-credentials">
|
||||
|
||||
<link rel="stylesheet" href="dsfr/dsfr.min.css">
|
||||
<link rel="stylesheet" href="dsfr/utility/utility.min.css">
|
||||
<style>
|
||||
.fr-btns-group:not(.fr-btns-group--sm):not(.fr-btns-group--lg):not([class^="fr-btns-group--icon-"]):not([class*=" fr-btns-group--icon-"]) .fr-btn[class*=" fr-fi-"], .fr-btns-group:not(.fr-btns-group--sm):not(.fr-btns-group--lg):not([class^="fr-btns-group--icon-"]):not([class*=" fr-btns-group--icon-"]) .fr-btn[class*=" fr-icon-"], .fr-btns-group:not(.fr-btns-group--sm):not(.fr-btns-group--lg):not([class^="fr-btns-group--icon-"]):not([class*=" fr-btns-group--icon-"]) .fr-btn[class^="fr-fi-"], .fr-btns-group:not(.fr-btns-group--sm):not(.fr-btns-group--lg):not([class^="fr-btns-group--icon-"]):not([class*=" fr-btns-group--icon-"]) .fr-btn[class^="fr-icon-"] {
|
||||
max-width: inherit;
|
||||
}
|
||||
|
||||
.fr-display-button {
|
||||
position: fixed;
|
||||
bottom: 3.5rem;
|
||||
right: 2rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
<title>G.R.O.S.C.O.N.</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="module">
|
||||
const e="system",t="dark",c="dark",o="data-fr-theme",a="data-fr-scheme",r=`:root[${o}], :root[${a}]`,m=()=>{document.documentElement.setAttribute(o,c),document.documentElement.style.colorScheme="dark"},n=()=>{window.matchMedia("(prefers-color-scheme: dark)").matches&&m()};(()=>{if(document.documentElement.matches(r)){const c=(()=>{try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}})()?localStorage.getItem("scheme"):"",o=document.documentElement.getAttribute(a);switch(!0){case c===t:m();break;case c===e:n();break;case o===t:m();break;case o===e:n()}}})();
|
||||
</script>
|
||||
|
||||
<div class="fr-mb-12w">
|
||||
<div class="fr-mb-6v">
|
||||
<header role="banner" class="fr-header">
|
||||
<div class="fr-header__body">
|
||||
<div class="fr-container">
|
||||
<div class="fr-header__body-row">
|
||||
<div class="fr-header__brand fr-enlarge-link">
|
||||
<div class="fr-header__brand-top">
|
||||
<div class="fr-header__logo">
|
||||
<p class="fr-logo">
|
||||
Ministère<br>
|
||||
des démarches<br/>
|
||||
ridicules
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fr-header__service">
|
||||
<a href="#" title="G.R.O.S.C.O.N. - Ministère des démarches ridicules">
|
||||
<p class="fr-header__service-title">
|
||||
Générateur Rationnel d'Organisations Spécifiques,<br/>
|
||||
Complexes, Opériationelles ou Nationales
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
|
||||
<main role="main" id="content">
|
||||
<div class="fr-container fr-mt-8v fr-mt-md-14v fr-mb-2v fr-mb-md-8v">
|
||||
<div class="fr-grid-row fr-grid-row--gutters fr-grid-row--center">
|
||||
<div class="fr-col-12 fr-col-md-10 fr-col-lg-8">
|
||||
<p class="fr-text--lead">Cette application est à destination des Décideurs qui, dans le cadre d'une nouvelle réorganisation, souhaitent trouver le nom d'une entité à partir d'un sigle.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fr-container fr-container--fluid fr-mb-md-14v">
|
||||
<div class="fr-grid-row fr-grid-row--gutters fr-grid-row--center">
|
||||
<div class="fr-col-12 fr-col-md-10 fr-col-lg-8">
|
||||
<div class="fr-container fr-background-alt--grey fr-px-md-0 fr-pt-10v fr-pt-md-14v fr-pb-6v fr-pb-md-10v">
|
||||
<div class="fr-grid-row fr-grid-row--gutters fr-grid-row--center">
|
||||
<div class="fr-col-12 fr-col-md-10 fr-col-lg-9">
|
||||
<div>
|
||||
<form class="fr-mb-0" id="recover">
|
||||
<fieldset class="fr-mb-0 fr-fieldset" id="recover-fieldset" aria-labelledby="recover-fieldset-legend recover-fieldset-messages">
|
||||
<legend class="fr-fieldset__legend" id="recover-fieldset-legend">
|
||||
<h2 class="fr-h5">Générer le nom d'une entité</h2>
|
||||
</legend>
|
||||
<div class="fr-fieldset__element">
|
||||
<p class="fr-text--sm">Entrez ici un sigle bien choisi.</p>
|
||||
</div>
|
||||
<div class="fr-fieldset__element">
|
||||
<div class="fr-input-group" id="input-group-9817">
|
||||
<label class="fr-label" for="username-9816">
|
||||
Sigle
|
||||
</label>
|
||||
<input type="text" id="sigleInput" class="fr-input" style="text-transform: uppercase;"/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alertDiv" class="fr-fieldset__element">
|
||||
<div class="fr-alert fr-alert--info">
|
||||
<h3 class="fr-alert__title">Suggestion : <span id="nomSpan"></span></h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fr-fieldset__element">
|
||||
<ul class="fr-mt-2v fr-btns-group fr-btns-group--between fr-btns-group--inline">
|
||||
<li>
|
||||
<button id="copyButton" class="fr-btn fr-btn--secondary fr-btn--icon-right fr-icon-clipboard-line" type="button">
|
||||
Copier
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="fr-btn fr-btn--icon-right fr-icon-lightbulb-line" id="button-9288" type="button" onclick="regen()">
|
||||
Nouvelle suggestion
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
||||
<footer class="fr-footer" role="contentinfo" id="footer-7450">
|
||||
<div class="fr-container">
|
||||
<div class="fr-footer__body">
|
||||
<div class="fr-footer__brand fr-enlarge-link">
|
||||
<a id="footer-operator" href="/" title="Retour à l’accueil du site - Nom de l’entité (ministère, secrétariat d‘état, gouvernement)">
|
||||
<p class="fr-logo">
|
||||
Ministère<br>
|
||||
des démarches<br/>
|
||||
ridicules
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="fr-footer__content">
|
||||
<p class="fr-footer__content-desc">Lorem ipsum dolor sit amet, consectetur adipiscing, incididunt, ut labore et dolore magna aliqua. Vitae sapien pellentesque habitant morbi tristique senectus et. Diam maecenas sed enim ut. Accumsan lacus vel facilisis volutpat est. Ut aliquam purus sit amet luctus. Bon, ça ne veut absolument rien dire, mais je trouve que c’est assez dans le ton. </p>
|
||||
<ul class="fr-footer__content-list">
|
||||
<li class="fr-footer__content-item">
|
||||
<a id="footer__content-link-7451" class="fr-footer__content-link" target="_blank" href="https://adrien.malingrey.fr/jeux">adrien.malingrey.fr/jeux</a>
|
||||
</li>
|
||||
<li class="fr-footer__content-item">
|
||||
<a id="footer__content-link-7452" class="fr-footer__content-link" target="_blank" href="https://git.malingrey.fr/adrien/groscon">code source</a>
|
||||
</li>
|
||||
<li class="fr-footer__content-item">
|
||||
<a id="footer__content-link-7454" class="fr-footer__content-link" target="_blank" href="https://data.gouv.fr">data.gouv.fr</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="fr-footer__bottom-copy">
|
||||
<p>Sauf mention explicite de propriété intellectuelle détenue par des tiers, les contenus de ce site sont proposés sous <a href="http://www.wtfpl.net/" target="_blank">licence WTFPL</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<button class="fr-display-button fr-background-default--grey fr-btn fr-btn--lg fr-icon-theme-fill fr-btn--secondary" aria-controls="fr-theme-modal" data-fr-opened="false" style="z-index: 1600" id="button-7460">
|
||||
Label bouton
|
||||
</button>
|
||||
<dialog id="fr-theme-modal" class="fr-modal" aria-labelledby="fr-theme-modal-title">
|
||||
<div class="fr-container fr-container--fluid fr-container-md">
|
||||
<div class="fr-grid-row fr-grid-row--center">
|
||||
<div class="fr-col-12 fr-col-md-6 fr-col-lg-4">
|
||||
<div class="fr-modal__body">
|
||||
<div class="fr-modal__header">
|
||||
<button class="fr-btn--close fr-btn" aria-controls="fr-theme-modal" id="button-7461" title="Fermer">
|
||||
Fermer
|
||||
</button>
|
||||
</div>
|
||||
<div class="fr-modal__content">
|
||||
<h1 id="fr-theme-modal-title" class="fr-modal__title">
|
||||
Paramètres d’affichage
|
||||
</h1>
|
||||
<div id="fr-display" class="fr-display">
|
||||
<fieldset class="fr-fieldset" id="display-fieldset">
|
||||
<legend class="fr-fieldset__legend--regular fr-fieldset__legend" id="display-fieldset-legend">
|
||||
Choisissez un thème pour personnaliser l’apparence du site.
|
||||
</legend>
|
||||
<div class="fr-fieldset__element">
|
||||
<div class="fr-radio-group fr-radio-rich">
|
||||
<input value="light" type="radio" id="fr-radios-theme-light" name="fr-radios-theme">
|
||||
<label class="fr-label" for="fr-radios-theme-light">
|
||||
Thème clair
|
||||
</label>
|
||||
<div class="fr-radio-rich__pictogram">
|
||||
<svg aria-hidden="true" class="fr-artwork" viewBox="0 0 80 80" width="80px" height="80px">
|
||||
<use class="fr-artwork-decorative" href="dsfr/artwork/pictograms/environment/sun.svg#artwork-decorative"></use>
|
||||
<use class="fr-artwork-minor" href="dsfr/artwork/pictograms/environment/sun.svg#artwork-minor"></use>
|
||||
<use class="fr-artwork-major" href="dsfr/artwork/pictograms/environment/sun.svg#artwork-major"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fr-fieldset__element">
|
||||
<div class="fr-radio-group fr-radio-rich">
|
||||
<input value="dark" type="radio" id="fr-radios-theme-dark" name="fr-radios-theme">
|
||||
<label class="fr-label" for="fr-radios-theme-dark">
|
||||
Thème sombre
|
||||
</label>
|
||||
<div class="fr-radio-rich__pictogram">
|
||||
<svg aria-hidden="true" class="fr-artwork" viewBox="0 0 80 80" width="80px" height="80px">
|
||||
<use class="fr-artwork-decorative" href="dsfr/artwork/pictograms/environment/moon.svg#artwork-decorative"></use>
|
||||
<use class="fr-artwork-minor" href="dsfr/artwork/pictograms/environment/moon.svg#artwork-minor"></use>
|
||||
<use class="fr-artwork-major" href="dsfr/artwork/pictograms/environment/moon.svg#artwork-major"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fr-fieldset__element">
|
||||
<div class="fr-radio-group fr-radio-rich">
|
||||
<input value="system" type="radio" id="fr-radios-theme-system" name="fr-radios-theme">
|
||||
<label class="fr-label" for="fr-radios-theme-system">
|
||||
Système
|
||||
<span class="fr-hint-text">Utilise les paramètres système</span>
|
||||
</label>
|
||||
<div class="fr-radio-rich__pictogram">
|
||||
<svg aria-hidden="true" class="fr-artwork" viewBox="0 0 80 80" width="80px" height="80px">
|
||||
<use class="fr-artwork-decorative" href="dsfr/artwork/pictograms/system/system.svg#artwork-decorative"></use>
|
||||
<use class="fr-artwork-minor" href="dsfr/artwork/pictograms/system/system.svg#artwork-minor"></use>
|
||||
<use class="fr-artwork-major" href="dsfr/artwork/pictograms/system/system.svg#artwork-major"></use>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script type="module" src="dsfr/dsfr.module.min.js"></script>
|
||||
<script type="text/javascript" nomodule src="dsfr/dsfr.nomodule.min.js"></script>
|
||||
<script>
|
||||
Array.prototype.choice = function () { return this[Math.floor(Math.random() * this.length)] }
|
||||
|
||||
fetch("https://adrien.malingrey.fr/dev/groscon/noms.json")
|
||||
.then(response => response.json())
|
||||
.then(json => {
|
||||
noms = json
|
||||
|
||||
regen()
|
||||
})
|
||||
|
||||
listNoms = []
|
||||
|
||||
function trouveMot(lettre, position) {
|
||||
lettre = lettre.toUpperCase()
|
||||
position = position? 1: 0
|
||||
return lettre in noms[position]? noms[position][lettre].choice(): "?"
|
||||
}
|
||||
|
||||
function regen() {
|
||||
if (sigleInput.value.length) {
|
||||
listNoms = Array.from(sigleInput.value).map((lettre, position) => trouveMot(lettre, position))
|
||||
nomSpan.innerText = listNoms.join(" ")
|
||||
alertDiv.style.display = ""
|
||||
} else {
|
||||
alertDiv.style.display = "none"
|
||||
}
|
||||
copyButton.innerText = "Copier"
|
||||
copyButton.classList.remove('fr-icon-checkbox-circle-line')
|
||||
copyButton.classList.add('fr-icon-clipboard-line')
|
||||
}
|
||||
|
||||
sigleInput.onkeyup = regen
|
||||
|
||||
copyButton.onclick = function(event) {
|
||||
navigator.clipboard.writeText(nomSpan.innerText).then(() => {
|
||||
copyButton.innerText = "Copié"
|
||||
copyButton.classList.remove('fr-icon-clipboard-line')
|
||||
copyButton.classList.add('fr-icon-checkbox-circle-line')
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
90
package.json
Normal file
90
package.json
Normal file
@ -0,0 +1,90 @@
|
||||
{
|
||||
"name": "@gouvfr/dsfr",
|
||||
"version": "1.10.0",
|
||||
"description": "Système de Design de l'Etat - DSFR",
|
||||
"repository": "git@github.com:GouvernementFR/dsfr.git",
|
||||
"author": "Service d'Information du Gouvernement <jean-charles.hourdeaux@pm.gouv.fr>",
|
||||
"license": "SEE LICENSE IN LICENSE.md",
|
||||
"config": {
|
||||
"prefix": "fr",
|
||||
"namespace": "dsfr",
|
||||
"organisation": "@gouvfr"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.16.1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node tool/tool.js test",
|
||||
"build": "node tool/tool.js build",
|
||||
"release": "node tool/tool.js release",
|
||||
"deploy": "node tool/tool.js deploy",
|
||||
"standalone": "node tool/tool.js standalone",
|
||||
"changelog": "node tool/tool.js changelog",
|
||||
"serve": "browser-sync start --server --port 8080 --startPath example/"
|
||||
},
|
||||
"files": [
|
||||
"/dist",
|
||||
"/src",
|
||||
"/module",
|
||||
"/standalone",
|
||||
"/i18n",
|
||||
"/example",
|
||||
"/doc",
|
||||
"/.config",
|
||||
"SECURITY.md",
|
||||
"CONTRIBUTING.md"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^15.0.0",
|
||||
"@commitlint/config-conventional": "^15.0.0",
|
||||
"@rollup/plugin-buble": "^0.21.3",
|
||||
"@rollup/plugin-virtual": "^2.1.0",
|
||||
"browser-sync": "^2.27.10",
|
||||
"browserslist": "^4.21.5",
|
||||
"cssnano": "^5.1.15",
|
||||
"del": "^6.0.0",
|
||||
"ejs": "^3.1.9",
|
||||
"eslint": "^8.36.0",
|
||||
"eslint-config-standard": "^16.0.3",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^5.2.0",
|
||||
"eslint-plugin-standard": "^5.0.0",
|
||||
"express": "^4.18.2",
|
||||
"husky": "^7.0.4",
|
||||
"jest": "^27.5.1",
|
||||
"js-beautify": "^1.14.7",
|
||||
"js-yaml": "^4.1.0",
|
||||
"mqpacker": "^7.0.0",
|
||||
"pa11y": "^6.2.3",
|
||||
"parse-github-url": "^1.0.2",
|
||||
"path": "^0.12.7",
|
||||
"postcss": "^8.4.21",
|
||||
"postcss-banner": "^4.0.1",
|
||||
"postcss-combine-duplicated-selectors": "^10.0.3",
|
||||
"postcss-discard-duplicates": "^5.1.0",
|
||||
"prettier": "^2.8.4",
|
||||
"rollup": "^2.68.0",
|
||||
"rollup-plugin-banner2": "^1.2.2",
|
||||
"rollup-plugin-modify": "^3.0.0",
|
||||
"rollup-plugin-prettier": "^2.2.2",
|
||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||
"rollup-plugin-terser": "^7.0.2",
|
||||
"sass": "^1.59.2",
|
||||
"sass-true": "^6.1.0",
|
||||
"semver": "^7.5.3",
|
||||
"standard": "^16.0.4",
|
||||
"stylelint": "^13.13.1",
|
||||
"stylelint-config-standard": "^20.0.0",
|
||||
"stylelint-scss": "^4.4.0",
|
||||
"subset-font": "^1.6.1",
|
||||
"svgo": "^2.8.0",
|
||||
"yargs": "^17.7.1"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
||||
}
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
BIN
thumbnail.png
Normal file
BIN
thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.0 KiB |
Loading…
x
Reference in New Issue
Block a user