edit sentiment scale

edit sentiment scale

--- airbnb/coffee/vis.coffee
+++ airbnb/coffee/vis.coffee
@@ -408,210 +408,210 @@
     .call(plot)

 texts = [
-  {key:"allerton", file:"allerton.csv", name:"Allerton", num:"456 reviews", pos:"Average 'positive sentiment' per review: 32.49", stars:"Average star rating: 4.53"}
-{key:"ardenheights", file:"ardenheights.csv", name:"Arden Heights", num:"24 reviews", pos:"Average 'positive sentiment' per review: 43.6", stars:"Average star rating: 4.96"}
-{key:"arrochar", file:"arrochar.csv", name:"Arrochar", num:"12 reviews", pos:"Average 'positive sentiment' per review: 51.36", stars:"Average star rating: 4.92"}
-{key:"arverne", file:"arverne.csv", name:"Arverne", num:"495 reviews", pos:"Average 'positive sentiment' per review: 38.35", stars:"Average star rating: 4.74"}
-{key:"astoria", file:"astoria.csv", name:"Astoria", num:"7038 reviews", pos:"Average 'positive sentiment' per review: 35.68", stars:"Average star rating: 4.63"}
-{key:"bathbeach", file:"bathbeach.csv", name:"Bath Beach", num:"26 reviews", pos:"Average 'positive sentiment' per review: 36.78", stars:"Average star rating: 4.88"}
-{key:"batteryparkcity", file:"batteryparkcity.csv", name:"Battery Park City", num:"563 reviews", pos:"Average 'positive sentiment' per review: 40.07", stars:"Average star rating: 4.67"}
-{key:"bayridge", file:"bayridge.csv", name:"Bay Ridge", num:"522 reviews", pos:"Average 'positive sentiment' per review: 37.63", stars:"Average star rating: 4.67"}
-{key:"bayterrace", file:"bayterrace.csv", name:"Bay Terrace", num:"43 reviews", pos:"Average 'positive sentiment' per review: 34.91", stars:"Average star rating: 4.71"}
-{key:"bayterrace,statenisland", file:"bayterrace,statenisland.csv", name:"Bay Terrace, Staten Island", num:"6 reviews", pos:"Average 'positive sentiment' per review: 37.25", stars:"Average star rating: 4.5"}
-{key:"baychester", file:"baychester.csv", name:"Baychester", num:"1 reviews", pos:"Average 'positive sentiment' per review: 12.95", stars:"Average star rating: 3.0"}
-{key:"bayside", file:"bayside.csv", name:"Bayside", num:"57 reviews", pos:"Average 'positive sentiment' per review: 37.24", stars:"Average star rating: 4.46"}
-{key:"bayswater", file:"bayswater.csv", name:"Bayswater", num:"61 reviews", pos:"Average 'positive sentiment' per review: 37.35", stars:"Average star rating: 4.55"}
-{key:"bedford-stuyvesant", file:"bedford-stuyvesant.csv", name:"Bedford-Stuyvesant", num:"28302 reviews", pos:"Average 'positive sentiment' per review: 35.0", stars:"Average star rating: 4.56"}
-{key:"belleharbor", file:"belleharbor.csv", name:"Belle Harbor", num:"1 reviews", pos:"Average 'positive sentiment' per review: 34.63", stars:"Average star rating: 5.0"}
-{key:"bellerose", file:"bellerose.csv", name:"Bellerose", num:"33 reviews", pos:"Average 'positive sentiment' per review: 35.38", stars:"Average star rating: 4.2"}
-{key:"belmont", file:"belmont.csv", name:"Belmont", num:"85 reviews", pos:"Average 'positive sentiment' per review: 38.3", stars:"Average star rating: 4.4"}
-{key:"bensonhurst", file:"bensonhurst.csv", name:"Bensonhurst", num:"246 reviews", pos:"Average 'positive sentiment' per review: 33.31", stars:"Average star rating: 4.58"}
-{key:"bergenbeach", file:"bergenbeach.csv", name:"Bergen Beach", num:"23 reviews", pos:"Average 'positive sentiment' per review: 35.01", stars:"Average star rating: 4.52"}
-{key:"boerumhill", file:"boerumhill.csv", name:"Boerum Hill", num:"1866 reviews", pos:"Average 'positive sentiment' per review: 38.67", stars:"Average star rating: 4.73"}
-{key:"boroughpark", file:"boroughpark.csv", name:"Borough Park", num:"611 reviews", pos:"Average 'positive sentiment' per review: 32.57", stars:"Average star rating: 4.26"}
-{key:"briarwood", file:"briarwood.csv", name:"Briarwood", num:"251 reviews", pos:"Average 'positive sentiment' per review: 36.26", stars:"Average star rating: 4.74"}
-{key:"brightonbeach", file:"brightonbeach.csv", name:"Brighton Beach", num:"288 reviews", pos:"Average 'positive sentiment' per review: 34.75", stars:"Average star rating: 4.62"}
-{key:"bronxdale", file:"bronxdale.csv", name:"Bronxdale", num:"33 reviews", pos:"Average 'positive sentiment' per review: 37.37", stars:"Average star rating: 4.88"}
-{key:"brooklynheights", file:"brooklynheights.csv", name:"Brooklyn Heights", num:"1425 reviews", pos:"Average 'positive sentiment' per review: 39.64", stars:"Average star rating: 4.7"}
-{key:"brownsville", file:"brownsville.csv", name:"Brownsville", num:"275 reviews", pos:"Average 'positive sentiment' per review: 36.18", stars:"Average star rating: 4.48"}
-{key:"bushwick", file:"bushwick.csv", name:"Bushwick", num:"16061 reviews", pos:"Average 'positive sentiment' per review: 35.97", stars:"Average star rating: 4.58"}
-{key:"cambriaheights", file:"cambriaheights.csv", name:"Cambria Heights", num:"41 reviews", pos:"Average 'positive sentiment' per review: 36.04", stars:"Average star rating: 4.65"}
-{key:"canarsie", file:"canarsie.csv", name:"Canarsie", num:"711 reviews", pos:"Average 'positive sentiment' per review: 33.62", stars:"Average star rating: 4.55"}
-{key:"carrollgardens", file:"carrollgardens.csv", name:"Carroll Gardens", num:"1617 reviews", pos:"Average 'positive sentiment' per review: 39.59", stars:"Average star rating: 4.7"}
-{key:"castletoncorners", file:"castletoncorners.csv", name:"Castleton Corners", num:"47 reviews", pos:"Average 'positive sentiment' per review: 35.07", stars:"Average star rating: 4.73"}
-{key:"chelsea", file:"chelsea.csv", name:"Chelsea", num:"13774 reviews", pos:"Average 'positive sentiment' per review: 38.01", stars:"Average star rating: 4.64"}
-{key:"chinatown", file:"chinatown.csv", name:"Chinatown", num:"4475 reviews", pos:"Average 'positive sentiment' per review: 36.35", stars:"Average star rating: 4.55"}
-{key:"cityisland", file:"cityisland.csv", name:"City Island", num:"147 reviews", pos:"Average 'positive sentiment' per review: 36.32", stars:"Average star rating: 4.82"}
-{key:"civiccenter", file:"civiccenter.csv", name:"Civic Center", num:"268 reviews", pos:"Average 'positive sentiment' per review: 37.1", stars:"Average star rating: 4.64"}
-{key:"claremontvillage", file:"claremontvillage.csv", name:"Claremont Village", num:"210 reviews", pos:"Average 'positive sentiment' per review: 36.22", stars:"Average star rating: 4.61"}
-{key:"clasonpoint", file:"clasonpoint.csv", name:"Clason Point", num:"36 reviews", pos:"Average 'positive sentiment' per review: 35.06", stars:"Average star rating: 4.65"}
-{key:"clifton", file:"clifton.csv", name:"Clifton", num:"157 reviews", pos:"Average 'positive sentiment' per review: 30.38", stars:"Average star rating: 4.73"}
-{key:"clintonhill", file:"clintonhill.csv", name:"Clinton Hill", num:"6409 reviews", pos:"Average 'positive sentiment' per review: 38.08", stars:"Average star rating: 4.65"}
-{key:"co-opcity", file:"co-opcity.csv", name:"Co-op City", num:"27 reviews", pos:"Average 'positive sentiment' per review: 34.44", stars:"Average star rating: 4.78"}
-{key:"cobblehill", file:"cobblehill.csv", name:"Cobble Hill", num:"1001 reviews", pos:"Average 'positive sentiment' per review: 41.51", stars:"Average star rating: 4.76"}
-{key:"collegepoint", file:"collegepoint.csv", name:"College Point", num:"20 reviews", pos:"Average 'positive sentiment' per review: 41.92", stars:"Average star rating: 4.95"}
-{key:"columbiast", file:"columbiast.csv", name:"Columbia St", num:"411 reviews", pos:"Average 'positive sentiment' per review: 35.49", stars:"Average star rating: 4.54"}
-{key:"concord", file:"concord.csv", name:"Concord", num:"154 reviews", pos:"Average 'positive sentiment' per review: 40.17", stars:"Average star rating: 4.64"}
-{key:"concourse", file:"concourse.csv", name:"Concourse", num:"397 reviews", pos:"Average 'positive sentiment' per review: 33.46", stars:"Average star rating: 4.57"}
-{key:"concoursevillage", file:"concoursevillage.csv", name:"Concourse Village", num:"166 reviews", pos:"Average 'positive sentiment' per review: 29.98", stars:"Average star rating: 4.25"}
-{key:"coneyisland", file:"coneyisland.csv", name:"Coney Island", num:"84 reviews", pos:"Average 'positive sentiment' per review: 41.56", stars:"Average star rating: 4.63"}
-{key:"corona", file:"corona.csv", name:"Corona", num:"362 reviews", pos:"Average 'positive sentiment' per review: 33.63", stars:"Average star rating: 4.5"}
-{key:"countryclub", file:"countryclub.csv", name:"Country Club", num:"30 reviews", pos:"Average 'positive sentiment' per review: 38.83", stars:"Average star rating: 4.85"}
-{key:"crownheights", file:"crownheights.csv", name:"Crown Heights", num:"11861 reviews", pos:"Average 'positive sentiment' per review: 36.21", stars:"Average star rating: 4.6"}
-{key:"cypresshills", file:"cypresshills.csv", name:"Cypress Hills", num:"606 reviews", pos:"Average 'positive sentiment' per review: 35.07", stars:"Average star rating: 4.51"}
-{key:"dumbo", file:"dumbo.csv", name:"DUMBO", num:"368 reviews", pos:"Average 'positive sentiment' per review: 41.34", stars:"Average star rating: 4.76"}
-{key:"ditmarssteinway", file:"ditmarssteinway.csv", name:"Ditmars Steinway", num:"2328 reviews", pos:"Average 'positive sentiment' per review: 35.51", stars:"Average star rating: 4.62"}
-{key:"donganhills", file:"donganhills.csv", name:"Dongan Hills", num:"10 reviews", pos:"Average 'positive sentiment' per review: 52.68", stars:"Average star rating: 5.0"}
-{key:"downtownbrooklyn", file:"downtownbrooklyn.csv", name:"Downtown Brooklyn", num:"654 reviews", pos:"Average 'positive sentiment' per review: 38.74", stars:"Average star rating: 4.65"}
-{key:"dykerheights", file:"dykerheights.csv", name:"Dyker Heights", num:"135 reviews", pos:"Average 'positive sentiment' per review: 36.05", stars:"Average star rating: 4.3"}
-{key:"eastelmhurst", file:"eastelmhurst.csv", name:"East Elmhurst", num:"1059 reviews", pos:"Average 'positive sentiment' per review: 34.49", stars:"Average star rating: 4.67"}
-{key:"eastflatbush", file:"eastflatbush.csv", name:"East Flatbush", num:"1871 reviews", pos:"Average 'positive sentiment' per review: 35.37", stars:"Average star rating: 4.51"}
-{key:"eastharlem", file:"eastharlem.csv", name:"East Harlem", num:"12839 reviews", pos:"Average 'positive sentiment' per review: 32.3", stars:"Average star rating: 4.5"}
-{key:"eastmorrisania", file:"eastmorrisania.csv", name:"East Morrisania", num:"13 reviews", pos:"Average 'positive sentiment' per review: 27.19", stars:"Average star rating: 4.23"}
-{key:"eastnewyork", file:"eastnewyork.csv", name:"East New York", num:"910 reviews", pos:"Average 'positive sentiment' per review: 32.58", stars:"Average star rating: 4.5"}
-{key:"eastvillage", file:"eastvillage.csv", name:"East Village", num:"28959 reviews", pos:"Average 'positive sentiment' per review: 37.56", stars:"Average star rating: 4.58"}
-{key:"eastchester", file:"eastchester.csv", name:"Eastchester", num:"38 reviews", pos:"Average 'positive sentiment' per review: 33.78", stars:"Average star rating: 4.76"}
-{key:"elmhurst", file:"elmhurst.csv", name:"Elmhurst", num:"728 reviews", pos:"Average 'positive sentiment' per review: 32.17", stars:"Average star rating: 4.53"}
-{key:"eltingville", file:"eltingville.csv", name:"Eltingville", num:"44 reviews", pos:"Average 'positive sentiment' per review: 42.0", stars:"Average star rating: 4.8"}
-{key:"emersonhill", file:"emersonhill.csv", name:"Emerson Hill", num:"60 reviews", pos:"Average 'positive sentiment' per review: 31.62", stars:"Average star rating: 4.44"}
-{key:"farrockaway", file:"farrockaway.csv", name:"Far Rockaway", num:"61 reviews", pos:"Average 'positive sentiment' per review: 33.26", stars:"Average star rating: 4.62"}
-{key:"fieldston", file:"fieldston.csv", name:"Fieldston", num:"8 reviews", pos:"Average 'positive sentiment' per review: 44.49", stars:"Average star rating: 4.89"}
-{key:"financialdistrict", file:"financialdistrict.csv", name:"Financial District", num:"2045 reviews", pos:"Average 'positive sentiment' per review: 39.49", stars:"Average star rating: 4.74"}
-{key:"flatbush", file:"flatbush.csv", name:"Flatbush", num:"3888 reviews", pos:"Average 'positive sentiment' per review: 36.94", stars:"Average star rating: 4.63"}
-{key:"flatirondistrict", file:"flatirondistrict.csv", name:"Flatiron District", num:"917 reviews", pos:"Average 'positive sentiment' per review: 39.88", stars:"Average star rating: 4.72"}
-{key:"flatlands", file:"flatlands.csv", name:"Flatlands", num:"226 reviews", pos:"Average 'positive sentiment' per review: 32.32", stars:"Average star rating: 4.54"}
-{key:"flushing", file:"flushing.csv", name:"Flushing", num:"1773 reviews", pos:"Average 'positive sentiment' per review: 34.01", stars:"Average star rating: 4.54"}
-{key:"fordham", file:"fordham.csv", name:"Fordham", num:"98 reviews", pos:"Average 'positive sentiment' per review: 36.78", stars:"Average star rating: 4.76"}
-{key:"foresthills", file:"foresthills.csv", name:"Forest Hills", num:"616 reviews", pos:"Average 'positive sentiment' per review: 36.92", stars:"Average star rating: 4.58"}
-{key:"fortgreene", file:"fortgreene.csv", name:"Fort Greene", num:"6104 reviews", pos:"Average 'positive sentiment' per review: 38.62", stars:"Average star rating: 4.69"}
-{key:"forthamilton", file:"forthamilton.csv", name:"Fort Hamilton", num:"176 reviews", pos:"Average 'positive sentiment' per review: 36.78", stars:"Average star rating: 4.6"}
-{key:"freshmeadows", file:"freshmeadows.csv", name:"Fresh Meadows", num:"13 reviews", pos:"Average 'positive sentiment' per review: 40.61", stars:"Average star rating: 4.54"}
-{key:"gerritsenbeach", file:"gerritsenbeach.csv", name:"Gerritsen Beach", num:"30 reviews", pos:"Average 'positive sentiment' per review: 28.28", stars:"Average star rating: 4.25"}
-{key:"glendale", file:"glendale.csv", name:"Glendale", num:"78 reviews", pos:"Average 'positive sentiment' per review: 38.25", stars:"Average star rating: 4.89"}
-{key:"gowanus", file:"gowanus.csv", name:"Gowanus", num:"1903 reviews", pos:"Average 'positive sentiment' per review: 37.71", stars:"Average star rating: 4.68"}
-{key:"gramercy", file:"gramercy.csv", name:"Gramercy", num:"3206 reviews", pos:"Average 'positive sentiment' per review: 38.02", stars:"Average star rating: 4.64"}
-{key:"graniteville", file:"graniteville.csv", name:"Graniteville", num:"70 reviews", pos:"Average 'positive sentiment' per review: 36.26", stars:"Average star rating: 4.66"}
-{key:"gravesend", file:"gravesend.csv", name:"Gravesend", num:"88 reviews", pos:"Average 'positive sentiment' per review: 38.48", stars:"Average star rating: 4.77"}
-{key:"greatkills", file:"greatkills.csv", name:"Great Kills", num:"8 reviews", pos:"Average 'positive sentiment' per review: 33.51", stars:"Average star rating: 5.0"}
-{key:"greenpoint", file:"greenpoint.csv", name:"Greenpoint", num:"7720 reviews", pos:"Average 'positive sentiment' per review: 39.88", stars:"Average star rating: 4.71"}
-{key:"greenwichvillage", file:"greenwichvillage.csv", name:"Greenwich Village", num:"5623 reviews", pos:"Average 'positive sentiment' per review: 38.45", stars:"Average star rating: 4.6"}
-{key:"grymeshill", file:"grymeshill.csv", name:"Grymes Hill", num:"12 reviews", pos:"Average 'positive sentiment' per review: 40.7", stars:"Average star rating: 4.91"}
-{key:"harlem", file:"harlem.csv", name:"Harlem", num:"26742 reviews", pos:"Average 'positive sentiment' per review: 34.39", stars:"Average star rating: 4.6"}
-{key:"hell'skitchen", file:"hell'skitchen.csv", name:"Hell's Kitchen", num:"19833 reviews", pos:"Average 'positive sentiment' per review: 35.03", stars:"Average star rating: 4.55"}
-{key:"highbridge", file:"highbridge.csv", name:"Highbridge", num:"137 reviews", pos:"Average 'positive sentiment' per review: 40.53", stars:"Average star rating: 4.7"}
-{key:"hollis", file:"hollis.csv", name:"Hollis", num:"17 reviews", pos:"Average 'positive sentiment' per review: 34.49", stars:"Average star rating: 3.98"}
-{key:"hollishills", file:"hollishills.csv", name:"Hollis Hills", num:"14 reviews", pos:"Average 'positive sentiment' per review: 33.06", stars:"Average star rating: 4.8"}
-{key:"holliswood", file:"holliswood.csv", name:"Holliswood", num:"3 reviews", pos:"Average 'positive sentiment' per review: 22.56", stars:"Average star rating: 4.67"}
-{key:"howardbeach", file:"howardbeach.csv", name:"Howard Beach", num:"12 reviews", pos:"Average 'positive sentiment' per review: 25.11", stars:"Average star rating: 4.25"}
-{key:"huntspoint", file:"huntspoint.csv", name:"Hunts Point", num:"5 reviews", pos:"Average 'positive sentiment' per review: 38.68", stars:"Average star rating: 4.4"}
-{key:"inwood", file:"inwood.csv", name:"Inwood", num:"1827 reviews", pos:"Average 'positive sentiment' per review: 34.0", stars:"Average star rating: 4.55"}
-{key:"jacksonheights", file:"jacksonheights.csv", name:"Jackson Heights", num:"1730 reviews", pos:"Average 'positive sentiment' per review: 34.64", stars:"Average star rating: 4.56"}
-{key:"jamaica", file:"jamaica.csv", name:"Jamaica", num:"811 reviews", pos:"Average 'positive sentiment' per review: 33.78", stars:"Average star rating: 4.45"}
-{key:"jamaicaestates", file:"jamaicaestates.csv", name:"Jamaica Estates", num:"82 reviews", pos:"Average 'positive sentiment' per review: 34.74", stars:"Average star rating: 4.41"}
-{key:"jamaicahills", file:"jamaicahills.csv", name:"Jamaica Hills", num:"10 reviews", pos:"Average 'positive sentiment' per review: 40.26", stars:"Average star rating: 4.0"}
-{key:"kensington", file:"kensington.csv", name:"Kensington", num:"831 reviews", pos:"Average 'positive sentiment' per review: 37.48", stars:"Average star rating: 4.68"}
-{key:"kewgardens", file:"kewgardens.csv", name:"Kew Gardens", num:"255 reviews", pos:"Average 'positive sentiment' per review: 35.58", stars:"Average star rating: 4.52"}
-{key:"kewgardenshills", file:"kewgardenshills.csv", name:"Kew Gardens Hills", num:"63 reviews", pos:"Average 'positive sentiment' per review: 32.96", stars:"Average star rating: 4.42"}
-{key:"kingsbridge", file:"kingsbridge.csv", name:"Kingsbridge", num:"99 reviews", pos:"Average 'positive sentiment' per review: 41.77", stars:"Average star rating: 4.65"}
-{key:"kipsbay", file:"kipsbay.csv", name:"Kips Bay", num:"4019 reviews", pos:"Average 'positive sentiment' per review: 36.25", stars:"Average star rating: 4.56"}
-{key:"laurelton", file:"laurelton.csv", name:"Laurelton", num:"44 reviews", pos:"Average 'positive sentiment' per review: 38.21", stars:"Average star rating: 4.46"}
-{key:"lighthousehill", file:"lighthousehill.csv", name:"Lighthouse Hill", num:"11 reviews", pos:"Average 'positive sentiment' per review: 44.32", stars:"Average star rating: 4.65"}
-{key:"littleitaly", file:"littleitaly.csv", name:"Little Italy", num:"1177 reviews", pos:"Average 'positive sentiment' per review: 35.73", stars:"Average star rating: 4.53"}
-{key:"longislandcity", file:"longislandcity.csv", name:"Long Island City", num:"5062 reviews", pos:"Average 'positive sentiment' per review: 34.68", stars:"Average star rating: 4.59"}
-{key:"longwood", file:"longwood.csv", name:"Longwood", num:"159 reviews", pos:"Average 'positive sentiment' per review: 34.27", stars:"Average star rating: 4.61"}
-{key:"lowereastside", file:"lowereastside.csv", name:"Lower East Side", num:"14713 reviews", pos:"Average 'positive sentiment' per review: 37.22", stars:"Average star rating: 4.58"}
-{key:"manhattanbeach", file:"manhattanbeach.csv", name:"Manhattan Beach", num:"61 reviews", pos:"Average 'positive sentiment' per review: 33.35", stars:"Average star rating: 4.82"}
-{key:"marblehill", file:"marblehill.csv", name:"Marble Hill", num:"79 reviews", pos:"Average 'positive sentiment' per review: 34.54", stars:"Average star rating: 4.89"}
-{key:"marinersharbor", file:"marinersharbor.csv", name:"Mariners Harbor", num:"136 reviews", pos:"Average 'positive sentiment' per review: 36.67", stars:"Average star rating: 4.75"}
-{key:"maspeth", file:"maspeth.csv", name:"Maspeth", num:"392 reviews", pos:"Average 'positive sentiment' per review: 32.33", stars:"Average star rating: 4.46"}
-{key:"melrose", file:"melrose.csv", name:"Melrose", num:"48 reviews", pos:"Average 'positive sentiment' per review: 34.16", stars:"Average star rating: 4.14"}
-{key:"middlevillage", file:"middlevillage.csv", name:"Middle Village", num:"174 reviews", pos:"Average 'positive sentiment' per review: 33.25", stars:"Average star rating: 4.65"}
-{key:"midlandbeach", file:"midlandbeach.csv", name:"Midland Beach", num:"36 reviews", pos:"Average 'positive sentiment' per review: 35.36", stars:"Average star rating: 4.51"}
-{key:"midtown", file:"midtown.csv", name:"Midtown", num:"10485 reviews", pos:"Average 'positive sentiment' per review: 35.71", stars:"Average star rating: 4.59"}
-{key:"midwood", file:"midwood.csv", name:"Midwood", num:"490 reviews", pos:"Average 'positive sentiment' per review: 35.62", stars:"Average star rating: 4.65"}
-{key:"millbasin", file:"millbasin.csv", name:"Mill Basin", num:"2 reviews", pos:"Average 'positive sentiment' per review: 40.45", stars:"Average star rating: 4.0"}
-{key:"morningsideheights", file:"morningsideheights.csv", name:"Morningside Heights", num:"1900 reviews", pos:"Average 'positive sentiment' per review: 36.34", stars:"Average star rating: 4.59"}
-{key:"morrisheights", file:"morrisheights.csv", name:"Morris Heights", num:"102 reviews", pos:"Average 'positive sentiment' per review: 32.68", stars:"Average star rating: 4.44"}
-{key:"morrispark", file:"morrispark.csv", name:"Morris Park", num:"209 reviews", pos:"Average 'positive sentiment' per review: 35.78", stars:"Average star rating: 4.41"}
-{key:"morrisania", file:"morrisania.csv", name:"Morrisania", num:"34 reviews", pos:"Average 'positive sentiment' per review: 30.42", stars:"Average star rating: 4.09"}
-{key:"motthaven", file:"motthaven.csv", name:"Mott Haven", num:"495 reviews", pos:"Average 'positive sentiment' per review: 34.81", stars:"Average star rating: 4.71"}
-{key:"mounthope", file:"mounthope.csv", name:"Mount Hope", num:"95 reviews", pos:"Average 'positive sentiment' per review: 36.53", stars:"Average star rating: 4.68"}
-{key:"murrayhill", file:"murrayhill.csv", name:"Murray Hill", num:"2201 reviews", pos:"Average 'positive sentiment' per review: 35.94", stars:"Average star rating: 4.56"}
-{key:"navyyard", file:"navyyard.csv", name:"Navy Yard", num:"43 reviews", pos:"Average 'positive sentiment' per review: 40.39", stars:"Average star rating: 4.73"}
-{key:"neponsit", file:"neponsit.csv", name:"Neponsit", num:"9 reviews", pos:"Average 'positive sentiment' per review: 40.53", stars:"Average star rating: 5.0"}
-{key:"newbrighton", file:"newbrighton.csv", name:"New Brighton", num:"110 reviews", pos:"Average 'positive sentiment' per review: 32.44", stars:"Average star rating: 4.34"}
-{key:"newdorpbeach", file:"newdorpbeach.csv", name:"New Dorp Beach", num:"39 reviews", pos:"Average 'positive sentiment' per review: 39.11", stars:"Average star rating: 4.66"}
-{key:"newspringville", file:"newspringville.csv", name:"New Springville", num:"24 reviews", pos:"Average 'positive sentiment' per review: 41.11", stars:"Average star rating: 4.76"}
-{key:"noho", file:"noho.csv", name:"NoHo", num:"1463 reviews", pos:"Average 'positive sentiment' per review: 39.0", stars:"Average star rating: 4.6"}
-{key:"nolita", file:"nolita.csv", name:"Nolita", num:"2762 reviews", pos:"Average 'positive sentiment' per review: 39.5", stars:"Average star rating: 4.64"}
-{key:"northriverdale", file:"northriverdale.csv", name:"North Riverdale", num:"70 reviews", pos:"Average 'positive sentiment' per review: 34.98", stars:"Average star rating: 4.7"}
-{key:"norwood", file:"norwood.csv", name:"Norwood", num:"127 reviews", pos:"Average 'positive sentiment' per review: 36.5", stars:"Average star rating: 4.76"}
-{key:"oakwood", file:"oakwood.csv", name:"Oakwood", num:"92 reviews", pos:"Average 'positive sentiment' per review: 33.77", stars:"Average star rating: 4.55"}
-{key:"ozonepark", file:"ozonepark.csv", name:"Ozone Park", num:"283 reviews", pos:"Average 'positive sentiment' per review: 36.2", stars:"Average star rating: 4.76"}
-{key:"parkslope", file:"parkslope.csv", name:"Park Slope", num:"5617 reviews", pos:"Average 'positive sentiment' per review: 39.27", stars:"Average star rating: 4.7"}
-{key:"parkchester", file:"parkchester.csv", name:"Parkchester", num:"191 reviews", pos:"Average 'positive sentiment' per review: 34.44", stars:"Average star rating: 4.5"}
-{key:"pelhambay", file:"pelhambay.csv", name:"Pelham Bay", num:"84 reviews", pos:"Average 'positive sentiment' per review: 34.46", stars:"Average star rating: 4.39"}
-{key:"pelhamgardens", file:"pelhamgardens.csv", name:"Pelham Gardens", num:"98 reviews", pos:"Average 'positive sentiment' per review: 37.06", stars:"Average star rating: 4.79"}
-{key:"portmorris", file:"portmorris.csv", name:"Port Morris", num:"180 reviews", pos:"Average 'positive sentiment' per review: 34.88", stars:"Average star rating: 4.64"}
-{key:"portrichmond", file:"portrichmond.csv", name:"Port Richmond", num:"5 reviews", pos:"Average 'positive sentiment' per review: 28.91", stars:"Average star rating: 4.6"}
-{key:"prospectheights", file:"prospectheights.csv", name:"Prospect Heights", num:"3894 reviews", pos:"Average 'positive sentiment' per review: 38.52", stars:"Average star rating: 4.66"}
-{key:"prospect-leffertsgardens", file:"prospect-leffertsgardens.csv", name:"Prospect-Lefferts Gardens", num:"3794 reviews", pos:"Average 'positive sentiment' per review: 35.19", stars:"Average star rating: 4.59"}
-{key:"queensvillage", file:"queensvillage.csv", name:"Queens Village", num:"181 reviews", pos:"Average 'positive sentiment' per review: 37.93", stars:"Average star rating: 4.66"}
-{key:"randallmanor", file:"randallmanor.csv", name:"Randall Manor", num:"115 reviews", pos:"Average 'positive sentiment' per review: 36.76", stars:"Average star rating: 4.5"}
-{key:"redhook", file:"redhook.csv", name:"Red Hook", num:"504 reviews", pos:"Average 'positive sentiment' per review: 37.51", stars:"Average star rating: 4.62"}
-{key:"regopark", file:"regopark.csv", name:"Rego Park", num:"357 reviews", pos:"Average 'positive sentiment' per review: 38.19", stars:"Average star rating: 4.74"}
-{key:"richmondhill", file:"richmondhill.csv", name:"Richmond Hill", num:"644 reviews", pos:"Average 'positive sentiment' per review: 34.6", stars:"Average star rating: 4.64"}
-{key:"richmondtown", file:"richmondtown.csv", name:"Richmondtown", num:"7 reviews", pos:"Average 'positive sentiment' per review: 28.49", stars:"Average star rating: 4.55"}
-{key:"ridgewood", file:"ridgewood.csv", name:"Ridgewood", num:"2675 reviews", pos:"Average 'positive sentiment' per review: 36.16", stars:"Average star rating: 4.59"}
-{key:"riverdale", file:"riverdale.csv", name:"Riverdale", num:"142 reviews", pos:"Average 'positive sentiment' per review: 35.19", stars:"Average star rating: 4.81"}
-{key:"rockawaybeach", file:"rockawaybeach.csv", name:"Rockaway Beach", num:"130 reviews", pos:"Average 'positive sentiment' per review: 43.56", stars:"Average star rating: 4.72"}
-{key:"rooseveltisland", file:"rooseveltisland.csv", name:"Roosevelt Island", num:"512 reviews", pos:"Average 'positive sentiment' per review: 36.2", stars:"Average star rating: 4.6"}
-{key:"rosebank", file:"rosebank.csv", name:"Rosebank", num:"4 reviews", pos:"Average 'positive sentiment' per review: 31.77", stars:"Average star rating: 4.75"}
-{key:"rosedale", file:"rosedale.csv", name:"Rosedale", num:"59 reviews", pos:"Average 'positive sentiment' per review: 37.15", stars:"Average star rating: 4.61"}
-{key:"schuylerville", file:"schuylerville.csv", name:"Schuylerville", num:"2 reviews", pos:"Average 'positive sentiment' per review: 38.44", stars:"Average star rating: 5.0"}
-{key:"sheepsheadbay", file:"sheepsheadbay.csv", name:"Sheepshead Bay", num:"295 reviews", pos:"Average 'positive sentiment' per review: 37.14", stars:"Average star rating: 4.65"}
-{key:"shoreacres", file:"shoreacres.csv", name:"Shore Acres", num:"79 reviews", pos:"Average 'positive sentiment' per review: 32.72", stars:"Average star rating: 4.6"}
-{key:"silverlake", file:"silverlake.csv", name:"Silver Lake", num:"16 reviews", pos:"Average 'positive sentiment' per review: 41.69", stars:"Average star rating: 4.88"}
-{key:"soho", file:"soho.csv", name:"SoHo", num:"4996 reviews", pos:"Average 'positive sentiment' per review: 38.55", stars:"Average star rating: 4.62"}
-{key:"soundview", file:"soundview.csv", name:"Soundview", num:"51 reviews", pos:"Average 'positive sentiment' per review: 31.67", stars:"Average star rating: 4.68"}
-{key:"southbeach", file:"southbeach.csv", name:"South Beach", num:"50 reviews", pos:"Average 'positive sentiment' per review: 35.51", stars:"Average star rating: 4.54"}
-{key:"southozonepark", file:"southozonepark.csv", name:"South Ozone Park", num:"152 reviews", pos:"Average 'positive sentiment' per review: 33.23", stars:"Average star rating: 4.35"}
-{key:"southslope", file:"southslope.csv", name:"South Slope", num:"3142 reviews", pos:"Average 'positive sentiment' per review: 38.92", stars:"Average star rating: 4.72"}
-{key:"springfieldgardens", file:"springfieldgardens.csv", name:"Springfield Gardens", num:"219 reviews", pos:"Average 'positive sentiment' per review: 33.98", stars:"Average star rating: 4.36"}
-{key:"spuytenduyvil", file:"spuytenduyvil.csv", name:"Spuyten Duyvil", num:"19 reviews", pos:"Average 'positive sentiment' per review: 44.12", stars:"Average star rating: 4.55"}
-{key:"st.albans", file:"st.albans.csv", name:"St. Albans", num:"265 reviews", pos:"Average 'positive sentiment' per review: 36.68", stars:"Average star rating: 4.56"}
-{key:"st.george", file:"st.george.csv", name:"St. George", num:"477 reviews", pos:"Average 'positive sentiment' per review: 32.65", stars:"Average star rating: 4.59"}
-{key:"stapleton", file:"stapleton.csv", name:"Stapleton", num:"71 reviews", pos:"Average 'positive sentiment' per review: 34.34", stars:"Average star rating: 4.76"}
-{key:"stuyvesanttown", file:"stuyvesanttown.csv", name:"Stuyvesant Town", num:"1031 reviews", pos:"Average 'positive sentiment' per review: 38.18", stars:"Average star rating: 4.62"}
-{key:"sunnyside", file:"sunnyside.csv", name:"Sunnyside", num:"1742 reviews", pos:"Average 'positive sentiment' per review: 35.82", stars:"Average star rating: 4.71"}
-{key:"sunsetpark", file:"sunsetpark.csv", name:"Sunset Park", num:"1823 reviews", pos:"Average 'positive sentiment' per review: 34.62", stars:"Average star rating: 4.54"}
-{key:"theaterdistrict", file:"theaterdistrict.csv", name:"Theater District", num:"1906 reviews", pos:"Average 'positive sentiment' per review: 36.42", stars:"Average star rating: 4.62"}
-{key:"throgsneck", file:"throgsneck.csv", name:"Throgs Neck", num:"10 reviews", pos:"Average 'positive sentiment' per review: 43.21", stars:"Average star rating: 4.92"}
-{key:"todthill", file:"todthill.csv", name:"Todt Hill", num:"12 reviews", pos:"Average 'positive sentiment' per review: 35.44", stars:"Average star rating: 4.92"}
-{key:"tompkinsville", file:"tompkinsville.csv", name:"Tompkinsville", num:"253 reviews", pos:"Average 'positive sentiment' per review: 35.16", stars:"Average star rating: 4.6"}
-{key:"tottenville", file:"tottenville.csv", name:"Tottenville", num:"13 reviews", pos:"Average 'positive sentiment' per review: 51.09", stars:"Average star rating: 4.85"}
-{key:"tremont", file:"tremont.csv", name:"Tremont", num:"28 reviews", pos:"Average 'positive sentiment' per review: 32.44", stars:"Average star rating: 4.61"}
-{key:"tribeca", file:"tribeca.csv", name:"Tribeca", num:"1060 reviews", pos:"Average 'positive sentiment' per review: 39.24", stars:"Average star rating: 4.74"}
-{key:"twobridges", file:"twobridges.csv", name:"Two Bridges", num:"602 reviews", pos:"Average 'positive sentiment' per review: 35.2", stars:"Average star rating: 4.61"}
-{key:"unionport", file:"unionport.csv", name:"Unionport", num:"7 reviews", pos:"Average 'positive sentiment' per review: 34.97", stars:"Average star rating: 5.0"}
-{key:"universityheights", file:"universityheights.csv", name:"University Heights", num:"78 reviews", pos:"Average 'positive sentiment' per review: 34.77", stars:"Average star rating: 4.72"}
-{key:"uppereastside", file:"uppereastside.csv", name:"Upper East Side", num:"16050 reviews", pos:"Average 'positive sentiment' per review: 34.75", stars:"Average star rating: 4.56"}
-{key:"upperwestside", file:"upperwestside.csv", name:"Upper West Side", num:"18692 reviews", pos:"Average 'positive sentiment' per review: 35.9", stars:"Average star rating: 4.63"}
-{key:"vannest", file:"vannest.csv", name:"Van Nest", num:"2 reviews", pos:"Average 'positive sentiment' per review: 26.54", stars:"Average star rating: 4.5"}
-{key:"vinegarhill", file:"vinegarhill.csv", name:"Vinegar Hill", num:"336 reviews", pos:"Average 'positive sentiment' per review: 41.05", stars:"Average star rating: 4.8"}
-{key:"wakefield", file:"wakefield.csv", name:"Wakefield", num:"19 reviews", pos:"Average 'positive sentiment' per review: 33.65", stars:"Average star rating: 4.68"}
-{key:"washingtonheights", file:"washingtonheights.csv", name:"Washington Heights", num:"6174 reviews", pos:"Average 'positive sentiment' per review: 35.14", stars:"Average star rating: 4.58"}
-{key:"westbrighton", file:"westbrighton.csv", name:"West Brighton", num:"3 reviews", pos:"Average 'positive sentiment' per review: 32.49", stars:"Average star rating: 4.67"}
-{key:"westfarms", file:"westfarms.csv", name:"West Farms", num:"5 reviews", pos:"Average 'positive sentiment' per review: 47.81", stars:"Average star rating: 4.0"}
-{key:"westvillage", file:"westvillage.csv", name:"West Village", num:"9789 reviews", pos:"Average 'positive sentiment' per review: 39.57", stars:"Average star rating: 4.66"}
-{key:"westchestersquare", file:"westchestersquare.csv", name:"Westchester Square", num:"20 reviews", pos:"Average 'positive sentiment' per review: 33.94", stars:"Average star rating: 4.31"}
-{key:"whitestone", file:"whitestone.csv", name:"Whitestone", num:"2 reviews", pos:"Average 'positive sentiment' per review: 47.84", stars:"Average star rating: 5.0"}
-{key:"williamsbridge", file:"williamsbridge.csv", name:"Williamsbridge", num:"92 reviews", pos:"Average 'positive sentiment' per review: 37.54", stars:"Average star rating: 4.57"}
-{key:"williamsburg", file:"williamsburg.csv", name:"Williamsburg", num:"42608 reviews", pos:"Average 'positive sentiment' per review: 39.24", stars:"Average star rating: 4.65"}
-{key:"windsorterrace", file:"windsorterrace.csv", name:"Windsor Terrace", num:"980 reviews", pos:"Average 'positive sentiment' per review: 37.76", stars:"Average star rating: 4.68"}
-{key:"woodhaven", file:"woodhaven.csv", name:"Woodhaven", num:"489 reviews", pos:"Average 'positive sentiment' per review: 34.64", stars:"Average star rating: 4.61"}
-{key:"woodlawn", file:"woodlawn.csv", name:"Woodlawn", num:"111 reviews", pos:"Average 'positive sentiment' per review: 37.32", stars:"Average star rating: 4.61"}
-{key:"woodside", file:"woodside.csv", name:"Woodside", num:"995 reviews", pos:"Average 'positive sentiment' per review: 34.94", stars:"Average star rating: 4.74"}
+  {key:"allerton", file:"allerton.csv", name:"Allerton", num:"456 reviews", pos:"Average 'positive sentiment' per review: 66.24", stars:"Average star rating: 4.53"}
+{key:"ardenheights", file:"ardenheights.csv", name:"Arden Heights", num:"24 reviews", pos:"Average 'positive sentiment' per review: 71.8", stars:"Average star rating: 4.96"}
+{key:"arrochar", file:"arrochar.csv", name:"Arrochar", num:"12 reviews", pos:"Average 'positive sentiment' per review: 75.68", stars:"Average star rating: 4.92"}
+{key:"arverne", file:"arverne.csv", name:"Arverne", num:"495 reviews", pos:"Average 'positive sentiment' per review: 69.17", stars:"Average star rating: 4.74"}
+{key:"astoria", file:"astoria.csv", name:"Astoria", num:"7038 reviews", pos:"Average 'positive sentiment' per review: 67.84", stars:"Average star rating: 4.63"}
+{key:"bathbeach", file:"bathbeach.csv", name:"Bath Beach", num:"26 reviews", pos:"Average 'positive sentiment' per review: 68.39", stars:"Average star rating: 4.88"}
+{key:"batteryparkcity", file:"batteryparkcity.csv", name:"Battery Park City", num:"563 reviews", pos:"Average 'positive sentiment' per review: 70.03", stars:"Average star rating: 4.67"}
+{key:"bayridge", file:"bayridge.csv", name:"Bay Ridge", num:"522 reviews", pos:"Average 'positive sentiment' per review: 68.81", stars:"Average star rating: 4.67"}
+{key:"bayterrace", file:"bayterrace.csv", name:"Bay Terrace", num:"43 reviews", pos:"Average 'positive sentiment' per review: 67.45", stars:"Average star rating: 4.71"}
+{key:"bayterrace,statenisland", file:"bayterrace,statenisland.csv", name:"Bay Terrace, Staten Island", num:"6 reviews", pos:"Average 'positive sentiment' per review: 68.63", stars:"Average star rating: 4.5"}
+{key:"baychester", file:"baychester.csv", name:"Baychester", num:"1 reviews", pos:"Average 'positive sentiment' per review: 56.48", stars:"Average star rating: 3.0"}
+{key:"bayside", file:"bayside.csv", name:"Bayside", num:"57 reviews", pos:"Average 'positive sentiment' per review: 68.62", stars:"Average star rating: 4.46"}
+{key:"bayswater", file:"bayswater.csv", name:"Bayswater", num:"61 reviews", pos:"Average 'positive sentiment' per review: 68.68", stars:"Average star rating: 4.55"}
+{key:"bedford-stuyvesant", file:"bedford-stuyvesant.csv", name:"Bedford-Stuyvesant", num:"28302 reviews", pos:"Average 'positive sentiment' per review: 67.5", stars:"Average star rating: 4.56"}
+{key:"belleharbor", file:"belleharbor.csv", name:"Belle Harbor", num:"1 reviews", pos:"Average 'positive sentiment' per review: 67.32", stars:"Average star rating: 5.0"}
+{key:"bellerose", file:"bellerose.csv", name:"Bellerose", num:"33 reviews", pos:"Average 'positive sentiment' per review: 67.69", stars:"Average star rating: 4.2"}
+{key:"belmont", file:"belmont.csv", name:"Belmont", num:"85 reviews", pos:"Average 'positive sentiment' per review: 69.15", stars:"Average star rating: 4.4"}
+{key:"bensonhurst", file:"bensonhurst.csv", name:"Bensonhurst", num:"246 reviews", pos:"Average 'positive sentiment' per review: 66.65", stars:"Average star rating: 4.58"}
+{key:"bergenbeach", file:"bergenbeach.csv", name:"Bergen Beach", num:"23 reviews", pos:"Average 'positive sentiment' per review: 67.51", stars:"Average star rating: 4.52"}
+{key:"boerumhill", file:"boerumhill.csv", name:"Boerum Hill", num:"1866 reviews", pos:"Average 'positive sentiment' per review: 69.33", stars:"Average star rating: 4.73"}
+{key:"boroughpark", file:"boroughpark.csv", name:"Borough Park", num:"611 reviews", pos:"Average 'positive sentiment' per review: 66.28", stars:"Average star rating: 4.26"}
+{key:"briarwood", file:"briarwood.csv", name:"Briarwood", num:"251 reviews", pos:"Average 'positive sentiment' per review: 68.13", stars:"Average star rating: 4.74"}
+{key:"brightonbeach", file:"brightonbeach.csv", name:"Brighton Beach", num:"288 reviews", pos:"Average 'positive sentiment' per review: 67.38", stars:"Average star rating: 4.62"}
+{key:"bronxdale", file:"bronxdale.csv", name:"Bronxdale", num:"33 reviews", pos:"Average 'positive sentiment' per review: 68.69", stars:"Average star rating: 4.88"}
+{key:"brooklynheights", file:"brooklynheights.csv", name:"Brooklyn Heights", num:"1425 reviews", pos:"Average 'positive sentiment' per review: 69.82", stars:"Average star rating: 4.7"}
+{key:"brownsville", file:"brownsville.csv", name:"Brownsville", num:"275 reviews", pos:"Average 'positive sentiment' per review: 68.09", stars:"Average star rating: 4.48"}
+{key:"bushwick", file:"bushwick.csv", name:"Bushwick", num:"16061 reviews", pos:"Average 'positive sentiment' per review: 67.99", stars:"Average star rating: 4.58"}
+{key:"cambriaheights", file:"cambriaheights.csv", name:"Cambria Heights", num:"41 reviews", pos:"Average 'positive sentiment' per review: 68.02", stars:"Average star rating: 4.65"}
+{key:"canarsie", file:"canarsie.csv", name:"Canarsie", num:"711 reviews", pos:"Average 'positive sentiment' per review: 66.81", stars:"Average star rating: 4.55"}
+{key:"carrollgardens", file:"carrollgardens.csv", name:"Carroll Gardens", num:"1617 reviews", pos:"Average 'positive sentiment' per review: 69.79", stars:"Average star rating: 4.7"}
+{key:"castletoncorners", file:"castletoncorners.csv", name:"Castleton Corners", num:"47 reviews", pos:"Average 'positive sentiment' per review: 67.53", stars:"Average star rating: 4.73"}
+{key:"chelsea", file:"chelsea.csv", name:"Chelsea", num:"13774 reviews", pos:"Average 'positive sentiment' per review: 69.01", stars:"Average star rating: 4.64"}
+{key:"chinatown", file:"chinatown.csv", name:"Chinatown", num:"4475 reviews", pos:"Average 'positive sentiment' per review: 68.18", stars:"Average star rating: 4.55"}
+{key:"cityisland", file:"cityisland.csv", name:"City Island", num:"147 reviews", pos:"Average 'positive sentiment' per review: 68.16", stars:"Average star rating: 4.82"}
+{key:"civiccenter", file:"civiccenter.csv", name:"Civic Center", num:"268 reviews", pos:"Average 'positive sentiment' per review: 68.55", stars:"Average star rating: 4.64"}
+{key:"claremontvillage", file:"claremontvillage.csv", name:"Claremont Village", num:"210 reviews", pos:"Average 'positive sentiment' per review: 68.11", stars:"Average star rating: 4.61"}
+{key:"clasonpoint", file:"clasonpoint.csv", name:"Clason Point", num:"36 reviews", pos:"Average 'positive sentiment' per review: 67.53", stars:"Average star rating: 4.65"}
+{key:"clifton", file:"clifton.csv", name:"Clifton", num:"157 reviews", pos:"Average 'positive sentiment' per review: 65.19", stars:"Average star rating: 4.73"}
+{key:"clintonhill", file:"clintonhill.csv", name:"Clinton Hill", num:"6409 reviews", pos:"Average 'positive sentiment' per review: 69.04", stars:"Average star rating: 4.65"}
+{key:"co-opcity", file:"co-opcity.csv", name:"Co-op City", num:"27 reviews", pos:"Average 'positive sentiment' per review: 67.22", stars:"Average star rating: 4.78"}
+{key:"cobblehill", file:"cobblehill.csv", name:"Cobble Hill", num:"1001 reviews", pos:"Average 'positive sentiment' per review: 70.76", stars:"Average star rating: 4.76"}
+{key:"collegepoint", file:"collegepoint.csv", name:"College Point", num:"20 reviews", pos:"Average 'positive sentiment' per review: 70.96", stars:"Average star rating: 4.95"}
+{key:"columbiast", file:"columbiast.csv", name:"Columbia St", num:"411 reviews", pos:"Average 'positive sentiment' per review: 67.75", stars:"Average star rating: 4.54"}
+{key:"concord", file:"concord.csv", name:"Concord", num:"154 reviews", pos:"Average 'positive sentiment' per review: 70.09", stars:"Average star rating: 4.64"}
+{key:"concourse", file:"concourse.csv", name:"Concourse", num:"397 reviews", pos:"Average 'positive sentiment' per review: 66.73", stars:"Average star rating: 4.57"}
+{key:"concoursevillage", file:"concoursevillage.csv", name:"Concourse Village", num:"166 reviews", pos:"Average 'positive sentiment' per review: 64.99", stars:"Average star rating: 4.25"}
+{key:"coneyisland", file:"coneyisland.csv", name:"Coney Island", num:"84 reviews", pos:"Average 'positive sentiment' per review: 70.78", stars:"Average star rating: 4.63"}
+{key:"corona", file:"corona.csv", name:"Corona", num:"362 reviews", pos:"Average 'positive sentiment' per review: 66.82", stars:"Average star rating: 4.5"}
+{key:"countryclub", file:"countryclub.csv", name:"Country Club", num:"30 reviews", pos:"Average 'positive sentiment' per review: 69.41", stars:"Average star rating: 4.85"}
+{key:"crownheights", file:"crownheights.csv", name:"Crown Heights", num:"11861 reviews", pos:"Average 'positive sentiment' per review: 68.1", stars:"Average star rating: 4.6"}
+{key:"cypresshills", file:"cypresshills.csv", name:"Cypress Hills", num:"606 reviews", pos:"Average 'positive sentiment' per review: 67.54", stars:"Average star rating: 4.51"}
+{key:"dumbo", file:"dumbo.csv", name:"DUMBO", num:"368 reviews", pos:"Average 'positive sentiment' per review: 70.67", stars:"Average star rating: 4.76"}
+{key:"ditmarssteinway", file:"ditmarssteinway.csv", name:"Ditmars Steinway", num:"2328 reviews", pos:"Average 'positive sentiment' per review: 67.75", stars:"Average star rating: 4.62"}
+{key:"donganhills", file:"donganhills.csv", name:"Dongan Hills", num:"10 reviews", pos:"Average 'positive sentiment' per review: 76.34", stars:"Average star rating: 5.0"}
+{key:"downtownbrooklyn", file:"downtownbrooklyn.csv", name:"Downtown Brooklyn", num:"654 reviews", pos:"Average 'positive sentiment' per review: 69.37", stars:"Average star rating: 4.65"}
+{key:"dykerheights", file:"dykerheights.csv", name:"Dyker Heights", num:"135 reviews", pos:"Average 'positive sentiment' per review: 68.03", stars:"Average star rating: 4.3"}
+{key:"eastelmhurst", file:"eastelmhurst.csv", name:"East Elmhurst", num:"1059 reviews", pos:"Average 'positive sentiment' per review: 67.25", stars:"Average star rating: 4.67"}
+{key:"eastflatbush", file:"eastflatbush.csv", name:"East Flatbush", num:"1871 reviews", pos:"Average 'positive sentiment' per review: 67.68", stars:"Average star rating: 4.51"}
+{key:"eastharlem", file:"eastharlem.csv", name:"East Harlem", num:"12839 reviews", pos:"Average 'positive sentiment' per review: 66.15", stars:"Average star rating: 4.5"}
+{key:"eastmorrisania", file:"eastmorrisania.csv", name:"East Morrisania", num:"13 reviews", pos:"Average 'positive sentiment' per review: 63.59", stars:"Average star rating: 4.23"}
+{key:"eastnewyork", file:"eastnewyork.csv", name:"East New York", num:"910 reviews", pos:"Average 'positive sentiment' per review: 66.29", stars:"Average star rating: 4.5"}
+{key:"eastvillage", file:"eastvillage.csv", name:"East Village", num:"28959 reviews", pos:"Average 'positive sentiment' per review: 68.78", stars:"Average star rating: 4.58"}
+{key:"eastchester", file:"eastchester.csv", name:"Eastchester", num:"38 reviews", pos:"Average 'positive sentiment' per review: 66.89", stars:"Average star rating: 4.76"}
+{key:"elmhurst", file:"elmhurst.csv", name:"Elmhurst", num:"728 reviews", pos:"Average 'positive sentiment' per review: 66.09", stars:"Average star rating: 4.53"}
+{key:"eltingville", file:"eltingville.csv", name:"Eltingville", num:"44 reviews", pos:"Average 'positive sentiment' per review: 71.0", stars:"Average star rating: 4.8"}
+{key:"emersonhill", file:"emersonhill.csv", name:"Emerson Hill", num:"60 reviews", pos:"Average 'positive sentiment' per review: 65.81", stars:"Average star rating: 4.44"}
+{key:"farrockaway", file:"farrockaway.csv", name:"Far Rockaway", num:"61 reviews", pos:"Average 'positive sentiment' per review: 66.63", stars:"Average star rating: 4.62"}
+{key:"fieldston", file:"fieldston.csv", name:"Fieldston", num:"8 reviews", pos:"Average 'positive sentiment' per review: 72.25", stars:"Average star rating: 4.89"}
+{key:"financialdistrict", file:"financialdistrict.csv", name:"Financial District", num:"2045 reviews", pos:"Average 'positive sentiment' per review: 69.74", stars:"Average star rating: 4.74"}
+{key:"flatbush", file:"flatbush.csv", name:"Flatbush", num:"3888 reviews", pos:"Average 'positive sentiment' per review: 68.47", stars:"Average star rating: 4.63"}
+{key:"flatirondistrict", file:"flatirondistrict.csv", name:"Flatiron District", num:"917 reviews", pos:"Average 'positive sentiment' per review: 69.94", stars:"Average star rating: 4.72"}
+{key:"flatlands", file:"flatlands.csv", name:"Flatlands", num:"226 reviews", pos:"Average 'positive sentiment' per review: 66.16", stars:"Average star rating: 4.54"}
+{key:"flushing", file:"flushing.csv", name:"Flushing", num:"1773 reviews", pos:"Average 'positive sentiment' per review: 67.0", stars:"Average star rating: 4.54"}
+{key:"fordham", file:"fordham.csv", name:"Fordham", num:"98 reviews", pos:"Average 'positive sentiment' per review: 68.39", stars:"Average star rating: 4.76"}
+{key:"foresthills", file:"foresthills.csv", name:"Forest Hills", num:"616 reviews", pos:"Average 'positive sentiment' per review: 68.46", stars:"Average star rating: 4.58"}
+{key:"fortgreene", file:"fortgreene.csv", name:"Fort Greene", num:"6104 reviews", pos:"Average 'positive sentiment' per review: 69.31", stars:"Average star rating: 4.69"}
+{key:"forthamilton", file:"forthamilton.csv", name:"Fort Hamilton", num:"176 reviews", pos:"Average 'positive sentiment' per review: 68.39", stars:"Average star rating: 4.6"}
+{key:"freshmeadows", file:"freshmeadows.csv", name:"Fresh Meadows", num:"13 reviews", pos:"Average 'positive sentiment' per review: 70.31", stars:"Average star rating: 4.54"}
+{key:"gerritsenbeach", file:"gerritsenbeach.csv", name:"Gerritsen Beach", num:"30 reviews", pos:"Average 'positive sentiment' per review: 64.14", stars:"Average star rating: 4.25"}
+{key:"glendale", file:"glendale.csv", name:"Glendale", num:"78 reviews", pos:"Average 'positive sentiment' per review: 69.12", stars:"Average star rating: 4.89"}
+{key:"gowanus", file:"gowanus.csv", name:"Gowanus", num:"1903 reviews", pos:"Average 'positive sentiment' per review: 68.85", stars:"Average star rating: 4.68"}
+{key:"gramercy", file:"gramercy.csv", name:"Gramercy", num:"3206 reviews", pos:"Average 'positive sentiment' per review: 69.01", stars:"Average star rating: 4.64"}
+{key:"graniteville", file:"graniteville.csv", name:"Graniteville", num:"70 reviews", pos:"Average 'positive sentiment' per review: 68.13", stars:"Average star rating: 4.66"}
+{key:"gravesend", file:"gravesend.csv", name:"Gravesend", num:"88 reviews", pos:"Average 'positive sentiment' per review: 69.24", stars:"Average star rating: 4.77"}
+{key:"greatkills", file:"greatkills.csv", name:"Great Kills", num:"8 reviews", pos:"Average 'positive sentiment' per review: 66.76", stars:"Average star rating: 5.0"}
+{key:"greenpoint", file:"greenpoint.csv", name:"Greenpoint", num:"7720 reviews", pos:"Average 'positive sentiment' per review: 69.94", stars:"Average star rating: 4.71"}
+{key:"greenwichvillage", file:"greenwichvillage.csv", name:"Greenwich Village", num:"5623 reviews", pos:"Average 'positive sentiment' per review: 69.22", stars:"Average star rating: 4.6"}
+{key:"grymeshill", file:"grymeshill.csv", name:"Grymes Hill", num:"12 reviews", pos:"Average 'positive sentiment' per review: 70.35", stars:"Average star rating: 4.91"}
+{key:"harlem", file:"harlem.csv", name:"Harlem", num:"26742 reviews", pos:"Average 'positive sentiment' per review: 67.19", stars:"Average star rating: 4.6"}
+{key:"hell'skitchen", file:"hell'skitchen.csv", name:"Hell's Kitchen", num:"19833 reviews", pos:"Average 'positive sentiment' per review: 67.51", stars:"Average star rating: 4.55"}
+{key:"highbridge", file:"highbridge.csv", name:"Highbridge", num:"137 reviews", pos:"Average 'positive sentiment' per review: 70.27", stars:"Average star rating: 4.7"}
+{key:"hollis", file:"hollis.csv", name:"Hollis", num:"17 reviews", pos:"Average 'positive sentiment' per review: 67.24", stars:"Average star rating: 3.98"}
+{key:"hollishills", file:"hollishills.csv", name:"Hollis Hills", num:"14 reviews", pos:"Average 'positive sentiment' per review: 66.53", stars:"Average star rating: 4.8"}
+{key:"holliswood", file:"holliswood.csv", name:"Holliswood", num:"3 reviews", pos:"Average 'positive sentiment' per review: 61.28", stars:"Average star rating: 4.67"}
+{key:"howardbeach", file:"howardbeach.csv", name:"Howard Beach", num:"12 reviews", pos:"Average 'positive sentiment' per review: 62.56", stars:"Average star rating: 4.25"}
+{key:"huntspoint", file:"huntspoint.csv", name:"Hunts Point", num:"5 reviews", pos:"Average 'positive sentiment' per review: 69.34", stars:"Average star rating: 4.4"}
+{key:"inwood", file:"inwood.csv", name:"Inwood", num:"1827 reviews", pos:"Average 'positive sentiment' per review: 67.0", stars:"Average star rating: 4.55"}
+{key:"jacksonheights", file:"jacksonheights.csv", name:"Jackson Heights", num:"1730 reviews", pos:"Average 'positive sentiment' per review: 67.32", stars:"Average star rating: 4.56"}
+{key:"jamaica", file:"jamaica.csv", name:"Jamaica", num:"811 reviews", pos:"Average 'positive sentiment' per review: 66.89", stars:"Average star rating: 4.45"}
+{key:"jamaicaestates", file:"jamaicaestates.csv", name:"Jamaica Estates", num:"82 reviews", pos:"Average 'positive sentiment' per review: 67.37", stars:"Average star rating: 4.41"}
+{key:"jamaicahills", file:"jamaicahills.csv", name:"Jamaica Hills", num:"10 reviews", pos:"Average 'positive sentiment' per review: 70.13", stars:"Average star rating: 4.0"}
+{key:"kensington", file:"kensington.csv", name:"Kensington", num:"831 reviews", pos:"Average 'positive sentiment' per review: 68.74", stars:"Average star rating: 4.68"}
+{key:"kewgardens", file:"kewgardens.csv", name:"Kew Gardens", num:"255 reviews", pos:"Average 'positive sentiment' per review: 67.79", stars:"Average star rating: 4.52"}
+{key:"kewgardenshills", file:"kewgardenshills.csv", name:"Kew Gardens Hills", num:"63 reviews", pos:"Average 'positive sentiment' per review: 66.48", stars:"Average star rating: 4.42"}
+{key:"kingsbridge", file:"kingsbridge.csv", name:"Kingsbridge", num:"99 reviews", pos:"Average 'positive sentiment' per review: 70.89", stars:"Average star rating: 4.65"}
+{key:"kipsbay", file:"kipsbay.csv", name:"Kips Bay", num:"4019 reviews", pos:"Average 'positive sentiment' per review: 68.13", stars:"Average star rating: 4.56"}
+{key:"laurelton", file:"laurelton.csv", name:"Laurelton", num:"44 reviews", pos:"Average 'positive sentiment' per review: 69.11", stars:"Average star rating: 4.46"}
+{key:"lighthousehill", file:"lighthousehill.csv", name:"Lighthouse Hill", num:"11 reviews", pos:"Average 'positive sentiment' per review: 72.16", stars:"Average star rating: 4.65"}
+{key:"littleitaly", file:"littleitaly.csv", name:"Little Italy", num:"1177 reviews", pos:"Average 'positive sentiment' per review: 67.87", stars:"Average star rating: 4.53"}
+{key:"longislandcity", file:"longislandcity.csv", name:"Long Island City", num:"5062 reviews", pos:"Average 'positive sentiment' per review: 67.34", stars:"Average star rating: 4.59"}
+{key:"longwood", file:"longwood.csv", name:"Longwood", num:"159 reviews", pos:"Average 'positive sentiment' per review: 67.14", stars:"Average star rating: 4.61"}
+{key:"lowereastside", file:"lowereastside.csv", name:"Lower East Side", num:"14713 reviews", pos:"Average 'positive sentiment' per review: 68.61", stars:"Average star rating: 4.58"}
+{key:"manhattanbeach", file:"manhattanbeach.csv", name:"Manhattan Beach", num:"61 reviews", pos:"Average 'positive sentiment' per review: 66.68", stars:"Average star rating: 4.82"}
+{key:"marblehill", file:"marblehill.csv", name:"Marble Hill", num:"79 reviews", pos:"Average 'positive sentiment' per review: 67.27", stars:"Average star rating: 4.89"}
+{key:"marinersharbor", file:"marinersharbor.csv", name:"Mariners Harbor", num:"136 reviews", pos:"Average 'positive sentiment' per review: 68.33", stars:"Average star rating: 4.75"}
+{key:"maspeth", file:"maspeth.csv", name:"Maspeth", num:"392 reviews", pos:"Average 'positive sentiment' per review: 66.17", stars:"Average star rating: 4.46"}
+{key:"melrose", file:"melrose.csv", name:"Melrose", num:"48 reviews", pos:"Average 'positive sentiment' per review: 67.08", stars:"Average star rating: 4.14"}
+{key:"middlevillage", file:"middlevillage.csv", name:"Middle Village", num:"174 reviews", pos:"Average 'positive sentiment' per review: 66.63", stars:"Average star rating: 4.65"}
+{key:"midlandbeach", file:"midlandbeach.csv", name:"Midland Beach", num:"36 reviews", pos:"Average 'positive sentiment' per review: 67.68", stars:"Average star rating: 4.51"}
+{key:"midtown", file:"midtown.csv", name:"Midtown", num:"10485 reviews", pos:"Average 'positive sentiment' per review: 67.85", stars:"Average star rating: 4.59"}
+{key:"midwood", file:"midwood.csv", name:"Midwood", num:"490 reviews", pos:"Average 'positive sentiment' per review: 67.81", stars:"Average star rating: 4.65"}
+{key:"millbasin", file:"millbasin.csv", name:"Mill Basin", num:"2 reviews", pos:"Average 'positive sentiment' per review: 70.23", stars:"Average star rating: 4.0"}
+{key:"morningsideheights", file:"morningsideheights.csv", name:"Morningside Heights", num:"1900 reviews", pos:"Average 'positive sentiment' per review: 68.17", stars:"Average star rating: 4.59"}
+{key:"morrisheights", file:"morrisheights.csv", name:"Morris Heights", num:"102 reviews", pos:"Average 'positive sentiment' per review: 66.34", stars:"Average star rating: 4.44"}
+{key:"morrispark", file:"morrispark.csv", name:"Morris Park", num:"209 reviews", pos:"Average 'positive sentiment' per review: 67.89", stars:"Average star rating: 4.41"}
+{key:"morrisania", file:"morrisania.csv", name:"Morrisania", num:"34 reviews", pos:"Average 'positive sentiment' per review: 65.21", stars:"Average star rating: 4.09"}
+{key:"motthaven", file:"motthaven.csv", name:"Mott Haven", num:"495 reviews", pos:"Average 'positive sentiment' per review: 67.4", stars:"Average star rating: 4.71"}
+{key:"mounthope", file:"mounthope.csv", name:"Mount Hope", num:"95 reviews", pos:"Average 'positive sentiment' per review: 68.26", stars:"Average star rating: 4.68"}
+{key:"murrayhill", file:"murrayhill.csv", name:"Murray Hill", num:"2201 reviews", pos:"Average 'positive sentiment' per review: 67.97", stars:"Average star rating: 4.56"}
+{key:"navyyard", file:"navyyard.csv", name:"Navy Yard", num:"43 reviews", pos:"Average 'positive sentiment' per review: 70.2", stars:"Average star rating: 4.73"}
+{key:"neponsit", file:"neponsit.csv", name:"Neponsit", num:"9 reviews", pos:"Average 'positive sentiment' per review: 70.27", stars:"Average star rating: 5.0"}
+{key:"newbrighton", file:"newbrighton.csv", name:"New Brighton", num:"110 reviews", pos:"Average 'positive sentiment' per review: 66.22", stars:"Average star rating: 4.34"}
+{key:"newdorpbeach", file:"newdorpbeach.csv", name:"New Dorp Beach", num:"39 reviews", pos:"Average 'positive sentiment' per review: 69.56", stars:"Average star rating: 4.66"}
+{key:"newspringville", file:"newspringville.csv", name:"New Springville", num:"24 reviews", pos:"Average 'positive sentiment' per review: 70.55", stars:"Average star rating: 4.76"}
+{key:"noho", file:"noho.csv", name:"NoHo", num:"1463 reviews", pos:"Average 'positive sentiment' per review: 69.5", stars:"Average star rating: 4.6"}
+{key:"nolita", file:"nolita.csv", name:"Nolita", num:"2762 reviews", pos:"Average 'positive sentiment' per review: 69.75", stars:"Average star rating: 4.64"}
+{key:"northriverdale", file:"northriverdale.csv", name:"North Riverdale", num:"70 reviews", pos:"Average 'positive sentiment' per review: 67.49", stars:"Average star rating: 4.7"}
+{key:"norwood", file:"norwood.csv", name:"Norwood", num:"127 reviews", pos:"Average 'positive sentiment' per review: 68.25", stars:"Average star rating: 4.76"}
+{key:"oakwood", file:"oakwood.csv", name:"Oakwood", num:"92 reviews", pos:"Average 'positive sentiment' per review: 66.89", stars:"Average star rating: 4.55"}
+{key:"ozonepark", file:"ozonepark.csv", name:"Ozone Park", num:"283 reviews", pos:"Average 'positive sentiment' per review: 68.1", stars:"Average star rating: 4.76"}
+{key:"parkslope", file:"parkslope.csv", name:"Park Slope", num:"5617 reviews", pos:"Average 'positive sentiment' per review: 69.64", stars:"Average star rating: 4.7"}
+{key:"parkchester", file:"parkchester.csv", name:"Parkchester", num:"191 reviews", pos:"Average 'positive sentiment' per review: 67.22", stars:"Average star rating: 4.5"}
+{key:"pelhambay", file:"pelhambay.csv", name:"Pelham Bay", num:"84 reviews", pos:"Average 'positive sentiment' per review: 67.23", stars:"Average star rating: 4.39"}
+{key:"pelhamgardens", file:"pelhamgardens.csv", name:"Pelham Gardens", num:"98 reviews", pos:"Average 'positive sentiment' per review: 68.53", stars:"Average star rating: 4.79"}
+{key:"portmorris", file:"portmorris.csv", name:"Port Morris", num:"180 reviews", pos:"Average 'positive sentiment' per review: 67.44", stars:"Average star rating: 4.64"}
+{key:"portrichmond", file:"portrichmond.csv", name:"Port Richmond", num:"5 reviews", pos:"Average 'positive sentiment' per review: 64.45", stars:"Average star rating: 4.6"}
+{key:"prospectheights", file:"prospectheights.csv", name:"Prospect Heights", num:"3894 reviews", pos:"Average 'positive sentiment' per review: 69.26", stars:"Average star rating: 4.66"}
+{key:"prospect-leffertsgardens", file:"prospect-leffertsgardens.csv", name:"Prospect-Lefferts Gardens", num:"3794 reviews", pos:"Average 'positive sentiment' per review: 67.6", stars:"Average star rating: 4.59"}
+{key:"queensvillage", file:"queensvillage.csv", name:"Queens Village", num:"181 reviews", pos:"Average 'positive sentiment' per review: 68.96", stars:"Average star rating: 4.66"}
+{key:"randallmanor", file:"randallmanor.csv", name:"Randall Manor", num:"115 reviews", pos:"Average 'positive sentiment' per review: 68.38", stars:"Average star rating: 4.5"}
+{key:"redhook", file:"redhook.csv", name:"Red Hook", num:"504 reviews", pos:"Average 'positive sentiment' per review: 68.75", stars:"Average star rating: 4.62"}
+{key:"regopark", file:"regopark.csv", name:"Rego Park", num:"357 reviews", pos:"Average 'positive sentiment' per review: 69.09", stars:"Average star rating: 4.74"}
+{key:"richmondhill", file:"richmondhill.csv", name:"Richmond Hill", num:"644 reviews", pos:"Average 'positive sentiment' per review: 67.3", stars:"Average star rating: 4.64"}
+{key:"richmondtown", file:"richmondtown.csv", name:"Richmondtown", num:"7 reviews", pos:"Average 'positive sentiment' per review: 64.24", stars:"Average star rating: 4.55"}
+{key:"ridgewood", file:"ridgewood.csv", name:"Ridgewood", num:"2675 reviews", pos:"Average 'positive sentiment' per review: 68.08", stars:"Average star rating: 4.59"}
+{key:"riverdale", file:"riverdale.csv", name:"Riverdale", num:"142 reviews", pos:"Average 'positive sentiment' per review: 67.59", stars:"Average star rating: 4.81"}
+{key:"rockawaybeach", file:"rockawaybeach.csv", name:"Rockaway Beach", num:"130 reviews", pos:"Average 'positive sentiment' per review: 71.78", stars:"Average star rating: 4.72"}
+{key:"rooseveltisland", file:"rooseveltisland.csv", name:"Roosevelt Island", num:"512 reviews", pos:"Average 'positive sentiment' per review: 68.1", stars:"Average star rating: 4.6"}
+{key:"rosebank", file:"rosebank.csv", name:"Rosebank", num:"4 reviews", pos:"Average 'positive sentiment' per review: 65.89", stars:"Average star rating: 4.75"}
+{key:"rosedale", file:"rosedale.csv", name:"Rosedale", num:"59 reviews", pos:"Average 'positive sentiment' per review: 68.57", stars:"Average star rating: 4.61"}
+{key:"schuylerville", file:"schuylerville.csv", name:"Schuylerville", num:"2 reviews", pos:"Average 'positive sentiment' per review: 69.22", stars:"Average star rating: 5.0"}
+{key:"sheepsheadbay", file:"sheepsheadbay.csv", name:"Sheepshead Bay", num:"295 reviews", pos:"Average 'positive sentiment' per review: 68.57", stars:"Average star rating: 4.65"}
+{key:"shoreacres", file:"shoreacres.csv", name:"Shore Acres", num:"79 reviews", pos:"Average 'positive sentiment' per review: 66.36", stars:"Average star rating: 4.6"}
+{key:"silverlake", file:"silverlake.csv", name:"Silver Lake", num:"16 reviews", pos:"Average 'positive sentiment' per review: 70.84", stars:"Average star rating: 4.88"}
+{key:"soho", file:"soho.csv", name:"SoHo", num:"4996 reviews", pos:"Average 'positive sentiment' per review: 69.28", stars:"Average star rating: 4.62"}
+{key:"soundview", file:"soundview.csv", name:"Soundview", num:"51 reviews", pos:"Average 'positive sentiment' per review: 65.84", stars:"Average star rating: 4.68"}
+{key:"southbeach", file:"southbeach.csv", name:"South Beach", num:"50 reviews", pos:"Average 'positive sentiment' per review: 67.75", stars:"Average star rating: 4.54"}
+{key:"southozonepark", file:"southozonepark.csv", name:"South Ozone Park", num:"152 reviews", pos:"Average 'positive sentiment' per review: 66.62", stars:"Average star rating: 4.35"}
+{key:"southslope", file:"southslope.csv", name:"South Slope", num:"3142 reviews", pos:"Average 'positive sentiment' per review: 69.46", stars:"Average star rating: 4.72"}
+{key:"springfieldgardens", file:"springfieldgardens.csv", name:"Springfield Gardens", num:"219 reviews", pos:"Average 'positive sentiment' per review: 66.99", stars:"Average star rating: 4.36"}
+{key:"spuytenduyvil", file:"spuytenduyvil.csv", name:"Spuyten Duyvil", num:"19 reviews", pos:"Average 'positive sentiment' per review: 72.06", stars:"Average star rating: 4.55"}
+{key:"st.albans", file:"st.albans.csv", name:"St. Albans", num:"265 reviews", pos:"Average 'positive sentiment' per review: 68.34", stars:"Average star rating: 4.56"}
+{key:"st.george", file:"st.george.csv", name:"St. George", num:"477 reviews", pos:"Average 'positive sentiment' per review: 66.32", stars:"Average star rating: 4.59"}
+{key:"stapleton", file:"stapleton.csv", name:"Stapleton", num:"71 reviews", pos:"Average 'positive sentiment' per review: 67.17", stars:"Average star rating: 4.76"}
+{key:"stuyvesanttown", file:"stuyvesanttown.csv", name:"Stuyvesant Town", num:"1031 reviews", pos:"Average 'positive sentiment' per review: 69.09", stars:"Average star rating: 4.62"}
+{key:"sunnyside", file:"sunnyside.csv", name:"Sunnyside", num:"1742 reviews", pos:"Average 'positive sentiment' per review: 67.91", stars:"Average star rating: 4.71"}
+{key:"sunsetpark", file:"sunsetpark.csv", name:"Sunset Park", num:"1823 reviews", pos:"Average 'positive sentiment' per review: 67.31", stars:"Average star rating: 4.54"}
+{key:"theaterdistrict", file:"theaterdistrict.csv", name:"Theater District", num:"1906 reviews", pos:"Average 'positive sentiment' per review: 68.21", stars:"Average star rating: 4.62"}
+{key:"throgsneck", file:"throgsneck.csv", name:"Throgs Neck", num:"10 reviews", pos:"Average 'positive sentiment' per review: 71.6", stars:"Average star rating: 4.92"}
+{key:"todthill", file:"todthill.csv", name:"Todt Hill", num:"12 reviews", pos:"Average 'positive sentiment' per review: 67.72", stars:"Average star rating: 4.92"}
+{key:"tompkinsville", file:"tompkinsville.csv", name:"Tompkinsville", num:"253 reviews", pos:"Average 'positive sentiment' per review: 67.58", stars:"Average star rating: 4.6"}
+{key:"tottenville", file:"tottenville.csv", name:"Tottenville", num:"13 reviews", pos:"Average 'positive sentiment' per review: 75.54", stars:"Average star rating: 4.85"}
+{key:"tremont", file:"tremont.csv", name:"Tremont", num:"28 reviews", pos:"Average 'positive sentiment' per review: 66.22", stars:"Average star rating: 4.61"}
+{key:"tribeca", file:"tribeca.csv", name:"Tribeca", num:"1060 reviews", pos:"Average 'positive sentiment' per review: 69.62", stars:"Average star rating: 4.74"}
+{key:"twobridges", file:"twobridges.csv", name:"Two Bridges", num:"602 reviews", pos:"Average 'positive sentiment' per review: 67.6", stars:"Average star rating: 4.61"}
+{key:"unionport", file:"unionport.csv", name:"Unionport", num:"7 reviews", pos:"Average 'positive sentiment' per review: 67.48", stars:"Average star rating: 5.0"}
+{key:"universityheights", file:"universityheights.csv", name:"University Heights", num:"78 reviews", pos:"Average 'positive sentiment' per review: 67.38", stars:"Average star rating: 4.72"}
+{key:"uppereastside", file:"uppereastside.csv", name:"Upper East Side", num:"16050 reviews", pos:"Average 'positive sentiment' per review: 67.38", stars:"Average star rating: 4.56"}
+{key:"upperwestside", file:"upperwestside.csv", name:"Upper West Side", num:"18692 reviews", pos:"Average 'positive sentiment' per review: 67.95", stars:"Average star rating: 4.63"}
+{key:"vannest", file:"vannest.csv", name:"Van Nest", num:"2 reviews", pos:"Average 'positive sentiment' per review: 63.27", stars:"Average star rating: 4.5"}
+{key:"vinegarhill", file:"vinegarhill.csv", name:"Vinegar Hill", num:"336 reviews", pos:"Average 'positive sentiment' per review: 70.52", stars:"Average star rating: 4.8"}
+{key:"wakefield", file:"wakefield.csv", name:"Wakefield", num:"19 reviews", pos:"Average 'positive sentiment' per review: 66.82", stars:"Average star rating: 4.68"}
+{key:"washingtonheights", file:"washingtonheights.csv", name:"Washington Heights", num:"6174 reviews", pos:"Average 'positive sentiment' per review: 67.57", stars:"Average star rating: 4.58"}
+{key:"westbrighton", file:"westbrighton.csv", name:"West Brighton", num:"3 reviews", pos:"Average 'positive sentiment' per review: 66.24", stars:"Average star rating: 4.67"}
+{key:"westfarms", file:"westfarms.csv", name:"West Farms", num:"5 reviews", pos:"Average 'positive sentiment' per review: 73.91", stars:"Average star rating: 4.0"}
+{key:"westvillage", file:"westvillage.csv", name:"West Village", num:"9789 reviews", pos:"Average 'positive sentiment' per review: 69.78", stars:"Average star rating: 4.66"}
+{key:"westchestersquare", file:"westchestersquare.csv", name:"Westchester Square", num:"20 reviews", pos:"Average 'positive sentiment' per review: 66.97", stars:"Average star rating: 4.31"}
+{key:"whitestone", file:"whitestone.csv", name:"Whitestone", num:"2 reviews", pos:"Average 'positive sentiment' per review: 73.92", stars:"Average star rating: 5.0"}
+{key:"williamsbridge", file:"williamsbridge.csv", name:"Williamsbridge", num:"92 reviews", pos:"Average 'positive sentiment' per review: 68.77", stars:"Average star rating: 4.57"}
+{key:"williamsburg", file:"williamsburg.csv", name:"Williamsburg", num:"42608 reviews", pos:"Average 'positive sentiment' per review: 69.62", stars:"Average star rating: 4.65"}
+{key:"windsorterrace", file:"windsorterrace.csv", name:"Windsor Terrace", num:"980 reviews", pos:"Average 'positive sentiment' per review: 68.88", stars:"Average star rating: 4.68"}
+{key:"woodhaven", file:"woodhaven.csv", name:"Woodhaven", num:"489 reviews", pos:"Average 'positive sentiment' per review: 67.32", stars:"Average star rating: 4.61"}
+{key:"woodlawn", file:"woodlawn.csv", name:"Woodlawn", num:"111 reviews", pos:"Average 'positive sentiment' per review: 68.66", stars:"Average star rating: 4.61"}
+{key:"woodside", file:"woodside.csv", name:"Woodside", num:"995 reviews", pos:"Average 'positive sentiment' per review: 67.47", stars:"Average star rating: 4.74"}
 ]

 # ---


