{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/models/map.model.ts","webpack:///./src/models/election.result.model.ts","webpack:///./src/styles/print.scss","webpack:///./src/models/colors.ts","webpack:///./src/components/hamburger/hamburger.vue?6422","webpack:///./src/eventBus.ts","webpack:///./src/styles/app.scss","webpack:///./src/shared/settings.ts","webpack:///./src/components/hamburger/hamburgerlist.vue?6164","webpack:///./src/shared/browserDetection.ts","webpack:///./src/models/viewport.model.ts","webpack:///./src/models/provincies.ts","webpack:///./src/shared/utils.ts","webpack:///./src/components/searchbar/SearchBar.vue?ae92","webpack:///./src/App.vue?5159","webpack:///./src/components/searchbar/SearchBar.vue?3e3b","webpack:///./src/models/search.model.ts","webpack:///./src/components/hamburger/hamburger.vue?c6ae","webpack:///./src/components/hamburger/hamburgerlist.html","webpack:///./src/components/hamburger/hamburgerlist.vue?a712","webpack:///./src/components/hamburger/hamburgerlist.vue?6982","webpack:///./src/components/hamburger/hamburgerlist.vue","webpack:///./src/components/hamburger/hamburger.vue?a6cf","webpack:///./src/components/hamburger/hamburger.vue?e702","webpack:///./src/components/hamburger/hamburger.vue","webpack:///./src/components/searchbar/SearchBar.vue?1f3b","webpack:///./src/components/searchbar/SearchBar.vue?23b7","webpack:///./src/components/searchbar/SearchBar.vue","webpack:///./src/App.vue?ec60","webpack:///./src/App.vue?640d","webpack:///./src/App.vue","webpack:///./src/router.ts","webpack:///./src/store/search/search.state.ts","webpack:///./src/store/search/search.getters.ts","webpack:///./src/store/search/search.mutations.ts","webpack:///./src/store/cache/cache.api.service.ts","webpack:///./src/store/search/search.api.service.ts","webpack:///./src/store/search/search.actions.ts","webpack:///./src/store/search/search.module.ts","webpack:///./src/store/current/current.getters.ts","webpack:///./src/store/current/current.mutations.ts","webpack:///./src/store/current/current.actions.ts","webpack:///./src/store/current/current.state.ts","webpack:///./src/store/current/current.module.ts","webpack:///./src/store/cache/parsers/parseEntiteit.ts","webpack:///./src/store/cache/parsers/parseLijst.ts","webpack:///./src/store/cache/parsers/parseStatistiek.ts","webpack:///./src/store/cache/parsers/parseOverzicht.ts","webpack:///./src/store/cache/parsers/parseOverzichtHover.ts","webpack:///./src/store/cache/parsers/parseOverzichtLijsten.ts","webpack:///./src/store/cache/cache.actions.ts","webpack:///./src/store/cache/cache.mutations.ts","webpack:///./src/store/cache/cache.getters.ts","webpack:///./src/store/cache/cache.state.ts","webpack:///./src/store/cache/cache.module.ts","webpack:///./src/store/map/map.getters.ts","webpack:///./src/store/map/map.mutations.ts","webpack:///./src/store/map/map.api.service.ts","webpack:///./src/store/map/map.actions.ts","webpack:///./src/store/map/map.state.ts","webpack:///./src/store/map/map.module.ts","webpack:///./src/store/store.ts","webpack:///./src/registerServiceWorker.ts","webpack:///./src/directives/click-outside.directive.ts","webpack:///./src/main.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","4","jsonpScriptSrc","p","0","1","2","3","5","8","9","10","11","12","13","14","17","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","clearTimeout","chunk","errorType","realSrc","error","undefined","setTimeout","all","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","MAP_TYPES","AGE","GENDER","VOTES","AGE_LEGEND","label","color","_models_colors__WEBPACK_IMPORTED_MODULE_5__","NODATA","GENDER_LEGEND","STRONGEST_PARTY_LEGEND","OTHERS","HoverResult","_EntityResult","_home_emrys_repos_lv2018_publicatie_website2018_frontend_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","this","_home_emrys_repos_lv2018_publicatie_website2018_frontend_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__","_home_emrys_repos_lv2018_publicatie_website2018_frontend_node_modules_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__","arguments","_home_emrys_repos_lv2018_publicatie_website2018_frontend_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__","_models_election_result_model__WEBPACK_IMPORTED_MODULE_4__","ELECTION_TYPES","GEMEENTE","PROVINCIE","DISTRICT","OCMW","ELECTION_NAMES","ELECTION_MAP_NAMES","ELECTION_TYPE_TO_NAME","_ELECTION_TYPE_TO_NAM","_home_emrys_repos_lv2018_publicatie_website2018_frontend_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__","ELECTION_TYPE_TO_MAP_NAME","_ELECTION_TYPE_TO_MAP","ELECTION_NAME_TO_TYPE","_ELECTION_NAME_TO_TYP","STATS_AGE_RANGES","SORT_TYPES","NR","LIJST","STEMMEN","PERCENT","ZETELS","SORT_DIRECTION","ASC","DESC","SortOrder","sortKey","sortDirection","KandidaatResult","GID","naam","volgnummer","naamstemmen","titularis","opvolger","LijstResult","lijstnr","lijstnaam","lijstkleur","logo","nationaal","stemmen","zetels","percent","kandidatenLoaded","kandidatenError","GenderDistributie","man","vrouw","vrouwpct","manpct","range","total","totalpct","Statistiek","ingeschreven","geldig","ongeldig","distributie","gemiddeldeLeeftijd","totaalMan","totaalVrouw","totaalVrouwPct","totaalVerkozen","totaalVerkozenPct","loaded","EntityResult","lijsten","verwant","bureaus","geteldeBureaus","totaalBureaus","totaalStemmen","totaalZetels","totaalPercent","definitief","year","nis","updateError","statistiek","Verwant","Elections","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_print_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_print_scss_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","COLORS","BLANCO","SELECTED","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hamburger_vue_vue_type_style_index_0_id_50fa1590_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hamburger_vue_vue_type_style_index_0_id_50fa1590_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","EventBus","vue__WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_app_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_app_scss_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default","electionYear","electionDate","Date","days","lifetime","stopUpdates","getTime","SHOW_GENDER_AGE_STATS","showPV","pvUrl","DEFAULT_API_FOLDER","DEFAULT_API_PORT","location","port","concat","url","protocol","hostname","pathname","baseUrl","deeplyNested","match","DEFAULT_API_HOST","log","hideResults","Settings","ELECTION_YEAR","PREVIOUS_ELECTION_YEAR","ELECTION_DATE","RESULTS_MINIMUM_BUREAUS","REFRESH_RATE","REFRESH_STOP","MAX_RESULT_AGE","SITE_BASE_URL","API_BASE_URL","API_FOLDER","GEO_FOLDER","SHARE_FOLDER","LIST_NUMBER_COLOR","SEARCH_MIN_CHARS","DISABLE_STATS","DISABLE_CONSOLE_LOGS","HIDE_RESULTS","SHOW_PV","PV_URL","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hamburgerlist_vue_vue_type_style_index_0_id_9c92ecd8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_hamburgerlist_vue_vue_type_style_index_0_id_9c92ecd8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default","BrowserDetection","IEversion","detectIE","ua","navigator","userAgent","msie","indexOf","parseInt","substring","trident","rv","edge","ViewPortDimensions","width","height","VIEWPORT","MAX_MOBILE","MIN_TABLET","MAX_TABLET","PROVINCIES","10000","70000","30000","40000","20001","Utils","isDark","hex","d3_color__WEBPACK_IMPORTED_MODULE_4__","getBrightness","darkenLightColors","darker","toString","g","b","isTouchDevice","test","createTint","colortint","h","scrollTop","pageYOffset","documentElement","body","intToBoolean","num","printMap","classList","add","remove","print","printResults","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SearchBar_vue_vue_type_style_index_0_id_5b892e03_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_lib_loader_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SearchBar_vue_vue_type_style_index_0_id_5b892e03_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default","Appvue_type_template_id_815d25b4_render","_vm","_h","$createElement","_c","_self","attrs","id","_v","on","click","$event","redirectToSupportPage","_e","useMobileView","geoLocating","geolocationError","closeGeolocationMask","staticClass","xmlns:xlink","xlink:href","_m","_s","propTitle","title","preventDefault","setDesktopView","staticRenderFns","SearchBarvue_type_template_id_5b892e03_scoped_true_render","role","class","homesearch","isMobile","isHome","aria-label","aria-hidden","goToStartPage","directives","rawName","expression","submit","invisible","searchVisible","loading","resultsLoading","ref","autocomplete","placeholder","domProps","keyup","_k","keyCode","hideSearch","clickFirstMatch","selectFirstMatch","input","composing","search","hasUserInput","empty","totalMatches","clearSearch","selectPreviousMatch","selectNextMatch","_l","searchResult","index","refInFor","mouseover","currentMatch","isMatch","MATCH_TYPES","PERSOON","mapVisible","to","params","electionTypeName","verkiezingsType","lijstGID","kandidaatGID","fill","gemeente","KIESKRING","mapNames","types","POSTCODE","postcode","other","active","tabindex","showSearch","SearchBarvue_type_template_id_5b892e03_scoped_true_staticRenderFns","hamburgervue_type_template_id_50fa1590_scoped_true_render","menuVisible","toggleMenu","close","hideMenu","hamburgervue_type_template_id_50fa1590_scoped_true_staticRenderFns","hamburgerlistvue_type_template_id_9c92ecd8_scoped_true_render","$emit","hamburger","disabled","loadGeolocation","open","favoritesOpened","closed","toggleFavorites","totalFavorites","favorite","favorites","election","suggestionsOpened","toggleSuggestions","totalSuggestions","isNotCurrent","routeElection","electionType","electionName","hamburgerlistvue_type_template_id_9c92ecd8_scoped_true_staticRenderFns","hamburgerlistvue_type_script_lang_ts_HamburgerList","_Vue","HamburgerList","_this","classCallCheck","possibleConstructorReturn","getPrototypeOf","MAX_DEFAULT_FAVORITES","MAX_DEFAULT_SUGGESTIONS","inherits","createClass","$router","$store","dispatch","JSON","parse","localStorage","getItem","initToggle","election_result_model","isProvincieraad","isDistrictNis","isProvincie","provincies","provincieType","geolocation","properties","hasFavorites","hasSuggestions","current","getters","sortBy_default","toPairs_default","map","a","keys","treshold","maxDiff","$route","set","showMap","elections","settings","vue_property_decorator","__decorate","hamburgerlistvue_type_script_lang_ts_","hamburger_hamburgerlistvue_type_script_lang_ts_","component","componentNormalizer","options","__file","hamburgerlist","hamburgervue_type_script_lang_ts_HamburgerComponent","HamburgerComponent","hamburgervue_type_script_lang_ts_decorate","components","menulist","hamburgervue_type_script_lang_ts_","hamburger_hamburgervue_type_script_lang_ts_","hamburger_component","SCREEN_MINIMUM","SearchBarvue_type_script_lang_ts_SearchBar","SearchBar","resultsVisible","needsLookup","_this2","$nextTick","$refs","searchField","blur","removeEventListener","preventKeyScroll","_this3","focus","_this4","el","getElementById","defaultSearch","currentRoute","_this5","eventBus","$on","newValue","oldValue","addEventListener","matchLink","matches","hideSearchResults","updateFocus","visibleMatches","matchType","typeName","viewport_model","viewPortSize","SearchBarvue_type_script_lang_ts_decorate","props","String","SearchBarvue_type_script_lang_ts_","searchbar_SearchBarvue_type_script_lang_ts_","SearchBar_component","searchbar_SearchBar","Appvue_type_script_lang_ts_App","App","isIE11","browserDetection","windowWidth","windowHeight","supportedBrowser","RESIZE_HANDLER_DELAY","handleConsoleLogs","isIncompatibleBrowser","forceDesktopView","setTouchMode","setDesktopMode","detectOnlineStatus","getWindowSize","browser","isIE","clearLoadingStyles","clientWidth","clientHeight","getDimensions","useDesktopView","updateOnlineStatus","status","onLine","commit","disable_console_types","noop","consoleInstance","prop","Appvue_type_script_lang_ts_decorate","Appvue_type_script_lang_ts_","src_Appvue_type_script_lang_ts_","App_component","src_App","DesktopViewport","MobileViewport","Home","ResultPage","PVPage","LijstPage","VerkozenKandidatenPage","StatistiekPage","BrowserPage","GeoLocationPage","vue_runtime_esm","use","vue_router_esm","appRoutes","sharedRoutes","path","USE_MOBILE_ROUTES","utils","mobileSpecificRoutes","children","desktopSpecificRoutes","router","routes","search_state_SearchState","SearchState","text","minLength","search_getters_all","state","searchText","isLoading","search_getters","CLEAR","CHANGE","RESULTS","search_mutations","axios_default","defaults","validateStatus","cache_api_service_CacheApiService","CacheApiService","baseURL","lijstnummers","loadMapData","files","endpoint","forEach","lijstPath","mapPath","geoPath","getFusies","response","nisResponse","nisses","nisRequest","assign","cacheApiService","search_api_service_SearchApiService","SearchApiService","MIN_CHARS","SOUNDEX","query","cancelResults","sanitizedQuery","cleanseName","replace","isNumeric","fusies","mapperFn","mapCodeResults","mapResults","cancelToken","CancelToken","catch","noResults","isCancel","canceled","mapPostCodeMatches","mapMatches","results","mappedResult","electiontype","f","volgnr","lijst","k","models_colors","pc","getSoundex","pathParts","substr","toUpperCase","first","soundex","split","array","join","RE","normalize","useAsciiVariant","removeUselessCharacters","toLowerCase","searchApiService","change","debounce_default","store","payload","trim","getResults","clearResults","search_actions","search_module_SearchModule","SearchModule","namespaced","mutations","actions","current_getters_query","warn","currentElection","current_getters_previousElection","lijstnummer","isPreviousElection","lijstNummers","map_default","lijstenGIDs","openedLijsten","nisLijsten","openLijsten","filter_default","current_getters_statistiek","canShowDesktopView","viewportWidth","current_getters_forceDesktopView","viewportSize","viewport","sortOrder","sortorder","lastUpdated","updating","isOnline","online","hasUpdateError","current_getters_naam","current_getters_electionFinished","now","pageTitle","titleParts","suffix","current_getters","previousElection","electionFinished","CHANGE_ENTITY","notChanged","LAST_UPDATED","SET_UPDATING","SET_ONLINE","SET_ENTITY_RESULT","_ref","UNSET_RESULTS","SET_PREVIOUS_ELECTION_RESULT","getLijst","SET_ENTITY_ERROR","SET_ENTITY_UPDATE_ERROR","LOAD_LIJST_RESULT","SET_LIJST_RESULT","SET_LIJST_ERROR","UNSET_LIJST_RESULT","kandidaten","SET_STATISTIEK","SET_VIEWPORT","SET_SORT_ORDER","SHOW_MAP","SET_DESKTOPVIEW","SET_FAVORITES","delete","automaticUpdateTimer","current_mutations","current_actions_change","root","shedule_next_update","update","promise$","load_lijst_results","load_verkozen_kandidaten","load_statistieken","load_previous_election","selectedYear","selectedNis","set_viewport","sort","current_actions_showMap","visible","setFavorites","current_actions_forceDesktopView","forceView","setItem","removeItem","reload","current_actions","current_state_CurrentState","CurrentState","current_module_CurrentModule","CurrentModule","parseEntiteitJSON","rootGetters","entiteitLijsten","getFile","entiteitUitslag","verkiezing","uitslag","us","df","os","v","verwantObject","currentVerwant","find_default","gb","sc","reduce_default","totaal","stem","_arr","_i","party","nl","kl","nr","nm","lg","zs","parseLijstJSON","dezeLijst","lijstUitslag","kd","kandidaat","vn","kandidaatObject","uitslagKandidaat","verkozenVolgnummer","vv","kandidaatIsVerkozen","vk","parseStatistiek","defaultNis","ranges","shortType","overzicht","stats","distrib","dv","avg_age","gl","calculatedData","total_over_ranges","total_f_over_ranges","total_m_over_ranges","sum_ages","sg","ui","gs","range_total","range_age","row","Math","min","ceil","nis_fpct","parseOverzichtColors","gewestelijkeLijsten","mapState","mapColors","statistiekNis","jsonUitslag","minBureausGeteld","mapType","map_model","getAgeStatistiekColor","nodata","max","getGenderStatistiekColor","each_default","idx","getPartyColor","LOWEST_AGE_RANGE_MAX","rangeIndex","gid","_lijst","legendPercentage","parseOverzichtHover","andersLuidendeLijst","parseNationaleLijsten","nationaleLijsten","cache_actions_cacheApiService","load_topojsons","getTopojsons","cacheFiles","handleError","load_entity_result_for_year","getEntityResults","entityResult","load_previous_elections","getPreviousElectionResults","fusiesJson","update_current","lijstGIDs","mapActive","updateEntityResults","currentResponse","kandidatenLijst","colors","cache_actions_load_lijst_results","getLijstResults","clear_lijst_results","clear_results","load_map_results","getMapResults","load_hover_result","hoverResult","load_hover_statistiek","cache_actions_load_verkozen_kandidaten","getVerkozenen","cache_actions_load_statistieken","getStatistieken","errorResponse","responses","Array","isArray","metaData","exp","config","cache_actions","ADD_JSON","file","cache_mutations","cache_getters_cacheApiService","rootState","pathFn","isToponym","getGeoPath","getLijstPath","isOverzicht","getOverzichtPath","getNisPath","cache_getters","cache_state_CacheState","CacheState","cache_module_CacheModule","CacheModule","map_getters_all","map_getters_colors","map_getters_hoverResult","map_getters_mapType","geolocating","map_getters_geolocation","geolocation_error","geoError","topojsons_loaded","topojsonsLoaded","map_getters","SET_HOVER_NIS","hoverNis","SET_HOVER_RESULTS","SET_LOADING","SET_TOPOJSONS_LOADED","SET_COLORS","SET_LIJST","SET_MAP_TYPE","SET_GEO_ERROR","SET_LIJSTEN","GEOLOCATING","SET_GEOLOCATION","map_mutations","GEO_LOCATION_ERRORS","NOT_FOUND","NOT_FOUND_MOBILE","NOT_AVAILABLE","PERMISSION_DENIED","USE_MOBILE_ERRORS","map_api_service_MapApiService","MapApiService","left","top","rows","offset","getCurrentPosition","position","col","floor","coords","longitude","latitude","filename","d3_fetch","features","topojson","objects","d3_geo","NOT_FOUND_ERROR","code","mapApiService","load_data","map_actions_load_topojsons","load_geolocation","getGeolocation","reset_geolocation_error","hover_over_nis","map_actions","map_state_MapState","MapState","map_module_MapModule","MapModule","vuex_esm","DEBUG","store_store","Store","cache","strict","register_service_worker","ready","cached","updated","offline","_error","directive","binding","vnode","contains","context","unbind","productionTip","filter","isNaN","digits","rounded","round","pow","date","minutes","getMinutes","seconds","getSeconds","getHours","formattedString","sNum","totalParts","pre","charAt","render","$mount"],"mappings":"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","file":"app.4bc12241.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t4: 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"0\":\"desktopView~lijstPage~resultPage\",\"1\":\"lijstPage~resultPage~verkozenen\",\"2\":\"lijstPage~resultPage\",\"3\":\"resultPage~statistiek\",\"5\":\"browsers\",\"8\":\"desktopView\",\"9\":\"geolocation\",\"10\":\"home\",\"11\":\"lijstPage\",\"12\":\"mobileView\",\"13\":\"resultPage\",\"14\":\"statistiek\",\"17\":\"verkozenen\"}[chunkId]||chunkId) + \".\" + {\"0\":\"39fbfbf9\",\"1\":\"1f08abbc\",\"2\":\"c59df6c8\",\"3\":\"309d9478\",\"5\":\"152750a6\",\"8\":\"aecb81ef\",\"9\":\"3928caa6\",\"10\":\"c32e25e7\",\"11\":\"3f16ec31\",\"12\":\"f65712cb\",\"13\":\"f2913cf4\",\"14\":\"dc7bf003\",\"17\":\"4d3e9068\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"0\":1,\"1\":1,\"2\":1,\"3\":1,\"5\":1,\"8\":1,\"9\":1,\"10\":1,\"11\":1,\"12\":1,\"13\":1,\"14\":1,\"17\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"\" + ({\"0\":\"desktopView~lijstPage~resultPage\",\"1\":\"lijstPage~resultPage~verkozenen\",\"2\":\"lijstPage~resultPage\",\"3\":\"resultPage~statistiek\",\"5\":\"browsers\",\"8\":\"desktopView\",\"9\":\"geolocation\",\"10\":\"home\",\"11\":\"lijstPage\",\"12\":\"mobileView\",\"13\":\"resultPage\",\"14\":\"statistiek\",\"17\":\"verkozenen\"}[chunkId]||chunkId) + \".\" + {\"0\":\"fe7129cb\",\"1\":\"f5a8601d\",\"2\":\"59f7f649\",\"3\":\"664d7ccc\",\"5\":\"0e459d84\",\"8\":\"d0d30fc6\",\"9\":\"3c32e3b3\",\"10\":\"1fe703c2\",\"11\":\"87c4165c\",\"12\":\"8482e85f\",\"13\":\"68e8ab14\",\"14\":\"4a2a2493\",\"17\":\"f4d8bb53\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,16,6,15,7]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// see 2012 collections.js line 312\nimport {EntityResult} from '@/models/election.result.model';\nimport {COLORS} from '@/models/colors';\n\nexport const MAP_TYPES = {\n AGE: 'age',\n GENDER: 'gender',\n VOTES: '',\n};\n\n// NOTE: statistiek distributie (json) is ordered reverse of this legend\nexport const AGE_LEGEND: LegendItem[] = [\n {label: '18-30', color: COLORS.AGE[0]},\n {label: '31-40', color: COLORS.AGE[1]},\n {label: '41-50', color: COLORS.AGE[2]},\n {label: '51-60', color: COLORS.AGE[3]},\n {label: '> 60 jaar', color: COLORS.AGE[4]},\n {label: 'Geen gegevens', color: COLORS.NODATA},\n];\n\nexport const GENDER_LEGEND: LegendItem[] = [\n {label: '0-20%', color: COLORS.GENDER[0]},\n {label: '20-40%', color: COLORS.GENDER[1]},\n {label: '40-60%', color: COLORS.GENDER[2]},\n {label: '60-80%', color: COLORS.GENDER[3]},\n {label: '80-100% vrouwen', color: COLORS.GENDER[4]},\n {label: 'Geen gegevens', color: COLORS.NODATA},\n];\n\nexport const STRONGEST_PARTY_LEGEND: LegendItem[] = [\n {label: 'Andere', color: COLORS.OTHERS},\n {label: 'Geen gegevens', color: COLORS.NODATA},\n];\n\nexport interface LegendItem {\n label: string;\n color: string;\n}\n\nexport interface MapColor {\n [nis: string]: string; // nis:color\n}\n\n// very similar to a EntityResult, but lighter (or not everything filled in)\nexport class HoverResult extends EntityResult { // in 2012 version = QuickResult\n}\n","/*\n Election Type Constants\n\n Note:\n election type = short one digit eg 'G'\n election name = long human readable string eg 'gemeente'\n\n */\n\n// type = short names as used in json and store\nexport const ELECTION_TYPES: any = {\n GEMEENTE: 'G',\n PROVINCIE: 'P',\n DISTRICT: 'D',\n OCMW: 'O',\n};\n\n// human readable names as used in url etc\nexport const ELECTION_NAMES: any = {\n GEMEENTE: 'gemeente',\n PROVINCIE: 'provincie',\n DISTRICT: 'district',\n OCMW: 'ocmw',\n};\n\n// human readable names as used in maps, page title etc\nexport const ELECTION_MAP_NAMES: any = {\n GEMEENTE: 'gemeenteraad',\n PROVINCIE: 'provincieraad',\n DISTRICT: 'districtsraad',\n OCMW: 'OCMW-raad',\n};\n\nexport const ELECTION_TYPE_TO_NAME: any = {\n [ELECTION_TYPES.GEMEENTE]: ELECTION_NAMES.GEMEENTE,\n [ELECTION_TYPES.PROVINCIE]: ELECTION_NAMES.PROVINCIE,\n [ELECTION_TYPES.DISTRICT]: ELECTION_NAMES.DISTRICT,\n [ELECTION_TYPES.OCMW]: ELECTION_NAMES.OCMW,\n};\n\nexport const ELECTION_TYPE_TO_MAP_NAME: any = {\n [ELECTION_TYPES.GEMEENTE]: ELECTION_MAP_NAMES.GEMEENTE,\n [ELECTION_TYPES.PROVINCIE]: ELECTION_MAP_NAMES.PROVINCIE,\n [ELECTION_TYPES.DISTRICT]: ELECTION_MAP_NAMES.DISTRICT,\n [ELECTION_TYPES.OCMW]: ELECTION_MAP_NAMES.OCMW,\n};\n\nexport const ELECTION_NAME_TO_TYPE: any = {\n [ELECTION_NAMES.GEMEENTE]: ELECTION_TYPES.GEMEENTE,\n [ELECTION_NAMES.PROVINCIE]: ELECTION_TYPES.PROVINCIE,\n [ELECTION_NAMES.DISTRICT]: ELECTION_TYPES.DISTRICT,\n [ELECTION_NAMES.OCMW]: ELECTION_TYPES.OCMW,\n};\n\nexport type ElectionType = 'G' | 'P' | 'D' | 'O' | '';\n\nexport const STATS_AGE_RANGES = ['> 60', '51-60', '41-50', '31-40', '18-30'];\n\n// this should reflect the actual property names of the lijst model\nexport const SORT_TYPES: any = {\n NR: 'lijstnr',\n LIJST: 'lijstnaam',\n STEMMEN: 'stemmen',\n PERCENT: 'percent',\n ZETELS: 'zetels',\n};\n\nexport const SORT_DIRECTION: any = {\n ASC: '',\n DESC: 'desc',\n};\n\nexport class SortOrder {\n public sortKey: string = '';\n public sortDirection: string = '';\n}\n\n/*\n Notes: in 2012 each view parsed it's own data from the raw json data\n in 2018 we use a single shared parsed model that each view/component can use\n\n\n static\n entiteitLijsten.json = partijen\n lijst.json = kandidaten\n\n dynamicFiles\n entiteitUitslag.json = totaal + per kandidaat?\n {file: \"entiteitUitslag.json\", path: \"year/type/nis\", refresh: true}\n {file: \"overzicht.json\", path: \"year/type\", refresh: true}\n {file: \"statistiek.json\", path: \"year/type\", refresh: true}\n {file: \"uitslag.json\", path: \"year/type/nis/party\", provinciePath: \"year/type/nis\", refresh: true}\n\n */\n\n// ResultQuery = used to load json data\nexport interface ResultQuery {\n nis: string;\n electionType: ElectionType;\n year: number;\n lijstGID?: string;\n lijstnr?: number;\n kandidaatGID?: string;\n mapType?: string;\n // ... add extra optional parameters where needed\n}\n\nexport class KandidaatResult {\n // needs: [lijst.json, uitslag.json]\n\n public GID: string = ''; // kandidaatGID stored here for easy access (eg '159590')\n\n // statisch eg 11000/1/lijst.json\n public naam: string = ''; // nm\n public volgnummer: number = 0; // vn\n\n // dynamisch: eg 11000/1/uitslag.json\n public naamstemmen: number = 0; // ns\n public titularis: number = 0; // calculated, see collection.js line 686, vv en vk in uitslag.json\n public opvolger: number = 0;\n}\n\nexport interface KandidatenLijst { // per lijst\n // statisch eg 11000/1/lijst.json dynamisch eg 11000/1/uitslag.json\n [kandidaatGID: string]: KandidaatResult;\n}\n\nexport class LijstResult {\n // needs [entiteitLijsten.json, entiteitUitslag.json]\n\n // static lijst data entiteitLijsten.json\n public GID: string = ''; // lijstGID stored here for easy access (eg '-1' = lijstnr 1)\n public lijstnr: number = 0; // nr in json (niet hetzelfde als index bv \"1521\": { \"nr\": 19 } in 11002)\n public lijstnaam: string = '';\n public lijstkleur: string = '';\n public logo: string = '';\n public nationaal: boolean = false; // 0 or 1 in json\n\n // dynamic: entiteitUitslag.json\n public stemmen: number = 0; // sc (entiteitUitslag.json) us (overzicht.json)\n public zetels: number = 0; // zs (entiteitUitslag.json)\n public percent: number = 0.0; // calculated when importing data\n\n // resultaten\n public kandidaten: KandidatenLijst; // kd\n public kandidatenLoaded: boolean = false; // true = data loaded\n public kandidatenError: boolean = false; // true = error while loading data\n}\n\nexport interface EntityLijsten {\n // static = entiteitLijsten.json dynamic: entiteitUitslag.json\n [lijstGID: string]: LijstResult;\n\n}\n\nexport class GenderDistributie {\n // public vrouw: number[] = []; // vrouwen in 5 leeftijd groepen\n // public man: number[] = []; // mannen in leeftijd groepen\n public man: number = 0;\n public vrouw: number = 0;\n public vrouwpct: number = 0.0;\n public manpct: number = 0.0;\n public range: string = '';\n public total: number = 0;\n public totalpct: number = 0.0;\n}\n\nexport class Statistiek { // global statistiek.json (contains entity list)\n public ingeschreven: number = 0; // sg\n public stemmen: number = 0; // ui\n public geldig: number = 0; // gs\n public ongeldig: number = 0; // os\n public distributie: GenderDistributie[] = []; // dv\n public gemiddeldeLeeftijd: number = 0; // gl\n\n public totaalMan: number = 0; // calculated\n public totaalVrouw: number = 0; // calculated\n public totaalVrouwPct: number = 0.0; // calculated\n public totaalVerkozen: number = 0; // calculated\n public totaalVerkozenPct: number = 0; // calculated\n\n public loaded: boolean = false; // true = data loaded\n}\n\nexport class EntityResult { // entity = nis\n // NOTE: de dieperliggende kandidaat resultaten gaan overschreven worden als je EntityResult vervangt\n // static = entiteitLijsten.json + /1/lijst.json + 1/uitslag.json\n public lijsten: EntityLijsten = {};\n\n public naam: string = ''; // taken from verwant list\n public verwant: Verwant[] = [];\n\n // dynamic: entiteitUitslag.json\n public bureaus: string = ''; // gb \"5/10\"\n public geteldeBureaus: number = 0; // calculated from bureaus string\n public totaalBureaus: number = 0; // calculated from bureaus string\n public totaalStemmen: number = 0; // calculated\n public totaalZetels: number = 0; // calculated\n public totaalPercent: number = 0; // calculated, should be 100\n\n public ongeldig: number = 0; // os\n public definitief: boolean = false; // df\n\n // extra property helps avoiding having to pass parameters when handling this entity result\n public year: number = 0;\n public nis: string = '';\n\n public loaded: boolean = false; // true = data loaded\n public error: boolean = false; // true = error loading initial nis data (incl. static entiteitLijsten.json etc)\n public updateError: boolean = false; // true = error loading result data (while updating)\n\n // statistiek.json (over alle nis heen)\n public statistiek: Statistiek = new Statistiek();\n}\n\nexport class Verwant {\n public nis: string; // needs to be string because it can contain letter eg D1234\n public naam: string;\n public electionType: ElectionType;\n}\n\n// previous election can have multiple nisses for current nis (= fusie gemeente)\nexport interface PreviousElection {\n [nis: string]: EntityResult;\n}\n\n// we only store the direct entity result in the store\n// and clear on every nis change\nexport class Elections {\n public 2018: EntityResult = new EntityResult(); // current nis = single result\n public 2012: PreviousElection = {};\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./print.scss?vue&type=style&index=1&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./print.scss?vue&type=style&index=1&lang=scss&\"","// Please also update lv2018/publicatie/vertaler/src/main/java/be/vlaanderen/abb/verkiezing/pub/vertaler/uit/model/charts/AbstractChartBuilder.java\n// if anything was changed to this\nexport const COLORS = {\n AGE: ['#F9F5F7', '#E9D8DF', '#CDA8B7', '#B2778F', '#913D60'],\n GENDER: ['#ece5f6', '#c4c6e8', '#a899d6', '#73659c', '#42346a'],\n VOTES: ['#DDDDDD', '#CCCCCC', '#AAAAAA', '#888888', '#666666', '#444444'],\n OTHERS: '#93546B',\n BLANCO: '#000000', // blanco votes\n SELECTED: '#05FFB4', // selected color for map and tree\n NODATA: '#FFFFFF',\n};\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburger.vue?vue&type=style&index=0&id=50fa1590&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburger.vue?vue&type=style&index=0&id=50fa1590&lang=scss&scoped=true&\"","import Vue from 'vue';\n\nexport const EventBus = new Vue();","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./app.scss?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!./app.scss?vue&type=style&index=0&lang=scss&\"","/*\n Set election date here\n automatic updates are scheduled until end of lifetime\n election date 00:00 + 2 days (eg 14 oct 00:00:00 until 15 october 23:59:59)\n */\nconst electionYear = 2018;\nconst electionDate: Date = new Date(electionYear, 9, 14); // month = zero based, start time: 0:00:00\nconst days: number = 24 * 60 * 60 * 1000; // day in milliseconds\nconst lifetime = days * 2; // lifetime of automatic updates after the electionDate above\nconst stopUpdates = new Date(electionDate.getTime() + lifetime); // update results in UI until this timestamp\n\n// true = Show genderverdeling, leeftijd verkozenen in map and statistieken tab\nconst SHOW_GENDER_AGE_STATS = false;\n\n// true = Show PV links page in new tab\nconst showPV= false;\nconst pvUrl = '';\n\n// detect location of api json files location (can be several nested folders deep)\nconst DEFAULT_API_FOLDER: string = 'api'; // in same folder as dist with js files\nconst DEFAULT_API_PORT: string = (location.port) ? `:${location.port}` : ''; // port name or empty\nlet url: string = `${location.protocol}//${location.hostname}${DEFAULT_API_PORT}${location.pathname}`;\nlet baseUrl : string = `${location.protocol}//${location.hostname}${DEFAULT_API_PORT}${location.pathname}`;\nconst deeplyNested = location.pathname.length > 1; // '/' = root\nif (deeplyNested) {\n url = (url.match(/^(http.+\\/)[^\\/]+$/) || ['', ''])[1];\n}\nconst DEFAULT_API_HOST = url + DEFAULT_API_FOLDER;\nconsole.log('DEFAULT_API_HOST: ', DEFAULT_API_HOST);\n\n// TODO terug tonen op 14/10\n// true -> kandidatenSite, false -> resultatenSite\nconst hideResults = false;\n\nexport const Settings = {\n ELECTION_YEAR: electionYear,\n PREVIOUS_ELECTION_YEAR: 2012,\n ELECTION_DATE: electionDate,\n RESULTS_MINIMUM_BUREAUS: 1, // consider results from x bureaus counted (bv Zuienkerke 31042 only has 1 bureau)\n REFRESH_RATE: 60, // seconds\n REFRESH_STOP: stopUpdates,\n MAX_RESULT_AGE: 600, // seconds, shows warning etc if last result update > max age\n SITE_BASE_URL: baseUrl,\n API_BASE_URL: DEFAULT_API_HOST,\n API_FOLDER: DEFAULT_API_FOLDER,\n GEO_FOLDER: DEFAULT_API_FOLDER + '/' + electionYear + '/geo/',\n SHARE_FOLDER: DEFAULT_API_HOST + '/' + electionYear + '/lv/',\n LIST_NUMBER_COLOR: '#999',\n SEARCH_MIN_CHARS: 2, // = levels of directories\n DISABLE_STATS: !SHOW_GENDER_AGE_STATS, // true = do not show any gender or age stats (statistiek tab + map)\n DISABLE_CONSOLE_LOGS: false, // true = disable console.logs in browser dev tools\n HIDE_RESULTS: hideResults,\n SHOW_PV: showPV,\n PV_URL: pvUrl,\n};\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburgerlist.vue?vue&type=style&index=0&id=9c92ecd8&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburgerlist.vue?vue&type=style&index=0&id=9c92ecd8&lang=scss&scoped=true&\"","export default class BrowserDetection {\n\n public IEversion: number = 0;\n\n constructor() {\n this.IEversion = this.detectIE();\n // console.log('--- BrowserDetection constructor IEversion = ',this.IEversion);\n }\n\n public get isIE(): boolean {\n return this.IEversion > 0 && this.IEversion <= 10;\n }\n\n public get isEdge(): boolean {\n return this.IEversion >= 12;\n }\n\n public get isIE11(): boolean {\n return this.IEversion == 11;\n }\n\n // see https://codepen.io/gapcode/pen/vEJNZN?editors=0010\n private detectIE() {\n const ua = window.navigator.userAgent;\n\n // IE 10\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n\n // IE 11\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n\n // Edge 12 (Spartan)\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n\n // Edge 13\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n\n const msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n const trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n const rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n const edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return 0;\n }\n\n}\n","export class ViewPortDimensions {\n public width: number = 0;\n public height: number = 0;\n}\n\nexport const VIEWPORT: any = {\n MAX_MOBILE: 480,\n MIN_TABLET: 768,\n MAX_TABLET: 1024,\n};\n","export const PROVINCIES = {\n '10000': 'Antwerpen',\n '70000': 'Limburg',\n '30000': 'West-Vlaanderen',\n '40000': 'Oost-Vlaanderen',\n '20001': 'Vlaams-Brabant',\n};\n","import {rgb, hsl, HSLColor, RGBColor} from 'd3-color';\n\n// Tinycolor is also a nice library for color manipulation & detection (isDark, readability, etc...)\n// https://www.npmjs.com/package/tinycolor2\n// but since we're using D3 it's better to implement those color libraries and extend them where needed\nexport const Utils = {\n\n isDark(hex: string): boolean {\n const color: RGBColor = rgb(hex);\n return this.getBrightness(color) < 128;\n },\n\n darkenLightColors(hex: string) {\n if (this.isDark(hex)) {\n return hex;\n }\n const color: RGBColor = rgb(hex);\n return color.darker(0.5).toString();\n },\n\n getBrightness(color: RGBColor) {\n // http://www.w3.org/TR/AERT#color-contrast\n return (color.r * 299 + color.g * 587 + color.b * 114) / 1000;\n },\n\n isTouchDevice(): boolean {\n return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent);\n },\n\n createTint(hex: string, percent: number): string {\n if (percent > 30) {\n return hex;\n } // just return as is\n\n // use fixed percent ranges\n let colortint = 0;\n if (percent > 20) {\n colortint = .60;\n } else if (percent > 10) {\n colortint = .25;\n } else {\n colortint = .07;\n }\n\n // uses D3 instead based on treshold values of legacy v2012 method\n const color: HSLColor = hsl(hex);\n return hsl(color.h, color.s, color.l, colortint).toString();\n },\n\n scrollTop(): number {\n return (window.pageYOffset !== undefined) ? window.pageYOffset\n : (document.documentElement || document.body.parentNode || document.body)\n .scrollTop;\n },\n\n /**\n * Converts an integer to true or false\n * Only integer 1 or string \"1\" converts to true all other input becomes false\n * @param num {string|integer}\n * @returns {boolean} true or false\n */\n intToBoolean(num: any) {\n return (parseInt(num, 10) || 0) === 1;\n },\n\n printMap() {\n const classList = document.body.classList;\n classList.add('print-map');\n classList.remove('print-results');\n window.print();\n },\n\n printResults() {\n const classList = document.body.classList;\n classList.add('print-results');\n classList.remove('print-map');\n window.print();\n },\n};\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchBar.vue?vue&type=style&index=0&id=5b892e03&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/lib/loader.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchBar.vue?vue&type=style&index=0&id=5b892e03&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[(_vm.isIE11)?_c('div',{attrs:{\"id\":\"ie11-warning\"}},[_vm._v(\"Dit is een beperkte weergave, \"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){_vm.redirectToSupportPage()}}},[_vm._v(\"meer info.\")])]):_vm._e(),(_vm.useMobileView && (_vm.geoLocating || _vm.geolocationError))?[_c('div',{attrs:{\"id\":\"geolocation-mask\"},on:{\"click\":function($event){_vm.closeGeolocationMask()}}},[_c('span',[(_vm.geoLocating)?[_c('svg',{staticClass:\"location\"},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-my_location\"}})]),_vm._m(0)]:[_vm._v(\"\\n \"+_vm._s(_vm.geolocationError)+\"\\n \")]],2)])]:_vm._e(),(_vm.supportedBrowser)?[_c('SearchBar',{attrs:{\"propTitle\":_vm.title}})]:_vm._e(),_c('router-view'),(_vm.canShowDesktopView)?_c('span',{staticClass:\"switch-desktop-view\"},[(_vm.useMobileView)?_c('p',[_vm._v(\"\\n Verander naar [\"),_c('a',{on:{\"click\":function($event){$event.preventDefault();_vm.setDesktopView(true)}}},[_vm._v(\"Desktop weergave\")]),_vm._v(\"]\\n \")]):_c('p',[_vm._v(\"\\n Verander naar [\"),_c('a',{on:{\"click\":function($event){$event.preventDefault();_vm.setDesktopView(false)}}},[_vm._v(\"Mobiele weergave\")]),_vm._v(\"]\\n \")])]):_vm._e()],2)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_vm._v(\"Even geduld a.u.b.\"),_c('br'),_vm._v(\"Ik zoek uw locatie\")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"role\":\"presentation\",\"id\":\"searchBar\"}},[_c('header',{class:{homesearch: _vm.isMobile && _vm.isHome()},attrs:{\"aria-label\":\"Top\"}},[_c('div',{staticClass:\"iwgh2-branding-logo\",attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){_vm.goToStartPage()}}},[_c('svg',{staticClass:\"iwgf3__logo__img\"},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#vlaanderen-logo\"}})])]),_c('a',{staticClass:\"iwgh3__label\",on:{\"click\":function($event){_vm.goToStartPage()}}},[_vm._v(_vm._s(_vm.title))]),_c('form',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideSearch),expression:\"hideSearch\"}],staticClass:\"print-hidden\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('a',{staticClass:\"clickable\",attrs:{\"id\":\"meerinfo\",\"href\":\"https://info.vlaanderenkiest.be\",\"target\":\"_blank\",\"title\":\"Meer info over #VlaanderenKiest 2018\"}},[_vm._v(\"\\n Meer info\\n \")]),_c('span',{staticClass:\"search-field\",class:{ invisible: !_vm.searchVisible, loading: _vm.resultsLoading },attrs:{\"role\":\"presentation\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],ref:\"searchField\",attrs:{\"type\":\"text\",\"role\":\"search\",\"aria-label\":\"Zoekveld\",\"autocomplete\":\"off\",\"placeholder\":_vm.isMobile && _vm.nis ? 'Kandidaat, plaats of postcode':'Zoek op kandidaat, plaats of postcode'},domProps:{\"value\":(_vm.search)},on:{\"click\":function($event){_vm.searchVisible = true},\"keyup\":[function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"esc\",27,$event.key,\"Escape\")){ return null; }_vm.hideSearch()},function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }_vm.clickFirstMatch()},function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }_vm.selectFirstMatch()}],\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}}),_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-hour-glass\"}})]),(_vm.hasUserInput() && !_vm.resultsLoading)?_c('span',{class:{ empty: !_vm.totalMatches },attrs:{\"aria-hidden\":\"true\"},on:{\"click\":function($event){_vm.clearSearch()}}},[_vm._v(\"\\n \"+_vm._s(_vm.totalMatches)+\"\\n \"),_c('svg',{staticClass:\"clear-search\",attrs:{\"title\":\"Maak zoekveld leeg\"}},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-cross\"}})])]):_vm._e(),(_vm.totalMatches)?_c('div',{staticClass:\"searchResults\",class:{ loading: _vm.resultsLoading }},[_c('ul',{on:{\"keyup\":[function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"up\",38,$event.key,[\"Up\",\"ArrowUp\"])){ return null; }_vm.selectPreviousMatch()},function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"esc\",27,$event.key,\"Escape\")){ return null; }_vm.hideSearch()},function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }_vm.selectNextMatch()}]}},[_vm._l((_vm.searchResult.matches),function(match,index){return _c('li',{ref:\"matches\",refInFor:true,on:{\"mouseover\":function($event){_vm.currentMatch = index}}},[(_vm.isMatch(_vm.MATCH_TYPES.PERSOON, match))?[_c('span',{on:{\"click\":function($event){_vm.hideSearch(); _vm.mapVisible = false}}},[_c('router-link',{attrs:{\"to\":{ name: 'kandidaatResultPage', params: { electionTypeName: match.verkiezingsType, nis: '' + match.nis, lijstGID: '' + match.lijstGID, kandidaatGID:'' + match.kandidaatGID }}}},[_c('svg',{staticClass:\"icon-result\",attrs:{\"fill\":match.color}},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#kandidaat\"}})]),_c('span',[_vm._v(\"\\n \"+_vm._s(match.naam)+\" - \"+_vm._s(match.gemeente)+\"\\n \")])])],1)]:(_vm.isMatch(_vm.MATCH_TYPES.KIESKRING, match))?[_c('span',{on:{\"click\":function($event){_vm.hideSearch(); _vm.mapVisible = false}}},[_c('router-link',{attrs:{\"to\":{ name: 'resultpage', params: {electionTypeName: match.verkiezingsType, nis: match.nis }}}},[_c('svg',{staticClass:\"icon-result\"},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-location\"}})]),_c('span',[_vm._v(\"\\n \"+_vm._s(match.gemeente)+\" - \"+_vm._s(_vm.mapNames[_vm.types[match.verkiezingsType]])+\"\\n \")])])],1)]:(_vm.isMatch(_vm.MATCH_TYPES.POSTCODE, match))?[_c('span',{on:{\"click\":function($event){_vm.hideSearch(); _vm.mapVisible = false}}},[_c('router-link',{attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'gemeente', nis: match.nis }}}},[_c('svg',{staticClass:\"icon-result\"},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-location\"}})]),_c('span',[_vm._v(\"\\n \"+_vm._s(match.postcode)+\" \"+_vm._s(match.gemeente)+\"\\n \")])])],1)]:_vm._e()],2)}),(_vm.searchResult.other)?_c('li',[_c('span',{staticClass:\"more-results\"},[_vm._v(\"\\n + \"+_vm._s(_vm.searchResult.other)+\" meer (verfijn zoekopdracht)\\n \")])]):_vm._e()],2)]):_vm._e()]),_c('button',{class:{ active: _vm.searchVisible},attrs:{\"id\":\"search-button\",\"type\":\"button\",\"aria-hidden\":\"true\",\"placeholder\":\"Zoeken...\",\"tabindex\":\"-1\"},on:{\"click\":_vm.showSearch}},[_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#search\"}})])]),_c('hamburger')],1)]),(_vm.isMobile && _vm.isHome)?_c('hr',{staticClass:\"divider-homesearch\"}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nexport const MATCH_TYPES: any = {\n POSTCODE: 'pc',\n KIESKRING: 'kk',\n PERSOON: 'ps',\n};\n\nexport interface MinimalMatch {\n nis: number;\n typeName: string;\n}\n\nexport interface PostCodeMatch extends MinimalMatch {\n gemeente: string;\n postcode: string;\n}\n\nexport interface KiesKringMatch extends MinimalMatch {\n gemeente: string;\n verkiezingsType: string;\n}\n\n// TODO adjust to match search results\nexport interface PersonMatch extends MinimalMatch {\n naam: string;\n volgnr: number;\n lijst: number;\n gemeente: string; // c\n verkiezingsType: string; // e\n kandidaatGID: string; // k\n lijstGID: string; // p\n color: string; // a\n}\n\n// Also add new types like GEO match here...\n\n\nexport type Match = PostCodeMatch | KiesKringMatch | PersonMatch;\n\nexport interface SearchResult {\n canceled?: boolean;\n matches: Match[]; // first 10 results\n other: number; // amount of extra results that are not shown\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('section',{attrs:{\"id\":\"hamburger-button\"}},[_c('button',{staticClass:\"menu\",class:{ active: _vm.menuVisible },attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.toggleMenu()}}},[_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#hamburger\"}})])]),(_vm.menuVisible)?_c('menulist',{on:{\"close\":function($event){_vm.hideMenu()}}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{attrs:{\"id\":\"hamburger-mask\"},on:{\"click\":function($event){_vm.$emit('close')}}}),_c('div',{staticClass:\"button-tab\",on:{\"click\":function($event){_vm.$emit('close')}}},[_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#hamburger\"}})])]),_c('aside',{class:{ hamburger: _vm.useMobileView},attrs:{\"id\":\"hamburger-list\"}},[_c('div',{staticClass:\"navColumn\"},[_c('ul',[_c('li',{staticClass:\"clickable\"},[_c('button',{on:{\"click\":function($event){_vm.goToStartPage()}}},[_vm._v(\"\\n Home\\n \")])])]),_c('ul',{on:{\"click\":function($event){_vm.$emit('close')}}},[_c('li',{staticClass:\"clickable\"},[_c('button',{attrs:{\"disabled\":!!_vm.geolocationError},on:{\"click\":function($event){_vm.loadGeolocation()}}},[_c('svg',{staticClass:\"icon icon-my_location\"},[_c('use',{attrs:{\"xlink:href\":\"#icon-my_location\"}})]),_vm._v(\"\\n Resultaten op mijn locatie\\n \")])])]),(_vm.hasFavorites)?_c('ul',[_c('li',{staticClass:\"clickable\",class:{ open: _vm.favoritesOpened, closed: !_vm.favoritesOpened }},[_c('a',{on:{\"click\":function($event){_vm.toggleFavorites()}}},[_vm._v(\"\\n Favorieten (\"+_vm._s(this.totalFavorites)+\")\\n\\n \"),_c('span',{staticClass:\"toggle-button\"},[_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-chevron-down\"}})])])])]),_vm._l((_vm.favoriteKeys),function(favorite){return (_vm.favoritesOpened)?_c('li',{staticClass:\"subitems\",on:{\"click\":function($event){_vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":favorite}},[_c('svg',{staticClass:\"favorite\"},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#star\"}})]),_vm._v(\"\\n\\n \"+_vm._s(_vm.favorites[favorite])+\"\\n \")])],1):_vm._e()})],2):_vm._e(),(_vm.nis && _vm.election.loaded)?_c('ul',[_c('li',{staticClass:\"clickable\",class:{ open: _vm.suggestionsOpened, closed: !_vm.suggestionsOpened }},[_c('a',{on:{\"click\":function($event){_vm.toggleSuggestions()}}},[_vm._v(\"\\n Suggesties (\"+_vm._s(_vm.totalSuggestions)+\")\\n\\n \"),_c('span',{staticClass:\"toggle-button\"},[_c('svg',[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-chevron-down\"}})])])])]),_vm._l((_vm.election.verwant),function(verwant){return (_vm.suggestionsOpened)?_c('li',{staticClass:\"subitems\",on:{\"click\":function($event){_vm.$emit('close')}}},[(_vm.isNotCurrent(verwant))?[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: _vm.routeElection(verwant.electionType), nis: verwant.nis}}}},[_vm._v(\"\\n \"+_vm._s(verwant.naam + ' - ' + _vm.electionName(verwant))+\"\\n \")])]:_vm._e()],2):_vm._e()})],2):_vm._e(),_c('ul',{on:{\"click\":function($event){_vm.$emit('close')}}},[_vm._m(0),_vm._m(1),_vm._m(2)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('a',{staticClass:\"clickable\",attrs:{\"href\":\"https://vlaanderenkiest.be/faq\",\"target\":\"_blank\"}},[_vm._v(\"\\n FAQ\\n \")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('a',{staticClass:\"clickable\",attrs:{\"href\":\"http://vlaanderenkiest.be/contact\",\"target\":\"_blank\"}},[_vm._v(\"\\n Contact\\n \")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('a',{staticClass:\"clickable\",attrs:{\"href\":\"https://info.vlaanderenkiest.be\",\"target\":\"_blank\"}},[_vm._v(\"\\n Meer Info\\n \")])])}]\n\nexport { render, staticRenderFns }","\n\n\nimport {Component, Vue} from 'vue-property-decorator';\nimport {Match, MATCH_TYPES} from '@/models/search.model';\nimport {\n ELECTION_NAMES,\n ELECTION_TYPE_TO_MAP_NAME,\n ELECTION_TYPE_TO_NAME,\n ELECTION_TYPES,\n ElectionType,\n Verwant,\n} from '../../models/election.result.model';\nimport {Settings} from '../../shared/settings';\nimport {PROVINCIES} from '../../models/provincies';\nimport toPairs from 'lodash/toPairs';\nimport sortBy from 'lodash/sortBy';\nimport {RawLocation} from 'vue-router';\n\n// first used sideBar component for this\n// until the differences in UI became too much\n// extracted code into this component\n\n@Component\nexport default class HamburgerList extends Vue {\n\n private MAX_DEFAULT_FAVORITES: number = 5; // will show at startup if below this treshold\n private MAX_DEFAULT_SUGGESTIONS: number = 3;\n\n public favoritesOpened: boolean = false;\n public suggestionsOpened: boolean = false;\n\n constructor() {\n super();\n\n console.log('HamburgerList constructor');\n }\n\n\n get electionType(): ElectionType {\n const current = this.$store.getters['current/query'];\n return current.electionType;\n }\n\n public nop() {\n console.log('scrolling ');\n }\n\n public goToStartPage() {\n this.$router.push({name: 'home'});\n this.$emit('close');\n }\n\n public async mounted() {\n await this.$store.dispatch('current/setFavorites', JSON.parse(localStorage.getItem('favorites') || '{}'));\n this.initToggle();\n }\n\n public isNotCurrent(verwant: Verwant): boolean {\n return this.election.naam !== verwant.naam || this.electionTypeName !== ELECTION_TYPE_TO_NAME[verwant.electionType] || this.nis !== verwant.nis;\n }\n\n public get favorites(): { [path: string]: string } {\n return this.$store.getters['current/favorites'];\n }\n\n // noinspection JSUnusedLocalSymbols\n private get favoriteKeys(): string[] {\n return sortBy(toPairs(this.favorites), 1).map((a: any) => a[0]);\n }\n\n public toggleFavorites() {\n this.favoritesOpened = !this.favoritesOpened;\n }\n\n public toggleSuggestions() {\n this.suggestionsOpened = !this.suggestionsOpened;\n }\n\n public get hasFavorites() {\n return this.totalFavorites > 0;\n }\n\n public get hasSuggestions() {\n return this.totalSuggestions > 0;\n }\n\n public get totalFavorites(): number {\n return (this.favorites) ? Object.keys(this.favorites).length : 0;\n }\n\n public get totalSuggestions(): number {\n // minus one because current nis is also in verwant list (!)\n return (this.election.loaded) ? this.election.verwant.length - 1 : 0;\n }\n\n public get showFavorites() {\n const treshold = 2; // items\n const maxDiff = 1; // allow error margin\n return (this.totalFavorites - treshold) <= maxDiff;\n }\n\n public get nis(): string {\n return this.$route.params['nis'];\n }\n\n public get electionTypeName(): string {\n return this.$route.params['electionTypeName'];\n }\n\n public get useMobileView(): boolean {\n return this.$store.getters['current/useMobileView'];\n }\n\n public set mapVisible(showMap: boolean) {\n this.$store.dispatch('current/showMap', showMap);\n }\n\n public get mapVisible(): boolean {\n return this.$store.getters['current/showMap'];\n }\n\n public get elections() {\n return this.$store.getters['current/elections'];\n }\n\n public get election() {\n return ( this.elections)[Settings.ELECTION_YEAR];\n // return (this.elections) ? ( this.elections)[Settings.ELECTION_YEAR] : new EntityResult();\n }\n\n get geolocationError(): string {\n return this.$store.getters['map/geolocation_error'];\n }\n\n public get geolocation(): any {\n return this.$store.getters['map/geolocation'];\n }\n\n public async loadGeolocation() {\n const isProvincieraad: boolean = this.electionType === ELECTION_TYPES.PROVINCIE;\n const isDistrictNis: boolean = isProvincieraad && this.nis.indexOf('D') > -1;\n const isProvincie: boolean = isProvincieraad && !!( PROVINCIES)[this.nis];\n await this.$store.dispatch('map/load_geolocation', {\n type: this.electionType,\n provincieType: isProvincie ? 'provincies' : isDistrictNis ? 'provinciedistricten' : null,\n });\n this.$router.push( {\n name: 'resultpage',\n params: {\n electionTypeName: this.electionTypeName ? this.electionTypeName : ELECTION_NAMES.GEMEENTE,\n nis: this.geolocation.properties.n,\n },\n });\n }\n\n private initToggle() {\n this.favoritesOpened = this.hasFavorites\n && this.totalFavorites <= this.MAX_DEFAULT_FAVORITES;\n this.suggestionsOpened = this.hasSuggestions\n && this.totalSuggestions <= this.MAX_DEFAULT_SUGGESTIONS;\n }\n\n public electionName(verwant: Verwant) {\n let name = ELECTION_TYPE_TO_MAP_NAME[verwant.electionType];\n if (verwant.electionType === ELECTION_TYPES.PROVINCIE) {\n name += ' - ' + (!!( PROVINCIES)[verwant.nis] ? 'provincie' : (verwant.nis.indexOf('D') > -1 ? 'provinciedistrict' : 'gemeente'));\n }\n return name;\n }\n\n public routeElection(type: ElectionType) {\n return ELECTION_TYPE_TO_NAME[type];\n }\n\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburgerlist.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburgerlist.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./hamburgerlist.html?vue&type=template&id=9c92ecd8&scoped=true&\"\nimport script from \"./hamburgerlist.vue?vue&type=script&lang=ts&\"\nexport * from \"./hamburgerlist.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./hamburgerlist.vue?vue&type=style&index=0&id=9c92ecd8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c92ecd8\",\n null\n \n)\n\ncomponent.options.__file = \"hamburgerlist.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Vue} from 'vue-property-decorator';\nimport HamburgerList from '@/components/hamburger/hamburgerlist.vue';\n\n@Component({\n components: {\n menulist: HamburgerList,\n },\n})\nexport default class HamburgerComponent extends Vue {\n public menuVisible: boolean = false;\n\n constructor() {\n super();\n }\n\n public get isAvailable(): boolean {\n // touch devices\n // useMobileView = smartphones\n // canShowDesktopView = tablets\n return this.$store.getters['current/useMobileView'] ||\n (this.$store.getters['current/canShowDesktopView'] && !this.$store.getters['current/forceDesktopView']);\n }\n\n public hideMenu() {\n this.menuVisible = false;\n }\n\n public showMenu() {\n this.menuVisible = true;\n }\n\n public toggleMenu() {\n this.menuVisible = !this.menuVisible;\n }\n\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburger.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./hamburger.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./hamburger.vue?vue&type=template&id=50fa1590&scoped=true&\"\nimport script from \"./hamburger.vue?vue&type=script&lang=ts&\"\nexport * from \"./hamburger.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./hamburger.vue?vue&type=style&index=0&id=50fa1590&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50fa1590\",\n null\n \n)\n\ncomponent.options.__file = \"hamburger.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Vue, Watch} from 'vue-property-decorator';\nimport {Match, MATCH_TYPES} from '@/models/search.model';\nimport HamburgerComponent from '@/components/hamburger/hamburger.vue';\nimport {ELECTION_NAME_TO_TYPE, ELECTION_TYPE_TO_MAP_NAME} from '../../models/election.result.model';\nimport {Settings} from '../../shared/settings';\nimport {ViewPortDimensions} from '../../models/viewport.model';\nimport {EventBus} from '../../eventBus';\n\nconst SCREEN_MINIMUM = 320; // pixels eg iPhone 5s = 320px\n\n@Component({\n props : {\n propTitle: String,\n },\n components: {\n hamburger: HamburgerComponent,\n },\n})\nexport default class SearchBar extends Vue {\n public propTitle: string;\n public searchVisible = false;\n public MATCH_TYPES = MATCH_TYPES;\n public search: string = '';\n public resultsVisible: boolean = false;\n public currentMatch: number = -1;\n private types = ELECTION_NAME_TO_TYPE;\n private mapNames = ELECTION_TYPE_TO_MAP_NAME;\n private needsLookup: boolean = true;\n\n constructor() {\n super();\n }\n\n public get mapVisible(): boolean {\n return this.$store.getters['current/showMap'];\n }\n\n public set mapVisible(showMap: boolean) {\n this.$store.dispatch('current/showMap', showMap);\n }\n\n get viewPortSize(): ViewPortDimensions {\n return this.$store.getters['current/viewportSize'] || new ViewPortDimensions();\n }\n\n public get title(): string {\n return (this.viewPortSize.width <= SCREEN_MINIMUM) ? 'Verkiezingen ' + Settings.ELECTION_YEAR : this.propTitle;\n }\n\n public get isMobile(): boolean {\n return this.$store.getters['current/useMobileView'];\n }\n\n public hideSearch() {\n if (this.searchVisible) {\n this.$nextTick(() => ( this.$refs.searchField).blur());\n window.removeEventListener('keydown', this.preventKeyScroll, false);\n this.searchVisible = false;\n this.clearSearch();\n }\n }\n\n public searchClicked() {\n if (!this.searchVisible) {\n this.showSearch();\n } else {\n this.clickFirstMatch();\n }\n }\n\n public async goToStartPage() {\n //this.$store.dispatch('current/showMap', true);\n // this.$store.dispatch('cache/clear_results'); // creates error and isn't needed: current/SET_ENTITY_RESULT reset result when nis is changed\n this.$router.push({name: 'home'});\n }\n\n public showSearch() {\n this.searchVisible = true;\n this.$nextTick(() => ( this.$refs.searchField).focus());\n }\n\n public created() {\n const el: any = document.getElementById('preload-search');\n const defaultSearch: string = (!!el) ? el.value : '';\n this.search = defaultSearch;\n this.$nextTick(() => {\n this.showSearch();\n });\n }\n\n public get nis(): string {\n return this.$route.params['nis'];\n }\n\n public isHome(): boolean {\n console.log('router', this.$router.currentRoute.name);\n return this.$router.currentRoute.name === 'home';\n }\n\n public mounted() {\n EventBus.$on('showSearch', () => {\n this.$nextTick(() => {\n this.showSearch();\n });\n });\n }\n\n // first version got value from Vuex store but that caused weird results\n // since the server response is delayed\n @Watch('search')\n public onSearchChanged(newValue: string, oldValue: string) {\n if (this.needsLookup) {\n this.$store.dispatch('search/change', newValue);\n }\n this.needsLookup = true;\n }\n\n get resultsLoading() {\n // you don't want to know how long it took me\n // to find this syntax for reading one property from the namespaced store module...\n return this.$store.getters['search/isLoading'];\n }\n\n get searchResult() {\n this.resultsVisible = true;\n return this.$store.getters['search/searchResult'];\n }\n\n public updateMatch() {\n // this.currentMatch = index;\n }\n\n private updateFocus() {\n window.addEventListener('keydown', this.preventKeyScroll);\n if (this.currentMatch === -1) {\n this.showSearch();\n return;\n }\n\n const matchLink = (( this.$refs.matches)[this.currentMatch].getElementsByTagName('a'))[0];\n this.$nextTick(() => matchLink.focus());\n }\n\n private preventKeyScroll(e: KeyboardEvent) {\n // space and arrow keys\n if ([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {\n return e.preventDefault();\n }\n }\n\n public hideSearchResults() {\n this.resultsVisible = false;\n }\n\n public hasUserInput(): boolean {\n return !!this.search && this.search.length >= Settings.SEARCH_MIN_CHARS;\n }\n\n public setSearchField(newValue: string) {\n this.needsLookup = false;\n this.clearSearch();\n // this.search = newValue; // uncomment to show the selected search item\n }\n\n public clearSearch() {\n this.hideSearchResults();\n this.search = '';\n if (!this.$refs.searchField) {\n return;\n }\n\n this.$store.dispatch('search/clearResults');\n // (this.$refs.searchField).focus();\n }\n\n public selectFirstMatch() {\n this.currentMatch = 0;\n this.updateFocus();\n }\n\n public clickFirstMatch() {\n const matches = this.searchResult.matches.length - 1;\n if (matches !== -1) {\n const matchLink = (( this.$refs.matches)[0].getElementsByTagName('a'))[0];\n this.$nextTick(() => matchLink.click());\n this.hideSearch();\n }\n }\n\n public selectPreviousMatch() {\n if (this.currentMatch < 0) {\n return;\n }\n\n this.currentMatch -= 1;\n this.updateFocus();\n }\n\n public selectNextMatch() {\n const visibleMatches = this.searchResult.matches.length - 1;\n if (this.currentMatch >= visibleMatches) {\n return;\n }\n\n this.currentMatch += 1;\n this.updateFocus();\n }\n\n // Computed properties are written as getters and setters on the class.\n // https://alligator.io/vuejs/typescript-class-components/\n // A computed property will only re-evaluate when some of its dependencies have changed\n public isMatch(matchType: string, match: Match): boolean {\n const isMatch = matchType === match.typeName;\n return isMatch;\n }\n\n get totalMatches(): number {\n return this.searchResult.matches.length + this.searchResult.other;\n }\n\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SearchBar.vue?vue&type=template&id=5b892e03&scoped=true&\"\nimport script from \"./SearchBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./SearchBar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SearchBar.vue?vue&type=style&index=0&id=5b892e03&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b892e03\",\n null\n \n)\n\ncomponent.options.__file = \"SearchBar.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Vue} from 'vue-property-decorator';\n// lazy loading searchbar:\n// const SearchBar = () => import(/* webpackChunkName: \"SearchBar\" */ \"./components/SearchBar.vue\");\n// immediate import:\nimport SearchBar from '@/components/searchbar/SearchBar.vue';\nimport {ViewPortDimensions} from '@/models/viewport.model';\nimport BrowserDetection from './shared/browserDetection';\nimport {Settings} from '@/shared/settings';\n\n/*\n TODO check accessibility voor blinden en slechtzienden\n\n http://www.karlgroves.com/2013/09/05/the-6-simplest-web-accessibility-tests-anyone-can-do/\n\n\n */\n\n@Component({\n components: {SearchBar},\n})\nexport default class App extends Vue {\n\n private isIE11 = new BrowserDetection().isIE11;\n public windowWidth = 0;\n public windowHeight = 0;\n public title: string = 'Lokale verkiezingen 2018';\n public supportedBrowser: boolean = true;\n\n // Chrome updates resize continously\n // debounce is added to not make resizing too CPU intensive\n // note: mobile devices normally only resize portrait/landscape\n public RESIZE_HANDLER_DELAY: number = 250;\n\n constructor() {\n super();\n this.handleConsoleLogs();\n }\n\n public created() {\n if (!this.isTouchDevice) {\n this.$store.dispatch('current/showMap', false);\n }\n }\n\n /*\n IMPORTANT NOTE:\n if we allow tablets etc to switch between mobile/desktop views\n we can NOT rely on CSS media size queries anymore\n\n That's why the root level gets two classes:\n .desktop\n .touch\n\n */\n\n public beforeMount() {\n // check supported browser once at startup\n this.supportedBrowser = !this.isIncompatibleBrowser();\n if (!this.supportedBrowser) {\n this.redirectToSupportPage();\n }\n\n this.$nextTick(function () {\n if (this.isTouchDevice && !this.forceDesktopView) {\n this.setTouchMode(true);\n } else {\n this.setDesktopMode();\n }\n\n this.detectOnlineStatus();\n\n // window.addEventListener('resize', debounce(this.getWindowSize, this.RESIZE_HANDLER_DELAY));\n window.addEventListener('resize', this.getWindowSize);\n\n // Init resize watcher\n this.getWindowSize();\n });\n }\n\n private isIncompatibleBrowser(): boolean {\n // for the moment we do not support any IE version\n // you can detect specific IE versions with the .IEversion property\n const browser: any = new BrowserDetection();\n // return false;\n return browser.isIE;\n }\n\n private redirectToSupportPage() {\n this.$router.push({\n name: 'browsers',\n });\n }\n\n private setTouchMode(newValue: boolean) {\n this.clearLoadingStyles();\n if (newValue === true) {\n document.body.classList.add('touch');\n return;\n }\n\n document.body.classList.remove('touch');\n }\n\n private setDesktopMode() {\n this.clearLoadingStyles();\n document.body.classList.add('desktop');\n }\n\n private clearLoadingStyles() {\n document.body.classList.remove('initializing');\n }\n\n public get canShowDesktopView(): boolean {\n return this.$store.getters['current/canShowDesktopView'];\n }\n\n public get forceDesktopView(): boolean {\n return this.$store.getters['current/forceDesktopView'];\n }\n\n get viewPortSize(): ViewPortDimensions {\n return this.$store.getters['current/viewportSize'];\n }\n\n public beforeDestroy() {\n window.removeEventListener('resize', this.getWindowSize);\n }\n\n // resize based on https://jsfiddle.net/hr77p7qb/3/\n // https://forum.vuejs.org/t/vuejs-2-event-listener-window-resize/2526\n public getWindowSize(event?: Event) {\n this.windowWidth = document.documentElement.clientWidth;\n this.windowHeight = document.documentElement.clientHeight;\n this.$store.dispatch('current/set_viewport', this.getDimensions());\n }\n\n public get isTouchDevice(): boolean {\n return this.$store.getters['current/isTouchDevice'];\n }\n\n public get useMobileView(): boolean {\n return this.$store.getters['current/useMobileView'];\n }\n\n // force touch devices to use desktop view instead of default touch/mobile view\n public setDesktopView(useDesktopView: boolean) {\n // this.setTouchMode(!useDesktopView);\n this.$store.dispatch('current/forceDesktopView', useDesktopView);\n }\n\n public get geoLocating() {\n return this.$store.getters['map/geolocating'];\n }\n\n public get geolocationError(): string {\n return this.$store.getters['map/geolocation_error'];\n }\n\n public closeGeolocationMask() {\n if (this.geoLocating) {\n return; // not closable while geolocating in process\n }\n\n this.$store.dispatch('map/reset_geolocation_error'); // will close mask\n }\n\n private getDimensions(): ViewPortDimensions {\n return {\n width: this.windowWidth,\n height: this.windowHeight,\n };\n }\n\n private detectOnlineStatus() {\n window.addEventListener('online', this.updateOnlineStatus);\n window.addEventListener('offline', this.updateOnlineStatus);\n }\n\n private updateOnlineStatus() {\n const status = navigator.onLine || false;\n this.$store.commit('current/SET_ONLINE', status);\n console.log('ONLINE:', status);\n }\n\n private handleConsoleLogs() {\n if (!Settings.DISABLE_CONSOLE_LOGS) {\n return;\n }\n\n // disable console logging\n const disable_console_types: string[] = ['log', 'warn', 'info', 'debug']; // do not disable ERROR messages\n const noop = () => {\n };\n const consoleInstance: any = console || {log: noop};\n if (Settings.DISABLE_CONSOLE_LOGS || !window.console) {\n consoleInstance.log('CONSOLE.LOGGING DISABLED');\n while (disable_console_types.length) {\n const prop = disable_console_types.shift();\n consoleInstance[prop] = noop;\n }\n }\n }\n\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=815d25b4&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./styles/app.scss?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./styles/print.scss?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","import Vue from 'vue';\nimport Router from 'vue-router';\nimport {Utils} from '@/shared/utils';\n\n// code splitting syntax (will be loaded when route is activated)\n// note: chunk name syntax does not seem to work correctly\nconst DesktopViewport = () => import(/* webpackChunkName: \"desktopView\" */ './views/DesktopViewport.vue');\nconst MobileViewport = () => import(/* webpackChunkName: \"mobileView\" */ './views/MobileViewport.vue');\nconst Home = () => import(/* webpackChunkName: \"home\" */ './views/Home.vue');\nconst ResultPage = () => import(/* webpackChunkName: \"resultPage\" */ './views/ResultPage.vue');\nconst PVPage = () => import(/* webpackChunkName: \"resultPage\" */ './views/pv/PVPage.vue');\nconst LijstPage = () => import(/* webpackChunkName: \"lijstPage\" */ './views/lijst/LijstPage.vue');\nconst VerkozenKandidatenPage = () => import(/* webpackChunkName: \"verkozenen\" */ './views/verkozenen/VerkozenKandidatenPage.vue');\nconst StatistiekPage = () => import(/* webpackChunkName: \"statistiek\" */ './views/statistiek/StatistiekPage.vue');\nconst BrowserPage = () => import(/* webpackChunkName: \"browsers\" */ './views/browsers/browserPage.vue');\nconst GeoLocationPage = () => import(/* webpackChunkName: \"geolocation\" */ './views/geolocation/geolocation.vue');\n\n// Direct import syntax (added to router load)\n// import Home from './views/Home.vue';\n\nVue.use(Router);\n\nlet appRoutes = [];\nconst forceDesktopView: boolean = !!localStorage.getItem('desktopView') || false;\n\n// these routes are shared between mobile and desktop versions\n// specific exceptions are used when USE_MOBILE_ROUTES = true\nconst sharedRoutes = [\n {\n path: '/',\n name: 'home',\n component: Home,\n },\n {\n path: '/mijnlocatie',\n name: 'geolocation',\n component: GeoLocationPage,\n },\n {\n path: '/:electionTypeName',\n name: 'electionTypeHome',\n component: ResultPage,\n },\n {\n path: '/:electionTypeName/:nis',\n name: 'resultpage',\n component: ResultPage,\n },\n {\n path: '/:electionTypeName/:nis/verkozenen',\n name: 'verkozenkandidatenpage',\n component: VerkozenKandidatenPage,\n },\n {\n path: '/:electionTypeName/:nis/statistieken',\n name: 'statistiekenpage',\n component: StatistiekPage,\n },\n\n {\n path: '/:electionTypeName/:nis/pv',\n name: 'pv',\n component: PVPage,\n },\n];\n\nconst USE_MOBILE_ROUTES: boolean = Utils.isTouchDevice() && !localStorage.getItem('desktopView');\nif (!forceDesktopView && USE_MOBILE_ROUTES) {\n // ** MOBILE ROUTES **\n // Q: for ALL mobile devices or only mobile devices with *small screens* ?\n console.log('using mobile routes', USE_MOBILE_ROUTES);\n\n const mobileSpecificRoutes = [\n {\n path: '/:electionTypeName/:nis/lijst/:lijstGID',\n name: 'lijstpage',\n component: LijstPage,\n },\n {\n path: '/:electionTypeName/:nis/lijst/:lijstGID/:kandidaatGID',\n name: 'kandidaatResultPage',\n component: LijstPage,\n },\n ];\n\n appRoutes = [\n {\n path: '',\n component: MobileViewport,\n children: sharedRoutes.concat(mobileSpecificRoutes),\n },\n\n {\n path: '/',\n name: 'browsers',\n component: BrowserPage,\n },\n ];\n\n} else {\n // ** DEFAULT TO DESKTOP ROUTES **\n console.log('using desktop routes');\n\n const desktopSpecificRoutes = [\n {\n path: '/:electionTypeName/:nis/lijst/:lijstGID',\n name: 'lijstpage',\n component: ResultPage,\n },\n {\n path: '/:electionTypeName/:nis/lijst/:lijstGID/:kandidaatGID',\n name: 'kandidaatResultPage',\n component: ResultPage,\n },\n ];\n\n appRoutes = [\n {\n path: '',\n component: DesktopViewport,\n children: sharedRoutes.concat(desktopSpecificRoutes),\n },\n {\n path: '/',\n name: 'browsers',\n component: BrowserPage,\n },\n ];\n}\n\nexport default new Router({\n routes: appRoutes,\n});\n","import {SearchResult} from '@/models/search.model';\n\nexport class SearchState {\n public text: string = '';\n public minLength: number = 2;\n public loading: boolean = false;\n public result: SearchResult = {\n matches: [],\n other: 0,\n };\n}\n","import {GetterTree} from 'vuex';\nimport {SearchState} from 'src/store/search/search.state';\nimport {SearchResult} from '@/models/search.model';\n\n// returns the complete state as-is\nexport function all(state: SearchState): SearchState {\n return state;\n}\n\nexport function searchText(state: SearchState): string {\n return state.text;\n}\n\nexport function searchResult(state: SearchState): SearchResult {\n return state.result;\n}\n\nexport function isLoading(state: SearchState): boolean {\n return state.loading;\n}\n\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n all, searchText, searchResult, isLoading,\n};\n","import { Mutation, MutationTree } from 'vuex';\nimport { SearchState } from './search.state';\nimport {SearchResult} from '@/models/search.model';\n\nexport function CLEAR(state: SearchState) {\n state.text = '';\n state.loading = false;\n state.result = {\n matches: [],\n other: 0,\n };\n}\n\nexport function CHANGE(state: SearchState, searchText: string) {\n state.loading = true;\n state.text = searchText;\n}\n\nexport function RESULTS(state: SearchState, searchResult: SearchResult) {\n state.loading = false;\n state.result = searchResult;\n}\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n CHANGE, RESULTS, CLEAR,\n};\n","import axios from 'axios';\nimport {ELECTION_TYPE_TO_NAME, ResultQuery} from '@/models/election.result.model';\nimport {Settings} from '@/shared/settings';\nimport {PROVINCIES} from '@/models/provincies';\n\n// set defaults (for all axios requests)\n// see https://stackoverflow.com/questions/43842711/can-i-throw-error-in-axios-post-based-on-response-status\naxios.defaults.validateStatus = (status) => {\n // to avoid 404 \"not found\" responses throwing an error in axios:\n return status < 500;\n};\n\n/*\n CacheApiService only caches in memory\n to allow Vuex store etc quick access to specific file data\n */\nexport class CacheApiService {\n\n private baseURL: string = Settings.API_BASE_URL + '/';\n\n // UPDATE existing entity results (current) + open lijst kandidaten\n public updateEntityResults(request: ResultQuery, lijstnummers: number[], loadMapData: boolean): Promise {\n const files: any[] = [];\n\n // 1) update entity\n let endpoint = this.baseURL + this.path(request);\n files.push(axios.get(`${endpoint}/entiteitUitslag.json`));\n\n // 2) update kandidaten en lijsten\n lijstnummers.forEach((lijstnr: number) => {\n request.lijstnr = lijstnr;\n endpoint = this.baseURL + this.lijstPath(request);\n files.push(axios.get(`${endpoint}/uitslag.json`));\n });\n\n // 3) load map (if map = visible)\n if (loadMapData) {\n endpoint = this.baseURL + this.mapPath(request);\n files.push(axios.get(`${endpoint}/overzicht.json`));\n files.push(axios.get(`${endpoint}/statistiek.json`));\n // is statistiek.json only necessary when nis = definitief?\n }\n\n return axios.all(files);\n }\n\n // when arriving NEW on an entity\n public getEntityResults(request: ResultQuery): Promise {\n const endpoint = this.baseURL + this.path(request);\n return axios.all([\n axios.get(`${endpoint}/entiteitLijsten.json`), // static, should not be loaded twice\n axios.get(`${endpoint}/verwant.json`), // static, should not be loaded twice\n axios.get(`${endpoint}/entiteitUitslag.json`), // results = change over time\n ]);\n }\n\n public getTopojsons(): Promise {\n const endpoint = this.baseURL + this.geoPath();\n return axios.all([\n axios.get(`${endpoint}/10000g.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/20001g.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/30000g.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/40000g.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/70000g.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/provincie_grenzen.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/provinciedistricten.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/stadsdistricten.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/ocmw.topojson`), // static, should not be loaded twice\n ]);\n }\n\n public getLijstResults(request: ResultQuery): Promise {\n const endpoint = this.baseURL + this.lijstPath(request);\n return axios.all([\n axios.get(`${endpoint}/lijst.json`), // static, should not be loaded twice\n axios.get(`${endpoint}/uitslag.json`), // results = change over time\n ]);\n }\n\n public getPreviousElectionResults(request: ResultQuery): Promise {\n return this.getFusies(request)\n .then((response: any) => {\n const files: any[] = [];\n if (response.status != 200) {\n response.data = '';\n }\n files.push(Promise.resolve(response)); // so it will be cached as well\n\n const nisResponse = response.data[request.nis];\n const nisses: string[] = nisResponse && Object.keys(nisResponse) || [request.nis];\n\n console.log('getPreviousElectionResults nisses', nisses);\n nisses.forEach((nis: string) => {\n const nisRequest: ResultQuery = {...request, year: Settings.PREVIOUS_ELECTION_YEAR, nis};\n console.log('getPreviousElectionResults nis', nis);\n console.log('getPreviousElectionResults nisRequest', nisRequest);\n const endpoint = this.baseURL + this.path(nisRequest);\n files.push(axios.get(`${endpoint}/entiteitLijsten.json`));\n files.push(axios.get(`${endpoint}/entiteitUitslag.json`));\n // no point in loading verwant.json here\n });\n\n // load asynchronously\n return axios.all(files);\n });\n }\n\n public getVerkozenen(request: ResultQuery, lijstnummers: number[]): Promise {\n const files: any[] = [];\n lijstnummers.forEach((lijstnr: number) => {\n request.lijstnr = lijstnr;\n const endpoint = this.baseURL + this.lijstPath(request);\n files.push(axios.get(`${endpoint}/lijst.json`));\n files.push(axios.get(`${endpoint}/uitslag.json`));\n });\n return axios.all(files);\n }\n\n public getMapResults(request: ResultQuery): Promise {\n const endpoint = this.baseURL + this.mapPath(request);\n return axios.all([\n axios.get(`${endpoint}/andersluidendeGewestelijkeLijsten.json`), // static, should not be loaded twice\n axios.get(`${endpoint}/gewestelijkeLijsten.json`), // static, should not be loaded twice\n axios.get(`${endpoint}/overzicht.json`), // results = change over time\n axios.get(`${endpoint}/statistiek.json`), // results = change over time (gender stats, etc)\n ]);\n }\n\n public getStatistieken(request: ResultQuery): Promise {\n const endpoint = this.baseURL + this.mapPath(request);\n return axios.all([\n axios.get(`${endpoint}/overzicht.json`), // results = change over time\n axios.get(`${endpoint}/statistiek.json`), // results = change over time (gender stats, etc)\n ]);\n }\n\n // endpoint is key + host name (incl. port and path)\n public path(request: ResultQuery): string {\n const year: number = request.year;\n const nis: string = request.nis;\n const electionName: string = ELECTION_TYPE_TO_NAME[request.electionType];\n return `${year}/lv/${electionName}/${nis}`;\n }\n\n // key is used for caching\n public lijstPath(request: ResultQuery): string {\n const isProvincie: boolean = this.isProvincie(request.nis);\n return (isProvincie) ? this.path(request) : this.path(request) + `/${request.lijstnr}`;\n }\n\n public mapPath(request: ResultQuery): string {\n const year: number = request.year;\n const electionName: string = ELECTION_TYPE_TO_NAME[request.electionType];\n return `${year}/lv/${electionName}`;\n }\n\n public geoPath(): string {\n return `${Settings.ELECTION_YEAR}/geo`;\n }\n\n public getFusies(request: ResultQuery): Promise {\n const endpoint = this.baseURL + this.mapPath(request);\n return axios.get(`${endpoint}/fusies.json`); // static, should not be loaded twice\n }\n\n private isProvincie(nis: string): boolean {\n return !!(PROVINCIES)[nis];\n }\n}\n","import {KiesKringMatch, Match, MATCH_TYPES, PersonMatch, PostCodeMatch, SearchResult} from '@/models/search.model';\nimport axios from 'axios';\nimport {ELECTION_TYPE_TO_NAME, ELECTION_TYPES, ResultQuery} from '@/models/election.result.model';\nimport {COLORS} from '@/models/colors';\nimport {Settings} from '@/shared/settings';\nimport {CacheApiService} from '@/store/cache/cache.api.service';\n\nconst cacheApiService = new CacheApiService();\n\nexport class SearchApiService {\n public MIN_CHARS: number = Settings.SEARCH_MIN_CHARS; // = levels of directories\n public SOUNDEX = false; // use soundex\n private cancelResults: any;\n private fusies: any;\n\n // om de build te versnellen (kopieren van 24.000+ jsons = out of memory)\n // wordt in development die files vanop een aparte API server gedeeld\n // de lokale dev server gebruikt een PROXY die een 'lokale' /API folder simuleert\n // en calls mapt naar de aparte lokale API server\n private baseURL: string = Settings.API_BASE_URL + '/';\n\n public async getResults(query: string): Promise {\n if (!!this.cancelResults) {\n this.cancelResults('Always cancel previous');\n }\n\n const sanitizedQuery = this.cleanseName(query).replace(/b-/i, '').replace(/[\\s-]+/gi, '');\n if (this.isNumeric(sanitizedQuery)) {\n // Voor postcodes worden er enkel type gemeenten als resultaat verkregen\n this.fusies = (await cacheApiService.getFusies({nis: '', electionType: ELECTION_TYPES.GEMEENTE, year: Settings.ELECTION_YEAR})).data;\n console.log('fusie', this.fusies);\n }\n const mapperFn = this.isNumeric(sanitizedQuery) ? this.mapCodeResults : this.mapResults;\n return await axios.get(this.endpoint(sanitizedQuery), {\n // see https://github.com/axios/axios#cancellation\n // An executor function receives a cancel function as a parameter\n cancelToken: new axios.CancelToken((c) => {\n this.cancelResults = c;\n }),\n })\n .then(mapperFn.bind(this))\n .catch(this.noResults);\n }\n\n private noResults(e: any): SearchResult {\n if (axios.isCancel(e)) {\n // request canceled, return canceled resultSet\n return {\n canceled: true,\n };\n }\n\n return {\n matches: [],\n other : 0,\n };\n }\n\n private mapCodeResults(response: any): SearchResult {\n return {\n matches: this.mapPostCodeMatches(response.data),\n other : 0,\n };\n }\n\n private mapResults(response: any): SearchResult {\n return {\n matches: this.mapMatches(response.data.r),\n other : response.data.o,\n };\n }\n\n private mapMatches(results: any): Match[] {\n const mappedResult: Match[] = [];\n\n results.forEach((result: any) => {\n const electiontype: string = ELECTION_TYPE_TO_NAME[result.e || ELECTION_TYPES.GEMEENTE];\n\n if (result.hasOwnProperty('o')) { // is Person\n mappedResult.push( {\n typeName : MATCH_TYPES.PERSOON,\n naam : result.f || '',\n gemeente : result.c || '',\n nis : result.n || 0,\n volgnr : result.o || 0,\n lijst : result.l || 0,\n verkiezingsType: electiontype,\n kandidaatGID : result.k || '0',\n lijstGID : result.p || '0',\n color : result.a || COLORS.OTHERS,\n });\n } else { // is KiesKring\n mappedResult.push( {\n typeName : MATCH_TYPES.KIESKRING,\n nis : result.n || 0,\n gemeente : result.c || 0,\n verkiezingsType: electiontype,\n });\n }\n });\n\n return mappedResult;\n }\n\n private mapPostCodeMatches(results: any): Match[] {\n const mappedResult: Match[] = [];\n\n results.forEach((result: any) => {\n // return correct nis\n if (ELECTION_TYPES.GEMEENTE === result.e) {\n if (this.fusies) {\n Object.keys(this.fusies).forEach((key) => {\n console.log('fusie', key);\n if(this.fusies[key][result.n]){\n result.n = key;\n }\n })\n }\n }\n mappedResult.push({\n typeName: MATCH_TYPES.POSTCODE,\n nis : result.n || 0,\n postcode: '' + (result.pc || 0),\n gemeente: result.c || '',\n } as PostCodeMatch);\n\n });\n\n return mappedResult;\n }\n\n private endpoint(query: string): string {\n let endpoint: string = this.baseURL + Settings.ELECTION_YEAR + '/';\n endpoint += this.isNumeric(query) ? 'postcodes' : this.SOUNDEX ? 'soundex' : 'names';\n\n if (this.SOUNDEX && !this.isNumeric(query)) {\n query = this.getSoundex(query);\n }\n\n let i = 0;\n let pathParts = '/';\n while (i < this.MIN_CHARS) {\n pathParts += query.substr(i, 1) + '/';\n i++;\n }\n\n endpoint += pathParts + query + '.json';\n return endpoint;\n }\n\n private getSoundex(query: string) {\n query = query.toUpperCase();\n const first = query.substr(0, 1);\n let soundex = query.substr(1, query.length);\n soundex = soundex.split('').map((l, index, array) => {\n return l === array[index - 1] || index === 0 && l === first ? '' :\n 'BFPV'.indexOf(l) > -1 ? 1 :\n 'CGJKQSXZ'.indexOf(l) > -1 ? 2 :\n 'DT'.indexOf(l) > -1 ? 3 :\n 'L' === l ? 4 :\n 'MN'.indexOf(l) > -1 ? 5 :\n 'R' === l ? 6 : '';\n }).join('') + '000';\n soundex = soundex.substr(0, 3);\n query = first + soundex;\n console.log(query);\n return query;\n }\n\n private isNumeric(query: string): boolean {\n const RE = /^[0-9]/;\n return RE.test(query);\n }\n\n private useAsciiVariant(name: string): string {\n return name.normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, \"\")\n // Other possible characters that weren't replaced\n .replace(\"Ʀ\", \"ae\").replace(\"đ\", \"d\").replace(\"Ć°\", \"dh\").replace(\"ʒ\", \"f\").replace(\"ħ\", \"h\")\n .replace(\"Ćø\", \"o\").replace(\"ŧ\", \"t\").replace(\"Āµ\", \"u\").replace(\"Ć¾\", \"th\");\n }\n\n /**\n * Remove some of the characters that aren't used.\n *\n * @param name the name to cleanse.\n * @return the cleansed name\n */\n private cleanseName(name: string): string {\n return this.useAsciiVariant(this.removeUselessCharacters(name).toLowerCase());\n }\n\n /**\n * Remove the characters that aren't allowed in the index.\n *\n * @param name the name to remove the characters from\n * @return the name without the characters\n */\n private removeUselessCharacters(name: string): string {\n return name.replace(\" \", \"\").replace(\"-\", \"\").replace(\"'\", \"\").replace(\".\", \"\").replace(\"?\", \"\")\n .replace(\"!\", \"\").replace(\";\", \"\").replace(\"_\", \"\").replace(\"{\", \"\").replace(\"}\", \"\").replace(\"(\", \"\")\n .replace(\")\", \"\");\n }\n}\n","import {ActionContext, ActionTree} from 'vuex';\nimport {SearchState} from './search.state';\n\nimport debounce from 'lodash/debounce';\nimport {SearchApiService} from '@/store/search/search.api.service';\nimport {SearchResult} from '@/models/search.model';\n// import _ from 'lodash' // <-- do NOT import complete lodash package like this (>70Kb)\n// only import the lodash methods you need (eg debounce = 2Kb)\n\nconst searchApiService = new SearchApiService();\n\nexport const change = debounce((store: ActionContext, payload: string) => {\n payload = payload.toLowerCase().trim();\n if (payload.length < searchApiService.MIN_CHARS) {\n if (!payload.length) {\n store.commit('CLEAR');\n }\n return;\n }\n\n store.commit('CHANGE', payload);\n searchApiService.getResults(payload)\n .then((result: SearchResult) => {\n if (result.canceled) {\n return;\n }\n\n // console.log('result --->',result);\n store.commit('RESULTS', result);\n });\n}, 250);\n\nexport function clearResults(store: ActionContext) {\n store.commit('CLEAR');\n}\n\n// export everything compliant to the vuex specification for actions\nexport default > {\n change, clearResults, // , anotherOne, thirdOne,...\n};\n","import { Module, GetterTree, MutationTree, ActionTree, Plugin } from 'vuex';\nimport {SearchState} from '@/store/search/search.state';\nimport Getters from './search.getters';\nimport Mutations from './search.mutations';\nimport Actions from './search.actions';\n\nexport class SearchModule implements Module {\n\n // resolve namespacing, applies \"foo/bar/...\" stuff automatically\n public namespaced: boolean = true;\n\n // default properties required for vuex stores/modules\n public state: SearchState;\n public getters = Getters;\n public mutations = Mutations;\n public actions = Actions;\n\n constructor() {\n this.state = new SearchState();\n }\n}\n\n\n/*\n Vuex for NgRx developers:\n\n actions = effects (async)\n mutations = reducers (sync)\n getters = selectors (read)\n\n not exactly an one-on-one mapping but it does\n show which are allowed to read and write sync or async\n\n */\n","import {GetterTree} from 'vuex';\nimport {CurrentState} from '@/store/current/current.state';\nimport {VIEWPORT, ViewPortDimensions} from '@/models/viewport.model';\nimport {Settings} from '@/shared/settings';\nimport map from 'lodash/map';\nimport filter from 'lodash/filter';\nimport {Utils} from '@/shared/utils';\nimport {ELECTION_TYPE_TO_MAP_NAME, Elections, EntityLijsten, EntityResult, LijstResult, ResultQuery, SortOrder, Statistiek} from '@/models/election.result.model';\n\n// returns the complete state as-is\n// export function all(state: CurrentState): CurrentState {\n// return state\n// }\n\n// returns the current info need to query data from server\nexport function query(state: CurrentState): ResultQuery {\n return {\n nis: state.nis,\n electionType: state.electionType,\n lijstGID: state.lijstGID, // only if global = set in url, table = multiple lijstGIDs open\n kandidaatGID: state.kandidaatGID, // only if global = set in url, table = multiple lijstGIDs open\n };\n}\n\n// both elections (previous + current)\nexport function elections(state: CurrentState): Elections | undefined {\n console.warn('getElections() change triggered for elections ', state.results);\n return state.results;\n}\n\n// current election\nexport function currentElection(state: CurrentState): EntityResult | undefined {\n return ( state.results || new EntityResult())[Settings.ELECTION_YEAR];\n}\n\n// export function currentElectionType(state: CurrentState): string {\n// return ( state.results)[Settings.ELECTION_YEAR].electionType;\n// }\n\nexport function previousElection(state: CurrentState): EntityResult | undefined {\n return ( state.results || new EntityResult())[Settings.PREVIOUS_ELECTION_YEAR];\n}\n\n// allows conversion from lijstGID to lijstNr (eg. '1521' to 19)\nexport function lijstnummer(state: CurrentState) {\n return (year: number, lijstGID: string, nis: string = ''): number => {\n\n console.log('getter lijstnummer', year, nis, lijstGID);\n\n let result: EntityResult = ( state.results)[year];\n const isPreviousElection: boolean = year !== Settings.ELECTION_YEAR;\n if (isPreviousElection) {\n result = ( result)[nis];\n }\n return (result) ? ( result.lijsten[lijstGID]).lijstnr : -1;\n };\n}\n\n// all lijst nrs for current entity\nexport function lijstNummers(state: CurrentState): number[] {\n return map(( state.results)[Settings.ELECTION_YEAR].lijsten, (lijst: LijstResult) => lijst.lijstnr);\n}\n\n// all lijst GIDs for current entity (new election only)\nexport function lijstenGIDs(state: CurrentState): string[] {\n return Object.keys(( state.results)[Settings.ELECTION_YEAR].lijsten);\n}\n\n// all lijst GIDs for current entity (new election only) which have kandidaten loaded (= opened in ui)\nexport function openedLijsten(state: CurrentState): LijstResult[] {\n const nisLijsten: EntityLijsten = ( state.results)[Settings.ELECTION_YEAR].lijsten;\n const openLijsten: LijstResult[] = filter(nisLijsten, (lijst: LijstResult) => {\n return lijst.kandidatenLoaded === true || lijst.kandidatenError === true;\n });\n return openLijsten;\n}\n\nexport function statistiek(state: CurrentState): Statistiek {\n return ( state.results)[Settings.ELECTION_YEAR].statistiek;\n}\n\nexport function isTouchDevice(state: CurrentState): boolean {\n // true if touch device, either mobile or tablet\n return Utils.isTouchDevice();\n}\n\nexport function useMobileView(state: CurrentState): boolean {\n // true if limited screen viewport, use special display\n // tablets have larger viewport and are allowed to (mostly) use desktop version\n const viewportWidth: number = document.documentElement.clientWidth; // faster than store lookup\n return !state.forceDesktopView && isTouchDevice(state); // && viewportWidth <= VIEWPORT.MIN_TABLET;\n}\n\n// touch devices with enough screen estate width get the option to show full desktop view\nexport function canShowDesktopView(state: CurrentState): boolean {\n const viewportWidth: number = document.documentElement.clientWidth; // faster than store lookup\n return isTouchDevice(state) && viewportWidth >= VIEWPORT.MIN_TABLET;\n}\n\nexport function forceDesktopView(state: CurrentState): boolean {\n return state.forceDesktopView;\n}\n\nexport function viewportSize(state: CurrentState): ViewPortDimensions {\n return state.viewport;\n}\n\nexport function sortOrder(state: CurrentState): SortOrder {\n return state.sortorder;\n}\n\nexport function showMap(state: CurrentState): boolean {\n return state.showMap;\n}\n\nexport function favorites(state: CurrentState): { [path: string]: string } {\n return state.favorites;\n}\n\nexport function lastUpdated(state: CurrentState): Date {\n return state.lastUpdated;\n}\n\nexport function updating(state: CurrentState): boolean {\n return state.updating;\n}\n\nexport function isOnline(state: CurrentState): boolean {\n return state.online;\n}\n\nexport function hasUpdateError(state: CurrentState): boolean {\n return ( state.results)[Settings.ELECTION_YEAR].updateError;\n}\n\nexport function naam(state: CurrentState): string {\n const result = state && state.results && ( state.results)[Settings.ELECTION_YEAR];\n return result ? result.naam : '';\n}\n\nexport function electionFinished(state: CurrentState): boolean {\n const now = new Date();\n return now.getTime() > Settings.REFRESH_STOP.getTime();\n}\n\n// generate a title based on available data\n// eg Leuven | gemeenteraad | Lokale verkiezingen 2018\nexport function pageTitle(state: CurrentState): string {\n const titleParts: string[] = [];\n\n const gemeente: string = naam(state);\n if (gemeente) {\n titleParts.push(gemeente);\n }\n\n const electionType: string = ELECTION_TYPE_TO_MAP_NAME[state.electionType];\n if (electionType) {\n titleParts.push(electionType);\n }\n\n const suffix: string = 'Lokale verkiezingen ' + Settings.ELECTION_YEAR;\n titleParts.push(suffix);\n\n return titleParts.join(' | ');\n}\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n query,\n elections,\n currentElection,\n // currentElectionType,\n hasUpdateError,\n previousElection,\n lijstnummer,\n lijstNummers,\n lijstenGIDs,\n openedLijsten,\n viewportSize,\n statistiek,\n isTouchDevice,\n useMobileView,\n canShowDesktopView,\n sortOrder,\n showMap,\n favorites,\n naam,\n lastUpdated,\n updating,\n isOnline,\n electionFinished,\n pageTitle,\n forceDesktopView,\n};\n","import {MutationTree} from 'vuex';\nimport {CurrentState} from './current.state';\nimport {Elections, EntityResult, LijstResult, SortOrder, Statistiek} from '@/models/election.result.model';\nimport Vue from 'vue';\nimport {ViewPortDimensions} from '@/models/viewport.model';\nimport {Settings} from '@/shared/settings';\n\nexport function CHANGE_ENTITY(state: CurrentState, payload: any) {\n const notChanged = (state.nis === payload.nis && state.electionType === payload.electionType);\n if (notChanged) {\n return;\n }\n\n state.nis = payload.nis;\n state.electionType = payload.electionType;\n\n console.log('change results: ', state.nis, state.electionType);\n\n // IMPORTANT: use this syntax for adding/deleting properties to an *existing* object:\n Vue.set(state, 'results', new Elections());\n\n}\n\nexport function LAST_UPDATED(state: CurrentState, payload: any) {\n // IMPORTANT: use this syntax for adding/deleting properties to an *existing* object:\n Vue.set(state, 'lastUpdated', payload);\n Vue.set(( state.results)[Settings.ELECTION_YEAR], 'updateError', false);\n}\n\nexport function SET_UPDATING(state: CurrentState, payload: any) {\n state.updating = payload;\n}\n\nexport function SET_ONLINE(state: CurrentState, payload: boolean) {\n Vue.set(state, 'online', payload);\n}\n\nexport function SET_ELECTION_RESULT(state: CurrentState, payload: Elections) {\n Vue.set(state, 'results', payload);\n\n // in case you don't notice a change in the getter:\n // Vue.set(target, key, value ) is needed otherwise getters DO NOT NOTICE ANY CHANGE (!)\n // see issue at https://forum.vuejs.org/t/vuex-2-getters-not-updating/8609\n // see docs https://vuejs.org/v2/api/#Vue-set\n // let elections:Elections = new Elections();\n // Vue.set(state, 'results', {\n // ...payload\n // });\n}\n\n// set the results for current entity/nis\n// did you notice the weird parameter syntax?\n// see https://github.com/Microsoft/TypeScript/issues/9657\nexport function SET_ENTITY_RESULT(state: CurrentState, {result, year}: { result: EntityResult, year: number }) {\n console.log('SET_ENTITY_RESULT result, year', result, year);\n Vue.set(state.results, `${year}`, result);\n}\n\nexport function UNSET_RESULTS(state: CurrentState) {\n console.log('Clear results');\n delete(state.results);\n}\n\nexport function SET_PREVIOUS_ELECTION_RESULT(state: CurrentState, result: EntityResult) {\n console.log('SET_PREVIOUS_ELECTION_RESULT result', result);\n Vue.set(state.results, `${Settings.PREVIOUS_ELECTION_YEAR}`, result);\n}\n\nfunction getLijst(state: CurrentState, payload: any): LijstResult {\n let lijst: LijstResult;\n switch (payload.year) {\n case Settings.PREVIOUS_ELECTION_YEAR:\n lijst = ( state.results)[payload.year][payload.nis].lijsten[payload.lijstGID];\n break;\n default:\n lijst = ( state.results)[payload.year].lijsten[payload.lijstGID];\n\n }\n return lijst;\n}\n\n// error when loading initial data for nis\nexport function SET_ENTITY_ERROR(state: CurrentState, year: number) {\n Vue.set(( state.results)[year], 'error', true);\n}\n\n// error when updating nis results\nexport function SET_ENTITY_UPDATE_ERROR(state: CurrentState) {\n Vue.set(( state.results)[Settings.ELECTION_YEAR], 'updateError', true);\n}\n\nexport function LOAD_LIJST_RESULT(state: CurrentState, payload: any) {\n const lijst: LijstResult = getLijst(state, payload);\n Vue.set(lijst, 'kandidatenLoaded', false);\n Vue.set(lijst, 'kandidatenError', false);\n}\n\nexport function SET_LIJST_RESULT(state: CurrentState, payload: any) {\n // change detection can be troublesome\n const lijst: LijstResult = getLijst(state, payload);\n Vue.set(lijst, 'kandidaten', payload.result);\n Vue.set(lijst, 'kandidatenLoaded', true);\n}\n\nexport function SET_LIJST_ERROR(state: CurrentState, payload: any) {\n // change detection can be troublesome\n Vue.set(( state.results)[payload.year].lijsten[payload.lijstGID], 'kandidatenError', true);\n}\n\nexport function UNSET_LIJST_RESULT(state: CurrentState, payload: any) {\n const lijst: LijstResult = getLijst(state, payload);\n delete (lijst.kandidaten);\n Vue.set(lijst, 'kandidatenLoaded', false);\n Vue.set(lijst, 'kandidatenError', false);\n}\n\nexport function SET_STATISTIEK(state: CurrentState, payload: Statistiek) {\n Vue.set(( state.results)[Settings.ELECTION_YEAR], 'statistiek', payload);\n}\n\nexport function SET_VIEWPORT(state: CurrentState, payload: ViewPortDimensions) {\n // this construction to keep the type ViewPortDimensions\n // otherwise it stores simple Object in store\n // gave error [Vue warn]: Invalid prop: type check failed for prop \"viewport\". Expected ViewPortDimensions, got Object.\n\n const viewport: ViewPortDimensions = new ViewPortDimensions();\n viewport.width = payload.width;\n viewport.height = payload.height;\n Vue.set(state, 'viewport', viewport);\n}\n\nexport function SET_SORT_ORDER(state: CurrentState, payload: SortOrder) {\n // Vue.delete(state, 'sortorder');\n // Vue.set(state, 'sortorder', payload);\n\n Vue.set(state.sortorder, 'sortKey', payload.sortKey);\n Vue.set(state.sortorder, 'sortDirection', payload.sortDirection);\n // state.sortorder.sortKey = payload.sortKey;\n // state.sortorder.sortDirection = payload.sortDirection;\n}\n\nexport function SHOW_MAP(state: CurrentState, payload: boolean) {\n state.showMap = payload;\n}\n\nexport function SET_DESKTOPVIEW(state: CurrentState, payload: boolean) {\n state.forceDesktopView = payload;\n}\n\nexport function SET_FAVORITES(state: CurrentState, payload: { [path: string]: string }) {\n // TODO better way to detect favorites update\n Vue.delete(state, 'favorites');\n Vue.set(state, 'favorites', payload);\n}\n\nexport default > {\n CHANGE_ENTITY,\n SET_ENTITY_RESULT,\n SET_ENTITY_ERROR,\n SET_ENTITY_UPDATE_ERROR,\n SET_PREVIOUS_ELECTION_RESULT,\n LOAD_LIJST_RESULT,\n SET_LIJST_RESULT,\n SET_LIJST_ERROR,\n UNSET_LIJST_RESULT,\n UNSET_RESULTS,\n SET_VIEWPORT,\n SET_SORT_ORDER,\n SET_STATISTIEK,\n SHOW_MAP,\n SET_FAVORITES,\n LAST_UPDATED,\n SET_UPDATING,\n SET_ONLINE,\n SET_DESKTOPVIEW,\n};\n","import {ActionContext, ActionTree} from 'vuex';\nimport {CurrentState} from './current.state';\nimport {CacheApiService} from '@/store/cache/cache.api.service';\nimport {LijstResult, ResultQuery, SortOrder} from '@/models/election.result.model';\nimport {ViewPortDimensions} from '@/models/viewport.model';\nimport {Settings} from '@/shared/settings';\nimport {SHOW_MAP} from '@/store/current/current.mutations';\n// import _ from 'lodash' // <-- do NOT import complete lodash package like this (>70Kb)\n// only import the lodash methods you need (eg debounce = 2Kb)\n\nconst cacheApiService = new CacheApiService();\nlet automaticUpdateTimer: any; // timer handle\n\n// Actions always return a promise, which means they are always asynchronous (!)\n\nexport async function change(store: ActionContext, query: ResultQuery) {\n // set the current value right even before starting to load\n store.commit('CHANGE_ENTITY', query);\n\n // if nis is missing don't load extra data\n if (!query.nis) {\n return Promise.resolve(true);\n }\n\n return store.dispatch('cache/load_entity_result_for_year', Settings.ELECTION_YEAR, {root: true})\n .then(() => {\n if (!query.lijstGID) {\n return Promise.resolve(true);\n }\n\n return store.dispatch('cache/load_lijst_results', query, {root: true});\n })\n .then(() => {\n shedule_next_update(store);\n return Promise.resolve(true);\n })\n .catch((err) => {\n store.commit('SET_ENTITY_ERROR', query.year);\n });\n}\n\n// UPDATE json data for current nis entity\nexport async function update(store: ActionContext, query: ResultQuery) {\n\n store.commit('SET_UPDATING', true);\n\n // collect all open lijsten (kandidatenLoaded = true)\n // *before* you reload and reset the entity result\n const openLijsten: LijstResult[] = store.getters.openedLijsten;\n const promise$: Promise = await store.dispatch('cache/update_current', openLijsten, {root: true})\n .catch((err) => {\n console.log('ERROR updating ', err);\n store.commit('SET_ENTITY_UPDATE_ERROR');\n });\n\n store.commit('SET_UPDATING', false);\n shedule_next_update(store);\n\n return promise$;\n}\n\nfunction shedule_next_update(store: ActionContext) {\n if (automaticUpdateTimer) {\n clearTimeout(automaticUpdateTimer);\n }\n\n const electionFinished: boolean = store.getters.electionFinished;\n if (electionFinished) {\n return;\n }\n\n automaticUpdateTimer = setTimeout(() => {\n store.dispatch('update');\n }, Settings.REFRESH_RATE * 1000);\n}\n\nexport async function load_lijst_results(store: ActionContext, query: ResultQuery) {\n\n // get this lijst results (kandidaten names + results)\n return store.dispatch('cache/load_lijst_results', query, {root: true})\n .then(() => {\n const electionFinished: boolean = store.getters.electionFinished;\n if (electionFinished || query.year === Settings.PREVIOUS_ELECTION_YEAR) {\n // all files are automatically in sync\n return Promise.resolve(true);\n }\n\n const isMobile: boolean = store.getters['useMobileView'];\n console.log('isMobile ', isMobile);\n\n if (isMobile) {\n // less need to keep lijsten in sync (lijsten = separate page)\n return Promise.resolve(true);\n }\n\n // election = in progress\n // keep all files in sync by updating all related result files\n // Example use case:\n // 1. nis update\n // 2. json results change before next UI update\n // 3. users click open lijst results before next update\n // = potential sync mismatch between lijst results and outer page results for upto 60 seconds\n return update(store, query);\n })\n .catch((err: any) => {\n console.log('xxx load_lijst_results error');\n return Promise.reject('load_lijst_results error ' + err);\n });\n}\n\n\nexport async function load_verkozen_kandidaten(store: ActionContext, query: ResultQuery) {\n // set the current value right even before starting to load\n store.commit('CHANGE_ENTITY', query);\n\n await store.dispatch('cache/load_entity_result_for_year', Settings.ELECTION_YEAR, {root: true});\n await store.dispatch('cache/load_verkozen_kandidaten', null, {root: true});\n\n return Promise.resolve('resolve load_verkozen_kandidaten');\n}\n\nexport async function load_statistieken(store: ActionContext, query: ResultQuery) {\n return await store.dispatch('cache/load_statistieken', null, {root: true});\n}\n\nexport async function load_previous_election(store: ActionContext, query: ResultQuery) {\n return await store.dispatch('cache/load_entity_result_for_year_and_nis', {\n selectedYear: Settings.PREVIOUS_ELECTION_YEAR,\n selectedNis: query.nis,\n }, {root: true});\n}\n\nexport function set_viewport(store: ActionContext, viewport: ViewPortDimensions) {\n store.commit('SET_VIEWPORT', viewport);\n}\n\nexport function sort(store: ActionContext, sortOrder: SortOrder) {\n store.commit('SET_SORT_ORDER', sortOrder);\n}\n\nexport function showMap(store: ActionContext, visible: boolean) {\n store.commit('SHOW_MAP', visible);\n}\n\nexport function setFavorites(store: ActionContext, favorites: { [path: string]: string }) {\n store.commit('SET_FAVORITES', favorites);\n}\n\nexport function forceDesktopView(store: ActionContext, forceView: boolean) {\n // this will RELOAD the whole application\n // (routes are slightly different on desktop versus mobile)\n\n if (forceView) {\n localStorage.setItem('desktopView', 'true');\n } else {\n localStorage.removeItem('desktopView');\n }\n\n window.location.reload();\n}\n\n// export everything compliant to the vuex specification for actions\nexport default > {\n change,\n update,\n load_previous_election,\n load_lijst_results,\n load_verkozen_kandidaten,\n load_statistieken,\n set_viewport,\n sort,\n showMap,\n setFavorites,\n forceDesktopView,\n};\n","import {ELECTION_TYPES, Elections, ElectionType, SortOrder} from '@/models/election.result.model';\nimport {ViewPortDimensions} from '@/models/viewport.model';\n\n// stores details about the currently selected result set (nis etc)\n// election results will be cleared and rebuild from cache\n// to reflect current settings only\nexport class CurrentState {\n public nis: string = '';\n public kandidaatGID?: string = '';\n public lijstGID?: string = '';\n public electionType: ElectionType = ELECTION_TYPES.GEMEENTE; // = default\n public results: Elections = new Elections();\n\n // data update\n public lastUpdated: Date;\n public updating: boolean = false;\n public online: boolean = true;\n\n // sorting settings for graphs, table results,...\n public sortorder: SortOrder = new SortOrder();\n\n public viewport: ViewPortDimensions;\n public forceDesktopView: boolean = !!localStorage.getItem('desktopView') || false; // also change in routes (!)\n\n public showMap = false;\n\n public favorites: { [path: string]: string } = {};\n}\n","import {Module} from 'vuex';\nimport Getters from './current.getters';\nimport Mutations from './current.mutations';\nimport Actions from './current.actions';\nimport {CurrentState} from '@/store/current/current.state';\n\nexport class CurrentModule implements Module {\n\n // resolve namespacing, applies \"foo/bar/...\" stuff automatically\n public namespaced: boolean = true;\n\n // default properties required for vuex stores/modules\n public state: CurrentState;\n public getters = Getters;\n public mutations = Mutations;\n public actions = Actions;\n\n constructor() {\n this.state = new CurrentState();\n }\n}\n\n\n/*\n Vuex for NgRx developers:\n\n actions = effects (async)\n mutations = reducers (sync)\n getters = selectors (read)\n\n not exactly an one-on-one mapping but it does\n show which are allowed to read and write sync or async\n\n */\n","import {EntityResult, LijstResult, Verwant} from '@/models/election.result.model';\nimport {COLORS} from '@/models/colors';\nimport reduce from 'lodash/reduce';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {Utils} from '@/shared/utils';\nimport map from 'lodash/map';\nimport find from 'lodash/find';\n\n// NOTE: the parsing methods are made very similar to functionality of 2012 backbone parse on purpose\n// you can compare those parse functions with these methods\n\n// nis is optional, if missing use current nis\nexport default function parseEntiteitJSON(store: ActionContext, year: number, selectedNis: string = ''): EntityResult {\n\n const current: any = store.rootGetters[`current/query`];\n selectedNis = selectedNis || current.nis;\n\n const entiteitLijsten: any = store.getters.getFile({year, name: 'entiteitLijsten.json', nis: selectedNis});\n const entiteitUitslag: any = store.getters.getFile({year, name: 'entiteitUitslag.json', nis: selectedNis});\n const verwant: any[] = store.getters.getFile({year, name: 'verwant.json', nis: selectedNis}) || [];\n\n // if (!entiteitLijsten || !entiteitUitslag) {\n // console.warn('no data for ' + year + ' : ', JSON.stringify(current));\n // return new EntityResult();\n // }\n\n // ------ mapping based on 2012 backbone collections.js \"Uitslagen\" see lines 126-200\n const verkiezing = entiteitUitslag[current.electionType][selectedNis];\n const lijsten = entiteitLijsten[current.electionType];\n const uitslag = verkiezing.us;\n const definitief: boolean = verkiezing.df;\n\n const result: EntityResult = new EntityResult(); // will prefill with default values if defined\n result.year = year; // for convenience\n result.nis = selectedNis; // for convenience\n result.ongeldig = verkiezing.os;\n result.definitief = Utils.intToBoolean(verkiezing.df); // can also be missing (= not definitief)\n\n verwant.forEach((v: any) => {\n const verwantObject = new Verwant();\n verwantObject.electionType = v.e;\n verwantObject.nis = '' + v.n;\n verwantObject.naam = v.c;\n result.verwant.push(verwantObject);\n });\n\n // TODO: getting name for fusiegemeente won't work\n const currentVerwant = find(result.verwant, {nis: '' + selectedNis}) || new Verwant();\n result.naam = currentVerwant.naam;\n\n // split the bureaus string here already\n // (give direct access to number without needing extra splitting function in components)\n result.bureaus = verkiezing.gb || '0/0';\n const bureaus: any = result.bureaus.split('/');\n result.geteldeBureaus = parseInt(bureaus[0] || 0, 10);\n result.totaalBureaus = parseInt(bureaus[1] || 0, 10);\n\n // calculate totaal stemmen first:\n const stemmen: number[] = map(uitslag, (lijst: any) => lijst.sc || 0);\n const totaalStemmen: number = reduce(stemmen, (totaal: number, stem: number) => totaal + stem, 0);\n result.totaalStemmen = totaalStemmen;\n result.totaalZetels = 0;\n\n for (const lijstGID of Object.keys(lijsten)) {\n const party: any = lijsten[lijstGID];\n const color = (party && Utils.intToBoolean(party.nl) && !!party.kl) ? party.kl : COLORS.OTHERS;\n\n const lijst: LijstResult = new LijstResult();\n lijst.GID = lijstGID;\n lijst.lijstnr = party.nr;\n lijst.lijstnaam = party.nm;\n lijst.lijstkleur = color;\n lijst.logo = party.lg;\n lijst.stemmen = uitslag[lijstGID].sc;\n lijst.percent = totaalStemmen ? lijst.stemmen / totaalStemmen * 100 : 0;\n lijst.zetels = uitslag[lijstGID].zs || 0;\n result.totaalZetels += lijst.zetels;\n result.totaalPercent += lijst.percent;\n\n // add to entity\n result.lijsten[lijstGID] = lijst;\n }\n\n return result;\n}\n","import {KandidaatResult, KandidatenLijst} from '@/models/election.result.model';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {Utils} from '@/shared/utils';\n\n\n// NOTE: the parsing methods are made very similar to functionality of 2012 backbone parse on purpose\n// you can compare those parse functions with these methods\n\nexport default function parseLijstJSON(store: ActionContext, year: number, lijstGID: string, nis: string = ''): KandidatenLijst {\n console.log('parseLijstJSON ', year, lijstGID, nis);\n\n const current: any = store.rootGetters[`current/query`];\n nis = nis || current.nis;\n\n const lijstnr: number = store.rootGetters['current/lijstnummer'](year, lijstGID, nis);\n const lijst: any = store.getters.getFile({year, lijstnr, name: 'lijst.json', nis});\n const uitslag: any = store.getters.getFile({year, lijstnr, name: 'uitslag.json', nis});\n\n const result: KandidatenLijst = {};\n\n const dezeLijst = lijst[lijstGID];\n const lijstUitslag = uitslag[current.electionType][nis][lijstGID].kd;\n\n // set static data (naam, volgnr)\n for (const kandidaatGID of Object.keys(dezeLijst)) {\n const kandidaat = dezeLijst[kandidaatGID];\n result[kandidaatGID] = new KandidaatResult();\n result[kandidaatGID].GID = kandidaatGID;\n result[kandidaatGID].naam = kandidaat.nm;\n result[kandidaatGID].volgnummer = kandidaat.vn;\n }\n\n // update dynamic data (results)\n lijstUitslag.forEach((kandidaatObject: any) => {\n const kandidaatGID: string = Object.keys(kandidaatObject)[0];\n const uitslagKandidaat = kandidaatObject[kandidaatGID];\n\n // titularis & opvolger properties are calculated,\n // see collection.js line 686, vv en vk in uitslag.json\n const verkozenVolgnummer = (!!uitslagKandidaat.vv) ? uitslagKandidaat.vv : 0;\n const kandidaatIsVerkozen = (!!uitslagKandidaat.vk) ? Utils.intToBoolean(uitslagKandidaat.vk) : false;\n const titularis = (kandidaatIsVerkozen && verkozenVolgnummer > 0) ? verkozenVolgnummer : 0;\n const opvolger = (kandidaatIsVerkozen && verkozenVolgnummer > 0) ? 0 : verkozenVolgnummer;\n\n result[kandidaatGID] = {\n ...result[kandidaatGID],\n naamstemmen: uitslagKandidaat.ns || 0,\n titularis,\n opvolger,\n } as KandidaatResult;\n\n });\n\n return result;\n}\n","import {GenderDistributie, Statistiek, STATS_AGE_RANGES} from '@/models/election.result.model';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {Utils} from '@/shared/utils';\n\n\n// NOTE: the parsing methods are made very similar to functionality of 2012 backbone parse on purpose\n// you can compare those parse functions with these methods\n\n// see collections.js line 713 GenderAgeStats\nexport default function parseStatistiek(store: ActionContext, year: number, defaultNis: string = ''): Statistiek {\n const ranges = STATS_AGE_RANGES;\n const current: any = store.rootGetters[`current/query`];\n const shortType: string = current.electionType;\n const overzicht: any = store.getters.getFile({year, name: 'overzicht.json'});\n\n const nis = defaultNis || current.nis;\n let statistiek: Statistiek = new Statistiek(); // empty\n const definitief = (overzicht && overzicht[shortType][nis]) ? Utils.intToBoolean(overzicht[shortType][nis].df) : false;\n\n if (!definitief) {\n // if not definitief return only empty data\n return statistiek;\n }\n\n const stats: any = store.getters.getFile({year, name: 'statistiek.json'})[shortType][nis];\n\n // extra sanity check to avoid map from crashing\n // if for some reason nis data is missing in jsons\n if (!stats) {\n return statistiek;\n }\n\n const distrib = stats.dv;\n let avg_age = stats.gl;\n if (!distrib) {\n return statistiek;\n }\n\n const calculatedData: GenderDistributie[] = [];\n let total_over_ranges = 0;\n let total_f_over_ranges = 0;\n let total_m_over_ranges = 0;\n let sum_ages = 0; // sum of all range_ages (21+21+31+31+31...) to make avg\n\n statistiek = {\n ingeschreven: stats.sg,\n stemmen: stats.ui,\n geldig: stats.gs,\n ongeldig: stats.os,\n gemiddeldeLeeftijd: stats.gl,\n };\n\n for (let i = 0; i < STATS_AGE_RANGES.length; i++) {\n const range_total = distrib[0][i] + distrib[1][i];\n total_over_ranges += range_total;\n total_f_over_ranges += distrib[0][i];\n total_m_over_ranges += distrib[1][i];\n\n const range_age = range_total * (i * 10 + 30); // simulate total age for this range (for average later on)\n sum_ages += range_age;\n // biggest_range = (range_total > biggest_range) ? range_total : biggest_range;\n\n const row = {\n range: ranges[i],\n vrouw: distrib[0][i], // total f elected\n man: distrib[1][i], // total m elected\n vrouwpct: (range_total === 0) ? 0 : distrib[0][i] / range_total * 100,\n manpct: (range_total === 0) ? 0 : distrib[1][i] / range_total * 100,\n totalpct: 0.0,\n total: range_total, // total m+f elected\n };\n\n calculatedData.push(row);\n }\n\n if (!avg_age) {\n avg_age = sum_ages / total_over_ranges;\n }\n\n const nis_avgRange = (avg_age <= 0) ? 0 : Math.min(Math.ceil((avg_age - 30) / 10), 4);\n\n // calculate percent\n statistiek.totaalVerkozenPct = 0;\n calculatedData.forEach((row: any) => {\n row.totalpct = (total_over_ranges > 0) ? row.total / total_over_ranges * 100 : 0;\n statistiek.totaalVerkozenPct += row.totalpct;\n });\n\n const nis_fpct = (total_over_ranges > 0) ? total_f_over_ranges / total_over_ranges * 100 : 0;\n\n statistiek.distributie = calculatedData;\n statistiek.totaalVerkozen = total_over_ranges;\n statistiek.totaalVrouw = total_f_over_ranges;\n statistiek.totaalMan = total_m_over_ranges;\n statistiek.totaalVrouwPct = nis_fpct;\n\n\n return statistiek;\n}\n","import {ResultQuery, Statistiek} from '@/models/election.result.model';\nimport reduce from 'lodash/reduce';\nimport each from 'lodash/each';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {MAP_TYPES, MapColor} from '@/models/map.model';\nimport {MapState} from '@/store/map/map.state';\nimport {COLORS} from '@/models/colors';\nimport {Utils} from '@/shared/utils';\nimport parseStatistiek from '@/store/cache/parsers/parseStatistiek';\nimport {Settings} from '@/shared/settings';\n\n// NOTE: the parsing methods are made very similar to functionality of 2012 backbone parse on purpose\n// you can compare those parse functions with these methods\n\nexport default function parseOverzichtColors(store: ActionContext): MapColor {\n\n // request.electionType & current.electionType are always the same\n const current: ResultQuery = store.rootGetters[`current/query`];\n const shortType: string = current.electionType;\n // const shortType: string = electionType || current.electionType;\n\n // console.warn('parseOverzichtColors electionType',electionType);\n console.warn('parseOverzichtColors current.electionType', current.electionType);\n console.warn('parseOverzichtColors', shortType);\n\n const year: number = Settings.ELECTION_YEAR;\n const gewestelijkeLijsten: any = store.getters.getFile({year, name: 'gewestelijkeLijsten.json'})[shortType];\n const overzicht: any = store.getters.getFile({year, name: 'overzicht.json'});\n const statistiek: any = store.getters.getFile({year, name: 'statistiek.json'})[shortType];\n const nisses: any[] = overzicht[shortType];\n const mapState: MapState = store.rootGetters[`map/all`];\n\n // holds election result for specific nis (hover)\n const mapColors: MapColor = {}; // only nis/color mapping\n for (const nis in nisses) {\n // gemeente: get ALL\n // provincie: filter out District color en Provincie values only\n const isProvincie = shortType === 'P';\n\n // hoe detecteer ik of nis = provincie en geen gemeente?\n // lijkt in 2012 van de ah.json te komen die we nu niet meer hebben?\n\n let color: string;\n let statistiekNis: Statistiek;\n const jsonUitslag = nisses[nis]; // one gemeente,etc...\n const definitief: boolean = !!jsonUitslag.df;\n\n const geteldeBureaus: number = (!!jsonUitslag.gb) ? parseInt(jsonUitslag.gb.split('/')[0], 10) : 0;\n const minBureausGeteld: boolean = geteldeBureaus >= Settings.RESULTS_MINIMUM_BUREAUS;\n\n switch (mapState.mapType) {\n case MAP_TYPES.AGE:\n statistiekNis = parseStatistiek(store, Settings.ELECTION_YEAR, nis);\n color = (definitief) ? getAgeStatistiekColor(statistiekNis, mapState) : COLORS.NODATA;\n break;\n case MAP_TYPES.GENDER:\n statistiekNis = parseStatistiek(store, Settings.ELECTION_YEAR, nis);\n const nodata: boolean = !statistiekNis || !Math.max(statistiekNis.totaalVrouw, statistiekNis.totaalMan);\n color = (nodata) ? COLORS.NODATA : getGenderStatistiekColor(statistiekNis, mapState);\n break;\n default:\n let totaalStemmen = 0;\n if (jsonUitslag.gs) {\n totaalStemmen = jsonUitslag.gs;\n\n } else {\n // calculate the total votes\n totaalStemmen = reduce(jsonUitslag.us, (totaal, stem) => {\n return totaal + stem;\n }, 0);\n }\n const uitslag: any = {};\n each(jsonUitslag.us, (row, idx) => {\n uitslag[idx] = {sc: row, percent: row / totaalStemmen * 100};\n });\n color = (minBureausGeteld) ? getPartyColor(uitslag, gewestelijkeLijsten, mapState) : COLORS.NODATA;\n }\n mapColors[nis] = color;\n }\n\n return mapColors;\n}\n\nfunction getAgeStatistiekColor(statistiekNis: Statistiek, mapState: MapState): string {\n const LOWEST_AGE_RANGE_MAX: number = 30; // 18-30\n const rangeIndex = (statistiekNis.gemiddeldeLeeftijd) <= 0 ? 0 : Math.min(Math.ceil((statistiekNis.gemiddeldeLeeftijd - LOWEST_AGE_RANGE_MAX) / 10), 4);\n return COLORS.AGE[rangeIndex];\n}\n\nfunction getGenderStatistiekColor(statistiekNis: Statistiek, mapState: MapState): string {\n const percent = statistiekNis.totaalVrouwPct;\n let color = COLORS.NODATA; // default color\n if (percent > 80) {\n color = COLORS.GENDER[4];\n } else if (percent > 60) {\n color = COLORS.GENDER[3];\n } else if (percent > 40) {\n color = COLORS.GENDER[2];\n } else if (percent > 20) {\n color = COLORS.GENDER[1];\n } else if (percent >= 0) {\n color = COLORS.GENDER[0];\n }\n return color;\n}\n\nfunction getPartyColor(uitslag: any, gewestelijkeLijsten: any, mapState: MapState): string {\n const party = mapState.lijst; // partij GID\n let gid = party;\n let max = 0;\n\n if (!party) {\n // Default view = calculate the strongest party\n // and remember the party's gid:\n for (const p in uitslag) {\n const lijst = uitslag[p];\n if (lijst.sc > max) {\n max = lijst.sc, gid = p;\n }\n }\n // gid now contains strongest party\n }\n\n let color = COLORS.NODATA; // default color\n if (uitslag[gid]) {\n const lijst = gewestelijkeLijsten[gid];\n if (lijst) {\n if (!party) {\n // show party colors or grey tint if not national\n if (uitslag[gid].sc > 0) {\n color = Utils.intToBoolean(lijst.nl) ? lijst.kl : COLORS.OTHERS;\n }\n\n } else {\n // show tints instead\n if (uitslag[gid].percent > 0) {\n // real percentage should be reduced\n // to the same 4 tints available in legend only:\n const percent: number = uitslag[gid].percent;\n let legendPercentage: number = 0;\n if (percent > 30.0) {\n legendPercentage = 50;\n } else if (percent > 20.0) {\n legendPercentage = 25;\n } else if (percent > 10.0) {\n legendPercentage = 15;\n } else {\n legendPercentage = 5;\n }\n\n color = Utils.createTint(lijst.kl, legendPercentage);\n }\n }\n }\n }\n return color;\n}\n","import {EntityLijsten, LijstResult} from '@/models/election.result.model';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {HoverResult} from '@/models/map.model';\nimport {COLORS} from '@/models/colors';\nimport {Utils} from '@/shared/utils';\nimport {Settings} from '@/shared/settings';\n\n// NOTE: the parsing methods are made very similar to functionality of 2012 backbone parse on purpose\n// you can compare those parse functions with these methods\n\n// used for quick result display when hovering over Vlaanderen map\n// this returns the hover result from the Vuex memory cache\nexport default function parseOverzichtHover(store: ActionContext, nis: string): HoverResult {\n\n const year = Settings.ELECTION_YEAR;\n const current: any = store.rootGetters[`current/query`];\n const shortType: string = current.electionType;\n\n const gewestelijkeLijsten: any = store.getters.getFile({year, name: 'gewestelijkeLijsten.json'})[shortType];\n const stats: any = store.getters.getFile({year, name: 'statistiek.json'})[shortType][nis];\n const uitslag: any = store.getters.getFile({year, name: 'overzicht.json'})[shortType][nis];\n const andersLuidendeLijst: any = store.getters.getFile({year, name: 'andersluidendeGewestelijkeLijsten.json'});\n\n if (!uitslag) {\n return new HoverResult(); // empty default values\n }\n\n const totaalStemmen = uitslag.gs;\n\n const lijsten: EntityLijsten = {};\n for (const lijstGID of Object.keys(uitslag.us)) {\n const party = gewestelijkeLijsten[lijstGID];\n const lijstnr = (party) ? party.nr : '';\n const naam = (party) ? andersLuidendeLijst && andersLuidendeLijst[nis] && andersLuidendeLijst[nis][party.nr]? andersLuidendeLijst[nis][party.nr]: party.nm : 'ONBEKEND';\n const nationaal: boolean = Utils.intToBoolean(party.nl);\n const color = (party && nationaal) ? party.kl : COLORS.OTHERS;\n const logo = party.lg || '';\n\n const stemmen = uitslag.us[lijstGID] || 0;\n lijsten[lijstGID] = {\n GID: lijstGID,\n nationaal,\n lijstnr,\n lijstnaam: naam,\n lijstkleur: color,\n logo,\n stemmen,\n percent: stemmen / totaalStemmen * 100,\n };\n }\n\n // add Blanco (GID = 0 is ok?)\n lijsten[0] = {\n lijstnr: 0,\n lijstnaam: 'blanco',\n lijstkleur: COLORS.BLANCO,\n stemmen: uitslag.os,\n percent: (totaalStemmen) ? uitslag.os / totaalStemmen * 100 : 0,\n };\n\n const bureaus: any = (uitslag.gb || '0/0').split('/');\n\n return {\n year,\n definitief: Utils.intToBoolean(uitslag.df),\n bureaus,\n geteldeBureaus: parseInt(bureaus[0] || 0, 10),\n totaalBureaus: parseInt(bureaus[1] || 0, 10),\n lijsten,\n };\n}\n","import {EntityLijsten, LijstResult} from '@/models/election.result.model';\nimport {ActionContext} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {COLORS} from '@/models/colors';\nimport {Utils} from '@/shared/utils';\nimport {Settings} from '@/shared/settings';\n\n\n// collects nationale Lijsten\nexport default function parseNationaleLijsten(store: ActionContext): EntityLijsten {\n\n const year = Settings.ELECTION_YEAR;\n const current: any = store.rootGetters[`current/query`];\n const shortType: string = current.electionType;\n const gewestelijkeLijsten: any = store.getters.getFile({year, name: 'gewestelijkeLijsten.json'})[shortType];\n\n const nationaleLijsten: EntityLijsten = {};\n Object.keys(gewestelijkeLijsten).forEach((lijstGID: string) => {\n const party = gewestelijkeLijsten[lijstGID];\n const nationaal: boolean = Utils.intToBoolean(party.nl);\n if (!nationaal) {\n return;\n }\n\n const lijstnr = (party) ? party.nr : '';\n const naam = (party) ? party.nm : 'ONBEKEND';\n const color = (party && nationaal) ? party.kl : COLORS.OTHERS;\n const logo = party.lg || '';\n\n nationaleLijsten[lijstGID] = {\n GID: lijstGID,\n lijstnr,\n lijstnaam: naam,\n lijstkleur: color,\n logo,\n };\n });\n\n return nationaleLijsten;\n}\n","import {ActionContext, ActionTree} from 'vuex';\nimport {EntityLijsten, EntityResult, KandidatenLijst, LijstResult, PreviousElection, ResultQuery, Statistiek} from '@/models/election.result.model';\nimport {CacheApiService} from '@/store/cache/cache.api.service';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {CachedFile, FileData} from '@/models/cache.model';\nimport parseEntiteitJSON from '@/store/cache/parsers/parseEntiteit';\nimport parseLijstJSON from '@/store/cache/parsers/parseLijst';\nimport {Settings} from '@/shared/settings';\nimport {HoverResult, MapColor} from '@/models/map.model';\nimport parseOverzichtColors from '@/store/cache/parsers/parseOverzicht';\nimport parseOverzichtHover from '@/store/cache/parsers/parseOverzichtHover';\nimport parseStatistiek from '@/store/cache/parsers/parseStatistiek';\nimport parseNationaleLijsten from '@/store/cache/parsers/parseOverzichtLijsten';\nimport map from 'lodash/map';\n\nconst ELECTION_YEAR = Settings.ELECTION_YEAR;\nconst PREVIOUS_ELECTION_YEAR = Settings.PREVIOUS_ELECTION_YEAR;\nconst cacheApiService = new CacheApiService();\n\nexport async function load_previous_election_result_for_nis(store: ActionContext, selectedNis: string) {\n\n // define data to query the server for results\n const current: ResultQuery = store.rootGetters[`current/query`];\n\n return cacheApiService.getPreviousElectionResults({...current, year: Settings.PREVIOUS_ELECTION_YEAR})\n .then((response: any) => {\n\n cacheFiles(store, response);\n\n const entityResult: EntityResult = parseEntiteitJSON(store, Settings.PREVIOUS_ELECTION_YEAR, selectedNis);\n entityResult.loaded = true;\n\n store.commit('current/SET_PREVIOUS_ELECTION_RESULT', {result: entityResult, year: Settings.PREVIOUS_ELECTION_YEAR, nis: selectedNis}, {root: true});\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\n\nexport async function load_topojsons(store: ActionContext) {\n return cacheApiService.getTopojsons()\n .then((response: any) => {\n cacheFiles(store, response);\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\n\n// load current entity result for a specific year\nexport async function load_entity_result_for_year(store: ActionContext, selectedYear: number) {\n // uses entiteitUitslag.json + entiteitLijsten.json\n\n // define data to query the server for results\n const current: ResultQuery = store.rootGetters[`current/query`];\n\n // *** compare with cache ( = maybe do this in cache.getter?) ***\n // then this logic should move to the getter...\n\n return cacheApiService.getEntityResults({...current, year: selectedYear})\n .then((response: any) => {\n\n // loading is ready\n // map to current election results view and put in Vuex store\n cacheFiles(store, response);\n\n try {\n // this creates a new empty instance and will *overwrite* any existing data (eg kandidaten)\n // so be sure to refill with data as appropriate\n const entityResult: EntityResult = parseEntiteitJSON(store, selectedYear);\n entityResult.loaded = true;\n store.commit('current/SET_ENTITY_RESULT', {result: entityResult, year: selectedYear}, {root: true});\n store.commit('current/LAST_UPDATED', new Date(), {root: true});\n\n } catch (err) {\n return Promise.reject('load_entity_result_for_year error' + err);\n }\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\nexport async function load_previous_elections(store: ActionContext) {\n const current: ResultQuery = store.rootGetters[`current/query`];\n\n return cacheApiService.getPreviousElectionResults({...current, year: Settings.ELECTION_YEAR})\n .then((response: any) => {\n\n cacheFiles(store, response);\n console.log('nisses response: ', response);\n\n const previousElection: PreviousElection = {};\n\n const fusiesJson = store.getters.getFile({year: Settings.ELECTION_YEAR, name: 'fusies.json'});\n const fusies = fusiesJson && fusiesJson[current.nis];\n const nisses: string[] = fusies && Object.keys(fusies) || [current.nis];\n nisses.forEach((nis: string) => {\n const entityResult: EntityResult = parseEntiteitJSON(store, Settings.PREVIOUS_ELECTION_YEAR, nis);\n entityResult.loaded = true;\n entityResult.naam = fusies && fusies[nis];\n previousElection[nis] = entityResult;\n });\n\n store.commit('current/SET_PREVIOUS_ELECTION_RESULT', previousElection, {root: true});\n\n // previous election can have multiple nisses for current nis (= fusie gemeente)\n //\n //\n // for (const nis of nisses) {\n // await store.dispatch('cache/load_entity_result_for_year_and_nis', {selectedYear: Settings.PREVIOUS_ELECTION_YEAR, selectedNis: nis}, {root: true});\n // }\n\n return Promise.resolve(true);\n })\n .then(() => {\n console.log('finish');\n\n })\n .catch(handleError(store));\n}\n\n// UPDATE current nis (result + kandidaten + map colors)\nexport async function update_current(store: ActionContext, openLijsten: LijstResult[]) {\n\n /*\n combines different updates into one single update\n 1) reset & reload current nis entity\n similar to store.dispatch('cache/load_entity_result_for_year', Settings.ELECTION_YEAR, {root: true});\n\n 2) add kandidaten from open lijsten to result\n similar to store.dispatch('cache/load_open_lijsten', openLijsten, {root: true});\n\n 3) update map colors (if map is visible)\n\n lastUpdated timestamp should only be changed when everything was loaded successfully\n\n */\n\n // define data to query the server for results\n const current: ResultQuery = store.rootGetters['current/query'];\n current.year = Settings.ELECTION_YEAR;\n\n const lijstnummers: number[] = map(openLijsten, 'lijstnr');\n const lijstGIDs: string[] = map(openLijsten, 'GID');\n\n // because map is now always visible on desktop results\n // we always have to update it as well\n const mapActive: boolean = !store.rootGetters['current/useMobileView'];\n // otherwise this would have been enough: (map visible or not)\n // const mapActive: boolean = store.rootGetters['current/showMap'];\n\n return cacheApiService.updateEntityResults(current, lijstnummers, mapActive)\n .then((currentResponse: any) => {\n\n // response contains all combined files\n cacheFiles(store, currentResponse);\n\n // 1) replace the result for current nis entity\n let entityResult: EntityResult;\n try {\n entityResult = parseEntiteitJSON(store, current.year);\n entityResult.loaded = true;\n\n } catch (err) {\n // if you reject here it will block the *complete* update request\n return Promise.reject('update_current entityResult error' + err);\n }\n\n // 2) add open kandidaat lists before committing entityResult to the Vuex store\n lijstGIDs.forEach((lijstGID: string) => {\n // similar to what happens in the current/SET_LIJST_RESULT mutation\n try {\n console.log('BEFORE updateEntityResults/parseLijstJSON');\n const kandidatenLijst: KandidatenLijst = parseLijstJSON(store, current.year, lijstGID);\n console.log('AFTER updateEntityResults/parseLijstJSON');\n entityResult.lijsten[lijstGID].kandidaten = kandidatenLijst;\n entityResult.lijsten[lijstGID].kandidatenLoaded = true;\n\n } catch (err) {\n // mark this lijst data as corrupted\n // but keep collecting other lists (non blocking)\n entityResult.lijsten[lijstGID].kandidatenError = true;\n }\n\n });\n\n if (mapActive) {\n // 3) update map colors\n try {\n const colors: MapColor = parseOverzichtColors(store);\n store.commit('map/SET_COLORS', colors, {root: true});\n\n } catch (err) {\n // if you reject here it will block the *complete* update request\n return Promise.reject(`update_current map colors error ${err}`);\n }\n }\n\n store.commit('current/SET_ENTITY_RESULT', {result: entityResult, year: current.year}, {root: true});\n store.commit('current/LAST_UPDATED', new Date(), {root: true});\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\n/*\n Lijst can be:\n - application level (= in router url)\n - inner table (= NOT in router url)\n\n */\nexport async function load_lijst_results(store: ActionContext, request: ResultQuery) {\n // needs [entiteitLijsten.json, entiteitUitslag.json] loaded first (load_entity_results_for_year)\n\n // CONVERT LIJST GID (url) TO LIJST NR\n const lijstnr: number = store.rootGetters['current/lijstnummer'](request.year, request.lijstGID, request.nis);\n\n console.warn('RECEIVED RESULTS FOR LIJST ',lijstnr);\n\n // use current application settings,\n // only take year + lijstGID from request\n // add converted lijstGID to lijstnr\n const current: ResultQuery = store.rootGetters[`current/query`];\n request = {\n ...current,\n year: request.year,\n lijstGID: request.lijstGID,\n lijstnr,\n nis: request.nis,\n };\n\n // *** compare with cache ( = maybe do this in cache.getter?) ***\n // then this logic should move to the getter...\n\n store.commit('current/LOAD_LIJST_RESULT', request, {root: true});\n\n return cacheApiService.getLijstResults(request)\n .then((currentResponse: any) => {\n cacheFiles(store, currentResponse);\n\n try {\n const kandidatenLijst: KandidatenLijst = parseLijstJSON(store, request.year, request.lijstGID || '', request.nis);\n store.commit('current/SET_LIJST_RESULT', {\n year: request.year,\n lijstGID: request.lijstGID,\n result: kandidatenLijst,\n nis: request.nis,\n }, {root: true});\n\n } catch (err) {\n store.commit('current/SET_LIJST_ERROR', {\n year: request.year,\n lijstGID: request.lijstGID,\n }, {root: true});\n return Promise.reject(`update_current load_lijst_results ${request.lijstGID} error ${err}`);\n }\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\nexport async function clear_lijst_results(store: ActionContext, request: ResultQuery) {\n store.commit('current/UNSET_LIJST_RESULT', request, {root: true});\n}\n\nexport async function clear_results(store: ActionContext) {\n store.commit('current/UNSET_RESULTS', null, {root: true});\n}\n\nexport async function load_map_results(store: ActionContext, request: ResultQuery) {\n\n // use current application settings,\n // only take year from request\n const current: ResultQuery = store.rootGetters[`current/query`];\n request = {\n ...request,\n electionType: current.electionType,\n };\n\n // *** compare with cache ( = maybe do this in cache.getter?) ***\n // then this logic should move to the getter...\n\n return cacheApiService.getMapResults(request)\n .then((response: any) => {\n cacheFiles(store, response);\n\n try {\n const colors: MapColor = parseOverzichtColors(store);\n store.commit('map/SET_COLORS', colors, {root: true});\n\n } catch (err) {\n return Promise.reject('load_map_results parseOverzichtColors error' + err);\n }\n\n const gewestelijkeLijsten: any = store.getters.getFile({\n year: request.year,\n name: 'gewestelijkeLijsten.json',\n })[current.electionType];\n\n try {\n const nationaleLijsten: EntityLijsten = parseNationaleLijsten(store);\n store.commit('map/SET_LIJSTEN', nationaleLijsten, {root: true});\n\n } catch (err) {\n return Promise.reject('load_map_results parseNationaleLijsten error' + err);\n }\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\nexport async function load_hover_result(store: ActionContext, nis: string) {\n const hoverResult: HoverResult = parseOverzichtHover(store, nis);\n store.commit('map/SET_HOVER_RESULTS', hoverResult, {root: true});\n return hoverResult;\n}\n\nexport async function load_hover_statistiek(store: ActionContext, nis: string) {\n // parse to get bureaus and definitief status (ignores lijsten here)\n const hoverResult: HoverResult = parseOverzichtHover(store, nis);\n hoverResult.statistiek = parseStatistiek(store, Settings.ELECTION_YEAR, nis);\n store.commit('map/SET_HOVER_RESULTS', hoverResult, {root: true});\n return hoverResult;\n}\n\nexport async function load_verkozen_kandidaten(store: ActionContext) {\n // loads kandidaten for ALL lijsten at once\n // used for verkozen kandidaten view\n\n const current: ResultQuery = store.rootGetters[`current/query`];\n current.year = Settings.ELECTION_YEAR;\n\n const lijstnummers: number[] = store.rootGetters['current/lijstNummers'];\n const lijstGIDs: string[] = store.rootGetters['current/lijstenGIDs'];\n\n return cacheApiService.getVerkozenen(current, lijstnummers)\n .then((currentResponse: any) => {\n cacheFiles(store, currentResponse);\n\n lijstGIDs.forEach((lijstGID: string) => {\n try {\n const kandidatenLijst: KandidatenLijst = parseLijstJSON(store, current.year, lijstGID);\n store.commit('current/SET_LIJST_RESULT', {\n year: current.year,\n lijstGID,\n result: kandidatenLijst,\n nis: current.nis,\n }, {root: true});\n\n } catch (err) {\n return Promise.reject('load_verkozen_kandidaten error' + err);\n }\n });\n\n return Promise.resolve(true);\n\n })\n .catch(handleError(store));\n}\n\nexport async function load_statistieken(store: ActionContext) {\n const current: ResultQuery = store.rootGetters[`current/query`];\n current.year = Settings.ELECTION_YEAR;\n return cacheApiService.getStatistieken(current)\n .then((response: any) => {\n cacheFiles(store, response);\n\n try {\n const statistiek: Statistiek = parseStatistiek(store, current.year);\n statistiek.loaded = true;\n store.commit('current/SET_STATISTIEK', statistiek, {root: true});\n\n } catch (err) {\n return Promise.reject('load_statistieken error' + err);\n }\n\n return Promise.resolve(true);\n })\n .catch(handleError(store));\n}\n\nfunction handleError(store: ActionContext) {\n return (errorResponse: any) => {\n // Note: this will abandon ALL requests, also triggered if a javascript errors occurs inside code\n\n // do we even want to cache incomplete responses? guess not\n // let isOnline:boolean = store.rootGetters['current/isOnline'];\n // if (isOnline) {\n // // no use storing cache files if you're offline\n // // we do not even get a valid status response eg 404\n // cacheFiles(store, errorResponse);\n // }\n\n console.log('cache.actions handleError', errorResponse);\n return Promise.reject(errorResponse);\n };\n}\n\nfunction cacheFiles(store: ActionContext, responses: any[]) {\n if (!Array.isArray(responses)) {\n responses = [responses];\n }\n\n // store each JSON file in cache\n responses.forEach((response: any) => {\n const metaData: FileData = {\n exp: new Date(),\n status: (response.request) ? response.request.status : 0,\n data: response.data,\n };\n const payload: CachedFile = {};\n let path: string = response.config.url.split(`${Settings.API_FOLDER}/`)[1];\n payload[path] = metaData;\n store.commit('ADD_JSON', payload);\n });\n}\n\n// export everything compliant to the vuex specification for actions\nexport default > {\n load_previous_elections,\n load_entity_result_for_year,\n load_lijst_results,\n clear_lijst_results,\n clear_results,\n load_map_results,\n load_hover_result,\n load_hover_statistiek,\n load_statistieken,\n load_verkozen_kandidaten,\n load_topojsons,\n update_current,\n};\n","import {MutationTree} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {CachedFile} from '@/models/cache.model';\n\nexport function ADD_JSON(state: CacheState, file: CachedFile) {\n const key = Object.keys(file)[0];\n state[key] = file[key];\n}\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n ADD_JSON,\n};\n","import {GetterTree} from 'vuex';\nimport {CacheState} from '@/store/cache/cache.state';\nimport {CacheApiService} from '@/store/cache/cache.api.service';\nimport {ResultQuery} from '@/models/election.result.model';\n\nconst cacheApiService = new CacheApiService();\n\n// returns the complete state as-is\n// export function all(state: CacheState): CacheState {\n// return state\n// }\n\n// this is a good candidate to load from store / server\n// it returns the raw json data from the file (or undefined)\nexport function getFile(state: CacheState, getters: any, rootState: any, rootGetters: any) {\n const current: any = rootGetters[`current/query`];\n return (params: any): any => {\n const pathFn: (current: any, params: any) => string = isToponym(params) ? getGeoPath : params.lijstnr ? getLijstPath : isOverzicht(params) ? getOverzichtPath : getNisPath;\n const path: string = pathFn(current, params);\n const key: string = [path, params.name].join('/');\n return (!!state[key] && state[key].status == 200) ? state[key].data : undefined;\n };\n}\n\nfunction isOverzicht(params: any): boolean {\n return params.name === 'overzicht.json' || params.name === 'gewestelijkeLijsten.json' || params.name === 'statistiek.json' || params.name === 'fusies.json' || params.name ===\n 'andersluidendeGewestelijkeLijsten.json';\n}\n\nfunction isToponym(params: any): boolean {\n return params.name.indexOf('topojson') > -1;\n}\n\nfunction getOverzichtPath(current: any, params: any): string {\n return cacheApiService.mapPath( {\n electionType: params.electionType || current.electionType,\n year : params.year,\n });\n}\n\nfunction getNisPath(current: any, params: any): string {\n return cacheApiService.path( {\n nis : params.nis || current.nis,\n electionType: current.electionType,\n year : params.year,\n });\n}\n\nfunction getGeoPath(): string {\n return cacheApiService.geoPath()\n}\n\nfunction getLijstPath(current: any, params: any): string {\n return cacheApiService.lijstPath( {\n nis : params.nis || current.nis,\n electionType: current.electionType,\n year : params.year,\n lijstnr : params.lijstnr,\n });\n}\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n getFile,\n};\n","import {FileData} from '@/models/cache.model';\n\nexport class CacheState {\n [filePath: string]: FileData;\n}\n","import {Module} from 'vuex';\nimport Actions from './cache.actions';\nimport Mutations from './cache.mutations';\nimport Getters from './cache.getters';\nimport {CacheState} from '@/store/cache/cache.state';\n\nexport class CacheModule implements Module {\n\n public namespaced: boolean = true;\n\n // default properties required for vuex stores/modules\n public state: CacheState;\n public getters = Getters;\n public mutations = Mutations;\n public actions = Actions;\n\n constructor() {\n this.state = new CacheState();\n }\n}\n","import {GetterTree} from 'vuex';\nimport {MapState} from '@/store/map/map.state';\nimport {HoverResult, MapColor} from '@/models/map.model';\n\n// returns the current info need to query data from server\nexport function all(state: MapState): MapState {\n return state;\n}\n\nexport function colors(state: MapState): MapColor {\n return state.colors;\n}\n\nexport function hoverResult(state: MapState): HoverResult {\n return state.hoverResult;\n}\n\nexport function mapType(state: MapState): string {\n return state.mapType;\n}\n\nexport function geolocating(state: MapState): any {\n return state.geolocating;\n}\n\nexport function geolocation(state: MapState): any {\n return state.geolocation;\n}\n\nexport function geolocation_error(state: MapState): any {\n return state.geoError;\n}\n\nexport function topojsons_loaded(state: MapState): any {\n return state.topojsonsLoaded;\n}\n\n// export everything compliant to the vuex specification for getters\nexport default > {\n all, colors, hoverResult, mapType, geolocating, geolocation, geolocation_error, topojsons_loaded\n};\n","import {MutationTree} from 'vuex';\nimport {MapState} from '@/store/map/map.state';\nimport {EntityLijsten} from '@/models/election.result.model';\nimport {HoverResult, MapColor} from '@/models/map.model';\nimport Vue from 'vue';\n\nexport function SET_HOVER_NIS(state: MapState, nis: string = '') {\n state.hoverNis = nis;\n}\n\nexport function SET_HOVER_RESULTS(state: MapState, results: HoverResult) {\n state.hoverResult = results;\n}\n\nexport function SET_LOADING(state: MapState, isLoading: boolean = false) {\n state.loading = isLoading;\n}\n\nexport function SET_TOPOJSONS_LOADED(state: MapState, loaded: boolean = false) {\n state.topojsonsLoaded = loaded;\n}\n\nexport function SET_COLORS(state: MapState, colors: MapColor) {\n state.colors = colors;\n}\n\nexport function SET_LIJST(state: MapState, party: string = '') {\n state.lijst = party;\n}\n\nexport function SET_MAP_TYPE(state: MapState, mapType: string = '') {\n state.mapType = mapType;\n SET_GEO_ERROR(state);\n}\n\nexport function SET_LIJSTEN(state: MapState, nationaleLijsten: EntityLijsten) {\n state.lijsten = nationaleLijsten;\n}\n\nexport function GEOLOCATING(state: MapState) {\n Vue.set(state, 'geolocating', true);\n}\n\nexport function SET_GEOLOCATION(state: MapState, geolocation: any = null) {\n // Vue.delete(state, 'geolocation');\n Vue.set(state, 'geolocating', false);\n Vue.set(state, 'geolocation', geolocation);\n}\n\nexport function SET_GEO_ERROR(state: MapState, error: string = '') {\n Vue.set(state, 'geolocating', false);\n Vue.set(state, 'geoError', error);\n}\n\nexport default > {\n SET_LOADING,\n SET_COLORS,\n SET_HOVER_NIS,\n SET_HOVER_RESULTS,\n SET_LIJST,\n SET_MAP_TYPE,\n SET_LIJSTEN,\n GEOLOCATING,\n SET_GEOLOCATION,\n SET_GEO_ERROR,\n SET_TOPOJSONS_LOADED,\n};\n","import {Settings} from '@/shared/settings';\nimport {json} from 'd3-fetch';\nimport {feature} from 'topojson';\nimport {geoContains} from 'd3-geo';\nimport {ELECTION_TYPES, ElectionType} from '@/models/election.result.model';\nimport {Utils} from '@/shared/utils';\n\nconst GEO_LOCATION_ERRORS = {\n NOT_FOUND: 'Kan uw huidige locatie niet vinden op deze kaart',\n NOT_FOUND_MOBILE: 'Kan uw huidige locatie niet vinden',\n NOT_AVAILABLE: 'Geolocatie is niet beschikbaar',\n PERMISSION_DENIED: 'Geen toestemming tot geolocatie',\n};\n\nconst USE_MOBILE_ERRORS: boolean = Utils.isTouchDevice() && !localStorage.getItem('desktopView');\n\nexport class MapApiService {\n\n get NOT_FOUND_ERROR(): string {\n // message is different for mobile vs desktop (with/without map)\n return (USE_MOBILE_ERRORS) ? GEO_LOCATION_ERRORS.NOT_FOUND_MOBILE : GEO_LOCATION_ERRORS.NOT_FOUND;\n }\n\n /**\n * The gemeentegrenzen map data is sliced into tiles. This method retrieves the tile for the current coordinates and returns the properties of the feature containing the\n * coordinates.\n * @returns {Promise}\n */\n public async getGeolocation(electionType: ElectionType, provincieType: string = ''): Promise {\n if ('geolocation' in navigator) {\n const left = 2.5224539712723013;\n const top = 51.5320229840197470;\n const right = 6.0224539712723013;\n const bottom = 50.6320229840197484;\n const rows = 9;\n const cols = 35;\n const offset = .1;\n\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition((position) => {\n let file = '';\n switch (electionType) {\n case ELECTION_TYPES.DISTRICT:\n file = 'stadsdistricten';\n break;\n case ELECTION_TYPES.OCMW:\n file = 'ocmw';\n break;\n default:\n if (provincieType) {\n file = provincieType;\n break;\n }\n const col = Math.floor((position.coords.longitude - left) / offset);\n const row = Math.floor((top - position.coords.latitude) / offset);\n file = 'id_' + ((col * rows) + row + 1);\n break;\n\n }\n\n const filename = Settings.GEO_FOLDER + file + '.topojson';\n return json(filename).then((data: any) => {\n const features = (feature(data, data.objects[file])).features;\n const p: [number, number] = [position.coords.longitude, position.coords.latitude];\n features.forEach((f: any) => {\n if (geoContains(f, p)) {\n return resolve(f);\n }\n });\n return reject(this.NOT_FOUND_ERROR);\n\n }).catch(() => reject(this.NOT_FOUND_ERROR));\n }, (err) => {\n switch (err.code) {\n case err.PERMISSION_DENIED:\n return reject(GEO_LOCATION_ERRORS.PERMISSION_DENIED);\n default:\n return reject(this.NOT_FOUND_ERROR);\n }\n });\n });\n }\n return Promise.reject(GEO_LOCATION_ERRORS.NOT_AVAILABLE);\n\n }\n}\n","import {ActionContext, ActionTree} from 'vuex';\nimport {CacheApiService} from '@/store/cache/cache.api.service';\nimport {MapState} from '@/store/map/map.state';\nimport {ElectionType, ResultQuery} from '@/models/election.result.model';\nimport {MAP_TYPES} from '@/models/map.model';\nimport {MapApiService} from '@/store/map/map.api.service';\n\nconst cacheApiService = new CacheApiService();\nconst mapApiService = new MapApiService();\n\nexport async function load_data(store: ActionContext, query: ResultQuery) {\n store.commit('SET_LOADING', true);\n\n // Set map color mode\n // IF lijstGID map = party color tints ( eg lijstGID = '-1' )\n // ELSE lijstGID map = strongest party colors ( lijstGID = '' )\n store.commit('SET_LIJST', query.lijstGID);\n store.commit('SET_MAP_TYPE', query.mapType);\n\n await store.dispatch('cache/load_map_results', query, {root: true});\n store.commit('SET_LOADING', false);\n\n return Promise.resolve(true);\n}\n\nexport async function load_topojsons(store: ActionContext) {\n await store.dispatch('cache/load_topojsons', null, {root: true});\n store.commit('SET_TOPOJSONS_LOADED', true);\n return Promise.resolve(true);\n}\n\nexport async function load_geolocation(store: ActionContext, {type, provincieType}: { type: ElectionType, provincieType: string }) {\n store.commit('GEOLOCATING');\n localStorage.setItem('geolocation_clicked', 'true');\n\n const geolocation: any = await mapApiService.getGeolocation(type, provincieType)\n .catch((err: string) => {\n store.commit('SET_GEO_ERROR', err);\n return Promise.resolve(err);\n });\n\n geolocation.properties.type = type;\n store.commit('SET_GEOLOCATION', geolocation);\n return Promise.resolve(true);\n}\n\nexport async function reset_geolocation_error(store: ActionContext) {\n store.commit('SET_GEO_ERROR', '');\n return Promise.resolve(true);\n}\n\nexport async function hover_over_nis(store: ActionContext, nis: string) {\n store.commit('SET_HOVER_NIS', nis);\n const mapType: string = store.rootGetters['map/mapType'];\n if (mapType === MAP_TYPES.VOTES) {\n return await store.dispatch('cache/load_hover_result', nis, {root: true});\n }\n\n return await store.dispatch('cache/load_hover_statistiek', nis, {root: true});\n}\n\n// export everything compliant to the vuex specification for actions\nexport default > {\n load_data, hover_over_nis, load_geolocation, reset_geolocation_error, load_topojsons,\n};\n","import {HoverResult, MapColor} from '@/models/map.model';\nimport {EntityLijsten} from '@/models/election.result.model';\n\nexport class MapState {\n public loading: boolean = false; // data loading\n public visible: boolean = false;\n public hoverNis: string = ''; // nis user is hovering over, empty = no hover\n public mapType: string = ''; // age, gender, ... (shows colors for that map type)\n public lijst: string = ''; // points to a lijst inside lijsten object\n public lijsten: EntityLijsten = {}; // only national parties (used in map navigation)\n public colors: MapColor = {}; // all nis colors for map\n public hoverResult: HoverResult = new HoverResult(); // if hoverNis then this contains the nis result\n public topojsonsLoaded: boolean = false;\n\n public geolocating: boolean = false;\n public geolocation: any = {}; // geolocation name\n public geoError: string = ''; // geolocation error message\n}\n","import {Module} from 'vuex';\nimport Getters from './map.getters';\nimport Mutations from './map.mutations';\nimport Actions from './map.actions';\nimport {MapState} from '@/store/map/map.state';\n\nexport class MapModule implements Module {\n\n public namespaced: boolean = true;\n\n // default properties required for vuex stores/modules\n public state: MapState;\n public getters = Getters;\n public mutations = Mutations;\n public actions = Actions;\n\n constructor() {\n this.state = new MapState();\n }\n}\n","import Vue from 'vue';\nimport Vuex from 'vuex';\nimport {SearchModule} from '@/store/search/search.module';\nimport {CurrentModule} from '@/store/current/current.module';\nimport {CacheModule} from '@/store/cache/cache.module';\nimport {MapModule} from '@/store/map/map.module';\n\nVue.use(Vuex);\n\nconst DEBUG = process.env.NODE_ENV !== 'production';\n\nexport default new Vuex.Store({\n modules: {\n current: new CurrentModule(),\n search: new SearchModule(),\n cache: new CacheModule(),\n map: new MapModule(),\n },\n\n strict: DEBUG,\n state: {},\n mutations: {},\n actions: {},\n});\n","/* tslint:disable:no-console */\n\nimport { register } from 'register-service-worker';\n\n// make sure service worker name is same as in vue.config pwa\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}lv2018SW.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/M232X8',\n );\n },\n cached() {\n console.log('Content has been cached for offline use.');\n },\n updated() {\n console.log('New content is available; please refresh.');\n },\n offline() {\n console.log('No internet connection found. App is running in offline mode.');\n },\n error(error) {\n console.error('Error during service worker registration:', error);\n },\n });\n}\n","import Vue from 'vue';\n\nVue.directive('click-outside', {\n bind(el: any, binding: any, vnode: any) {\n el.event = ((event: any) => {\n // here I check that click was outside the el and his childrens\n if (!(el === event.target || el.contains(event.target))) {\n // and if it did, call method provided in attribute value\n vnode.context[binding.expression](event);\n }\n });\n document.body.addEventListener('click', el.event);\n },\n unbind(el: any) {\n document.body.removeEventListener('click', el.event);\n },\n});\n","import 'es6-promise'\nimport 'isomorphic-fetch'\nimport 'unorm'\n\nimport Vue from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport store from './store/store';\nimport './registerServiceWorker';\nimport './directives/click-outside.directive';\n\nVue.config.productionTip = false;\n\n/**\n * formats float as string\n * 10.657 as \"10,65\"\n */\nVue.filter('percent', (value: number) => {\n value = (isNaN(value)) ? 0 : value;\n const digits: number = 1; // number of digits behind comma\n const rounded: string = '' + Math.round((value) * Math.pow(10, digits)) / Math.pow(10, digits);\n return rounded.replace('.', ',') + '%';\n});\n\n/**\n * formats float as string\n * 10.657 as \"10,65\"\n */\nVue.filter('titularis', (value: number) => {\n return (value === 0) ? '-' : value;\n});\n\n/**\n * formats Date as time string\n * 14 oktober 2018 16:58:30 as \"16.58 uur\"\n * zie officiĆ«le nl notatie: http://taaladvies.net/taal/advies/vraag/1278\n */\nVue.filter('time', (date: Date) => {\n if (!date) {\n return '';\n }\n\n const minutes: string = '0' + date.getMinutes();\n const seconds: string = '0' + date.getSeconds();\n return date.getHours() + ':' + minutes.substr(minutes.length - 2) + ':' + seconds.substr(seconds.length - 2);\n});\n\n/**\n * formats integer number as string\n * 10657 as \"10.657\"\n */\nVue.filter('thousands', (num: number) => {\n // in LV2012 empty string was allowed (not converted to 0)\n let formattedString = '';\n const sNum: string = String(Math.round(num));\n const totalParts = Math.floor(sNum.length / 3);\n const pre = sNum.length % 3;\n if (pre > 0) {\n formattedString += sNum.substr(0, pre);\n }\n for (let i = 0; i < totalParts; i++) {\n if ((i === 0 && pre > 0) || i > 0) {\n formattedString += '.';\n }\n formattedString += sNum.substr(pre + i * 3, 3);\n }\n return formattedString;\n});\n\n/**\n * Capitalize the first letter of the text\n * @param value the value of the text that needs to be capitalized\n */\nVue.filter('capitalize', (value: any) => {\n if (!value) {\n return '';\n }\n value = value.toString();\n return value.charAt(0).toUpperCase() + value.slice(1);\n});\n\nnew Vue({\n router,\n store,\n render: (h) => h(App),\n}).$mount('#app');\n"],"sourceRoot":""}