{"mappings":"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","sources":["node_modules/esri-loader/dist/esm/utils/url.js","node_modules/esri-loader/dist/esm/utils/css.js","node_modules/esri-loader/dist/esm/utils/index.js","node_modules/esri-loader/dist/esm/script.js","node_modules/esri-loader/dist/esm/modules.js","node_modules/esri-loader/dist/esm/esri-loader.js","assets/js/index.js"],"sourcesContent":["/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar DEFAULT_VERSION = '4.15';\nvar NEXT = 'next';\nexport function parseVersion(version) {\n if (version.toLowerCase() === NEXT) {\n return NEXT;\n }\n var match = version && version.match(/^(\\d)\\.(\\d+)/);\n return match && {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10)\n };\n}\n/**\n * Get the CDN url for a given version\n *\n * @param version Ex: '4.15' or '3.32'. Defaults to the latest 4.x version.\n */\nexport function getCdnUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n return \"https://js.arcgis.com/\" + version + \"/\";\n}\n/**\n * Get the CDN url for a the CSS for a given version and/or theme\n *\n * @param version Ex: '4.15', '3.32', or 'next'. Defaults to the latest 4.x version.\n */\nexport function getCdnCssUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n var baseUrl = getCdnUrl(version);\n var parsedVersion = parseVersion(version);\n if (parsedVersion !== NEXT && parsedVersion.major === 3) {\n // NOTE: at 3.11 the CSS moved from the /js folder to the root\n var path = parsedVersion.minor <= 10 ? 'js/' : '';\n return \"\" + baseUrl + path + \"esri/css/esri.css\";\n }\n else {\n // assume 4.x\n return baseUrl + \"esri/themes/light/main.css\";\n }\n}\n","/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nimport { getCdnCssUrl, parseVersion } from './url';\nfunction createStylesheetLink(href) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n return link;\n}\nfunction insertLink(link, before) {\n if (before) {\n // the link should be inserted before a specific node\n var beforeNode = document.querySelector(before);\n beforeNode.parentNode.insertBefore(link, beforeNode);\n }\n else {\n // append the link to then end of the head tag\n document.head.appendChild(link);\n }\n}\n// check if the css url has been injected or added manually\nfunction getCss(url) {\n return document.querySelector(\"link[href*=\\\"\" + url + \"\\\"]\");\n}\nfunction getCssUrl(urlOrVersion) {\n return !urlOrVersion || parseVersion(urlOrVersion)\n // if it's a valid version string return the CDN URL\n ? getCdnCssUrl(urlOrVersion)\n // otherwise assume it's a URL and return that\n : urlOrVersion;\n}\n// lazy load the CSS needed for the ArcGIS API\nexport function loadCss(urlOrVersion, before) {\n var url = getCssUrl(urlOrVersion);\n var link = getCss(url);\n if (!link) {\n // create & load the css link\n link = createStylesheetLink(url);\n insertLink(link, before);\n }\n return link;\n}\n","/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar isBrowser = typeof window !== 'undefined';\n// allow consuming libraries to provide their own Promise implementations\nexport default {\n Promise: isBrowser ? window['Promise'] : undefined\n};\n","/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nimport { loadCss } from './utils/css';\nimport utils from './utils/index';\nimport { getCdnUrl } from './utils/url';\nvar defaultOptions = {};\nfunction createScript(url) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.setAttribute('data-esri-loader', 'loading');\n return script;\n}\n// add a one-time load handler to script\n// and optionally add a one time error handler as well\nfunction handleScriptLoad(script, callback, errback) {\n var onScriptError;\n if (errback) {\n // set up an error handler as well\n onScriptError = handleScriptError(script, errback);\n }\n var onScriptLoad = function () {\n // pass the script to the callback\n callback(script);\n // remove this event listener\n script.removeEventListener('load', onScriptLoad, false);\n if (onScriptError) {\n // remove the error listener as well\n script.removeEventListener('error', onScriptError, false);\n }\n };\n script.addEventListener('load', onScriptLoad, false);\n}\n// add a one-time error handler to the script\nfunction handleScriptError(script, callback) {\n var onScriptError = function (e) {\n // reject the promise and remove this event listener\n callback(e.error || new Error(\"There was an error attempting to load \" + script.src));\n // remove this event listener\n script.removeEventListener('error', onScriptError, false);\n };\n script.addEventListener('error', onScriptError, false);\n return onScriptError;\n}\n// allow the user to configure default script options rather than passing options to `loadModules` each time\nexport function setDefaultOptions(options) {\n if (options === void 0) { options = {}; }\n defaultOptions = options;\n}\n// get the script injected by this library\nexport function getScript() {\n return document.querySelector('script[data-esri-loader]');\n}\n// has ArcGIS API been loaded on the page yet?\nexport function isLoaded() {\n var globalRequire = window['require'];\n // .on() ensures that it's Dojo's AMD loader\n return globalRequire && globalRequire.on;\n}\n// load the ArcGIS API on the page\nexport function loadScript(options) {\n if (options === void 0) { options = {}; }\n // we would have liked to use spread like { ...defaultOptions, ...options }\n // but TS would inject a polyfill that would require use to configure rollup w content: 'window'\n // if we have another occasion to use spread, let'd do that and replace this for...in\n var opts = {};\n [defaultOptions, options].forEach(function (obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n opts[prop] = obj[prop];\n }\n }\n });\n // URL to load\n var version = opts.version;\n var url = opts.url || getCdnUrl(version);\n return new utils.Promise(function (resolve, reject) {\n var script = getScript();\n if (script) {\n // the API is already loaded or in the process of loading...\n // NOTE: have to test against scr attribute value, not script.src\n // b/c the latter will return the full url for relative paths\n var src = script.getAttribute('src');\n if (src !== url) {\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded (\" + src + \").\"));\n }\n else {\n if (isLoaded()) {\n // the script has already successfully loaded\n resolve(script);\n }\n else {\n // wait for the script to load and then resolve\n handleScriptLoad(script, resolve, reject);\n }\n }\n }\n else {\n if (isLoaded()) {\n // the API has been loaded by some other means\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded.\"));\n }\n else {\n // this is the first time attempting to load the API\n var css = opts.css;\n if (css) {\n var useVersion = css === true;\n // load the css before loading the script\n loadCss(useVersion ? version : css, opts.insertCssBefore);\n }\n if (opts.dojoConfig) {\n // set dojo configuration parameters before loading the script\n window['dojoConfig'] = opts.dojoConfig;\n }\n // create a script object whose source points to the API\n script = createScript(url);\n // _currentUrl = url;\n // once the script is loaded...\n handleScriptLoad(script, function () {\n // update the status of the script\n script.setAttribute('data-esri-loader', 'loaded');\n // return the script\n resolve(script);\n }, reject);\n // load the script\n document.body.appendChild(script);\n }\n }\n });\n}\n","/* Copyright (c) 2017 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nimport { getScript, isLoaded, loadScript } from './script';\nimport utils from './utils/index';\n// wrap Dojo's require() in a promise\nfunction requireModules(modules) {\n return new utils.Promise(function (resolve, reject) {\n // If something goes wrong loading the esri/dojo scripts, reject with the error.\n var errorHandler = window['require'].on('error', reject);\n window['require'](modules, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // remove error handler\n errorHandler.remove();\n // Resolve with the parameters from dojo require as an array.\n resolve(args);\n });\n });\n}\n// returns a promise that resolves with an array of the required modules\n// also will attempt to lazy load the ArcGIS API if it has not already been loaded\nexport function loadModules(modules, loadScriptOptions) {\n if (loadScriptOptions === void 0) { loadScriptOptions = {}; }\n if (!isLoaded()) {\n // script is not yet loaded, is it in the process of loading?\n var script = getScript();\n var src = script && script.getAttribute('src');\n if (!loadScriptOptions.url && src) {\n // script is still loading and user did not specify a URL\n // in this case we want to default to the URL that's being loaded\n // instead of defaulting to the latest 4.x URL\n loadScriptOptions.url = src;\n }\n // attempt to load the script then load the modules\n return loadScript(loadScriptOptions).then(function () { return requireModules(modules); });\n }\n else {\n // script is already loaded, just load the modules\n return requireModules(modules);\n }\n}\n","/*\n Copyright (c) 2017 Esri\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n// re-export the functions that are part of the public API\nimport { loadModules } from './modules';\nimport { getScript, isLoaded, loadScript, setDefaultOptions } from './script';\nimport { loadCss } from './utils/css';\nimport utils from './utils/index';\nexport { getScript, isLoaded, loadModules, loadScript, loadCss, setDefaultOptions, utils };\n// NOTE: rollup ignores the default export\n// and builds the UMD namespace out of the above named exports\n// so this is only needed so that consumers of the ESM build\n// can do esriLoader.loadModules(), etc\n// TODO: remove this next breaking change\nexport default {\n getScript: getScript,\n isLoaded: isLoaded,\n loadModules: loadModules,\n loadScript: loadScript,\n loadCss: loadCss,\n setDefaultOptions: setDefaultOptions,\n utils: utils\n};\n","import {loadModules} from \"esri-loader\";\r\nconst dojoConfig = {\r\n version: \"4.15\",\r\n css: true\r\n}\r\nconst PRINTURL = \"https://s4.ad.brown.edu/s4gisserver/rest/services/printnew/GPServer/Export%20Web%20Map\";\r\nconst preMapserver = \"https://s4.ad.brown.edu/s4gisserver/rest/services/HCity\";\r\n\r\nconst extractURL = \"https://s4.ad.brown.edu/s4gisserver/rest/services/HCity/ExtractDataTask/GPServer/Extract%20Data%20Task\";\r\nlet city = null, variable = null; //initialization of the select values of the sidebar\r\nlet map = null, view = null, basemap=null, legend = null;\r\nlet h30=null, h40=null, ed30=null, ward30=null, ed40=null, ward40=null, visibleLayer=null;\r\nconst ID_ed30 = 0, ID_ed40 = 1, ID_ward30 = 2, ID_ward40 = 3;\r\nlet highlightHandle = null, featureSetSelected = null,aoi =null;\r\nconst opacityDefault = 0.7;\r\nconst h30Tail = \"street30\", h40Tail = \"street40\"; //two historical basemap layers for 1930 & 1940\r\n//prepare the renderer for manual breaks\r\nlet colorSet = [\r\n {r:68, g:1, b: 84, a:1},//small\r\n {r:72, g:40, b:120, a:1},\r\n {r:62,g:74,b:137,a:1},\r\n {r:49,g:104,b:142,a:1},\r\n {r:38,g:130,b:142,a:1},\r\n {r:31,g:158,b:137,a:1},\r\n {r:53,g:183,b:121,a:1},\r\n {r:109,g:205,b:89,a:1},\r\n {r:180,g:222,b:44,a:1},\r\n {r:253,g:231,b:37,a:1}//large\r\n ];\r\ncolorSet = colorSet.reverse();\r\nconst labels = {\r\n \"totalpop\":[\"0 - 250\",\">250 - 500\",\">500 - 750\",\">750 - 1,000\",\">1,000 - 1,250\",\">1,250 - 1,500\",\">1500 - 2,000\",\">2,000 - 2,500\",\">2,500 - 5,000\",\">5,000 - 10,000\"],\r\n \"bpct\":[\"0\",\">0 - 1\",\">1 - 3\",\">3 - 5\",\">5 - 10\",\">10 - 25\",\">25 - 50\",\">50 - 75\",\">75 - 90\",\">90 - 100\"],\r\n \"immpct\": [\"0 - 2\",\">2 - 5\",\">5 - 10\",\">10 - 15\",\">15 - 20\",\">20 - 25\",\">25 - 30\",\">30 - 35\",\">35 - 50\", \">50 - 100\"],\r\n \"meansei\": [\"0 - 10\",\">10 - 15\",\">15 - 20\",\">20 - 25\",\">25 - 30\",\">30 - 35\",\">35 - 40\",\">40 - 45\",\">45 - 50\", \">50 - 100\"],\r\n \"medsei\":[\"0 -10\",\">10 - 15\",\">15 - 20\",\">20 - 25\",\">25 - 30\",\">30 - 35\",\">35 - 40\",\">40 - 45\",\">45 - 50\", \">50 -100\"]};\r\nconst small = 0.000001;\r\nconst breaks = {\r\n \"totalpop\":[[0,250],[250+small,500],[500+small,750],[750+small,1000],[1000+small, 1250],[1250+small,1500],[1500+small,2000,],[2000+small,2500],[2500+small,5000],[5000+small,10000]],\r\n \"bpct\":[[0,0],[small,1],[1+small,3],[3+small, 5],[5+small, 10],[10+small, 25],[25+small,50],[50+small, 75],[75+small, 90],[90+small,100]],\r\n \"immpct\": [[0,2],[2+small, 5],[5+small, 10],[10+small, 15],[15+small,20],[20+small,25],[25+small,30],[30+small,35],[35+small,50],[50+small,100]],\r\n \"meansei\": [[0,10],[10+small,15],[15+small,20],[20+small,25],[25+small,30],[30+small,35],[35+small,40],[40+small,45],[45+small,50],[50+small,100]],\r\n \"medsei\":[[0,10],[10+small,15],[15+small,20],[20+small,25],[25+small,30],[30+small,35],[35+small,40],[40+small,45],[45+small,50],[50+small,100]]\r\n}\r\nconst symbols = colorSet.map(col=>({type: \"simple-fill\", color: col, style: \"solid\", outline:{width:0.2, color: [50,50, 50, 0.5]}}));\r\nlet classBreakInfos={\"totalpop\":[],\"bpct\":[],\"immpct\":[],\"meansei\":[],\"medsei\":[]};\r\nfor (let key in labels){\r\n let i = 0, vals = labels[key];\r\n for (let label of vals){\r\n //classBreakInfos[key].push(new ClassBreakInfo(label=label, maxValue=breaks[i][1], minValue=breaks[i][0], symbol=symbols[i]));\r\n classBreakInfos[key].push({label:label, maxValue:breaks[key][i][1], minValue:breaks[key][i][0], symbol:symbols[i]});\r\n i+=1;\r\n }\r\n}\r\n\r\nconst defaultSymbol = {type: \"simple-fill\", color: {r:195,g:195,b:195,a:0.5}, style: \"solid\", outline:{width:0.2, color: [50, 50, 50, 0.5]}};\r\nlet renderers = {};\r\nconst aliases = {\r\n \"totalpop\": \"Total population\",\r\n \"wpop\": \"Total white population\",\r\n \"bpop\": \"Total black population\",\r\n \"immpop\": \"Total population born outside US\",\r\n \"bpct\": \"Percent of black population\",\r\n \"immpct\": \"Percent of population born outside US\",\r\n \"meansei\": \"Mean SEI Score\",\r\n \"medsei\": \"Median SEI Score\" };\r\n\r\nfor (let f in labels){\r\n renderers[f] = {type:\"class-breaks\",\r\n field:f,\r\n defaultSymbol:defaultSymbol,\r\n defaultLabel: \"No data\",\r\n classBreakInfos:classBreakInfos[f],\r\n legendOptions:{title:aliases[f]}\r\n };\r\n}\r\n//the end of manual breaks&colors\r\n\r\n\r\n\r\nconst contentTemplate = {\r\n type: \"fields\",\r\n fieldInfos: [{fieldName:\"totalpop\", label: \"Total Population\"},\r\n {fieldName:\"wpop\", label: \"Total White Population\"},\r\n {fieldName:\"bpop\", label: \"Total Black Popuplation\"},\r\n {fieldName:\"immpop\", label: \"Total Population Born Outside US\"},\r\n {fieldName:\"bpct\", label: \"Black Population %\",format:{places:2}},\r\n {fieldName:\"immpct\", label: \"Population Born Outside US %\",format:{places:2}},\r\n {fieldName:\"meansei\", label: \"Mean SEI Score\",format:{places:2}},\r\n {fieldName:\"medsei\", label: \"Median SEI Score\", format:{places:2}}]\r\n\r\n}\r\nconst popupTemplateED = {\r\n title:\"Detailed Info: ED-{ED} in Ward-{ward}\",\r\n content:[contentTemplate],\r\n\r\n}\r\nconst popupTemplateWard = {\r\n title:\"Detailed Info: Ward-{ward}\",\r\n content:[contentTemplate],\r\n\r\n}\r\nlet maskDiv = document.getElementById(\"mask\");\r\n\r\nconst edDefaultSymbol = {\r\n type: \"simple\",\r\n symbol: {\r\n type: 'simple-fill',\r\n style: \"none\",\r\n outline: {\r\n color: [217, 43, 43, 1],\r\n width: \"1.5px\"\r\n }\r\n }\r\n};\r\nconst wardDefaultSymbol = {\r\n type: \"simple\",\r\n symbol: {\r\n type: 'simple-fill',\r\n style: \"none\",\r\n outline: {\r\n color: [53, 8, 224, 1],\r\n width: \"1.5px\"\r\n }\r\n }\r\n};\r\nconst citiesNoWard = [\"DenverCO\", \"HoustonTX\", \"LosAngelesCA\", \"OaklandCA\", \"SanAntonioTX\", \"SeattleWA\", \"TulsaOK\", \"SpokaneWA\"];\r\n\r\n\r\nloadModules([\"esri/Map\",\"esri/views/MapView\", \"esri/widgets/Zoom\", \"esri/widgets/Search\", \"esri/widgets/BasemapGallery\",\r\n\"esri/widgets/ScaleBar\", \"esri/widgets/Expand\", \"esri/widgets/Print\", \"esri/layers/FeatureLayer\", \"esri/widgets/Sketch\", \"esri/layers/GraphicsLayer\", \"esri/layers/TileLayer\", \"esri/core/watchUtils\",\"esri/tasks/support/Query\", \"esri/renderers/smartMapping/creators/color\", \"esri/widgets/Legend\", \"esri/widgets/Slider\", \"esri/renderers/support/ClassBreakInfo\"], dojoConfig)\r\n .then(([Map, MapView, Zoom, Search, BasemapGallery, ScaleBar, Expand, Print, FeatureLayer,Sketch,GraphicsLayer, TileLayer, watchUtils,Query, colorRendererCreator, Legend, Slider, ClassBreakInfo])=>{\r\n\r\n\r\n map = new Map({\r\n basemap: \"topo\"\r\n });\r\n view = new MapView({\r\n container: \"mapDiv\",\r\n map: map,\r\n center: [-98.579351, 39.828436],\r\n zoom: 5\r\n });\r\n view.popup.dockOptions = {buttonEnabled: false}\r\n\r\n\r\n view.ui.components = [];\r\n watchUtils.watch(view, \"ready\", (newVal, oldVal)=>{\r\n //add loading gif\r\n newVal? maskDiv.classList.add(\"d-none\"): maskDiv.classList.remove(\"d-none\");\r\n\r\n })\r\n view.when(function () {\r\n //add widgets\r\n let zoom = new Zoom({\r\n view: view,\r\n layout: \"vertical\"\r\n });\r\n view.ui.add(zoom, \"bottom-right\");\r\n let search = new Search({\r\n view: view\r\n });\r\n view.ui.add(search, {position: \"bottom-right\", index: 1});\r\n //put basemap into a expandable container\r\n /*let basemapGallery = new BasemapGallery({\r\n view: view,\r\n container: document.createElement(\"div\"),\r\n\r\n });\r\n\r\n let expandMapGallery = new Expand({\r\n view: view,\r\n content: basemapGallery\r\n })\r\n\r\n view.ui.add(expandMapGallery, {\r\n position: \"top-right\"\r\n });*/\r\n let basemapGallery = new BasemapGallery({\r\n view: view,\r\n container:\"basemap\"\r\n });\r\n\r\n let scaleBar = new ScaleBar({\r\n view: view\r\n });\r\n view.ui.add(scaleBar, {\r\n position: \"bottom-left\"\r\n });\r\n\r\n //add slider\r\n let slider = new Slider({\r\n container: \"slider-div\",\r\n min: 0,\r\n max:1,\r\n values:[opacityDefault],\r\n steps: 0.05,\r\n tickConfigs: [{mode:\"position\", values:[0,0.5,1], labelsVisible: true}],\r\n snapOnClickEnabled: false,\r\n\r\n });\r\n slider.on(\"thumb-drag\", evt=>{\r\n visibleLayer.opacity = evt.value;\r\n\r\n });\r\n\r\n\r\n\r\n function resetSlider(mode=0){\r\n //mode:0=>city changed, mode:else=>simply variable changes\r\n if (mode === 0){\r\n (slider.values=[opacityDefault])\r\n }\r\n else {visibleLayer? visibleLayer.opacity = slider.values[0]:{};}//visiblelayer is null -> ward data is not avail.\r\n }\r\n\r\n let yearSlider = new Slider({\r\n container: \"slider-year\",\r\n min: 1930,\r\n max: 1940,\r\n values: [1930],\r\n steps: 10,\r\n tickConfigs:[{mode: \"position\", values:[1930, 1940], labelsVisible: true}],\r\n snapOnClickEnabled:true\r\n })\r\n yearSlider.on(\"thumb-drag\", evt=>{\r\n resetSlider(1)\r\n determineVisibility(evt);\r\n setLegendLyrTitle();\r\n let selectedVar = document.getElementById(\"select-var\").value;\r\n if (selectedVar!==\"none\"){\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>{\r\n\r\n lyr.visible? lyr.renderer = renderers[selectedVar]:{};\r\n\r\n });} else{\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>\r\n lyr.visible? (lyr.id.includes('ed')? lyr.renderer = edDefaultSymbol: lyr.renderer = wardDefaultSymbol):{});\r\n\r\n }\r\n view.popup.close();//close the current popup\r\n })\r\n\r\n\r\n //add printing service\r\n let print = new Print({\r\n view: view,\r\n container: \"toolsbarsColDiv\",\r\n printServiceUrl:PRINTURL\r\n });\r\n view.ui.add(print, \"manual\");\r\n //add freehand select\r\n let graphicsLayer = new GraphicsLayer({\r\n id: \"graphics4select\"\r\n });\r\n map.add(graphicsLayer);\r\n\r\n //select features, using the drawn graphic\r\n function queryFetures() {\r\n //determine which layer is visible\r\n if (visibleLayer==undefined){}\r\n else{//do query here\r\n if (graphicsLayer.graphics.getItemAt(0)==undefined){return}\r\n let query = new Query();\r\n query.geometry = graphicsLayer.graphics.getItemAt(0).geometry;\r\n query.spatialRelationship= \"contains\";\r\n query.returnGeometry = false;\r\n\r\n\r\n view.whenLayerView(visibleLayer).then(lyrView=>{\r\n lyrView.queryFeatures(query).then(result=>{\r\n clearSelection('hide');\r\n aoi = graphicsLayer.graphics.getItemAt(0).geometry;\r\n featureSetSelected = result;//this is a featureset\r\n highlightHandle=lyrView.highlight(result.features);\r\n map.reorder(graphicsLayer, -1);\r\n\r\n\r\n\r\n }); });}\r\n }\r\n\r\n let sketch = new Sketch({\r\n layer: graphicsLayer,\r\n view: view,\r\n creationMode: \"update\",\r\n availableCreateTools: [ \"polygon\", \"rectangle\", \"circle\"],\r\n container: \"selectDiv\",\r\n defaultUpdateOptions: {tool: ''}\r\n\r\n });\r\n view.ui.add(sketch, \"manual\");\r\n let btnsSelect = document.querySelectorAll(\".esri-sketch__button\");\r\n let btnsEdit = Array.from(btnsSelect).slice(0,2)\r\n let btnsDraw = Array.from(btnsSelect).slice(2,5);\r\n sketch.on(\"create\",evt=>{evt.state === \"complete\"? queryFetures():null});\r\n sketch.on(\"update\",evt=>{evt.state === \"complete\"? queryFetures():null});\r\n sketch.on(\"delete\",evt=>{clearSelection();});\r\n\r\n //clear the graphics layer\r\n\r\n btnsDraw.forEach(btn=>btn.addEventListener(\"click\",evt=>{\r\n clearSelection();\r\n }));\r\n btnsEdit.forEach(btn=>btn.addEventListener(\"click\",evt=>{map.reorder(graphicsLayer,999); }));\r\n\r\n\r\n\r\n //add eventhandler to trash icon\r\n let selectDiv = document.querySelector(\"#selectDiv\");\r\n selectDiv.addEventListener(\"click\",evt=>{\r\n let target = evt.target;\r\n if (target.classList.contains(\"esri-icon-trash\")){\r\n clearSelection();\r\n }\r\n else{}\r\n });\r\n //add legend widget\r\n legend = new Legend({\r\n view: view,\r\n container: \"legendDiv\",\r\n style: {type:\"card\", style:\"side-by-side\"}\r\n\r\n });\r\n\r\n\r\n\r\n\r\n\r\n\r\n //add event handler to the side panel\r\n //declare the variables\r\n let selectCity = document.querySelector(\"#select-city\");\r\n let selectVar = document.querySelector(\"#select-var\");\r\n let scaleToggle = document.querySelector(\"#select-scale-div>div\");\r\n let hmapToggle = document.querySelector(\"#toggle-hmap-div>div\");\r\n let cmapToggle = document.querySelector(\"#toggle-cmap-div>div\");\r\n let btnReset = document.querySelector(\"#btn-resetSelection\");\r\n let btnDownload = document.querySelector(\"#btn-download\");\r\n btnDownload.addEventListener(\"click\", _=>{\r\n downloadData();\r\n })\r\n\r\n selectCity.addEventListener(\"change\",evt=>{\r\n view.popup.close();\r\n resetSlider(0);\r\n clearSelection();\r\n selectVar.value = \"title\";\r\n let citySelected = evt.target.value;\r\n if (citySelected !==city && citySelected!=='title') {\r\n city = citySelected;\r\n loadTileLayers(citySelected);\r\n //reset the year to 1930\r\n yearSlider.values = [1930];\r\n //rest the scale-select\r\n $(\"#select-scale\").bootstrapToggle(\"on\");\r\n $(\"#select-scale\").bootstrapToggle(\"disable\");\r\n //rest the historical map\r\n $(\"#toggle-hmap\").bootstrapToggle(\"on\");\r\n h30.visible = true; h40.visible = false;\r\n $(\"#toggle-hmap\").bootstrapToggle(\"disable\");\r\n //reset the contemporary map\r\n //$(\"#toggle-cmap\").bootstrapToggle(\"on\");\r\n\r\n\r\n\r\n }\r\n });\r\n\r\n selectVar.addEventListener(\"change\",evt=>{\r\n view.popup.close();\r\n clearSelection();\r\n let varSelected = evt.target.value;\r\n variable = varSelected;\r\n const ed30URL = `${preMapserver}/${city}/MapServer/${ID_ed30}`;\r\n const ed40URL = `${preMapserver}/${city}/MapServer/${ID_ed40}`;\r\n const ward30URL = `${preMapserver}/${city}/MapServer/${ID_ward30}`;\r\n const ward40URL = `${preMapserver}/${city}/MapServer/${ID_ward40}`;\r\n\r\n if (ward30 == undefined || (!ward30URL.includes(ward30.url))) {\r\n ed30 = new FeatureLayer({url: ed30URL, id: \"ed30Layer\", opacity:opacityDefault});\r\n ed40 = new FeatureLayer({url: ed40URL, id: \"ed40Layer\", opacity:opacityDefault});\r\n ed30.popupTemplate = popupTemplateED;\r\n ed40.popupTemplate = popupTemplateED;\r\n\r\n if (!citiesNoWard.includes(city)){\r\n ward30 = new FeatureLayer({url: ward30URL, id: \"ward30Layer\", opacity:opacityDefault});\r\n ward40 = new FeatureLayer({url: ward40URL, id: \"ward40Layer\", opacity:opacityDefault});\r\n ward30.popupTemplate =popupTemplateWard;\r\n ward40.popupTemplate =popupTemplateWard;\r\n }\r\n\r\n\r\n\r\n else{\r\n ward30 = {id:null};\r\n ward40 = {id:null};\r\n }\r\n\r\n [ed30, ward30].forEach(lyr=>lyr.id? lyr.popupTemplate.title+= \" in 1930\":{});\r\n [ed40, ward40].forEach(lyr=>lyr.id? lyr.popupTemplate.title+= \" in 1940\":{});\r\n\r\n\r\n map.removeMany([map.findLayerById('ed30Layer'), map.findLayerById('ed40Layer'), map.findLayerById('ward30Layer'), map.findLayerById('ward40Layer')]);\r\n citiesNoWard.includes(city)? map.addMany([ed30, ed40]): map.addMany([ward30, ward40, ed30, ed40]);\r\n }\r\n\r\n determineVisibility(evt);\r\n\r\n //change the render for the layer\r\n if (variable!==\"none\"){\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>{\r\n\r\n lyr.visible? lyr.renderer = renderers[varSelected]:{};\r\n\r\n });} else{\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>\r\n lyr.visible? (lyr.id.includes('ed')? lyr.renderer = edDefaultSymbol: lyr.renderer = wardDefaultSymbol):{});\r\n\r\n }\r\n setLegendLyrTitle();\r\n\r\n resetSlider(1);\r\n //pop up the prompt that the ward data is not mapped.\r\n if (citiesNoWard.includes(city) && (!ed30.visible) && (!ed40.visible)) {\r\n document.getElementById(\"modalMsg\").innerHTML = \"Ward data is not available.\"\r\n $(\"#modal\").modal(\"show\");\r\n //document.getElementById(\"select-var\").value='title';\r\n };\r\n });\r\n\r\n\r\n\r\n/* scaleToggle.addEventListener(\"click\", evt=>{\r\n //detect it's ward or ed, if ed show the totalpop\r\n let totalPop = document.getElementById(\"select-var\").options[2];\r\n let selectedVar = document.getElementById(\"select-var\").value;\r\n if (scaleToggle.classList.contains(\"off\")){\r\n if(selectedVar==\"totalpop\") {\r\n document.getElementById(\"select-var\").value='none';\r\n totalPop.hidden=true;\r\n setTimeout(document.getElementById(\"select-var\").dispatchEvent(new Event(\"change\")),5000);\r\n return;}\r\n else{totalPop.hidden=true;}}\r\n else{ totalPop.hidden=false;}\r\n view.popup.close();\r\n determineVisibility(evt);\r\n clearSelection();\r\n resetSlider(1);\r\n\r\n\r\n });*/\r\n\r\n $(\"#select-scale\").change(function(evt){\r\n let totalPop = document.getElementById(\"select-var\").options[2];\r\n let selectedVar = document.getElementById(\"select-var\").value;\r\n if (!scaleToggle.classList.contains(\"off\")){\r\n if(selectedVar==\"totalpop\") {\r\n document.getElementById(\"select-var\").value='none';\r\n totalPop.hidden=true;\r\n document.getElementById(\"modalMsg\").innerHTML = \"Ward population is not mapped.\"\r\n $(\"#modal\").modal(\"show\");\r\n document.getElementById(\"select-var\").dispatchEvent(new Event(\"change\"));\r\n return;}\r\n else{totalPop.hidden=true;}}\r\n else{ totalPop.hidden=false;}\r\n view.popup.close();\r\n determineVisibility(evt);\r\n setLegendLyrTitle();\r\n if (selectedVar!==\"none\"){\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>{\r\n\r\n lyr.visible? lyr.renderer = renderers[selectedVar]:{};\r\n\r\n });} else{\r\n [ward30, ward40,ed30, ed40].forEach(lyr=>\r\n lyr.visible? (lyr.id.includes('ed')? lyr.renderer = edDefaultSymbol: lyr.renderer = wardDefaultSymbol):{});\r\n\r\n }\r\n clearSelection();\r\n resetSlider(1);\r\n\r\n })\r\n\r\n hmapToggle.addEventListener(\"click\", evt=>{\r\n const dict = {1940: h40, 1930: h30}\r\n let year = yearSlider.values[0]\r\n dict[year].visible = hmapToggle.classList.contains(\"off\");\r\n })\r\n $(\"#toggle-cmap\").change(function() {\r\n if(cmapToggle.classList.contains(\"off\")){map.basemap = null;}else{map.basemap = basemap;}\r\n });\r\n watchUtils.watch(map, \"basemap\", (newVal, oldVal) => {\r\n if(newVal && oldVal==undefined){basemap = newVal;$(\"#toggle-cmap\").bootstrapToggle('on');}\r\n if(newVal==undefined && oldVal){basemap = oldVal;}\r\n });\r\n btnReset.addEventListener(\"click\",_=>{clearSelection();});\r\n\r\n\r\n\r\n\r\n function determineVisibility(evt){\r\n let year_val = +yearSlider.values[0];\r\n //console.log(year_val);\r\n let scale_off = scaleToggle.classList.contains(\"off\");\r\n if(evt.target.classList && evt.target.classList.contains(\"btn\")){\r\n scale_off =!scale_off;\r\n }\r\n const dict = {1930: {true: 'ed30Layer', false: 'ward30Layer'}, 1940: {true: 'ed40Layer', false: 'ward40Layer'}}\r\n if (variable!==\"title\" && variable){\r\n const allLayers = [ed30, ed40, ward30, ward40];\r\n allLayers.map(lyr=>{(lyr.id && lyr.id===dict[year_val][scale_off])?(lyr.visible=true, visibleLayer=lyr):lyr.visible=false});}\r\n //change the hmap\r\n if(dict[year_val][scale_off].includes(\"30\")){h30.visible=!hmapToggle.classList.contains(\"off\");h40.visible=false;} else{h30.visible=false; h40.visible=!hmapToggle.classList.contains(\"off\");}\r\n\r\n\r\n\r\n\r\n }\r\n\r\n\r\n function clearSelection(mode='all') {\r\n //reset all layers\r\n mode===\"all\"? graphicsLayer.removeAll(): null;\r\n featureSetSelected!=null? featureSetSelected = null: null;\r\n highlightHandle!=null? highlightHandle.remove():null;\r\n aoi!=null? aoi = null: null;\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n function downloadData(){\r\n //download the selected features in a shapefile\r\n if(visibleLayer==undefined){return alert(\"Please use the side-pane to select a dataset first!\")}\r\n if(featureSetSelected==undefined){return alert(\"please use the drawing tools to select features of your interest first!\")}\r\n let query = visibleLayer.createQuery();\r\n query.returnGeometry = false;\r\n if (visibleLayer.id.includes(\"ward\")){\r\n query.outFields = [\"ward\", \"totalpop\", \"bpop\",\"wpop\", \"bpct\", \"meansei\", \"medsei\",\"immpop\",\"immpct\"];}else {\r\n query.outFields = [\"ed\",\"ward\", \"totalpop\", \"bpop\",\"wpop\", \"bpct\", \"meansei\", \"medsei\",\"immpop\",\"immpct\"];\r\n }\r\n query.geometry = aoi;\r\n query.spatialRelationship = \"contains\";\r\n visibleLayer.queryFeatures(query).then(results=>{\r\n let csv = prepareCSV(results.features);\r\n let hiddenEl = document.createElement(\"a\");\r\n hiddenEl.href=\"data:text/csv;charset=utf-8,\"+encodeURI(csv);\r\n hiddenEl.target=\"_blank\";\r\n hiddenEl.download = \"export.csv\";\r\n hiddenEl.click();\r\n\r\n })\r\n\r\n\r\n }\r\n function prepareCSV(res){\r\n let csv;\r\n csv = Object.keys(res[0].attributes).join()\r\n csv += \"\\n\";\r\n res.forEach(f=>{csv+=Object.values(f.attributes).join(); csv+=\"\\n\"});\r\n return csv;\r\n\r\n }\r\n\r\n function setLegendLyrTitle(){\r\n if (visibleLayer){\r\n legend.layerInfos = [{title: city+\" \"+\r\n \"19\"+\r\n +visibleLayer.id.slice(-7,-5)+\r\n \" \"+\r\n visibleLayer.id.slice(0, -7).toUpperCase()+\r\n \" Layer\",\r\n layer:visibleLayer}];}\r\n else{}\r\n }\r\n\r\n\r\n function loadTileLayers(citySelected){\r\n let mapServerURL = `${preMapserver}/${citySelected}_${h30Tail}/MapServer`;\r\n let h30Layer = new TileLayer({url: mapServerURL, id:\"h30Layer\",legendEnabled: false});\r\n mapServerURL = `${preMapserver}/${citySelected}_${h40Tail}/MapServer`;\r\n let h40Layer = new TileLayer({url: mapServerURL, id:\"h40Layer\", legendEnabled: false});\r\n h40Layer.visible = false;\r\n\r\n\r\n map.removeAll();\r\n h30 = h30Layer; h40 = h40Layer;\r\n map.addMany([h30Layer,h40Layer]);\r\n\r\n h30Layer.when(_=>{\r\n view.goTo(h30Layer.fullExtent,{\r\n duration: 300,\r\n easing: \"ease-in\"\r\n });\r\n })\r\n\r\n\r\n }\r\n});})"],"names":["DEFAULT_VERSION","NEXT","parseVersion","version","toLowerCase","match","major","parseInt","minor","getCdnUrl","getCssUrl","urlOrVersion","baseUrl","parsedVersion","getCdnCssUrl","loadCss","before","url","link","document","querySelector","getCss","beforeNode","parentNode","insertBefore","head","appendChild","insertLink","href","createElement","rel","createStylesheetLink","utils","Promise","window","undefined","defaultOptions","handleScriptLoad","script","callback","errback","onScriptError","e","error","Error","src","removeEventListener","addEventListener","handleScriptError","onScriptLoad","setDefaultOptions","options","getScript","isLoaded","globalRequire","on","loadScript","opts","forEach","obj","prop","Object","prototype","hasOwnProperty","call","resolve","reject","getAttribute","css","insertCssBefore","dojoConfig","type","setAttribute","createScript","body","requireModules","modules","errorHandler","args","_i","arguments","length","remove","loadModules","loadScriptOptions","then","esriLoader","$1c4d3059f6bcf327$var$preMapserver","$1c4d3059f6bcf327$var$city","$1c4d3059f6bcf327$var$variable","$1c4d3059f6bcf327$var$map","$1c4d3059f6bcf327$var$view","$1c4d3059f6bcf327$var$basemap","$1c4d3059f6bcf327$var$legend","$1c4d3059f6bcf327$var$h30","$1c4d3059f6bcf327$var$h40","$1c4d3059f6bcf327$var$ed30","$1c4d3059f6bcf327$var$ward30","$1c4d3059f6bcf327$var$ed40","$1c4d3059f6bcf327$var$ward40","$1c4d3059f6bcf327$var$visibleLayer","$1c4d3059f6bcf327$var$highlightHandle","$1c4d3059f6bcf327$var$featureSetSelected","$1c4d3059f6bcf327$var$aoi","$1c4d3059f6bcf327$var$colorSet","r","g","b","a","reverse","$1c4d3059f6bcf327$var$labels","totalpop","bpct","immpct","meansei","medsei","$1c4d3059f6bcf327$var$breaks","$1c4d3059f6bcf327$var$symbols","map","col","color","style","outline","width","$1c4d3059f6bcf327$var$classBreakInfos","key","i","vals","label","push","maxValue","minValue","symbol","$1c4d3059f6bcf327$var$defaultSymbol","$1c4d3059f6bcf327$var$renderers","$1c4d3059f6bcf327$var$aliases","wpop","bpop","immpop","f","field","defaultSymbol","defaultLabel","classBreakInfos","legendOptions","title","$1c4d3059f6bcf327$var$contentTemplate","fieldInfos","fieldName","format","places","$1c4d3059f6bcf327$var$popupTemplateED","content","$1c4d3059f6bcf327$var$popupTemplateWard","$1c4d3059f6bcf327$var$maskDiv","getElementById","$1c4d3059f6bcf327$var$edDefaultSymbol","$1c4d3059f6bcf327$var$wardDefaultSymbol","$1c4d3059f6bcf327$var$citiesNoWard","$bbf53503ecaf6a29$exports","Map","MapView","Zoom","Search","BasemapGallery","ScaleBar","Expand","Print","FeatureLayer","Sketch","GraphicsLayer","TileLayer","watchUtils","Query","colorRendererCreator","Legend","Slider","ClassBreakInfo","basemap","container","center","zoom","popup","dockOptions","buttonEnabled","ui","components","watch","newVal","oldVal","classList","add","when","view","layout","search","position","index","scaleBar","slider","steps","tickConfigs","mode","values","labelsVisible","snapOnClickEnabled","resetSlider","opacity","evt","value","yearSlider","selectedVar","lyr","visible","renderer","id","includes","close","print","graphicsLayer","graphics","getItemAt","query","geometry","spatialRelationship","returnGeometry","whenLayerView","lyrView","queryFeatures","result","clearSelection","highlight","features","reorder","sketch","layer","creationMode","availableCreateTools","defaultUpdateOptions","tool","btnsSelect","querySelectorAll","Array","from","slice","btnsDraw","state","queryFetures","btn","target","contains","selectCity","selectVar","scaleToggle","hmapToggle","determineVisibility","year_val","scale_off","dict","true","false","removeAll","layerInfos","toUpperCase","_","alert","createQuery","outFields","results","csv","res","keys","attributes","join","f1","prepareCSV","hiddenEl","encodeURI","download","click","downloadData","citySelected","loadTileLayers","$","bootstrapToggle","varSelected","ed40URL","ward30URL","ward40URL","ed30URL","popupTemplate","removeMany","findLayerById","addMany","innerHTML","modal","totalPop","hidden","dispatchEvent","Event","setLegendLyrTitle","change"],"version":3,"file":"index.1afd109d.js.map"}