{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/searchbar/SearchBar.vue?cbbb","webpack:///./src/models/colors.ts","webpack:///./src/assets/vp.jpeg","webpack:///./src/components/hamburger/hamburger.vue?68e9","webpack:///./src/eventBus.ts","webpack:///./src/styles/app.scss?abf4","webpack:///./src/shared/settings.ts","webpack:///./src/shared/browserDetection.ts","webpack:///./src/models/viewport.model.ts","webpack:///./src/models/provincies.ts","webpack:///./src/shared/utils.ts","webpack:///./src/App.vue?db32","webpack:///./src/components/searchbar/SearchBar.vue?2516","webpack:///./src/models/search.model.ts","webpack:///./src/components/hamburger/hamburger.vue?feac","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?f095","webpack:///./src/components/hamburger/hamburger.vue?a6cf","webpack:///./src/components/hamburger/hamburger.vue?e702","webpack:///./src/components/hamburger/hamburger.vue?7db8","webpack:///./src/components/searchbar/SearchBar.vue?1f3b","webpack:///./src/components/searchbar/SearchBar.vue?23b7","webpack:///./src/components/searchbar/SearchBar.vue?2052","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","webpack:///./src/models/map.model.ts","webpack:///./src/models/election.result.model.ts","webpack:///./src/styles/print.scss?2280","webpack:///./src/components/hamburger/hamburgerlist.vue?bccc"],"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","app","jsonpScriptSrc","p","browsers","desktopView~lijstPage~resultPage","desktopView","lijstPage~resultPage~verkozenen","lijstPage~resultPage","lijstPage","resultPage~statistiek","resultPage","geolocation","home","verkozenen","mobileView","statistiek","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","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_463ba1f8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_463ba1f8_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","COLORS","AGE","GENDER","VOTES","OTHERS","BLANCO","SELECTED","NODATA","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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","EventBus","vue__WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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","showAllCandidates","analyticsProd","analyticsTi","analyticsDev","analyticsId","indexOf","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","SHOW_ALL_CANDIDATES","ANALYTICS_ID","BrowserDetection","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__","this","IEversion","detectIE","ua","navigator","userAgent","msie","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_core_js_parse_int__WEBPACK_IMPORTED_MODULE_0___default","substring","trident","rv","edge","ViewPortDimensions","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","width","height","VIEWPORT","MAX_MOBILE","MIN_TABLET","MAX_TABLET","PROVINCIES","10000","70000","30000","40000","20001","Utils","isDark","hex","color","d3_color__WEBPACK_IMPORTED_MODULE_2__","getBrightness","darkenLightColors","darker","toString","g","b","isTouchDevice","test","createTint","percent","colortint","h","scrollTop","pageYOffset","documentElement","body","intToBoolean","num","printMap","classList","add","remove","print","printResults","Appvue_type_template_id_a29b17c8_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_463ba1f8_scoped_true_render","role","class","homesearch","isMobile","isHome","aria-label","aria-hidden","goToStartPage","directives","rawName","expression","submit","invisible","searchVisible","loading","resultsLoading","ref","autocomplete","placeholder","nis","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","naam","gemeente","KIESKRING","mapNames","types","POSTCODE","postcode","other","active","tabindex","showSearch","SearchBarvue_type_template_id_463ba1f8_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_7aa4920d_scoped_true_render","$emit","hamburger","open","resultsOpened","closed","kieskringenOpened","isParlement","hasSuggestions","suggestionsOpened","toggleSuggestions","totalSuggestions","election","verwant","isNotCurrent","routeElection","electionType","electionTypeToMapName","favoritesOpened","toggleFavorites","totalFavorites","favorite","favorites","hamburgerlistvue_type_template_id_7aa4920d_scoped_true_staticRenderFns","hamburgerlistvue_type_script_lang_ts_HamburgerList","_Vue","HamburgerList","_this","classCallCheck","possibleConstructorReturn","getPrototypeOf","MAX_DEFAULT_FAVORITES","MAX_DEFAULT_SUGGESTIONS","election_result_model","settings","inherits","createClass","$router","$store","dispatch","JSON","parse","localStorage","getItem","initToggle","isProvincieraad","KANTON","isDistrictNis","isProvincie","provincies","provincieType","MUNICIPALITY","properties","current","getters","PARLEMENT","CONSTITUENCY","sortBy_default","toPairs_default","map","a","keys_default","loaded","treshold","maxDiff","$route","set","showMap","elections","vue_property_decorator","__decorate","hamburgerlistvue_type_script_lang_ts_","hamburger_hamburgerlistvue_type_script_lang_ts_","component","componentNormalizer","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","VueAnalytics","default","vue_runtime_esm","use","vue_router_esm","appRoutes","sharedRoutes","path","USE_MOBILE_ROUTES","utils","mobileSpecificRoutes","children","desktopSpecificRoutes","router","routes","src_router","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","loadEntityData","files","endpoint","forEach","lijstnr","lijstPath","mapPath","geoPath","getFusies","response","promise_default","nisResponse","nisses","nisRequest","assign_default","year","electionName","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","counter","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","arguments","isPreviousElection","lijsten","lijstNummers","map_default","lijstenGIDs","openedLijsten","nisLijsten","openLijsten","filter_default","kandidatenLoaded","kandidatenError","current_getters_statistiek","canShowDesktopView","viewportWidth","current_getters_forceDesktopView","viewportSize","viewport","sortOrder","sortorder","lastUpdated","mapLastUpdated","updating","isOnline","online","hasUpdateError","updateError","current_getters_naam","current_getters_electionFinished","now","pageTitle","titleParts","suffix","current_getters","previousElection","electionFinished","CHANGE_ENTITY","notChanged","LAST_UPDATED","MAP_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","sortKey","sortDirection","SHOW_MAP","SET_DESKTOPVIEW","SET_FAVORITES","delete","automaticUpdateTimer","current_mutations","current_actions_change","root","schedule_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","ts","ongeldig","os","definitief","df","v","verwantObject","localeCompare","currentVerwant","find_default","bureaus","gb","geteldeBureaus","parse_int_default","totaalBureaus","stemmen","sc","totaalStemmen","reduce_default","totaal","stem","totaalZetels","_arr","_i","party","nl","kl","GID","nationaal","nr","lijstnaam","nm","vorigelijstnaam","nv","lijstkleur","logo","lg","lijstUitslag","zetels","zs","totaalPercent","parseLijstJSON","Math","abs","dezeLijst","dezeUitslag","kd","kandidaat","entiteitNaam","en","volgnummer","vn","eo","kandidaatObject","uitslagKandidaat","verkozenVolgnummer","vv","kandidaatIsVerkozen","vk","titularis","opvolger","naamstemmen","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","ingeschreven","sg","ui","geldig","gs","gemiddeldeLeeftijd","range_total","range_age","row","range","vrouw","man","vrouwpct","manpct","totalpct","total","min","ceil","totaalVerkozenPct","nis_fpct","distributie","totaalVerkozen","totaalVrouw","totaalMan","totaalVrouwPct","parseOverzichtColors","gewestelijkeLijsten","statistiekFile","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","overzichtFile","andersLuidendeLijst","usArray","reduce","sum","ongeteldeStemmen","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","is_array_default","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","features","topojson","objects","d3_geo_src","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","MAP_TYPES","AGE_LEGEND","label","_models_colors__WEBPACK_IMPORTED_MODULE_5__","GENDER_LEGEND","STRONGEST_PARTY_LEGEND","HoverResult","_EntityResult","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__","_models_election_result_model__WEBPACK_IMPORTED_MODULE_4__","ELECTION_TYPES","ELECTION_NAMES","ELECTION_MAP_NAMES","ELECTION_TYPE_TO_NAME","_ELECTION_TYPE_TO_NAM","_home_geert_Development_projects_Vo_verkiezingen_lv2019_lv2019_pub_lv2019_pub_website_lv2019_pub_website_site_node_modules_babel_runtime_corejs2_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","KandidaatResult","LijstResult","GenderDistributie","Statistiek","EntityResult","Verwant","Elections","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_7aa4920d_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_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_7aa4920d_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default"],"mappings":"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","file":"js/app.672b5a6b.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\t\"app\": 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\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"browsers\":\"browsers\",\"desktopView~lijstPage~resultPage\":\"desktopView~lijstPage~resultPage\",\"desktopView\":\"desktopView\",\"lijstPage~resultPage~verkozenen\":\"lijstPage~resultPage~verkozenen\",\"lijstPage~resultPage\":\"lijstPage~resultPage\",\"lijstPage\":\"lijstPage\",\"resultPage~statistiek\":\"resultPage~statistiek\",\"resultPage\":\"resultPage\",\"geolocation\":\"geolocation\",\"home\":\"home\",\"verkozenen\":\"verkozenen\",\"mobileView\":\"mobileView\",\"statistiek\":\"statistiek\"}[chunkId]||chunkId) + \".\" + {\"browsers\":\"0dc6a64f\",\"desktopView~lijstPage~resultPage\":\"f5b6e5fb\",\"desktopView\":\"e95186c4\",\"lijstPage~resultPage~verkozenen\":\"6037080c\",\"lijstPage~resultPage\":\"cd64835e\",\"lijstPage\":\"624dee81\",\"resultPage~statistiek\":\"beb18894\",\"resultPage\":\"8a79ba52\",\"geolocation\":\"fb98bd6a\",\"home\":\"324220fc\",\"verkozenen\":\"ee538731\",\"mobileView\":\"116fd6a9\",\"statistiek\":\"789d496f\"}[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 = {\"browsers\":1,\"desktopView~lijstPage~resultPage\":1,\"desktopView\":1,\"lijstPage~resultPage~verkozenen\":1,\"lijstPage~resultPage\":1,\"lijstPage\":1,\"resultPage~statistiek\":1,\"resultPage\":1,\"home\":1,\"verkozenen\":1,\"mobileView\":1,\"statistiek\":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 = \"css/\" + ({\"browsers\":\"browsers\",\"desktopView~lijstPage~resultPage\":\"desktopView~lijstPage~resultPage\",\"desktopView\":\"desktopView\",\"lijstPage~resultPage~verkozenen\":\"lijstPage~resultPage~verkozenen\",\"lijstPage~resultPage\":\"lijstPage~resultPage\",\"lijstPage\":\"lijstPage\",\"resultPage~statistiek\":\"resultPage~statistiek\",\"resultPage\":\"resultPage\",\"geolocation\":\"geolocation\",\"home\":\"home\",\"verkozenen\":\"verkozenen\",\"mobileView\":\"mobileView\",\"statistiek\":\"statistiek\"}[chunkId]||chunkId) + \".\" + {\"browsers\":\"0326c497\",\"desktopView~lijstPage~resultPage\":\"674067bb\",\"desktopView\":\"486e399b\",\"lijstPage~resultPage~verkozenen\":\"bb6de6b6\",\"lijstPage~resultPage\":\"18aa2348\",\"lijstPage\":\"1be19965\",\"resultPage~statistiek\":\"182bdfa0\",\"resultPage\":\"5d590150\",\"geolocation\":\"31d6cfe0\",\"home\":\"4645c6e6\",\"verkozenen\":\"1a2ef7c6\",\"mobileView\":\"54169e15\",\"statistiek\":\"c63dd941\"}[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\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 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\tdocument.head.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,\"vendor\",\"d3\",\"topojson\",\"d3-color\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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=463ba1f8&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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=463ba1f8&lang=scss&scoped=true&\"","// 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","module.exports = __webpack_public_path__ + \"img/vp.ae5e6eb1.jpeg\";","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/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??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/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 = 2019;\nconst electionDate: Date = new Date(electionYear, 5, 26); // 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\n// Set true to show all candidates for a list if no candidates have been elected\nconst showAllCandidates = false;\n\nconst analyticsProd = 'UA-140477714-1';\nconst analyticsTi = 'UA-140501582-1';\nconst analyticsDev = 'UA-140737399-1';\n\nconst analyticsId = baseUrl.indexOf('vp2019-oti.hbplus.be') > -1 ? analyticsTi : baseUrl.indexOf('vlaanderenkiest.be') > -1 ? analyticsProd : analyticsDev;\n\nexport const Settings = {\n ELECTION_YEAR: electionYear,\n PREVIOUS_ELECTION_YEAR: 2014,\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: 3 * 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 + '/vp/',\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 SHOW_ALL_CANDIDATES: showAllCandidates,\n ANALYTICS_ID: analyticsId\n};\n","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","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){return _vm.redirectToSupportPage()}}},[_vm._v(\"meer info.\")])]):_vm._e(),(_vm.useMobileView && (_vm.geoLocating || _vm.geolocationError))?[_c('div',{attrs:{\"id\":\"geolocation-mask\"},on:{\"click\":function($event){return _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();return _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();return _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){return _vm.goToStartPage()}}},[_c('img',{staticClass:\"iwgf3__logo__vlaams_parlement\",attrs:{\"src\":require(\"../../assets/vp.jpeg\")}})]),_c('a',{staticClass:\"iwgh3__label\",on:{\"click\":function($event){return _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://vlaanderenkiest.be\",\"target\":\"_blank\",\"title\":\"Meer info over de verkiezingen van het Vlaams Parlement\"}},[_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 achternaam, plaats of postcode'},domProps:{\"value\":(_vm.search)},on:{\"click\":function($event){_vm.searchVisible = true},\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideSearch()},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.clickFirstMatch()},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }return _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){return _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(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"up\",38,$event.key,[\"Up\",\"ArrowUp\"])){ return null; }return _vm.selectPreviousMatch()},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideSearch()},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"down\",40,$event.key,[\"Down\",\"ArrowDown\"])){ return null; }return _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){return _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){return _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){return _vm.$emit('close')}}}),_c('div',{staticClass:\"button-tab\",on:{\"click\":function($event){return _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){return _vm.goToStartPage()}}},[_vm._v(\"\\n Home\\n \")])])]),_c('ul',[_c('li',{staticClass:\"clickable\",class:{ open: _vm.resultsOpened, closed: !_vm.resultsOpened}},[_c('a',{on:{\"click\":function($event){_vm.resultsOpened=!_vm.resultsOpened}}},[_vm._v(\"\\n \"+_vm._s(_vm.hideResults? 'Kandidaten' : 'Resultaten')+\" verkiezingen\\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.resultsOpened)?_c('li',{staticClass:\"subitems\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'parlement', nis: '02000'}}}},[_vm._v(\"\\n Vlaams Parlement\\n \")])],1):_vm._e(),(_vm.resultsOpened)?_c('li',{staticClass:\"subitems clickable\",class:{ open: _vm.kieskringenOpened, closed: !_vm.kieskringenOpened}},[_c('a',{on:{\"click\":function($event){_vm.kieskringenOpened = !_vm.kieskringenOpened}}},[_vm._v(\"\\n Kieskringen(6)\\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._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 11002}}}},[_vm._v(\"\\n Antwerpen\\n \")])],1):_vm._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 21004}}}},[_vm._v(\"\\n Brussel-Hoofdstad\\n \")])],1):_vm._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 71022}}}},[_vm._v(\"\\n Limburg\\n \")])],1):_vm._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 44021}}}},[_vm._v(\"\\n Oost-Vlaanderen\\n \")])],1):_vm._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 24062}}}},[_vm._v(\"\\n Vlaams-Brabant\\n \")])],1):_vm._e(),(_vm.kieskringenOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('router-link',{staticClass:\"clickable\",attrs:{\"to\":{ name: 'resultpage', params: { electionTypeName: 'kieskring', nis: 31005}}}},[_vm._v(\"\\n West-Vlaanderen\\n \")])],1):_vm._e(),(!_vm.isParlement && _vm.hasSuggestions && _vm.resultsOpened)?_c('li',{staticClass:\"subitems clickable\",class:{ open: _vm.suggestionsOpened, closed: !_vm.suggestionsOpened }},[_c('a',{on:{\"click\":function($event){return _vm.toggleSuggestions()}}},[_vm._v(\"\\n Verwant (\"+_vm._s(_vm.totalSuggestions)+\")\\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._e(),_vm._l((_vm.election.verwant),function(verwant){return (!_vm.isParlement && _vm.suggestionsOpened && _vm.resultsOpened)?_c('li',{staticClass:\"subitems lvl2\",on:{\"click\":function($event){return _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(_vm.electionTypeToMapName[verwant.electionType] + ' - ' + verwant.naam)+\"\\n \")])]:_vm._e()],2):_vm._e()}),(_vm.resultsOpened)?_c('li',{staticClass:\"subitems\"},[_c('a',{staticClass:\"clickable\",attrs:{\"href\":\"https://verkiezingen2019.belgium.be/nl/verkiezingen?el=CK\",\"target\":\"_blank\"}},[_vm._v(\"\\n Federale verkiezingen\\n \"),_c('svg',{attrs:{\"height\":\"14\"}},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-external\"}})])])]):_vm._e(),(_vm.resultsOpened)?_c('li',{staticClass:\"subitems\"},[_c('a',{staticClass:\"clickable\",attrs:{\"href\":\"https://verkiezingen2019.belgium.be/nl/verkiezingen?el=EU\",\"target\":\"_blank\"}},[_vm._v(\"\\n Europese verkiezingen\\n \"),_c('svg',{attrs:{\"height\":\"14\"}},[_c('use',{attrs:{\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\",\"xlink:href\":\"#icon-external\"}})])])]):_vm._e()],2),(_vm.hasFavorites)?_c('ul',[_c('li',{staticClass:\"clickable\",class:{ open: _vm.favoritesOpened, closed: !_vm.favoritesOpened }},[_c('a',{on:{\"click\":function($event){return _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){return _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(),_c('ul',{on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._m(0),_vm._m(1)])])])])}\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 Veelgestelde vragen\\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://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 kieskringenOpened: boolean = false;\n public suggestionsOpened: boolean = false;\n public resultsOpened: boolean = true;\n\n public electionTypeToMapName = ELECTION_TYPE_TO_MAP_NAME;\n private hideResults = Settings.HIDE_RESULTS;\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 get isParlement(): boolean {\n const current = this.$store.getters['current/query'];\n return current.electionType === ELECTION_TYPES.PARLEMENT;\n }\n\n get suggestionsTitle(): string {\n if(!this.hasSuggestions || this.isParlement){\n return \"Kieskringen (6)\";\n }\n let title = '';\n switch (this.electionType) {\n case ELECTION_TYPES.KANTON:\n title = \"Gemeenten \";\n break;\n case ELECTION_TYPES.CONSTITUENCY:\n title = \"Kantons \";\n break;\n case ELECTION_TYPES.MUNICIPALITY:\n default:\n title = \"Verwante resultaten \";\n break;\n }\n\n return title + \"(\" + this.totalSuggestions + \")\";\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.nis && 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.KANTON;\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.MUNICIPALITY,\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.KANTON) {\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=7aa4920d&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=7aa4920d&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 \"7aa4920d\",\n null\n \n)\n\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\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\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 setTimeout(() => {\n this.searchVisible = true;\n this.$nextTick(() => (this.$refs.searchField).focus());\n }, 100);\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=463ba1f8&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=463ba1f8&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 \"463ba1f8\",\n null\n \n)\n\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 = \"Vlaams Parlement 2019\";\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=a29b17c8&\"\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\nexport default component.exports","import Vue from 'vue';\nimport Router from 'vue-router';\nimport {Utils} from '@/shared/utils';\nimport {Settings} from '@/shared/settings';\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');\nconst VueAnalytics = require('vue-analytics').default;\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\nconst router = new Router({\n routes: appRoutes\n});\n\nVue.use(VueAnalytics, {\n id: Settings.ANALYTICS_ID,\n router,\n});\n\nexport default router;\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, loadEntityData: boolean): Promise {\n const files: any[] = [];\n\n let endpoint = this.baseURL + this.path(request);\n\n if (loadEntityData) {\n // 1) update entity\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 return axios.all([\n axios.get(`${endpoint}/cantons.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/municipalities.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/constituencies.topojson`), // static, should not be loaded twice\n axios.get(`${endpoint}/provincie_grenzen.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}/vp/${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}/vp/${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.MUNICIPALITY, 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 //TODO: remove\n let counter = 0;\n results.forEach((result: any) => {\n if (counter >= 10) {\n return;\n }\n const electiontype: string = ELECTION_TYPE_TO_NAME[result.e || ELECTION_TYPES.MUNICIPALITY];\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 //TODO: remove\n counter++;\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.MUNICIPALITY === 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 mapLastUpdated(state: CurrentState): Date {\n return state.mapLastUpdated;\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 = 'Vlaams Parlement ' + 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 mapLastUpdated,\n updating,\n isOnline,\n electionFinished,\n pageTitle,\n forceDesktopView,\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 MAP_LAST_UPDATED(state: CurrentState, payload: any) {\n // IMPORTANT: use this syntax for adding/deleting properties to an *existing* object:\n Vue.set(state, 'mapLastUpdated', payload);\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 MAP_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 schedule_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 schedule_next_update(store);\n\n return promise$;\n}\n\nfunction schedule_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 schedule_next_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.MUNICIPALITY; // = default\n public results: Elections = new Elections();\n\n // data update\n public lastUpdated: Date;\n public mapLastUpdated: 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 let lijsten = entiteitLijsten[current.electionType];\n // ------ mapping based on 2012 backbone collections.js \"Uitslagen\" see lines 126-200\n const verkiezing = entiteitUitslag ? entiteitUitslag[current.electionType][selectedNis] : null;\n const uitslag = verkiezing ? verkiezing.us : null;\n // const definitief: boolean = verkiezing.df;\n\n const result: EntityResult = new EntityResult(); // will prefill with default values if defined\n result.lastUpdated = entiteitUitslag ? new Date(entiteitUitslag.ts) : new Date();\n result.year = year; // for convenience\n result.nis = selectedNis; // for convenience\n result.ongeldig = verkiezing ? verkiezing.os : 0;\n result.definitief = verkiezing ? Utils.intToBoolean(verkiezing.df) : false; // 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 result.verwant = result.verwant.sort((a, b) => a.electionType.localeCompare(b.electionType) || a.naam.localeCompare(b.naam));\n\n // TODO: getting name for fusiegemeente won't work\n const currentVerwant: Verwant = find(result.verwant, {nis: '' + selectedNis} && {electionType: current.electionType}) || 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 && 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 // 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 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 const lijst: LijstResult = new LijstResult();\n lijst.GID = lijstGID;\n lijst.nationaal = Utils.intToBoolean(party.nl);\n lijst.lijstnr = parseInt(party.nr, 10) || -1;\n lijst.lijstnaam = party.nm;\n lijst.vorigelijstnaam = party.nv;\n lijst.lijstkleur = color;\n lijst.logo = party.lg;\n const lijstUitslag = uitslag ? uitslag[lijstGID] || uitslag[party.nr * -1] : null;\n lijst.stemmen = lijstUitslag ? lijstUitslag.sc : 0;\n lijst.percent = totaalStemmen ? lijst.stemmen / totaalStemmen * 100 : 0;\n lijst.zetels = (lijstUitslag && lijstUitslag.zs) || 0;\n lijst.year = year;\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 {ELECTION_TYPES, 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// 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 let lijstnr: number = store.rootGetters['current/lijstnummer'](year, lijstGID, nis);\n\n // When electiontype is Parlement, lijstGID(groupID) is used instead of lijstnr\n if (current.electionType === ELECTION_TYPES.PARLEMENT) {\n lijstnr = Math.abs(+lijstGID);\n }\n\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] || lijst [lijstnr * -1];\n const dezeUitslag = uitslag ? uitslag[current.electionType][nis][lijstGID] || uitslag[current.electionType][nis][lijstnr * -1] : null;\n const lijstUitslag = uitslag ? dezeUitslag.kd : null;\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].entiteitNaam = kandidaat.en;\n result[kandidaatGID].volgnummer = parseInt(kandidaat.vn, 10);\n result[kandidaatGID].type = kandidaat.eo;\n }\n // update dynamic data (results)\n if (lijstUitslag) {\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 const verkozenVolgnummer = (!!uitslagKandidaat.vv) ? uitslagKandidaat.vv : 0;\n const kandidaatIsVerkozen = (!!uitslagKandidaat.vk) ? Utils.intToBoolean(uitslagKandidaat.vk) : false;\n // see collection.js line 686, vv en vk in uitslag.json\n const type = result[kandidaatGID].type;\n const titularis = (kandidaatIsVerkozen && verkozenVolgnummer > 0 && type === 'E') ? parseInt(verkozenVolgnummer, 10) : 0;\n const opvolger = (kandidaatIsVerkozen && verkozenVolgnummer > 0 && type === 'S') ? parseInt(verkozenVolgnummer, 10) : 0;\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 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 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 // console.warn('parseOverzichtColors electionType',electionType);\n console.warn('parseOverzichtColors current.electionType', current.electionType);\n console.warn('parseOverzichtColors', shortType);\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 statistiekFile: any = store.getters.getFile({year, name: 'statistiek.json'});\n const statistiek: any = statistiekFile && statistiekFile[shortType];\n if (!overzicht) {\n return {};\n }\n const nisses: any[] = overzicht[shortType];\n\n const mapState: MapState = store.rootGetters[`map/all`];\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 statfile: any = store.getters.getFile({year, name: 'statistiek.json'});\n // const stats: any = statfile ? statfile[shortType][nis] : null;\n const overzichtFile: any = store.getters.getFile({year, name: 'overzicht.json'});\n if (!overzichtFile) {\n return new HoverResult();\n }\n const uitslag: any = overzichtFile[shortType][nis];\n\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 let totaalStemmen = uitslag.gs;\n if (!uitslag.gs) {\n let usArray = Object.keys(uitslag.us).map(key => uitslag.us[key]);\n totaalStemmen = usArray.reduce((sum, total) => sum + total);\n }\n\n const ongeteldeStemmen = uitslag.os || 0;\n\n const lijsten: EntityLijsten = {};\n for (const lijstGID of Object.keys(uitslag.us)) {\n const party = gewestelijkeLijsten[lijstGID];\n if (party) {\n const lijstnr = (party) ? party.nr : '';\n const naam = (party) ? andersLuidendeLijst && andersLuidendeLijst[nis] && andersLuidendeLijst[nis][party.nr] ? andersLuidendeLijst[nis][party.nr] : party.nm :\n 'ONBEKEND';\n const nationaal: boolean = Utils.intToBoolean(parseInt(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 - ongeteldeStemmen) * 100,\n };\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 {ELECTION_TYPES, 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\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// 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', entityResult.lastUpdated, {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, !!current.nis)\n .then((currentResponse: any) => {\n\n // response contains all combined files\n cacheFiles(store, currentResponse);\n\n if (!!current.nis) {\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 store.commit('current/SET_ENTITY_RESULT', {result: entityResult, year: current.year}, {root: true});\n store.commit('current/LAST_UPDATED', entityResult.lastUpdated, {root: true});\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 } 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 store.commit('current/MAP_LAST_UPDATED', new Date(), {root: true});\n }\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 let lijstnummers: number[] = store.rootGetters['current/lijstNummers'];\n const lijstGIDs: string[] = store.rootGetters['current/lijstenGIDs'];\n\n // For electiontype PARLEMENT lijstgid(groupid) is used instead of lijstnr to guarantee unique number\n if (current.electionType === ELECTION_TYPES.PARLEMENT) {\n lijstnummers = lijstGIDs.map((gid) => Math.abs(+gid));\n }\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.CONSTITUENCY:\n file = 'stadsdistricten';\n break;\n case ELECTION_TYPES.PARLEMENT:\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}vp2019SW.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 children\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","// 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 MUNICIPALITY: 'M',\n KANTON: 'K',\n CONSTITUENCY: 'C',\n PARLEMENT: 'R'\n};\n\n// human readable names as used in url etc\nexport const ELECTION_NAMES: any = {\n MUNICIPALITY: 'gemeente',\n KANTON: 'kanton',\n CONSTITUENCY: 'kieskring',\n PARLEMENT: 'parlement'\n};\n\n// human readable names as used in maps, page title etc\nexport const ELECTION_MAP_NAMES: any = {\n MUNICIPALITY: 'gemeente',\n KANTON: 'kanton',\n CONSTITUENCY: 'kieskring',\n PARLEMENT: 'Vlaams Parlement'\n};\n\nexport const ELECTION_TYPE_TO_NAME: any = {\n [ELECTION_TYPES.MUNICIPALITY]: ELECTION_NAMES.MUNICIPALITY,\n [ELECTION_TYPES.KANTON]: ELECTION_NAMES.KANTON,\n [ELECTION_TYPES.CONSTITUENCY]: ELECTION_NAMES.CONSTITUENCY,\n [ELECTION_TYPES.PARLEMENT]: ELECTION_NAMES.PARLEMENT\n};\n\nexport const ELECTION_TYPE_TO_MAP_NAME: any = {\n [ELECTION_TYPES.MUNICIPALITY]: ELECTION_MAP_NAMES.MUNICIPALITY,\n [ELECTION_TYPES.KANTON]: ELECTION_MAP_NAMES.KANTON,\n [ELECTION_TYPES.CONSTITUENCY]: ELECTION_MAP_NAMES.CONSTITUENCY,\n [ELECTION_TYPES.PARLEMENT]: ELECTION_MAP_NAMES.PARLEMENT\n};\n\nexport const ELECTION_NAME_TO_TYPE: any = {\n [ELECTION_NAMES.MUNICIPALITY]: ELECTION_TYPES.MUNICIPALITY,\n [ELECTION_NAMES.KANTON]: ELECTION_TYPES.KANTON,\n [ELECTION_NAMES.CONSTITUENCY]: ELECTION_TYPES.CONSTITUENCY,\n [ELECTION_NAMES.PARLEMENT]: ELECTION_TYPES.PARLEMENT\n};\n\nexport type ElectionType = 'M' | 'K' | 'C' | 'P' | '';\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 public type: string = '';\n public entiteitNaam: string = '';\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 vorigelijstnaam: 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 public year: number = 0; // 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 public lastUpdated: Date;\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 2019: EntityResult = new EntityResult(); // current nis = single result\n public 2014: PreviousElection = {};\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/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??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/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&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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=7aa4920d&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/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=7aa4920d&lang=scss&scoped=true&\""],"sourceRoot":""}