Elementor #799

<!doctype html>
<html lang=”hi”>
<head>
<meta charset=”utf-8″ />
<meta name=”viewport” content=”width=device-width, initial-scale=1″ />
<title>Transport Directory — खोज और सूची (20 प्रति पेज)</title>
<style>
/* बेसिक स्टाइल — साफ, रेस्पॉन्सिव कार्ड लेआउट */
:root{
–bg:#f6f8fb;
–card:#ffffff;
–muted:#6b7280;
–accent:#0f172a;
–primary:#1f6feb;
–success:#10b981;
–danger:#ef4444;
font-family: “Inter”, “Segoe UI”, Roboto, Arial, sans-serif;
}
html,body{
height:100%;
margin:0;
background:var(–bg);
color:var(–accent);
}
.wrap{
max-width:1100px;
margin:28px auto;
padding:20px;
}
header{
display:flex;
gap:16px;
align-items:center;
justify-content:space-between;
margin-bottom:18px;
}
h1{
font-size:20px;
margin:0;
letter-spacing:0.2px;
}
.search-area{
display:flex;
gap:8px;
align-items:center;
flex-wrap:wrap;
}
.search-box{
display:flex;
gap:8px;
align-items:center;
background:var(–card);
padding:8px;
border-radius:8px;
box-shadow:0 1px 3px rgba(12,20,32,0.05);
}
input[type=”search”]{
border:0;
outline:0;
font-size:15px;
padding:8px 6px;
min-width:260px;
background:transparent;
}
button{
background:var(–primary);
color:#fff;
border:0;
padding:8px 12px;
border-radius:6px;
cursor:pointer;
font-weight:600;
}
button:disabled{
opacity:0.5;
cursor:not-allowed;
}
.meta{
color:var(–muted);
font-size:13px;
}

/* सूची कार्ड्स */
.list{
margin-top:14px;
display:grid;
gap:12px;
}
.card{
background:var(–card);
border-radius:10px;
padding:12px;
box-shadow:0 6px 18px rgba(12,20,32,0.04);
display:grid;
grid-template-columns: 60px 1fr 220px;
gap:10px;
align-items:center;
}
.sr{
font-weight:700;
font-size:18px;
color:var(–primary);
text-align:center;
}
.main{
display:flex;
flex-direction:column;
gap:6px;
}
.row{
display:flex;
gap:12px;
flex-wrap:wrap;
font-size:14px;
color:var(–accent);
}
.small{
color:var(–muted);
font-size:13px;
}
.actions{
display:flex;
gap:8px;
align-items:center;
justify-content:flex-end;
}
.map-link{
border:1px solid rgba(31,111,235,0.12);
background:transparent;
padding:8px 10px;
border-radius:8px;
cursor:pointer;
text-decoration:none;
color:var(–primary);
font-weight:600;
font-size:13px;
}
.mobile{
font-weight:700;
color:var(–accent);
}

/* पेज नेविगेशन */
.pager{
display:flex;
gap:8px;
align-items:center;
justify-content:center;
margin-top:18px;
}
.page-indicator{
font-size:14px;
color:var(–muted);
padding:10px 14px;
background:var(–card);
border-radius:10px;
box-shadow:0 2px 6px rgba(12,20,32,0.03);
}

/* खाली परिणाम */
.empty{
text-align:center;
padding:36px;
color:var(–muted);
background:linear-gradient(180deg, rgba(0,0,0,0.02), transparent);
border-radius:10px;
font-size:15px;
}

/* मोबाइल */
@media (max-width:880px){
.card{
grid-template-columns: 48px 1fr;
}
.actions{
grid-column:1 / -1;
justify-content:flex-start;
}
header{
flex-direction:column;
align-items:flex-start;
gap:12px;
}
.search-box { width:100%; justify-content:space-between; }
input[type=”search”]{ min-width:120px; flex:1; }
}
</style>
</head>
<body>
<div class=”wrap”>
<header>
<div>
<h1>Transport Directory</h1>
<div class=”meta”>20 रिकॉर्ड प्रति पेज — Station नाम में सर्च करें</div>
</div>

