mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-23 23:58:02 -05:00
Further disabled employer portal for now.
This commit is contained in:
parent
d58d151b8c
commit
15ca65f226
3 changed files with 190 additions and 183 deletions
|
@ -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'
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue