├── .bundle
└── config
├── .gitignore
├── .rspec
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── controllers
│ ├── application_controller.rb
│ ├── apps_controller.rb
│ ├── authentications_controller.rb
│ ├── comments_controller.rb
│ ├── deploy_task_resources_controller.rb
│ ├── details_controller.rb
│ ├── goals_controller.rb
│ ├── languages_controller.rb
│ ├── members_controller.rb
│ ├── milestones_controller.rb
│ ├── pages_controller.rb
│ ├── people_controller.rb
│ ├── regions_controller.rb
│ ├── roles_controller.rb
│ ├── skills_controller.rb
│ ├── steps_controller.rb
│ ├── team_members_controller.rb
│ ├── teams_controller.rb
│ ├── users
│ │ └── sessions_controller.rb
│ └── users_controller.rb
├── helpers
│ ├── application_helper.rb
│ ├── authentications_helper.rb
│ └── people_helper.rb
├── models
│ ├── activity_feed.rb
│ ├── app.rb
│ ├── authentication.rb
│ ├── batchbook_contact.rb
│ ├── comment.rb
│ ├── contact_source.rb
│ ├── cron_process.rb
│ ├── deploy_task.rb
│ ├── deploy_task_resource.rb
│ ├── description.rb
│ ├── detail.rb
│ ├── github_contact.rb
│ ├── heading.rb
│ ├── milestone.rb
│ ├── person.rb
│ ├── region.rb
│ ├── sign_in_data.rb
│ ├── step.rb
│ ├── team.rb
│ ├── team_deploy_task.rb
│ ├── team_member.rb
│ └── user.rb
└── views
│ ├── apps
│ ├── _activity_stream.html.erb
│ ├── _form.html.erb
│ ├── _header.html.erb
│ ├── _metric.html.erb
│ ├── admin.html.erb
│ ├── edit.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ ├── people.html.erb
│ ├── show.html.erb
│ └── steps.html.erb
│ ├── authentications
│ ├── _add_auth_form.html.erb
│ ├── _list.html.erb
│ ├── _login_form.html.erb
│ ├── _provider_list.html.erb
│ ├── auth_failure.html.erb
│ ├── auto.html.erb
│ └── index.html.erb
│ ├── comments
│ └── create.html.erb
│ ├── details
│ ├── _form.html.erb
│ ├── edit.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ └── show.html.erb
│ ├── layouts
│ ├── _google_analytics.html.erb
│ ├── application.html.erb
│ └── old-application.html.haml
│ ├── milestones
│ ├── edit.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ └── show.html.erb
│ ├── pages
│ ├── about.html.erb
│ ├── api.html.erb
│ ├── blog.html.erb
│ ├── contact.html.erb
│ ├── privacy.html.erb
│ └── terms.html.erb
│ ├── people
│ ├── _common_skills.html.erb
│ ├── _form.html.erb
│ ├── _list.html.erb
│ ├── _new_form.html.erb
│ ├── _person_comments.html.erb
│ ├── _person_edit_image.html.erb
│ ├── _person_header.html.erb
│ ├── _person_teams.html.erb
│ ├── _team_list.html.erb
│ ├── claim.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ ├── photo.html.erb
│ └── show.html.erb
│ ├── regions
│ ├── _form.html.erb
│ ├── edit.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ └── show.html.erb
│ ├── resources
│ ├── _resource_list.html.erb
│ ├── edit.html.erb
│ └── new.html.erb
│ ├── shared
│ ├── _app_header.html.erb
│ ├── _comment.html.erb
│ ├── _comment_list.html.erb
│ ├── _deploy_task_resource.html.erb
│ ├── _footer.html.erb
│ ├── _guide_sidebar.html.erb
│ ├── _header.html.erb
│ ├── _list.html.erb
│ ├── _list_item.html.erb
│ ├── _list_pagination.html.erb
│ ├── _search.html.erb
│ └── _tag_list.html.erb
│ ├── steps
│ ├── edit.html.erb
│ ├── new.html.erb
│ └── show.html.erb
│ ├── tags
│ └── _list.html.erb
│ ├── teams
│ ├── _activity_stream.html.erb
│ ├── _core_metric.html.erb
│ ├── _core_team.html.erb
│ ├── _form.html.erb
│ ├── _implementations.html.erb
│ ├── _list.html.erb
│ ├── _list_item.html.erb
│ ├── _metric.html.erb
│ ├── _organizers.html.erb
│ ├── _supporters.html.erb
│ ├── edit.html.erb
│ ├── index.html.erb
│ ├── new.html.erb
│ ├── people.html.erb
│ └── show.html.erb
│ └── users
│ ├── home.html.erb
│ ├── index.html.erb
│ ├── sessions
│ └── new.html.erb
│ └── welcome.html.erb
├── config.ru
├── config
├── application.rb
├── boot.rb
├── database.yml
├── environment.rb
├── environments
│ ├── development.rb
│ ├── jenkins.rb
│ ├── production.rb
│ └── test.rb
├── initializers
│ ├── _load_settings.rb
│ ├── backtrace_silencers.rb
│ ├── delayed_job.rb
│ ├── devise.rb
│ ├── inflections.rb
│ ├── mime_types.rb
│ ├── omniauth.rb
│ ├── paperclip.rb
│ ├── secret_token.rb
│ └── session_store.rb
├── locales
│ └── en.yml
├── routes.rb
├── settings-local-sample.yml
└── twitter_auth.yml
├── db
├── migrate
│ ├── 20110601194123_create_github_contacts.rb
│ ├── 20110601235912_create_delayed_jobs.rb
│ ├── 20110602162632_create_batchbook_contacts.rb
│ ├── 20110602163032_acts_as_taggable_on_migration.rb
│ ├── 20110627233220_create_people.rb
│ ├── 20110705171644_devise_create_users.rb
│ ├── 20110705172005_update_person.rb
│ ├── 20110705172312_authentications.rb
│ ├── 20110706162252_create_apps.rb
│ ├── 20110707213317_create_regions.rb
│ ├── 20110707213640_create_teams.rb
│ ├── 20110707213749_create_team_members.rb
│ ├── 20110707214056_create_details.rb
│ ├── 20110707222526_add_nick_name_to_regions.rb
│ ├── 20110707230536_add_region_id_to_users.rb
│ ├── 20110707232700_add_admin_to_team_members.rb
│ ├── 20110708173625_add_app_id_to_team_members.rb
│ ├── 20110726163650_create_roles.rb
│ ├── 20110726163903_create_skills.rb
│ ├── 20110726171207_create_languages.rb
│ ├── 20110726194202_add_photos_to_apps.rb
│ ├── 20110801021736_use_paper_clip_for_apps_videos.rb
│ ├── 20110801124607_add_repo_url_to_teams_table.rb
│ ├── 20110801150627_create_deploy_tasks.rb
│ ├── 20110801150927_create_deploy_task_resources.rb
│ ├── 20110801151358_create_team_deploy_tasks.rb
│ ├── 20110801152005_create_comments.rb
│ ├── 20110804182313_create_activity_feeds.rb
│ ├── 20110804192425_add_commentable_to_comment.rb
│ ├── 20110805000044_add_photos_to_regions.rb
│ ├── 20110805185055_upate_deploy_tasks_table.rb
│ ├── 20110809170919_drop_langs_skills_roles_tables.rb
│ ├── 20110812194931_change_activity_in_activity_feeds.rb
│ └── 20110812221737_changing_people_bio_to_text.rb
├── schema.rb
└── seeds.rb
├── lib
├── api_client.rb
├── api_client
│ ├── base.rb
│ ├── facebook.rb
│ ├── linked_in.rb
│ ├── o_auth.rb
│ ├── o_auth2.rb
│ └── twitter.rb
├── application_responder.rb
├── auth_probe.rb
├── localness.rb
└── tasks
│ └── .gitkeep
├── public
├── 404.html
├── 422.html
├── 500.html
├── favicon.ico
├── fonts
│ ├── League_Gothic-webfont.eot
│ ├── League_Gothic-webfont.svg
│ ├── League_Gothic-webfont.ttf
│ └── League_Gothic-webfont.woff
├── images
│ ├── add.png
│ ├── arrow-left.png
│ ├── arrow-right.png
│ ├── arrows.png
│ ├── authbuttons
│ │ ├── aol_128.png
│ │ ├── aol_256.png
│ │ ├── aol_32.png
│ │ ├── aol_64.png
│ │ ├── auth-add.png
│ │ ├── auth-delete.png
│ │ ├── basecamp_128.png
│ │ ├── basecamp_256.png
│ │ ├── basecamp_32.png
│ │ ├── basecamp_64.png
│ │ ├── campfire_128.png
│ │ ├── campfire_256.png
│ │ ├── campfire_32.png
│ │ ├── campfire_64.png
│ │ ├── facebook_128.png
│ │ ├── facebook_256.png
│ │ ├── facebook_32.png
│ │ ├── facebook_64.png
│ │ ├── github_128.png
│ │ ├── github_256.png
│ │ ├── github_32.png
│ │ ├── github_64.png
│ │ ├── google_128.png
│ │ ├── google_256.png
│ │ ├── google_32.png
│ │ ├── google_64.png
│ │ ├── linked_in_128.png
│ │ ├── linked_in_256.png
│ │ ├── linked_in_32.png
│ │ ├── linked_in_64.png
│ │ ├── myspace_128.png
│ │ ├── myspace_256.png
│ │ ├── myspace_32.png
│ │ ├── myspace_64.png
│ │ ├── open_id_128.png
│ │ ├── open_id_256.png
│ │ ├── open_id_32.png
│ │ ├── open_id_64.png
│ │ ├── presently_128.png
│ │ ├── presently_256.png
│ │ ├── presently_32.png
│ │ ├── presently_64.png
│ │ ├── twitter_128.png
│ │ ├── twitter_256.png
│ │ ├── twitter_32.png
│ │ ├── twitter_64.png
│ │ ├── yahoo_128.png
│ │ ├── yahoo_256.png
│ │ ├── yahoo_32.png
│ │ └── yahoo_64.png
│ ├── avatar-1.png
│ ├── avatar-2.png
│ ├── background.png
│ ├── binocular.png
│ ├── bos-icon.png
│ ├── cfa-full-logo.png
│ ├── check-white-icon.png
│ ├── cityhero_logo.png
│ ├── civicopia-widget-bottom-dropshadow.png
│ ├── content-border.png
│ ├── creepy-baby-sloth.jpg
│ ├── default_app_1.png
│ ├── default_app_2.png
│ ├── default_app_3.png
│ ├── delete.png
│ ├── example.jpg
│ ├── fork.png
│ ├── geekcorpsavatar1.png
│ ├── geekcorpsavatar1_medium.png
│ ├── geekcorpsavatar1_small.png
│ ├── geekcorpsavatar1_thumb.png
│ ├── geekcorpsavatar2.png
│ ├── geekcorpsavatar2_medium.png
│ ├── geekcorpsavatar2_small.png
│ ├── geekcorpsavatar2_thumb.png
│ ├── geekcorpsavatar3.png
│ ├── geekcorpsavatar3_medium.png
│ ├── geekcorpsavatar3_small.png
│ ├── geekcorpsavatar3_thumb.png
│ ├── home_12x12.png
│ ├── join-ribbon-shadow.png
│ ├── join-sash.png
│ ├── list-item-check.png
│ ├── logo-sash.png
│ ├── map-icon-white.png
│ ├── map-icon.png
│ ├── map-shadow-icon.png
│ ├── no-image.gif
│ ├── notify_icon_green.png
│ ├── notify_icon_orange.png
│ ├── notify_icon_purple.png
│ ├── notify_icon_red.png
│ ├── notify_icon_rust.png
│ ├── org-sash.png
│ ├── org-sash.psd
│ ├── person_photo_upload_img.png
│ ├── person_photo_upload_img_sm.png
│ ├── phl-icon.png
│ ├── progress-background.png
│ ├── project-overview-dropshadow.png
│ ├── rails.png
│ ├── rainbow.png
│ ├── sanscons_16
│ │ ├── add.png
│ │ ├── addressbook.png
│ │ ├── alert.png
│ │ ├── apple.png
│ │ ├── arrow1_e.png
│ │ ├── arrow1_n.png
│ │ ├── arrow1_ne.png
│ │ ├── arrow1_nw.png
│ │ ├── arrow1_s.png
│ │ ├── arrow1_se.png
│ │ ├── arrow1_sw.png
│ │ ├── arrow1_w.png
│ │ ├── arrow2_e.png
│ │ ├── arrow2_n.png
│ │ ├── arrow2_ne.png
│ │ ├── arrow2_nw.png
│ │ ├── arrow2_s.png
│ │ ├── arrow2_se.png
│ │ ├── arrow2_sw.png
│ │ ├── arrow2_w.png
│ │ ├── arrow3_e.png
│ │ ├── arrow3_n.png
│ │ ├── arrow3_ne.png
│ │ ├── arrow3_nw.png
│ │ ├── arrow3_s.png
│ │ ├── arrow3_se.png
│ │ ├── arrow3_sw.png
│ │ ├── arrow3_w.png
│ │ ├── ascii.png
│ │ ├── back.png
│ │ ├── bigsmile.png
│ │ ├── binary.png
│ │ ├── blah.png
│ │ ├── bstop.png
│ │ ├── buy.png
│ │ ├── calday.png
│ │ ├── calendar.png
│ │ ├── camera.png
│ │ ├── cart.png
│ │ ├── cd.png
│ │ ├── cellphone.png
│ │ ├── chat.png
│ │ ├── check.png
│ │ ├── close.png
│ │ ├── comment.png
│ │ ├── cube.png
│ │ ├── day.png
│ │ ├── denied.png
│ │ ├── document.png
│ │ ├── download.png
│ │ ├── edit.png
│ │ ├── eject.png
│ │ ├── equalizer.png
│ │ ├── first.png
│ │ ├── flag.png
│ │ ├── flash.png
│ │ ├── folder.png
│ │ ├── forward.png
│ │ ├── frown.png
│ │ ├── ftp.png
│ │ ├── graph.png
│ │ ├── heart.png
│ │ ├── home.png
│ │ ├── html.png
│ │ ├── ipod.png
│ │ ├── last.png
│ │ ├── lock.png
│ │ ├── loop.png
│ │ ├── mail.png
│ │ ├── man.png
│ │ ├── manman.png
│ │ ├── music.png
│ │ ├── mute.png
│ │ ├── mute_centered.png
│ │ ├── newwindow.png
│ │ ├── next.png
│ │ ├── night.png
│ │ ├── open.png
│ │ ├── pause.png
│ │ ├── phone.png
│ │ ├── play.png
│ │ ├── previous.png
│ │ ├── quicktime.png
│ │ ├── redo.png
│ │ ├── reload.png
│ │ ├── sad.png
│ │ ├── save.png
│ │ ├── scream.png
│ │ ├── search.png
│ │ ├── seconds.png
│ │ ├── smile.png
│ │ ├── smirk.png
│ │ ├── star.png
│ │ ├── stop.png
│ │ ├── subtract.png
│ │ ├── switch.png
│ │ ├── target.png
│ │ ├── tcp.png
│ │ ├── time.png
│ │ ├── toggle.png
│ │ ├── tongue.png
│ │ ├── tools.png
│ │ ├── trackback.png
│ │ ├── trash.png
│ │ ├── tv.png
│ │ ├── type.png
│ │ ├── undo.png
│ │ ├── unlock.png
│ │ ├── upload.png
│ │ ├── user.png
│ │ ├── video.png
│ │ ├── volume_high.png
│ │ ├── volume_low.png
│ │ ├── wifi.png
│ │ ├── window.png
│ │ ├── woman.png
│ │ ├── womanman.png
│ │ ├── work.png
│ │ ├── zoomin.png
│ │ └── zoomout.png
│ ├── sea-icon.png
│ ├── search_icon-15.png
│ ├── search_icon-50.png
│ ├── sf-icon.png
│ ├── stats-border.png
│ ├── step-indicate.png
│ ├── target-icon.png
│ ├── tmp-geekcorps-logo.png
│ ├── twitter-24x24.png
│ ├── wayfinder-check.png
│ ├── wayfinder-item-background1.png
│ ├── wayfinder-item-background2.png
│ ├── wayfinder-plus.png
│ ├── widget-border.png
│ ├── wizard-field-tip-border.png
│ └── wizard-general-tip-border.png
├── javascripts
│ ├── geekcorps.js
│ └── lib
│ │ ├── backbone.js
│ │ ├── jquery-ujs.js
│ │ ├── jquery.cookie.js
│ │ ├── jquery.hoverexpand.js
│ │ ├── jquery.isotope.min.js
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ ├── jquery.sortElements.js
│ │ └── underscore.js
├── robots.txt
└── stylesheets
│ ├── .gitkeep
│ ├── geekcorps.css
│ └── reset.css
├── script
├── delayed_job
└── rails
├── spec
├── controllers
│ ├── comments_controller_spec.rb
│ ├── deploy_task_resources_controller_spec.rb
│ ├── details_controller_spec.rb
│ ├── milestones_controller_spec.rb
│ ├── people_controller_spec.rb
│ ├── regions_controller_spec.rb
│ ├── steps_controller_spec.rb
│ ├── team_members_controller_spec.rb
│ └── teams_controller_spec.rb
├── factories
│ ├── batchbook_people.xml
│ ├── factories.rb
│ ├── github_contacts.json
│ ├── github_contacts_update.json
│ └── github_contacts_update_coder.json
├── models
│ ├── activity_feed_spec.rb
│ ├── app_spec.rb
│ ├── batchbook_contact_spec.rb
│ ├── comment_spec.rb
│ ├── detail_spec.rb
│ ├── github_contact_spec.rb
│ ├── milestone_spec.rb
│ ├── person_spec.rb
│ ├── region_spec.rb
│ ├── team_member_spec.rb
│ ├── team_spec.rb
│ └── user_spec.rb
├── spec_helper.rb
└── views
│ └── comments
│ └── create.html.erb_spec.rb
└── vendor
└── plugins
└── .gitkeep
/.bundle/config:
--------------------------------------------------------------------------------
1 | ---
2 | BUNDLE_WITHOUT: development:test
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | *.sqlite3
3 | *.dat
4 | config/settings.yml
5 | .config
6 | .directory
7 | .elc
8 | .redcar
9 | .yardoc
10 | /.emacs.desktop
11 | /.emacs.desktop.lock
12 | Desktop.ini
13 | Gemfile.lock
14 | Icon?
15 | InstalledFiles
16 | Session.vim
17 | Thumbs.db
18 | \#*\#
19 | _yardoc
20 | auto-save-list
21 | coverage
22 | doc/
23 | lib/bundler/man
24 | pkg
25 | pkg/*
26 | rdoc
27 | spec/reports
28 | test/tmp
29 | test/version_tmp
30 | tmp/*
31 | tmtags
32 | tramp
33 | *.log
34 | .DS_Store
35 | public/system/*
36 |
--------------------------------------------------------------------------------
/.rspec:
--------------------------------------------------------------------------------
1 | --colour --drb
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'http://rubygems.org'
2 | source 'http://gems.rubyforge.org'
3 |
4 | gem 'rails', '3.0.7'
5 | gem 'delayed_job'
6 | gem 'jquery-rails'
7 | gem 'json'
8 | gem 'sqlite3'
9 | gem 'hominid'
10 | gem 'will_paginate'
11 | #gem 'meta_search'
12 | gem 'acts-as-taggable-on'
13 | gem 'multi_xml'
14 | gem "aws-s3"
15 | gem 'paperclip'
16 | gem 'omniauth', '>= 0.2.6'
17 | gem 'devise'
18 |
19 |
20 | gem 'twitter'
21 | gem 'linkedin'
22 | gem 'mogli'
23 |
24 | gem "inherited_resources"
25 |
26 | gem "haml", "~> 3.0.18"
27 | gem "formtastic"
28 | gem 'uuid'
29 |
30 | group :test, :jenkins do
31 | gem 'spork'
32 | gem 'factory_girl_rails'
33 | gem 'mocha'
34 | gem 'rspec-rails'
35 | gem 'ZenTest'
36 | gem 'simplecov'
37 | gem 'webmock'
38 | gem 'yard'
39 | gem 'faker'
40 | end
41 |
--------------------------------------------------------------------------------
/app/controllers/apps_controller.rb:
--------------------------------------------------------------------------------
1 | class AppsController < InheritedResources::Base
2 | before_filter :require_admin!, :except => :index
3 |
4 | def index
5 | @apps = App.all
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/controllers/comments_controller.rb:
--------------------------------------------------------------------------------
1 | class CommentsController < ApplicationController
2 | before_filter :authenticate_user!
3 |
4 | def create
5 | @comment = Comment.new(params[:comment])
6 | @comment.user = current_user
7 | if @comment.save
8 | flash[:success] = 'Comment added!'
9 | redirect_to :back
10 | else
11 | flash[:error] = 'We had a problem adding that comment'
12 | redirect_to :back
13 | end
14 | end
15 |
16 | end
17 |
--------------------------------------------------------------------------------
/app/controllers/details_controller.rb:
--------------------------------------------------------------------------------
1 | class DetailsController < InheritedResources::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/goals_controller.rb:
--------------------------------------------------------------------------------
1 | class GoalsController < InheritedResources::Base
2 |
3 | end
4 |
--------------------------------------------------------------------------------
/app/controllers/languages_controller.rb:
--------------------------------------------------------------------------------
1 | class LanguagesController < InheritedResources::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/members_controller.rb:
--------------------------------------------------------------------------------
1 | class MembersController < InheritedResources::Base
2 | before_filter :authenticate_user!, :except => [:show, :index]
3 | layout "apps"
4 |
5 | def create
6 | team = Team.where(:id => params[:team_id]).first
7 | @member = TeamMember.new(:user => current_user, :team_role => "supporter", :team => team)
8 | create! do |format|
9 | format.html { redirect_to team.to_url }
10 | end
11 | end
12 |
13 | end
14 |
--------------------------------------------------------------------------------
/app/controllers/pages_controller.rb:
--------------------------------------------------------------------------------
1 | class PagesController < ApplicationController
2 | def privacy
3 | end
4 |
5 | def about
6 | end
7 |
8 | def api
9 | end
10 |
11 | def blog
12 | end
13 |
14 | def contact
15 | end
16 |
17 | def terms
18 | end
19 |
20 | end
21 |
--------------------------------------------------------------------------------
/app/controllers/regions_controller.rb:
--------------------------------------------------------------------------------
1 | class RegionsController < InheritedResources::Base
2 | before_filter :require_admin!
3 | end
4 |
--------------------------------------------------------------------------------
/app/controllers/roles_controller.rb:
--------------------------------------------------------------------------------
1 | class RolesController < InheritedResources::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/skills_controller.rb:
--------------------------------------------------------------------------------
1 | class SkillsController < InheritedResources::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/team_members_controller.rb:
--------------------------------------------------------------------------------
1 | class TeamMembersController < InheritedResources::Base
2 | before_filter :authenticate_user!
3 |
4 | def update
5 | @team_member = TeamMember.find params[:id]
6 | if @team_member.team.admin? current_user
7 | toggle_admin_status @team_member
8 | redirect_to :back
9 | else
10 | flash[:error] = 'You gotta have power to promote folks around here'
11 | redirect_to :back
12 | end
13 | end
14 |
15 | private
16 |
17 | def toggle_admin_status(team_member)
18 | if team_member.admin == false
19 | promote team_member
20 | else team_member.admin == true
21 | demote team_member
22 | end
23 | end
24 |
25 | def promote(team_member)
26 | team_member.admin = true
27 | if team_member.save
28 | flash[:success] = "#{team_member.user.person.name} has been promoted to admin for #{team_member.team.name}"
29 | else
30 | flash[:error] = "Oh noes! There was an error promoting this person"
31 | end
32 | end
33 |
34 | def demote(team_member)
35 | team_member.admin = false
36 | if team_member.save
37 | flash[:success] = "#{team_member.user.person.name} has been demoted from admin of #{team_member.team.name}"
38 | else
39 | flash[:error] = "Oh noes! There was an error promoting this person"
40 | end
41 | end
42 | end
43 |
--------------------------------------------------------------------------------
/app/controllers/teams_controller.rb:
--------------------------------------------------------------------------------
1 | class TeamsController < InheritedResources::Base
2 | before_filter :authenticate_user!, :except => [:show, :index, :people]
3 |
4 | def create
5 | app = App.where(:id => params[:app_id]).first
6 | @team = Team.new(:region => current_user.region, :app => app, :team_type => "application")
7 | @team.team_members.build(:user => current_user, :team_role => "organizer", :admin => true, :app => app)
8 | create!
9 | end
10 |
11 | def show
12 | find_team
13 | end
14 |
15 | def people
16 | find_team
17 | users = User.joins(:team_members).where(:team_members => {:team_id => @team.id})
18 | @people = users.map(&:person)
19 | end
20 |
21 |
22 | end
23 |
--------------------------------------------------------------------------------
/app/controllers/users/sessions_controller.rb:
--------------------------------------------------------------------------------
1 | class Users::SessionsController < ApplicationController
2 | def new
3 | @signin_data = SignInData.new
4 | end
5 |
6 | def create
7 | @signin_data = SignInData.new(params[:sign_in_data])
8 | render(:action => :new) and return unless @signin_data.valid?
9 |
10 | session[:login_email] = @signin_data.email
11 |
12 | if @signin_data.provider == 'auto'
13 | redirect_to :controller => '/authentications', :action => :auto, :email => @signin_data.email
14 | else
15 | redirect_to "/auth/#{@signin_data.provider}"
16 | end
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/app/controllers/users_controller.rb:
--------------------------------------------------------------------------------
1 | class UsersController < InheritedResources::Base
2 |
3 | before_filter :authenticate_user!, :only => [:welcome, :home]
4 | before_filter :require_admin!, :except => [:show, :home, :welcome]
5 |
6 | def show
7 | if resource.person
8 | redirect_to person_path(resource.person)
9 | else
10 | if current_user && current_user.admin?
11 | redirect_to users_path(:anchor => "user_#{resource.id}")
12 | else
13 | raise ActiveRecord::RecordNotFound
14 | end
15 | end
16 | end
17 |
18 | def home
19 | redirect_to :action => :welcome and return unless current_user.person.try(:reviewed)
20 | end
21 |
22 | def welcome
23 | redirect_to :action => :home and return if current_user.person.try(:reviewed)
24 |
25 | @name = current_user.name || params[:name]
26 | @person = current_user.person || current_user.authentications.first.to_person || Person.new
27 |
28 | if @person.new_record?
29 | if @name.present?
30 | @possible_duplicates = Person.unclaimed.where(:name => @name).all
31 |
32 | name_parts = @name.split(' ')
33 | name_part_query = (["name LIKE ?"] * name_parts.size).join(' or ')
34 | @possible_duplicates += Person.unclaimed.where(name_part_query, *name_parts.map{|p| "%#{p}%"}).take(10)
35 |
36 | @possible_duplicates.uniq!
37 | end
38 | end
39 | end
40 |
41 | def index
42 | @users = User.includes(:authentications, :person).all
43 | end
44 |
45 | # def destroy
46 |
47 | def adminify
48 | @user.admin = !(@user.admin)
49 | @user.save
50 |
51 | redirect_to users_path
52 | end
53 | end
54 |
55 |
--------------------------------------------------------------------------------
/app/helpers/authentications_helper.rb:
--------------------------------------------------------------------------------
1 | module AuthenticationsHelper
2 | def provider_icon(provider, size=32)
3 | path = File.join('authbuttons',"#{provider}_#{size}.png")
4 | provider_name = OmniAuth::Utils.camelize(provider)
5 |
6 | if File.exists?(Rails.root.join('public', 'images', path))
7 | image_tag(path, :alt => provider_name)
8 | else
9 | provider_name
10 | end
11 | end
12 |
13 | def auth_label(authentication)
14 | if authentication.info[:nickname].present?
15 | name = authentication.info[:nickname]
16 | else
17 | name = authentication.info[:name]
18 | end
19 | "#{name} on #{provider_name(authentication.provider)}"
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/app/helpers/people_helper.rb:
--------------------------------------------------------------------------------
1 | module PeopleHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/models/activity_feed.rb:
--------------------------------------------------------------------------------
1 | class ActivityFeed < ActiveRecord::Base
2 | belongs_to :team
3 | belongs_to :feedable, :polymorphic => true
4 |
5 | validates_presence_of :team_id
6 | validates_presence_of :feedable
7 |
8 | end
9 |
--------------------------------------------------------------------------------
/app/models/batchbook_contact.rb:
--------------------------------------------------------------------------------
1 | class BatchbookContact < ActiveRecord::Base
2 | acts_as_taggable
3 | validates_uniqueness_of :location_id, :on => :create, :message => "must be unique"
4 |
5 | # grabs batchbook contacts
6 | #
7 | # @return GithubContacts array
8 | # @example GithubContact.new.get_contacts
9 |
10 | def get_contacts(page=1, number=50)
11 | before_count = BatchbookContact.count
12 | contacts = batchbook_request("/people.xml?offset=#{page}&limit=#{number}")
13 | contacts[0][1].each do |contact|
14 | create_contact(contact)
15 | end
16 |
17 | # after_count = BatchbookContact.count
18 | # BatchbookContact.new.delayed.get_contacts(page+1) unless before_count == after_count
19 | end
20 |
21 | def batchbook_request(endpoint)
22 | MultiXml.parser = :rexml
23 | Net::HTTP.start("codeforamerica.batchbook.com", :use_ssl => true) {|http|
24 | req = Net::HTTP::Get.new("/service" + endpoint)
25 | req.basic_auth ENV['batchbook_key'], 'x'
26 | response = http.request(req)
27 | MultiXml.parse(response.body)
28 | }
29 | end
30 |
31 | def create_contact(contact)
32 | # prep the hash
33 | contact["batchbook_id"] = contact["id"]
34 | tags = contact["tags"]
35 | locations = contact["locations"]
36 | %w(id tags contacts locations large_image small_image title mega_comments notes company_id company).each { |x| contact.delete(x) }
37 | contact["locations"].each do |location|
38 | location["location_id"] = location["id"]
39 | %w(id).each { |x| location.delete(x) }
40 | end
41 | end
42 |
43 | end
44 |
--------------------------------------------------------------------------------
/app/models/comment.rb:
--------------------------------------------------------------------------------
1 | class Comment < ActiveRecord::Base
2 | belongs_to :commentable, :polymorphic => true
3 | belongs_to :user
4 | belongs_to :team
5 | has_one :activity_feed, :as => :feedable
6 | after_create :add_comment_to_activity_feed
7 |
8 | validates_presence_of :user, :on => :create, :message => "can't be blank"
9 | validates_presence_of :team, :on => :create, :message => "can't be blank"
10 | validates_presence_of :text, :on => :create, :message => "can't be blank"
11 | validates_presence_of :commentable, :on => :create, :message => "can't be blank"
12 |
13 | def add_comment_to_activity_feed
14 | activity = self.text[0..100]
15 | ActivityFeed.create(:team => self.team, :activity => figure_out_comment_text, :feedable => self )
16 | end
17 |
18 | def figure_out_comment_text
19 | case self.commentable_type
20 | when "DeployTask"
21 | self.text
22 | when "Team"
23 | self.text
24 | when "Resource"
25 | else
26 | end
27 | end
28 |
29 | def commentable_type=(sType)
30 | super(sType.to_s.classify.constantize.base_class.to_s)
31 | end
32 |
33 | end
34 |
--------------------------------------------------------------------------------
/app/models/contact_source.rb:
--------------------------------------------------------------------------------
1 | class ContactSource < ActiveRecord::Base
2 | has_many :github_contacts
3 | validates_presence_of :name, :on => :create, :message => "can't be blank"
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/cron_process.rb:
--------------------------------------------------------------------------------
1 | class CronProcess
2 |
3 | # updates all contacts in the database using delayed job
4 | def update_contacts
5 | GithubContact.where("updated_at < '#{1.week.ago}'").all.each { |x| x.delay.update_contact}
6 | end
7 |
8 | end
--------------------------------------------------------------------------------
/app/models/deploy_task.rb:
--------------------------------------------------------------------------------
1 | class DeployTask < ActiveRecord::Base
2 | belongs_to :app
3 | has_many :team_deploy_tasks
4 | has_many :teams, :through => :team_deploy_tasks
5 | has_many :deploy_task_resources
6 | has_many :comments, :as => :commentable
7 |
8 | accepts_nested_attributes_for :deploy_task_resources
9 |
10 | end
11 |
--------------------------------------------------------------------------------
/app/models/deploy_task_resource.rb:
--------------------------------------------------------------------------------
1 | class DeployTaskResource < ActiveRecord::Base
2 | belongs_to :deploy_task
3 | has_many :comments, :as => :commentable
4 | belongs_to :team
5 |
6 | end
7 |
--------------------------------------------------------------------------------
/app/models/description.rb:
--------------------------------------------------------------------------------
1 | class Description < DeployTaskResource
2 |
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/detail.rb:
--------------------------------------------------------------------------------
1 | class Detail < ActiveRecord::Base
2 | belongs_to :app
3 | belongs_to :team
4 |
5 | validates_uniqueness_of :name, :on => :create, :scope => [:app_id, :team_id]
6 | validates_presence_of :name, :setting, :app, :team
7 |
8 | before_validation :on => :create do
9 | self.app ||= self.team.app
10 | self.team ||= self.app.core_team
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/models/heading.rb:
--------------------------------------------------------------------------------
1 | class Heading < DeployTaskResource
2 |
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/milestone.rb:
--------------------------------------------------------------------------------
1 | class Milestone < DeployTask
2 | has_many :steps, :foreign_key => :parent_id, :inverse_of => :milestone
3 | belongs_to :app
4 | scope :updated_at
5 |
6 | def skill_list
7 | skills = steps.inject([]) do |a,b|
8 | a += b.skill_list
9 | a.uniq
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/models/region.rb:
--------------------------------------------------------------------------------
1 | class Region < ActiveRecord::Base
2 | has_many :teams
3 | has_many :users
4 |
5 | validates_uniqueness_of :city, :on => :create, :scope => :state
6 | validates_presence_of :nick_name
7 |
8 | has_attached_file :photo
9 |
10 | def pretty_name
11 | self.city + ", " + self.state
12 | end
13 |
14 | end
15 |
--------------------------------------------------------------------------------
/app/models/sign_in_data.rb:
--------------------------------------------------------------------------------
1 | class SignInData
2 | include ActiveModel::AttributeMethods
3 | include ActiveModel::Conversion
4 | include ActiveModel::Validations
5 | include ActiveModel::Naming
6 |
7 | attr_accessor :email, :provider
8 |
9 | validates :provider, :presence => true
10 | validates :email, :presence => true
11 |
12 | def initialize(params = {})
13 | params ||= {}
14 | self.email = params[:email]
15 | self.provider = params[:provider]
16 | end
17 |
18 | def persisted?
19 | false
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/app/models/step.rb:
--------------------------------------------------------------------------------
1 | class Step < DeployTask
2 | belongs_to :milestone, :foreign_key => :parent_id, :inverse_of => :steps
3 | belongs_to :app
4 |
5 | acts_as_taggable_on :tags, :skills
6 |
7 | end
8 |
--------------------------------------------------------------------------------
/app/models/team.rb:
--------------------------------------------------------------------------------
1 | class Team < ActiveRecord::Base
2 | has_many :team_members
3 | has_many :members, :through => :team_members, :source => :user
4 | has_many :admins, :through => :team_members, :source => :user, :conditions => {:team_members => {:admin => true}}
5 | belongs_to :region
6 | has_many :details
7 | belongs_to :app
8 | before_create :create_team_name
9 | has_many :team_deploy_tasks
10 | has_many :deploy_tasks, :through => :team_deploy_tasks
11 | has_many :activity_feeds
12 | has_many :comments, :as => :commentable
13 |
14 | validates_presence_of :region, :unless => Proc.new { |team| team.team_type == 'core' }
15 | validates_uniqueness_of :region_id, :scope => :app_id, :unless => Proc.new { |team| team.team_type == 'core' }
16 |
17 | # creates a unique team name based upon region's nickname "SF" and the app name
18 |
19 | def create_team_name
20 | if self.team_type != "core"
21 | new_name = region.nick_name.to_s + "-" + app.name.to_s
22 | self.name = new_name.gsub(" ", "-").downcase
23 | else
24 | self.name = app.name.gsub(" ", "-").downcase
25 | end
26 | end
27 |
28 | def to_url
29 | "/" + self.name
30 | end
31 |
32 | def pretty_name
33 | self.name.gsub('-', " ").downcase.titleize
34 | end
35 |
36 | def admin?(user)
37 | admins.include? user
38 | end
39 |
40 | end
41 |
--------------------------------------------------------------------------------
/app/models/team_deploy_task.rb:
--------------------------------------------------------------------------------
1 | class TeamDeployTask < ActiveRecord::Base
2 | belongs_to :deploy_task
3 | belongs_to :team
4 | end
5 |
--------------------------------------------------------------------------------
/app/models/team_member.rb:
--------------------------------------------------------------------------------
1 | class TeamMember < ActiveRecord::Base
2 | belongs_to :user
3 | belongs_to :team
4 | belongs_to :app
5 | has_many :activity_feeds, :as => :feedable
6 |
7 | validates_presence_of :user, :team, :app
8 |
9 | before_validation :on => :create do
10 | self.app ||= self.team.app
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/app/models/user.rb:
--------------------------------------------------------------------------------
1 | class User < ActiveRecord::Base
2 | # Setup accessible (or protected) attributes for your model
3 | attr_accessible :email, :password, :password_confirmation, :remember_me
4 | attr_protected :admin
5 |
6 | has_one :person
7 | has_many :team_members
8 | has_many :teams, :through => :team_members, :source => :team
9 | belongs_to :region
10 | has_many :comments
11 |
12 | scope :admins, joins(:team_members).where(:team_members => {:admin => true})
13 |
14 | has_many :authentications, :dependent => :destroy do
15 | def info_get(key)
16 | info_with_key = self.map(&:info).compact.detect{|info| info[key].present? }
17 | return info_with_key[key] if info_with_key.present?
18 | end
19 | end
20 |
21 | devise :rememberable, :trackable
22 |
23 | def avatar_url
24 | if self.person.present?
25 | self.person.photo.url(:thumb)
26 | elsif self.authentications.present?
27 | (self.authentications.info_get(:image) || '/images/geekcorpsavatar1.png')
28 | else
29 | '/images/geekcorpsavatar1.png'
30 | end
31 | end
32 |
33 | def name
34 | self.person.try(:name) || self.authentications.info_get(:name) || "User #{self.id}"
35 | end
36 |
37 | def label_for_admin
38 | "#{self.id}: #{self.name} #{self.person.present? ? '*' : ''}"
39 | end
40 |
41 | def default_authentication
42 | self.authentications.first
43 | end
44 |
45 | def has_auth_from?(provider)
46 | self.authentications.via(provider).present?
47 | end
48 |
49 | end
50 |
51 |
--------------------------------------------------------------------------------
/app/views/apps/_activity_stream.html.erb:
--------------------------------------------------------------------------------
1 |
2 | Yo, I'm an activity stream! How are you going to collect activities? Do it and iterate over me!!
3 |
4 |
--------------------------------------------------------------------------------
/app/views/apps/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_for(@app) do |f| %>
2 | <% if @app.errors.any? %>
3 |
4 |
<%= pluralize(@app.errors.count, "error") %> prohibited this app from being saved:
5 |
6 |
7 | <% @app.errors.full_messages.each do |msg| %>
8 | <%= msg %>
9 | <% end %>
10 |
11 |
12 | <% end %>
13 |
14 |
15 | <%= f.label :name %>
16 | <%= f.text_field :name %>
17 |
18 |
19 | <%= f.label :description %>
20 | <%= f.text_area :description %>
21 |
22 |
23 | <%= f.label :video_url %>
24 | <%= f.text_field :video_url %>
25 |
26 |
27 | <%= f.submit %>
28 |
29 | <% end %>
30 |
--------------------------------------------------------------------------------
/app/views/apps/_header.html.erb:
--------------------------------------------------------------------------------
1 | <%= header.name %>
2 |
3 | <%= link_to 'Home', header %>
4 | <%= link_to 'People', people_app_path(header) %>
5 | <%= link_to 'Steps', steps_app_path(header) %>
6 | <%= link_to 'Repo', header.core_team.repo_url %>
7 | <% if @app.admin? current_user %>
8 | <%= link_to 'Admin', admin_app_path(header) %>
9 | <% end %>
10 |
11 |
--------------------------------------------------------------------------------
/app/views/apps/_metric.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%=@app.teams.size%> Teams
5 | <%=@app.users.size%> Members
6 |
7 |
8 |
9 |
10 | <% if current_user && current_user.region %>
11 | <% if @app.teams.where(:region_id => current_user.region).blank?%>
12 | <%= button_to "Start this in #{current_user.region.nick_name}", app_teams_path(@app) %>
13 | <% else %>
14 | <%=link_to "Goto #{current_user.region.nick_name}'s Page", @app.teams.where(:region_id => current_user.region).first.to_url%>
15 | <% end %>
16 | <% else %>
17 | Join the Geek Corps to help start this project
18 | <% end %>
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/views/apps/edit.html.erb:
--------------------------------------------------------------------------------
1 | Editing app
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Show', @app %> |
6 | <%= link_to 'Back', apps_path %>
7 |
--------------------------------------------------------------------------------
/app/views/apps/index.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <% content_for(:page_heading) do %>
3 |
4 |
5 | Apps
6 |
7 |
8 |
9 |
10 | <% end %>
11 |
12 | <%= render :partial => 'list', :object => @apps %>
13 |
14 |
--------------------------------------------------------------------------------
/app/views/apps/new.html.erb:
--------------------------------------------------------------------------------
1 | New app
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Back', apps_path %>
6 |
--------------------------------------------------------------------------------
/app/views/apps/people.html.erb:
--------------------------------------------------------------------------------
1 | <%= render :partial => 'header', :object => @app %>
2 |
3 |
4 |
5 | <%= render :partial => 'shared/list_item', :collection => @people %>
6 |
7 |
8 |
9 | <%= render :partial => "metric"%>
10 | <%= render :partial => "core_team"%>
11 | <%= render :partial => "implementations"%>
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/views/apps/show.html.erb:
--------------------------------------------------------------------------------
1 | <%= render :partial => 'header', :object => @app %>
2 |
3 |
4 |
5 |
6 |
7 | <% unless @app.video.url == '/videos/original/missing.png' %>
8 | <%= video_tag @app.video.url, :id => 'app-video', :class => 'main-visual' %>
9 | <% else %>
10 | <%= image_tag @app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
11 | <% end %>
12 |
17 |
18 |
19 |
20 |
About This Project
21 |
<%= @app.description %>
22 |
23 |
24 | <%= render :partial => 'activity_stream' %>
25 |
26 |
27 |
28 |
29 | <%= render :partial => "metric"%>
30 | <%= render :partial => "core_team"%>
31 | <%= render :partial => "implementations"%>
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/views/authentications/_add_auth_form.html.erb:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/app/views/authentications/_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <% list.each do |authentication| %>
3 | " >
4 | <%= provider_icon(authentication.provider) %>
5 | <%= auth_label(authentication) %>
6 | <% if list.size > 1 %>
7 | <%= link_to "Remove", authentication_path(authentication), :confirm => 'Are you sure?', :method => :delete, :class => 'delete' %>
8 | <% end %>
9 |
10 | <% end %>
11 |
12 |
--------------------------------------------------------------------------------
/app/views/authentications/_login_form.html.erb:
--------------------------------------------------------------------------------
1 |
13 |
14 |
--------------------------------------------------------------------------------
/app/views/authentications/_provider_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <% SETTINGS['providers'].each do |provider| %>
3 | <%= link_to OmniAuth::Utils.camelize(provider), "/auth/#{provider}", :class => provider %>
4 | <% end %>
5 |
6 |
--------------------------------------------------------------------------------
/app/views/authentications/auth_failure.html.erb:
--------------------------------------------------------------------------------
1 | Ack! Something went wrong!
2 | We received an error of some kind back from your login provider. You can try again with the same login provider or choose another service.
3 | Please pick a login provider to continue:
4 | <%= render :partial => 'provider_list' %>
5 |
6 |
--------------------------------------------------------------------------------
/app/views/authentications/auto.html.erb:
--------------------------------------------------------------------------------
1 | Eep! We couldn't find a way to log you in!
2 | We tried to automatically pick a login provider for you based on your email address, but didn't find one.
3 | Please pick a login provider to continue:
4 | <%= render :partial => 'provider_list' %>
5 |
--------------------------------------------------------------------------------
/app/views/authentications/index.html.erb:
--------------------------------------------------------------------------------
1 | Authentications
2 | <%= link_to 'New Authentication', new_authentication_path %>
3 |
4 |
5 |
6 |
7 | Provider
8 | Name
9 | Account
10 | Actions
11 |
12 | <% for authentication in @authentications %>
13 |
14 |
15 | <% if authentication.info[:image] %>
16 | width=48 height=48 />
17 | <% end %>
18 |
19 | <%= provider_icon(authentication.provider) %>
20 | <%= authentication.info[:name] %>
21 | <%= authentication.info[:nickname] %>
22 |
23 | <% if @authentications.size > 1 %>
24 | <%= link_to "Remove", authentication_path(authentication), :confirm => 'Are you sure?', :method => :delete %>
25 | <% end %>
26 |
27 |
28 | <% end %>
29 |
30 |
--------------------------------------------------------------------------------
/app/views/comments/create.html.erb:
--------------------------------------------------------------------------------
1 | Comments#create
2 | Find me in app/views/comments/create.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/details/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_for(@detail) do |f| %>
2 | <% if @detail.errors.any? %>
3 |
4 |
<%= pluralize(@detail.errors.count, "error") %> prohibited this detail from being saved:
5 |
6 |
7 | <% @detail.errors.full_messages.each do |msg| %>
8 | <%= msg %>
9 | <% end %>
10 |
11 |
12 | <% end %>
13 |
14 |
15 | <%= f.label :app_id %>
16 | <%= f.text_field :app_id %>
17 |
18 |
19 | <%= f.label :team_id %>
20 | <%= f.text_field :team_id %>
21 |
22 |
23 | <%= f.label :name %>
24 | <%= f.text_field :name %>
25 |
26 |
27 | <%= f.label :setting %>
28 | <%= f.text_field :setting %>
29 |
30 |
31 | <%= f.submit %>
32 |
33 | <% end %>
34 |
--------------------------------------------------------------------------------
/app/views/details/edit.html.erb:
--------------------------------------------------------------------------------
1 | Editing detail
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Show', @detail %> |
6 | <%= link_to 'Back', details_path %>
7 |
--------------------------------------------------------------------------------
/app/views/details/index.html.erb:
--------------------------------------------------------------------------------
1 | Listing details
2 |
3 |
4 |
5 | App
6 | Team
7 | Name
8 | Setting
9 |
10 |
11 |
12 |
13 |
14 | <% @details.each do |detail| %>
15 |
16 | <%= detail.app_id %>
17 | <%= detail.team_id %>
18 | <%= detail.name %>
19 | <%= detail.setting %>
20 | <%= link_to 'Show', detail %>
21 | <%= link_to 'Edit', edit_detail_path(detail) %>
22 | <%= link_to 'Destroy', detail, :confirm => 'Are you sure?', :method => :delete %>
23 |
24 | <% end %>
25 |
26 |
27 |
28 |
29 | <%= link_to 'New Detail', new_detail_path %>
30 |
--------------------------------------------------------------------------------
/app/views/details/new.html.erb:
--------------------------------------------------------------------------------
1 | New detail
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Back', details_path %>
6 |
--------------------------------------------------------------------------------
/app/views/details/show.html.erb:
--------------------------------------------------------------------------------
1 | <%= notice %>
2 |
3 |
4 | App:
5 | <%= @detail.app_id %>
6 |
7 |
8 |
9 | Team:
10 | <%= @detail.team_id %>
11 |
12 |
13 |
14 | Name:
15 | <%= @detail.name %>
16 |
17 |
18 |
19 | Setting:
20 | <%= @detail.setting %>
21 |
22 |
23 |
24 | <%= link_to 'Edit', edit_detail_path(@detail) %> |
25 | <%= link_to 'Back', details_path %>
26 |
--------------------------------------------------------------------------------
/app/views/layouts/_google_analytics.html.erb:
--------------------------------------------------------------------------------
1 | <% if SETTINGS["google_analytics_id"].present? %>
2 |
15 | <% end -%>
16 |
--------------------------------------------------------------------------------
/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | <% if page_title %>
7 | <%= page_title %>
8 | <% else %>
9 | <%= "#{SETTINGS['organization']['name']}: #{SETTINGS['organization']['city']}'s Tech Directory"%>
10 | <% end %>
11 |
12 | <%= stylesheet_link_tag 'reset', 'geekcorps' %>
13 | <%= javascript_include_tag 'lib/jquery.min.js', 'lib/jquery-ujs', 'lib/jquery.cookie.js', 'lib/jquery.isotope.min.js', 'lib/jquery.hoverexpand.js', 'lib/jquery.sortElements.js', 'geekcorps.js' %>
14 | <%= csrf_meta_tag %>
15 |
16 |
17 | <%= render :partial => 'shared/header' %>
18 |
19 |
20 |
21 | <%= yield(:page_heading) %>
22 | <%= render_flash %>
23 | <%= yield %>
24 |
25 |
26 | <%= render :partial => 'shared/footer' %>
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/views/milestones/edit.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 |
21 | <%= form_for @milestone do |f| %>
22 |
23 | Edit This Milestone
24 | <%= f.label :name, "Name:" %> <%= f.text_field :name %>
25 | <%= f.label :description, "Description" %> <%= f.text_area :description %>
26 |
27 |
28 |
29 | <%= f.submit :id => "guide_submit" %>
30 | <% end %>
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/views/milestones/new.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 | <%= form_for @milestone do |f| %>
21 |
<%= f.label :name, "Name:" %><%= f.text_field :name %>
22 |
<%= f.label :description, "Description" %> <%= f.text_area :description %>
23 | <%= f.hidden_field :goal%>
24 |
25 | <%= f.submit %>
26 | <% end %>
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/views/pages/about.html.erb:
--------------------------------------------------------------------------------
1 | Pages#about
2 | Find me in app/views/pages/about.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/pages/api.html.erb:
--------------------------------------------------------------------------------
1 | Pages#api
2 | Find me in app/views/pages/api.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/pages/blog.html.erb:
--------------------------------------------------------------------------------
1 | Pages#blog
2 | Find me in app/views/pages/blog.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/pages/contact.html.erb:
--------------------------------------------------------------------------------
1 | Pages#contact
2 | Find me in app/views/pages/contact.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/pages/privacy.html.erb:
--------------------------------------------------------------------------------
1 | Pages#privacy
2 | Find me in app/views/pages/privacy.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/pages/terms.html.erb:
--------------------------------------------------------------------------------
1 | Pages#terms
2 | Find me in app/views/pages/terms.html.erb
3 |
--------------------------------------------------------------------------------
/app/views/people/_common_skills.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/people/_form.html.erb:
--------------------------------------------------------------------------------
1 | <% form_for(@person) do |f| %>
2 | <%= f.label :name, "Name" %>
3 | <%= f.text_field :name %>
4 | <%= f.label :location, "Region" %>
5 | <%= select :person, :location,
6 | Region.all.map { |x| ["#{x.city}, #{x.state}", x.id]} %>
7 | <%= f.label :website, "Website" %>
8 | <%= f.text_field :url, :label => 'Website' %>
9 | <%= f.label :skill_list, "Tag List" %>
10 | <%= f.text_field :skill_list, :input_html => {:class => 'tags'}%>
11 | <%= f.label :bio, "Bio" %>
12 | <%= f.text_area :bio, :as => :text%>
13 | <%=f.submit%>
14 | <% end %>
15 |
--------------------------------------------------------------------------------
/app/views/people/_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <% @people.each do |person|%>
3 |
4 | <%= link_to person.name, polymorphic_path(person) %>
5 | <%= image_tag person.photo.url %>
6 | <% if !person.user.team_members.where(:team_role => "organizer").blank?%> <% end %>
7 |
8 |
<%= person.bio%>
9 |
<%=link_to person.url, person.url%>
10 |
11 |
12 | <% end %>
13 |
--------------------------------------------------------------------------------
/app/views/people/_new_form.html.erb:
--------------------------------------------------------------------------------
1 | <% form_for(@person, :html => {:multipart => true}) do |f| %>
2 | <%= f.label :name, "Name" %>
3 | <%= f.text_field :name, :value => current_user.authentications.first.info[:name] %>
4 | <%= f.label :location, "Region" %>
5 | <%= select :person, :location,
6 | Region.all.map { |x| ["#{x.city}, #{x.state}", x.id]} %>
7 | <%= f.label :website, "Website" %>
8 | <%= f.text_field :url, :label => 'Website' %>
9 | <%= f.label :skill_list, "Tag List" %>
10 | <%= f.text_field :skill_list, :input_html => {:class => 'tags'}%>
11 | <%= f.label :bio, "Bio" %>
12 | <%= f.text_area :bio, :value => current_user.authentications.first.info[:description]%>
13 | <%= current_user.authentications.first.info[:image].present? ? image_tag(current_user.authentications.first.info[:image], :size => '220') : "We can't seem to find a photo for you" %>
14 | <%= f.label :photo_import_url, "Import a photo from the web…" %><%=f.text_field :photo_import_url, :value => current_user.authentications.first.info[:image] %>
15 |
16 | <%= f.label :photo, "…or upload one from your computer." %>
17 |
24 |
25 | <%=f.submit%>
26 | <% end %>
27 |
--------------------------------------------------------------------------------
/app/views/people/_person_comments.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% comment.comments.order("created_at DESC").each do |feed| %>
4 |
5 | <%= activity_image(feed)%>
6 | <%=feed.text%>
7 |
9 | <% end %>
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/views/people/_person_edit_image.html.erb:
--------------------------------------------------------------------------------
1 |
28 |
29 |
--------------------------------------------------------------------------------
/app/views/people/_person_header.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= link_to image_tag(@person.photo.url, :id => 'person-photo', :class => 'main-visual'), @person %>
3 | <% if @person.user.team_members.where(:team_role => "organizer") %> <% end %>
4 |
5 | <%=link_to "Hi #{@person.name}!", @person %>
6 | <% if @person.user && @person.user.region %>
7 | <%=@person.user.region.city%>, <%=@person.user.region.state%>
8 | <% end %>
9 | <% if !@person.skill_list.blank? %>
10 | Tags: <%= render :partial => 'shared/tag_list', :collection => @person.skill_list, :as => :skill %>
11 | <% end %>
12 | <% if user_signed_in? and current_user!=@person.user %>
13 |
14 | <% end %>
15 |
--------------------------------------------------------------------------------
/app/views/people/_person_teams.html.erb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/app/views/people/_person_teams.html.erb
--------------------------------------------------------------------------------
/app/views/people/_team_list.html.erb:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/app/views/people/claim.html.erb:
--------------------------------------------------------------------------------
1 | <%= "Claiming #{@person.name}" %>
2 |
3 |
4 | This person was imported from <%= provider_name(@person.imported_from_provider) %> but you aren't logged in using your <%= provider_name(@person.imported_from_provider) %> account.
5 |
6 |
7 | <%= link_to "Sign in to #{provider_name(@person.imported_from_provider)} to continue", "/auth/#{@person.imported_from_provider}", :class => 'external'
8 |
--------------------------------------------------------------------------------
/app/views/people/photo.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
<%= @person.name %>
3 | <%= image_tag @person.photo.url %>
4 |
5 |
--------------------------------------------------------------------------------
/app/views/people/show.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= render "people/person_header"%>
4 |
5 |
6 |
7 |
Bio
8 | <% if @person.bio.present? %>
9 | <%= simple_format @person.bio %>
10 | <% end %>
11 |
12 | Website
13 | <%= link_to( normalize_url(@person.url), normalize_url(@person.url), :class => 'url') if @person.url.present? %>
14 |
15 |
18 | <%= render "person_comments", :comment => @person.user%>
19 |
20 |
21 | <%= render :partial => 'team_list'%>
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/views/regions/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_for(@region) do |f| %>
2 | <% if @region.errors.any? %>
3 |
4 |
<%= pluralize(@region.errors.count, "error") %> prohibited this region from being saved:
5 |
6 |
7 | <% @region.errors.full_messages.each do |msg| %>
8 | <%= msg %>
9 | <% end %>
10 |
11 |
12 | <% end %>
13 |
14 |
15 | <%= f.label :city %>
16 | <%= f.text_field :city %>
17 |
18 |
19 | <%= f.label :state %>
20 | <%= f.text_field :state %>
21 |
22 |
23 | <%= f.submit %>
24 |
25 | <% end %>
26 |
--------------------------------------------------------------------------------
/app/views/regions/edit.html.erb:
--------------------------------------------------------------------------------
1 | Editing region
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Show', @region %> |
6 | <%= link_to 'Back', regions_path %>
7 |
--------------------------------------------------------------------------------
/app/views/regions/index.html.erb:
--------------------------------------------------------------------------------
1 | <% content_for(:page_heading) do %>
2 |
3 |
4 | REGIONS!
5 |
6 |
7 | A different word for regions? Locales? Areas? 'Hoods? Something ...more playful?
8 |
9 |
10 | <% end %>
11 |
12 | <%= render :partial => 'shared/search', :locals => {:resource => @regions.first.class.new} %>
13 |
14 | <%= render :partial => 'shared/list', :object => @regions %>
15 |
16 |
--------------------------------------------------------------------------------
/app/views/regions/new.html.erb:
--------------------------------------------------------------------------------
1 | New region
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Back', regions_path %>
6 |
--------------------------------------------------------------------------------
/app/views/regions/show.html.erb:
--------------------------------------------------------------------------------
1 | <%= notice %>
2 |
3 |
4 | City:
5 | <%= @region.city %>
6 |
7 |
8 |
9 | State:
10 | <%= @region.state %>
11 |
12 |
13 |
14 | <%= link_to 'Edit', edit_region_path(@region) %> |
15 | <%= link_to 'Back', regions_path %>
16 |
--------------------------------------------------------------------------------
/app/views/resources/_resource_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | Resources
3 |
4 | <% resource_lists.each do |resource| %>
5 |
6 | <%=link_to resource.content, resource.link %>
7 | <% if user_signed_in? and (@team.admin?(current_user) || current_user.admin?) %>
8 | (<%=link_to "edit", edit_deploy_task_resource_path(resource)%>)
9 | <% end %>
10 |
11 | <% end %>
12 | <% if user_signed_in? and (@team.admin?(current_user) || current_user.admin?) %>
13 |
14 | <%=link_to "Add a New Resource", "#{@team.to_url}/guide/#{resource.class.to_s.downcase}/#{resource.id}/resources/new"%>
15 |
16 | <% end %>
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/views/resources/edit.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 |
21 |
22 | <% form_for @deploy_task_resource do |f| -%>
23 | Edit Resource for <%=@deploy_task_resource.deploy_task.name%>
24 |
25 | <%= f.label :content, "Title:" %><%= f.text_field :content %>
26 | <%= f.label :link, "URL" %><%= f.text_field :link %>
27 |
28 |
29 | <%= f.submit "Update", :id => "guide_submit" %>
30 | <% end -%>
31 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/views/resources/new.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 |
21 |
22 | <% form_for :deploy_task_resource, :url => deploy_task_resources_path do |f| -%>
23 | New Resource for <%=@deploy_task_resource.deploy_task.name%>
24 |
25 | <%= f.label :content, "Title:" %><%= f.text_field :content %>
26 | <%= f.label :link, "URL" %><%= f.text_field :link %>
27 | <%= f.hidden_field :deploy_task_id %>
28 |
29 |
30 | <%= f.submit "Create", :id => "guide_submit" %>
31 | <% end -%>
32 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/views/shared/_app_header.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= link_to image_tag(@team.app.photo.url, :id => 'app-photo', :class => 'main-visual'), @team.to_url %>
3 |
4 | <% if @team.team_type == 'core' %>
5 | <%=link_to @team.app.name, @team.to_url %>
6 |
7 |
8 | <% else %>
9 | <%=link_to"#{@team.region.nick_name} #{@team.app.name}", @team.to_url %>
10 | Implementation of <%= link_to @team.app.name, @team.app.core_team.to_url%> in <%=@team.region.pretty_name%>
11 | <% end %>
12 | Organized by
13 | <%=raw @team.team_members.where(:team_role => 'organizer').map { |organizer| link_to organizer.user.person.name, organizer.user.person }.to_sentence %>
14 |
15 |
--------------------------------------------------------------------------------
/app/views/shared/_comment.html.erb:
--------------------------------------------------------------------------------
1 | <% form_for :comment, :url => comments_create_path do |f| -%>
2 |
13 | <% end -%>
14 |
--------------------------------------------------------------------------------
/app/views/shared/_comment_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
Comments
3 |
4 | <% comment.comments.order("created_at DESC").each do |feed| %>
5 |
6 | <%= activity_image(feed)%>
7 | <%=feed.text%>
8 |
10 | <% end %>
11 | <%= render "shared/comment", :comment => comment %>
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/views/shared/_deploy_task_resource.html.erb:
--------------------------------------------------------------------------------
1 | <% form_for :deploy_task_resource, :url => comments_create_path do |f| -%>
2 |
13 | <% end -%>
14 |
--------------------------------------------------------------------------------
/app/views/shared/_footer.html.erb:
--------------------------------------------------------------------------------
1 |
22 |
--------------------------------------------------------------------------------
/app/views/shared/_header.html.erb:
--------------------------------------------------------------------------------
1 |
26 |
--------------------------------------------------------------------------------
/app/views/shared/_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= render :partial => 'shared/list_item', :collection => list %>
3 |
4 |
7 |
--------------------------------------------------------------------------------
/app/views/shared/_list_item.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= link_to list_item.name, polymorphic_path(list_item) %>
3 | <%= image_tag list_item.photo.url %>
4 |
5 |
--------------------------------------------------------------------------------
/app/views/shared/_list_pagination.html.erb:
--------------------------------------------------------------------------------
1 | <% if list_pagination.respond_to?(:total_pages) && list_pagination.total_pages > 1 %>
2 |
6 | <% end %>
7 |
--------------------------------------------------------------------------------
/app/views/shared/_search.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_for @search, :url => polymorphic_path(resource), :html => {:method => :get} do |f| %>
2 | <%= f.text_field :name_contains, :id => 'main-search' %>
3 | <%= f.select :roles_id_equals, Role.all.map {|r| [r.name, r.id] }, {:include_blank => true} %>
4 | <%= f.select :skills_id_equals, Skill.all.map {|s| [s.name, s.id] }, {:include_blank => true} %>
5 | <%= f.select :languages_id_equals, Language.all.map {|l| [l.name, l.id] }, {:include_blank => true} %>
6 |
7 | <% end %>
8 |
--------------------------------------------------------------------------------
/app/views/shared/_tag_list.html.erb:
--------------------------------------------------------------------------------
1 | <% if @person%>
2 | <%=skill%>
3 | <% elsif @team.team_type=="application"%>
4 | <%=skill%>
5 | <% else %>
6 | <%=skill%>
7 | <% end %>
--------------------------------------------------------------------------------
/app/views/steps/edit.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 |
21 | <%= form_for @step do |f| %>
22 |
23 | Edit This Step
24 | <%= f.label :name, "Name:" %> <%= f.text_field :name %>
25 | <%= f.label :skill_list, "Required Skills:" %> <%= f.text_field :skill_list, :input_html => {:class => 'tags'}%>
26 | <%= f.label :description, "Description" %> <%= f.text_area :description %>
27 | <%= f.label :milestone, "Milestone:" %> <%= select "step", "parent_id", @team.app.milestones.collect {|x| [x.name, x.id]}%>
28 |
29 |
30 |
31 | <%= f.submit :id => "guide_submit" %>
32 | <% end %>
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/views/steps/new.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= image_tag @team.app.photo.url, :id => 'app-photo', :class => 'main-visual' %>
5 |
6 |
<%= @team.app.name %>
7 |
8 | <% unless @team.team_type == 'core' %>
9 |
<%=@team.region.city%>, <%=@team.region.state%>
10 | <% end%>
11 | Organized by <% @team.team_members.where(:team_role => 'organizer').each do |organizer|%>
12 | <%=link_to organizer.user.person.name, organizer.user.person %>
13 | <%end%>
14 |
15 |
16 |
17 | <%= render "shared/guide_sidebar"%>
18 |
19 |
20 | <%= form_for @step do |f| %>
21 |
<%= f.label :name, "Name:" %><%= f.text_field :name %>
22 |
<%= f.label :skill_list, "Required Skills:" %> <%= f.text_field :skill_list, :input_html => {:class => 'tags'}%>
23 |
<%= f.label :description, "Description" %> <%= f.text_area :description %>
24 | <%= f.hidden_field :parent_id%>
25 |
26 | <%= f.submit %>
27 | <% end %>
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/views/tags/_list.html.erb:
--------------------------------------------------------------------------------
1 | <% type ||= :all %>
2 | <% list = list.map{|tag| link_to(tag, send("#{type.to_s.pluralize}_tagged_path", tag.to_s)) } %>
3 | <%= list.join(", ").html_safe %>
4 |
5 |
--------------------------------------------------------------------------------
/app/views/teams/_activity_stream.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% @team.activity_feeds.order("created_at DESC")[0..20].each do |feed| %>
4 |
5 | <%= activity_image(feed.feedable)%>
6 |
13 | <%=feed.activity%>
14 |
16 | <% end %>
17 | <%= render "shared/comment", :comment => @team %>
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/views/teams/_core_metric.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%=@team.app.teams.size%> Teams
5 | <%=@team.app.users.size%> Members
6 |
7 |
8 |
9 |
10 | <% if current_user && current_user.region %>
11 | <% if @team.app.teams.where(:region_id => current_user.region).blank?%>
12 | <%= button_to "Start this in #{current_user.region.nick_name}", app_teams_path(@team.app), :class => 'join-btn' %>
13 | <% else %>
14 | <%=link_to "Goto #{current_user.region.nick_name}'s Page", @team.app.teams.where(:region_id => current_user.region).first.to_url, :class => 'join-btn' %>
15 | <% end %>
16 | <% else %>
17 | <%= link_to 'Join the Geek Corps to help start this project', sign_in_path, :class => 'join-btn' %>
18 | <% end %>
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/views/teams/_core_team.html.erb:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/app/views/teams/_form.html.erb:
--------------------------------------------------------------------------------
1 | <%= form_for(@team) do |f| %>
2 | <% if @team.errors.any? %>
3 |
4 |
<%= pluralize(@team.errors.count, "error") %> prohibited this team from being saved:
5 |
6 |
7 | <% @team.errors.full_messages.each do |msg| %>
8 | <%= msg %>
9 | <% end %>
10 |
11 |
12 | <% end %>
13 |
14 |
15 | <%= f.label :app_id %>
16 | <%= f.text_field :app_id %>
17 |
18 |
19 | <%= f.label :region_id %>
20 | <%= f.text_field :region_id %>
21 |
22 |
23 | <%= f.label :team_type %>
24 | <%= f.text_field :team_type %>
25 |
26 |
27 | <%= f.label :name %>
28 | <%= f.text_field :name %>
29 |
30 |
31 | <%= f.submit %>
32 |
33 | <% end %>
34 |
--------------------------------------------------------------------------------
/app/views/teams/_implementations.html.erb:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/app/views/teams/_list.html.erb:
--------------------------------------------------------------------------------
1 |
2 | <%= render :partial => 'list_item', :collection => list %>
3 |
--------------------------------------------------------------------------------
/app/views/teams/_list_item.html.erb:
--------------------------------------------------------------------------------
1 | <% if list_item.team_type == 'application'%>
2 | <%=skill_list(list_item.app.skill_list)%>">
3 |
4 | <%= image_tag list_item.app.photo.url %>
5 |
6 | <% end %>
--------------------------------------------------------------------------------
/app/views/teams/_metric.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%=@team.members.uniq.size%>
5 | <% if @team.members.uniq.size == 1 %>
6 | Team Member
7 | <% else %>
8 | Team Members
9 | <% end %>
10 |
11 | <%= dev_count = @team.team_members.where(:team_role => 'developer').uniq.size; dev_count.to_s %>
12 | <% if dev_count == 1 %>
13 | Developer
14 | <% else %>
15 | Developers
16 | <% end %>
17 |
18 |
19 |
20 | <% if user_signed_in? %>
21 | <% if current_user.teams.where(:id => @team).blank? %>
22 | <%= button_to "Join this Team!", team_members_path(@team), :class => 'join-btn' %>
23 | <% else %>
24 | <% role = current_user.team_members.where(:team_id => @team).first.team_role%>
25 | <%= link_to "Your Role: #{role.nil? ? "Doesn't Exist :(" : role.capitalize}", "#", :class => 'join-btn' %>
26 | <% end %>
27 | <% else %>
28 | <%= link_to 'Join the Geek Corps to help start this project', sign_in_path, :class => 'join-btn' %>
29 | <% end %>
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/views/teams/_organizers.html.erb:
--------------------------------------------------------------------------------
1 |
13 |
14 |
--------------------------------------------------------------------------------
/app/views/teams/_supporters.html.erb:
--------------------------------------------------------------------------------
1 |
14 |
15 |
--------------------------------------------------------------------------------
/app/views/teams/edit.html.erb:
--------------------------------------------------------------------------------
1 | Editing team
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Show', @team %> |
6 | <%= link_to 'Back', teams_path %>
7 |
--------------------------------------------------------------------------------
/app/views/teams/new.html.erb:
--------------------------------------------------------------------------------
1 | New team
2 |
3 | <%= render 'form' %>
4 |
5 | <%= link_to 'Back', teams_path %>
6 |
--------------------------------------------------------------------------------
/app/views/teams/show.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= render "shared/app_header"%>
4 |
5 |
6 |
7 |
About This Project
8 |
<%= @team.app.description %>
9 |
10 |
11 | <%= link_to 'Home', @team %>
12 | <%= link_to 'People', team_people_path(@team.name) %>
13 | <%= link_to 'Guide', team_guide_path(@team.name) %>
14 |
15 |
16 | <%= render :partial => 'activity_stream' %>
17 |
18 |
19 |
20 |
21 | <% if @team.team_type == 'core' %>
22 | <%= render :partial => "core_metric"%>
23 | <%= render :partial => "core_team"%>
24 | <%= render :partial => "implementations"%>
25 | <% else %>
26 | <%= render :partial => "metric"%>
27 | <%= render :partial => "organizers"%>
28 | <%= render :partial => "supporters"%>
29 | <% end %>
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/views/users/home.html.erb:
--------------------------------------------------------------------------------
1 | <% content_for(:section_header) do %>
2 |
5 | <% end %>
6 |
7 |
8 |
9 |
What would you like to do?
10 |
11 | <%= link_to "View your profile", person_path(current_person) %>
12 | <%= link_to "Edit your profile", edit_person_path(current_person) %>
13 | <%= link_to "Add a friend to the directory", new_person_path %>
14 |
15 |
16 |
17 |
Linked Accounts
18 | <%= semantic_form_for(SignInData.new(:email => current_user.email), :url => user_sessions_path) do |f| %>
19 | <%= f.inputs do %>
20 | <%= f.input :email, :as => :hidden %>
21 | <%= f.input :provider, :collection => Authentication::PROVIDER_OPTIONS, :prompt => 'Pick a service…', :label => 'Add an account' %>
22 | <% end %>
23 | <%= f.buttons do %>
24 | <%= f.commit_button "Add it!" %>
25 | <% end %>
26 | <% end %>
27 |
28 | <%= render :partial => 'authentications/list', :object => current_user.authentications %>
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/views/users/sessions/new.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%= render :partial => 'authentications/login_form' %>
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/views/users/welcome.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% if !@person.new_record? %>
4 | <%= render "people/person_header"%>
5 | <% else %>
6 |
Welcome to the Geek Corps!
7 | <% end %>
8 |
9 |
10 |
11 |
Edit Your Information
12 | <% if @person.new_record? %>
13 |
<%= "We imported as much info as we could from your #{provider_name(current_user.authentications.first.provider)} account. Look it over and hit the big button to get started."%>
14 | <% else %>
15 |
<%= "You were already in the directory! Please review your details and let us know they're right." %>
16 | <%end%>
17 |
18 | <% if @person.new_record?%>
19 | <%= render :partial => 'people/new_form' %>
20 | <% else%>
21 | <%= render :partial => 'people/form' %>
22 | <% end %>
23 |
24 |
25 |
26 | <%= render :partial => 'authentications/add_auth_form' %>
27 | <%= render :partial => 'people/person_edit_image' %>
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require ::File.expand_path('../config/environment', __FILE__)
4 | run GeekCorps::Application
5 |
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | require 'rubygems'
2 |
3 | # Set up gems listed in the Gemfile.
4 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
5 |
6 | require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
7 |
--------------------------------------------------------------------------------
/config/database.yml:
--------------------------------------------------------------------------------
1 | # SQLite version 3.x
2 | # gem install sqlite3
3 | development:
4 | adapter: sqlite3
5 | database: db/development.sqlite3
6 | pool: 5
7 | timeout: 5000
8 |
9 | # Warning: The database defined as "test" will be erased and
10 | # re-generated from your development database when you run "rake".
11 | # Do not set this db to the same as development or production.
12 | test:
13 | adapter: sqlite3
14 | database: db/test.sqlite3
15 | pool: 5
16 | timeout: 5000
17 |
18 | production:
19 | adapter: sqlite3
20 | database: db/production.sqlite3
21 | pool: 5
22 | timeout: 5000
23 |
24 | jenkins:
25 | adapter: sqlite3
26 | database: db/jenkins.sqlite3
27 | pool: 5
28 | timeout: 5000
29 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the rails application
2 | require File.expand_path('../application', __FILE__)
3 |
4 | # Initialize the rails application
5 | GeekCorps::Application.initialize!
6 |
--------------------------------------------------------------------------------
/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | GeekCorps::Application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb
3 |
4 | # In the development environment your application's code is reloaded on
5 | # every request. This slows down response time but is perfect for development
6 | # since you don't have to restart the webserver when you make code changes.
7 | config.cache_classes = false
8 |
9 | # Log error messages when you accidentally call methods on nil.
10 | config.whiny_nils = true
11 |
12 | # Show full error reports and disable caching
13 | config.consider_all_requests_local = true
14 | config.action_view.debug_rjs = true
15 | config.action_controller.perform_caching = false
16 |
17 | # Don't care if the mailer can't send
18 | config.action_mailer.raise_delivery_errors = false
19 |
20 | # Print deprecation notices to the Rails logger
21 | config.active_support.deprecation = :log
22 |
23 | # Only use best-standards-support built into browsers
24 | config.action_dispatch.best_standards_support = :builtin
25 | end
26 |
27 |
--------------------------------------------------------------------------------
/config/environments/jenkins.rb:
--------------------------------------------------------------------------------
1 | GeekCorps::Application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = false
9 |
10 | # Log error messages when you accidentally call methods on nil.
11 | config.whiny_nils = true
12 |
13 | # Show full error reports and disable caching
14 | config.consider_all_requests_local = true
15 | config.action_controller.perform_caching = false
16 |
17 | # Raise exceptions instead of rendering exception templates
18 | config.action_dispatch.show_exceptions = false
19 |
20 | # Disable request forgery protection in test environment
21 | config.action_controller.allow_forgery_protection = false
22 |
23 | # Tell Action Mailer not to deliver emails to the real world.
24 | # The :test delivery method accumulates sent emails in the
25 | # ActionMailer::Base.deliveries array.
26 | config.action_mailer.delivery_method = :test
27 |
28 | # Use SQL instead of Active Record's schema dumper when creating the test database.
29 | # This is necessary if your schema can't be completely dumped by the schema dumper,
30 | # like if you have constraints or database-specific column types
31 | # config.active_record.schema_format = :sql
32 |
33 | # Print deprecation notices to the stderr
34 | config.active_support.deprecation = :stderr
35 | end
36 |
--------------------------------------------------------------------------------
/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | GeekCorps::Application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb
3 |
4 | # The test environment is used exclusively to run your application's
5 | # test suite. You never need to work with it otherwise. Remember that
6 | # your test database is "scratch space" for the test suite and is wiped
7 | # and recreated between test runs. Don't rely on the data there!
8 | config.cache_classes = false
9 |
10 | # Log error messages when you accidentally call methods on nil.
11 | config.whiny_nils = true
12 |
13 | # Show full error reports and disable caching
14 | config.consider_all_requests_local = true
15 | config.action_controller.perform_caching = false
16 |
17 | # Raise exceptions instead of rendering exception templates
18 | config.action_dispatch.show_exceptions = false
19 |
20 | # Disable request forgery protection in test environment
21 | config.action_controller.allow_forgery_protection = false
22 |
23 | # Tell Action Mailer not to deliver emails to the real world.
24 | # The :test delivery method accumulates sent emails in the
25 | # ActionMailer::Base.deliveries array.
26 | config.action_mailer.delivery_method = :test
27 |
28 | # Use SQL instead of Active Record's schema dumper when creating the test database.
29 | # This is necessary if your schema can't be completely dumped by the schema dumper,
30 | # like if you have constraints or database-specific column types
31 | # config.active_record.schema_format = :sql
32 |
33 | # Print deprecation notices to the stderr
34 | config.active_support.deprecation = :stderr
35 |
36 |
37 | end
38 |
--------------------------------------------------------------------------------
/config/initializers/backtrace_silencers.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5 |
6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7 | # Rails.backtrace_cleaner.remove_silencers!
8 |
--------------------------------------------------------------------------------
/config/initializers/delayed_job.rb:
--------------------------------------------------------------------------------
1 | Delayed::Worker.destroy_failed_jobs = false
2 | Delayed::Worker.sleep_delay = 60
3 | Delayed::Worker.max_attempts = 3
4 | Delayed::Worker.max_run_time = 5.minutes
--------------------------------------------------------------------------------
/config/initializers/devise.rb:
--------------------------------------------------------------------------------
1 | # Use this hook to configure devise mailer, warden hooks and so forth. The first
2 | # four configuration values can also be set straight in your models.
3 | Devise.setup do |config|
4 | # ==> Mailer Configuration
5 | # Configure the e-mail address which will be shown in DeviseMailer.
6 | config.mailer_sender = "badger@codeforamerica.org"
7 |
8 | # ==> ORM configuration
9 | # Load and configure the ORM. Supports :active_record (default) and
10 | # :mongoid (bson_ext recommended) by default. Other ORMs may be
11 | # available as additional gems.
12 | require 'devise/orm/active_record'
13 |
14 | # ==> Configuration for :database_authenticatable
15 | # For bcrypt, this is the cost for hashing the password and defaults to 10. If
16 | # using other encryptors, it sets how many times you want the password re-encrypted.
17 | config.stretches = 10
18 |
19 | # Define which will be the encryption algorithm. Devise also supports encryptors
20 | # from others authentication tools as :clearance_sha1, :authlogic_sha512 (then
21 | # you should set stretches above to 20 for default behavior) and :restful_authentication_sha1
22 | # (then you should set stretches to 10, and copy REST_AUTH_SITE_KEY to pepper)
23 | config.encryptor = :bcrypt
24 |
25 | # Setup a pepper to generate the encrypted password.
26 | config.pepper = "38da18c0ad53fe8552fa82ccde0ab072e8e137a347e9e66a84ec2c0601d5acf46a8d7dbcb9f4f393a3248905723fe574e1d466c2df1338e3ade63e86719d09bb"
27 |
28 | end
29 |
--------------------------------------------------------------------------------
/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format
4 | # (all these examples are active by default):
5 | # ActiveSupport::Inflector.inflections do |inflect|
6 | # inflect.plural /^(ox)$/i, '\1en'
7 | # inflect.singular /^(ox)en/i, '\1'
8 | # inflect.irregular 'person', 'people'
9 | # inflect.uncountable %w( fish sheep )
10 | # end
11 |
--------------------------------------------------------------------------------
/config/initializers/mime_types.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new mime types for use in respond_to blocks:
4 | # Mime::Type.register "text/richtext", :rtf
5 | # Mime::Type.register_alias "text/html", :iphone
6 |
--------------------------------------------------------------------------------
/config/initializers/omniauth.rb:
--------------------------------------------------------------------------------
1 | require 'openid'
2 | require 'openid/store/filesystem'
3 |
4 | OpenID.fetcher.timeout = 6
5 |
6 | Rails.application.config.middleware.use OmniAuth::Builder do
7 | SETTINGS['auth_credentials'].each do |provider_name, opts|
8 | provider provider_name.to_sym, opts['key'], opts['secret']
9 | end
10 |
11 |
12 |
13 | provider(:open_id, OpenID::Store::Filesystem.new('/tmp')) if SETTINGS['providers'].include?('open_id')
14 |
15 | use(OmniAuth::Strategies::OpenID, OpenID::Store::Filesystem.new('/tmp'),
16 | :name => 'google',
17 | :identifier => 'https://www.google.com/accounts/o8/id') \
18 | if SETTINGS['providers'].include?('google')
19 |
20 | provider :google_apps, OpenID::Store::Filesystem.new('/tmp')
21 | end
22 |
23 |
24 |
25 | consumers = {}
26 | SETTINGS['auth_credentials'].each do |provider_name, opts|
27 | strategy_class = OmniAuth::Strategies.const_get("#{OmniAuth::Utils.camelize(provider_name)}")
28 | strategy = strategy_class.new(nil, opts['key'], opts['secret'])
29 |
30 | if strategy.is_a?(OmniAuth::Strategies::OAuth)
31 | consumers[provider_name] = strategy.consumer
32 | elsif strategy.is_a?(OmniAuth::Strategies::OAuth2)
33 | consumers[provider_name] = strategy.client
34 | end
35 | end
36 |
37 | OAUTH_CONSUMERS = consumers
38 |
--------------------------------------------------------------------------------
/config/initializers/paperclip.rb:
--------------------------------------------------------------------------------
1 | Paperclip.interpolates :safe_filename do |attachment, style|
2 | filename(attachment, style).gsub(/#/, '-')
3 | end
4 |
--------------------------------------------------------------------------------
/config/initializers/secret_token.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Your secret key for verifying the integrity of signed cookies.
4 | # If you change this key, all old signed cookies will become invalid!
5 | # Make sure the secret is at least 30 characters and all random,
6 | # no regular words or you'll be exposed to dictionary attacks.
7 | GeekCorps::Application.config.secret_token = '2c7f58746dfdcf12e6e22a89159d50af2c5e00f60f8d98d908fa0a6e011d67c03e972db5fd58f02f95e6b1ae8ac0e80a612410e98f086a207905f7d70ea4783b'
8 |
--------------------------------------------------------------------------------
/config/initializers/session_store.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | GeekCorps::Application.config.session_store :cookie_store, :key => '_geek_corps_session'
4 |
5 | # Use the database for sessions instead of the cookie-based default,
6 | # which shouldn't be used to store highly confidential information
7 | # (create the session table with "rails generate session_migration")
8 | # GeekCorps::Application.config.session_store :active_record_store
9 |
--------------------------------------------------------------------------------
/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Sample localization file for English. Add more files in this directory for other locales.
2 | # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3 |
4 | en:
5 | hello: "Hello world"
6 |
--------------------------------------------------------------------------------
/config/settings-local-sample.yml:
--------------------------------------------------------------------------------
1 | # environment-specific settings will be deep merged with the common hash, overriding values therein
2 |
3 | common:
4 | providers:
5 | - twitter
6 | - open_id
7 | - google
8 | - facebook
9 | - linked_in
10 | - github
11 | google_analytics_id:
12 | organization:
13 | name: Org Name
14 | city: City
15 | state: State
16 | url: http://geeks.codeforamerica.org
17 | twitter: codeforamerica
18 | email: corps@codeforamerica.org
19 | host: heroku
20 | host_url: geeks@codeforamerica.org
21 | logotype: GeekCorps
22 | development:
23 | auth_credentials:
24 | github:
25 | key: developmentkey
26 | secret: devseekrit!
27 | twitter:
28 | key: skeletonkey
29 | secret: seekrit!
30 | facebook:
31 | key: skeletonkey
32 | secret: seekrit!
33 | linked_in:
34 | key:
35 | secret: seekrit!
36 |
37 |
--------------------------------------------------------------------------------
/config/twitter_auth.yml:
--------------------------------------------------------------------------------
1 | development:
2 | strategy: oauth
3 | oauth_consumer_key: QanfwVWWT86uL1JoICBIA
4 | oauth_consumer_secret: fXTwkCQL9fYqtA1kxUVsNxtKJcLhOen85uRt3q6so
5 | base_url: "https://twitter.com"
6 | authorize_path: "/oauth/authenticate"
7 | api_timeout: 10
8 | remember_for: 14 # days
9 | oauth_callback: "http://localhost:3000/oauth_callback"
10 | test:
11 | strategy: oauth
12 | oauth_consumer_key: testkey
13 | oauth_consumer_secret: testsecret
14 | base_url: "https://twitter.com"
15 | authorize_path: "/oauth/authenticate"
16 | api_timeout: 10
17 | remember_for: 14 # days
18 | oauth_callback: "http://localhost:3000/oauth_callback"
19 | production:
20 | strategy: oauth
21 | oauth_consumer_key: LmE7Cre33pZRjJa2PKaFQ
22 | oauth_consumer_secret: VOqZ4KbFkHG6vjJxUavGP8opB8r2iPftCK2x3Ph3c
23 | authorize_path: "/oauth/authenticate"
24 | base_url: "https://twitter.com"
25 | api_timeout: 10
26 | remember_for: 14 # days
--------------------------------------------------------------------------------
/db/migrate/20110601194123_create_github_contacts.rb:
--------------------------------------------------------------------------------
1 | class CreateGithubContacts < ActiveRecord::Migration
2 | def self.up
3 | create_table :contact_sources do |t|
4 | t.string :name
5 | end
6 |
7 | create_table :github_contacts do |t|
8 | t.string :gravatar_id
9 | t.string :company
10 | t.string :name
11 | t.datetime :created_at
12 | t.string :location
13 | t.integer :public_repo_count
14 | t.integer :public_gist_count
15 | t.string :blog
16 | t.integer :following_count
17 | t.string :type
18 | t.integer :followers_count
19 | t.string :login
20 | t.boolean :permission
21 | t.string :email
22 | t.integer :contact_source_id
23 | t.datetime :first_commit
24 | t.datetime :updated_at
25 | end
26 |
27 | add_index :github_contacts, :login
28 | add_index :github_contacts, :following_count
29 | add_index :github_contacts, :followers_count
30 | add_index :github_contacts, :public_repo_count
31 | add_index :github_contacts, :public_gist_count
32 | add_index :github_contacts, :created_at
33 | add_index :github_contacts, :contact_source_id
34 |
35 | end
36 |
37 | def self.down
38 | drop_table :contact_sources
39 | drop_table :github_contacts
40 | end
41 | end
42 |
--------------------------------------------------------------------------------
/db/migrate/20110601235912_create_delayed_jobs.rb:
--------------------------------------------------------------------------------
1 | class CreateDelayedJobs < ActiveRecord::Migration
2 | def self.up
3 | create_table :delayed_jobs, :force => true do |table|
4 | table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
5 | table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
6 | table.text :handler # YAML-encoded string of the object that will do work
7 | table.text :last_error # reason for last failure (See Note below)
8 | table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
9 | table.datetime :locked_at # Set when a client is working on this object
10 | table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
11 | table.string :locked_by # Who is working on this object (if locked)
12 | table.timestamps
13 | end
14 |
15 | add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
16 | end
17 |
18 | def self.down
19 | drop_table :delayed_jobs
20 | end
21 | end
--------------------------------------------------------------------------------
/db/migrate/20110602162632_create_batchbook_contacts.rb:
--------------------------------------------------------------------------------
1 | class CreateBatchbookContacts < ActiveRecord::Migration
2 | def self.up
3 | create_table :batchbook_contacts do |t|
4 | t.integer :batchbook_id
5 | t.string :first_name
6 | t.string :last_name
7 | t.boolean :primary
8 | t.string :label
9 | t.integer :location_id
10 | t.string :email
11 | t.string :website
12 | t.string :phone
13 | t.string :cell
14 | t.string :state
15 | t.string :city
16 | t.string :postal_code
17 | t.string :country
18 | t.timestamps
19 | end
20 | end
21 |
22 | def self.down
23 | drop_table :batchbook_contacts
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/db/migrate/20110602163032_acts_as_taggable_on_migration.rb:
--------------------------------------------------------------------------------
1 | class ActsAsTaggableOnMigration < ActiveRecord::Migration
2 | def self.up
3 | create_table :tags do |t|
4 | t.string :name
5 | end
6 |
7 | create_table :taggings do |t|
8 | t.references :tag
9 |
10 | # You should make sure that the column created is
11 | # long enough to store the required class names.
12 | t.references :taggable, :polymorphic => true
13 | t.references :tagger, :polymorphic => true
14 |
15 | t.string :context
16 |
17 | t.datetime :created_at
18 | end
19 |
20 | add_index :taggings, :tag_id
21 | add_index :taggings, [:taggable_id, :taggable_type, :context]
22 | end
23 |
24 | def self.down
25 | drop_table :taggings
26 | drop_table :tags
27 | end
28 | end
29 |
--------------------------------------------------------------------------------
/db/migrate/20110627233220_create_people.rb:
--------------------------------------------------------------------------------
1 | class CreatePeople < ActiveRecord::Migration
2 | def self.up
3 | create_table :people do |t|
4 | t.string :bio
5 | t.string :location
6 | t.float :lat
7 | t.float :long
8 | t.string :picture
9 |
10 | t.timestamps
11 | end
12 | end
13 |
14 | def self.down
15 | drop_table :people
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/db/migrate/20110705171644_devise_create_users.rb:
--------------------------------------------------------------------------------
1 | class DeviseCreateUsers < ActiveRecord::Migration
2 | def self.up
3 | create_table(:users) do |t|
4 | t.rememberable
5 | t.trackable
6 | t.timestamps
7 | t.string :email
8 | t.boolean :admin, :default => false
9 | end
10 |
11 | end
12 |
13 | def self.down
14 | drop_table :users
15 | end
16 | end
--------------------------------------------------------------------------------
/db/migrate/20110705172005_update_person.rb:
--------------------------------------------------------------------------------
1 | class UpdatePerson < ActiveRecord::Migration
2 | def self.up
3 | add_column :people, :twitter, :string
4 | add_column :people, :url, :string
5 | add_column :people, :user_id, :integer
6 | add_column :people, :name, :string
7 | add_column :people, :imported_from_provider, :string
8 | add_column :people, :imported_from_id, :string
9 | add_column :people, :photo_file_name, :string
10 | add_column :people, :photo_content_type,:string
11 | add_column :people, :photo_file_size, :integer
12 | add_column :people, :photo_updated_at, :datetime
13 | add_column :people, :reviewed, :boolean, :default => false
14 | add_column :people, :imported_from_screen_name, :string
15 | end
16 |
17 | def self.down
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/db/migrate/20110705172312_authentications.rb:
--------------------------------------------------------------------------------
1 | class Authentications < ActiveRecord::Migration
2 | def self.up
3 | create_table :authentications do |t|
4 | t.integer :user_id
5 | t.string :provider
6 | t.string :uid
7 | t.string :access_token
8 | t.string :access_token_secret
9 | t.text :info
10 | t.timestamps
11 | end
12 | end
13 |
14 | def self.down
15 | drop_table :authentications
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/db/migrate/20110706162252_create_apps.rb:
--------------------------------------------------------------------------------
1 | class CreateApps < ActiveRecord::Migration
2 | def self.up
3 | create_table :apps do |t|
4 | t.string :name
5 | t.text :description
6 | t.string :video_url
7 |
8 | t.timestamps
9 | end
10 | end
11 |
12 | def self.down
13 | drop_table :apps
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20110707213317_create_regions.rb:
--------------------------------------------------------------------------------
1 | class CreateRegions < ActiveRecord::Migration
2 | def self.up
3 | create_table :regions do |t|
4 | t.string :city
5 | t.string :state
6 |
7 | t.timestamps
8 | end
9 | end
10 |
11 | def self.down
12 | drop_table :regions
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/db/migrate/20110707213640_create_teams.rb:
--------------------------------------------------------------------------------
1 | class CreateTeams < ActiveRecord::Migration
2 | def self.up
3 | create_table :teams do |t|
4 | t.integer :app_id
5 | t.integer :region_id
6 | t.string :team_type
7 | t.string :name
8 |
9 | t.timestamps
10 | end
11 | end
12 |
13 | def self.down
14 | drop_table :teams
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/db/migrate/20110707213749_create_team_members.rb:
--------------------------------------------------------------------------------
1 | class CreateTeamMembers < ActiveRecord::Migration
2 | def self.up
3 | create_table :team_members do |t|
4 | t.integer :team_id
5 | t.integer :user_id
6 | t.string :team_role
7 |
8 | t.timestamps
9 | end
10 | end
11 |
12 | def self.down
13 | drop_table :team_members
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20110707214056_create_details.rb:
--------------------------------------------------------------------------------
1 | class CreateDetails < ActiveRecord::Migration
2 | def self.up
3 | create_table :details do |t|
4 | t.integer :app_id
5 | t.integer :team_id
6 | t.string :name
7 | t.string :setting
8 |
9 | t.timestamps
10 | end
11 | end
12 |
13 | def self.down
14 | drop_table :details
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/db/migrate/20110707222526_add_nick_name_to_regions.rb:
--------------------------------------------------------------------------------
1 | class AddNickNameToRegions < ActiveRecord::Migration
2 | def self.up
3 | add_column :regions, :nick_name, :string
4 | end
5 |
6 | def self.down
7 | remove_column :regions, :nick_name
8 | end
9 | end
--------------------------------------------------------------------------------
/db/migrate/20110707230536_add_region_id_to_users.rb:
--------------------------------------------------------------------------------
1 | class AddRegionIdToUsers < ActiveRecord::Migration
2 | def self.up
3 | add_column :users, :region_id, :integer
4 | end
5 |
6 | def self.down
7 | remove_column :users, :region_id
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20110707232700_add_admin_to_team_members.rb:
--------------------------------------------------------------------------------
1 | class AddAdminToTeamMembers < ActiveRecord::Migration
2 | def self.up
3 | add_column :team_members, :admin, :boolean, :default => false
4 | end
5 |
6 | def self.down
7 | remove_column :team_members, :admin
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20110708173625_add_app_id_to_team_members.rb:
--------------------------------------------------------------------------------
1 | class AddAppIdToTeamMembers < ActiveRecord::Migration
2 | def self.up
3 | add_column :team_members, :app_id, :integer
4 | end
5 |
6 | def self.down
7 | remove_column :team_members, :app_id
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20110726163650_create_roles.rb:
--------------------------------------------------------------------------------
1 | class CreateRoles < ActiveRecord::Migration
2 | def self.up
3 | create_table :roles do |t|
4 | t.string :name
5 | t.references :rolable, :polymorphic => true
6 |
7 | t.timestamps
8 | end
9 | end
10 |
11 | def self.down
12 | drop_table :roles
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/db/migrate/20110726163903_create_skills.rb:
--------------------------------------------------------------------------------
1 | class CreateSkills < ActiveRecord::Migration
2 | def self.up
3 | create_table :skills do |t|
4 | t.string :name
5 | t.references :skillable, :polymorphic => true
6 | t.integer :role_id
7 | t.timestamps
8 | end
9 | end
10 |
11 | def self.down
12 | drop_table :skills
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/db/migrate/20110726171207_create_languages.rb:
--------------------------------------------------------------------------------
1 | class CreateLanguages < ActiveRecord::Migration
2 | def self.up
3 | create_table :languages do |t|
4 | t.string :name
5 | t.references :polyglot, :polymorphic => true
6 | t.timestamps
7 | end
8 | end
9 |
10 | def self.down
11 | drop_table :languages
12 | end
13 | end
14 |
--------------------------------------------------------------------------------
/db/migrate/20110726194202_add_photos_to_apps.rb:
--------------------------------------------------------------------------------
1 | class AddPhotosToApps < ActiveRecord::Migration
2 | def self.up
3 | add_column :apps, :photo_file_name, :string
4 | add_column :apps, :photo_content_type, :string
5 | add_column :apps, :photo_file_size, :integer
6 | add_column :apps, :photo_updated_at, :datetime
7 | end
8 |
9 | def self.down
10 | remove_column :apps, :photo_file_name
11 | remove_column :apps, :photo_content_type
12 | remove_column :apps, :photo_file_size
13 | remove_column :apps, :photo_updated_at
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20110801021736_use_paper_clip_for_apps_videos.rb:
--------------------------------------------------------------------------------
1 | class UsePaperClipForAppsVideos < ActiveRecord::Migration
2 | def self.up
3 | remove_column :apps, :video_url
4 | add_column :apps, :video_file_name, :string
5 | add_column :apps, :video_content_type, :string
6 | add_column :apps, :video_file_size, :integer
7 | add_column :apps, :video_updated_at, :datetime
8 | end
9 |
10 | def self.down
11 | add_column :apps, :video_url, :string
12 | remove_column :apps, :video_file_name
13 | remove_column :apps, :video_content_type
14 | remove_column :apps, :video_file_size
15 | remove_column :apps, :video_updated_at
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/db/migrate/20110801124607_add_repo_url_to_teams_table.rb:
--------------------------------------------------------------------------------
1 | class AddRepoUrlToTeamsTable < ActiveRecord::Migration
2 | def self.up
3 | add_column :teams, :repo_url, :string
4 | end
5 |
6 | def self.down
7 | remove_column :teams, :repo_url
8 | end
9 | end
10 |
--------------------------------------------------------------------------------
/db/migrate/20110801150627_create_deploy_tasks.rb:
--------------------------------------------------------------------------------
1 | class CreateDeployTasks < ActiveRecord::Migration
2 | def self.up
3 | create_table :deploy_tasks do |t|
4 | t.integer :app_id
5 | t.string :type
6 | t.integer :parent_id
7 | t.timestamps
8 | end
9 | end
10 |
11 | def self.down
12 | drop_table :deploy_tasks
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/db/migrate/20110801150927_create_deploy_task_resources.rb:
--------------------------------------------------------------------------------
1 | class CreateDeployTaskResources < ActiveRecord::Migration
2 | def self.up
3 | create_table :deploy_task_resources do |t|
4 | t.integer :deploy_task_id
5 | t.integer :team_id
6 | t.string :resource_type
7 | t.text :content
8 | t.string :link
9 | t.timestamps
10 | end
11 | end
12 |
13 | def self.down
14 | drop_table :deploy_task_resources
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/db/migrate/20110801151358_create_team_deploy_tasks.rb:
--------------------------------------------------------------------------------
1 | class CreateTeamDeployTasks < ActiveRecord::Migration
2 | def self.up
3 | create_table :team_deploy_tasks do |t|
4 | t.integer :team_id
5 | t.integer :deploy_task_id
6 | t.boolean :completed
7 | t.timestamps
8 | end
9 | end
10 |
11 | def self.down
12 | drop_table :team_deploy_tasks
13 | end
14 | end
15 |
--------------------------------------------------------------------------------
/db/migrate/20110801152005_create_comments.rb:
--------------------------------------------------------------------------------
1 | class CreateComments < ActiveRecord::Migration
2 | def self.up
3 | create_table :comments do |t|
4 | t.text :text
5 | t.integer :user_id
6 | t.integer :flag
7 | t.integer :team_id
8 | t.timestamps
9 | end
10 | end
11 |
12 | def self.down
13 | drop_table :comments
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20110804182313_create_activity_feeds.rb:
--------------------------------------------------------------------------------
1 | class CreateActivityFeeds < ActiveRecord::Migration
2 | def self.up
3 | create_table :activity_feeds do |t|
4 | t.integer :team_id
5 | t.string :feedable_type
6 | t.integer :feedable_id
7 | t.string :activity
8 |
9 | t.timestamps
10 | end
11 | end
12 |
13 | def self.down
14 | drop_table :activity_feeds
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/db/migrate/20110804192425_add_commentable_to_comment.rb:
--------------------------------------------------------------------------------
1 | class AddCommentableToComment < ActiveRecord::Migration
2 | def self.up
3 | add_column :comments, :commentable_type, :string
4 | add_column :comments, :commentable_id, :integer
5 | end
6 |
7 | def self.down
8 | remove_column :comments, :commentable_id
9 | remove_column :comments, :commentable_type
10 | end
11 | end
--------------------------------------------------------------------------------
/db/migrate/20110805000044_add_photos_to_regions.rb:
--------------------------------------------------------------------------------
1 | class AddPhotosToRegions < ActiveRecord::Migration
2 | def self.up
3 | add_column :regions, :photo_file_name, :string
4 | add_column :regions, :photo_content_type, :string
5 | add_column :regions, :photo_updated_at, :datetime
6 | add_column :regions, :photo_file_size, :integer
7 | end
8 |
9 | def self.down
10 | remove_column :regions, :photo_file_name
11 | remove_column :regions, :photo_content_type
12 | remove_column :regions, :photo_updated_at
13 | remove_column :regions, :photo_file_size
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/db/migrate/20110805185055_upate_deploy_tasks_table.rb:
--------------------------------------------------------------------------------
1 | class UpateDeployTasksTable < ActiveRecord::Migration
2 | def self.up
3 | add_column :deploy_tasks, :goal, :integer, :default => 1
4 | add_column :deploy_tasks, :est_time, :integer, :default => 0
5 | add_column :deploy_tasks, :position, :integer, :default => 0
6 | add_column :deploy_tasks, :name, :string
7 | add_column :deploy_tasks, :description, :text
8 | end
9 |
10 | def self.down
11 | remove_column :deploy_tasks, :goal
12 | remove_column :deploy_tasks, :est_time
13 | remove_column :deploy_tasks, :position
14 | remove_column :deploy_tasks, :name
15 | remove_column :deploy_tasks, :description
16 | end
17 | end
18 |
--------------------------------------------------------------------------------
/db/migrate/20110809170919_drop_langs_skills_roles_tables.rb:
--------------------------------------------------------------------------------
1 | class DropLangsSkillsRolesTables < ActiveRecord::Migration
2 | def self.up
3 | drop_table :languages
4 | drop_table :skills
5 | drop_table :roles
6 | end
7 |
8 | def self.down
9 | create_table :languages do |t|
10 | t.name :string
11 | t.belongs_to :polyglot, :polymorphic => true
12 | end
13 | create_table :roles do |t|
14 | t.name :string
15 | t.belongs_to :rolable, :polymorphic => true
16 | end
17 | create_table :skills do |t|
18 | t.name :string
19 | t.belongs_to :skillable, :polymorphic => true
20 | end
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/db/migrate/20110812194931_change_activity_in_activity_feeds.rb:
--------------------------------------------------------------------------------
1 | class ChangeActivityInActivityFeeds < ActiveRecord::Migration
2 | def self.up
3 | remove_column :activity_feeds, :activity
4 | add_column :activity_feeds, :activity, :text
5 | end
6 |
7 | def self.down
8 | remove_column :activity_feeds, :activity
9 | add_column :activity_feeds, :activity, :string
10 |
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/db/migrate/20110812221737_changing_people_bio_to_text.rb:
--------------------------------------------------------------------------------
1 | class ChangingPeopleBioToText < ActiveRecord::Migration
2 | def self.up
3 | remove_column :people, :bio
4 | add_column :people, :bio, :text
5 | end
6 |
7 | def self.down
8 | remove_column :people, :bio
9 | add_column :people, :bio, :string
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/lib/api_client.rb:
--------------------------------------------------------------------------------
1 | # Provides a common interface for interacting with various oauthed services
2 | module APIClient
3 | class APIAuthenticationError < StandardError; end
4 |
5 | def self.for(auth, options={})
6 | return ("APIClient::" + OmniAuth::Utils.camelize(auth.provider)).constantize.new(auth, options)
7 | rescue NameError
8 | consumer = OAUTH_CONSUMERS[auth.provider]
9 |
10 | if consumer.is_a?(::OAuth::Consumer)
11 | return APIClient::OAuth.new(auth)
12 | elsif consumer.is_a?(::OAuth2::Client)
13 | return APIClient::OAuth2.new(auth)
14 | else
15 | return nil
16 | end
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/lib/api_client/base.rb:
--------------------------------------------------------------------------------
1 | module APIClient
2 | class Base
3 | DEFAULT_LIMIT = 5
4 | attr_reader :client
5 |
6 | def initialize(auth, options={})
7 | @auth = auth
8 | end
9 |
10 | def search(query, options = {})
11 | []
12 | end
13 |
14 | def get(id)
15 | nil
16 | end
17 | end
18 | end
19 |
--------------------------------------------------------------------------------
/lib/api_client/facebook.rb:
--------------------------------------------------------------------------------
1 | module APIClient
2 | class Facebook < APIClient::OAuth2
3 | def initialize(auth, options={})
4 | super(auth)
5 | @client = ::Mogli::Client.new(auth.access_token)
6 | end
7 |
8 | def search(query, options = {})
9 | Mogli::User.search(query, @client, :limit => (options[:limit] || DEFAULT_LIMIT)).map{|fb_search_result|
10 | fb_user = Mogli::User.find(fb_search_result.id, client)
11 | self.person_from(fb_user)
12 | }
13 | end
14 |
15 | def get(id)
16 | fb_user = Mogli::User.find(id, @client)
17 | self.person_from(fb_user) if fb_user.present?
18 | end
19 |
20 | def person_from(fb_user)
21 | # Facebook's large image URL redirects from https to http, which open-uri forbids.
22 | photo_url = fb_user.large_image_url.gsub!("https://graph.facebook.com/", "http://graph.facebook.com/")
23 |
24 | Person.new( :name => fb_user.name,
25 | :bio => fb_user.bio,
26 | :photo_import_url => photo_url,
27 | :url => fb_user.website,
28 | :location => fb_user.location.try(:name) ) \
29 | .tap{|person|
30 | person.imported_from_provider = 'facebook'
31 | person.imported_from_id = fb_user.id
32 | }
33 | end
34 | end
35 | end
36 |
--------------------------------------------------------------------------------
/lib/api_client/o_auth.rb:
--------------------------------------------------------------------------------
1 | module APIClient
2 | class OAuth < APIClient::Base
3 | def initialize(auth, options={})
4 | super
5 | @client = access_token_object
6 | end
7 |
8 | def consumer
9 | OAUTH_CONSUMERS[@auth.provider]
10 | end
11 |
12 | def access_token_object
13 | ::OAuth::AccessToken.new(consumer, @auth.access_token, @auth.access_token_secret)
14 | end
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/lib/api_client/o_auth2.rb:
--------------------------------------------------------------------------------
1 | module APIClient
2 | class OAuth2 < APIClient::Base
3 | def initialize(auth, options={})
4 | super
5 | @client = access_token_object
6 | end
7 |
8 | def consumer
9 | OAUTH_CONSUMERS[@auth.provider]
10 | end
11 |
12 | def access_token_object
13 | ::OAuth2::AccessToken.new(consumer, @auth.access_token)
14 | end
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/lib/application_responder.rb:
--------------------------------------------------------------------------------
1 | class ApplicationResponder < ActionController::Responder
2 | include Responders::FlashResponder
3 | include Responders::HttpCacheResponder
4 |
5 | # Uncomment this responder if you want your resources to redirect to the collection
6 | # path (index action) instead of the resource path for POST/PUT/DELETE requests.
7 | # include Responders::CollectionResponder
8 | end
9 |
--------------------------------------------------------------------------------
/lib/localness.rb:
--------------------------------------------------------------------------------
1 | module Localness
2 | PORTLAND_SUBURBS = ["beaverton", "gresham", "hillsboro", "clackamas",
3 | "damascus", "gladstone", "king city", "lake oswego",
4 | "milwaukie", "oregon city", "sherwood", "tigard",
5 | "troutdale", "tualatin", "west linn", "wilsonville",
6 | "aloha"]
7 |
8 | def localness(person)
9 | location = person.location.try(:downcase) || ''
10 | if %w(portland pdx stumptown).any?{|term| location.include?(term) }
11 | return 5
12 | elsif PORTLAND_SUBURBS.any?{|term| location.include?(term) }
13 | return 4
14 | elsif %w(oregon washington or wa).any?{|term| location.include?(term) }
15 | return 3
16 | else
17 | return 0
18 | end
19 | end
20 | end
21 |
--------------------------------------------------------------------------------
/lib/tasks/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/lib/tasks/.gitkeep
--------------------------------------------------------------------------------
/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The page you were looking for doesn't exist (404)
5 |
17 |
18 |
19 |
20 |
21 |
22 |
The page you were looking for doesn't exist.
23 |
You may have mistyped the address or the page may have moved.
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/public/422.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The change you wanted was rejected (422)
5 |
17 |
18 |
19 |
20 |
21 |
22 |
The change you wanted was rejected.
23 |
Maybe you tried to change something you didn't have access to.
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/public/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | We're sorry, but something went wrong (500)
5 |
17 |
18 |
19 |
20 |
21 |
22 |
We're sorry, but something went wrong.
23 |
We've been notified about this issue and we'll take a look at it shortly.
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/League_Gothic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/fonts/League_Gothic-webfont.eot
--------------------------------------------------------------------------------
/public/fonts/League_Gothic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/fonts/League_Gothic-webfont.ttf
--------------------------------------------------------------------------------
/public/fonts/League_Gothic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/fonts/League_Gothic-webfont.woff
--------------------------------------------------------------------------------
/public/images/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/add.png
--------------------------------------------------------------------------------
/public/images/arrow-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/arrow-left.png
--------------------------------------------------------------------------------
/public/images/arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/arrow-right.png
--------------------------------------------------------------------------------
/public/images/arrows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/arrows.png
--------------------------------------------------------------------------------
/public/images/authbuttons/aol_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/aol_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/aol_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/aol_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/aol_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/aol_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/aol_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/aol_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/auth-add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/auth-add.png
--------------------------------------------------------------------------------
/public/images/authbuttons/auth-delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/auth-delete.png
--------------------------------------------------------------------------------
/public/images/authbuttons/basecamp_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/basecamp_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/basecamp_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/basecamp_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/basecamp_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/basecamp_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/basecamp_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/basecamp_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/campfire_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/campfire_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/campfire_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/campfire_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/campfire_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/campfire_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/campfire_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/campfire_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/facebook_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/facebook_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/facebook_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/facebook_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/facebook_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/facebook_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/facebook_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/facebook_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/github_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/github_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/github_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/github_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/github_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/github_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/github_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/github_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/google_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/google_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/google_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/google_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/google_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/google_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/google_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/google_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/linked_in_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/linked_in_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/linked_in_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/linked_in_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/linked_in_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/linked_in_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/linked_in_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/linked_in_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/myspace_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/myspace_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/myspace_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/myspace_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/myspace_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/myspace_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/myspace_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/myspace_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/open_id_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/open_id_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/open_id_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/open_id_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/open_id_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/open_id_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/open_id_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/open_id_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/presently_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/presently_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/presently_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/presently_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/presently_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/presently_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/presently_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/presently_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/twitter_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/twitter_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/twitter_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/twitter_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/twitter_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/twitter_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/twitter_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/twitter_64.png
--------------------------------------------------------------------------------
/public/images/authbuttons/yahoo_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/yahoo_128.png
--------------------------------------------------------------------------------
/public/images/authbuttons/yahoo_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/yahoo_256.png
--------------------------------------------------------------------------------
/public/images/authbuttons/yahoo_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/yahoo_32.png
--------------------------------------------------------------------------------
/public/images/authbuttons/yahoo_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/authbuttons/yahoo_64.png
--------------------------------------------------------------------------------
/public/images/avatar-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/avatar-1.png
--------------------------------------------------------------------------------
/public/images/avatar-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/avatar-2.png
--------------------------------------------------------------------------------
/public/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/background.png
--------------------------------------------------------------------------------
/public/images/binocular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/binocular.png
--------------------------------------------------------------------------------
/public/images/bos-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/bos-icon.png
--------------------------------------------------------------------------------
/public/images/cfa-full-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/cfa-full-logo.png
--------------------------------------------------------------------------------
/public/images/check-white-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/check-white-icon.png
--------------------------------------------------------------------------------
/public/images/cityhero_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/cityhero_logo.png
--------------------------------------------------------------------------------
/public/images/civicopia-widget-bottom-dropshadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/civicopia-widget-bottom-dropshadow.png
--------------------------------------------------------------------------------
/public/images/content-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/content-border.png
--------------------------------------------------------------------------------
/public/images/creepy-baby-sloth.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/creepy-baby-sloth.jpg
--------------------------------------------------------------------------------
/public/images/default_app_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/default_app_1.png
--------------------------------------------------------------------------------
/public/images/default_app_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/default_app_2.png
--------------------------------------------------------------------------------
/public/images/default_app_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/default_app_3.png
--------------------------------------------------------------------------------
/public/images/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/delete.png
--------------------------------------------------------------------------------
/public/images/example.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/example.jpg
--------------------------------------------------------------------------------
/public/images/fork.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/fork.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar1.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar1_medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar1_medium.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar1_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar1_small.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar1_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar1_thumb.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar2.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar2_medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar2_medium.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar2_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar2_small.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar2_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar2_thumb.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar3.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar3_medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar3_medium.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar3_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar3_small.png
--------------------------------------------------------------------------------
/public/images/geekcorpsavatar3_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/geekcorpsavatar3_thumb.png
--------------------------------------------------------------------------------
/public/images/home_12x12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/home_12x12.png
--------------------------------------------------------------------------------
/public/images/join-ribbon-shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/join-ribbon-shadow.png
--------------------------------------------------------------------------------
/public/images/join-sash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/join-sash.png
--------------------------------------------------------------------------------
/public/images/list-item-check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/list-item-check.png
--------------------------------------------------------------------------------
/public/images/logo-sash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/logo-sash.png
--------------------------------------------------------------------------------
/public/images/map-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/map-icon-white.png
--------------------------------------------------------------------------------
/public/images/map-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/map-icon.png
--------------------------------------------------------------------------------
/public/images/map-shadow-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/map-shadow-icon.png
--------------------------------------------------------------------------------
/public/images/no-image.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/no-image.gif
--------------------------------------------------------------------------------
/public/images/notify_icon_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/notify_icon_green.png
--------------------------------------------------------------------------------
/public/images/notify_icon_orange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/notify_icon_orange.png
--------------------------------------------------------------------------------
/public/images/notify_icon_purple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/notify_icon_purple.png
--------------------------------------------------------------------------------
/public/images/notify_icon_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/notify_icon_red.png
--------------------------------------------------------------------------------
/public/images/notify_icon_rust.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/notify_icon_rust.png
--------------------------------------------------------------------------------
/public/images/org-sash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/org-sash.png
--------------------------------------------------------------------------------
/public/images/org-sash.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/org-sash.psd
--------------------------------------------------------------------------------
/public/images/person_photo_upload_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/person_photo_upload_img.png
--------------------------------------------------------------------------------
/public/images/person_photo_upload_img_sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/person_photo_upload_img_sm.png
--------------------------------------------------------------------------------
/public/images/phl-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/phl-icon.png
--------------------------------------------------------------------------------
/public/images/progress-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/progress-background.png
--------------------------------------------------------------------------------
/public/images/project-overview-dropshadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/project-overview-dropshadow.png
--------------------------------------------------------------------------------
/public/images/rails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/rails.png
--------------------------------------------------------------------------------
/public/images/rainbow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/rainbow.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/add.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/addressbook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/addressbook.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/alert.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/apple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/apple.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_e.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_n.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_ne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_ne.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_nw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_nw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_s.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_se.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_sw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_sw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow1_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow1_w.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_e.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_n.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_ne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_ne.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_nw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_nw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_s.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_se.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_sw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_sw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow2_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow2_w.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_e.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_n.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_ne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_ne.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_nw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_nw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_s.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_se.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_sw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_sw.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/arrow3_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/arrow3_w.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/ascii.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/ascii.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/back.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/bigsmile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/bigsmile.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/binary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/binary.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/blah.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/blah.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/bstop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/bstop.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/buy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/buy.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/calday.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/calday.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/calendar.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/camera.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/cart.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/cd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/cd.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/cellphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/cellphone.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/chat.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/check.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/close.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/comment.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/cube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/cube.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/day.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/day.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/denied.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/denied.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/document.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/document.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/download.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/edit.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/eject.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/eject.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/equalizer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/equalizer.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/first.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/first.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/flag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/flag.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/flash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/flash.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/folder.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/forward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/forward.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/frown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/frown.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/ftp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/ftp.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/graph.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/heart.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/home.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/html.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/html.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/ipod.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/ipod.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/last.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/last.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/lock.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/loop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/loop.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/mail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/mail.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/man.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/man.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/manman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/manman.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/music.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/mute.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/mute.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/mute_centered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/mute_centered.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/newwindow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/newwindow.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/next.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/night.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/night.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/open.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/pause.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/phone.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/play.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/previous.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/previous.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/quicktime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/quicktime.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/redo.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/reload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/reload.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/sad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/sad.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/save.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/scream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/scream.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/search.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/seconds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/seconds.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/smile.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/smirk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/smirk.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/star.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/stop.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/subtract.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/subtract.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/switch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/switch.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/target.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/target.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/tcp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/tcp.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/time.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/time.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/toggle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/toggle.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/tongue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/tongue.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/tools.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/trackback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/trackback.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/trash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/trash.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/tv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/tv.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/type.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/undo.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/unlock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/unlock.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/upload.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/user.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/video.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/volume_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/volume_high.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/volume_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/volume_low.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/wifi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/wifi.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/window.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/window.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/woman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/woman.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/womanman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/womanman.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/work.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/zoomin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/zoomin.png
--------------------------------------------------------------------------------
/public/images/sanscons_16/zoomout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sanscons_16/zoomout.png
--------------------------------------------------------------------------------
/public/images/sea-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sea-icon.png
--------------------------------------------------------------------------------
/public/images/search_icon-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/search_icon-15.png
--------------------------------------------------------------------------------
/public/images/search_icon-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/search_icon-50.png
--------------------------------------------------------------------------------
/public/images/sf-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/sf-icon.png
--------------------------------------------------------------------------------
/public/images/stats-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/stats-border.png
--------------------------------------------------------------------------------
/public/images/step-indicate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/step-indicate.png
--------------------------------------------------------------------------------
/public/images/target-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/target-icon.png
--------------------------------------------------------------------------------
/public/images/tmp-geekcorps-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/tmp-geekcorps-logo.png
--------------------------------------------------------------------------------
/public/images/twitter-24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/twitter-24x24.png
--------------------------------------------------------------------------------
/public/images/wayfinder-check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wayfinder-check.png
--------------------------------------------------------------------------------
/public/images/wayfinder-item-background1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wayfinder-item-background1.png
--------------------------------------------------------------------------------
/public/images/wayfinder-item-background2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wayfinder-item-background2.png
--------------------------------------------------------------------------------
/public/images/wayfinder-plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wayfinder-plus.png
--------------------------------------------------------------------------------
/public/images/widget-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/widget-border.png
--------------------------------------------------------------------------------
/public/images/wizard-field-tip-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wizard-field-tip-border.png
--------------------------------------------------------------------------------
/public/images/wizard-general-tip-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/images/wizard-general-tip-border.png
--------------------------------------------------------------------------------
/public/javascripts/lib/jquery.hoverexpand.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 | $.fn.hoverexpand = function(options) {
3 | var defaults = {
4 | minHeight: '100px', // If an element has a height greater than minHeight, it will become 'expandable'
5 | collapsedClass: 'expand-me', // Class to be added to 'expandable' elements. The class is removed at the end of the expand event
6 | hoverTime: 500 // Time (in ms) that a user must hover over an element before it expands
7 | };
8 | var options = $.extend(defaults, options);
9 |
10 | return this.each(function() {
11 | var $obj = $(this);
12 | var origHeight = $obj.css('height');
13 | var timer = null;
14 |
15 | if( parseInt(origHeight) > parseInt(options.minHeight)) {
16 | $obj.css({
17 | height: options.minHeight,
18 | overflow: 'hidden'
19 | }).addClass(options.collapsedClass);
20 |
21 | $obj.hover(
22 | function() { // mouseover
23 | if(!timer) {
24 | timer = window.setTimeout(function() {
25 | $obj.animate({height: origHeight }, 500).removeClass(options.collapsedClass); //expand
26 | timer = null;
27 | }, options.hoverTime);
28 | }
29 | },
30 | function() { // mouseout
31 | if(timer) {
32 | window.clearTimeout(timer);
33 | timer = null;
34 | } else {
35 | $obj.animate({height: options.minHeight}, 500).addClass(options.collapsedClass); //contract
36 | }
37 | }
38 | );
39 | }
40 | });
41 | };
42 | })(jQuery);
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2 | #
3 | # To ban all spiders from the entire site uncomment the next two lines:
4 | # User-Agent: *
5 | # Disallow: /
6 |
--------------------------------------------------------------------------------
/public/stylesheets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/public/stylesheets/.gitkeep
--------------------------------------------------------------------------------
/public/stylesheets/reset.css:
--------------------------------------------------------------------------------
1 | /* http://meyerweb.com/eric/tools/css/reset/
2 | v2.0 | 20110126
3 | License: none (public domain)
4 | */
5 |
6 | html, body, div, span, applet, object, iframe,
7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
8 | a, abbr, acronym, address, big, cite, code,
9 | del, dfn, em, img, ins, kbd, q, s, samp,
10 | small, strike, strong, sub, sup, tt, var,
11 | b, u, i, center,
12 | dl, dt, dd, ol, ul, li,
13 | fieldset, form, label, legend,
14 | table, caption, tbody, tfoot, thead, tr, th, td,
15 | article, aside, canvas, details, embed,
16 | figure, figcaption, footer, header, hgroup,
17 | menu, nav, output, ruby, section, summary,
18 | time, mark, audio, video {
19 | margin: 0;
20 | padding: 0;
21 | border: 0;
22 | font-size: 100%;
23 | font: inherit;
24 | }
25 | /* HTML5 display-role reset for older browsers */
26 | article, aside, details, figcaption, figure,
27 | footer, header, hgroup, menu, nav, section {
28 | display: block;
29 | }
30 | body {
31 | line-height: 1;
32 | }
33 | ol, ul {
34 | list-style: none;
35 | }
36 | blockquote, q {
37 | quotes: none;
38 | }
39 | blockquote:before, blockquote:after,
40 | q:before, q:after {
41 | content: '';
42 | content: none;
43 | }
44 | table {
45 | border-collapse: collapse;
46 | border-spacing: 0;
47 | }
--------------------------------------------------------------------------------
/script/delayed_job:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
4 | require 'delayed/command'
5 | Delayed::Command.new(ARGV).daemonize
6 |
--------------------------------------------------------------------------------
/script/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3 |
4 | APP_PATH = File.expand_path('../../config/application', __FILE__)
5 | require File.expand_path('../../config/boot', __FILE__)
6 | require 'rails/commands'
7 |
--------------------------------------------------------------------------------
/spec/controllers/comments_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe CommentsController do
4 |
5 | describe "post 'create'" do
6 |
7 | before do
8 | @user = Factory(:user)
9 | sign_in(@user)
10 | @comment = Factory(:comment)
11 | end
12 |
13 |
14 | it "should be post to comments and redirect with success" do
15 | request.env['HTTP_REFERER'] = @comment.commentable.to_url
16 | post 'create', :comment => Factory.attributes_for(:comment, :team => @comment.team, :user => @user, :commentable => @comment.commentable )
17 | flash[:success].should == 'Comment added!'
18 | response.should redirect_to @comment.commentable.to_url
19 | end
20 |
21 | it "should be post to comments and redirect with error" do
22 | request.env['HTTP_REFERER'] = '/' + @comment.team.to_url
23 | post 'create',:comment => Factory.attributes_for(:comment, :team => @comment.team, :commentable => nil)
24 | flash[:error].should == 'We had a problem adding that comment'
25 |
26 | end
27 |
28 | end
29 |
30 | describe "not signed in" do
31 |
32 | before do
33 | @comment = Factory(:comment)
34 | end
35 |
36 | it "should not be successful" do
37 | post 'create', :comment => Factory.attributes_for(:comment, :team => @comment.team, :user => @comment.user, :commentable => @comment.team)
38 | response.should redirect_to new_user_session_path
39 | end
40 |
41 | end
42 |
43 | end
44 |
--------------------------------------------------------------------------------
/spec/controllers/details_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe DetailsController do
4 |
5 | end
6 |
--------------------------------------------------------------------------------
/spec/controllers/regions_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe RegionsController do
4 |
5 | end
6 |
--------------------------------------------------------------------------------
/spec/controllers/teams_controller_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe TeamsController do
4 |
5 | before do
6 | @user = Factory(:user)
7 | sign_in(@user)
8 | end
9 |
10 | it "creates a team around an application" do
11 | pending 'this worked as of 27c4b3e but now its not, and none of the actors have substantially changed....' do
12 | app = Factory(:app)
13 | region = Factory(:region)
14 | expect {
15 | post :create, :app_id => app.id
16 | }.to change(Team, :count).by(1)
17 | end
18 | end
19 | end
20 |
--------------------------------------------------------------------------------
/spec/factories/github_contacts.json:
--------------------------------------------------------------------------------
1 | [[{"results":70,"page":1,"total_items":70}],[
2 | {"coder":{"blog":"http://buttonpresser.com","company":"Buttonpresser","created_at":"2010-09-02T19:23:11Z","email":"pete@buttonpresser.com","first_commit":"2011-01-25T17:06:40Z","followers_count":2,"following_count":2,"gravatar_id":"53ef865f704bafef10b893f277849e78","id":5,"location":"Grand Rapids, Michigan","login":"Buttonpresser","name":"Pete Fecteau","org_id":null,"permission":null,"public_gist_count":0,"public_repo_count":7}},
3 | {"coder":{"blog":"http://labratrevenge.com","company":"Lab Rat Revenge LLC","created_at":"2008-01-15T04:47:24Z","email":"justin@labratrevenge.com","first_commit":"2010-10-07T08:49:46Z","followers_count":161,"following_count":44,"gravatar_id":"05234d5e970dd3c5f23e16898106062a","id":6,"location":"Portland, OR","login":"Caged","name":"Justin Palmer","org_id":null,"permission":null,"public_gist_count":35,"public_repo_count":26}}
4 | ]]
--------------------------------------------------------------------------------
/spec/factories/github_contacts_update.json:
--------------------------------------------------------------------------------
1 | [[{"results":70,"page":1,"total_items":70}],[
2 | {"coder":{"blog":"http://buttonpresser.com","company":"Buttonpresser","created_at":"2010-09-02T19:23:11Z","email":"pete@buttonpresser.com","first_commit":"2011-01-25T17:06:40Z","followers_count":2,"following_count":2,"gravatar_id":"53ef865f704bafef10b893f277849e78","id":5,"location":"Grand Rapids, Michigan","login":"Buttonpresser","name":"Pete Fecteau","org_id":null,"permission":null,"public_gist_count":0,"public_repo_count":7}},
3 | {"coder":{"blog":"http://labratrevenge.com","company":"Lab Rat Revenge LLC","created_at":"2008-01-15T04:47:24Z","email":"justin@labratrevenge.com","first_commit":"2010-10-07T08:49:46Z","followers_count":161,"following_count":44,"gravatar_id":"05234d5e970dd3c5f23e16898106062a","id":6,"location":"Portland, OR","login":"lover","name":"Justin Palmer","org_id":null,"permission":null,"public_gist_count":35,"public_repo_count":26}}
4 | ]]
--------------------------------------------------------------------------------
/spec/factories/github_contacts_update_coder.json:
--------------------------------------------------------------------------------
1 | [[{"results":1,"page":1,"total_items":1}],[{"coder":{"blog":"http://www.codeforamerica.org","company":"Code for America","created_at":"2009-06-28T17:57:22Z","email":"melton.dan@gmail.com","first_commit":"2010-11-06T21:14:51Z","followers_count":15,"following_count":19,"gravatar_id":"4616698e5452eae10b53f2092f0d6cb6","id":4,"location":"San Francisco","login":"danmelton","name":"Dan Melton","org_id":null,"permission":null,"public_gist_count":1,"public_repo_count":19}}]]
--------------------------------------------------------------------------------
/spec/models/activity_feed_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe ActivityFeed do
4 | before do
5 | @team = Factory(:team)
6 | @activity_feed = Factory(:activity_feed, :team => @team)
7 | end
8 |
9 | context "validations" do
10 | it "require team" do
11 | feed = ActivityFeed.new(Factory.attributes_for(:activity_feed, :team => nil))
12 | feed.save.should be_false
13 | end
14 |
15 | it "require feedable" do
16 | feed = ActivityFeed.new(Factory.attributes_for(:activity_feed, :feedable => nil))
17 | feed.save.should be_false
18 | end
19 |
20 | end
21 |
22 | context "crud functions" do
23 |
24 | it 'should respond to teams' do
25 | @activity_feed.respond_to?(:team).should be_true
26 | end
27 |
28 | it 'should respond to feedable' do
29 | @activity_feed.respond_to?(:feedable).should be_true
30 | end
31 |
32 | end
33 |
34 | end
35 |
--------------------------------------------------------------------------------
/spec/models/app_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe App do
4 | before do
5 | @app = Factory(:app)
6 | end
7 | context 'has many' do
8 | it 'teams' do
9 | @app.respond_to?(:teams).should be_true
10 | end
11 | it 'details' do
12 | @app.respond_to?(:details).should be_true
13 | end
14 | it 'team_members' do
15 | @app.respond_to?(:team_members).should be_true
16 | end
17 | it 'users' do
18 | @app.respond_to?(:users).should be_true
19 | end
20 | end
21 | context 'validates' do
22 | it 'uniqueness of name' do
23 | attr = Factory.attributes_for(:app)
24 | @app = App.new(attr)
25 | @app.save!
26 | @invalid_app = App.new(attr)
27 | @invalid_app.should have(1).error_on(:name)
28 | end
29 | end
30 |
31 | context 'aggregates skill list' do
32 | it 'skill_list' do
33 | s1 = Factory(:step, :app => @app, :skill_list => ['one', 'two'])
34 | s2 = Factory(:step, :app => @app, :skill_list => ['two'])
35 | s3 = Factory(:step, :app => @app, :skill_list => ['two', 'three'])
36 | s4 = Factory(:step, :app => @app, :skill_list => ['one', 'two'])
37 | s5 = Factory(:step, :app => @app, :skill_list => ['two'])
38 | s6 = Factory(:step, :app => @app, :skill_list => ['two', 'three'])
39 | m1 = Factory(:milestone, :app => @app, :steps => [s3, s2, s1])
40 | m2 = Factory(:milestone, :app => @app, :steps => [s4, s5, s6])
41 | @app.reload.milestones.size.should == 2
42 | @app.reload.skill_list.should == ['one', 'two', 'three']
43 | end
44 |
45 | end
46 | end
47 |
--------------------------------------------------------------------------------
/spec/models/batchbook_contact_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 | ENV['batchbook_account'] = 'codeforamerica'
3 | ENV['batchbook_key'] = 'something'
4 |
5 | describe BatchbookContact do
6 |
7 | # before do
8 | # BatchbookContact.delete_all
9 | # end
10 | #
11 | # describe "sync with server" do
12 | # before do
13 | # stub_request(:get, "http://something:x@codeforamerica.batchbook.com/service/people.xml?limit=100&offset=1").
14 | # with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
15 | # to_return(:status => 200, :body => fixture("batchbook_people.xml"), :headers => {})
16 | # end
17 | #
18 | # it "should add contacts" do
19 | # BatchbookContact.new.get_contacts(1)
20 | # end
21 | #
22 | # end
23 | end
24 |
--------------------------------------------------------------------------------
/spec/models/detail_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe Detail do
4 | before do
5 | @detail = Factory.build(:detail)
6 | end
7 | context 'belongs to' do
8 | it 'app' do
9 | @detail.respond_to?(:app).should be_true
10 | end
11 | it 'team' do
12 | @detail.respond_to?(:team).should be_true
13 | end
14 | end
15 | context 'validates' do
16 | it 'unique name' do
17 | attr = Factory.attributes_for(:detail)
18 | @detail = Detail.new(attr)
19 | @detail.save!
20 | @invalid_detail = Detail.new(attr)
21 | @invalid_detail.should have(1).error_on(:name)
22 | end
23 | end
24 | end
25 |
--------------------------------------------------------------------------------
/spec/models/milestone_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe Milestone do
4 |
5 | it 'skill_list' do
6 | s1 = Factory(:step, :skill_list => ['one', 'two'])
7 | s2 = Factory(:step, :skill_list => ['two'])
8 | s3 = Factory(:step, :skill_list => ['two', 'three'])
9 | m = Factory(:milestone, :steps => [s3, s2, s1])
10 | m.skill_list.sort.should == ['one', 'two', 'three'].sort
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/spec/models/person_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe Person do
4 | before do
5 | @person = Factory(:person)
6 | end
7 | context 'belongs to' do
8 | it 'user' do
9 | @person.respond_to?(:user).should be_true
10 | end
11 | end
12 | context 'validates' do
13 | it 'presence of name' do
14 | @person.name = nil
15 | @person.should have(1).error_on(:name)
16 | end
17 | end
18 |
19 | end
20 |
--------------------------------------------------------------------------------
/spec/models/region_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe Region do
4 | before do
5 | @region = Factory(:region)
6 | end
7 | context 'has many' do
8 | it 'teams' do
9 | @region.respond_to?(:teams).should be_true
10 | end
11 | it 'users' do
12 | @region.respond_to?(:users).should be_true
13 | end
14 | end
15 | context 'validates' do
16 |
17 | it 'uniqueness of city' do
18 | attr = Factory.attributes_for(:region)
19 | @region = Region.new(attr)
20 | @region.save!
21 | @invalid_region = Region.new(attr)
22 | @invalid_region.should have(1).error_on(:city)
23 | end
24 |
25 | it 'presence of nick_name' do
26 | @region.nick_name = nil
27 | @region.should have(1).error_on(:nick_name)
28 | end
29 | end
30 | end
31 |
--------------------------------------------------------------------------------
/spec/models/team_member_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe TeamMember do
4 | before do
5 | @team_member = Factory(:team_member)
6 | end
7 | context 'belongs_to' do
8 | it 'user' do
9 | @team_member.respond_to?(:user).should be_true
10 | end
11 | it 'team' do
12 | @team_member.respond_to?(:team).should be_true
13 | end
14 | it 'app' do
15 | @team_member.respond_to?(:app).should be_true
16 | end
17 | end
18 | context 'validations' do
19 | it 'must have a user' do
20 | @team_member.user = nil
21 | @team_member.should have(1).error_on(:user)
22 | end
23 | it 'must have a team' do
24 | @team_member.team = nil
25 | @team_member.should have(1).error_on(:team)
26 | end
27 | it 'must have an app' do
28 | @team_member.app = nil
29 | @team_member.should have(1).error_on(:app)
30 | end
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/spec/models/team_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe Team do
4 | context 'associates' do
5 | before do
6 | @team = Factory.build(:team)
7 | end
8 | it 'many team members' do
9 | @team.respond_to?(:team_members).should be_true
10 | end
11 | it 'many members' do
12 | @team.respond_to?(:members).should be_true
13 | end
14 | it 'many details' do
15 | @team.respond_to?(:details).should be_true
16 | end
17 | it 'belongs to region' do
18 | @team.respond_to?(:region).should be_true
19 | end
20 | it 'belongs to app' do
21 | @team.respond_to?(:app).should be_true
22 | end
23 | end
24 | context 'create_team_name' do
25 | before do
26 | @team = Factory.build(:team)
27 | end
28 | it "should create a unique name for an implementation team" do
29 | @team.team_type = 'substantial'
30 | @team.save(:validate => false)
31 | @team.name.should == (@team.region.nick_name + "-" + @team.app.name).gsub(" ", "-").downcase
32 | end
33 | it "should create a name that matches the application if its the core team" do
34 | @team.team_type = "core"
35 | @team.save(:validate => false)
36 | @team.name.should == @team.app.name
37 | end
38 | end
39 | end
40 |
--------------------------------------------------------------------------------
/spec/models/user_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe 'User' do
4 |
5 | context 'has accessible attribute' do
6 | before do
7 | @user = Factory(:user)
8 | end
9 | it("email") { @user.respond_to?(:email).should be_true }
10 | it("remember_me") { @user.respond_to?(:remember_me).should be_true }
11 | end
12 | context 'has association with' do
13 | before do
14 | @user = Factory(:user)
15 | end
16 | it('one person') { @user.respond_to?(:person).should be_true }
17 | it('many team_members') { @user.respond_to?(:team_members).should be_true }
18 | it('many teams') { @user.respond_to?(:teams).should be_true }
19 | it('one region') { @user.respond_to?(:region).should be_true }
20 | it('many authentications') { @user.respond_to?(:authentications).should be_true }
21 | end
22 | context 'validates' do
23 | end
24 | context 'methods' do
25 | before do
26 | @user = Factory(:user)
27 | end
28 | it 'returns a default image if theres an authentication but no image stored with that auth' do
29 | new_auth = @user.authentications.create!
30 | @user.authentications = [new_auth]
31 | @user.person = nil
32 | @user.save!
33 | @user.avatar_url.should == '/images/geekcorpsavatar1.png'
34 | end
35 | end
36 | end
37 |
--------------------------------------------------------------------------------
/spec/views/comments/create.html.erb_spec.rb:
--------------------------------------------------------------------------------
1 | require 'spec_helper'
2 |
3 | describe "comments/create.html.erb" do
4 | pending "add some examples to (or delete) #{__FILE__}"
5 | end
6 |
--------------------------------------------------------------------------------
/vendor/plugins/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/geek_corps/17e8ff02f0335674c6e3d43c82108afbc3831d87/vendor/plugins/.gitkeep
--------------------------------------------------------------------------------