<div class=”search-area”>
<div class=”search-box” role=”search” aria-label=”Station search”>
<!– खोज इनपुट — केवल Station में सर्च करेगा –>
<input id=”searchInput” type=”search” placeholder=”Station नाम टाइप करें और Enter दबाएँ…” aria-label=”Search by station name”/>
<button id=”clearBtn” title=”साफ करें”>Clear</button>
</div>
<div style=”display:flex;gap:8px;align-items:center”>
<div class=”meta” id=”resultInfo”>कुल रिकॉर्ड: 0</div>
</div>
</div>
</header>

<!– सूची प्रदर्शित करने का स्थान –>
<main>
<section id=”listContainer” class=”list” aria-live=”polite”></section>

<!– खाली होने का मैसेज –>
<div id=”emptyMsg” class=”empty” style=”display:none;”>
कोई परिणाम नहीं मिला — Station नाम बदलकर देखें या सर्च रीसेट करें।
</div>

<!– पेज नेविगेशन –>
<div class=”pager” style=”margin-top:18px;”>
<button id=”prevBtn”>Previous</button>
<div class=”page-indicator” id=”pageIndicator”>Page 1 of 1</div>
<button id=”nextBtn”>Next</button>
</div>
</main>
</div>

<script>
/**************************************
* डेटा: transports[] — नमूना डेटा
* हर आइटम में:
* id: internal id,
* transportName, personName, station, mobile, address, lat, lng
**************************************/
const transports = [
// 60 उदाहरणों का संग्रह — आप यहाँ असली डेटा डाल सकते हैं या सर्वर से लोड कर सकते हैं
{id:1, transportName:’Sharma Transport’, personName:’Ramesh Sharma’, station:’Delhi Junction’, mobile:’+91-9810012345′, address:’H-12, Industrial Area, New Delhi, Delhi, 110001′, lat:28.6487, lng:77.2195},
{id:2, transportName:’Agarwal Logistics’, personName:’Sanjeev Agarwal’, station:’Kanpur Central’, mobile:’+91-9150011111′, address:’Plot 21, Transport Nagar, Kanpur, Uttar Pradesh, 208001′, lat:26.4499, lng:80.3319},
{id:3, transportName:’Singh Cargo’, personName:’Ajay Singh’, station:’Lucknow NR’, mobile:’+91-8123456789′, address:’Sector 5, Alambagh, Lucknow, Uttar Pradesh, 226005′, lat:26.8584, lng:80.9346},
{id:4, transportName:’Patel Freight’, personName:’Hitesh Patel’, station:’Ahmedabad Junction’, mobile:’+91-9870123456′, address:’GIDC Road, Ahmedabad, Gujarat, 380015′, lat:23.0339, lng:72.5850},
{id:5, transportName:’Verma Cargo’, personName:’Sunita Verma’, station:’Varanasi Cantt’, mobile:’+91-9910012340′, address:’C-9, Cantt Area, Varanasi, Uttar Pradesh, 221002′, lat:25.3217, lng:82.9873},
{id:6, transportName:’Kumar Transport’, personName:’Deepak Kumar’, station:’Patna Junction’, mobile:’+91-9500012345′, address:’Boring Road, Patna, Bihar, 800001′, lat:25.6127, lng:85.1440},
{id:7, transportName:’Rathi Movers’, personName:’Naveen Rathi’, station:’Mumbai CST’, mobile:’+91-9922012345′, address:’Churchgate Area, Mumbai, Maharashtra, 400001′, lat:18.9398, lng:72.8354},
{id:8, transportName:’Desai Logistics’, personName:’Kavita Desai’, station:’Surat Junction’, mobile:’+91-9876512340′, address:’Ring Road, Surat, Gujarat, 395003′, lat:21.1950, lng:72.8311},
{id:9, transportName:’Roy Transport’, personName:’Anil Roy’, station:’Howrah Junction’, mobile:’+91-9334012345′, address:’Shibpur, Howrah, West Bengal, 711102′, lat:22.5958, lng:88.2636},
{id:10, transportName:’Banerjee Cargo’, personName:’Ritu Banerjee’, station:’Kolkata Terminal’, mobile:’+91-9007012345′, address:’Park Street, Kolkata, West Bengal, 700016′, lat:22.5585, lng:88.3520},
{id:11, transportName:’Khan Express’, personName:’Sajid Khan’, station:’Hyderabad Deccan’, mobile:’+91-9700012345′, address:’Nampally, Hyderabad, Telangana, 500001′, lat:17.3841, lng:78.4564},
{id:12, transportName:’Gopal Transport’, personName:’Gopal Yadav’, station:’Prayagraj Junction’, mobile:’+91-8000012345′, address:’Civil Lines, Prayagraj, Uttar Pradesh, 211001′, lat:25.4358, lng:81.8463},
{id:13, transportName:’Nath Cargo’, personName:’Sunil Nath’, station:’Indore Junction’, mobile:’+91-9820012345′, address:’MG Road, Indore, Madhya Pradesh, 452001′, lat:22.7196, lng:75.8577},
{id:14, transportName:’Rao Logistics’, personName:’Manoj Rao’, station:’Vijayawada Junction’, mobile:’+91-7890012345′, address:’VIjayawada Road, Andhra Pradesh, 520001′, lat:16.5062, lng:80.6480},
{id:15, transportName:’Mehta Transport’, personName:’Isha Mehta’, station:’Rajkot Junction’, mobile:’+91-9720012345′, address:’Race Course Road, Rajkot, Gujarat, 360001′, lat:22.3039, lng:70.8022},
{id:16, transportName:’Shivam Movers’, personName:’Shivam Patel’, station:’Gandhinagar Capital’, mobile:’+91-9900012345′, address:’Sector 21, Gandhinagar, Gujarat, 382021′, lat:23.2156, lng:72.6369},
{id:17, transportName:’Joshi Transport’, personName:’Prakash Joshi’, station:’Nagpur Junction’, mobile:’+91-9821012345′, address:’Sitabuldi, Nagpur, Maharashtra, 440012′, lat:21.1526, lng:79.0888},
{id:18, transportName:’Tripathi Cargo’, personName:’Rajnish Tripathi’, station:’Bhopal Junction’, mobile:’+91-9100012345′, address:’Habibganj, Bhopal, Madhya Pradesh, 462024′, lat:23.2185, lng:77.4126},
{id:19, transportName:’Gupta Logistics’, personName:’Amit Gupta’, station:’Chandigarh Junction’, mobile:’+91-9873012345′, address:’Sector 17, Chandigarh, 160017′, lat:30.7333, lng:76.7794},
{id:20, transportName:’Yadav Movers’, personName:’Rakesh Yadav’, station:’Agra Cantt’, mobile:’+91-9450012345′, address:’Tajganj, Agra, Uttar Pradesh, 282001′, lat:27.1751, lng:78.0421},
{id:21, transportName:’Malhotra Freight’, personName:’Vandana Malhotra’, station:’Amritsar Junction’, mobile:’+91-9812012345′, address:’Near Golden Temple, Amritsar, Punjab, 143001′, lat:31.6340, lng:74.8723},
{id:22, transportName:’Paul Transport’, personName:’Rohit Paul’, station:’Kochi Junction’, mobile:’+91-9844012345′, address:’Marine Drive, Kochi, Kerala, 682011′, lat:9.9312, lng:76.2673},
{id:23, transportName:’Saxena Logistics’, personName:’Vikas Saxena’, station:’Jodhpur Junction’, mobile:’+91-9823012345′, address:’Circle Chowk, Jodhpur, Rajasthan, 342001′, lat:26.2389, lng:73.0243},
{id:24, transportName:’Chopra Cargo’, personName:’Neha Chopra’, station:’Jammu Tawi’, mobile:’+91-9790012345′, address:’Railway Road, Jammu, J&K, 180001′, lat:32.7338, lng:74.8705},
{id:25, transportName:’Nair Movers’, personName:’Suresh Nair’, station:’Thiruvananthapuram’, mobile:’+91-9447012345′, address:’Palayam, Thiruvananthapuram, Kerala, 695001′, lat:8.5241, lng:76.9366},
{id:26, transportName:’Bose Transport’, personName:’Arindam Bose’, station:’Siliguri Junction’, mobile:’+91-9477012345′, address:’Sevoke Road, Siliguri, West Bengal, 734001′, lat:26.7084, lng:88.4289},
{id:27, transportName:’Khatri Cargo’, personName:’Sahil Khatri’, station:’Udaipur City’, mobile:’+91-9350012345′, address:’Hiran Magri, Udaipur, Rajasthan, 313001′, lat:24.5854, lng:73.7125},
{id:28, transportName:’Sethi Logistics’, personName:’Poonam Sethi’, station:’Dhanbad Junction’, mobile:’+91-9330012345′, address:’Purana Bazar, Dhanbad, Jharkhand, 826001′, lat:23.7957, lng:86.4304},
{id:29, transportName:’Mishra Transport’, personName:’Ravi Mishra’, station:’Gaya Junction’, mobile:’+91-9430012345′, address:’Station Road, Gaya, Bihar, 823001′, lat:24.7954, lng:85.0026},
{id:30, transportName:’Chatterjee Cargo’, personName:’Soumya Chatterjee’, station:’Kharagpur Junction’, mobile:’+91-9830012345′, address:’Midnapore Road, Kharagpur, West Bengal, 721301′, lat:22.3460, lng:87.3256},
{id:31, transportName:’Reddy Transport’, personName:’Kiran Reddy’, station:’Tirupati’, mobile:’+91-9703012345′, address:’Near Temple, Tirupati, Andhra Pradesh, 517501′, lat:13.6328, lng:79.4192},
{id:32, transportName:’Iyer Logistics’, personName:’Arun Iyer’, station:’Madurai Junction’, mobile:’+91-9943012345′, address:’Madurai Main, Tamil Nadu, 625001′, lat:9.9252, lng:78.1198},
{id:33, transportName:’Mandal Transport’, personName:’Biplab Mandal’, station:’Asansol Junction’, mobile:’+91-9473012345′, address:’Kultala, Asansol, West Bengal, 713301′, lat:23.6828, lng:86.9870},
{id:34, transportName:’Bajpai Movers’, personName:’Asha Bajpai’, station:’Meerut City’, mobile:’+91-9833012345′, address:’Shastri Nagar, Meerut, Uttar Pradesh, 250001′, lat:28.9845, lng:77.7064},
{id:35, transportName:’Kamble Cargo’, personName:’Rohit Kamble’, station:’Pune Junction’, mobile:’+91-9763012345′, address:’Shivaji Nagar, Pune, Maharashtra, 411005′, lat:18.5204, lng:73.8567},
{id:36, transportName:’Bhardwaj Logistics’, personName:’Pankaj Bhardwaj’, station:’Dehradun’, mobile:’+91-9413012345′, address:’Clock Tower, Dehradun, Uttarakhand, 248001′, lat:30.3165, lng:78.0322},
{id:37, transportName:’Sharma Cargo’, personName:’Aarti Sharma’, station:’Shimla’, mobile:’+91-9813012345′, address:’The Mall, Shimla, Himachal Pradesh, 171001′, lat:31.1048, lng:77.1734},
{id:38, transportName:’Rana Transport’, personName:’Ramesh Rana’, station:’Kota Junction’, mobile:’+91-9824012345′, address:’Kota Road, Kota, Rajasthan, 324001′, lat:25.2138, lng:75.8648},
{id:39, transportName:’Chauhan Movers’, personName:’Vikram Chauhan’, station:’Alwar’, mobile:’+91-9884012345′, address:’Old City, Alwar, Rajasthan, 301001′, lat:27.5600, lng:76.6256},
{id:40, transportName:’Lal Freight’, personName:’Pooja Lal’, station:’Bikaner Junction’, mobile:’+91-9984012345′, address:’Station Road, Bikaner, Rajasthan, 334001′, lat:28.0229, lng:73.3119},
{id:41, transportName:’Kohli Transport’, personName:’Varun Kohli’, station:’Jalandhar Cantt’, mobile:’+91-9814012345′, address:’Cantt Area, Jalandhar, Punjab, 144001′, lat:31.3260, lng:75.5762},
{id:42, transportName:’Kapoor Logistics’, personName:’Rahul Kapoor’, station:’Mathura Junction’, mobile:’+91-9414012345′, address:’Vrindavan Road, Mathura, Uttar Pradesh, 281001′, lat:27.4924, lng:77.6737},
{id:43, transportName:’Talwar Cargo’, personName:’Nidhi Talwar’, station:’Bareilly’, mobile:’+91-9214012345′, address:’Civil Lines, Bareilly, Uttar Pradesh, 243001′, lat:28.3670, lng:79.4304},
{id:44, transportName:’Prasad Transport’, personName:’Sakshi Prasad’, station:’Moradabad’, mobile:’+91-9114012345′, address:’Shastri Market, Moradabad, UP, 244001′, lat:28.8386, lng:78.7800},
{id:45, transportName:’Vikram Movers’, personName:’Vikram Singh’, station:’Saharanpur’, mobile:’+91-9014012345′, address:’Court Road, Saharanpur, UP, 247001′, lat:29.9641, lng:77.5465},
{id:46, transportName:’Nehru Cargo’, personName:’Ankita Nehru’, station:’Haldwani’, mobile:’+91-9015012345′, address:’Bazaar Road, Haldwani, Uttarakhand, 263139′, lat:29.2187, lng:79.5124},
{id:47, transportName:’Dutta Logistics’, personName:’Bijoy Dutta’, station:’Kalyan’, mobile:’+91-9016012345′, address:’Kalyan East, Thane, Maharashtra, 421301′, lat:19.2403, lng:73.1308},
{id:48, transportName:’Sundar Transport’, personName:’Sundar Iyer’, station:’Nashik’, mobile:’+91-9017012345′, address:’Trimbak Road, Nashik, Maharashtra, 422001′, lat:19.9975, lng:73.7898},
{id:49, transportName:’Kapadia Movers’, personName:’Bhavesh Kapadia’, station:’Bhavnagar’, mobile:’+91-9018012345′, address:’Port Area, Bhavnagar, Gujarat, 364001′, lat:21.7649, lng:72.1519},
{id:50, transportName:’Shukla Cargo’, personName:’Rohit Shukla’, station:’Mirzapur’, mobile:’+91-9019012345′, address:’Main Road, Mirzapur, UP, 231001′, lat:25.1458, lng:82.5690},
{id:51, transportName:’Rana Logistics’, personName:’Vikas Rana’, station:’Mathura Cantt’, mobile:’+91-9020012345′, address:’Cantt Area, Mathura, UP, 281001′, lat:27.4926, lng:77.6738},
{id:52, transportName:’Sengupta Transport’, personName:’Anup Sengupta’, station:’Dibrugarh’, mobile:’+91-9021012345′, address:’AR Road, Dibrugarh, Assam, 786001′, lat:27.4728, lng:94.9117},
{id:53, transportName:’Das Cargo’, personName:’Moni Das’, station:’Itanagar’, mobile:’+91-9022012345′, address:’City Center, Itanagar, Arunachal Pradesh, 791111′, lat:27.0844, lng:93.6053},
{id:54, transportName:’Noble Movers’, personName:’Prateek Noble’, station:’Shimoga’, mobile:’+91-9023012345′, address:’Main Road, Shimoga, Karnataka, 577201′, lat:13.9299, lng:75.5681},
{id:55, transportName:’Kapur Transport’, personName:’Manish Kapur’, station:’Raipur’, mobile:’+91-9024012345′, address:’CP Nagar, Raipur, Chhattisgarh, 492001′, lat:21.2514, lng:81.6296},
{id:56, transportName:’Bedi Logistics’, personName:’Sonia Bedi’, station:’Ranchi’, mobile:’+91-9025012345′, address:’Main Road, Ranchi, Jharkhand, 834001′, lat:23.3441, lng:85.3096},
{id:57, transportName:’Arora Cargo’, personName:’Himanshu Arora’, station:’Gorakhpur’, mobile:’+91-9026012345′, address:’Golghar, Gorakhpur, UP, 273001′, lat:26.7606, lng:83.3732},
{id:58, transportName:’Bhatt Transport’, personName:’Harsh Bhatt’, station:’Modinagar’, mobile:’+91-9027012345′, address:’Industrial Area, Modinagar, UP, 201204′, lat:28.8574, lng:77.5938},
{id:59, transportName:’Saini Movers’, personName:’Kamal Saini’, station:’Barmer’, mobile:’+91-9028012345′, address:’Desert Road, Barmer, Rajasthan, 344001′, lat:25.7538, lng:71.3889},
{id:60, transportName:’Pillai Cargo’, personName:’Ramesh Pillai’, station:’Aizawl’, mobile:’+91-9029012345′, address:’Zarkawt, Aizawl, Mizoram, 796001′, lat:23.7271, lng:92.7176}
];

