@@ -749,120 +719,69 @@ async function translateField(sourceId, targetId, direction) {
const btn = event.currentTarget;
const originalHtml = btn.innerHTML;
btn.disabled = true;
- btn.innerHTML = "";
+ btn.innerHTML = '';
try {
- const formData = new FormData();
- formData.append("text", text);
- formData.append("direction", direction);
- const resp = await fetch("api/translate.php", { method: "POST", body: formData });
- const data = await resp.json();
- if (data.success) targetEl.value = data.translation;
+ const response = await fetch('api/translate.php', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ text, direction })
+ });
+ const data = await response.json();
+ if (data.success) { targetEl.value = data.translated; }
} catch (e) { console.error(e); }
- finally { btn.disabled = false; btn.innerHTML = originalHtml; }
+ finally { btn.disabled = false; btn.innerHTML = originalHtml; }
}
-function openItemModal(item = null) {
- const modal = new bootstrap.Modal(document.getElementById('itemModal'));
- const form = document.getElementById('itemForm');
- const label = document.getElementById('itemModalLabel');
- const actionInput = document.getElementById('itemAction');
- const idInput = document.getElementById('itemId');
- const imagePreviewContainer = document.getElementById('imagePreviewContainer');
- const imagePreview = document.getElementById('imagePreview');
- const imageInput = document.getElementById('itemImageFile');
-
- // Reset file input and preview
- imageInput.value = '';
- imagePreview.src = '';
- imagePreviewContainer.classList.add('d-none');
- if (item) {
- label.innerText = "= __('edit_item') ?>";
- actionInput.value = 'edit_item';
- idInput.value = item.id;
- document.getElementById('itemNameEn').value = item.name_en;
- document.getElementById('itemNameAr').value = item.name_ar;
- document.getElementById('itemCategory').value = item.category_id;
- document.getElementById('itemVat').value = item.vat_percent;
-
- if (item.image_url) {
- imagePreview.src = item.image_url + '?v=' + new Date().getTime();
- imagePreviewContainer.classList.remove('d-none');
- }
- } else {
- label.innerText = "= __('add_item') ?>";
- actionInput.value = 'add_item';
- form.reset();
- idInput.value = '';
+function resetForm() {
+ document.getElementById('itemForm').reset();
+ document.getElementById('itemAction').value = 'add_item';
+ document.getElementById('itemModalLabel').innerText = '= __('add_item') ?>';
+ document.getElementById('imagePreviewContainer').classList.add('d-none');
+}
+
+function editItem(item) {
+ resetForm();
+ document.getElementById('itemAction').value = 'edit_item';
+ document.getElementById('itemId').value = item.id;
+ document.getElementById('itemNameEn').value = item.name_en;
+ document.getElementById('itemNameAr').value = item.name_ar;
+ document.getElementById('itemCategory').value = item.category_id || '';
+ document.getElementById('itemVat').value = item.vat_percent || '';
+ document.getElementById('itemModalLabel').innerText = '= __('edit_item') ?>';
+
+ if (item.image_url) {
+ document.getElementById('imagePreview').src = item.image_url;
+ document.getElementById('imagePreviewContainer').classList.remove('d-none');
}
- modal.show();
+ new bootstrap.Modal(document.getElementById('itemModal')).show();
}
-function editCategory(cat) {
- document.getElementById('catFormLabel').innerText = "= __('edit_category') ?? 'Edit Category' ?>";
- document.getElementById('catAction').value = 'edit_category';
- document.getElementById('catId').value = cat.id;
- document.getElementById('catNameEn').value = cat.name_en;
- document.getElementById('catNameAr').value = cat.name_ar;
- document.getElementById('cancelCatEdit').classList.remove('d-none');
-}
-
-function resetCatForm() {
- document.getElementById('catFormLabel').innerText = "= __('add_new_category') ?>";
- document.getElementById('catAction').value = 'add_category';
- document.getElementById('categoryForm').reset();
- document.getElementById('catId').value = '';
- document.getElementById('cancelCatEdit').classList.add('d-none');
-}
-
-function editService(svc) {
- document.getElementById('svcFormLabel').innerText = "= __('edit_service') ?? 'Edit Service' ?>";
- document.getElementById('svcAction').value = 'edit_service';
- document.getElementById('svcId').value = svc.id;
- document.getElementById('svcNameEn').value = svc.name_en;
- document.getElementById('svcNameAr').value = svc.name_ar;
- document.getElementById('cancelSvcEdit').classList.remove('d-none');
-}
-
-function resetSvcForm() {
- document.getElementById('svcFormLabel').innerText = "= __('add_new_service') ?>";
- document.getElementById('svcAction').value = 'add_service';
- document.getElementById('serviceForm').reset();
- document.getElementById('svcId').value = '';
- document.getElementById('cancelSvcEdit').classList.add('d-none');
-}
-
-function confirmDelete(type, id) {
- if (confirm("= __('are_you_sure') ?>")) {
+function confirmDeleteAjax(type, id) {
+ if (confirm('= __('confirm_delete') ?>')) {
document.getElementById('deleteAction').value = 'delete_' + type;
document.getElementById('deleteId').value = id;
document.getElementById('deleteForm').submit();
}
}
-async function confirmDeleteAjax(type, id) {
- if (confirm("= __('are_you_sure') ?>")) {
- const formData = new FormData();
- formData.append('action', 'delete_' + type);
- formData.append('id', id);
- formData.append('ajax', '1');
-
- try {
- const response = await fetch('items.php', { method: 'POST', body: formData });
- const data = await response.json();
- if (data.success) {
- if (type === 'category') document.getElementById('categoryTableBody').innerHTML = data.html;
- if (type === 'service') document.getElementById('serviceTableBody').innerHTML = data.html;
- } else {
- alert(data.error || 'Failed to delete');
- }
- } catch (error) {
- console.error('Error deleting:', error);
- }
- }
+// Category AJAX
+function editCategory(cat) {
+ document.getElementById('catAction').value = 'edit_category';
+ document.getElementById('catId').value = cat.id;
+ document.getElementById('catNameEn').value = cat.name_en;
+ document.getElementById('catNameAr').value = cat.name_ar;
+ document.getElementById('catSubmitBtn').innerText = '= __('save') ?>';
+ document.getElementById('catCancelBtn').classList.remove('d-none');
+}
+
+function resetCatForm() {
+ document.getElementById('categoryForm').reset();
+ document.getElementById('catAction').value = 'add_category';
+ document.getElementById('catSubmitBtn').innerText = '= __('add_category') ?>';
+ document.getElementById('catCancelBtn').classList.add('d-none');
}
-// Category Form AJAX
document.getElementById('categoryForm').addEventListener('submit', async function(e) {
e.preventDefault();
const formData = new FormData(this);
@@ -880,6 +799,23 @@ document.getElementById('categoryForm').addEventListener('submit', async functio
}
});
+// Service AJAX
+function editService(svc) {
+ document.getElementById('svcAction').value = 'edit_service';
+ document.getElementById('svcId').value = svc.id;
+ document.getElementById('svcNameEn').value = svc.name_en;
+ document.getElementById('svcNameAr').value = svc.name_ar;
+ document.getElementById('svcSubmitBtn').innerText = '= __('save') ?>';
+ document.getElementById('svcCancelBtn').classList.remove('d-none');
+}
+
+function resetSvcForm() {
+ document.getElementById('serviceForm').reset();
+ document.getElementById('svcAction').value = 'add_service';
+ document.getElementById('svcSubmitBtn').innerText = '= __('add_service') ?>';
+ document.getElementById('svcCancelBtn').classList.add('d-none');
+}
+
// Service Form AJAX
document.getElementById('serviceForm').addEventListener('submit', async function(e) {
e.preventDefault();
@@ -926,6 +862,7 @@ document.querySelectorAll('.price-input').forEach(input => {
}
} catch (error) {
console.error('Error updating price:', error);
+ alert('Error updating price: ' + error.message);
}
}, 500);
});
@@ -955,4 +892,4 @@ document.getElementById('itemImageFile').addEventListener('change', function(e)
});
-
\ No newline at end of file
+