Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 0f63023

Browse files
author
Parth Shah
committed
initial commit with skills picker, pending track picker
1 parent b83bb7c commit 0f63023

File tree

7 files changed

+201
-319
lines changed

7 files changed

+201
-319
lines changed

app/account/register/register.controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
var body = {
6565
param: userInfo,
6666
options: {
67-
afterActivationURL: CONSTANTS.MAIN_URL + '/skillpicker/'
67+
afterActivationURL: $state.href('skillPicker', {}, {absolute: true})
6868
}
6969
}
7070

app/services/profile.service.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
getUserSkills: getUserSkills,
1818
addUserSkill: addUserSkill,
19+
updateUserSkills: updateUserSkills,
1920
hideUserSkill: hideUserSkill,
2021

2122
getUserFinancials: getUserFinancials,
@@ -53,6 +54,11 @@
5354
return restangular.one('members', username).one('skills').patch(body);
5455
}
5556

57+
function updateUserSkills(username, skills) {
58+
var body = { "skills": skills };
59+
return restangular.one('members', username).one('skills').patch(body);
60+
}
61+
5662
function hideUserSkill(username, skillTagId) {
5763
var body = { skills: {} };
5864
body['skills'][skillTagId] = { 'hidden': true };

app/skill-picker/skill-picker.controller.js

Lines changed: 37 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,62 +3,39 @@
33

44
angular.module('tc.skill-picker').controller('SkillPickerController', SkillPickerController);
55

6-
SkillPickerController.$inject = ['ProfileService', '$state', 'TagsService', '$log'];
6+
SkillPickerController.$inject = ['ProfileService', '$state', 'userProfile', 'featuredSkills', '$log', 'toaster'];
77

8-
function SkillPickerController(ProfileService, $state, TagsService, $log) {
8+
function SkillPickerController(ProfileService, $state, userProfile, featuredSkills, $log, toaster) {
99
var vm = this;
10-
vm.toggleSkill = toggleSkill;
10+
$log = $log.getInstance("SkillPickerController");
11+
1112
vm.selectTrack = selectTrack;
1213
vm.submitSkills = submitSkills;
13-
14+
vm.featuredSkills = featuredSkills;
15+
vm.username = userProfile.handle;
16+
vm.mySkills = [];
17+
///////
1418
activate();
1519

1620
function activate() {
17-
// TagsService.getApprovedSkillTags()
18-
// .then(function(res) {
19-
// // console.log('tags: ', res);
20-
// })
21-
// .catch(function(err) {
22-
// $log.error(err);
23-
// });
24-
21+
$log.debug("init")
2522
vm.noTrackSelected = true;
2623

2724
vm.tracks = {
28-
design: false,
29-
develop: false,
30-
data_science: false
31-
};
32-
33-
vm.skills = {
34-
design: ['Photoshop', 'Illustrator', 'InDesign', 'UX', 'UI', 'Sketch'],
35-
develop: ['Java', 'JavaScript', 'Ruby', 'Objective C', 'Python', 'SASS', 'HTML', 'CSS', 'LESS', 'C#', 'iOS', 'C++', 'PHP', 'MySQL', 'MongoDB'],
36-
data_science: ['Java', 'Algorithms', 'Ruby', 'Objective C', 'Python', 'SASS', 'HTML', 'CSS', 'LESS', 'C#', 'iOS', 'C++', 'PHP', 'MySQL', 'MongoDB']
37-
};
38-
39-
vm.selectedSkills = {
40-
design: {numSkills: 0},
41-
develop: {numSkills: 0},
42-
data_science: {numSkills: 0}
25+
design: true,
26+
develop: true,
27+
dataScience: true
4328
};
4429

45-
vm.dropdown = {
46-
design: false,
47-
develop: false,
48-
data_science: false
49-
};
50-
}
51-
52-
function toggleSkill(track, skill) {
53-
var track = vm.selectedSkills[track];
54-
55-
if (!track[skill]) {
56-
track[skill] = true;
57-
track.numSkills += 1;
58-
59-
} else {
60-
track[skill] = false;
61-
track.numSkills -= 1;
30+
vm.toggleSkill = function(tagId) {
31+
var _idx = vm.mySkills.indexOf(tagId.toString());
32+
if (_idx > -1) {
33+
// remove
34+
vm.mySkills.splice(_idx, 1);
35+
} else {
36+
// add
37+
vm.mySkills.push(tagId.toString());
38+
}
6239
}
6340
}
6441

@@ -67,15 +44,22 @@
6744
}
6845

6946
function submitSkills() {
70-
ProfileService.updateUserSkills({id: 247, "hidden": false})
71-
.then(function(res) {
72-
$log.info("res: ");
73-
$log.info(res);
74-
// $state.go('dashboard');
75-
})
76-
.catch(function(err) {
77-
$log.error(err);
78-
});
47+
if (vm.mySkills.length > 0) {
48+
// save skills
49+
var data = {};
50+
for(var i=0;i<vm.mySkills.length;i++) {
51+
data[vm.mySkills[i]] = {hidden: false};
52+
}
53+
ProfileService.updateUserSkills(vm.username, data)
54+
.then(function(resp) {
55+
toaster.pop('success', "Success!", "Your skills have been updated.");
56+
$state.go('dashboard');
57+
})
58+
.catch(function(data) {
59+
toaster.pop('error', "Whoops", "Something went wrong. Please try again later.");
60+
})
61+
62+
}
7963
}
8064
}
8165
})();

