Compare commits

...

11 Commits
v1.0 ... master

Author SHA1 Message Date
Alexandre MOTTIER
d2dc7b43ca v2.3 - Action requise
Ajout d'une fonctionnalité "Action requise" au lieu de "Action souhaitée".
2025-03-27 08:55:49 +01:00
Alexandre MOTTIER
eb53d24e23 v2.2 - Aucune réponse requise 2025-03-21 14:20:00 +01:00
Alexandre MOTTIER
b6cdfc90bc v2.1 - Réalignement gauche & suppression saut de ligne 2025-03-21 09:26:40 +01:00
Alexandre MOTTIER
1bbd411e1c v2.0 - A votre convenance 2025-03-20 21:24:13 +01:00
root
bc5b76eb9c -bandeau +bannière 2025-03-20 20:07:05 +01:00
Alexandre MOTTIER
43fe1dc8e1 Actualiser README.md 2025-03-19 11:54:17 +01:00
Alexandre MOTTIER
b9123328f3 Actualiser README.md 2025-03-19 11:52:15 +01:00
Alexandre MOTTIER
d91632f0b4 v1.1.2 - Lien téléchargement 2025-03-19 11:50:27 +01:00
Alexandre MOTTIER
65eb1a470d MàJ lien téléchargement
Changement du lien de téléchargement
2025-03-19 11:48:30 +01:00
Alexandre MOTTIER
ab79b8953f Renommage repliq.html
Renommage de mailbanner.html en repliq.html
2025-03-19 11:46:17 +01:00
Alexandre MOTTIER
372a8d7034 v1.1 - Alignement gauche
Alignement du message à gauche au lieu du centre lors du collage.
2025-03-19 08:58:26 +01:00
3 changed files with 53 additions and 34 deletions

0
LICENSE Normal file → Executable file
View File

6
README.md Normal file → Executable file
View File

