Ajout de plusieurs fichiers exemple pour le site web, correctif page membres, complétude doc.
This commit is contained in:
1 parent
30dd875bd9
commit
ed979fa96f
10 files changed
+1972
-38
No files matched your search
@@ -1,40 +1,63 @@
|
||||
# Module de gestion de matériels pour Paheko
|
||||
# Module de gestion de matériels et de réservations pour Paheko
|
||||
Le module original permet de gérer les matériels de l'association.
|
||||
La source et la documentation se trouve [ici](https://gitea.zaclys.com/lesanges/equipment).
|
||||
Merci à l'auteur pour ce superbe module !
|
||||
|
||||
Ce module permet de gérer les matériels de l'association: stock,
|
||||
entrées, sorties, classés par catégorie.
|
||||
|
||||
Un matériel peut entrer dans l'association :
|
||||
- temporairement (location, emprunt, ...)
|
||||
- définitivement (achat, ...)
|
||||
|
||||
Dans les deux cas, il est possible de lui associer une écriture de la
|
||||
compta ou un fichier.
|
||||
|
||||
Un matériel appartenant à l'association peut sortir :
|
||||
- temporairement (prêt, ...) : il est possible de lui associer un lieu
|
||||
de stockage ainsi qu'un membre dépositaire du matériel et une date
|
||||
de retour ; il peut ensuite revenir dans l'association.
|
||||
- définitivement (vente, ...) : il est possible de lui associer un
|
||||
membre bénéficiaire du matériel.
|
||||
|
||||
Il est possible de suivre les matériels prêtés ou loués et de savoir
|
||||
si la date de retour est proche ou dépassée.
|
||||
|
||||
Un matériel présent temporairement dans l'association peut être
|
||||
retourné à son propriétaire.
|
||||
|
||||
Un matériel dont il n'existe plus d'exemplaire en stock peut être archivé.
|
||||
|
||||
On peut lister l'ensemble des mouvements des matériels ou seulement
|
||||
ceux d'un matériel donné.
|
||||
|
||||
Il est possible de créer des catégories de matériels, des types
|
||||
d'entrées et sorties, des lieux de stockage.
|
||||
Ce **module** permet de gérer en plus des réservations.
|
||||
Les changements proposés par le module original sont répercutés fréquemment dans cette version.
|
||||
Dans la description du module sous Paheko, vous trouverez la version du module original et la version de ce module.
|
||||
[Télécharger ici](https://git.kaz.bzh/bountz/equipment_resa)
|
||||
|
||||
## Réservations de matériel
|
||||
Il est possible de réserver le matériel depuis le site web en mode anonyme
|
||||
ou depuis l'interface des membres. Les réservations doivent être validées par un administrateur.
|
||||
Réservation de matériel depuis le site web en mode anonyme ou depuis l'interface des membres.
|
||||
Les réservations doivent être validées par un administrateur.
|
||||
|
||||
## Fonctionnalités
|
||||
+ Réservation "_anonyme_" depuis le site web (rattachée à un membre par l'admin)
|
||||
+ Réservation par les membres connectés
|
||||
+ Convention de prêt/location
|
||||
+ Gestion des réservations par l'admin (acceptation, refus,...)
|
||||
+ Calendrier des réservations
|
||||
+ Ajout de champs personnalisés sur le matériel (ex: tarif de location)
|
||||
|
||||
### Roadmap
|
||||
+ Utiliser le module agenda associatif à la place du JS "fullcalendar"
|
||||
|
||||
## Installation
|
||||
|
||||
### Module principal
|
||||
Télécharger le module depuis le GIT et le décompresser dans un répertoire nommé "modules".
|
||||
Décompresser le ZIP dans le répertoire "modules" et déplacer le ZIP.
|
||||
A ce stade, vous devez avoir une arborescence comme suit : modules --> equipment_resa --> [fichiers]
|
||||
Compresser le répertoire "modules" en le nommant equipment_resa.zip par exemple.
|
||||
Aller dans l'interface d'admin Paheko, sous Configuration --> Extensions et tout en bas, cliquer sur le bouton **|importer un module| **
|
||||
Une fois le module chargé dans Paheko, activer le, puis aller dans sa configuration et cliquer sur l'onglet [Réservation].
|
||||
Activer la réservation en cochant la case : Activer les réservations
|
||||
Si vous avez le module d'origine de _Gestion des Matériels_, vous pouvez importer les données : Cliquer sur le bouton **|importer|** en bas.
|
||||
|
||||
### Installation des pages de réservation sur le site Web.
|
||||
Les fichiers suivants sont présents dans le code du module réservation sous le répertoire "_web_exemple" pour information/exemple.
|
||||
Cette partie est exclue du support puisqu'elle touche l'implémentation de la fonctionnalité sur votre site.
|
||||
Dans le code du module "Site web", importer les fichiers avec les noms suivants :
|
||||
- equipment.html
|
||||
- equipment_no_image.png
|
||||
- equipment_styles.css
|
||||
- global.js
|
||||
|
||||
Modifier ensuite les fichiers existants suivants :
|
||||
|
||||
- config.html (complet + modif)
|
||||
- contact.html (complet + modif)
|
||||
- _head.html (ne contient que la partie à ajouter)
|
||||
- _breadcrumbs.html (complet + modif)
|
||||
|
||||
### Configuration
|
||||
Site Web : (Configuration du site web) : Cocher "Accès aux réservations"
|
||||
|
||||
## Dépendances
|
||||
Site Web : (Configuration du site web) : Cocher "Formulaire de contact"
|
||||
|
||||
## Droits d'accès
|
||||
Le module est accessible uniquement pour les membres ayant au moins le
|
||||
droit d'écriture en gestion des membres.
|
||||
Admin : Le module est accessible uniquement pour les membres ayant au moins le droit d'écriture en gestion des membres.
|
||||
Membres connectés : Accès à la liste du matériel, au détail d'un matériel et à sa réservation.
|
||||
Visiteurs (Web) : Accès à la liste du matériel, au détail d'un matériel et à sa réservation.
|
||||
@@ -0,0 +1,20 @@
|
||||
{{if !$parent && !$custom}}
|
||||
{{:error message="Missing parent|custom parameters"}}
|
||||
{{/if}}
|
||||
|
||||
<nav class="breadcrumbs">
|
||||
<ul>
|
||||
<li><a href="{{$root_uri}}">Accueil</a></li>
|
||||
{{if $parent}}
|
||||
{{#breadcrumbs path=$parent}}
|
||||
<li><a href="{{$url}}">{{$title|remove_leading_number}}</a></li>
|
||||
{{/breadcrumbs}}
|
||||
{{/if}}
|
||||
{{if $custom}}
|
||||
{{#foreach from=$custom}}
|
||||
<li><a href="{{$_url}}">{{$_title|remove_leading_number}}</a></li>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -0,0 +1,7 @@
|
||||
{{* Bloc à positionner dans la partie <head> de la page *}}
|
||||
{{if $module.config.show_equipment !== false}}
|
||||
{{* Include JS et CSS pour le calendrier des réservations *}}
|
||||
{{:include file="/equipment/_web_calendar.html" title=$page.title|remove_leading_number}}
|
||||
<link rel="stylesheet" type="text/css" href="{{$root_uri}}equipment_styles.css?h={{$version_hash}}" media="all" />
|
||||
<script type="text/javascript" src="global.js?h={{$version_hash}}"></script>
|
||||
{{/if}}
|
||||
@@ -0,0 +1,179 @@
|
||||
{{:admin_header title="Configuration du site web"}}
|
||||
|
||||
{{#form on="save"}}
|
||||
{{:assign uri=null}}
|
||||
{{if $_POST.home_sticky_uri|trim}}
|
||||
{{:assign uri=$_POST.home_sticky_uri|trim|regexp_replace:'!^.*?([a-zA-Z0-9_-]+)$!':"$1"}}
|
||||
{{#pages uri=$uri}}
|
||||
{{else}}
|
||||
{{:error message="Cette page n'existe pas ou est en brouillon : %s"|args:$uri}}
|
||||
{{/pages}}
|
||||
{{/if}}
|
||||
|
||||
{{:assign var="checkboxes.show_search" value=null}}
|
||||
{{:assign var="checkboxes.show_hours" value=null}}
|
||||
{{:assign var="checkboxes.show_bookings" value=null}}
|
||||
{{:assign var="checkboxes.show_address" value=null}}
|
||||
{{:assign var="checkboxes.show_email" value=null}}
|
||||
{{:assign var="checkboxes.show_phone" value=null}}
|
||||
{{:assign var="checkboxes.show_marker" value=null}}
|
||||
{{:assign var="checkboxes.contact_form" value=null}}
|
||||
{{:assign var="checkboxes.show_login" value=null}}
|
||||
{{:assign var="checkboxes.show_equipment" value=null}}
|
||||
|
||||
{{#foreach from=$checkboxes key="name"}}
|
||||
{{:assign var="present" from="_POST.%s_present"|args:$name}}
|
||||
{{:assign var="value" from="_POST.%s"|args:$name}}
|
||||
{{if $present}}
|
||||
{{:assign var="checkboxes.%s"|args:$name value=$value|boolval}}
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
|
||||
{{:save key="config"
|
||||
color1=null
|
||||
color2=null
|
||||
hue1=$_POST.hue1|intval
|
||||
hue2=$_POST.hue2|intval
|
||||
layout=$_POST.layout|trim|or:null
|
||||
background=$_POST.background|trim|or:null
|
||||
show_search=$checkboxes.show_search
|
||||
show_hours=$checkboxes.show_hours
|
||||
show_bookings=$checkboxes.show_bookings
|
||||
show_address=$checkboxes.show_address
|
||||
show_email=$checkboxes.show_email
|
||||
show_phone=$checkboxes.show_phone
|
||||
show_marker=$checkboxes.show_marker
|
||||
contact_form=$checkboxes.contact_form
|
||||
show_login=$checkboxes.show_login
|
||||
show_equipment=$checkboxes.show_equipment
|
||||
home_sticky_uri=$uri|or:null
|
||||
}}
|
||||
{{:redirect to="?ok=1"}}
|
||||
{{/form}}
|
||||
|
||||
{{if $_GET.ok}}
|
||||
<p class="block confirm">Configuration enregistrée.</p>
|
||||
{{/if}}
|
||||
|
||||
{{:form_errors}}
|
||||
|
||||
<form method="post" action="">
|
||||
|
||||
{{:assign var="layouts"
|
||||
2col="Classique — 2 colonnes"
|
||||
1col="Classique — 1 colonne"
|
||||
wide="Large — 2 colonnes"
|
||||
}}
|
||||
|
||||
{{:assign var="backgrounds"
|
||||
gradient="Dégradé entre les deux couleurs"
|
||||
white_gradient="Dégradé couleur primaire — blanc"
|
||||
white="Blanc et couleur primaire"
|
||||
gray="Blanc et gris"
|
||||
all_white="Tout blanc"
|
||||
dark="Sombre"
|
||||
}}
|
||||
|
||||
<style type="text/css">
|
||||
#preview {
|
||||
width: 500px;
|
||||
height: 400px;
|
||||
overflow: hidden;
|
||||
float: right;
|
||||
margin: 1em;
|
||||
border: 2px solid #ccc;
|
||||
}
|
||||
iframe {
|
||||
border: none;
|
||||
transform: scale(0.5);
|
||||
-ms-transform-origin: 0 0;
|
||||
-moz-transform-origin: 0 0;
|
||||
-o-transform-origin: 0 0;
|
||||
-webkit-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
{{if $config.site_disabled}}
|
||||
<p class="block alert">Le site est actuellement désactivé.</p>
|
||||
{{else}}
|
||||
<div id="preview">
|
||||
<iframe src="{{$site_url}}?dezoom=1" width="1000" height="800" scrolling="no"></iframe>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{if $module.config.hue1 === null}}
|
||||
{{:assign color1=$module.config.color1|or:$config.color1|or:"#999999"|css_hex_extract_hsv}}
|
||||
{{:assign color2=$module.config.color2|or:$config.color2|or:"#333333"|css_hex_extract_hsv}}
|
||||
{{:assign var="module.config.hue1" from="color1.h"}}
|
||||
{{:assign var="module.config.hue2" from="color2.h"}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend>Configuration du site web</legend>
|
||||
<dl>
|
||||
{{:input type="select" name="layout" label="Disposition sur grand écran" required=true default="2col" options=$layouts help="Sur petit écran (mobile), la disposition reste sur une colonne" source=$module.config}}
|
||||
{{:input type="hue" name="hue1" label="Couleur primaire" required=false source=$module.config}}
|
||||
{{:input type="hue" name="hue2" label="Couleur secondaire" required=false source=$module.config}}
|
||||
{{:input type="select" name="background" options=$backgrounds label="Couleur de fond" required=true source=$module.config}}
|
||||
<dt>Éléments à afficher sur le site</dt>
|
||||
{{:input type="checkbox" name="show_login" value=1 label="Lien de connexion" source=$module.config default=1 help="Si coché, affiche un lien pour se connecter à la gestion de l'association."}}
|
||||
{{:input type="checkbox" name="show_equipment" value=1 label="Voir le matériel disponible" source=$module.config default=0}}
|
||||
{{:input type="checkbox" name="show_search" value=1 label="Formulaire de recherche" source=$module.config default=1}}
|
||||
{{#module name="openings"}}
|
||||
{{:input type="checkbox" name="show_hours" value=1 label="Horaires d'ouverture" source=$module.config default=1}}
|
||||
{{/module}}
|
||||
{{#module name="bookings"}}
|
||||
{{:input type="checkbox" name="show_bookings" value=1 label="Accès aux réservations" source=$module.config default=1}}
|
||||
{{/module}}
|
||||
{{if $config.org_full_address}}
|
||||
{{:input type="checkbox" name="show_address" value=1 label="Adresse physique" source=$module.config default=1}}
|
||||
{{:input type="checkbox" name="show_marker" value=1 label="Lien pour ouvrir l'adresse sur une carte" source=$module.config default=1}}
|
||||
{{/if}}
|
||||
{{if $config.org_phone}}
|
||||
{{:input type="checkbox" name="show_phone" value=1 label="Numéro de téléphone" source=$module.config default=1}}
|
||||
{{/if}}
|
||||
{{if $config.org_email}}
|
||||
{{:input type="checkbox" name="show_email" value=1 label="Adresse e-mail" source=$module.config default=1}}
|
||||
{{:input type="checkbox" name="contact_form" value=1 label="Formulaire de contact" source=$module.config default=0}}
|
||||
{{/if}}
|
||||
{{:input type="text" name="home_sticky_uri" label="Identifiant unique de la page à épingler en haut de la page d'accueil" source=$module.config help="En renseignant ici l'identifiant d'une page du site web, celle-ci restera toujours en premier sur la page d'accueil du site. C'est utile par exemple pour afficher une courte présentation de l'association en permanence."}}
|
||||
</dl>
|
||||
</fieldset>
|
||||
|
||||
<p class="submit">
|
||||
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
g.onload(() => {
|
||||
function updateColors() {
|
||||
var color1 = $('#f_hue1').value;
|
||||
var color2 = $('#f_hue2').value;
|
||||
var doc = $('#preview iframe')[0].contentWindow.document;
|
||||
doc.body.style = `--first-color: ${color1}; --second-color: ${color2};`;
|
||||
}
|
||||
|
||||
$('#f_layout').onchange = (e) => {
|
||||
var layout = e.target.value;
|
||||
var doc = $('#preview iframe')[0].contentWindow.document;
|
||||
doc.body.className = doc.body.className.replace(/\s*layout-\w+|$/, ' layout-' + layout);
|
||||
}
|
||||
|
||||
$('#f_background').onchange = (e) => {
|
||||
var bg = e.target.value;
|
||||
var doc = $('#preview iframe')[0].contentWindow.document;
|
||||
doc.body.className = doc.body.className.replace(/\s*bg-\w+|$/, ' bg-' + bg);
|
||||
}
|
||||
|
||||
$('#f_hue1').addEventListener('input', updateColors);
|
||||
$('#f_hue2').addEventListener('input', updateColors);
|
||||
});
|
||||
</script>
|
||||
|
||||
</form>
|
||||
|
||||
{{:admin_footer}}
|
||||
@@ -0,0 +1,70 @@
|
||||
{{if !$module.config.contact_form || !$config.org_email}}
|
||||
{{:redirect to="./"}}
|
||||
{{/if}}
|
||||
{{if $logged_user.id }}
|
||||
{{:assign user=$logged_user.nom email=$logged_user.email}}
|
||||
{{/if}}
|
||||
{{:assign var=sujets a="Question générale" b="Proposition de matériel" c="Problème sur le site" d="Réservation de matériel" e="Vélo" f="Autre"}}
|
||||
{{* Si demande de réservation de matériel NON propriété de l'association *}}
|
||||
{{if $_GET.fonc|trim === 'resa'}}
|
||||
{{:assign var=sujet value="d"}}
|
||||
{{* Charge le matériel *}}
|
||||
{{#load module="equipment" key=$_GET.key assign="equipment"}}
|
||||
{{:assign var=message value="Bonjour, je souhaite me renseigner pour la réservation de %s du __/__/__ au __/__/__ ."|args:$name}}
|
||||
{{/load}}
|
||||
{{elseif $_GET.fonc|trim === 'velo'}}
|
||||
{{:assign var=sujet value="e"}}
|
||||
{{#select id, modele FROM plugin_stock_velos WHERE id = :id; :id=$_GET.key }}
|
||||
{{:assign var=message value="Bonjour, je suis intéressé.e par le vélo %s n° %s ."|args:$modele:$id}}
|
||||
{{/select}}
|
||||
{{/if}}
|
||||
{{#form on="send"}}
|
||||
{{:captcha verify=true}}
|
||||
{{if $_POST.name|trim === ''}}
|
||||
{{:error message="Merci de renseigner un nom."}}
|
||||
{{elseif $_POST.name|regexp_match:'/https?:|www\./'}}
|
||||
{{:error message="Le nom ne peut pas comporter d'adresse web"}}
|
||||
{{elseif $_POST.email|regexp_match:'/https?:|www\./'}}
|
||||
{{:error message="L'adresse e-mail ne peut pas comporter d'adresse web"}}
|
||||
{{elseif $_POST.message|trim === ''}}
|
||||
{{:error message="Merci de renseigner un message."}}
|
||||
{{elseif !$_POST.email|trim === ''}}
|
||||
{{:error message="Merci d'indiquer votre adresse e-mail."}}
|
||||
{{elseif !$_POST.email|check_email}}
|
||||
{{:error message="L'adresse e-mail renseignée est invalide."}}
|
||||
{{/if}}
|
||||
{{if $_POST.subject|trim === ''}}
|
||||
{{:error message="Merci de choisir un sujet."}}
|
||||
{{else}}
|
||||
{{:assign var="sujet" from="sujets.%s"|args:$_POST.subject}}
|
||||
{{/if}}
|
||||
{{:assign body="Message de :\n%s\n%s\n\n---\n\n%s"|args:$_POST.name:$_POST.email:$_POST.message}}
|
||||
{{:mail to=$config.org_email subject=$sujet|trim body=$body replyto=$_POST.email|trim}}
|
||||
{{:redirect to="%s?sent=ok"|args:$request_url}}
|
||||
{{/form}}
|
||||
|
||||
{{:include file="./_head.html" title="Contact"}}
|
||||
|
||||
<article class="single">
|
||||
<h1>Contactez nous</h1>
|
||||
{{if $_GET.sent}}
|
||||
<p class="alert">Votre message a bien été transmis !</p>
|
||||
{{else}}
|
||||
<form method="post" action="">
|
||||
<fieldset>
|
||||
<legend>Renseignez ce formulaire pour nous envoyer un message</legend>
|
||||
{{:form_errors}}
|
||||
<dl>
|
||||
{{:input type="text" name="name" label="Votre nom" default=$user required=true}}
|
||||
{{:input type="email" name="email" label="Votre adresse e-mail" default=$email required=true}}
|
||||
{{:input type="select" name="subject" label="Sujet du message" options=$sujets default=$sujet required=true}}
|
||||
{{:input type="textarea" cols=40 rows=10 name="message" label="Message" default=$message required=true}}
|
||||
<dd class="captcha">{{:captcha html=true}}</dd>
|
||||
</dl>
|
||||
<p class="submit">{{:button type="submit" name="send" label="Envoyer"}}</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
{{/if}}
|
||||
</article>
|
||||
|
||||
{{:include file="./_foot.html"}}
|
||||
@@ -0,0 +1,55 @@
|
||||
{{* -*- brindille -*- *}}
|
||||
{{:assign var="page.title" value="Matériel à disposition"}}
|
||||
{{:assign var="page.path" value="./equipment.html"}}
|
||||
|
||||
{{if $_GET.fonc=="save_resa"}}
|
||||
{{** No header allowed to download the PDF *}}
|
||||
{{*:assign var=page.title value="Matériel réservé ! Voici votre convention de prêt/location."*}}
|
||||
{{else}}
|
||||
{{:include file="./_head.html" title=$page.title|remove_leading_number}}
|
||||
{{:assign var="custom." _title="🧰 Matériel" _url=$page.path}}
|
||||
{{if !$_GET.fonc || $_GET.fonc=="inv2" || $_GET.fonc=="inv3"}}
|
||||
{{:assign var="page" title="Matériel à disposition" path="./equipment.html"}}
|
||||
{{elseif $_GET.fonc=="voir"}}
|
||||
{{:assign var="page" title="Détails du matériel" path="./equipment.html"}}
|
||||
{{:assign var="custom." _title="🔎 Détails" _url="#"}}
|
||||
{{elseif $_GET.fonc=="resa" || $_GET.fonc=="confirm_resa"}}
|
||||
{{:assign var="page" title="Réservation du matériel" path="./equipment.html"}}
|
||||
{{:assign var="custom." _title="🗓️ Réservation" _url="#"}}
|
||||
{{/if}}
|
||||
{{:include file="./_breadcrumbs.html"}} {{* custom au lieu de parent car pas dans la base SQL *}}
|
||||
{{/if}}
|
||||
<h1>{{$page.title|remove_leading_number}}</h1>
|
||||
<p>Le matériel proposé ici provient soit de dons/achats et appartient à l'association soit de prêts ou mis à disposition pour la communauté.<br/>
|
||||
Dans le cas de matériel mis à disposition, celui-ci n'appartient pas à l'association : cette dernière va simplement vous mettre en relation avec la personne à qui il appartient.
|
||||
</p>
|
||||
|
||||
{{if $_GET.ok}}
|
||||
{{if $_GET.fonc == "confirm_resa" && !$_GET.rid }}
|
||||
<p class="block confirm">Réservation effectuée</p>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{if !$_GET.fonc}}
|
||||
{{:include file="/equipment/_web_inventory.html" parent=$page.path}}
|
||||
{{*elseif $_GET.fonc=="inv2"}}
|
||||
{{:include file="/equipment/_web_inventory2.html" parent=$page.path*}}
|
||||
{{elseif $_GET.fonc=="inv3"}}
|
||||
{{:include file="/equipment/_web_inventory3.html" parent=$page.path}}
|
||||
{{elseif $_GET.fonc=="voir"}}
|
||||
{{:include file="/equipment/_web_view.html" parent=$page.path}}
|
||||
{{elseif $_GET.fonc=="resa"}}
|
||||
{{:include file="/equipment/_web_resa.html" parent=$page.path}}
|
||||
{{elseif $_GET.fonc=="resadel"}}
|
||||
{{:include file="/equipment/_web_resadel.html" keep="_GET.keys" parent=$page.path}}
|
||||
{{elseif $_GET.fonc=="confirm_resa"}}
|
||||
{{if $_GET.ok}}
|
||||
{{:include file="/equipment/_web_contract.html" parent=$page.path}}
|
||||
{{/if}}
|
||||
{{elseif $_GET.fonc=="save_resa"}}
|
||||
{{:include file="/equipment/_web_saved_resa.html" parent=$page.path}}
|
||||
{{else}}
|
||||
{{:include file="/equipment/_web_inventory.html" parent=$page.path keep="cat_key,prop"}}
|
||||
{{/if}}
|
||||
|
||||
{{:include file="./_foot.html"}}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,377 @@
|
||||
:root {
|
||||
--gMainColor: 0, 99, 155;
|
||||
--gSecondColor: 7, 220, 98;
|
||||
--gTextColor: 0, 0, 0;
|
||||
}
|
||||
|
||||
.informations {
|
||||
margin-top : 0.5em;
|
||||
}
|
||||
|
||||
.informations dt::after {
|
||||
content: ' :';
|
||||
}
|
||||
|
||||
.informations dl.describe {
|
||||
border: 0px;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.informations dl.describe > dt {
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 200px;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
color: green;
|
||||
}
|
||||
|
||||
.informations dl.describe > dd {
|
||||
margin: 0 0 0 110px;
|
||||
padding: 0 0 0.5em 0;;
|
||||
}
|
||||
|
||||
.nombre {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.resaactionbutton {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
top: 15%;
|
||||
right: 05%;
|
||||
}
|
||||
|
||||
/* Image style leboncoin */
|
||||
figure.leboncoin {
|
||||
border: thin silver solid;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
padding: 5px;
|
||||
max-width: 170px;
|
||||
height: 261px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
img.leboncoin {
|
||||
max-width: 150px;
|
||||
max-height: 150px;
|
||||
}
|
||||
|
||||
figcaption.leboncoin {
|
||||
background-color: #dce7dc;
|
||||
color: white;
|
||||
font: italic smaller sans-serif;
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
height: 179px;
|
||||
}
|
||||
|
||||
/** Image vignette */
|
||||
|
||||
/* Styles par défaut (mobile first) */
|
||||
.imagemateriel {
|
||||
display: block;
|
||||
object-fit: cover;
|
||||
width: 100%; /* L'image prendra 100% de la largeur de son conteneur */
|
||||
height: auto; /* Maintient le ratio */
|
||||
max-width: 250px;
|
||||
max-height: 150px;
|
||||
}
|
||||
/* Pour les écrans de plus de 768px (tablettes/ordinateurs) */
|
||||
@media (min-width: 768px) {
|
||||
.imagemateriel {
|
||||
display: block;
|
||||
object-fit: cover;
|
||||
width: 100%; /* L'image prendra 100% de la largeur de son conteneur */
|
||||
height: auto; /* Maintient le ratio */
|
||||
max-width: 670px;
|
||||
max-height: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Datepicker */
|
||||
dialog.datepicker {
|
||||
user-select: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
padding: .3rem;
|
||||
border: none;
|
||||
box-shadow: 0 0 5px #000;
|
||||
border-radius: .5rem;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
/* Bouton Link */
|
||||
nav.tabs aside {
|
||||
float: right;
|
||||
max-width: 50%;
|
||||
text-align: right;
|
||||
clear: right;
|
||||
margin-top: .5em;
|
||||
}
|
||||
|
||||
.main.icn-btn {
|
||||
padding: 13px 20px;
|
||||
display: inline-block;
|
||||
}
|
||||
.icn-btn {
|
||||
appearance: none;
|
||||
backface-visibility: hidden;
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
border-radius: 5px;
|
||||
border-style: none;
|
||||
box-shadow: rgb(0, 148, 133) 0 4px 9px;
|
||||
box-sizing: border-box;
|
||||
color: #4cb130;
|
||||
cursor: pointer;
|
||||
font-family: Inter,-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
letter-spacing: normal;
|
||||
line-height: 1.5;
|
||||
outline: none;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition: all .3s;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
touch-action: manipulation;
|
||||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
|
||||
a:visited {
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
.icn-btn:hover {
|
||||
background-color: #1e8449;
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
transition-duration: .35s;
|
||||
}
|
||||
|
||||
.icn-btn:active {
|
||||
transform: translateY(2px);
|
||||
transition-duration: .35s;
|
||||
}
|
||||
|
||||
.icn-btn:hover {
|
||||
color: #dfadad;
|
||||
box-shadow: rgba(39, 174, 96, .2) 0 6px 12px;
|
||||
}
|
||||
|
||||
/* Datepicker button (.main[data-icon]:after, [data-icon].right:after) */
|
||||
.datepicker.icn-btn[data-icon]:before {
|
||||
display: inline-block;
|
||||
font-family: "paheko", sans-serif;
|
||||
text-shadow: 1px 1px 1px var(--gLightBorderColor);
|
||||
font-size: 1.2em;
|
||||
line-height: .8em;
|
||||
vertical-align: middle;
|
||||
content: attr(data-icon);
|
||||
font-weight: normal;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/** Table.list */
|
||||
|
||||
.list{width:100%;border-collapse:collapse}
|
||||
.list td,.list th {padding:12px 15px;border:1px solid #ddd;text-align:center;font-size:16px}
|
||||
.list th {background-color:rgba(var(--gSecondColor), 0.5); color:rgb(var(--gTextColor));}
|
||||
.list tbody tr:nth-child(even) {background-color:rgba(var(--gSecondColor), 0.2);}
|
||||
@media (max-width:768px){
|
||||
.list thead {display:none}
|
||||
.list,.list tbody,.list tr, .list td {display:block;width:100%}
|
||||
.list tr {margin-bottom:15px}
|
||||
.list td {padding-left:50%;text-align:left; position:relative}
|
||||
.list td::before{content:attr(data-label); position:absolute;left:0;width:50%;padding-left:15px;font-size:15px;font-weight:bold;text-align:left}
|
||||
}
|
||||
|
||||
/** Table Pagination */
|
||||
.pagination {
|
||||
clear: both;
|
||||
list-style-type: none;
|
||||
padding: 0.4em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pagination li {
|
||||
display: inline-block;
|
||||
margin: 0 0.3em;
|
||||
}
|
||||
|
||||
.pagination li.current {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.pagination li a {
|
||||
color: rgb(var(--gTextColor));
|
||||
}
|
||||
|
||||
.pagination li button {
|
||||
color: rgb(var(--gTextColor));
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
box-shadow: none;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/** Calendar */
|
||||
|
||||
/* Base mobile styles (no media query needed) */
|
||||
#calendar {
|
||||
display: none; /* Utiliser !important peut être nécessaire ici */
|
||||
}
|
||||
#calendar_light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Tablet and up */
|
||||
@media screen and (min-width: 768px) {
|
||||
#calendar {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
max-width: 800px;
|
||||
margin: 10px auto;
|
||||
}
|
||||
|
||||
#calendar_light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
/* Desktop and up
|
||||
@media screen and (min-width: 1024px) {
|
||||
|
||||
}*/
|
||||
|
||||
/** Dropdown NEW */
|
||||
/**
|
||||
* Dropdown, eg. interactive <select>
|
||||
*/
|
||||
nav.dropdown {
|
||||
position: relative;
|
||||
height: 2.3rem;
|
||||
width: 20em;
|
||||
border: 1px solid rgb(var(--gMainColor));
|
||||
border-radius: .25rem;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
nav.dropdown ul {
|
||||
background-color: rgb(var(--gBgColor));
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
position: absolute;
|
||||
border-radius: .5em;
|
||||
}
|
||||
|
||||
nav.dropdown ul::after {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 1.5em;
|
||||
height: 1.5em;
|
||||
font-size: 1.5em;
|
||||
content: "↓";
|
||||
font-family: "paheko";
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav.dropdown li {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html.js nav.dropdown:not(.open) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav.dropdown li.selected, html.nojs nav.dropdown:hover li, nav.dropdown.open li {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html.js nav.dropdown:not(.open) li a {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
nav.dropdown li > a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
padding: .4rem .6rem;
|
||||
text-decoration: none;
|
||||
height: 1.5em;
|
||||
color: unset;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav.dropdown li a strong {
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
nav.dropdown li a small {
|
||||
color: var(--gBorderColor);
|
||||
text-align: right;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
nav.dropdown li.label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
nav.dropdown.open {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
nav.dropdown.open li:nth-child(even) a {
|
||||
background: rgba(var(--gSecondColor), 0.2);
|
||||
}
|
||||
|
||||
nav.dropdown.open ul {
|
||||
box-shadow: 0 0 5px .2rem rgba(var(--gMainColor), 0.5);
|
||||
border-radius: .25rem;
|
||||
}
|
||||
|
||||
nav.dropdown.open .selected a {
|
||||
box-shadow: 0 0 5px .2rem rgba(var(--gMainColor), 0.5);
|
||||
color: rgb(var(--gHoverLinkColor));
|
||||
}
|
||||
|
||||
nav.dropdown.open li a strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
nav.dropdown.open li a:hover {
|
||||
background: rgba(var(--gMainColor), 0.2);
|
||||
}
|
||||
|
||||
nav.dropdown li a > span {
|
||||
width: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media handheld, screen and (max-width:981px) {
|
||||
nav.dropdown.open li.default {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav.home ul {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+3
-3
@@ -15,7 +15,7 @@
|
||||
{{* Reservations *}}
|
||||
{{if $module.config.resa_active == true}}
|
||||
{{if !$_GET.fonc}}
|
||||
{{:include file="./_inventory.html"}}
|
||||
{{:include file="./_resa_inventory.html" keep="_GET.prop"}}
|
||||
{{elseif $_GET.fonc=="voir"}}
|
||||
{{:include file="./_web_calendar.html" title=$page.title|remove_leading_number}}
|
||||
{{:include file="./_web_view.html" parent=$page.path}}
|
||||
@@ -27,8 +27,8 @@
|
||||
{{/if}}
|
||||
{{elseif $_GET.fonc=="save_resa"}}
|
||||
{{:include file="./_web_saved_resa.html" parent=$page.path}}
|
||||
{{else}}
|
||||
{{:include file="./_inventory.html" parent=$page.path keep="cat_key,prop"}}
|
||||
{{*else}}
|
||||
{{:include file="./_inventory.html" parent=$page.path keep="cat_key,prop"*}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
|
||||
Reference in new issue
Block a user