├── .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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/images/ico-delete.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/ico-facebook_desktop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/ico-gallery.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/ico-grid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
--------------------------------------------------------------------------------
/assets/images/ico-linkedin_desktop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/ico-list.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
--------------------------------------------------------------------------------
/assets/images/ico-private-prj.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/images/ico-track-cp.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/images/skills/id-125.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-210.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-269.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-316.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-374.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-378.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-389.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/images/skills/id-cp.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------