PageSourceSearch

https://dhashantrav-3fcckt3w.manus.space/assets/umrahPdfPrint-DBJgFFuh.js

js dhashantrav-3fcckt3w.manus.space collected 2026-10-03 05:01:22 UTC 17,295 bytes, 223 lines download raw bytes

1const q="/manus-storage/umrah-haram-cover_c9247ed2.jpg",e=o=>String(o??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),c=(o,i,t="en")=>(t==="ar"?o||i:i||o)||"",n=o=>`<bdi dir="ltr">${e(o)}</bdi>`,p=o=>`<bdi dir="auto">${e(o)}</bdi>`;function A(o,i){return o?o.split(`
2`).map(t=>t.trim()).filter(Boolean).map(t=>{const[l,h]=t.split("|").map(f=>f.trim());return(i==="ar"?l:h)||l||h||t}):[]}const L={ar:{bismillah:"بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ",welcome:"رحلة إيمانية إلى بيت الله الحرام ومسجد رسوله ﷺ",program:"برنامج العمرة",duration:"مدة البرنامج",days:"أيام",nights:"ليالٍ",priceFrom:"يبدأ السعر من",perPerson:"للشخص / بالغرفة الثنائية",onRequest:"حسب الطلب",overview:"نبذة عن البرنامج",hotelsTitle:"الفنادق والأسعار",makkah:"فندق مكة",madinah:"فندق المدينة",stars:"التصنيف",meals:"الوجبات",single:"مفرد",double:"ثنائي",triple:"ثلاثي",quad:"رباعي",flights:"مواعيد الرحلات",leg:"البيان",flightNo:"رقم الرحلة",dep:"الإقلاع",arr:"الوصول",processing:"مدة إصدار التأشيرة",sponsor:"ملاحظة التأشيرة",documents:"الوثائق المطلوبة",notes:"ملاحظات",important:"ملاحظات هامة",tagline:"IBRIX — السفر والتشغيل والخدمة",booking:"للحجز أو الاستفسار",labbayk:"لَبَّيْكَ اللَّهُمَّ لَبَّيْك"},en:{bismillah:"In the Name of Allah, the Most Gracious, the Most Merciful",welcome:"A spiritual journey to the Sacred House of Allah and the Mosque of His Messenger ﷺ",program:"Umrah Program",duration:"DURATION",days:"Days",nights:"Nights",priceFrom:"PRICE FROM",perPerson:"per person / double room",onRequest:"On request",overview:"Overview",hotelsTitle:"Hotels & Pricing",makkah:"Makkah Hotel",madinah:"Madinah Hotel",stars:"Stars",meals:"Meals",single:"Single",double:"Double",triple:"Triple",quad:"Quad",flights:"Flight Schedule",leg:"Leg",flightNo:"Flight",dep:"Dep.",arr:"Arr.",processing:"Visa processing time",sponsor:"Visa note",documents:"Required Documents",notes:"Notes",important:"Important Notes",tagline:"IBRIX — Travel, operations, and service",booking:"Bookings & inquiries",labbayk:"Labbayk Allahumma Labbayk"}},S=o=>"★".repeat(Math.max(0,Math.min(5,o)));function T(){return`<div class="ornament"><svg width="180" height="22" viewBox="0 0 180 22" fill="none" xmlns="http://www.w3.org/2000/svg">
3    <path d="M2 11 H62" stroke="#C9A227" stroke-width="1"/>
4    <path d="M178 11 H118" stroke="#C9A227" stroke-width="1"/>
5    <path d="M90 2 L98 11 L90 20 L82 11 Z" stroke="#C9A227" stroke-width="1.2" fill="#F6ECCB"/>
6    <circle cx="90" cy="11" r="2.4" fill="#C9A227"/>
7    <circle cx="70" cy="11" r="2" fill="#C9A227"/>
8    <circle cx="110" cy="11" r="2" fill="#C9A227"/>
9  </svg></div>`}function P(o,i){const t=L[i],l=i==="ar"?"rtl":"ltr",h=e(c(o.titleAr,o.titleEn,i)),f=e(c(o.cityAr,o.cityEn,i)),D=e(o.contactPhone||"0787789915"),s=o.umrahDetails||{},d=i==="ar"?"'Noto Sans Arabic','Segoe UI',Tahoma,sans-serif":"'Manrope','Segoe UI',Arial,sans-serif",R=c(s.introAr,s.introEn,i).trim(),C=c(o.summaryAr,o.summaryEn,i).trim(),j=c(o.descriptionAr,o.descriptionEn,i).trim(),z=e(R||[C,j].filter(Boolean).join("  ")),I=o.currency||"JOD",b=r=>r&&Number(r)>0?n(`${r} ${I}`):"—",M=Array.isArray(s.hotels)?s.hotels.filter(r=>r&&(r.makkahHotel||r.priceDouble)):[];let v="";if(M.length){const r=M.map((a,g)=>{const m=S(Number(a.makkahStars)||0),H=a.madinahHotel?S(Number(a.madinahStars)||0):"";return`<tr class="${g%2?"alt":""}">
10          <td class="h-name">${p(a.makkahHotel||"—")}</td>
11          <td class="h-st">${m||"—"}</td>
12          <td class="h-name">${p(a.madinahHotel||"—")}</td>
13          <td class="h-st">${H||"—"}</td>
14          <td class="h-meals">${p(a.meals||"—")}</td>
15          <td class="h-pr">${b(a.priceSingle)}</td>
16          <td class="h-pr">${b(a.priceDouble)}</td>
17          <td class="h-pr">${b(a.priceTriple)}</td>
18          <td class="h-pr">${b(a.priceQuad)}</td>
19        </tr>`}).join("");v=`<table class="lux-table">
20      <thead>
21        <tr>
22          <th>${e(t.makkah)}</th><th>${e(t.stars)}</th>
23          <th>${e(t.madinah)}</th><th>${e(t.stars)}</th>
24          <th>${e(t.meals)}</th>
25          <th>${e(t.single)}</th><th>${e(t.double)}</th><th>${e(t.triple)}</th><th>${e(t.quad)}</th>
26        </tr>
27      </thead>
28      <tbody>${r}</tbody>
29    </table>`}const B=Array.isArray(s.flightGroups)?s.flightGroups.filter(r=>r&&(r.title||r.legs&&r.legs.length)):[];let u="";B.length&&(u=`<div class="flights">${B.map(a=>{const g=(a.legs||[]).map(m=>`<tr>
30              <td class="fl-leg">${p(m.label||"—")}</td>
31              <td class="fl-no">${n(m.flightNo||"—")}</td>
32              <td class="fl-t">${n(m.depart||"—")}</td>
33              <td class="fl-t">${n(m.arrive||"—")}</td>
34            </tr>`).join("");return`<div class="flight-card">
35          ${a.title?`<div class="fl-title">${p(a.title)}</div>`:""}
36          ${a.dates?`<div class="fl-dates">${p(a.dates)}</div>`:""}
37          <table class="fl-table">
38            <thead><tr><th>
38${e(t.leg)}</th><th>${e(t.flightNo)}</th><th>${e(t.dep)}</th><th>${e(t.arr)}</th></tr></thead>
39            <tbody>${g}</tbody>
40          </table>
41        </div>`}).join("")}</div>`);const x=c(s.processingTimeAr,s.processingTimeEn,i).trim(),$=c(s.sponsorNoteAr,s.sponsorNoteEn,i).trim();let N="";if(x||$){const r=[];x&&r.push(`<div class="visa-card"><div class="vc-lab">${e(t.processing)}</div><div class="vc-val">${e(x)}</div></div>`),$&&r.push(`<div class="visa-card"><div class="vc-lab">${e(t.sponsor)}</div><div class="vc-txt">${e($)}</div></div>`),N=`<div class="visa-cards">${r.join("")}</div>`}const E=A(s.documentsText,i),y=A(s.notesText,i),w=A(s.importantNotesText,i),k=(r,a="")=>r.map(g=>`<li class="${a}">${e(g)}</li>`).join(""),F=`background-image:linear-gradient(180deg,rgba(20,28,22,.30) 0%,rgba(20,28,22,.78) 100%),url('${q}');`;return`<!doctype html><html lang="${i}" dir="${l}"><head>
42<meta charset="utf-8"/>
43<meta name="author" content="IBRIX"/>
44<meta name="creator" content="IBRIX"/>
45<title>${h} — IBRIX</title>
46<link rel="preconnect" href="https://fonts.googleapis.com">
47<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
48<link href="https://fonts.googleapis.com/css2?family=Amiri:wght@400;700&family=Noto+Sans+Arabic:wght@400;500;600;700;800&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
49<style>
50  :root{
51    --gold:#C9A227; --gold-d:#A8851A; --gold-l:#E7D196;
52    --ink:#1B2A22; --olive:#2E4636; --body:#3D4A42; --mute:#8A8170;
53    --cream:#FBF6EA; --cream-2:#F4EBD4; --line:#E4D6AE;
54  }
55  *{ box-sizing:border-box; margin:0; padding:0; }
56  @page{ size:A4; margin:0; }
57  html,body{ background:#fff; }
58  body{ font-family:${d}; color:var(--body); font-size:9pt; line-height:${i==="ar"?"1.46":"1.38"}; direction:${l};
59        -webkit-print-color-adjust:exact; print-color-adjust:exact; orphans:3; widows:3; }
60  .sheet{ width:210mm; margin:0 auto; background:var(--cream); }
61
62  /* ---------- Cover ---------- */
63  .cover{ position:relative; height:94mm; ${F}
64          background-size:cover; background-position:center; color:#fff;
65          display:flex; flex-direction:column; align-items:center; justify-content:center;
66          text-align:center; padding:8mm 16mm; break-inside:avoid; }
67  .cover .frame{ position:absolute; inset:8mm; border:1.4px solid rgba(231,209,150,.55);
68                 box-shadow:inset 0 0 0 3px rgba(231,209,150,.18); pointer-events:none; }
69  .cover .logo-badge{ display:inline-flex; align-items:center; justify-content:center;
70                      background:rgba(18,26,21,.72); border:1.2px solid rgba(231,209,150,.55);
71                      border-radius:8px; padding:2.5mm 5mm; margin-bottom:3mm;
72                      box-shadow:0 4px 18px rgba(0,0,0,.35), inset 0 0 0 2px rgba(231,209,150,.12);
73                      backdrop-filter:blur(2px); }
74  .cover .logo{ max-height:14mm; max-width:23mm; width:auto; height:auto; display:block; }
75  .cover .bism{ font-family:'Amiri',serif; font-size:13pt; color:var(--gold-l); letter-spacing:.3px; margin-bottom:3.5mm;
76                text-shadow:0 1px 6px rgba(0,0,0,.5); }
77  .cover .kicker{ font-family:${d}; font-size:7.5pt; letter-spacing:${i==="ar"?"0":"4px"};
78                  text-transform:${i==="ar"?"none":"uppercase"}; color:var(--gold-l); margin-bottom:3mm; }
79  .cover h1{ font-family:${i==="ar"?"'Amiri',serif":"'Manrope',sans-serif"}; font-size:25pt; font-weight:700; line-height:1.12; margin-bottom:2.5mm;
80             text-shadow:0 2px 12px rgba(0,0,0,.55); }
81  .cover .chip{ display:inline-block; background:rgba(201,162,39,.92); color:#1B2A22;
82                font-family:${d}; font-size:9pt; font-weight:600;
83                letter-spacing:${i==="ar"?"0":"1px"}; padding:3px 14px; border-radius:30px; }
84  .cover .welcome{ font-size:9.5pt; color:#F3EAD2; max-width:150mm; margin:3mm auto 0;
85                   text-shadow:0 1px 6px rgba(0,0,0,.5); }
86  .cover .labbayk{ position:absolute; bottom:5mm; left:0; right:0; font-family:'Amiri',serif; font-size:9.5pt;
87                   color:var(--gold-l); letter-spacing:1px; }
88
89  /* ---------- Body ---------- */
90  .body{ padding:5mm 12mm 2mm; }
91  .ornament{ text-align:center; margin:3mm 0; }
92
93  .cards{ display:flex; gap:4mm; margin-bottom:2.5mm; break-inside:avoid; }
94  .card{ flex:1; border:1px solid var(--line); border-radius:6px; padding:3mm;
95         text-align:center; background:#fff;
96         box-shadow:0 2px 8px rgba(168,133,26,.06); break-inside:avoid; }
97  .card .lab{ font-family:${d}; font-size:8.5pt; color:var(--mute);
98              letter-spacing:${i==="ar"?"0":"1px"}; text-transform:${i==="ar"?"none":"uppercase"}; }
99  .card .val{ font-size:14pt; color:var(--gold-d); font-weight:700; margin-top:1px; }
100  .card .sub{ font-size:8.5pt; color:var(--mute); margin-top:1px; }
101
102  h2.sec{ font-size:14pt; color:var(--olive); margin:3.5mm 0 1.4mm; font-weight:700;
103          display:flex; align-items:center; gap:8px; break-after:avoid; break-inside:avoid; }
104  h2.sec:before{ content:""; width:5px; height:18px; background:linear-gradient(var(--gold),var(--gold-d));
105                 border-radius:3px; display:inline-block; }
106  p.lead{ font-size:9.4pt; color:var(--body); line-height:${i==="ar"?"1.5":"1.42"}; }
107
108  /* ---------- Luxurious hotels & pricing table ---------- */
109  .lux-table{ width:100%; border-collapse:collapse; margin:2mm 0 2mm;
110              font-family:${d}; font-size:8.4pt;
111              border:1px solid var(--line); border-radius:8px; overflow:hidden; break-inside:auto; }
112  .lux-table thead{ display:table-header-group; }
113  .lux-table tr{ break-inside:avoid; page-break-inside:avoid; }
114  .lux-table thead th{ background:linear-gradient(135deg,var(--olive),var(--ink)); color:var(--gold-l);
115                       font-weight:600; padding:1.8mm 1.8mm; text-align:center; font-size:8pt;
116                       border-${i==="ar"?"left":"right"}:1px solid rgba(231,209,150,.18); }
117  .lux-table tbody td{ padding:1.7mm 1.8mm; text-align:center; border-top:1px solid var(--line);
118                       border-${i==="ar"?"left":"right"}:1px solid #efe6cd; color:var(--body); }
119  .lux-table tbody tr.alt{ background:#fbf4e1; }
120  .lux-table .h-name{ text-align:${l==="rtl"?"right":"left"}; font-weight:600; color:var(--ink); }
121  .lux-table .h-st{ color:var(--gold-d); letter-spacing:1px; }
122  .lux-table .h-meals{ color:var(--mute); font-size:7.8pt; }
123  .lux-table .h-pr{ font-weight:700; color:var(--gold-d); }
124
125  /* ---------- Flights ---------- */
126  .flights{ display:flex; flex-direction:column; gap:2.5mm; }
127  .flight-card{ border:1px solid var(--line); border-radius:6px; background:#fff; padding:2.8mm 4mm;
128                box-shadow:0 2px 8px rgba(168,133,26,.05); break-inside:avoid; }
129  .fl-title{ font-size:12pt; color:var(--olive); font-weight:700; }
130  .fl-dates{ font-family:${d}; font-size:8.5pt; color:var(--gold-d); margin:1mm 0 2mm; }
131  .fl-table{ width:100%; border-collapse:collapse; font-family:${d}; font-size:8.4pt; }
132  .fl-table th{ color:var(--mute); font-weight:600; padding:1.6mm 1mm; border-bottom:1px solid var(--line);
133                text-align:${l==="rtl"?"right":"left"}; font-size:7.8pt; }
134  .fl-table td{ padding:1.8mm 1mm; border-bottom:1px solid #efe6cd; }
135  .fl-table tr:last-child td{ border-bottom:0; }
136  .fl-leg{ color:var(--ink); }
137  .fl-no{ font-weight:700; color:var(--olive); text-align:center; }
138  .fl-t{ text-align:center; color:var(--body); }
139
140  /* ---------- Visa cards ---------- */
141  .visa-cards{ display:flex; gap:6mm; margin-top:2mm; }
142  .visa-card{ flex:1; border:1px solid var(--line); border-radius:6px; padding:2.8mm 4mm;
143              background:linear-gradient(180deg,#fff,#fbf4e1); break-inside:avoid; }
144  .vc-lab{ font-family:${d}; font-size:8pt; letter-spacing:${i==="ar"?"0":".5px"};
145           text-transform:${i==="ar"?"none":"uppercase"}; color:var(--gold-d); margin-bottom:1mm; }
146  .vc-val{ font-size:11pt; color:var(--ink); font-weight:700; }
147  .vc-txt{ font-size:8.8pt; color:var(--body); }
148
149  /* ---------- Lists ---------- */
150  ul{ list-style:none; margin-top:1mm; }
151  ul li{ position:relative; padding-${i==="ar"?"right":"left"}:16px; margin-bottom:3px;
152         font-size:9pt; break-inside:avoid; }
153  ul li:before{ content:"◆"; color:var(--gold); font-size:7pt; position:absolute;
154                ${i==="ar"?"right":"left"}:0; top:3px; }
155  .twocol{ display:flex; gap:8mm; }
156  .twocol > div{ flex:1; }
157  .important-box{ border:1.4px solid var(--gold); background:#fcf6e3; border-radius:8px;
158                  padding:4mm 5mm; break-inside:avoid; }
159  .important-box h3{ color:var(--olive); font-size:13pt; margin-bottom:1mm; }
160  .important-box li:before{ content:"!"; font-family:'Poppins',sans-serif; font-weight:700; font-size:8pt; color:var(--gold-d); }
161  .notes-h3{ color:var(--olive); font-size:13pt; margin-bottom:1mm; }
162
163  /* ---------- Footer ---------- */
164  .footer{ background:linear-gradient(135deg,var(--olive),var(--ink)); color:#e9e2cf;
165           padding:4mm 12mm; display:flex; justify-content:space-between; align-items:center; gap:5mm;
166           font-family:${d}; font-size:8pt; margin-top:3mm; break-inside:avoid; }
167  .footer .tag{ color:var(--gold-l); font-weight:600; }
168  .ibrix-signature{ margin-top:1mm; font-family:'Manrope',sans-serif; font-size:6.5pt; color:rgba(231,209,150,.58); }
169  .ibrix-signature a{ color:var(--gold-l); text-decoration:none; font-weight:700; }
170  bdi{ unicode-bidi:isolate; }
171  bdi[dir="ltr"],.latin{ direction:ltr; unicode-bidi:isolate; font-family:'Manrope','Segoe UI',Arial,sans-serif; }
172  @media print{ .sheet{ box-shadow:none; } .lux-table thead{display:table-header-group} }
173</style></head>
174<body>
175  <div class="sheet">
176    <!-- Cover -->
177    <div class="cover">
178      <div class="frame"></div>
179      <div class="logo-badge"><img class="logo" src="/manus-storage/ibrix-logo_1fc1d3d8.png" alt="IBRIX"/></div>
180      <div class="bism">${e(t.bismillah)}</div>
181      <div class="kicker">${e(t.program)}</div>
182      <h1>${h}</h1>
183      ${f?`<div class="chip">${f}</div>`:""}
184      <div class="welcome">${e(t.welcome)}</div>
185      <div class="labbayk">${e(t.labbayk)}</div>
186    </div>
187
188    <div class="body">
189      <div class="cards">
190        <div class="card"><div class="lab">${e(t.duration)}</div><div class="val">${n(o.durationDays)} / ${n(o.durationNights)}</div><div class="sub">${e(t.days)} / ${e(t.nights)}</div></div>
191        <div class="card"><div class="lab">${e(t.priceFrom)}</div><div class="val">${o.price>0?n(`${o.price} ${I}`):e(t.onRequest)}</div>${o.price>0?`<div class="sub">${e(t.perPerson)}</div>`:""}</div>
192      </div>
193
194      ${T()}
195
196      ${z?`<h2 class="sec">${e(t.overview)}</h2><p class="lead">${z}</p>`:""}
197
198      ${v?`<h2 class="sec">${e(t.hotelsTitle)}</h2>${v}`:""}
199
200      ${u?`<h2 class="sec">${e(t.flights)}</h2>${u}`:""}
201
202      ${N}
203
204      ${E.length?`<h2 class="sec">${e(t.documents)}</h2><ul>${k(E)}</ul>`:""}
205
206      ${y.length||w.length?`${T()}<div class="twocol">
207              ${y.length?`<div><h3 class="notes-h3">${e(t.notes)}</h3><ul>${k(y)}</ul></div>`:""}
208              ${w.length?`<div class="important-box"><h3>${e(t.important)}</h3><ul>${k(w,"imp")}</ul></div>`:""}
209            </div>`:""}
210    </div>
211
212    <div class="footer">
213      <span><span class="tag">${e(t.tagline)}</span><span class="ibrix-signature"><a href="https://www.ibrix.digital">IBRIX</a> · www.ibrix.digital</span></span>
214      <span>${e(t.booking)}: <span class="latin">${n(D)} · ${n("[email protected]")} · ${n("www.ibrix.digital")}</span></span>
215    </div>
216  </div>
217  <script>
218    window.onload = function(){
219      setTimeout(function(){ window.focus(); window.print(); }, 700);
220    };
221    window.onafterprint = function(){ setTimeout(function(){ window.close(); }, 200); };
222  <\/script>
223</body></html>`}function X(o,i="en"){const t=P(o,i),l=window.open("","_blank","width=900,height=1100");return l?(l.document.open(),l.document.write(t),l.document.close(),!0):!1}export{X as openUmrahPrint};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.