Files
newznab-tmux/resources/js/alpine/components/password-toggle.js
2026-02-10 12:04:43 +01:00

43 lines
1.6 KiB
JavaScript

/**
* Alpine.data('passwordToggle') - Toggle password field visibility
*/
import Alpine from '@alpinejs/csp';
Alpine.data('passwordToggle', () => ({
visible: false,
toggle() {
this.visible = !this.visible;
const field = this.$refs.field;
if (field) {
field.type = this.visible ? 'text' : 'password';
}
},
iconClass() {
return this.visible ? 'fa-eye-slash' : 'fa-eye';
}
}));
// Document-level delegation for .password-toggle-btn without x-data
document.querySelectorAll('.password-toggle-btn').forEach(function(btn) {
if (btn.closest('[x-data]')) return;
btn.addEventListener('click', function(e) {
e.preventDefault();
var fieldId = this.getAttribute('data-field-id');
if (!fieldId) return;
var field = document.getElementById(fieldId);
var icon = document.getElementById(fieldId + '-eye');
if (!field) return;
if (field.type === 'password') { field.type = 'text'; if (icon) { icon.classList.remove('fa-eye'); icon.classList.add('fa-eye-slash'); } }
else { field.type = 'password'; if (icon) { icon.classList.remove('fa-eye-slash'); icon.classList.add('fa-eye'); } }
});
});
window.togglePasswordVisibility = function(fieldId) {
var field = document.getElementById(fieldId);
var icon = document.getElementById(fieldId + '-eye');
if (!field) return;
if (field.type === 'password') { field.type = 'text'; if (icon) { icon.classList.remove('fa-eye'); icon.classList.add('fa-eye-slash'); } }
else { field.type = 'password'; if (icon) { icon.classList.remove('fa-eye-slash'); icon.classList.add('fa-eye'); } }
};