// सेटिंग्स
const PER_PAGE = 20; // 20 रिकॉर्ड प्रति पेज — आपकी रिक्वायरमेंट
let currentPage = 1;
let filtered = transports.slice(); // फिल्टर्ड व्यू
const listContainer = document.getElementById(‘listContainer’);
const pageIndicator = document.getElementById(‘pageIndicator’);
const prevBtn = document.getElementById(‘prevBtn’);
const nextBtn = document.getElementById(‘nextBtn’);
const searchInput = document.getElementById(‘searchInput’);
const clearBtn = document.getElementById(‘clearBtn’);
const resultInfo = document.getElementById(‘resultInfo’);
const emptyMsg = document.getElementById(’emptyMsg’);

// प्रारंभिक रेंडर
updateResultInfo();
renderList();

// ईवेंट्स
prevBtn.addEventListener(‘click’, () => {
if (currentPage > 1) {
currentPage–;
renderList();
}
});
nextBtn.addEventListener(‘click’, () => {
const maxPage = Math.max(1, Math.ceil(filtered.length / PER_PAGE));
if (currentPage < maxPage) {
currentPage++;
renderList();
}
});

// सर्च: केवल station फ़ील्ड में देखता है
searchInput.addEventListener(‘input’, (e) => {
// हम live search रखना चाहते हैं, लेकिन user ने “Enter” का ज़िक्र किया था।
// यहाँ पर input के साथ ही फ़िल्टर कर रहें हैं — अगर आप चाहते हैं कि सिर्फ Enter पर चले, तब replace करने को कहें।
const q = e.target.value.trim().toLowerCase();
applySearch(q);
});

