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

Commit 3e21bc4

Browse files
author
Nick Litwin
committed
Refactor to show peer review page
1 parent b731f1e commit 3e21bc4

17 files changed

+109
-50
lines changed

app/index.jade

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ html
1818
link(rel="stylesheet", href="assets/css/account/account.css")
1919
link(rel="stylesheet", href="assets/css/account/login.css")
2020
link(rel="stylesheet", href="assets/css/account/register.css")
21-
link(rel="stylesheet", href="assets/css/layout/footer.css")
22-
link(rel="stylesheet", href="assets/css/layout/header.css")
2321
link(rel="stylesheet", href="assets/css/peer-review/completed.css")
2422
link(rel="stylesheet", href="assets/css/peer-review/edit.css")
2523
link(rel="stylesheet", href="assets/css/peer-review/peer-review.css")
2624
link(rel="stylesheet", href="assets/css/peer-review/readOnlyScorecard.css")
2725
link(rel="stylesheet", href="assets/css/peer-review/reviewStatus.css")
26+
link(rel="stylesheet", href="assets/css/layout/footer.css")
27+
link(rel="stylesheet", href="assets/css/layout/header.css")
2828
//- endinject
2929
// endbuild
3030
@@ -57,12 +57,12 @@ html
5757
// build:js js/app.js
5858
//- inject:js
5959
script(src="topcoder.module.js")
60-
script(src="account/account.module.js")
61-
script(src="layout/layout.module.js")
62-
script(src="peer-review/peer-review.module.js")
6360
script(src="topcoder.constants.js")
6461
script(src="topcoder.controller.js")
6562
script(src="topcoder.interceptors.js")
63+
script(src="account/account.module.js")
64+
script(src="layout/layout.module.js")
65+
script(src="peer-review/peer-review.module.js")
6666
script(src="account/account.routes.js")
6767
script(src="filters/local-time.filter.js")
6868
script(src="peer-review/peer-review.routes.js")

app/peer-review/completed-review/completed-review.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
.scorecard-container
88
.challenge-info
9-
img(src="content/images/swift-logo.png")
9+
img(src="images/swift-logo.png")
1010

1111
h1(ng-bind="challenge.challengeName")
1212

app/peer-review/completed-review/completed-review.spec.js

Whitespace-only changes.

app/peer-review/edit-review/edit-review.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
.scorecard-container
88
.challenge-info
9-
img(src="content/images/swift-logo.png")
9+
img(src="images/swift-logo.png")
1010

1111
h1(ng-bind="challenge.challengeName")
1212

app/peer-review/edit-review/edit-review.spec.js

Whitespace-only changes.

