From 585803ec1e909bcfb26a90a74f888e8e82c74575 Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Wed, 16 Mar 2016 19:50:38 +0530 Subject: [PATCH 01/54] AS:100624428182393, Create a modified Dashboard banner for TCO -- Added directive for adding banners just like empty state -- Added TCO 16 banner data --- .../tc-banner/tc-banner.directive.js | 56 ++++++++ app/directives/tc-banner/tc-banner.jade | 11 ++ app/index.js | 1 + app/my-dashboard/my-dashboard.jade | 3 + app/services/bannerDataService.js | 51 +++++++ assets/css/directives/tc-banner.scss | 127 ++++++++++++++++++ assets/css/my-dashboard/my-dashboard.scss | 4 +- 7 files changed, 251 insertions(+), 2 deletions(-) create mode 100644 app/directives/tc-banner/tc-banner.directive.js create mode 100644 app/directives/tc-banner/tc-banner.jade create mode 100644 app/services/bannerDataService.js create mode 100644 assets/css/directives/tc-banner.scss diff --git a/app/directives/tc-banner/tc-banner.directive.js b/app/directives/tc-banner/tc-banner.directive.js new file mode 100644 index 000000000..d0b564eeb --- /dev/null +++ b/app/directives/tc-banner/tc-banner.directive.js @@ -0,0 +1,56 @@ +import angular from 'angular' +import _ from 'lodash' + +(function() { + 'use strict' + + angular.module('tcUIComponents') + .directive('tcBanner', tcBanner) + + tcBanner.$inject = ['CONSTANTS', 'BannerDataService'] + + function tcBanner(CONSTANTS, BannerDataService) { + return { + restrict: 'E', + transclude: true, + template: require('./tc-banner')(), + scope: { + bannerName: '@', + theme: '@' + }, + link : function(scope, element, attrs) { + var rootDiv = angular.element(element.children()[0]) + var contentDiv = _.find(rootDiv.children(), function(el) { + return angular.element(el).hasClass('content') + }) + scope.transcluded = angular.element(contentDiv)[0].children.length > 0 + }, + controller: ['$scope', '$attrs', '$element', '$parse', '$rootScope', function($scope, $attrs, $element, $parse, $rootScope) { + $scope.DOMAIN = CONSTANTS.domain + var vm = this + vm.title = null + vm.description = null + vm.img = null + vm.theme = _.get($scope, 'theme', null) + vm.ctas = null + + activate() + + vm.handleClick = function(_link) { + $rootScope.$broadcast(_link.eventName) + } + + function activate() { + var banner = BannerDataService.getBanner($scope.bannerName) + if (banner) { + vm.title = banner.title + vm.img = banner.img + vm.description = banner.description + vm.ctas = banner.ctas + } + } + }], + controllerAs: 'vm' + } + } +})() diff --git a/app/directives/tc-banner/tc-banner.jade b/app/directives/tc-banner/tc-banner.jade new file mode 100644 index 000000000..e1e541b95 --- /dev/null +++ b/app/directives/tc-banner/tc-banner.jade @@ -0,0 +1,11 @@ +.tc-banner-placeholder(class="{{vm.theme}}") + .image + img(ng-src="{{vm.img}}") + .title(ng-bind="vm.title") + .content(ng-transclude, ng-show="transcluded") + .description(ng-bind="vm.description") + .ctas + .cta(ng-repeat="link in vm.ctas") + a(class="{{link.cssClass}}", title="{{link.title}}", ng-href="{{link.url}}", ng-if="link.url") {{link.title}} + a(class="{{link.cssClass}}", title="{{link.title}}", ui-sref="{{link.state}}", ng-if="link.state") {{link.title}} + a(class="{{link.cssClass}}", title="{{link.title}}", ng-click="vm.handleClick(link)", ng-if="link.eventName") {{link.title}} diff --git a/app/index.js b/app/index.js index 8febaa723..5db926381 100644 --- a/app/index.js +++ b/app/index.js @@ -113,6 +113,7 @@ require('../assets/css/directives/design-challenge-user-place.scss') require('../assets/css/directives/challenge-tile.scss') require('../assets/css/directives/challenge-links.directive.scss') require('../assets/css/directives/badge-tooltip.scss') +require('../assets/css/directives/tc-banner.scss') require('../assets/css/community/statistics.scss') require('../assets/css/community/members.scss') require('../assets/css/community/community.scss') diff --git a/app/my-dashboard/my-dashboard.jade b/app/my-dashboard/my-dashboard.jade index 4e7b91215..e452d9e3d 100644 --- a/app/my-dashboard/my-dashboard.jade +++ b/app/my-dashboard/my-dashboard.jade @@ -5,6 +5,9 @@ .challenges(id="challenges", ui-view="my-challenges") + .tco + tc-banner(theme="black", banner-name="tco16") + .srms(id="srms", ui-view="srms", ng-show="dashboard.showSRMs") .programs(id="community", ui-view="programs") diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js new file mode 100644 index 000000000..32a32f16d --- /dev/null +++ b/app/services/bannerDataService.js @@ -0,0 +1,51 @@ +import angular from 'angular' + +(function() { + 'use strict' + + angular.module('tc.services').factory('BannerDataService', BannerDataService) + + BannerDataService.$inject = ['CONSTANTS'] + + function BannerDataService(CONSTANTS) { + var bannersData = null + var domain = CONSTANTS.domain + _init() + + var service = { + getBanner: getBanner + } + + return service + + function getBanner(stateName) { + if (bannersData[stateName]) { + return bannersData[stateName] + } + return null + } + + function _getUrl (path) { + return 'https://www.' + domain + path + } + + function _getIOSUrl(path) { + return 'https://ios.' + domain + path + } + + function _init() { + bannersData = { + 'tco16': { + title: '2016 Topcoder Open', + img: require("../../assets/images/nav/ico-tco16.svg"), + description: 'The Topcoder Open (TCO) is our annual online and onsite tournament to celebrate and reward the community.', + ctas: [{ + title: 'About TCO', + url: 'http://tco16.topcoder.com', + cssClass: 'tc-btn tc-btn-s tco-cta' + }] + } + } + } + } +})() diff --git a/assets/css/directives/tc-banner.scss b/assets/css/directives/tc-banner.scss new file mode 100644 index 000000000..b9b11d802 --- /dev/null +++ b/assets/css/directives/tc-banner.scss @@ -0,0 +1,127 @@ +@import 'topcoder/tc-includes'; + +$tco-color: #F47A20; +$tco-color-dark: #ea690b; + +.tc-banner-placeholder { + display: flex; + flex-direction: column; + align-items: center; + color: $gray-darkest; + padding: 20px 10px 20px 10px; + @media only screen and (min-width: 768px) { + padding: 30px 20px 30px 20px; + } + + .image { + margin-bottom: 15px; + + img { + width: 186px; + } + } + + .title { + @include sofia-pro-medium; + font-size: 24px; + line-height: 29px; + text-align: center; + text-transform: uppercase; + } + + .content { + margin-top: 20px; + @media only screen and (min-width: 768px) { + margin-top: 30px; + } + } + + .description { + max-width: 650px; + margin-top: 20px; + @include merriweather-sans-regular; + font-size: 15px; + line-height: 24px; + text-align: center; + @media only screen and (min-width: 768px) { + margin-top: 30px; + } + @media only screen and (min-width: 900px) { + max-width: 856px; + } + } + + .ctas { + text-align: center; + display: flex; + flex-direction: column; + margin-top: 20px; + @media only screen and (min-width: 768px) { + margin-top: 30px; + } + + .cta { + &:not(:first-child) { + margin-top: 30px; + } + } + + a { + text-transform: uppercase; + display: block; + @include sofia-pro-medium; + + &.primary-cta { + } + + &.secondary-cta { + font-size: 12px; + line-height: 12px; + color: $accent-gray; + } + + &.tco-cta { + border: 1px solid $tco-color; + background-color: $tco-color; + + &:focus { + border: 1px solid $tco-color; + background-color: $tco-color; + } + + &:hover { + background-color: $tco-color-dark; + border-color: $tco-color-dark; + } + + &:active { + background-color: $tco-color-dark; + border-color: $tco-color-dark; + } + } + } + } +} + +// themes + +// black +.tc-banner-placeholder.black { + background-color: #222222; + .title { + @include sofia-pro-bold; + color: $white; + } + + .description { + color: $white; + } + + .ctas { + .cta { + .learn-more { + color: $gray-lighter; + } + } + } +} diff --git a/assets/css/my-dashboard/my-dashboard.scss b/assets/css/my-dashboard/my-dashboard.scss index 956a9762e..9a4c48a00 100644 --- a/assets/css/my-dashboard/my-dashboard.scss +++ b/assets/css/my-dashboard/my-dashboard.scss @@ -11,7 +11,7 @@ background-color: $white; } - .challenges, .srms, .programs, .community-updates { + .challenges, .srms, .programs, .tco, .community-updates { @include module-l; margin-top: 1px; width: 100%; @@ -23,7 +23,7 @@ } } - .challenges, .srms, .programs, .community-updates { + .challenges, .srms, .programs, .tco, .community-updates { @media only screen and (min-width: 900px) { padding-top: 0px; } From 3e9b92d6a3c7ca5bd966ebf19b693d4390e33672 Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Wed, 16 Mar 2016 20:01:41 +0530 Subject: [PATCH 02/54] AS:100624428182393, Create a modified Dashboard banner for TCO -- Fixed lint errors --- app/services/bannerDataService.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js index 32a32f16d..f9a66cd80 100644 --- a/app/services/bannerDataService.js +++ b/app/services/bannerDataService.js @@ -25,19 +25,11 @@ import angular from 'angular' return null } - function _getUrl (path) { - return 'https://www.' + domain + path - } - - function _getIOSUrl(path) { - return 'https://ios.' + domain + path - } - function _init() { bannersData = { 'tco16': { title: '2016 Topcoder Open', - img: require("../../assets/images/nav/ico-tco16.svg"), + img: require('../../assets/images/nav/ico-tco16.svg'), description: 'The Topcoder Open (TCO) is our annual online and onsite tournament to celebrate and reward the community.', ctas: [{ title: 'About TCO', From e31c52d3a19fd1bde8dd78089d4281eda58fbedc Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Wed, 16 Mar 2016 20:11:34 +0530 Subject: [PATCH 03/54] AS:100624428182393, Create a modified Dashboard banner for TCO -- Fixed lint errors --- app/services/bannerDataService.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js index f9a66cd80..5edb77bf5 100644 --- a/app/services/bannerDataService.js +++ b/app/services/bannerDataService.js @@ -9,7 +9,6 @@ import angular from 'angular' function BannerDataService(CONSTANTS) { var bannersData = null - var domain = CONSTANTS.domain _init() var service = { From 0e6d9e7373b906e2f8ad32a5915136960b4a5e97 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 16 Mar 2016 09:24:57 -0700 Subject: [PATCH 04/54] Add view my submissions button --- app/submissions/submit-design-files/submit-design-files.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/submissions/submit-design-files/submit-design-files.jade b/app/submissions/submit-design-files/submit-design-files.jade index 65b641fe0..c9dad5ad9 100644 --- a/app/submissions/submit-design-files/submit-design-files.jade +++ b/app/submissions/submit-design-files/submit-design-files.jade @@ -178,6 +178,8 @@ modal.transition(show="vm.showProgress", background-click-close="false", style=" a.tc-btn.tc-btn-s.tc-btn-ghost(ng-click="vm.refreshPage()") Submit another + a.tc-btn.tc-btn-s.tc-btn-ghost(ng-href="http://studio.{{DOMAIN}}/?module=ViewSubmission&ct={{submissions.challengeId}}") View my submissions + .upload-progress__error(ng-show="vm.errorInUpload") #[span File upload failed] From 46d5804732011879cf2f9e74ec2e732435414f0e Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 16 Mar 2016 09:28:39 -0700 Subject: [PATCH 05/54] Use .gitignore for ignore path --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9eef08945..c849e1fb6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "build": "webpack --bail --progress --build --tc", "start": "webpack-dev-server --history-api-fallback --dev --tc --inline --progress --port 3000", - "lint": "eslint .", + "lint": "eslint --ignore-path .gitignore .", "test": "karma start --tc --test" }, "devDependencies": { From 8003f398732863c7cb6b8134c2aba7bb511b4383 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 16 Mar 2016 09:51:45 -0700 Subject: [PATCH 06/54] Fix margins --- assets/css/submissions/submit-file.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/css/submissions/submit-file.scss b/assets/css/submissions/submit-file.scss index 5070612ec..c4a2775cb 100644 --- a/assets/css/submissions/submit-file.scss +++ b/assets/css/submissions/submit-file.scss @@ -185,9 +185,10 @@ modal { a { display: inline-block; + margin-right: 10px; - &:first-child { - margin-right: 10px; + &:last-child { + margin-right: 0; } } } From 8c234320d3df5ada8e9508b02f64db4a841e6258 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 16 Mar 2016 11:58:21 -0700 Subject: [PATCH 07/54] Update button text --- app/submissions/submit-design-files/submit-design-files.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/submissions/submit-design-files/submit-design-files.jade b/app/submissions/submit-design-files/submit-design-files.jade index c9dad5ad9..67678b4f4 100644 --- a/app/submissions/submit-design-files/submit-design-files.jade +++ b/app/submissions/submit-design-files/submit-design-files.jade @@ -176,7 +176,7 @@ modal.transition(show="vm.showProgress", background-click-close="false", style=" .upload-progess__links a.tc-btn.tc-btn-s(ng-href="https://www.{{DOMAIN}}/challenge-details/{{submissions.challengeId}}/?type={{submissions.track}}") Back to the challenge - a.tc-btn.tc-btn-s.tc-btn-ghost(ng-click="vm.refreshPage()") Submit another + a.tc-btn.tc-btn-s.tc-btn-ghost(ng-click="vm.refreshPage()") Add another design a.tc-btn.tc-btn-s.tc-btn-ghost(ng-href="http://studio.{{DOMAIN}}/?module=ViewSubmission&ct={{submissions.challengeId}}") View my submissions From 1a15fe4d102a79d45607a2e32664d39f75254e19 Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Thu, 17 Mar 2016 10:44:46 +0530 Subject: [PATCH 08/54] AS:100624428182393, Create a modified Dashboard banner for TCO -- Fixed padding for non desktop layouts. --- assets/css/my-dashboard/my-dashboard.scss | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/css/my-dashboard/my-dashboard.scss b/assets/css/my-dashboard/my-dashboard.scss index 9a4c48a00..58b7cd237 100644 --- a/assets/css/my-dashboard/my-dashboard.scss +++ b/assets/css/my-dashboard/my-dashboard.scss @@ -24,9 +24,7 @@ } .challenges, .srms, .programs, .tco, .community-updates { - @media only screen and (min-width: 900px) { - padding-top: 0px; - } + padding-top: 0px; } .section-title { From 06e964258e5e6ce00c97c9d4219dee4cb7e96d3b Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:31:49 -0700 Subject: [PATCH 09/54] Add fonts to topcoder app --- app/index.jade | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/index.jade b/app/index.jade index 643079b39..6d23fbbce 100644 --- a/app/index.jade +++ b/app/index.jade @@ -7,6 +7,15 @@ html meta(http-equiv="X-UA-Compatible", content="IE=edge, chrome=1") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no") meta(name="fragment", content="!") + script. + (function(d) { + var config = { + kitId: 'gig7sjk', + scriptTimeout: 3000, + async: true + }, + h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\bwf-loading\b/g,"")+" wf-inactive";},config.scriptTimeout),tk=d.createElement("script"),f=false,s=d.getElementsByTagName("script")[0],a;h.className+=" wf-loading";tk.src='https://use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!="complete"&&a!="loaded")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s) + })(document); include ../assets/scripts/google.analytics.jade From e8345ac2952b5714674511e0a3a0d9b76d0c03fb Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:39:37 -0700 Subject: [PATCH 10/54] Add babel-polyfill to entrypoint --- app/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/index.js b/app/index.js index 5db926381..88d8a918b 100644 --- a/app/index.js +++ b/app/index.js @@ -1,3 +1,5 @@ +import 'babel-polyfill' + require('angular') require('auth0-js') require('auth0-angular') From b42513ae9f8273891b03a7e32ab7136f1a760359 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:39:58 -0700 Subject: [PATCH 11/54] Add member search module to topcoder angular app --- app/topcoder.module.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/topcoder.module.js b/app/topcoder.module.js index 60679de07..d3a6f5c8b 100644 --- a/app/topcoder.module.js +++ b/app/topcoder.module.js @@ -17,6 +17,7 @@ import angular from 'angular' 'tc.skill-picker', 'tc.sitemap', 'tc.community', + 'tc.search', 'ui.router', 'blocks.logger', 'blocks.exception', From 257576a3fcef695e3ce63e5a77a7e2b3bbee7aaa Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:40:25 -0700 Subject: [PATCH 12/54] Add override styles to fix member search inside angular --- assets/css/topcoder.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/assets/css/topcoder.scss b/assets/css/topcoder.scss index e9888cd7d..03adb7bd5 100644 --- a/assets/css/topcoder.scss +++ b/assets/css/topcoder.scss @@ -541,3 +541,15 @@ $switch-inactive-color: $gray; right: $switch-handle-offset + $switch-handle-size -1; top: 0; } + +// DELETE when moving member search back +// Also delete TypeKit fonts from index.html +// Also delete redux-logger and babel-polyfill from npm modules +// also delete babel-polyfill from index.js +#member-search-wrapper { + font-family: Roboto !important; + + .member-search-view { + background-color: transparent; + } +} From fe0ebdb31663042d246f714c15214190d3ff4981 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:40:47 -0700 Subject: [PATCH 13/54] Add babel-polyfill, redux-logger, topcoder-app-r to package.json --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c849e1fb6..fec09d3bb 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "devDependencies": { "angular-mocks": "^1.4.9", "appirio-tech-webpack-config": "^0.2.0", - "babel-loader": "^6.2.1", + "babel-polyfill": "^6.7.2", "bardjs": "^0.1.8", "bower": "^1.6.8", "chai": "^3.5.0", @@ -32,6 +32,7 @@ "mocha": "^2.4.5", "phantomjs-polyfill": "0.0.1", "phantomjs-prebuilt": "^2.1.3", + "redux-logger": "^2.6.1", "sinon": "^1.17.3", "sinon-chai": "^2.8.0", "webpack": "1.x" @@ -67,6 +68,7 @@ "react-select": "1.0.0-beta8", "restangular": "^1.5.2", "tc-angular-ellipsis": "^0.1.6", + "topcoder-app-r": "0.0.2", "xml2js": "^0.4.16", "zepto": "^1.0.1" } From 311bcbc154e7a6991dd67a2ce32b52c62aeb5126 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:41:06 -0700 Subject: [PATCH 14/54] Add member search angular module that wraps React member search --- app/member-search/member-search.directive.js | 15 +++++++++++ app/member-search/member-search.jade | 2 ++ app/member-search/member-search.module.js | 7 +++++ app/member-search/member-search.routes.js | 27 ++++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 app/member-search/member-search.directive.js create mode 100644 app/member-search/member-search.jade create mode 100644 app/member-search/member-search.module.js create mode 100644 app/member-search/member-search.routes.js diff --git a/app/member-search/member-search.directive.js b/app/member-search/member-search.directive.js new file mode 100644 index 000000000..87bd97539 --- /dev/null +++ b/app/member-search/member-search.directive.js @@ -0,0 +1,15 @@ +import angular from 'angular' + +(function() { + 'use strict' + + angular.module('tc.search').directive('memberSearch', memberSearch) + + var memberSearchPage = require('topcoder-app-r/src/indexTest').default + + memberSearch.$inject = ['reactDirective'] + + function memberSearch(reactDirective) { + return reactDirective(memberSearchPage) + } +})() diff --git a/app/member-search/member-search.jade b/app/member-search/member-search.jade new file mode 100644 index 000000000..93e38cd63 --- /dev/null +++ b/app/member-search/member-search.jade @@ -0,0 +1,2 @@ +div#member-search-wrapper + member-search diff --git a/app/member-search/member-search.module.js b/app/member-search/member-search.module.js new file mode 100644 index 000000000..691c6d553 --- /dev/null +++ b/app/member-search/member-search.module.js @@ -0,0 +1,7 @@ +import angular from 'angular' + +(function() { + 'use strict' + + angular.module('tc.search', []) +})() diff --git a/app/member-search/member-search.routes.js b/app/member-search/member-search.routes.js new file mode 100644 index 000000000..575129836 --- /dev/null +++ b/app/member-search/member-search.routes.js @@ -0,0 +1,27 @@ +import angular from 'angular' + +(function() { + 'use strict' + + angular.module('tc.search').config([ + '$stateProvider', + routes + ]) + + function routes($stateProvider) { + var states = { + 'memberSearch': { + url: '/search/members/', + parent: 'root', + template: require('./member-search')(), + data: { + title: 'Member Search' + } + } + } + for (var name in states) { + var state = states[name] + $stateProvider.state(name, state) + } + } +})() From f23dc65eb80aced7a2a2491cd51558cf7a512193 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 17 Mar 2016 17:46:25 -0700 Subject: [PATCH 15/54] Add module to tests --- webpack.tests.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webpack.tests.js b/webpack.tests.js index cf3e8f6c2..0b888203c 100644 --- a/webpack.tests.js +++ b/webpack.tests.js @@ -30,6 +30,7 @@ require('xml2js') require('appirio-tech-ng-ui-components') require('appirio-tech-ng-iso-constants') +require('topcoder-app-r/src/indexTest') // Require Angular modules first requireContextFiles(require.context('./app/', true, /^.*\.module\.js$/igm)) From f0f098fd9eb92a6f02f485076e5ee146355164c4 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 18 Mar 2016 10:52:32 -0700 Subject: [PATCH 16/54] Replace path with new search link --- app/layout/header/header.controller.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/layout/header/header.controller.js b/app/layout/header/header.controller.js index d67544bf0..1b2af8d8f 100644 --- a/app/layout/header/header.controller.js +++ b/app/layout/header/header.controller.js @@ -21,8 +21,12 @@ import _ from 'lodash' vm.menuLinks = NavService.menuLinks function checkSubmit(ev) { - if (ev.keyCode === 13) - window.location.replace(vm.constants.MAIN_URL + '/search?s=' + vm.searchTerm + '&scope=member') + if (ev.keyCode === 13) { + // window.location.replace(vm.constants.MAIN_URL + '/search?s=' + vm.searchTerm + '&scope=member') + + // Replace with new member search url + window.location.replace('/search/members/?q=' + vm.searchTerm) + } } activate() From 55819f6037c9a8d2ef55c82a1278ca912a53701e Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 18 Mar 2016 11:31:18 -0700 Subject: [PATCH 17/54] Use new version of member serach --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fec09d3bb..c21e703df 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "react-select": "1.0.0-beta8", "restangular": "^1.5.2", "tc-angular-ellipsis": "^0.1.6", - "topcoder-app-r": "0.0.2", + "topcoder-app-r": "0.0.3", "xml2js": "^0.4.16", "zepto": "^1.0.1" } From b2346b11cfdb6bde864bdac3a4b9e7e8b20356ae Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 18 Mar 2016 12:47:39 -0700 Subject: [PATCH 18/54] Move to import syntax --- app/member-search/member-search.directive.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/member-search/member-search.directive.js b/app/member-search/member-search.directive.js index 87bd97539..44c33a4c1 100644 --- a/app/member-search/member-search.directive.js +++ b/app/member-search/member-search.directive.js @@ -1,15 +1,14 @@ import angular from 'angular' +import { MemberSearchApp } from 'topcoder-app-r/src/indexTest' (function() { 'use strict' angular.module('tc.search').directive('memberSearch', memberSearch) - var memberSearchPage = require('topcoder-app-r/src/indexTest').default - memberSearch.$inject = ['reactDirective'] function memberSearch(reactDirective) { - return reactDirective(memberSearchPage) + return reactDirective(MemberSearchApp) } })() From 95c98a73b9f6fd066c62790d0f67ac8fa6f2ad49 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 18 Mar 2016 14:18:16 -0700 Subject: [PATCH 19/54] Add vic's changes - new image, not upper case title --- .../submit-design-files/submit-design-files.jade | 8 +++----- assets/css/submissions/submit-file.scss | 10 ++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/app/submissions/submit-design-files/submit-design-files.jade b/app/submissions/submit-design-files/submit-design-files.jade index 67678b4f4..ccdf77c64 100644 --- a/app/submissions/submit-design-files/submit-design-files.jade +++ b/app/submissions/submit-design-files/submit-design-files.jade @@ -156,14 +156,12 @@ modal.transition(show="vm.showProgress", background-click-close="false", style="background-color:white;") .upload-progress(ng-class="{'upload-progress--error': vm.errorInUpload}") .upload-progress__title - p Uploading submission for + p Uploading submission for "{{submissions.challengeTitle}}" - p.upload-progress-title__challenge-name(ng-bind="submissions.challengeTitle") - - img.upload-progress__image(src=require("../../../assets/images/robot.svg"), ng-hide="vm.errorInUpload") + img.upload-progress__image(src=require("../../../assets/images/skills/id-180.svg"), ng-hide="vm.errorInUpload") img.upload-progress__image--error(src=require("../../../assets/images/robot-embarresed.svg"), ng-show="vm.errorInUpload") - p.upload-progress__message(ng-hide="vm.errorInUpload") Hey, your work is AWESOME! Please don’t close the window while I’m working or you’ll lose all files! + p.upload-progress__message(ng-hide="vm.errorInUpload") Hey, your work is AWESOME! Please don’t close the window while the upload is in progress, or you’ll lose all files! p.upload-progress__message--error(ng-show="vm.errorInUpload") Oh, that’s embarrassing! One of the files couldn’t be uploaded, I’m so sorry. diff --git a/assets/css/submissions/submit-file.scss b/assets/css/submissions/submit-file.scss index c4a2775cb..96ff03653 100644 --- a/assets/css/submissions/submit-file.scss +++ b/assets/css/submissions/submit-file.scss @@ -122,20 +122,18 @@ modal { align-items: center; .upload-progress__title { - text-transform: uppercase; - @include font-with-weight('Sofia Pro', 500); - font-size: 24px; - line-height: 30px; - max-width: 355px; display: flex; flex-direction: column; align-items: center; text-align: center; + @include font-with-weight('Sofia Pro', 500); + font-size: 24px; + line-height: 30px; } .upload-progress__image, .upload-progress__image--error { - margin-top: 60px; + margin-top: 30px; } .upload-progress__message, From e5e26cf8421c42677a92c98137c25273245d9b6d Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 18 Mar 2016 14:23:32 -0700 Subject: [PATCH 20/54] Set max width to title --- assets/css/submissions/submit-file.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/css/submissions/submit-file.scss b/assets/css/submissions/submit-file.scss index 96ff03653..5c0396302 100644 --- a/assets/css/submissions/submit-file.scss +++ b/assets/css/submissions/submit-file.scss @@ -122,6 +122,7 @@ modal { align-items: center; .upload-progress__title { + max-width: 760px; display: flex; flex-direction: column; align-items: center; From 215c1eab05ad092db03a414c1dddf4ab1646a1ea Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Mon, 21 Mar 2016 12:10:00 +0530 Subject: [PATCH 21/54] AS#101110714058011, User cannot add custom URL to profile -- Increased supported length to 15 from 3 for TLD --- app/directives/external-account/external-web-links.directive.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/directives/external-account/external-web-links.directive.js b/app/directives/external-account/external-web-links.directive.js index bdc23cd78..58eea3169 100644 --- a/app/directives/external-account/external-web-links.directive.js +++ b/app/directives/external-account/external-web-links.directive.js @@ -25,7 +25,7 @@ import angular from 'angular' $log = $log.getInstance('ExternalWebLinkCtrl') $scope.addingWebLink = false $scope.errorMessage = null - $scope.urlRegEx = /^(http(s?):\/\/)?(www\.)?[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/ + $scope.urlRegEx = /^(http(s?):\/\/)?(www\.)?[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,15})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/ $scope.addWebLink = function() { $log.debug('URL: ' + $scope.url) From 5201ad614a2aa8e28423f6313cb9239e2dee54c4 Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Thu, 24 Mar 2016 21:17:26 +0530 Subject: [PATCH 22/54] AS#100624428182393, Create a modified Dashboard banner for TCO -- Changes copy and link --- app/services/bannerDataService.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js index 5edb77bf5..17ac0fefb 100644 --- a/app/services/bannerDataService.js +++ b/app/services/bannerDataService.js @@ -31,8 +31,8 @@ import angular from 'angular' img: require('../../assets/images/nav/ico-tco16.svg'), description: 'The Topcoder Open (TCO) is our annual online and onsite tournament to celebrate and reward the community.', ctas: [{ - title: 'About TCO', - url: 'http://tco16.topcoder.com', + title: 'Learn More', + url: 'http://tco16.topcoder.com/latest/overview/', cssClass: 'tc-btn tc-btn-s tco-cta' }] } From 6e18a3eaa640318b0621c2a0fa77fcf22600e773 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 25 Mar 2016 09:47:55 -0700 Subject: [PATCH 23/54] Update member search package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c21e703df..97f576d82 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "react-select": "1.0.0-beta8", "restangular": "^1.5.2", "tc-angular-ellipsis": "^0.1.6", - "topcoder-app-r": "0.0.3", + "topcoder-app-r": "^1.0.0", "xml2js": "^0.4.16", "zepto": "^1.0.1" } From 930a474ee511dd01788b40e884858d30ac70192c Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 25 Mar 2016 10:29:07 -0700 Subject: [PATCH 24/54] Only show header for member search - no footer --- app/member-search/member-search.routes.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/member-search/member-search.routes.js b/app/member-search/member-search.routes.js index 575129836..c22387893 100644 --- a/app/member-search/member-search.routes.js +++ b/app/member-search/member-search.routes.js @@ -13,9 +13,18 @@ import angular from 'angular' 'memberSearch': { url: '/search/members/', parent: 'root', - template: require('./member-search')(), data: { title: 'Member Search' + }, + views: { + 'header@': { + template: require('../layout/header/header')(), + controller: 'HeaderController', + controllerAs: 'vm' + }, + 'container@': { + template: require('./member-search')() + } } } } From 705873c68806a6bb708c938278ee49051856bf8f Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 25 Mar 2016 10:32:09 -0700 Subject: [PATCH 25/54] Add empty footer --- app/member-search/member-search.routes.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/member-search/member-search.routes.js b/app/member-search/member-search.routes.js index c22387893..eec7531c6 100644 --- a/app/member-search/member-search.routes.js +++ b/app/member-search/member-search.routes.js @@ -24,7 +24,8 @@ import angular from 'angular' }, 'container@': { template: require('./member-search')() - } + }, + 'footer@': {} } } } From 001fe7ad37799ac937e2aabc46ce93a17dfe497c Mon Sep 17 00:00:00 2001 From: Nicholas Litwin Date: Mon, 28 Mar 2016 13:15:48 -0700 Subject: [PATCH 26/54] Update repository description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1fe079484..f21bc7d90 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ #### Dev [![Build Status](https://travis-ci.org/appirio-tech/topcoder-app.svg?branch=dev)](https://travis-ci.org/appirio-tech/topcoder-app) QA [![Build Status](https://travis-ci.org/appirio-tech/topcoder-app.svg?branch=qa-integration)](https://travis-ci.org/appirio-tech/topcoder-app) Master [![Build Status](https://travis-ci.org/appirio-tech/topcoder-app.svg?branch=master)](https://travis-ci.org/appirio-tech/topcoder-app) # Topcoder-App -This repository houses any new topcoder pages or refactored Angular apps/pages from the tc-site repository. +Topcoder-App is an Angular application that contains dashboard, profile, settings, login/registration, and design submissions. The technologies used are NPM, Webpack, ES2015, Jade, SCSS, and Angular 1.x. @@ -13,7 +13,7 @@ Install dependencies by running the following in the root of the project: - `npm i` - **Note:** You must use npm 3. Type `npm -v` to ensure you have a 3.x version. -In order to test a logged in user, you must make an entry in your `/etc/hosts` file, pointing `local.topcoder-dev.com` to `localhost`. For example, open your `/etc/hosts` file with something like `vim /etc/hosts` and add `127.0.0.1 local.topcoder-dev.com`. After you run `gulp serve`, which launches a new window or tab, change `http://localhost:3000/login/` to `http://local.topcoder-dev.com:3000/login/`. You will then be able to login and pick up information from the cookies with `.topcoder-dev.com` as the domain. +In order to test a logged in user, you must make an entry in your `/etc/hosts` file, pointing `local.topcoder-dev.com` to `localhost`. For example, open your `/etc/hosts` file with something like `vim /etc/hosts` and add `127.0.0.1 local.topcoder-dev.com`. ## NPM Commands - To run locally: `npm start` and head to `local.topcoder-dev.com:3000/login` From 33f69ba1a6a24f041f4417d7a4e27bae9b60cb19 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 30 Mar 2016 15:49:26 -0700 Subject: [PATCH 27/54] Trigger travis From d39f84a5f6bb3338b0dc9963699bffee5def1a93 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 30 Mar 2016 17:14:47 -0700 Subject: [PATCH 28/54] Trigger travis build From 9290798c0b2e24d3fe13ab29a23e791bdc3e6234 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 31 Mar 2016 09:21:23 -0700 Subject: [PATCH 29/54] Update url maxlength --- app/directives/tc-form-fonts/tc-form-fonts.jade | 2 +- app/directives/tc-form-stockart/tc-form-stockart.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/directives/tc-form-fonts/tc-form-fonts.jade b/app/directives/tc-form-fonts/tc-form-fonts.jade index 9000518e9..81e9c53a0 100644 --- a/app/directives/tc-form-fonts/tc-form-fonts.jade +++ b/app/directives/tc-form-fonts/tc-form-fonts.jade @@ -38,7 +38,7 @@ input-required="formFonts[fontId].isFontUrlRequired", input-disabled="formFonts[fontId].isFontUrlDisabled", input-pattern="urlRegEx", - maxlength="100" + maxlength="250" ) .tc-error-messages( diff --git a/app/directives/tc-form-stockart/tc-form-stockart.jade b/app/directives/tc-form-stockart/tc-form-stockart.jade index de63abc07..7f10fb425 100644 --- a/app/directives/tc-form-stockart/tc-form-stockart.jade +++ b/app/directives/tc-form-stockart/tc-form-stockart.jade @@ -22,7 +22,7 @@ input-name="photoURL{{stockartId}}", input-required="formStockarts[stockartId].isPhotoURLRequired", input-pattern="urlRegEx", - maxlength="100", + maxlength="250", on-input-change="showMandatoryMessage(inputValue, inputName)" ) From b34d9fe1c2e3c388788fe56d0611ea2146e642f6 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 1 Apr 2016 15:59:55 -0700 Subject: [PATCH 30/54] Trigger travis build From 9618c295d05a24cfe86f0e80734f4ca6ebd758c5 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 1 Apr 2016 16:23:54 -0700 Subject: [PATCH 31/54] Remove page-wide min-width --- assets/css/topcoder.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/assets/css/topcoder.scss b/assets/css/topcoder.scss index 03adb7bd5..def992afd 100644 --- a/assets/css/topcoder.scss +++ b/assets/css/topcoder.scss @@ -210,9 +210,6 @@ body { .view-container { min-height: 440px; padding-bottom: 30px; - @media screen and (min-device-width: 768px) { - min-width: 768px; - } } .page-container { From ddfa94b621ff0561f7701a3493a9691bf09f91a7 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 1 Apr 2016 16:36:43 -0700 Subject: [PATCH 32/54] Trigger travis build From 5563c220db4164fdc6d7b75656a5dad33d7bd475 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Tue, 5 Apr 2016 15:31:21 -0700 Subject: [PATCH 33/54] Fix conversion error to actually be 500MB --- app/directives/tc-file-input/tc-file-input.directive.js | 2 +- app/directives/tc-file-input/tc-file-input.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/directives/tc-file-input/tc-file-input.directive.js b/app/directives/tc-file-input/tc-file-input.directive.js index 94d68b347..403e4470d 100644 --- a/app/directives/tc-file-input/tc-file-input.directive.js +++ b/app/directives/tc-file-input/tc-file-input.directive.js @@ -49,7 +49,7 @@ import _ from 'lodash' } var fileSize = file.size - var isAllowedFileSize = fileSize < '500000000' + var isAllowedFileSize = fileSize < '524288000' var selectedFileType = file.type.slice(file.type.lastIndexOf('/') + 1) var isAllowedFileFormat = _.some(fileTypes, _.matches(selectedFileType)) diff --git a/app/directives/tc-file-input/tc-file-input.spec.js b/app/directives/tc-file-input/tc-file-input.spec.js index 88b9f48af..e01a7d6e3 100644 --- a/app/directives/tc-file-input/tc-file-input.spec.js +++ b/app/directives/tc-file-input/tc-file-input.spec.js @@ -163,7 +163,7 @@ describe('Topcoder File Input Directive', function() { describe('with a file that\'s greater than 500MB', function() { beforeEach(function() { - fileList[0].size = 500000001 + fileList[0].size = 524288001 $(fileInput).triggerHandler({ type: 'change', From 1728e9464ca99b3e990f5e56d1641d2758f5917f Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 6 Apr 2016 16:02:06 -0700 Subject: [PATCH 34/54] Build travis From fbc847a1c8131b6bb48410cb2c338679775be5b3 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 6 Apr 2016 16:14:58 -0700 Subject: [PATCH 35/54] Test with console logs --- webpack.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webpack.config.js b/webpack.config.js index 9aab80154..70f542290 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,6 +6,8 @@ if (CI == 'master') process.env.ENV = 'PROD' if (CI == 'qa-integration') process.env.ENV = 'QA' if (CI == 'dev') process.env.ENV = 'DEV' +console.log('***************', CI) + const config = require('appirio-tech-webpack-config')({ dirname: __dirname, entry: { From fd88d3d14518aaab8528c3ea9b3b23c8533079bb Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 6 Apr 2016 16:19:17 -0700 Subject: [PATCH 36/54] Disable linting for console --- webpack.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/webpack.config.js b/webpack.config.js index 70f542290..3fba7c8f3 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,12 +1,15 @@ +/*eslint-disable*/ require('./node_modules/coffee-script/register') const CI = process.env.TRAVIS_BRANCH +console.log('before **************', process.env.ENV) if (CI == 'master') process.env.ENV = 'PROD' if (CI == 'qa-integration') process.env.ENV = 'QA' if (CI == 'dev') process.env.ENV = 'DEV' console.log('***************', CI) +console.log('***************', process.env.ENV) const config = require('appirio-tech-webpack-config')({ dirname: __dirname, From 92d90c669e3dc641a6464dea94fedf1d0c08ddc5 Mon Sep 17 00:00:00 2001 From: Nicholas Litwin Date: Wed, 6 Apr 2016 16:27:14 -0700 Subject: [PATCH 37/54] f --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f21bc7d90..76eb60f7f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Topcoder-App is an Angular application that contains dashboard, profile, settings, login/registration, and design submissions. -The technologies used are NPM, Webpack, ES2015, Jade, SCSS, and Angular 1.x. +The technologies used are NPM, Webpack, ES2015, Jade, SCSS, and Angular 1.x.. ## Installation From 29c2abd35db15744930425391647d11c79db0602 Mon Sep 17 00:00:00 2001 From: Nicholas Litwin Date: Wed, 6 Apr 2016 16:54:19 -0700 Subject: [PATCH 38/54] revert --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 76eb60f7f..f21bc7d90 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Topcoder-App is an Angular application that contains dashboard, profile, settings, login/registration, and design submissions. -The technologies used are NPM, Webpack, ES2015, Jade, SCSS, and Angular 1.x.. +The technologies used are NPM, Webpack, ES2015, Jade, SCSS, and Angular 1.x. ## Installation From 35bdf696016997be572a509ff55bc96d8a968346 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Wed, 6 Apr 2016 16:55:21 -0700 Subject: [PATCH 39/54] Remove console logs --- webpack.config.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 3fba7c8f3..9aab80154 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,16 +1,11 @@ -/*eslint-disable*/ require('./node_modules/coffee-script/register') const CI = process.env.TRAVIS_BRANCH -console.log('before **************', process.env.ENV) if (CI == 'master') process.env.ENV = 'PROD' if (CI == 'qa-integration') process.env.ENV = 'QA' if (CI == 'dev') process.env.ENV = 'DEV' -console.log('***************', CI) -console.log('***************', process.env.ENV) - const config = require('appirio-tech-webpack-config')({ dirname: __dirname, entry: { From 1497e5cc90f9bbd897a433bd027b7fdac632ce55 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 7 Apr 2016 11:42:16 -0700 Subject: [PATCH 40/54] Trigger travis build for picking up member search animations From 32ba6483227a12e961b2ad4aa9b5a0910e49779c Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Thu, 7 Apr 2016 15:18:51 -0700 Subject: [PATCH 41/54] Trigger travis build for picking up member search animation bug fix From 53278aa8db5d6a15da809dedcc7f4f29f2166600 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 8 Apr 2016 10:55:27 -0700 Subject: [PATCH 42/54] Trigger travis build From 3f3bcc34401859a2bb15bcab5ff9f436240f415d Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 8 Apr 2016 14:48:55 -0700 Subject: [PATCH 43/54] Trigger travis build for default avatars From 70175c9efa883a248f3d43d2fa7f265f7e2a3cc8 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Fri, 8 Apr 2016 15:03:27 -0700 Subject: [PATCH 44/54] Trigger travis build for default avatars From 180956d1cd4ef640f68e1d60cbaba66cb49268f6 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Mon, 11 Apr 2016 14:23:53 -0700 Subject: [PATCH 45/54] Log errors to new relic --- app/account/login/login.controller.js | 18 +-- app/account/logout/logout.controller.js | 3 - app/account/register/register.controller.js | 34 ++--- app/blocks/logger/logger.js | 13 +- .../external-account.directive.js | 23 ++-- .../external-link-deletion.controller.js | 59 +++++---- .../external-web-links.directive.js | 13 +- .../page-state-header.directive.js | 6 +- app/directives/tcui-components.module.js | 2 +- app/layout/header/header.controller.js | 7 +- app/my-challenges/my-challenges.controller.js | 11 +- .../community-updates.controller.js | 8 +- .../my-challenges/my-challenges.controller.js | 7 +- app/my-dashboard/my-dashboard.controller.js | 7 +- .../programs/programs.controller.js | 9 +- app/my-dashboard/srms/srms.controller.js | 9 +- .../subtrack-stats.controller.js | 6 +- app/my-srms/my-srms.controller.js | 8 +- .../edit-review/edit-review.controller.js | 16 ++- .../review-status/review-status.controller.js | 9 +- app/profile/about/about.controller.js | 8 +- app/profile/profile.controller.js | 117 ++++++++++-------- app/profile/subtrack/subtrack.controller.js | 17 ++- app/services/api.service.js | 8 +- app/services/authtoken.service.js | 21 ++-- app/services/challenge.service.js | 6 +- app/services/externalAccounts.service.js | 44 ++++--- app/services/externalLinks.service.js | 24 ++-- app/services/image.service.js | 22 ++-- app/services/jwtInterceptor.service.js | 19 ++- app/services/services.module.js | 2 +- app/services/submissions.service.js | 53 ++++---- app/services/tcAuth.service.js | 13 +- .../account-info/account-info.controller.js | 18 ++- .../edit-profile/edit-profile.controller.js | 20 +-- app/skill-picker/skill-picker.controller.js | 20 ++- app/submissions/submissions.routes.js | 6 +- 37 files changed, 397 insertions(+), 289 deletions(-) diff --git a/app/account/login/login.controller.js b/app/account/login/login.controller.js index 8db372b9b..c7ee35c1d 100644 --- a/app/account/login/login.controller.js +++ b/app/account/login/login.controller.js @@ -5,11 +5,10 @@ import angular from 'angular' angular.module('tc.account').controller('LoginController', LoginController) - LoginController.$inject = ['$log', '$state', '$stateParams', '$location', '$scope', 'TcAuthService', 'UserService', 'Helpers', 'CONSTANTS'] + LoginController.$inject = ['$log', 'logger', '$state', '$stateParams', '$location', '$scope', 'TcAuthService', 'UserService', 'Helpers', 'CONSTANTS'] - function LoginController($log, $state, $stateParams, $location, $scope, TcAuthService, UserService, Helpers, CONSTANTS) { + function LoginController($log, logger, $state, $stateParams, $location, $scope, TcAuthService, UserService, Helpers, CONSTANTS) { var vm = this - $log = $log.getInstance('LoginController') vm.$stateParams = $stateParams vm.passwordReset = false vm.loginErrors = { @@ -84,9 +83,9 @@ import angular from 'angular' Helpers.setupLoginEventMetrics(usernameOrEmail) return Helpers.redirectPostLogin($stateParams.next) - }).catch(function(resp) { - $log.warn(resp) - switch (resp.status) { + }).catch(function(err) { + $log.warn(err) + switch (err.status) { case 'ACCOUNT_INACTIVE': $state.go('registeredSuccessfully') // user should already be redirected @@ -95,6 +94,7 @@ import angular from 'angular' default: vm.loginErrors.WRONG_PASSWORD = true vm.password = '' + logger.error('Error logging in: ', err) } }) } @@ -114,16 +114,16 @@ import angular from 'angular' $log.debug('logged in') return Helpers.redirectPostLogin($stateParams.next) }) - .catch(function(resp) { + .catch(function(err) { /*eslint no-fallthrough:0*/ - switch (resp.status) { + switch (err.status) { case 'ACCOUNT_INACTIVE': window.location.href = 'https://www.' + CONSTANTS.domain + '/account-inactive/' case 'USER_NOT_REGISTERED': default: vm.socialLoginError = 401 vm.loginErrors.SOCIAL_LOGIN_ERROR = true - break + logger.error('Error logging in with social account', err) } }) } diff --git a/app/account/logout/logout.controller.js b/app/account/logout/logout.controller.js index 4275cc9be..7961c8436 100644 --- a/app/account/logout/logout.controller.js +++ b/app/account/logout/logout.controller.js @@ -8,14 +8,11 @@ import angular from 'angular' LogoutController.$inject = ['$log', 'TcAuthService', '$window', 'CONSTANTS'] function LogoutController($log, TcAuthService, $window, CONSTANTS) { - $log = $log.getInstance('LogoutController') - TcAuthService.logout() .then(function() { $log.debug('successfully logged out.') // redirect to home $window.location.href = CONSTANTS.MAIN_URL }) - } })() diff --git a/app/account/register/register.controller.js b/app/account/register/register.controller.js index 290cd1418..e98d8aeb8 100644 --- a/app/account/register/register.controller.js +++ b/app/account/register/register.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.account').controller('RegisterController', RegisterController) - RegisterController.$inject = ['$log', 'CONSTANTS', '$state', '$stateParams', 'TcAuthService', 'UserService', 'ISO3166', 'Helpers'] + RegisterController.$inject = ['$log', 'logger', 'CONSTANTS', '$state', '$stateParams', 'TcAuthService', 'UserService', 'ISO3166', 'Helpers'] - function RegisterController($log, CONSTANTS, $state, $stateParams, TcAuthService, UserService, ISO3166, Helpers) { + function RegisterController($log, logger, CONSTANTS, $state, $stateParams, TcAuthService, UserService, ISO3166, Helpers) { $log = $log.getInstance('RegisterController') $log.debug('-init') var vm = this @@ -96,7 +96,8 @@ import _ from 'lodash' }) .catch(function(err) { vm.registering = false - $log.error('Error in registering new user: ', err) + + logger.error('Error in registering new user', err) }) } @@ -130,17 +131,22 @@ import _ from 'lodash' vm.isSocialRegistration = false } }) - .catch(function(result) { - switch (result.status) { - case 'SOCIAL_PROFILE_ALREADY_EXISTS': - vm.errMsg = 'An account with that profile already exists. Please login to access your account.' - break - default: - vm.errMsg = 'Whoops! Something went wrong. Please try again later.' - break - } - vm.isSocialRegistration = false - }) + .catch(function(err) { + switch (err.status) { + case 'SOCIAL_PROFILE_ALREADY_EXISTS': + vm.errMsg = 'An account with that profile already exists. Please login to access your account.' + + logger.error('Error registering user with social account', err) + + break + + default: + vm.errMsg = 'Whoops! Something went wrong. Please try again later.' + + logger.error('Error registering user with social account', err) + } + vm.isSocialRegistration = false + }) } vm.$stateParams = $stateParams diff --git a/app/blocks/logger/logger.js b/app/blocks/logger/logger.js index ec098a2c1..d21d8c161 100644 --- a/app/blocks/logger/logger.js +++ b/app/blocks/logger/logger.js @@ -25,7 +25,18 @@ import angular from 'angular' ///////////////////// function error(message, data, title) { - $log.error('Error: ' + message, data) + debugger + if (data) { + message = `${message} ${JSON.stringify(data)}` + } + + $log.error(message) + + if (window.NREUM) { + var err = new Error(message) + + window.NREUM.noticeError(err) + } } function info(message, data, title) { diff --git a/app/directives/external-account/external-account.directive.js b/app/directives/external-account/external-account.directive.js index 26b2b4c2d..c54c0e7b4 100644 --- a/app/directives/external-account/external-account.directive.js +++ b/app/directives/external-account/external-account.directive.js @@ -24,8 +24,8 @@ import _ from 'lodash' linkedAccounts: '=', readOnly: '=' }, - controller: ['$log', '$scope', 'ExternalAccountService', 'toaster', - function($log, $scope, ExternalAccountService, toaster) { + controller: ['$log', 'logger', '$scope', 'ExternalAccountService', 'toaster', + function($log, logger, $scope, ExternalAccountService, toaster) { $log = $log.getInstance('ExtAccountDirectiveCtrl') @@ -80,9 +80,10 @@ import _ from 'lodash' ) ) }) - .catch(function(resp) { - if (resp.status === 'SOCIAL_PROFILE_ALREADY_EXISTS') { + .catch(function(err) { + if (err.status === 'SOCIAL_PROFILE_ALREADY_EXISTS') { $log.info('Social profile already linked to another account') + toaster.pop('error', 'Whoops!', String.supplant( 'This {provider} account is linked to another account. \ @@ -91,7 +92,8 @@ import _ from 'lodash' ) ) } else { - $log.error('Fatal Error: _link: ' + resp.msg) + logger.error('Fatal Error: _link: ', err.msg) + toaster.pop('error', 'Whoops!', 'Sorry, we are unable to add your account right now. Please try again later. If the problem persists, please contact support@topcoder.com.') } }) @@ -115,13 +117,16 @@ import _ from 'lodash' ) ) }) - .catch(function(resp) { - var msg = resp.msg - if (resp.status === 'SOCIAL_PROFILE_NOT_EXIST') { + .catch(function(err) { + var msg = err.msg + + if (err.status === 'SOCIAL_PROFILE_NOT_EXIST') { $log.info('Social profile not linked to account') + msg = '{provider} account is not linked to your account. If you think this is an error please contact support@topcoder.com.' } else { - $log.error('Fatal error: _unlink: ' + msg) + logger.error('Fatal error: _unlink', msg) + msg = 'Sorry! We are unable to unlink your {provider} account. If problem persists, please contact support@topcoder.com' } toaster.pop('error', 'Whoops!', String.supplant(msg, {provider: provider.displayName })) diff --git a/app/directives/external-account/external-link-deletion.controller.js b/app/directives/external-account/external-link-deletion.controller.js index bde43efc3..f5efcc99b 100644 --- a/app/directives/external-account/external-link-deletion.controller.js +++ b/app/directives/external-account/external-link-deletion.controller.js @@ -2,51 +2,56 @@ import angular from 'angular' import _ from 'lodash' (function () { - angular.module('tcUIComponents') .controller('ExternalLinkDeletionController', ExternalLinkDeletionController) - ExternalLinkDeletionController.$inject = ['ExternalWebLinksService', '$q', '$log', 'toaster', 'ngDialog', 'userHandle', 'account', 'linkedAccountsData'] + ExternalLinkDeletionController.$inject = ['ExternalWebLinksService', '$q', '$log', 'logger', 'toaster', 'ngDialog', 'userHandle', 'account', 'linkedAccountsData'] - function ExternalLinkDeletionController(ExternalWebLinksService, $q, $log, toaster, ngDialog, userHandle, account, linkedAccountsData) { + function ExternalLinkDeletionController(ExternalWebLinksService, $q, $log, logger, toaster, ngDialog, userHandle, account, linkedAccountsData) { var vm = this vm.account = account $log = $log.getInstance('ExternalLinkDeletionController') vm.deleteAccount = function() { $log.debug('Deleting Account...') + if (account && account.deletingAccount) { $log.debug('Another deletion is already in progress.') return } + if (account && account.provider === 'weblink') { account.deletingAccount = true $log.debug('Deleting weblink...') - return ExternalWebLinksService.removeLink(userHandle, account.key).then(function(data) { - account.deletingAccount = false - $log.debug('Web link removed: ' + JSON.stringify(data)) - var toRemove = _.findIndex(linkedAccountsData, function(la) { - return la.provider === 'weblink' && la.key === account.key + + return ExternalWebLinksService.removeLink(userHandle, account.key) + .then(function(data) { + account.deletingAccount = false + $log.debug('Web link removed: ' + JSON.stringify(data)) + var toRemove = _.findIndex(linkedAccountsData, function(la) { + return la.provider === 'weblink' && la.key === account.key + }) + if (toRemove > -1) { + // remove from the linkedAccountsData array + linkedAccountsData.splice(toRemove, 1) + } + toaster.pop('success', 'Success', 'Your link has been removed.') + }) + .catch(function(err) { + var msg = err.msg + if (err.status === 'WEBLINK_NOT_EXIST') { + $log.info('Weblink does not exist') + + msg = 'Weblink is not linked to your account. If you think this is an error please contact support@topcoder.com.' + } else { + logger.error('Fatal error: _unlink', msg) + + msg = 'Sorry! We are unable to remove your weblink. If problem persists, please contact support@topcoder.com' + } + + account.deletingAccount = false + toaster.pop('error', 'Whoops!', msg) }) - if (toRemove > -1) { - // remove from the linkedAccountsData array - linkedAccountsData.splice(toRemove, 1) - } - toaster.pop('success', 'Success', 'Your link has been removed.') - }) - .catch(function(resp) { - var msg = resp.msg - if (resp.status === 'WEBLINK_NOT_EXIST') { - $log.info('Weblink does not exist') - msg = 'Weblink is not linked to your account. If you think this is an error please contact support@topcoder.com.' - } else { - $log.error('Fatal error: _unlink: ' + msg) - msg = 'Sorry! We are unable to remove your weblink. If problem persists, please contact support@topcoder.com' - } - - account.deletingAccount = false - toaster.pop('error', 'Whoops!', msg) - }) } } } diff --git a/app/directives/external-account/external-web-links.directive.js b/app/directives/external-account/external-web-links.directive.js index 58eea3169..82c2aacfc 100644 --- a/app/directives/external-account/external-web-links.directive.js +++ b/app/directives/external-account/external-web-links.directive.js @@ -7,9 +7,9 @@ import angular from 'angular' // @example angular.module('tcUIComponents').directive('externalWebLink', ExternalWebLink) - ExternalWebLink.$inject = ['$log', 'ExternalWebLinksService', 'toaster'] + ExternalWebLink.$inject = ['$log', 'logger', 'ExternalWebLinksService', 'toaster'] - function ExternalWebLink($log, ExternalWebLinksService, toaster) { + function ExternalWebLink($log, logger, ExternalWebLinksService, toaster) { var directive = { restrict: 'E', template: require('./external-web-link')(), @@ -31,6 +31,7 @@ import angular from 'angular' $log.debug('URL: ' + $scope.url) $scope.addingWebLink = true $scope.errorMessage = null + ExternalWebLinksService.addLink($scope.userHandle, $scope.url) .then(function(data) { $scope.addingWebLink = false @@ -42,17 +43,19 @@ import angular from 'angular' $scope.url = null toaster.pop('success', 'Success', 'Your link has been added. Data from your link will be visible on your profile shortly.') }) - .catch(function(resp) { + .catch(function(err) { $scope.addingWebLink = false - if (resp.status === 'WEBLINK_ALREADY_EXISTS') { + if (err.status === 'WEBLINK_ALREADY_EXISTS') { $log.info('Social profile already linked to another account') + toaster.pop('error', 'Whoops!', 'This weblink is already added to your account. \ If you think this is an error please contact support@topcoder.com.' ) } else { - $log.error('Fatal Error: addWebLink: ' + resp.msg) + logger.error('Fatal Error: addWebLink', err.msg) + toaster.pop('error', 'Sorry, we are unable add web link. If problem persist please contact support@topcoder.com.') } }) diff --git a/app/directives/page-state-header/page-state-header.directive.js b/app/directives/page-state-header/page-state-header.directive.js index c5f11a4af..89e190cc7 100644 --- a/app/directives/page-state-header/page-state-header.directive.js +++ b/app/directives/page-state-header/page-state-header.directive.js @@ -16,12 +16,12 @@ import _ from 'lodash' hideMoney: '=', defaultState: '@' }, - controller: ['CONSTANTS', '$rootScope', '$scope', 'ProfileService', '$log', '$state', pageStateHeader], + controller: ['CONSTANTS', '$rootScope', '$scope', 'ProfileService', '$log', 'logger', '$state', pageStateHeader], controllerAs: 'vm' } }) - function pageStateHeader(CONSTANTS, $rootScope, $scope, ProfileService, $log, $state) { + function pageStateHeader(CONSTANTS, $rootScope, $scope, ProfileService, $log, logger, $state) { var vm = this vm.backHandler = backHandler @@ -106,6 +106,8 @@ import _ from 'lodash' .catch(function(err) { $scope.hideMoney = true vm.loading = false + + logger.error('Could not get user financial information', err) }) } } diff --git a/app/directives/tcui-components.module.js b/app/directives/tcui-components.module.js index 6330f4da6..fea8494a2 100644 --- a/app/directives/tcui-components.module.js +++ b/app/directives/tcui-components.module.js @@ -6,7 +6,7 @@ import angular from 'angular' angular.module('tcUIComponents', ['dcbImgFallback', 'blocks.logger', 'toaster']) .config(['$provide',function ($provide) { $provide.decorator('$log', ['$delegate', 'LogEnhancer', function ($delegate, LogEnhancer) { - LogEnhancer.enhanceLogger($delegate) + LogEnhancer.enhance$log($delegate) return $delegate }]) }]) diff --git a/app/layout/header/header.controller.js b/app/layout/header/header.controller.js index 1b2af8d8f..38191627b 100644 --- a/app/layout/header/header.controller.js +++ b/app/layout/header/header.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.layout').controller('HeaderController', HeaderController) - HeaderController.$inject = ['$state', 'TcAuthService', 'CONSTANTS', '$log', '$rootScope', 'UserService', 'ProfileService', 'NavService'] + HeaderController.$inject = ['$state', 'TcAuthService', 'CONSTANTS', '$log', 'logger', '$rootScope', 'UserService', 'ProfileService', 'NavService'] - function HeaderController($state, TcAuthService, CONSTANTS, $log, $rootScope, UserService, ProfileService, NavService) { + function HeaderController($state, TcAuthService, CONSTANTS, $log, logger, $rootScope, UserService, ProfileService, NavService) { var vm = this vm.constants = CONSTANTS @@ -65,8 +65,7 @@ import _ from 'lodash' vm.userHandleColor = ProfileService.getUserHandleColor(vm.profile) }) .catch(function(err) { - $log.error('Unable to get user data') - // todo handle error + logger.error('Unable to get user profile data', err) }) } } diff --git a/app/my-challenges/my-challenges.controller.js b/app/my-challenges/my-challenges.controller.js index 46b226332..fb6e1097c 100644 --- a/app/my-challenges/my-challenges.controller.js +++ b/app/my-challenges/my-challenges.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myChallenges').controller('MyChallengesController', MyChallengesController) - MyChallengesController.$inject = ['ChallengeService', 'UserService', '$q', '$log', '$state', 'CONSTANTS', 'Helpers', '$scope', 'userIdentity', '$stateParams'] + MyChallengesController.$inject = ['ChallengeService', 'UserService', '$q', '$log', 'logger', '$state', 'CONSTANTS', 'Helpers', '$scope', 'userIdentity', '$stateParams'] - function MyChallengesController(ChallengeService, UserService, $q, $log, $state, CONSTANTS, Helpers, $scope, userIdentity, $stateParams) { + function MyChallengesController(ChallengeService, UserService, $q, $log, logger, $state, CONSTANTS, Helpers, $scope, userIdentity, $stateParams) { $log = $log.getInstance('MyChallengesController') var vm = this vm.domain = CONSTANTS.domain @@ -28,7 +28,7 @@ import _ from 'lodash' } vm.statusFilter = _.get($stateParams, 'status','active') if (vm.statusFilter !== 'active' && vm.statusFilter !== 'completed') { - $log.error('invalid filter, defaulting to active') + $log.info('invalid filter, defaulting to active') vm.statusFilter = 'active' } vm.orderBy @@ -91,8 +91,9 @@ import _ from 'lodash' vm.loading = CONSTANTS.STATE_READY } }) - .catch(function(resp) { - $log.error(resp) + .catch(function(err) { + logger.error('Error getting all challenges', err) + vm.loading = CONSTANTS.STATE_ERROR }) } diff --git a/app/my-dashboard/community-updates/community-updates.controller.js b/app/my-dashboard/community-updates/community-updates.controller.js index 6b9a9aefd..21fb45643 100644 --- a/app/my-dashboard/community-updates/community-updates.controller.js +++ b/app/my-dashboard/community-updates/community-updates.controller.js @@ -5,10 +5,10 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('CommunityUpdatesController', CommunityUpdatesController) - CommunityUpdatesController.$inject = ['BlogService', '$log'] + CommunityUpdatesController.$inject = ['BlogService', '$log', 'logger'] // Access and parses the blog RSS feed - function CommunityUpdatesController(BlogService, $log) { + function CommunityUpdatesController(BlogService, $log, logger) { var vm = this vm.loading = true @@ -22,9 +22,9 @@ import angular from 'angular' }) .catch(function(err) { vm.loading = false - $log.debug(err) + + logger.error('Could not fetch blog feed', err) }) } } - })() diff --git a/app/my-dashboard/my-challenges/my-challenges.controller.js b/app/my-dashboard/my-challenges/my-challenges.controller.js index 8b9466353..fd4f8ab4d 100644 --- a/app/my-dashboard/my-challenges/my-challenges.controller.js +++ b/app/my-dashboard/my-challenges/my-challenges.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MyChallengesWidgetController', MyChallengesWidgetController) - MyChallengesWidgetController.$inject = ['ChallengeService', 'UserService', '$log', 'CONSTANTS', 'userIdentity', '$q'] + MyChallengesWidgetController.$inject = ['ChallengeService', 'UserService', '$log', 'logger', 'CONSTANTS', 'userIdentity', '$q'] - function MyChallengesWidgetController(ChallengeService, UserService, $log, CONSTANTS, userIdentity, $q) { + function MyChallengesWidgetController(ChallengeService, UserService, $log, logger, CONSTANTS, userIdentity, $q) { var vm = this vm.domain = CONSTANTS.domain vm.neverParticipated = false @@ -65,7 +65,8 @@ import _ from 'lodash' } }) .catch(function(err) { - $log.error(err) + logger.error('Error getting challenges and marathon matches', err) + vm.userHasChallenges = true vm.loading = false }) diff --git a/app/my-dashboard/my-dashboard.controller.js b/app/my-dashboard/my-dashboard.controller.js index df7603ded..8754b4e72 100644 --- a/app/my-dashboard/my-dashboard.controller.js +++ b/app/my-dashboard/my-dashboard.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MyDashboardController', MyDashboardController) - MyDashboardController.$inject = ['userIdentity', 'ProfileService', '$log'] + MyDashboardController.$inject = ['userIdentity', 'ProfileService', '$log', 'logger'] - function MyDashboardController(userIdentity, ProfileService, $log) { + function MyDashboardController(userIdentity, ProfileService, $log, logger) { var vm = this activate() @@ -33,7 +33,8 @@ import _ from 'lodash' }) .catch(function(err) { vm.showSRMs = false - $log.error(err) + + logger.error('Could not get user profile data', err) }) } } diff --git a/app/my-dashboard/programs/programs.controller.js b/app/my-dashboard/programs/programs.controller.js index 25bfdc6de..cb1148747 100644 --- a/app/my-dashboard/programs/programs.controller.js +++ b/app/my-dashboard/programs/programs.controller.js @@ -10,12 +10,13 @@ import angular from 'angular' 'MemberCertService', 'CONSTANTS', '$log', + 'logger', 'ChallengeService', '$q', '$rootScope' ] - function ProgramsController (UserService, MemberCertService, CONSTANTS, $log, ChallengeService, $q, $rootScope) { + function ProgramsController (UserService, MemberCertService, CONSTANTS, $log, logger, ChallengeService, $q, $rootScope) { var vm = this vm.domain = CONSTANTS.domain vm.registered = false @@ -44,7 +45,8 @@ import angular from 'angular' .catch(function(err) { vm.registered = false vm.loading = false - $log.debug(err) + + logger.error('Could not get member cert registration data', err) }) } @@ -78,7 +80,8 @@ import angular from 'angular' }) .catch(function(err) { vm.loading = false - $log.debug(err) + + logger.error('Could not get peer review (iOS and Swift) challenges', err) }) } } diff --git a/app/my-dashboard/srms/srms.controller.js b/app/my-dashboard/srms/srms.controller.js index b2d4aac5f..7ec513744 100644 --- a/app/my-dashboard/srms/srms.controller.js +++ b/app/my-dashboard/srms/srms.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('SRMWidgetController', SRMWidgetController) - SRMWidgetController.$inject = ['CONSTANTS', 'UserService','SRMService', '$q', '$log'] + SRMWidgetController.$inject = ['CONSTANTS', 'UserService','SRMService', '$q', '$log', 'logger'] - function SRMWidgetController(CONSTANTS, UserService, SRMService, $q, $log) { + function SRMWidgetController(CONSTANTS, UserService, SRMService, $q, $log, logger) { var vm = this vm.srms = [] vm.state = CONSTANTS.STATE_LOADING @@ -51,8 +51,9 @@ import angular from 'angular' vm.srms = srms vm.state = CONSTANTS.STATE_READY - }).catch(function(error) { - $log.error() + }).catch(function(err) { + logger.error('Could not get list of SRMs or user SRMs', err) + vm.state = CONSTANTS.STATE_ERROR }) } diff --git a/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js b/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js index 6c3953cf0..46f939848 100644 --- a/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js +++ b/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('SubtrackStatsController', SubtrackStatsController) - SubtrackStatsController.$inject = ['$filter', 'ProfileService', 'UserStatsService', 'userIdentity'] + SubtrackStatsController.$inject = ['$filter', 'ProfileService', 'UserStatsService', 'userIdentity', '$log', 'logger'] - function SubtrackStatsController($filter, ProfileService, UserStatsService, userIdentity) { + function SubtrackStatsController($filter, ProfileService, UserStatsService, userIdentity, $log, logger) { var vm = this vm.loading = true @@ -36,6 +36,8 @@ import angular from 'angular' .catch(function(err) { vm.hasRanks = false vm.loading = false + + logger.error('Could not get user stats', err) }) } } diff --git a/app/my-srms/my-srms.controller.js b/app/my-srms/my-srms.controller.js index 40557e074..9702c3dc8 100644 --- a/app/my-srms/my-srms.controller.js +++ b/app/my-srms/my-srms.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MySRMsController', MySRMsController) - MySRMsController.$inject = ['UserService','SRMService', '$log', '$state', '$stateParams', 'CONSTANTS', '$scope'] + MySRMsController.$inject = ['UserService','SRMService', '$log', 'logger', '$state', '$stateParams', 'CONSTANTS', '$scope'] - function MySRMsController(UserService, SRMService, $log, $state, $stateParams, CONSTANTS, $scope) { + function MySRMsController(UserService, SRMService, $log, logger, $state, $stateParams, CONSTANTS, $scope) { $log = $log.getInstance('MySRMsController') var vm = this vm.srms = [] @@ -93,8 +93,8 @@ import _ from 'lodash' vm.loading = CONSTANTS.STATE_READY } - function handleSRMsFailure(resp) { - $log.error(resp) + function handleSRMsFailure(err) { + logger.error('Could not get user SRMs', err) vm.loading = CONSTANTS.STATE_ERROR } } diff --git a/app/peer-review/edit-review/edit-review.controller.js b/app/peer-review/edit-review/edit-review.controller.js index ed80b462d..7a4f796a1 100644 --- a/app/peer-review/edit-review/edit-review.controller.js +++ b/app/peer-review/edit-review/edit-review.controller.js @@ -7,9 +7,9 @@ import angular from 'angular' // answers saved but not submitted. angular.module('tc.peer-review').controller('EditReviewController', EditReviewController) - EditReviewController.$inject = ['$state', '$stateParams', 'ReviewService', 'ScorecardService', 'UserService', 'ChallengeService', 'Helpers', '$q', 'CONSTANTS'] + EditReviewController.$inject = ['$state', '$stateParams', 'ReviewService', 'ScorecardService', 'UserService', 'ChallengeService', 'Helpers', '$q', 'CONSTANTS', '$log', 'logger'] - function EditReviewController($state, $stateParams, ReviewService, ScorecardService, UserService, ChallengeService, Helpers, $q, CONSTANTS) { + function EditReviewController($state, $stateParams, ReviewService, ScorecardService, UserService, ChallengeService, Helpers, $q, CONSTANTS, $log, logger) { var vm = this vm.domain = CONSTANTS.domain vm.challengeId = $stateParams.challengeId @@ -34,8 +34,10 @@ import angular from 'angular' challengeId: vm.challengeId }) }) - .catch(function(error) { - var message = 'An error occurred while trying to submit answers.\n' + error.status + ': ' + error.statusText + .catch(function(err) { + logger.error('Could not submit review data', err) + + var message = 'An error occurred while trying to submit answers.\n' + err.status + ': ' + err.statusText alert(message) @@ -52,8 +54,10 @@ import angular from 'angular' challengeId: vm.challengeId }) }) - .catch(function(error) { - var message = 'An error occurred while trying to update answers.\n' + error.status + ': ' + error.statusText + .catch(function(err) { + logger.error('Could not save review data for later', err) + + var message = 'An error occurred while trying to update answers.\n' + err.status + ': ' + err.statusText alert(message) diff --git a/app/peer-review/review-status/review-status.controller.js b/app/peer-review/review-status/review-status.controller.js index 5db5dacbf..914474174 100644 --- a/app/peer-review/review-status/review-status.controller.js +++ b/app/peer-review/review-status/review-status.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.peer-review').controller('ReviewStatusController', ReviewStatusController) - ReviewStatusController.$inject = ['$state', '$stateParams', 'ReviewService', 'ChallengeService', 'Helpers', 'CONSTANTS'] + ReviewStatusController.$inject = ['$state', '$stateParams', 'ReviewService', 'ChallengeService', 'Helpers', 'CONSTANTS', '$log', 'logger'] - function ReviewStatusController($state, $stateParams, ReviewService, ChallengeService, Helpers, CONSTANTS) { + function ReviewStatusController($state, $stateParams, ReviewService, ChallengeService, Helpers, CONSTANTS, $log, logger) { var vm = this vm.domain = CONSTANTS.domain vm.loaded = false @@ -28,8 +28,9 @@ import angular from 'angular' reviewId: newReviewId }) }) - .catch(function(error) { - // An error occurred while trying to get the next review + .catch(function(err) { + logger.error('Could not get next review', err) + $state.reload() }) } diff --git a/app/profile/about/about.controller.js b/app/profile/about/about.controller.js index a3ed7359b..df04f344b 100644 --- a/app/profile/about/about.controller.js +++ b/app/profile/about/about.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.profile').controller('ProfileAboutController', ProfileAboutController) - ProfileAboutController.$inject = ['$log', '$scope', '$q', 'ExternalAccountService', 'ExternalWebLinksService', 'UserService', 'CONSTANTS'] + ProfileAboutController.$inject = ['$log', 'logger', '$scope', '$q', 'ExternalAccountService', 'ExternalWebLinksService', 'UserService', 'CONSTANTS'] - function ProfileAboutController($log, $scope, $q, ExternalAccountService, ExternalWebLinksService, UserService, CONSTANTS) { + function ProfileAboutController($log, logger, $scope, $q, ExternalAccountService, ExternalWebLinksService, UserService, CONSTANTS) { var vm = this $log = $log.getInstance('ProfileAboutController') var profileVm = $scope.$parent.profileVm @@ -34,7 +34,9 @@ import angular from 'angular' vm.displaySection.externalLinks = profileVm.showEditProfileLink || !!vm.linkedExternalAccounts.length profileVm.status.externalLinks = CONSTANTS.STATE_READY - }).catch(function(resp) { + }).catch(function(err) { + logger.error('Could retrive web links and external accounts', err) + profileVm.status.externalLinks = CONSTANTS.STATE_ERROR }) diff --git a/app/profile/profile.controller.js b/app/profile/profile.controller.js index 54fdfac4a..39c234554 100644 --- a/app/profile/profile.controller.js +++ b/app/profile/profile.controller.js @@ -6,12 +6,12 @@ import moment from 'moment' angular.module('tc.profile').controller('ProfileCtrl', ProfileCtrl) - ProfileCtrl.$inject = ['CONSTANTS', '$log', '$q', + ProfileCtrl.$inject = ['CONSTANTS', '$log', 'logger', '$q', 'TcAuthService', 'UserService', 'UserStatsService', 'ProfileService', 'ChallengeService', 'ExternalAccountService', 'userHandle', 'profile', 'ngDialog', '$anchorScroll' ] - function ProfileCtrl(CONSTANTS, $log, $q, TcAuthService, UserService, UserStatsService, ProfileService, ChallengeService, ExternalAccountService, userHandle, profile, ngDialog, $anchorScroll) { + function ProfileCtrl(CONSTANTS, $log, logger, $q, TcAuthService, UserService, UserStatsService, ProfileService, ChallengeService, ExternalAccountService, userHandle, profile, ngDialog, $anchorScroll) { var vm = this // set profile to the object that was resolved vm.profile = profile @@ -39,62 +39,69 @@ import moment from 'moment' activate() // adding stats promise on scope so child states can use this. - vm.statsPromise = ProfileService.getUserStats(vm.userHandle).then(function(stats) { - if (stats) { - vm.stats = stats - vm.profile.tracks = vm.profile.tracks || [] - vm.tracks = ProfileService.getTracks(stats) || vm.profile.tracks - if (stats.COPILOT && stats.COPILOT.contests && vm.profile.tracks.indexOf('COPILOT') == -1) { - vm.profile.tracks.push('COPILOT') - } - // flag to indicate if the member has acitivity on topcoder to be shown - // it is set to true, if we get at least one track with showTrack == true - vm.showTCActivity = false - vm.numWins = vm.stats.wins - vm.categories = ProfileService.getRanks(vm.stats) - for(var trackName in vm.categories) { - // trackStats is an array of subtrack rankings along with track stats properties (e.g showTrack) - var trackStats = vm.categories[trackName] - // flag to indicate if the member has activity for this track - // it is set to true, if we get at least one subtrack which can be shown for topcoder activity - trackStats.showTrack = false - // if track has subtracks with stats - if (trackStats && trackStats.length > 0) { - // iterate over each subtrack stat and determine if we need to show as stat - trackStats.forEach(function(subTrackRank) { - // process subtack stat - UserStatsService.processStatRank(subTrackRank) - // if any of the subtrack has stat to show, enable the showTrack flag for the track - if (subTrackRank.showStats) { - trackStats.showTrack = true - } - }) + vm.statsPromise = ProfileService.getUserStats(vm.userHandle) + .then(function(stats) { + if (stats) { + vm.stats = stats + vm.profile.tracks = vm.profile.tracks || [] + vm.tracks = ProfileService.getTracks(stats) || vm.profile.tracks + if (stats.COPILOT && stats.COPILOT.contests && vm.profile.tracks.indexOf('COPILOT') == -1) { + vm.profile.tracks.push('COPILOT') } - // if any of the track has stat to show, enable the showTCActivity flag to true - if (trackStats.showTrack) { - vm.showTCActivity = true + // flag to indicate if the member has acitivity on topcoder to be shown + // it is set to true, if we get at least one track with showTrack == true + vm.showTCActivity = false + vm.numWins = vm.stats.wins + vm.categories = ProfileService.getRanks(vm.stats) + for(var trackName in vm.categories) { + // trackStats is an array of subtrack rankings along with track stats properties (e.g showTrack) + var trackStats = vm.categories[trackName] + // flag to indicate if the member has activity for this track + // it is set to true, if we get at least one subtrack which can be shown for topcoder activity + trackStats.showTrack = false + // if track has subtracks with stats + if (trackStats && trackStats.length > 0) { + // iterate over each subtrack stat and determine if we need to show as stat + trackStats.forEach(function(subTrackRank) { + // process subtack stat + UserStatsService.processStatRank(subTrackRank) + // if any of the subtrack has stat to show, enable the showTrack flag for the track + if (subTrackRank.showStats) { + trackStats.showTrack = true + } + }) + } + // if any of the track has stat to show, enable the showTCActivity flag to true + if (trackStats.showTrack) { + vm.showTCActivity = true + } } + } else { + vm.stats = false + // vm.profile.tracks = [] + vm.showTCActivity = 0 + vm.numWins = 0 + vm.categories = {} } - } else { - vm.stats = false - // vm.profile.tracks = [] - vm.showTCActivity = 0 - vm.numWins = 0 - vm.categories = {} - } - vm.status.stats = CONSTANTS.STATE_READY - return vm.stats - }).catch(function(err) { - $log.error(err) - vm.status.stats = CONSTANTS.STATE_ERROR - }) - - vm.skillsPromise = ProfileService.getUserSkills(vm.userHandle).then(function(skills) { - vm.skills = skills.skills - vm.status.skills = CONSTANTS.STATE_READY - }).catch(function(err) { - vm.status.skills = CONSTANTS.STATE_ERROR - }) + vm.status.stats = CONSTANTS.STATE_READY + return vm.stats + }) + .catch(function(err) { + logger.error('Could not get user stats', err) + + vm.status.stats = CONSTANTS.STATE_ERROR + }) + + vm.skillsPromise = ProfileService.getUserSkills(vm.userHandle) + .then(function(skills) { + vm.skills = skills.skills + vm.status.skills = CONSTANTS.STATE_READY + }) + .catch(function(err) { + logger.error('Could not get user skills', err) + + vm.status.skills = CONSTANTS.STATE_ERROR + }) function activate() { $log.debug('Calling ProfileController activate()') diff --git a/app/profile/subtrack/subtrack.controller.js b/app/profile/subtrack/subtrack.controller.js index 62418c5bd..282d3cb52 100644 --- a/app/profile/subtrack/subtrack.controller.js +++ b/app/profile/subtrack/subtrack.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.profile').controller('ProfileSubtrackController', ProfileSubtrackController) - ProfileSubtrackController.$inject = ['$scope', 'ProfileService', '$q', '$stateParams', 'ChallengeService', 'SRMService', 'CONSTANTS', '$state', '$window', 'ngDialog', 'UserStatsService'] + ProfileSubtrackController.$inject = ['$scope', 'ProfileService', '$q', '$stateParams', 'ChallengeService', 'SRMService', 'CONSTANTS', '$state', '$window', 'ngDialog', 'UserStatsService', '$log', 'logger'] - function ProfileSubtrackController($scope, ProfileService, $q, $stateParams, ChallengeService, SRMService, CONSTANTS, $state, $window, ngDialog, UserStatsService) { + function ProfileSubtrackController($scope, ProfileService, $q, $stateParams, ChallengeService, SRMService, CONSTANTS, $state, $window, ngDialog, UserStatsService, $log, logger) { var vm = this vm.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX vm.graphState = { show: 'history' } @@ -195,7 +195,9 @@ import _ from 'lodash' }) vm.status.challenges = CONSTANTS.STATE_READY }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Could not get user SRMs', err) + vm.status.challenges = CONSTANTS.STATE_ERROR }) } else { @@ -208,7 +210,9 @@ import _ from 'lodash' vm.challenges = vm.challenges.concat(data) vm.status.challenges = CONSTANTS.STATE_READY }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Could not get user marathon matches', err) + vm.status.challenges = CONSTANTS.STATE_ERROR }) } @@ -223,7 +227,10 @@ import _ from 'lodash' vm.pageParams.currentCount = vm.challenges.length vm.status.challenges = CONSTANTS.STATE_READY return data - }).catch(function(err) { + }) + .catch(function(err) { + logger.error('Could not get user challenges', err) + vm.status.challenges = CONSTANTS.STATE_ERROR }) } diff --git a/app/services/api.service.js b/app/services/api.service.js index 0cd195e8e..062a07de6 100644 --- a/app/services/api.service.js +++ b/app/services/api.service.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.services').factory('ApiService', ApiService) - ApiService.$inject = ['$http', '$log', 'AuthTokenService', 'Restangular', 'CONSTANTS'] + ApiService.$inject = ['$http', '$log', 'logger', 'AuthTokenService', 'Restangular', 'CONSTANTS'] - function ApiService($http, $log, AuthTokenService, Restangular, CONSTANTS) { + function ApiService($http, $log, logger, AuthTokenService, Restangular, CONSTANTS) { var service = { requestHandler: requestHandler, restangularV2: _getRestangularV2(), @@ -60,7 +60,7 @@ import _ from 'lodash' case 500: // SERVER ERROR case 503: // HTTP_503_SERVICE_UNAVAILABLE default: - $log.error('Restangular Error Interceptor' + JSON.stringify(response)) + logger.error('Restangular Error Interceptor', response) return true // error not handled } }) @@ -142,7 +142,7 @@ import _ from 'lodash' case 500: // SERVER ERROR case 503: // HTTP_503_SERVICE_UNAVAILABLE default: - $log.error('Restangular Error Interceptor ', response) + logger.error('Restangular Error Interceptor ', response) return true // error not handled } }) diff --git a/app/services/authtoken.service.js b/app/services/authtoken.service.js index c087e3832..50b940e5b 100644 --- a/app/services/authtoken.service.js +++ b/app/services/authtoken.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('AuthTokenService', AuthTokenService) - AuthTokenService.$inject = ['CONSTANTS', '$cookies', '$location', 'store', '$http', '$log', 'jwtHelper', '$q'] + AuthTokenService.$inject = ['CONSTANTS', '$cookies', '$location', 'store', '$http', '$log', 'logger', 'jwtHelper', '$q'] - function AuthTokenService(CONSTANTS, $cookies, $location, store, $http, $log, jwtHelper, $q) { + function AuthTokenService(CONSTANTS, $cookies, $location, store, $http, $log, logger, jwtHelper, $q) { var v2TokenKey = 'tcjwt' var v2TCSSOTokenKey = 'tcsso' var v3TokenKey = 'appiriojwt' @@ -66,12 +66,17 @@ import angular from 'angular' 'Authorization': 'Bearer ' + token }, data: {} - }).then(function(res) { + }) + .then(function(res) { var appiriojwt = res.data.result.content.token + setV3Token(appiriojwt) + return appiriojwt - }).catch(function(resp) { - $log.error(resp) + }) + .catch(function(err) { + logger.error('Could not refresh v3 token', err) + removeTokens() }) } @@ -98,8 +103,10 @@ import angular from 'angular' resolve(appiriojwt) }, function(err) { - $log.error(err) + logger.error('Could not exchange token', err) + removeTokens() + reject(err) } ) @@ -122,7 +129,7 @@ import angular from 'angular' $log.debug(resp) }, function(err) { - $log.error(err) + logger.error('Could not get token from Auth0 code', err) } ) } diff --git a/app/services/challenge.service.js b/app/services/challenge.service.js index b10086a62..773d2e618 100644 --- a/app/services/challenge.service.js +++ b/app/services/challenge.service.js @@ -7,9 +7,9 @@ import moment from 'moment' angular.module('tc.services').factory('ChallengeService', ChallengeService) - ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log'] + ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger'] - function ChallengeService(CONSTANTS, ApiService, $q, $log) { + function ChallengeService(CONSTANTS, ApiService, $q, $log, logger) { var api = ApiService.restangularV3 var apiV2 = ApiService.restangularV2 var service = { @@ -46,7 +46,7 @@ import moment from 'moment' return _.find(phases, function(p) { return p.phaseType.toUpperCase() === phaseType}) }, function(err) { - $log.error(err) + logger.error('Could not get challenge phases', err) } ) } diff --git a/app/services/externalAccounts.service.js b/app/services/externalAccounts.service.js index 415a2d1a2..8dbe957cd 100644 --- a/app/services/externalAccounts.service.js +++ b/app/services/externalAccounts.service.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.services').factory('ExternalAccountService', ExternalAccountService) - ExternalAccountService.$inject = ['$q', '$log', 'CONSTANTS', 'auth', 'ApiService', 'UserService', 'Helpers'] + ExternalAccountService.$inject = ['$q', '$log', 'logger', 'CONSTANTS', 'auth', 'ApiService', 'UserService', 'Helpers'] - function ExternalAccountService($q, $log, CONSTANTS, auth, ApiService, UserService, Helpers) { + function ExternalAccountService($q, $log, logger, CONSTANTS, auth, ApiService, UserService, Helpers) { var auth0 = auth $log = $log.getInstance('ExternalAccountService') @@ -61,11 +61,12 @@ import _ from 'lodash' status: 'SUCCESS' }) }) - .catch(function(resp) { - $log.error('Error unlinking account: ' + resp.data.result.content) + .catch(function(err) { + logger.error('Error unlinking account', err) + var status = 'FATAL_ERROR' - var msg = resp.data.result.content - if (resp.status === 404) { + var msg = err.data.result.content + if (err.status === 404) { status = 'SOCIAL_PROFILE_NOT_EXIST' } $reject({ @@ -110,14 +111,17 @@ import _ from 'lodash' if (includePending) _promises.push(getLinkedAccounts(userId)) - $q.all(_promises).then(function(data) { + $q.all(_promises) + .then(function(data) { var links = includePending ? data[1]: [] var _cards = _convertAccountsIntoCards(links, data[0].plain(), includePending) // TODO add weblinks resolve(_cards) - }).catch(function(resp) { - $log.error(resp) - reject(resp) + }) + .catch(function(err) { + logger.error('Could not get all external links accounts', err) + + reject(err) }) }) } @@ -167,25 +171,29 @@ import _ from 'lodash' _data.linkedAccount.data.status = 'PENDING' resolve(_data) }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Error linking account', err) + var errorStatus = 'FATAL_ERROR' - $log.error('Error linking account: ' + resp.data.result.content) - if (resp.data.result && resp.data.result.status === 400) { + + if (err.data.result && err.data.result.status === 400) { errorStatus = 'SOCIAL_PROFILE_ALREADY_EXISTS' } reject({ status: errorStatus, - msg: resp.data.result.content + msg: err.data.result.content }) }) }, - function(error) { - $log.warn('onSocialLoginFailure ' + JSON.stringify(error)) - reject(error) + function(err) { + logger.error('Error signing in - onSocialLoginFailure', err) + + reject(err) } ) } else { - $log.error('Unsupported social login backend: ' + provider) + logger.error('Unsupported social login backend', provider) + $q.reject({ status: 'failed', 'error': 'Unsupported social login backend \'' + provider + '\'' diff --git a/app/services/externalLinks.service.js b/app/services/externalLinks.service.js index 4191ca9ce..a0757b9b9 100644 --- a/app/services/externalLinks.service.js +++ b/app/services/externalLinks.service.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.services').factory('ExternalWebLinksService', ExternalWebLinksService) - ExternalWebLinksService.$inject = ['$log', 'CONSTANTS', 'ApiService', '$q'] + ExternalWebLinksService.$inject = ['$log', 'logger', 'CONSTANTS', 'ApiService', '$q'] - function ExternalWebLinksService($log, CONSTANTS, ApiService, $q) { + function ExternalWebLinksService($log, logger, CONSTANTS, ApiService, $q) { $log = $log.getInstance('ExternalWebLinksService') var memberApi = ApiService.getApiServiceProvider('MEMBER') @@ -55,15 +55,17 @@ import _ from 'lodash' _newLink.data.status = 'PENDING' resolve(_newLink) }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Error adding weblink', err) + var errorStatus = 'FATAL_ERROR' - $log.error('Error adding weblink: ' + resp.data.result.content) - if (resp.data.result && resp.data.result.status === 400) { + + if (err.data.result && err.data.result.status === 400) { errorStatus = 'WEBLINK_ALREADY_EXISTS' } reject({ status: errorStatus, - msg: resp.data.result.content + msg: err.data.result.content }) }) }) @@ -75,15 +77,17 @@ import _ from 'lodash' .then(function(resp) { $resolve(resp) }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Error removing weblink', err) + var errorStatus = 'FATAL_ERROR' - $log.error('Error removing weblink: ' + resp.data.result.content) - if (resp.data.result && resp.data.result.status === 400) { + + if (err.data.result && err.data.result.status === 400) { errorStatus = 'WEBLINK_NOT_EXIST' } $reject({ status: errorStatus, - msg: resp.data.result.content + msg: err.data.result.content }) }) }) diff --git a/app/services/image.service.js b/app/services/image.service.js index 6f84b2de0..a98db39e8 100644 --- a/app/services/image.service.js +++ b/app/services/image.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('ImageService', ImageService) - ImageService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', '$rootScope', 'toaster'] + ImageService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger', '$rootScope', 'toaster'] - function ImageService(CONSTANTS, ApiService, $q, $log, $rootScope, toaster) { + function ImageService(CONSTANTS, ApiService, $q, $log, logger, $rootScope, toaster) { var api = ApiService.restangularV3 var service = { @@ -26,8 +26,8 @@ import angular from 'angular' return newPhotoURL }) .catch(function(err) { - $log.info('Error in creating file record') - $log.error(err) + logger.error('Error in creating file record for image', err) + toaster.pop('error', 'Whoops!', 'There was an error uploading your profile image. Please try again later.') }) } @@ -45,8 +45,10 @@ import angular from 'angular' }) }) .catch(function(err) { - $log.info('Error getting presigned url') + logger.error('Error getting presigned url for image', err) + toaster.pop('error', 'Whoops!', 'There was an error uploading your profile image. Please try again later.') + deferred.reject(err) }) @@ -60,11 +62,11 @@ import angular from 'angular' xhr.open('PUT', response.preSignedURL, true) xhr.setRequestHeader('Content-Type', response.file.type) - // xhr version of the success callback xhr.onreadystatechange = function() { var status = xhr.status if (((status >= 200 && status < 300) || status === 304) && xhr.readyState === 4) { $log.info('Successfully uploaded file') + deferred.resolve({ userHandle: response.userHandle, body: { @@ -73,15 +75,19 @@ import angular from 'angular' } }) } else if (status >= 400) { - $log.error('Error uploading to S3 with status: ' + status) + logger.error('Could not upload image to S3', status) + toaster.pop('error', 'Whoops!', 'There was an error uploading your profile image. Please try again later.') + deferred.reject({}) } } xhr.onerror = function(err) { - $log.info('Error uploading to s3') + logger.error('Could not upload image to S3', err) + toaster.pop('error', 'Whoops!', 'There was an error uploading your profile image. Please try again later.') + deferred.reject(err) } diff --git a/app/services/jwtInterceptor.service.js b/app/services/jwtInterceptor.service.js index 9b999a73f..4d665158f 100644 --- a/app/services/jwtInterceptor.service.js +++ b/app/services/jwtInterceptor.service.js @@ -44,17 +44,21 @@ import angular from 'angular' // var token = config.url.indexOf('v2/') > -1 ? AuthTokenService.getV2Token() : AuthTokenService.getV3Token() if (jwtHelper.isTokenExpired(token)) { $log.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) - return AuthTokenService.refreshV3Token(token).then(function(idToken) { + + return AuthTokenService.refreshV3Token(token) + .then(function(idToken) { $log.debug('Successfully refreshed V3 token.') // v2 token doesn't expire AuthTokenService.setV3Token(idToken) return idToken }) - .catch(function(resp) { + .catch(function(err) { // Server will not or cannot refresh token $log.debug('Unable to refresh V3 token, redirecting to login') - $log.debug(resp) + $log.debug(err) + $state.go('login') + return null }) } else { @@ -77,17 +81,20 @@ import angular from 'angular' // Note only v3tokens expire if (jwtHelper.isTokenExpired(idToken)) { $log.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) - return AuthTokenService.refreshV3Token(idToken).then(function(idToken) { + return AuthTokenService.refreshV3Token(idToken) + .then(function(idToken) { // v2 token doesn't expire $log.debug('Successfully refreshed V3 token.') AuthTokenService.setV3Token(idToken) return idToken }) - .catch(function(resp) { + .catch(function(err) { // Server will not or cannot refresh token $log.debug('Unable to refresh V3 token, redirecting to login') - $log.debug(resp) + $log.debug(err) + $state.go('login') + return null }) } else { diff --git a/app/services/services.module.js b/app/services/services.module.js index 4e3fd7710..dbae00ea8 100644 --- a/app/services/services.module.js +++ b/app/services/services.module.js @@ -18,7 +18,7 @@ import Auth0 from 'auth0-js' angular.module('tc.services', dependencies) .config(['$provide', 'authProvider', 'CONSTANTS', function($provide, authProvider, CONSTANTS) { $provide.decorator('$log', ['$delegate', 'LogEnhancer', function($delegate, LogEnhancer) { - LogEnhancer.enhanceLogger($delegate) + LogEnhancer.enhance$log($delegate) return $delegate }]) diff --git a/app/services/submissions.service.js b/app/services/submissions.service.js index 776e29ea3..f1159957f 100644 --- a/app/services/submissions.service.js +++ b/app/services/submissions.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('SubmissionsService', SubmissionsService) - SubmissionsService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'toaster'] + SubmissionsService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger', 'toaster'] - function SubmissionsService(CONSTANTS, ApiService, $q, $log, toaster) { + function SubmissionsService(CONSTANTS, ApiService, $q, $log, logger, toaster) { var api = ApiService.getApiServiceProvider('SUBMISSIONS') var service = { @@ -20,20 +20,17 @@ import angular from 'angular' return service function getPresignedURL(body, files, progressCallback) { - $log.info('Body of request for presigned url: ') - $log.info(body) - return api.all('submissions').customPOST(body) .then(function(response) { - $log.info('POST/Presigned URL Response: ') - $log.info(response.plain()) progressCallback.call(progressCallback, 'PREPARE', 100) + uploadSubmissionFileToS3(response, response.data.files, files, progressCallback) }) .catch(function(err) { - $log.info(err) - $log.info('Error getting presigned url') + logger.error('Could not get presigned url', err) + progressCallback.call(progressCallback, 'ERROR', err) + toaster.pop('error', 'Whoops!', 'There was an error uploading your submissions. Please try again later.') }) } @@ -48,41 +45,40 @@ import angular from 'angular' xhr.setRequestHeader('Content-Type', fileWithPresignedURL.mediaType) xhr.upload.addEventListener('progress', function(oEvent) { + // Compute progress information only if the total size is known if (oEvent.lengthComputable) { var percentComplete = oEvent.loaded / oEvent.total - // console.log("Completed " + percentComplete) + if (progressCallback && typeof progressCallback === 'function') { progressCallback.call(progressCallback, 'UPLOAD', { file: fileWithPresignedURL.preSignedUploadUrl, progress: percentComplete*100 }) } - // ... - } else { - // Unable to compute progress information since the total size is unknown } }) - // xhr version of the success callback xhr.onreadystatechange = function() { var status = xhr.status if (((status >= 200 && status < 300) || status === 304) && xhr.readyState === 4) { $log.info('Successfully uploaded file') - $log.info('xhr response: ', xhr.responseText) - // updateSubmissionStatus and then resolve? deferred.resolve() } else if (status >= 400) { - $log.error('Error uploading to S3 with status: ' + status) + logger.error('Error uploading to S3 with status', status) + toaster.pop('error', 'Whoops!', 'There was an error uploading your files. Please try again later.') + deferred.reject({}) } } xhr.onerror = function(err) { - $log.info('Error uploading to s3') + logger.error('Error uploading to s3', err) + toaster.pop('error', 'Whoops!', 'There was an error uploading your files. Please try again later.') + deferred.reject(err) } @@ -93,19 +89,16 @@ import angular from 'angular' return $q.all(promises) .then(function(response) { - $log.info('response from S3: ') - $log.info(response) - $log.info('response to use .save restnagular with: ') - $log.info(presignedURLResponse) progressCallback.call(progressCallback, 'UPLOAD', 100) + // Update and start processing updateSubmissionStatus(presignedURLResponse.plain(), progressCallback) }) .catch(function(err) { progressCallback.call(progressCallback, 'ERROR', err) - $log.info('error uploading to S3: ') - $log.info(err) + + logger.error('Could not upload to S3', err) }) } @@ -118,11 +111,12 @@ import angular from 'angular' return api.one('submissions', body.id).customPUT(body) .then(function(response) { $log.info('Successfully updated file statuses') + recordCompletedSubmission(response.plain(), progressCallback) }) .catch(function(err) { - $log.info('Error updating file statuses') - $log.error(err) + logger.error('Could not update file statuses', err) + progressCallback.call(progressCallback, 'ERROR', err) }) } @@ -132,13 +126,12 @@ import angular from 'angular' return api.one('submissions', body.id).customPOST(body, 'process') .then(function(response) { $log.info('Successfully made file record. Beginning processing') - $log.info('response from process call: ') - $log.info(response) + progressCallback.call(progressCallback, 'FINISH', 100) }) .catch(function(err) { - $log.info('Error in starting processing') - $log.error(err) + logger.error('Could not start processing', err) + progressCallback.call(progressCallback, 'ERROR', err) }) } diff --git a/app/services/tcAuth.service.js b/app/services/tcAuth.service.js index b7edff902..deeddf31d 100644 --- a/app/services/tcAuth.service.js +++ b/app/services/tcAuth.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('TcAuthService', TcAuthService) - TcAuthService.$inject = ['CONSTANTS', 'auth', 'AuthTokenService', '$rootScope', '$q', '$log', '$timeout', 'UserService', 'Helpers', 'ApiService', 'store', '$http'] + TcAuthService.$inject = ['CONSTANTS', 'auth', 'AuthTokenService', '$rootScope', '$q', '$log', 'logger', '$timeout', 'UserService', 'Helpers', 'ApiService', 'store', '$http'] - function TcAuthService(CONSTANTS, auth, AuthTokenService, $rootScope, $q, $log, $timeout, UserService, Helpers, ApiService, store, $http) { + function TcAuthService(CONSTANTS, auth, AuthTokenService, $rootScope, $q, $log, logger, $timeout, UserService, Helpers, ApiService, store, $http) { $log = $log.getInstance('TcAuthServicetcAuth') var auth0 = auth var service = { @@ -128,7 +128,7 @@ import angular from 'angular' resolve(result) } else { if (resp.reasonCode === 'ALREADY_IN_USE') { - $log.error('Social handle exist') + logger.error('Social handle exist') reject({ status: 'SOCIAL_PROFILE_ALREADY_EXISTS' }) @@ -136,8 +136,8 @@ import angular from 'angular' } }) - .catch(function(resp) { - $log.debug(JSON.stringify(resp)) + .catch(function(err) { + $log.debug(JSON.stringify(err)) }) }, function(error) { @@ -146,7 +146,8 @@ import angular from 'angular' } ) } else { - $log.error('Unsupported social login provider: ' + provider) + logger.error('Unsupported social login provider', provider) + reject({ status: 'FAILED', 'error': 'Unsupported social login provider \'' + provider + '\'' diff --git a/app/settings/account-info/account-info.controller.js b/app/settings/account-info/account-info.controller.js index f0133d4db..3dae07327 100644 --- a/app/settings/account-info/account-info.controller.js +++ b/app/settings/account-info/account-info.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.settings').controller('AccountInfoController', AccountInfoController) - AccountInfoController.$inject = ['userData', 'UserService', 'ProfileService', '$log', 'ISO3166', 'toaster', '$scope', '$timeout', '$state'] + AccountInfoController.$inject = ['userData', 'UserService', 'ProfileService', '$log', 'logger', 'ISO3166', 'toaster', '$scope', '$timeout', '$state'] - function AccountInfoController(userData, UserService, ProfileService, $log, ISO3166, toaster, $scope, $timeout, $state) { + function AccountInfoController(userData, UserService, ProfileService, $log, logger, ISO3166, toaster, $scope, $timeout, $state) { var vm = this vm.saveAccountInfo = saveAccountInfo vm.updateCountry = updateCountry @@ -35,8 +35,11 @@ import _ from 'lodash' vm.loading = false }) .catch(function(err) { - $log.error('Error fetching user profile. Redirecting to edit profile.') + $log.info('Error fetching user profile. Redirecting to edit profile.') + logger.error('Could not fetch user profile data', err) + $state.go('settings.profile') + vm.loading = false }) @@ -88,8 +91,11 @@ import _ from 'lodash' for (var k in vm.userData) userData[k] = vm.userData[k] vm.accountInfoForm.$setPristine() }) - .catch(function() { + .catch(function(err) { + logger.error('Could not update user profile', err) + vm.formProcessing.accountInfoForm = false + toaster.pop('error', 'Whoops!', 'Something went wrong. Please try again later.') }) } @@ -100,6 +106,7 @@ import _ from 'lodash' function submitNewPassword() { vm.formProcessing.newPasswordForm = true + UserService.updatePassword(vm.password, vm.currentPassword) .then(function(res) { vm.formProcessing.newPasswordForm = false @@ -112,9 +119,10 @@ import _ from 'lodash' $log.info('Your password has been updated.') }) .catch(function(err) { + logger.error('Could not update password', err) + vm.formProcessing.newPasswordForm = false vm.newPasswordForm.currentPassword.$setValidity('incorrect', false) - $log.error(err) }) } } diff --git a/app/settings/edit-profile/edit-profile.controller.js b/app/settings/edit-profile/edit-profile.controller.js index 50498c657..6aa90620b 100644 --- a/app/settings/edit-profile/edit-profile.controller.js +++ b/app/settings/edit-profile/edit-profile.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.settings').controller('EditProfileController', EditProfileController) - EditProfileController.$inject = ['$rootScope', 'userData', 'userHandle', 'ProfileService', 'ExternalAccountService', 'ExternalWebLinksService', '$log', 'ISO3166', 'ImageService', 'CONSTANTS', 'TagsService', 'toaster', '$q', '$scope'] + EditProfileController.$inject = ['$rootScope', 'userData', 'userHandle', 'ProfileService', 'ExternalAccountService', 'ExternalWebLinksService', '$log', 'logger', 'ISO3166', 'ImageService', 'CONSTANTS', 'TagsService', 'toaster', '$q', '$scope'] - function EditProfileController($rootScope, userData, userHandle, ProfileService, ExternalAccountService, ExternalWebLinksService, $log, ISO3166, ImageService, CONSTANTS, TagsService, toaster, $q, $scope) { + function EditProfileController($rootScope, userData, userHandle, ProfileService, ExternalAccountService, ExternalWebLinksService, $log, logger, ISO3166, ImageService, CONSTANTS, TagsService, toaster, $q, $scope) { $log = $log.getInstance('EditProfileCtrl') var vm = this vm.toggleTrack = toggleTrack @@ -57,7 +57,7 @@ import _ from 'lodash' vm.tags = tags }) .catch(function(err) { - $log.error(JSON.stringify(err)) + logger.error('Could not get approved skill tags', err) }) ProfileService.getUserSkills(vm.userData.handle) @@ -67,7 +67,7 @@ import _ from 'lodash' }) }) .catch(function(err) { - $log.error(JSON.stringify(err)) + logger.error('Could not get user skills', err) }) } @@ -102,7 +102,7 @@ import _ from 'lodash' vm.countryObj = null return } - + vm.editProfile.$setDirty() var countryCode = _.get(countryObj, 'alpha3', undefined) vm.userData.competitionCountryCode = countryCode @@ -143,8 +143,10 @@ import _ from 'lodash' for (var k in vm.userData) userData[k] = vm.userData[k] }) .catch(function(err) { + logger.error('Could not update user profile', err) + vm.profileFormProcessing = false - $log.error(err) + toaster.pop('error', 'Whoops!', 'Something went wrong. Please try again later.') }) } @@ -169,12 +171,16 @@ import _ from 'lodash' ProfileService.updateUserProfile(userData) .then(function() { vm.userData.photoURL = '' + $log.info('Saved successfully') + toaster.pop('success', 'Success!', 'Your account information was updated.') }) .catch(function(err) { + logger.error('Could not update user profile and delete image', err) + vm.profileFormProcessing = false - $log.error(err) + vm.userData.photoURL = oldPhotoURL vm.originalUserData.photoURL = oldPhotoURL toaster.pop('error', 'Whoops!', 'Something went wrong. Please try again later.') diff --git a/app/skill-picker/skill-picker.controller.js b/app/skill-picker/skill-picker.controller.js index 2065c1cd0..21e80ca0f 100644 --- a/app/skill-picker/skill-picker.controller.js +++ b/app/skill-picker/skill-picker.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.skill-picker').controller('SkillPickerController', SkillPickerController) - SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', '$log', 'toaster', 'MemberCertService', '$q'] + SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', '$log', 'logger', 'toaster', 'MemberCertService', '$q'] - function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, $log, toaster, MemberCertService, $q) { + function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, $log, logger, toaster, MemberCertService, $q) { var vm = this $log = $log.getInstance('SkillPickerController') vm.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX @@ -93,7 +93,9 @@ import _ from 'lodash' promises.push(MemberCertService.getMemberRegistration(vm.userId, community.programId)) } vm.loadingCommunities = true - $q.all(promises).then(function(responses) { + + $q.all(promises) + .then(function(responses) { vm.loadingCommunities = false responses.forEach(function(program) { if (program) { @@ -116,7 +118,9 @@ import _ from 'lodash' vm.showCommunity = true } }) - .catch(function(error) { + .catch(function(err) { + logger.error('Could not load communities with member cert registration data', err) + vm.loadingCommunities = false }) } @@ -175,14 +179,18 @@ import _ from 'lodash' } } - $q.all(promises).then(function(responses) { + $q.all(promises) + .then(function(responses) { vm.saving = false toaster.pop('success', 'Success!', 'Your skills have been updated.') vm.disableDoneButton = true $state.go('dashboard') }) - .catch(function(resp) { + .catch(function(err) { + logger.error('Could not update update user skills or register members for community', err) + vm.saving = false + toaster.pop('error', 'Whoops!', 'Something went wrong. Please try again later.') }) } diff --git a/app/submissions/submissions.routes.js b/app/submissions/submissions.routes.js index e9a35c5a4..18bc01207 100644 --- a/app/submissions/submissions.routes.js +++ b/app/submissions/submissions.routes.js @@ -23,7 +23,7 @@ import _ from 'lodash' title: 'Challenge Submission' }, resolve: { - challengeToSubmitTo: ['ChallengeService', '$stateParams', 'UserService', ChallengeToSubmitTo] + challengeToSubmitTo: ['ChallengeService', '$stateParams', 'UserService', '$log', 'logger', ChallengeToSubmitTo] } }, 'submissions.file-design': { @@ -40,7 +40,7 @@ import _ from 'lodash' } } - function ChallengeToSubmitTo(ChallengeService, $stateParams, UserService) { + function ChallengeToSubmitTo(ChallengeService, $stateParams, UserService, $log, logger) { // This page is only available to users that are registered to the challenge (submitter role) and the challenge is in the Checkpoint Submission or Submission phase. var params = { filter: 'id=' + $stateParams.challengeId @@ -102,6 +102,8 @@ import _ from 'lodash' } }) .catch(function(err) { + logger.error('Could not get user challenges', err) + setErrorMessage('challenge', 'There was an error getting information for this challenge.') return { From 6b0c7a89fc1811552f21db7660e454b2a906f4d5 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Mon, 11 Apr 2016 14:24:43 -0700 Subject: [PATCH 46/54] Fix typo --- app/directives/tcui-components.module.js | 2 +- app/services/services.module.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/directives/tcui-components.module.js b/app/directives/tcui-components.module.js index fea8494a2..6330f4da6 100644 --- a/app/directives/tcui-components.module.js +++ b/app/directives/tcui-components.module.js @@ -6,7 +6,7 @@ import angular from 'angular' angular.module('tcUIComponents', ['dcbImgFallback', 'blocks.logger', 'toaster']) .config(['$provide',function ($provide) { $provide.decorator('$log', ['$delegate', 'LogEnhancer', function ($delegate, LogEnhancer) { - LogEnhancer.enhance$log($delegate) + LogEnhancer.enhanceLogger($delegate) return $delegate }]) }]) diff --git a/app/services/services.module.js b/app/services/services.module.js index dbae00ea8..4e3fd7710 100644 --- a/app/services/services.module.js +++ b/app/services/services.module.js @@ -18,7 +18,7 @@ import Auth0 from 'auth0-js' angular.module('tc.services', dependencies) .config(['$provide', 'authProvider', 'CONSTANTS', function($provide, authProvider, CONSTANTS) { $provide.decorator('$log', ['$delegate', 'LogEnhancer', function($delegate, LogEnhancer) { - LogEnhancer.enhance$log($delegate) + LogEnhancer.enhanceLogger($delegate) return $delegate }]) From 8289cce55903c3e2931273bdb70963526ef69514 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Mon, 11 Apr 2016 14:28:39 -0700 Subject: [PATCH 47/54] Remove debugger --- app/blocks/logger/logger.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/blocks/logger/logger.js b/app/blocks/logger/logger.js index d21d8c161..fc9756f84 100644 --- a/app/blocks/logger/logger.js +++ b/app/blocks/logger/logger.js @@ -25,7 +25,6 @@ import angular from 'angular' ///////////////////// function error(message, data, title) { - debugger if (data) { message = `${message} ${JSON.stringify(data)}` } From 29e7e6311721b77eebb3958bb8948f3cb6a6609c Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Mon, 11 Apr 2016 14:32:38 -0700 Subject: [PATCH 48/54] Fix orderBy error --- app/settings/edit-profile/edit-profile.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/settings/edit-profile/edit-profile.controller.js b/app/settings/edit-profile/edit-profile.controller.js index 6aa90620b..ae28d54a8 100644 --- a/app/settings/edit-profile/edit-profile.controller.js +++ b/app/settings/edit-profile/edit-profile.controller.js @@ -27,7 +27,7 @@ import _ from 'lodash' vm.originalUserData = userData vm.linkedExternalAccounts = [] vm.linkedExternalAccountsData = {} - vm.skills = false + vm.skills = [] vm.tags = [] vm.profileFormProcessing = false vm.tracks = {} From ee4349baa78acf1162ac04776fd8d4f9227f159a Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Mon, 11 Apr 2016 14:45:48 -0700 Subject: [PATCH 49/54] Add back accidentally deleted line --- app/account/logout/logout.controller.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/account/logout/logout.controller.js b/app/account/logout/logout.controller.js index 7961c8436..eb73b68a3 100644 --- a/app/account/logout/logout.controller.js +++ b/app/account/logout/logout.controller.js @@ -8,6 +8,8 @@ import angular from 'angular' LogoutController.$inject = ['$log', 'TcAuthService', '$window', 'CONSTANTS'] function LogoutController($log, TcAuthService, $window, CONSTANTS) { + $log = $log.getInstance('LogoutController') + TcAuthService.logout() .then(function() { $log.debug('successfully logged out.') From 1d020807a2d4f3f0b2e2953ed0f16d1709d872d8 Mon Sep 17 00:00:00 2001 From: vikasrohit Date: Tue, 12 Apr 2016 11:55:26 +0530 Subject: [PATCH 50/54] AS#111130683709862, Topcoder Team Live banner (for Friday broadcast) -- Adapted banner directive to show HTML inside description field -- Added TTL banner --- app/directives/tc-banner/tc-banner.jade | 2 +- app/my-dashboard/my-dashboard.jade | 3 +++ app/services/bannerDataService.js | 10 ++++++++++ assets/css/my-dashboard/my-dashboard.scss | 15 +++++++++++++-- assets/images/team-live-bg.png | Bin 0 -> 493 bytes assets/images/team-live-logo.png | Bin 0 -> 7746 bytes 6 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 assets/images/team-live-bg.png create mode 100644 assets/images/team-live-logo.png diff --git a/app/directives/tc-banner/tc-banner.jade b/app/directives/tc-banner/tc-banner.jade index e1e541b95..697a39c77 100644 --- a/app/directives/tc-banner/tc-banner.jade +++ b/app/directives/tc-banner/tc-banner.jade @@ -3,7 +3,7 @@ img(ng-src="{{vm.img}}") .title(ng-bind="vm.title") .content(ng-transclude, ng-show="transcluded") - .description(ng-bind="vm.description") + .description(ng-bind-html="vm.description") .ctas .cta(ng-repeat="link in vm.ctas") a(class="{{link.cssClass}}", title="{{link.title}}", ng-href="{{link.url}}", ng-if="link.url") {{link.title}} diff --git a/app/my-dashboard/my-dashboard.jade b/app/my-dashboard/my-dashboard.jade index e452d9e3d..d3e7ea1bc 100644 --- a/app/my-dashboard/my-dashboard.jade +++ b/app/my-dashboard/my-dashboard.jade @@ -5,6 +5,9 @@ .challenges(id="challenges", ui-view="my-challenges") + .ttl + tc-banner(theme="black", banner-name="ttl") + .tco tc-banner(theme="black", banner-name="tco16") diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js index 17ac0fefb..5e5e90be6 100644 --- a/app/services/bannerDataService.js +++ b/app/services/bannerDataService.js @@ -35,6 +35,16 @@ import angular from 'angular' url: 'http://tco16.topcoder.com/latest/overview/', cssClass: 'tc-btn tc-btn-s tco-cta' }] + }, + 'ttl': { + title: 'Episode #3 | Featuring Jesse D’Amato Ford', + img: require('../../assets/images/team-live-logo.png'), + description: 'APR 15 / 10:30am EST / Live on #GoogleHangoutOnAir', + ctas: [{ + title: 'Tune In', + url: 'https://plus.google.com/events/c86vvsum04lmq3bnd0bqp719img', + cssClass: 'tc-btn tc-btn-s' + }] } } } diff --git a/assets/css/my-dashboard/my-dashboard.scss b/assets/css/my-dashboard/my-dashboard.scss index 58b7cd237..c60aca5eb 100644 --- a/assets/css/my-dashboard/my-dashboard.scss +++ b/assets/css/my-dashboard/my-dashboard.scss @@ -11,7 +11,7 @@ background-color: $white; } - .challenges, .srms, .programs, .tco, .community-updates { + .challenges, .srms, .programs, .tco, .ttl, .community-updates { @include module-l; margin-top: 1px; width: 100%; @@ -23,7 +23,18 @@ } } - .challenges, .srms, .programs, .tco, .community-updates { + .ttl { + .tc-banner-placeholder { + background: url(../../images/team-live-bg.png) repeat; + .image { + img { + width: auto; + } + } + } + } + + .challenges, .srms, .programs, .tco, .ttl, .community-updates { padding-top: 0px; } diff --git a/assets/images/team-live-bg.png b/assets/images/team-live-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9238d80c8eaf360a8ef8163895183603ff1486ee GIT binary patch literal 493 zcmV z#!FJ|8MtPzh{Y%j!*C~pr5Tc6`A^4t3?A=QXfYc4{REbLRspx@#Qj(A{)~Q_Mfo#7 z^}yXY7GP!o+<9c5j{O3-?>r8XpRDZ|Z-R5$d3k*V&V?pGDCjT1c`ueNoB_4KJ+&pr zz1#cJDLM92djNMqW%nhK2LVSy%kHnh^8&|$vp-V(BU;kHBT` zl9vl#yusE|VM?P7gFAG733BZO8D(Zlvo|mU=l781eCERgeNhAaU)=-XaJ1I|XDPto zC1R=~IDdCCIO~i0;H-N9oW=bs;LPCQ@QL;UIDgU^IIOR?!TEokpfo^5e*n%qTLAq* jPFy)MxcWn|Sl9dj8dV9uJ$I&+00000NkvXXu0mjfk#psi literal 0 HcmV?d00001 diff --git a/assets/images/team-live-logo.png b/assets/images/team-live-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..15e97af55519608ef964b6a379a30a91a19e04e1 GIT binary patch literal 7746 zcmYLObzD@<_a>JPK|)$ULb_RU3F&U6yL;)}1p|;;KoFMhmRckilv-LERzd_R0Y$p} z`TF{OfB)Qj=X1}TIrE(7&dhyIyq=CK2_YRJ1_lO+x|*^91_mbT_p=#3;P*A(pP23U z4aY@6TLA;3F@@;H4i^K1@lst`!6*dtAP+Cw()e<4a?HCr<37GY9L7CuHGB%SN*H+p zzRLak%Bd_+E@ihy6#|wgIZ#$ES3M95CRTJRtI$KmN_Dk|;D;v^YWRF8=islu!dE$tT9{2mY5cM5M=7eQm%5)x?p|1fpJHhI3S0nqJQ9&3qx(HE_Ox?Bv2u< zC45$wxx8}u9C~R50k0r?_Jw}P+cWz9y`3-yM|qR9Ipfa9wIni;)kQ_0TjV0IcuT^z zP3@@aGzMe-402D1d`N+*@9{K)BP6Z~2F}r1=S^W0vR6LBN_>;^Hx3eEa+j&K4#2+E z$H$}kP?GD@{e_BRs>XDB>_2WYG9iPO^R4#o-rhQOaR1#o3#J-1AgUh@3@}-+K-YEu zv6`jCHqYB!ZuMBX+HW{|PR4wAb$--v@C5igY=gtYVgT1-R<=SrH|WzKz0VD4!Xy+= ztu431+`O6i&*a=wAbOnKctG%uo`m0qvV`w?@3M#S_Ut>F3gAL;wRE;JLu^R|I?Gw% zFBWvpEKIeX2(#<6gMAL|97j@NHJ!r?h+Z&3vhe9sZExdIF~BR#-^P`=fMuY19jj_G z!|tL=?XxRWV@68#;Nel8mDk3`+%>QM!hj-fL3__d4q;*g;^=R7o@`s^?tQAxVwB*@ zYZfyE=%y~cyTsG1*IjM9)g%XZq60n$HfA?pXFT9F@BfpXWxK+>bfY;X=Bd!=#sDHt z$+oLNxP#I`%iCs;YC@}Ql_H`PaK!S-mf?aNTXlve4RffAD?*)MB>w=dTEzS(!!47~rF;?_P;XE>~A z&U#?)M{I>(s;pu&pHLiTHy>M&0}5NwpAYrdJ%E;LOr2x?Endwdn7Tf3OOMIZMfYy5 z59OZ!urWqx>H+cnuk6w#99E|cD6^WHZ`B9QK@a}CdGECFh zO_u+*i9~F5nuu&HJ^sh3A==+Pgzjov{(?*6+zWT4>3KIV`Zs;aLce=B+?c!lZS#+T zw!1!Lxo*g6M!u;tU=E)Pc6M{`vWU-u9jiw^8Il_^WrdiG{WBgU$FcB6$6&(mL*vBh z8ZPv4i|^bE^4H^F?*WGaX(^y;q?>D=7u*7M?%_b?uB06#Q1fpXt>d83yi&N~5oCho zOJ~E6{7fhJ5&_`(aNmSj9oMIiCL$<5tT7sT7*eeHW}M;w3C5;y<~HHC3M_RBDSxNB_p zFi;(+c4$K?H`=aSfz(}{N~CfvJFKEMaGMeOll-s;>o$U<#X;AQ;NH4MvsWolQzRIg zUK>Rr?4IqPx{^nKOusF@{42dy!-po?ARVR%o?79$cmpGB69CgQMi^f^YVHyP-o3W) z%THU!t^ZJx=QmL~sX#A!#z4`yBK`Tx?MtuuGGP5ALNvmx@JG$(^Lfxy1^sV~aT_GP z*QN%E>S&U1=KGF?P>rwbx0@9V>f2R%vL@=JT;5m0@^3Lt~W-R$4X2@RmCau(v; zwPKWYEajVfxGgDR%Per3?yy%ipA(eP>^3%3AX;hVO3vMhmG9}_);2n>HSEM`IAi}C zPrU`=xAvBJSmFc^A*O(8n=$o0x-tewpKXMbLCJ!#Vp%yOdz+y{G_jY7R9fn0ME#WBzB)0}niRKC>gcl-U<#Yb9<*sOy;kX4-NS?gr=@bZl_Eys2#Ks8#w^Ak05i z_Nq;4SdPuVxzzG{S|=)5>jN!UDkeZZD&}x3jR@!bz;wjaZWUvS)Fwa@Ghr-HjXdf&z(MDxh2T#`y7*1uSmT{Tb{C_v9CZ3r z7RBg5MMp73>#W~+C)`RYMXChQ@;Vb|phDwUd)0H5S5py!ZL~TwXNVGbela8L`Bm9f z3W9^ZqMTN%u2iy=4mRJ}>SIYn1QI-;g z>=%#xQa{AXIHwGWMWOjDQ&^-dCEjmC(iOf}agdb5GIt_VNW%?1M7M3~$gg72+$DYM z8ijoe0-d4v!1b&*Y@ReHj|s1?AX->REJD03UkZNEk))?JmOU^(>O zUBEq)TqN#<>bAw~!5JuOg3Af)rGwRBvNAKWF}6Ro#u0HZOx5A~H8={Pgcei$j6HG_ z_vH-;!EX4JEc2J$(weX_9> zS{ylo`ic!4=8S>o0D|lMjn5k}NT?-B!ik5VI4dN28HU}oU4&6MK{)%69$RL?2mLXg z9K^<>2;5`F7swyf#sN+d3mQk%RR7BU; zIf+K$0khWkA-9717a>1JHCVmUnZQz?mgXz55E5 zs#7_{jEw;d`+<+MfMLZt9rtf2S1f?mWIbe}ofnwHoOBrZxMNGLhTDy$Zn!egb-dq4*(cs6zGWDlJU%Y@LUIqcJeCdE zz|hXwKtX;83f4{jh0_oVht@L`T+m2toalYy-`mAH;k2C9(@75%D9ShfLIPpGwCh)z0WRXiIll4<|18!3ycNq`K{0bVc@XPO-Rk^k6 zq8vn4>^Y@?a7#bONwbOpTv;{d zdXP)sV+5)JyYjf{!Kv(RgrPq7mYE~ce4oc^)nt?$Ao~yur3{yS@P#9mnF=r2REgZF zL)+0;uf7lKvyUoFVA>Sd{vIlW^^6a9T7U zRot-8uD^x^z=^!^?24moC>3qOViN%9kGU;AabhtZk6gl()$%!fx#O$lXD5dnOeN)_ zQ0=%UXsVPj8S1FnedfSBLi{{$2mGHV50HfpE{s#M_8-la&0_D<1~+a4DxjEl@pGvSBJNy1|eVG znfF~?epx)wyoq25udvPX%J>9LW`KMfvC{>#Zwj9LtalE0z-72fwK&(iN3%jH4;aJf zKs;Tkk{{`lJv3#H;Qr)v!Ui@?m3z>I-7>O(<1RdPo=AfkDR72!+=G<^u~E5T1HSLj zsesxoUNwS3!V6KF*<-AJL?=DiC(;b6Hx&;PEM}O1`%lxv@wRKehuADKe=2wxwH6gh z&Myi%V~5@8$?F)j40H;uIW%>pGG??LoxbG#&QK zuqI|JD!*LU-OsDKOZAwh!E2$nI{8#!PXhV!YBLwk z0IegL2}*o(&pmZ|^NVYJI^uP6JmN!*M&%Lt;})MngW$e>8*H~Ku3i7AzRY~YQLK1r zG>}&7jRzG0<*{g?4EZqnWtbPW8c|}t#$_S|?xcb5p%|auPim5%%}T$YYKQ8UQ+@EPxx&Z(t1Lm7b^XGH?mEvrSy2^Wwe7`p<-JvF&y^^y@j>Gc!0Wu`nW zn?YrZ&vaK(A{bn488Z<2Ja~0oP=7DMKIV#Uf62YvsI-zX@{^oCY2vQfz6Hpk`F_;W zHssy$rklXJH0jB+W?beGn2Uc`VSfLrksd zCk$8eu}NI4hjVo=S*eUqIRJMWIE;nz0v3yCA+;?L$x)$I?53nlx>{ZA>)5s!bv)YM zkKF{@ZFY)n#4=0JUfT5o{G@Z?h#~pw_k=3*%uQAoy_X%XvuH)D5klk}v6YF)S&N6I|`hK3~>FEUHm;i@$GGb=e;E3mp zznm3!r+USoJPSfYG(~0@D$3iKFw?R^{md1lLlE0)@_7cdC|PBUj(BTMmy;cmP6_2; zv|Sg-IF(j^Lr3Q9ul?Nb6XwMhCfvh!fvxF|Jm|+QXG5%DvaZcc=+;wfqmY#G-sTWe z5y!FVA)E~@It#Op3rF3kN8pzbP|d5QLfRiD9DNg(uaX2;6n6XHQswV;KAL*`cJZow z9KrZ|E%L(lNHwPa+LBlG1u~GmNVv1BNg{d5Lgcz>2YFt7aE>>9{N(oh`s|5$Ixn(I zdo#pW;8Rp3G2oB{Xo=NA;yUdIaJE(KEc}zV_bd;dy zvSB_v1D*dN`5a)ab4B}wYqoW`j}hZ}M(_J|@SDoK(sL!k0GO_?&dT~ZLPN7M$Rf?Z z#VU}ANJe!nsEHJ?$&Mscfrk0R6qdu*hwDi=sP8dT6-#60&fMT9Oq(Xah=Yn8) zDwvHH%!OwJ5gs_7_>E-1h$E#Qf%)j#PQuZmRIEAicCN58YMsXFJnx3U&JNsky2Yn- zvi+DRDmPsOfF3RGB%eHtD0Mt z>h>!$ft2jLI8U7ma0oM-rxTDRO55~m2!UCyu!@Sn3VTzut-{AwHWLRkw)TR}!y&-s zD8|64TP0cbr(-60ZGm}p1Z`vDI>0$Nvt z>vS8szLt}k=Zs=g0H+08=tjoEdSQ6BmHE}jiEF}sU1>$-tMl5m2Aiu3wq4&v6Q1Dy z;(f9}`MnpZt6?d}Y)m<`3!$r;x(uxewLdf28B>NJD=9N@?aiSkRj%kBWpI=N*yTGw z5}lRFCz&Z+F!_47tRw*cGqwWd6mVI+qla>Mitvl*$hTD;?$nqGvfg%3bFnzLD!TEK zpYyvUFg+lu{2NIrx^&j(l^ zJyX8~`gP!lH8q5ENxfr`#PY<9B7+|L3PLWJxx!`Ctay@>Y^A4vkqkcD2`(!=6m_1& zDvGyJ-4X~T-eG&V>aCUS&VE}&33nVcqnuCG(J+)vs7z#mn<4vI*)@p1 zqLSM3d@7IY`t_C>@Y3P^B1<>k1zxB>*6+op_}dG+4oHjqz38~6t9g$$ko9AYD|Rfy znb7E7evusC-)E{7ClI=>nJe5qn`5`*oCHN6HcFJ#8g$~y~a`>b8tdMFjA zRdWc*W;Bi|H(!?C!Vn6HA&MnS6(WVdGHon%Ar=+b%M)BJc>S!M$MMg`XRj+5+90nYY^mkbL@UtV623CANIuzmc-v&`m|RnY|a%V)c^VHdl%a+E!kG2!YV%%RQ+9 z3+tT^r!=k6=ac;os^BU@V*F56&Qyy+G5-l$zRfF z!I|wLM*Nc**~>=d;!l%!R~_=`_wIRI*ZCBQep=gX zl6Sg1)J(I%?sqcqx z!?cF0VxcYcg0(RE9bBjq_e8jO=k7tS|7LXq!#K#7>$|efxz6`Uu+1q&tm>bCt+hh$ z@PK+7C^J;w%~vg+;SyY!l8Jm?4|i06-pNlDJZs`$cIdqjl`K_0h@!ipf+zJ%7|$ru z=NFHcxb=q!-g9*tOKHpFWqYz<$(%*j{k2qJU|tYR+yCh!i>oSSRzTmQbzxfyK5SEm zLkX65ikH$0Dh^uK3JprP4-x09;lKEpQkYk!i`NnYYD^n~R2c&^q|eOOluwm7UZ*h5 zcd+sfRJc=_YP1_AvEIxSWfl&qsMntA4X@?<;cHtm(s$~~*Yoobvtql!P1xyU=hnpp zUreCH744u&!BexIk+RXi=@+TxR4Kw$t~oj(4&8pW>R z-{TfPWr%9a7$M6*fit$B?9>;|iD)Sbay)mC_JTy;Iuvumr#kvT6ZQ9Gu=C4TMuF74 zi%a-Ub$fV_GTVpZv%y;KFCq5Vu~M%Pfg{o{_nmHYvRL5`<87_)0D^kFWpU)~w%6*f z2-DQVY&-b~W4BzT#l=wMtXclE62}@Uo~hyhO4ywqC=PEko+PX;mt7QuUs$(G+R>3Q$ayrKz>l)RioCuS3!OoL2%|Jb$ z);~J(Z^b(Z@Xl@U3;2BH{OhX+BFPTMz*pDl=wx~c9o?`uf5hH@DiDF=F^B4ic#}-! z)uT0JbRU^z3l-wuy1_qk@Bpn^9lO%9(a#jfixw2DIv2Bh`C;~--g;uhj0IQU) zJ!>K95rsX?=*CS(mFIsoX)j^D@6&>zlR+hxlNWsT;SrPzV@fYqE3`)E4ykqYCR`Zl z-NO3n1e(%#k%kDNqK^rP(l0lv5arQ2?~`Ks_}Af5_q=Y$|EHMKV?P0+ z5C(bVYOB%_(0wZ8Y+ZZ^u!`!pVqwm(RJoXqdlaZ>`0f5*eOYV-bh_&3X&L&6)W2t+ zx{)~xc&FJ39Hu*HH1Ya_v{V|TIuO<*h-I8LuLG>^jqQoY8W{!K6o8Mg5edwcLZjO`%f7potQcyeJ!?T7KG(2KX8 z|FIwmQXLGd$_et2$vT*Cvs8-j{Ln%3#uu4#(0K6-@!I0AvtHWa4z=eqQvytom(dTgU--tRDRFn&;DAKdhLstS2fR>@pY>=^Cms z%4h#?nZuTN)2`4N?&vuNBfA`#+-<4&F0cq5QV@T{1m2gh&V7M5D*nHZZCOZ9L`T^8 zCor+RvlaCwLLOnIq)18eDc)24P73j*tF`Fzwd;RwZ3{s@=^qq1od-C+oKT?DCFSnC zO!FzvOWnp%xenL-SGr8v|Ly3e-M9UO%&NpFO zY?n=m64u$s%W}K_1?lKg$dTt*4Q#yF@;2TG<*eADiS%Xp97Rtra>N+j^z1LIUqS32 zRGM?XxiU3XXWIJF2Kr^&2y6Y_52e+ni4u%g(mP>4>13IS7tf61}e9UA0+ ms`oi(arbXn9pu=*$YQ(C44D1(e0~>&G1Q;vDAz06LjMn|PQ`lw literal 0 HcmV?d00001 From 4085d34281b98b124e05e11ae582b93370074c5b Mon Sep 17 00:00:00 2001 From: Nicholas Litwin Date: Tue, 12 Apr 2016 09:46:52 -0700 Subject: [PATCH 51/54] Fix typo --- app/services/bannerDataService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/bannerDataService.js b/app/services/bannerDataService.js index 5e5e90be6..3d01ef3f1 100644 --- a/app/services/bannerDataService.js +++ b/app/services/bannerDataService.js @@ -37,7 +37,7 @@ import angular from 'angular' }] }, 'ttl': { - title: 'Episode #3 | Featuring Jesse D’Amato Ford', + title: 'Episode #3 | Featuring Jessie D’Amato Ford', img: require('../../assets/images/team-live-logo.png'), description: 'APR 15 / 10:30am EST / Live on #GoogleHangoutOnAir', ctas: [{ From 92070184138bc089eb8d9304a7fd8896db2592c7 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Tue, 12 Apr 2016 11:25:24 -0700 Subject: [PATCH 52/54] Remove Chrome=1, which is obsolete --- app/index.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/index.jade b/app/index.jade index 6d23fbbce..bb39b0aaa 100644 --- a/app/index.jade +++ b/app/index.jade @@ -4,7 +4,7 @@ html base(href="/") meta(http-equiv="Content-type" content="text/html; charset=utf-8") - meta(http-equiv="X-UA-Compatible", content="IE=edge, chrome=1") + meta(http-equiv="X-UA-Compatible", content="IE=edge") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no") meta(name="fragment", content="!") script. From b985fc56cebd4628d2f490d184778df78bbc4dbc Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Tue, 12 Apr 2016 13:02:00 -0700 Subject: [PATCH 53/54] Update to remove --- app/account/account.module.js | 6 --- app/account/account.routes.js | 4 +- app/account/login/login.controller.js | 48 +++++++++---------- app/account/logout/logout.controller.js | 10 ++-- app/account/register/register.controller.js | 17 ++----- app/blocks/logger/logger.js | 15 ++++-- .../account/validate-register.directive.js | 12 ++--- .../external-account.directive.js | 35 +++++++++----- .../external-link-deletion.controller.js | 15 +++--- .../external-links-data.directive.js | 7 ++- .../external-web-links.directive.js | 15 +++--- .../page-state-header.directive.js | 4 +- .../responsive-carousel.directive.js | 4 +- .../tc-paginator/tc-paginator.directive.js | 4 +- .../tc-section/tc-section.directive.js | 4 +- app/directives/tc-tabs/tc-tabs.directive.js | 3 +- app/directives/tcui-components.module.js | 6 --- app/layout/header/header.controller.js | 8 ++-- app/my-challenges/my-challenges.controller.js | 7 ++- .../community-updates.controller.js | 4 +- .../header-dashboard.controller.js | 4 +- .../my-challenges/my-challenges.controller.js | 4 +- app/my-dashboard/my-dashboard.controller.js | 4 +- .../programs/programs.controller.js | 3 +- app/my-dashboard/srms/srms.controller.js | 4 +- .../subtrack-stats.controller.js | 4 +- app/my-srms/my-srms.controller.js | 5 +- .../edit-review/edit-review.controller.js | 4 +- .../review-status/review-status.controller.js | 4 +- app/profile/about/about.controller.js | 5 +- app/profile/profile.controller.js | 8 ++-- app/profile/subtrack/subtrack.controller.js | 4 +- app/services/api.service.js | 4 +- app/services/authtoken.service.js | 6 +-- app/services/challenge.service.js | 4 +- app/services/externalAccounts.service.js | 15 +++--- app/services/externalLinks.service.js | 6 +-- app/services/image.service.js | 8 ++-- app/services/jwtInterceptor.service.js | 23 +++++---- app/services/services.module.js | 8 +--- app/services/submissions.service.js | 10 ++-- app/services/tcAuth.service.js | 17 ++++--- .../account-info/account-info.controller.js | 8 ++-- .../edit-profile/edit-profile.controller.js | 9 ++-- app/skill-picker/skill-picker.controller.js | 8 ++-- app/submissions/submissions.routes.js | 4 +- .../submit-design-files.controller.js | 13 +++-- .../submit-develop-files.controller.js | 15 +++--- app/topcoder.module.js | 6 +-- 49 files changed, 208 insertions(+), 237 deletions(-) diff --git a/app/account/account.module.js b/app/account/account.module.js index c45ce1ea5..5f75f472c 100644 --- a/app/account/account.module.js +++ b/app/account/account.module.js @@ -12,10 +12,4 @@ import angular from 'angular' ] angular.module('tc.account', dependencies) - .config(['$provide',function ($provide) { - $provide.decorator('$log', ['$delegate', 'LogEnhancer', function ($delegate, LogEnhancer) { - LogEnhancer.enhanceLogger($delegate) - return $delegate - }]) - }]) })() diff --git a/app/account/account.routes.js b/app/account/account.routes.js index f9f650f4b..ea42cce75 100644 --- a/app/account/account.routes.js +++ b/app/account/account.routes.js @@ -15,11 +15,11 @@ import angular from 'angular' data: { authRequired: false }, - onEnter: ['$state', '$stateParams', 'TcAuthService', '$log', function($state, $stateParams, TcAuthService, $log) { + onEnter: ['$state', '$stateParams', 'TcAuthService', 'logger', function($state, $stateParams, TcAuthService, logger) { if (TcAuthService.isAuthenticated()) { // redirect to next if exists else dashboard if ($stateParams.next) { - $log.debug('Redirecting: ' + $stateParams.next) + logger.debug('Redirecting: ' + $stateParams.next) window.location.href = decodeURIComponent($stateParams.next) } else { $state.go('dashboard') diff --git a/app/account/login/login.controller.js b/app/account/login/login.controller.js index c7ee35c1d..6d0c6bf5e 100644 --- a/app/account/login/login.controller.js +++ b/app/account/login/login.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.account').controller('LoginController', LoginController) - LoginController.$inject = ['$log', 'logger', '$state', '$stateParams', '$location', '$scope', 'TcAuthService', 'UserService', 'Helpers', 'CONSTANTS'] + LoginController.$inject = ['logger', '$state', '$stateParams', '$location', '$scope', 'TcAuthService', 'UserService', 'Helpers', 'CONSTANTS'] - function LoginController($log, logger, $state, $stateParams, $location, $scope, TcAuthService, UserService, Helpers, CONSTANTS) { + function LoginController(logger, $state, $stateParams, $location, $scope, TcAuthService, UserService, Helpers, CONSTANTS) { var vm = this vm.$stateParams = $stateParams vm.passwordReset = false @@ -75,28 +75,28 @@ import angular from 'angular' } function _doLogin(usernameOrEmail, password) { - return TcAuthService.login(usernameOrEmail, password).then(function(data) { - // success - $log.debug('logged in') + return TcAuthService.login(usernameOrEmail, password) + .then(function(data) { + // setup login event for analytics tracking + Helpers.setupLoginEventMetrics(usernameOrEmail) + return Helpers.redirectPostLogin($stateParams.next) - // setup login event for analytics tracking - Helpers.setupLoginEventMetrics(usernameOrEmail) - return Helpers.redirectPostLogin($stateParams.next) - - }).catch(function(err) { - $log.warn(err) - switch (err.status) { - case 'ACCOUNT_INACTIVE': - $state.go('registeredSuccessfully') - // user should already be redirected - break - case 'UNKNOWN_ERROR': - default: - vm.loginErrors.WRONG_PASSWORD = true - vm.password = '' - logger.error('Error logging in: ', err) - } - }) + }) + .catch(function(err) { + logger.warning(err) + + switch (err.status) { + case 'ACCOUNT_INACTIVE': + $state.go('registeredSuccessfully') + // user should already be redirected + break + case 'UNKNOWN_ERROR': + default: + vm.loginErrors.WRONG_PASSWORD = true + vm.password = '' + logger.error('Error logging in: ', err) + } + }) } function socialLogin(platform) { @@ -111,7 +111,7 @@ import angular from 'angular' TcAuthService.socialLogin(platform, callbackUrl) .then(function() { - $log.debug('logged in') + logger.debug('logged in') return Helpers.redirectPostLogin($stateParams.next) }) .catch(function(err) { diff --git a/app/account/logout/logout.controller.js b/app/account/logout/logout.controller.js index eb73b68a3..4be96b3c9 100644 --- a/app/account/logout/logout.controller.js +++ b/app/account/logout/logout.controller.js @@ -5,15 +5,15 @@ import angular from 'angular' angular.module('tc.account').controller('LogoutController', LogoutController) - LogoutController.$inject = ['$log', 'TcAuthService', '$window', 'CONSTANTS'] + LogoutController.$inject = ['logger', 'TcAuthService', '$window', 'CONSTANTS'] - function LogoutController($log, TcAuthService, $window, CONSTANTS) { - $log = $log.getInstance('LogoutController') + function LogoutController(logger, TcAuthService, $window, CONSTANTS) { TcAuthService.logout() .then(function() { - $log.debug('successfully logged out.') - // redirect to home + logger.debug('Successfully logged out.') + + // Redirect to home $window.location.href = CONSTANTS.MAIN_URL }) } diff --git a/app/account/register/register.controller.js b/app/account/register/register.controller.js index e98d8aeb8..a08b1d86d 100644 --- a/app/account/register/register.controller.js +++ b/app/account/register/register.controller.js @@ -6,11 +6,9 @@ import _ from 'lodash' angular.module('tc.account').controller('RegisterController', RegisterController) - RegisterController.$inject = ['$log', 'logger', 'CONSTANTS', '$state', '$stateParams', 'TcAuthService', 'UserService', 'ISO3166', 'Helpers'] + RegisterController.$inject = ['logger', 'CONSTANTS', '$state', '$stateParams', 'TcAuthService', 'UserService', 'ISO3166', 'Helpers'] - function RegisterController($log, logger, CONSTANTS, $state, $stateParams, TcAuthService, UserService, ISO3166, Helpers) { - $log = $log.getInstance('RegisterController') - $log.debug('-init') + function RegisterController(logger, CONSTANTS, $state, $stateParams, TcAuthService, UserService, ISO3166, Helpers) { var vm = this vm.registering = false // prepares utm params, if available @@ -20,18 +18,10 @@ import _ from 'lodash' campaign : $stateParams && $stateParams.utm_campaign ? $stateParams.utm_campaign : '' } - // Set default for toggle password directive vm.defaultPlaceholder = 'Create Password' vm.busyMessage = CONSTANTS.BUSY_PROGRESS_MESSAGE - // FIXME - This needs to be setup with https - // lookup users country - // Helpers.getCountyObjFromIP() - // .then(function(obj) { - // vm.countryObj = obj - // }) - vm.countries = ISO3166.getAllCountryObjects() vm.updateCountry = function (angucompleteCountryObj) { @@ -85,11 +75,10 @@ import _ from 'lodash' } } - $log.debug('attempting to register user') TcAuthService.register(body) .then(function(data) { vm.registering = false - $log.debug('registered successfully') + logger.debug('Registered successfully') // In the future, go to dashboard $state.go('registeredSuccessfully') diff --git a/app/blocks/logger/logger.js b/app/blocks/logger/logger.js index fc9756f84..4b651a72b 100644 --- a/app/blocks/logger/logger.js +++ b/app/blocks/logger/logger.js @@ -12,10 +12,11 @@ import angular from 'angular' var service = { showToasts: false, - error: error, - info: info, + error : error, + info : info, success: success, warning: warning, + debug : debug, // straight to console bypass toastr log: $log.log @@ -39,15 +40,19 @@ import angular from 'angular' } function info(message, data, title) { - $log.info('Info: ' + message, data) + $log.info('Info: ' + message, data ? data : '') } function success(message, data, title) { - $log.info('Success: ' + message, data) + $log.info('Success: ' + message, data ? data : '') + } + + function debug(message, data, title) { + $log.debug('Debug: ' + message, data ? data : '') } function warning(message, data, title) { - $log.warn('Warning: ' + message, data) + $log.warn('Warning: ' + message, data ? data : '') } } }()) diff --git a/app/directives/account/validate-register.directive.js b/app/directives/account/validate-register.directive.js index 5c765e014..d20920abe 100644 --- a/app/directives/account/validate-register.directive.js +++ b/app/directives/account/validate-register.directive.js @@ -52,14 +52,14 @@ import angular from 'angular' } } - usernameIsFree.$inject = ['UserService', '$log', '$q'] + usernameIsFree.$inject = ['UserService', 'logger', '$q'] - function usernameIsFree(UserService, $log, $q) { + function usernameIsFree(UserService, logger, $q) { return { require: 'ngModel', link: function(scope, element, attrs, ctrl) { ctrl.$asyncValidators.usernameIsFree = function(modelValue, viewValue) { - $log.info('Validating username: ' + modelValue) + logger.info('Validating username: ' + modelValue) var defer = $q.defer() @@ -97,14 +97,14 @@ import angular from 'angular' } } - emailIsAvailable.$inject = ['UserService', '$log', '$q'] + emailIsAvailable.$inject = ['UserService', 'logger', '$q'] - function emailIsAvailable(UserService, $log, $q) { + function emailIsAvailable(UserService, logger, $q) { return { require: 'ngModel', link: function(scope, element, attrs, ctrl) { ctrl.$asyncValidators.emailIsAvailable = function(modelValue, viewValue) { - $log.info('Validating email: ' + modelValue) + logger.info('Validating email: ' + modelValue) var defer = $q.defer() diff --git a/app/directives/external-account/external-account.directive.js b/app/directives/external-account/external-account.directive.js index c54c0e7b4..ae9c3a35e 100644 --- a/app/directives/external-account/external-account.directive.js +++ b/app/directives/external-account/external-account.directive.js @@ -24,20 +24,21 @@ import _ from 'lodash' linkedAccounts: '=', readOnly: '=' }, - controller: ['$log', 'logger', '$scope', 'ExternalAccountService', 'toaster', - function($log, logger, $scope, ExternalAccountService, toaster) { - - $log = $log.getInstance('ExtAccountDirectiveCtrl') - + controller: ['logger', '$scope', 'ExternalAccountService', 'toaster', + function(logger, $scope, ExternalAccountService, toaster) { var _accountList = _.clone(_supportedAccounts, true) + _.remove(_accountList, function(al) { return al.order < 0}) + $scope.$watchCollection('linkedAccounts', function(newValue, oldValue) { if (newValue) { angular.forEach(_accountList, function(account) { var _linkedAccount = _.find(newValue, function(p) { return p.provider === account.provider }) + var accountStatus = _.get(_linkedAccount, 'data.status', null) + if (!_linkedAccount) { account.status = 'unlinked' } else if(accountStatus && accountStatus.toLowerCase() === 'pending') { @@ -46,9 +47,11 @@ import _ from 'lodash' account.status = 'linked' } }) + $scope.accountList = _accountList + } else { - // reset the status for all accounts + // Reset the status for all accounts angular.forEach(_accountList, function(account) { delete account.status }) @@ -59,11 +62,15 @@ import _ from 'lodash' provider = _.find(_supportedAccounts, function(s) { return s.provider === provider }) + if (status === 'linked') { - $log.debug(String.supplant('UnLinking to ' + provider.displayName)) + logger.debug(String.supplant('UnLinking to ' + provider.displayName)) + _unlink(provider) + } else if (status === 'unlinked') { - $log.debug(String.supplant('Linking to ' + provider.displayName)) + logger.debug(String.supplant('Linking to ' + provider.displayName)) + _link(provider) } } @@ -71,8 +78,10 @@ import _ from 'lodash' function _link(provider) { ExternalAccountService.linkExternalAccount(provider.provider, null) .then(function(resp) { - $log.debug('Social account linked: ' + JSON.stringify(resp)) + logger.debug('Social account linked: ' + JSON.stringify(resp)) + $scope.linkedAccounts.push(resp.linkedAccount) + toaster.pop('success', 'Success', String.supplant( 'Your {provider} account has been linked. Data from your linked account will be visible on your profile shortly.', @@ -82,7 +91,7 @@ import _ from 'lodash' }) .catch(function(err) { if (err.status === 'SOCIAL_PROFILE_ALREADY_EXISTS') { - $log.info('Social profile already linked to another account') + logger.info('Social profile already linked to another account') toaster.pop('error', 'Whoops!', String.supplant( @@ -102,10 +111,12 @@ import _ from 'lodash' function _unlink(provider) { return ExternalAccountService.unlinkExternalAccount(provider.provider) .then(function(resp) { - $log.debug('Social account unlinked: ' + JSON.stringify(resp)) + logger.debug('Social account unlinked: ' + JSON.stringify(resp)) + var toRemove = _.findIndex($scope.linkedAccounts, function(la) { return la.provider === provider.provider }) + if (toRemove > -1) { // remove from the linkedAccounts array $scope.linkedAccounts.splice(toRemove, 1) @@ -121,7 +132,7 @@ import _ from 'lodash' var msg = err.msg if (err.status === 'SOCIAL_PROFILE_NOT_EXIST') { - $log.info('Social profile not linked to account') + logger.info('Social profile not linked to account') msg = '{provider} account is not linked to your account. If you think this is an error please contact support@topcoder.com.' } else { diff --git a/app/directives/external-account/external-link-deletion.controller.js b/app/directives/external-account/external-link-deletion.controller.js index f5efcc99b..5e2b1fbeb 100644 --- a/app/directives/external-account/external-link-deletion.controller.js +++ b/app/directives/external-account/external-link-deletion.controller.js @@ -5,29 +5,28 @@ import _ from 'lodash' angular.module('tcUIComponents') .controller('ExternalLinkDeletionController', ExternalLinkDeletionController) - ExternalLinkDeletionController.$inject = ['ExternalWebLinksService', '$q', '$log', 'logger', 'toaster', 'ngDialog', 'userHandle', 'account', 'linkedAccountsData'] + ExternalLinkDeletionController.$inject = ['ExternalWebLinksService', '$q', 'logger', 'toaster', 'ngDialog', 'userHandle', 'account', 'linkedAccountsData'] - function ExternalLinkDeletionController(ExternalWebLinksService, $q, $log, logger, toaster, ngDialog, userHandle, account, linkedAccountsData) { + function ExternalLinkDeletionController(ExternalWebLinksService, $q, logger, toaster, ngDialog, userHandle, account, linkedAccountsData) { var vm = this vm.account = account - $log = $log.getInstance('ExternalLinkDeletionController') vm.deleteAccount = function() { - $log.debug('Deleting Account...') + logger.debug('Deleting Account...') if (account && account.deletingAccount) { - $log.debug('Another deletion is already in progress.') + logger.debug('Another deletion is already in progress.') return } if (account && account.provider === 'weblink') { account.deletingAccount = true - $log.debug('Deleting weblink...') + logger.debug('Deleting weblink...') return ExternalWebLinksService.removeLink(userHandle, account.key) .then(function(data) { account.deletingAccount = false - $log.debug('Web link removed: ' + JSON.stringify(data)) + logger.debug('Web link removed: ' + JSON.stringify(data)) var toRemove = _.findIndex(linkedAccountsData, function(la) { return la.provider === 'weblink' && la.key === account.key }) @@ -40,7 +39,7 @@ import _ from 'lodash' .catch(function(err) { var msg = err.msg if (err.status === 'WEBLINK_NOT_EXIST') { - $log.info('Weblink does not exist') + logger.info('Weblink does not exist') msg = 'Weblink is not linked to your account. If you think this is an error please contact support@topcoder.com.' } else { diff --git a/app/directives/external-account/external-links-data.directive.js b/app/directives/external-account/external-links-data.directive.js index a2840f86f..96fe1d3b7 100644 --- a/app/directives/external-account/external-links-data.directive.js +++ b/app/directives/external-account/external-links-data.directive.js @@ -16,9 +16,8 @@ import angular from 'angular' editable: '=', userHandle: '@' }, - controller: ['$log', '$scope', '$window', '$filter', 'ExternalWebLinksService', 'toaster', 'ngDialog', - function($log, $scope, $window, $filter, ExternalWebLinksService, toaster, ngDialog) { - $log = $log.getInstance('ExternalLinksDataCtrl') + controller: ['logger', '$scope', '$window', '$filter', 'ExternalWebLinksService', 'toaster', 'ngDialog', + function(logger, $scope, $window, $filter, ExternalWebLinksService, toaster, ngDialog) { $scope.deletionDialog = null $scope.openLink = function(account) { @@ -63,7 +62,7 @@ import angular from 'angular' } } }).closePromise.then(function (data) { - $log.debug('Closing deletion confirmation dialog.') + logger.debug('Closing deletion confirmation dialog.') }) } } diff --git a/app/directives/external-account/external-web-links.directive.js b/app/directives/external-account/external-web-links.directive.js index 82c2aacfc..9f5f5e5d4 100644 --- a/app/directives/external-account/external-web-links.directive.js +++ b/app/directives/external-account/external-web-links.directive.js @@ -7,9 +7,9 @@ import angular from 'angular' // @example angular.module('tcUIComponents').directive('externalWebLink', ExternalWebLink) - ExternalWebLink.$inject = ['$log', 'logger', 'ExternalWebLinksService', 'toaster'] + ExternalWebLink.$inject = ['logger', 'ExternalWebLinksService', 'toaster'] - function ExternalWebLink($log, logger, ExternalWebLinksService, toaster) { + function ExternalWebLink(logger, ExternalWebLinksService, toaster) { var directive = { restrict: 'E', template: require('./external-web-link')(), @@ -17,25 +17,24 @@ import angular from 'angular' linkedAccounts: '=', userHandle: '@' }, - controller: ['$scope', '$log', ExternalWebLinkCtrl] + controller: ['$scope', 'logger', ExternalWebLinkCtrl] } - function ExternalWebLinkCtrl($scope, $log) { - $log = $log.getInstance('ExternalWebLinkCtrl') + function ExternalWebLinkCtrl($scope, logger) { $scope.addingWebLink = false $scope.errorMessage = null $scope.urlRegEx = /^(http(s?):\/\/)?(www\.)?[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,15})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/ $scope.addWebLink = function() { - $log.debug('URL: ' + $scope.url) + logger.debug('URL: ' + $scope.url) $scope.addingWebLink = true $scope.errorMessage = null ExternalWebLinksService.addLink($scope.userHandle, $scope.url) .then(function(data) { $scope.addingWebLink = false - $log.debug('Web link added: ' + JSON.stringify(data)) + logger.debug('Web link added: ' + JSON.stringify(data)) data.data.provider = data.provider $scope.linkedAccounts.push(data.data) // reset the form when it is successfully added @@ -47,7 +46,7 @@ import angular from 'angular' $scope.addingWebLink = false if (err.status === 'WEBLINK_ALREADY_EXISTS') { - $log.info('Social profile already linked to another account') + logger.info('Social profile already linked to another account') toaster.pop('error', 'Whoops!', 'This weblink is already added to your account. \ diff --git a/app/directives/page-state-header/page-state-header.directive.js b/app/directives/page-state-header/page-state-header.directive.js index 89e190cc7..23030ba96 100644 --- a/app/directives/page-state-header/page-state-header.directive.js +++ b/app/directives/page-state-header/page-state-header.directive.js @@ -16,12 +16,12 @@ import _ from 'lodash' hideMoney: '=', defaultState: '@' }, - controller: ['CONSTANTS', '$rootScope', '$scope', 'ProfileService', '$log', 'logger', '$state', pageStateHeader], + controller: ['CONSTANTS', '$rootScope', '$scope', 'ProfileService', 'logger', '$state', pageStateHeader], controllerAs: 'vm' } }) - function pageStateHeader(CONSTANTS, $rootScope, $scope, ProfileService, $log, logger, $state) { + function pageStateHeader(CONSTANTS, $rootScope, $scope, ProfileService, logger, $state) { var vm = this vm.backHandler = backHandler diff --git a/app/directives/responsive-carousel/responsive-carousel.directive.js b/app/directives/responsive-carousel/responsive-carousel.directive.js index cf226ed78..32869d152 100644 --- a/app/directives/responsive-carousel/responsive-carousel.directive.js +++ b/app/directives/responsive-carousel/responsive-carousel.directive.js @@ -13,8 +13,8 @@ import angular from 'angular' data: '=', handle: '@' }, - controller: ['$log', '$scope', '$element', '$window', - function($log, $scope, $element, $window) { + controller: ['$scope', '$element', '$window', + function($scope, $element, $window) { $scope.slideCounts = {} activate() diff --git a/app/directives/tc-paginator/tc-paginator.directive.js b/app/directives/tc-paginator/tc-paginator.directive.js index c46c4c6dd..822040974 100644 --- a/app/directives/tc-paginator/tc-paginator.directive.js +++ b/app/directives/tc-paginator/tc-paginator.directive.js @@ -13,7 +13,7 @@ import angular from 'angular' pageParams: '=', data: '=' }, - controller: ['$log', '$scope', '$element', function($log, $scope, $element) { + controller: ['logger', '$scope', '$element', function(logger, $scope, $element) { $element.addClass('tc-paginator') var vm = this @@ -35,7 +35,7 @@ import angular from 'angular' function activate() { // attaches watcher to watch data changes $scope.$watch('data', function(updatedValue) { - $log.debug('data updated for paginator ', updatedValue) + logger.debug('data updated for paginator ', updatedValue) init(updatedValue) }) } diff --git a/app/directives/tc-section/tc-section.directive.js b/app/directives/tc-section/tc-section.directive.js index bb9633053..ce64027ae 100644 --- a/app/directives/tc-section/tc-section.directive.js +++ b/app/directives/tc-section/tc-section.directive.js @@ -12,8 +12,8 @@ import angular from 'angular' scope: { state: '=state' }, - controller: ['$log', '$scope', '$element', function($log, $scope, $element) { - $log.debug('state ', $scope.state) + controller: ['logger', '$scope', '$element', function(logger, $scope, $element) { + logger.debug('state ', $scope.state) $element.addClass('tc-section') $scope.errMsg = 'Whoops! Something went wrong. Please try again later.' }] diff --git a/app/directives/tc-tabs/tc-tabs.directive.js b/app/directives/tc-tabs/tc-tabs.directive.js index 7007027e0..f788de803 100644 --- a/app/directives/tc-tabs/tc-tabs.directive.js +++ b/app/directives/tc-tabs/tc-tabs.directive.js @@ -11,8 +11,7 @@ import angular from 'angular' bindToController: true, template: require('./tc-tabs')(), scope: {}, - controller: ['$log', '$location', '$scope', function($log, $location, $scope, $element) { - $log = $log.getInstance('TcTabSetController') + controller: ['$location', '$scope', function($location, $scope, $element) { this.tabs = [] this.addTab = function addTab(tab) { diff --git a/app/directives/tcui-components.module.js b/app/directives/tcui-components.module.js index 6330f4da6..30abf2e5a 100644 --- a/app/directives/tcui-components.module.js +++ b/app/directives/tcui-components.module.js @@ -4,10 +4,4 @@ import angular from 'angular' 'use strict' angular.module('tcUIComponents', ['dcbImgFallback', 'blocks.logger', 'toaster']) - .config(['$provide',function ($provide) { - $provide.decorator('$log', ['$delegate', 'LogEnhancer', function ($delegate, LogEnhancer) { - LogEnhancer.enhanceLogger($delegate) - return $delegate - }]) - }]) })() diff --git a/app/layout/header/header.controller.js b/app/layout/header/header.controller.js index 38191627b..e8ae71961 100644 --- a/app/layout/header/header.controller.js +++ b/app/layout/header/header.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.layout').controller('HeaderController', HeaderController) - HeaderController.$inject = ['$state', 'TcAuthService', 'CONSTANTS', '$log', 'logger', '$rootScope', 'UserService', 'ProfileService', 'NavService'] + HeaderController.$inject = ['$state', 'TcAuthService', 'CONSTANTS', 'logger', '$rootScope', 'UserService', 'ProfileService', 'NavService'] - function HeaderController($state, TcAuthService, CONSTANTS, $log, logger, $rootScope, UserService, ProfileService, NavService) { + function HeaderController($state, TcAuthService, CONSTANTS, logger, $rootScope, UserService, ProfileService, NavService) { var vm = this vm.constants = CONSTANTS @@ -47,8 +47,10 @@ import _ from 'lodash' } function initHeaderProps(event) { - $log.debug(event + ' triggered header update.') + logger.debug(event + ' triggered header update.') + vm.isAuth = TcAuthService.isAuthenticated() + if (vm.isAuth) { vm.userHandle = UserService.getUserIdentity().handle diff --git a/app/my-challenges/my-challenges.controller.js b/app/my-challenges/my-challenges.controller.js index fb6e1097c..b30fe3731 100644 --- a/app/my-challenges/my-challenges.controller.js +++ b/app/my-challenges/my-challenges.controller.js @@ -6,10 +6,9 @@ import _ from 'lodash' angular.module('tc.myChallenges').controller('MyChallengesController', MyChallengesController) - MyChallengesController.$inject = ['ChallengeService', 'UserService', '$q', '$log', 'logger', '$state', 'CONSTANTS', 'Helpers', '$scope', 'userIdentity', '$stateParams'] + MyChallengesController.$inject = ['ChallengeService', 'UserService', '$q', 'logger', '$state', 'CONSTANTS', 'Helpers', '$scope', 'userIdentity', '$stateParams'] - function MyChallengesController(ChallengeService, UserService, $q, $log, logger, $state, CONSTANTS, Helpers, $scope, userIdentity, $stateParams) { - $log = $log.getInstance('MyChallengesController') + function MyChallengesController(ChallengeService, UserService, $q, logger, $state, CONSTANTS, Helpers, $scope, userIdentity, $stateParams) { var vm = this vm.domain = CONSTANTS.domain vm.neverParticipated = false @@ -28,7 +27,7 @@ import _ from 'lodash' } vm.statusFilter = _.get($stateParams, 'status','active') if (vm.statusFilter !== 'active' && vm.statusFilter !== 'completed') { - $log.info('invalid filter, defaulting to active') + logger.info('invalid filter, defaulting to active') vm.statusFilter = 'active' } vm.orderBy diff --git a/app/my-dashboard/community-updates/community-updates.controller.js b/app/my-dashboard/community-updates/community-updates.controller.js index 21fb45643..18880209f 100644 --- a/app/my-dashboard/community-updates/community-updates.controller.js +++ b/app/my-dashboard/community-updates/community-updates.controller.js @@ -5,10 +5,10 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('CommunityUpdatesController', CommunityUpdatesController) - CommunityUpdatesController.$inject = ['BlogService', '$log', 'logger'] + CommunityUpdatesController.$inject = ['BlogService', 'logger'] // Access and parses the blog RSS feed - function CommunityUpdatesController(BlogService, $log, logger) { + function CommunityUpdatesController(BlogService, logger) { var vm = this vm.loading = true diff --git a/app/my-dashboard/header-dashboard/header-dashboard.controller.js b/app/my-dashboard/header-dashboard/header-dashboard.controller.js index eff686328..168767a99 100644 --- a/app/my-dashboard/header-dashboard/header-dashboard.controller.js +++ b/app/my-dashboard/header-dashboard/header-dashboard.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('HeaderDashboardController', HeaderDashboardController) - HeaderDashboardController.$inject = ['$stateParams', 'profile', '$log'] + HeaderDashboardController.$inject = ['$stateParams', 'profile'] - function HeaderDashboardController($stateParams, profile, $log) { + function HeaderDashboardController($stateParams, profile) { var vm = this vm.profile = profile diff --git a/app/my-dashboard/my-challenges/my-challenges.controller.js b/app/my-dashboard/my-challenges/my-challenges.controller.js index fd4f8ab4d..f848083d3 100644 --- a/app/my-dashboard/my-challenges/my-challenges.controller.js +++ b/app/my-dashboard/my-challenges/my-challenges.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MyChallengesWidgetController', MyChallengesWidgetController) - MyChallengesWidgetController.$inject = ['ChallengeService', 'UserService', '$log', 'logger', 'CONSTANTS', 'userIdentity', '$q'] + MyChallengesWidgetController.$inject = ['ChallengeService', 'UserService', 'logger', 'CONSTANTS', 'userIdentity', '$q'] - function MyChallengesWidgetController(ChallengeService, UserService, $log, logger, CONSTANTS, userIdentity, $q) { + function MyChallengesWidgetController(ChallengeService, UserService, logger, CONSTANTS, userIdentity, $q) { var vm = this vm.domain = CONSTANTS.domain vm.neverParticipated = false diff --git a/app/my-dashboard/my-dashboard.controller.js b/app/my-dashboard/my-dashboard.controller.js index 8754b4e72..0e0fcfc1b 100644 --- a/app/my-dashboard/my-dashboard.controller.js +++ b/app/my-dashboard/my-dashboard.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MyDashboardController', MyDashboardController) - MyDashboardController.$inject = ['userIdentity', 'ProfileService', '$log', 'logger'] + MyDashboardController.$inject = ['userIdentity', 'ProfileService', 'logger'] - function MyDashboardController(userIdentity, ProfileService, $log, logger) { + function MyDashboardController(userIdentity, ProfileService, logger) { var vm = this activate() diff --git a/app/my-dashboard/programs/programs.controller.js b/app/my-dashboard/programs/programs.controller.js index cb1148747..723b62ed9 100644 --- a/app/my-dashboard/programs/programs.controller.js +++ b/app/my-dashboard/programs/programs.controller.js @@ -9,14 +9,13 @@ import angular from 'angular' 'UserService', 'MemberCertService', 'CONSTANTS', - '$log', 'logger', 'ChallengeService', '$q', '$rootScope' ] - function ProgramsController (UserService, MemberCertService, CONSTANTS, $log, logger, ChallengeService, $q, $rootScope) { + function ProgramsController (UserService, MemberCertService, CONSTANTS, logger, ChallengeService, $q, $rootScope) { var vm = this vm.domain = CONSTANTS.domain vm.registered = false diff --git a/app/my-dashboard/srms/srms.controller.js b/app/my-dashboard/srms/srms.controller.js index 7ec513744..2a40968b4 100644 --- a/app/my-dashboard/srms/srms.controller.js +++ b/app/my-dashboard/srms/srms.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('SRMWidgetController', SRMWidgetController) - SRMWidgetController.$inject = ['CONSTANTS', 'UserService','SRMService', '$q', '$log', 'logger'] + SRMWidgetController.$inject = ['CONSTANTS', 'UserService','SRMService', '$q', 'logger'] - function SRMWidgetController(CONSTANTS, UserService, SRMService, $q, $log, logger) { + function SRMWidgetController(CONSTANTS, UserService, SRMService, $q, logger) { var vm = this vm.srms = [] vm.state = CONSTANTS.STATE_LOADING diff --git a/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js b/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js index 46f939848..ddd2829bb 100644 --- a/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js +++ b/app/my-dashboard/subtrack-stats/subtrack-stats.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.myDashboard').controller('SubtrackStatsController', SubtrackStatsController) - SubtrackStatsController.$inject = ['$filter', 'ProfileService', 'UserStatsService', 'userIdentity', '$log', 'logger'] + SubtrackStatsController.$inject = ['$filter', 'ProfileService', 'UserStatsService', 'userIdentity', 'logger'] - function SubtrackStatsController($filter, ProfileService, UserStatsService, userIdentity, $log, logger) { + function SubtrackStatsController($filter, ProfileService, UserStatsService, userIdentity, logger) { var vm = this vm.loading = true diff --git a/app/my-srms/my-srms.controller.js b/app/my-srms/my-srms.controller.js index 9702c3dc8..a9702784e 100644 --- a/app/my-srms/my-srms.controller.js +++ b/app/my-srms/my-srms.controller.js @@ -6,10 +6,9 @@ import _ from 'lodash' angular.module('tc.myDashboard').controller('MySRMsController', MySRMsController) - MySRMsController.$inject = ['UserService','SRMService', '$log', 'logger', '$state', '$stateParams', 'CONSTANTS', '$scope'] + MySRMsController.$inject = ['UserService','SRMService', 'logger', '$state', '$stateParams', 'CONSTANTS', '$scope'] - function MySRMsController(UserService, SRMService, $log, logger, $state, $stateParams, CONSTANTS, $scope) { - $log = $log.getInstance('MySRMsController') + function MySRMsController(UserService, SRMService, logger, $state, $stateParams, CONSTANTS, $scope) { var vm = this vm.srms = [] vm.statusFilter = _.get($stateParams, 'status','past') diff --git a/app/peer-review/edit-review/edit-review.controller.js b/app/peer-review/edit-review/edit-review.controller.js index 7a4f796a1..3358d50a2 100644 --- a/app/peer-review/edit-review/edit-review.controller.js +++ b/app/peer-review/edit-review/edit-review.controller.js @@ -7,9 +7,9 @@ import angular from 'angular' // answers saved but not submitted. angular.module('tc.peer-review').controller('EditReviewController', EditReviewController) - EditReviewController.$inject = ['$state', '$stateParams', 'ReviewService', 'ScorecardService', 'UserService', 'ChallengeService', 'Helpers', '$q', 'CONSTANTS', '$log', 'logger'] + EditReviewController.$inject = ['$state', '$stateParams', 'ReviewService', 'ScorecardService', 'UserService', 'ChallengeService', 'Helpers', '$q', 'CONSTANTS', 'logger'] - function EditReviewController($state, $stateParams, ReviewService, ScorecardService, UserService, ChallengeService, Helpers, $q, CONSTANTS, $log, logger) { + function EditReviewController($state, $stateParams, ReviewService, ScorecardService, UserService, ChallengeService, Helpers, $q, CONSTANTS, logger) { var vm = this vm.domain = CONSTANTS.domain vm.challengeId = $stateParams.challengeId diff --git a/app/peer-review/review-status/review-status.controller.js b/app/peer-review/review-status/review-status.controller.js index 914474174..c480ce39c 100644 --- a/app/peer-review/review-status/review-status.controller.js +++ b/app/peer-review/review-status/review-status.controller.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.peer-review').controller('ReviewStatusController', ReviewStatusController) - ReviewStatusController.$inject = ['$state', '$stateParams', 'ReviewService', 'ChallengeService', 'Helpers', 'CONSTANTS', '$log', 'logger'] + ReviewStatusController.$inject = ['$state', '$stateParams', 'ReviewService', 'ChallengeService', 'Helpers', 'CONSTANTS', 'logger'] - function ReviewStatusController($state, $stateParams, ReviewService, ChallengeService, Helpers, CONSTANTS, $log, logger) { + function ReviewStatusController($state, $stateParams, ReviewService, ChallengeService, Helpers, CONSTANTS, logger) { var vm = this vm.domain = CONSTANTS.domain vm.loaded = false diff --git a/app/profile/about/about.controller.js b/app/profile/about/about.controller.js index df04f344b..0c20d0af0 100644 --- a/app/profile/about/about.controller.js +++ b/app/profile/about/about.controller.js @@ -5,11 +5,10 @@ import angular from 'angular' angular.module('tc.profile').controller('ProfileAboutController', ProfileAboutController) - ProfileAboutController.$inject = ['$log', 'logger', '$scope', '$q', 'ExternalAccountService', 'ExternalWebLinksService', 'UserService', 'CONSTANTS'] + ProfileAboutController.$inject = ['logger', '$scope', '$q', 'ExternalAccountService', 'ExternalWebLinksService', 'UserService', 'CONSTANTS'] - function ProfileAboutController($log, logger, $scope, $q, ExternalAccountService, ExternalWebLinksService, UserService, CONSTANTS) { + function ProfileAboutController(logger, $scope, $q, ExternalAccountService, ExternalWebLinksService, UserService, CONSTANTS) { var vm = this - $log = $log.getInstance('ProfileAboutController') var profileVm = $scope.$parent.profileVm vm.categoryIndex = 0 vm.skillIndex = 0 diff --git a/app/profile/profile.controller.js b/app/profile/profile.controller.js index 39c234554..1ead6b9cc 100644 --- a/app/profile/profile.controller.js +++ b/app/profile/profile.controller.js @@ -6,12 +6,12 @@ import moment from 'moment' angular.module('tc.profile').controller('ProfileCtrl', ProfileCtrl) - ProfileCtrl.$inject = ['CONSTANTS', '$log', 'logger', '$q', + ProfileCtrl.$inject = ['CONSTANTS', 'logger', '$q', 'TcAuthService', 'UserService', 'UserStatsService', 'ProfileService', 'ChallengeService', 'ExternalAccountService', 'userHandle', 'profile', 'ngDialog', '$anchorScroll' ] - function ProfileCtrl(CONSTANTS, $log, logger, $q, TcAuthService, UserService, UserStatsService, ProfileService, ChallengeService, ExternalAccountService, userHandle, profile, ngDialog, $anchorScroll) { + function ProfileCtrl(CONSTANTS, logger, $q, TcAuthService, UserService, UserStatsService, ProfileService, ChallengeService, ExternalAccountService, userHandle, profile, ngDialog, $anchorScroll) { var vm = this // set profile to the object that was resolved vm.profile = profile @@ -28,7 +28,7 @@ import moment from 'moment' 'COPILOT': 'copilot' } - $log.debug() + logger.debug() vm.status = { 'badges': CONSTANTS.STATE_LOADING, 'stats': CONSTANTS.STATE_LOADING, @@ -104,7 +104,7 @@ import moment from 'moment' }) function activate() { - $log.debug('Calling ProfileController activate()') + logger.debug('Calling ProfileController activate()') // show edit profile link if user is authenticated and is viewing their own profile vm.showEditProfileLink = TcAuthService.isAuthenticated() && UserService.getUserIdentity().handle.toLowerCase() === vm.userHandle.toLowerCase() vm.isUser = vm.showEditProfileLink diff --git a/app/profile/subtrack/subtrack.controller.js b/app/profile/subtrack/subtrack.controller.js index 282d3cb52..8e4b5b131 100644 --- a/app/profile/subtrack/subtrack.controller.js +++ b/app/profile/subtrack/subtrack.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.profile').controller('ProfileSubtrackController', ProfileSubtrackController) - ProfileSubtrackController.$inject = ['$scope', 'ProfileService', '$q', '$stateParams', 'ChallengeService', 'SRMService', 'CONSTANTS', '$state', '$window', 'ngDialog', 'UserStatsService', '$log', 'logger'] + ProfileSubtrackController.$inject = ['$scope', 'ProfileService', '$q', '$stateParams', 'ChallengeService', 'SRMService', 'CONSTANTS', '$state', '$window', 'ngDialog', 'UserStatsService', 'logger'] - function ProfileSubtrackController($scope, ProfileService, $q, $stateParams, ChallengeService, SRMService, CONSTANTS, $state, $window, ngDialog, UserStatsService, $log, logger) { + function ProfileSubtrackController($scope, ProfileService, $q, $stateParams, ChallengeService, SRMService, CONSTANTS, $state, $window, ngDialog, UserStatsService, logger) { var vm = this vm.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX vm.graphState = { show: 'history' } diff --git a/app/services/api.service.js b/app/services/api.service.js index 062a07de6..8881f4d4d 100644 --- a/app/services/api.service.js +++ b/app/services/api.service.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.services').factory('ApiService', ApiService) - ApiService.$inject = ['$http', '$log', 'logger', 'AuthTokenService', 'Restangular', 'CONSTANTS'] + ApiService.$inject = ['$http', 'logger', 'AuthTokenService', 'Restangular', 'CONSTANTS'] - function ApiService($http, $log, logger, AuthTokenService, Restangular, CONSTANTS) { + function ApiService($http, logger, AuthTokenService, Restangular, CONSTANTS) { var service = { requestHandler: requestHandler, restangularV2: _getRestangularV2(), diff --git a/app/services/authtoken.service.js b/app/services/authtoken.service.js index 50b940e5b..8b016e4b3 100644 --- a/app/services/authtoken.service.js +++ b/app/services/authtoken.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('AuthTokenService', AuthTokenService) - AuthTokenService.$inject = ['CONSTANTS', '$cookies', '$location', 'store', '$http', '$log', 'logger', 'jwtHelper', '$q'] + AuthTokenService.$inject = ['CONSTANTS', '$cookies', '$location', 'store', '$http', 'logger', 'jwtHelper', '$q'] - function AuthTokenService(CONSTANTS, $cookies, $location, store, $http, $log, logger, jwtHelper, $q) { + function AuthTokenService(CONSTANTS, $cookies, $location, store, $http, logger, jwtHelper, $q) { var v2TokenKey = 'tcjwt' var v2TCSSOTokenKey = 'tcsso' var v3TokenKey = 'appiriojwt' @@ -126,7 +126,7 @@ import angular from 'angular' } return $http(req).then( function(resp) { - $log.debug(resp) + logger.debug(resp) }, function(err) { logger.error('Could not get token from Auth0 code', err) diff --git a/app/services/challenge.service.js b/app/services/challenge.service.js index 773d2e618..c71b4978e 100644 --- a/app/services/challenge.service.js +++ b/app/services/challenge.service.js @@ -7,9 +7,9 @@ import moment from 'moment' angular.module('tc.services').factory('ChallengeService', ChallengeService) - ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger'] + ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q', 'logger'] - function ChallengeService(CONSTANTS, ApiService, $q, $log, logger) { + function ChallengeService(CONSTANTS, ApiService, $q, logger) { var api = ApiService.restangularV3 var apiV2 = ApiService.restangularV2 var service = { diff --git a/app/services/externalAccounts.service.js b/app/services/externalAccounts.service.js index 8dbe957cd..9df83d0c5 100644 --- a/app/services/externalAccounts.service.js +++ b/app/services/externalAccounts.service.js @@ -6,11 +6,10 @@ import _ from 'lodash' angular.module('tc.services').factory('ExternalAccountService', ExternalAccountService) - ExternalAccountService.$inject = ['$q', '$log', 'logger', 'CONSTANTS', 'auth', 'ApiService', 'UserService', 'Helpers'] + ExternalAccountService.$inject = ['$q', 'logger', 'CONSTANTS', 'auth', 'ApiService', 'UserService', 'Helpers'] - function ExternalAccountService($q, $log, logger, CONSTANTS, auth, ApiService, UserService, Helpers) { + function ExternalAccountService($q, logger, CONSTANTS, auth, ApiService, UserService, Helpers) { var auth0 = auth - $log = $log.getInstance('ExternalAccountService') var memberApi = ApiService.getApiServiceProvider('MEMBER') var userApi = ApiService.getApiServiceProvider('USER') @@ -56,7 +55,7 @@ import _ from 'lodash' return $q(function($resolve, $reject) { UserService.removeSocialProfile(user.userId, account) .then(function(resp) { - $log.debug('Succesfully unlinked account: ' + JSON.stringify(resp)) + logger.debug('Succesfully unlinked account: ' + JSON.stringify(resp)) $resolve({ status: 'SUCCESS' }) @@ -100,7 +99,7 @@ import _ from 'lodash' _cards.push({provider: provider, data: {handle: link.name, status: 'PENDING'}}) } }) - $log.debug('Processed Accounts Cards: ' + JSON.stringify(_cards)) + logger.debug('Processed Accounts Cards: ' + JSON.stringify(_cards)) return _cards } @@ -139,7 +138,7 @@ import _ from 'lodash' state: callbackUrl }, function(profile, idToken, accessToken, state, refreshToken) { - $log.debug('onSocialLoginSuccess') + logger.debug('onSocialLoginSuccess') var socialData = Helpers.getSocialUserData(profile, accessToken) var user = UserService.getUserIdentity() var postData = { @@ -156,10 +155,10 @@ import _ from 'lodash' if (socialData.accessTokenSecret) { postData.context.accessTokenSecret = socialData.accessTokenSecret } - $log.debug('link API postdata: ' + JSON.stringify(postData)) + logger.debug('link API postdata: ' + JSON.stringify(postData)) userApi.one('users', user.userId).customPOST(postData, 'profiles', {}, {}) .then(function(resp) { - $log.debug('Succesfully linked account: ' + JSON.stringify(resp)) + logger.debug('Succesfully linked account: ' + JSON.stringify(resp)) // construct 'card' object and resolve it var _data = { status: 'SUCCESS', diff --git a/app/services/externalLinks.service.js b/app/services/externalLinks.service.js index a0757b9b9..5d2b67d0f 100644 --- a/app/services/externalLinks.service.js +++ b/app/services/externalLinks.service.js @@ -6,11 +6,9 @@ import _ from 'lodash' angular.module('tc.services').factory('ExternalWebLinksService', ExternalWebLinksService) - ExternalWebLinksService.$inject = ['$log', 'logger', 'CONSTANTS', 'ApiService', '$q'] - - function ExternalWebLinksService($log, logger, CONSTANTS, ApiService, $q) { - $log = $log.getInstance('ExternalWebLinksService') + ExternalWebLinksService.$inject = ['logger', 'CONSTANTS', 'ApiService', '$q'] + function ExternalWebLinksService(logger, CONSTANTS, ApiService, $q) { var memberApi = ApiService.getApiServiceProvider('MEMBER') var service = { diff --git a/app/services/image.service.js b/app/services/image.service.js index a98db39e8..299aca96f 100644 --- a/app/services/image.service.js +++ b/app/services/image.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('ImageService', ImageService) - ImageService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger', '$rootScope', 'toaster'] + ImageService.$inject = ['CONSTANTS', 'ApiService', '$q', 'logger', '$rootScope', 'toaster'] - function ImageService(CONSTANTS, ApiService, $q, $log, logger, $rootScope, toaster) { + function ImageService(CONSTANTS, ApiService, $q, logger, $rootScope, toaster) { var api = ApiService.restangularV3 var service = { @@ -21,7 +21,7 @@ import angular from 'angular' return api.one('members', S3Response.userHandle).customPUT(S3Response.body, 'photo') .then(function(newPhotoURL) { $rootScope.$broadcast(CONSTANTS.EVENT_PROFILE_UPDATED) - $log.info('Successfully made file record') + logger.info('Successfully made file record') toaster.pop('success', 'Success!', 'Your profile image has been updated.') return newPhotoURL }) @@ -65,7 +65,7 @@ import angular from 'angular' xhr.onreadystatechange = function() { var status = xhr.status if (((status >= 200 && status < 300) || status === 304) && xhr.readyState === 4) { - $log.info('Successfully uploaded file') + logger.info('Successfully uploaded file') deferred.resolve({ userHandle: response.userHandle, diff --git a/app/services/jwtInterceptor.service.js b/app/services/jwtInterceptor.service.js index 4d665158f..5c5667911 100644 --- a/app/services/jwtInterceptor.service.js +++ b/app/services/jwtInterceptor.service.js @@ -5,10 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('JwtInterceptorService', JwtInterceptorService) - JwtInterceptorService.$inject = ['$log', 'jwtHelper', 'AuthTokenService', 'TcAuthService', '$state'] + JwtInterceptorService.$inject = ['logger', 'jwtHelper', 'AuthTokenService', 'TcAuthService', '$state'] - function JwtInterceptorService($log, jwtHelper, AuthTokenService, TcAuthService, $state) { - $log = $log.getInstance('JwtInterceptorService') + function JwtInterceptorService(logger, jwtHelper, AuthTokenService, TcAuthService, $state) { var service = { getToken: getToken } @@ -43,19 +42,19 @@ import angular from 'angular' } // var token = config.url.indexOf('v2/') > -1 ? AuthTokenService.getV2Token() : AuthTokenService.getV3Token() if (jwtHelper.isTokenExpired(token)) { - $log.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) + logger.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) return AuthTokenService.refreshV3Token(token) .then(function(idToken) { - $log.debug('Successfully refreshed V3 token.') + logger.debug('Successfully refreshed V3 token.') // v2 token doesn't expire AuthTokenService.setV3Token(idToken) return idToken }) .catch(function(err) { // Server will not or cannot refresh token - $log.debug('Unable to refresh V3 token, redirecting to login') - $log.debug(err) + logger.debug('Unable to refresh V3 token, redirecting to login') + logger.debug(err) $state.go('login') @@ -66,7 +65,7 @@ import angular from 'angular' } } // else - $log.debug(String.supplant('Skipping authToken for "{url}, UnAuthenticated user"', config)) + logger.debug(String.supplant('Skipping authToken for "{url}, UnAuthenticated user"', config)) return null } } @@ -80,18 +79,18 @@ import angular from 'angular' } // Note only v3tokens expire if (jwtHelper.isTokenExpired(idToken)) { - $log.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) + logger.debug(String.supplant('Token has expired, attempting to refreshToken() for "{url}"', config)) return AuthTokenService.refreshV3Token(idToken) .then(function(idToken) { // v2 token doesn't expire - $log.debug('Successfully refreshed V3 token.') + logger.debug('Successfully refreshed V3 token.') AuthTokenService.setV3Token(idToken) return idToken }) .catch(function(err) { // Server will not or cannot refresh token - $log.debug('Unable to refresh V3 token, redirecting to login') - $log.debug(err) + logger.debug('Unable to refresh V3 token, redirecting to login') + logger.debug(err) $state.go('login') diff --git a/app/services/services.module.js b/app/services/services.module.js index 4e3fd7710..59c51dc2a 100644 --- a/app/services/services.module.js +++ b/app/services/services.module.js @@ -16,12 +16,7 @@ import Auth0 from 'auth0-js' ] angular.module('tc.services', dependencies) - .config(['$provide', 'authProvider', 'CONSTANTS', function($provide, authProvider, CONSTANTS) { - $provide.decorator('$log', ['$delegate', 'LogEnhancer', function($delegate, LogEnhancer) { - LogEnhancer.enhanceLogger($delegate) - return $delegate - }]) - + .config(['authProvider', 'CONSTANTS', function(authProvider, CONSTANTS) { authProvider.init({ domain: CONSTANTS.auth0Domain, clientID: CONSTANTS.clientId, @@ -32,5 +27,4 @@ import Auth0 from 'auth0-js' .factory('UserPrefStore', ['store', function(store) { return store.getNamespacedStore('userSettings') }]) - })() diff --git a/app/services/submissions.service.js b/app/services/submissions.service.js index f1159957f..d30c4256e 100644 --- a/app/services/submissions.service.js +++ b/app/services/submissions.service.js @@ -5,9 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('SubmissionsService', SubmissionsService) - SubmissionsService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log', 'logger', 'toaster'] + SubmissionsService.$inject = ['CONSTANTS', 'ApiService', '$q', 'logger', 'toaster'] - function SubmissionsService(CONSTANTS, ApiService, $q, $log, logger, toaster) { + function SubmissionsService(CONSTANTS, ApiService, $q, logger, toaster) { var api = ApiService.getApiServiceProvider('SUBMISSIONS') var service = { @@ -61,7 +61,7 @@ import angular from 'angular' xhr.onreadystatechange = function() { var status = xhr.status if (((status >= 200 && status < 300) || status === 304) && xhr.readyState === 4) { - $log.info('Successfully uploaded file') + logger.info('Successfully uploaded file') deferred.resolve() @@ -110,7 +110,7 @@ import angular from 'angular' return api.one('submissions', body.id).customPUT(body) .then(function(response) { - $log.info('Successfully updated file statuses') + logger.info('Successfully updated file statuses') recordCompletedSubmission(response.plain(), progressCallback) }) @@ -125,7 +125,7 @@ import angular from 'angular' // Once all uploaded, make record and begin processing return api.one('submissions', body.id).customPOST(body, 'process') .then(function(response) { - $log.info('Successfully made file record. Beginning processing') + logger.info('Successfully made file record. Beginning processing') progressCallback.call(progressCallback, 'FINISH', 100) }) diff --git a/app/services/tcAuth.service.js b/app/services/tcAuth.service.js index deeddf31d..646cba015 100644 --- a/app/services/tcAuth.service.js +++ b/app/services/tcAuth.service.js @@ -5,10 +5,9 @@ import angular from 'angular' angular.module('tc.services').factory('TcAuthService', TcAuthService) - TcAuthService.$inject = ['CONSTANTS', 'auth', 'AuthTokenService', '$rootScope', '$q', '$log', 'logger', '$timeout', 'UserService', 'Helpers', 'ApiService', 'store', '$http'] + TcAuthService.$inject = ['CONSTANTS', 'auth', 'AuthTokenService', '$rootScope', '$q', 'logger', '$timeout', 'UserService', 'Helpers', 'ApiService', 'store', '$http'] - function TcAuthService(CONSTANTS, auth, AuthTokenService, $rootScope, $q, $log, logger, $timeout, UserService, Helpers, ApiService, store, $http) { - $log = $log.getInstance('TcAuthServicetcAuth') + function TcAuthService(CONSTANTS, auth, AuthTokenService, $rootScope, $q, logger, $timeout, UserService, Helpers, ApiService, store, $http) { var auth0 = auth var service = { login: login, @@ -74,7 +73,7 @@ import angular from 'angular' }, 200) }, function(resp) { - $log.debug(JSON.stringify(resp)) + logger.debug(JSON.stringify(resp)) // 401 status here implies user is not registered if (resp.status === 401) { reject({ @@ -94,7 +93,7 @@ import angular from 'angular' ) }, function(error) { - $log.warn(JSON.stringify(error)) + logger.warning(JSON.stringify(error)) reject(error) } ) @@ -117,14 +116,14 @@ import angular from 'angular' UserService.validateSocialProfile(socialData.socialUserId, socialData.socialProvider) .then(function(resp) { - $log.debug(JSON.stringify(resp)) + logger.debug(JSON.stringify(resp)) if (resp.valid) { // success var result = { status: 'SUCCESS', data: socialData } - $log.debug('socialRegister Result: ' + JSON.stringify(result)) + logger.debug('socialRegister Result: ' + JSON.stringify(result)) resolve(result) } else { if (resp.reasonCode === 'ALREADY_IN_USE') { @@ -137,11 +136,11 @@ import angular from 'angular' }) .catch(function(err) { - $log.debug(JSON.stringify(err)) + logger.debug(JSON.stringify(err)) }) }, function(error) { - $log.warn('onSocialLoginFailure ' + JSON.stringify(error)) + logger.warning('onSocialLoginFailure ' + JSON.stringify(error)) reject(error) } ) diff --git a/app/settings/account-info/account-info.controller.js b/app/settings/account-info/account-info.controller.js index 3dae07327..b1eddb707 100644 --- a/app/settings/account-info/account-info.controller.js +++ b/app/settings/account-info/account-info.controller.js @@ -6,9 +6,9 @@ import _ from 'lodash' angular.module('tc.settings').controller('AccountInfoController', AccountInfoController) - AccountInfoController.$inject = ['userData', 'UserService', 'ProfileService', '$log', 'logger', 'ISO3166', 'toaster', '$scope', '$timeout', '$state'] + AccountInfoController.$inject = ['userData', 'UserService', 'ProfileService', 'logger', 'ISO3166', 'toaster', '$scope', '$timeout', '$state'] - function AccountInfoController(userData, UserService, ProfileService, $log, logger, ISO3166, toaster, $scope, $timeout, $state) { + function AccountInfoController(userData, UserService, ProfileService, logger, ISO3166, toaster, $scope, $timeout, $state) { var vm = this vm.saveAccountInfo = saveAccountInfo vm.updateCountry = updateCountry @@ -35,7 +35,7 @@ import _ from 'lodash' vm.loading = false }) .catch(function(err) { - $log.info('Error fetching user profile. Redirecting to edit profile.') + logger.info('Error fetching user profile. Redirecting to edit profile.') logger.error('Could not fetch user profile data', err) $state.go('settings.profile') @@ -116,7 +116,7 @@ import _ from 'lodash' vm.newPasswordForm.$setPristine() vm.currentPasswordFocus = false - $log.info('Your password has been updated.') + logger.info('Your password has been updated.') }) .catch(function(err) { logger.error('Could not update password', err) diff --git a/app/settings/edit-profile/edit-profile.controller.js b/app/settings/edit-profile/edit-profile.controller.js index ae28d54a8..5465b48a8 100644 --- a/app/settings/edit-profile/edit-profile.controller.js +++ b/app/settings/edit-profile/edit-profile.controller.js @@ -6,10 +6,9 @@ import _ from 'lodash' angular.module('tc.settings').controller('EditProfileController', EditProfileController) - EditProfileController.$inject = ['$rootScope', 'userData', 'userHandle', 'ProfileService', 'ExternalAccountService', 'ExternalWebLinksService', '$log', 'logger', 'ISO3166', 'ImageService', 'CONSTANTS', 'TagsService', 'toaster', '$q', '$scope'] + EditProfileController.$inject = ['$rootScope', 'userData', 'userHandle', 'ProfileService', 'ExternalAccountService', 'ExternalWebLinksService', 'logger', 'ISO3166', 'ImageService', 'CONSTANTS', 'TagsService', 'toaster', '$q', '$scope'] - function EditProfileController($rootScope, userData, userHandle, ProfileService, ExternalAccountService, ExternalWebLinksService, $log, logger, ISO3166, ImageService, CONSTANTS, TagsService, toaster, $q, $scope) { - $log = $log.getInstance('EditProfileCtrl') + function EditProfileController($rootScope, userData, userHandle, ProfileService, ExternalAccountService, ExternalWebLinksService, logger, ISO3166, ImageService, CONSTANTS, TagsService, toaster, $q, $scope) { var vm = this vm.toggleTrack = toggleTrack vm.updateCountry = updateCountry @@ -138,7 +137,7 @@ import _ from 'lodash' .then(function() { vm.profileFormProcessing = false vm.editProfile.$setPristine() - $log.info('Saved successfully') + logger.info('Saved successfully') toaster.pop('success', 'Success!', 'Your account information was updated.') for (var k in vm.userData) userData[k] = vm.userData[k] }) @@ -172,7 +171,7 @@ import _ from 'lodash' .then(function() { vm.userData.photoURL = '' - $log.info('Saved successfully') + logger.info('Saved successfully') toaster.pop('success', 'Success!', 'Your account information was updated.') }) diff --git a/app/skill-picker/skill-picker.controller.js b/app/skill-picker/skill-picker.controller.js index 21e80ca0f..75b0668d0 100644 --- a/app/skill-picker/skill-picker.controller.js +++ b/app/skill-picker/skill-picker.controller.js @@ -6,11 +6,10 @@ import _ from 'lodash' angular.module('tc.skill-picker').controller('SkillPickerController', SkillPickerController) - SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', '$log', 'logger', 'toaster', 'MemberCertService', '$q'] + SkillPickerController.$inject = ['$scope', 'CONSTANTS', 'ProfileService', '$state', 'userProfile', 'featuredSkills', 'logger', 'toaster', 'MemberCertService', '$q'] - function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, $log, logger, toaster, MemberCertService, $q) { + function SkillPickerController($scope, CONSTANTS, ProfileService, $state, userProfile, featuredSkills, logger, toaster, MemberCertService, $q) { var vm = this - $log = $log.getInstance('SkillPickerController') vm.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX vm.IOS_PROGRAM_ID = CONSTANTS.SWIFT_PROGRAM_ID vm.submitSkills = submitSkills @@ -33,7 +32,6 @@ import _ from 'lodash' * Activates the controller. */ function activate() { - $log.debug('init') initCommunities() checkCommunityStatus() } @@ -167,7 +165,7 @@ import _ from 'lodash' } promises.push(ProfileService.updateUserSkills(vm.username, data)) } - $log.debug('isCommunitiesDirty: ' + isCommunitiesDirty()) + logger.debug('isCommunitiesDirty: ' + isCommunitiesDirty()) if (isCommunitiesDirty()) { for(var communityName in vm.communities) { var community = vm.communities[communityName] diff --git a/app/submissions/submissions.routes.js b/app/submissions/submissions.routes.js index 18bc01207..a5bfe1514 100644 --- a/app/submissions/submissions.routes.js +++ b/app/submissions/submissions.routes.js @@ -23,7 +23,7 @@ import _ from 'lodash' title: 'Challenge Submission' }, resolve: { - challengeToSubmitTo: ['ChallengeService', '$stateParams', 'UserService', '$log', 'logger', ChallengeToSubmitTo] + challengeToSubmitTo: ['ChallengeService', '$stateParams', 'UserService', 'logger', ChallengeToSubmitTo] } }, 'submissions.file-design': { @@ -40,7 +40,7 @@ import _ from 'lodash' } } - function ChallengeToSubmitTo(ChallengeService, $stateParams, UserService, $log, logger) { + function ChallengeToSubmitTo(ChallengeService, $stateParams, UserService, logger) { // This page is only available to users that are registered to the challenge (submitter role) and the challenge is in the Checkpoint Submission or Submission phase. var params = { filter: 'id=' + $stateParams.challengeId diff --git a/app/submissions/submit-design-files/submit-design-files.controller.js b/app/submissions/submit-design-files/submit-design-files.controller.js index 12160b7fc..9825f3250 100644 --- a/app/submissions/submit-design-files/submit-design-files.controller.js +++ b/app/submissions/submit-design-files/submit-design-files.controller.js @@ -6,13 +6,12 @@ import _ from 'lodash' angular.module('tc.submissions').controller('SubmitDesignFilesController', SubmitDesignFilesController) - SubmitDesignFilesController.$inject = ['$scope','$window', '$stateParams', '$log', 'UserService', 'SubmissionsService', 'challengeToSubmitTo'] + SubmitDesignFilesController.$inject = ['$scope','$window', '$stateParams', 'logger', 'UserService', 'SubmissionsService', 'challengeToSubmitTo'] - function SubmitDesignFilesController($scope, $window, $stateParams, $log, UserService, SubmissionsService, challengeToSubmitTo) { + function SubmitDesignFilesController($scope, $window, $stateParams, logger, UserService, SubmissionsService, challengeToSubmitTo) { if (!challengeToSubmitTo.challenge) { return } var vm = this - $log = $log.getInstance('SubmitDesignFilesController') var files = {} var fileUploadProgress = {} vm.urlRegEx = new RegExp(/^(http(s?):\/\/)?(www\.)?[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/) @@ -176,7 +175,7 @@ import _ from 'lodash' if (args === 100) { vm.preparing = false vm.uploading = true - $log.debug('Prepared for upload.') + logger.debug('Prepared for upload.') } } else if (phase === 'UPLOAD') { // if args is object, this update is about XHRRequest's upload progress @@ -202,18 +201,18 @@ import _ from 'lodash' // start next phase when UPLOAD is done if (vm.uploadProgress == 100) { - $log.debug('Uploaded files.') + logger.debug('Uploaded files.') vm.uploading = false vm.finishing = true } } else if (phase === 'FINISH') { // we are concerned only for completion of the phase if (args === 100) { - $log.debug('Finished upload.') + logger.debug('Finished upload.') } } else { // assume it to be error condition - $log.debug('Error Condition: ' + phase) + logger.debug('Error Condition: ' + phase) vm.errorInUpload = true } } diff --git a/app/submissions/submit-develop-files/submit-develop-files.controller.js b/app/submissions/submit-develop-files/submit-develop-files.controller.js index 6889ca397..c8a22f4e3 100644 --- a/app/submissions/submit-develop-files/submit-develop-files.controller.js +++ b/app/submissions/submit-develop-files/submit-develop-files.controller.js @@ -5,13 +5,12 @@ import angular from 'angular' angular.module('tc.submissions').controller('SubmitDevelopFilesController', SubmitDevelopFilesController) - SubmitDevelopFilesController.$inject = ['$scope','$window', '$stateParams', '$log', 'UserService', 'SubmissionsService', 'challengeToSubmitTo'] + SubmitDevelopFilesController.$inject = ['$scope','$window', '$stateParams', 'logger', 'UserService', 'SubmissionsService', 'challengeToSubmitTo'] - function SubmitDevelopFilesController($scope, $window, $stateParams, $log, UserService, SubmissionsService, challengeToSubmitTo) { + function SubmitDevelopFilesController($scope, $window, $stateParams, logger, UserService, SubmissionsService, challengeToSubmitTo) { if (!challengeToSubmitTo.challenge) { return } var vm = this - $log = $log.getInstance('SubmitDevelopFilesController') var files = {} var fileUploadProgress = {} vm.comments = '' @@ -109,7 +108,7 @@ import angular from 'angular' vm.finishing = false vm.submissionsBody.data.submitterComments = vm.comments - $log.debug('Body for request: ', vm.submissionsBody) + logger.debug('Body for request: ', vm.submissionsBody) SubmissionsService.getPresignedURL(vm.submissionsBody, files, updateProgress) } @@ -122,7 +121,7 @@ import angular from 'angular' if (args === 100) { vm.preparing = false vm.uploading = true - $log.debug('Prepared for upload.') + logger.debug('Prepared for upload.') } } else if (phase === 'UPLOAD') { // if args is object, this update is about XHRRequest's upload progress @@ -148,18 +147,18 @@ import angular from 'angular' // start next phase when UPLOAD is done if (vm.uploadProgress == 100) { - $log.debug('Uploaded files.') + logger.debug('Uploaded files.') vm.uploading = false vm.finishing = true } } else if (phase === 'FINISH') { // we are concerned only for completion of the phase if (args === 100) { - $log.debug('Finished upload.') + logger.debug('Finished upload.') } } else { // assume it to be error condition - $log.debug('Error Condition: ' + phase) + logger.debug('Error Condition: ' + phase) vm.errorInUpload = true } } diff --git a/app/topcoder.module.js b/app/topcoder.module.js index d3a6f5c8b..290b107d8 100644 --- a/app/topcoder.module.js +++ b/app/topcoder.module.js @@ -38,9 +38,9 @@ import angular from 'angular' angular.module('topcoder', dependencies).run(appRun) - appRun.$inject = ['$rootScope', '$state', 'TcAuthService', '$cookies', 'Helpers', '$log'] + appRun.$inject = ['$rootScope', '$state', 'TcAuthService', '$cookies', 'Helpers', 'logger'] - function appRun($rootScope, $state, TcAuthService, $cookies, Helpers, $log) { + function appRun($rootScope, $state, TcAuthService, $cookies, Helpers, logger) { // Attaching $state to the $rootScope allows us to access the // current state in index.html (see the body tag) $rootScope.$state = $state @@ -48,7 +48,7 @@ import angular from 'angular' // check AuthNAuth on change state start $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { if (toState.data.authRequired && !TcAuthService.isAuthenticated()) { - $log.debug('State requires authentication, and user is not logged in, redirecting') + logger.debug('State requires authentication, and user is not logged in, redirecting') // setup redirect for post login event.preventDefault() var next = $state.href(toState.name, toParams, {absolute: false}) From 173b5f46e87c0632fa257d421dea440e13549c57 Mon Sep 17 00:00:00 2001 From: Nick Litwin Date: Tue, 12 Apr 2016 16:31:19 -0700 Subject: [PATCH 54/54] Trigger travis build for member search updates