app/skill-picker/skill-picker.jade

Lines changed: 43 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,46 @@
11
.skill-picker-container
22
h1 Welcome to Topcoder!
33

4-
p.instruction Pick your tracks and select relevant skills. This helps to get you into the community and find appropriate competitions.
5-
6-
.track-picker
7-
h1 Tell us who you are
8-
9-
.mobile
10-
.track-button(ng-click="vm.selectTrack('design')")
11-
.track-checkbox
12-
input(type="checkbox", ng-checked="vm.tracks.design")
13-
14-
.checkbox-toggle(ng-class="{ 'checked-track': vm.tracks.design }") #[span] Design
15-
16-
.track-button(ng-click="vm.selectTrack('develop')")
17-
.track-checkbox
18-
input(type="checkbox", ng-checked="vm.tracks.develop")
19-
20-
.checkbox-toggle(ng-class="{ 'checked-track': vm.tracks.develop }") #[span] Development
21-
22-
.track-button(ng-click="vm.selectTrack('data_science')")
23-
.track-checkbox
24-
input(type="checkbox", ng-checked="vm.tracks.data_science")
25-
26-
.checkbox-toggle(ng-class="{ 'checked-track': vm.tracks.data_science }") #[span] Data Science
27-
28-
p.reminder(ng-show="!vm.tracks.design && !vm.tracks.develop && !vm.tracks.data_science") Please pick at least one track, you can always change it later.
29-
30-
p.reminder(ng-show="vm.tracks.design || vm.tracks.develop || vm.tracks.data_science") Select your skills
31-
32-
.skills-container
33-
.skills-section(ng-show="vm.tracks.design")
34-
p Design
35-
36-
.track-skills
37-
.track-skill(ng-repeat="skill in vm.skills.design", ng-click="vm.toggleSkill('design', skill)", ng-class="{'skill-selected': vm.selectedSkills.design[skill]}") {{skill}}
38-
39-
.skills-section(ng-show="vm.tracks.develop")
40-
p Development
41-
42-
.track-skills
43-
.track-skill(ng-repeat="skill in vm.skills.develop", ng-click="vm.toggleSkill('develop', skill)", ng-class="{'skill-selected': vm.selectedSkills.develop[skill]}") {{skill}}
44-
45-
.skills-section(ng-show="vm.tracks.data_science")
46-
p Data Science
47-
48-
.track-skills
49-
.track-skill(ng-repeat="skill in vm.skills.data_science", ng-click="vm.toggleSkill('data_science', skill)", ng-class="{'skill-selected': vm.selectedSkills.data_science[skill]}") {{skill}}
50-
51-
52-
53-
54-
55-
56-
57-
58-
59-
60-
.desktop
61-
.track-buttons
62-
.track-button(ng-click="vm.selectTrack('design')")
63-
.track-checkbox
64-
input(type="checkbox", id="checkbox-design-mobile", ng-checked="vm.tracks.design")
65-
66-
label(for="checkbox-design-mobile", ng-class="{ 'checked-track': vm.tracks.design }") #[span] Design
67-
68-
//- span.subscript [{{vm.selectedSkills.design.numSkills}}]
69-
70-
.dropdown
71-
i.fa(ng-class="{'fa-caret-down': vm.dropdown.design}")
72-
73-
.track-button(ng-click="vm.selectTrack('develop')")
74-
.track-checkbox
75-
input(type="checkbox", id="checkbox-develop-mobile", ng-checked="vm.tracks.develop")
76-
77-
label(for="checkbox-develop-mobile", ng-class="{ 'checked-track': vm.tracks.develop }") #[span] Development
78-
79-
//- span.subscript [{{vm.selectedSkills.develop.numSkills}}]
80-
81-
.dropdown
82-
i.fa(ng-class="{'fa-caret-down': vm.dropdown.develop}")
83-
84-
.track-button(ng-click="vm.selectTrack('data_science')")
85-
.track-checkbox
86-
input(type="checkbox", id="checkbox-data-science-mobile", ng-checked="vm.tracks.data_science")
87-
88-
label(for="checkbox-data-science-mobile", ng-class="{ 'checked-track': vm.tracks.data_science }") #[span] Data Science
89-
90-
//- span.subscript [{{vm.selectedSkills.data_science.numSkills}}]
91-
92-
.dropdown
93-
i.fa(ng-class="{'fa-caret-down': vm.dropdown.data_science}")
94-
95-
.skills-tab
96-
.choose-prompt(ng-show="false") Please pick at least one track, you can always change it later.
97-
98-
.track-skills
99-
.track-skill(ng-hide="false", ng-repeat="skill in vm.skills.data_science", ng-click="vm.toggleSkill('data_science', skill)", ng-class="{'skill-selected': vm.selectedSkills.data_science[skill]}") {{skill}}
100-
101-
102-
button(type="button", ng-click="vm.submitSkills()", ng-class="{'enabled-button': vm.tracks.design || vm.tracks.develop || vm.tracks.data_science}") Done
4+
p.instruction Hi {{vm.username}}! Your account is now active. To Help other members get to know you, select the tracks in which you're interested, and specify some of your skills. You can edit this information later on your Profile.
5+
6+
7+
.skills-container
8+
.title skills
9+
.description Languages, environments, frameworks, libraries, platforms, tools, and any other technologies that you know well. Please select from some popular skills. You can add others later on you Profile.
10+
11+
.skills-section(ng-show="vm.tracks.design")
12+
.track-title select design skills
13+
14+
.skills
15+
.skill(ng-repeat="tag in vm.featuredSkills | filter:{categories: 'DESIGN'} | orderBy:'priority':true",
16+
ng-class="{'selected-skill': vm.mySkills.indexOf(tag.id.toString()) > -1}")
17+
a(ng-click="vm.toggleSkill(tag.id.toString())")
18+
.icon
19+
i.fa.fa-github
20+
.name {{tag.name}}
21+
22+
23+
.skills-section(ng-show="vm.tracks.develop")
24+
.track-title select development skills
25+
26+
.skills
27+
.skill(ng-repeat="tag in vm.featuredSkills | filter:{categories: 'DEVELOP'} | orderBy:'priority':true",
28+
ng-class="{'selected-skill': vm.mySkills.indexOf(tag.id.toString()) > -1}")
29+
a(ng-click="vm.toggleSkill(tag.id.toString())")
30+
.icon
31+
i.fa.fa-github
32+
.name {{tag.name}}
33+
34+
.skills-section(ng-show="vm.tracks.dataScience")
35+
.track-title select data science skills
36+
37+
.skills
38+
.skill(ng-repeat="tag in vm.featuredSkills | filter:{categories: 'DATA_SCIENCE'} | orderBy:'priority':true",
39+
ng-class="{'selected-skill': vm.mySkills.indexOf(tag.id.toString()) > -1}")
40+
a(ng-click="vm.toggleSkill(tag.id.toString())")
41+
.icon
42+
i.fa.fa-github
43+
.name {{tag.name}}
44+
45+
46+
button.button-l(type="button", ng-click="vm.submitSkills()", ng-class="{'enabled-button': vm.tracks.design || vm.tracks.develop || vm.tracks.data_science}") Done

