ui fix
This commit is contained in:
parent
19c3f87c06
commit
7366d07e49
@ -502,7 +502,7 @@
|
|||||||
<div class="info-label">{% trans "Generated Password" %}</div>
|
<div class="info-label">{% trans "Generated Password" %}</div>
|
||||||
<div class="password-container">
|
<div class="password-container">
|
||||||
<div class="password-value" id="password-value">{{ generated_password }}</div>
|
<div class="password-value" id="password-value">{{ generated_password }}</div>
|
||||||
<button type="button" class="btn btn-sm btn-outline-secondary ms-2" onclick="copyPassword()">
|
<button type="button" class="btn btn-sm btn-outline-secondary ms-2" onclick="copyPassword(this)">
|
||||||
<i class="fas fa-copy me-1"></i>
|
<i class="fas fa-copy me-1"></i>
|
||||||
{% trans "Copy" %}
|
{% trans "Copy" %}
|
||||||
</button>
|
</button>
|
||||||
@ -711,25 +711,46 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function copyPassword() {
|
function copyPassword(button) {
|
||||||
const passwordText = document.getElementById('password-value').textContent;
|
const passwordTextEl = document.getElementById('password-value');
|
||||||
navigator.clipboard.writeText(passwordText).then(function() {
|
if (!passwordTextEl) return;
|
||||||
// Show success feedback
|
const passwordText = passwordTextEl.textContent;
|
||||||
const button = event.target;
|
|
||||||
const originalText = button.innerHTML;
|
// Try Clipboard API first
|
||||||
button.innerHTML = '<i class="fas fa-check me-1"></i> {% trans "Copied!" %}';
|
const doFeedback = (btn) => {
|
||||||
button.classList.remove('btn-outline-secondary');
|
const originalHTML = btn.innerHTML;
|
||||||
button.classList.add('btn-success');
|
btn.innerHTML = '<i class="fas fa-check me-1"></i> {% trans "Copied!" %}';
|
||||||
|
btn.classList.remove('btn-outline-secondary');
|
||||||
// Reset after 2 seconds
|
btn.classList.add('btn-success');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
button.innerHTML = originalText;
|
btn.innerHTML = originalHTML;
|
||||||
button.classList.remove('btn-success');
|
btn.classList.remove('btn-success');
|
||||||
button.classList.add('btn-outline-secondary');
|
btn.classList.add('btn-outline-secondary');
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}).catch(function(err) {
|
};
|
||||||
console.error('Failed to copy password: ', err);
|
|
||||||
});
|
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||||
|
navigator.clipboard.writeText(passwordText).then(function() {
|
||||||
|
doFeedback(button);
|
||||||
|
}).catch(function(err) {
|
||||||
|
console.error('Failed to copy password via Clipboard API: ', err);
|
||||||
|
// fallback
|
||||||
|
const ta = document.createElement('textarea');
|
||||||
|
ta.value = passwordText;
|
||||||
|
document.body.appendChild(ta);
|
||||||
|
ta.select();
|
||||||
|
try { document.execCommand('copy'); doFeedback(button); } catch (e) { console.error('execCommand fallback failed', e); }
|
||||||
|
document.body.removeChild(ta);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// fallback for older browsers
|
||||||
|
const ta = document.createElement('textarea');
|
||||||
|
ta.value = passwordText;
|
||||||
|
document.body.appendChild(ta);
|
||||||
|
ta.select();
|
||||||
|
try { document.execCommand('copy'); doFeedback(button); } catch (e) { console.error('execCommand fallback failed', e); }
|
||||||
|
document.body.removeChild(ta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user