{"action":"created","comment":{"url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/comments/45751181","id":45751181,"diff_hunk":"@@ -0,0 +1,635 @@\n+(function() {\n+  'use strict';\n+\n+  // local alias for region id => name lookups\n+  var REGION_ID_NAME = eiti.data.REGION_ID_NAME;\n+  var colorscheme = colorbrewer.Purples;\n+\n+  // our state is immutable!\n+  var state = new Immutable.Map();\n+  var rendered = false;\n+  // this flag indicates whether we're in the middle of a state mutation\n+  var mutating = false;\n+\n+  // create references for often-used elements\n+  var root = d3.select('#gdp');\n+  var regionSections = root.selectAll('.regions > .region');\n+  var timeline = root.select('#timeline');\n+\n+  var getter = eiti.data.getter; // getter(\"foo\")({foo: 1}) === 1\n+  var formatNumber = eiti.format.dollars;\n+  var NULL_FILL = '#eee';\n+\n+  // buttons that expand and collapse other elements\n+  var filterToggle = root.select('button.toggle-filters');\n+\n+  // FIXME: componentize these too\n+  root.selectAll('a[data-key]')\n+    .on('click', function() {\n+      d3.event.preventDefault();\n+    });\n+\n+  // get the filters and add change event handlers\n+  var filters = root.selectAll('.filters [name]')\n+    // intialize the state props\n+    .each(function() {\n+      state = state.set(this.name, this.value);\n+    })\n+    .on('change', function() {\n+      if (mutating) {\n+        return;\n+      }\n+      var prop = this.name;\n+      var value = this.value;\n+      mutateState(function(state) {\n+        return state.set(prop, value);\n+      });\n+    });\n+\n+  // create our data \"model\"\n+  var model = createModel();\n+\n+  // kick off the \"app\"\n+  initialize();\n+\n+  // when the hash changes, update the state\n+  d3.select(window)\n+    .on('hashchange', function() {\n+      if (mutating) {\n+        return;\n+      }\n+      var props = parseHash();\n+      mutateState(function() {\n+        return new Immutable.Map(props);\n+      });\n+    });\n+\n+  function initialize() {\n+    var props = parseHash();\n+    if (Object.keys(props).length) {\n+      filterToggle.attr('aria-expanded', true);\n+    }\n+    return mutateState(function(state) {\n+      return state.merge(props);\n+    }) || render(state);\n+  }\n+\n+  function parseHash() {\n+    if (!location.hash) {\n+      return {};\n+    }\n+    var hash = location.hash.substr(1);\n+    return eiti.url.qs.parse(hash);\n+  }\n+\n+  function mutateState(fn) {\n+    mutating = true;\n+    var old = state;\n+    state = fn(state);\n+    if (!Immutable.is(old, state)) {\n+      render(state, old);\n+      location.hash = eiti.url.qs.format(state.toJS());\n+      mutating = false;\n+      return true;\n+    }\n+    mutating = false;\n+    return false;\n+  }\n+\n+  function render(state, previous) {\n+    // console.time('render');\n+\n+    // update the filters\n+    filters.each(function() {\n+      this.value = state.get(this.name) || '';\n+    });\n+\n+    var region = state.get('region') || 'US';\n+    var selected = regionSections\n+      .classed('active', function() {\n+        return this.id === region;\n+      })\n+      .filter('.active');\n+\n+    updateFilterDescription(state);\n+\n+    model.on('yearly', function(data) {\n+      timeline.call(updateTimeline, data, state);\n+    });\n+\n+    selected.call(renderRegion, state);\n+    // console.timeEnd('render');\n+    rendered = true;\n+  }\n+\n+  function renderRegion(selection, state) {\n+    var regionId = state.get('region') || 'US';\n+    var fields = getFields(regionId);\n+\n+    // console.log('loading', regionId);\n+    // console.time('load');\n+    model.load(state, function(error, data) {\n+      // console.timeEnd('load');\n+      if (error) {\n+        console.warn('error:', error.status, error.statusText);\n+        data = [];\n+      }\n+\n+      // console.time('render regions');\n+\n+      var header = selection.select('.region-header');\n+      if (header.select('*').empty()) {\n+        header.call(createRegionRow);\n+      }\n+\n+      var total = d3.sum(data, getter(fields.value));\n+      total = Math.floor(total);\n+      header\n+        .datum({\n+          value: total,\n+          properties: {\n+            name: 'Total'\n+          }\n+        })\n+        .call(updateRegionRow);\n+\n+      var map = selection.select('[is=\"eiti-map\"]');\n+      onMapLoaded(map, function() {\n+        var subregions = map.selectAll('path.feature');\n+\n+        switch (regionId) {\n+          case 'US':\n+            subregions.on('click.mutate', eventMutator('region', 'id'));\n+            break;\n+        }\n+\n+        var features = subregions.data();\n+        var dataByFeatureId = d3.nest()\n+          .key(getter(fields.region))\n+          .rollup(function(d) {\n+            return +d[0][fields.value];\n+          })\n+          .map(data);\n+\n+        // console.log('data by feature id:', dataByFeatureId);\n+\n+        var featureId = getter(fields.featureId);\n+        features.forEach(function(f) {\n+          var id = featureId(f);\n+          f.value = dataByFeatureId[id];\n+        });\n+\n+        var value = getter('value');\n+        var values = features.map(value);\n+\n+        var scale = createScale(values);\n+\n+        subregions.style('fill', function(d) {\n+          var v = value(d);\n+          return v === undefined\n+            ? NULL_FILL\n+            : scale(v);\n+        });\n+\n+        selection.select('.map-legend')\n+          .call(updateLegend, scale);\n+\n+        selection\n+          .call(updateSubregions, features, scale);\n+\n+        // console.timeEnd('render regions');\n+      });\n+    });\n+  }\n+\n+  function onMapLoaded(map, fn) {\n+    if (map.property('loaded')) {\n+      return fn.apply(map.node(), map.datum());\n+    }\n+    return map.on('load', function() {\n+      fn.apply(this, arguments);\n+    });\n+  }\n+\n+  function updateSubregions(selection, features, scale) {\n+\n+    var list = selection.select('.subregions tbody');\n+    if (list.empty()) {\n+      // console.warn('no subregions list:', selection.node());\n+      return;\n+    }\n+\n+    features = features.filter(function(d) {\n+      return !!d.value;\n+    });\n+\n+    var items = list.selectAll('tr.subregion')\n+      .data(features, getter('id'));\n+\n+    items.exit().remove();\n+    var enter = items.enter()\n+      .append('tr')\n+        .call(createRegionRow);\n+\n+    items.sort(function(a, b) {\n+      return d3.descending(a.value, b.value);\n+    });\n+\n+    items.select('.color-swatch')\n+      .style('background-color', function(d) {\n+        return scale(d.value);\n+      });\n+\n+    items.call(updateRegionRow);\n+  }\n+\n+  function createRegionRow(selection) {\n+    selection\n+      .attr('class', 'subregion');\n+    var title = selection.append('td')\n+      .attr('class', 'subregion-name');\n+    title.append('span')\n+      .attr('class', 'color-swatch');\n+    title.append('span')\n+      .attr('class', 'text');\n+\n+    selection.append('td')\n+      .attr('class', 'value value_dollars');\n+    selection.append('td')\n+      .attr('class', 'bar bar_dollars')\n+      .append('eiti-bar');\n+\n+    selection.append('td')\n+      .attr('class', 'value value_percent');\n+    selection.append('td')\n+      .attr('class', 'bar bar_percent')\n+      .append('eiti-bar');\n+  }\n+\n+  function updateRegionRow(selection) {\n+    selection.select('.subregion-name .text')\n+      .text(function(f) {\n+        // XXX all features need a name!\n+        return f.properties.name || '(' + f.id + ')';\n+      });\n+\n+    var value = getter('value');\n+    var values = selection.data()\n+      .map(value)\n+      .sort(d3.ascending);\n+\n+    var max = d3.max(values.map(Math.abs));\n+\n+    selection.select('.value_dollars')\n+      .text(function(d) {\n+        return d.value > 0 ? formatNumber(d.value) : '';\n+      });\n+    selection.select('.bar_dollars eiti-bar')\n+      .attr('max', max)\n+      .attr('value', value);\n+  }\n+\n+  function createScale(values) {\n+    var extent = d3.extent(values);\n+    var min = extent[0];\n+    var max = Math.max(extent[1], 0);\n+\n+    var colors = colorscheme;\n+    if (max >= 2e9) {\n+      colors = colors[7];\n+    } else if (max >= 1e6) {\n+      colors = colors[5];\n+    } else {\n+      colors = colors[3];\n+    }\n+\n+    var domain = (min < 0)\n+      ? [Math.min(min, 0), max]\n+      : [0, max];\n+\n+    domain = d3.scale.linear()\n+      .domain(domain)\n+      .nice()\n+      .domain();\n+\n+    return d3.scale.quantize()\n+      .domain(domain)\n+      .range(colors);\n+  }\n+\n+  function updateLegend(legend, scale) {\n+    var domain = scale.domain();\n+    if (domain.some(isNaN)) {\n+      legend.classed('legend-invalid', true);\n+      return;\n+    }\n+\n+    legend.classed('legend-invalid', false);\n+\n+    var data = scale.range().map(function(y) {\n+        return {\n+          color: y,\n+          range: scale.invertExtent(y)\n+        };\n+      });\n+\n+    data.unshift({\n+      color: NULL_FILL,\n+      range: ['no data'],\n+      none: true\n+    });\n+\n+    var last = data.length - 1;\n+\n+    var steps = legend.selectAll('.step')\n+      .data(data);\n+\n+    steps.exit().remove();\n+    steps.enter().append('div')\n+      .attr('class', 'step')\n+      .append('span')\n+        .attr('class', 'label');\n+\n+    steps\n+      .style('border-color', getter('color'))\n+      .select('.label')\n+        .text(function(d, i) {\n+          return d.none\n+            ? d.range[0]\n+            : i === last\n+              ? formatNumber(d.range[0]) + '+'\n+              : formatNumber(d.range[0]);\n+        });\n+  }\n+\n+  function getFields(state) {\n+    var fields = {\n+      region: function(d) {\n+        return eiti.data.STATE_ID_FIPS[d.FIPS];\n+      },\n+      value: 'GDP',\n+      featureId: 'id'\n+    };\n+    return fields;\n+  }\n+\n+  function updateTimeline(selection, data, state) {\n+    var fields = getFields(state.get('region'));\n+\n+    var value = getter(fields.value);\n+    var dataByYearPolarity = d3.nest()\n+      .key(function(d) {\n+        return value(d) < 0 ? 'negative' : 'positive';\n+      })\n+      .key(getter('Year'))\n+      .rollup(function(d) {\n+        return d3.sum(d, value);\n+      })\n+      .map(data);\n+\n+    // console.log('data by year/polarity:', dataByYearPolarity);\n+    var positiveYears = dataByYearPolarity.positive || {};\n+    var positiveExtent = d3.extent(d3.values(positiveYears));\n+    var negativeYears = dataByYearPolarity.negative || {};\n+    var negativeExtent = d3.extent(d3.values(negativeYears));\n+\n+    // get the slider to determine the year range\n+    var slider = root.select('#year-selector').node();\n+\n+    // XXX: d3.range() is exclusive, so we need to add two\n+    // in order to include the last year *and* make the area render the right\n+    // edge of the last year.\n+    var years = d3.range(slider.min, slider.max + 2, 1);\n+\n+    var w = 500;\n+    var h = 40;\n+    var viewBox = selection.attr('viewBox');\n+    // if there is a viewBox already, derive the dimensions from it\n+    if (viewBox) {\n+      viewBox = viewBox.split(' ').map(Number);\n+      w = viewBox[2];\n+      h = viewBox[3];\n+    } else {\n+      // otherwise, set up the viewBox with our default dimensions\n+      selection.attr('viewBox', [0, 0, w, h].join(' '));\n+    }\n+\n+    var left = 0; // XXX need to make room for axis labels\n+    var right = w;\n+\n+    // the x-axis scale\n+    var x = d3.scale.linear()\n+      .domain(d3.extent(years))\n+      .range([left, right + 2]);\n+\n+    // the y-axis domain sets a specific point for zero.\n+    // the `|| -100` and `|| 100` bits here ensure that the domain has some\n+    // size, even if there is no data from which to derive an extent.\n+    var yDomain = [\n+      negativeExtent[0] || 0,\n+      positiveExtent[1] || 100\n+    ];\n+    // the y-axis scale, with the zero point at 3/4 the height\n+    // XXX: note that this exaggerates the negative scale!\n+    var y = d3.scale.linear()\n+      .domain(yDomain)\n+      .range([h, 0]);\n+\n+    var area = d3.svg.area()\n+      .interpolate('step-after')\n+      .x(function(d) { return x(d.year); })\n+      .y0(y(0))\n+      .y1(function(d) { return y(d.value); });\n+\n+    var areas = selection.selectAll('path.area')\n+      .data([\n+        {\n+          polarity: 'positive',\n+          values: years.map(function(year) {\n+            return {\n+              year: year,\n+              value: positiveYears[year] || 0\n+            };\n+          })\n+        },\n+        {\n+          polarity: 'negative',\n+          values: years.map(function(year) {\n+            return {\n+              year: year,\n+              value: negativeYears[year] || 0\n+            };\n+          })\n+        }\n+      ]);\n+\n+    areas.exit().remove();\n+    areas.enter().append('path')\n+      .attr('class', function(d) {\n+        return 'area ' + d.polarity;\n+      });\n+\n+    var zero = selection.select('g.zero');\n+    if (zero.empty()) {\n+      zero = selection.append('g')\n+        .attr('class', 'zero');\n+      zero.append('line');\n+      zero.append('text')\n+        .attr('class', 'label')\n+        .attr('text-anchor', 'end')\n+        .attr('dy', 0.5);\n+        // .text(0);\n+    }\n+\n+    var mask = selection.select('g.mask');\n+    if (mask.empty()) {\n+      mask = selection.append('g')\n+        .attr('class', 'mask');\n+      mask.append('rect')\n+        .attr('class', 'before')\n+        .attr('x', 0)\n+        .attr('width', 0)\n+        .attr('height', h);\n+      mask.append('rect')\n+        .attr('class', 'after')\n+        .attr('x', w)\n+        .attr('width', w)\n+        .attr('height', h);\n+      mask.append('line')\n+        .attr('class', 'before')\n+        .attr('y1', 0)\n+        .attr('y2', h);\n+      mask.append('line')\n+        .attr('class', 'after')\n+        .attr('y1', 0)\n+        .attr('y2', h);\n+    }\n+\n+    var updated = selection.property('updated');\n+    var t = function(d) { return d; };\n+    if (updated) {\n+      t = function(d) {\n+        return d.transition()\n+          .duration(500);\n+      };\n+    }\n+\n+    var year1 = slider.value;\n+    var year2 = slider.value + 1;\n+    var beforeX = x(year1);\n+    var afterX = Math.min(x(year2), w);\n+    // don't transition these\n+    mask.select('rect.before')\n+      .attr('width', beforeX);\n+    mask.select('rect.after')\n+      .attr('x', afterX);\n+    mask.select('line.before')\n+      .attr('transform', 'translate(' + [beforeX, 0] + ')');\n+    mask.select('line.after')\n+      .attr('transform', 'translate(' + [afterX, 0] + ')');\n+\n+    // transition these\n+    // mask = t(mask);\n+    mask.selectAll('line')\n+      .attr('y1', y(positiveYears[year1] || 0))\n+      .attr('y2', y(negativeYears[year1] || 0));\n+\n+    zero.select('line')\n+      .attr('x1', left)\n+      .attr('x2', right);\n+\n+    zero.select('.label')\n+      .attr('transform', 'translate(' + [left, 0] + ')');\n+\n+    t(zero).attr('transform', 'translate(' + [0, y(0)] + ')');\n+\n+    t(areas).attr('d', function(d) {\n+      return area(d.values);\n+    });\n+    selection.property('updated', true);\n+  }\n+\n+  function createModel() {\n+    var model = {};\n+    var dispatch = d3.dispatch('yearly');\n+    var req;\n+\n+    model.load = function(state, done) {\n+      if (req) {\n+        req.abort();\n+      }\n+      var url = getDataURL(state);\n+      // console.log('model.load():', url);\n+      req = eiti.load(url, function(error, data) {\n+        if (error) {\n+          data = [];\n+        }\n+        applyFilters(data, state, done);\n+      });\n+      return req;\n+    };\n+\n+    function getDataURL(state) {","path":"js/pages/gdp.js","position":572,"original_position":572,"commit_id":"dd36ee608fcfcd125c0629492df247a7db769e57","original_commit_id":"dd36ee608fcfcd125c0629492df247a7db769e57","user":{"login":"houndci","id":6697940,"avatar_url":"https://avatars.githubusercontent.com/u/6697940?v=3","gravatar_id":"","url":"https://api.github.com/users/houndci","html_url":"https://github.com/houndci","followers_url":"https://api.github.com/users/houndci/followers","following_url":"https://api.github.com/users/houndci/following{/other_user}","gists_url":"https://api.github.com/users/houndci/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci/subscriptions","organizations_url":"https://api.github.com/users/houndci/orgs","repos_url":"https://api.github.com/users/houndci/repos","events_url":"https://api.github.com/users/houndci/events{/privacy}","received_events_url":"https://api.github.com/users/houndci/received_events","type":"User","site_admin":false},"body":"'state' is defined but never used.","created_at":"2015-11-24T15:41:23Z","updated_at":"2015-11-24T15:41:23Z","html_url":"https://github.com/18F/doi-extractives-data/pull/873#discussion_r45751181","pull_request_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873","_links":{"self":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/comments/45751181"},"html":{"href":"https://github.com/18F/doi-extractives-data/pull/873#discussion_r45751181"},"pull_request":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873"}}},"pull_request":{"url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873","id":51675670,"html_url":"https://github.com/18F/doi-extractives-data/pull/873","diff_url":"https://github.com/18F/doi-extractives-data/pull/873.diff","patch_url":"https://github.com/18F/doi-extractives-data/pull/873.patch","issue_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/873","number":873,"state":"open","locked":false,"title":"[WIP] Explore gdp","user":{"login":"gemfarmer","id":4803473,"avatar_url":"https://avatars.githubusercontent.com/u/4803473?v=3","gravatar_id":"","url":"https://api.github.com/users/gemfarmer","html_url":"https://github.com/gemfarmer","followers_url":"https://api.github.com/users/gemfarmer/followers","following_url":"https://api.github.com/users/gemfarmer/following{/other_user}","gists_url":"https://api.github.com/users/gemfarmer/gists{/gist_id}","starred_url":"https://api.github.com/users/gemfarmer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gemfarmer/subscriptions","organizations_url":"https://api.github.com/users/gemfarmer/orgs","repos_url":"https://api.github.com/users/gemfarmer/repos","events_url":"https://api.github.com/users/gemfarmer/events{/privacy}","received_events_url":"https://api.github.com/users/gemfarmer/received_events","type":"User","site_admin":false},"body":"Fixes #854, #686, #682 ","created_at":"2015-11-24T15:41:19Z","updated_at":"2015-11-24T15:41:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"116e513f1a3ab84f30e4ca27b6f85fec6d82ce27","assignee":null,"milestone":{"url":"https://api.github.com/repos/18F/doi-extractives-data/milestones/28","html_url":"https://github.com/18F/doi-extractives-data/milestones/Sprint-CapriciousGorilla","labels_url":"https://api.github.com/repos/18F/doi-extractives-data/milestones/28/labels","id":1422132,"number":28,"title":"Sprint-CapriciousGorilla","description":"","creator":{"login":"meiqimichelle","id":4827522,"avatar_url":"https://avatars.githubusercontent.com/u/4827522?v=3","gravatar_id":"","url":"https://api.github.com/users/meiqimichelle","html_url":"https://github.com/meiqimichelle","followers_url":"https://api.github.com/users/meiqimichelle/followers","following_url":"https://api.github.com/users/meiqimichelle/following{/other_user}","gists_url":"https://api.github.com/users/meiqimichelle/gists{/gist_id}","starred_url":"https://api.github.com/users/meiqimichelle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meiqimichelle/subscriptions","organizations_url":"https://api.github.com/users/meiqimichelle/orgs","repos_url":"https://api.github.com/users/meiqimichelle/repos","events_url":"https://api.github.com/users/meiqimichelle/events{/privacy}","received_events_url":"https://api.github.com/users/meiqimichelle/received_events","type":"User","site_admin":false},"open_issues":58,"closed_issues":9,"state":"open","created_at":"2015-11-20T17:33:36Z","updated_at":"2015-11-24T15:41:19Z","due_on":"2015-12-04T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873/commits","review_comments_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873/comments","review_comment_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls/comments{/number}","comments_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/873/comments","statuses_url":"https://api.github.com/repos/18F/doi-extractives-data/statuses/dd36ee608fcfcd125c0629492df247a7db769e57","head":{"label":"18F:explore-gdp","ref":"explore-gdp","sha":"dd36ee608fcfcd125c0629492df247a7db769e57","user":{"login":"18F","id":6233994,"avatar_url":"https://avatars.githubusercontent.com/u/6233994?v=3","gravatar_id":"","url":"https://api.github.com/users/18F","html_url":"https://github.com/18F","followers_url":"https://api.github.com/users/18F/followers","following_url":"https://api.github.com/users/18F/following{/other_user}","gists_url":"https://api.github.com/users/18F/gists{/gist_id}","starred_url":"https://api.github.com/users/18F/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/18F/subscriptions","organizations_url":"https://api.github.com/users/18F/orgs","repos_url":"https://api.github.com/users/18F/repos","events_url":"https://api.github.com/users/18F/events{/privacy}","received_events_url":"https://api.github.com/users/18F/received_events","type":"Organization","site_admin":false},"repo":{"id":21627244,"name":"doi-extractives-data","full_name":"18F/doi-extractives-data","owner":{"login":"18F","id":6233994,"avatar_url":"https://avatars.githubusercontent.com/u/6233994?v=3","gravatar_id":"","url":"https://api.github.com/users/18F","html_url":"https://github.com/18F","followers_url":"https://api.github.com/users/18F/followers","following_url":"https://api.github.com/users/18F/following{/other_user}","gists_url":"https://api.github.com/users/18F/gists{/gist_id}","starred_url":"https://api.github.com/users/18F/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/18F/subscriptions","organizations_url":"https://api.github.com/users/18F/orgs","repos_url":"https://api.github.com/users/18F/repos","events_url":"https://api.github.com/users/18F/events{/privacy}","received_events_url":"https://api.github.com/users/18F/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/18F/doi-extractives-data","description":"Information on the extractive industries in the U.S. from Federal data.","fork":false,"url":"https://api.github.com/repos/18F/doi-extractives-data","forks_url":"https://api.github.com/repos/18F/doi-extractives-data/forks","keys_url":"https://api.github.com/repos/18F/doi-extractives-data/keys{/key_id}","collaborators_url":"https://api.github.com/repos/18F/doi-extractives-data/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/18F/doi-extractives-data/teams","hooks_url":"https://api.github.com/repos/18F/doi-extractives-data/hooks","issue_events_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/events{/number}","events_url":"https://api.github.com/repos/18F/doi-extractives-data/events","assignees_url":"https://api.github.com/repos/18F/doi-extractives-data/assignees{/user}","branches_url":"https://api.github.com/repos/18F/doi-extractives-data/branches{/branch}","tags_url":"https://api.github.com/repos/18F/doi-extractives-data/tags","blobs_url":"https://api.github.com/repos/18F/doi-extractives-data/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/18F/doi-extractives-data/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/18F/doi-extractives-data/git/refs{/sha}","trees_url":"https://api.github.com/repos/18F/doi-extractives-data/git/trees{/sha}","statuses_url":"https://api.github.com/repos/18F/doi-extractives-data/statuses/{sha}","languages_url":"https://api.github.com/repos/18F/doi-extractives-data/languages","stargazers_url":"https://api.github.com/repos/18F/doi-extractives-data/stargazers","contributors_url":"https://api.github.com/repos/18F/doi-extractives-data/contributors","subscribers_url":"https://api.github.com/repos/18F/doi-extractives-data/subscribers","subscription_url":"https://api.github.com/repos/18F/doi-extractives-data/subscription","commits_url":"https://api.github.com/repos/18F/doi-extractives-data/commits{/sha}","git_commits_url":"https://api.github.com/repos/18F/doi-extractives-data/git/commits{/sha}","comments_url":"https://api.github.com/repos/18F/doi-extractives-data/comments{/number}","issue_comment_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/comments{/number}","contents_url":"https://api.github.com/repos/18F/doi-extractives-data/contents/{+path}","compare_url":"https://api.github.com/repos/18F/doi-extractives-data/compare/{base}...{head}","merges_url":"https://api.github.com/repos/18F/doi-extractives-data/merges","archive_url":"https://api.github.com/repos/18F/doi-extractives-data/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/18F/doi-extractives-data/downloads","issues_url":"https://api.github.com/repos/18F/doi-extractives-data/issues{/number}","pulls_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls{/number}","milestones_url":"https://api.github.com/repos/18F/doi-extractives-data/milestones{/number}","notifications_url":"https://api.github.com/repos/18F/doi-extractives-data/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/18F/doi-extractives-data/labels{/name}","releases_url":"https://api.github.com/repos/18F/doi-extractives-data/releases{/id}","created_at":"2014-07-08T19:44:18Z","updated_at":"2015-11-16T22:37:00Z","pushed_at":"2015-11-24T15:41:19Z","git_url":"git://github.com/18F/doi-extractives-data.git","ssh_url":"git@github.com:18F/doi-extractives-data.git","clone_url":"https://github.com/18F/doi-extractives-data.git","svn_url":"https://github.com/18F/doi-extractives-data","homepage":"https://useiti.doi.gov/","size":188105,"stargazers_count":10,"watchers_count":10,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":122,"forks":3,"open_issues":122,"watchers":10,"default_branch":"dev"}},"base":{"label":"18F:dev","ref":"dev","sha":"d8f0322597842c8f2d3916a02f60eb9db66bbd7a","user":{"login":"18F","id":6233994,"avatar_url":"https://avatars.githubusercontent.com/u/6233994?v=3","gravatar_id":"","url":"https://api.github.com/users/18F","html_url":"https://github.com/18F","followers_url":"https://api.github.com/users/18F/followers","following_url":"https://api.github.com/users/18F/following{/other_user}","gists_url":"https://api.github.com/users/18F/gists{/gist_id}","starred_url":"https://api.github.com/users/18F/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/18F/subscriptions","organizations_url":"https://api.github.com/users/18F/orgs","repos_url":"https://api.github.com/users/18F/repos","events_url":"https://api.github.com/users/18F/events{/privacy}","received_events_url":"https://api.github.com/users/18F/received_events","type":"Organization","site_admin":false},"repo":{"id":21627244,"name":"doi-extractives-data","full_name":"18F/doi-extractives-data","owner":{"login":"18F","id":6233994,"avatar_url":"https://avatars.githubusercontent.com/u/6233994?v=3","gravatar_id":"","url":"https://api.github.com/users/18F","html_url":"https://github.com/18F","followers_url":"https://api.github.com/users/18F/followers","following_url":"https://api.github.com/users/18F/following{/other_user}","gists_url":"https://api.github.com/users/18F/gists{/gist_id}","starred_url":"https://api.github.com/users/18F/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/18F/subscriptions","organizations_url":"https://api.github.com/users/18F/orgs","repos_url":"https://api.github.com/users/18F/repos","events_url":"https://api.github.com/users/18F/events{/privacy}","received_events_url":"https://api.github.com/users/18F/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/18F/doi-extractives-data","description":"Information on the extractive industries in the U.S. from Federal data.","fork":false,"url":"https://api.github.com/repos/18F/doi-extractives-data","forks_url":"https://api.github.com/repos/18F/doi-extractives-data/forks","keys_url":"https://api.github.com/repos/18F/doi-extractives-data/keys{/key_id}","collaborators_url":"https://api.github.com/repos/18F/doi-extractives-data/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/18F/doi-extractives-data/teams","hooks_url":"https://api.github.com/repos/18F/doi-extractives-data/hooks","issue_events_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/events{/number}","events_url":"https://api.github.com/repos/18F/doi-extractives-data/events","assignees_url":"https://api.github.com/repos/18F/doi-extractives-data/assignees{/user}","branches_url":"https://api.github.com/repos/18F/doi-extractives-data/branches{/branch}","tags_url":"https://api.github.com/repos/18F/doi-extractives-data/tags","blobs_url":"https://api.github.com/repos/18F/doi-extractives-data/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/18F/doi-extractives-data/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/18F/doi-extractives-data/git/refs{/sha}","trees_url":"https://api.github.com/repos/18F/doi-extractives-data/git/trees{/sha}","statuses_url":"https://api.github.com/repos/18F/doi-extractives-data/statuses/{sha}","languages_url":"https://api.github.com/repos/18F/doi-extractives-data/languages","stargazers_url":"https://api.github.com/repos/18F/doi-extractives-data/stargazers","contributors_url":"https://api.github.com/repos/18F/doi-extractives-data/contributors","subscribers_url":"https://api.github.com/repos/18F/doi-extractives-data/subscribers","subscription_url":"https://api.github.com/repos/18F/doi-extractives-data/subscription","commits_url":"https://api.github.com/repos/18F/doi-extractives-data/commits{/sha}","git_commits_url":"https://api.github.com/repos/18F/doi-extractives-data/git/commits{/sha}","comments_url":"https://api.github.com/repos/18F/doi-extractives-data/comments{/number}","issue_comment_url":"https://api.github.com/repos/18F/doi-extractives-data/issues/comments{/number}","contents_url":"https://api.github.com/repos/18F/doi-extractives-data/contents/{+path}","compare_url":"https://api.github.com/repos/18F/doi-extractives-data/compare/{base}...{head}","merges_url":"https://api.github.com/repos/18F/doi-extractives-data/merges","archive_url":"https://api.github.com/repos/18F/doi-extractives-data/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/18F/doi-extractives-data/downloads","issues_url":"https://api.github.com/repos/18F/doi-extractives-data/issues{/number}","pulls_url":"https://api.github.com/repos/18F/doi-extractives-data/pulls{/number}","milestones_url":"https://api.github.com/repos/18F/doi-extractives-data/milestones{/number}","notifications_url":"https://api.github.com/repos/18F/doi-extractives-data/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/18F/doi-extractives-data/labels{/name}","releases_url":"https://api.github.com/repos/18F/doi-extractives-data/releases{/id}","created_at":"2014-07-08T19:44:18Z","updated_at":"2015-11-16T22:37:00Z","pushed_at":"2015-11-24T15:41:19Z","git_url":"git://github.com/18F/doi-extractives-data.git","ssh_url":"git@github.com:18F/doi-extractives-data.git","clone_url":"https://github.com/18F/doi-extractives-data.git","svn_url":"https://github.com/18F/doi-extractives-data","homepage":"https://useiti.doi.gov/","size":188105,"stargazers_count":10,"watchers_count":10,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":122,"forks":3,"open_issues":122,"watchers":10,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873"},"html":{"href":"https://github.com/18F/doi-extractives-data/pull/873"},"issue":{"href":"https://api.github.com/repos/18F/doi-extractives-data/issues/873"},"comments":{"href":"https://api.github.com/repos/18F/doi-extractives-data/issues/873/comments"},"review_comments":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873/comments"},"review_comment":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/18F/doi-extractives-data/pulls/873/commits"},"statuses":{"href":"https://api.github.com/repos/18F/doi-extractives-data/statuses/dd36ee608fcfcd125c0629492df247a7db769e57"}}}}