// क्लियर बटन
clearBtn.addEventListener(‘click’, () => {
searchInput.value = ”;
applySearch(”);
});

// सर्च लागू करने का फ़ंक्शन (सिर्फ station में खोज)
function applySearch(query){
if (!query){
filtered = transports.slice();
} else {
filtered = transports.filter(item => {
// सिर्फ station नाम में सर्च करें
return item.station.toLowerCase().includes(query);
});
}
currentPage = 1; // रिज़ल्ट बदलते ही पेज 1 पर वापस जाएं
updateResultInfo();
renderList();
}

// रिज़ल्ट की जानकारी अपडेट करो
function updateResultInfo(){
resultInfo.textContent = `कुल रिकॉर्ड: ${filtered.length}`;
}

// सूची रेंडर करने वाला मुख्य फ़ंक्शन
function renderList(){
listContainer.innerHTML = ”;

const total = filtered.length;
const maxPage = Math.max(1, Math.ceil(total / PER_PAGE));
if (currentPage > maxPage) currentPage = maxPage;

const start = (currentPage – 1) * PER_PAGE;
const end = Math.min(start + PER_PAGE, total);

// पेज इंडिकेटर
pageIndicator.textContent = `Page ${currentPage} of ${maxPage}`;

// नेविगेशन बटन स्टेट
prevBtn.disabled = currentPage <= 1;
nextBtn.disabled = currentPage >= maxPage;

if (total === 0){
emptyMsg.style.display = ‘block’;
return;
} else {
emptyMsg.style.display = ‘none’;
}

// दिखाने वाले आइटम्स
const pageItems = filtered.slice(start, end);

// ग्लोबल सीरियल — filtered के context में मिसाल: यदि original order important हो तो बदल सकते हैं
for (let i = 0; i < pageItems.length; i++){
const item = pageItems[i];
const globalIndex = start + i + 1; // Sr No (1-based across filtered list)
const card = createCard(item, globalIndex);
listContainer.appendChild(card);
}
}