Fixed a few bugs

Fixed a few bugs

--- lib/pawn-build.coffee
+++ lib/pawn-build.coffee
@@ -7,15 +7,15 @@
   messages: null
   subscriptions: null

-  # Configuration options
+  # configuration options
   config:
-    # Path to pawncc executable
+    # path to pawncc executable
     pawnExecutablePath:
       title: 'Path to pawncc executable'
       type: 'string'
       default: 'C:\\pawn\\pawncc.exe'

-    # List of pawncc options (passed before filename)
+    # list of pawncc options (passed before filename)
     pawnOptions:
       title: 'Pawn options'
       type: 'array'
@@ -24,12 +24,12 @@
         type: 'string'

   activate: (state) ->
-    # Activate package
+    # activate package
     @subscriptions = new CompositeDisposable
     @subscriptions.add atom.commands.add 'atom-workspace', 'pawn-build:build': => @build()

   deactivate: ->
-    # Deactivate package
+    # deactivate package
     @messages?.detatch()
     @subscriptions.dispose()
     @pawnBuildView.destroy()
@@ -37,7 +37,7 @@
   serialize: -> undefined

   createOutputPanel: ->
-    # Create output panel (or return if already exists)
+    # create output panel (or return if already exists)
     unless @messages?
       @messages = new MessagePanelView
         title: 'Pawn output'
