styles groupés, logo entête

This commit is contained in:
Tykayn 2025-05-28 17:05:34 +02:00 committed by tykayn
parent ccab916286
commit 1e02b7062d
13 changed files with 261 additions and 142 deletions

View file

@ -7,3 +7,32 @@
// any CSS you import will output into a single css file (app.css in this case)
import './styles/app.css';
console.log('Hello World de app.js');
function labourer() {
window.location.href = '/admin/labourer/' + document.getElementById('app_admin_labourer').value;
}
// Attendre le chargement du DOM
document.addEventListener('DOMContentLoaded', () => {
// Générer une couleur pastel aléatoire
const genererCouleurPastel = () => {
// Utiliser des valeurs plus claires (180-255) pour obtenir des tons pastel
const r = Math.floor(Math.random() * 75 + 180);
const g = Math.floor(Math.random() * 75 + 180);
const b = Math.floor(Math.random() * 75 + 180);
return `rgb(${r}, ${g}, ${b})`;
};
const randombg = genererCouleurPastel();
// Appliquer la couleur au body
document.body.style.backgroundColor = randombg;
// Appliquer le style pour .body-landing
const bodyLanding = document.querySelector('.body-landing');
if (bodyLanding) {
bodyLanding.style.backgroundColor = randombg;
}
});

View file

@ -1,3 +1,9 @@
body {
background-color: lightgray;
background-color: rgb(236, 236, 236);
}
.body-landing .container {
background-color: white;
border-radius: 10px;
padding: 20px;
}

68
public/css/main.css Normal file
View file

@ -0,0 +1,68 @@
/* Layout général */
.body-landing {
background-color: rgb(255, 255, 255);
min-height: 100vh;
padding-bottom: 5rem;
}
/* Header */
.main-header {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, .1);
padding: 1rem 0;
margin-bottom: 2rem;
}
.main-header h1 {
font-size: 1.5rem;
margin: 0;
}
.main-header a {
text-decoration: none;
color: inherit;
}
/* Footer */
.main-footer {
background-color: #f8f9fa;
padding: 2rem 0;
margin-top: 3rem;
border-top: 1px solid #dee2e6;
}
.main-footer p {
margin-bottom: 0.5rem;
}
.main-footer a {
color: #0d6efd;
text-decoration: none;
}
.main-footer a:hover {
text-decoration: underline;
}
/* Barre de progression */
#completion_progress {
position: fixed;
bottom: 0;
width: 100%;
padding: 1rem;
background-color: white;
border-top: 1px solid #e9ecef;
z-index: 1000;
box-shadow: 0 -2px 4px rgba(0, 0, 0, .1);
}
/* Media queries */
@media (max-width: 768px) {
.main-header h1 {
font-size: 1.25rem;
}
.main-footer {
padding: 1.5rem 0;
}
}

BIN
public/logo-osm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -200,7 +200,7 @@ final class AdminController extends AbstractController
->setModifiedDate(new \DateTime())
->setAskedHumainsSupport(false)
->setLastContactAttemptDate(null)
->setStats(null)
->setStats($stats)
->setNote($result['tags'] && isset($result['tags']['note']) ? isset($result['tags']['note']) : null)
->setHasOpeningHours($result['tags'] && isset($result['tags']['opening_hours']) ? isset($result['tags']['opening_hours']) : null)
->setHasAddress(($result['tags'] && isset($result['tags']['address']) || $result['tags'] && isset($result['tags']['contact:address'])) ? isset($result['tags']['address']) : null)

View file

