{"version":3,"sources":["assets/js/index.js"],"names":["pop_name","pop_address","pop_phone","pop_flag_newPatient","pop_website","pop_types_patients","pop_langs","pop_insurances","pop_providers","pop_display","pop_clickme","pop_clickable","markerL","setPopVars","feature","attrs","properties","popupHTML","Practice_name","undefined","Address1","Address2","City","State","Zip","practice_phone","practice_website","includes","acceptingnewpatients","toLowerCase","accepting_new_type","accepting_new_type_other_descri","lang_english","lang_spanish","lang_portuguese","lang_other","language_other_text","ins_bluecross","ins_united","ins_neighborhood","ins_tufts","ins_medicaid","ins_other","insurance_other_text","providers_all","split","join","mapURL","iconP","L","AwesomeMarkers","icon","prefix","spin","markerColor","iconL","iconColor","map","center","zoom","mapLink","userLink","attribution","tileLayer","addTo","geocode_point","vLayer","esri","featureLayer","url","pointToLayer","geojson","latlng","marker","onEachFeature","layer","content","bindPopup","locate","setView","maxZoom","enableHighAccuracy","addEventListener","e","panTo","animate","bounceOnAdd","bounceOnAddOptions","duration","openPopup","southWest","latLng","northEast","bounds","latLngBounds","geocoder","Geocoding","geosearch","position","searchBounds","title","placeHolder","zoomToResult","geocoder_result","layerGroup","get_nearest","point","feature_layer","factor","arr_points","eachFeature","fid_dis_point","coor","lat","geometry","coordinates","lng","point_current","id","dis","distance","fid","push","sort","a","b","top3","slice","fitbounds","forEach","element","x","Object","values","results","clearLayers","removeLayer","result_1st","addLayer","riseOnHover","nearest_points","nearest_bounds","fitBounds","flyTo","clear_btn","document","getElementById","querySelectorAll","checkbox","checked","setWhere","query_btn","checks","checks_checked","Array","from","filter","el","type","radio_checked","query_keys","value","where_str","length","key","radio_val","console","log"],"mappings":"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","file":"js.edec3bd4.js","sourceRoot":"..","sourcesContent":["let pop_name, pop_address, pop_phone, pop_flag_newPatient, pop_website, pop_types_patients\r\nlet pop_langs, pop_insurances, pop_providers,pop_display;\r\nlet pop_clickme;\r\nlet pop_clickable;\r\nlet markerL;//a marker created by geolocating\r\n\r\n\r\n\r\n\r\nfunction setPopVars(feature) {\r\n let attrs = feature.properties;\r\n pop_name = attrs.Practice_name;\r\n pop_address = `${attrs.Address1 == undefined? '':attrs.Address1}, \r\n ${attrs.Address2== undefined? '':attrs.Address2}, \r\n ${attrs.City == undefined? '': attrs.City}, \r\n ${attrs.State == undefined? '':attrs.State}, \r\n ${attrs.Zip == undefined? '':attrs.Zip}`\r\n pop_phone = attrs.practice_phone;\r\n pop_website = attrs.practice_website == undefined? undefined: (attrs.practice_website.includes('http')? attrs.practice_website:undefined);\r\n pop_clickme = pop_website == undefined? 'Not Available': 'Click Me';\r\n pop_clickable = pop_website == undefined? 'disabled': '';\r\n pop_flag_newPatient = attrs.acceptingnewpatients;\r\n pop_display = pop_flag_newPatient.toLowerCase() == 'yes'? '':'d-none';\r\n pop_types_patients = pop_display == 'd-none'? '': `${attrs.accepting_new_type}${attrs.accepting_new_type_other_descri == undefined? '':`, ${attrs.accepting_new_type_other_descri}`}`;\r\n pop_langs = `${attrs.lang_english.toLowerCase() == 'yes'? 'English':''}${attrs.lang_spanish.toLowerCase() == 'yes'? ', Spanish':''}${attrs.lang_portuguese.toLowerCase() == 'yes'? \", Portuguese\": ''}${attrs.lang_other.toLowerCase() == 'yes'? `, ${attrs.language_other_text}`: ''}`;\r\n pop_insurances = `${attrs.ins_bluecross.toLowerCase() == 'yes'? 'Blue Cross':''}${attrs.ins_united.toLowerCase() == \"yes\"? \", United\":''}${attrs.ins_neighborhood.toLowerCase() == \"yes\"? \", Neighborhood\":''}${attrs.ins_tufts.toLowerCase() == \"yes\"? \", Tufts\":''}${attrs.ins_medicaid.toLowerCase() == \"yes\"? \", Medicaid\": ''}${attrs.ins_other.toLowerCase() == \"yes\"? `, ${attrs.insurance_other_text}`: ''}`;\r\n pop_providers = attrs.providers_all.split(';').join('
');\r\n let popupHTML = `
${pop_name}

\r\n Address: ${pop_address}
\r\n Phone: ${pop_phone}
\r\n Website: ${pop_clickme}

\r\n New Patients Accepted? ${pop_flag_newPatient}
\r\n Types of New Patients: ${pop_types_patients}

\r\n Languages Spoken: ${pop_langs}

\r\n Insurances Accepted: ${pop_insurances}

\r\n Providers:
\r\n ${pop_providers}`\r\n return popupHTML;\r\n}\r\n\r\nconst mapURL = \"https://services.arcgis.com/8veDRDlhXWywYP3S/ArcGIS/rest/services/PediatricProviders2020_1/FeatureServer/0\"\r\n//create an icon for providers\r\nlet iconP = L.AwesomeMarkers.icon({\r\n icon: \"clinic-medical\",\r\n prefix: \"fa\",\r\n spin: false,\r\n markerColor: \"blue\"\r\n\r\n\r\n});\r\n//create an icon for successful locating\r\nlet iconL = L.AwesomeMarkers.icon({\r\n icon:\"map-marker-alt\",\r\n spin: false,\r\n prefix: \"fa\",\r\n iconColor: \"white\",\r\n markerColor: \"orange\"\r\n\r\n\r\n});\r\n\r\n//set up basemap\r\nlet map = L.map('map',\r\n {\r\n center: [41.825606, -71.407919],\r\n zoom: 13,\r\n });\r\nconst mapLink = 'OpenStreetMap';\r\nconst userLink = 'Guixing Wei@S4';\r\nlet attribution = '©' + mapLink + 'Developer '+ '| ©' + userLink + '';\r\nL.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png',{\r\n attribution:attribution,\r\n}).addTo(map);\r\n\r\n//load wfs service\r\nlet vLayer = L.esri.featureLayer({\r\n url: mapURL,\r\n pointToLayer: function (geojson, latlng) {\r\n return L.marker(latlng,{icon: iconP})\r\n },\r\n onEachFeature: function (feature,layer) {\r\n let content = setPopVars(feature);\r\n layer.bindPopup(content).addTo(map);\r\n }\r\n\r\n}).addTo(map);\r\n\r\n//map locate\r\nmap.locate({\r\n setView: false,\r\n maxZoom: 13,\r\n enableHighAccuracy: true,\r\n});\r\nmap.addEventListener('locationfound', function (e) {\r\n map.panTo(e.latlng, {animate: false});\r\n markerL = new L.marker(e.latlng,\r\n {icon: iconL,\r\n bounceOnAdd: true,\r\n bounceOnAddOptions: {duration:1500}\r\n })\r\n .bindPopup(\"You are here!\")\r\n .addTo(map);\r\n markerL.openPopup();\r\n\r\n\r\n\r\n});\r\nmap.addEventListener('locationerror', function (e) {\r\n //alert(\"Unable to locate; please enable your browser's location service!\");\r\n});\r\n\r\n//add geocoder contorl\r\nlet geocode_point;\r\nconst southWest = L.latLng(41.363407,-71.829872),\r\n northEast = L.latLng(42.006935,-71.250924),\r\n bounds = L.latLngBounds(southWest,northEast);\r\nlet geocoder = L.esri.Geocoding.geosearch({\r\n position: 'topleft',\r\n searchBounds: bounds,\r\n title: \"Put in your address to find practices near you\",\r\n placeHolder: \"Address search\",\r\n zoomToResult: false\r\n}).addTo(map);\r\nlet geocoder_result = L.layerGroup().addTo(map);\r\ngeocoder.addEventListener('results', results=>{\r\n geocoder_result.clearLayers();\r\n if (markerL != undefined) {\r\n map.removeLayer(markerL);\r\n };\r\n result_1st = results.results[0].latlng;\r\n geocoder_result.addLayer(L.marker(result_1st, {riseOnHover:true, icon:iconL}));\r\n let nearest_points = get_nearest(result_1st,map, vLayer,8);\r\n //console.log(nearest_points);\r\n let nearest_bounds = L.latLngBounds(nearest_points);\r\n map.fitBounds(nearest_bounds);\r\n map.flyTo(result_1st);\r\n\r\n});\r\n\r\n\r\nfunction get_nearest(point,map,feature_layer,factor = 5){\r\n let arr_points = [];\r\n feature_layer.eachFeature(function(layer) {\r\n let feature = layer.feature;\r\n let fid_dis_point = {};\r\n //console.log(feature);\r\n let coor = {lat:feature.geometry.coordinates[1], lng: feature.geometry.coordinates[0]};\r\n let point_current = L.latLng(coor);\r\n let id = feature.id;\r\n let dis = map.distance(point_current,point);\r\n fid_dis_point.fid = id;\r\n fid_dis_point.dis = dis;\r\n fid_dis_point.point = point_current;\r\n arr_points.push(fid_dis_point);\r\n });\r\n arr_points.sort((a,b)=> (a.dis > b.dis)? 1:-1);\r\n let top3 = arr_points.slice(0,factor);\r\n let bounds = [point];\r\n let fitbounds =[];\r\n top3.forEach(function (element) {\r\n bounds.push(element.point);\r\n });\r\n bounds.forEach(function (x) {\r\n fitbounds.push(Object.values(x));\r\n });\r\n return fitbounds;\r\n};\r\nlet clear_btn = document.getElementById(\"clear-btn\");\r\nclear_btn.addEventListener(\"click\", function(){\r\n let checks = document.querySelectorAll(\".form-check-input\");\r\n checks.forEach(function (checkbox){\r\n checkbox.checked = false;\r\n });\r\n vLayer.setWhere(\"1=1\");\r\n })\r\nlet query_btn = document.getElementById(\"query-btn\");\r\nquery_btn.addEventListener(\"click\", function(){\r\n let checks = document.querySelectorAll(\".form-check-input\");\r\n checks = Array.from(checks);\r\n let checks_checked = checks.filter(el=>el.checked && el.type == \"checkbox\");\r\n let radio_checked = checks.filter(el=>el.checked && el.type == \"radio\");\r\n let query_keys = checks_checked.map(el=>el.value);\r\n let where_str = '1=1';\r\n if (query_keys.length > 0){\r\n query_keys.forEach(key => {where_str+=` AND ${key}='Yes'`});};\r\n if (radio_checked.length==1) {\r\n let radio_val = radio_checked[0].value;\r\n switch (radio_val) {\r\n case \"No\":\r\n where_str+=` AND acceptingnewpatients = 'No'`;\r\n break;\r\n default:\r\n where_str+= ` AND accepting_new_type = '${radio_val}'`;\r\n break;\r\n }\r\n\r\n };\r\n console.log(where_str);\r\n vLayer.setWhere(where_str);\r\n\r\n\r\n})\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"]}