// एक कार्ड DOM बनाओ
function createCard(item, sr){
const el = document.createElement(‘article’);
el.className = ‘card’;
el.setAttribute(‘tabindex’,’0′);

// Sr column
const srDiv = document.createElement(‘div’);
srDiv.className = ‘sr’;
srDiv.textContent = sr;
el.appendChild(srDiv);

// मुख्य विवरण
const main = document.createElement(‘div’);
main.className = ‘main’;

// पहली लाइन: Transport Name (बड़ा), Person Name
const line1 = document.createElement(‘div’);
line1.className = ‘row’;
const tName = document.createElement(‘div’);
tName.innerHTML = `<strong>${escapeHtml(item.transportName)}</strong>`;
const pName = document.createElement(‘div’);
pName.className = ‘small’;
pName.textContent = `Contact Person: ${item.personName}`;
line1.appendChild(tName);
line1.appendChild(pName);

// दूसरी लाइन: Station और Mobile
const line2 = document.createElement(‘div’);
line2.className = ‘row’;
const station = document.createElement(‘div’);
station.innerHTML = `<span style=”font-weight:600″>${escapeHtml(item.station)}</span>`;
const mobile = document.createElement(‘div’);
mobile.className = ‘mobile’;
mobile.textContent = item.mobile;
line2.appendChild(station);
line2.appendChild(mobile);

// तीसरी लाइन: Address
const line3 = document.createElement(‘div’);
line3.className = ‘row’;
const addr = document.createElement(‘div’);
addr.className = ‘small’;
addr.textContent = item.address;
line3.appendChild(addr);

main.appendChild(line1);
main.appendChild(line2);
main.appendChild(line3);

el.appendChild(main);

// actions column (map link)
const actions = document.createElement(‘div’);
actions.className = ‘actions’;

// Google Maps लिंक (lat,lng) — opens in new tab
const mapLink = document.createElement(‘a’);
mapLink.className = ‘map-link’;
mapLink.setAttribute(‘role’,’link’);
mapLink.setAttribute(‘aria-label’, `Open map for ${item.transportName}`);
mapLink.textContent = ‘Open Map’;
// गूगल मैप्स URL: https://www.google.com/maps?q=lat,lng
mapLink.href = `https://www.google.com/maps?q=${encodeURIComponent(item.lat)},${encodeURIComponent(item.lng)}`;
mapLink.target = ‘_blank’;
mapLink.rel = ‘noopener noreferrer’;

actions.appendChild(mapLink);
el.appendChild(actions);

return el;
}