@ -1,112 +1,98 @@
<!DOCTYPE html>
<html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Welcome!{% endblock %}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
<!-- CSS Bootstrap -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<!-- CSS personnalisé -->
<link rel="stylesheet" href="{{ asset('css/main.css') }}">
<!-- JavaScript Bootstrap avec Popper.js -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<link rel="icon" type="image/png" href="{{ asset('logo-osm.png') }}">
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
<style>
.body-landing {
background-color:rgb(255, 255, 255);
min-height: 50vh;
}
table td{
padding: 1rem;
}
table, thead, tbody, tr{
width: 100%;
}
#completion_progress{
position: fixed;
bottom: 0;
width: 100%;
padding: 1rem;
background-color: white;
border-top: 1px solid #e9ecef;
z-index: 1000;
}
.body-landing{
min-height: 100vh;
}
.main-footer{
padding-bottom: 15rem;
margin-top: 5rem;
}
</style>
{% block stylesheets %}
{% block stylesheets %}
{{ encore_entry_link_tags('app') }}
{% endblock %}
</head>
<body>
<header class="main-header">
<div id="completion_progress">
<div class="container">
<div id="completion_display"></div>
<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-12">
<a href="{{ path('app_public_index') }}">
<h1>OpenStreetMap Mon Commerce</h1>
</a>
</div>
</div>
{% for label, messages in app.flashes %}
{% for message in messages %}
<div class="alert alert-{{ label }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<header class="main-header">
<div class="container">
<div class="row align-items-center">
<div class="col-12">
<a href="{{ path('app_public_index') }}" class="d-flex align-items-center">
<h1 class="mb-0 mt-2">
<img src="{{ asset('logo-osm.png') }}" alt="Logo OSM" class="me-2" style="width: 30px; height: 30px;">
Mon Commerce OpenStreetMap</h1>
</a>
</div>
</div>
{% for label, messages in app.flashes %}
{% for message in messages %}
<div class="alert alert-{{ label }} alert-dismissible fade show mt-3" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endfor %}
{% endfor %}
<div class="row">
<div class="col-12">
{% include 'public/nav.html.twig' %}
</div>
</div>
</div>
</header>
<div class="body-landing">
{% block body %}{% endblock %}
</div>
<footer class="main-footer dark">
<div class="container">
<div class="row">
<div class="col-12">
{% include 'public/nav.html.twig' %}
<div class="row mt-3">
<div class="col-12">
{% include 'public/nav.html.twig' %}
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<p>OpenStreetMap Mon Commerce</p>
<p>Licence AGPLv3+,
fait par <a href="https://mastodon.cipherbliss.com/@tykayn">Tykayn</a> de
<a href="https://www.cipherbliss.com">CipherBliss EI</a>, membre de la fédération des professionels d'OpenStreetMap, Sources des données : <a href="https://www.openstreetmap.org/">OpenStreetMap</a>.
<br> <a href="https://www.openstreetmap.org/copyright">OpenStreetMap France</a>.
<br> <a href="https://www.openstreetmap.org/copyright">Sources du logiciel.</a>.
</p>
</header>
<div id="completion_progress" class="d-none">
<div class="container">
<div id="completion_display" class="mb-2"></div>
<div class="progress" role="progressbar" aria-label="Progression de complétion" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar" style="width: 0%"></div>
</div>
</div>
</div>
</footer>
</body>
<main class="body-landing">
{% block body %}{% endblock %}
</main>
<footer class="main-footer">
<div class="container">
<div class="row mb-4">
<div class="col-12">
{% include 'public/nav.html.twig' %}
</div>
</div>
<div class="row">
<div class="col-12">
<p class="mb-2">OpenStreetMap Mon Commerce</p>
<p class="mb-2">
Licence AGPLv3+, fait par
<a href="https://mastodon.cipherbliss.com/@tykayn">Tykayn</a> de
<a href="https://www.cipherbliss.com">CipherBliss EI</a>,
membre de la fédération des professionels d'OpenStreetMap
</p>
<p class="mb-2">
Sources des données : <a href="https://www.openstreetmap.org/">OpenStreetMap</a>
</p>
<p class="mb-2">
<a href="https://www.openstreetmap.org/copyright">OpenStreetMap France</a>
</p>
<p class="mb-0">
<a href="https://www.openstreetmap.org/copyright">Sources du logiciel</a>
</p>
</div>
</div>
</div>
</footer>
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
<script src="{{ asset('js/main.js') }}"></script>
{% endblock %}
</body>
</html>