app/skill-picker/skill-picker.routes.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,24 @@
1010
var states = {
1111
'skillPicker': {
1212
parent: 'root',
13-
url: '/skillpicker/',
13+
url: '/skill-picker/',
1414
data: {
1515
authRequired: true,
1616
title: 'Skill Picker'
1717
},
18+
resolve: {
19+
userIdentity: ['UserService', function(UserService) {
20+
return UserService.getUserIdentity();
21+
}],
22+
userProfile: ['userIdentity', 'ProfileService', function(userIdentity, ProfileService) {
23+
return ProfileService.getUserProfile(userIdentity.handle.toLowerCase());
24+
}],
25+
featuredSkills: ['TagsService', function(TagsService) {
26+
return TagsService.getApprovedSkillTags().then(function(res) {
27+
return _.filter(res, function(s) { return s.priority > 0});
28+
});
29+
}]
30+
},
1831
views: {
1932
'header@': {
2033
templateUrl: 'layout/header/account-header.html'

app/topcoder.routes.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
// ensure we have a trailing slash
1414
$urlMatcherFactoryProvider.strictMode(true);
1515
// rule to add trailing slash
16-
$urlRouterProvider.rule(function($injector, $location) {
16+
$urlRouterProvider.rule(function($injector) {
17+
var $location = $injector.get('$location');
1718
var path = $location.url();
1819
// check to see if the path already has a slash where it should be
1920
if (path[path.length - 1] === '/' || path.indexOf('/?') > -1 || path.indexOf('/#') > -1) {
@@ -74,7 +75,7 @@
7475
});
7576

7677
$urlRouterProvider.otherwise(function($injector) {
77-
$injector.invoke(['$state', 'CONSTANTS', function($state, CONSTANTS) {
78+
$injector.invoke(['$state', 'CONSTANTS', '$location', function($state, CONSTANTS, $location) {
7879
if ($location.host().indexOf('local') == -1) {
7980
var absUrl = CONSTANTS.MAIN_URL + window.location.pathname;
8081
if (window.location.search)

0 commit comments

Comments
 (0)