<div id="feedback-widget" class="position-fixed start-50 translate-middle-x bottom-0 mb-3" style="z-index: 1050;">
<div class="d-flex align-items-center gap-1">
<button type="button"
class="btn btn-feedback d-flex align-items-center gap-2 shadow-sm"
data-bs-toggle="modal"
data-bs-target="#feedbackModal"
id="feedback-open-btn">
<i class="fa-regular fa-message"></i>
<span>Feedback ?</span>
</button>
<button type="button"
class="btn btn-feedback btn-sm shadow-sm"
id="feedback-toggle-position"
title="Changer la position du bouton">
<i class="fa-solid fa-chevron-up" id="feedback-position-icon"></i>
</button>
</div>
</div>
<style>
.btn-feedback {
background-color: #e8f0fe;
border: 1px solid #c5d5fb;
color: #2e6be5;
font-weight: 600;
font-size: 0.875rem;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
transition: all 0.2s ease;
}
.btn-feedback:hover {
background-color: #d4e4fd;
border-color: #a8c4f9;
color: #1d4ed8;
}
.btn-feedback:focus {
box-shadow: 0 0 0 0.25rem rgba(46, 107, 229, 0.25);
}
.btn-feedback.btn-sm {
padding: 0.5rem 0.625rem;
}
#feedback-widget.position-top {
top: 0 !important;
bottom: auto !important;
margin-top: 1rem !important;
margin-bottom: 0 !important;
}
</style>
<script>
(function() {
'use strict';
var widget = document.getElementById('feedback-widget');
var toggleBtn = document.getElementById('feedback-toggle-position');
var icon = document.getElementById('feedback-position-icon');
var STORAGE_KEY = 'feedbackWidgetPosition';
function setPosition(position) {
if (position === 'top') {
widget.classList.remove('bottom-0', 'mb-3');
widget.classList.add('top-0', 'mt-3', 'position-top');
icon.classList.remove('fa-chevron-up');
icon.classList.add('fa-chevron-down');
} else {
widget.classList.remove('top-0', 'mt-3', 'position-top');
widget.classList.add('bottom-0', 'mb-3');
icon.classList.remove('fa-chevron-down');
icon.classList.add('fa-chevron-up');
}
try {
localStorage.setItem(STORAGE_KEY, position);
} catch (e) {
// localStorage non disponible
}
}
function getPosition() {
try {
return localStorage.getItem(STORAGE_KEY) || 'bottom';
} catch (e) {
return 'bottom';
}
}
// Initialisation
setPosition(getPosition());
// Gestion du clic sur le bouton de repositionnement
toggleBtn.addEventListener('click', function(e) {
e.stopPropagation();
var isBottom = widget.classList.contains('bottom-0');
setPosition(isBottom ? 'top' : 'bottom');
});
// Masquer le widget quand le modal est ouvert
var feedbackModal = document.getElementById('feedbackModal');
if (feedbackModal) {
feedbackModal.addEventListener('show.bs.modal', function() {
widget.style.display = 'none';
});
feedbackModal.addEventListener('hidden.bs.modal', function() {
widget.style.display = 'block';
});
}
})();
</script>