View file

@ -12,6 +12,15 @@
</style>
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script>
function labourer() {
window.location.href = '/admin/labourer/' + document.getElementById('app_admin_labourer').value;
}
</script>
{% endblock %}
{% block body %}
<div class="container mt-4">
<div class="row">
@ -21,6 +30,10 @@
<div class="col-12">
<h2>Statistiques : {{ stats|length }} commerces</h2>
<input class="form-control" type="text" id="app_admin_labourer" value="75013">
<button class="btn btn-default" onclick="labourer() ">Labourer</button>
<table class="table table-hover table-striped table-responsive">
<thead>
<tr>

View file

@ -11,22 +11,26 @@
.is-invalid { border: 1px solid red; }
.is-invalid #validation_messages { color: red; }
img { max-width: 100%; max-height: 400px; }
@media (max-width: 768px) {
.form-label { margin-bottom: 0.5rem; }
.mb-3 { margin-bottom: 1rem !important; }
}
</style>
{% endblock %}
{% block body %}
<div class="container mt-4">
<div class="row">
<div class="col-12">
<div class="container-fluid mt-4">
<div class="row justify-content-center">
<div class="col-12 col-lg-10 col-xl-8">
<div class="card shadow-sm">
<div class="card-body">
<h1 class="card-title mb-4">{{ 'display.welcome'|trans }} {{ commerce_overpass.tags_converted.name }}</h1>
<div id="map" style="height: 400px; width: 100%;" class="rounded"></div>
<h1 class="card-title h2 mb-4">{{ 'display.welcome'|trans }} {{ commerce_overpass.tags_converted.name }}</h1>
<div id="map" style="height: 400px; width: 100%;" class="rounded mb-4"></div>
{% if commerce_overpass is not empty %}
<form action="{{ path('app_public_submit', {'osm_object_id': commerce_overpass['@attributes'].id, 'version': commerce_overpass['@attributes'].version, 'changesetID': commerce_overpass['@attributes'].changeset }) }}" method="post" class="needs-validation">
<input type="hidden" name="osm_kind" value="{{ osm_kind }}">
<div class="mb-3">
<div class="mb-4">
<label for="commerce_id" class="form-label">{{ 'display.modify_commerce'|trans }}:
<strong>
{% if commerce_overpass.tags_converted.name is defined %}
@ -38,20 +42,21 @@
{% endif %}
</strong>
</label>
<br/>
<a class="btn btn-info" href="{{ path('app_public_index') }}">{{ 'display.contact_humans'|trans }}</a>
<div class="mt-2">
<a class="btn btn-info" href="{{ path('app_public_index') }}">{{ 'display.contact_humans'|trans }}</a>
</div>
</div>
{% if commerce.tags_converted.image is defined %}
<img class="img-fluid mb-3" src="{{ commerce.tags_converted.image }}" alt="Image du lieu">
<img class="img-fluid mb-4" src="{{ commerce.tags_converted.image }}" alt="Image du lieu">
{% endif %}
<h2>{{ 'display.attributes'|trans }}</h2>
<div class="row mb-3">
<div class="col-md-5">
<label for="commerce_tag_value__name">{{'display.keys.name'|trans}}</label>
<h2 class="h3 mb-3">{{ 'display.attributes'|trans }}</h2>
<div class="row g-3 mb-4">
<div class="col-12 col-md-4">
<label for="commerce_tag_value__name" class="form-label">{{'display.keys.name'|trans}}</label>
</div>
<div class="col-md-5">
<div class="col-12 col-md-8">
<input type="text" class="form-control" name="commerce_tag_value__name" value="{% if commerce_overpass.tags_converted.name is defined %}{{ commerce_overpass.tags_converted.name }}{% elseif commerce_overpass['@attributes'].name is defined %}{{ commerce_overpass['@attributes'].name }}{% endif %}">
</div>
</div>
@ -63,14 +68,9 @@
{% include 'public/edit/address.html.twig' %}
{% endif %}
{% if hide_filled_inputs and (commerce_overpass.tags_converted.opening_hours) is defined and commerce_overpass.tags_converted.opening_hours is empty %}
{% include 'public/edit/opening_hours.html.twig' %}
{% endif %}
{% if (commerce_overpass.tags_converted.wheelchair) is defined %}
{{ dump(commerce_overpass.tags_converted.wheelchair) }}
{% endif %}
{% if hide_filled_inputs and (commerce_overpass.tags_converted.wheelchair) is defined and commerce_overpass.tags_converted.wheelchair is empty %}
{% include 'public/edit/wheelchair.html.twig' %}
@ -81,33 +81,43 @@
{% include 'public/edit/tags.html.twig' %}
<div id="validation_messages"></div>
<button type="submit" class="btn btn-primary">
<i class="bi bi-send"></i>
{{ 'display.submit'|trans }}
</button>
<div id="validation_messages" class="alert alert-danger d-none"></div>
<div class="d-grid gap-2 d-md-flex justify-content-md-end mt-4">
<button type="submit" class="btn btn-primary col-12 col-md-5">
<i class="bi bi-send"></i>
{{ 'display.submit'|trans }}
</button>
</div>
</form>
{% endif %}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<span class="p-4">
<span class="last-modification">{{ 'display.last_modification'|trans }}: {{ commerce_overpass['@attributes'].timestamp }}</span>,
<strong>{{ 'display.days_ago'|trans({'%days%': date(commerce_overpass['@attributes'].timestamp).diff(date()).days}) }}</strong>
{{ 'display.by'|trans }}
<a href="https://www.openstreetmap.org/user/{{ commerce_overpass['@attributes'].user }}" target="_blank">{{ commerce_overpass['@attributes'].user }}</a>
<div class="lien-OpenStreetMap">
<a href="https://www.openstreetmap.org/node/{{ commerce_overpass['@attributes'].id }}" target="_blank">{{ 'display.view_on_osm'|trans }}</a>
<div class="row justify-content-center mt-4">
<div class="col-12 col-lg-10 col-xl-8">
<div class="card">
<div class="card-body">
<div class="d-flex flex-column flex-md-row align-items-md-center justify-content-between">
<div class="mb-3 mb-md-0">
<span class="last-modification">{{ 'display.last_modification'|trans }}: {{ commerce_overpass['@attributes'].timestamp }}</span>,
<strong>{{ 'display.days_ago'|trans({'%days%': date(commerce_overpass['@attributes'].timestamp).diff(date()).days}) }}</strong>
{{ 'display.by'|trans }}
<a href="https://www.openstreetmap.org/user/{{ commerce_overpass['@attributes'].user }}" target="_blank">{{ commerce_overpass['@attributes'].user }}</a>
</div>
<div class="lien-OpenStreetMap">
<a href="https://www.openstreetmap.org/node/{{ commerce_overpass['@attributes'].id }}" target="_blank" class="btn btn-outline-secondary">
{{ 'display.view_on_osm'|trans }}
</a>
</div>
</div>
<div class="disclaimer mt-3 p-3 bg-light rounded">
<p class="mb-0">
<strong>{{ 'display.disclaimer.title'|trans }}:</strong>
{{ 'display.disclaimer.text'|trans }}
</p>
</div>
</div>
</span>
<div class="disclaimer p-3">
<p>
<strong>{{ 'display.disclaimer.title'|trans }}:</strong>
{{ 'display.disclaimer.text'|trans }}
</p>
</div>
</div>
</div>