@@ -46,14 +46,17 @@
     return @messages

   build: ->
+    # get current editor
+    editor = atom.workspace.getActiveTextEditor()
+
     # get path of currently open file
-    filepath = atom.workspace.getActiveTextEditor()?.getPath()
-
+    filepath = editor?.getPath()

     # only continue if file is a .pwn file
     return unless filepath? and path.extname(filepath) == '.pwn'
-    #also save it, so the unsaved buffer is included
-    atom.workspace.getActiveTextEditor().save()
+
+    # also save the current file, so the current buffer is included
+    editor.save()

     # prepare command and arguments from package settigns
     cmd = atom.config.get('pawn-build.pawnExecutablePath')
@@ -87,12 +90,12 @@
       output = @createOutputPanel()

       if data
-        #Jump to the first error line
-        editor = atom.workspace.getActiveTextEditor()
-        invalidLine = editor.getLineCount()
-        row = data.match(/\(([1-9][0-9]*)\)/)[1]
-        if row? and not row
-          editor.setCursorBufferPosition([row-1,0])
+        # jump to the first error line
+        match = data.match(/\(([1-9][0-9]*)\)/)
+        if match?
+          row = parseInt(match[1]) - 1
+          if row < editor.getLineCount()
+            editor.setCursorBufferPosition [row,0]

         # show output of pawncc
         lines = data.split('\n')


StacksCustomViews: stepFetchTemplate: use template and error analyzer helpers to show validity status of the template

--- client/admin/lib/views/stacks/stackscustomviews.coffee
+++ client/admin/lib/views/stacks/stackscustomviews.coffee
@@ -273,6 +273,43 @@
         view.show()

+  analyzeTemplate = (content) ->
+
+    valid       =  yes
+
+    try
+      obj       = JSON.parse content
+      providers = Object.keys obj.provider
+    catch e
+      message   = "We've failed to parse the template, please make sure
+                   you are providing a valid template like described
+                   here."
+      valid     = no
+
+    if valid
+      list      = ''
+      list     += "
#{pr}\n" for pr in providers
+
+      message   = "Based on the template you will need to enter
+                   credetentials for the following providers;

+                   #{list}"
+
+    return { message, valid, providers, obj }
+
+
+  analyzeError = (err) ->
+
+    return 'An unknown error occured'  unless err
+
+    if err.code is 404
+      return 'Template file not found at provided tag/branch'
+
+    if err.message?
+      details = "with following error: #{err.message}"
+
+    return "Failed to fetch template #{details ? ''}"
+
+
   # Pass string or an object to show it in a modal ~ GG
   showJSON = (options = {}, json) ->

@@ -529,33 +566,31 @@
         console.log err, template

         if err
-          content = err?.message
-          message  = "We've failed to fetch the template, from given branch/tag
-                      with given file name. Please make sure you are providing
-                      a valid template path like described
-                      here."
+          content = analyzeError err
+          message = "We've failed to fetch the template, from given branch/tag
+                     with given file name. Please make sure you are providing
+                     a valid template path like described
+                     here."

         else if template?.content?

-          content = atob template.content
-
-          try
-            template = JSON.parse content
-          catch e
-            message  = "We've failed to parse the template, please make sure
-                        you are providing a valid template like described
-                        here."
-
-          if template
-            list      = ''
-            providers = Object.keys template.provider
-            list     += "
#{pr}\n" for pr in providers
-
-            message   = "Based on the template you will need to enter
-                         credetentials for the following providers;

-                         #{list}"
+          content   = atob template.content
+          template  = analyzeTemplate content
+          {message} = template
+
+          if template.valid then @addTo container,
+            button        :
+              title       : 'Continue'
+              cssClass    : 'solid compact green nav next'
+              callback    : =>
+
+                callback {
+                  selected_repo, template
+                  provider: 'aws' # Use the only supported provider for now ~ GG
+                }

         else
+
           content = 'Something went wrong, please try again.'


ApplicationManager: fixed switching between same appinstances from maintabhandles

--- client/landing/app/MainApp/maintabs/maintabview.coffee
+++ client/landing/app/MainApp/maintabs/maintabview.coffee
@@ -57,7 +57,7 @@
     # this is a temporary fix for third party apps
     # until router handles everything correctly
     if options.route is '/Develop'
-      appManager.show KD.getAppOptions options.name
+      appManager.showInstance appInstance

   showHandleContainer:()->
     @tabHandleContainer.$().css top : -25


l'objet results peut etre undefined, ce qui cause un crash chez bibi

--- lib/subscriber.coffee
+++ lib/subscriber.coffee
@@ -144,7 +144,7 @@
             .hmset(@key, fieldsAndValues)
             .exec (err, results) =>
                 @info = null # flush cache
-                if results[0]? # subscriber exists?
+                if results && results[0]? # subscriber exists?
                     cb(true) if cb
                 else
                     # remove edited fields


Only register first responder handlers on Mac OS X

--- src/browser/atom-application.coffee
+++ src/browser/atom-application.coffee
@@ -169,24 +169,29 @@

   # Registers basic application commands, non-idempotent.
   handleEvents: ->
-    @on 'application:about', -> Menu.sendActionToFirstResponder('orderFrontStandardAboutPanel:')
     @on 'application:run-all-specs', -> @runSpecs(exitWhenDone: false, resourcePath: global.devResourcePath)
     @on 'application:run-benchmarks', -> @runBenchmarks()
     @on 'application:quit', -> app.quit()
