inflation-explorer/atoms/default/client/js/app.js (237 lines of code) (raw):

import * as d3 from "d3" import { explorer } from "shared/js/explorer"; console.log("V1.2") var city = 'Australia' var dataSelected = 'index' var currentResults var highlight = ['Gas and other household fuels'] var zoomed = true var colors = false var highlightCat = 'Gas and other household fuels' Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors, highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); var categories = [{"expenditure_class":"──Food──","order":1,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Beef and veal","order":2,"group":"Food","disabled":""}, {"expenditure_class":"Bread","order":3,"group":"Food","disabled":""}, {"expenditure_class":"Breakfast cereals","order":4,"group":"Food","disabled":""}, {"expenditure_class":"Cakes and biscuits","order":5,"group":"Food","disabled":""}, {"expenditure_class":"Cheese","order":6,"group":"Food","disabled":""}, {"expenditure_class":"Coffee, tea and cocoa","order":7,"group":"Food","disabled":""}, {"expenditure_class":"Eggs","order":8,"group":"Food","disabled":""}, {"expenditure_class":"Fish and other seafood","order":9,"group":"Food","disabled":""}, {"expenditure_class":"Food additives and condiments","order":10,"group":"Food","disabled":""}, {"expenditure_class":"Fruit","order":11,"group":"Food","disabled":""}, {"expenditure_class":"Ice cream and other dairy products","order":12,"group":"Food","disabled":""}, {"expenditure_class":"Jams, honey and spreads","order":13,"group":"Food","disabled":""}, {"expenditure_class":"Lamb and goat","order":14,"group":"Food","disabled":""}, {"expenditure_class":"Milk","order":15,"group":"Food","disabled":""}, {"expenditure_class":"Oils and fats","order":16,"group":"Food","disabled":""}, {"expenditure_class":"Other cereal products","order":17,"group":"Food","disabled":""}, {"expenditure_class":"Other food products n.e.c.","order":18,"group":"Food","disabled":""}, {"expenditure_class":"Other meats","order":19,"group":"Food","disabled":""}, {"expenditure_class":"Pork","order":20,"group":"Food","disabled":""}, {"expenditure_class":"Poultry","order":21,"group":"Food","disabled":""}, {"expenditure_class":"Restaurant meals","order":22,"group":"Food","disabled":""}, {"expenditure_class":"Snacks and confectionery","order":23,"group":"Food","disabled":""}, {"expenditure_class":"Take away and fast foods","order":24,"group":"Food","disabled":""}, {"expenditure_class":"Vegetables","order":25,"group":"Food","disabled":""}, {"expenditure_class":"Waters, soft drinks and juices","order":26,"group":"Food","disabled":""}, {"expenditure_class":"──Alcohol and tobacco──","order":27,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Beer","order":28,"group":"Alcohol and tobacco","disabled":""}, {"expenditure_class":"Spirits","order":29,"group":"Alcohol and tobacco","disabled":""}, {"expenditure_class":"Tobacco","order":30,"group":"Alcohol and tobacco","disabled":""}, {"expenditure_class":"Wine","order":31,"group":"Alcohol and tobacco","disabled":""}, {"expenditure_class":"──Clothing──","order":32,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Accessories","order":33,"group":"Clothing","disabled":""}, {"expenditure_class":"Cleaning, repair and hire of clothing and footwear","order":34,"group":"Clothing","disabled":""}, {"expenditure_class":"Footwear for infants and children","order":35,"group":"Clothing","disabled":""}, {"expenditure_class":"Footwear for men","order":36,"group":"Clothing","disabled":""}, {"expenditure_class":"Footwear for women","order":37,"group":"Clothing","disabled":""}, {"expenditure_class":"Garments for infants and children","order":38,"group":"Clothing","disabled":""}, {"expenditure_class":"Garments for men","order":39,"group":"Clothing","disabled":""}, {"expenditure_class":"Garments for women","order":40,"group":"Clothing","disabled":""}, {"expenditure_class":"──Housing──","order":41,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Electricity","order":42,"group":"Housing","disabled":""}, {"expenditure_class":"Gas and other household fuels","order":43,"group":"Housing","disabled":""}, {"expenditure_class":"Maintenance and repair of the dwelling","order":44,"group":"Housing","disabled":""}, {"expenditure_class":"New dwelling purchase by owner-occupiers","order":45,"group":"Housing","disabled":""}, {"expenditure_class":"Property rates and charges","order":46,"group":"Housing","disabled":""}, {"expenditure_class":"Rents","order":47,"group":"Housing","disabled":""}, {"expenditure_class":"Water and sewerage","order":48,"group":"Housing","disabled":""}, {"expenditure_class":"──Household and services──","order":49,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Carpets and other floor coverings","order":50,"group":"Household and services","disabled":""}, {"expenditure_class":"Child care","order":51,"group":"Household and services","disabled":""}, {"expenditure_class":"Cleaning and maintenance products","order":52,"group":"Household and services","disabled":""}, {"expenditure_class":"Furniture","order":53,"group":"Household and services","disabled":""}, {"expenditure_class":"Glassware, tableware and household utensils","order":54,"group":"Household and services","disabled":""}, {"expenditure_class":"Hairdressing and personal grooming services","order":55,"group":"Household and services","disabled":""}, {"expenditure_class":"Household textiles","order":56,"group":"Household and services","disabled":""}, {"expenditure_class":"Major household appliances","order":57,"group":"Household and services","disabled":""}, {"expenditure_class":"Other household services","order":58,"group":"Household and services","disabled":""}, {"expenditure_class":"Other non-durable household products","order":59,"group":"Household and services","disabled":""}, {"expenditure_class":"Personal care products","order":60,"group":"Household and services","disabled":""}, {"expenditure_class":"Small electric household appliances","order":61,"group":"Household and services","disabled":""}, {"expenditure_class":"Tools and equipment for house and garden","order":62,"group":"Household and services","disabled":""}, {"expenditure_class":"──Health──","order":63,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Dental services","order":64,"group":"Health","disabled":""}, {"expenditure_class":"Medical and hospital services","order":65,"group":"Health","disabled":""}, {"expenditure_class":"Pharmaceutical products","order":66,"group":"Health","disabled":""}, {"expenditure_class":"Therapeutic appliances and equipment","order":67,"group":"Health","disabled":""}, {"expenditure_class":"──Transport──","order":68,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Automotive fuel","order":69,"group":"Transport","disabled":""}, {"expenditure_class":"Maintenance and repair of motor vehicles","order":70,"group":"Transport","disabled":""}, {"expenditure_class":"Motor vehicles","order":71,"group":"Transport","disabled":""}, {"expenditure_class":"Other services in respect of motor vehicles","order":72,"group":"Transport","disabled":""}, {"expenditure_class":"Spare parts and accessories for motor vehicles","order":73,"group":"Transport","disabled":""}, {"expenditure_class":"Urban transport fares","order":74,"group":"Transport","disabled":""}, {"expenditure_class":"──Communication──","order":75,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Audio, visual and computing equipment","order":76,"group":"Communication","disabled":""}, {"expenditure_class":"Audio, visual and computing media and services","order":77,"group":"Communication","disabled":""}, {"expenditure_class":"Postal services","order":78,"group":"Communication","disabled":""}, {"expenditure_class":"Telecommunication equipment and services","order":79,"group":"Communication","disabled":""}, {"expenditure_class":"──Recreation and culture──","order":80,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Books","order":81,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Domestic holiday travel and accommodation","order":82,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Equipment for sports, camping and open-air recreation","order":83,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Games, toys and hobbies","order":84,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"International holiday travel and accommodation","order":85,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Newspapers, magazines and stationery","order":86,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Other recreational, sporting and cultural services","order":87,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Pets and related products","order":88,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Sports participation","order":89,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"Veterinary and other services for pets","order":90,"group":"Recreation and culture","disabled":""}, {"expenditure_class":"──Education──","order":91,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Preschool and primary education","order":92,"group":"Education","disabled":""}, {"expenditure_class":"Secondary education","order":93,"group":"Education","disabled":""}, {"expenditure_class":"Tertiary education","order":94,"group":"Education","disabled":""}, {"expenditure_class":"──Financial──","order":95,"group":"divider","disabled":"disabled"}, {"expenditure_class":"Insurance","order":96,"group":"Financial","disabled":""}] var cities = ['Australia','Sydney','Melbourne','Brisbane','Adelaide','Perth','Canberra','Darwin'] var citySelector = d3.select(".inflation #citySelector") cities.forEach(function (d) { citySelector.append("option") .attr("value",d) .text(d) }) var categorySelector = d3.select(".inflation #categorySelector") // console.log(categorySelector.property('value') categories.forEach(function (d) { categorySelector.append("option") .attr("value",d.expenditure_class) .text(d.expenditure_class) // .property(() => { // if (d.disabled == "disabled") { // return "disabled" // } // }) }) let element = document.getElementById('categorySelector'); element.value = 'Gas and other household fuels'; var dataSelector = d3.select(".inflation #dataSelector") var data = [ {"id":"index", "text":"Price index"}, {"id":"pct_year", "text":"Yearly % change"}, ] data.forEach(function (d) { dataSelector.append("option") .attr("value",d.id) .text(d.text) }) citySelector.on("change", function() { d3.select(".inflation #loadingContainer").style("display","block") city = d3.select(this).property('value') console.log(city) Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors,highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); }); categorySelector.on("change", function() { d3.select(".inflation #loadingContainer").style("display","block") var selection = d3.select(this).property('value') if (selection[0] == "─") { var group = selection.replace(/─/g, "") highlightCat = group console.log(group) var results = categories.filter((e) => e.group == group) console.log("results", results) highlight = results.map(a => a.expenditure_class); } else { highlight = [d3.select(this).property('value')] highlightCat = d3.select(this).property('value') } console.log(city) Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors, highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); }); dataSelector.on("change", function() { d3.select(".inflation #loadingContainer").style("display","block") dataSelected = d3.select(this).property('value') console.log(dataSelected) Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors, highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); }); var zoomSelector = d3.select(".inflation #zoomed") zoomSelector.on("change", function() { if (zoomed == true) { zoomed = false } else if (zoomed == false) { zoomed = true } console.log("zoomed", zoomed) Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors, highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); }) var colorSelector = d3.select(".inflation #categoryColor") colorSelector.on("change", function() { if (colors == true) { colors = false } else if (colors == false) { colors = true } Promise.all([ d3.csv(`<%= path %>/${city}-${dataSelected}.csv`) // d3.json(`https://interactive.guim.co.uk/2022/02/river-heights/${selected}`) ]) .then((results) => { explorer(results[0], city, dataSelected, highlight, zoomed, colors, highlightCat) currentResults = results[0] d3.select(".inflation #loadingContainer").style("display","none") }); }) var to=null var lastWidth = document.querySelector(`.inflation #graphicContainer`).getBoundingClientRect() window.addEventListener('resize', function() { var thisWidth = document.querySelector(`.inflation #graphicContainer`).getBoundingClientRect() console.log("resizing") if (lastWidth != thisWidth) { window.clearTimeout(to); to = window.setTimeout(function() { explorer(currentResults, city, dataSelected, highlight, zoomed, colors, highlightCat) }, 100) } })