hackathon_manager 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +90 -0
- data/Rakefile +36 -0
- data/app/assets/config/hackathon_manager_manifest.js +0 -0
- data/app/assets/javascripts/hackathon_manager/application.js +16 -0
- data/app/assets/javascripts/hackathon_manager/jquery.transit.min.js +1 -0
- data/app/assets/javascripts/hackathon_manager/main.js +237 -0
- data/app/assets/javascripts/hackathon_manager/manage/application.js +20 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/emailEvents.js +25 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.bulkRowSelect.js +13 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.bulkRowedit.js +42 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/jquery.chartkickAutoReload.js +8 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/setupDataTables.js +98 -0
- data/app/assets/javascripts/hackathon_manager/manage/lib/setupHighcharts.js +34 -0
- data/app/assets/javascripts/hackathon_manager/manage/map.js +58 -0
- data/app/assets/javascripts/hackathon_manager/registrations.js +26 -0
- data/app/assets/javascripts/hackathon_manager/us.json +1 -0
- data/app/assets/javascripts/hackathon_manager/vendor/buttons.html5.min.js +22 -0
- data/app/assets/javascripts/hackathon_manager/vendor/d3.v3.min.js +5 -0
- data/app/assets/javascripts/hackathon_manager/vendor/dataTables.buttons.min.js +35 -0
- data/app/assets/javascripts/hackathon_manager/vendor/jquery.dataTables.min.js +164 -0
- data/app/assets/javascripts/hackathon_manager/vendor/pdfmake.min.js +22 -0
- data/app/assets/javascripts/hackathon_manager/vendor/queue.v1.min.js +1 -0
- data/app/assets/javascripts/hackathon_manager/vendor/topojson.v1.min.js +1 -0
- data/app/assets/javascripts/hackathon_manager/vendor/vfs_fonts.js +1 -0
- data/app/assets/stylesheets/hackathon_manager/core.sass +20 -0
- data/app/assets/stylesheets/hackathon_manager/datatables/buttons.dataTables.min.css +1 -0
- data/app/assets/stylesheets/hackathon_manager/datatables/jquery.dataTables.min.css +1 -0
- data/app/assets/stylesheets/hackathon_manager/forms/_confirmation.sass +21 -0
- data/app/assets/stylesheets/hackathon_manager/forms/_forms.sass +243 -0
- data/app/assets/stylesheets/hackathon_manager/general/_base.sass +105 -0
- data/app/assets/stylesheets/hackathon_manager/general/_button.sass +49 -0
- data/app/assets/stylesheets/hackathon_manager/general/_footer.sass +21 -0
- data/app/assets/stylesheets/hackathon_manager/general/_main.sass +4 -0
- data/app/assets/stylesheets/hackathon_manager/general/_media-queries.sass +52 -0
- data/app/assets/stylesheets/hackathon_manager/general/_mixins.sass +58 -0
- data/app/assets/stylesheets/hackathon_manager/general/_mlh.sass +13 -0
- data/app/assets/stylesheets/hackathon_manager/general/_sidebar.sass +70 -0
- data/app/assets/stylesheets/hackathon_manager/general/_status-colors.sass +14 -0
- data/app/assets/stylesheets/hackathon_manager/general/_table.sass +26 -0
- data/app/assets/stylesheets/hackathon_manager/mailer.sass +108 -0
- data/app/assets/stylesheets/hackathon_manager/manage.sass +119 -0
- data/app/assets/stylesheets/hackathon_manager/scaffolds.scss +50 -0
- data/app/assets/stylesheets/variables.sass +41 -0
- data/app/controllers/bus_lists_controller.rb +37 -0
- data/app/controllers/concerns/questionnaires_controllable.rb +15 -0
- data/app/controllers/manage/admins_controller.rb +55 -0
- data/app/controllers/manage/application_controller.rb +13 -0
- data/app/controllers/manage/bus_lists_controller.rb +71 -0
- data/app/controllers/manage/dashboard_controller.rb +112 -0
- data/app/controllers/manage/messages_controller.rb +88 -0
- data/app/controllers/manage/questionnaires_controller.rb +172 -0
- data/app/controllers/manage/schools_controller.rb +87 -0
- data/app/controllers/manage/stats_controller.rb +77 -0
- data/app/controllers/questionnaires_controller.rb +145 -0
- data/app/controllers/rsvps_controller.rb +97 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +18 -0
- data/app/controllers/users/registrations_controller.rb +63 -0
- data/app/datatables/admin_datatable.rb +29 -0
- data/app/datatables/message_datatable.rb +30 -0
- data/app/datatables/questionnaire_datatable.rb +39 -0
- data/app/datatables/school_datatable.rb +34 -0
- data/app/helpers/hackathon_manager_helper.rb +36 -0
- data/app/helpers/manage/dashboard_helper.rb +9 -0
- data/app/inputs/deletable_attachment_input.rb +11 -0
- data/app/inputs/formatted_boolean_input.rb +26 -0
- data/app/inputs/school_selection_input.rb +9 -0
- data/app/mailers/application_mailer.rb +4 -0
- data/app/mailers/mail_preview.rb +42 -0
- data/app/mailers/mailer.rb +84 -0
- data/app/models/bus_list.rb +24 -0
- data/app/models/deletable_attachment.rb +17 -0
- data/app/models/fips.rb +3 -0
- data/app/models/message.rb +76 -0
- data/app/models/questionnaire.rb +166 -0
- data/app/models/schedule.rb +53 -0
- data/app/models/school.rb +31 -0
- data/app/models/school_name_duplicate.rb +7 -0
- data/app/models/user.rb +52 -0
- data/app/views/application/_bus_list_info.html.haml +20 -0
- data/app/views/application/_bus_list_stats.html.haml +9 -0
- data/app/views/application/_questionnaire_summary.html.haml +54 -0
- data/app/views/bus_lists/show.html.haml +45 -0
- data/app/views/devise/passwords/_form.html.haml +9 -0
- data/app/views/devise/passwords/edit.html.haml +14 -0
- data/app/views/devise/passwords/new.html.haml +5 -0
- data/app/views/devise/registrations/_form.html.haml +8 -0
- data/app/views/devise/registrations/edit.html.haml +20 -0
- data/app/views/devise/registrations/new.html.haml +18 -0
- data/app/views/devise/sessions/_form.html.haml +8 -0
- data/app/views/devise/sessions/new.html.haml +9 -0
- data/app/views/layouts/_shared_footer.html.haml +1 -0
- data/app/views/layouts/_sidebar.html.haml +22 -0
- data/app/views/layouts/blank.html.haml +12 -0
- data/app/views/layouts/dayof.html.haml +12 -0
- data/app/views/layouts/hackathon_manager.html.haml +12 -0
- data/app/views/layouts/mailer.html.erb +51 -0
- data/app/views/layouts/manage/application.html.haml +26 -0
- data/app/views/mailer/_getting_there.html.erb +14 -0
- data/app/views/mailer/_questions.html.erb +2 -0
- data/app/views/mailer/accepted_email.html.erb +13 -0
- data/app/views/mailer/application_confirmation_email.html.erb +13 -0
- data/app/views/mailer/bulk_message_email.html.erb +1 -0
- data/app/views/mailer/bulk_templates/_default.html.erb +1 -0
- data/app/views/mailer/bus_captain_confirmation_email.html.erb +12 -0
- data/app/views/mailer/bus_list_update_email.html.erb +7 -0
- data/app/views/mailer/denied_email.html.erb +5 -0
- data/app/views/mailer/incomplete_reminder_email.html.erb +6 -0
- data/app/views/mailer/rsvp_confirmation_email.html.erb +8 -0
- data/app/views/mailer/slack_invite_email.html.erb +10 -0
- data/app/views/manage/admins/_form.html.haml +18 -0
- data/app/views/manage/admins/edit.html.haml +12 -0
- data/app/views/manage/admins/index.html.haml +15 -0
- data/app/views/manage/admins/new.html.haml +8 -0
- data/app/views/manage/admins/show.html.haml +17 -0
- data/app/views/manage/bus_lists/_form.html.haml +14 -0
- data/app/views/manage/bus_lists/edit.html.haml +8 -0
- data/app/views/manage/bus_lists/index.html.haml +26 -0
- data/app/views/manage/bus_lists/new.html.haml +6 -0
- data/app/views/manage/bus_lists/show.html.haml +92 -0
- data/app/views/manage/dashboard/index.html.haml +64 -0
- data/app/views/manage/dashboard/map_data.tsv.erb +48 -0
- data/app/views/manage/messages/_form.html.haml +15 -0
- data/app/views/manage/messages/edit.html.haml +10 -0
- data/app/views/manage/messages/index.html.haml +17 -0
- data/app/views/manage/messages/new.html.haml +8 -0
- data/app/views/manage/messages/show.html.haml +50 -0
- data/app/views/manage/questionnaires/_form.html.haml +54 -0
- data/app/views/manage/questionnaires/edit.html.haml +12 -0
- data/app/views/manage/questionnaires/index.html.haml +36 -0
- data/app/views/manage/questionnaires/new.html.haml +8 -0
- data/app/views/manage/questionnaires/show.html.haml +63 -0
- data/app/views/manage/schools/_form.html.haml +16 -0
- data/app/views/manage/schools/edit.html.haml +12 -0
- data/app/views/manage/schools/index.html.haml +18 -0
- data/app/views/manage/schools/merge.html.haml +35 -0
- data/app/views/manage/schools/new.html.haml +8 -0
- data/app/views/manage/schools/show.html.haml +52 -0
- data/app/views/manage/stats/index.html.haml +55 -0
- data/app/views/questionnaires/_form.html.haml +70 -0
- data/app/views/questionnaires/edit.html.haml +10 -0
- data/app/views/questionnaires/new.html.haml +7 -0
- data/app/views/questionnaires/show.html.haml +30 -0
- data/app/views/rsvps/show.html.haml +61 -0
- data/app/workers/bulk_message_worker.rb +86 -0
- data/app/workers/slack_invite_worker.rb +49 -0
- data/config/blazer.yml +56 -0
- data/config/initializers/ajax_datatables_rails.rb +7 -0
- data/config/initializers/chartkick.rb +4 -0
- data/config/initializers/devise.rb +265 -0
- data/config/initializers/hackathon.rb +9 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/new_framework_defaults.rb +20 -0
- data/config/initializers/sidekiq.rb +11 -0
- data/config/initializers/simple_form.rb +164 -0
- data/config/initializers/static_data.rb +7 -0
- data/config/initializers/wrap_parameters.rb +14 -0
- data/config/routes.rb +74 -0
- data/db/migrate/20141011210642_create_participants.rb +18 -0
- data/db/migrate/20141029055313_create_schools.rb +12 -0
- data/db/migrate/20150104071608_add_shirt_and_dietary_medical_to_participants.rb +6 -0
- data/db/migrate/20150104190233_add_attachment_resume_to_participants.rb +13 -0
- data/db/migrate/20150110020958_add_international_to_participants.rb +5 -0
- data/db/migrate/20150110215933_change_participants_to_registration.rb +5 -0
- data/db/migrate/20150110222214_create_users.rb +5 -0
- data/db/migrate/20150110222455_add_portfolio_and_vcs_urls_to_registrations.rb +6 -0
- data/db/migrate/20150110222655_add_devise_to_users.rb +48 -0
- data/db/migrate/20150111000224_change_resgistrations_to_questionnaire.rb +5 -0
- data/db/migrate/20150111012709_add_questionnaire_ref_to_users.rb +8 -0
- data/db/migrate/20150113205638_add_amin_to_users.rb +5 -0
- data/db/migrate/20150113233730_add_questionnaire_count_to_schools.rb +12 -0
- data/db/migrate/20150125213100_set_default_admin_value.rb +17 -0
- data/db/migrate/20150216232155_add_agreement_accepted_to_questionnaires.rb +5 -0
- data/db/migrate/20150218051450_add_admin_read_only_to_users.rb +5 -0
- data/db/migrate/20150221165513_create_messages.rb +15 -0
- data/db/migrate/20150225235817_add_status_to_user.rb +7 -0
- data/db/migrate/20150302011457_create_fips.rb +11 -0
- data/db/migrate/20150326031423_add_template_to_message.rb +5 -0
- data/db/migrate/20150410175056_create_bus_lists.rb +12 -0
- data/db/migrate/20150411161432_add_capacity_notes_captain_to_bus_lists.rb +8 -0
- data/db/migrate/20150415165844_add_is_bus_captain_to_questionnaire.rb +5 -0
- data/db/migrate/20150415181114_add_check_in_data_to_questionnaire.rb +8 -0
- data/db/migrate/20151224015223_change_read_only_user_to_limited.rb +5 -0
- data/db/migrate/20160110012217_add_code_of_conduct_accepted_to_questionnaire.rb +5 -0
- data/db/migrate/20160110222639_add_omniauth_to_users.rb +8 -0
- data/db/migrate/20160111020817_update_questionnaire_for_my_mlh.rb +14 -0
- data/db/migrate/20160112222137_add_option_for_alt_travel_to_questionnaire.rb +6 -0
- data/db/migrate/20160208061253_rename_can_share_resume_to_info.rb +5 -0
- data/db/migrate/20161020032736_remove_resume_from_questionnaires.rb +14 -0
- data/db/migrate/20161024145452_add_data_sharing_to_questionnaire.rb +5 -0
- data/db/migrate/20161206073921_rename_graduation_to_level_of_study.rb +6 -0
- data/db/migrate/20161206084722_add_reminder_sent_at_to_users.rb +5 -0
- data/db/migrate/20161208055809_add_attachment_resume_to_questionnaires.rb +11 -0
- data/db/migrate/20161212030010_add_interest_to_questionnaire.rb +5 -0
- data/db/migrate/20170107210122_create_school_name_duplicates.rb +10 -0
- data/db/migrate/20170128063020_install_blazer.rb +45 -0
- data/db/schools.csv +1 -0
- data/db/seeds.rb +17 -0
- data/lib/hackathon_manager/engine.rb +35 -0
- data/lib/hackathon_manager/version.rb +3 -0
- data/lib/hackathon_manager.rb +5 -0
- data/lib/tasks/coverage.rake +14 -0
- data/lib/tasks/hackathon_manager_tasks.rake +4 -0
- metadata +667 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
#sidebar-toggle
|
2
|
+
background: $primary
|
3
|
+
color: $white
|
4
|
+
cursor: pointer
|
5
|
+
display: none
|
6
|
+
font-size: 2rem
|
7
|
+
left: 100%
|
8
|
+
padding: 10px 15px 10px 15px
|
9
|
+
position: absolute
|
10
|
+
|
11
|
+
.sidebar, .sidebar.open
|
12
|
+
background: $black
|
13
|
+
bottom: 0
|
14
|
+
left: 0
|
15
|
+
min-height: 100%
|
16
|
+
position: fixed
|
17
|
+
text-align: center
|
18
|
+
top: 0
|
19
|
+
@include transition(200ms, left, ease-in-out, 0s)
|
20
|
+
width: $sidebar-width
|
21
|
+
z-index: 10001
|
22
|
+
.pusher
|
23
|
+
height: 100%
|
24
|
+
overflow-y: auto
|
25
|
+
padding-bottom: 33px
|
26
|
+
z-index: 1000
|
27
|
+
|
28
|
+
#logo
|
29
|
+
display: block
|
30
|
+
margin: auto
|
31
|
+
width: 80%
|
32
|
+
padding: 10% 0
|
33
|
+
|
34
|
+
.nav-list
|
35
|
+
font-size: 1.125rem
|
36
|
+
list-style: none
|
37
|
+
margin: 10px 0 0
|
38
|
+
padding: 0
|
39
|
+
.nav-link
|
40
|
+
color: $white
|
41
|
+
display: block
|
42
|
+
padding: 15px 20px
|
43
|
+
text-align: center
|
44
|
+
@include transition(250ms, all, ease-in-out, 0ms)
|
45
|
+
width: 100%
|
46
|
+
&:hover
|
47
|
+
background: darken($primary, 10%)
|
48
|
+
|
49
|
+
.social-list
|
50
|
+
font-size: 0.875rem
|
51
|
+
list-style: none
|
52
|
+
padding: 25px 0
|
53
|
+
li
|
54
|
+
margin: 3px 10px
|
55
|
+
.fa
|
56
|
+
text-align: center
|
57
|
+
width: 20px
|
58
|
+
.sm-link
|
59
|
+
color: $white
|
60
|
+
display: inline-block
|
61
|
+
padding: 8px
|
62
|
+
margin-top: 3px
|
63
|
+
@include transition(250ms, all, ease-in-out, 0ms)
|
64
|
+
&:hover
|
65
|
+
background: darken($primary, 10%)
|
66
|
+
.social-list-inverse
|
67
|
+
.sm-link
|
68
|
+
color: $secondary
|
69
|
+
&:hover
|
70
|
+
background: $primary
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.acc-status-denied
|
2
|
+
color: darken(#f00, 7%)
|
3
|
+
.acc-status-accepted
|
4
|
+
color: darken(#0f5, 7%)
|
5
|
+
.acc-status-waitlist
|
6
|
+
color: darken(#0df, 7%)
|
7
|
+
.acc-status-late_waitlist
|
8
|
+
color: darken($primary, 20%)
|
9
|
+
.acc-status-pending
|
10
|
+
color: $primary
|
11
|
+
.acc-status-rsvp_denied
|
12
|
+
color: darken(#f00, 7%)
|
13
|
+
.acc-status-rsvp_confirmed
|
14
|
+
color: darken(#0f5, 7%)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
.table
|
2
|
+
border: 0
|
3
|
+
border-spacing: 0
|
4
|
+
color: $black
|
5
|
+
margin: 20px 0
|
6
|
+
width: 100%
|
7
|
+
th, td
|
8
|
+
margin: 0
|
9
|
+
border: 0
|
10
|
+
th
|
11
|
+
background: $secondary
|
12
|
+
color: $white
|
13
|
+
font-size: 1em
|
14
|
+
font-weight: $font-light
|
15
|
+
text-align: left
|
16
|
+
padding: 9px 13px
|
17
|
+
td
|
18
|
+
padding: 6px 10px
|
19
|
+
vertical-align: top
|
20
|
+
&:first-child
|
21
|
+
padding-left: 10px
|
22
|
+
tr
|
23
|
+
&:nth-child(odd)
|
24
|
+
background: $grey-light
|
25
|
+
&.accent
|
26
|
+
background: lighten($grey-med, 20%)
|
@@ -0,0 +1,108 @@
|
|
1
|
+
@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600')
|
2
|
+
|
3
|
+
body
|
4
|
+
background: #ccc
|
5
|
+
color: #201e1f
|
6
|
+
font-family: 'Open Sans', sans-serif
|
7
|
+
font-size: 16px
|
8
|
+
font-weight: 300
|
9
|
+
text-align: center
|
10
|
+
margin: 0
|
11
|
+
body *
|
12
|
+
font-family: 'Open Sans', sans-serif
|
13
|
+
|
14
|
+
html
|
15
|
+
margin: 0
|
16
|
+
|
17
|
+
ul
|
18
|
+
list-style: none
|
19
|
+
padding: 0
|
20
|
+
|
21
|
+
li
|
22
|
+
margin: 5px 0
|
23
|
+
|
24
|
+
table
|
25
|
+
border: 0
|
26
|
+
padding: 0
|
27
|
+
width: 100%
|
28
|
+
|
29
|
+
.coderit-logo
|
30
|
+
display: inline-block
|
31
|
+
width: 76px
|
32
|
+
vertical-align: bottom
|
33
|
+
|
34
|
+
#content
|
35
|
+
max-width: 800px
|
36
|
+
width: 100%
|
37
|
+
margin: 56px auto
|
38
|
+
background: white
|
39
|
+
|
40
|
+
#main-content
|
41
|
+
background: white
|
42
|
+
padding: 20px 48px 64px
|
43
|
+
|
44
|
+
|
45
|
+
.banner
|
46
|
+
width: 100%
|
47
|
+
|
48
|
+
.email-footer
|
49
|
+
background: #201e1f
|
50
|
+
padding: 18px 0
|
51
|
+
|
52
|
+
.email-footer td span
|
53
|
+
margin-right: 20px
|
54
|
+
color: white
|
55
|
+
|
56
|
+
.email-footer td span a
|
57
|
+
color: white
|
58
|
+
|
59
|
+
h1
|
60
|
+
line-height: 1.27
|
61
|
+
|
62
|
+
h1, h2
|
63
|
+
font-weight: 300
|
64
|
+
text-transform: uppercase
|
65
|
+
font-size: 36px
|
66
|
+
color: #f58625
|
67
|
+
|
68
|
+
h3
|
69
|
+
font-weight: 600
|
70
|
+
font-size: 24px
|
71
|
+
text-transform: uppercase
|
72
|
+
color: #fc401c
|
73
|
+
|
74
|
+
h4
|
75
|
+
font-weight: 200
|
76
|
+
font-size: 13px
|
77
|
+
text-transform: uppercase
|
78
|
+
|
79
|
+
a.nodecor
|
80
|
+
text-decoration: none
|
81
|
+
|
82
|
+
p
|
83
|
+
font-weight: 300
|
84
|
+
font-size: 16px
|
85
|
+
line-height: 1.7
|
86
|
+
text-align: justify
|
87
|
+
|
88
|
+
strong
|
89
|
+
font-weight: 600
|
90
|
+
|
91
|
+
div.center
|
92
|
+
margin: 0 auto
|
93
|
+
|
94
|
+
h1.center,h2.center,h3.center,h4.center,h5.center,h6.center,p.center
|
95
|
+
text-align: center
|
96
|
+
|
97
|
+
.button
|
98
|
+
background: #3413ac
|
99
|
+
display: inline-block
|
100
|
+
padding: 0.8em 1.5em
|
101
|
+
font-size: 15px
|
102
|
+
border-radius: 30px
|
103
|
+
text-transform: uppercase
|
104
|
+
letter-spacing: 0.07em
|
105
|
+
color: white
|
106
|
+
font-weight: 600
|
107
|
+
margin: 12px 5px
|
108
|
+
text-decoration: none
|
@@ -0,0 +1,119 @@
|
|
1
|
+
@import core
|
2
|
+
@import dataTables/jquery.dataTables
|
3
|
+
@import datatables/buttons.dataTables.min
|
4
|
+
@import selectize
|
5
|
+
@import selectize.default
|
6
|
+
|
7
|
+
.manage
|
8
|
+
padding-left: 20px
|
9
|
+
padding-right: 20px
|
10
|
+
padding-top: 100px
|
11
|
+
|
12
|
+
.container-half, .container-full
|
13
|
+
max-width: none
|
14
|
+
@media (max-width: 600px)
|
15
|
+
padding-left: 0
|
16
|
+
padding-right: 0
|
17
|
+
.container-half
|
18
|
+
display: inline-block
|
19
|
+
width: 49.6% // weird issue with percentaces
|
20
|
+
vertical-align: top
|
21
|
+
@media (max-width: 600px)
|
22
|
+
width: 100%
|
23
|
+
.container-full
|
24
|
+
display: inline-block
|
25
|
+
width: 100%
|
26
|
+
vertical-align: top
|
27
|
+
margin: 0
|
28
|
+
|
29
|
+
#manageNav
|
30
|
+
position: absolute
|
31
|
+
z-index: 1
|
32
|
+
width: 100%
|
33
|
+
background: $black
|
34
|
+
color: $white
|
35
|
+
padding: 16px 20px 6px
|
36
|
+
@media(max-width: 840px)
|
37
|
+
padding-left: 70px
|
38
|
+
p, a
|
39
|
+
margin: 0 5px 10px
|
40
|
+
p
|
41
|
+
color: $primary
|
42
|
+
display: inline-block
|
43
|
+
margin-top: 0
|
44
|
+
&:first-child
|
45
|
+
margin-right: 10px
|
46
|
+
a
|
47
|
+
color: $white
|
48
|
+
display: inline-block
|
49
|
+
&:hover
|
50
|
+
color: darken($grey-light, 5%)
|
51
|
+
|
52
|
+
.land
|
53
|
+
fill: $grey-light
|
54
|
+
|
55
|
+
.border
|
56
|
+
fill: none
|
57
|
+
stroke: #eee
|
58
|
+
stroke-linejoin: round
|
59
|
+
stroke-linecap: round
|
60
|
+
stroke-width: 2px
|
61
|
+
|
62
|
+
.county
|
63
|
+
fill: $primary
|
64
|
+
fill-opacity: .5
|
65
|
+
stroke: #eee
|
66
|
+
stroke-width: .5px
|
67
|
+
|
68
|
+
.county :hover
|
69
|
+
stroke: #000
|
70
|
+
|
71
|
+
#map
|
72
|
+
text-align: center
|
73
|
+
|
74
|
+
.dashboard-container-title
|
75
|
+
color: $grey-dark
|
76
|
+
border-bottom: 5px solid $primary
|
77
|
+
padding: 9px 12px
|
78
|
+
font-size: 17px
|
79
|
+
color: lighten($grey-dark, 10%)
|
80
|
+
|
81
|
+
.graph-overlay
|
82
|
+
text-align: center
|
83
|
+
vertical-align: top
|
84
|
+
position: absolute
|
85
|
+
z-index: 1
|
86
|
+
background: rgba(#f0f0f0,0.86)
|
87
|
+
margin-left: 33px
|
88
|
+
padding: 0 6%
|
89
|
+
height: 136px
|
90
|
+
h3
|
91
|
+
color: $black
|
92
|
+
font-weight: 500
|
93
|
+
margin: 1.2em 0 0
|
94
|
+
p
|
95
|
+
font-size: 14px
|
96
|
+
margin: 0.5em 0 1.2em
|
97
|
+
&.double-metrics
|
98
|
+
h3
|
99
|
+
margin-top: 0.45em
|
100
|
+
font-size: 21px
|
101
|
+
p
|
102
|
+
font-size: 13px
|
103
|
+
margin-top: 0.3em
|
104
|
+
|
105
|
+
.chart-details
|
106
|
+
list-style: none
|
107
|
+
margin: 0 0 10px
|
108
|
+
padding: 0
|
109
|
+
li
|
110
|
+
margin: 0
|
111
|
+
padding: 2px
|
112
|
+
display: inline-block
|
113
|
+
width: 49%
|
114
|
+
font-size: 15px
|
115
|
+
|
116
|
+
.email-preview
|
117
|
+
width: 100%
|
118
|
+
border: 2px solid $grey-med
|
119
|
+
min-height: 500px
|
@@ -0,0 +1,50 @@
|
|
1
|
+
p, ol, ul, td {
|
2
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
3
|
+
font-size: 13px;
|
4
|
+
line-height: 18px;
|
5
|
+
}
|
6
|
+
|
7
|
+
pre {
|
8
|
+
background-color: #eee;
|
9
|
+
padding: 10px;
|
10
|
+
font-size: 11px;
|
11
|
+
}
|
12
|
+
|
13
|
+
div {
|
14
|
+
&.field, &.actions {
|
15
|
+
margin-bottom: 10px;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
#notice {
|
20
|
+
color: green;
|
21
|
+
}
|
22
|
+
|
23
|
+
.field_with_errors {
|
24
|
+
padding: 2px;
|
25
|
+
background-color: red;
|
26
|
+
display: table;
|
27
|
+
}
|
28
|
+
|
29
|
+
#error_explanation {
|
30
|
+
width: 450px;
|
31
|
+
border: 2px solid red;
|
32
|
+
padding: 7px;
|
33
|
+
padding-bottom: 0;
|
34
|
+
margin-bottom: 20px;
|
35
|
+
background-color: #f0f0f0;
|
36
|
+
h2 {
|
37
|
+
text-align: left;
|
38
|
+
font-weight: bold;
|
39
|
+
padding: 5px 5px 5px 15px;
|
40
|
+
font-size: 12px;
|
41
|
+
margin: -7px;
|
42
|
+
margin-bottom: 0px;
|
43
|
+
background-color: #c00;
|
44
|
+
color: #fff;
|
45
|
+
}
|
46
|
+
ul li {
|
47
|
+
font-size: 12px;
|
48
|
+
list-style: square;
|
49
|
+
}
|
50
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// TODO: automatically generate a /app/assets/stylesheets/variables.sass
|
2
|
+
// so people know they can override them
|
3
|
+
|
4
|
+
$orange : #f58625 !default
|
5
|
+
$black : #201e1f !default
|
6
|
+
$grey : #4d4d4d !default
|
7
|
+
$blue : #3413ac !default
|
8
|
+
$white : darken(#fff, 1%) !default
|
9
|
+
$white-grey : darken($white, 5%) !default
|
10
|
+
$red : #fc401c !default
|
11
|
+
|
12
|
+
// site colors
|
13
|
+
$primary : $orange !default
|
14
|
+
$secondary : $blue !default
|
15
|
+
// general colors
|
16
|
+
$white_pure : #FFFFFF !default
|
17
|
+
$grey-light : #E4E4E4 !default
|
18
|
+
$grey-med : #888888 !default
|
19
|
+
$grey-dark : #343434 !default
|
20
|
+
$grey-blue : #3B4C57 !default
|
21
|
+
// logo colors
|
22
|
+
$orange-light : #F98728 !default
|
23
|
+
$orange-med : #F36321 !default
|
24
|
+
$orange-dark : #CE5F15 !default
|
25
|
+
$blue-light : #22619E !default
|
26
|
+
$offwhite : #FCF7F2 !default
|
27
|
+
// fonts
|
28
|
+
$font-body-family : 'Open Sans', sans-serif !default
|
29
|
+
$font-headlines-family : 'Open Sans', sans-serif !default
|
30
|
+
$font-bold : 600 !default
|
31
|
+
$font-reg : 300 !default
|
32
|
+
$font-light : 200 !default
|
33
|
+
$font-thin : 100 !default
|
34
|
+
|
35
|
+
// constants
|
36
|
+
$sidebar-width: 200px !default
|
37
|
+
|
38
|
+
// media
|
39
|
+
$breakpoint-tablet: 1000px !default
|
40
|
+
|
41
|
+
@import variable-overrides
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class BusListsController < ApplicationController
|
2
|
+
before_action :logged_in
|
3
|
+
before_action :check_user_has_questionnaire
|
4
|
+
before_action :find_questionnaire
|
5
|
+
before_action :find_bus_list
|
6
|
+
before_action :require_bus_captian
|
7
|
+
|
8
|
+
layout 'hackathon_manager'
|
9
|
+
|
10
|
+
def logged_in
|
11
|
+
authenticate_user!
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /bus_list
|
15
|
+
def show
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def find_questionnaire
|
21
|
+
@questionnaire = current_user.questionnaire
|
22
|
+
redirect_to root_path unless @questionnaire
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_bus_list
|
26
|
+
@bus_list = @questionnaire.bus_list
|
27
|
+
redirect_to root_path unless @bus_list
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_user_has_questionnaire
|
31
|
+
redirect_to root_path if current_user.questionnaire.nil?
|
32
|
+
end
|
33
|
+
|
34
|
+
def require_bus_captian
|
35
|
+
redirect_to root_path unless @questionnaire.is_bus_captain?
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module QuestionnairesControllable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def convert_school_name_to_id(questionnaire)
|
7
|
+
if questionnaire[:school_name]
|
8
|
+
school = School.where(name: questionnaire[:school_name]).first
|
9
|
+
school = School.create(name: questionnaire[:school_name]) if school.blank?
|
10
|
+
questionnaire[:school_id] = school.id
|
11
|
+
questionnaire.delete :school_name
|
12
|
+
end
|
13
|
+
questionnaire
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Manage::AdminsController < Manage::ApplicationController
|
2
|
+
before_action :find_user, only: [:show, :edit, :update, :destroy]
|
3
|
+
|
4
|
+
respond_to :html
|
5
|
+
|
6
|
+
def index
|
7
|
+
end
|
8
|
+
|
9
|
+
def datatable
|
10
|
+
render json: AdminDatatable.new(view_context)
|
11
|
+
end
|
12
|
+
|
13
|
+
def show
|
14
|
+
respond_with(:manage, @user)
|
15
|
+
end
|
16
|
+
|
17
|
+
def new
|
18
|
+
@user = ::User.new
|
19
|
+
respond_with(:manage, @user)
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
end
|
24
|
+
|
25
|
+
def create
|
26
|
+
@user = ::User.new(user_params.merge(password: Devise.friendly_token.first(10)))
|
27
|
+
if @user.save
|
28
|
+
@user.update_attribute(:admin, true)
|
29
|
+
@user.send_reset_password_instructions
|
30
|
+
end
|
31
|
+
respond_with(:manage, @user, location: manage_admins_path)
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
@user.update_attributes(user_params)
|
36
|
+
respond_with(:manage, @user, location: manage_admins_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy
|
40
|
+
@user.destroy
|
41
|
+
respond_with(:manage, @user, location: manage_admins_path)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def user_params
|
47
|
+
params.require(:user).permit(
|
48
|
+
:email, :password, :password_confirmation, :remember_me, :admin_limited_access
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_user
|
53
|
+
@user = ::User.find(params[:id])
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Manage::ApplicationController < ApplicationController
|
2
|
+
before_action :logged_in
|
3
|
+
before_action :limit_admin_access, only: ["edit", "update", "new", "create", "destroy", "convert_to_admin", "deliver", "merge", "perform_merge", "toggle_bus_captain", "duplicate", "update_acc_status", "send_update_email"]
|
4
|
+
|
5
|
+
def logged_in
|
6
|
+
authenticate_user!
|
7
|
+
return redirect_to root_path unless current_user.try(:admin?)
|
8
|
+
end
|
9
|
+
|
10
|
+
def limit_admin_access
|
11
|
+
redirect_to url_for(controller: controller_name, action: :index) if current_user.admin_limited_access
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Manage::BusListsController < Manage::ApplicationController
|
2
|
+
before_action :set_bus_list, only: [:show, :edit, :update, :destroy, :toggle_bus_captain, :send_update_email]
|
3
|
+
|
4
|
+
respond_to :html
|
5
|
+
|
6
|
+
def index
|
7
|
+
@bus_lists = BusList.all
|
8
|
+
respond_with(:manage, @bus_lists)
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
respond_with(:manage, @bus_list)
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
@bus_list = BusList.new
|
17
|
+
respond_with(:manage, @bus_list)
|
18
|
+
end
|
19
|
+
|
20
|
+
def edit
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
@bus_list = BusList.new(bus_list_params)
|
25
|
+
@bus_list.save
|
26
|
+
respond_with(:manage, @bus_list)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
@bus_list.update_attributes(bus_list_params)
|
31
|
+
respond_with(:manage, @bus_list)
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
School.where(bus_list_id: @bus_list.id).each do |school|
|
36
|
+
school.questionnaires.where(riding_bus: true).map { |q| q.update_attribute(:riding_bus, false) }
|
37
|
+
school.update_attribute(:bus_list_id, nil)
|
38
|
+
end
|
39
|
+
@bus_list.destroy
|
40
|
+
respond_with(:manage, @bus_list)
|
41
|
+
end
|
42
|
+
|
43
|
+
def toggle_bus_captain
|
44
|
+
@questionnaire = Questionnaire.find(params[:questionnaire_id])
|
45
|
+
is_bus_captain = params[:bus_captain] == "1"
|
46
|
+
@questionnaire.update_attribute(:is_bus_captain, is_bus_captain)
|
47
|
+
if @questionnaire.reload.is_bus_captain
|
48
|
+
Mailer.delay.bus_captain_confirmation_email(@bus_list.id, @questionnaire.user.id)
|
49
|
+
end
|
50
|
+
redirect_to [:manage, @bus_list]
|
51
|
+
end
|
52
|
+
|
53
|
+
def send_update_email
|
54
|
+
@bus_list.passengers.each do |passenger|
|
55
|
+
Mailer.delay.bus_list_update_email(passenger.id)
|
56
|
+
end
|
57
|
+
redirect_to [:manage, @bus_list]
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def bus_list_params
|
63
|
+
params.require(:bus_list).permit(
|
64
|
+
:name, :capacity, :notes, :needs_bus_captain
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
def set_bus_list
|
69
|
+
@bus_list = BusList.find(params[:id])
|
70
|
+
end
|
71
|
+
end
|