document.addEventListener('DOMContentLoaded', function() {
const ajaxUrl = myanas_admin_vars.ajax_url;
const nonceAct = myanas_admin_vars.nonce_actions;
const nonceMark = myanas_admin_vars.nonce_mark_all;
// Search
const searchInput = document.getElementById('myanasSearchInput');
if (searchInput) {
searchInput.addEventListener('keyup', function() {
let val = this.value.toLowerCase();
let visible = 0;
document.querySelectorAll('.contact-data-card').forEach(card => {
let name = card.querySelector('.raw-name')?.innerText.toLowerCase() || '';
let email = card.querySelector('.raw-email')?.innerText.toLowerCase() || '';
let phone = card.querySelector('.raw-phone')?.innerText.toLowerCase() || '';
let show = name.includes(val) || email.includes(val) || phone.includes(val);
card.style.display = show ? 'flex' : 'none';
if (show) visible++;
});
document.getElementById('visibleCount').innerText = visible;
});
}
// View Modal
document.querySelectorAll('.view-card-details').forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
let card = this.closest('.contact-data-card');
if (!card) return;
document.getElementById('modalViewName').innerHTML = card.querySelector('.raw-name').innerHTML;
document.getElementById('modalViewEmail').innerHTML = card.querySelector('.raw-email').innerHTML;
document.getElementById('modalViewPhone').innerHTML = card.querySelector('.raw-phone').innerHTML;
document.getElementById('modalViewDate').innerHTML = card.querySelector('.raw-date').innerHTML;
document.getElementById('modalViewMsg').innerHTML = card.querySelector('.raw-msg').innerHTML;
document.getElementById('viewDetailsModal').classList.add('active');
let badge = card.querySelector('.status-badge');
if (badge && badge.classList.contains('unread')) {
let id = card.getAttribute('data-id');
fetch(ajaxUrl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `action=update_contact_status&contact_id=${id}&status=read&nonce=${nonceAct}`
}).then(r => r.json()).then(data => {
if (data.success) {
badge.classList.remove('unread');
badge.classList.add('read');
badge.innerText = 'Read';
}
});
}
});
});
document.getElementById('closeViewModalBtn')?.addEventListener('click', function() {
document.getElementById('viewDetailsModal').classList.remove('active');
});
document.getElementById('viewDetailsModal')?.addEventListener('click', function(e) {
if (e.target === this) this.classList.remove('active');
});
// Copy
document.querySelectorAll('.copy-card').forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
let card = this.closest('.contact-data-card');
if (!card) return;
let text = `Name: ${card.querySelector('.raw-name')?.innerText}\nEmail: ${card.querySelector('.raw-email')?.innerText}\nPhone: ${card.querySelector('.raw-phone')?.innerText}\nDate: ${card.querySelector('.raw-date')?.innerText}\nMessage: ${card.querySelector('.raw-msg')?.innerText}`;
navigator.clipboard.writeText(text);
let orig = this.innerHTML;
this.innerHTML = '';
setTimeout(() => { this.innerHTML = orig; }, 1200);
});
});
// Delete
document.querySelectorAll('.delete-card').forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
let card = this.closest('.contact-data-card');
if (!card || !confirm('Delete this contact?')) return;
let id = card.getAttribute('data-id');
fetch(ajaxUrl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `action=delete_contact&contact_id=${id}&nonce=${nonceAct}`
}).then(r => r.json()).then(data => {
if (data.success) card.remove();
});
});
});
// Export Modal
let activeCardForExport = null;
document.querySelectorAll('.export-card').forEach(btn => {
btn.addEventListener('click', function(e) {
e.preventDefault();
activeCardForExport = this.closest('.contact-data-card');
document.getElementById('exportModal').classList.add('active');
});
});
function getCardData(card) {
if (!card) return null;
return {
name: card.querySelector('.raw-name')?.innerText || '',
email: card.querySelector('.raw-email')?.innerText || '',
phone: card.querySelector('.raw-phone')?.innerText || '',
date: card.querySelector('.raw-date')?.innerText || '',
rawDate: card.querySelector('.raw-date')?.getAttribute('data-raw') || '',
msg: card.querySelector('.raw-msg')?.innerText || ''
};
}
function downloadCSV(content, filename) {
let blob = new Blob([content], {type: 'text/csv;charset=utf-8;'});
let link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename;
link.click();
URL.revokeObjectURL(link.href);
}
function closeExportModal() {
document.getElementById('exportModal').classList.remove('active');
let dateInput = document.getElementById('exportDateInput');
dateInput.value = '';
dateInput.classList.remove('show-input');
document.getElementById('exportDateConfirm').style.display = 'none';
activeCardForExport = null;
}
document.getElementById('closeExportModalBtn')?.addEventListener('click', closeExportModal);
document.getElementById('exportModal')?.addEventListener('click', function(e) {
if (e.target === this) closeExportModal();
});
document.getElementById('exportThisBtn')?.addEventListener('click', () => {
let d = getCardData(activeCardForExport);
if (!d) return;
downloadCSV(`Name,Email,Phone,Date,Message\n"${d.name}","${d.email}","${d.phone}","${d.date}","${d.msg}"`, `contact_${d.name.replace(/\s/g,'_')}.csv`);
closeExportModal();
});
document.getElementById('exportAllBtnModal')?.addEventListener('click', () => {
let csv = "Name,Email,Phone,Message,Status,Date\n";
document.querySelectorAll('.contact-data-card').forEach(card => {
if (card.style.display !== 'none') {
let d = getCardData(card);
if (d) csv += `"${d.name}","${d.email}","${d.phone}","${d.msg}","${card.dataset.status}","${d.date}"\n`;
}
});
downloadCSV(csv, 'all_contacts.csv');
closeExportModal();
});
let dateInput = document.getElementById('exportDateInput');
let dateConfirm = document.getElementById('exportDateConfirm');
document.getElementById('exportByDateBtnModal')?.addEventListener('click', () => {
dateInput.classList.toggle('show-input');
if (dateInput.classList.contains('show-input')) {
dateConfirm.style.display = 'block';
} else {
dateInput.value = '';
dateConfirm.style.display = 'none';
}
});
dateConfirm?.addEventListener('click', () => {
let selected = dateInput.value;
if (!selected) return;
let csv = "Name,Email,Phone,Message,Status,Date\n";
let found = false;
document.querySelectorAll('.contact-data-card').forEach(card => {
let d = getCardData(card);
if (d && d.rawDate && d.rawDate.split(' ')[0] === selected) {
csv += `"${d.name}","${d.email}","${d.phone}","${d.msg}","${card.dataset.status}","${d.date}"\n`;
found = true;
}
});
if (found) downloadCSV(csv, `contacts_${selected}.csv`);
closeExportModal();
});
document.getElementById('topExportAllBtn')?.addEventListener('click', (e) => {
e.preventDefault();
document.getElementById('exportAllBtnModal')?.click();
});
// Mark All Read
document.getElementById('markAllReadBtn')?.addEventListener('click', (e) => {
e.preventDefault();
fetch(ajaxUrl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `action=mark_all_read_on_visit&nonce=${nonceMark}`
}).then(() => {
document.querySelectorAll('.status-badge.unread').forEach(b => {
b.classList.remove('unread');
b.classList.add('read');
b.innerText = 'Read';
});
});
});
// Status Badge Toggle
document.querySelectorAll('.status-badge').forEach(badge => {
badge.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
let card = this.closest('.contact-data-card');
if (!card) return;
let id = card.getAttribute('data-id');
let newStatus = this.classList.contains('read') ? 'unread' : 'read';
fetch(ajaxUrl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `action=update_contact_status&contact_id=${id}&status=${newStatus}&nonce=${nonceAct}`
}).then(r => r.json()).then(data => {
if (data.success) {
this.classList.remove('read', 'unread');
this.classList.add(newStatus);
this.innerText = newStatus === 'read' ? 'Read' : 'Unread';
card.setAttribute('data-status', newStatus);
}
});
});
});
// ========== IMPORT FUNCTIONALITY ==========
const importBtn = document.getElementById('topImportBtn');
const importModal = document.getElementById('importModal');
const closeImportBtn = document.getElementById('closeImportModalBtn');
const importForm = document.getElementById('importForm');
const importSubmitBtn = document.getElementById('importSubmitBtn');
const importProgress = document.getElementById('importProgress');
const importProgressBar = document.getElementById('importProgressBar');
const importStatus = document.getElementById('importStatus');
if (importBtn) {
importBtn.addEventListener('click', () => {
importModal.classList.add('active');
});
}
if (closeImportBtn) {
closeImportBtn.addEventListener('click', () => {
importModal.classList.remove('active');
importForm.reset();
importProgress.style.display = 'none';
importProgressBar.style.width = '0%';
importStatus.innerHTML = '';
});
}
if (importModal) {
importModal.addEventListener('click', (e) => {
if (e.target === importModal) {
importModal.classList.remove('active');
importForm.reset();
importProgress.style.display = 'none';
}
});
}
if (importForm) {
importForm.addEventListener('submit', async (e) => {
e.preventDefault();
const fileInput = document.getElementById('importFile');
const file = fileInput.files[0];
if (!file) {
alert('Please select a CSV file');
return;
}
const formData = new FormData();
formData.append('action', 'import_contacts_csv');
formData.append('csv_file', file);
formData.append('nonce', nonceAct);
importSubmitBtn.disabled = true;
importSubmitBtn.textContent = '⏳ Importing...';
importProgress.style.display = 'block';
importProgressBar.style.width = '50%';
importStatus.innerHTML = 'Processing your file...';
importStatus.style.color = '#64748b';
try {
const response = await fetch(ajaxUrl, {
method: 'POST',
body: formData
});
const result = await response.json();
importProgressBar.style.width = '100%';
if (result.success) {
importStatus.innerHTML = `✅ ${result.data.message}`;
setTimeout(() => {
window.location.reload();
}, 2000);
} else {
importStatus.innerHTML = `❌ ${result.data}`;
importSubmitBtn.disabled = false;
importSubmitBtn.textContent = '📥 Try Again';
}
} catch (error) {
importStatus.innerHTML = '❌ Network error. Please try again.';
importSubmitBtn.disabled = false;
importSubmitBtn.textContent = '📥 Try Again';
}
});
}
});
https://www.myanas.com/post-sitemap1.xml
2026-05-29T13:58:39+00:00
https://www.myanas.com/page-sitemap1.xml
2026-05-30T05:11:47+00:00
https://www.myanas.com/category-sitemap1.xml
2026-05-30T11:41:16+06:00
https://www.myanas.com/news.xml
2026-05-30T11:41:16+06:00
https://www.myanas.com/video-sitemap1.xml
2026-05-29T13:58:39+00:00