diff --git a/app.js b/app.js index 04df5cdf07..e431ac361f 100755 --- a/app.js +++ b/app.js @@ -43,6 +43,7 @@ var express = require('express'), fieldGuideController = require('./controllers/fieldGuide'), challengeMapController = require('./controllers/challengeMap'), challengeController = require('./controllers/challenge'), + jobsController = require('./controllers/jobs'), /** * Stories @@ -159,9 +160,8 @@ var trusted = [ '*.ytimg.com', '*.bitly.com', 'http://cdn.inspectlet.com/', - 'http://hn.inspectlet.com/', - '*.simplyhired.com', - '*.simply-partner.com' + 'wss://inspectletws.herokuapp.com/', + 'http://hn.inspectlet.com/' ]; app.use(helmet.csp({ @@ -269,8 +269,6 @@ app.get('/pmi-acp-agile-project-managers-form', app.get('/nonprofits', resourcesController.nonprofits); -app.get('/nonprofits/getNonprofitList', nonprofitController.showAllNonprofits); - app.get('/nonprofits-form', resourcesController.nonprofitsForm); app.get('/map', @@ -354,7 +352,7 @@ app.get( app.get( '/jobs', - resourcesController.jobs + jobsController.jobsDirectory ); app.get( diff --git a/controllers/jobs.js b/controllers/jobs.js new file mode 100644 index 0000000000..5d0cd348cf --- /dev/null +++ b/controllers/jobs.js @@ -0,0 +1,14 @@ +var moment = require('moment'), + Job = require('./../models/Job'), + resources = require('./resources'); + +exports.jobsDirectory = function(req, res, next) { + Job.find({}, function(err, jobs) { + if (err) { return next(err); } + + res.render('jobs/directory', { + title: 'Junior JavaScript Engineer Jobs', + jobs: jobs + }); + }); +}; diff --git a/controllers/nonprofits.js b/controllers/nonprofits.js index 77a2f04a8f..d0a3aa0798 100644 --- a/controllers/nonprofits.js +++ b/controllers/nonprofits.js @@ -13,92 +13,6 @@ exports.nonprofitsDirectory = function(req, res, next) { }); }; -exports.areYouWithARegisteredNonprofit = function(req, res) { - res.render('nonprofits/are-you-with-a-registered-nonprofit', { - title: 'Are you with a with a registered nonprofit', - step: 1 - }); -}; - -exports.areTherePeopleThatAreAlreadyBenefitingFromYourServices = - function(req, res) { - res.render( - 'nonprofits/' + - 'are-there-people-that-are-already-benefiting-from-your-services', - { - title: 'Are there people already benefiting from your services', - step: 2 - } - ); - }; - -exports.okWithJavaScript = function(req, res) { - res.render('nonprofits/ok-with-javascript', { - title: 'Are you OK with us using JavaScript', - step: 3 - }); -}; - -exports.inExchangeWeAsk = function(req, res) { - res.render('nonprofits/in-exchange-we-ask', { - title: 'In exchange we ask that you ...', - step: 4 - }); -}; - -exports.howCanFreeCodeCampHelpYou = function(req, res) { - res.render('nonprofits/how-can-free-code-camp-help-you', { - title: 'Are you with a with a registered nonprofit', - step: 5 - }); -}; - -exports.whatDoesYourNonprofitDo = function(req, res) { - res.render('nonprofits/what-does-your-nonprofit-do', { - existingParams: req.params, - title: 'What does your nonprofit do?', - step: 6 - }); -}; - -exports.linkUsToYourWebsite = function(req, res) { - res.render('nonprofits/link-us-to-your-website', { - title: 'Link us to your website', - step: 7 - }); -}; - -exports.tellUsYourEmail = function(req, res) { - res.render('nonprofits/tell-us-your-email', { - title: 'Tell us your email', - step: 8 - }); -}; - -exports.tellUsYourName = function(req, res) { - res.render('nonprofits/tell-us-your-name', { - title: 'Tell us your name', - step: 9 - }); -}; - -exports.yourNonprofitProjectApplicationHasBeenSubmitted = function(req, res) { - res.render( - 'nonprofits/your-nonprofit-project-application-has-been-submitted', - { - title: 'Your Nonprofit Project application has been submitted!', - step: 10, - getBackDay: moment().weekday(5).format('dddd') - } - ); -}; - -exports.otherSolutions = function(req, res) { - res.render('nonprofits/other-solutions', { - title: 'Here are some other possible solutions for you' - }); -}; - exports.returnIndividualNonprofit = function(req, res, next) { var dashedName = req.params.nonprofitName; var nonprofitName = dashedName.replace(/\-/g, ' '); @@ -179,12 +93,6 @@ exports.returnIndividualNonprofit = function(req, res, next) { ); }; -exports.showAllNonprofits = function(req, res) { - var data = {}; - data.nonprofitsList = resources.allNonprofitNames(); - res.send(data); -}; - exports.interestedInNonprofit = function(req, res, next) { if (req.user) { Nonprofit.findOne( diff --git a/controllers/resources.js b/controllers/resources.js index c30def54e5..28030eacf1 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -234,12 +234,6 @@ module.exports = { } }, - jobs: function jobs(req, res) { - res.render('resources/jobs', { - title: 'Job Board for Front End Developer and Full Stack JavaScript Developer Jobs' - }); - }, - jobsForm: function jobsForm(req, res) { res.render('resources/jobs-form', { title: 'Employer Partnership Form for Job Postings, Recruitment and Corporate Sponsorships' @@ -607,8 +601,8 @@ module.exports = { var challenge = req.body.payload.challenge; slack.send({ - text: "*" + userName + "* wants help with " + challenge + ". " + - code + "Hey, *" + userName + "*, if no one helps you right " + + text: "*@" + userName + "* wants help with " + challenge + ". " + + code + "Hey, *@" + userName + "*, if no one helps you right " + "away, try typing out your problem in detail to me. Like this: " + "http://en.wikipedia.org/wiki/Rubber_duck_debugging", channel: '#help', @@ -622,8 +616,8 @@ module.exports = { var userName = req.user.profile.username; var challenge = req.body.payload.challenge; slack.send({ - text: "Anyone want to pair with @" + userName + " on " + challenge + - "?\nMake sure you install Screen Hero here:" + + text: "Anyone want to pair with *@" + userName + "* on " + challenge + + "?\nMake sure you install Screen Hero here: " + "http://freecodecamp.com/field-guide/how-do-i-install-screenhero\n" + "Then start your pair program session with *@" + userName + "* by typing \"/hero @" + userName + "\" into Slack.\n And *@"+ userName + diff --git a/models/Job.js b/models/Job.js new file mode 100644 index 0000000000..9f5f444e14 --- /dev/null +++ b/models/Job.js @@ -0,0 +1,18 @@ +var mongoose = require('mongoose'); +var secrets = require('../config/secrets'); + +/** + * + * @type {exports.Schema} + */ + +var Long = mongoose.Types.Long; +var jobSchema = new mongoose.Schema({ + position: String, + company: String, + logoUrl: String, + postingUrl: String, + copy: Array +}); + +module.exports = mongoose.model('Job', jobSchema); diff --git a/public/js/main_0.0.2.js b/public/js/main_0.0.2.js index b2791bdaeb..2d92d33321 100644 --- a/public/js/main_0.0.2.js +++ b/public/js/main_0.0.2.js @@ -17,7 +17,7 @@ $(document).ready(function() { setCSRFToken($('meta[name="csrf-token"]').attr('content')); $('#i-want-help').on('click', function() { - /* + $('#help-modal').modal('hide'); var editorValue = editor.getValue(); var currentLocation = window.location.href; $.post( @@ -34,11 +34,10 @@ $(document).ready(function() { } } ); - */ }); $('#i-want-help-editorless').on('click', function() { - /* + $('#help-editorless-modal').modal('hide'); var currentLocation = window.location.href; $.post( '/get-help', @@ -53,14 +52,15 @@ $(document).ready(function() { } } ); - */ }); $('#report-issue').on('click', function() { - window.open('https://github.com/freecodecamp/freecodecamp/issues/new?title=Challenge '+ window.location.href +' has an issue &body=Please%20tell%20us%20in%20detail%20here%20how%20we%20can%20make%20this%20challenge%20better.', '_blank') + $('#issue-modal').modal('hide'); + window.open('https://github.com/freecodecamp/freecodecamp/issues/new?&body=Challenge '+ window.location.href +' has an issue. Please describe how to reproduce it, and include links to screen shots if possible.', '_blank') }); $('#i-want-to-pair').on('click', function() { + $('#pair-modal').modal('hide'); var currentLocation = window.location.href; $.post( '/get-pair', @@ -138,6 +138,26 @@ $(document).ready(function() { $('#complete-courseware-dialog').modal('show'); }); + $('#completed-courseware-editorless').on('click', function() { + $('#complete-courseware-editorless-dialog').modal('show'); + }); + + $('#trigger-pair-modal').on('click', function() { + $('#pair-modal').modal('show'); + }); + + $('#trigger-help-modal').on('click', function() { + $('#help-modal').modal('show'); + }); + + $('#trigger-help-editorless-modal').on('click', function() { + $('#help-editorless-modal').modal('show'); + }); + + $('#trigger-issue-modal').on('click', function() { + $('#issue-modal').modal('show'); + }); + $('#completed-zipline-or-basejump').on('click', function() { $('#complete-zipline-or-basejump-dialog').modal('show'); }); @@ -145,6 +165,11 @@ $(document).ready(function() { $('#complete-courseware-dialog').on('hidden.bs.modal', function() { editor.focus(); }); + + $('#complete-challenge-dialog').on('hidden.bs.modal', function() { + editor.focus(); + }); + var challengeTypes = { 'HTML_CSS_JQ': 0, 'JAVASCRIPT': 1, @@ -160,7 +185,6 @@ $(document).ready(function() { case challengeTypes.HTML_CSS_JQ: case challengeTypes.JAVASCRIPT: case challengeTypes.VIDEO: - console.log(challenge_Id); $.post( '/completed-challenge/', { diff --git a/seed_data/challenges/functional-programming.json b/seed_data/challenges/functional-programming.json index e13124b304..c82ff09d36 100644 --- a/seed_data/challenges/functional-programming.json +++ b/seed_data/challenges/functional-programming.json @@ -6,7 +6,7 @@ "_id": "bd7129d8c441eddfbeb5bddf", "name": "Waypoint: Practice Functional Programming", "difficulty": 0.01, - "challengeSeed": "114604814", + "challengeSeed": "129169463", "description": [ "Functional programming holds the key to unlocking JavaScript's powerful asynchronous features.", "Jafar Husain's 42-step interactive Functional Programming course will familiarize you with the various ways you can recombine these functions.", diff --git a/seed_data/field-guides.json b/seed_data/field-guides.json index ebd3384f7a..56439c60a3 100644 --- a/seed_data/field-guides.json +++ b/seed_data/field-guides.json @@ -297,6 +297,7 @@ "
  • Berkeley
  • ", "
  • Berlin
  • ", "
  • Bhaktapur
  • ", + "
  • Bijeljina
  • ", "
  • Bismarck, ND
  • ", "
  • Bogota
  • ", "
  • Boston
  • ", @@ -413,6 +414,7 @@ "
  • Tirana
  • ", "
  • Tulsa
  • ", "
  • Verde Valley
  • ", + "
  • Valencia
  • ", "
  • Washington, DC
  • ", " ", " ", diff --git a/seed_data/jobs.json b/seed_data/jobs.json new file mode 100644 index 0000000000..3ba4fad93e --- /dev/null +++ b/seed_data/jobs.json @@ -0,0 +1,30 @@ +[ + { + "id": "bd7167d8c441cbafaeb5bdef", + "company": "Livestream", + "position": "Junior Backend Developer (Node.js)", + "logoUrl": "https://s3.amazonaws.com/prod-heroku/greenhouse_job_boards/logos/000/001/189/resized/livestream_logo-rgb_standard-cc718e67ce1a0f6fa400f609bdefe605.png?1429547161", + "postingUrl": "https://boards.greenhouse.io/livestream/jobs/59458?t=ek25h0#.VWeTk1xVhBc?source=freecodecamp.com" + }, + { + "id": "bd7167d8c442cbafaeb5bdef", + "company": "Adobe", + "position": "Junior JavaScript Engineer", + "logoUrl": "http://cdn-3.famouslogos.us/images/adobe-logo.jpg", + "postingUrl": "https://adobe.taleo.net/careersection/2/jobdetail.ftl?job=32619&lang=en" + }, + { + "id": "bd7167d8c443cbafaeb5bdef", + "company": "Bookspan", + "position": "Full Stack JavaScript Developer (Junior)", + "logoUrl": "https://tm-prod.global.ssl.fastly.net/uploaded/companies/227/small_logo.png?v=db9dbe", + "postingUrl": "http://bookspan.theresumator.com/apply/10190b666b74087b537f4659756f7c5679000704722064232c1d2e3b2b102501310437/Fullstack-Javascript-Developer-junior?source=freecodecamp.com&sid=zvi9YD9OcHwoDZNgM3XI9uPszGvqxJo6eHf" + }, + { + "id": "bd7167d8c444cbafaeb5bdef", + "company": "Good Eggs", + "position": "Full Stack Developer", + "logoUrl": "https://d1qb2nb5cznatu.cloudfront.net/startups/i/72165-64efbd521cdfe3357c811758f5436e7d-medium_jpg.jpg", + "postingUrl": "http://www.jobscore.com/jobs2/goodeggs/full-stack-developer/cQ_hd-0USr4Om7eJe4iefn?Board=freecodecamp.com" + } +] diff --git a/seed_data/seed.js b/seed_data/seed.js index 351d78da67..0221952d72 100644 --- a/seed_data/seed.js +++ b/seed_data/seed.js @@ -2,17 +2,19 @@ require('dotenv').load(); var Challenge = require('../models/Challenge.js'), FieldGuide = require('../models/FieldGuide.js'), Nonprofit = require('../models/Nonprofit.js'), + Job = require('../models/Job.js'), mongoose = require('mongoose'), secrets = require('../config/secrets'), fieldGuides = require('./field-guides.json'), nonprofits = require('./nonprofits.json'), + jobs = require('./jobs.json'), fs = require('fs'); mongoose.connect(secrets.db); var challenges = fs.readdirSync(__dirname + '/challenges'); var counter = 0; -var offerings = 2 + challenges.length; +var offerings = 3 + challenges.length; var CompletionMonitor = function() { counter++; @@ -42,6 +44,7 @@ Challenge.remove({}, function(err, data) { }); }); }); + FieldGuide.remove({}, function(err, data) { if (err) { console.error(err); @@ -75,3 +78,20 @@ Nonprofit.remove({}, function(err, data) { }); console.log('nonprofits'); }); + +Job.remove({}, function(err, data) { + if (err) { + console.error(err); + } else { + console.log('Deleted ', data); + } + Job.create(jobs, function(err, data) { + if (err) { + console.log(err); + } else { + console.log('Saved ', data); + } + CompletionMonitor(); + }); + console.log('jobs'); +}); diff --git a/views/account/account.jade b/views/account/account.jade index 3ad7a8d442..1f7495fd50 100644 --- a/views/account/account.jade +++ b/views/account/account.jade @@ -260,28 +260,28 @@ block content .panel.panel-info .panel-heading.text-center Manage your account here: .panel-body - - if (!user.google || !user.facebook || !user.linkedin || !user.twitter) - - if (!user.google) + if (!user.google || !user.facebook || !user.linkedin || !user.twitter) + if (!user.google) .col-xs-12 a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/auth/google') i.fa.fa-google-plus | Link Google with my account - - if (!user.facebook) + if (!user.facebook) .col-xs-12 a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/auth/facebook') i.fa.fa-facebook | Link Facebook with my account - //- if (!user.github) + //if (!user.github) // .col-xs-12 // a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/auth/github') // i.fa.fa-github // | Link GitHub with my account - - if (!user.linkedin) + if (!user.linkedin) .col-xs-12 a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/auth/linkedin') i.fa.fa-linkedin | Link LinkedIn with my account - - if (!user.twitter) + if (!user.twitter) .col-xs-12 a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/auth/twitter') i.fa.fa-twitter diff --git a/views/account/show.jade b/views/account/show.jade index 821aa3aac1..53f95cf724 100644 --- a/views/account/show.jade +++ b/views/account/show.jade @@ -23,15 +23,15 @@ block content else img.img-center.img-responsive.public-profile-img(src='https://s3.amazonaws.com/freecodecamp/camper-image-placeholder.png') h1.text-center.negative-5.profile-social-icons - - if (twitterHandle) + if (twitterHandle) a.fa.fa-twitter-square.text-primary(title="@#{username}'s Twitter Profile", href="http://twitter.com/#{twitterHandle}", target='_blank') - - if (githubProfile) + if (githubProfile) a.fa.fa-github-square.text-primary(title="@#{username}'s GitHub Profile", href=githubProfile, target='_blank') - - if (codepenProfile) + if (codepenProfile) a.ion-social-codepen.text-primary(title="@#{username}'s CodePen Profile", href=codepenProfile, target='_blank') - - if (linkedinProfile) + if (linkedinProfile) a.fa.fa-linkedin-square.text-primary(title="@#{username}'s LinkedIn Profile", href=linkedinProfile, target='_blank') - - if (facebookProfile) + if (facebookProfile) a.fa.fa-facebook-square.text-primary(title="@#{username}'s Facebook Profile", href=facebookProfile, target='_blank') .visible-md.visible-lg .col-xs-12.col-sm-12.col-md-4.text-justify @@ -137,7 +137,7 @@ block content h4.col-sm-6.text-left Current Streak: #{currentStreak} - - if (challenges.length > 0) + if (challenges.length > 0) .col-sm-12 table.table.table-striped thead @@ -154,7 +154,7 @@ block content a(href=challenge.solution, target='_blank') View my solution br - - if (bonfires.length > 0) + if (bonfires.length > 0) .col-sm-12 table.table.table-striped thead diff --git a/views/coursewares/showBonfire.jade b/views/coursewares/showBonfire.jade index 8535dc1d54..b09968ebe3 100644 --- a/views/coursewares/showBonfire.jade +++ b/views/coursewares/showBonfire.jade @@ -94,13 +94,13 @@ block content if (user && user.sentSlackInvite) .button-spacer .btn-group.input-group.btn-group-justified - label.btn.btn-success#i-want-help(disabled) + label.btn.btn-success#trigger-help-modal i.fa.fa-medkit - |   Help(disabled) - label.btn.btn-success#i-want-to-pair + |   Help + label.btn.btn-success#trigger-pair-modal i.fa.fa-user-plus |   Pair - label.btn.btn-success#report-issue + label.btn.btn-success#trigger-issue-modal i.fa.fa-bug |   Bug .button-spacer @@ -136,20 +136,21 @@ block content .text-center .animated.zoomInDown.delay-half span.completion-icon.ion-checkmark-circled.text-primary - - if (user) + if (user) a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) Go to my next challenge (ctrl + enter) - - if (user.progressTimestamps.length > 2) - a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank", href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Bonfire:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript") + if (user.progressTimestamps.length > 2) + a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank", href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript") i.fa.fa-twitter   = phrase - - else + else a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress - + include ../partials/challenge-modals script. var MDNlinks = !{JSON.stringify(MDNlinks)}; if (!MDNlinks.length) { $('#MDN-links').addClass('collapse'); } + diff --git a/views/coursewares/showHTML.jade b/views/coursewares/showHTML.jade index 6451bfb2c4..6867cb4b4b 100644 --- a/views/coursewares/showHTML.jade +++ b/views/coursewares/showHTML.jade @@ -38,7 +38,7 @@ block content span.ion-arrow-up-b | Less information br - - if (user) + if (user) a.btn.btn-primary.btn-big.btn-block#next-courseware-button | Go to my next challenge br @@ -46,16 +46,16 @@ block content if (user.sentSlackInvite) .button-spacer .btn-group.input-group.btn-group-justified - label.btn.btn-success#i-want-help(disabled) + label.btn.btn-success#trigger-help-modal i.fa.fa-medkit - |   Help(disabled) - label.btn.btn-success#report-issue + |   Help + label.btn.btn-success#trigger-issue-modal i.fa.fa-bug |   Bug .button-spacer script. var userLoggedIn = true; - - else + else a.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress script. var userLoggedIn = false; @@ -91,4 +91,5 @@ block content .animated.zoomInDown.delay-half span.completion-icon.ion-checkmark-circled.text-primary a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress + include ../partials/challenge-modals script(src="/js/lib/coursewares/coursewaresHCJQFramework_0.1.7.js") diff --git a/views/coursewares/showJS.jade b/views/coursewares/showJS.jade index f6d6f62979..43d954a2f2 100644 --- a/views/coursewares/showJS.jade +++ b/views/coursewares/showJS.jade @@ -38,13 +38,13 @@ block content if (user && user.sentSlackInvite) .button-spacer .btn-group.input-group.btn-group-justified - label.btn.btn-success#i-want-help + label.btn.btn-success#trigger-help-modal i.fa.fa-medkit |   Help - label.btn.btn-success#i-want-to-pair + label.btn.btn-success#trigger-pair-modal i.fa.fa-user-plus |   Pair - label.btn.btn-success#report-issue + label.btn.btn-success#trigger-issue-modal i.fa.fa-bug |   Bug .spacer @@ -77,11 +77,12 @@ block content .text-center .animated.zoomInDown.delay-half span.completion-icon.ion-checkmark-circled.text-primary - - if (user) + if (user) a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid && existingUser.length > 0') Go to my next challenge (ctrl + enter) - - if (points && points > 2) - a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Bonfire:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/bonfires/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank") + if (points && points > 2) + a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank") i.fa.fa-twitter   = phrase - - else + else a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress + include ../partials/challenge-modals diff --git a/views/coursewares/showVideo.jade b/views/coursewares/showVideo.jade index 9cd162988d..4e9d82a6ec 100644 --- a/views/coursewares/showVideo.jade +++ b/views/coursewares/showVideo.jade @@ -17,16 +17,16 @@ block content iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}') br if (user) - a.btn.btn-primary.btn-big.btn-block#completed-courseware I've completed this challenge (ctrl + enter) + a.btn.btn-primary.btn-big.btn-block#completed-courseware-editorless I've completed this challenge (ctrl + enter) script. var userLoggedIn = true; .button-spacer if (user.sentSlackInvite) .btn-group.input-group.btn-group-justified - .btn.btn-success.btn-big#i-want-help-editorless(disabled) + .btn.btn-success.btn-big#trigger-help-editorless-modal i.fa.fa-medkit - |   Get help(disabled) - .btn.btn-success.btn-big#report-issue + |   Get help + .btn.btn-success.btn-big#trigger-issue-modal i.fa.fa-bug |   Report a bug .button-spacer @@ -41,22 +41,21 @@ block content var controlEnterHandler = function(e) { $('body').unbind('keypress'); if (e.ctrlKey && e.keyCode == 13) { - $('#complete-courseware-dialog').modal('show'); + $('#complete-courseware-editorless-dialog').modal('show'); } else { $('body').bind('keypress', controlEnterHandler); } }; var modalControlEnterHandler = function(e) { - $('#complete-courseware-dialog').unbind('keypress'); + $('#complete-courseware-editorless-dialog').unbind('keypress'); if (e.ctrlKey && e.keyCode == 13) { $('#next-courseware-button').click(); } else { - $('#complete-courseware-dialog').bind('keypress', modalControlEnterHandler); + $('#complete-courseware-editorless-dialog').bind('keypress', modalControlEnterHandler); } }; - - #complete-courseware-dialog.modal(tabindex='-1') + #complete-courseware-editorless-dialog.modal(tabindex='-1') .modal-dialog.animated.zoomIn.fast-animation .modal-content .modal-header.challenge-list-header= compliment @@ -65,17 +64,17 @@ block content .text-center .animated.zoomInDown.delay-half span.completion-icon.ion-checkmark-circled.text-primary - - if (user) + if (user) a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf) On to my next challenge (ctrl + enter) script. - $('#complete-courseware-dialog').bind('keypress', modalControlEnterHandler); + $('#complete-courseware-editorless-dialog').bind('keypress', modalControlEnterHandler); - - if (user.progressTimestamps.length > 2) + if (user.progressTimestamps.length > 2) .button-spacer - a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20Challenge:%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank") + a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(href="https://twitter.com/intent/tweet?text=I%20just%20#{verb}%20%40FreeCodeCamp%20#{name}&url=http%3A%2F%2Ffreecodecamp.com/challenges/#{dashedName}&hashtags=LearnToCode, JavaScript" target="_blank") i.fa.fa-twitter   = phrase - - else + else a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress h1 #{name} script. @@ -84,3 +83,4 @@ block content var challenge_Id = !{JSON.stringify(challengeId)}; var challenge_Name = !{JSON.stringify(name)}; var challengeType = !{JSON.stringify(challengeType)}; + include ../partials/challenge-modals diff --git a/views/coursewares/showZiplineOrBasejump.jade b/views/coursewares/showZiplineOrBasejump.jade index a114e96d0e..ae72c47528 100644 --- a/views/coursewares/showZiplineOrBasejump.jade +++ b/views/coursewares/showZiplineOrBasejump.jade @@ -21,13 +21,13 @@ block content if (user.sentSlackInvite) .button-spacer .btn-group.input-group.btn-group-justified - .btn.btn-success.btn-big#i-want-help-editorless(disabled) + .btn.btn-success.btn-big#trigger-help-editorless-modal i.fa.fa-medkit - |   Help(disabled) - .btn.btn-success.btn-big#i-want-to-pair + |   Help + .btn.btn-success.btn-big#trigger-pair-modal i.fa.fa-user-plus |   Pair - .btn.btn-success.btn-big#report-issue + .btn.btn-success.btn-big#trigger-issue-modal i.fa.fa-bug |   Bug .button-spacer @@ -69,7 +69,7 @@ block content .text-center .animated.zoomInDown.delay-half span.completion-icon.ion-checkmark-circled.text-primary - - if (user) + if (user) form.form-horizontal(novalidate='novalidate', name='completedWithForm') .form-group.text-center .col-xs-10.col-xs-offset-1.col-sm-8.col-sm-offset-2.col-md-8.col-md-offset-2.animated.fadeIn @@ -91,13 +91,8 @@ block content a.animated.fadeIn.btn.btn-lg.btn-primary.btn-block#next-courseware-button(name='_csrf', value=_csrf, ng-disabled='completedWithForm.$invalid') Go to my next challenge (ctrl + enter) script. $('#complete-zipline-or-basejump-dialog').on('keypress', modalControlEnterHandler); - - if (user.progressTimestamps.length > 2) - .button-spacer - a.animated.fadeIn.btn.btn-lg.btn-block.btn-twitter(target="_blank") - i.fa.fa-twitter   - = phrase else a.animated.fadeIn.btn.btn-lg.signup-btn.btn-block(href='/login') Sign in so you can save your progress script. $('body').on('keypress', controlEnterHandler); + include ../partials/challenge-modals diff --git a/views/home.jade b/views/home.jade index 9cc4414cdb..f1058309b5 100644 --- a/views/home.jade +++ b/views/home.jade @@ -4,7 +4,7 @@ block content if (user && user.progressTimestamps.length > 0) .col-xs-12 .embed-responsive.embed-responsive-16by9 - iframe.embed-responsive-item(src='//player.vimeo.com/video/128853855') + iframe.embed-responsive-item(src='//player.vimeo.com/video/129168884') br h3 Note: If you're using Firefox and the buttons aren't working, do a full refresh (control + f5 on Windows and command + shift + r on Mac). We're working on this. h3 Note: If you've already completed the HTML, CSS, Bootstrap Waypoints, you do not need to do these new Waypoints. diff --git a/views/jobs/directory.jade b/views/jobs/directory.jade new file mode 100644 index 0000000000..b3d598e57b --- /dev/null +++ b/views/jobs/directory.jade @@ -0,0 +1,33 @@ +extends ../layout +block content + script. + var challengeName = 'Jobs View'; + .row + + .panel.panel-info + .panel-heading.text-center Junior JavaScript Engineer Jobs + .panel-body + .col-xs-12.col-sm-12.col-md-10.col-md-offset-1 + h2.text-center We want all our campers to get awesome software engineer jobs. + h2.text-center + a(href='https://www.linkedin.com/groups?viewMembers=&gid=6966827&sik=1432338555021' target='_blank') Many already have + | . + p.text-center.large-p.hidden-xs.hidden-sm This is a small sampling of the 1,000s of junior software engineer jobs. Learn about the   + a(href='http://blog.freecodecamp.com/2014/10/the-real-reason-to-learn-mean-stack.html' target='_blank') the job market in aggregate + | . + .spacer + + .text-center + a.btn.btn-primary.btn-big(href='/jobs-form') My organization is hiring software engineers + .spacer + .spacer + for job in jobs + .spacer + .row + .col-xs-12.col-sm-2 + img.img-responsive.img-center(src=job.logoUrl) + .col-xs-12.col-sm-10 + h2.negative-15= job.position + h3.negative-15= job.company + a.text-center.btn.btn-primary.btn-lg(href=job.postingUrl target='_blank') More info + .spacer diff --git a/views/nonprofits/other-solutions.jade b/views/nonprofits/other-solutions.jade deleted file mode 100644 index 752728e772..0000000000 --- a/views/nonprofits/other-solutions.jade +++ /dev/null @@ -1,65 +0,0 @@ -extends ../layout -block content - .jumbotron.text-center - h1.hug-top Here are some other solutions we recommend - .spacer - h2 Please note that Free Code Camp is not partnered with, nor do we receive a referral fee from, any of the following providers. We simply want to help guide you towards a solution for your organization. - h3 Skills-based Volunteer Organizations - ul - li - a(href='http://www.volunteermatch.com') Volunteer Match - li - a(href='http://www.catchafire.com') Catchafire - h3 DIY Websites - ul - li - a(href='http://www.wix.com') Wix - li - a(href='http://www.squarespace.com/') Square Space - - h3 Donor and Volunteer Management Systems - ul - li - a(href='https://www.thedatabank.com/') The Data Bank - li - a(href='http://www.donorsnap.com/') DonorSnap - li - a(href='http://www.donorperfect.com/') Donor Perfect - li - a(href='https://www.blackbaud.com/fundraising-crm/etapestry-donor-management') eTapestry - li - a(href='http://www.z2systems.com/') NeonCRM - li - a(href='http://www.regpacks.com/volunteer-management/') Regpack - li - a(href='http://sumac.com/') Sumac - li - a(href='http://www.volgistics.com/') Volgistics - h3 Inventory Management Systems - ul - li - a(href='https://www.ezofficeinventory.com/industries/non-profits') EZ Office Inventory - li - a(href='https://www.ordoro.com') Ordoro - li - a(href='http://www.unleashedsoftware.com') Unleashed - h3 E-Learning platforms - ul - li - a(href='http://www.dokeos.com/') Dokeos - li - a(href='http://www.efrontlearning.net/') eFront - li - a(href='https://moodle.org/') Moodle - li - a(href='https://sakaiproject.org/') Sakai - h3 Community Management - ul - li - a(href='https://civicrm.org/') CiviCRM - li - a(href='http://tcmgr.com/') Total Community Manager - h3 Electronic Forms - ul - li - a(href='http://www.google.com/forms') Google Forms diff --git a/views/partials/challenge-modals.jade b/views/partials/challenge-modals.jade new file mode 100644 index 0000000000..5270e77cd4 --- /dev/null +++ b/views/partials/challenge-modals.jade @@ -0,0 +1,52 @@ +#pair-modal.modal(tabindex='-1') + .modal-dialog.animated.zoomIn.fast-animation + .modal-content + .modal-header.challenge-list-header Ready to pair program? + a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') × + .modal-body.text-center + h3 This will create a pair programming request. + h3 You'll need   + a(href='/field-guide/how-do-i-install-screenhero' target='_blank') Screen Hero + | . + h3 Other campers may then message you about pair programming. + a.btn.btn-lg.btn-primary.btn-block#i-want-to-pair(name='_csrf', value=_csrf) Create my pair request + a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel + +#issue-modal.modal(tabindex='-1') + .modal-dialog.animated.zoomIn.fast-animation + .modal-content + .modal-header.challenge-list-header Did you find a bug? + a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') × + .modal-body.text-center + h3 This will open our GitHub Issues page. + h3 Please tell us how to reproduce the bug and link us to screen shots if possible. + a.btn.btn-lg.btn-primary.btn-block#report-issue(name='_csrf', value=_csrf) Create my GitHub issue + a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel + +#help-modal.modal(tabindex='-1') + .modal-dialog.animated.zoomIn.fast-animation + .modal-content + .modal-header.challenge-list-header Need some help? + a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') × + .modal-body.text-center + h3 Remember to use   + a(href='/field-guide/how-do-i-get-help-when-i-get-stuck' target='_blank') RSAP + | . + h3 If you've already read the errors and searched Google, you should ask for help. + h3 This will open a help request in our Help chat room. + a.btn.btn-lg.btn-primary.btn-block#i-want-help(name='_csrf', value=_csrf) Ask for help + a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel + +#help-editorless-modal.modal(tabindex='-1') + .modal-dialog.animated.zoomIn.fast-animation + .modal-content + .modal-header.challenge-list-header Need some help? + a.close.closing-x(href='#', data-dismiss='modal', aria-hidden='true') × + .modal-body.text-center + h3 Remember to use   + a(href='/field-guide/how-do-i-get-help-when-i-get-stuck' target='_blank') RSAP + | . + h3 If you've already read the errors and searched Google, you should ask for help. + h3 This will open a help request in our Help chat room. + a.btn.btn-lg.btn-primary.btn-block#i-want-help-editorless(name='_csrf', value=_csrf) Ask for help + a.btn.btn-lg.btn-info.btn-block(href='#', data-dismiss='modal', aria-hidden='true') Cancel diff --git a/views/resources/jobs.jade b/views/resources/jobs.jade deleted file mode 100644 index a681d7cc1b..0000000000 --- a/views/resources/jobs.jade +++ /dev/null @@ -1,16 +0,0 @@ -extends ../layout-wide -block content - .row - .col-xs-12.col-sm-8.col-sm-offset-2.text-center - h2 We want all our campers to get awesome software engineer jobs ( - a(href='https://www.linkedin.com/groups?viewMembers=&gid=6966827&sik=1432338555021' target='_blank') and many already have - | ). - h3.hidden-xs.hidden-sm This is a small sampling of the 1,000s of junior software engineer jobs. Learn about the   - a(href='http://blog.freecodecamp.com/2014/10/the-real-reason-to-learn-mean-stack.html' target='_blank') the job market in aggregate - | . - .spacer - a.btn.btn-primary.btn-big(href='/jobs-form') My organization is hiring software engineers - .spacer - .embed-responsive.embed-responsive-4by3.hidden-xs.hidden-sm - iframe.embed-responsive-item(src="http://freecodecamp.simply-partner.com" scrolling="no") - .spacer