18F/doi-extractives-data — pull request #414 by shawnbot (2014-12-31 19:10:24+00:00)
Title: map accessibility, code cleanup and optimization

This single, gargantuan commit refactors the map code in a couple of ways:

1. All of the regions are now keyboard accessible via the `tabindex` attribute, and most have `aria-label` attributes. One particular bit of code reorganizes the SVG DOM that Leaflet generates so that MultiPolygon features fall under a single `` element, rather than one per polygon (which resulted in three separately focusable regions for Michigan, for instance).
1. The state draw order has been updated so that western states draw last (though not all states have data, so the order may not be final)
1. The map layers have been turned into a configuration object, `layers`, which specifies the data set, sort order and optional name property. This will ease the transition to asynchronous loading of GeoJSON per #413.
1. The 3D effect has been refactored using d3 data joins, which should *in theory* be faster. Zooming hides then re-renders the shapes, but does not recalculate heights.
1. JavaScript has been reformatted and some functions renamed for clarity and consistency.

A couple of things need to be done before this should be merged:

- [ ] incorporate an ES5 shim (either [es5-shim](https://github.com/es-shims/es5-shim) or [aight](https://github.com/shawnbot/aight)) for IE9 (which lacks `Array.prototype.sort()`, among other methods)
- [ ] test it in IE9 and IE10
- [ ] test it on mobile devices (side note: the `navigator.userAgent` sniffing could be re-worked to use feature and/or [form factor](http://www.html5rocks.com/en/tutorials/detection/#ff-detection) detection, or a more robust tool like [WhichBrowser](https://github.com/WhichBrowser/WhichBrowser))