From 5798537bcbae60357be449c0d3bb6c19f121c678 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Mon, 11 Jan 2016 22:47:49 -0800 Subject: [PATCH] Abstract map and showChallenge logic Rename some legacy naming conventions Remove logic for waypoint,basejumps, etc... --- server/boot/challenge.js | 32 ++---- server/views/challengeMap/show.jade | 58 ---------- server/views/map/show.jade | 169 ++++++---------------------- 3 files changed, 45 insertions(+), 214 deletions(-) delete mode 100644 server/views/challengeMap/show.jade diff --git a/server/boot/challenge.js b/server/boot/challenge.js index 5422711956..9b81e6801c 100644 --- a/server/boot/challenge.js +++ b/server/boot/challenge.js @@ -189,15 +189,6 @@ function getRenderData$(user, challenge$, origChallengeName, solution) { }); } -function getCompletedChallengeIds(user = {}) { - // if user - // get the id's of all the users completed challenges - return !user.completedChallenges ? - [] : - _.uniq(user.completedChallenges) - .map(({ id, _id }) => id || _id); -} - // create a stream of an array of all the challenge blocks function getSuperBlocks$(challenge$, completedChallenges) { return challenge$ @@ -415,19 +406,7 @@ module.exports = function(app) { function showChallenge(req, res, next) { const solution = req.query.solution; - const completedChallenges = getCompletedChallengeIds(req.user); - - Observable.combineLatest( - getRenderData$(req.user, challenge$, req.params.challengeName, solution), - getSuperBlocks$(challenge$, completedChallenges), - ({ data, ...rest }, superBlocks) => ({ - ...rest, - data: { - ...data, - superBlocks - } - }) - ) + getRenderData$(req.user, challenge$, req.params.challengeName, solution) .subscribe( ({ type, redirectUrl, message, data }) => { if (message) { @@ -573,9 +552,14 @@ module.exports = function(app) { ); } - function showMap({ user }, res, next) { + function showMap({ user = {} }, res, next) { + // if user + // get the id's of all the users completed challenges + const completedChallenges = !user.completedChallenges ? + [] : + _.uniq(user.completedChallenges).map(({ id, _id }) => id || _id); - getSuperBlocks$(challenge$, getCompletedChallengeIds(user)) + getSuperBlocks$(challenge$, completedChallenges) .subscribe( superBlocks => { res.render('map/show', { diff --git a/server/views/challengeMap/show.jade b/server/views/challengeMap/show.jade deleted file mode 100644 index 3e08c5e801..0000000000 --- a/server/views/challengeMap/show.jade +++ /dev/null @@ -1,58 +0,0 @@ -extends ../layout-wide -block content - .col-xs-12.col-sm-4.col-sm-offset-8 - for superBlock, index in superBlocks - for challengeBlock in superBlock.blocks - h4.bold #{challengeBlock.name} (#{challengeBlock.time}) - for challenge in challengeBlock.challenges - if challenge.completed - p.text-primary.ion-checkmark-circled.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(href="/challenges/#{challenge.dashedName}") - = challenge.title - span.sr-only= " Complete" - else - if challenge.type === "bonfire" - p.ion-asterisk.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') - span= challenge.title - span.sr-only= " Incomplete" - if challenge.markNew - span.text-success.small     - strong - em New - if challengeBlock.isComingSoon - span.text-success.small     - strong - em Coming Soon - else - p.ion-ios-circle-outline.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') - span= challenge.title - span.sr-only= " Incomplete" - if challenge.markNew - span.text-success.small     - strong - em New - if challengeBlock.isComingSoon - span.text-success.small     - strong - em Coming Soon - if (index < superBlocks.length) - hr - - script. - var username = !{JSON.stringify(user && user.username || '')}; - var lastCompleted = !{JSON.stringify(lastCompleted || false)} - $(document).ready(function () { - if (!localStorage || !localStorage.hideRedditNotice) { - $("#map-notice").removeClass("hidden"); - } - $("#hide-map-notice-button").on("click", function(e) { - e.preventDefault(); - $("#map-notice").addClass('animated fadeOut'); - setTimeout(function() { - $("#map-notice").hide(); - }, 1000); - localStorage.hideRedditNotice = "true"; - }); - }); diff --git a/server/views/map/show.jade b/server/views/map/show.jade index 6d41cbdd70..3e08c5e801 100644 --- a/server/views/map/show.jade +++ b/server/views/map/show.jade @@ -1,137 +1,42 @@ extends ../layout-wide block content - .row - .col-xs-12.col-md-6.col-md-offset-3 - ul - for superBlock in superBlocks - h2= superBlock.name - for challengeBlock in superBlock.blocks - .row - if (user) - .col-xs-11.col-sm-8.col-md-9 - li.map-p.negative-10 - |    - a(href='#' + challengeBlock.dashedName)= challengeBlock.name - if challengeBlock.markNew - span.text-info.small     - strong - em NEW - if challengeBlock.isComingSoon - span.text-info.small     - strong - em Coming Soon - else - .hidden-xs.col-sm-3.col-md-2 - .col-xs-10.col-sm-8.col-md-9 - span.map-p.negative-10 - a(href='#' + challengeBlock.dashedName)= challengeBlock.name - if challengeBlock.markNew - span.text-info.small     - strong - em NEW - if challengeBlock.isComingSoon - span.text-info.small     - strong - em Coming Soon - h2 Full Stack Development Certification - .row - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Greenfield Nonprofit Project 1 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Greenfield Nonprofit Project 2 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Legacy Nonprofit Project 1 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Legacy Nonprofit Project 2 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Claim your Full Stack Development Certification - - h2 Coding Interview Preparation - .row - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Whiteboard Coding Interview Training - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Critical Thinking Interview Training - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Mock Interview 1 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Mock Interview 2 - .col-xs-12.col-sm-9.col-md-10 - li.map-p.negative-10 - |    - span.ion-locked.padded-ionic-icon - | Mock Interview 3 - hr - .row - .col-xs-12.col-md-6.col-md-offset-3 - for superBlock, index in superBlocks - for challengeBlock in superBlock.blocks - .row - a(href='#' name=challengeBlock.dashedName) - .spacer.negative-55 - .row - h4.bold #{challengeBlock.name} (#{challengeBlock.time}) - for challenge in challengeBlock.challenges - - .col-xs-12.col-sm-9.col-md-10 - if challenge.completed - p.text-primary.ion-checkmark-circled.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(href="/challenges/#{challenge.dashedName}") - = challenge.title - span.sr-only= " Complete" - else if (challenge.type === "bonfire") - p.ion-asterisk.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') - span= challenge.title - span.sr-only= " Incomplete" - if challenge.markNew - span.text-success.small     - strong - em New - if challengeBlock.isComingSoon - span.text-success.small     - strong - em Coming Soon - else - p.ion-ios-circle-outline.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   - a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') - span= challenge.title - span.sr-only= " Incomplete" - if challenge.markNew - span.text-success.small     - strong - em New - if challengeBlock.isComingSoon - span.text-success.small     - strong - em Coming Soon + .col-xs-12.col-sm-4.col-sm-offset-8 + for superBlock, index in superBlocks + for challengeBlock in superBlock.blocks + h4.bold #{challengeBlock.name} (#{challengeBlock.time}) + for challenge in challengeBlock.challenges + if challenge.completed + p.text-primary.ion-checkmark-circled.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   + a(href="/challenges/#{challenge.dashedName}") + = challenge.title + span.sr-only= " Complete" + else + if challenge.type === "bonfire" + p.ion-asterisk.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   + a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') + span= challenge.title + span.sr-only= " Incomplete" + if challenge.markNew + span.text-success.small     + strong + em New + if challengeBlock.isComingSoon + span.text-success.small     + strong + em Coming Soon + else + p.ion-ios-circle-outline.padded-ionic-icon.negative-15(name="#{challenge.dashedName}")   + a(name="#{challenge.dashedName}" href="/challenges/#{challenge.dashedName}" class=challenge.isComingSoon ? 'disabled' : '') + span= challenge.title + span.sr-only= " Incomplete" + if challenge.markNew + span.text-success.small     + strong + em New + if challengeBlock.isComingSoon + span.text-success.small     + strong + em Coming Soon if (index < superBlocks.length) hr