├── .circleci └── config.yml ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .nvmrc ├── .version ├── 0001-Minor-fixes-in-the-announcement.patch ├── README.md ├── app ├── account │ ├── account.module.js │ ├── account.routes.js │ └── logout │ │ ├── logout.controller.js │ │ └── logout.spec.js ├── blocks │ ├── exception │ │ ├── exception-handler.provider.js │ │ ├── exception.js │ │ └── exception.module.js │ └── logger │ │ ├── logEnhancer.js │ │ ├── logger.js │ │ └── logger.module.js ├── community │ ├── community.module.js │ ├── community.routes.js │ ├── members.controller.js │ ├── members.jade │ ├── statistics.controller.js │ └── statistics.jade ├── directives │ ├── account │ │ ├── toggle-password-with-tips │ │ │ ├── toggle-password-with-tips.directive.js │ │ │ ├── toggle-password-with-tips.jade │ │ │ └── toggle-password-with-tips.spec.js │ │ ├── toggle-password │ │ │ ├── toggle-password.directive.js │ │ │ ├── toggle-password.jade │ │ │ └── toggle-password.spec.js │ │ ├── validate-email.directive.js │ │ └── validate-register.directive.js │ ├── badges │ │ ├── badge-tooltip.directive.js │ │ ├── badge-tooltip.jade │ │ └── badge-tooltip.spec.js │ ├── busy-button │ │ └── busy-button.directive.js │ ├── challenge-links │ │ ├── challenge-links.directive.js │ │ └── challenge-links.jade │ ├── challenge-tile │ │ ├── challenge-tile.directive.js │ │ ├── challenge-tile.jade │ │ ├── challenge-tile.spec.js │ │ └── design-lightbox │ │ │ └── design-lightbox.jade │ ├── challenge-user-place │ │ ├── challenge-user-place.directive.js │ │ ├── design-challenge-user-place.jade │ │ ├── design-lightbox │ │ │ └── design-lightbox.jade │ │ └── dev-challenge-user-place.jade │ ├── distribution-graph │ │ ├── distribution-graph.directive.js │ │ └── distribution-graph.jade │ ├── empty-state-placeholder │ │ ├── empty-state-placeholder.directive.js │ │ ├── empty-state-placeholder.jade │ │ └── empty-state-placeholder.spec.js │ ├── external-account │ │ ├── external-account.directive.js │ │ ├── external-account.jade │ │ ├── external-account.spec.js │ │ ├── external-link-deletion-confirm.jade │ │ ├── external-link-deletion.controller.js │ │ ├── external-link-deletion.spec.js │ │ ├── external-links-data.directive.js │ │ ├── external-links-data.jade │ │ ├── external-links-data.spec.js │ │ ├── external-web-link.jade │ │ ├── external-web-links.directive.js │ │ └── external-web-links.spec.js │ ├── focus-on.directive.js │ ├── header │ │ ├── header-menu-item.directive.js │ │ └── header-menu-item.jade │ ├── history-graph │ │ ├── history-graph.directive.js │ │ └── history-graph.jade │ ├── input-sticky-placeholder │ │ ├── input-sticky-placeholder.directive.js │ │ └── input-sticky-placeholder.jade │ ├── ios-card │ │ ├── ios-card.directive.js │ │ └── ios-card.jade │ ├── notification │ │ ├── notification.directive.js │ │ └── notification.jade │ ├── on-file-change.directive.js │ ├── onoffswitch │ │ ├── onoffswitch.directive.js │ │ └── onoffswitch.jade │ ├── page-state-header │ │ ├── page-state-header.directive.js │ │ └── page-state-header.jade │ ├── preventEventPropagation.directive.js │ ├── profile-widget │ │ ├── profile-widget.directive.js │ │ └── profile-widget.jade │ ├── progress-bar │ │ ├── progress-bar.directive.js │ │ └── progress-bar.jade │ ├── responsive-carousel │ │ ├── responsive-carousel.directive.js │ │ └── responsive-carousel.jade │ ├── skill-tile │ │ ├── skill-tile.directive.js │ │ └── skill-tile.jade │ ├── slideable.directive.js │ ├── srm-tile │ │ ├── srm-tile.directive.js │ │ └── srm-tile.jade │ ├── tc-banner │ │ ├── tc-banner.directive.js │ │ └── tc-banner.jade │ ├── tc-endless-paginator │ │ ├── tc-endless-paginator.directive.js │ │ ├── tc-endless-paginator.jade │ │ └── tc-endless-paginator.spec.js │ ├── tc-file-input │ │ ├── tc-file-input.directive.js │ │ ├── tc-file-input.jade │ │ └── tc-file-input.spec.js │ ├── tc-form-fonts │ │ ├── tc-form-fonts.directive.js │ │ ├── tc-form-fonts.jade │ │ └── tc-form-fonts.spec.js │ ├── tc-form-stockart │ │ ├── tc-form-stockart.directive.js │ │ ├── tc-form-stockart.jade │ │ └── tc-form-stockart.spec.js │ ├── tc-fp-file-input │ │ ├── tc-file-input.spec.js │ │ ├── tc-fp-file-input.directive.js │ │ └── tc-fp-file-input.jade │ ├── tc-input │ │ ├── tc-input.directive.js │ │ ├── tc-input.jade │ │ └── tc-input.spec.js │ ├── tc-paginator │ │ ├── tc-paginator.directive.js │ │ ├── tc-paginator.jade │ │ └── tc-paginator.spec.js │ ├── tc-section │ │ ├── tc-section.directive.js │ │ └── tc-section.jade │ ├── tc-sticky │ │ └── tc-sticky.directive.js │ ├── tc-tabs │ │ ├── tc-tabs.directive.js │ │ └── tc-tabs.jade │ ├── tc-textarea │ │ ├── tc-textarea.directive.js │ │ └── tc-textarea.jade │ ├── tc-transclude.directive.js │ ├── tcui-components.module.js │ └── track-toggle │ │ ├── track-toggle.directive.js │ │ └── track-toggle.jade ├── filters │ ├── add-beginning-space.filter.js │ ├── challengeLinks.filter.js │ ├── deadline-msg.filter.js │ ├── empty.filter.js │ ├── external-link-color.filter.js │ ├── filters.spec.js │ ├── listRoles.filter.js │ ├── local-time.filter.js │ ├── location.filter.js │ ├── npad.filter.js │ ├── ordinal.filter.js │ ├── percentage.filter.js │ ├── rating-color.filter.js │ ├── role.filter.js │ ├── ternary.filter.js │ ├── time-diff.filter.js │ ├── track.filter.js │ ├── truncate.filter.js │ ├── underscore-strip.filter.js │ └── url-protocol.filter.js ├── fontTest │ ├── fontTest.jade │ ├── fontTest.module.js │ └── fontTest.routes.js ├── index.jade ├── index.js ├── layout │ ├── footer │ │ ├── account-footer.jade │ │ ├── footer.controller.js │ │ └── footer.jade │ ├── header │ │ ├── account-header.jade │ │ ├── header.controller.js │ │ └── header.jade │ └── layout.module.js ├── listings │ ├── listings.controller.js │ ├── listings.jade │ ├── listings.module.js │ └── listings.routes.js ├── member-search │ ├── member-search.directive.js │ ├── member-search.jade │ ├── member-search.module.js │ └── member-search.routes.js ├── my-challenges │ ├── my-challenges.controller.js │ ├── my-challenges.jade │ ├── my-challenges.module.js │ ├── my-challenges.routes.js │ └── my-challenges.spec.js ├── my-dashboard │ ├── community-updates │ │ ├── community-updates.controller.js │ │ ├── community-updates.jade │ │ └── community-updates.spec.js │ ├── header-dashboard │ │ ├── header-dashboard.controller.js │ │ ├── header-dashboard.jade │ │ └── header-dashboard.spec.js │ ├── my-challenges │ │ ├── my-challenges.controller.js │ │ ├── my-challenges.jade │ │ └── my-challenges.spec.js │ ├── my-dashboard.controller.js │ ├── my-dashboard.jade │ ├── my-dashboard.module.js │ ├── my-dashboard.routes.js │ ├── my-dashboard.spec.js │ ├── notifications │ │ ├── news.json │ │ ├── notifications.controller.js │ │ └── notifications.jade │ ├── programs │ │ ├── programs.controller.js │ │ ├── programs.jade │ │ └── programs.spec.js │ ├── srms │ │ ├── srms.controller.js │ │ ├── srms.jade │ │ └── srms.spec.js │ └── subtrack-stats │ │ ├── subtrack-stats.controller.js │ │ ├── subtrack-stats.jade │ │ └── subtrack-stats.spec.js ├── my-srms │ ├── my-srms.controller.js │ ├── my-srms.jade │ ├── my-srms.module.js │ ├── my-srms.routes.js │ └── my-srms.spec.js ├── peer-review │ ├── completed-review │ │ ├── completed-review.controller.js │ │ └── completed-review.jade │ ├── edit-review │ │ ├── edit-review.controller.js │ │ └── edit-review.jade │ ├── peer-review.module.js │ ├── peer-review.routes.js │ ├── readOnlyScorecard │ │ ├── readOnlyScorecard.controller.js │ │ └── readOnlyScorecard.jade │ └── review-status │ │ ├── review-status.controller.js │ │ ├── review-status.filter.js │ │ ├── review-status.jade │ │ └── review-status.spec.js ├── profile │ ├── about │ │ ├── about.controller.js │ │ ├── about.jade │ │ └── about.spec.js │ ├── badges │ │ ├── badges.controller.js │ │ ├── badges.jade │ │ └── badges.spec.js │ ├── profile.controller.js │ ├── profile.jade │ ├── profile.module.js │ ├── profile.routes.js │ ├── profile.spec.js │ └── subtrack │ │ ├── copilot │ │ └── copilot.jade │ │ ├── data │ │ ├── data-challenges.jade │ │ └── data-statistics.jade │ │ ├── design │ │ ├── design-challenges.jade │ │ └── design-statistics.jade │ │ ├── develop │ │ ├── develop-challenges.jade │ │ └── develop-statistics.jade │ │ ├── nav.jade │ │ ├── subtrack.controller.js │ │ ├── subtrack.jade │ │ └── subtrack.spec.js ├── services │ ├── api.service.js │ ├── authToken.service.spec.js │ ├── authtoken.service.js │ ├── authv3.module.js │ ├── badge.service.js │ ├── bannerDataService.js │ ├── blog.service.js │ ├── challenge.service.js │ ├── challenge.service.spec.js │ ├── communityData.service.js │ ├── emptyState.service.js │ ├── externalAccounts.service.js │ ├── externalAccounts.service.spec.js │ ├── externalLinks.service.js │ ├── externalLinks.service.spec.js │ ├── group.service.js │ ├── helpers.service.js │ ├── helpers.service.spec.js │ ├── image.service.js │ ├── introduction.service.js │ ├── jwtInterceptor.service.js │ ├── jwtInterceptor.service.spec.js │ ├── memberCert.service.js │ ├── nav.service.js │ ├── profile.service.js │ ├── profile.service.spec.js │ ├── review.service.js │ ├── scorecard.service.js │ ├── services.module.js │ ├── srm.service.js │ ├── statistics.service.js │ ├── submissions.service.js │ ├── tags.service.js │ ├── tcAuth.service.js │ ├── tcAuth.service.spec.js │ ├── user.service.js │ ├── user.service.spec.js │ ├── userPreferences.service.js │ ├── userStats.service.js │ ├── userStats.service.spec.js │ └── userv3.service.js ├── settings │ ├── account-info │ │ ├── account-info.controller.js │ │ ├── account-info.jade │ │ └── account-info.spec.js │ ├── edit-profile │ │ ├── edit-profile.controller.js │ │ ├── edit-profile.jade │ │ └── edit-profile.spec.js │ ├── email │ │ ├── email.controller.js │ │ └── email.jade │ ├── preferences │ │ └── preferences.jade │ ├── settings.controller.js │ ├── settings.jade │ ├── settings.module.js │ ├── settings.routes.js │ └── settings.spec.js ├── sitemap │ ├── sitemap.jade │ ├── sitemap.module.js │ └── sitemap.routes.js ├── skill-picker │ ├── skill-picker.controller.js │ ├── skill-picker.jade │ ├── skill-picker.module.js │ ├── skill-picker.routes.js │ └── skill-picker.spec.js ├── submissions │ ├── submissions.controller.js │ ├── submissions.jade │ ├── submissions.module.js │ ├── submissions.routes.js │ ├── submissions.spec.js │ ├── submit-design-files │ │ ├── submit-design-files.controller.js │ │ ├── submit-design-files.jade │ │ └── submit-design-files.spec.js │ └── submit-develop-files │ │ ├── submit-develop-files.controller.js │ │ ├── submit-develop-files.jade │ │ └── submit-develop-files.spec.js ├── topcoder.constants.js ├── topcoder.controller.js ├── topcoder.interceptors.js ├── topcoder.interceptors.spec.js ├── topcoder.module.js └── topcoder.routes.js ├── assets ├── css │ ├── _font-test.scss │ ├── _fonts.scss │ ├── community │ │ ├── community.scss │ │ ├── members.scss │ │ └── statistics.scss │ ├── directives │ │ ├── badge-tooltip.scss │ │ ├── challenge-links.directive.scss │ │ ├── challenge-tile.scss │ │ ├── design-challenge-user-place.scss │ │ ├── design-lightbox.scss │ │ ├── dev-challenge-user-place.scss │ │ ├── distribution-graph.scss │ │ ├── empty-state-placeholder.scss │ │ ├── external-account.scss │ │ ├── external-link-data.scss │ │ ├── external-link-deletion-confirm.scss │ │ ├── external-web-link.scss │ │ ├── history-graph.scss │ │ ├── ios-card.scss │ │ ├── notification.directive.scss │ │ ├── page-state-header.directive.scss │ │ ├── profile-widget.scss │ │ ├── progress-bar.directive.scss │ │ ├── responsive-carousel.scss │ │ ├── skill-tile.scss │ │ ├── srm-tile.scss │ │ ├── tc-banner.scss │ │ ├── tc-endless-paginator.scss │ │ ├── tc-fp-file-input.directive.scss │ │ ├── tc-paginator.scss │ │ ├── tc-section.scss │ │ ├── tc-sticky.scss │ │ ├── tc-tabs.scss │ │ ├── toggle-password-with-tips.scss │ │ ├── toggle-password.scss │ │ └── track-toggle.scss │ ├── layout │ │ ├── footer.scss │ │ └── header.scss │ ├── my-challenges │ │ └── my-challenges.scss │ ├── my-dashboard │ │ ├── community-updates.scss │ │ ├── header-dashboard.scss │ │ ├── my-challenges.scss │ │ ├── my-dashboard.scss │ │ ├── notifications.scss │ │ ├── programs.scss │ │ ├── srms.scss │ │ └── subtrack-stats.scss │ ├── my-srms │ │ └── my-srms.scss │ ├── peer-review │ │ ├── completed.scss │ │ ├── edit.scss │ │ ├── peer-review.scss │ │ ├── readOnlyScorecard.scss │ │ └── reviewStatus.scss │ ├── profile │ │ ├── about.scss │ │ ├── badges.scss │ │ ├── header.scss │ │ ├── icons.scss │ │ ├── nav.scss │ │ └── subtrack.scss │ ├── settings │ │ ├── account-info.scss │ │ ├── edit-profile.scss │ │ ├── email.scss │ │ ├── preferences.scss │ │ ├── settings.scss │ │ └── update-password.scss │ ├── sitemap │ │ └── sitemap.scss │ ├── skill-picker │ │ └── skill-picker.scss │ ├── submissions │ │ ├── submissions.scss │ │ └── submit-file.scss │ ├── topcoder.scss │ └── vendors │ │ ├── angucomplete.scss │ │ ├── introjs.scss │ │ └── reactselect.scss ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ ├── glyphicons-halflings-regular.woff2 │ ├── merriweather-sans │ │ ├── merriweathersans-bold-webfont.eot │ │ ├── merriweathersans-bold-webfont.svg │ │ ├── merriweathersans-bold-webfont.ttf │ │ ├── merriweathersans-bold-webfont.woff │ │ ├── merriweathersans-bold-webfont.woff2 │ │ ├── merriweathersans-bolditalic-webfont.eot │ │ ├── merriweathersans-bolditalic-webfont.svg │ │ ├── merriweathersans-bolditalic-webfont.ttf │ │ ├── merriweathersans-bolditalic-webfont.woff │ │ ├── merriweathersans-bolditalic-webfont.woff2 │ │ ├── merriweathersans-italic-webfont.eot │ │ ├── merriweathersans-italic-webfont.svg │ │ ├── merriweathersans-italic-webfont.ttf │ │ ├── merriweathersans-italic-webfont.woff │ │ ├── merriweathersans-italic-webfont.woff2 │ │ ├── merriweathersans-light-webfont.eot │ │ ├── merriweathersans-light-webfont.svg │ │ ├── merriweathersans-light-webfont.ttf │ │ ├── merriweathersans-light-webfont.woff │ │ ├── merriweathersans-light-webfont.woff2 │ │ ├── merriweathersans-lightitalic-webfont.eot │ │ ├── merriweathersans-lightitalic-webfont.svg │ │ ├── merriweathersans-lightitalic-webfont.ttf │ │ ├── merriweathersans-lightitalic-webfont.woff │ │ ├── merriweathersans-lightitalic-webfont.woff2 │ │ ├── merriweathersans-regular-webfont.eot │ │ ├── merriweathersans-regular-webfont.svg │ │ ├── merriweathersans-regular-webfont.ttf │ │ ├── merriweathersans-regular-webfont.woff │ │ ├── merriweathersans-regular-webfont.woff2 │ │ └── stylesheet.css │ ├── roboto │ │ ├── apache-license.txt │ │ ├── roboto-black.eot │ │ ├── roboto-black.svg │ │ ├── roboto-black.ttf │ │ ├── roboto-black.woff │ │ ├── roboto-blackitalic.eot │ │ ├── roboto-blackitalic.svg │ │ ├── roboto-blackitalic.ttf │ │ ├── roboto-blackitalic.woff │ │ ├── roboto-bold.eot │ │ ├── roboto-bold.svg │ │ ├── roboto-bold.ttf │ │ ├── roboto-bold.woff │ │ ├── roboto-bolditalic.eot │ │ ├── roboto-bolditalic.svg │ │ ├── roboto-bolditalic.ttf │ │ ├── roboto-bolditalic.woff │ │ ├── roboto-italic.eot │ │ ├── roboto-italic.svg │ │ ├── roboto-italic.ttf │ │ ├── roboto-italic.woff │ │ ├── roboto-light.eot │ │ ├── roboto-light.svg │ │ ├── roboto-light.ttf │ │ ├── roboto-light.woff │ │ ├── roboto-lightitalic.eot │ │ ├── roboto-lightitalic.svg │ │ ├── roboto-lightitalic.ttf │ │ ├── roboto-lightitalic.woff │ │ ├── roboto-medium.eot │ │ ├── roboto-medium.svg │ │ ├── roboto-medium.ttf │ │ ├── roboto-medium.woff │ │ ├── roboto-mediumitalic.eot │ │ ├── roboto-mediumitalic.svg │ │ ├── roboto-mediumitalic.ttf │ │ ├── roboto-mediumitalic.woff │ │ ├── roboto-regular.eot │ │ ├── roboto-regular.svg │ │ ├── roboto-regular.ttf │ │ ├── roboto-regular.woff │ │ ├── roboto-thin.eot │ │ ├── roboto-thin.svg │ │ ├── roboto-thin.ttf │ │ ├── roboto-thin.woff │ │ ├── roboto-thinitalic.eot │ │ ├── roboto-thinitalic.svg │ │ ├── roboto-thinitalic.ttf │ │ └── roboto-thinitalic.woff │ ├── sofiapro │ │ ├── sofiapro-bold-italic-webfont.eot │ │ ├── sofiapro-bold-italic-webfont.svg │ │ ├── sofiapro-bold-italic-webfont.ttf │ │ ├── sofiapro-bold-italic-webfont.woff │ │ ├── sofiapro-bold-italic-webfont.woff2 │ │ ├── sofiapro-bold-webfont.eot │ │ ├── sofiapro-bold-webfont.svg │ │ ├── sofiapro-bold-webfont.ttf │ │ ├── sofiapro-bold-webfont.woff │ │ ├── sofiapro-bold-webfont.woff2 │ │ ├── sofiapro-light-italic-webfont.eot │ │ ├── sofiapro-light-italic-webfont.svg │ │ ├── sofiapro-light-italic-webfont.ttf │ │ ├── sofiapro-light-italic-webfont.woff │ │ ├── sofiapro-light-italic-webfont.woff2 │ │ ├── sofiapro-light-webfont.eot │ │ ├── sofiapro-light-webfont.svg │ │ ├── sofiapro-light-webfont.ttf │ │ ├── sofiapro-light-webfont.woff │ │ ├── sofiapro-light-webfont.woff2 │ │ ├── sofiapro-medium-italic-webfont.eot │ │ ├── sofiapro-medium-italic-webfont.svg │ │ ├── sofiapro-medium-italic-webfont.ttf │ │ ├── sofiapro-medium-italic-webfont.woff │ │ ├── sofiapro-medium-italic-webfont.woff2 │ │ ├── sofiapro-medium-webfont.eot │ │ ├── sofiapro-medium-webfont.svg │ │ ├── sofiapro-medium-webfont.ttf │ │ ├── sofiapro-medium-webfont.woff │ │ ├── sofiapro-medium-webfont.woff2 │ │ ├── sofiapro-regular-italic-webfont.eot │ │ ├── sofiapro-regular-italic-webfont.svg │ │ ├── sofiapro-regular-italic-webfont.ttf │ │ ├── sofiapro-regular-italic-webfont.woff │ │ ├── sofiapro-regular-italic-webfont.woff2 │ │ ├── sofiapro-regular-webfont.eot │ │ ├── sofiapro-regular-webfont.svg │ │ ├── sofiapro-regular-webfont.ttf │ │ ├── sofiapro-regular-webfont.woff │ │ ├── sofiapro-regular-webfont.woff2 │ │ ├── sofiapro-semibold-italic-webfont.eot │ │ ├── sofiapro-semibold-italic-webfont.svg │ │ ├── sofiapro-semibold-italic-webfont.ttf │ │ ├── sofiapro-semibold-italic-webfont.woff │ │ ├── sofiapro-semibold-italic-webfont.woff2 │ │ ├── sofiapro-semibold-webfont.eot │ │ ├── sofiapro-semibold-webfont.svg │ │ ├── sofiapro-semibold-webfont.ttf │ │ ├── sofiapro-semibold-webfont.woff │ │ └── sofiapro-semibold-webfont.woff2 │ └── sourcesanspro │ │ ├── SourceSansPro-Bold-webfont.eot │ │ ├── SourceSansPro-Bold-webfont.svg │ │ ├── SourceSansPro-Bold-webfont.ttf │ │ ├── SourceSansPro-Bold-webfont.woff │ │ ├── SourceSansPro-Bold-webfont.woff2 │ │ ├── SourceSansPro-It-webfont.eot │ │ ├── SourceSansPro-It-webfont.svg │ │ ├── SourceSansPro-It-webfont.ttf │ │ ├── SourceSansPro-It-webfont.woff │ │ ├── SourceSansPro-It-webfont.woff2 │ │ ├── SourceSansPro-Light-webfont.eot │ │ ├── SourceSansPro-Light-webfont.svg │ │ ├── SourceSansPro-Light-webfont.ttf │ │ ├── SourceSansPro-Light-webfont.woff │ │ ├── SourceSansPro-Light-webfont.woff2 │ │ ├── SourceSansPro-Regular-webfont.eot │ │ ├── SourceSansPro-Regular-webfont.svg │ │ ├── SourceSansPro-Regular-webfont.ttf │ │ ├── SourceSansPro-Regular-webfont.woff │ │ ├── SourceSansPro-Regular-webfont.woff2 │ │ ├── SourceSansPro-Semibold-webfont.eot │ │ ├── SourceSansPro-Semibold-webfont.svg │ │ ├── SourceSansPro-Semibold-webfont.ttf │ │ ├── SourceSansPro-Semibold-webfont.woff │ │ └── SourceSansPro-Semibold-webfont.woff2 ├── images │ ├── 1M-banner-hero.png │ ├── arrow-prev.png │ ├── avatarPlaceholder.png │ ├── badge-card.svg │ ├── badge.grid.large.png │ ├── badge.png │ ├── badgeGroup.grid.png │ ├── badges │ │ ├── GoLang1.svg │ │ ├── mm │ │ │ └── mm100.svg │ │ ├── tco16 │ │ │ ├── tco16-badge-gold.svg │ │ │ └── tco16-finalist.svg │ │ └── tco17 │ │ │ ├── tco17-badge-gold.svg │ │ │ └── tco17-finalist.svg │ ├── banner-cognitive.jpg │ ├── banner-tco18-stage-3.jpg │ ├── banner-watson.jpg │ ├── card-bg-no-image.svg │ ├── card-bg-private-project.svg │ ├── check-box.png │ ├── checkbox-sprite.png │ ├── chinese-new-year.png │ ├── cognitive-home-hero-title.png │ ├── cognitive-home-hero.jpg │ ├── community-background.png │ ├── empty-states │ │ ├── pattern-ios-challenges.png │ │ ├── pattern-ios-challenges@2x.png │ │ ├── pattern-my-challenges-dashboard.png │ │ ├── pattern-my-challenges-dashboard@2x.png │ │ ├── pattern-my-challenges.png │ │ └── pattern-my-challenges@2x.png │ ├── facebook.svg │ ├── favicon.ico │ ├── git-logo.png │ ├── github.svg │ ├── gplus.svg │ ├── graph.png │ ├── grid-off.svg │ ├── grid-on.svg │ ├── happy-holi.png │ ├── headerBG.gif │ ├── home-hero.jpg │ ├── ico-arrow-big-left.svg │ ├── ico-arrow-big-right.svg │ ├── ico-arrow.png │ ├── ico-calendar-detailed.svg │ ├── ico-calendar.svg │ ├── ico-checkmark.svg │ ├── ico-code-c.svg │ ├── ico-delete.svg │ ├── ico-facebook.svg │ ├── ico-facebook_desktop.svg │ ├── ico-gallery.svg │ ├── ico-google.svg │ ├── ico-google_desktop.svg │ ├── ico-grid.svg │ ├── ico-help-hover.svg │ ├── ico-help-normal.svg │ ├── ico-ibm_cognitive-community-grey.svg │ ├── ico-ibm_cognitive-community.svg │ ├── ico-invite-only-prj.svg │ ├── ico-ios-community-grey.svg │ ├── ico-ios-community.svg │ ├── ico-linkedin.svg │ ├── ico-linkedin_desktop.svg │ ├── ico-list.svg │ ├── ico-picture.svg │ ├── ico-posts.svg │ ├── ico-predix-community-grey.svg │ ├── ico-predix-community.svg │ ├── ico-private-prj.svg │ ├── ico-social.png │ ├── ico-star.svg │ ├── ico-submissions.svg │ ├── ico-track-co_pilot-outline.svg │ ├── ico-track-co_pilot.svg │ ├── ico-track-copilot-grey.svg │ ├── ico-track-copilot.svg │ ├── ico-track-cp-gray.svg │ ├── ico-track-cp.svg │ ├── ico-track-data-grey.svg │ ├── ico-track-data-outline.svg │ ├── ico-track-data.svg │ ├── ico-track-design-grey.svg │ ├── ico-track-design-outline.svg │ ├── ico-track-design.png │ ├── ico-track-design.svg │ ├── ico-track-develop-grey.svg │ ├── ico-track-develop-outline.svg │ ├── ico-track-develop.png │ ├── ico-track-develop.svg │ ├── ico-twitter.svg │ ├── ico-twitter_desktop.svg │ ├── ico-user-default.svg │ ├── ico-users.svg │ ├── ico-winner-ribbon.svg │ ├── introjs │ │ ├── dashboard-challenges.svg │ │ ├── dashboard-community.svg │ │ ├── dashboard-srms.svg │ │ ├── profile-skills.svg │ │ ├── profile-tc-activity.svg │ │ ├── profile-web-activity.svg │ │ ├── subtrack-challenges.svg │ │ ├── subtrack-metrics.svg │ │ └── subtrack-statistics.svg │ ├── javascript-logo.png │ ├── keepcalm.png │ ├── learn-and-improve.png │ ├── learn-and-improve2x.png │ ├── list-off.svg │ ├── list-on.svg │ ├── loading.gif │ ├── lock-icon-small.png │ ├── lock-icon.png │ ├── logo.png │ ├── logo_mobile.svg │ ├── logo_topcoder.svg │ ├── logo_white.png │ ├── magnifying_glass.svg │ ├── member-program │ │ ├── break-the-finish-48.png │ │ ├── get-certified-48.png │ │ ├── get-ready-48.png │ │ ├── getting-ready-48.png │ │ ├── gold-medal-48.png │ │ ├── on-starting-line-48.png │ │ ├── peer-badge-big.png │ │ ├── sprite.png │ │ ├── step-one-48.png │ │ ├── svg │ │ │ ├── Challenger-06.svg │ │ │ ├── Challenger-Designer-06.svg │ │ │ ├── Challenger-Developer-06.svg │ │ │ ├── Education-06.svg │ │ │ ├── High-Performer-06.svg │ │ │ ├── Member-06.svg │ │ │ ├── SYS-IOS-Swift-Ready-06.svg │ │ │ ├── Show-Your-Skills-06.svg │ │ │ ├── design-generic.svg │ │ │ └── development-generic.svg │ │ └── winged-feet-48.png │ ├── menu_item_placeholder.svg │ ├── nav │ │ ├── blog.svg │ │ ├── book-cp.svg │ │ ├── book-data.svg │ │ ├── book-design.svg │ │ ├── book-develop.svg │ │ ├── book-tutorials.svg │ │ ├── community.svg │ │ ├── dashboard.svg │ │ ├── data-science.svg │ │ ├── events.svg │ │ ├── exit.svg │ │ ├── forums.svg │ │ ├── help.svg │ │ ├── ico-tco16.svg │ │ ├── members.svg │ │ ├── profile.svg │ │ ├── programs.svg │ │ ├── rocket.svg │ │ ├── settings.svg │ │ ├── statistics.svg │ │ ├── tco-generic.svg │ │ ├── track-copilot.svg │ │ ├── track-cp.svg │ │ ├── track-data.svg │ │ ├── track-design.svg │ │ ├── track-develop.svg │ │ └── wallet.svg │ ├── news │ │ ├── tco18news-desktop.jpg │ │ ├── tco18news-mobile.jpg │ │ └── tco18news-tablet.jpg │ ├── npm-logo.png │ ├── pi-day.png │ ├── predix-home-hero-title.png │ ├── predix-home-hero.jpg │ ├── ripple.gif │ ├── robot-embarresed.svg │ ├── robot.svg │ ├── search-icon.png │ ├── skills │ │ ├── id-100.svg │ │ ├── id-101.svg │ │ ├── id-105.svg │ │ ├── id-106.svg │ │ ├── id-108.svg │ │ ├── id-109.svg │ │ ├── id-110.svg │ │ ├── id-111.svg │ │ ├── id-12.svg │ │ ├── id-124.svg │ │ ├── id-125.svg │ │ ├── id-126.svg │ │ ├── id-128.svg │ │ ├── id-130.svg │ │ ├── id-131.svg │ │ ├── id-132.svg │ │ ├── id-133.svg │ │ ├── id-140.svg │ │ ├── id-147.svg │ │ ├── id-148.svg │ │ ├── id-149.svg │ │ ├── id-154.svg │ │ ├── id-155.svg │ │ ├── id-162.svg │ │ ├── id-163.svg │ │ ├── id-167.svg │ │ ├── id-173.svg │ │ ├── id-18.svg │ │ ├── id-180.svg │ │ ├── id-185.svg │ │ ├── id-190.svg │ │ ├── id-191.svg │ │ ├── id-194.svg │ │ ├── id-200.svg │ │ ├── id-201.svg │ │ ├── id-205.svg │ │ ├── id-206.svg │ │ ├── id-21.svg │ │ ├── id-210.svg │ │ ├── id-213.svg │ │ ├── id-217.svg │ │ ├── id-23.svg │ │ ├── id-232.svg │ │ ├── id-236.svg │ │ ├── id-237.svg │ │ ├── id-238.svg │ │ ├── id-24.svg │ │ ├── id-240.svg │ │ ├── id-241.svg │ │ ├── id-242.svg │ │ ├── id-247.svg │ │ ├── id-248.svg │ │ ├── id-25.svg │ │ ├── id-255.svg │ │ ├── id-26.svg │ │ ├── id-265.svg │ │ ├── id-267.svg │ │ ├── id-268.svg │ │ ├── id-269.svg │ │ ├── id-27.svg │ │ ├── id-272.svg │ │ ├── id-274.svg │ │ ├── id-277.svg │ │ ├── id-280.svg │ │ ├── id-281.svg │ │ ├── id-283.svg │ │ ├── id-284.svg │ │ ├── id-286.svg │ │ ├── id-287.svg │ │ ├── id-294.svg │ │ ├── id-298.svg │ │ ├── id-302.svg │ │ ├── id-303.svg │ │ ├── id-306.svg │ │ ├── id-309.svg │ │ ├── id-31.svg │ │ ├── id-311.svg │ │ ├── id-315.svg │ │ ├── id-316.svg │ │ ├── id-317.svg │ │ ├── id-318.svg │ │ ├── id-321.svg │ │ ├── id-323.svg │ │ ├── id-325.svg │ │ ├── id-326.svg │ │ ├── id-327.svg │ │ ├── id-328.svg │ │ ├── id-331.svg │ │ ├── id-335.svg │ │ ├── id-34.svg │ │ ├── id-347.svg │ │ ├── id-351.svg │ │ ├── id-352.svg │ │ ├── id-355.svg │ │ ├── id-356.svg │ │ ├── id-359.svg │ │ ├── id-360.svg │ │ ├── id-368.svg │ │ ├── id-37.svg │ │ ├── id-371.svg │ │ ├── id-373.svg │ │ ├── id-374.svg │ │ ├── id-375.svg │ │ ├── id-376.svg │ │ ├── id-377.svg │ │ ├── id-378.svg │ │ ├── id-387.svg │ │ ├── id-388.svg │ │ ├── id-389.svg │ │ ├── id-39.svg │ │ ├── id-395.svg │ │ ├── id-396.svg │ │ ├── id-399.svg │ │ ├── id-40.svg │ │ ├── id-401.svg │ │ ├── id-402.svg │ │ ├── id-403.svg │ │ ├── id-406.svg │ │ ├── id-407.svg │ │ ├── id-408.svg │ │ ├── id-409.svg │ │ ├── id-410.svg │ │ ├── id-411.svg │ │ ├── id-412.svg │ │ ├── id-413.svg │ │ ├── id-414.svg │ │ ├── id-415.svg │ │ ├── id-416.svg │ │ ├── id-417.svg │ │ ├── id-418.svg │ │ ├── id-419.svg │ │ ├── id-420.svg │ │ ├── id-421.svg │ │ ├── id-422.svg │ │ ├── id-423.svg │ │ ├── id-425.svg │ │ ├── id-426.svg │ │ ├── id-427.svg │ │ ├── id-428.svg │ │ ├── id-429.svg │ │ ├── id-43.svg │ │ ├── id-430.svg │ │ ├── id-431.svg │ │ ├── id-432.svg │ │ ├── id-433.svg │ │ ├── id-434.svg │ │ ├── id-435.svg │ │ ├── id-44.svg │ │ ├── id-49.svg │ │ ├── id-5.svg │ │ ├── id-51.svg │ │ ├── id-53.svg │ │ ├── id-6.svg │ │ ├── id-60.svg │ │ ├── id-63.svg │ │ ├── id-65.svg │ │ ├── id-66.svg │ │ ├── id-67.svg │ │ ├── id-68.svg │ │ ├── id-69.svg │ │ ├── id-7.svg │ │ ├── id-72.svg │ │ ├── id-73.svg │ │ ├── id-copilot.svg │ │ ├── id-cp.svg │ │ ├── id-data.svg │ │ ├── id-design.svg │ │ ├── id-develop.svg │ │ ├── id-development.svg │ │ └── id.svg │ ├── sort-arrows.png │ ├── stackoverflow-logo.png │ ├── swift-logo.png │ ├── tc-dashboard-tco17.png │ ├── tc-logo-dad.png │ ├── tco16-bah-logo-black-bg.svg │ ├── tco17-web-logo-white.svg │ ├── team-live-bg.png │ ├── team-live-logo.png │ ├── topcoder-logo-dads.png │ ├── tt-arrow.png │ ├── twitter.svg │ ├── x-mark-gray.svg │ └── x-mark-red.svg └── scripts │ ├── angular-filepicker.js │ ├── filepicker.js │ ├── google.analytics.jade │ ├── newrelic.analytics.jade │ ├── raven-js.jade │ └── zendesk-widget.jade ├── deploy.sh ├── karma.conf.js ├── npm-shrinkwrap.json ├── package-lock.json ├── package.json ├── tests └── test-helpers │ └── mock-data.js ├── webpack.config.js └── webpack.tests.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [*.jade] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | assets/scripts/*.* 3 | report/**/*.* -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "indent": [2, 2], 4 | "linebreak-style": [2, "unix"], 5 | "no-unused-vars": [2, {"args": "none"}], 6 | "quotes": [2, "single"], 7 | "semi": [2, "never"] 8 | }, 9 | "env": { 10 | "es6": true, 11 | "browser": true, 12 | "node": true, 13 | "mocha": true, 14 | "jquery": true 15 | }, 16 | "extends": "eslint:recommended", 17 | "ecmaFeatures": { 18 | "jsx": true, 19 | "modules": true, 20 | "experimentalObjectRestSpread": true 21 | }, 22 | "plugins": [ 23 | "react" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | bower_components 3 | .DS_Store 4 | .tmp 5 | build 6 | dist 7 | report 8 | .idea 9 | .settings 10 | .vscode 11 | styleguide 12 | .project 13 | .awspublish-app.topcoder-dev.com 14 | npm-debug.log 15 | *.swp 16 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 5 2 | -------------------------------------------------------------------------------- /.version: -------------------------------------------------------------------------------- 1 | v1.0.21 2 | -------------------------------------------------------------------------------- /app/account/account.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'ui.router', 8 | 'tc.services', 9 | 'ngIsoConstants', 10 | 'angucomplete-alt', 11 | 'blocks.logger' 12 | ] 13 | 14 | angular.module('tc.account', dependencies) 15 | })() 16 | -------------------------------------------------------------------------------- /app/account/logout/logout.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.account').controller('LogoutController', LogoutController) 7 | 8 | LogoutController.$inject = ['logger', 'TcAuthService', '$window', 'CONSTANTS'] 9 | 10 | function LogoutController(logger, TcAuthService, $window, CONSTANTS) { 11 | TcAuthService.logout().then(() => { 12 | logger.debug('MAIN_URL=> ' + CONSTANTS.MAIN_URL) 13 | $window.location.href = CONSTANTS.MAIN_URL 14 | }) 15 | } 16 | })() 17 | -------------------------------------------------------------------------------- /app/account/logout/logout.spec.js: -------------------------------------------------------------------------------- 1 | /*eslint no-undef:0*/ 2 | import angular from 'angular' 3 | 4 | describe('Logout Controller', function() { 5 | var controller 6 | var fakeWindow = { 7 | // Without the `angular` field our fake window will crush 8 | // `angular-mocks@1.6.2` and higher! 9 | angular: { 10 | callbacks: {} 11 | }, 12 | location: { 13 | href: '' 14 | } 15 | } 16 | 17 | beforeEach(function() { 18 | bard.appModule('topcoder') 19 | bard.appModule('tc.account') 20 | angular.mock.module('tc.account', function($provide) { 21 | $provide.value('$window', fakeWindow) 22 | }) 23 | bard.inject(this, '$controller', 'TcAuthService', '$window', '$q', 'CONSTANTS') 24 | bard.mockService(TcAuthService, { 25 | logout: $q.when({}), 26 | _default: $q.when({}) 27 | }) 28 | controller = $controller('LogoutController') 29 | }) 30 | 31 | bard.verifyNoOutstandingHttpRequests() 32 | 33 | it('should be defined', function() { 34 | expect(controller).to.be.defined 35 | }) 36 | 37 | it('should be successfully logged out', function() { 38 | expect(TcAuthService.logout).to.have.been.calledOnce 39 | expect($window.location.href).to.equal(CONSTANTS.MAIN_URL) 40 | }) 41 | 42 | }) 43 | -------------------------------------------------------------------------------- /app/blocks/exception/exception.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('blocks.exception').factory('exception', exception) 7 | 8 | exception.$inject = ['logger'] 9 | 10 | function exception(logger) { 11 | var service = { 12 | catcher: catcher 13 | } 14 | return service 15 | 16 | function catcher(message) { 17 | return function (reason) { 18 | logger.error(message, reason) 19 | } 20 | } 21 | } 22 | })() 23 | -------------------------------------------------------------------------------- /app/blocks/exception/exception.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('blocks.exception', ['blocks.logger']) 7 | })() 8 | -------------------------------------------------------------------------------- /app/blocks/logger/logger.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('blocks.logger', []) 7 | })() 8 | -------------------------------------------------------------------------------- /app/community/community.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'ui.router', 8 | 'tc.services', 9 | 'tcUIComponents', 10 | 'toaster' 11 | ] 12 | 13 | angular.module('tc.community', dependencies) 14 | 15 | })() 16 | -------------------------------------------------------------------------------- /app/community/members.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.community').controller('MembersController', MembersController) 7 | 8 | MembersController.$inject = ['CommunityDataService', 'StatisticsService', 'CONSTANTS'] 9 | 10 | function MembersController(CommunityDataService, StatisticsService, CONSTANTS) { 11 | var ctrl = this 12 | ctrl.notSearch = true 13 | ctrl.showing = 'list' 14 | ctrl.domain = CONSTANTS.domain 15 | ctrl.currentMonth = 'April 2016' 16 | ctrl.memberLeaderboard = [] 17 | ctrl.copilots = [] 18 | CommunityDataService.getMembersData() 19 | .then(function(data) { 20 | ctrl.memberLeaderboard = data.memberLeaderboard 21 | ctrl.copilots = data.copilots 22 | }) 23 | 24 | ctrl.search = function() { 25 | if (ctrl.keywords) { 26 | window.location.replace('/search/members/?q=' + window.encodeURIComponent(ctrl.keywords)) 27 | } else { 28 | ctrl.notSearch = true 29 | } 30 | } 31 | 32 | StatisticsService.getPlatformStats().then(function(data) { 33 | ctrl.platformStats = data 34 | }) 35 | } 36 | 37 | })() 38 | -------------------------------------------------------------------------------- /app/directives/account/toggle-password-with-tips/toggle-password-with-tips.jade: -------------------------------------------------------------------------------- 1 | input#password-input( 2 | ng-model="vm.password", 3 | ng-model-options="{allowInvalid: true}", 4 | 5 | ng-focus="vm.onFocus($event)", 6 | ng-blur="vm.onBlur($event)", 7 | 8 | name="password", 9 | type="password", 10 | placeholder="{{vm.placeholder}}", 11 | 12 | ng-minlength="8", 13 | ng-maxlength="64", 14 | maxlength="64", 15 | has-letter, 16 | has-symbol-or-number, 17 | required) 18 | 19 | label #[input(type="checkbox", id="passwordCheckbox", ng-model="focusOnInput", ng-change="vm.toggleInputType()")] Show 20 | -------------------------------------------------------------------------------- /app/directives/account/toggle-password/toggle-password.jade: -------------------------------------------------------------------------------- 1 | input#current-password-input( 2 | ng-model="vm.currentPassword", 3 | ng-model-options="{allowInvalid: true}", 4 | 5 | ng-focus="vm.onCPFocus($event)", 6 | ng-blur="vm.onCPBlur($event)", 7 | 8 | name="currentPassword", 9 | type="password", 10 | placeholder="{{currentPasswordPlaceholder}}", 11 | 12 | required) 13 | 14 | label #[input(type="checkbox", id="currentPasswordCheckbox", ng-model="focusOnCurrentPasswordInput", ng-change="vm.toggleTypeAttribute()")] Show 15 | -------------------------------------------------------------------------------- /app/directives/account/validate-email.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('validEmail', validEmail) 7 | 8 | function validEmail() { 9 | return { 10 | require: 'ngModel', 11 | link: function(scope, element, attrs, ctrl) { 12 | ctrl.$validators.validEmail = function(modelValue, viewValue) { 13 | if (ctrl.$isEmpty(modelValue)) { 14 | return true 15 | } 16 | 17 | if (/.+@.+\..+/.test(viewValue)) { 18 | return true 19 | } 20 | 21 | scope.vm.emailErrorMessage = 'Please enter a valid email address.' 22 | return false 23 | } 24 | } 25 | } 26 | } 27 | })() 28 | -------------------------------------------------------------------------------- /app/directives/badges/badge-tooltip.jade: -------------------------------------------------------------------------------- 1 | .tooltip(ng-hide="hide") 2 | .inner 3 | header(ng-bind="badge.name") 4 | .data 5 | p.earnedOn(ng-bind="'Earned on ' + badge.date", ng-show="badge.date") 6 | p.earnedOn(ng-hide="badge.date") Not Earned Yet 7 | .data(ng-show="badge.currentlyEarned > 0") 8 | p.currentlyEarned 9 | span(ng-bind="badge.currentlyEarned") 10 | .arrow -------------------------------------------------------------------------------- /app/directives/challenge-links/challenge-links.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('challengeLinks', function() { 7 | return { 8 | restrict: 'E', 9 | transclude: false, 10 | replace: true, 11 | template: require('./challenge-links')(), 12 | scope: { 13 | challenge: '=', 14 | view: '=' 15 | } 16 | } 17 | }) 18 | })() 19 | -------------------------------------------------------------------------------- /app/directives/challenge-links/challenge-links.jade: -------------------------------------------------------------------------------- 1 | .challenge-links(ng-class="view + '-view'") 2 | a.registrants(ng-href="{{challenge|challengeLinks:'registrants'}}", ng-switch="challenge.subTrack", target="_self") 3 | .icon.registrants-icon 4 | p(ng-switch-when="MARATHON_MATCH") {{challenge.numRegistrants[0]}} 5 | p(ng-switch-default) {{challenge.numRegistrants}} 6 | 7 | a.submissions(ng-hide="challenge.track === 'DATA_SCIENCE'", ng-href="{{challenge|challengeLinks:'submissions'}}", target="_self") 8 | .icon.submissions-icon 9 | p {{challenge.numSubmissions}} 10 | 11 | a.forum(ng-href="{{challenge|challengeLinks:'forums'}}") 12 | .icon.forum-icon 13 | p Posts 14 | -------------------------------------------------------------------------------- /app/directives/challenge-tile/challenge-tile.spec.js: -------------------------------------------------------------------------------- 1 | /*eslint no-undef:0*/ 2 | import angular from 'angular' 3 | 4 | const mockData = require('../../../tests/test-helpers/mock-data') 5 | 6 | describe('Challenge Tile Directive', function() { 7 | var scope 8 | var element 9 | var challenge = mockData.getMockChallengeWithUserDetails() 10 | 11 | beforeEach(function() { 12 | bard.appModule('topcoder') 13 | bard.inject(this, '$compile', '$rootScope', 'CONSTANTS') 14 | 15 | scope = $rootScope.$new() 16 | }) 17 | 18 | bard.verifyNoOutstandingHttpRequests() 19 | 20 | describe('Regular Challenges', function() { 21 | 22 | beforeEach(function() { 23 | scope.challenge = challenge 24 | element = angular.element(')') 25 | $compile(element)(scope) 26 | scope.$digest() 27 | }) 28 | 29 | //it('should have challenge related html', function() { 30 | // var directiveHtml = challengeTile.html() 31 | // expect(directiveHtml).to.include('challenge-name') 32 | // expect(directiveHtml).to.include('Learn and Earn Cordova App Assembly') 33 | //}) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /app/directives/challenge-tile/design-lightbox/design-lightbox.jade: -------------------------------------------------------------------------------- 1 | .lightbox-container 2 | img(ng-src="http://studio.{{DOMAIN}}/studio.jpg?module=DownloadSubmission&sbmid={{challenge.thumbnailId}}&sbt=full", fallback-src=require("../../../../assets/images/ico-picture.svg")) 3 | -------------------------------------------------------------------------------- /app/directives/distribution-graph/distribution-graph.jade: -------------------------------------------------------------------------------- 1 | .distribution-graph-directive(ng-show="graphState.show == 'distribution'") 2 | 3 | .graph-title 4 | .text Rating Distribution Graph 5 | .button-group 6 | button.tc-btn.tc-btn-s(ng-click="graphState.show = 'history'") View Rating History 7 | button.tc-btn.tc-btn-s.active(ng-click="graphState.show = 'distribution'") View Rating Distribution 8 | 9 | .graph-viewer 10 | 11 | .distribution-graph -------------------------------------------------------------------------------- /app/directives/empty-state-placeholder/empty-state-placeholder.jade: -------------------------------------------------------------------------------- 1 | .empty-state-placeholder(ng-show="vm.show", class="{{vm.theme}}") 2 | .title(ng-bind="vm.title") 3 | .content(ng-transclude, ng-show="transcluded") 4 | .description(ng-bind="vm.description") 5 | .help-links 6 | .help-link(ng-repeat="link in vm.helpLinks") 7 | a(class="{{link.cssClass}}", title="{{link.title}}", ng-href="{{link.url}}", ng-if="link.url") {{link.title}} 8 | a(class="{{link.cssClass}}", title="{{link.title}}", ui-sref="{{link.state}}", ng-if="link.state") {{link.title}} 9 | a(class="{{link.cssClass}}", title="{{link.title}}", ng-click="vm.handleClick(link)", ng-if="link.eventName") {{link.title}} 10 | -------------------------------------------------------------------------------- /app/directives/external-account/external-account.jade: -------------------------------------------------------------------------------- 1 | .ext-tile(ng-repeat="account in accountList | orderBy:'order'", ng-click="!account.disabled && !readOnly && handleClick(account.provider, account.status)", ng-class="{'connected': !readOnly && account.status === 'linked', 'connecting': !readOnly && account.status === 'pending', 'disabled': account.disabled, 'enabled': !readOnly && !account.disabled, 'read-only': readOnly, 'connect': !readOnly && account.status === 'unlinked' && !account.disabled}", ng-if="!readOnly || account.featured === true") 2 | .external-account-box(ng-class="account.colorClass") 3 | i.fa(ng-class="account.className") 4 | 5 | .provider {{account.displayName}} 6 | 7 | .status.already-connected(ng-if="!readOnly && account.status === 'linked'") Connected 8 | 9 | .status.already-connected(ng-if="!readOnly && account.status === 'pending'") Connecting 10 | 11 | .status.disconnect Disconnect 12 | 13 | .status(ng-if="!readOnly && account.status === 'unlinked' && !account.disabled") Connect 14 | 15 | .status(ng-if="!readOnly && account.disabled") Coming Soon 16 | -------------------------------------------------------------------------------- /app/directives/external-account/external-link-deletion-confirm.jade: -------------------------------------------------------------------------------- 1 | .deletion-confirmation 2 | .deletion-confirmation-title Heads Up! 3 | .deletion-confirmation-message Are you sure you want to delete the external link #[span.deletion-confirmation-account-title "{{vm.account.title}}"]? This action can't be undone later. 4 | .deletion-confirmation-buttons 5 | .deletion-confirmation-button-yes 6 | button.tc-btn.tc-btn-s.tc-btn-ghost(ng-click="vm.deleteAccount() && closeThisDialog()") Yes, Delete Link 7 | .deletion-confirmation-button-no 8 | button.tc-btn.tc-btn-s(ng-click="closeThisDialog()") Cancel -------------------------------------------------------------------------------- /app/directives/external-account/external-web-link.jade: -------------------------------------------------------------------------------- 1 | .web-link 2 | form(name="addWebLinkFrm", ng-submit="addWebLinkFrm.$valid && addWebLink()", autocomplete="off") 3 | .validation-bar.url(ng-class="{ 'error-bar': (addWebLinkFrm.url.$dirty && addWebLinkFrm.url.$invalid) }") 4 | input.form-field.url(name="url", type="text", ng-pattern="urlRegEx" ng-model="url", placeholder="http://www.yourlink.com", required) 5 | 6 | .form-input-error(ng-show="addWebLinkFrm.url.$dirty && addWebLinkFrm.url.$invalid") 7 | p(ng-show="addWebLinkFrm.url.$error.required") This is a required field. 8 | 9 | p(ng-show="addWebLinkFrm.url.$error.pattern") Please enter a valid URL 10 | 11 | button.tc-btn.tc-btn-m(type="submit", 12 | tc-busy-button, tc-busy-when="addingWebLink", tc-busy-message="Adding", 13 | ng-disabled="addWebLinkFrm.$invalid || addWebLinkFrm.$pristine") Add 14 | 15 | .form-errors(ng-show="errorMessage") 16 | p.form-error {{errorMessage}} 17 | -------------------------------------------------------------------------------- /app/directives/focus-on.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('focusOn', focusOn) 7 | 8 | focusOn.$inject = ['$timeout', '$parse'] 9 | 10 | function focusOn($timeout, $parse) { 11 | return function(scope, element, attr) { 12 | var model = $parse(attr.focusOn) 13 | scope.$watch(model, function(newValue) { 14 | $timeout(function() { 15 | 16 | if (newValue !== undefined && newValue) { 17 | element[0].focus() 18 | } else { 19 | element[0].blur() 20 | } 21 | }, 0) 22 | }) 23 | } 24 | } 25 | })() 26 | -------------------------------------------------------------------------------- /app/directives/header/header-menu-item.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | angular.module('tcUIComponents').directive('headerMenuItem', function() { 6 | 7 | return { 8 | restrict: 'E', 9 | template: require('./header-menu-item')(), 10 | scope: { 11 | item: '=' 12 | }, 13 | controller: ['$scope', '$state', 'NavService', function($scope, $state, NavService) { 14 | var sref = $scope.item.sref 15 | var href = $scope.item.href 16 | 17 | // I believe I have to hack this because of https://github.com/angular-ui/ui-router/issues/395, I tried ui-state 18 | if ($scope.item.srefParams) { 19 | $scope.wtfhref = $state.href($scope.item.sref, $scope.item.srefParams) 20 | } 21 | 22 | $scope.isActive = function() { 23 | if (window.location.pathname == href || $state.is(sref)) { 24 | NavService.selectedTopLevelItem = NavService.getParent(href || sref) 25 | //NavService.hrefs[href] || NavService.hrefs[sref.slice(0, sref.indexOf('.'))] 26 | 27 | return true 28 | } 29 | 30 | return false 31 | } 32 | }] 33 | } 34 | }) 35 | })() 36 | -------------------------------------------------------------------------------- /app/directives/header/header-menu-item.jade: -------------------------------------------------------------------------------- 1 | // clean srefs 2 | li.submenu-item(ng-if="item.sref && !item.srefParams") 3 | a.menu-link(ui-sref="{{item.sref}}" ng-class="{ 'active': isActive() }" ) 4 | img.menu-icon(ng-src="{{item.icon}}") 5 | .menu-text {{item.text}} 6 | 7 | // external links 8 | li.submenu-item(ng-if="item.href && !item.srefParams") 9 | a.menu-link(ng-href="{{item.href}}" ng-class="{ 'active': isActive() }" target="{{ item.target ? item.target : '_self'}}") 10 | img.menu-icon(ng-src="{{item.icon}}") 11 | .menu-text {{item.text}} 12 | 13 | // srefs with params 14 | li.submenu-item(ng-if="item.srefParams") 15 | a.menu-link(ng-href="{{wtfhref}}" ng-class="{ 'active': isActive() }" ) 16 | img.menu-icon(ng-src="{{item.icon}}") 17 | .menu-text {{item.text}} 18 | -------------------------------------------------------------------------------- /app/directives/history-graph/history-graph.jade: -------------------------------------------------------------------------------- 1 | .history-graph-directive(ng-show="graphState.show == 'history'") 2 | 3 | .graph-title 4 | .text Rating History Graph 5 | .button-group 6 | button.tc-btn.tc-btn-s.active(ng-click="graphState.show = 'history'") View Rating History 7 | button.tc-btn.tc-btn-s(ng-click="graphState.show = 'distribution'") View Rating Distribution 8 | 9 | .history-graph-container 10 | 11 | .history-graph -------------------------------------------------------------------------------- /app/directives/input-sticky-placeholder/input-sticky-placeholder.jade: -------------------------------------------------------------------------------- 1 | .input-sticky-placeholder-container 2 | div(ng-transclude) 3 | 4 | span.placeholder-text 5 | -------------------------------------------------------------------------------- /app/directives/ios-card/ios-card.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('iosCard', function() { 7 | return { 8 | restrict: 'E', 9 | template: require('./ios-card')(), 10 | scope: { 11 | challenge: '=challenge', 12 | view: '=' 13 | }, 14 | controller: ['$scope', 'CONSTANTS', function($scope, CONSTANTS) { 15 | $scope.DOMAIN = CONSTANTS.domain 16 | $scope.SUBDOMAIN = location.href.search('//members') >= 0 ? 'members' : 'www' 17 | }] 18 | } 19 | }) 20 | })() 21 | -------------------------------------------------------------------------------- /app/directives/notification/notification.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('notification', notification) 7 | 8 | function notification() { 9 | return { 10 | restrict: 'E', 11 | template: require('./notification')(), 12 | scope: { 13 | config: '=' 14 | }, 15 | controller: ['CONSTANTS', '$sce', controller], 16 | controllerAs: 'vm' 17 | } 18 | } 19 | 20 | function controller(CONSTANTS, $sce){ 21 | var vm = this 22 | vm.defaultHeight = CONSTANTS.VIDEO_DEFAULT_HEIGHT 23 | vm.expanded = false 24 | vm.toggle = toggle 25 | vm.loadImage = loadImage 26 | vm.videoUrl = videoUrl 27 | 28 | activate() 29 | 30 | function activate(){ 31 | 32 | } 33 | 34 | function toggle(){ 35 | vm.expanded = !vm.expanded 36 | } 37 | 38 | function loadImage(image){ 39 | return require('../../../assets/images/news/' + image) 40 | } 41 | 42 | function videoUrl(url){ 43 | return $sce.trustAsResourceUrl(url) 44 | } 45 | } 46 | })() 47 | -------------------------------------------------------------------------------- /app/directives/on-file-change.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | // Gets around Angular's inability to bind to file input's change event 7 | // See https://github.com/angular/angular.js/issues/1375 8 | angular.module('tcUIComponents').directive('onFileChange', onFileChangeDirective) 9 | 10 | onFileChangeDirective.$inject = [] 11 | 12 | function onFileChangeDirective() { 13 | return { 14 | restrict: 'A', 15 | link: function(scope, element, attr, ctrl) { 16 | element.bind('change', function() { 17 | scope.vm.onFileChange(element[0].files[0]) 18 | this.value = '' 19 | }) 20 | } 21 | } 22 | } 23 | 24 | })() 25 | -------------------------------------------------------------------------------- /app/directives/onoffswitch/onoffswitch.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('onoffSwitch', onoffSwitch) 7 | 8 | function onoffSwitch() { 9 | return { 10 | restrict: 'E', 11 | template: require('./onoffswitch')(), 12 | scope: { 13 | model: '=', 14 | uniqueId: '=' 15 | } 16 | } 17 | } 18 | })() 19 | -------------------------------------------------------------------------------- /app/directives/onoffswitch/onoffswitch.jade: -------------------------------------------------------------------------------- 1 | .onoffswitch 2 | input.onoffswitch-checkbox(type='checkbox', name='onoffswitch', checked='', ng-model="model", id="{{uniqueId}}-onoffswitch") 3 | label.onoffswitch-label(for='{{uniqueId}}-onoffswitch') 4 | span.onoffswitch-inner 5 | span.onoffswitch-switch -------------------------------------------------------------------------------- /app/directives/page-state-header/page-state-header.jade: -------------------------------------------------------------------------------- 1 | .page-state-header 2 | header 3 | .page-info 4 | h1 {{pageTitle | track}} 5 | 6 | div(ng-transclude) 7 | 8 | .info 9 | .item 10 | .value 11 | p(ng-bind="vm.activeChallenges") 12 | .title 13 | p Active Challenges 14 | .item(ng-if="!hideMoney") 15 | .value 16 | p.number(ng-bind="vm.moneyEarned | currency:'$':0") 17 | .title 18 | p Won in Prizes 19 | .badgeItem(ng-if="vm.dashboardAchievement") 20 | .dashboardBadge 21 | img( width=200 alt='{{vm.dashboardBadgeName}}' height=200 src=require("../../../assets/images/badge.png")) -------------------------------------------------------------------------------- /app/directives/preventEventPropagation.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('preventEventPropagation', preventEventPropagation) 7 | 8 | preventEventPropagation.$inject = ['$timeout', '$parse'] 9 | 10 | function preventEventPropagation($timeout, $parse) { 11 | return function(scope, element, attr) { 12 | element.bind('click', function(evt) { 13 | evt.stopPropagation() 14 | }) 15 | } 16 | } 17 | })() 18 | -------------------------------------------------------------------------------- /app/directives/profile-widget/profile-widget.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('profileWidget', ['CONSTANTS', 'ProfileService', profileWidget]) 7 | 8 | function profileWidget(CONSTANTS, ProfileService) { 9 | return { 10 | restrict: 'E', 11 | template: require('./profile-widget')(), 12 | scope: { 13 | profile: '=profile', 14 | editProfileLink: '=editProfileLink', 15 | numWins: '=numWins', 16 | profileVm: '=profileVm' 17 | }, 18 | link: function(scope, elem, attrs) { 19 | scope.DOMAIN = CONSTANTS.domain 20 | scope.ASSET_PREFIX = CONSTANTS.ASSET_PREFIX 21 | 22 | scope.handleColor = ProfileService.getUserHandleColor(scope.profile) 23 | scope.$watch('editProfileLink', function(newValue, oldValue, scope) { 24 | if (newValue) { 25 | scope.editProfileLink = newValue 26 | } 27 | }) 28 | } 29 | } 30 | } 31 | })() 32 | -------------------------------------------------------------------------------- /app/directives/progress-bar/progress-bar.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('progressBar', progressBar) 7 | 8 | progressBar.$inject = ['$parse'] 9 | 10 | function progressBar($parse) { 11 | return { 12 | restrict: 'E', 13 | template: require('./progress-bar')(), 14 | link: function(scope, element, attr) { 15 | var model = $parse(attr.completed) 16 | var msg = attr.message 17 | var progress = angular.element(element[0].querySelector('.progress-bar__bar--completed')) 18 | 19 | scope.$watch(model, function(newValue, oldValue) { 20 | scope.completed = Math.round(newValue) 21 | scope.message = msg 22 | progress.css('width', scope.completed + '%') 23 | }) 24 | } 25 | } 26 | } 27 | })() 28 | -------------------------------------------------------------------------------- /app/directives/progress-bar/progress-bar.jade: -------------------------------------------------------------------------------- 1 | .progress-bar 2 | .progress-bar__bar 3 | .progress-bar__bar--completed 4 | .progress-bar__summary 5 | span(ng-bind="completed") 6 | span % {{message}} -------------------------------------------------------------------------------- /app/directives/responsive-carousel/responsive-carousel.jade: -------------------------------------------------------------------------------- 1 | .tc-carousel 2 | ul(rn-carousel, rn-carousel-controls, slide-count="{{slideCounts[carouselIndex]}}") 3 | li(ng-repeat="slides in slidesCollection") 4 | .slide(ng-repeat="item in slides") 5 | tc-transclude -------------------------------------------------------------------------------- /app/directives/skill-tile/skill-tile.jade: -------------------------------------------------------------------------------- 1 | a(ng-click="enableHide && toggle()", ng-class="{'skill-hidden': skill.hidden, 'new': skill.isNew}") 2 | .skill-icon(ng-switch="skill.category") 3 | .remove-indicator 4 | 5 | .hidden-indicator 6 | 7 | img(ng-switch-when="DEVELOP", ng-src="{{ASSET_PREFIX}}images/skills/id-{{skill.tagId}}.svg", fallback-src="{{ASSET_PREFIX}}images/skills/id-develop.svg") 8 | 9 | img(ng-switch-when="DESIGN", ng-src="{{ASSET_PREFIX}}images/skills/id-{{skill.tagId}}.svg", fallback-src="{{ASSET_PREFIX}}images/skills/id-design.svg") 10 | 11 | img(ng-switch-when="DATA_SCIENCE", ng-src="{{ASSET_PREFIX}}images/skills/id-{{skill.tagId}}.svg", fallback-src="{{ASSET_PREFIX}}images/skills/id-data.svg") 12 | 13 | .name {{skill.tagName | characters: 20:false}} 14 | -------------------------------------------------------------------------------- /app/directives/srm-tile/srm-tile.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import _ from 'lodash' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular.module('tcUIComponents').directive('srmTile', function() { 8 | return { 9 | restrict: 'E', 10 | template: require('./srm-tile')(), 11 | scope: { 12 | srm: '=srm', 13 | view: '=', 14 | showResults: '=', 15 | showFooter: '=', 16 | userId: '=' 17 | }, 18 | controller: ['$scope', '$filter', 'CONSTANTS', 'SRMService', function($scope, $filter, CONSTANTS, SRMService) { 19 | $scope.DOMAIN = CONSTANTS.domain 20 | $scope.CONSTANTS = CONSTANTS 21 | $scope.srm.userStatus = _.get($scope.srm, 'userStatus', null) 22 | SRMService.processSRM($scope.srm) 23 | $scope.roundId = $scope.srm.rounds.length && $scope.srm.rounds[0].id 24 | $scope.division = $scope.srm.result && $scope.srm.result.division 25 | }] 26 | } 27 | }) 28 | })() 29 | -------------------------------------------------------------------------------- /app/directives/tc-banner/tc-banner.jade: -------------------------------------------------------------------------------- 1 | .tc-banner-placeholder(class="{{vm.theme}}") 2 | .image 3 | img(ng-src="{{vm.img}}") 4 | .title(ng-bind="vm.title", ng-show="vm.title !== null") 5 | .content(ng-transclude, ng-show="transcluded") 6 | .description(ng-bind-html="vm.description", ng-show="vm.description !== null") 7 | .ctas 8 | .cta(ng-repeat="link in vm.ctas") 9 | a(class="{{link.cssClass}}", title="{{link.title}}", ng-href="{{link.url}}", ng-if="link.url") {{link.title}} 10 | a(class="{{link.cssClass}}", title="{{link.title}}", ui-sref="{{link.state}}", ng-if="link.state") {{link.title}} 11 | a(class="{{link.cssClass}}", title="{{link.title}}", ng-click="vm.handleClick(link)", ng-if="link.eventName") {{link.title}} 12 | -------------------------------------------------------------------------------- /app/directives/tc-endless-paginator/tc-endless-paginator.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('tcEndlessPaginator', function() { 7 | return { 8 | restrict: 'E', 9 | replace: true, 10 | template: require('./tc-endless-paginator')(), 11 | scope: { 12 | state: '=', 13 | pageParams: '=' 14 | }, 15 | controller: ['$scope', function($scope) { 16 | $scope.loadMore = function() { 17 | $scope.pageParams.currentOffset += $scope.pageParams.limit 18 | $scope.pageParams.updated++ 19 | } 20 | }] 21 | } 22 | }) 23 | })() 24 | -------------------------------------------------------------------------------- /app/directives/tc-endless-paginator/tc-endless-paginator.jade: -------------------------------------------------------------------------------- 1 | div.paginator 2 | tc-section(state="state") 3 | button.tc-btn.tc-btn-s(ng-show="pageParams.totalCount > pageParams.currentCount && firstLoadMore", ng-click="loadMore()") Load More 4 | -------------------------------------------------------------------------------- /app/directives/tc-file-input/tc-file-input.jade: -------------------------------------------------------------------------------- 1 | .tc-file-field__label 2 | label.tc-label {{labelText}} 3 | span.lowercase(ng-if="showFileType") {{ ' *(.' + fileType + ')'}} 4 | 5 | .tc-file-field__inputs 6 | .tc-label__wrapper 7 | input.tc-file-field__input(type="text", placeholder="{{placeholder}}", disabled) 8 | 9 | span.tc-label__asterisk.lowercase(ng-if="mandatory") #[span *]mandatory 10 | 11 | button.tc-btn(ng-click="selectFile()") {{buttonText}} 12 | 13 | input.none(name="{{fieldId}}", type="file", required, ng-model="ngModel") 14 | -------------------------------------------------------------------------------- /app/directives/tc-form-stockart/tc-form-stockart.jade: -------------------------------------------------------------------------------- 1 | .fieldset(ng-repeat="(stockartId, stockart) in formStockarts") 2 | button.clean.remove-section(type="button", ng-click="deleteStockartFieldset(stockartId)") 3 | 4 | tc-input.fieldset__input( 5 | label-text="Photo URL", 6 | placeholder="www.istockphoto.com", 7 | input-value="stockart.sourceUrl", 8 | input-name="photoURL{{stockartId}}", 9 | input-required="formStockarts[stockartId].isPhotoURLRequired", 10 | input-pattern="urlRegEx", 11 | maxlength="250" 12 | ) 13 | 14 | .tc-error-messages(ng-show="submissionForm['photoURL' + stockartId].$dirty && submissionForm['photoURL' + stockartId].$invalid && submissionForm['photoURL' + stockartId].$error.pattern") 15 | p Please enter a valid url. 16 | 17 | button.fieldset__button.tc-btn.tc-btn-s(type="button", ng-click="createAdditionalStockartFieldset()", ng-disabled="isButtonDisabled()") + Add Stock Photo 18 | -------------------------------------------------------------------------------- /app/directives/tc-fp-file-input/tc-fp-file-input.jade: -------------------------------------------------------------------------------- 1 | .tc-file-field__label 2 | label.tc-label {{labelText}} 3 | //- span.lowercase(ng-if="showFileType") {{ ' *(.' + fileType + ')'}} 4 | 5 | .tc-file-field__inputs 6 | .tc-label__wrapper 7 | span.tc-label__asterisk.lowercase(ng-if="mandatory") #[span *]mandatory 8 | input.tc-file-field__input( 9 | data-name="{{fieldId}}", 10 | type="filepicker-dragdrop", 11 | ng-model="ngModel", 12 | ng-required="mandatory", 13 | data-fp-button-text="Pick A File", 14 | on-success="onFileSeleted(event.fpfile)" 15 | ) 16 | -------------------------------------------------------------------------------- /app/directives/tc-input/tc-input.jade: -------------------------------------------------------------------------------- 1 | label.tc-label {{labelText}} 2 | 3 | .tc-label__wrapper 4 | p.tc-label__asterisk(ng-if="inputRequired && showAsteriskText") #[span *]{{asteriskText}} 5 | 6 | input( 7 | name="{{inputName}}", 8 | type="{{inputType}}", 9 | placeholder="{{placeholder}}", 10 | ng-model="inputValue", 11 | ng-pattern="inputPattern", 12 | ng-required="inputRequired", 13 | ng-disabled="inputDisabled", 14 | maxlength="{{maxlength}}", 15 | ng-change="onChange()" 16 | ) 17 | -------------------------------------------------------------------------------- /app/directives/tc-paginator/tc-paginator.jade: -------------------------------------------------------------------------------- 1 | .pager(ng-show="vm.pageParams.totalCount > 0") 2 | a.prev(ng-click="vm.prevPage()", ng-class="{disabled: !vm.prevPageAvailable}") Previous 3 | .status 4 | span Showing   5 | span.first(ng-bind="vm.pageParams.offset + 1") 6 | span - 7 | span.last(ng-bind="vm.pageParams.offset + vm.pageParams.count") 8 | span   of   9 | span.total(ng-bind="vm.pageParams.totalCount") 10 | a.next(ng-click="vm.nextPage()", ng-class="{disabled: !vm.nextPageAvailable}") Next -------------------------------------------------------------------------------- /app/directives/tc-section/tc-section.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('tcSection', function() { 7 | return { 8 | restrict: 'E', 9 | transclude: true, 10 | replace: true, 11 | template: require('./tc-section')(), 12 | scope: { 13 | state: '=state' 14 | }, 15 | controller: ['logger', '$scope', '$element', function(logger, $scope, $element) { 16 | logger.debug('state ', $scope.state) 17 | $element.addClass('tc-section') 18 | $scope.errMsg = 'Whoops! Something went wrong. Please try again later.' 19 | }] 20 | } 21 | }) 22 | })() 23 | -------------------------------------------------------------------------------- /app/directives/tc-section/tc-section.jade: -------------------------------------------------------------------------------- 1 | section(ng-switch="state") 2 | .section-loading(ng-transclude, ng-switch-when="loading") 3 | 4 | .section-error(ng-switch-when="error") 5 | p {{errMsg}} 6 | 7 | div(ng-transclude, ng-switch-when="ready") 8 | -------------------------------------------------------------------------------- /app/directives/tc-tabs/tc-tabs.jade: -------------------------------------------------------------------------------- 1 | .tab-panel 2 | 3 | ul.tab-set 4 | li.tab-pill(ng-repeat="tab in tabSet.tabs") 5 | a(ng-click="tabSet.setTab(tab)", ng-class="{'selected': tab.active}") 6 | .header(ng-class="{'selected': tab.active}") {{tab.heading}} 7 | 8 | .tab-view(ng-transclude) 9 | -------------------------------------------------------------------------------- /app/directives/tc-textarea/tc-textarea.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('tcTextarea', tcTextarea) 7 | 8 | function tcTextarea() { 9 | return { 10 | restrict: 'E', 11 | template: require('./tc-textarea')(), 12 | scope: { 13 | labelText: '@', 14 | placeholder: '@', 15 | characterCount: '=', 16 | characterCountMax: '@', 17 | value: '=' 18 | } 19 | } 20 | } 21 | })() 22 | -------------------------------------------------------------------------------- /app/directives/tc-textarea/tc-textarea.jade: -------------------------------------------------------------------------------- 1 | label.tc-label.tc-textarea__label {{labelText}} 2 | span.tc-textarea__char-count(ng-if="characterCount") 3 | span.tc-textarea__char-count--current {{value.length || 0}} 4 | 5 | span {{' / ' + characterCountMax}} 6 | 7 | textarea(placeholder="{{placeholder}}", ng-model="value", maxlength="{{characterCountMax}}") 8 | -------------------------------------------------------------------------------- /app/directives/tc-transclude.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('tcTransclude', function() { 7 | return { 8 | link: function($scope, $element, $attrs, controller, $transclude) { 9 | if (!$transclude) { 10 | /*eslint no-undef:0*/ 11 | // Should this minErr even be here? 12 | throw minErr('ngTransclude')('orphan', 13 | 'Illegal use of ngTransclude directive in the template! ' + 14 | 'No parent directive that requires a transclusion found. ' + 15 | 'Element: {0}') 16 | } 17 | var innerScope = $scope.$new() 18 | $transclude(innerScope, function(clone) { 19 | $element.empty() 20 | $element.append(clone) 21 | $element.on('$destroy', function() { 22 | innerScope.$destroy() 23 | }) 24 | }) 25 | } 26 | } 27 | }) 28 | })() 29 | -------------------------------------------------------------------------------- /app/directives/tcui-components.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents', ['dcbImgFallback', 'blocks.logger', 'toaster']) 7 | })() 8 | -------------------------------------------------------------------------------- /app/directives/track-toggle/track-toggle.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tcUIComponents').directive('trackToggle', trackToggle) 7 | 8 | function trackToggle() { 9 | return { 10 | restrict: 'E', 11 | template: require('./track-toggle')(), 12 | scope: { 13 | tracks: '=tracks' 14 | } 15 | } 16 | } 17 | })() 18 | -------------------------------------------------------------------------------- /app/filters/add-beginning-space.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('addBeginningSpace', addBeginningSpace) 7 | 8 | function addBeginningSpace() { 9 | return function(input) { 10 | return ' ' + input 11 | } 12 | } 13 | })() 14 | -------------------------------------------------------------------------------- /app/filters/deadline-msg.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import moment from 'moment' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular.module('topcoder').filter('deadlineStartMsg', deadlineStartMsg) 8 | 9 | function deadlineStartMsg() { 10 | return function(input) { 11 | if (moment(input).fromNow().indexOf('in') == 0) { 12 | return 'begins' 13 | } 14 | if (moment(input).fromNow().indexOf('ago') != -1) { 15 | return 'began' 16 | } 17 | return '' 18 | } 19 | } 20 | 21 | angular.module('topcoder').filter('deadlineEndMsg', deadlineEndMsg) 22 | 23 | function deadlineEndMsg() { 24 | return function(input) { 25 | if (moment(input).fromNow().indexOf('in') == 0) { 26 | return 'ends' 27 | } 28 | if (moment(input).fromNow().indexOf('ago') != -1) { 29 | return 'ended' 30 | } 31 | return '' 32 | } 33 | } 34 | 35 | })() 36 | -------------------------------------------------------------------------------- /app/filters/empty.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('empty', empty) 7 | 8 | function empty() { 9 | return function(str, defaultVal) { 10 | if (str === 0) { 11 | return str 12 | } else if (!str || (typeof str === 'number' && isNaN(str)) || (typeof str === 'string' && (str.length === 0 || str.indexOf('NaN') >= 0 || str === '%'))) { 13 | return defaultVal || '-' 14 | } else { 15 | return str 16 | } 17 | } 18 | } 19 | 20 | })() 21 | -------------------------------------------------------------------------------- /app/filters/external-link-color.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('externalLinkColor', externalLinkColor) 7 | 8 | function externalLinkColor() { 9 | return function(provider) { 10 | provider = provider.replace(/ /g, '').toLowerCase() 11 | 12 | var providerColors = { 13 | 'el-weblinks': '#82A0AA', 14 | 'el-bitbucket': '#205081', 15 | 'el-dribbble': '#EA4C89', 16 | 'el-linkedin': '#127CB5', 17 | 'el-twitter': '#62AADC', 18 | 'el-stackoverflow': '#E5712A', 19 | 'el-behance': '#188CFC', 20 | 'el-github': '#4B3D74' 21 | } 22 | 23 | return providerColors[provider] || '#D1D3D4' 24 | } 25 | } 26 | })() 27 | -------------------------------------------------------------------------------- /app/filters/listRoles.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('listRoles', listRoles) 7 | 8 | function listRoles() { 9 | return function(roles) { 10 | if (!roles) { 11 | return 'No assigned role.' 12 | } 13 | 14 | var rolesString = roles.join(', ') 15 | 16 | if (rolesString.length > 60) { 17 | return rolesString.slice(0, 57) + '...' 18 | } else { 19 | return rolesString 20 | } 21 | } 22 | } 23 | 24 | })() 25 | -------------------------------------------------------------------------------- /app/filters/local-time.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import jstz from 'jstimezonedetect' 3 | import moment from 'moment-timezone' 4 | 5 | (function() { 6 | 'use strict' 7 | 8 | angular.module('topcoder').filter('localTime', localTime) 9 | 10 | function localTime() { 11 | var timezone = jstz.determine().name() 12 | return function(input, format) { 13 | format = format ? format : 'MM/DD/YY hh:mm a z' 14 | return moment(input).tz(timezone).format(format) 15 | } 16 | } 17 | 18 | })() 19 | -------------------------------------------------------------------------------- /app/filters/location.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('displayLocation', DisplayLocation) 7 | 8 | function DisplayLocation() { 9 | return function(components) { 10 | return components.filter(function(x) { 11 | return x 12 | }).join(', ') 13 | } 14 | } 15 | 16 | })() 17 | -------------------------------------------------------------------------------- /app/filters/npad.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('npad', npad) 7 | 8 | function npad() { 9 | return function(input, n) { 10 | if(input === undefined) input = '' 11 | var inputStr = input 12 | if (typeof input !== 'string') { 13 | inputStr = input.toString() 14 | } 15 | if(inputStr.length >= n) 16 | return inputStr 17 | var zeros = new Array( n + 1 ).join('0') 18 | return (zeros + inputStr).slice(-1 * n) 19 | } 20 | } 21 | })() 22 | -------------------------------------------------------------------------------- /app/filters/ordinal.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('ordinal', ordinal) 7 | 8 | function ordinal() { 9 | return function(x, onlySuffix) { 10 | x += '' 11 | var y = x.charAt(x.length - 1) 12 | var suffix 13 | switch (y) { 14 | case '1': 15 | suffix = 'st' 16 | break 17 | case '2': 18 | suffix = 'nd' 19 | break 20 | case '3': 21 | suffix = 'rd' 22 | break 23 | default: 24 | suffix = 'th' 25 | } 26 | 27 | if (onlySuffix) { 28 | return suffix 29 | } 30 | 31 | return x + suffix 32 | } 33 | } 34 | 35 | })() 36 | -------------------------------------------------------------------------------- /app/filters/percentage.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('percentage', percentage) 7 | 8 | function percentage() { 9 | return function(x) { 10 | return Math.round(x * 100) + '%' 11 | } 12 | } 13 | 14 | })() 15 | -------------------------------------------------------------------------------- /app/filters/role.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('role', RoleFilter) 7 | 8 | function RoleFilter() { 9 | var map = { 10 | 'DESIGN' : 'Designer', 11 | 'DEVELOP': 'Developer', 12 | 'DATA_SCIENCE': 'Data Scientist', 13 | 'COPILOT': 'Copilot' 14 | } 15 | return function(tracks) { 16 | if (tracks) { 17 | if (typeof tracks === 'string') 18 | return map[tracks] 19 | else 20 | return tracks.map(function(track) { 21 | return map[track.toUpperCase()] 22 | }) 23 | } 24 | return '' 25 | } 26 | } 27 | 28 | })() 29 | -------------------------------------------------------------------------------- /app/filters/ternary.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('ternary', ternary) 7 | 8 | /** 9 | * This filter enable conditional statment for angular expression. 10 | * usage: {{ expression | ternary : value1 : value2}} 11 | */ 12 | function ternary() { 13 | return function (input, trueValue, falseValue) { 14 | return input ? trueValue : falseValue 15 | } 16 | } 17 | 18 | })() 19 | -------------------------------------------------------------------------------- /app/filters/time-diff.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import moment from 'moment' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular.module('topcoder').filter('timeDiff', timeDiff) 8 | 9 | function timeDiff() { 10 | return function(input, type) { 11 | var fromNow = moment(input).fromNow(true) 12 | 13 | // Split into components: ['an', 'hour'] || ['2', 'months'] 14 | var timeAndUnit = fromNow.split(' ') 15 | 16 | if (timeAndUnit[0] === 'a' || timeAndUnit[0] === 'an') { 17 | timeAndUnit[0] = '1' 18 | } 19 | if (type == 'quantity') { 20 | return timeAndUnit[0] 21 | } else if (type == 'unit') { 22 | return timeAndUnit[1] 23 | } else { 24 | return timeAndUnit 25 | } 26 | } 27 | } 28 | 29 | })() 30 | -------------------------------------------------------------------------------- /app/filters/underscore-strip.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('underscoreStrip', underscoreStrip) 7 | 8 | function underscoreStrip() { 9 | return function(string) { 10 | var map = { 11 | 'ASSEMBLY_COMPETITION': 'ASSEMBLY' 12 | } 13 | if (map[string]) { 14 | return map[string] 15 | } 16 | if (!string) { 17 | return '' 18 | } 19 | return string.replace(/_/g, ' ') 20 | } 21 | } 22 | 23 | })() 24 | -------------------------------------------------------------------------------- /app/filters/url-protocol.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('topcoder').filter('urlProtocol', urlProtocol) 7 | 8 | function urlProtocol() { 9 | return function(link) { 10 | if (!link) { 11 | return link 12 | } 13 | var result 14 | var startingUrl = 'http://' 15 | var httpsStartingUrl = 'https://' 16 | if(link.indexOf(startingUrl) === 0||link.indexOf(httpsStartingUrl) === 0) { 17 | result = link 18 | } else { 19 | result = startingUrl + link 20 | } 21 | return result 22 | } 23 | } 24 | 25 | })() 26 | -------------------------------------------------------------------------------- /app/fontTest/fontTest.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'ngCookies', 10 | 'tc.services', 11 | 'tcUIComponents', 12 | 'angularSlideables', 13 | 'ngDialog', 14 | 'react' 15 | ] 16 | 17 | angular.module('tc.fontTest', dependencies) 18 | 19 | })() 20 | -------------------------------------------------------------------------------- /app/layout/footer/account-footer.jade: -------------------------------------------------------------------------------- 1 | .account-footer 2 | p.copyright-notice © {{vm.currentYear}} Topcoder. All Rights Reserved 3 | -------------------------------------------------------------------------------- /app/layout/footer/footer.controller.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | 3 | export default class FooterController { 4 | constructor() { 5 | this.currentYear = moment().format('YYYY') 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/layout/header/account-header.jade: -------------------------------------------------------------------------------- 1 | header.topcoder-header 2 | .container 3 | -------------------------------------------------------------------------------- /app/layout/layout.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import FooterController from './footer/footer.controller' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular 8 | .module('tc.layout', []) 9 | .controller('FooterController', FooterController) 10 | })() 11 | -------------------------------------------------------------------------------- /app/listings/listings.jade: -------------------------------------------------------------------------------- 1 | react-component.listings(name="ChallengeFiltersExample" props="reactProps" watch-depth="reference" id="react-component") 2 | -------------------------------------------------------------------------------- /app/listings/listings.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import { ChallengeFiltersExample } from 'appirio-tech-react-components' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | var dependencies = [ 8 | 'angular-jwt', 9 | 'ui.router', 10 | 'ngCookies', 11 | 'tc.services', 12 | 'tcUIComponents', 13 | 'angularSlideables', 14 | 'ngDialog', 15 | 'react' 16 | ] 17 | 18 | angular.module('tc.listings', dependencies) 19 | .value('ChallengeFiltersExample', ChallengeFiltersExample.default) 20 | 21 | })() 22 | -------------------------------------------------------------------------------- /app/member-search/member-search.directive.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import { MemberSearchApp } from 'topcoder-app-r/src/indexTest' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular.module('tc.search').directive('memberSearch', memberSearch) 8 | 9 | memberSearch.$inject = ['reactDirective'] 10 | 11 | function memberSearch(reactDirective) { 12 | return reactDirective(MemberSearchApp) 13 | } 14 | })() 15 | -------------------------------------------------------------------------------- /app/member-search/member-search.jade: -------------------------------------------------------------------------------- 1 | div#member-search-wrapper 2 | member-search 3 | -------------------------------------------------------------------------------- /app/member-search/member-search.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.search', []) 7 | })() 8 | -------------------------------------------------------------------------------- /app/member-search/member-search.routes.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.search').config([ 7 | '$stateProvider', 8 | routes 9 | ]) 10 | 11 | function routes($stateProvider) { 12 | var states = { 13 | 'memberSearch': { 14 | url: '/search/members/', 15 | parent: 'root', 16 | data: { 17 | title: 'Member Search' 18 | }, 19 | views: { 20 | 'header@': { 21 | template: require('../layout/header/header')(), 22 | controller: 'HeaderController', 23 | controllerAs: 'vm' 24 | }, 25 | 'container@': { 26 | template: require('./member-search')() 27 | }, 28 | 'footer@': {} 29 | } 30 | } 31 | } 32 | for (var name in states) { 33 | var state = states[name] 34 | $stateProvider.state(name, state) 35 | } 36 | } 37 | })() 38 | -------------------------------------------------------------------------------- /app/my-challenges/my-challenges.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'restangular', 10 | 'ngCookies', 11 | 'angularSlideables', 12 | 'tcUIComponents', 13 | 'topcoder', 14 | 'dcbImgFallback', 15 | 'angular.filter' 16 | ] 17 | 18 | angular.module('tc.myChallenges', dependencies) 19 | })() 20 | -------------------------------------------------------------------------------- /app/my-challenges/my-challenges.routes.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.myChallenges').config([ 7 | '$stateProvider', 8 | routes 9 | ]) 10 | 11 | function routes($stateProvider) { 12 | var states = { 13 | 'my-challenges': { 14 | url: '/my-challenges/?:status', 15 | parent: 'root', 16 | template: require('./my-challenges')(), 17 | controller: 'MyChallengesController', 18 | controllerAs: 'vm', 19 | data: { 20 | authRequired: true, 21 | title: 'My Challenges' 22 | }, 23 | resolve: { 24 | userIdentity: ['UserService', function(UserService) { 25 | return UserService.getUserIdentity() 26 | }] 27 | } 28 | } 29 | } 30 | 31 | for (var name in states) { 32 | var state = states[name] 33 | $stateProvider.state(name, state) 34 | } 35 | } 36 | })() 37 | -------------------------------------------------------------------------------- /app/my-dashboard/community-updates/community-updates.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tc.myDashboard').controller('CommunityUpdatesController', CommunityUpdatesController) 7 | 8 | CommunityUpdatesController.$inject = ['BlogService', 'logger'] 9 | 10 | // Access and parses the blog RSS feed 11 | function CommunityUpdatesController(BlogService, logger) { 12 | var vm = this 13 | vm.loading = true 14 | 15 | activate() 16 | 17 | function activate() { 18 | BlogService.getBlogFeed() 19 | .then(function(data) { 20 | vm.loading = false 21 | vm.blogPosts = data 22 | }) 23 | .catch(function(err) { 24 | vm.loading = false 25 | 26 | logger.error('Could not fetch blog feed', err) 27 | }) 28 | } 29 | } 30 | })() 31 | -------------------------------------------------------------------------------- /app/my-dashboard/community-updates/community-updates.jade: -------------------------------------------------------------------------------- 1 | header 2 | h1.section-title From the Community Blog 3 | 4 | .section-loading(ng-show="vm.loading") 5 | 6 | .posts(ng-hide="vm.loading") 7 | .post(ng-repeat='blog in vm.blogPosts | orderBy : pubDate | limitTo : 4') 8 | .blog-link 9 | a(ng-href='{{blog.link}}', target='_blank', title="{{blog.title}}") {{blog.title}} 10 | 11 | .description(ng-bind-html="blog.description") 12 | 13 | .blog-links(ng-hide="vm.loading") 14 | a(ng-href="https://www.{{DOMAIN}}/blog/") View More 15 | -------------------------------------------------------------------------------- /app/my-dashboard/header-dashboard/header-dashboard.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tc.myDashboard').controller('HeaderDashboardController', HeaderDashboardController) 7 | 8 | HeaderDashboardController.$inject = ['$stateParams', 'profile'] 9 | 10 | function HeaderDashboardController($stateParams, profile) { 11 | var vm = this 12 | vm.profile = profile 13 | 14 | activate() 15 | 16 | function activate() {} 17 | } 18 | })() 19 | -------------------------------------------------------------------------------- /app/my-dashboard/header-dashboard/header-dashboard.jade: -------------------------------------------------------------------------------- 1 | page-state-header(handle="{{vm.profile.handle}}", page-title="Dashboard", hide-money="false") 2 | 3 | -------------------------------------------------------------------------------- /app/my-dashboard/my-dashboard.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import _ from 'lodash' 3 | 4 | (function () { 5 | 'use strict' 6 | 7 | angular.module('tc.myDashboard').controller('MyDashboardController', MyDashboardController) 8 | 9 | MyDashboardController.$inject = ['userIdentity', 'ProfileService', 'logger'] 10 | 11 | function MyDashboardController(userIdentity, ProfileService, logger) { 12 | var vm = this 13 | 14 | activate() 15 | 16 | function activate() { 17 | vm.showSRMs = false 18 | vm.isCopilot = _.includes(userIdentity.roles, 'copilot') 19 | 20 | displaySRMsBasedOnTrack() 21 | } 22 | 23 | function displaySRMsBasedOnTrack() { 24 | ProfileService.getUserProfile(userIdentity.handle) 25 | .then(function(userProfile) { 26 | var isDesigner = _.includes(userProfile.tracks, 'DESIGN') 27 | 28 | if (isDesigner && userProfile.tracks.length === 1) { 29 | vm.showSRMs = false 30 | } else { 31 | vm.showSRMs = true 32 | } 33 | }) 34 | .catch(function(err) { 35 | vm.showSRMs = false 36 | 37 | logger.error('Could not get user profile data', err) 38 | }) 39 | } 40 | } 41 | })() 42 | -------------------------------------------------------------------------------- /app/my-dashboard/my-dashboard.jade: -------------------------------------------------------------------------------- 1 | .header-dashboard(ui-view="header-dashboard") 2 | 3 | .my-dashboard-container 4 | .subtrack-stats(id="stats", ui-view="subtrack-stats") 5 | 6 | .notifications(ui-view="notifications") 7 | 8 | .challenges(id="challenges", ui-view="my-challenges") 9 | 10 | .srms(id="srms", ui-view="srms", ng-show="dashboard.showSRMs") 11 | 12 | .programs(id="community", ui-view="programs") 13 | 14 | .community-updates(ui-view="community-updates") 15 | -------------------------------------------------------------------------------- /app/my-dashboard/my-dashboard.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'restangular', 10 | 'ngCookies', 11 | 'angularSlideables', 12 | 'tcUIComponents', 13 | 'dcbImgFallback', 14 | 'angular.filter' 15 | ] 16 | 17 | angular.module('tc.myDashboard', dependencies) 18 | })() 19 | -------------------------------------------------------------------------------- /app/my-dashboard/my-dashboard.spec.js: -------------------------------------------------------------------------------- 1 | /*eslint no-undef:0*/ 2 | const mockData = require('../../tests/test-helpers/mock-data') 3 | 4 | describe('Dashboard Controller', function() { 5 | var controller, identity, profileService 6 | var mockProfile = mockData.getMockProfile() 7 | 8 | beforeEach(function() { 9 | bard.appModule('topcoder') 10 | bard.inject(this, '$controller', '$q') 11 | 12 | profileService = { 13 | getUserProfile: function() { 14 | return $q.when({result: {content: mockProfile}}) 15 | } 16 | } 17 | }) 18 | 19 | identity = function() { 20 | return { 21 | handle: 'albertwang', 22 | userId: 123456 23 | } 24 | } 25 | 26 | bard.verifyNoOutstandingHttpRequests() 27 | 28 | beforeEach(function() { 29 | controller = $controller('MyDashboardController', { 30 | userIdentity: identity, 31 | ProfileService: profileService 32 | }) 33 | }) 34 | 35 | it('should exist', function() { 36 | expect(controller).to.exist 37 | expect(controller.isCopilot).to.equal(false) 38 | }) 39 | }) 40 | -------------------------------------------------------------------------------- /app/my-dashboard/notifications/news.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "header": "Algorithm, Marathon, Regionals, & More!", 4 | "details": "TCO18 news is here! Find out the details for Algorithm & Marathon Competitions, regional events, and more!", 5 | "headerExpand": "TCO18 News - Algorithm, Marathon, Regionals, & More!", 6 | "detailsExpand": "TCO18 news is here! Find out the details for Algorithm & Marathon Competitions, regional events, and more!", 7 | "backgroundImageDesktop": "tco18news-desktop.jpg", 8 | "backgroundImageTablet": "tco18news-tablet.jpg", 9 | "backgroundImageMobile": "tco18news-mobile.jpg", 10 | "redirectTo": "https://www.topcoder.com/blog/tco18-marathon-algorithm-competitions-announced/", 11 | "redirectText": "Read More", 12 | "customTag": { 13 | "text": "TCO18 News" 14 | }, 15 | "live": false, 16 | "liveExpand": false, 17 | "videoCode": "", 18 | "isEmpty": false 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /app/my-dashboard/notifications/notifications.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.myDashboard').controller('NotificationsController', NotificationsController) 7 | 8 | function NotificationsController () { 9 | var vm = this 10 | vm.news = [] 11 | 12 | activate() 13 | 14 | function activate() { 15 | vm.news = require('./news.json') 16 | } 17 | } 18 | })() 19 | -------------------------------------------------------------------------------- /app/my-dashboard/notifications/notifications.jade: -------------------------------------------------------------------------------- 1 | .no-news(ng-show="vm.news.length===0") NO NEWS RIGHT NOW 2 | .has-news(ng-show="vm.news.length>0") 3 | notification(ng-repeat="config in vm.news", config="config") 4 | 5 | .banners 6 | // 7 | to add more banners here, just create a new a.banner element under .banner-row element, 8 | each .banner-row element will occupy a whole row in page, and all a.banner elements under 9 | it will have same width, you can create a new .banner-row if you want place more banners 10 | in a new row 11 | .banner-row 12 | a.banner.tco18(href="https://tco18.topcoder.com/",target="_blank",rel="noopener noreferrer") 13 | a.banner.watson(href="https://cognitive.topcoder.com/") 14 | img(src=require("../../../assets/images/logo_white.png"), alt="TCO17") 15 | -------------------------------------------------------------------------------- /app/my-dashboard/programs/programs.jade: -------------------------------------------------------------------------------- 1 | header(ng-hide="vm.loading || !vm.registered") 2 | h1.section-title #[span iOS] Community 3 | 4 | .section-loading(ng-show="vm.loading") 5 | 6 | section.ios(ng-hide="vm.loading") 7 | .unregistered(ng-hide="vm.registered") 8 | empty-state-placeholder(state-name="dashboard-ios-community", show="!vm.registered", theme="sky") 9 | 10 | .registered(ng-show="vm.registered") 11 | .badge-and-challenges 12 | .registered-badge 13 | .flex-wrapper 14 | p iOS Community 15 | 16 | .badge-timeline 17 | img(src=require("../../../assets/images/member-program/svg/Member-06.svg"), alt="Development Challenge Icon") 18 | 19 | a.tc-btn.tc-btn-s.tc-btn-ghost.tc-btn-wide(href="http://ios.{{vm.domain}}", title="topcoder iOS Member Program") View Challenges 20 | 21 | ios-card(ng-repeat="challenge in vm.challenges | orderBy:reviewType:true| orderBy:registrationEndDate:true", challenge="challenge", view="'tile'") 22 | -------------------------------------------------------------------------------- /app/my-dashboard/srms/srms.jade: -------------------------------------------------------------------------------- 1 | header 2 | h1.section-title Single Round Matches 3 | 4 | 5 | .section-loading(ng-show="vm.loading") 6 | 7 | tc-section(state="vm.state") 8 | .srm-tiles 9 | srm-tile(ng-repeat="srm in vm.srms", srm="srm", view="'tile'", ng-class="'tile-view'", user-id="vm.userId") 10 | 11 | .srm-links-card 12 | .flex-wrapper 13 | h2 Practice on past problems 14 | 15 | a.tc-btn.tc-btn-s.tc-btn-wide.tc-btn-ghost(ng-href="https://arena.{{DOMAIN}}/#/u/practiceProblemList") Practice Problems 16 | 17 | a.tc-btn.tc-btn-s.tc-btn-wide.tc-btn-ghost(ng-href="https://community.{{DOMAIN}}/tc?module=ProblemArchive") Problem Archive 18 | 19 | a.tc-btn.tc-btn-s.tc-btn-wide.tc-btn-ghost(ng-href="https://www.{{DOMAIN}}/member-onboarding/learning-practicing-skills/") Learn More 20 | 21 | .srms-links(ng-hide="vm.loading") 22 | a(ui-sref="my-srms") View Past SRMs 23 | 24 | a(ng-href="https://arena.{{DOMAIN}}") Launch Arena 25 | -------------------------------------------------------------------------------- /app/my-srms/my-srms.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'restangular', 10 | 'ngCookies', 11 | 'angularSlideables', 12 | 'tcUIComponents', 13 | 'topcoder', 14 | 'dcbImgFallback', 15 | 'angular.filter' 16 | ] 17 | 18 | angular.module('tc.mySRMs', dependencies) 19 | })() 20 | -------------------------------------------------------------------------------- /app/my-srms/my-srms.routes.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.mySRMs').config([ 7 | '$stateProvider', 8 | routes 9 | ]) 10 | 11 | function routes($stateProvider) { 12 | var states = { 13 | 'my-srms': { 14 | url: '/my-srms/', 15 | parent: 'root', 16 | template: require('./my-srms')(), 17 | controller: 'MySRMsController', 18 | controllerAs: 'vm', 19 | data: { 20 | authRequired: true, 21 | title: 'My SRMs' 22 | } 23 | } 24 | } 25 | 26 | for (var name in states) { 27 | var state = states[name] 28 | $stateProvider.state(name, state) 29 | } 30 | } 31 | })() 32 | -------------------------------------------------------------------------------- /app/peer-review/peer-review.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'ngCookies', 10 | 'angularSlideables' 11 | ] 12 | 13 | angular.module('tc.peer-review', dependencies) 14 | 15 | })() 16 | -------------------------------------------------------------------------------- /app/peer-review/readOnlyScorecard/readOnlyScorecard.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.peer-review').controller('ReadOnlyScorecardController', ReadOnlyScorecardController) 7 | 8 | ReadOnlyScorecardController.$inject = ['$stateParams', 'ScorecardService', 'Helpers'] 9 | 10 | function ReadOnlyScorecardController($stateParams, ScorecardService, Helpers) { 11 | var scorecardId = $stateParams.scorecardId 12 | var vm = this 13 | vm.loaded = false 14 | vm.scorecard = {} 15 | 16 | activate() 17 | 18 | function activate() { 19 | ScorecardService.getScorecardById(scorecardId) 20 | .then(function(response) { 21 | var scorecardData = response[0] 22 | vm.scorecard.name = scorecardData.name 23 | 24 | ScorecardService.getScorecardQuestions(scorecardId) 25 | .then(function(data) { 26 | vm.scorecard.questions = {} 27 | 28 | var questions = data 29 | 30 | Helpers.storeById(vm.scorecard.questions, questions) 31 | Helpers.parseQuestions(vm.scorecard.questions) 32 | 33 | vm.loaded = true 34 | }) 35 | }) 36 | } 37 | } 38 | })() 39 | -------------------------------------------------------------------------------- /app/peer-review/readOnlyScorecard/readOnlyScorecard.jade: -------------------------------------------------------------------------------- 1 | .read-only-scorecard-container(ng-show="vm.loaded") 2 | .scorecard-container 3 | .challenge-info 4 | img(src=require("../../../assets/images/swift-logo.png")) 5 | 6 | h1(ng-bind="vm.scorecard.name") 7 | 8 | hr 9 | 10 | form#read-only(name="scorecard") 11 | .scorecard(ng-repeat="q in vm.scorecard.questions") 12 | h5.description {{q.description}} 13 | 14 | p.guidelines(ng-if="q.questionTypeId === 5", ng-repeat="guideline in q.guidelines track by $index") {{guideline}} 15 | -------------------------------------------------------------------------------- /app/peer-review/review-status/review-status.filter.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.peer-review').filter('reviewStatus', function() { 7 | return function(input) { 8 | var status = 'Not Submitted' 9 | if (input === 1) { 10 | status = 'Completed' 11 | } 12 | return status 13 | } 14 | }) 15 | })() 16 | -------------------------------------------------------------------------------- /app/profile/badges/badges.jade: -------------------------------------------------------------------------------- 1 | .ngdialog-close.close-outside 2 | 3 | header.head 4 | .breadcrumbs 5 | .handle 6 | img.profile-circle(fallback-src=require("../../../assets/images/avatarPlaceholder.png"), ng-src="{{vm.profile.photoURL}}") 7 | 8 | span.handle 9 | | {{vm.userHandle}} 10 | 11 | span.space  //  12 | 13 | span.title BADGES 14 | 15 | aside.badges 16 | .ngdialog-close 17 | .content 18 | .badgeGroups 19 | .groupBadge(ng-repeat='ag in vm.achievementGroups', ng-class='ag.groupClass', ng-show='ag.specificAchievements[0].active') 20 | span.subBadge.hpLogo(ng-if="ag.groupClass.substring(0 , 9) === 'HP-Badges'") 21 | span.subBadge(ng-repeat='achievement in ag.specificAchievements', ng-class="(achievement.isStudio ? 'Studio-' : '') + achievement.specificClass + ' ' + ( achievement.active | ternary : 'selected' : '' )", badge-tooltip, badge='achievement') 22 | .footer-badges 23 | .singleBadge(ng-class=" achievement.groupClass + ' ' + (achievement.active | ternary : 'selected' : '' ) ", ng-repeat='achievement in vm.singleAchievements', ng-show='achievement.active', badge-tooltip, badge='achievement') 24 | -------------------------------------------------------------------------------- /app/profile/profile.jade: -------------------------------------------------------------------------------- 1 | .profile-container 2 | ui-view(ng-cloak) 3 | -------------------------------------------------------------------------------- /app/profile/profile.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'angular-jwt', 8 | 'ui.router', 9 | 'ngCookies', 10 | 'tc.services', 11 | 'tcUIComponents', 12 | 'angularSlideables', 13 | 'ngDialog' 14 | ] 15 | 16 | angular.module('tc.profile', dependencies) 17 | 18 | })() 19 | -------------------------------------------------------------------------------- /app/profile/subtrack/copilot/copilot.jade: -------------------------------------------------------------------------------- 1 | .copilot.design(ng-if="vm.track == 'COPILOT'") 2 | .top 3 | ul.horizontal-stats 4 | li.stat 5 | .value {{vm.typeStats.activeContests | empty}} 6 | .name ACTIVE CHALLENGES 7 | 8 | li.stat 9 | .value {{vm.typeStats.activeProjects | empty}} 10 | .name ACTIVE PROJECTS 11 | 12 | li.stat 13 | .value {{vm.typeStats.contests | empty}} 14 | .name TOTAL CHALLENGES 15 | 16 | li.stat 17 | .value {{vm.typeStats.projects | empty}} 18 | .name TOTAL PROJECTS 19 | 20 | li.stat 21 | .value {{vm.typeStats.fulfillment + '%' | empty}} 22 | .name FULFILLMENT 23 | -------------------------------------------------------------------------------- /app/profile/subtrack/data/data-challenges.jade: -------------------------------------------------------------------------------- 1 | .data.develop(ng-if="vm.track == 'DATA_SCIENCE'") 2 | 3 | section 4 | .challenges(ng-hide="vm.subTrack === 'SRM'") 5 | .challenge.tile(ng-repeat="challenge in vm.challenges") 6 | challenge-tile(challenge="challenge", domain="vm.domain", view="'tile'") 7 | 8 | .no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0") 9 | | Sorry, no successful challenges found. 10 | 11 | .challenges(ng-show="vm.subTrack == 'SRM'") 12 | .challenge.tile(ng-repeat="challenge in vm.challenges") 13 | srm-tile(srm="challenge", domain="vm.domain", view="'tile'", user-id="profileVm.profile.userId") 14 | 15 | .no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0") 16 | | Sorry, no rated SRMs found. 17 | 18 | tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams") 19 | -------------------------------------------------------------------------------- /app/profile/subtrack/design/design-challenges.jade: -------------------------------------------------------------------------------- 1 | .design(ng-if="vm.track == 'DESIGN'") 2 | 3 | section 4 | .challenges 5 | .challenge.tile(ng-repeat="challenge in vm.challenges") 6 | challenge-tile(challenge="challenge", domain="vm.domain", view="'tile'") 7 | 8 | .no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0") 9 | | Sorry, no successful challenges found. 10 | 11 | tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams") 12 | -------------------------------------------------------------------------------- /app/profile/subtrack/design/design-statistics.jade: -------------------------------------------------------------------------------- 1 | .design(ng-if="vm.track == 'DESIGN'") 2 | 3 | .bottom 4 | h2.detailed Details 5 | 6 | ul.vertical-stats 7 | li.first 8 | .left Win Percentage 9 | .right {{vm.typeStats.winPercent | percentage | empty}} 10 | 11 | li(ng-if="profileVm.isUser") 12 | .left Inquiries 13 | .right {{vm.typeStats.numInquiries | empty}} 14 | 15 | li(ng-if="profileVm.isUser") 16 | .left Submissions 17 | .right {{vm.typeStats.submissions | empty}} 18 | 19 | li 20 | .left Submission Rate 21 | .right {{vm.typeStats.submissionRate | percentage | empty}} 22 | 23 | li.first(ng-if="profileVm.isUser") 24 | .left Passed Screening 25 | .right {{vm.typeStats.passedScreening | empty}} 26 | 27 | li 28 | .left Screening Success Rate 29 | .right {{vm.typeStats.screeningSuccessRate | percentage | empty}} 30 | 31 | li 32 | .left Average Placement 33 | .right {{vm.typeStats.avgPlacement | number: 2 | empty}} 34 | -------------------------------------------------------------------------------- /app/profile/subtrack/develop/develop-challenges.jade: -------------------------------------------------------------------------------- 1 | .develop(ng-if="vm.track == 'DEVELOP'") 2 | 3 | section 4 | 5 | .challenges 6 | 7 | .challenge.tile(ng-repeat="challenge in vm.challenges") 8 | challenge-tile(challenge="challenge", domain="vm.domain", view="'tile'") 9 | 10 | .no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0") 11 | | Sorry, no successful challenges found. 12 | 13 | tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams") 14 | -------------------------------------------------------------------------------- /app/services/authv3.module.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import angular from 'angular' 4 | require('angular-jwt') 5 | import { getFreshToken, configureConnector } from 'tc-accounts' 6 | 7 | configureConnector({ 8 | connectorUrl: process.env.ACCOUNTS_APP_CONNECTOR_URL, 9 | frameId: 'tc-accounts-iframe' 10 | }) 11 | 12 | const dependencies = ['angular-jwt'] 13 | 14 | const config = function($httpProvider, jwtInterceptorProvider) { 15 | function jwtInterceptor() { 16 | return getFreshToken() 17 | } 18 | 19 | jwtInterceptorProvider.tokenGetter = jwtInterceptor 20 | 21 | $httpProvider.interceptors.push('jwtInterceptor') 22 | } 23 | 24 | config.$inject = ['$httpProvider', 'jwtInterceptorProvider'] 25 | 26 | angular.module('appirio-tech-ng-auth', dependencies).config(config) 27 | 28 | // These must come after the module definition 29 | require('./userv3.service.js') -------------------------------------------------------------------------------- /app/services/group.service.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tc.services').factory('GroupService', GroupService) 7 | 8 | GroupService.$inject = ['ApiService'] 9 | 10 | function GroupService(ApiService) { 11 | var service = ApiService.restangularV3 12 | 13 | // Retrieves the registration status of the member for the given program 14 | service.getMembers = function(userId, programId) { 15 | return service.one('groups',programId).one('members').get() 16 | } 17 | 18 | // Registers the given member for the given program. 19 | service.addMember = function(userId, programId) { 20 | return service.one('groups', programId).one('members').customPOST({ 21 | memberId : userId +'', membershipType : 'user' 22 | }) 23 | } 24 | 25 | return service 26 | } 27 | })() 28 | -------------------------------------------------------------------------------- /app/services/memberCert.service.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tc.services').factory('MemberCertService', MemberCertService) 7 | 8 | MemberCertService.$inject = ['ApiService'] 9 | 10 | function MemberCertService(ApiService) { 11 | var service = ApiService.restangularV3 12 | 13 | // Retrieves the registration status of the member for the given program 14 | service.getMemberRegistration = function(userId, programId) { 15 | return service.one('memberCert/registrations', userId).one('programs', programId).get() 16 | } 17 | 18 | // Retrieves the status of the logged in member for the peer badge 19 | service.peerBadgeCompleted = function(programId) { 20 | return service.all('badges').one('isCompleted').get({filter: 'eventId=' + programId}) 21 | } 22 | 23 | // Registers the given member for the given program. 24 | service.registerMember = function(userId, programId) { 25 | return service.one('memberCert/registrations', userId).one('programs', programId).post() 26 | } 27 | 28 | return service 29 | } 30 | })() 31 | -------------------------------------------------------------------------------- /app/services/services.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import Auth0 from 'auth0-js' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | var dependencies = [ 8 | 'CONSTANTS', 9 | 'ngCookies', 10 | 'angular-storage', 11 | 'angular-jwt', 12 | 'auth0', 13 | 'restangular', 14 | 'ngIsoConstants.services', 15 | 'blocks.logger' 16 | ] 17 | 18 | angular.module('tc.services', dependencies) 19 | .config(['authProvider', 'CONSTANTS', function(authProvider, CONSTANTS) { 20 | authProvider.init({ 21 | domain: CONSTANTS.AUTH0_DOMAIN, 22 | clientID: CONSTANTS.AUTH0_CLIENT_ID, 23 | sso: false 24 | }, Auth0) 25 | 26 | }]) 27 | .factory('UserPrefStore', ['store', function(store) { 28 | return store.getNamespacedStore('userSettings') 29 | }]) 30 | })() 31 | -------------------------------------------------------------------------------- /app/services/tags.service.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.services').factory('TagsService', TagsService) 7 | 8 | TagsService.$inject = ['ApiService'] 9 | 10 | function TagsService(ApiService) { 11 | var api = ApiService.restangularV3 12 | 13 | var service = { 14 | getApprovedSkillTags: getApprovedSkillTags 15 | } 16 | 17 | return service 18 | 19 | ///////////////////////////// 20 | 21 | function getApprovedSkillTags() { 22 | return api.all('tags') 23 | .withHttpConfig({skipAuthorization: true}) 24 | .getList({filter: 'domain=SKILLS&status=APPROVED'}) 25 | } 26 | } 27 | })() 28 | -------------------------------------------------------------------------------- /app/services/tcAuth.service.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | import { getCurrentUser, logout as doLogout } from './userv3.service.js' 3 | 4 | (function() { 5 | 'use strict' 6 | 7 | angular.module('tc.services').factory('TcAuthService', TcAuthService) 8 | 9 | TcAuthService.$inject = ['CONSTANTS', '$rootScope', '$q', 'logger', '$timeout', 'UserService', 'AuthTokenService', 'Helpers', 'ApiService', 'store', '$http'] 10 | 11 | function TcAuthService(CONSTANTS, $rootScope, $q, logger, $timeout, UserService, AuthTokenService, Helpers, ApiService, store, $http) { 12 | var service = { 13 | logout: logout, 14 | isAuthenticated: isAuthenticated 15 | } 16 | return service 17 | 18 | function logout() { 19 | // logout of all browsers 20 | return doLogout().then(function() { 21 | $rootScope.$broadcast(CONSTANTS.EVENT_USER_LOGGED_OUT) 22 | // resolve the promise 23 | return true 24 | }) 25 | } 26 | 27 | function isAuthenticated() { 28 | return !!getCurrentUser() && !!AuthTokenService.getV2Token() && !!AuthTokenService.getTCSSOToken() 29 | } 30 | 31 | } 32 | })() 33 | -------------------------------------------------------------------------------- /app/services/userv3.service.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import angular from 'angular' 4 | require('./authv3.module.js') 5 | 6 | import { registerUser} from 'tc-accounts/core/auth.js' 7 | import { decodeToken, getFreshToken, logout as doLogout } from 'tc-accounts' 8 | 9 | let currentUser = null 10 | 11 | export function loadUser() { 12 | function loadUserSuccess(token) { 13 | const decodedToken = decodeToken( token ) 14 | 15 | if (decodedToken.userId) { 16 | currentUser = decodedToken 17 | currentUser.id = currentUser.userId 18 | currentUser.token = token 19 | } 20 | 21 | return currentUser 22 | } 23 | 24 | return getFreshToken().then(loadUserSuccess) 25 | } 26 | 27 | export function getCurrentUser() { 28 | return currentUser 29 | } 30 | 31 | export function createUser(body) { 32 | return registerUser(body) 33 | } 34 | 35 | export function logout() { 36 | return doLogout().then( () => { 37 | currentUser = null 38 | }) 39 | } 40 | 41 | const UserV3Service = function() { 42 | return { 43 | getCurrentUser: getCurrentUser, 44 | createUser: createUser, 45 | loadUser: loadUser 46 | } 47 | } 48 | 49 | angular.module('appirio-tech-ng-auth').factory('UserV3Service', UserV3Service) -------------------------------------------------------------------------------- /app/settings/preferences/preferences.jade: -------------------------------------------------------------------------------- 1 | .preferences-container 2 | ul 3 | li 4 | a(href="https://apps.{{DOMAIN}}/forums/?module=Settings", target="_blank") 5 | .icon 6 | i.fa.fa-comment 7 | span Forum Preferences 8 | .description Change how forums are displayed and when you're notified regarding activity 9 | 10 | li 11 | a(href="https://community.{{DOMAIN}}/tc?module=EditPaymentPreferences", target="_blank") 12 | .icon 13 | i.fa.fa-credit-card 14 | span Payment Preferences 15 | .description Select your preferred payment method and set accrual limits 16 | 17 | li 18 | a(href="https://community.{{DOMAIN}}/tc?module=VisaSelection", target="_blank") 19 | .icon 20 | i.fa.fa-user 21 | span Invitation Letter 22 | .description Need a visa letter for a Topcoder event? Get one here. 23 | 24 | li 25 | a(href="https://community.{{DOMAIN}}/tc?module=ViewReferrals", target="_blank") 26 | .icon 27 | i.fa.fa-users 28 | span Referrals 29 | .description If you participated in our past referral program, see who registered using your invitation link 30 | -------------------------------------------------------------------------------- /app/settings/settings.controller.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | angular.module('tc.settings').controller('SettingsController', SettingsController) 7 | 8 | SettingsController.$inject = ['$state', 'userHandle'] 9 | 10 | function SettingsController($state, userHandle) { 11 | var vm = this 12 | vm.userHandle = userHandle 13 | 14 | activate() 15 | 16 | function activate() { 17 | if ($state.$current.name === 'settings') { 18 | $state.go('settings.profile') 19 | } 20 | } 21 | } 22 | 23 | })() 24 | -------------------------------------------------------------------------------- /app/settings/settings.jade: -------------------------------------------------------------------------------- 1 | .settings-container 2 | .page-header 3 | page-state-header(handle="{{settings.userHandle}}", page-title="settings", hide-money="true", show-back-link="false", default-state="dashboard") 4 | 5 | nav 6 | ul 7 | li 8 | a(ui-sref="settings.profile", ui-sref-active="active-tab") Profile 9 | 10 | li 11 | a(ui-sref="settings.account", ui-sref-active="active-tab") Account 12 | 13 | li 14 | a(ui-sref="settings.email", ui-sref-active="active-tab") Email 15 | 16 | li 17 | a(ui-sref="settings.preferences", ui-sref-active="active-tab") Preferences 18 | 19 | ui-view 20 | -------------------------------------------------------------------------------- /app/settings/settings.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'ui.router', 8 | 'tc.services', 9 | 'tcUIComponents', 10 | 'toaster' 11 | ] 12 | 13 | angular.module('tc.settings', dependencies) 14 | 15 | })() 16 | -------------------------------------------------------------------------------- /app/settings/settings.spec.js: -------------------------------------------------------------------------------- 1 | /*eslint no-undef:0*/ 2 | describe('Settings Controller', function() { 3 | var vm 4 | 5 | beforeEach(function() { 6 | bard.appModule('tc.settings') 7 | bard.inject(this, '$controller', '$state') 8 | var mockState = { '$current' : {'name': 'test'}} 9 | vm = $controller('SettingsController', { 10 | '$state': mockState, 11 | 'userHandle': 'test' 12 | }) 13 | }) 14 | 15 | bard.verifyNoOutstandingHttpRequests() 16 | 17 | it('should be created successfully', function() { 18 | expect(vm).to.exist 19 | }) 20 | }) 21 | -------------------------------------------------------------------------------- /app/sitemap/sitemap.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.sitemap', []) 7 | })() 8 | -------------------------------------------------------------------------------- /app/sitemap/sitemap.routes.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | angular.module('tc.sitemap').config([ 7 | '$stateProvider', 8 | routes 9 | ]) 10 | 11 | function routes($stateProvider) { 12 | var states = { 13 | 'sitemap': { 14 | parent: 'root', 15 | abstract: false, 16 | url: '/sitemap/', 17 | template: require('./sitemap')() 18 | } 19 | } 20 | 21 | for (var name in states) { 22 | var state = states[name] 23 | $stateProvider.state(name, state) 24 | } 25 | } 26 | })() 27 | -------------------------------------------------------------------------------- /app/skill-picker/skill-picker.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'ui.router', 8 | 'tc.services', 9 | 'tcUIComponents' 10 | ] 11 | 12 | angular.module('tc.skill-picker', dependencies) 13 | 14 | })() 15 | -------------------------------------------------------------------------------- /app/submissions/submissions.jade: -------------------------------------------------------------------------------- 1 | .panel-page 2 | .panel-header.flex.space-between(ng-if="!submissions.challengeError") 3 | a.panel-header__back-button.flex.space-between.middle(ng-href="https://www.{{DOMAIN}}/challenge-details/{{submissions.challengeId}}/?type={{submissions.track}}") 4 | 5 | //- TODO: Replace below with svg tag 6 | .icon-arrow 7 | 8 | p Back 9 | 10 | h1.panel-header__title(ng-bind="submissions.challengeTitle") 11 | 12 | ui-view 13 | -------------------------------------------------------------------------------- /app/submissions/submissions.module.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | var dependencies = [ 7 | 'ui.router', 8 | 'tc.services', 9 | 'tcUIComponents', 10 | 'toaster', 11 | 'appirio-tech-ng-ui-components', 12 | 'angular-filepicker' 13 | ] 14 | 15 | angular.module('tc.submissions', dependencies) 16 | .config(['filepickerProvider', 'CONSTANTS', 17 | function (filepickerProvider, CONSTANTS) { 18 | filepickerProvider.setKey(CONSTANTS.FILE_PICKER_API_KEY) 19 | } 20 | ]) 21 | 22 | })() 23 | -------------------------------------------------------------------------------- /app/topcoder.interceptors.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular' 2 | 3 | (function() { 4 | 'use strict' 5 | 6 | function JwtConfig($httpProvider, jwtInterceptorProvider) { 7 | jwtInterceptorProvider.tokenGetter = ['config', 'JwtInterceptorService', function(config, JwtInterceptorService) { 8 | return JwtInterceptorService.getToken(config) 9 | }] 10 | return $httpProvider.interceptors.push('jwtInterceptor') 11 | } 12 | 13 | angular.module('topcoder').config(['$httpProvider', 'jwtInterceptorProvider', JwtConfig]) 14 | 15 | })() 16 | -------------------------------------------------------------------------------- /app/topcoder.interceptors.spec.js: -------------------------------------------------------------------------------- 1 | /*eslint no-undef:0*/ 2 | import angular from 'angular' 3 | 4 | describe('Topcoder Http Interceptors', function() { 5 | describe('Http Provider', function() { 6 | 7 | var httpProvider 8 | 9 | beforeEach(angular.mock.module('topcoder', function($httpProvider) { 10 | httpProvider = $httpProvider 11 | })) 12 | 13 | it('should have added jwtInterceptor as http interceptor', angular.mock.inject(function() { 14 | expect(httpProvider.interceptors).to.contain('jwtInterceptor') 15 | })) 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /assets/css/community/community.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .community-view { 4 | background: $gray-lighter; 5 | color: $community-text-dark; 6 | 7 | .header-community { 8 | @include module-full-width; 9 | background-color: $white; 10 | @include font-with-weight('Sofia Pro', 500); 11 | box-shadow: 0 0 3px 0 rgba(0, 0, 0, .3); 12 | 13 | header { 14 | text-align: center; 15 | margin: 0 auto; 16 | padding: 16px 0 13px; 17 | 18 | h1 { 19 | font-size: 22px; 20 | line-height: 26px; 21 | text-transform: uppercase; 22 | } 23 | } 24 | 25 | @media only screen and (min-width: 1000px) { 26 | box-shadow: none; 27 | 28 | header { 29 | text-align: left; 30 | padding: 33px 0 37px 128px; 31 | 32 | h1 { 33 | font-size: 32px; 34 | } 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /assets/css/directives/external-link-deletion-confirm.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .ngdialog.tc-dialog { 4 | .ngdialog-content { 5 | background: transparent; 6 | opacity: 1; 7 | } 8 | } 9 | 10 | .deletion-confirmation { 11 | display: flex; 12 | flex-flow: column wrap; 13 | justify-content: space-around; 14 | align-items: center; 15 | background-color: $white; 16 | opacity: 1; 17 | border-radius: 4px; 18 | padding: 40px; 19 | } 20 | 21 | .deletion-confirmation-title { 22 | @include sofia-pro-medium; 23 | font-size: 20px; 24 | line-height: 24px; 25 | color: $gray-darkest; 26 | text-transform: uppercase; 27 | } 28 | 29 | .deletion-confirmation-message { 30 | @include font-with-weight('Merriweather Sans', 300); 31 | 32 | .deletion-confirmation-account-title { 33 | font-style: italic; 34 | } 35 | } 36 | 37 | .deletion-confirmation-buttons { 38 | display: flex; 39 | flex-flow: row wrap; 40 | 41 | .deletion-confirmation-button-no { 42 | margin-left: 10px; 43 | } 44 | } 45 | 46 | 47 | 48 | @media (min-width: 768px) { 49 | .deletion-confirmation { 50 | width: 520px; 51 | height: 256px; 52 | } 53 | } -------------------------------------------------------------------------------- /assets/css/directives/external-web-link.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | external-web-link { 4 | .web-link { 5 | margin: 6px 0 31px 0; 6 | 7 | .form-errors { 8 | position: initial; 9 | width: 100%; 10 | } 11 | 12 | form { 13 | display: flex; 14 | flex-flow: row wrap; 15 | 16 | .form-label { 17 | @include sofia-pro-regular; 18 | font-size: 12px; 19 | color: black; 20 | text-transform: uppercase; 21 | margin-bottom: 5px; 22 | margin-top: 5px; 23 | } 24 | .form-field { 25 | @include form-field; 26 | 27 | &:disabled { 28 | color: #B7B7B7; 29 | } 30 | } 31 | .form-field-focused { 32 | @include form-field-focused; 33 | } 34 | 35 | .validation-bar.url { 36 | flex: 1; 37 | width: auto; 38 | 39 | &:before { 40 | height: 40px; 41 | } 42 | } 43 | 44 | input.url { 45 | width: 100%; 46 | margin: 0px; 47 | } 48 | 49 | button { 50 | width: auto; 51 | margin-left: 10px; 52 | } 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /assets/css/directives/progress-bar.directive.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .progress-bar { 4 | .progress-bar__bar { 5 | background-color: $gray-light; 6 | height: 10px; 7 | 8 | .progress-bar__bar--completed { 9 | background-color: $dark-blue; 10 | height: 100%; 11 | } 12 | } 13 | 14 | .progress-bar__summary { 15 | @include font-with-weight('Sofia Pro', 500); 16 | font-size: 12px; 17 | line-height: 14px; 18 | color: $accent-gray-dark; 19 | margin-top: 20px; 20 | } 21 | } -------------------------------------------------------------------------------- /assets/css/directives/tc-endless-paginator.scss: -------------------------------------------------------------------------------- 1 | .paginator { 2 | display: flex; 3 | align-items: center; 4 | flex-direction: column; 5 | section { 6 | min-height: auto; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/css/directives/tc-paginator.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .tc-paginator { 4 | display: flex; 5 | flex-flow: row wrap; 6 | justify-content: space-between; 7 | margin-right: 10px; 8 | margin-bottom: 10px; 9 | 10 | a { 11 | text-decoration: underline; 12 | 13 | &.disabled { 14 | text-decoration: none; 15 | color: $dark-gray; 16 | cursor: default; 17 | } 18 | 19 | &.prev { 20 | text-transform: uppercase; 21 | } 22 | &.next { 23 | text-transform: uppercase; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /assets/css/directives/tc-section.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .tc-section { 4 | min-height: 100px; 5 | 6 | .section-loading { 7 | width: 100%; 8 | min-width: 50px; 9 | min-height: 100px; 10 | background: url(../../images/ripple.gif) no-repeat center center; 11 | } 12 | 13 | .section-error { 14 | width: 100%; 15 | min-height: 100px; 16 | background: $white; 17 | border-top: 1px solid $gray-light; 18 | display: flex; 19 | justify-content: center; 20 | align-items: center; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /assets/css/directives/tc-sticky.scss: -------------------------------------------------------------------------------- 1 | // .affix { 2 | // position:fixed !important; 3 | // top: 0; //Change this value to match your needs; 4 | // z-index: 10; 5 | // } -------------------------------------------------------------------------------- /assets/css/directives/tc-tabs.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .tab-panel { 4 | .tab-set { 5 | display: flex; 6 | flex-direction: row; 7 | justify-content: center; 8 | height: 60px; 9 | padding-top: 20px; 10 | padding-bottom: 16px; 11 | border-top: 1px solid $gray-light; 12 | border-bottom: 1px solid $gray-light; 13 | background-color: $gray-lightest; 14 | 15 | li { 16 | height: 30px; 17 | 18 | a { 19 | text-align: center; 20 | color: $accent-gray; 21 | // padding-top: 6px; 22 | 23 | .header { 24 | font-size: 18px; 25 | line-height: 24px; 26 | @include sofia-pro-medium; 27 | text-transform: uppercase; 28 | margin: auto 45px; 29 | 30 | &.selected { 31 | color: $gray-darkest; 32 | padding-bottom: 14px; 33 | border-bottom: solid 2px $primary; 34 | } 35 | } 36 | } 37 | 38 | a:hover { 39 | color: $accent-gray-dark; 40 | } 41 | } 42 | } 43 | } 44 | 45 | .page-header + tc-tab-set { 46 | .tab-panel .tab-set { 47 | border-top: none; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /assets/css/directives/toggle-password-with-tips.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | // Toggle password with password tips directive 4 | toggle-password-with-tips { 5 | display: flex; 6 | flex-direction: row; 7 | align-items: center; 8 | justify-content: space-between; 9 | position: relative; 10 | padding: 0px; 11 | 12 | 13 | input#password-input { 14 | margin-bottom: 0; 15 | outline: 0; 16 | padding-left: 10px; 17 | padding-right: 64px; 18 | height: 100%; 19 | border: none; 20 | } 21 | 22 | label { 23 | display: flex !important; 24 | line-height: 20px !important; 25 | position: absolute; 26 | top: 10px; 27 | right: 0px; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /assets/css/directives/toggle-password.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | // Toggle password directive 4 | toggle-password { 5 | display: flex; 6 | flex-direction: row; 7 | align-items: center; 8 | justify-content: space-between; 9 | position: relative; 10 | padding: 0px; 11 | 12 | input#current-password-input { 13 | margin-bottom: 0; 14 | outline: 0; 15 | width: 100%; 16 | padding-left: 10px; 17 | padding-right: 64px; 18 | height: 100%; 19 | border: none; 20 | } 21 | 22 | label { 23 | display: flex !important; 24 | line-height: 20px !important; 25 | position: absolute; 26 | top: 10px; 27 | right: 0px; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /assets/css/my-dashboard/header-dashboard.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .header-dashboard { 4 | // TODO: Use styleguide class 5 | margin-left: -10px; 6 | margin-right: -10px; 7 | margin-top: -10px; 8 | margin-bottom: 10px; 9 | } 10 | -------------------------------------------------------------------------------- /assets/css/my-dashboard/my-dashboard.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .my-dashboard-container { 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | 8 | .subtrack-stats { 9 | width: 100%; 10 | max-width: 1242px; 11 | background-color: $white; 12 | } 13 | 14 | .challenges, .srms, .programs, .ttl, .community-updates { 15 | @include module-l; 16 | margin-top: 1px; 17 | width: 100%; 18 | 19 | header { 20 | .section-title { 21 | padding-top: 30px; 22 | } 23 | } 24 | } 25 | 26 | .ttl { 27 | .tc-banner-placeholder { 28 | background: url(../../images/team-live-bg.png) repeat; 29 | .image { 30 | img { 31 | width: auto; 32 | } 33 | } 34 | } 35 | } 36 | 37 | 38 | .challenges, .srms, .programs, .ttl, .community-updates { 39 | padding-top: 0px; 40 | } 41 | 42 | .section-title { 43 | @include sofia-pro-medium; 44 | font-size: 24px; 45 | line-height: 29px; 46 | color: $gray-darkest; 47 | text-align: center; 48 | text-transform: uppercase; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /assets/css/peer-review/completed.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .completed-review-container { 4 | 5 | form .scorecard { 6 | .answer { 7 | @include font-with-weight('Merriweather Sans'); 8 | margin: 25px 0; 9 | padding-left: 30px; 10 | } 11 | .comment { 12 | margin: 25px 0; 13 | padding-left: 30px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /assets/css/peer-review/readOnlyScorecard.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .read-only-scorecard-container { 4 | #read-only p:last-child { 5 | margin-bottom: 25px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /assets/css/profile/header.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .profile-container { 4 | display: flex; 5 | flex-direction: column; 6 | align-items: stretch; 7 | 8 | } 9 | 10 | 11 | hr { 12 | width: 100%; 13 | border: 1px solid #dddddd; 14 | margin-bottom: 15px; 15 | } 16 | -------------------------------------------------------------------------------- /assets/css/profile/icons.scss: -------------------------------------------------------------------------------- 1 | .develop-icon { 2 | background-image: url(../../images/ico-track-develop.svg); 3 | background-position:0 0; 4 | background-repeat:no-repeat; 5 | background-size: 40px; 6 | height: 40px; 7 | width: 40px; 8 | } 9 | .design-icon { 10 | background-image: url(../../images/ico-track-design.svg); 11 | font-size: 30px; 12 | background-position:0 0; 13 | background-repeat:no-repeat; 14 | background-size: 40px; 15 | height: 40px; 16 | width: 40px; 17 | } 18 | .data-icon { 19 | background-image: url(../../images/ico-track-data.svg); 20 | background-position:0 0; 21 | background-repeat:no-repeat; 22 | background-size: 40px; 23 | height: 40px; 24 | width: 40px; 25 | } 26 | .copilot-icon { 27 | background-image: url(../../images/ico-track-copilot.svg); 28 | background-position:0 0; 29 | background-repeat:no-repeat; 30 | background-size: 40px; 31 | height: 40px; 32 | width: 40px; 33 | } 34 | -------------------------------------------------------------------------------- /assets/css/settings/update-password.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .update-password-container { 4 | .reset-password form { 5 | display: flex; 6 | flex-direction: column; 7 | 8 | input[name="currentPassword"] { 9 | margin-bottom: 10px; 10 | } 11 | 12 | button { 13 | width: 200px; 14 | } 15 | } 16 | 17 | .form-error { 18 | margin: 0 0 20px 3px; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /assets/css/submissions/submissions.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | .mobile-redirect { 4 | padding: 45px 15px 30px; 5 | // Not showing the mobile version of the page at all 6 | // Delete the line below to show 7 | display: none; 8 | @media screen and (min-width: 768px) { 9 | display: none; 10 | } 11 | } 12 | 13 | .mobile-redirect__title { 14 | margin-bottom: 10px; 15 | @include font-with-weight('Sofia Pro', 500); 16 | font-size: 16px; 17 | line-height: 19px; 18 | color: $gray-darkest; 19 | text-transform: uppercase; 20 | } 21 | 22 | .mobile-redirect__body { 23 | @include font-with-weight('Merriweather Sans'); 24 | font-size: 13px; 25 | font-style: italic; 26 | line-height: 20px; 27 | color: $accent-gray; 28 | text-align: center; 29 | 30 | p { 31 | text-align: left; 32 | } 33 | 34 | a { 35 | &:not(.tc-btn) { 36 | text-align: left; 37 | display: block; 38 | margin-top: 20px; 39 | } 40 | 41 | &.tc-btn { 42 | display: inline-block; 43 | margin-top: 20px; 44 | } 45 | } 46 | } 47 | 48 | .submissions-access-error { 49 | text-align: center; 50 | margin-left: auto; 51 | margin-right: auto; 52 | } 53 | 54 | .icon-arrow { 55 | background-image: url(../../images/ico-arrow-big-left.svg); 56 | } -------------------------------------------------------------------------------- /assets/css/vendors/reactselect.scss: -------------------------------------------------------------------------------- 1 | @import 'topcoder/tc-includes'; 2 | 3 | dropdown .Select { 4 | // Override default style guide transition to remove flickering 5 | input { 6 | transition: all 0s; 7 | } 8 | 9 | .is-open { 10 | > .Select-control { 11 | border-color: #0096FF; 12 | } 13 | } 14 | 15 | .Select-input { 16 | input { 17 | height: 34px; 18 | margin: 0; 19 | padding: 0; 20 | background: none transparent; 21 | border-radius: 0; 22 | border: 0 none; 23 | box-shadow: none; 24 | cursor: default; 25 | line-height: 34px; 26 | font-size: 16px; 27 | 28 | &:focus { 29 | border-width: 0; 30 | box-shadow: none; 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bold-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bold-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bold-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-bolditalic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-light-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-light-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-light-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-light-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-light-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-lightitalic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-regular-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-regular-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-regular-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/merriweather-sans/merriweathersans-regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/merriweather-sans/merriweathersans-regular-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-black.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-black.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-black.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-blackitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-blackitalic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-blackitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-blackitalic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-blackitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-blackitalic.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bold.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bold.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bold.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bolditalic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bolditalic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-bolditalic.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-italic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-italic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-italic.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-light.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-light.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-light.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-lightitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-lightitalic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-lightitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-lightitalic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-lightitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-lightitalic.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-medium.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-medium.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-medium.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-mediumitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-mediumitalic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-mediumitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-mediumitalic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-mediumitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-mediumitalic.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-regular.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-regular.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thin.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thin.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thin.woff -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thinitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thinitalic.eot -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thinitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thinitalic.ttf -------------------------------------------------------------------------------- /assets/fonts/roboto/roboto-thinitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/roboto/roboto-thinitalic.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-bold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-bold-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-light-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-light-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-medium-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-medium-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-regular-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-italic-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sofiapro/sofiapro-semibold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sofiapro/sofiapro-semibold-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Bold-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-It-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-It-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-It-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-It-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-It-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-It-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-It-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-It-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Light-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Regular-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.eot -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.ttf -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/fonts/sourcesanspro/SourceSansPro-Semibold-webfont.woff2 -------------------------------------------------------------------------------- /assets/images/1M-banner-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/1M-banner-hero.png -------------------------------------------------------------------------------- /assets/images/arrow-prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/arrow-prev.png -------------------------------------------------------------------------------- /assets/images/avatarPlaceholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/avatarPlaceholder.png -------------------------------------------------------------------------------- /assets/images/badge-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | badge-card 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/images/badge.grid.large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/badge.grid.large.png -------------------------------------------------------------------------------- /assets/images/badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/badge.png -------------------------------------------------------------------------------- /assets/images/badgeGroup.grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/badgeGroup.grid.png -------------------------------------------------------------------------------- /assets/images/banner-cognitive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/banner-cognitive.jpg -------------------------------------------------------------------------------- /assets/images/banner-tco18-stage-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/banner-tco18-stage-3.jpg -------------------------------------------------------------------------------- /assets/images/banner-watson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/banner-watson.jpg -------------------------------------------------------------------------------- /assets/images/check-box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/check-box.png -------------------------------------------------------------------------------- /assets/images/checkbox-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/checkbox-sprite.png -------------------------------------------------------------------------------- /assets/images/chinese-new-year.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/chinese-new-year.png -------------------------------------------------------------------------------- /assets/images/cognitive-home-hero-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/cognitive-home-hero-title.png -------------------------------------------------------------------------------- /assets/images/cognitive-home-hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/cognitive-home-hero.jpg -------------------------------------------------------------------------------- /assets/images/community-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/community-background.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-ios-challenges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-ios-challenges.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-ios-challenges@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-ios-challenges@2x.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-my-challenges-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-my-challenges-dashboard.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-my-challenges-dashboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-my-challenges-dashboard@2x.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-my-challenges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-my-challenges.png -------------------------------------------------------------------------------- /assets/images/empty-states/pattern-my-challenges@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/empty-states/pattern-my-challenges@2x.png -------------------------------------------------------------------------------- /assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/favicon.ico -------------------------------------------------------------------------------- /assets/images/git-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/git-logo.png -------------------------------------------------------------------------------- /assets/images/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/graph.png -------------------------------------------------------------------------------- /assets/images/happy-holi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/happy-holi.png -------------------------------------------------------------------------------- /assets/images/headerBG.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/headerBG.gif -------------------------------------------------------------------------------- /assets/images/home-hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/home-hero.jpg -------------------------------------------------------------------------------- /assets/images/ico-arrow-big-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ico-arrow-big-right 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/images/ico-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/ico-arrow.png -------------------------------------------------------------------------------- /assets/images/ico-checkmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | checkmark 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/images/ico-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/images/ico-facebook_desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/ico-gallery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ico-gallery 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/images/ico-grid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /assets/images/ico-linkedin_desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/ico-list.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /assets/images/ico-private-prj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/images/ico-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/ico-social.png -------------------------------------------------------------------------------- /assets/images/ico-track-cp-gray.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ico-track-cp-gray 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/images/ico-track-cp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ico-track-cp 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/images/ico-track-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/ico-track-design.png -------------------------------------------------------------------------------- /assets/images/ico-track-develop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/ico-track-develop.png -------------------------------------------------------------------------------- /assets/images/ico-twitter_desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/javascript-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/javascript-logo.png -------------------------------------------------------------------------------- /assets/images/keepcalm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/keepcalm.png -------------------------------------------------------------------------------- /assets/images/learn-and-improve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/learn-and-improve.png -------------------------------------------------------------------------------- /assets/images/learn-and-improve2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/learn-and-improve2x.png -------------------------------------------------------------------------------- /assets/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/loading.gif -------------------------------------------------------------------------------- /assets/images/lock-icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/lock-icon-small.png -------------------------------------------------------------------------------- /assets/images/lock-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/lock-icon.png -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/logo_white.png -------------------------------------------------------------------------------- /assets/images/member-program/break-the-finish-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/break-the-finish-48.png -------------------------------------------------------------------------------- /assets/images/member-program/get-certified-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/get-certified-48.png -------------------------------------------------------------------------------- /assets/images/member-program/get-ready-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/get-ready-48.png -------------------------------------------------------------------------------- /assets/images/member-program/getting-ready-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/getting-ready-48.png -------------------------------------------------------------------------------- /assets/images/member-program/gold-medal-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/gold-medal-48.png -------------------------------------------------------------------------------- /assets/images/member-program/on-starting-line-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/on-starting-line-48.png -------------------------------------------------------------------------------- /assets/images/member-program/peer-badge-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/peer-badge-big.png -------------------------------------------------------------------------------- /assets/images/member-program/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/sprite.png -------------------------------------------------------------------------------- /assets/images/member-program/step-one-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/step-one-48.png -------------------------------------------------------------------------------- /assets/images/member-program/winged-feet-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/member-program/winged-feet-48.png -------------------------------------------------------------------------------- /assets/images/menu_item_placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ico-menu-placeholder 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /assets/images/nav/blog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/book-cp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/book-data.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/book-design.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/book-develop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/book-tutorials.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/community.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/dashboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/events.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/exit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/forums.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/help.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/members.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/profile.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/programs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/rocket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/settings.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/statistics.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/tco-generic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | nav/tco-generic 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /assets/images/nav/track-copilot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/track-cp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/track-data.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/track-design.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/track-develop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/nav/wallet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/news/tco18news-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/news/tco18news-desktop.jpg -------------------------------------------------------------------------------- /assets/images/news/tco18news-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/news/tco18news-mobile.jpg -------------------------------------------------------------------------------- /assets/images/news/tco18news-tablet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/news/tco18news-tablet.jpg -------------------------------------------------------------------------------- /assets/images/npm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/npm-logo.png -------------------------------------------------------------------------------- /assets/images/pi-day.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/pi-day.png -------------------------------------------------------------------------------- /assets/images/predix-home-hero-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/predix-home-hero-title.png -------------------------------------------------------------------------------- /assets/images/predix-home-hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/predix-home-hero.jpg -------------------------------------------------------------------------------- /assets/images/ripple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/ripple.gif -------------------------------------------------------------------------------- /assets/images/search-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/search-icon.png -------------------------------------------------------------------------------- /assets/images/skills/id-105.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/images/skills/id-125.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /assets/images/skills/id-210.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/images/skills/id-269.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/images/skills/id-316.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/images/skills/id-374.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/images/skills/id-378.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/images/skills/id-389.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/images/skills/id-cp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/images/sort-arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/sort-arrows.png -------------------------------------------------------------------------------- /assets/images/stackoverflow-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/stackoverflow-logo.png -------------------------------------------------------------------------------- /assets/images/swift-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/swift-logo.png -------------------------------------------------------------------------------- /assets/images/tc-dashboard-tco17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/tc-dashboard-tco17.png -------------------------------------------------------------------------------- /assets/images/tc-logo-dad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/tc-logo-dad.png -------------------------------------------------------------------------------- /assets/images/team-live-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/team-live-bg.png -------------------------------------------------------------------------------- /assets/images/team-live-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/team-live-logo.png -------------------------------------------------------------------------------- /assets/images/topcoder-logo-dads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/topcoder-logo-dads.png -------------------------------------------------------------------------------- /assets/images/tt-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topcoder-archive/appirio_tech-topcoder-app/85564156bdf5de528e8765b96a665d3f37a458bd/assets/images/tt-arrow.png -------------------------------------------------------------------------------- /assets/scripts/google.analytics.jade: -------------------------------------------------------------------------------- 1 | script(type="text/javascript"). 2 | !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t'),o.close()}("https://assets.zendesk.com/embeddable_framework/main.js","topcoder.zendesk.com"); 3 | /*]]>*/ 4 | --------------------------------------------------------------------------------