diff --git a/Gruntfile.js b/Gruntfile.js index c04a7d8f..99fbd5f3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -59,7 +59,7 @@ module.exports = function(grunt) { cbURL: grunt.option('cb-url') || 'https://coderbits.com', blogRSSFeedURL: grunt.option('blog-rss-feed') || 'https://www.topcoder.com/feed/?post_type=blog', - photoLinkBaseURL: grunt.option('photo-link-base') || 'http://community.topcoder.com', + photoLinkBaseURL: grunt.option('photo-link-base') || 'https://www.topcoder.com', marketingMessageMyDashURL: grunt.option('marketing-message-my-dash-url') || 'https://banners-r-us.herokuapp.com/serve?size=650x150' }; diff --git a/src/conf/build-dev.sh b/src/conf/build-dev.sh index 76521c2f..c6184a41 100755 --- a/src/conf/build-dev.sh +++ b/src/conf/build-dev.sh @@ -1 +1 @@ -grunt --main-url=https://www.topcoder-dev.com --auth-main-url=topcoder-dev.auth0.com --auth-client-id=JFDo7HMkf0q2CkVFHojy3zHWafziprhT --auth-callback-url=https://www.topcoder-dev.com/reg2/callback.action --api-url=https://api.topcoder-dev.com/v2 --lc-url=https://dev-lc1-ext-challenge-service.herokuapp.com --lc-discussion-url=https://dev-lc1-discussion-service.herokuapp.com --lc-user-url=https://dev-lc1-user-service.herokuapp.com --lc-site-url=https://dev-lc1-challenge-app.herokuapp.com --my-filters-url=https://staging-user-settings-service.herokuapp.com --community-url=//community.topcoder-dev.com --photo-link-base=http://community.topcoder-dev.com --review-app-url=software.topcoder-dev.com/review --help-app-url=help.topcoder-dev.com --forums-app-url=forums.topcoder-dev.com --swift-program-id=3445 --blog-rss-feed="https://www.topcoder-dev.com/feed/?post_type=blog" --api3-url=https://api.topcoder-dev.com/v3 --use-cdn=1 --use-min=1 +grunt --main-url=https://www.topcoder-dev.com --auth-main-url=topcoder-dev.auth0.com --auth-client-id=JFDo7HMkf0q2CkVFHojy3zHWafziprhT --auth-callback-url=https://www.topcoder-dev.com/reg2/callback.action --api-url=https://api.topcoder-dev.com/v2 --lc-url=https://dev-lc1-ext-challenge-service.herokuapp.com --lc-discussion-url=https://dev-lc1-discussion-service.herokuapp.com --lc-user-url=https://dev-lc1-user-service.herokuapp.com --lc-site-url=https://dev-lc1-challenge-app.herokuapp.com --my-filters-url=https://staging-user-settings-service.herokuapp.com --community-url=//community.topcoder-dev.com --photo-link-base=https://www.topcoder-dev.com --review-app-url=software.topcoder-dev.com/review --help-app-url=help.topcoder-dev.com --forums-app-url=forums.topcoder-dev.com --swift-program-id=3445 --blog-rss-feed="https://www.topcoder-dev.com/feed/?post_type=blog" --api3-url=https://api.topcoder-dev.com/v3 --use-cdn=1 --use-min=1 diff --git a/src/conf/build-qa.sh b/src/conf/build-qa.sh index 23312aed..19bf2a35 100755 --- a/src/conf/build-qa.sh +++ b/src/conf/build-qa.sh @@ -1 +1 @@ -grunt --main-url=https://www.topcoder-qa.com --auth-main-url=topcoder-qa.auth0.com --auth-client-id=EVOgWZlCtIFlbehkq02treuRRoJk12UR --auth-callback-url="https://www.topcoder-qa.com/reg2/callback.action" --api-url=https://api.topcoder-qa.com/v2 --lc-url=https://qa-lc1-ext-challenge-service.herokuapp.com --lc-discussion-url=https://qa-lc1-discussion-service.herokuapp.com --lc-user-url=https://qa-lc1-user-service.herokuapp.com --lc-site-url=https://qa-lc1-challenge-app.herokuapp.com --my-filters-url=https://staging-user-settings-service.herokuapp.com --community-url=//community.topcoder-qa.com --photo-link-base=http://community.topcoder-qa.com --review-app-url=software.topcoder-qa.com/review --help-app-url=help.topcoder-qa.com --forums-app-url=forums.topcoder-qa.com --swift-program-id=3445 --blog-rss-feed="https://www.topcoder-qa.com/feed/?post_type=blog" --api3-url=https://api.topcoder-qa.com/v3 --use-cdn=1 --use-min=1 \ No newline at end of file +grunt --main-url=https://www.topcoder-qa.com --auth-main-url=topcoder-qa.auth0.com --auth-client-id=EVOgWZlCtIFlbehkq02treuRRoJk12UR --auth-callback-url="https://www.topcoder-qa.com/reg2/callback.action" --api-url=https://api.topcoder-qa.com/v2 --lc-url=https://qa-lc1-ext-challenge-service.herokuapp.com --lc-discussion-url=https://qa-lc1-discussion-service.herokuapp.com --lc-user-url=https://qa-lc1-user-service.herokuapp.com --lc-site-url=https://qa-lc1-challenge-app.herokuapp.com --my-filters-url=https://staging-user-settings-service.herokuapp.com --community-url=//community.topcoder-qa.com --photo-link-base=https://www.topcoder-qa.com --review-app-url=software.topcoder-qa.com/review --help-app-url=help.topcoder-qa.com --forums-app-url=forums.topcoder-qa.com --swift-program-id=3445 --blog-rss-feed="https://www.topcoder-qa.com/feed/?post_type=blog" --api3-url=https://api.topcoder-qa.com/v3 --use-cdn=1 --use-min=1 \ No newline at end of file diff --git a/src/conf/tc-nginx.conf b/src/conf/tc-nginx.conf index 10998e33..d6208c65 100644 --- a/src/conf/tc-nginx.conf +++ b/src/conf/tc-nginx.conf @@ -70,7 +70,7 @@ server { } location ~ ^/fonts/ { - add_header 'Access-Control-Allow-Origin' "$http_origin" always; + add_header 'Access-Control-Allow-Origin' "$http_origin"; add_header 'Access-Control-Allow-Headers' "Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since" always; root $root_base/dist; } diff --git a/src/css/my-dashboard.css b/src/css/my-dashboard.css index 5d745d78..8230463f 100644 --- a/src/css/my-dashboard.css +++ b/src/css/my-dashboard.css @@ -362,8 +362,30 @@ background: url("../i/ico-track-design.png") no-repeat center center; } -.my-challenges th { +.my-challenges table > thead > tr > th { text-align: center; + white-space: nowrap; + padding-left: 13px; + padding-right: 13px; +} + +.my-challenges th .sort, +.my-challenges th .sort-icon-place { + width: 100%; + height: 12px; + +} + +.my-challenges th[rel="sortable"] { + cursor: pointer; +} + +.my-challenges th .sort.asc { + background: #f5f5f5 url("../i/sort-arrows.png") no-repeat center -94px; +} + +.my-challenges th .sort.desc { + background: #f5f5f5 url("../i/sort-arrows.png") no-repeat center 6px; } .my-challenges table > tbody> tr > td { @@ -378,6 +400,7 @@ .my-challenges td[rel="challenge-name"] { text-align: left; + /*max-width: 320px;*/ } .my-challenges td[rel="challenge-name"] > a { @@ -405,6 +428,25 @@ text-align: center; } +.upcoming-srms-div th .sort, +.upcoming-srms-div th .sort-icon-place { + width: 100%; + height: 12px; + +} + +.upcoming-srms-div th[rel="sortable"] { + cursor: pointer; +} + +.upcoming-srms-div th .sort.asc { + background: #f5f5f5 url("../i/sort-arrows.png") no-repeat center -94px; +} + +.upcoming-srms-div th .sort.desc { + background: #f5f5f5 url("../i/sort-arrows.png") no-repeat center 6px; +} + .upcoming-srms-div table > tbody> tr > td { padding-top: 20px; padding-bottom: 20px; diff --git a/src/js/app/challenge-details/index.html b/src/js/app/challenge-details/index.html index f03b20a0..caac7087 100644 --- a/src/js/app/challenge-details/index.html +++ b/src/js/app/challenge-details/index.html @@ -381,14 +381,14 @@

