Spaces:
Running
Running
Update app.js
Browse files
app.js
CHANGED
|
@@ -66,7 +66,6 @@ function normalizeText(s){
|
|
| 66 |
function lettersOnly(ar){return(ar||"").replace(/[^A-Za-z\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\s]/g,"").replace(/\s{2,}/g," ").trim()}
|
| 67 |
function alnumAr(s){return(s||"").replace(/[^0-9A-Za-z\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\s\-\._/]/g,"").replace(/\s{2,}/g," ").trim()}
|
| 68 |
function digitsOnly(s){return(s||"").replace(/\D+/g,"")}
|
| 69 |
-
function todayYMD(){const d=new Date();const y=d.getFullYear();const m=String(d.getMonth()+1).padStart(2,"0");const dd=String(d.getDate()).padStart(2,"0");return`${y}-${m}-${dd}`}
|
| 70 |
|
| 71 |
const LABEL_FIXES=[
|
| 72 |
[/(^|\n)\s*ููุน\s*ุงูู
ุดููู/gi,"$1ููุน ุงูู
ุดููุฉ"],
|
|
@@ -75,7 +74,7 @@ const LABEL_FIXES=[
|
|
| 75 |
[/(^|\n)\s*ุฑูู
\s*ุงููููู/gi,"$1ุฑูู
ุงููููุฉ"],
|
| 76 |
[/(^|\n)\s*ุงูู
ูุทูู/gi,"$1ุงูู
ูุทูุฉ"],
|
| 77 |
[/(^|\n)\s*ุงุณู
\s*ุงูู
ูุทูุฉ/gi,"$1ุงูู
ูุทูุฉ"],
|
| 78 |
-
[/(^|\n)
|
| 79 |
[/(^|\n)\s*ุงููุงุชู/gi,"$1ุฑูู
ุงูุฌูุงู"],
|
| 80 |
[/(^|\n)\s*ุฌูุงู/gi,"$1ุฑูู
ุงูุฌูุงู"]
|
| 81 |
];
|
|
@@ -104,7 +103,7 @@ function isTimeOnly(t){
|
|
| 104 |
return a||b||c;
|
| 105 |
}
|
| 106 |
function isRelativeDatePhrase(t){
|
| 107 |
-
return/(ุฃู
ุณ|ู
ู\s*ุฃู
ุณ|ู
ู\s*ุงู
ุณ|ุงูููู
|ุบุฏูุง|ุบุฏุง|ุจูุฑุฉ|ุจุนุฏ\s*ุจูุฑุฉ|ูุจู\s*\d+\s*(?:ุฏูููุฉ|ุฏูุงูู|ุณุงุน(?:ุฉ|ุงุช)|ููู
|ุฃูุงู
)|ุงูุขู|ุงูุญูู|ูุจู\s*ุดูู)/i.test(t);
|
| 108 |
}
|
| 109 |
function detectHijriDate(str){
|
| 110 |
const t=normalizeText(str);
|
|
@@ -119,7 +118,7 @@ function normalizeDateOnly(raw){
|
|
| 119 |
if(isTimeOnly(t)||isRelativeDatePhrase(t))return"";
|
| 120 |
const hj=detectHijriDate(t);
|
| 121 |
if(hj){const[gy,gm,gd]=hijriToGregorian(hj.hy,hj.hm,hj.hd);return`${String(gy).padStart(4,"0")}-${String(gm).padStart(2,"0")}-${String(gd).padStart(2,"0")}`}
|
| 122 |
-
const m=t.match(/(\d{1,4})[\/\-](\d{1,2})[\/\-](
|
| 123 |
if(m){
|
| 124 |
let a=+m[1],b=+m[2],c=+m[3],y,mo,d;
|
| 125 |
if(String(m[1]).length===4){y=a;mo=b;d=c}
|
|
@@ -128,7 +127,7 @@ function normalizeDateOnly(raw){
|
|
| 128 |
else if(c>31){y=c;mo=b;d=a}
|
| 129 |
else{y=c;mo=b;d=a}
|
| 130 |
if(y<100)y+=2000;
|
| 131 |
-
if(mo>12
|
| 132 |
if(mo<1||mo>12||d<1||d>31)return"";
|
| 133 |
return`${String(y).padStart(4,"0")}-${String(mo).padStart(2,"0")}-${String(d).padStart(2,"0")}`
|
| 134 |
}
|
|
@@ -154,7 +153,7 @@ function findBlockAfterLabel(text,labels,allLabels=START_LABELS){
|
|
| 154 |
const esc=s=>s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');
|
| 155 |
const lblAlt=labels.map(esc).join("|");
|
| 156 |
const allAlt=allLabels.map(esc).join("|");
|
| 157 |
-
const re=new RegExp(`(?:^|\\n)\\s*(?:${lblAlt})\\s*(?::|๏ผ|\\s)\\s*([
|
| 158 |
const m=hay.match(re);
|
| 159 |
return m?m[1].trim():"";
|
| 160 |
}
|
|
@@ -235,10 +234,11 @@ function parseTicketsWithExtras(raw,agentName,defaultRegion){
|
|
| 235 |
if(!dev&&isValidNationalId(id))dev=id;
|
| 236 |
if(!dev&&!id&&phone)dev=phone;
|
| 237 |
if(!id&&isValidNationalId(dev))id=dev;
|
|
|
|
| 238 |
return{
|
| 239 |
"ุงูุชุตููู":cls,
|
| 240 |
"ููุน ุงูู
ุดููุฉ":f["ููุน ุงูู
ุดููุฉ"]||"",
|
| 241 |
-
"ููุช ุญุฏูุซ ุงูู
ุดููุฉ":
|
| 242 |
"ุงุณู
ุตุงุญุจ ุงูู
ุดููุฉ":f["ุงุณู
ุตุงุญุจ ุงูู
ุดููุฉ"]||"",
|
| 243 |
"ุฑูู
ุงููููุฉ":id,
|
| 244 |
"ุฑูู
ุงูุฌูุงุฒ":dev,
|
|
@@ -247,7 +247,7 @@ function parseTicketsWithExtras(raw,agentName,defaultRegion){
|
|
| 247 |
"ุงูู
ูุทูุฉ":region,
|
| 248 |
"ุงุณู
ุงูุฏุนู
ุงูููู":agentName||"",
|
| 249 |
"ุงูุญุงูุฉ":"ุชู
ุงูุญู",
|
| 250 |
-
"ุชุงุฑูุฎ ุงูููู
ุจุงูู
ููุงุฏู":
|
| 251 |
};
|
| 252 |
});
|
| 253 |
}
|
|
@@ -264,7 +264,7 @@ function buildTable(rows){
|
|
| 264 |
const td=document.createElement("td");
|
| 265 |
const base=DISPLAY_TO_BASE[col];
|
| 266 |
td.dataset.base=base;
|
| 267 |
-
let val=(
|
| 268 |
if(col==="ุงูุชุตููู"){
|
| 269 |
const span=document.createElement("span");
|
| 270 |
span.className=`cat ${catClass(val||"")}`;
|
|
@@ -291,7 +291,7 @@ function readTable(){
|
|
| 291 |
if(base==="ุงูุชุตููู"){obj[base]=(td.querySelector("span")?.textContent||td.textContent||"").trim()}
|
| 292 |
else{obj[base]=(td.textContent||"").trim()}
|
| 293 |
});
|
| 294 |
-
|
| 295 |
rows.push(obj);
|
| 296 |
});
|
| 297 |
return rows;
|
|
@@ -326,9 +326,12 @@ function validateCells(){
|
|
| 326 |
const digits=val.replace(/\D/g,"");
|
| 327 |
if(val&&!/^05\d{8}$/.test(digits)){invalid=true;if(!reason)reason="phone"}
|
| 328 |
}
|
|
|
|
|
|
|
|
|
|
| 329 |
td.classList.toggle("invalid",invalid);
|
| 330 |
if(invalid){
|
| 331 |
-
const msg=reason==="required"?"ุงูุญูู ู
ุทููุจ":reason==="id"?"ุฑูู
ุงููููุฉ ูุฌุจ ุฃู ูุจุฏุฃ ุจู 1 ุฃู 2 ูุทููู 10 ุฎุงูุงุช":reason==="phone"?"ุฑูู
ุงูุฌูุงู ูุฌุจ ุฃู ูุจุฏุฃ ุจู 05 ูุทููู 10 ุฎุงูุงุช":"
|
| 332 |
td.setAttribute("title",msg);
|
| 333 |
td.dataset.reason=reason;
|
| 334 |
}else{
|
|
@@ -362,7 +365,19 @@ async function exportExcel(){
|
|
| 362 |
const TEMPLATE_HEADERS=["ุงูุชุตููู","ููุน ุงูู
ุดููุฉ","ุงูู
ูุทูุฉ","ุงุณู
ุงูู
ุณุญ","ุงุณู
ุงูู
ุดุบู","ุฑูู
ุงูุฌูุงู","ุฑูู
ุงููููุฉ ID","ุฑูู
ุงูุฌูุงุฒ","ููุช ุญุฏูุซ ุงูู
ุดููุฉ","ุงูุญุงูุฉ","ุงุณู
ุงูุฏุนู
ุงูููู"];
|
| 363 |
const rows=readTable();
|
| 364 |
if(!rows.length){toast("ูุง ููุฌุฏ ุจูุงูุงุช ูุชุตุฏูุฑูุง.");return}
|
| 365 |
-
const mapRow=r=>({
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 366 |
const wb=new ExcelJS.Workbook();
|
| 367 |
const ws=wb.addWorksheet("ุงูุชุฐุงูุฑ",{views:[{rightToLeft:true}]});
|
| 368 |
const colWidths=[16,18,16,18,20,18,18,18,20,14,18];
|
|
@@ -377,8 +392,7 @@ async function exportExcel(){
|
|
| 377 |
cell.border={top:{style:"thin",color:{argb:"FFCDD2E1"}},bottom:{style:"thin",color:{argb:"FFCDD2E1"}},left:{style:"thin",color:{argb:"FFE5E7EB"}},right:{style:"thin",color:{argb:"FFE5E7EB"}}};
|
| 378 |
});
|
| 379 |
const toTextCols=new Set(["ุฑูู
ุงูุฌูุงู","ุฑูู
ุงููููุฉ ID","ุฑูู
ุงูุฌูุงุฒ"]);
|
| 380 |
-
|
| 381 |
-
rawRows.forEach((r,idx)=>{
|
| 382 |
const m=mapRow(r);
|
| 383 |
const vals=TEMPLATE_HEADERS.map(h=>(m[h]??""));
|
| 384 |
const row=ws.addRow(vals);
|
|
@@ -486,16 +500,36 @@ function updateThemeLabel(){
|
|
| 486 |
|
| 487 |
function isUnlocked(){try{return localStorage.getItem("ticketParser_unlocked")==="1"}catch{return false}}
|
| 488 |
function markUnlocked(){try{localStorage.setItem("ticketParser_unlocked","1")}catch{}}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 489 |
function showGate(){
|
| 490 |
if(isUnlocked()){hideGate();return}
|
| 491 |
const ov=document.getElementById("lockOverlay");
|
| 492 |
-
if(ov){ov.style.display="flex";setTimeout(()=>{const p=
|
|
|
|
|
|
|
|
|
|
|
|
|
| 493 |
}
|
| 494 |
-
function hideGate(){const ov=document.getElementById("lockOverlay");if(ov)ov.style.display="none"}
|
| 495 |
function tryUnlock(){
|
| 496 |
-
const
|
| 497 |
-
|
| 498 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 499 |
}
|
| 500 |
|
| 501 |
function init(){
|
|
@@ -507,12 +541,11 @@ function init(){
|
|
| 507 |
const rawEl=document.getElementById("raw");
|
| 508 |
const agentEl=document.getElementById("agentName");
|
| 509 |
const regionEl=document.getElementById("regionDefault");
|
| 510 |
-
const lockBtn=document.getElementById("lockBtn");
|
| 511 |
-
const lockPass=document.getElementById("lockPass");
|
| 512 |
|
| 513 |
rawEl.placeholder=SAMPLE;
|
| 514 |
|
| 515 |
if(!isUnlocked())showGate();else hideGate();
|
|
|
|
| 516 |
|
| 517 |
loadState();
|
| 518 |
|
|
@@ -548,9 +581,6 @@ function init(){
|
|
| 548 |
else if(e.key==="Escape"){e.preventDefault();clearAll()}
|
| 549 |
});
|
| 550 |
|
| 551 |
-
lockBtn.addEventListener("click",tryUnlock);
|
| 552 |
-
lockPass.addEventListener("keydown",e=>{if(e.key==="Enter")tryUnlock()});
|
| 553 |
-
|
| 554 |
setButtonsEnabled(!!document.getElementById("tbody")?.children.length);
|
| 555 |
updateThemeLabel();
|
| 556 |
}
|
|
|
|
| 66 |
function lettersOnly(ar){return(ar||"").replace(/[^A-Za-z\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\s]/g,"").replace(/\s{2,}/g," ").trim()}
|
| 67 |
function alnumAr(s){return(s||"").replace(/[^0-9A-Za-z\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\s\-\._/]/g,"").replace(/\s{2,}/g," ").trim()}
|
| 68 |
function digitsOnly(s){return(s||"").replace(/\D+/g,"")}
|
|
|
|
| 69 |
|
| 70 |
const LABEL_FIXES=[
|
| 71 |
[/(^|\n)\s*ููุน\s*ุงูู
ุดููู/gi,"$1ููุน ุงูู
ุดููุฉ"],
|
|
|
|
| 74 |
[/(^|\n)\s*ุฑูู
\s*ุงููููู/gi,"$1ุฑูู
ุงููููุฉ"],
|
| 75 |
[/(^|\n)\s*ุงูู
ูุทูู/gi,"$1ุงูู
ูุทูุฉ"],
|
| 76 |
[/(^|\n)\s*ุงุณู
\s*ุงูู
ูุทูุฉ/gi,"$1ุงูู
ูุทูุฉ"],
|
| 77 |
+
[/(^|\n)\ุณ*ุงุณู
\s*ุงูู
ุณุญ/gi,"$1ุงูู
ุณุญ"],
|
| 78 |
[/(^|\n)\s*ุงููุงุชู/gi,"$1ุฑูู
ุงูุฌูุงู"],
|
| 79 |
[/(^|\n)\s*ุฌูุงู/gi,"$1ุฑูู
ุงูุฌูุงู"]
|
| 80 |
];
|
|
|
|
| 103 |
return a||b||c;
|
| 104 |
}
|
| 105 |
function isRelativeDatePhrase(t){
|
| 106 |
+
return /(ุฃู
ุณ|ู
ู\s*ุฃู
ุณ|ู
ู\s*ุงู
ุณ|ุงูููู
|ุบุฏูุง|ุบุฏุง|ุจูุฑุฉ|ุจุนุฏ\s*ุจูุฑุฉ|ูุจู\s*\d+\s*(?:ุฏูููุฉ|ุฏูุงูู|ุณุงุน(?:ุฉ|ุงุช)|ููู
|ุฃูุงู
)|ุงูุขู|ุงูุญูู|ูุจู\s*ุดูู)/i.test(t);
|
| 107 |
}
|
| 108 |
function detectHijriDate(str){
|
| 109 |
const t=normalizeText(str);
|
|
|
|
| 118 |
if(isTimeOnly(t)||isRelativeDatePhrase(t))return"";
|
| 119 |
const hj=detectHijriDate(t);
|
| 120 |
if(hj){const[gy,gm,gd]=hijriToGregorian(hj.hy,hj.hm,hj.hd);return`${String(gy).padStart(4,"0")}-${String(gm).padStart(2,"0")}-${String(gd).padStart(2,"0")}`}
|
| 121 |
+
const m=t.match(/(\d{1,4})[\/\-](\d{1,2})[\/\-](\d{1,4})/);
|
| 122 |
if(m){
|
| 123 |
let a=+m[1],b=+m[2],c=+m[3],y,mo,d;
|
| 124 |
if(String(m[1]).length===4){y=a;mo=b;d=c}
|
|
|
|
| 127 |
else if(c>31){y=c;mo=b;d=a}
|
| 128 |
else{y=c;mo=b;d=a}
|
| 129 |
if(y<100)y+=2000;
|
| 130 |
+
if(mo>12&&ุฏ<=12){const tmp=mo;mo=d;d=tmp}
|
| 131 |
if(mo<1||mo>12||d<1||d>31)return"";
|
| 132 |
return`${String(y).padStart(4,"0")}-${String(mo).padStart(2,"0")}-${String(d).padStart(2,"0")}`
|
| 133 |
}
|
|
|
|
| 153 |
const esc=s=>s.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');
|
| 154 |
const lblAlt=labels.map(esc).join("|");
|
| 155 |
const allAlt=allLabels.map(esc).join("|");
|
| 156 |
+
const re=new RegExp(`(?:^|\\n)\\s*(?:${lblAlt})\\s*(?::|๏ผ|\\s)\\s*([\\ุณ\\S]*?)(?=\\n\\s*(?:${allAlt})\\s*(?::|๏ผ|\\s)|$)`,"i");
|
| 157 |
const m=hay.match(re);
|
| 158 |
return m?m[1].trim():"";
|
| 159 |
}
|
|
|
|
| 234 |
if(!dev&&isValidNationalId(id))dev=id;
|
| 235 |
if(!dev&&!id&&phone)dev=phone;
|
| 236 |
if(!id&&isValidNationalId(dev))id=dev;
|
| 237 |
+
const dateOnly=f["ููุช ุญุฏูุซ ุงูู
ุดููุฉ"]||"";
|
| 238 |
return{
|
| 239 |
"ุงูุชุตููู":cls,
|
| 240 |
"ููุน ุงูู
ุดููุฉ":f["ููุน ุงูู
ุดููุฉ"]||"",
|
| 241 |
+
"ููุช ุญุฏูุซ ุงูู
ุดููุฉ":dateOnly,
|
| 242 |
"ุงุณู
ุตุงุญุจ ุงูู
ุดููุฉ":f["ุงุณู
ุตุงุญุจ ุงูู
ุดููุฉ"]||"",
|
| 243 |
"ุฑูู
ุงููููุฉ":id,
|
| 244 |
"ุฑูู
ุงูุฌูุงุฒ":dev,
|
|
|
|
| 247 |
"ุงูู
ูุทูุฉ":region,
|
| 248 |
"ุงุณู
ุงูุฏุนู
ุงูููู":agentName||"",
|
| 249 |
"ุงูุญุงูุฉ":"ุชู
ุงูุญู",
|
| 250 |
+
"ุชุงุฑูุฎ ุงูููู
ุจุงูู
ููุงุฏู":dateOnly
|
| 251 |
};
|
| 252 |
});
|
| 253 |
}
|
|
|
|
| 264 |
const td=document.createElement("td");
|
| 265 |
const base=DISPLAY_TO_BASE[col];
|
| 266 |
td.dataset.base=base;
|
| 267 |
+
let val=(base?(r[base]||""):"");
|
| 268 |
if(col==="ุงูุชุตููู"){
|
| 269 |
const span=document.createElement("span");
|
| 270 |
span.className=`cat ${catClass(val||"")}`;
|
|
|
|
| 291 |
if(base==="ุงูุชุตููู"){obj[base]=(td.querySelector("span")?.textContent||td.textContent||"").trim()}
|
| 292 |
else{obj[base]=(td.textContent||"").trim()}
|
| 293 |
});
|
| 294 |
+
obj["ููุช ุญุฏูุซ ุงูู
ุดููุฉ"]=obj["ุชุงุฑูุฎ ุงูููู
ุจุงูู
ููุงุฏู"]||"";
|
| 295 |
rows.push(obj);
|
| 296 |
});
|
| 297 |
return rows;
|
|
|
|
| 326 |
const digits=val.replace(/\D/g,"");
|
| 327 |
if(val&&!/^05\d{8}$/.test(digits)){invalid=true;if(!reason)reason="phone"}
|
| 328 |
}
|
| 329 |
+
if(base==="ุชุงุฑูุฎ ุงูููู
ุจุงูู
ููุงุฏู"){
|
| 330 |
+
if(val&&!/^\d{4}-\d{2}-\d{2}$/.test(val)){invalid=true;reason="date"}
|
| 331 |
+
}
|
| 332 |
td.classList.toggle("invalid",invalid);
|
| 333 |
if(invalid){
|
| 334 |
+
const msg=reason==="required"?"ุงูุญูู ู
ุทููุจ":reason==="id"?"ุฑูู
ุงููููุฉ ูุฌุจ ุฃู ูุจุฏุฃ ุจู 1 ุฃู 2 ูุทููู 10 ุฎุงูุงุช":reason==="phone"?"ุฑูู
ุงูุฌูุงู ูุฌุจ ุฃู ูุจุฏุฃ ุจู 05 ูุทููู 10 ุฎุงูุงุช":"ุฃุฏุฎู ุชุงุฑูุฎ ุจุตูุบุฉ YYYY-MM-DD";
|
| 335 |
td.setAttribute("title",msg);
|
| 336 |
td.dataset.reason=reason;
|
| 337 |
}else{
|
|
|
|
| 365 |
const TEMPLATE_HEADERS=["ุงูุชุตููู","ููุน ุงูู
ุดููุฉ","ุงูู
ูุทูุฉ","ุงุณู
ุงูู
ุณุญ","ุงุณู
ุงูู
ุดุบู","ุฑูู
ุงูุฌูุงู","ุฑูู
ุงููููุฉ ID","ุฑูู
ุงูุฌูุงุฒ","ููุช ุญุฏูุซ ุงูู
ุดููุฉ","ุงูุญุงูุฉ","ุงุณู
ุงูุฏุนู
ุงูููู"];
|
| 366 |
const rows=readTable();
|
| 367 |
if(!rows.length){toast("ูุง ููุฌุฏ ุจูุงูุงุช ูุชุตุฏูุฑูุง.");return}
|
| 368 |
+
const mapRow=r=>({
|
| 369 |
+
"ุงูุชุตููู":r["ุงูุชุตููู"]||"",
|
| 370 |
+
"ููุน ุงูู
ุดููุฉ":r["ููุน ุงูู
ุดููุฉ"]||"",
|
| 371 |
+
"ุงูู
ูุทูุฉ":r["ุงูู
ูุทูุฉ"]||"",
|
| 372 |
+
"ุงุณู
ุงูู
ุณุญ":r["ุงูู
ุณุญ"]||"",
|
| 373 |
+
"ุงุณู
ุงูู
ุดุบู":r["ุงุณู
ุตุงุญุจ ุงูู
ุดููุฉ"]||"",
|
| 374 |
+
"ุฑูู
ุงูุฌูุงู":(r["ุฑูู
ุงูุฌูุงู"]||"").toString(),
|
| 375 |
+
"ุฑูู
ุงููููุฉ ID":(r["ุฑูู
ุงููููุฉ"]||"").toString(),
|
| 376 |
+
"ุฑูู
ุงูุฌูุงุฒ":(r["ุฑูู
ุงูุฌูุงุฒ"]||"").toString(),
|
| 377 |
+
"ููุช ุญุฏูุซ ุงูู
ุดููุฉ":r["ููุช ุญุฏูุซ ุงูู
ุดููุฉ"]||"",
|
| 378 |
+
"ุงูุญุงูุฉ":r["ุงูุญุงูุฉ"]||"ุชู
ุงูุญู",
|
| 379 |
+
"ุงุณู
ุงูุฏุนู
ุงูููู":r["ุงุณู
ุงูุฏุนู
ุงูููู"]||""
|
| 380 |
+
});
|
| 381 |
const wb=new ExcelJS.Workbook();
|
| 382 |
const ws=wb.addWorksheet("ุงูุชุฐุงูุฑ",{views:[{rightToLeft:true}]});
|
| 383 |
const colWidths=[16,18,16,18,20,18,18,18,20,14,18];
|
|
|
|
| 392 |
cell.border={top:{style:"thin",color:{argb:"FFCDD2E1"}},bottom:{style:"thin",color:{argb:"FFCDD2E1"}},left:{style:"thin",color:{argb:"FFE5E7EB"}},right:{style:"thin",color:{argb:"FFE5E7EB"}}};
|
| 393 |
});
|
| 394 |
const toTextCols=new Set(["ุฑูู
ุงูุฌูุงู","ุฑูู
ุงููููุฉ ID","ุฑูู
ุงูุฌูุงุฒ"]);
|
| 395 |
+
rows.forEach((r,idx)=>{
|
|
|
|
| 396 |
const m=mapRow(r);
|
| 397 |
const vals=TEMPLATE_HEADERS.map(h=>(m[h]??""));
|
| 398 |
const row=ws.addRow(vals);
|
|
|
|
| 500 |
|
| 501 |
function isUnlocked(){try{return localStorage.getItem("ticketParser_unlocked")==="1"}catch{return false}}
|
| 502 |
function markUnlocked(){try{localStorage.setItem("ticketParser_unlocked","1")}catch{}}
|
| 503 |
+
|
| 504 |
+
function getLockBtn(){return document.getElementById("lockBtn")||document.getElementById("unlockBtn")||document.querySelector('[data-action="unlock"]')}
|
| 505 |
+
function getLockInput(){return document.getElementById("lockPass")||document.querySelector('input[type="password"][name="lock"]')}
|
| 506 |
+
|
| 507 |
function showGate(){
|
| 508 |
if(isUnlocked()){hideGate();return}
|
| 509 |
const ov=document.getElementById("lockOverlay");
|
| 510 |
+
if(ov){ov.style.display="flex";setTimeout(()=>{const p=getLockInput();if(p)p.focus()},0)}
|
| 511 |
+
}
|
| 512 |
+
function hideGate(){
|
| 513 |
+
const ov=document.getElementById("lockOverlay");
|
| 514 |
+
if(ov)ov.style.display="none";
|
| 515 |
}
|
|
|
|
| 516 |
function tryUnlock(){
|
| 517 |
+
const inp=getLockInput();
|
| 518 |
+
const raw=inp?(inp.value||""):"";
|
| 519 |
+
const normalized=raw.replace(/[ู -ูฉ]/g,d=>arabicDigitsMap[d]).trim();
|
| 520 |
+
if(ACCESS_PASSWORDS.includes(normalized)){markUnlocked();hideGate()}
|
| 521 |
+
else{
|
| 522 |
+
const m=document.getElementById("lockMsg");
|
| 523 |
+
if(m){m.hidden=false;setTimeout(()=>m.hidden=true,1500)}
|
| 524 |
+
}
|
| 525 |
+
}
|
| 526 |
+
|
| 527 |
+
function wireLock(){
|
| 528 |
+
const btn=getLockBtn();
|
| 529 |
+
const inp=getLockInput();
|
| 530 |
+
if(btn)btn.addEventListener("click",tryUnlock);
|
| 531 |
+
if(inp)inp.addEventListener("keydown",e=>{if(e.key==="Enter")tryUnlock()});
|
| 532 |
+
document.addEventListener("click",e=>{const t=e.target;if(t&&t.closest&&t.closest("#lockBtn, #unlockBtn, [data-action='unlock']"))tryUnlock()},{once:true});
|
| 533 |
}
|
| 534 |
|
| 535 |
function init(){
|
|
|
|
| 541 |
const rawEl=document.getElementById("raw");
|
| 542 |
const agentEl=document.getElementById("agentName");
|
| 543 |
const regionEl=document.getElementById("regionDefault");
|
|
|
|
|
|
|
| 544 |
|
| 545 |
rawEl.placeholder=SAMPLE;
|
| 546 |
|
| 547 |
if(!isUnlocked())showGate();else hideGate();
|
| 548 |
+
wireLock();
|
| 549 |
|
| 550 |
loadState();
|
| 551 |
|
|
|
|
| 581 |
else if(e.key==="Escape"){e.preventDefault();clearAll()}
|
| 582 |
});
|
| 583 |
|
|
|
|
|
|
|
|
|
|
| 584 |
setButtonsEnabled(!!document.getElementById("tbody")?.children.length);
|
| 585 |
updateThemeLabel();
|
| 586 |
}
|