app/peer-review/peer-review.routes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
reviewStatus: {
1515
url: '/challenge/:challengeId',
1616
templateUrl: 'peer-review/review-status/review-status.html',
17-
controller: 'ReviewStatusController',
17+
controller: 'ReviewStatusController as vm',
1818
authenticate: true
1919
},
2020
readOnlyScorecard: {

app/peer-review/readOnlyScorecard/readOnlyScorecard.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.container(ng-show="loaded")
22
.scorecard-container
33
.challenge-info
4-
img(src="content/images/swift-logo.png")
4+
img(src="images/swift-logo.png")
55

66
h1(ng-bind="scorecard.name")
77

app/peer-review/readOnlyScorecard/readOnlyScorecard.spec.js

Whitespace-only changes.

app/peer-review/review-status/review-status.controller.js

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,55 @@
33

44
angular.module('tc.peer-review').controller('ReviewStatusController', ReviewStatusController);
55

6-
ReviewStatusController.$inject = ['$scope', '$state', '$stateParams', 'review', 'challenge', 'helpers', 'CONSTANTS'];
7-
8-
function ReviewStatusController($scope, $state, $stateParams, review, challenge, helpers, CONSTANTS) {
9-
$scope.submissionDownloadPath = CONSTANTS.submissionDownloadPath;
10-
$scope.domain = CONSTANTS.domain;
11-
$scope.loaded = false;
12-
$scope.challengeId = $stateParams.challengeId;
13-
$scope.challenge = null;
14-
$scope.getNextReview = function() {
15-
if ($scope.reviews.length >= 5) {
6+
ReviewStatusController.$inject = ['$state', '$stateParams', 'review', 'challenge', 'helpers', 'CONSTANTS'];
7+
8+
function ReviewStatusController($state, $stateParams, review, challenge, helpers, CONSTANTS) {
9+
var vm = this;
10+
vm.submissionDownloadPath = CONSTANTS.submissionDownloadPath;
11+
vm.domain = CONSTANTS.domain;
12+
vm.loaded = false;
13+
vm.challengeId = $stateParams.challengeId;
14+
vm.challenge = null;
15+
vm.getNextReview = function() {
16+
if (vm.reviews.length >= 5) {
1617
alert('You may only complete 5 reviews.');
1718
return;
1819
}
19-
review.getNextReview($scope.challengeId).then(function(data) {
20+
review.getNextReview(vm.challengeId)
21+
.then(function(data) {
2022
var newReviewId = data.data.result.content;
2123

2224
$state.go('edit', {
23-
challengeId: $scope.challengeId,
25+
challengeId: vm.challengeId,
2426
reviewId: newReviewId
2527
});
26-
}).catch(function(error) {
28+
})
29+
.catch(function(error) {
2730
var message = 'An error occurred while trying to get the next review.\n' + error.status + ': ' + error.statusText;
2831
console.log(message);
2932
$state.reload();
3033
});
3134
};
3235

33-
challenge.getChallengeDetails($scope.challengeId).then(function(data) {
34-
$scope.challenge = data.data;
35-
});
36-
review.getUsersPeerReviews($scope.challengeId).then(function(data) {
37-
$scope.reviews = data.data.result.content;
38-
$scope.completed = helpers.countCompleted($scope.reviews);
39-
return $scope.loaded = true;
40-
});
41-
return challenge.getReviewEndDate($scope.challengeId).then(function(data) {
42-
return $scope.reviewsDue = data.data.result.content[0].scheduledEndTime + ' UTC';
43-
});
36+
activate();
37+
38+
function activate() {
39+
challenge.getChallengeDetails(vm.challengeId)
40+
.then(function(data) {
41+
vm.challenge = data.data;
42+
});
43+
44+
review.getUsersPeerReviews(vm.challengeId)
45+
.then(function(data) {
46+
vm.reviews = data.data.result.content;
47+
vm.completed = helpers.countCompleted(vm.reviews);
48+
// Move calls to $q.all(), and move this to the success callback there
49+
vm.loaded = true;
50+
});
51+
52+
challenge.getReviewEndDate(vm.challengeId).then(function(data) {
53+
vm.reviewsDue = data.data.result.content[0].scheduledEndTime;
54+
});
55+
}
4456
};
4557
})();
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
.container(ng-show="loaded")
1+
.container(ng-show="vm.loaded")
22
.back-link
33
.arrow
4-
p #[a.back(href="https://www.{{domain}}/challenge-details/{{challengeId}}/?type=develop") Back to Challenge]
4+
p #[a.back(href="https://www.{{vm.domain}}/challenge-details/{{challengeId}}/?type=develop") Back to Challenge]
55

6-
h1(ng-bind="challenge.challengeName")
6+
h1(ng-bind="vm.challenge.challengeName")
77

88
p.help-center Remember to uphold honesty and fair judging principles as described in the  #[a(href="http://help.topcoder.com") help center].
99

1010
hgroup
11-
h2 Your Reviews ({{completed}} of 5 completed)
11+
h2 Your Reviews ({{vm.completed}} of 5 completed)
1212

1313
h4 All Reviews Due: {{reviewsDue | localTime}}
1414

@@ -20,16 +20,16 @@
2020
th Submission
2121

2222
tbody
23-
tr(ng-repeat="review in reviews | orderBy: 'id'", ng-class-even="'even-rows'")
23+
tr(ng-repeat="review in vm.reviews | orderBy: 'id'", ng-class-even="'even-rows'")
2424
td Review {{$index + 1}}
2525

2626
td(ng-if="review.committed === 1")
27-
a.status(ui-sref="completed({challengeId: challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
27+
a.status(ui-sref="completed({challengeId: vm.challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
2828
td(ng-if="review.committed === 0")
29-
a.status(ui-sref="edit({challengeId: challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
29+
a.status(ui-sref="edit({challengeId: vm.challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
3030

3131
td
32-
a(ng-href="https://software.{{domain}}{{submissionDownloadPath}}{{review.uploadId}}")
32+
a(ng-href="https://software.{{vm.domain}}{{vm.submissionDownloadPath}}{{review.uploadId}}")
3333
span.glyphicon.glyphicon-download-alt
3434

35-
button.start-review(type="button", ng-click="getNextReview()") Start another review
35+
button.start-review(type="button", ng-click="vm.getNextReview()") Start another review
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* jshint -W117, -W030 */
2+
describe('Review Status Controller', function() {
3+
var controller;
4+
5+
beforeEach(function() {
6+
bard.appModule('topcoder');
7+
bard.inject(this, '$controller', '$rootScope', '$q');
8+
9+
controller = $controller('ReviewStatusController');
10+
$rootScope.$apply();
11+
});
12+
13+
// bard.verifyNoOutstandingHttpRequests();
14+
15+
it('should be created successfully', function() {
16+
expect(controller).to.be.defined;
17+
});
18+
19+
it('should have a submissionDownloadPath property set', function() {
20+
expect(controller.submissionDownloadPath).to.equal('/review/actions/DownloadContestSubmission?uid=');
21+
});
22+
23+
it('should have a domain property', function() {
24+
expect(controller.domain).to.be.defined;
25+
});
26+
it('should have a loaded property', function() {
27+
expect(controller.loaded).to.be.defined;
28+
});
29+
it('should have a challengeId property', function() {
30+
expect(controller.challengeId).to.be.defined;
31+
});
32+
33+
it('should have challenge set to null', function() {
34+
expect(controller.challenge).to.be.null;
35+
});
36+
});

app/services/helpers.service.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
storeById: storeById,
1313
parseQuestions: parseQuestions,
1414
parseAnswers: parseAnswers,
15-
compileReviewItems: compileReviewItems
15+
compileReviewItems: compileReviewItems,
16+
countCompleted: countCompleted,
17+
getParameterByName: getParameterByName
1618
};
1719
return service;
1820

app/services/scorecard.service.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
angular.module('tc.peer-review').factory('scorecard', scorecard);
55

6+
scorecard.$inject = ['CONSTANTS', 'api'];
7+
68
function scorecard(CONSTANTS, api) {
79
return {
810
getScorecardById: function(scorecardId) {

app/specs.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ <h1><a href="specs.html">Spec Runner</a></h1>
6464

6565
<!-- inject:js -->
6666
<script src="/app/topcoder.module.js"></script>
67-
<script src="/app/account/account.module.js"></script>
68-
<script src="/app/peer-review/peer-review.module.js"></script>
69-
<script src="/app/layout/layout.module.js"></script>
7067
<script src="/app/topcoder.constants.js"></script>
7168
<script src="/app/topcoder.controller.js"></script>
7269
<script src="/app/topcoder.interceptors.js"></script>
70+
<script src="/app/account/account.module.js"></script>
71+
<script src="/app/layout/layout.module.js"></script>
72+
<script src="/app/peer-review/peer-review.module.js"></script>
7373
<script src="/app/account/account.routes.js"></script>
7474
<script src="/app/filters/local-time.filter.js"></script>
7575
<script src="/app/peer-review/peer-review.routes.js"></script>
@@ -85,12 +85,12 @@ <h1><a href="specs.html">Spec Runner</a></h1>
8585
<script src="/app/services/user.service.js"></script>
8686
<script src="/app/account/register/register.controller.js"></script>
8787
<script src="/app/account/login/login.controller.js"></script>
88+
<script src="/app/layout/header/header.controller.js"></script>
8889
<script src="/app/peer-review/completed-review/completed-review.controller.js"></script>
8990
<script src="/app/peer-review/edit-review/edit-review.controller.js"></script>
9091
<script src="/app/peer-review/readOnlyScorecard/readOnlyScorecard.controller.js"></script>
9192
<script src="/app/peer-review/review-status/review-status.controller.js"></script>
9293
<script src="/app/peer-review/review-status/review-status.filter.js"></script>
93-
<script src="/app/layout/header/header.controller.js"></script>
9494
<!-- endinject -->
9595

9696
<!-- inject:spechelpers:js -->
@@ -100,6 +100,10 @@ <h1><a href="specs.html">Spec Runner</a></h1>
100100
<!-- inject:specs:js -->
101101
<script src="/app/account/register/register.spec.js"></script>
102102
<script src="/app/account/login/login.spec.js"></script>
103+
<script src="/app/peer-review/completed-review/completed-review.spec.js"></script>
104+
<script src="/app/peer-review/edit-review/edit-review.spec.js"></script>
105+
<script src="/app/peer-review/readOnlyScorecard/readOnlyScorecard.spec.js"></script>
106+
<script src="/app/peer-review/review-status/review-status.spec.js"></script>
103107
<!-- endinject -->
104108

105109
<!-- inject:templates:js -->

app/topcoder.constants.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
clientId: 'JFDo7HMkf0q2CkVFHojy3zHWafziprhT',
99
domain: 'topcoder-dev.com',
1010
auth0Domain: 'topcoder-dev.auth0.com',
11-
auth0Callback: 'https://www.topcoder-dev.com/reg2/callback.action'
11+
auth0Callback: 'https://www.topcoder-dev.com/reg2/callback.action',
12+
submissionDownloadPath: '/review/actions/DownloadContestSubmission?uid='
1213
});
1314
})();

assets/css/partials/_mixins.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
@font-face {
6161
font-family: 'Glyphicons Halflings';
6262

63-
src: url('../fonts/glyphicons-halflings-regular.eot');
64-
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
63+
src: url('/fonts/glyphicons-halflings-regular.eot');
64+
src: url('/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('/fonts/glyphicons-halflings-regular.woff') format('woff'), url('/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
6565
}
6666
}
6767

gulp.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ module.exports = function() {
3131
indexHtml: temp + 'index.html',
3232
jade: app + '**/*.jade',
3333
js: [
34+
app + 'topcoder.module.js',
35+
app + 'topcoder.*.js',
3436
app + '**/*.module.js',
3537
app + '**/*.js',
3638
'!' + app + '**/*.spec.js'

0 commit comments

Comments
 (0)