// DOM Elements
const form = document.getElementById('wifi-form');
const wifiNameInput = document.getElementById('wifi-name');
const wifiPasswordInput = document.getElementById('wifi-password');
const encryptionSelect = document.getElementById('encryption-type');
const generateBtn = document.getElementById('generate-btn');
const copyBtn = document.getElementById('copy-btn');
const downloadBtn = document.getElementById('download-btn');
const clearBtn = document.getElementById('clear-btn');
const qrContainer = document.getElementById('qr-container');
const qrWrapper = document.getElementById('qr-wrapper');
const loading = document.getElementById('loading');
const credentialsPreview = document.getElementById('credentials-preview');
const togglePasswordBtn = document.getElementById('toggle-password');
const wifiNameError = document.getElementById('wifi-name-error');
const wifiPasswordError = document.getElementById('wifi-password-error');
// Event Listeners
form.addEventListener('submit', (e) => {
e.preventDefault();
generateQRCode();
});
wifiNameInput.addEventListener('input', validateForm);
wifiPasswordInput.addEventListener('input', validateForm);
encryptionSelect.addEventListener('change', validateForm);
copyBtn.addEventListener('click', copyCredentials);
downloadBtn.addEventListener('click', downloadQRCode);
clearBtn.addEventListener('click', clearForm);
togglePasswordBtn.addEventListener('click', togglePasswordVisibility);
// Form Validation
function validateForm() {
const ssid = wifiNameInput.value.trim();
const password = wifiPasswordInput.value.trim();
const encryption = encryptionSelect.value;
let isValid = ssid !== '';
wifiNameError.textContent = ssid ? '' : 'WiFi name is required';
wifiPasswordError.textContent = '';
if (encryption !== 'None' && !password) {
wifiPasswordError.textContent = 'Password is required for this encryption';
isValid = false;
}
generateBtn.disabled = !isValid;
copyBtn.disabled = !isValid;
}
// Generate QR Code
function generateQRCode() {
const ssid = wifiNameInput.value.trim();
const password = wifiPasswordInput.value.trim();
const encryption = encryptionSelect.value;
if (!ssid) return;
const qrText = `WIFI:T:${encryption};S:${ssid};P:${password};;`;
qrContainer.innerHTML = ''; // Clear previous content
qrContainer.appendChild(loading); // Re-append loading
qrContainer.appendChild(qrWrapper); // Re-append wrapper
loading.classList.remove('hidden');
qrWrapper.classList.add('hidden');
setTimeout(() => {
const qr = new QRious({
element: document.getElementById('qr-code'),
value: qrText,
size: 200,
foreground: '#14b8a6', // Teal color
background: '#ffffff',
});
loading.classList.add('hidden');
qrWrapper.classList.remove('hidden');
qrWrapper.classList.add('visible');
downloadBtn.disabled = false;
// Update credentials preview
credentialsPreview.innerHTML = `
SSID: ${ssid}
Password: ${password || 'None'}
Encryption: ${encryption}
`;
}, 500); // Simulate loading
}
// Copy Credentials
function copyCredentials() {
const ssid = wifiNameInput.value.trim();
const password = wifiPasswordInput.value.trim();
const encryption = encryptionSelect.value;
if (!ssid) {
alert('Please enter WiFi name (SSID)!');
return;
}
const text = `SSID: ${ssid}\nPassword: ${password || 'None'}\nEncryption: ${encryption}`;
navigator.clipboard.writeText(text).then(() => {
alert('WiFi credentials copied to clipboard!');
});
}
// Download QR Code
function downloadQRCode() {
const qrCanvas = qrWrapper.querySelector('canvas');
if (!qrCanvas) {
alert('Generate a QR code first!');
return;
}
const link = document.createElement('a');
link.href = qrCanvas.toDataURL();
link.download = 'wifi-qrcode.png';
link.click();
}
// Clear Form
function clearForm() {
form.reset();
qrContainer.innerHTML = '';
qrContainer.appendChild(loading);
qrContainer.appendChild(qrWrapper);
credentialsPreview.innerHTML = '';
loading.classList.add('hidden');
qrWrapper.classList.add('hidden');
generateBtn.disabled = true;
copyBtn.disabled = true;
downloadBtn.disabled = true;
wifiNameError.textContent = '';
wifiPasswordError.textContent = '';
}
// Toggle Password Visibility
function togglePasswordVisibility() {
const type = wifiPasswordInput.type === 'password' ? 'text' : 'password';
wifiPasswordInput.type = type;
togglePasswordBtn.textContent = type === 'password' ? '👁️' : '🙈';
}