-    @on 'application:hide', -> Menu.sendActionToFirstResponder('hide:')
-    @on 'application:hide-other-applications', -> Menu.sendActionToFirstResponder('hideOtherApplications:')
-    @on 'application:unhide-all-applications', -> Menu.sendActionToFirstResponder('unhideAllApplications:')
     @on 'application:new-window', -> @openPath(initialSize: @getFocusedWindowSize())
     @on 'application:new-file', -> (@focusedWindow() ? this).openPath()
     @on 'application:open', -> @promptForPath()
     @on 'application:open-dev', -> @promptForPath(devMode: true)
-    @on 'application:minimize', -> Menu.sendActionToFirstResponder('performMiniaturize:')
-    @on 'application:zoom', -> Menu.sendActionToFirstResponder('zoom:')
-    @on 'application:bring-all-windows-to-front', -> Menu.sendActionToFirstResponder('arrangeInFront:')
     @on 'application:inspect', ({x,y}) -> @focusedWindow().browserWindow.inspectElement(x, y)
     @on 'application:open-documentation', -> shell.openExternal('https://atom.io/docs/latest/?app')
     @on 'application:install-update', -> autoUpdater.quitAndInstall()
     @on 'application:check-for-update', => @checkForUpdate()
+
+    if process.platform is 'darwin'
+      @on 'application:about', -> Menu.sendActionToFirstResponder('orderFrontStandardAboutPanel:')
+      @on 'application:bring-all-windows-to-front', -> Menu.sendActionToFirstResponder('arrangeInFront:')
+      @on 'application:hide', -> Menu.sendActionToFirstResponder('hide:')
+      @on 'application:hide-other-applications', -> Menu.sendActionToFirstResponder('hideOtherApplications:')
+      @on 'application:minimize', -> Menu.sendActionToFirstResponder('performMiniaturize:')
+      @on 'application:unhide-all-applications', -> Menu.sendActionToFirstResponder('unhideAllApplications:')
+      @on 'application:zoom', -> Menu.sendActionToFirstResponder('zoom:')
+    else
+      @on 'application:minimize', -> @focusedWindow()?.minimize()
+      @on 'application:zoom', -> @focusedWindow()?.maximize()

     @openPathOnEvent('application:show-settings', 'atom://config')
     @openPathOnEvent('application:open-your-config', 'atom://.atom/config')


add subscribeEventOnce to the EventBroker

--- src/chaplin/lib/event_broker.coffee
+++ src/chaplin/lib/event_broker.coffee
@@ -29,6 +29,20 @@
     # Register global handler, force context to the subscriber.
     mediator.subscribe type, handler, this

+  subscribeEventOnce: (type, handler) ->
+    if typeof type isnt 'string'
+      throw new TypeError 'EventBroker#subscribeEventOnce: ' +
+        'type argument must be a string'
+    if typeof handler isnt 'function'
+      throw new TypeError 'EventBroker#subscribeEventOnce: ' +
+        'handler argument must be a function'
+
+    # Ensure that a handler isn’t registered twice.
+    mediator.unsubscribe type, handler, this
+
+    # Register global handler, force context to the subscriber.
+    mediator.subscribeOnce type, handler, this
+
   unsubscribeEvent: (type, handler) ->
     if typeof type isnt 'string'
       throw new TypeError 'EventBroker#unsubscribeEvent: ' +


fix hands margin to add space horizontally

--- framer/Components/DeviceComponent.coffee
+++ framer/Components/DeviceComponent.coffee
@@ -366,10 +366,11 @@

 		paddingOffset = @_device?.paddingOffset or 0

-		paddingOffset = 36 if @selectedHand and @_orientation == 0 and @_device.hands[@selectedHand]?
+		widthOffset = 0
+		widthOffset = 36 if @selectedHand and @_orientation == 0 and @_device.hands[@selectedHand]?

 		phoneScale = _.min([
-			(window.innerWidth  - ((@padding + paddingOffset) * 2)) / width,
+			(window.innerWidth  - ((@padding + paddingOffset + widthOffset) * 2)) / width,
 			(window.innerHeight - ((@padding + paddingOffset) * 2)) / height
 		])


no need to log

no need to log

--- anon.coffee
+++ anon.coffee
@@ -69,8 +69,6 @@
   k = "#{edit.wikipedia}"
   v = "#{edit.page}:#{edit.user}"
   r = lastChange[k] == v
-  if r
-    console.log "found repeat:", k, v
   lastChange[k] = v
   return r


dots at crosshair values

dots at crosshair values

--- app/graph_drawing.coffee
+++ app/graph_drawing.coffee
@@ -479,6 +479,12 @@
         .data(targetValues)
         .text((d) -> params.valueFormat(d?.value))