@ -1,10 +1,10 @@
# RépliQ # RépliQ
📩 **Clarifiez vos attentes dans vos emails avec un bandeau intelligent** 📩 **Clarifiez vos attentes dans vos emails avec une bannière intelligente**
**RépliQ** est un outil simple et efficace permettant dindiquer clairement **les attentes de réponse ou daction** dans un email. **RépliQ** est un outil simple et efficace permettant dindiquer clairement **les attentes de réponse ou daction** dans un email.
Grâce à une interface légère et intuitive, **générez un bandeau coloré** en fonction du degré durgence et du type de réponse attendu (**action, lecture, réponse**). Grâce à une interface légère et intuitive, **générez une bannière colorée** en fonction du degré durgence et du type de réaction attendue (**action, lecture, réponse**).
[Télécharger RépliQ dès maintenant](https://forge.am-networks.fr/am/RepliQ/releases) [Télécharger RépliQ dès maintenant](https://forge.alexandremottier.fr/am/RepliQ/releases)
## ✅ Pourquoi utiliser RépliQ ? ## ✅ Pourquoi utiliser RépliQ ?
- **Gagnez en clarté** : indiquez une échéance sans ambiguïté. - **Gagnez en clarté** : indiquez une échéance sans ambiguïté.

View File

@ -18,7 +18,7 @@
display: inline-block; display: inline-block;
width: auto; width: auto;
min-width: 250px; min-width: 250px;
text-align: center; text-align: left;
} }
.output-container { .output-container {
margin-top: 20px; margin-top: 20px;
@ -46,15 +46,22 @@
<body> <body>
<h2>RépliQ - Générateur de bannière e-mail</h2> <h2>RépliQ - Générateur de bannière e-mail</h2>
<label for="action">Demander une :</label> <label for="action">Demander une :</label>
<select id="action"> <select id="action" onchange="toggleOptions()">
<option value="Lecture">Lecture</option> <option value="Réponse">Réponse</option>
<option value="Action">Action</option> <option value="Action">Action</option>
<option value="Réponse">Réponse</option> <option value="Lecture">Lecture</option>
</select> </select>
<br><br> <br><br>
<label for="date">Date limite :</label> <label for="date">Date limite :</label>
<input type="date" id="date"> <input type="date" id="date">
<br><br> <br><br>
<div id="convenienceOption" style="display: none;">
<input type="checkbox" id="convenience"> À votre convenance
</div>
<div id="requiredOption" style="display: none;">
<input type="checkbox" id="required"> Requise (au lieu de "souhaitée")
</div>
<br><br>
<button onclick="generateBanner()">Générer</button> <button onclick="generateBanner()">Générer</button>
<button onclick="setASAP()">ASAP</button> <button onclick="setASAP()">ASAP</button>
@ -66,67 +73,79 @@
<div id="hiddenContainer"></div> <div id="hiddenContainer"></div>
<script> <script>
function toggleOptions() {
const action = document.getElementById("action").value;
document.getElementById("convenienceOption").style.display = action === "Lecture" ? "block" : "none";
document.getElementById("requiredOption").style.display = action === "Action" ? "block" : "none";
document.getElementById("convenience").checked = false;
document.getElementById("required").checked = false;
}
function generateBanner() { function generateBanner() {
const action = document.getElementById("action").value; const action = document.getElementById("action").value;
const dateInput = document.getElementById("date").value; const dateInput = document.getElementById("date").value;
const convenienceChecked = document.getElementById("convenience").checked;
const requiredChecked = document.getElementById("required").checked;
const resultDiv = document.getElementById("result"); const resultDiv = document.getElementById("result");
const copyButton = document.getElementById("copyButton"); const copyButton = document.getElementById("copyButton");
const hiddenContainer = document.getElementById("hiddenContainer"); const hiddenContainer = document.getElementById("hiddenContainer");
if (!dateInput) { if (!dateInput && !convenienceChecked) {
alert("Veuillez sélectionner une date ou utiliser le bouton ASAP."); alert("Veuillez sélectionner une date ou cocher 'À votre convenance'.");
return; return;
} }
const selectedDate = new Date(dateInput); let message = "";
const formattedDate = selectedDate.toLocaleDateString("fr-FR");
const today = new Date();
const diffTime = selectedDate - today;
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
let bgColor = "#A8E6A3"; let bgColor = "#A8E6A3";
let textColor = "#206A1E"; let textColor = "#206A1E";
let message = `${action} souhaitée avant le ${formattedDate}.`;
if (diffDays <= 3) { if (convenienceChecked) {
bgColor = "#FFD580"; message = "Lecture à votre convenance. Aucune réponse requise.";
textColor = "#A65E00"; } else {
const selectedDate = new Date(dateInput);
const formattedDate = selectedDate.toLocaleDateString("fr-FR");
const today = new Date();
const diffTime = selectedDate - today;
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
let verb = requiredChecked ? "requise" : "souhaitée";
message = `${action} ${verb} avant le ${formattedDate}.`;
if (diffDays <= 3) {
bgColor = "#FFD580";
textColor = "#A65E00";
}
} }
if (action === "Lecture") { if (action === "Lecture" && !convenienceChecked) {
message += "<br>Inutile de répondre."; message += " Aucune réponse requise.";
} }
resultDiv.style.backgroundColor = bgColor; resultDiv.style.backgroundColor = bgColor;
resultDiv.style.color = textColor; resultDiv.style.color = textColor;
resultDiv.innerHTML = message; resultDiv.textContent = message;
resultDiv.style.display = "block"; resultDiv.style.display = "block";
copyButton.style.display = "inline-block"; copyButton.style.display = "inline-block";
// Mettre le HTML formaté dans un conteneur caché hiddenContainer.innerHTML = `<div style='background-color: ${bgColor}; color: ${textColor}; padding: 10px; font-weight: bold; border-radius: 5px; display: inline-block; text-align: left;'>${message}</div>`;
hiddenContainer.innerHTML = `<div style='background-color: ${bgColor}; color: ${textColor}; padding: 10px; font-weight: bold; border-radius: 5px; display: inline-block; text-align: center;'>${message}</div>`;
} }
function setASAP() { function setASAP() {
const action = document.getElementById("action").value; const action = document.getElementById("action").value;
const requiredChecked = document.getElementById("required").checked;
const verb = requiredChecked ? "requise" : "souhaitée";
const resultDiv = document.getElementById("result"); const resultDiv = document.getElementById("result");
const copyButton = document.getElementById("copyButton"); const copyButton = document.getElementById("copyButton");
const hiddenContainer = document.getElementById("hiddenContainer"); const hiddenContainer = document.getElementById("hiddenContainer");
resultDiv.style.backgroundColor = "#FFA8A8"; resultDiv.style.backgroundColor = "#FFA8A8";
resultDiv.style.color = "#8B0000"; resultDiv.style.color = "#8B0000";
let message = `${action} souhaitée dès que possible.`; resultDiv.textContent = `${action} ${verb} dès que possible`;
if (action === "Lecture") {
message += "<br>Inutile de répondre.";
}
resultDiv.innerHTML = message;
resultDiv.style.display = "block"; resultDiv.style.display = "block";
copyButton.style.display = "inline-block"; copyButton.style.display = "inline-block";
// Mettre le HTML formaté dans un conteneur caché hiddenContainer.innerHTML = `<div style='background-color: #FFA8A8; color: #8B0000; padding: 10px; font-weight: bold; border-radius: 5px; display: inline-block; text-align: left;'>${action} ${verb} dès que possible</div>`;
hiddenContainer.innerHTML = `<div style='background-color: #FFA8A8; color: #8B0000; padding: 10px; font-weight: bold; border-radius: 5px; display: inline-block; text-align: center;'>${message}</div>`;
} }
function copyFormattedBanner() { function copyFormattedBanner() {
@ -141,4 +160,4 @@
} }
</script> </script>
</body> </body>
</html> </html>