/* Admap - Vue.js app Summary: Loads Senate/House/Gov maps and scores Dependencies: Vue js 2.5.13 Axios 0.18.0 Browser Requirements: IE9+ */ Vue.component('rc-container', { template: ' \
\ \ \ \ \ \
\ ', data : function() { return { promises : [], senate_top_level_data : { 'map_url' : '', 'map_final_url' : '', 'dem_num' : 0, 'gop_num' : 0, 'tossups' : 0, 'change' : '', 'spread_aff' : '' }, governor_top_level_data : { 'map_url' : '', 'map_final_url' : '', 'dem_num' : 0, 'gop_num' : 0, 'tossups' : 0, 'change' : '', 'spread_aff' : '' }, house_top_level_data : { 'map_url' : '', 'dem_num' : 0, 'gop_num' : 0, 'tossups' : 0 }, won_seats: { "senate": { "gop": 0, "dem": 0, "other": 0 }, "governor": { "gop": 0, "dem": 0, "other": 0 }, "house": { "gop": 0, "dem": 0, "other": 0 } }, net_seats: { "senate": { "gop": 0, "dem": 0, "other": 0 }, "governor": { "gop": 0, "dem": 0, "other": 0 }, "house": { "gop": 0, "dem": 0, "other": 0 } }, cache_bust : Math.floor((new Date()).getTime() / 25000), // Changes every 25 seconds current_page : 'senate', page_names : [ 'senate', 'senate_final', 'governor', 'governor_final', 'house', 'house_final' ], page_interval : [] } }, created : function() { this.load_content(); }, methods : { net_display : function(num) { if(num > 0) { return '(+'+num+')'; } else if(num < 0) { return '('+num+')'; } else { return ''; } }, isXML : function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }, set_current_page : function(current_page) { this.current_page = current_page; clearInterval(this.page_interval); }, load_content : function() { this.page_interval = setInterval(function() { var new_index = this.page_names.indexOf(this.current_page) + 1; if(new_index > this.page_names.length - 1) { new_index = 0; } this.current_page = this.page_names[new_index]; }.bind(this), 20000); // Load homepage final data this.promises.push(axios({ method: 'get', url: '/elections/live_results/2018/homepage.json?cache_bust='+this.cache_bust })); // Load senate snapshot this.promises.push(axios({ method: 'get', url: '/epolls/2018/senate/35_seats.xml?cache_bust='+this.cache_bust, responseType: 'document' })); // Load house snapshot this.promises.push(axios({ method: 'get', url: '/epolls/2018/house/37_seats.xml?cache_bust='+this.cache_bust, responseType: 'document' })); // Load governor snapshot this.promises.push(axios({ method: 'get', url: '/epolls/2018/governor/36_seats.xml?cache_bust='+this.cache_bust, responseType: 'document' })); axios.all(this.promises) .catch(function(error) { console.log(error); }) .then(function(results) { // Senate / House / Governor snapshots for(var i = 0; i < results.length; i++) { if(this.isXML(results[i].data) && results[i].data.firstChild.getAttribute('name') == 'Battle for the Senate 2018') { this.senate_top_level_data['dem_num'] = results[i].data.querySelector('affiliation[name="Democrats"]').getAttribute('projected_seats'); this.senate_top_level_data['gop_num'] = results[i].data.querySelector('affiliation[name="Republicans"]').getAttribute('projected_seats'); this.senate_top_level_data['tossups'] = results[i].data.querySelector('election').getAttribute('toss_up'); this.senate_top_level_data['map_url'] = results[i].data.querySelector('election').getAttribute('url'); } } for(var i = 0; i < results.length; i++) { if(this.isXML(results[i].data) && results[i].data.firstChild.getAttribute('name') == '2018 Governor Races') { this.governor_top_level_data['dem_num'] = results[i].data.querySelector('affiliation[name="Democrats"]').getAttribute('projected_seats'); this.governor_top_level_data['gop_num'] = results[i].data.querySelector('affiliation[name="Republicans"]').getAttribute('projected_seats'); this.governor_top_level_data['tossups'] = results[i].data.querySelector('election').getAttribute('toss_up'); this.governor_top_level_data['map_url'] = results[i].data.querySelector('election').getAttribute('url'); } } for(var i = 0; i < results.length; i++) { if(this.isXML(results[i].data) && results[i].data.firstChild.getAttribute('name') == 'Battle for the House 2018') { this.house_top_level_data['dem_num'] = results[i].data.querySelector('affiliation[name="Democrats"]').getAttribute('projected_seats'); this.house_top_level_data['gop_num'] = results[i].data.querySelector('affiliation[name="Republicans"]').getAttribute('projected_seats'); this.house_top_level_data['tossups'] = results[i].data.querySelector('election').getAttribute('toss_up'); this.house_top_level_data['map_url'] = results[i].data.querySelector('election').getAttribute('url'); } } // Final Data for(var i = 0; i < results.length; i++) { if(typeof results[i].data.won_seats !== 'undefined') { console.log('hereA'); this.won_seats = results[i].data.won_seats; this.net_seats = results[i].data.net_seats; } } }.bind(this)); } } }); // Start App new Vue({ el: '#admap-app' });