From 7b80d705137c54362fd090e188ce5b19e6884988 Mon Sep 17 00:00:00 2001 From: shubhu Date: Mon, 20 Feb 2017 23:32:15 +0530 Subject: [PATCH 1/6] fixed appirio-tech/topcoder-app/issues/1040 refactored details page buttons --- src/js/app/challenge-details/app.js | 3 + src/js/app/challenge-details/index.html | 27 ++------ .../challenge-details-controller.js | 66 +++++++++++++++++-- 3 files changed, 69 insertions(+), 27 deletions(-) diff --git a/src/js/app/challenge-details/app.js b/src/js/app/challenge-details/app.js index 9ddc8fea..086f4bf0 100644 --- a/src/js/app/challenge-details/app.js +++ b/src/js/app/challenge-details/app.js @@ -48,6 +48,9 @@ ]); $locationProvider.html5Mode(true); }]) + .config(function($compileProvider) { + $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|javascript):/); + }) .config(DataPreProcessing); DataPreProcessing.$inject = ['$httpProvider', 'RestangularProvider', 'API_URL']; diff --git a/src/js/app/challenge-details/index.html b/src/js/app/challenge-details/index.html index f0c4796f..6d22d4ad 100644 --- a/src/js/app/challenge-details/index.html +++ b/src/js/app/challenge-details/index.html @@ -12,29 +12,10 @@
-
- - 1 - View Scorecard - - - 2 - Complete Appeals - -
-
- - 1 - - Register For This Challenge - - - Unregister From This Challenge - - - - 2Submit Your Entries +
+ + {{button.spanText}} + {{button.text}}
diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index c9caa2b3..11125fec 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -89,7 +89,12 @@ vm.challengeApiParams = { filter: 'id=' + challengeId } - + vm.buttons = []; + vm.callFunction = function (name) { + if (angular.isFunction(vm[name])) { + vm[name](); + } + } $interval(function () { if (vm.challenge && vm.challenge.currentPhaseRemainingTime) { vm.challenge.currentPhaseRemainingTime -= 5; @@ -298,13 +303,11 @@ * @param ChallengeService */ function processChallenge(challenge, handle, vm, ChallengeService) { - // Global variable available from ng-page-challenge-details.php challengeName = challenge.challengeName; var reviewScorecardId = challenge.reviewScorecardId; vm.isDesign = (challengeType === 'design'); vm.allowDownloads = challenge.currentStatus === 'Active'; - if ((challenge.currentPhaseName != 'Stalled' && challenge.checkpointSubmissionEndDate && challenge.checkpointSubmissionEndDate != '') || (challenge.checkpoints && challenge.checkpoints.length > 0)) { ChallengeService .getCheckpointData(challengeId) @@ -359,7 +362,7 @@ vm.challenge.url = window.location.href; vm.isRegistered = regList.indexOf(handle) >= 0; - var hasSubmitted = submitters.indexOf(handle) >= 0; + var hasSubmitted = vm.hasSubmitted = submitters.indexOf(handle) >= 0; // If the challenge is active and in the registration phase we allow either // registration, or unregistration. @@ -530,8 +533,63 @@ if (vm.challenge.reviewType == 'PEER') { vm.phaseProgram = getPhaseProgramDetail(challenge.currentPhaseName, challenge.currentStatus); } + initButtons(vm); } + function initButtons(vm) { + function getButton(button) { + // buttons have 5 props -> href, classes, onClick, spanText and text + var buttons = { + register: { + href: '', + classes: 'challengeRegisterBtn ' + vm.challenge.registrationDisabled ? 'disabled ': 'disabledNOT', + onClick: 'registerToChallenge', + spanText: 1, + text: 'Register For This Challenge' + }, + unregister: { + href: '', + classes: 'challengeRegisterBtn ' + vm.challenge.allowToUnregister ? 'unregister' : '', + onClick: 'unregisterFromChallenge', + spanText: 1, + text: 'Unregister From This Challenge' + }, + submit: { + href: '/challenge-details/'+ vm.challenge.challengeId +'/submit/?type=develop/', + classes: vm.challenge.submissionDisabled ? 'disabled ' : 'disabledNOT', + onClick: '', + spanText: 2, + text: 'Submit Your Entries' + }, + viewScorecard: { + href: '//' + vm.reviewAppURL+'/actions/ViewProjectDetails?pid=' + vm.challenge.challengeId, + classes: '', + onClick: '', + spanText: 1, + text: 'View Scorecard', + }, + completeAppeals: { + href: '//'+ vm.reviewAppURL+'/actions/EarlyAppeals?pid='+ vm.challenge.challengeId, + classes: 'unregister', + onClick: '', + spanText: 2, + text: 'Complete Appeals' + } + } + return buttons[button] + } + if (vm.challenge.currentPhaseName === 'Appeals' && vm.hasSubmitted) { + vm.buttons.push(getButton('viewScorecard')) + vm.buttons.push(getButton('completeAppeals')) + } else { + if (vm.challenge.allowToUnregister) { + vm.buttons.push(getButton('unregister')) + } else { + vm.buttons.push(getButton('register')) + } + vm.buttons.push(getButton('submit')) + } + } /** * Prepares phase specific member program details. This detail is used for PEER reviewed * challenges only. From 71bb967fc93ac97a8931b2f043fe10a7b148cf1e Mon Sep 17 00:00:00 2001 From: shubhu Date: Tue, 21 Feb 2017 14:12:36 +0530 Subject: [PATCH 2/6] updates after code review --- src/js/app/challenge-details/index.html | 6 +- .../challenge-details-controller.js | 299 +++++++++--------- 2 files changed, 152 insertions(+), 153 deletions(-) diff --git a/src/js/app/challenge-details/index.html b/src/js/app/challenge-details/index.html index 6d22d4ad..53f359a9 100644 --- a/src/js/app/challenge-details/index.html +++ b/src/js/app/challenge-details/index.html @@ -12,9 +12,9 @@
-
- - {{button.spanText}} + diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index 11125fec..0bae3a0f 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -6,7 +6,7 @@ * Changed in 1.1 (topcoder new community site - Removal proxied API calls) * Removed LC related conditionals and calls */ - /* +/* * TODO: * - Bring up to style guide standards * - lots of different stuff under this heading: @@ -90,11 +90,7 @@ filter: 'id=' + challengeId } vm.buttons = []; - vm.callFunction = function (name) { - if (angular.isFunction(vm[name])) { - vm[name](); - } - } + $interval(function () { if (vm.challenge && vm.challenge.currentPhaseRemainingTime) { vm.challenge.currentPhaseRemainingTime -= 5; @@ -122,35 +118,33 @@ updateTabForNonResults(); }; - $rootScope.$on('$locationChangeStart', function(event, toUrl, fromUrl) { - var parser = document.createElement('a'); - parser.href = toUrl; - if (!parser.pathname.startsWith("/challenge-details/")) - window.location.reload(); + $rootScope.$on('$locationChangeStart', function (event, toUrl, fromUrl) { + var parser = document.createElement('a'); + parser.href = toUrl; + if (!parser.pathname.startsWith("/challenge-details/")) + window.location.reload(); }); var handlePromise = $q.defer(); //The handle is needed to enable the buttons app - .getHandle(function (handle) { - handlePromise.resolve(handle); - } - ); + .getHandle(function (handle) { + handlePromise.resolve(handle); + }); handlePromise - .promise - .then(function (handle) { - vm.handle = handle; - initChallengeDetail(handle, vm, ChallengeService); - } - ); + .promise + .then(function (handle) { + vm.handle = handle; + initChallengeDetail(handle, vm, ChallengeService); + }); /** * * @param checkRole * @returns {true|false} */ function checkRole(checkRole) { - return _.some(vm.userRole, function(role) { + return _.some(vm.userRole, function (role) { return role === checkRole; }) } @@ -185,39 +179,39 @@ * @param ChallengeService */ function initChallengeDetail(handle, vm, ChallengeService) { - ChallengeService.getChallengeTerms(challengeId).then(function(termsList) { + ChallengeService.getChallengeTerms(challengeId).then(function (termsList) { vm.termsList = termsList; }); ChallengeService - .getUserChallenges(vm.handle, vm.challengeApiParams) - .then(function (challenge) { - if (challenge[0] && challenge[0].result.content.length) { - challenge = challenge[0].result.content[0]; - vm.userRole = challenge.userDetails ? challenge.userDetails.roles : []; - } else { - vm.userRole = []; - } - //Set to test value if defined - vm.userRole = vm.mockUserRole ? vm.mockUserRole : vm.userRole; - }); + .getUserChallenges(vm.handle, vm.challengeApiParams) + .then(function (challenge) { + if (challenge[0] && challenge[0].result.content.length) { + challenge = challenge[0].result.content[0]; + vm.userRole = challenge.userDetails ? challenge.userDetails.roles : []; + } else { + vm.userRole = []; + } + //Set to test value if defined + vm.userRole = vm.mockUserRole ? vm.mockUserRole : vm.userRole; + }); ChallengeService - .getChallenge(challengeId) - .then(function (challenge) { - processChallenge(challenge, handle, vm, ChallengeService); - vm.callComplete = true; - $timeout(function () { - window.prerenderReady = true; - }, 100); - $('#cdNgMain').show(); - }); + .getChallenge(challengeId) + .then(function (challenge) { + processChallenge(challenge, handle, vm, ChallengeService); + vm.callComplete = true; + $timeout(function () { + window.prerenderReady = true; + }, 100); + $('#cdNgMain').show(); + }); } function updateChallengeDetail() { ChallengeService - .getChallenge(challengeId) - .then(function (challenge) { - processChallenge(challenge, vm.handle, vm, ChallengeService); - }); + .getChallenge(challengeId) + .then(function (challenge) { + processChallenge(challenge, vm.handle, vm, ChallengeService); + }); } /** @@ -227,8 +221,8 @@ if (app.isLoggedIn()) { ChallengeService - .registerToChallenge(challengeId) - .then( + .registerToChallenge(challengeId) + .then( function (data) { if (data["message"] === "ok") { showModal("#registerSuccess"); @@ -239,14 +233,15 @@ } updateChallengeDetail(); } - }, function (reason) { + }, + function (reason) { if (reason["error"]["details"] === "You should agree with all terms of use.") { window.location = "/challenge-details/terms/" + vm.challenge.challengeId + "?challenge-type=" + challengeType; } else if (reason["error"]["details"]) { showError(reason["error"]["details"]); } } - ); + ); } else { //set register Delay cookie for auto register when user returns to page //angularjs $cookies is too basic and does not support setting any cookie options such as expires, so must use jQuery method here @@ -266,8 +261,8 @@ function unregisterFromChallenge() { if (app.isLoggedIn()) { ChallengeService - .unregisterFromChallenge(challengeId) - .then( + .unregisterFromChallenge(challengeId) + .then( function (data) { if (data["message"] === "ok") { showModal("#unregisterSuccess"); @@ -275,12 +270,13 @@ document.cookie = 'tcDelayChallengeAction=; path=/; domain=.' + tcconfig.domain + '; expires=' + new Date(0).toUTCString(); updateChallengeDetail(); } - }, function (reason) { + }, + function (reason) { if (reason["error"]["details"]) { showError(reason["error"]["details"]); } } - ); + ); } } @@ -311,21 +307,21 @@ if ((challenge.currentPhaseName != 'Stalled' && challenge.checkpointSubmissionEndDate && challenge.checkpointSubmissionEndDate != '') || (challenge.checkpoints && challenge.checkpoints.length > 0)) { ChallengeService .getCheckpointData(challengeId) - .then(function(data) { - if (data && !data.error) { - vm.checkpointData = data; - vm.checkpointResults = data.checkpointResults; - //set variables for design challenge checkpoint results - if (vm.isDesign) { - vm.numCheckpointSubmissions = data.numberOfPassedScreeningSubmissions; - vm.numberOfPassedScreeningSubmissions = data.numberOfPassedScreeningSubmissions; - vm.numberOfPassedScreeningUniqueSubmitters = data.numberOfPassedScreeningUniqueSubmitters; - vm.numberOfUniqueSubmitters = data.numberOfUniqueSubmitters; - vm.checkpointPassedScreeningSubmitterPercentage = Math.floor((vm.numberOfPassedScreeningUniqueSubmitters / vm.numberOfUniqueSubmitters) * 100); - vm.checkpointPassedScreeningSubmissionPercentage = Math.floor((vm.numberOfPassedScreeningSubmissions / vm.numCheckpointSubmissions) * 100); + .then(function (data) { + if (data && !data.error) { + vm.checkpointData = data; + vm.checkpointResults = data.checkpointResults; + //set variables for design challenge checkpoint results + if (vm.isDesign) { + vm.numCheckpointSubmissions = data.numberOfPassedScreeningSubmissions; + vm.numberOfPassedScreeningSubmissions = data.numberOfPassedScreeningSubmissions; + vm.numberOfPassedScreeningUniqueSubmitters = data.numberOfPassedScreeningUniqueSubmitters; + vm.numberOfUniqueSubmitters = data.numberOfUniqueSubmitters; + vm.checkpointPassedScreeningSubmitterPercentage = Math.floor((vm.numberOfPassedScreeningUniqueSubmitters / vm.numberOfUniqueSubmitters) * 100); + vm.checkpointPassedScreeningSubmissionPercentage = Math.floor((vm.numberOfPassedScreeningSubmissions / vm.numCheckpointSubmissions) * 100); + } } - } - }); + }); } //Bugfix refactored-challenge-details-40: format currency values with comma delimiters @@ -339,25 +335,29 @@ vm.scope.challenge = vm.challenge = challenge; - var regList = challenge.registrants.map(function(x) { return x.handle; }); - var submitters = challenge.registrants.map(function(x) { + var regList = challenge.registrants.map(function (x) { + return x.handle; + }); + var submitters = challenge.registrants.map(function (x) { if (x.submissionDate.length > 0) { return x.handle; } }); - var provisionalNumFinalSubmitters = challenge.registrants.filter(function(x) { + var provisionalNumFinalSubmitters = challenge.registrants.filter(function (x) { return x.submissionDate.length > 0; }).length; - var submissionMap = challenge.submissions.map(function(x) { return x.handle; }); + var submissionMap = challenge.submissions.map(function (x) { + return x.handle; + }); // these are the buttons for registration, and submission vm.challenge.registrationDisabled = true; - vm.challenge.submissionDisabled = true; + vm.challenge.submissionDisabled = true; // true when to unregister is the valid option - vm.challenge.allowToUnregister = false; + vm.challenge.allowToUnregister = false; // button for peer review for challenges with reviewType === PEER - vm.challenge.peerReviewDisabled = true; + vm.challenge.peerReviewDisabled = true; vm.challenge.url = window.location.href; @@ -400,12 +400,12 @@ } var currentDate = new Date(); - if(challenge.challengeCommunity == 'design' && challenge.checkpointSubmissionEndDate && vm.isLoggedIn && regList.indexOf(handle) > -1 && new Date(challenge.currentPhaseEndDate) > new Date(challenge.checkpointSubmissionEndDate)){ + if (challenge.challengeCommunity == 'design' && challenge.checkpointSubmissionEndDate && vm.isLoggedIn && regList.indexOf(handle) > -1 && new Date(challenge.currentPhaseEndDate) > new Date(challenge.checkpointSubmissionEndDate)) { //checkpoint phase - if(currentDate.getTime() < new Date(challenge.checkpointSubmissionEndDate)) { + if (currentDate.getTime() < new Date(challenge.checkpointSubmissionEndDate)) { challenge.currentPhaseEndDate = challenge.checkpointSubmissionEndDate; challenge.currentPhaseName = 'Checkpoint'; - } else if( currentDate.getTime() < new Date(challenge.submissionEndDate)){ //past checkpoint - submission phase + } else if (currentDate.getTime() < new Date(challenge.submissionEndDate)) { //past checkpoint - submission phase challenge.currentPhaseEndDate = challenge.submissionEndDate; challenge.currentPhaseName = 'Submission'; } @@ -413,21 +413,20 @@ if (challenge.currentPhaseEndDate) { var endPhaseDate = new Date(challenge.currentPhaseEndDate); - vm.challenge.currentPhaseRemainingTime = Math.max((endPhaseDate.getTime()-currentDate.getTime())/1000, 0) || -1; - } - else vm.challenge.currentPhaseRemainingTime = -1; + vm.challenge.currentPhaseRemainingTime = Math.max((endPhaseDate.getTime() - currentDate.getTime()) / 1000, 0) || -1; + } else vm.challenge.currentPhaseRemainingTime = -1; - vm.challenge.registrants.map(function(x) { + vm.challenge.registrants.map(function (x) { if (submissionMap[x.handle]) x.submissionStatus = submissionMap[x.handle].submissionStatus; }); vm.reliabilityBonus = challenge.reliabilityBonus; - vm.inSubmission = challenge.currentPhaseName.indexOf('Submission') >= 0; - vm.inScreening = challenge.currentPhaseName.indexOf('Screening') >= 0; - vm.inReview = challenge.currentPhaseName.indexOf('Review') >= 0; - vm.hasFiletypes = ((typeof challenge.filetypes) !== 'undefined') && challenge.filetypes.length > 0; - vm.numRegistrants = challenge.numberOfRegistrants; - vm.numSubmissions = challenge.numberOfSubmissions; + vm.inSubmission = challenge.currentPhaseName.indexOf('Submission') >= 0; + vm.inScreening = challenge.currentPhaseName.indexOf('Screening') >= 0; + vm.inReview = challenge.currentPhaseName.indexOf('Review') >= 0; + vm.hasFiletypes = ((typeof challenge.filetypes) !== 'undefined') && challenge.filetypes.length > 0; + vm.numRegistrants = challenge.numberOfRegistrants; + vm.numSubmissions = challenge.numberOfSubmissions; vm.numCheckpointSubmissions = challenge.numberOfCheckpointSubmissions; vm.isPeerReviewed = vm.challenge.reviewType === 'PEER'; @@ -443,14 +442,14 @@ } else { vm.reviewStyle = 'Community Review Board'; vm.reviewStyleTooltip = 'Community Review Board performs a thorough review based on scorecards.'; - vm.reviewScorecardLink = '//software.' + vm.domain +'/review/actions/ViewScorecard.do?method=viewScorecard&scid=' + reviewScorecardId; + vm.reviewScorecardLink = '//software.' + vm.domain + '/review/actions/ViewScorecard.do?method=viewScorecard&scid=' + reviewScorecardId; } vm.hasCheckpoints = vm.numCheckpointSubmissions > 0; if (vm.numSubmissions == 0 && !vm.hasCheckpoints && provisionalNumFinalSubmitters > 0) { vm.numSubmissions = provisionalNumFinalSubmitters; } - vm.submissionNumberString = function() { + vm.submissionNumberString = function () { if (vm.results || !vm.hasCheckpoints) return '(' + vm.numSubmissions + ')'; return ''; } @@ -460,7 +459,7 @@ if (challenge.currentStatus != 'Draft' && (challenge.currentPhaseName != 'Stalled' || challenge.currentStatus == 'Completed') && (challenge.currentStatus == 'Completed' || challenge.currentPhaseEndDate == '')) { ChallengeService .getResults(challengeId) - .then(function(results) { + .then(function (results) { vm.results = results; vm.firstPlaceSubmission = results.firstPlaceSubmission; vm.secondPlaceSubmission = results.secondPlaceSubmission; @@ -468,7 +467,7 @@ //set variables for design challenge results if (vm.isDesign) { //filter all submitters that passed screening - var passedScreen = results.results.filter(function(element){ + var passedScreen = results.results.filter(function (element) { if (element.submissionStatus !== "Failed Screening") { return true; } @@ -476,21 +475,21 @@ }); //push all passing submitter handles to new array var resultPassingHandles = []; - passedScreen.forEach(function(el){ + passedScreen.forEach(function (el) { resultPassingHandles.push(el.handle); }); //get number of unique final submitters that have passed screening - vm.finalSubmittersPassedScreening = resultPassingHandles.filter(function(element, elIndex, arr){ + vm.finalSubmittersPassedScreening = resultPassingHandles.filter(function (element, elIndex, arr) { return arr.indexOf(element) == elIndex; }).length; //push all submitter handles to new array var resultHandles = []; - results.results.forEach(function(el){ + results.results.forEach(function (el) { resultHandles.push(el.handle); }); //get number of unique final submitters regardless of screening status - vm.numFinalSubmitters = resultHandles.filter(function(element, elIndex, arr){ + vm.numFinalSubmitters = resultHandles.filter(function (element, elIndex, arr) { return arr.indexOf(element) == elIndex; }).length; @@ -501,7 +500,7 @@ } vm.initialScoreSum = 0; vm.finalScoreSum = 0; - vm.submissions.map(function(x) { + vm.submissions.map(function (x) { vm.initialScoreSum += x.initialScore; vm.finalScoreSum += x.finalScore; }); @@ -514,19 +513,18 @@ winnerMap[vm.submissions[i].handle] = true; } } - vm.challenge.registrants.map(function(x) { + vm.challenge.registrants.map(function (x) { if (winnerMap[x.handle]) x.winner = true; }); if (vm.winningSubmissions.length == 0) vm.firstPlaceSubmission = false; if (vm.winningSubmissions.length < 2) vm.secondPlaceSubmission = false; - if(challenge.reviewType === "PEER") { - ChallengeService.getPeerReviewResults(challengeId).then(function(data) { + if (challenge.reviewType === "PEER") { + ChallengeService.getPeerReviewResults(challengeId).then(function (data) { vm.peerReviewResults = data; }); } - } - ); + }); } // top section @@ -536,58 +534,59 @@ initButtons(vm); } - function initButtons(vm) { - function getButton(button) { - // buttons have 5 props -> href, classes, onClick, spanText and text - var buttons = { - register: { - href: '', - classes: 'challengeRegisterBtn ' + vm.challenge.registrationDisabled ? 'disabled ': 'disabledNOT', - onClick: 'registerToChallenge', - spanText: 1, - text: 'Register For This Challenge' - }, - unregister: { - href: '', - classes: 'challengeRegisterBtn ' + vm.challenge.allowToUnregister ? 'unregister' : '', - onClick: 'unregisterFromChallenge', - spanText: 1, - text: 'Unregister From This Challenge' - }, - submit: { - href: '/challenge-details/'+ vm.challenge.challengeId +'/submit/?type=develop/', - classes: vm.challenge.submissionDisabled ? 'disabled ' : 'disabledNOT', - onClick: '', - spanText: 2, - text: 'Submit Your Entries' - }, - viewScorecard: { - href: '//' + vm.reviewAppURL+'/actions/ViewProjectDetails?pid=' + vm.challenge.challengeId, - classes: '', - onClick: '', - spanText: 1, - text: 'View Scorecard', - }, - completeAppeals: { - href: '//'+ vm.reviewAppURL+'/actions/EarlyAppeals?pid='+ vm.challenge.challengeId, - classes: 'unregister', - onClick: '', - spanText: 2, - text: 'Complete Appeals' - } - } - return buttons[button] + /** + * Prepare data for template + * + * @param button.text required string + * @param button.onClick or button.href required + * @param button.classes optional + * @returns new button {} + */ + function newButton(button) { + if (!button.text || (!button.onClick && !button.href)) { + return false; } + var tempButton = {}; + tempButton.text = button.text || ''; + tempButton.classes = button.classes || ''; + if (button.href) { + tempButton.href = button.href; + } else { + tempButton.onClick = button.onClick; + } + return tempButton; + } + + function initButtons(vm) { if (vm.challenge.currentPhaseName === 'Appeals' && vm.hasSubmitted) { - vm.buttons.push(getButton('viewScorecard')) - vm.buttons.push(getButton('completeAppeals')) + vm.buttons.push(newButton({ + text: 'View Scorecard', + href: '//' + vm.reviewAppURL + '/actions/ViewProjectDetails?pid=' + vm.challenge.challengeId, + })); + vm.buttons.push(newButton({ + text: 'Complete Appeals', + href: '//' + vm.reviewAppURL + '/actions/EarlyAppeals?pid=' + vm.challenge.challengeId, + classes: 'unregister' + })); } else { if (vm.challenge.allowToUnregister) { - vm.buttons.push(getButton('unregister')) + vm.buttons.push(newButton({ + classes: 'challengeRegisterBtn ' + vm.challenge.allowToUnregister ? 'unregister' : '', + onClick: vm.unregisterFromChallenge, + text: 'Unregister From This Challenge' + })) } else { - vm.buttons.push(getButton('register')) + vm.buttons.push(newButton({ + classes: 'challengeRegisterBtn ' + vm.challenge.registrationDisabled ? 'disabled ' : 'disabledNOT', + onClick: vm.registerToChallenge, + text: 'Register For This Challenge' + })) } - vm.buttons.push(getButton('submit')) + vm.buttons.push(newButton({ + href: '/challenge-details/' + vm.challenge.challengeId + '/submit/?type=develop', + classes: vm.challenge.submissionDisabled ? 'disabled ' : 'disabledNOT', + text: 'Submit Your Entries' + })); } } /** @@ -650,4 +649,4 @@ } } -})(); +})(); \ No newline at end of file From 713ca2aa5e03c321a57eff5a74c195aeb6179f24 Mon Sep 17 00:00:00 2001 From: shubhu Date: Tue, 21 Feb 2017 14:16:51 +0530 Subject: [PATCH 3/6] more linting --- .../js/controllers/challenge-details-controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index 0bae3a0f..a483bb00 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -571,7 +571,7 @@ } else { if (vm.challenge.allowToUnregister) { vm.buttons.push(newButton({ - classes: 'challengeRegisterBtn ' + vm.challenge.allowToUnregister ? 'unregister' : '', + classes: 'challengeRegisterBtn unregister', onClick: vm.unregisterFromChallenge, text: 'Unregister From This Challenge' })) From 8924b75a37a139741c83b0053ec2475b6ffc3b43 Mon Sep 17 00:00:00 2001 From: shubhu Date: Wed, 22 Feb 2017 01:08:43 +0530 Subject: [PATCH 4/6] fixed register button class and reset button on unregister --- .../js/controllers/challenge-details-controller.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index a483bb00..b100874b 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -558,6 +558,7 @@ } function initButtons(vm) { + vm.buttons = []; if (vm.challenge.currentPhaseName === 'Appeals' && vm.hasSubmitted) { vm.buttons.push(newButton({ text: 'View Scorecard', @@ -574,17 +575,17 @@ classes: 'challengeRegisterBtn unregister', onClick: vm.unregisterFromChallenge, text: 'Unregister From This Challenge' - })) + })); } else { vm.buttons.push(newButton({ - classes: 'challengeRegisterBtn ' + vm.challenge.registrationDisabled ? 'disabled ' : 'disabledNOT', + classes: 'challengeRegisterBtn ' + (vm.challenge.registrationDisabled ? 'disabled ' : 'disabledNOT'), onClick: vm.registerToChallenge, text: 'Register For This Challenge' - })) + })); } vm.buttons.push(newButton({ href: '/challenge-details/' + vm.challenge.challengeId + '/submit/?type=develop', - classes: vm.challenge.submissionDisabled ? 'disabled ' : 'disabledNOT', + classes: (vm.challenge.submissionDisabled ? 'disabled ' : 'disabledNOT'), text: 'Submit Your Entries' })); } From ac211549a8abceacf8ca0a16aefb19bf43dcd36a Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Wed, 22 Feb 2017 00:39:06 +0100 Subject: [PATCH 5/6] An update to newButton() docs --- .../controllers/challenge-details-controller.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index b100874b..efca269e 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -535,12 +535,17 @@ } /** - * Prepare data for template + * Creates a new button for user actions at the Challenge Details page. * - * @param button.text required string - * @param button.onClick or button.href required - * @param button.classes optional - * @returns new button {} + * @param {String} button.classes Classes to add to the button. + * @param {String} button.href URL to follow when the button is clicked. + * Alternatively, the caller may provide `button.onClick` instead, but not + * both. + * @param {Function} button.onClick Callback to trigger when the button is + * clicked. Alternatively, the caller may provide `button.href` instead, but + * not both. + * @param {String} button.text Button label. + * @return Button object. */ function newButton(button) { if (!button.text || (!button.onClick && !button.href)) { From 861bcb7be7221b3353add55e6935106b009b34c5 Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Wed, 22 Feb 2017 00:46:03 +0100 Subject: [PATCH 6/6] A few small changes --- .../challenge-details-controller.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js index efca269e..c8db2c08 100644 --- a/src/js/app/challenge-details/js/controllers/challenge-details-controller.js +++ b/src/js/app/challenge-details/js/controllers/challenge-details-controller.js @@ -549,17 +549,14 @@ */ function newButton(button) { if (!button.text || (!button.onClick && !button.href)) { - return false; + throw new Error('Invalid arguments in the newButton() method!'); } - var tempButton = {}; - tempButton.text = button.text || ''; - tempButton.classes = button.classes || ''; - if (button.href) { - tempButton.href = button.href; - } else { - tempButton.onClick = button.onClick; - } - return tempButton; + var res = {}; + res.text = button.text || ''; + res.classes = button.classes || ''; + if (button.href) res.href = button.href; + else res.onClick = button.onClick; + return res; } function initButtons(vm) { @@ -595,6 +592,7 @@ })); } } + /** * Prepares phase specific member program details. This detail is used for PEER reviewed * challenges only.