// HTML एस्केपिंग — सुरक्षा हेतु
function escapeHtml(str){
if (!str && str !== 0) return ”;
return String(str)
.replaceAll(‘&’,’&amp;’)
.replaceAll(‘<‘,’&lt;’)
.replaceAll(‘>’,’&gt;’)
.replaceAll(‘”‘,’&quot;’)
.replaceAll(“‘”,’&#39;’);
}

// Optional: Keyboard shortcuts (Enter clears focus or moves)
// यदि user ने Enter दबाया search में — अगला पेज खुलना चाहिए (यह वैकल्पिक)
searchInput.addEventListener(‘keydown’, (e) => {
if (e.key === ‘Enter’){
// यहाँ हम पहले से ही live-search कर रहे हैं, तो सिर्फ फोकस हटाएँ
e.preventDefault();
// फोकस हटाकर रेंडर पर ध्यान दें
searchInput.blur();
}
});

/***** प्रारूपिक सुधार: पेज लोड पर प्राथमिक स्थिति सुनिश्चित करें *****/
(function ready(){
// सुनिश्चित करें कि currentPage within bounds
const maxPage = Math.max(1, Math.ceil(filtered.length / PER_PAGE));
if (currentPage > maxPage) currentPage = maxPage;
renderList();
})();

/***** नोट्स और आगे के सुझाव (कोड में) *****
* – असली डाटा के लिए transports[] को सर्वर से fetch करके बदलें (AJAX/Fetch).
* – यदि आप चाहते हैं कि सर्च सिर्फ Enter पर हो, तो input -> keydown में Enter पर applySearch(searchInput.value).
* – Map URL आप Place ID या encoded query के रूप में भी दे सकते हैं, यहाँ lat/lng सीधा दिया गया है।
* – आप चाहें तो mobile नंबर पर क्लिक करने पर tel: लिंक जोड़ सकते हैं।
************************************************************/
</script>
</body>
</html>

Animated Footer - Fixed
Scroll to Top