+      g.selectAll('.target .crosshair-value')
+        .data(targetValues)
+        .attr('cx', (d) -> d.x)
+        .attr('cy', (d) -> d.y)
+        .style('visibility', (d) -> if d.value? then 'visible' else 'hidden')
+

     mousePosition.onValue (p) ->
       positionCrosshair p.x, p.time
@@ -560,27 +566,27 @@
         extraWidth = 0

       target.append('g').attr('class', 'infiniteLines')
-      .each (d) ->
-        lineColor = d.color
-        lineWidth = d.lineWidth + extraWidth
-        d3.select(this)
-          .selectAll('line')
-          .data((d) -> d.scatterValues)
-          .enter().append('line').each (d) ->
-            if d.value
-              l = d3.select(@)
-                .attr('x1', d.x)
-                .attr('x2', d.x)
-                .attr('y1', 0)
-                .attr('y2', height)
-                .attr('stroke', lineColor)
-                .style('stroke-width', lineWidth)
-              if hover
-                l
-                  .style('stroke-opacity', 0)
-              else
-                l
-                  .style('stroke-opacity', lineOpacity)
+        .each (d) ->
+          lineColor = d.color
+          lineWidth = d.lineWidth + extraWidth
+          d3.select(this)
+            .selectAll('line')
+            .data((d) -> d.scatterValues)
+            .enter().append('line').each (d) ->
+              if d.value
+                l = d3.select(@)
+                  .attr('x1', d.x)
+                  .attr('x2', d.x)
+                  .attr('y1', 0)
+                  .attr('y2', height)
+                  .attr('stroke', lineColor)
+                  .style('stroke-width', lineWidth)
+                if hover
+                  l
+                    .style('stroke-opacity', 0)
+                else
+                  l
+                    .style('stroke-opacity', lineOpacity)

     addTarget = (target, hover) ->
       target.each (d) ->
@@ -592,6 +598,18 @@
           addPath(sel, hover)
         else
           addCircles(sel, hover)
+
+        unless hover
+          if type == 'scatter'
+            radius = d.radius + 3
+          else
+            radius = 4
+          sel.append('circle').attr('class', 'crosshair-value')
+            .style('visibility', 'hidden')
+            .attr('fill', d.color)
+            .attr('stroke', params.bgcolor)
+            .attr('stroke-width', 2)
+            .attr('r', radius)

     addTarget(target, false)
     addTarget(target, true)


Fix paginator

Fix paginator

--- resources/assets/coffee/react/ranking/paginator.coffee
+++ resources/assets/coffee/react/ranking/paginator.coffee
@@ -44,7 +44,7 @@
   changePage: (e) =>
     e.preventDefault()
     page = parseInt(e.target.dataset.page)
-    if (@props.page != page)
+    if (@props.page != page - 1)
       @props.onPageChange page - 1

   render: =>


color properties are now immutable

color properties are now immutable

--- framer/Color.coffee
+++ framer/Color.coffee
@@ -8,62 +8,30 @@
 		# If input already is a Color object return input
 		if (color instanceof Color) then return color

-		if @color == null
-			@red = 0
-			@green = 0
-			@blue = 0
-			@alpha = 0
-			return
-
 		# Convert input to RGB
 		rgb = inputToRGB(color)

-		@red = rgb.r
-		@green = rgb.g
-		@blue = rgb.b
-		@alpha = rgb.a
-
-	@define "red",
+		@_r = rgb.r
+		@_g = rgb.g
+		@_b = rgb.b
+		@_a = rgb.a
+		@_roundA = Math.round(100*@_a) / 100
+
+	@define "r",
 		get: -> @_r
-		set: (value) ->
-			if isNumeric(value)
-				@_r = Utils.clamp(value, 0, 255)
-
-	@define "green",
+		set: (value) -> throw "r is readonly"
+
+	@define "g",
 		get: -> @_g
-		set: (value) ->
-			if isNumeric(value)
-				@_g = Utils.clamp(value, 0, 255)
-
-	@define "blue",
+		set: (value) -> throw "g is readonly"
+
+	@define "b",
 		get: -> @_b
-		set: (value) ->
-			if isNumeric(value)
-				@_b = Utils.clamp(value, 0, 255)
-
-	@define "alpha",
+		set: (value) -> throw "b is readonly"
+
+	@define "a",
 		get: -> @_a
-		set: (value) ->
-			if isNumeric(value)
-				@_a = Utils.clamp(value, 0, 1)
-				@_roundA = Math.round(100*@_a) / 100
-
-	# rgba aliases
-	@define "r",
-		get: -> @red
-		set: (value) -> @red = value
-
-	@define "g",
-		get: -> @green
-		set: (value) -> @green = value
-
-	@define "b",
-		get: -> @blue
-		set: (value) -> @blue = value
-
-	@define "a",
-		get: -> @alpha
-		set: (value) -> @alpha = value
+		set: (value) -> throw "a is readonly"

 	toHex: (allow3Char) ->
 		return rgbToHex(@_r, @_g, @_b, allow3Char)
@@ -152,16 +120,16 @@

 		if fromColor not instanceof Color and toColor instanceof Color
 			fromColor = toColor.copy()
-			fromColor.a = 0
+			fromColor._a = 0
 		else if fromColor instanceof Color and fromColor._a == 0 and toColor instanceof Color and toColor._a != 0
 			fromColor = toColor.copy()
-			fromColor.a = 0
+			fromColor._a = 0
 		else if toColor not instanceof Color and fromColor instanceof Color
 			toColor = fromColor.copy()
-			toColor.a = 0
+			toColor._a = 0
 		else if toColor instanceof Color and toColor._a == 0 and fromColor instanceof Color and fromColor._a != 0
 			toColor = fromColor.copy()
-			toColor.a = 0
+			toColor._a = 0

 		if toColor instanceof Color

@@ -174,7 +142,7 @@
 		return result

 	@toColor: (color) -> return new Color(color)
-	@isColor: (color) -> return color instanceof Color
+	@isColor: (color) -> return color instanceof Color or color == null

 	@isColorString: (colorString) -> stringToObject(colorString) != false

@@ -184,37 +152,37 @@
 	a = 1
 	ok = false

-	if typeof color == 'string'
-		color = stringToObject(color)
-
-	if typeof color == 'object'
-
-		if color.hasOwnProperty('red') or color.hasOwnProperty('green') or color.hasOwnProperty('blue')
-			rgb = rgbToRgb(color.red, color.green, color.blue)
-			ok = true
-
-		else if color.hasOwnProperty('r') or color.hasOwnProperty('g') or color.hasOwnProperty('b')
-			rgb = rgbToRgb(color.r, color.g, color.b)
-			ok = true
-
-		else if color.hasOwnProperty('h') or color.hasOwnProperty('s')
-
-			h = if isNumeric(color.h) then color.h else 0
-			s = if isNumeric(color.s) then convertToPercentage(color.s) else 1
-
-			if color.hasOwnProperty('v')
-				v = if isNumeric(color.v) then convertToPercentage(color.v) else 0
-				rgb = hsvToRgb(h, s, v)
-			else
-				l = if isNumeric(color.l) then convertToPercentage(color.l) else 50
-				rgb = hslToRgb(h, s, l)
-
-			ok = true
-
-		if color.hasOwnProperty('a')
-			a = color.a
-		else if color.hasOwnProperty('alpha')
-			a = color.alpha
+	if color == null
+		a = 0
+	else
+
+		if typeof color == 'string'
+			color = stringToObject(color)
+
+		if typeof color == 'object'
+
+			if color.hasOwnProperty('r') or color.hasOwnProperty('g') or color.hasOwnProperty('b')
+				rgb = rgbToRgb(color.r, color.g, color.b)
+				ok = true
+
+			else if color.hasOwnProperty('h') or color.hasOwnProperty('s')
+
+				h = if isNumeric(color.h) then color.h else 0
+				s = if isNumeric(color.s) then convertToPercentage(color.s) else 1
+
+				if color.hasOwnProperty('v')
+					v = if isNumeric(color.v) then convertToPercentage(color.v) else 0
+					rgb = hsvToRgb(h, s, v)
+				else
+					l = if isNumeric(color.l) then convertToPercentage(color.l) else 50
+					rgb = hslToRgb(h, s, l)
+
+				ok = true
+
+			if color.hasOwnProperty('a')
+				a = color.a
+			else if color.hasOwnProperty('alpha')
+				a = color.alpha

 	a = correctAlpha(a)


use mix and validcolor

use mix and validcolor

--- framer/Color.coffee
+++ framer/Color.coffee
@@ -112,13 +112,13 @@
 			a: @_a
 		return copy

-	blend: (colorB, fraction) ->
+	mix: (colorB, fraction) ->
 		return Color.blend(@, colorB, fraction)

 	##############################################################
 	## Class methods

-	@blend: (colorA, colorB, fraction) ->
+	@mix: (colorA, colorB, fraction) ->

 		result = null

@@ -154,7 +154,8 @@
 		return result

 	@toColor: (color) -> return new Color(color)
-	@isColor: (color) -> return color instanceof Color or color == null
+	@isColor: (color) -> return color instanceof Color
+	@validColorValue: (color) -> return color instanceof Color or color == null

 	@isColorString: (colorString) -> stringToObject(colorString) != false


Make backgroundSize default fill

Make backgroundSize default fill

--- framer/Layer.coffee
+++ framer/Layer.coffee
@@ -355,7 +355,7 @@
 	@define "backgroundGrayscale", layerProperty(@, "backgroundGrayscale", "webkitBackdropFilter", 0, _.isNumber)
 	@define "backgroundSepia", layerProperty(@, "backgroundSepia", "webkitBackdropFilter", 0, _.isNumber)

-	@define "backgroundSize", layerProperty(@, "backgroundSize", "backgroundSize", null, _.isString)
+	@define "backgroundSize", layerProperty(@, "backgroundSize", "backgroundSize", "fill", _.isString)

 	for i in [0..8]
 		do (i) =>


fix variable zip.minsize to match config name zip.minSize

--- services/document-updater/app/coffee/ZipManager.coffee
+++ services/document-updater/app/coffee/ZipManager.coffee
@@ -4,7 +4,7 @@
 zlib = require('zlib')

 ZIP_WRITES_ENABLED = Settings.redis.zip?.writesEnabled?
-ZIP_MINSIZE = Settings.redis.zip?.minsize || 64*1024
+ZIP_MINSIZE = Settings.redis.zip?.minSize || 64*1024

 module.exports = ZipManager =
 	uncompressIfNeeded: (doc_id, result, callback) ->


rename config key for platform, prettify help output

--- aspm.coffee
+++ aspm.coffee
@@ -47,7 +47,7 @@
 	config = projectPkg.config?['atom-shell']
 	target = program.target or config?.version
 	arch = program.arch or config?.arch
-	platform = program['target-platform'] or config?['target-platform'] or os.platform()
+	platform = program['target-platform'] or config?['platform'] or os.platform()

 	unless module
 		# build all (serially)
@@ -115,9 +115,9 @@
 program
 .version "v#{pkg.version}"
 .description 'Install and build npm modules for Atom-Shell'
-.option '-t, --target <n>', 'Atom-Shell version'
-.option '-a, --arch <n>', 'target architecture'
-.option '-a, --target-platform <n>', 'target platform'
+.option '-t, --target <version>', 'Atom-Shell version'
+.option '-a, --arch <arch>', 'target architecture'
+.option '-a, --target-platform <platform>', 'target platform'
 .option '-s, --save', 'save as dependency to package.json'
 .option '-s, --save-dev', 'save as devDependency to package.json'
 .option '--tarball', '(fetch the url and) install from tarball.'


show instance teardown log

show instance teardown log

--- imports/ui/pages/InstanceDetailPage.cjsx
+++ imports/ui/pages/InstanceDetailPage.cjsx
@@ -98,6 +98,10 @@
                 done. instance running

             }
+            {docker-compose down if @props.instance.logs?.teardown?}
+

+              {@props.instance.logs?.teardown?.join('')}
+

           </Terminal>


ok, expectPropertyEvents was a bit different, as it doesn't wrap stuff into a describe

--- spec/BaconSpec.coffee
+++ spec/BaconSpec.coffee
@@ -1529,24 +1529,19 @@
     expectPropertyEvents(
       -> Bacon.constant(true).not()
       [false])
-  describe "works with Bacon.constant", ->
-    # TODO: Crazy stuff here: these two only fail as a pair
-    expectPropertyEvents(
-      -> Bacon.constant(true).and(Bacon.constant(true))
-      [true])
-    expectPropertyEvents(
-      -> Bacon.constant(true).or(Bacon.constant(false))
-      [true])
-  describe.skip "accepts constants instead of properties", ->
-    expectPropertyEvents(
-      -> Bacon.constant(true).and(false)
-      [false])
-    expectPropertyEvents(
-      -> Bacon.constant(true).and(true)
-      [true])
-    expectPropertyEvents(
-      -> Bacon.constant(true).or(false)
-      [true])
+  describe "accepts constants instead of properties", ->
+    describe "true and false", ->
+      expectPropertyEvents(
+        -> Bacon.constant(true).and(false)
+        [false])
+    describe "true and true", ->
+      expectPropertyEvents(
+        -> Bacon.constant(true).and(true)
+        [true])
+    describe "true or false", ->
+      expectPropertyEvents(
+        -> Bacon.constant(true).or(false)
+        [true])

 describe "Bacon.mergeAll", ->
   describe ("merges all given streams"), ->