View file

@ -20,25 +20,26 @@
<h1>
<i class="bi bi-shop"></i> Mon Commerce OSM
</h1>
<p>
Bonjour, ce site permet de modifier les informations de votre commerce sur OpenStreetMap afin de gagner en visibilité sur des milliers de sites web à la fois en une minute, c'est gratuit et sans engagement. Nous sommes bénévoles dans une association à but non lucratif.
<br>
Nous vous enverrons un lien unique pour cela par email, et si vous en avez besoin, nous pouvons vous aider.
<p class="mt-4 p-4">
Bonjour, ce site permet de modifier les informations de votre commerce sur OpenStreetMap afin de gagner en visibilité sur des milliers de sites web à la fois en une minute, c'est gratuit et sans engagement.
<br>Nous sommes bénévoles dans une association à but non lucratif.
<br>Nous vous enverrons un lien unique pour cela par email, et si vous en avez besoin, nous pouvons vous aider.
</p>
<p>
<div class="row">
<div class="col-12">
<label class="input-group-text" for="researchShop">Rechercher un commerce, écrivez son nom et la ville
<i class="bi bi-search"></i> <input class="form-control" type="text" id="researchShop" placeholder="Rechercher un commerce">
<label class="label" for="researchShop"><i class="bi bi-search bi-2x"></i> Rechercher un commerce, écrivez son nom et la ville
</label>
<input class="form-control" type="text" id="researchShop" placeholder="Mon commerce, Paris">
</div>
</div>
<div id="resultsList"></div>
<div id="proposeLink"></div>
<div id="proposeMail">
<div id="proposeLink" class="d-none"></div>
<div id="proposeMail" class="d-none">
<input type="email" id="emailInput" class="form-control" placeholder="mon_email_de_commerce@exemple.com">
<button type="submit" class="btn btn-primary p-4 d-block"> <i class="bi bi-envelope"></i> Envoyer</button>
@ -62,13 +63,13 @@
// Créer les divs pour les messages
const proposeLinkHtml = `
<div id="proposeLink" class="alert alert-success">
<div id="proposeLink" class="alert alert-success ">
Un email a déjà été enregistré pour ce commerce. Nous vous enverrons le lien de modification.
</div>
`;
const proposeMailHtml = `
<div id="proposeMail" class="alert alert-info">
<div id="proposeMail" class="alert alert-info " >
Aucun email n'est enregistré pour ce commerce. Veuillez saisir votre email pour recevoir le lien de modification.
${emailFormHtml}
</div>

View file

@ -1,6 +1,6 @@
{% extends 'base.html.twig' %}
{% block title %}{{ 'display.title'|trans }}{% endblock %}
{% block title %}{{ 'display.title'|trans }} - accueil{% endblock %}
{% block stylesheets %}
{{ parent() }}
@ -8,7 +8,7 @@
<style>
.hidden {
display: none;
}
}
</style>
{% endblock %}

View file

@ -6,13 +6,19 @@
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" href="{{ path('app_public_index') }}">{{ 'display.home'|trans }}</a>
<a class="nav-link active" href="{{ path('app_public_index') }}">
<i class="bi bi-house-fill"></i>
{{ 'display.home'|trans }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ path('app_public_dashboard') }}">{{ 'display.stats'|trans }}</a>
<a class="nav-link" href="{{ path('app_public_dashboard') }}">
<i class="bi bi-bar-chart-fill"></i>
{{ 'display.stats'|trans }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://openstreetmap.fr/contact/">{{ 'display.contact_humans'|trans }}</a>
<a class="nav-link" href="https://openstreetmap.fr/contact/">
<i class="bi bi-envelope-fill"></i>
{{ 'display.contact_humans'|trans }}</a>
</li>
</ul>
</div>

View file

@ -2,7 +2,7 @@ display:
title: "OSM Mon Commerce"
home: "Accueil"
stats: "Statistiques"
contact_humans: "Contacter des humains d'OSM France pour m'aider"
contact_humans: "Contacter les membres d'OSM France pour m'aider"
modify: "Modifier"
welcome: "Modifier ce lieu:"
modify_commerce: "Modifier votre commerce"