Challenge Links:

Scorecard

Review + href="{{CD.reviewScorecardLink}}" target="_blank">Review Scorecard

-
  • +
  • -
    Recognition Award
    +
    Peer Review Award
    {{CD.phaseProgram.nextBadgeTitle}}
    diff --git a/src/js/app/my-dashboard/js/controllers/my-challenges-controller.js b/src/js/app/my-dashboard/js/controllers/my-challenges-controller.js index bdbef178..05120d16 100644 --- a/src/js/app/my-dashboard/js/controllers/my-challenges-controller.js +++ b/src/js/app/my-dashboard/js/controllers/my-challenges-controller.js @@ -1,6 +1,7 @@ /** * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. * @author mdesiderio + * @author vikas.agarwal@appirio.com * @version 1.0 * * Controller for the my challenges widget @@ -30,8 +31,12 @@ function MyChallengesCtrl($scope, AuthService, ChallengeService) { var vm = this; vm.loading = true; + vm.myChallenges = []; + vm.visibleChallenges = []; vm.pageIndex = 1; vm.pageSize = 5; + vm.sortColumn = 'submissionEndDate'; + vm.sortOrder = 'asc'; vm.totalPages = 1; vm.totalRecords = vm.totalPages * vm.pageSize; vm.firstRecordIndex = (vm.pageIndex - 1) * vm.pageSize + 1; @@ -42,49 +47,115 @@ vm.changePage = changePage; vm.isCurrentPage = isCurrentPage; vm.getCurrentPageClass = getCurrentPageClass; + vm.sort = sort; // activate controller if (AuthService.isLoggedIn === true) { - activate(); + getChallenges(); } else { return false; } - function activate() { + /** + * getChallenges Fetches user's active challenges from the API + * + * @return {Object} promise of API call + */ + function getChallenges() { initPaging(); - var searchRequest = {pageIndex: vm.pageIndex, pageSize: vm.pageSize}; + var searchRequest = { + pageIndex: vm.pageIndex, + pageSize: vm.pageSize, + sortColumn: vm.sortColumn, + sortOrder: vm.sortOrder + }; // show loading icon vm.loading = true; + // remove following if block when API supports paging + if (vm.pageIndex > 1) { + processChallengesResponse(vm.myChallenges); + vm.loading = false; + return; + } // Fetch my active return ChallengeService.getMyActiveChallenges(searchRequest) .then(function(data) { - if (data.pagination) { - vm.totalPages = Math.ceil(data.pagination.total / vm.pageSize); - vm.totalRecords = data.pagination.total; - vm.firstRecordIndex = (vm.pageIndex - 1) * vm.pageSize + 1; - vm.lastRecordIndex = vm.pageIndex * vm.pageSize; - vm.lastRecordIndex = vm.lastRecordIndex > vm.totalRecords ? vm.totalRecords : vm.lastRecordIndex; - } - vm.myChallenges = data; + processChallengesResponse(data); // stop loading icon vm.loading = false; }); } + function processChallengesResponse(data) { + if (data.pagination) { + vm.totalPages = Math.ceil(data.pagination.total / vm.pageSize); + vm.totalRecords = data.pagination.total; + vm.firstRecordIndex = (vm.pageIndex - 1) * vm.pageSize + 1; + vm.lastRecordIndex = vm.pageIndex * vm.pageSize; + vm.lastRecordIndex = vm.lastRecordIndex > vm.totalRecords ? vm.totalRecords : vm.lastRecordIndex; + } + vm.myChallenges = data; + // uncomment following line when API supports paging + // vm.visibleChallenges = data; + // remove following line when API supports paging + vm.visibleChallenges = data.slice(vm.firstRecordIndex - 1, vm.lastRecordIndex); + } + + /** + * changePage changes page in the result set + * + * @param {JSON} pageLink page link object + * + * @return {Object} promise of API call with updated pageIndex + */ function changePage(pageLink) { vm.pageIndex = pageLink.val; - activate(); + getChallenges(); } + /** + * isCurrentPage checks if the give page link is the current page + * + * @param {JSON} pageLink page link object + * + * @return {Boolean} true if the given page is the current page, false otherwise + */ function isCurrentPage (pageLink) { return pageLink.val === vm.pageIndex; } + /** + * getCurrentPageClass Identifies the css class to be used for the given page link + * + * @param {JSON} pageLink page link object + * + * @return {String} + */ function getCurrentPageClass(pageLink) { return isCurrentPage(pageLink) ? 'current-page' : ''; } + /** + * sort sorts the results based on the given column + * + * @param {String} column page link object + * + * @return {Object} promise of API call with updated sort params + */ + function sort(column) { + if (vm.sortColumn === column) { + vm.sortOrder = vm.sortOrder === 'desc' ? 'asc' : 'desc'; + } else { + vm.sortOrder = 'desc'; + } + vm.sortColumn = column; + activate(); + } + + /** + * initPaging Initializes the paging + */ function initPaging() { vm.pageLinks = [ {text: "Prev", val: vm.pageIndex - 1}, diff --git a/src/js/app/my-dashboard/js/controllers/upcoming-srms-controller.js b/src/js/app/my-dashboard/js/controllers/upcoming-srms-controller.js index a0d4ec17..07becbce 100644 --- a/src/js/app/my-dashboard/js/controllers/upcoming-srms-controller.js +++ b/src/js/app/my-dashboard/js/controllers/upcoming-srms-controller.js @@ -1,6 +1,7 @@ /** * Copyright (C) 2014 TopCoder Inc., All Rights Reserved. * @author mdesiderio + * @author vikas.agarwal@appirio.com * @version 1.0 * * Controller for the upcoming srms widget @@ -33,6 +34,8 @@ vm.loading = true; vm.pageIndex = 1; vm.pageSize = 5; + vm.sortColumn = 'registrationStartTime'; + vm.sortOrder = 'asc'; vm.totalPages = 1; vm.totalRecords = vm.totalPages * vm.pageSize; vm.firstRecordIndex = (vm.pageIndex - 1) * vm.pageSize + 1; @@ -43,17 +46,28 @@ vm.changePage = changePage; vm.isCurrentPage = isCurrentPage; vm.getCurrentPageClass = getCurrentPageClass; + vm.sort = sort; // activate controller if (AuthService.isLoggedIn === true) { - activate(); + getSRMs(); } else { return false; } - function activate() { + /** + * getSRMs Fetches upcoming SRMs from the API + * + * @return {Object} promise of API call + */ + function getSRMs() { initPaging(); - var searchRequest = {pageIndex: vm.pageIndex, pageSize: vm.pageSize}; + var searchRequest = { + pageIndex: vm.pageIndex, + pageSize: vm.pageSize, + sortColumn: vm.sortColumn, + sortOrder: vm.sortOrder + }; // start loading vm.loading = true; // Fetch the future srms scheduled @@ -71,20 +85,60 @@ }); } + /** + * changePage changes page in the result set + * + * @param {JSON} pageLink page link object + * + * @return {Object} promise of API call with updated pageIndex + */ function changePage(pageLink) { - console.log(vm.pageIndex); vm.pageIndex = pageLink.val; - activate(); + getSRMs(); } + /** + * isCurrentPage checks if the give page link is the current page + * + * @param {JSON} pageLink page link object + * + * @return {Boolean} true if the given page is the current page, false otherwise + */ function isCurrentPage (pageLink) { return pageLink.val === vm.pageIndex; } + /** + * getCurrentPageClass Identifies the css class to be used for the given page link + * + * @param {JSON} pageLink page link object + * + * @return {String} + */ function getCurrentPageClass(pageLink) { return isCurrentPage(pageLink) ? 'current-page' : ''; } + /** + * sort sorts the results based on the given column + * + * @param {String} column page link object + * + * @return {Object} promise of API call with updated sort params + */ + function sort(column) { + if (vm.sortColumn === column) { + vm.sortOrder = vm.sortOrder === 'desc' ? 'asc' : 'desc'; + } else { + vm.sortOrder = 'desc'; + } + vm.sortColumn = column; + getSRMs(); + } + + /** + * initPaging Initializes the paging + */ function initPaging() { vm.prevPageLink = {text: "Prev", val: vm.pageIndex - 1}; vm.nextPageLink = {text: "Next", val: vm.pageIndex + 1}; diff --git a/src/js/app/my-dashboard/js/services/challenge-services.js b/src/js/app/my-dashboard/js/services/challenge-services.js index d4517138..3ea738bd 100644 --- a/src/js/app/my-dashboard/js/services/challenge-services.js +++ b/src/js/app/my-dashboard/js/services/challenge-services.js @@ -49,6 +49,8 @@ // add default paging var pageIndex = request && request.pageIndex ? request.pageIndex : 1; var pageSize = request && request.pageSize ? request.pageSize : 10; + var sortColumn = request && request.sortColumn ? request.sortColumn : 'submissionEndDate'; + var sortOrder = request && request.sortOrder ? request.sortOrder : 'asc'; service.request = request; @@ -56,7 +58,9 @@ service.one("user").getList("challenges", { type: "active", pageIndex: pageIndex, - pageSize: pageSize + pageSize: pageSize, + sortColumn: sortColumn, + sortOrder: sortOrder }).then(function(data) { // Sets the data, and returns it to all pending promises service.myActiveChallenges = data; @@ -71,11 +75,11 @@ } function uniqueRequest(prevRequest, currRequest) { - console.log(prevRequest); - console.log(currRequest); if (!prevRequest || !currRequest) return true; return prevRequest.pageIndex != currRequest.pageIndex || - prevRequest.pageSize != currRequest.pageSize; + prevRequest.pageSize != currRequest.pageSize || + prevRequest.sortColumn != currRequest.sortColumn || + prevRequest.sortOrder != currRequest.sortOrder; } return service; diff --git a/src/js/app/my-dashboard/js/services/member-cert-services.js b/src/js/app/my-dashboard/js/services/member-cert-services.js index a4902fd4..247cf441 100644 --- a/src/js/app/my-dashboard/js/services/member-cert-services.js +++ b/src/js/app/my-dashboard/js/services/member-cert-services.js @@ -29,7 +29,7 @@ * @returns promise */ service.getMemberRegistration = function(userId, programId) { - return service.one("member-cert/registrations", userId).one("programs", programId).get(); + return service.one("memberCert/registrations", userId).one("programs", programId).get(); } /** @@ -39,7 +39,7 @@ * @returns promise */ service.registerMember = function(userId, programId) { - return service.one("member-cert/registrations", userId).one("programs", programId).post(); + return service.one("memberCert/registrations", userId).one("programs", programId).post(); } return service; diff --git a/src/js/app/my-dashboard/js/services/srm-services.js b/src/js/app/my-dashboard/js/services/srm-services.js index ff062ca1..1412fc76 100644 --- a/src/js/app/my-dashboard/js/services/srm-services.js +++ b/src/js/app/my-dashboard/js/services/srm-services.js @@ -33,12 +33,14 @@ // add default paging var pageIndex = request && request.pageIndex ? request.pageIndex : 1; var pageSize = request && request.pageSize ? request.pageSize : 10; + var sortColumn = request && request.sortColumn ? request.sortColumn : 'registrationStartTime'; + var sortOrder = request && request.sortOrder ? request.sortOrder : 'asc'; service.request = request; var filters = { - sortColumn: "registrationstarttime", - sortOrder: "asc", + sortColumn: sortColumn, + sortOrder: sortOrder, registrationStartTimeAfter: $filter('date')(new Date(), 'yyyy-MM-ddTHH:mm:ss.sssZ'), statuses: "A,P,F", pageIndex: pageIndex, diff --git a/src/js/app/my-dashboard/partials/member-program.html b/src/js/app/my-dashboard/partials/member-program.html index 8caea53b..9b28e474 100644 --- a/src/js/app/my-dashboard/partials/member-program.html +++ b/src/js/app/my-dashboard/partials/member-program.html @@ -27,16 +27,12 @@ -->
    -
    -

    Swift Recognition

    -
    -