let documents = []; const searchInput = document.getElementById("searchInput"); const results = document.getElementById("results"); const status = document.getElementById("status"); // آدرس فایل CSV const CSV_URL = "https://git.sadentel.net/f.taghipour/Document/raw/branch/main/SadenTel_Documents.csv"; // یکسان‌سازی متن و اعداد function normalize(value) { return String(value ?? "") .toLowerCase() .trim() .replace(/[۰-۹]/g, digit => "۰۱۲۳۴۵۶۷۸۹".indexOf(digit) ) .replace(/[٠-٩]/g, digit => "٠١٢٣٤٥٦٧٨٩".indexOf(digit) ) .replace(/ي/g, "ی") .replace(/ك/g, "ک"); } // پردازش CSV function parseCSV(text) { const rows = []; let row = []; let field = ""; let insideQuotes = false; for (let i = 0; i < text.length; i++) { const char = text[i]; if (char === '"') { if (insideQuotes && text[i + 1] === '"') { field += '"'; i++; } else { insideQuotes = !insideQuotes; } } else if (char === "," && !insideQuotes) { row.push(field); field = ""; } else if ( (char === "\n" || char === "\r") && !insideQuotes ) { if (char === "\r" && text[i + 1] === "\n") { i++; } row.push(field); if (row.some(value => value.trim() !== "")) { rows.push(row); } row = []; field = ""; } else { field += char; } } row.push(field); if (row.some(value => value.trim() !== "")) { rows.push(row); } return rows; } // دریافت اطلاعات CSV async function loadDocuments() { try { searchInput.disabled = true; status.textContent = "در حال دریافت اسناد..."; const response = await fetch(CSV_URL, { cache: "no-store" }); if (!response.ok) { throw new Error(`HTTP Error: ${response.status}`); } const text = await response.text(); const rows = parseCSV(text); documents = rows.slice(1).map(columns => ({ row: columns[0]?.trim(), title: columns[1]?.trim(), id: columns[2]?.trim() })).filter(doc => doc.title && doc.id); status.textContent = `${documents.length} سند با موفقیت بارگذاری شد.`; searchInput.disabled = false; } catch (error) { status.textContent = "خطا در دریافت اطلاعات. مسیر فایل CSV را بررسی کنید."; console.error("Loading error:", error); } } // جست‌وجوی اسناد function searchDocuments() { const query = normalize(searchInput.value); results.innerHTML = ""; if (!query) { status.textContent = `${documents.length} سند ثبت شده است.`; return; } const matches = documents.filter(doc => { const titleWords = normalize(doc.title).match(/[\p{L}\p{N}]+/gu) || []; const id = normalize(doc.id); // فقط تطابق کامل کلمه یا شناسه return titleWords.includes(query) || id === query; }); status.textContent = `${matches.length} نتیجه پیدا شد.`; if (matches.length === 0) { results.innerHTML = '
سندی با این مشخصات پیدا نشد.
'; return; } matches.forEach(doc => { const item = document.createElement("div"); item.className = "result"; const title = document.createElement("h3"); title.textContent = doc.title; const rowInfo = document.createElement("div"); rowInfo.className = "info"; const rowLabel = document.createElement("span"); rowLabel.textContent = "ردیف"; const rowValue = document.createElement("span"); rowValue.textContent = doc.row; rowInfo.append(rowLabel, rowValue); const idInfo = document.createElement("div"); idInfo.className = "info"; const idLabel = document.createElement("span"); idLabel.textContent = "شناسه داخلی سند"; const idValue = document.createElement("span"); idValue.textContent = doc.id; idInfo.append(idLabel, idValue); item.append(title, rowInfo, idInfo); results.appendChild(item); }); } // جست‌وجوی لحظه‌ای searchInput.addEventListener("input", searchDocuments); // بارگذاری اولیه loadDocuments();