Further disabled employer portal for now.

This commit is contained in:
Nick Winter 2015-02-25 12:38:51 -08:00
parent d58d151b8c
commit 15ca65f226
3 changed files with 190 additions and 183 deletions

View file

@ -22,7 +22,8 @@ module.exports = class CocoRouter extends Backbone.Router
'account': go('account/MainAccountView')
'account/settings': go('account/AccountSettingsRootView')
'account/unsubscribe': go('account/UnsubscribeView')
'account/profile': go('user/JobProfileView') # legacy URL, sent in emails
#'account/profile': go('user/JobProfileView') # legacy URL, sent in emails
'account/profile': go('EmployersView') # Show the not-recruiting-now screen
'account/payments': go('account/PaymentsView')
'account/subscription': go('account/SubscriptionView')
@ -100,7 +101,8 @@ module.exports = class CocoRouter extends Backbone.Router
'test(/*subpath)': go('TestView')
'user/:slugOrID': go('user/MainUserView')
'user/:slugOrID/profile': go('user/JobProfileView')
#'user/:slugOrID/profile': go('user/JobProfileView')
'user/:slugOrID/profile': go('EmployersView') # Show the not-recruiting-now screen
'*name': 'showNotFoundView'

View file

@ -5,184 +5,184 @@ block content
h1(data-i18n="employers.deprecation_warning_title") Sorry, CodeCombat is not recruiting right now.
p(data-i18n="employers.deprecation_warning") We are focusing on beginner levels instead of finding expert developers for the time being.
.deprecated
.artisanal-claim
if me.get('anonymous')
a#login-link(data-i18n="login.log_in") Log In
br
if !isEmployer && !me.isAdmin()
#tagline
h1(data-i18n="employers.hire_developers_not_credentials") Hire developers, not credentials.
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
else
if !me.get('anonymous')
a#logout-link(data-i18n="login.log_out") Log Out
br
.row
- var fullProfiles = isEmployer || me.isAdmin();
if fullProfiles
#filter-column.col-md-3
#filter
.panel-group#filter_panel
a#filter-link(data-toggle="collapse" data-target="#collapseOne")
.panel.panel-default
.panel-heading
h4.panel-title
span.glyphicon.glyphicon-folder-open#folder-icon
| Filter
.panel-collapse.collapse.in#collapseOne
.panel-body
p
strong(data-i18n="employers.already_screened") We've already technically screened all our candidates
span(data-i18n="employers.filter_further") , but you can also filter further:
form#filters
.filter_section#visa_filter
h4(data-i18n="employers.filter_visa") Visa
label
input(type="checkbox" name="visa" value="Authorized to work in the US")
span(data-i18n="employers.filter_visa_yes") US Authorized
| (#{candidatesInFilter("visa","Authorized to work in the US")})
label
input(type="checkbox" name="visa" value="Need visa sponsorship")
span(data-i18n="employers.filter_visa_no") Not Authorized
| (#{candidatesInFilter("visa","Need visa sponsorship")})
.filter_section#school_filter
h4(data-i18n="account_profile.education") Education
label
input(type="checkbox" name="schoolFilter" value="Top School")
span(data-i18n="employers.filter_education_top") Top School
| (#{candidatesInFilter("schoolFilter","Top School")})
label
input(type="checkbox" name="schoolFilter" value="Other")
span(data-i18n="employers.filter_education_other") Other
| (#{candidatesInFilter("schoolFilter","Other")})
.filter_section#role_filter
h4(data-i18n="employers.candidate_role") Role
label
input(type="checkbox" name="roleFilter" value="Web Developer")
span(data-i18n="employers.filter_role_web_developer") Web Developer
| (#{candidatesInFilter("roleFilter","Web Developer")})
label
input(type="checkbox" name="roleFilter" value="Software Developer")
span(data-i18n="employers.filter_role_software_developer") Software Developer
| (#{candidatesInFilter("roleFilter","Software Developer")})
label
input(type="checkbox" name="roleFilter" value="Mobile Developer")
span(data-i18n="employers.filter_role_mobile_developer") Mobile Developer
| (#{candidatesInFilter("roleFilter","Mobile Developer")})
.filter_section#seniority_filter
h4(data-i18n="employers.filter_experience") Experience
label
input(type="checkbox" name="seniorityFilter" value="Senior")
span(data-i18n="employers.filter_experience_senior") Senior
| (#{candidatesInFilter("seniorityFilter","Senior")})
label
input(type="checkbox" name="seniorityFilter" value="Junior")
span(data-i18n="employers.filter_experience_junior") Junior
| (#{candidatesInFilter("seniorityFilter","Junior")})
label
input(type="checkbox" name="seniorityFilter" value="Recent Grad")
span(data-i18n="employers.filter_experience_recent_grad") Recent Grad
| (#{candidatesInFilter("seniorityFilter","Recent Grad")})
label
input(type="checkbox" name="seniorityFilter" value="College Student")
span(data-i18n="employers.filter_experience_student") College Student
| (#{candidatesInFilter("seniorityFilter","College Student")})
//input#select_all_checkbox(type="checkbox" name="select_all" checked)
//| Select all
p#results
| #{numberOfCandidates}
span(data-i18n="employers.results") results
h4#filter-alerts-heading Filter Email Alerts
p Get an email whenever a candidate meeting certain criteria enters the system.
table#saved-filter-table
thead
tr
th Filters
th Remove
tbody
button.btn#create-alert-button Create Alert with Current Filters
#candidates-column(class=fullProfiles ? "full-profiles col-md-9" : "teaser-profiles col-md-12")
if candidates.length
#candidate-table
table
tbody
for candidate, index in featuredCandidates
- var profile = candidate.get('jobProfile');
- var authorized = candidate.id; // If we have the id, then we are authorized.
- var profileAge = (new Date() - new Date(profile.updated)) / 86400 / 1000;
- var expired = profileAge > 2 * 30.4;
- var curated = profile.curated;
- var photoSize = fullProfiles ? 75 : 50;
tr.candidate-row(data-candidate-id=candidate.id, id=candidate.id, class=expired ? "expired" : "")
td(rowspan=3)
- var photoURL = candidate.getPhotoURL(photoSize, false, true);
div(class="candidate-picture " + (/^\/file/.test(photoURL) ? "" : "anonymous"), style='background-image: url(' + encodeURI(photoURL) + ')')
if fullProfiles
td.candidate-name-cell
strong= profile.name
| -
span= profile.jobTitle
tr.description_row(data-candidate-id=candidate.id)
if curated && curated.shortDescription
td.candidate-description
div #{curated.shortDescription}
else
td.candidate-description
div #{profile.shortDescription}
tr.border_row(data-candidate-id=candidate.id)
if curated
- var workHistory = curated.workHistory.join(",");
if !fullProfiles
td.tag_column
img(src="/images/pages/employer/tag.png")
| #{profile.jobTitle}
td.location_column
img(src="/images/pages/employer/location.png")
| #{curated.location}
td.education_column
img(src="/images/pages/employer/education.png")
| #{curated.education}
td.work_column
if workHistory
img(src="/images/pages/employer/briefcase.png")
| #{workHistory}
if !fullProfiles
div#info_wrapper
span.hiring-call-to-action
h2#start-hiring(data-i18n="employers.start_hiring") Start hiring.
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
h2#hiring-reasons.hiring-call-to-action(data-i18n="employers.reasons") Three reasons you should hire through us:
.reasons#top_row
.reason
img.employer_icon(src="/images/pages/employer/employer_icon2.png")
h3(data-i18n="employers.everyone_looking") Everyone here is looking for their next opportunity.
p(data-i18n="employers.everyone_looking_blurb") Forget about 20% LinkedIn InMail response rates. Everyone that we list on this site wants to find their next position and will respond to your request for an introduction.
.reason
img.employer_icon(src="/images/pages/employer/employer_icon6.png")
h3(data-i18n="employers.weeding") Sit back; we've done the weeding for you.
p(data-i18n="employers.weeding_blurb") Every player that we list has been screened for technical ability. We also perform phone screens for select candidates and make notes on their profiles to save you time.
.reason
img(class="employer_icon" src="/images/pages/employer/employer_icon3.png")
h3(data-i18n="employers.pass_screen") They will pass your technical screen.
p(data-i18n="employers.pass_screen_blurb") Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News.
span.hiring-call-to-action
h2(data-i18n="employers.make_hiring_easier") Make my hiring easier, please.
button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
.reasons#bottom_row
.reason_long
img.employer_icon(src="/images/pages/employer/employer_icon1.png")
.reason_text
h3(data-i18n="employers.what") What is CodeCombat?
p(data-i18n="employers.what_blurb") CodeCombat is a multiplayer browser programming game. Players write code to control their forces in battle against other developers. We support JavaScript, Python, Lua, Clojure, CoffeeScript, and Io.
.reason_long
img.employer_icon(src="/images/pages/employer/employer_icon5.png")
.reason_text
h3(data-i18n="employers.cost") How much do we charge?
p(data-i18n="employers.cost_blurb") We charge 15% of first year's salary and offer a 100% money back guarantee for 90 days. We don't charge for candidates who are already actively being interviewed at your company.
//.deprecated
// .artisanal-claim
// if me.get('anonymous')
// a#login-link(data-i18n="login.log_in") Log In
// br
// if !isEmployer && !me.isAdmin()
// #tagline
// h1(data-i18n="employers.hire_developers_not_credentials") Hire developers, not credentials.
// button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
// else
// if !me.get('anonymous')
// a#logout-link(data-i18n="login.log_out") Log Out
// br
// .row
// - var fullProfiles = isEmployer || me.isAdmin();
//
// if fullProfiles
// #filter-column.col-md-3
// #filter
// .panel-group#filter_panel
// a#filter-link(data-toggle="collapse" data-target="#collapseOne")
// .panel.panel-default
// .panel-heading
// h4.panel-title
// span.glyphicon.glyphicon-folder-open#folder-icon
// | Filter
// .panel-collapse.collapse.in#collapseOne
// .panel-body
// p
// strong(data-i18n="employers.already_screened") We've already technically screened all our candidates
// span(data-i18n="employers.filter_further") , but you can also filter further:
// form#filters
// .filter_section#visa_filter
// h4(data-i18n="employers.filter_visa") Visa
// label
// input(type="checkbox" name="visa" value="Authorized to work in the US")
// span(data-i18n="employers.filter_visa_yes") US Authorized
// | (#{candidatesInFilter("visa","Authorized to work in the US")})
// label
// input(type="checkbox" name="visa" value="Need visa sponsorship")
// span(data-i18n="employers.filter_visa_no") Not Authorized
// | (#{candidatesInFilter("visa","Need visa sponsorship")})
// .filter_section#school_filter
// h4(data-i18n="account_profile.education") Education
// label
// input(type="checkbox" name="schoolFilter" value="Top School")
// span(data-i18n="employers.filter_education_top") Top School
// | (#{candidatesInFilter("schoolFilter","Top School")})
// label
// input(type="checkbox" name="schoolFilter" value="Other")
// span(data-i18n="employers.filter_education_other") Other
// | (#{candidatesInFilter("schoolFilter","Other")})
// .filter_section#role_filter
// h4(data-i18n="employers.candidate_role") Role
// label
// input(type="checkbox" name="roleFilter" value="Web Developer")
// span(data-i18n="employers.filter_role_web_developer") Web Developer
// | (#{candidatesInFilter("roleFilter","Web Developer")})
// label
// input(type="checkbox" name="roleFilter" value="Software Developer")
// span(data-i18n="employers.filter_role_software_developer") Software Developer
// | (#{candidatesInFilter("roleFilter","Software Developer")})
// label
// input(type="checkbox" name="roleFilter" value="Mobile Developer")
// span(data-i18n="employers.filter_role_mobile_developer") Mobile Developer
// | (#{candidatesInFilter("roleFilter","Mobile Developer")})
// .filter_section#seniority_filter
// h4(data-i18n="employers.filter_experience") Experience
// label
// input(type="checkbox" name="seniorityFilter" value="Senior")
// span(data-i18n="employers.filter_experience_senior") Senior
// | (#{candidatesInFilter("seniorityFilter","Senior")})
// label
// input(type="checkbox" name="seniorityFilter" value="Junior")
// span(data-i18n="employers.filter_experience_junior") Junior
// | (#{candidatesInFilter("seniorityFilter","Junior")})
// label
// input(type="checkbox" name="seniorityFilter" value="Recent Grad")
// span(data-i18n="employers.filter_experience_recent_grad") Recent Grad
// | (#{candidatesInFilter("seniorityFilter","Recent Grad")})
// label
// input(type="checkbox" name="seniorityFilter" value="College Student")
// span(data-i18n="employers.filter_experience_student") College Student
// | (#{candidatesInFilter("seniorityFilter","College Student")})
//
// //input#select_all_checkbox(type="checkbox" name="select_all" checked)
// //| Select all
// p#results
// | #{numberOfCandidates}
// span(data-i18n="employers.results") results
// h4#filter-alerts-heading Filter Email Alerts
// p Get an email whenever a candidate meeting certain criteria enters the system.
// table#saved-filter-table
// thead
// tr
// th Filters
// th Remove
// tbody
// button.btn#create-alert-button Create Alert with Current Filters
//
// #candidates-column(class=fullProfiles ? "full-profiles col-md-9" : "teaser-profiles col-md-12")
// if candidates.length
// #candidate-table
// table
// tbody
// for candidate, index in featuredCandidates
// - var profile = candidate.get('jobProfile');
// - var authorized = candidate.id; // If we have the id, then we are authorized.
// - var profileAge = (new Date() - new Date(profile.updated)) / 86400 / 1000;
// - var expired = profileAge > 2 * 30.4;
// - var curated = profile.curated;
// - var photoSize = fullProfiles ? 75 : 50;
//
// tr.candidate-row(data-candidate-id=candidate.id, id=candidate.id, class=expired ? "expired" : "")
// td(rowspan=3)
// - var photoURL = candidate.getPhotoURL(photoSize, false, true);
// div(class="candidate-picture " + (/^\/file/.test(photoURL) ? "" : "anonymous"), style='background-image: url(' + encodeURI(photoURL) + ')')
// if fullProfiles
// td.candidate-name-cell
// strong= profile.name
// | -
// span= profile.jobTitle
// tr.description_row(data-candidate-id=candidate.id)
// if curated && curated.shortDescription
// td.candidate-description
// div #{curated.shortDescription}
// else
// td.candidate-description
// div #{profile.shortDescription}
// tr.border_row(data-candidate-id=candidate.id)
// if curated
// - var workHistory = curated.workHistory.join(",");
// if !fullProfiles
// td.tag_column
// img(src="/images/pages/employer/tag.png")
// | #{profile.jobTitle}
// td.location_column
// img(src="/images/pages/employer/location.png")
// | #{curated.location}
// td.education_column
// img(src="/images/pages/employer/education.png")
// | #{curated.education}
// td.work_column
// if workHistory
// img(src="/images/pages/employer/briefcase.png")
// | #{workHistory}
//
// if !fullProfiles
// div#info_wrapper
// span.hiring-call-to-action
// h2#start-hiring(data-i18n="employers.start_hiring") Start hiring.
// button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
//
// h2#hiring-reasons.hiring-call-to-action(data-i18n="employers.reasons") Three reasons you should hire through us:
// .reasons#top_row
// .reason
// img.employer_icon(src="/images/pages/employer/employer_icon2.png")
// h3(data-i18n="employers.everyone_looking") Everyone here is looking for their next opportunity.
// p(data-i18n="employers.everyone_looking_blurb") Forget about 20% LinkedIn InMail response rates. Everyone that we list on this site wants to find their next position and will respond to your request for an introduction.
// .reason
// img.employer_icon(src="/images/pages/employer/employer_icon6.png")
// h3(data-i18n="employers.weeding") Sit back; we've done the weeding for you.
// p(data-i18n="employers.weeding_blurb") Every player that we list has been screened for technical ability. We also perform phone screens for select candidates and make notes on their profiles to save you time.
// .reason
// img(class="employer_icon" src="/images/pages/employer/employer_icon3.png")
// h3(data-i18n="employers.pass_screen") They will pass your technical screen.
// p(data-i18n="employers.pass_screen_blurb") Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News.
// span.hiring-call-to-action
// h2(data-i18n="employers.make_hiring_easier") Make my hiring easier, please.
// button.btn.get-started-button.employer-button(data-i18n="employers.get_started") Get Started
// .reasons#bottom_row
// .reason_long
// img.employer_icon(src="/images/pages/employer/employer_icon1.png")
// .reason_text
// h3(data-i18n="employers.what") What is CodeCombat?
// p(data-i18n="employers.what_blurb") CodeCombat is a multiplayer browser programming game. Players write code to control their forces in battle against other developers. We support JavaScript, Python, Lua, Clojure, CoffeeScript, and Io.
// .reason_long
// img.employer_icon(src="/images/pages/employer/employer_icon5.png")
// .reason_text
// h3(data-i18n="employers.cost") How much do we charge?
// p(data-i18n="employers.cost_blurb") We charge 15% of first year's salary and offer a 100% money back guarantee for 90 days. We don't charge for candidates who are already actively being interviewed at your company.

View file

@ -27,20 +27,24 @@ module.exports = class EmployersView extends RootView
constructor: (options) ->
super options
return
@candidates = @supermodel.loadCollection(new CandidatesCollection(), 'candidates').model
@setFilterDefaults()
onLoaded: ->
super()
return
@setUpScrolling()
afterRender: ->
super()
return
@sortTable() if @candidates.models.length
@renderSavedFilters()
afterInsert: ->
super()
return
_.delay @checkForEmployerSignupHash, 500
#fairly hacky, change this in the future
@originalBackgroundColor = $('body').css 'background-color'
@ -176,6 +180,7 @@ module.exports = class EmployersView extends RootView
getRenderData: ->
ctx = super()
return ctx
ctx.isEmployer = @isEmployer()
#If you change the candidates displayed, change candidatesInFilter()
ctx.candidates = _.sortBy @candidates.models, (c) -> -1 * c.get('jobProfile').experience