", { 'data-alpha': lowerCase(val.name)[0].toString(), 'data-startmonth': startmonth.toString(), 'data-endmonth': endmonth.toString() }) .append($(ahref)) .append($("
", { text: formattedClosureDate.toString() })) .append($(" | ", { text: val.reason.replace('(', '').replace(')', '') })) .append($(" | ", { text: val.remarks.toString() })) $('#hawkerList').append(row); }); } } function filterList(this_obj) { $('#tableShow').hide(); $('#tableHide').show(); $('#hawkerList tr').hide(); if (this_obj != null) this_obj.addClass('active'); var months = $('.monthListing li.active').data('month').split('-'); var alphas = $('.alphaListing li.active').data('alpha').split('-'); $('#hawkerList tr').each(function () { var currentObj = $(this); if (alphas.includes(currentObj.data('alpha')) && ( months.includes('' + currentObj.data('startmonth')) || months.includes('' + currentObj.data('endmonth')) )) { currentObj.show(); $('#tableShow').show(); $('#tableHide').hide(); } }); } function sortList(this_obj) { $('#hawkerList').html(''); $('#tableShow').hide(); $('#tableHide').show(); var dataid = this_obj.data('id'); var dataorderby = this_obj.data('orderby'); var returnASC = -1; var returnDESC = 1; if (dataorderby == 'asc') { dataorderby = 'desc'; returnASC = 1; returnDESC = -1; } else if (dataorderby = 'desc') { dataorderby = 'asc'; returnASC = -1; returnDESC = 1; } hawkerCentres.sort(function (a, b) { if (dataid == 0) { var x = lowerCase(a.name); var y = lowerCase(b.name); if (x > y) return returnDESC;// 1; if (x < y) return returnASC;// -1; } else if (dataid == 1 && a.closuredatestring != b.closuredatestring) { if (a.closuredatestring > b.closuredatestring) return returnDESC;// 1; if (a.closuredatestring < b.closuredatestring) return returnASC;// -1; } return 0; }); generateList(hawkerCentres); filterList(); this_obj.data('orderby', dataorderby); $('#tableShow').show(); $('#tableHide').hide(); } function zoomLocation(id) { hawkerCentres.forEach(function (hawkercentre) { if (hawkercentre.id == id) { var latLngs = [hawkercentre.marker.getLatLng()]; var markerBounds = L.latLngBounds(latLngs); map.fitBounds(markerBounds); hawkercentre.marker.openPopup(); } }); $('html,body').animate({ scrollTop: $('#onemap').offset().top }, 800, function () { location.hash = '#onemap'; }); } function lowerCase(value) { return value ? value.toLowerCase() : ''; } $(document).ready(function () { $('.monthListing li').on('click', function () { $('.monthListing li').removeClass('active'); filterList($(this)); }); $('.alphaListing li').on('click', function () { $('.alphaListing li').removeClass('active'); filterList($(this)); }); $('.hawker-header').on('click', function () { sortList($(this)); }); var currentMonth = new Date().getMonth() + 1; var datamonths = ['1-2-3', '4-5-6', '7-8-9', '10-11-12']; var currentdatamonth = '1-2-3'; datamonths.forEach(function (itemMonth) { itemMonth.split('-').forEach(function (i) { if (i.trim() === currentMonth.toString()) { currentdatamonth = itemMonth; } }); }); $('.monthListing li[data-month="' + currentdatamonth + '"').addClass('active'); getdata(); }); var urlGovapi = 'https://data.gov.sg/api/action/datastore_search?resource_id=b80cb643-a732-480d-86b5-e03957bc82aa&limit=999'; function getdata() { $.get(urlGovapi, function (data) { if (data != null) { for (var i = 0; i < data.result.records.length; i++) { var result = data.result.records[i]; if (lowerCase(result.status) == 'under construction' || lowerCase(result.status) == 'proposed') { continue; } var lat = parseFloat(result.latitude_hc); var lng = parseFloat(result.longitude_hc); var q1_cleaningstartdate = stringToDate(result.q1_cleaningstartdate); var q2_cleaningstartdate = stringToDate(result.q2_cleaningstartdate); var q3_cleaningstartdate = stringToDate(result.q3_cleaningstartdate); var q4_cleaningstartdate = stringToDate(result.q4_cleaningstartdate); var other_works_startdate = stringToDate(result.other_works_startdate); var q1_cleaningenddate = stringToDate(result.q1_cleaningenddate); var q2_cleaningenddate = stringToDate(result.q2_cleaningenddate); var q3_cleaningenddate = stringToDate(result.q3_cleaningenddate); var q4_cleaningenddate = stringToDate(result.q4_cleaningenddate); var other_works_enddate = stringToDate(result.other_works_enddate); var now = new Date(); now = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0); var furuteTime = []; if (now <= q1_cleaningenddate) furuteTime.push({ 'key': 'q1', 'startdate': q1_cleaningstartdate, 'startdate_string': result.q1_cleaningstartdate, 'enddate_string': result.q1_cleaningenddate, 'remark': result.remarks_q1 }); if (now <= q2_cleaningenddate) furuteTime.push({ 'key': 'q2', 'startdate': q2_cleaningstartdate, 'startdate_string': result.q2_cleaningstartdate, 'enddate_string': result.q2_cleaningenddate, 'remark': result.remarks_q2 }); if (now <= q3_cleaningenddate) furuteTime.push({ 'key': 'q3', 'startdate': q3_cleaningstartdate, 'startdate_string': result.q3_cleaningstartdate, 'enddate_string': result.q3_cleaningenddate, 'remark': result.remarks_q3 }); if (now <= q4_cleaningenddate) furuteTime.push({ 'key': 'q4', 'startdate': q4_cleaningstartdate, 'startdate_string': result.q4_cleaningstartdate, 'enddate_string': result.q4_cleaningenddate, 'remark': result.remarks_q4 }); if (now <= other_works_enddate) furuteTime.push({ 'key': 'other', 'startdate': other_works_startdate, 'startdate_string': result.other_works_startdate, 'enddate_string': result.other_works_enddate, 'remark': result.remarks_other_works }); furuteTime = furuteTime.sort(function (a, b) { return a.startdate > b.startdate ? 1 : -1; }); var status = ''; var earliestItems = furuteTime.filter(function (f) { return f.startdate <= now; }).sort(function (a, b) { return a.startdate > b.startdate ? 1 : -1; }); if (earliestItems.length > 0) status = earliestItems[0].key == 'other' ? 'CLOSED FOR OTHER WORKS' : 'CLOSED FOR CLEANING'; if (status == '') status = 'OPEN'; // Start Binding to map var htmlClosureDate = ''; var htmlRemarks = ''; if (furuteTime.length > 0) { htmlClosureDate = 'Closure Date ' + furuteTime[0].startdate_string + ' to ' + furuteTime[0].enddate_string; htmlClosureDate += furuteTime[0].key == 'other' ? ' (Other Works) ' : ' (Cleaning) '; var mapRemarks = furuteTime[0].remark.toLowerCase() != 'nil' && furuteTime[0].remark.toLowerCase() != 'na' ? furuteTime[0].remark : ''; htmlRemarks = mapRemarks == '' ? '' : 'Remarks ' + mapRemarks + ' '; } var marker = new L.marker([lat, lng], { title: result.name, address: result.address_myenv, icon: blueIcon, alt: 'marker' }); var updatedPopup = popupTemplate.replace('{hawkerName}', result.name) .replace('{hawkerFoodStalls}', result.no_of_food_stalls) .replace('{hawkerMarketStalls}', result.no_of_market_stalls) .replace('{hawkerStatus}', status) .replace('{hawkerClosureDate}', htmlClosureDate) .replace('{hawkerRemarks}', htmlRemarks) .replace('{hawkerAddress}', result.address_myenv); marker.bindPopup(updatedPopup, { maxWidth: 220 }).addTo(map); searchLayer.addLayer(marker); // End Binding to map furuteTime.forEach(function (itemTime) { var closureDate = itemTime.startdate_string + ' to ' + itemTime.enddate_string; var reason = itemTime.key == 'other' ? '(Other Works)' : '(Cleaning)'; var remarks = itemTime.remark.toLowerCase() != 'nil' && itemTime.remark.toLowerCase() != 'na' ? itemTime.remark : ''; var closureDateArr = closureDate.split(' to '); var closuredatestring = ''; // closureDate to string format: YYYYMMDD YYYYMMDD closureDateArr.forEach(function (d) { var arr = d.split('/'); if (arr.length == 3) { if (arr[1].length == 1) arr[1] = '0' + arr[1]; if (arr[0].length == 1) arr[0] = '0' + arr[0]; closuredatestring += arr[2] + arr[1] + arr[0] + ' '; } }); //append to list hawkerCentres.push({ 'id': lowerCase(result.name).replace(/[^a-z0-9]/gi, ''), 'name': result.name, 'marker': marker, 'closuredate': closureDate, 'closuredatestring': closuredatestring, 'reason': reason, 'remarks': remarks }); }); } } hawkerCentres.sort(function (a, b) { if (a.closuredatestring != b.closuredatestring) { if (a.closuredatestring > b.closuredatestring) return 1; if (a.closuredatestring < b.closuredatestring) return -1; } var x = lowerCase(a.name); var y = lowerCase(b.name); if (x < y) return -1; if (x > y) return 1; return 0; }); generateList(hawkerCentres); filterList(); }); } |