From 2671c013db8f081d1a693bc8b6df8f97efe3bab9 Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 16:53:16 -0500 Subject: [PATCH 01/53] Generate express project --- .gitignore | 1 + app.js | 46 ++++ bin/www | 90 ++++++++ package-lock.json | 402 +++++++++++++++++++++++++++++++++++ package.json | 17 ++ public/stylesheets/style.css | 8 + routes/index.js | 9 + routes/users.js | 9 + views/error.hbs | 3 + views/index.hbs | 2 + views/layout.hbs | 10 + 11 files changed, 597 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100755 bin/www create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/stylesheets/style.css create mode 100644 routes/index.js create mode 100644 routes/users.js create mode 100644 views/error.hbs create mode 100644 views/index.hbs create mode 100644 views/layout.hbs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/app.js b/app.js new file mode 100644 index 0000000..94a75a6 --- /dev/null +++ b/app.js @@ -0,0 +1,46 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'hbs'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', index); +app.use('/users', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..22f988a --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('project-what-have-you-done:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c40787e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,402 @@ +{ + "name": "project_what_have_you_done", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.16", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b61fd62 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "project-what-have-you-done", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "~1.17.1", + "cookie-parser": "~1.4.3", + "debug": "~2.6.3", + "express": "~4.15.2", + "hbs": "~4.0.1", + "morgan": "~1.8.1", + "serve-favicon": "~2.4.2" + } +} diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..623e430 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/views/error.hbs b/views/error.hbs new file mode 100644 index 0000000..0659765 --- /dev/null +++ b/views/error.hbs @@ -0,0 +1,3 @@ +

{{message}}

+

{{error.status}}

+
{{error.stack}}
diff --git a/views/index.hbs b/views/index.hbs new file mode 100644 index 0000000..1f308fd --- /dev/null +++ b/views/index.hbs @@ -0,0 +1,2 @@ +

{{title}}

+

Welcome to {{title}}

diff --git a/views/layout.hbs b/views/layout.hbs new file mode 100644 index 0000000..068eb6b --- /dev/null +++ b/views/layout.hbs @@ -0,0 +1,10 @@ + + + + {{title}} + + + + {{{body}}} + + From 9ca76066e9aa114d552937346cf3d9ce7d692425 Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 16:53:36 -0500 Subject: [PATCH 02/53] Add name to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index cb007d2..6a0fa91 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # project_what_have_you_done Build an application to help track the legislative activities of your local representatives. + +by Anne Richardson From e4a975a8e83148a4a5a6c55232342b4191ad4228 Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 16:55:30 -0500 Subject: [PATCH 03/53] Install handlebars package --- package-lock.json | 476 +++++++++++++--------------------------------- package.json | 1 + 2 files changed, 132 insertions(+), 345 deletions(-) diff --git a/package-lock.json b/package-lock.json index c40787e..b69b5e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,401 +1,187 @@ { - "name": "project_what_have_you_done", - "version": "1.0.0", + "name": "project-what-have-you-done", + "version": "0.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" - }, - "bcrypt-pbkdf": { + "amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "optional": true, "requires": { - "jsbn": "0.1.1" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.16" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "optional": true, "requires": { - "assert-plus": "1.0.0" + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "optional": true } } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "is-buffer": "1.1.5" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "optional": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-stable-stringify": { + "longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "mime-db": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", - "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" - }, - "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "mime-db": "1.29.0" + "minimist": "0.0.10", + "wordwrap": "0.0.3" } }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.16", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "align-text": "0.1.4" } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "hoek": "2.16.3" + "amdefine": "1.0.1" } }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "optional": true } } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.1" - } + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "optional": true }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" } } } diff --git a/package.json b/package.json index b61fd62..1eb64d2 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "cookie-parser": "~1.4.3", "debug": "~2.6.3", "express": "~4.15.2", + "handlebars": "^4.0.10", "hbs": "~4.0.1", "morgan": "~1.8.1", "serve-favicon": "~2.4.2" From b112310de5482b3190b09209f66e3d91d96689bb Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 16:56:35 -0500 Subject: [PATCH 04/53] Install request package --- package-lock.json | 394 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 395 insertions(+) diff --git a/package-lock.json b/package-lock.json index b69b5e5..1955bc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -19,17 +28,64 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "optional": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -59,12 +115,107 @@ } } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "optional": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "handlebars": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", @@ -76,11 +227,108 @@ "uglify-js": "2.8.29" } }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -100,11 +348,29 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } + }, "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -114,11 +380,55 @@ "wordwrap": "0.0.3" } }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.16", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -128,6 +438,19 @@ "align-text": "0.1.4" } }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -136,6 +459,55 @@ "amdefine": "1.0.1" } }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -161,6 +533,28 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", diff --git a/package.json b/package.json index 1eb64d2..dbd75bf 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "handlebars": "^4.0.10", "hbs": "~4.0.1", "morgan": "~1.8.1", + "request": "^2.81.0", "serve-favicon": "~2.4.2" } } From c399405a3abd0203ea4e3c0aa2829c79a6088e9a Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 16:57:50 -0500 Subject: [PATCH 05/53] Install Express dependencies --- package-lock.json | 418 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 418 insertions(+) diff --git a/package-lock.json b/package-lock.json index 1955bc0..bd89bdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.16", + "negotiator": "0.6.1" + } + }, "ajv": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", @@ -28,6 +37,11 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -58,6 +72,11 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, + "basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" + }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -67,6 +86,33 @@ "tweetnacl": "0.14.5" } }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.15", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "requires": { + "ms": "2.0.0" + } + } + } + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -75,6 +121,11 @@ "hoek": "2.16.3" } }, + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", @@ -128,6 +179,35 @@ "delayed-stream": "1.0.0" } }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -156,6 +236,14 @@ } } }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -167,6 +255,16 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", @@ -176,6 +274,68 @@ "jsbn": "0.1.1" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" + }, + "express": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz", + "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=", + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.8", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.4", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.5.0", + "range-parser": "1.2.0", + "send": "0.15.4", + "serve-static": "1.12.4", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, + "dependencies": { + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" + } + } + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -186,6 +346,25 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "finalhandler": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", + "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "requires": { + "debug": "2.6.8", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -201,6 +380,16 @@ "mime-types": "2.1.16" } }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -252,11 +441,44 @@ "sntp": "1.0.9" } }, + "hbs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.1.tgz", + "integrity": "sha1-S/2YZQ3IydrESzyprfnAmOi8M7Y=", + "requires": { + "handlebars": "4.0.5", + "walk": "2.3.9" + }, + "dependencies": { + "handlebars": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", + "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + } + } + }, "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", @@ -267,6 +489,21 @@ "sshpk": "1.13.1" } }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, "is-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", @@ -348,6 +585,26 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, "mime-db": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", @@ -366,11 +623,46 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, + "morgan": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", + "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=", + "requires": { + "basic-auth": "1.1.0", + "debug": "2.6.8", + "depd": "1.1.1", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -380,11 +672,30 @@ "wordwrap": "0.0.3" } }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, "performance-now": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.4.0" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -395,6 +706,21 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + } + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -443,6 +769,61 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "send": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", + "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=", + "requires": { + "debug": "2.6.8", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.2", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "serve-favicon": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.3.tgz", + "integrity": "sha1-WYaxewUCZCtkHCH4GLGszjICXSM=", + "requires": { + "etag": "1.8.0", + "fresh": "0.5.0", + "ms": "2.0.0", + "parseurl": "1.3.1", + "safe-buffer": "5.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + } + } + }, + "serve-static": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz", + "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=", + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.4" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, "sntp": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", @@ -481,6 +862,11 @@ } } }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -508,6 +894,15 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.16" + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -533,11 +928,26 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -555,6 +965,14 @@ } } }, + "walk": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", + "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", + "requires": { + "foreachasync": "3.0.0" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", From 523ca9b588c28d4909a188ba4ad2ce4542a0dd3d Mon Sep 17 00:00:00 2001 From: anne Date: Mon, 14 Aug 2017 18:29:05 -0500 Subject: [PATCH 06/53] Set up basic API file --- app.js | 10 +++++++++- lib/sunlight_api.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 lib/sunlight_api.js diff --git a/app.js b/app.js index 94a75a6..0fc7dc5 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,4 @@ +// pacakges var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); @@ -5,9 +6,16 @@ var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); +// api +var request = require('request'); +var SunlightData = require('./lib/sunlight_api'); +const sunlightApi = new SunlightData(); + +// routes var index = require('./routes/index'); var users = require('./routes/users'); +// express app var app = express(); // view engine setup @@ -43,4 +51,4 @@ app.use(function(err, req, res, next) { res.render('error'); }); -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/lib/sunlight_api.js b/lib/sunlight_api.js new file mode 100644 index 0000000..284334b --- /dev/null +++ b/lib/sunlight_api.js @@ -0,0 +1,33 @@ +// require the request library +const request = require('request'); + +// set up the base URI for the api +// https://sunlightlabs.github.io/congress/ +const baseUri = 'https://congress.api.sunlightfoundation.com/'; + +class SunlightData { + constructor() { + // this.apiKey = apiKey + } + + printer(input){ + console.log(input); + + }; + + // A method for grabbing a list of legislators based upon a given zip code. + + // A method for parsing the JSON data into objects (Legislators, Bills, etc.). + + // A method for retrieving the bills recently voted upon by a given legislator. + + // Make sure you include how the legislator voted. + + // Any other methods or objects you find useful + + +} // close SunlightData + + +// return the class for use in other files +module.exports = SunlightData; From 1d19b0dc0893583b6241a79a138462e76494db8f Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 16 Aug 2017 18:53:46 -0500 Subject: [PATCH 07/53] Fetch legslators by zip code --- .gitignore | 1 + lib/sunlight_api.js | 62 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 3c3629e..7938f33 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +sandbox.js diff --git a/lib/sunlight_api.js b/lib/sunlight_api.js index 284334b..8777d59 100644 --- a/lib/sunlight_api.js +++ b/lib/sunlight_api.js @@ -1,21 +1,57 @@ // require the request library const request = require('request'); -// set up the base URI for the api -// https://sunlightlabs.github.io/congress/ -const baseUri = 'https://congress.api.sunlightfoundation.com/'; +// set up the base URI for the api from https://sunlightlabs.github.io/congress/ +const baseUri = 'https://congress.api.sunlightfoundation.com'; +const zipUri = '/legislators/locate?zip='; +const legislatorUri = '/legislators?bioguide_id='; +const voteUri = '/votes?voter_ids.'; +const billUri = '/bills?bill_id='; -class SunlightData { - constructor() { - // this.apiKey = apiKey - } +var selectedLegislatorsDetails = []; - printer(input){ - console.log(input); +class SunlightApi { + constructor(zip) { + this.zip = zip + } - }; + // set up method to make the api call and return results + _sendRequest(url, builderCallback) { + var options = { + url: url + } + request(options, function(error, response, body){ + if (!error & response.statusCode === 200) { + builderCallback(JSON.parse(body)); + } + }); + } // A method for grabbing a list of legislators based upon a given zip code. + getLegislators() { + function buildLegislators(jsonBody){ + var apiResults = jsonBody.results; + apiResults.forEach(function(legislator){ + selectedLegislatorsDetails.push( + { + bioguideId: legislator.bioguide_id, + firstName: legislator.first_name, + lastName: legislator.last_name, + chamber: legislator.chamber, + party: legislator.party, + phone: legislator.phone, + website: legislator.website, + imageUrl: `https://theunitedstates.io/images/congress/225x275/${legislator.bioguide_id}.jpg` + } + );//close push + });//close forEach + return selectedLegislatorsDetails; + };//close buildLegislators + + var url = `${baseUri}${zipUri}${this.zip}`; + this._sendRequest(url, buildLegislators) + };//close getLegislators + // A method for parsing the JSON data into objects (Legislators, Bills, etc.). @@ -25,9 +61,11 @@ class SunlightData { // Any other methods or objects you find useful +} // close SunlightApi -} // close SunlightData // return the class for use in other files -module.exports = SunlightData; +module.exports = { + SunlightApi +}; From b6f6d295cd6a4f77657fa579ec1ceade7eb6959c Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 08:48:13 -0500 Subject: [PATCH 08/53] Add documentation to track all of the relevant data sources and docs --- documentation.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 documentation.md diff --git a/documentation.md b/documentation.md new file mode 100644 index 0000000..c099a0b --- /dev/null +++ b/documentation.md @@ -0,0 +1,44 @@ +# What Have You Done Project +This project uses info from the Sunlight Foundation API in an app where you can look up members of the Senate and House by zip code and see how they voted on certain bills. + +Demo: +https://what-have-you-done.herokuapp.com + + + +## Sunlight Foundation API info +https://sunlightlabs.github.io/congress/index.html +Though the docs say we need an API key, this is no longer true + + +### Legislators +Documentation: +https://sunlightlabs.github.io/congress/legislators.html#fields + +API Call: +https://congress.api.sunlightfoundation.com/legislators/locate?zip=${zip} + +Images: +https://theunitedstates.io/images/congress/225x275/${legislator.bioguide_id}.jpg + + +### Bills +Documentation: +https://sunlightlabs.github.io/congress/bills.html + +API Call: +https://congress.api.sunlightfoundation.com/bills?fields=bill_id,official_title,summary + + + +### Votes +Documentation: +https://sunlightlabs.github.io/congress/votes.html + +API Calls: +https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids + + + +## Additional Data Sources +https://github.com/unitedstates/ \ No newline at end of file From 07dd59fe22fbeb3015ab939967ae948d291883f4 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 08:56:51 -0500 Subject: [PATCH 09/53] Add Viking assignment links --- documentation.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/documentation.md b/documentation.md index c099a0b..d8d636a 100644 --- a/documentation.md +++ b/documentation.md @@ -4,6 +4,12 @@ This project uses info from the Sunlight Foundation API in an app where you can Demo: https://what-have-you-done.herokuapp.com +Viking Assignment Page: +https://www.vikingcodeschool.com/dashboard#/professional-development-with-javascript/project-walkthrough-professional-javascript + +Viking Repo: +https://github.com/vikingeducation/project_what_have_you_done + ## Sunlight Foundation API info From 69def68c00479fa024021275236bb2c61ff26742 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 08:58:40 -0500 Subject: [PATCH 10/53] Prelminary function for getting bills --- lib/sunlight_api.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/sunlight_api.js b/lib/sunlight_api.js index 8777d59..e898b19 100644 --- a/lib/sunlight_api.js +++ b/lib/sunlight_api.js @@ -49,13 +49,21 @@ class SunlightApi { };//close buildLegislators var url = `${baseUri}${zipUri}${this.zip}`; - this._sendRequest(url, buildLegislators) + this._sendRequest(url, buildLegislators); };//close getLegislators + // A method for parsing the JSON data into objects (Legislators, Bills, etc.). // A method for retrieving the bills recently voted upon by a given legislator. + getBills() { + function buildBills(){ + console.log('test'); + }; + var url = `https://congress.api.sunlightfoundation.com/bills?fields=bill_id,official_title,summary`; + this._sendRequest(url, buildBills); + }; // Make sure you include how the legislator voted. From 447c11468fb52fb932ae4e81e0ed582a5999d745 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 08:59:49 -0500 Subject: [PATCH 11/53] Prelminary function for getting votes --- lib/sunlight_api.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/sunlight_api.js b/lib/sunlight_api.js index e898b19..2123c28 100644 --- a/lib/sunlight_api.js +++ b/lib/sunlight_api.js @@ -59,13 +59,21 @@ class SunlightApi { // A method for retrieving the bills recently voted upon by a given legislator. getBills() { function buildBills(){ - console.log('test'); + console.log('builsBills test'); }; var url = `https://congress.api.sunlightfoundation.com/bills?fields=bill_id,official_title,summary`; this._sendRequest(url, buildBills); }; // Make sure you include how the legislator voted. + legislatorVote() { + function buildVotes(){ + console.log('buildVotes test'); + }; + var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids`; + this._sendRequest(url, buildVotes); + + }; // Any other methods or objects you find useful From f00f1a15932d6755ffc8733ccd0e00bbc1151a93 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 09:00:22 -0500 Subject: [PATCH 12/53] WIP Legislator class --- models/legislators.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 models/legislators.js diff --git a/models/legislators.js b/models/legislators.js new file mode 100644 index 0000000..3b7ceff --- /dev/null +++ b/models/legislators.js @@ -0,0 +1,21 @@ +class Legislator { + constructor(bioguide_id, firstName, lastName, chamber, party, phone, website, imageUrl) { + this.bioguide_id = bioguide_id, + this.firstName = firstName, + this.lastName = lastName, + this.chamber = chamber, + this.party = party, + this.phone = phone, + this.website = website, + this.imageUrl = imageUrl + }; +} // close Legislator + +const LEGISLATORS = []; + + +// return the class for use in other files +module.exports = { + Legislator, + LEGISLATORS +}; \ No newline at end of file From 11ac3d7dd163d78f3bf59fe84f50e89eee4795b2 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 09:23:42 -0500 Subject: [PATCH 13/53] Temporarily comment out api require to work on front end --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 0fc7dc5..7c6a5b1 100644 --- a/app.js +++ b/app.js @@ -8,8 +8,8 @@ var bodyParser = require('body-parser'); // api var request = require('request'); -var SunlightData = require('./lib/sunlight_api'); -const sunlightApi = new SunlightData(); +// var SunlightData = require('./lib/sunlight_api'); +// const sunlightApi = new SunlightData(); // routes var index = require('./routes/index'); From b03a131c2f417b6a8801bae0017c2e35ccc7ebcb Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 09:35:19 -0500 Subject: [PATCH 14/53] Add favicon --- app.js | 2 +- public/favicon.ico | Bin 0 -> 5922 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/favicon.ico diff --git a/app.js b/app.js index 7c6a5b1..8d92990 100644 --- a/app.js +++ b/app.js @@ -23,7 +23,7 @@ app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); // uncomment after placing your favicon in /public -//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a9b3782048b7305edd7b2d8abd0461621747ab6 GIT binary patch literal 5922 zcmZ{nbx_n%*T;W^bf<`PilmfCtkOsc3j)%)Agv(1>=Kf)^b#&%(X9(eEwF?jAfnXL zA-%YStWvMf^VT!Zyzd|9erL{|GjqP@-kJNkNe@i)=xMIe002O5ps#KIS3Ca^R1|;L zl%Nl&zd{|LZ}SuYXj%UeBtXH-s{lY_>ZPUi;DM)qkpELp{{VgiEiL|lC;lE@KJEYz zI*S5BEWleF>L&|Fnudw6Y(sx@b}D{z%@i10hNy%9HPih>fzlavvuq! zG*~LTnIv5@%{1kjz^k;_*NMqPr^^wqy(imGevDjvn9|s&K14N*QDUg*a`olS6k&7~ zn!L;utj%;gWG% zGvAH`7Ds{!%D8Pv1!Dv5hNo%11McdQz)*RjV4#E?a2j@XSp^1p+HNuCV9|*m( zX4=a$o(Vy$flI5k1ly_^OJJIILF(bHw}MHUnK$}GzFxYmEJ~h|X)G!N^^Y}3A~K}P z?On-!8HzDk2VquD0N|j_zx$gw6&cJkc6lu1avyZAS0VzyJPa}e0l-09SlVK!2{b?j z0NN#RiTZooN8MK?F%;LkugrDRo;fMSX$oU|G?_GM++f$AINhj@(G-6^QqLpdB=hYq zj{?Tb^LbVPgLIE&3xj$9;~!_LqHghaI5qjbK`K^ff!Rb7mtN@ zF#o4SHZwuP3`Ko8^JEKtOMRXL^(Uk%33j?4GgJqGTQO(P+x6tK;f-eM-{?MQwU#Si zi_?8Y`^7Ctt^mPNQuyV``)lf{N~IfLsyrEI5gJ+pvY5@Ql=4^~S?T^>&4$~O)LE{> z4T9BlRsGlMA6ApKB^|qtHH46}z;!UxO5`D${LZ}h^sSAoO{VqB`L7ErFwaseQnkoB2f#gEXzlK`tU6WtqUK2R5r9rve4SYicuZWuuJ-*Mi z&a|$uPT`(+>z?K70`vLuQVV89#3Rj`QnY!USwcChLU4h~NGyke;oF*5ITP1BIXzFj z>NbNuGSBDmnjpVeeI4G?+eB`X9fi=*KWC2}NQ8)U6<(#h3gHU5T9;?^j%y-?YrsNQ zS#Bq9BcCzf-_lwFEfL9{F+`JdKSwl&TSCU7qViqkLM5%`q2;gzqQU_jRjX?$4_>XH z{+3&1S&4eE1Lg)pDpbo8Dk0_m7N9p!oAV?Jn_i<{Q>`~ z+y0G}8{F>{j9TT~?Yt{f#cO5!yHm7igdjt2y?8NjSh|w#k z4e$(jzKo`f!&v>!ajkTv_gn7LHtmouzcPGYQKti}$jHBJA*^HL&-EyobBlA|KV`>y zbk-D2bix!ky3wm@eTsqpYCJLnID(m$eeYeZx6V1v$mO_<)^WAh-*sQ;GNyX<+pP+( z`u6+wzZRts6%aKv-ZsV;m>ajgyYWudNY!Xyj~&j z=!#~p`t@lFTrJuc9pwyh;e<5z)%N1EI2?`@IS!P;L`WcHN$`7cThdcvc%(pA8t4wr{a546-o4b4)_d&t5HU3|>)ka1 zo`bvTH3BCad7~MlUJUUMpqrClD4l;er}RSU#Nrd;t)7F@0ursSjmsewL&oQ{o-S(t z(azOgD1^wFs?tNc;nBdA~6!{+mMYm~KtkKuI{X^C1TKcCLUv%SNF z71RptY6NGV%%FWhSm|ibQG6Lkg*1!go!q-di6*zRf8Jw~DCbBOIbaPDNuvqt;pu@0 z%8VJUceB(u*UrMtKZw}=r@22$XD>hOzXw7$<7LUZIBq$pp z?p7XMBS}Llxm86sNA^B94dK$2U+x!Q?y>Z+EN7zMJ~yvE;6xC`i$!H1R@1|9IR>)dthiJI5H{79nD5m=ZiT4hzCCz$#)Xv=0p1rBHjLqT) z=ReO;+#2jj$+c`aP9%HuwD?@;I(LHqP*?t3_WOz|Y^&Rt$5)T79}7}NwhXzI$R9`s zKl+*3_wcm-+SQ>x#`0jpcaN2YNs!gigBIcg@+Si!)2JQ`zeI+}m z6kZ7vc+AbJUV~W5k}y+ocvy-qCVeo818@4 zcXGVQF%Nwrc0M}XHWMO-uW2`JcRaegcW*{(KH)pa_F`^&e=hnlCZyzWd`|C#B0hHP zBI6jrsC5OAj~ISV|9q$DwuXwz3h2rC)>)a>nA@0W5$DCLi{V;M4jCx%`_9zpc;0v^ z@&K9DgaFRfp^E>F4eI6e=(0aP;tWuRCNeglGTtBBSYAB!9H{rRVR4WAK-< z(=4v6tV?pTyu&kBc`4jq-sE@HH#Y`=a1j82#R90Ku{Vugt_nGE=;^+`#S9~`hqiIl`WxGO9$GcP&gd)We+8+H45 z`U}5n1cEwRTJ0Mx$~QgT*ukqd`xo0%#{dFD{j!$ubfTtyq=0ZI6N_VFyZozs|A!S8 z7OQFY@Kd;k6UWc?O7eo4-f|(R_ic)4jy&KqIJmq5%<;T=yZWYZ=f4)ml<>y?c)~AB zndfjgXT9X-)KICv!kJNlsZbmp?|O8=QMoPr5QZ$~;;`Pc$1R##1`k$&rkqMhivdFi{fzkaEb9EI@|c(CGoisRMh z=MnJMUnj9Geukw&(B&}2qm!GJ4F7k(R7s1EXSJdc=D`Yl^fsRKdO!+HX-U>H0V_kh z3d32@Ki+1`kb(`vYABdgd5NVcW-L>QYW=m|U!vi8y>LGIgW#@M?oV7EWIy)>AG(0; zvx)S}Do#kzjwvt(&*Esz^PdOu&w2PO?8jZ;$rq^9p=8!&5}8CDH@+pa63%JHJgT6X zRRhc}MW+?FtevGa!B$6abKl)h1RUTR@NjyjB;&ZfsssPlry$AZjQ~~5JE<#o zK04Cw`XCsANz$9}h89|zXfjf#hMeD(>V8LGDd(>2ig1EIiW53!=Cv>Cc!Eh7`t1$q zH^+RVJ@h|w@3zt==%4*;B+ru|h(KQx`G0a}Rnbo4ii+ch89b+> zlX}Gp$?av7{3OZIoRC1WSg#arSt;a;gZPM*Yec_Pj}CkhCpL3y!dtb0hc1LM&fsO<}Glx;aO%fsQ1r8FR9dfX{;2S z^D!Fb9k^I4^zsn|Cxza7%G}`UGeC8#(Jo`%TbZS+^?iJ}?_=bS zCTID_Z6DAV^r8*K7U^4 zry?3Fm$!c;5?l7J;+AzEPTp)P?ikf##vx~am0qj;lDICY7(66$(Lk-a>$>ijINdp0 zKw~?#b)`}|q(A7Xhu81qf;;O@j7tT1dnqt?jNg%CMvZ$ZHK=e?pl5$Nyef5SK=BBn zE@7$KY?Rt0J(wZqURidT;yR1@ZiZ}faex?asy7*_2B_j!USeg$L6px@XFBI*PuhTl z{%l(p)jo*pQ1wU>5#Xb&%_R1%F(H2K=AbY9jPluA@@d3Y`;W8dgV3C0K7nwo}oY)7G8pIVqsk-Qdx2HxgF{*Xz#(jq72D5?QjXGJf_ zFCR}PJp0&QFC^_-ij@IaVg6y+woZG$SXqYDy>`5cRuCgLQK-T%aalx_WzCg{K+Jk) zBy~s@aV@TKY}PE&T(i~0cB5uXwtqC81vIb=YkN|FoktgCJ-}O@j(?Q@ggmW^{dRDB z^%M2lCIv@QmrB_xGWLgqDWSOeSWL~KNq%4jK|Y#J{Jj=+1kp%zm6AUGMee*LeyEIU+jSlLKH>Ej`F2dOntLtUAgXS_FEcidh*9&3>uO zF|FRvn;m&PJNRbW0T~8|Ji)>=8>s#;3UkVFyc)=aJ->aJ}huSV>0f9h6?;>*T z;cZ;K8w1;SRFe@h`NUH&W@aiy{6gXEaG=Y>n~zX+^5qXNA%a#A%6;Xfdqd(%nL&QX z*GXJNcFltI*9^_GS4KyPQA5f7~JATyGK?ax;h+?-V09We8u4WqAp!~%HnF~~9ROB$lo%xHyt zx;y&|R9}OL^uvPu%?fj`(5w?+i9{j7wW-3y`(yj~itg0s0s@$M_%l{%9>dP zaaSK5C_F5qSGKw`e~> z-6To&>ggV)i;JEbo_S6VBYGMgR`i~xoQX>+|4l#{?Tpd}!cs;y$vP1`?+58@cu=jZ ze&vM7uq^LU5$Xt`avsJ7t30{Gylz!7zGWB@hkhaFY#B!D?aIC8jWw@ZuNvmd!)=egcAL60v zI%l7PR}cow(HwwJ{}+G$jXwSfCI15{@xsGiJ*U%=yto#H zpdEvv6D8@+2_dM~XS6heh>!C%AlS#I?i&$(Vw3hOSQn9&tqSbvgLDNn`iU`0!J;cq z+|WBW#TDl+ z+aYlLl&o!gDp6=cy3zZ1sjlTsJ=kE;_YZ^gTc^T4#C@)={*?qWFh#(%XwJ}UNc?^l zCilkblx<{P$7M@40mae9JWao;&$al%&}y1&m&S+33{PTrFy{>`Y7~Bf!v1LGXoF=< zzb_0{^P5yFj(f)qn=qP|;K9hKtuFS8Sk4Qwff!nPa)miM%;=23O8^;cj%N{rv8Dxb zuX|0p&2lb0HP5V_e2vb))Py}up&UVmrP#HT-kOW`@`)y-H^8p;cR6t?v5ViP+g&v+ zIU4ucfEZ+SR!|^stbUQlPG|}`KDvi^c9JEB%aVpxlkswEM}}zDeREkUlMP1@eFjpJ z_(rA+0|KlckK_+N^zDH}#u3L~11TyG_R v|33iy|EC4Lwy{i_n~DF0({gKP{=i-Y53lOi?`MBMA%KC7iFU1~Q_Oz=3>8$l literal 0 HcmV?d00001 From 03dd957aaca79f91686dae34ace733e9542588d1 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 10:38:15 -0500 Subject: [PATCH 15/53] Create preliminary html & css for home page --- app.js | 3 +- public/stylesheets/style.css | 68 ++++++++++++++++++++++++++++++++++++ views/index.hbs | 24 +++++++++++-- 3 files changed, 91 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 8d92990..8c5521f 100644 --- a/app.js +++ b/app.js @@ -1,4 +1,4 @@ -// pacakges +// packages var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); @@ -22,7 +22,6 @@ var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); -// uncomment after placing your favicon in /public app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 9453385..2c1af64 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -1,8 +1,76 @@ +:root { + --background: #F5F5F5; + --content-box: #FEFFF8; + --highlight: #EBFF00; + --border: #CCC; + --green: #2C9C20; + --blue: #317BE1; + --lightblue: #A0C6F7; + --lightgray: #EEEEEE; +} + + body { padding: 50px; font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; + background-color: var(--background); } a { color: #00B7FF; } + +/* Home Page */ +.home { + width: 400px; + margin: 0 auto; + text-align: center; +} + +.home h1 { + background-color: var(--highlight); + padding: 10px; + display: inline-block; +} + +.home h2 {font-weight: normal;} + +.enter-zip { + background-color: var(--content-box); + border: 1px solid var(--border); + padding: 15px; + width: 300px; + margin: 0 auto; +} + +.enter-zip h2 { + font-weight: bold; + margin: 10px; + margin-top: 0; + clear: both; +} + +.digit-holder { + margin: 0 auto; + display: flex; + justify-content: space-between; + padding: 0 10px; + +} + +.zip-digit-box { + text-align: center; + font-size: 30px; + height: 52px; + width: 42px; + border: 1px solid var(--border); + border-radius: 10px; + background-color: var(--highlight); +} + +.enter-zip form input[type=submit] { + margin-top: 10px; +} + + + diff --git a/views/index.hbs b/views/index.hbs index 1f308fd..3e96ca3 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,2 +1,22 @@ -

{{title}}

-

Welcome to {{title}}

+
+

What Have You Done?

+ +

Discover the voting records of your local representatives

+ +

Then pester their offices until their views reflect yours!

+ +
+

Enter Your Zip Code

+
+
+ + + + + +
+ +
+
+ +
\ No newline at end of file From 9b967034fbbc17733a0413fa82adbc50c60baea9 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 10:47:44 -0500 Subject: [PATCH 16/53] Move site title to layout page --- public/stylesheets/style.css | 17 ++++++++++++----- views/index.hbs | 2 -- views/layout.hbs | 3 +++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 2c1af64..40e56b1 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -10,6 +10,7 @@ } +/* Site-wide Layout */ body { padding: 50px; font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; @@ -20,17 +21,23 @@ a { color: #00B7FF; } -/* Home Page */ -.home { - width: 400px; - margin: 0 auto; +header.site-header { text-align: center; } -.home h1 { +header.site-header h1 { background-color: var(--highlight); padding: 10px; display: inline-block; + margin: 0; +} + + +/* Index Page */ +.home { + width: 400px; + margin: 0 auto; + text-align: center; } .home h2 {font-weight: normal;} diff --git a/views/index.hbs b/views/index.hbs index 3e96ca3..ba3ef2e 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,6 +1,4 @@
-

What Have You Done?

-

Discover the voting records of your local representatives

Then pester their offices until their views reflect yours!

diff --git a/views/layout.hbs b/views/layout.hbs index 068eb6b..0bd0d38 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,6 +5,9 @@ + {{{body}}} From f97025ac972247426c6a3d7cfd3efcca96512517 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 10:58:26 -0500 Subject: [PATCH 17/53] Add footer --- public/stylesheets/style.css | 17 ++++++++++++++++- views/layout.hbs | 14 ++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 40e56b1..694762d 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -12,9 +12,13 @@ /* Site-wide Layout */ body { - padding: 50px; font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; background-color: var(--background); + position: relative; +} + +.container { + padding: 50px; } a { @@ -32,6 +36,17 @@ header.site-header h1 { margin: 0; } +footer { + text-align: center; + font-style: italic; + color: var(--background); + background-color: gray; + padding: 10px 0px; + margin: 0; + display: block; + width: 100%; +} + /* Index Page */ .home { diff --git a/views/layout.hbs b/views/layout.hbs index 0bd0d38..b21f572 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,9 +5,15 @@ - - {{{body}}} +
+ + + {{{body}}} + +
+ +
Made by Anne Richardson for Viking Code School project
From e032e16163c8516dd05b30bfa11acc209ee1caa3 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 11:12:52 -0500 Subject: [PATCH 18/53] Set up routes and html for legislators page --- app.js | 5 ++++- routes/index.js | 2 +- routes/legislators.js | 8 ++++++++ views/legislators.hbs | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 routes/legislators.js create mode 100644 views/legislators.hbs diff --git a/app.js b/app.js index 8c5521f..dfe46da 100644 --- a/app.js +++ b/app.js @@ -11,8 +11,9 @@ var request = require('request'); // var SunlightData = require('./lib/sunlight_api'); // const sunlightApi = new SunlightData(); -// routes +// require info from routes var index = require('./routes/index'); +var legislators = require('./routes/legislators'); var users = require('./routes/users'); // express app @@ -29,7 +30,9 @@ app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); +// set up route paths app.use('/', index); +app.use('/legislators', legislators); app.use('/users', users); // catch 404 and forward to error handler diff --git a/routes/index.js b/routes/index.js index ecca96a..647d796 100644 --- a/routes/index.js +++ b/routes/index.js @@ -3,7 +3,7 @@ var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); + res.render('index', { title: 'What Have You Done?' }); }); module.exports = router; diff --git a/routes/legislators.js b/routes/legislators.js new file mode 100644 index 0000000..4849c55 --- /dev/null +++ b/routes/legislators.js @@ -0,0 +1,8 @@ +var express = require('express'); +var router = express.Router(); + +router.get('/', function(req, res, next) { + res.render('legislators', { title: 'Legislators by Zip' }); +}); + +module.exports = router; diff --git a/views/legislators.hbs b/views/legislators.hbs new file mode 100644 index 0000000..5305b01 --- /dev/null +++ b/views/legislators.hbs @@ -0,0 +1,14 @@ +
+

70115

+
+ +

House

+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
\ No newline at end of file From d944e0c697437689b4afa6a60b2688946686c2d0 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 11:43:36 -0500 Subject: [PATCH 19/53] Build out styles for legislator show page --- public/stylesheets/style.css | 62 ++++++++++++++++++++++++++++++++++++ views/legislators.hbs | 38 ++++++++++++++++++++-- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 694762d..fa7dc60 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -19,6 +19,8 @@ body { .container { padding: 50px; + width: 600px; + margin: 0 auto; } a { @@ -27,6 +29,7 @@ a { header.site-header { text-align: center; + margin-bottom: 20px; } header.site-header h1 { @@ -94,5 +97,64 @@ footer { margin-top: 10px; } +/* Legislators by Zip */ +.display-zip { + text-align: center; +} + +.display-zip span { + font-size: 20px; + padding: 2px; + border: 1px solid var(--border); + border-radius: 5px; + background-color: white; +} + +h1.chamber { + text-align: center; + color: gray; + margin-top: 50px; +} + +.profile { + background-color: var(--content-box); + border-bottom: 1px solid var(--border); + border-radius: 50px 0px 0px 50px; + margin: 20px 0px; + clear: both; + overflow: auto; + display: flex; + align-items: center; +} + +.profile .pic-holder { + float: left; + width: 100px; + height: 100px; + margin-right: 30px; + border-radius: 50%; + overflow: hidden; +} +.profile .pic-holder img { + width: 100%; +} + +.profile .details h1 { + margin: 0; + padding: 0; + font-size: 2em; + font-weight: normal; +} +.profile .details h1:hover { + background-color: var(--highlight); + cursor: pointer; +} + +.profile .details h2 { + margin: 0; + padding: 0; + font-size: 1.5em; + font-weight: normal; +} diff --git a/views/legislators.hbs b/views/legislators.hbs index 5305b01..8f8f09b 100644 --- a/views/legislators.hbs +++ b/views/legislators.hbs @@ -1,5 +1,10 @@
-

70115

+ 7 + 0 + 1 + 1 + 5 +

Change Zip

House

@@ -11,4 +16,33 @@

Cedric L. Richmond

Democrat

- \ No newline at end of file + +
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
+ +

Senate

+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
From 17c651a94110f5df8cc216ca0795b0301e7c89f3 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 11:48:49 -0500 Subject: [PATCH 20/53] Set up routes for legislator show page --- app.js | 2 ++ routes/legislators.js | 2 +- routes/zip_results.js | 8 +++++++ views/legislators.hbs | 49 +------------------------------------------ views/zip_results.hbs | 48 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 49 deletions(-) create mode 100644 routes/zip_results.js create mode 100644 views/zip_results.hbs diff --git a/app.js b/app.js index dfe46da..41c822e 100644 --- a/app.js +++ b/app.js @@ -13,6 +13,7 @@ var request = require('request'); // require info from routes var index = require('./routes/index'); +var zip_results = require('./routes/zip_results'); var legislators = require('./routes/legislators'); var users = require('./routes/users'); @@ -32,6 +33,7 @@ app.use(express.static(path.join(__dirname, 'public'))); // set up route paths app.use('/', index); +app.use('/zip_results', zip_results); app.use('/legislators', legislators); app.use('/users', users); diff --git a/routes/legislators.js b/routes/legislators.js index 4849c55..85a1a4a 100644 --- a/routes/legislators.js +++ b/routes/legislators.js @@ -2,7 +2,7 @@ var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { - res.render('legislators', { title: 'Legislators by Zip' }); + res.render('legislators', { title: 'Legislator show page' }); }); module.exports = router; diff --git a/routes/zip_results.js b/routes/zip_results.js new file mode 100644 index 0000000..3d396b5 --- /dev/null +++ b/routes/zip_results.js @@ -0,0 +1,8 @@ +var express = require('express'); +var router = express.Router(); + +router.get('/', function(req, res, next) { + res.render('zip_results', { title: 'Legislators by Zip' }); +}); + +module.exports = router; diff --git a/views/legislators.hbs b/views/legislators.hbs index 8f8f09b..8a8cccf 100644 --- a/views/legislators.hbs +++ b/views/legislators.hbs @@ -1,48 +1 @@ -
- 7 - 0 - 1 - 1 - 5 -

Change Zip

-
- -

House

-
-
- -
-
-

Cedric L. Richmond

-

Democrat

-
-
-
-
- -
-
-

Cedric L. Richmond

-

Democrat

-
-
- -

Senate

-
-
- -
-
-

Cedric L. Richmond

-

Democrat

-
-
-
-
- -
-
-

Cedric L. Richmond

-

Democrat

-
-
+

Show page for this jerk

\ No newline at end of file diff --git a/views/zip_results.hbs b/views/zip_results.hbs new file mode 100644 index 0000000..8f8f09b --- /dev/null +++ b/views/zip_results.hbs @@ -0,0 +1,48 @@ +
+ 7 + 0 + 1 + 1 + 5 +

Change Zip

+
+ +

House

+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
+ +

Senate

+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
+
+
+ +
+
+

Cedric L. Richmond

+

Democrat

+
+
From 69a9984a20c797123a9b995400a3d559826bfe24 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 14:09:58 -0500 Subject: [PATCH 21/53] Add styles for legislator show page --- public/stylesheets/style.css | 119 +++++++++++++++++++++++++++++------ views/index.hbs | 2 +- views/layout.hbs | 4 +- views/legislators.hbs | 48 +++++++++++++- 4 files changed, 150 insertions(+), 23 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index fa7dc60..c6fcf2e 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -3,9 +3,12 @@ --content-box: #FEFFF8; --highlight: #EBFF00; --border: #CCC; - --green: #2C9C20; + --green: #54C77A; + --lightgreen: #E4FFED; + --red: #C7546B; + --lightred: #FDE5EA; --blue: #317BE1; - --lightblue: #A0C6F7; + --lightblue: #00B7FF; --lightgray: #EEEEEE; } @@ -24,7 +27,11 @@ body { } a { - color: #00B7FF; + color: var(--lightblue); +} + +h1, h2, h3, h4 { + text-align: center; } header.site-header { @@ -50,6 +57,24 @@ footer { width: 100%; } +.small-box { + background-color: var(--content-box); + border: 1px solid var(--border); + padding: 15px; + width: 300px; + margin: 0 auto; +} + +.pic-holder { + width: 100px; + height: 100px; + border-radius: 50%; + overflow: hidden; +} + +.pic-holder img { + width: 100%; +} /* Index Page */ .home { @@ -60,14 +85,6 @@ footer { .home h2 {font-weight: normal;} -.enter-zip { - background-color: var(--content-box); - border: 1px solid var(--border); - padding: 15px; - width: 300px; - margin: 0 auto; -} - .enter-zip h2 { font-weight: bold; margin: 10px; @@ -111,7 +128,6 @@ footer { } h1.chamber { - text-align: center; color: gray; margin-top: 50px; } @@ -129,15 +145,7 @@ h1.chamber { .profile .pic-holder { float: left; - width: 100px; - height: 100px; margin-right: 30px; - border-radius: 50%; - overflow: hidden; -} - -.profile .pic-holder img { - width: 100%; } .profile .details h1 { @@ -156,5 +164,76 @@ h1.chamber { padding: 0; font-size: 1.5em; font-weight: normal; + text-align: left; } +/* Legislator Show Page */ +.legislator-bio .pic-holder { + margin: 0 auto; + /*text-align: center;*/ +} + +.legislator-bio h1 { + font-size: 2.5em; + margin: 0px 0px 40px 0px; +} + +.legislator-bio h3 { + font-size: 1.5em; + font-weight: normal; + margin: 10px 0px; +} + +.contact-info-box { + background-color: white; + border: 1px solid var(--border); + padding: 15px; +} + +.contact-info-box h4 { + text-align: left; + margin: 15px 0px 0px 0px; +} + +.contact-info-box h4:first-child { + margin: 0px; +} + +.contact-info-box p { + margin: 0px; +} + +article.vote { + background-color: white; + border: 1px solid var(--border); + margin: 20px 0px; +} +article.vote .material-icons { + float: right; + margin: 10px 10px 0px 0px; + color: white; +} + +article.vote h2 { + background-color: var(--lightgray); + text-align: left; + margin: 0; + padding: 10px; + color: gray; +} + +article.vote p { + padding: 0px 10px 10px 10px; +} + +article.voted-yes h2 { + /*background-color: var(--lightgreen);*/ + background-color: var(--green); + color: white; +} + +article.voted-no h2 { + /*background-color: var(--lightred);*/ + background-color: var(--red); + color: white; +} diff --git a/views/index.hbs b/views/index.hbs index ba3ef2e..6bbb9c4 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -3,7 +3,7 @@

Then pester their offices until their views reflect yours!

-
+

Enter Your Zip Code

diff --git a/views/layout.hbs b/views/layout.hbs index b21f572..c75bb2d 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -2,6 +2,8 @@ {{title}} + @@ -14,6 +16,6 @@
-
Made by Anne Richardson for Viking Code School project
+
Made as a Viking Code School project
diff --git a/views/legislators.hbs b/views/legislators.hbs index 8a8cccf..5a96dc6 100644 --- a/views/legislators.hbs +++ b/views/legislators.hbs @@ -1 +1,47 @@ -

Show page for this jerk

\ No newline at end of file +
+
+ +
+

Senator

+

Cedric L. Richmond

+
+ + +
+

Contact Info

+
+

Phone Number

+

202-225-3015

+

Website

+

https://scalise.house.gov

+
+ +
+ +
+

Recent Votes

+
+ thumb_up +

hr3180-115

+

To authorize appropriations for fiscal year 2018 for intelligence and intelligence-related activities of the United States Government, the Community Management Account, and the Central Intelligence Agency Retirement and Disability System, and for other purposes.

+
+ +
+ thumb_down +

s114-115

+

To authorize appropriations and to appropriate amounts for the Veterans Choice Program of the Department of Veterans Affairs, to improve hiring authorities of the Department, to authorize major medical facility leases, and for other purposes.

+
+ +
+ +

hr3219-115

+

Making appropriations for the Department of Defense for the fiscal year ending September 30, 2018, and for other purposes.

+
+ +
+ +

hjres111-115

+

Providing for congressional disapproval under chapter 8 of title 5, United States Code, of the rule submitted by Bureau of Consumer Financial Protection relating to "Arbitration Agreements".

+
+ +
\ No newline at end of file From bdcc84e461f9052d45f661b19c26973dc8f841b3 Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 14:56:03 -0500 Subject: [PATCH 22/53] Add Heroku address --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 6a0fa91..b3e4d38 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,6 @@ Build an application to help track the legislative activities of your local representatives. by Anne Richardson + +See it on heroku: https://frozen-brushlands-61850.herokuapp.com + From 5ff6c6e1814bb7d3fffd0e65f8d2fbd987c5d2ce Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 14:56:20 -0500 Subject: [PATCH 23/53] Update api urls --- lib/sunlight_api.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/sunlight_api.js b/lib/sunlight_api.js index 2123c28..77fcfda 100644 --- a/lib/sunlight_api.js +++ b/lib/sunlight_api.js @@ -60,8 +60,9 @@ class SunlightApi { getBills() { function buildBills(){ console.log('builsBills test'); + var billLink = `https://www.govtrack.us/congress/bills/114/hr3082`; }; - var url = `https://congress.api.sunlightfoundation.com/bills?fields=bill_id,official_title,summary`; + var url = `https://congress.api.sunlightfoundation.com/bills?fields=bill_id,congress,number,official_title,summary`; this._sendRequest(url, buildBills); }; @@ -70,7 +71,7 @@ class SunlightApi { function buildVotes(){ console.log('buildVotes test'); }; - var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids`; + var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true` this._sendRequest(url, buildVotes); }; From 357fab1e1957f5462c2be6d0d9e2420498b7f2cd Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 15:08:05 -0500 Subject: [PATCH 24/53] Add heroku deployment info --- documentation.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/documentation.md b/documentation.md index d8d636a..adf7ded 100644 --- a/documentation.md +++ b/documentation.md @@ -10,6 +10,9 @@ https://www.vikingcodeschool.com/dashboard#/professional-development-with-javasc Viking Repo: https://github.com/vikingeducation/project_what_have_you_done +My Heroku Deployment: +https://frozen-brushlands-61850.herokuapp.com + ## Sunlight Foundation API info From 91f474e8bee6e7810f4e9a67dc5b8c0d6237cb2d Mon Sep 17 00:00:00 2001 From: anne Date: Thu, 17 Aug 2017 17:22:34 -0500 Subject: [PATCH 25/53] WIP api code that goes nowhere --- {lib => api}/sunlight_api.js | 48 +++++++++++++++++++++++------------- lib/legislators_by_zip.json | 1 + lib/zorro.json | 1 + 3 files changed, 33 insertions(+), 17 deletions(-) rename {lib => api}/sunlight_api.js (59%) create mode 100644 lib/legislators_by_zip.json create mode 100644 lib/zorro.json diff --git a/lib/sunlight_api.js b/api/sunlight_api.js similarity index 59% rename from lib/sunlight_api.js rename to api/sunlight_api.js index 77fcfda..18ec5f4 100644 --- a/lib/sunlight_api.js +++ b/api/sunlight_api.js @@ -1,6 +1,10 @@ // require the request library const request = require('request'); +var fs = require('fs'); +// var legislators_by_zip = require('../lib/legislators_by_zip'); +// var zorro = require('../lib/zorro'); + // set up the base URI for the api from https://sunlightlabs.github.io/congress/ const baseUri = 'https://congress.api.sunlightfoundation.com'; const zipUri = '/legislators/locate?zip='; @@ -22,7 +26,9 @@ class SunlightApi { } request(options, function(error, response, body){ if (!error & response.statusCode === 200) { - builderCallback(JSON.parse(body)); + // builderCallback(JSON.parse(response)); + // console.log(response.body); + builderCallback(response.body); } }); } @@ -30,22 +36,30 @@ class SunlightApi { // A method for grabbing a list of legislators based upon a given zip code. getLegislators() { function buildLegislators(jsonBody){ - var apiResults = jsonBody.results; - apiResults.forEach(function(legislator){ - selectedLegislatorsDetails.push( - { - bioguideId: legislator.bioguide_id, - firstName: legislator.first_name, - lastName: legislator.last_name, - chamber: legislator.chamber, - party: legislator.party, - phone: legislator.phone, - website: legislator.website, - imageUrl: `https://theunitedstates.io/images/congress/225x275/${legislator.bioguide_id}.jpg` - } - );//close push - });//close forEach - return selectedLegislatorsDetails; + console.log(jsonBody["results"]); + // fs.writeFile('./lib/legislators_by_zip.json', jsonBody, 'utf8', function(err){ + // err ? console.log(err) : console.log('Raw legislators by zip have been saved.'); + // }); + // var apiResults = jsonBody.results; + // legislators_by_zip["results"].forEach(function(legislator){ + // selectedLegislatorsDetails.push( + // { + // bioguideId: legislator.bioguide_id, + // firstName: legislator.first_name, + // lastName: legislator.last_name, + // chamber: legislator.chamber, + // party: legislator.party, + // phone: legislator.phone, + // website: legislator.website, + // imageUrl: `https://theunitedstates.io/images/congress/225x275/${legislator.bioguide_id}.jpg` + // } + // );//close push + // });//close forEach + + // fs.writeFile('./lib/zorro.json', selectedLegislatorsDetails, 'utf8', function(err){ + // err ? console.log(err) : console.log('Legislators have been cleaned up.'); + // }); + // return selectedLegislatorsDetails; };//close buildLegislators var url = `${baseUri}${zipUri}${this.zip}`; diff --git a/lib/legislators_by_zip.json b/lib/legislators_by_zip.json new file mode 100644 index 0000000..3c68db4 --- /dev/null +++ b/lib/legislators_by_zip.json @@ -0,0 +1 @@ +{"results":[{"bioguide_id":"K000393","birthday":"1951-11-21","chamber":"senate","contact_form":"https://www.kennedy.senate.gov/content/contact-senator","crp_id":"N00026823","district":null,"facebook_id":"JohnKennedyLouisiana","fax":null,"fec_ids":["S4LA00065"],"first_name":"John","gender":"M","govtrack_id":"412679","icpsr_id":41703,"in_office":true,"last_name":"Kennedy","leadership_role":null,"lis_id":"S389","middle_name":"Neely","name_suffix":null,"nickname":null,"oc_email":"Sen.Kennedy@opencongress.org","ocd_id":"ocd-division/country:us/state:la","office":"383 Russell Senate Office Building","party":"R","phone":"202-224-4623","senate_class":3,"state":"LA","state_name":"Louisiana","state_rank":"junior","term_end":"2023-01-03","term_start":"2017-01-03","thomas_id":"","title":"Sen","twitter_id":"SenJohnKennedy","votesmart_id":35496,"website":"https://www.kennedy.senate.gov"},{"bioguide_id":"S001176","birthday":"1965-10-06","chamber":"house","contact_form":null,"crp_id":"N00009660","district":1,"facebook_id":"RepSteveScalise","fax":"202-226-0386","fec_ids":["H0LA01087"],"first_name":"Steve","gender":"M","govtrack_id":"412261","icpsr_id":20759,"in_office":true,"last_name":"Scalise","leadership_role":"Majority Whip","middle_name":"Joseph","name_suffix":null,"nickname":null,"oc_email":"Rep.Scalise@opencongress.org","ocd_id":"ocd-division/country:us/state:la/cd:1","office":"2338 Rayburn House Office Building","party":"R","phone":"202-225-3015","state":"LA","state_name":"Louisiana","term_end":"2019-01-03","term_start":"2017-01-03","thomas_id":"01892","title":"Rep","twitter_id":"SteveScalise","votesmart_id":9026,"website":"https://scalise.house.gov","youtube_id":"RepSteveScalise"},{"bioguide_id":"R000588","birthday":"1973-09-13","chamber":"house","contact_form":null,"crp_id":"N00030184","district":2,"facebook_id":"RepRichmond","fax":"202-225-1988","fec_ids":["H8LA02054"],"first_name":"Cedric","gender":"M","govtrack_id":"412432","icpsr_id":21137,"in_office":true,"last_name":"Richmond","leadership_role":null,"middle_name":"L.","name_suffix":null,"nickname":null,"oc_email":"Rep.Richmond@opencongress.org","ocd_id":"ocd-division/country:us/state:la/cd:2","office":"420 Cannon House Office Building","party":"D","phone":"202-225-6636","state":"LA","state_name":"Louisiana","term_end":"2019-01-03","term_start":"2017-01-03","thomas_id":"02023","title":"Rep","twitter_id":"RepRichmond","votesmart_id":35384,"website":"https://richmond.house.gov","youtube_id":"RepCedricRichmond"},{"bioguide_id":"C001075","birthday":"1957-09-28","chamber":"senate","contact_form":"https://www.cassidy.senate.gov/contact","crp_id":"N00030245","district":null,"facebook_id":null,"fax":"202-225-7313","fec_ids":["H8LA00017","S4LA00107"],"first_name":"Bill","gender":"M","govtrack_id":"412269","icpsr_id":20919,"in_office":true,"last_name":"Cassidy","leadership_role":null,"lis_id":"S373","middle_name":null,"name_suffix":null,"nickname":null,"oc_email":"Sen.Cassidy@opencongress.org","ocd_id":"ocd-division/country:us/state:la","office":"520 Hart Senate Office Building","party":"R","phone":"202-224-5824","senate_class":2,"state":"LA","state_name":"Louisiana","state_rank":"senior","term_end":"2021-01-03","term_start":"2015-01-06","thomas_id":"01925","title":"Sen","twitter_id":null,"votesmart_id":69494,"website":"https://www.cassidy.senate.gov","youtube_id":"SenatorBillCassidy"}],"count":4,"page":{"count":4,"per_page":20,"page":1}} \ No newline at end of file diff --git a/lib/zorro.json b/lib/zorro.json new file mode 100644 index 0000000..81d2959 --- /dev/null +++ b/lib/zorro.json @@ -0,0 +1 @@ +[object Object],[object Object],[object Object],[object Object] \ No newline at end of file From 8f1ed501853fe73630e55988e6e7fca3d0d88497 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 10:22:21 -0500 Subject: [PATCH 26/53] Set up legislator show page routes --- app.js | 4 ++-- routes/legislator.js | 15 +++++++++++++++ routes/legislators.js | 8 -------- 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 routes/legislator.js delete mode 100644 routes/legislators.js diff --git a/app.js b/app.js index 41c822e..97d717d 100644 --- a/app.js +++ b/app.js @@ -14,7 +14,7 @@ var request = require('request'); // require info from routes var index = require('./routes/index'); var zip_results = require('./routes/zip_results'); -var legislators = require('./routes/legislators'); +var legislator = require('./routes/legislator'); var users = require('./routes/users'); // express app @@ -34,7 +34,7 @@ app.use(express.static(path.join(__dirname, 'public'))); // set up route paths app.use('/', index); app.use('/zip_results', zip_results); -app.use('/legislators', legislators); +app.use('/legislators', legislator); app.use('/users', users); // catch 404 and forward to error handler diff --git a/routes/legislator.js b/routes/legislator.js new file mode 100644 index 0000000..5859851 --- /dev/null +++ b/routes/legislator.js @@ -0,0 +1,15 @@ +var express = require('express'); +var router = express.Router(); +const {Legislator, LEGISLATORS} = require('../models/legislators') + +const findLegislator = (leg) => { + return LEGISLATORS.find(LEGISLATORS => leg == LEGISLATORS.bioguide_id) +} + +router.get('/:bioguide_id', function(req, res, next) { + const legislator_for_view = findLegislator(req.params.bioguide_id) + res.render('legislator', { title: 'Legislator show page', legislator: legislator_for_view }); +}); + + +module.exports = router \ No newline at end of file diff --git a/routes/legislators.js b/routes/legislators.js deleted file mode 100644 index 85a1a4a..0000000 --- a/routes/legislators.js +++ /dev/null @@ -1,8 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -router.get('/', function(req, res, next) { - res.render('legislators', { title: 'Legislator show page' }); -}); - -module.exports = router; From 0a5b176e0c940fd8b0277a68369ffc03e124b570 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 10:23:19 -0500 Subject: [PATCH 27/53] Clean up legislator data in the legislators model --- models/legislators.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/models/legislators.js b/models/legislators.js index 3b7ceff..90c91fa 100644 --- a/models/legislators.js +++ b/models/legislators.js @@ -1,8 +1,10 @@ +var legislators_by_zip = require('../lib/legislators_by_zip'); + + class Legislator { - constructor(bioguide_id, firstName, lastName, chamber, party, phone, website, imageUrl) { + constructor(bioguide_id, name, chamber, party, phone, website, imageUrl) { this.bioguide_id = bioguide_id, - this.firstName = firstName, - this.lastName = lastName, + this.name = name, this.chamber = chamber, this.party = party, this.phone = phone, @@ -11,8 +13,23 @@ class Legislator { }; } // close Legislator -const LEGISLATORS = []; +const LEGISLATORS = [] +legislators_by_zip.results.forEach(function(leg){ + LEGISLATORS.push( + new Legislator( + leg.bioguide_id, + `${leg.first_name} ${leg.last_name}`, + leg.chamber, + leg.party, + leg.phone, + leg.website, + `https://theunitedstates.io/images/congress/225x275/${leg.bioguide_id}.jpg` + ) + ); +}); + +console.log(LEGISLATORS); // return the class for use in other files module.exports = { From f23ffdff9875e116a9fe2a85f03f0a9957233fba Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 10:23:56 -0500 Subject: [PATCH 28/53] Populate legislator show page with contact info data --- views/{legislators.hbs => legislator.hbs} | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) rename views/{legislators.hbs => legislator.hbs} (84%) diff --git a/views/legislators.hbs b/views/legislator.hbs similarity index 84% rename from views/legislators.hbs rename to views/legislator.hbs index 5a96dc6..117e256 100644 --- a/views/legislators.hbs +++ b/views/legislator.hbs @@ -1,9 +1,9 @@
- +
-

Senator

-

Cedric L. Richmond

+

{{legislator.chamber}}

+

{{legislator.name}}

@@ -11,9 +11,9 @@

Contact Info

Phone Number

-

202-225-3015

+

{{legislator.phone}}

Website

-

https://scalise.house.gov

+

{{legislator.website}}

From 72f7564c76ef8c3da7a8b3d3a9741a0e2f472985 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 10:25:13 -0500 Subject: [PATCH 29/53] Strip down api class to focus on just getting legislators by zip --- api/sunlight_api.js | 65 +++++++++++++-------------------------------- lib/zorro.json | 1 - 2 files changed, 19 insertions(+), 47 deletions(-) delete mode 100644 lib/zorro.json diff --git a/api/sunlight_api.js b/api/sunlight_api.js index 18ec5f4..c376ccd 100644 --- a/api/sunlight_api.js +++ b/api/sunlight_api.js @@ -2,73 +2,46 @@ const request = require('request'); var fs = require('fs'); -// var legislators_by_zip = require('../lib/legislators_by_zip'); -// var zorro = require('../lib/zorro'); // set up the base URI for the api from https://sunlightlabs.github.io/congress/ const baseUri = 'https://congress.api.sunlightfoundation.com'; const zipUri = '/legislators/locate?zip='; -const legislatorUri = '/legislators?bioguide_id='; -const voteUri = '/votes?voter_ids.'; -const billUri = '/bills?bill_id='; +// const legislatorUri = '/legislators?bioguide_id='; +// const voteUri = '/votes?voter_ids.'; +// const billUri = '/bills?bill_id='; -var selectedLegislatorsDetails = []; class SunlightApi { constructor(zip) { this.zip = zip } + // A method for grabbing a list of legislators based upon a given zip code. + get_legislators() { + this._sendRequest(this.zip, zipUri, this.saveToLegislatorJson) + } + // set up method to make the api call and return results - _sendRequest(url, builderCallback) { + _sendRequest(zip, zipUri, callback) { + const url = `${baseUri}${zipUri}${this.zip}` var options = { url: url } request(options, function(error, response, body){ if (!error & response.statusCode === 200) { - // builderCallback(JSON.parse(response)); - // console.log(response.body); - builderCallback(response.body); + callback(JSON.parse(body).results) } - }); + }) } - // A method for grabbing a list of legislators based upon a given zip code. - getLegislators() { - function buildLegislators(jsonBody){ - console.log(jsonBody["results"]); - // fs.writeFile('./lib/legislators_by_zip.json', jsonBody, 'utf8', function(err){ - // err ? console.log(err) : console.log('Raw legislators by zip have been saved.'); - // }); - // var apiResults = jsonBody.results; - // legislators_by_zip["results"].forEach(function(legislator){ - // selectedLegislatorsDetails.push( - // { - // bioguideId: legislator.bioguide_id, - // firstName: legislator.first_name, - // lastName: legislator.last_name, - // chamber: legislator.chamber, - // party: legislator.party, - // phone: legislator.phone, - // website: legislator.website, - // imageUrl: `https://theunitedstates.io/images/congress/225x275/${legislator.bioguide_id}.jpg` - // } - // );//close push - // });//close forEach - - // fs.writeFile('./lib/zorro.json', selectedLegislatorsDetails, 'utf8', function(err){ - // err ? console.log(err) : console.log('Legislators have been cleaned up.'); - // }); - // return selectedLegislatorsDetails; - };//close buildLegislators - - var url = `${baseUri}${zipUri}${this.zip}`; - this._sendRequest(url, buildLegislators); - };//close getLegislators - - // A method for parsing the JSON data into objects (Legislators, Bills, etc.). + saveToLegislatorJson(input) { + console.log(input[0].first_name); + fs.writeFile('./lib/legislators_by_zip.json', input 'utf8', function(err){ + err ? console.log(err) : console.log('The file has been saved to legislators_by_zip.json.'); + }); + }; // A method for retrieving the bills recently voted upon by a given legislator. getBills() { @@ -85,7 +58,7 @@ class SunlightApi { function buildVotes(){ console.log('buildVotes test'); }; - var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true` + var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_zipUri,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true` this._sendRequest(url, buildVotes); }; diff --git a/lib/zorro.json b/lib/zorro.json deleted file mode 100644 index 81d2959..0000000 --- a/lib/zorro.json +++ /dev/null @@ -1 +0,0 @@ -[object Object],[object Object],[object Object],[object Object] \ No newline at end of file From 718bf4d66c41009b51a635c3132719a83a9f8f56 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 10:29:51 -0500 Subject: [PATCH 30/53] Update api uris for votes and bills --- documentation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation.md b/documentation.md index adf7ded..be3ddca 100644 --- a/documentation.md +++ b/documentation.md @@ -36,7 +36,7 @@ Documentation: https://sunlightlabs.github.io/congress/bills.html API Call: -https://congress.api.sunlightfoundation.com/bills?fields=bill_id,official_title,summary +https://congress.api.sunlightfoundation.com/bills?fields=bill_id,congress,number,official_title,summary @@ -45,7 +45,7 @@ Documentation: https://sunlightlabs.github.io/congress/votes.html API Calls: -https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_type,year,question,result,voter_ids +https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_zipUri,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true From 891c80c70f347bbed4099deaaaa7afc64eb54e41 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 11:32:02 -0500 Subject: [PATCH 31/53] Rename routers --- api/sunlight_api.js | 1 - app.js | 8 ++++---- routes/legislator.js | 15 --------------- routes/zip_results.js | 8 -------- 4 files changed, 4 insertions(+), 28 deletions(-) delete mode 100644 routes/legislator.js delete mode 100644 routes/zip_results.js diff --git a/api/sunlight_api.js b/api/sunlight_api.js index c376ccd..68ccbdc 100644 --- a/api/sunlight_api.js +++ b/api/sunlight_api.js @@ -37,7 +37,6 @@ class SunlightApi { // A method for parsing the JSON data into objects (Legislators, Bills, etc.). saveToLegislatorJson(input) { - console.log(input[0].first_name); fs.writeFile('./lib/legislators_by_zip.json', input 'utf8', function(err){ err ? console.log(err) : console.log('The file has been saved to legislators_by_zip.json.'); }); diff --git a/app.js b/app.js index 97d717d..9f87d6c 100644 --- a/app.js +++ b/app.js @@ -13,8 +13,8 @@ var request = require('request'); // require info from routes var index = require('./routes/index'); -var zip_results = require('./routes/zip_results'); -var legislator = require('./routes/legislator'); +var zip_results_router = require('./routes/zip_results_router'); +var legislator_router = require('./routes/legislator_router'); var users = require('./routes/users'); // express app @@ -33,8 +33,8 @@ app.use(express.static(path.join(__dirname, 'public'))); // set up route paths app.use('/', index); -app.use('/zip_results', zip_results); -app.use('/legislators', legislator); +app.use('/zip_results', zip_results_router); +app.use('/legislators', legislator_router); app.use('/users', users); // catch 404 and forward to error handler diff --git a/routes/legislator.js b/routes/legislator.js deleted file mode 100644 index 5859851..0000000 --- a/routes/legislator.js +++ /dev/null @@ -1,15 +0,0 @@ -var express = require('express'); -var router = express.Router(); -const {Legislator, LEGISLATORS} = require('../models/legislators') - -const findLegislator = (leg) => { - return LEGISLATORS.find(LEGISLATORS => leg == LEGISLATORS.bioguide_id) -} - -router.get('/:bioguide_id', function(req, res, next) { - const legislator_for_view = findLegislator(req.params.bioguide_id) - res.render('legislator', { title: 'Legislator show page', legislator: legislator_for_view }); -}); - - -module.exports = router \ No newline at end of file diff --git a/routes/zip_results.js b/routes/zip_results.js deleted file mode 100644 index 3d396b5..0000000 --- a/routes/zip_results.js +++ /dev/null @@ -1,8 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -router.get('/', function(req, res, next) { - res.render('zip_results', { title: 'Legislators by Zip' }); -}); - -module.exports = router; From 02a4c7947df2a9d7637570c4d2ab12c4e0ae75d4 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 11:33:12 -0500 Subject: [PATCH 32/53] Convert party initial to full word --- .../{legislators.js => legislators_model.js} | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) rename models/{legislators.js => legislators_model.js} (67%) diff --git a/models/legislators.js b/models/legislators_model.js similarity index 67% rename from models/legislators.js rename to models/legislators_model.js index 90c91fa..7f00001 100644 --- a/models/legislators.js +++ b/models/legislators_model.js @@ -6,11 +6,30 @@ class Legislator { this.bioguide_id = bioguide_id, this.name = name, this.chamber = chamber, - this.party = party, + this.party = this.partyConverter(party), this.phone = phone, this.website = website, this.imageUrl = imageUrl }; + + partyConverter(apiParty){ + switch (apiParty) { + case 'D': + return 'Democrat' + break; + case 'R': + return 'Republican' + break; + case 'G': + return 'Green' + break; + case 'I': + return 'Independent' + break; + default: + return 'Party Unknown' + } + }; } // close Legislator const LEGISLATORS = [] @@ -28,9 +47,6 @@ legislators_by_zip.results.forEach(function(leg){ ); }); - -console.log(LEGISLATORS); - // return the class for use in other files module.exports = { Legislator, From 1aeadc14f1bd622acfddc46d8c9d317c10d9aa7e Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 11:34:10 -0500 Subject: [PATCH 33/53] Rename files to include purpose for clarity --- public/stylesheets/style.css | 4 +++- routes/legislator_router.js | 15 +++++++++++++++ routes/zip_results_router.js | 13 +++++++++++++ views/{legislator.hbs => legislator_show.hbs} | 2 +- views/{zip_results.hbs => zip_results_view.hbs} | 16 ++++++++++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 routes/legislator_router.js create mode 100644 routes/zip_results_router.js rename views/{legislator.hbs => legislator_show.hbs} (97%) rename views/{zip_results.hbs => zip_results_view.hbs} (80%) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index c6fcf2e..346ef4f 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -179,9 +179,11 @@ h1.chamber { } .legislator-bio h3 { - font-size: 1.5em; + font-size: 1.25em; font-weight: normal; margin: 10px 0px; + color: gray; + font-style: italic; } .contact-info-box { diff --git a/routes/legislator_router.js b/routes/legislator_router.js new file mode 100644 index 0000000..04ba3d8 --- /dev/null +++ b/routes/legislator_router.js @@ -0,0 +1,15 @@ +var express = require('express'); +var router = express.Router(); +const {Legislator, LEGISLATORS} = require('../models/legislators_model') + +const findLegislator = (leg) => { + return LEGISLATORS.find(LEGISLATORS => leg == LEGISLATORS.bioguide_id) +} + +router.get('/:bioguide_id', function(req, res, next) { + const legislator_for_view = findLegislator(req.params.bioguide_id) + res.render('legislator_show', { title: 'Legislator show page', legislator: legislator_for_view }); +}); + + +module.exports = router \ No newline at end of file diff --git a/routes/zip_results_router.js b/routes/zip_results_router.js new file mode 100644 index 0000000..d2cad94 --- /dev/null +++ b/routes/zip_results_router.js @@ -0,0 +1,13 @@ +var express = require('express'); +var router = express.Router(); +const {Legislator, LEGISLATORS} = require('../models/legislators_model') + +router.get('/', function(req, res, next) { + res.render('zip_results', { title: 'Legislators by Zip' }); +}); + +router.get('/:zip', function(req, res, next) { + res.render('zip_results_view', { title: 'Legislators by zip', legislators: LEGISLATORS }); +}); + +module.exports = router diff --git a/views/legislator.hbs b/views/legislator_show.hbs similarity index 97% rename from views/legislator.hbs rename to views/legislator_show.hbs index 117e256..7c262f5 100644 --- a/views/legislator.hbs +++ b/views/legislator_show.hbs @@ -2,7 +2,7 @@
-

{{legislator.chamber}}

+

member of the {{legislator.chamber}}

{{legislator.name}}

diff --git a/views/zip_results.hbs b/views/zip_results_view.hbs similarity index 80% rename from views/zip_results.hbs rename to views/zip_results_view.hbs index 8f8f09b..ecb3e99 100644 --- a/views/zip_results.hbs +++ b/views/zip_results_view.hbs @@ -7,6 +7,22 @@

Change Zip

+ +{{#each legislators as |legislator|}} +
+
+ +
+
+

{{legislator.name}}

+

{{legislator.party}}

+
+
+{{/each}} + + +
+

House

From 8dcf78fe3a55658c4463b844f0d3ec0245fffa0e Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 11:40:43 -0500 Subject: [PATCH 34/53] Link from legislators index to legislator show page --- public/stylesheets/style.css | 5 +++++ views/zip_results_view.hbs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 346ef4f..53e3e35 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -167,6 +167,11 @@ h1.chamber { text-align: left; } +.profile .details a { + color: black; + text-decoration: none; +} + /* Legislator Show Page */ .legislator-bio .pic-holder { margin: 0 auto; diff --git a/views/zip_results_view.hbs b/views/zip_results_view.hbs index ecb3e99..bbbff0d 100644 --- a/views/zip_results_view.hbs +++ b/views/zip_results_view.hbs @@ -14,7 +14,7 @@
-

{{legislator.name}}

+

{{legislator.name}}

{{legislator.party}}

From 4c13ce8b44f2e02e1455fb3dadc64cd72116c51d Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 11:46:46 -0500 Subject: [PATCH 35/53] Refactor link style on zip results index page --- public/stylesheets/style.css | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 53e3e35..2d7d81a 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -154,9 +154,12 @@ h1.chamber { font-size: 2em; font-weight: normal; } -.profile .details h1:hover { +.profile .details a { + color: black; + text-decoration: none; +} +.profile .details a:hover { background-color: var(--highlight); - cursor: pointer; } .profile .details h2 { @@ -167,11 +170,6 @@ h1.chamber { text-align: left; } -.profile .details a { - color: black; - text-decoration: none; -} - /* Legislator Show Page */ .legislator-bio .pic-holder { margin: 0 auto; From c36fb5e5d661d5ec3d6999cbd5e06b1a07212721 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 14:29:24 -0500 Subject: [PATCH 36/53] Make main header a link to root --- public/stylesheets/style.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 2d7d81a..bad52a2 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -46,6 +46,11 @@ header.site-header h1 { margin: 0; } +header.site-header h1 a { + text-decoration: none; + color: black; +} + footer { text-align: center; font-style: italic; From 71b4d87f93ee7324e6290d0193fd7ab6617d57f0 Mon Sep 17 00:00:00 2001 From: anne Date: Fri, 18 Aug 2017 15:01:34 -0500 Subject: [PATCH 37/53] WIP feeling the struggle of not passing form params into the router correctly --- app.js | 4 +--- routes/zip_results_router.js | 11 ++++++----- views/index.hbs | 10 +++++++--- views/layout.hbs | 2 +- views/zip_results_view.hbs | 1 + 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app.js b/app.js index 9f87d6c..46d85d9 100644 --- a/app.js +++ b/app.js @@ -15,7 +15,6 @@ var request = require('request'); var index = require('./routes/index'); var zip_results_router = require('./routes/zip_results_router'); var legislator_router = require('./routes/legislator_router'); -var users = require('./routes/users'); // express app var app = express(); @@ -27,7 +26,7 @@ app.set('view engine', 'hbs'); app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.urlencoded({ extended: true })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); @@ -35,7 +34,6 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); app.use('/zip_results', zip_results_router); app.use('/legislators', legislator_router); -app.use('/users', users); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/routes/zip_results_router.js b/routes/zip_results_router.js index d2cad94..09215c7 100644 --- a/routes/zip_results_router.js +++ b/routes/zip_results_router.js @@ -1,13 +1,14 @@ var express = require('express'); var router = express.Router(); +// var {SunlightApi} = require('../api/sunlight_api'); const {Legislator, LEGISLATORS} = require('../models/legislators_model') -router.get('/', function(req, res, next) { - res.render('zip_results', { title: 'Legislators by Zip' }); -}); - router.get('/:zip', function(req, res, next) { - res.render('zip_results_view', { title: 'Legislators by zip', legislators: LEGISLATORS }); + var zip_from_params = req.params.zip; + // var api = new SunlightApi(zip_from_params); + // api.get_legislators(); + // res.send('you sent ' + zip_from_params); + res.render('zip_results_view', { title: 'Legislators by zip', legislators: LEGISLATORS, from_params: zip_from_params }); }); module.exports = router diff --git a/views/index.hbs b/views/index.hbs index 6bbb9c4..027f343 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -5,16 +5,20 @@

Enter Your Zip Code

- + +
- +
+ Click to see 70115 + +
\ No newline at end of file diff --git a/views/layout.hbs b/views/layout.hbs index c75bb2d..0284df1 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -9,7 +9,7 @@
{{{body}}} diff --git a/views/zip_results_view.hbs b/views/zip_results_view.hbs index bbbff0d..4781198 100644 --- a/views/zip_results_view.hbs +++ b/views/zip_results_view.hbs @@ -1,4 +1,5 @@
+

{{from_params}}

7 0 1 From 4427194dd6721526a3fd7d937199d24f763ce925 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 18:21:46 -0500 Subject: [PATCH 38/53] Rename legislator routers --- app.js | 10 ++++------ routes/zip_results_router.js | 14 -------------- 2 files changed, 4 insertions(+), 20 deletions(-) delete mode 100644 routes/zip_results_router.js diff --git a/app.js b/app.js index 46d85d9..82d51d3 100644 --- a/app.js +++ b/app.js @@ -8,13 +8,11 @@ var bodyParser = require('body-parser'); // api var request = require('request'); -// var SunlightData = require('./lib/sunlight_api'); -// const sunlightApi = new SunlightData(); // require info from routes var index = require('./routes/index'); -var zip_results_router = require('./routes/zip_results_router'); -var legislator_router = require('./routes/legislator_router'); +var legislators_index_router = require('./routes/legislators_index_router'); +var legislator_show_router = require('./routes/legislator_router'); // express app var app = express(); @@ -32,8 +30,8 @@ app.use(express.static(path.join(__dirname, 'public'))); // set up route paths app.use('/', index); -app.use('/zip_results', zip_results_router); -app.use('/legislators', legislator_router); +app.use('/legislators', legislators_index_router); +app.use('/legislator', legislator_show_router); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/routes/zip_results_router.js b/routes/zip_results_router.js deleted file mode 100644 index 09215c7..0000000 --- a/routes/zip_results_router.js +++ /dev/null @@ -1,14 +0,0 @@ -var express = require('express'); -var router = express.Router(); -// var {SunlightApi} = require('../api/sunlight_api'); -const {Legislator, LEGISLATORS} = require('../models/legislators_model') - -router.get('/:zip', function(req, res, next) { - var zip_from_params = req.params.zip; - // var api = new SunlightApi(zip_from_params); - // api.get_legislators(); - // res.send('you sent ' + zip_from_params); - res.render('zip_results_view', { title: 'Legislators by zip', legislators: LEGISLATORS, from_params: zip_from_params }); -}); - -module.exports = router From 43332178dd58f55410b88f6d526f7f55ec8f7184 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 18:26:17 -0500 Subject: [PATCH 39/53] Rename legislators index view --- ...results_view.hbs => legislators_index.hbs} | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) rename views/{zip_results_view.hbs => legislators_index.hbs} (52%) diff --git a/views/zip_results_view.hbs b/views/legislators_index.hbs similarity index 52% rename from views/zip_results_view.hbs rename to views/legislators_index.hbs index 4781198..d43eda9 100644 --- a/views/zip_results_view.hbs +++ b/views/legislators_index.hbs @@ -1,11 +1,8 @@
-

{{from_params}}

- 7 - 0 - 1 - 1 - 5 -

Change Zip

+{{#each zip_numbers as |num|}} + {{num}} +{{/each}} +

Change Zip

@@ -15,7 +12,7 @@
-

{{legislator.name}}

+

{{legislator.name}}

{{legislator.party}}

@@ -23,43 +20,42 @@
-

House

- +
-

Cedric L. Richmond

-

Democrat

+

Firstname Lastname

+

Sample Party

- +
-

Cedric L. Richmond

-

Democrat

+

Firstname Lastname

+

Sample Party

Senate

- +
-

Cedric L. Richmond

-

Democrat

+

Firstname Lastname

+

Sample Party

- +
-

Cedric L. Richmond

-

Democrat

+

Firstname Lastname

+

Sample Party

From aef53ab1360ad34a6ef869306ac7794ad7f8bb80 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 18:27:11 -0500 Subject: [PATCH 40/53] Remove data from model and rebuild class constructor --- models/legislator_model.js | 44 ++++++++++++++++++++++++++++++ models/legislators_model.js | 54 ------------------------------------- 2 files changed, 44 insertions(+), 54 deletions(-) create mode 100644 models/legislator_model.js delete mode 100644 models/legislators_model.js diff --git a/models/legislator_model.js b/models/legislator_model.js new file mode 100644 index 0000000..b497ac6 --- /dev/null +++ b/models/legislator_model.js @@ -0,0 +1,44 @@ +class Legislator { + constructor(params) { + this.bioguide_id = params.bioguide_id, + this.name = this.name(params.first_name, params.last_name), + this.chamber = params.chamber, + this.party = this.partyConverter(params.party), + this.phone = params.phone, + this.website = params.website, + this.imageUrl = this.image(params.bioguide_id) + }; + + name(first_name, last_name){ + return `${first_name} ${last_name}` + } + + image(bioguide_id){ + return `https://theunitedstates.io/images/congress/225x275/${bioguide_id}.jpg` + } + + partyConverter(apiParty){ + switch (apiParty) { + case 'D': + return 'Democrat' + break; + case 'R': + return 'Republican' + break; + case 'G': + return 'Green' + break; + case 'I': + return 'Independent' + break; + default: + return 'Party Unknown' + } + }; +} // close Legislator + + +// return the class for use in other files +module.exports = { + Legislator +}; \ No newline at end of file diff --git a/models/legislators_model.js b/models/legislators_model.js deleted file mode 100644 index 7f00001..0000000 --- a/models/legislators_model.js +++ /dev/null @@ -1,54 +0,0 @@ -var legislators_by_zip = require('../lib/legislators_by_zip'); - - -class Legislator { - constructor(bioguide_id, name, chamber, party, phone, website, imageUrl) { - this.bioguide_id = bioguide_id, - this.name = name, - this.chamber = chamber, - this.party = this.partyConverter(party), - this.phone = phone, - this.website = website, - this.imageUrl = imageUrl - }; - - partyConverter(apiParty){ - switch (apiParty) { - case 'D': - return 'Democrat' - break; - case 'R': - return 'Republican' - break; - case 'G': - return 'Green' - break; - case 'I': - return 'Independent' - break; - default: - return 'Party Unknown' - } - }; -} // close Legislator - -const LEGISLATORS = [] -legislators_by_zip.results.forEach(function(leg){ - LEGISLATORS.push( - new Legislator( - leg.bioguide_id, - `${leg.first_name} ${leg.last_name}`, - leg.chamber, - leg.party, - leg.phone, - leg.website, - `https://theunitedstates.io/images/congress/225x275/${leg.bioguide_id}.jpg` - ) - ); -}); - -// return the class for use in other files -module.exports = { - Legislator, - LEGISLATORS -}; \ No newline at end of file From 3984d97036a256a4e82895e8d37cb2a54b2d5160 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 18:28:09 -0500 Subject: [PATCH 41/53] Remove temp data holder file --- lib/legislators_by_zip.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 lib/legislators_by_zip.json diff --git a/lib/legislators_by_zip.json b/lib/legislators_by_zip.json deleted file mode 100644 index 3c68db4..0000000 --- a/lib/legislators_by_zip.json +++ /dev/null @@ -1 +0,0 @@ -{"results":[{"bioguide_id":"K000393","birthday":"1951-11-21","chamber":"senate","contact_form":"https://www.kennedy.senate.gov/content/contact-senator","crp_id":"N00026823","district":null,"facebook_id":"JohnKennedyLouisiana","fax":null,"fec_ids":["S4LA00065"],"first_name":"John","gender":"M","govtrack_id":"412679","icpsr_id":41703,"in_office":true,"last_name":"Kennedy","leadership_role":null,"lis_id":"S389","middle_name":"Neely","name_suffix":null,"nickname":null,"oc_email":"Sen.Kennedy@opencongress.org","ocd_id":"ocd-division/country:us/state:la","office":"383 Russell Senate Office Building","party":"R","phone":"202-224-4623","senate_class":3,"state":"LA","state_name":"Louisiana","state_rank":"junior","term_end":"2023-01-03","term_start":"2017-01-03","thomas_id":"","title":"Sen","twitter_id":"SenJohnKennedy","votesmart_id":35496,"website":"https://www.kennedy.senate.gov"},{"bioguide_id":"S001176","birthday":"1965-10-06","chamber":"house","contact_form":null,"crp_id":"N00009660","district":1,"facebook_id":"RepSteveScalise","fax":"202-226-0386","fec_ids":["H0LA01087"],"first_name":"Steve","gender":"M","govtrack_id":"412261","icpsr_id":20759,"in_office":true,"last_name":"Scalise","leadership_role":"Majority Whip","middle_name":"Joseph","name_suffix":null,"nickname":null,"oc_email":"Rep.Scalise@opencongress.org","ocd_id":"ocd-division/country:us/state:la/cd:1","office":"2338 Rayburn House Office Building","party":"R","phone":"202-225-3015","state":"LA","state_name":"Louisiana","term_end":"2019-01-03","term_start":"2017-01-03","thomas_id":"01892","title":"Rep","twitter_id":"SteveScalise","votesmart_id":9026,"website":"https://scalise.house.gov","youtube_id":"RepSteveScalise"},{"bioguide_id":"R000588","birthday":"1973-09-13","chamber":"house","contact_form":null,"crp_id":"N00030184","district":2,"facebook_id":"RepRichmond","fax":"202-225-1988","fec_ids":["H8LA02054"],"first_name":"Cedric","gender":"M","govtrack_id":"412432","icpsr_id":21137,"in_office":true,"last_name":"Richmond","leadership_role":null,"middle_name":"L.","name_suffix":null,"nickname":null,"oc_email":"Rep.Richmond@opencongress.org","ocd_id":"ocd-division/country:us/state:la/cd:2","office":"420 Cannon House Office Building","party":"D","phone":"202-225-6636","state":"LA","state_name":"Louisiana","term_end":"2019-01-03","term_start":"2017-01-03","thomas_id":"02023","title":"Rep","twitter_id":"RepRichmond","votesmart_id":35384,"website":"https://richmond.house.gov","youtube_id":"RepCedricRichmond"},{"bioguide_id":"C001075","birthday":"1957-09-28","chamber":"senate","contact_form":"https://www.cassidy.senate.gov/contact","crp_id":"N00030245","district":null,"facebook_id":null,"fax":"202-225-7313","fec_ids":["H8LA00017","S4LA00107"],"first_name":"Bill","gender":"M","govtrack_id":"412269","icpsr_id":20919,"in_office":true,"last_name":"Cassidy","leadership_role":null,"lis_id":"S373","middle_name":null,"name_suffix":null,"nickname":null,"oc_email":"Sen.Cassidy@opencongress.org","ocd_id":"ocd-division/country:us/state:la","office":"520 Hart Senate Office Building","party":"R","phone":"202-224-5824","senate_class":2,"state":"LA","state_name":"Louisiana","state_rank":"senior","term_end":"2021-01-03","term_start":"2015-01-06","thomas_id":"01925","title":"Sen","twitter_id":null,"votesmart_id":69494,"website":"https://www.cassidy.senate.gov","youtube_id":"SenatorBillCassidy"}],"count":4,"page":{"count":4,"per_page":20,"page":1}} \ No newline at end of file From 44b2b7cc051d48e10ff4978c6b55315c934c8d21 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 18:30:45 -0500 Subject: [PATCH 42/53] Remove placeholder info --- views/index.hbs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/views/index.hbs b/views/index.hbs index 027f343..c45110f 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -5,8 +5,8 @@

Enter Your Zip Code

-
- + +
From e8271f4b5aebe085d806b901bdacabd7bc232f17 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 19:06:17 -0500 Subject: [PATCH 43/53] Make call to api to get legislators by zip --- api/sunlight_api.js | 49 +++++++++++++----------------- models/legislator_model.js | 1 + routes/legislators_index_router.js | 17 +++++++++++ 3 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 routes/legislators_index_router.js diff --git a/api/sunlight_api.js b/api/sunlight_api.js index 68ccbdc..973ebc0 100644 --- a/api/sunlight_api.js +++ b/api/sunlight_api.js @@ -1,46 +1,41 @@ // require the request library const request = require('request'); - -var fs = require('fs'); +const {Legislator} = require('../models/legislator_model') // set up the base URI for the api from https://sunlightlabs.github.io/congress/ const baseUri = 'https://congress.api.sunlightfoundation.com'; -const zipUri = '/legislators/locate?zip='; -// const legislatorUri = '/legislators?bioguide_id='; // const voteUri = '/votes?voter_ids.'; // const billUri = '/bills?bill_id='; class SunlightApi { - constructor(zip) { - this.zip = zip - } + // A method for grabbing a list of legislators based upon a given zip code. - get_legislators() { - this._sendRequest(this.zip, zipUri, this.saveToLegislatorJson) + // The callback is passed in directly in the router. + getLegislators(zip, callback) { + var url = `${baseUri}/legislators/locate?zip=${zip}` + var mapper = function(result){ + // generate a new instance of legislator obj + return new Legislator(result) + } + + this._sendRequest(url, mapper, callback); } - // set up method to make the api call and return results - _sendRequest(zip, zipUri, callback) { - const url = `${baseUri}${zipUri}${this.zip}` - var options = { - url: url - } - request(options, function(error, response, body){ + // A method for making all of the api calls + _sendRequest(url, mapper, callback){ + request(url, function(error, response, body){ if (!error & response.statusCode === 200) { - callback(JSON.parse(body).results) + callback( + JSON.parse(body).results.map(function(api_result) { + // for each result, execute the passed mapper function + return mapper(api_result) + } + )) } - }) - } - - - // A method for parsing the JSON data into objects (Legislators, Bills, etc.). - saveToLegislatorJson(input) { - fs.writeFile('./lib/legislators_by_zip.json', input 'utf8', function(err){ - err ? console.log(err) : console.log('The file has been saved to legislators_by_zip.json.'); }); - }; + } // A method for retrieving the bills recently voted upon by a given legislator. getBills() { @@ -66,8 +61,6 @@ class SunlightApi { } // close SunlightApi - - // return the class for use in other files module.exports = { SunlightApi diff --git a/models/legislator_model.js b/models/legislator_model.js index b497ac6..3270322 100644 --- a/models/legislator_model.js +++ b/models/legislator_model.js @@ -1,4 +1,5 @@ class Legislator { + // Take the full results object and parse it into useful fields for the views constructor(params) { this.bioguide_id = params.bioguide_id, this.name = this.name(params.first_name, params.last_name), diff --git a/routes/legislators_index_router.js b/routes/legislators_index_router.js new file mode 100644 index 0000000..602771f --- /dev/null +++ b/routes/legislators_index_router.js @@ -0,0 +1,17 @@ +var express = require('express'); +var router = express.Router(); +var {SunlightApi} = require('../api/sunlight_api'); + +router.get('/', function(req, res, next) { + // res.send('you sent ' + req.query.zip); + var zip = req.query.zip; + var api = new SunlightApi(); + + // make a call to the api to get legislators for this zip + api.getLegislators(zip, function(legislators){ + // this is the action of the callback referenced api function + res.render('legislators_index', { title: 'Legislators by zip', legislators: legislators, zip_numbers: zip.split('') }); + }); +}); + +module.exports = router From 15dfe183fc600ad0cbef7c9e1f30dd5683a54a01 Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 19:07:05 -0500 Subject: [PATCH 44/53] Make call to api to get info for a specific legislator --- api/sunlight_api.js | 12 ++++++++++++ routes/legislator_router.js | 16 +++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/api/sunlight_api.js b/api/sunlight_api.js index 973ebc0..7133c84 100644 --- a/api/sunlight_api.js +++ b/api/sunlight_api.js @@ -23,6 +23,18 @@ class SunlightApi { this._sendRequest(url, mapper, callback); } + // A method for getting details on a specific legislator. + // The callback is passed in directly in the router. + getLegislator(bioguide_id, callback) { + var url = `${baseUri}/legislators?bioguide_id=${bioguide_id}` + var mapper = function(result){ + // generate a new instance of legislator obj + return new Legislator(result) + } + + this._sendRequest(url, mapper, callback); + } + // A method for making all of the api calls _sendRequest(url, mapper, callback){ request(url, function(error, response, body){ diff --git a/routes/legislator_router.js b/routes/legislator_router.js index 04ba3d8..30f7834 100644 --- a/routes/legislator_router.js +++ b/routes/legislator_router.js @@ -1,14 +1,16 @@ var express = require('express'); var router = express.Router(); -const {Legislator, LEGISLATORS} = require('../models/legislators_model') - -const findLegislator = (leg) => { - return LEGISLATORS.find(LEGISLATORS => leg == LEGISLATORS.bioguide_id) -} +var {SunlightApi} = require('../api/sunlight_api'); router.get('/:bioguide_id', function(req, res, next) { - const legislator_for_view = findLegislator(req.params.bioguide_id) - res.render('legislator_show', { title: 'Legislator show page', legislator: legislator_for_view }); + var bioguide_id = req.params.bioguide_id + var api = new SunlightApi(); + + // make a call to the api to get a specific legislator + api.getLegislator(bioguide_id, function(legislator){ + // this is the action of the callback referenced api function + res.render('legislator_show', { title: 'Legislator show page', legislator: legislator[0] }); + }) }); From 37aba7b1e9a0d929f3c18e4186385f5ae6995a3f Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 22 Aug 2017 19:07:38 -0500 Subject: [PATCH 45/53] Set up legislator show page to receive bill data --- views/legislator_show.hbs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/views/legislator_show.hbs b/views/legislator_show.hbs index 7c262f5..a3d3790 100644 --- a/views/legislator_show.hbs +++ b/views/legislator_show.hbs @@ -20,28 +20,29 @@

Recent Votes

+ + +

Placeholders below:

thumb_up -

hr3180-115

-

To authorize appropriations for fiscal year 2018 for intelligence and intelligence-related activities of the United States Government, the Community Management Account, and the Central Intelligence Agency Retirement and Disability System, and for other purposes.

+

SAMPLE hr3180-115

+

SAMPLE To authorize appropriations for fiscal year 2018 for intelligence and intelligence-related activities of the United States Government, the Community Management Account, and the Central Intelligence Agency Retirement and Disability System, and for other purposes.

thumb_down -

s114-115

-

To authorize appropriations and to appropriate amounts for the Veterans Choice Program of the Department of Veterans Affairs, to improve hiring authorities of the Department, to authorize major medical facility leases, and for other purposes.

-
- -
- -

hr3219-115

-

Making appropriations for the Department of Defense for the fiscal year ending September 30, 2018, and for other purposes.

+

SAMPLE s114-115

+

SAMPLE To authorize appropriations and to appropriate amounts for the Veterans Choice Program of the Department of Veterans Affairs, to improve hiring authorities of the Department, to authorize major medical facility leases, and for other purposes.

-

hjres111-115

-

Providing for congressional disapproval under chapter 8 of title 5, United States Code, of the rule submitted by Bureau of Consumer Financial Protection relating to "Arbitration Agreements".

+

SAMPLE hr3219-115

+

SAMPLE Making appropriations for the Department of Defense for the fiscal year ending September 30, 2018, and for other purposes.

\ No newline at end of file From 8db4cf0ea52bfaae1ee9ad1960a4ca70dd716364 Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 23 Aug 2017 09:21:42 -0500 Subject: [PATCH 46/53] Retreive vote information for legislators --- api/sunlight_api.js | 44 +++++++++++++------------------------ documentation.md | 2 +- models/vote_model.js | 20 +++++++++++++++++ routes/legislator_router.js | 6 +++-- views/legislator_show.hbs | 11 +++++++++- 5 files changed, 50 insertions(+), 33 deletions(-) create mode 100644 models/vote_model.js diff --git a/api/sunlight_api.js b/api/sunlight_api.js index 7133c84..cd945ec 100644 --- a/api/sunlight_api.js +++ b/api/sunlight_api.js @@ -1,17 +1,16 @@ // require the request library const request = require('request'); const {Legislator} = require('../models/legislator_model') +const {Vote} = require('../models/vote_model') // set up the base URI for the api from https://sunlightlabs.github.io/congress/ const baseUri = 'https://congress.api.sunlightfoundation.com'; -// const voteUri = '/votes?voter_ids.'; -// const billUri = '/bills?bill_id='; +// build class to organize api calls class SunlightApi { - - // A method for grabbing a list of legislators based upon a given zip code. + // Get a list of legislators based upon a given zip code. // The callback is passed in directly in the router. getLegislators(zip, callback) { var url = `${baseUri}/legislators/locate?zip=${zip}` @@ -19,11 +18,10 @@ class SunlightApi { // generate a new instance of legislator obj return new Legislator(result) } - this._sendRequest(url, mapper, callback); } - // A method for getting details on a specific legislator. + // Get details on a specific legislator. // The callback is passed in directly in the router. getLegislator(bioguide_id, callback) { var url = `${baseUri}/legislators?bioguide_id=${bioguide_id}` @@ -31,10 +29,20 @@ class SunlightApi { // generate a new instance of legislator obj return new Legislator(result) } - this._sendRequest(url, mapper, callback); } + // Get the list of votes a legislator has participated in + getLegislatorVotes(bioguide_id, callback) { + var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_zipUri,year,result,voter_ids&vote_type=passage&voter_ids.${bioguide_id}__exists=true`; + var mapper = function(result){ + // generate a new instance of legislator obj + return new Vote(result, bioguide_id) + } + this._sendRequest(url, mapper, callback); + }; + + // A method for making all of the api calls _sendRequest(url, mapper, callback){ request(url, function(error, response, body){ @@ -49,28 +57,6 @@ class SunlightApi { }); } - // A method for retrieving the bills recently voted upon by a given legislator. - getBills() { - function buildBills(){ - console.log('builsBills test'); - var billLink = `https://www.govtrack.us/congress/bills/114/hr3082`; - }; - var url = `https://congress.api.sunlightfoundation.com/bills?fields=bill_id,congress,number,official_title,summary`; - this._sendRequest(url, buildBills); - }; - - // Make sure you include how the legislator voted. - legislatorVote() { - function buildVotes(){ - console.log('buildVotes test'); - }; - var url = `https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_zipUri,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true` - this._sendRequest(url, buildVotes); - - }; - - // Any other methods or objects you find useful - } // close SunlightApi // return the class for use in other files diff --git a/documentation.md b/documentation.md index be3ddca..d068192 100644 --- a/documentation.md +++ b/documentation.md @@ -45,7 +45,7 @@ Documentation: https://sunlightlabs.github.io/congress/votes.html API Calls: -https://congress.api.sunlightfoundation.com/votes?fields=bill_id,vote_zipUri,year,question,result,voter_ids&vote_type=passage&voter_ids.R000588__exists=true +https://congress.api.sunlightfoundation.com/votes?fields=bill_id,congress,vote_zipUri,year,question,result,voter_ids&vote_type=passage&voter_ids.${legislator.bioguide_id}__exists=true diff --git a/models/vote_model.js b/models/vote_model.js new file mode 100644 index 0000000..18c49f5 --- /dev/null +++ b/models/vote_model.js @@ -0,0 +1,20 @@ +class Vote { + // Take the full results object and parse it into useful fields for the views + constructor(params, bioguide_id) { + this.billId = params.bill_id, + this.result = params.result, + this.legislatorId = bioguide_id, + this.legislatorVote = this.voteParser(params.voter_ids, bioguide_id) + }; + + voteParser(voterIds, bioguide_id){ + return voterIds[bioguide_id]; + } + +} // close Vote + + +// return the class for use in other files +module.exports = { + Vote +}; \ No newline at end of file diff --git a/routes/legislator_router.js b/routes/legislator_router.js index 30f7834..d23b170 100644 --- a/routes/legislator_router.js +++ b/routes/legislator_router.js @@ -8,8 +8,10 @@ router.get('/:bioguide_id', function(req, res, next) { // make a call to the api to get a specific legislator api.getLegislator(bioguide_id, function(legislator){ - // this is the action of the callback referenced api function - res.render('legislator_show', { title: 'Legislator show page', legislator: legislator[0] }); + // make a call to the api to get that legislator's vote records + api.getLegislatorVotes(bioguide_id, function(votes){ + res.render('legislator_show', { title: 'Legislator show page', legislator: legislator[0], votes: votes }); + }); }) }); diff --git a/views/legislator_show.hbs b/views/legislator_show.hbs index a3d3790..26de320 100644 --- a/views/legislator_show.hbs +++ b/views/legislator_show.hbs @@ -20,11 +20,20 @@

Recent Votes

+ {{#each votes as |vote|}}
+ +

{{vote.billId}}

+

{{vote.legislatorId}} voted {{vote.legislatorVote}} on this bill.

+

The result of this vote: {{vote.result}}.

+
+ {{/each}} + +

Placeholders below:

From f0bd76fcd16c9316bacc9746a7f53bf97b1270e8 Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 23 Aug 2017 09:48:20 -0500 Subject: [PATCH 47/53] Separate members of house and senate on legislators index page --- routes/legislators_index_router.js | 15 +++++--- views/legislators_index.hbs | 55 +++++++----------------------- 2 files changed, 24 insertions(+), 46 deletions(-) diff --git a/routes/legislators_index_router.js b/routes/legislators_index_router.js index 602771f..60f5a5b 100644 --- a/routes/legislators_index_router.js +++ b/routes/legislators_index_router.js @@ -2,15 +2,22 @@ var express = require('express'); var router = express.Router(); var {SunlightApi} = require('../api/sunlight_api'); +var getMembers = function(legislators, position) { + return members = legislators.filter(function(legislator){ return legislator.chamber === position}); +}; + router.get('/', function(req, res, next) { - // res.send('you sent ' + req.query.zip); var zip = req.query.zip; var api = new SunlightApi(); - // make a call to the api to get legislators for this zip + // make a call to the api to get legislators for this zip. + // this is the action of the callback referenced api function api.getLegislators(zip, function(legislators){ - // this is the action of the callback referenced api function - res.render('legislators_index', { title: 'Legislators by zip', legislators: legislators, zip_numbers: zip.split('') }); + // separate results by house/senate + var houseMembers = getMembers(legislators, 'house'); + var senateMembers = getMembers(legislators, 'senate'); + // render this info in the view + res.render('legislators_index', { title: 'Legislators by zip', house_members: houseMembers, senate_members: senateMembers, zip_numbers: zip.split('') }); }); }); diff --git a/views/legislators_index.hbs b/views/legislators_index.hbs index d43eda9..01d1e8d 100644 --- a/views/legislators_index.hbs +++ b/views/legislators_index.hbs @@ -5,8 +5,8 @@

Change Zip

- -{{#each legislators as |legislator|}} +

House

+{{#each house_members as |legislator|}}
@@ -18,44 +18,15 @@
{{/each}} - -
-

House

-
-
- -
-
-

Firstname Lastname

-

Sample Party

-
-
-
-
- -
-
-

Firstname Lastname

-

Sample Party

-
-
-

Senate

-
-
- -
-
-

Firstname Lastname

-

Sample Party

-
-
-
-
- -
-
-

Firstname Lastname

-

Sample Party

-
-
+{{#each senate_members as |legislator|}} + +{{/each}} From a2ae993aef510445cab70798ddd82af2678099c4 Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 23 Aug 2017 13:59:44 -0500 Subject: [PATCH 48/53] Move legislator pics up a bit in the frame to show their faces better --- public/stylesheets/style.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index bad52a2..3f113ab 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -74,11 +74,15 @@ footer { width: 100px; height: 100px; border-radius: 50%; + border: 1px solid gray; overflow: hidden; + position: relative; } .pic-holder img { width: 100%; + position: absolute; + top: -10px; } /* Index Page */ From 1f2f3972c578fa78a18dc885d9e2983a520f3ce3 Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 23 Aug 2017 14:08:26 -0500 Subject: [PATCH 49/53] Redesign vote output display on legislator show page --- public/stylesheets/style.css | 48 +++++++++++++++++++++++++++--------- views/legislator_show.hbs | 36 ++++++++++----------------- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 3f113ab..63f1517 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -222,32 +222,56 @@ article.vote { border: 1px solid var(--border); margin: 20px 0px; } -article.vote .material-icons { + +article.vote header .material-icons { float: right; margin: 10px 10px 0px 0px; color: white; } -article.vote h2 { +article.vote header { background-color: var(--lightgray); - text-align: left; margin: 0; - padding: 10px; + padding: 0; color: gray; + text-align: center; + overflow: auto; } -article.vote p { - padding: 0px 10px 10px 10px; -} - -article.voted-yes h2 { - /*background-color: var(--lightgreen);*/ +article.voted-yes header { background-color: var(--green); color: white; } -article.voted-no h2 { - /*background-color: var(--lightred);*/ +article.voted-no header { background-color: var(--red); color: white; } + +article.vote header h2 { + text-align: left; + margin: 0; + padding: 10px; + font-weight: normal; + font-size: 1.2em; +} + +article.vote header h2 a { + color: black; + text-decoration: none; +} + +article.vote header h2 a:hover { + text-decoration: underline; +} + +article.vote header .result-container { + font-size: 0.85em; + float: right; + color: black; + padding: 10px; +} + +article.vote p { + padding: 0px 10px 10px 10px; +} diff --git a/views/legislator_show.hbs b/views/legislator_show.hbs index 26de320..b58c498 100644 --- a/views/legislator_show.hbs +++ b/views/legislator_show.hbs @@ -22,10 +22,19 @@

Recent Votes

{{#each votes as |vote|}}
- -

{{vote.billId}}

-

{{vote.legislatorId}} voted {{vote.legislatorVote}} on this bill.

-

The result of this vote: {{vote.result}}.

+
+
+ Bill:
+ {{vote.result}} +
+
+ {{../legislator.name}}
+ Voted:
{{vote.legislatorVote}} +
+ +

{{vote.billId}}: Bill Title Coming

+
+

Description Coming

{{/each}} @@ -35,23 +44,4 @@

{{bill.description}}

--> -

Placeholders below:

-
- thumb_up -

SAMPLE hr3180-115

-

SAMPLE To authorize appropriations for fiscal year 2018 for intelligence and intelligence-related activities of the United States Government, the Community Management Account, and the Central Intelligence Agency Retirement and Disability System, and for other purposes.

-
- -
- thumb_down -

SAMPLE s114-115

-

SAMPLE To authorize appropriations and to appropriate amounts for the Veterans Choice Program of the Department of Veterans Affairs, to improve hiring authorities of the Department, to authorize major medical facility leases, and for other purposes.

-
- -
- -

SAMPLE hr3219-115

-

SAMPLE Making appropriations for the Department of Defense for the fiscal year ending September 30, 2018, and for other purposes.

-
- \ No newline at end of file From 2a346bc5a5db3f1fe7184a4400c3b59a546b13a5 Mon Sep 17 00:00:00 2001 From: anne Date: Wed, 23 Aug 2017 14:12:33 -0500 Subject: [PATCH 50/53] Standardize output vote results --- models/vote_model.js | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/models/vote_model.js b/models/vote_model.js index 18c49f5..32e7ecd 100644 --- a/models/vote_model.js +++ b/models/vote_model.js @@ -2,14 +2,34 @@ class Vote { // Take the full results object and parse it into useful fields for the views constructor(params, bioguide_id) { this.billId = params.bill_id, - this.result = params.result, + this.result = this.resultConverter(params.result), this.legislatorId = bioguide_id, this.legislatorVote = this.voteParser(params.voter_ids, bioguide_id) }; voteParser(voterIds, bioguide_id){ - return voterIds[bioguide_id]; - } + switch (voterIds[bioguide_id]) { + case 'Yea': + return 'Yes' + break; + case 'Nay': + return 'No' + break; + default: + return voterIds[bioguide_id]; + } + }; + + resultConverter(apiResult){ + apiResult = apiResult.toLowerCase(); + if (apiResult.includes('pass') || apiResult.includes('agree')) { + return 'Passed' + } else if (apiResult.includes('fail')) { + return 'Failed' + } else { + return apiResult + } + }; } // close Vote From 4eb6dea922e7135ddd406b5a0c82fc4e512b7dfa Mon Sep 17 00:00:00 2001 From: anne Date: Tue, 19 Sep 2017 19:17:41 -0500 Subject: [PATCH 51/53] Add build status to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b3e4d38..1d4b439 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # project_what_have_you_done Build an application to help track the legislative activities of your local representatives. +This build is not 100% complete as it lacks bill info integration. + by Anne Richardson See it on heroku: https://frozen-brushlands-61850.herokuapp.com From e1219f4b9517e4a4c0383703d6f3f9c7c0332b3a Mon Sep 17 00:00:00 2001 From: richardsonae Date: Sun, 28 Apr 2019 16:50:26 -0500 Subject: [PATCH 52/53] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d4b439..4756483 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,6 @@ This build is not 100% complete as it lacks bill info integration. by Anne Richardson -See it on heroku: https://frozen-brushlands-61850.herokuapp.com +Hosted on heroku: https://frozen-brushlands-61850.herokuapp.com +_App is currently turned off_ From f0f22fbe1623d758e85b885e8bd5be14347aed02 Mon Sep 17 00:00:00 2001 From: richardsonae Date: Sun, 28 Apr 2019 16:50:36 -0500 Subject: [PATCH 53/53] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4756483..98b48ed 100644 --- a/README.md +++ b/README.md @@ -6,5 +6,6 @@ This build is not 100% complete as it lacks bill info integration. by Anne Richardson Hosted on heroku: https://frozen-brushlands-61850.herokuapp.com + _App is currently turned off_