├── .editorconfig ├── .eslintrc.json ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md ├── stale.yml └── workflows │ ├── build-releases.yml │ ├── lint-and-build.yml │ └── lint-and-build.yml.old ├── .gitignore ├── LICENSE ├── README.md ├── angular.json ├── angular.webpack.js ├── e2e ├── main.spec.ts ├── playwright.config.ts └── tsconfig.e2e.json ├── electron-builder.json ├── main.ts ├── oauth-server.ts ├── package.json ├── postinstall-web.js ├── postinstall.js ├── src ├── app │ ├── app-routing.module.ts │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── components │ │ └── dialogs │ │ │ ├── add-bulk-teams-dialog │ │ │ ├── add-bulk-teams-dialog.component.html │ │ │ ├── add-bulk-teams-dialog.component.scss │ │ │ ├── add-bulk-teams-dialog.component.spec.ts │ │ │ └── add-bulk-teams-dialog.component.ts │ │ │ ├── ban-beatmap │ │ │ ├── ban-beatmap.component.html │ │ │ ├── ban-beatmap.component.scss │ │ │ ├── ban-beatmap.component.spec.ts │ │ │ └── ban-beatmap.component.ts │ │ │ ├── delete-lobby │ │ │ ├── delete-lobby.component.html │ │ │ ├── delete-lobby.component.scss │ │ │ ├── delete-lobby.component.spec.ts │ │ │ └── delete-lobby.component.ts │ │ │ ├── delete-mappool-dialog │ │ │ ├── delete-mappool-dialog.component.html │ │ │ ├── delete-mappool-dialog.component.scss │ │ │ ├── delete-mappool-dialog.component.spec.ts │ │ │ └── delete-mappool-dialog.component.ts │ │ │ ├── delete-mod-bracket-dialog │ │ │ ├── delete-mod-bracket-dialog.component.html │ │ │ ├── delete-mod-bracket-dialog.component.scss │ │ │ ├── delete-mod-bracket-dialog.component.spec.ts │ │ │ └── delete-mod-bracket-dialog.component.ts │ │ │ ├── delete-team-dialog │ │ │ ├── delete-team-dialog.component.html │ │ │ ├── delete-team-dialog.component.scss │ │ │ ├── delete-team-dialog.component.spec.ts │ │ │ └── delete-team-dialog.component.ts │ │ │ ├── delete-tournament-dialog │ │ │ ├── delete-tournament-dialog.component.html │ │ │ ├── delete-tournament-dialog.component.scss │ │ │ ├── delete-tournament-dialog.component.spec.ts │ │ │ └── delete-tournament-dialog.component.ts │ │ │ ├── irc-pick-map-same-mod-bracket │ │ │ ├── irc-pick-map-same-mod-bracket.component.html │ │ │ ├── irc-pick-map-same-mod-bracket.component.scss │ │ │ ├── irc-pick-map-same-mod-bracket.component.spec.ts │ │ │ └── irc-pick-map-same-mod-bracket.component.ts │ │ │ ├── irc-shortcut-dialog │ │ │ ├── irc-shortcut-dialog.component.html │ │ │ ├── irc-shortcut-dialog.component.scss │ │ │ ├── irc-shortcut-dialog.component.spec.ts │ │ │ └── irc-shortcut-dialog.component.ts │ │ │ ├── irc-shortcut-warning-dialog │ │ │ ├── irc-shortcut-warning-dialog.component.html │ │ │ ├── irc-shortcut-warning-dialog.component.scss │ │ │ ├── irc-shortcut-warning-dialog.component.spec.ts │ │ │ └── irc-shortcut-warning-dialog.component.ts │ │ │ ├── join-irc-channel │ │ │ ├── join-irc-channel.component.html │ │ │ ├── join-irc-channel.component.scss │ │ │ ├── join-irc-channel.component.spec.ts │ │ │ └── join-irc-channel.component.ts │ │ │ ├── multiplayer-lobby-move-player │ │ │ ├── multiplayer-lobby-move-player.component.html │ │ │ ├── multiplayer-lobby-move-player.component.scss │ │ │ ├── multiplayer-lobby-move-player.component.spec.ts │ │ │ └── multiplayer-lobby-move-player.component.ts │ │ │ ├── multiplayer-lobby-settings │ │ │ ├── multiplayer-lobby-settings.component.html │ │ │ ├── multiplayer-lobby-settings.component.scss │ │ │ ├── multiplayer-lobby-settings.component.spec.ts │ │ │ └── multiplayer-lobby-settings.component.ts │ │ │ ├── protect-beatmap-dialog │ │ │ ├── protect-beatmap-dialog.component.html │ │ │ ├── protect-beatmap-dialog.component.scss │ │ │ ├── protect-beatmap-dialog.component.spec.ts │ │ │ └── protect-beatmap-dialog.component.ts │ │ │ ├── publish-tournament-dialog │ │ │ ├── publish-tournament-dialog.component.html │ │ │ ├── publish-tournament-dialog.component.scss │ │ │ ├── publish-tournament-dialog.component.spec.ts │ │ │ └── publish-tournament-dialog.component.ts │ │ │ ├── remove-settings │ │ │ ├── remove-settings.component.html │ │ │ ├── remove-settings.component.scss │ │ │ ├── remove-settings.component.spec.ts │ │ │ └── remove-settings.component.ts │ │ │ ├── send-beatmap-result │ │ │ ├── send-beatmap-result.component.html │ │ │ ├── send-beatmap-result.component.scss │ │ │ ├── send-beatmap-result.component.spec.ts │ │ │ └── send-beatmap-result.component.ts │ │ │ ├── send-final-result │ │ │ ├── send-final-result.component.html │ │ │ ├── send-final-result.component.scss │ │ │ ├── send-final-result.component.spec.ts │ │ │ └── send-final-result.component.ts │ │ │ └── tournament-add-user-dialog │ │ │ ├── tournament-add-user-dialog.component.html │ │ │ ├── tournament-add-user-dialog.component.scss │ │ │ ├── tournament-add-user-dialog.component.spec.ts │ │ │ └── tournament-add-user-dialog.component.ts │ ├── core │ │ ├── directive │ │ │ └── clickable-links.directive.ts │ │ └── interceptors │ │ │ └── credentials.interceptor.ts │ ├── interfaces │ │ ├── i-ban-beatmap-dialog-data.ts │ │ ├── i-beatmap-mod-bracket-dialog-data.ts │ │ ├── i-delete-mod-bracket-dialog-data.ts │ │ ├── i-irc-shortcut-command-dialog-data.ts │ │ ├── i-mappool-dialog-data.ts │ │ ├── i-multiplayer-lobby-delete-dialog-data.ts │ │ ├── i-multiplayer-lobby-move-player-dialog-data.ts │ │ ├── i-multiplayer-lobby-send-final-message-dialog-data.ts │ │ ├── i-multiplayer-lobby-settings-dialog-data.ts │ │ ├── i-protect-beatmap-dialog-data.ts │ │ ├── i-send-beatmap-result-dialog-data.ts │ │ ├── i-team-dialog-data.ts │ │ ├── i-tournament-dialog-data.ts │ │ └── i-tournament-invite-dialog-data.ts │ ├── layout │ │ ├── error │ │ │ ├── error.component.html │ │ │ ├── error.component.scss │ │ │ ├── error.component.spec.ts │ │ │ └── error.component.ts │ │ ├── main │ │ │ ├── main.component.html │ │ │ ├── main.component.scss │ │ │ ├── main.component.spec.ts │ │ │ └── main.component.ts │ │ ├── sidebar │ │ │ ├── sidebar.component.html │ │ │ ├── sidebar.component.scss │ │ │ ├── sidebar.component.spec.ts │ │ │ └── sidebar.component.ts │ │ └── updater │ │ │ ├── updater.component.html │ │ │ ├── updater.component.scss │ │ │ ├── updater.component.spec.ts │ │ │ └── updater.component.ts │ ├── models │ │ ├── authentication │ │ │ ├── role.ts │ │ │ ├── user-osu.ts │ │ │ └── user.ts │ │ ├── cache │ │ │ ├── cache-beatmap.ts │ │ │ ├── cache-modifier.ts │ │ │ └── cache-user.ts │ │ ├── calculations.ts │ │ ├── irc-shortcut-command.ts │ │ ├── irc │ │ │ ├── irc-channel.ts │ │ │ ├── irc-message.ts │ │ │ ├── message-builder.ts │ │ │ └── regex.ts │ │ ├── lobby.ts │ │ ├── multiplayer-lobby-players │ │ │ ├── multiplayer-lobby-players-player.ts │ │ │ └── multiplayer-lobby-players.ts │ │ ├── osu-models │ │ │ ├── beatmap.ts │ │ │ ├── multiplayer-game-score.ts │ │ │ ├── multiplayer-game.ts │ │ │ ├── multiplayer-match.ts │ │ │ ├── osu-user.ts │ │ │ └── osu.ts │ │ ├── picked-category.ts │ │ ├── score-calculation │ │ │ ├── calculate.ts │ │ │ └── calculation-types │ │ │ │ ├── axs-calculation.ts │ │ │ │ ├── ctm-calculation.ts │ │ │ │ ├── oml-score-calculation.ts │ │ │ │ ├── proposed-calculation.ts │ │ │ │ ├── score-interface.ts │ │ │ │ ├── team-vs-calculation.ts │ │ │ │ ├── team-vs-hidden-calculation.ts │ │ │ │ └── three-cwc-score-calculation.ts │ │ ├── sidebar-item.ts │ │ ├── slash-command.ts │ │ ├── store-multiplayer │ │ │ ├── multiplayer-data-user.ts │ │ │ └── multiplayer-data.ts │ │ ├── toast.ts │ │ ├── tutorial │ │ │ ├── tutorial-category.ts │ │ │ └── tutorial-step.ts │ │ ├── wybintournament │ │ │ ├── wybin-match.ts │ │ │ ├── wybin-opponent.ts │ │ │ └── wybin-stage.ts │ │ └── wytournament │ │ │ ├── mappool │ │ │ ├── wy-mappool.ts │ │ │ ├── wy-mod-bracket-map.ts │ │ │ ├── wy-mod-bracket.ts │ │ │ ├── wy-mod-category.ts │ │ │ ├── wy-mod.ts │ │ │ └── wy-mystery-mappool-helper.ts │ │ │ ├── wy-conditional-message.ts │ │ │ ├── wy-stage.ts │ │ │ ├── wy-team-player.ts │ │ │ ├── wy-team.ts │ │ │ ├── wy-tournament.ts │ │ │ └── wy-webhook.ts │ ├── modules │ │ ├── authentication │ │ │ ├── authentication-routing.module.ts │ │ │ ├── authentication.module.ts │ │ │ └── components │ │ │ │ └── authentication │ │ │ │ ├── authentication.component.html │ │ │ │ ├── authentication.component.scss │ │ │ │ ├── authentication.component.spec.ts │ │ │ │ └── authentication.component.ts │ │ ├── axs │ │ │ ├── axs-routing.module.ts │ │ │ ├── axs.module.ts │ │ │ └── components │ │ │ │ ├── axs-calculator │ │ │ │ ├── axs-calculator.component.html │ │ │ │ ├── axs-calculator.component.scss │ │ │ │ ├── axs-calculator.component.spec.ts │ │ │ │ └── axs-calculator.component.ts │ │ │ │ ├── axs-formula │ │ │ │ ├── axs-formula.component.html │ │ │ │ ├── axs-formula.component.scss │ │ │ │ ├── axs-formula.component.spec.ts │ │ │ │ └── axs-formula.component.ts │ │ │ │ ├── axs-information │ │ │ │ ├── axs-information.component.html │ │ │ │ ├── axs-information.component.scss │ │ │ │ ├── axs-information.component.spec.ts │ │ │ │ └── axs-information.component.ts │ │ │ │ └── axs-router │ │ │ │ ├── axs-router.component.html │ │ │ │ ├── axs-router.component.scss │ │ │ │ ├── axs-router.component.spec.ts │ │ │ │ └── axs-router.component.ts │ │ ├── changelog │ │ │ ├── changelog-routing.module.ts │ │ │ ├── changelog.module.ts │ │ │ └── components │ │ │ │ └── changelog │ │ │ │ ├── changelog.component.html │ │ │ │ ├── changelog.component.scss │ │ │ │ ├── changelog.component.spec.ts │ │ │ │ └── changelog.component.ts │ │ ├── information │ │ │ ├── components │ │ │ │ └── information │ │ │ │ │ ├── information.component.html │ │ │ │ │ ├── information.component.scss │ │ │ │ │ ├── information.component.spec.ts │ │ │ │ │ └── information.component.ts │ │ │ ├── information-routing.module.ts │ │ │ └── information.module.ts │ │ ├── irc │ │ │ ├── components │ │ │ │ ├── irc-player-management │ │ │ │ │ ├── irc-player-management.component.html │ │ │ │ │ ├── irc-player-management.component.scss │ │ │ │ │ ├── irc-player-management.component.spec.ts │ │ │ │ │ └── irc-player-management.component.ts │ │ │ │ ├── irc-shortcut-commands │ │ │ │ │ ├── irc-shortcut-commands.component.html │ │ │ │ │ ├── irc-shortcut-commands.component.scss │ │ │ │ │ ├── irc-shortcut-commands.component.spec.ts │ │ │ │ │ └── irc-shortcut-commands.component.ts │ │ │ │ └── irc │ │ │ │ │ ├── irc.component.html │ │ │ │ │ ├── irc.component.scss │ │ │ │ │ ├── irc.component.spec.ts │ │ │ │ │ └── irc.component.ts │ │ │ ├── irc-routing.module.ts │ │ │ └── irc.module.ts │ │ ├── lobby │ │ │ ├── components │ │ │ │ ├── all-lobbies │ │ │ │ │ ├── all-lobbies.component.html │ │ │ │ │ ├── all-lobbies.component.scss │ │ │ │ │ ├── all-lobbies.component.spec.ts │ │ │ │ │ └── all-lobbies.component.ts │ │ │ │ ├── create-lobby │ │ │ │ │ ├── create-lobby.component.html │ │ │ │ │ ├── create-lobby.component.scss │ │ │ │ │ ├── create-lobby.component.spec.ts │ │ │ │ │ └── create-lobby.component.ts │ │ │ │ ├── join-lobby │ │ │ │ │ ├── join-lobby.component.html │ │ │ │ │ ├── join-lobby.component.scss │ │ │ │ │ ├── join-lobby.component.spec.ts │ │ │ │ │ └── join-lobby.component.ts │ │ │ │ ├── lobby-form │ │ │ │ │ ├── lobby-form.component.html │ │ │ │ │ ├── lobby-form.component.scss │ │ │ │ │ ├── lobby-form.component.spec.ts │ │ │ │ │ └── lobby-form.component.ts │ │ │ │ └── lobby-view │ │ │ │ │ ├── lobby-view.component.html │ │ │ │ │ ├── lobby-view.component.scss │ │ │ │ │ ├── lobby-view.component.spec.ts │ │ │ │ │ └── lobby-view.component.ts │ │ │ ├── lobby-routing.module.ts │ │ │ └── lobby.module.ts │ │ ├── settings │ │ │ ├── components │ │ │ │ └── settings │ │ │ │ │ ├── settings.component.html │ │ │ │ │ ├── settings.component.scss │ │ │ │ │ ├── settings.component.spec.ts │ │ │ │ │ └── settings.component.ts │ │ │ ├── models │ │ │ │ └── options-menu.ts │ │ │ ├── settings-routing.module.ts │ │ │ └── settings.module.ts │ │ ├── tournament-management │ │ │ ├── components-utility │ │ │ │ ├── tournament-card │ │ │ │ │ ├── tournament-card.component.html │ │ │ │ │ ├── tournament-card.component.scss │ │ │ │ │ ├── tournament-card.component.spec.ts │ │ │ │ │ └── tournament-card.component.ts │ │ │ │ └── tournament │ │ │ │ │ ├── tournament-access │ │ │ │ │ ├── tournament-access.component.html │ │ │ │ │ ├── tournament-access.component.scss │ │ │ │ │ ├── tournament-access.component.spec.ts │ │ │ │ │ └── tournament-access.component.ts │ │ │ │ │ ├── tournament-beatmap-result │ │ │ │ │ ├── tournament-conditional-message.component.html │ │ │ │ │ ├── tournament-conditional-message.component.scss │ │ │ │ │ ├── tournament-conditional-message.component.spec.ts │ │ │ │ │ └── tournament-conditional-message.component.ts │ │ │ │ │ ├── tournament-general │ │ │ │ │ ├── tournament-general.component.html │ │ │ │ │ ├── tournament-general.component.scss │ │ │ │ │ ├── tournament-general.component.spec.ts │ │ │ │ │ └── tournament-general.component.ts │ │ │ │ │ ├── tournament-mappool │ │ │ │ │ ├── mappool-overview │ │ │ │ │ │ ├── mappool-overview.component.html │ │ │ │ │ │ ├── mappool-overview.component.scss │ │ │ │ │ │ ├── mappool-overview.component.spec.ts │ │ │ │ │ │ └── mappool-overview.component.ts │ │ │ │ │ ├── mappool │ │ │ │ │ │ ├── mappool.component.html │ │ │ │ │ │ ├── mappool.component.scss │ │ │ │ │ │ ├── mappool.component.spec.ts │ │ │ │ │ │ └── mappool.component.ts │ │ │ │ │ └── mod-bracket │ │ │ │ │ │ ├── mod-bracket.component.html │ │ │ │ │ │ ├── mod-bracket.component.scss │ │ │ │ │ │ ├── mod-bracket.component.spec.ts │ │ │ │ │ │ └── mod-bracket.component.ts │ │ │ │ │ ├── tournament-participants │ │ │ │ │ ├── tournament-participants.component.html │ │ │ │ │ ├── tournament-participants.component.scss │ │ │ │ │ ├── tournament-participants.component.spec.ts │ │ │ │ │ └── tournament-participants.component.ts │ │ │ │ │ ├── tournament-stages │ │ │ │ │ ├── tournament-stages.component.html │ │ │ │ │ ├── tournament-stages.component.scss │ │ │ │ │ ├── tournament-stages.component.spec.ts │ │ │ │ │ └── tournament-stages.component.ts │ │ │ │ │ ├── tournament-webhook │ │ │ │ │ ├── tournament-webhook.component.html │ │ │ │ │ ├── tournament-webhook.component.scss │ │ │ │ │ ├── tournament-webhook.component.spec.ts │ │ │ │ │ └── tournament-webhook.component.ts │ │ │ │ │ ├── tournament-wybin │ │ │ │ │ ├── tournament-wybin.component.html │ │ │ │ │ ├── tournament-wybin.component.scss │ │ │ │ │ ├── tournament-wybin.component.spec.ts │ │ │ │ │ └── tournament-wybin.component.ts │ │ │ │ │ └── tournament │ │ │ │ │ ├── tournament.component.html │ │ │ │ │ ├── tournament.component.scss │ │ │ │ │ ├── tournament.component.spec.ts │ │ │ │ │ └── tournament.component.ts │ │ │ ├── components │ │ │ │ ├── management-router │ │ │ │ │ ├── management-router.component.html │ │ │ │ │ ├── management-router.component.scss │ │ │ │ │ ├── management-router.component.spec.ts │ │ │ │ │ └── management-router.component.ts │ │ │ │ ├── tournament-manage │ │ │ │ │ ├── tournament-create │ │ │ │ │ │ ├── tournament-create.component.html │ │ │ │ │ │ ├── tournament-create.component.scss │ │ │ │ │ │ ├── tournament-create.component.spec.ts │ │ │ │ │ │ └── tournament-create.component.ts │ │ │ │ │ └── tournament-edit │ │ │ │ │ │ ├── tournament-edit.component.html │ │ │ │ │ │ ├── tournament-edit.component.scss │ │ │ │ │ │ ├── tournament-edit.component.spec.ts │ │ │ │ │ │ └── tournament-edit.component.ts │ │ │ │ └── tournament-view │ │ │ │ │ ├── tournament-all-published-administrator │ │ │ │ │ ├── tournament-all-published-administrator.component.html │ │ │ │ │ ├── tournament-all-published-administrator.component.scss │ │ │ │ │ ├── tournament-all-published-administrator.component.spec.ts │ │ │ │ │ └── tournament-all-published-administrator.component.ts │ │ │ │ │ ├── tournament-all-published │ │ │ │ │ ├── tournament-all-published.component.html │ │ │ │ │ ├── tournament-all-published.component.scss │ │ │ │ │ ├── tournament-all-published.component.spec.ts │ │ │ │ │ └── tournament-all-published.component.ts │ │ │ │ │ ├── tournament-my-published │ │ │ │ │ ├── tournament-my-published.component.html │ │ │ │ │ ├── tournament-my-published.component.scss │ │ │ │ │ ├── tournament-my-published.component.spec.ts │ │ │ │ │ └── tournament-my-published.component.ts │ │ │ │ │ └── tournament-overview │ │ │ │ │ ├── tournament-overview.component.html │ │ │ │ │ ├── tournament-overview.component.scss │ │ │ │ │ ├── tournament-overview.component.spec.ts │ │ │ │ │ └── tournament-overview.component.ts │ │ │ ├── models │ │ │ │ └── validation-error.ts │ │ │ ├── services │ │ │ │ └── validation-error.service.ts │ │ │ ├── tournament-management-routing.module.ts │ │ │ └── tournament-management.module.ts │ │ ├── tutorial │ │ │ ├── components │ │ │ │ └── tutorial-overview │ │ │ │ │ ├── tutorial-overview.component.html │ │ │ │ │ ├── tutorial-overview.component.scss │ │ │ │ │ ├── tutorial-overview.component.spec.ts │ │ │ │ │ └── tutorial-overview.component.ts │ │ │ ├── tutorial-routing.module.ts │ │ │ └── tutorial.module.ts │ │ └── webhook │ │ │ ├── components │ │ │ └── webhook │ │ │ │ ├── webhook.component.html │ │ │ │ ├── webhook.component.scss │ │ │ │ ├── webhook.component.spec.ts │ │ │ │ └── webhook.component.ts │ │ │ ├── webhook-routing.module.ts │ │ │ └── webhook.module.ts │ ├── services │ │ ├── authenticate.service.ts │ │ ├── cache.service.ts │ │ ├── challonge.service.ts │ │ ├── debug.service.ts │ │ ├── electron.service.ts │ │ ├── generic.service.ts │ │ ├── irc-shortcut-commands.service.ts │ │ ├── irc.service.ts │ │ ├── multiplayer-lobby-players.service.ts │ │ ├── osu-api │ │ │ ├── api-key-validation.service.ts │ │ │ ├── get-beatmap.service.ts │ │ │ ├── get-multiplayer.service.ts │ │ │ └── get-user.service.ts │ │ ├── slash-command.service.ts │ │ ├── store.service.ts │ │ ├── toast.service.ts │ │ ├── tournament.service.ts │ │ ├── tutorial.service.ts │ │ ├── webhook.service.ts │ │ ├── wy-multiplayer-lobbies.service.ts │ │ └── wybin.service.ts │ └── shared │ │ ├── angular-material.module.ts │ │ ├── components │ │ ├── alert │ │ │ ├── alert.component.html │ │ │ ├── alert.component.scss │ │ │ ├── alert.component.spec.ts │ │ │ └── alert.component.ts │ │ ├── debug │ │ │ ├── debug.component.html │ │ │ ├── debug.component.scss │ │ │ ├── debug.component.spec.ts │ │ │ └── debug.component.ts │ │ ├── toast │ │ │ ├── toast.component.html │ │ │ ├── toast.component.scss │ │ │ ├── toast.component.spec.ts │ │ │ └── toast.component.ts │ │ └── tutorial │ │ │ ├── tutorial.component.html │ │ │ ├── tutorial.component.scss │ │ │ ├── tutorial.component.spec.ts │ │ │ └── tutorial.component.ts │ │ ├── directives │ │ └── ng-var.directive.ts │ │ ├── misc.ts │ │ ├── pipes │ │ ├── filter-team.pipe.ts │ │ ├── filter-tournament.pipe.ts │ │ ├── reverse.pipe.ts │ │ ├── search-mod-bracket.pipe.ts │ │ └── search.pipe.ts │ │ └── shared.module.ts ├── assets │ ├── .gitkeep │ ├── icons │ │ ├── LICENSE.txt │ │ ├── exclamation-circle.svg │ │ ├── exclamation-triangle.svg │ │ ├── hammer.svg │ │ ├── info-circle.svg │ │ └── trophy.svg │ ├── images │ │ ├── flags │ │ │ ├── ad.png │ │ │ ├── ae.png │ │ │ ├── af.png │ │ │ ├── ag.png │ │ │ ├── ai.png │ │ │ ├── al.png │ │ │ ├── am.png │ │ │ ├── ao.png │ │ │ ├── aq.png │ │ │ ├── ar.png │ │ │ ├── as.png │ │ │ ├── at.png │ │ │ ├── au.png │ │ │ ├── aw.png │ │ │ ├── ax.png │ │ │ ├── az.png │ │ │ ├── ba.png │ │ │ ├── bb.png │ │ │ ├── bd.png │ │ │ ├── be.png │ │ │ ├── bf.png │ │ │ ├── bg.png │ │ │ ├── bh.png │ │ │ ├── bi.png │ │ │ ├── bj.png │ │ │ ├── bl.png │ │ │ ├── bm.png │ │ │ ├── bn.png │ │ │ ├── bo.png │ │ │ ├── bq.png │ │ │ ├── br.png │ │ │ ├── bs.png │ │ │ ├── bt.png │ │ │ ├── bv.png │ │ │ ├── bw.png │ │ │ ├── by.png │ │ │ ├── bz.png │ │ │ ├── ca.png │ │ │ ├── cc.png │ │ │ ├── cd.png │ │ │ ├── cf.png │ │ │ ├── cg.png │ │ │ ├── ch.png │ │ │ ├── ci.png │ │ │ ├── ck.png │ │ │ ├── cl.png │ │ │ ├── cm.png │ │ │ ├── cn.png │ │ │ ├── co.png │ │ │ ├── cr.png │ │ │ ├── cu.png │ │ │ ├── cv.png │ │ │ ├── cw.png │ │ │ ├── cx.png │ │ │ ├── cy.png │ │ │ ├── cz.png │ │ │ ├── de.png │ │ │ ├── dj.png │ │ │ ├── dk.png │ │ │ ├── dm.png │ │ │ ├── do.png │ │ │ ├── dz.png │ │ │ ├── ec.png │ │ │ ├── ee.png │ │ │ ├── eg.png │ │ │ ├── eh.png │ │ │ ├── er.png │ │ │ ├── es.png │ │ │ ├── et.png │ │ │ ├── fi.png │ │ │ ├── fj.png │ │ │ ├── fk.png │ │ │ ├── fm.png │ │ │ ├── fo.png │ │ │ ├── fr.png │ │ │ ├── ga.png │ │ │ ├── gb-eng.png │ │ │ ├── gb-nir.png │ │ │ ├── gb-sct.png │ │ │ ├── gb-wls.png │ │ │ ├── gb.png │ │ │ ├── gd.png │ │ │ ├── ge.png │ │ │ ├── gf.png │ │ │ ├── gg.png │ │ │ ├── gh.png │ │ │ ├── gi.png │ │ │ ├── gl.png │ │ │ ├── gm.png │ │ │ ├── gn.png │ │ │ ├── gp.png │ │ │ ├── gq.png │ │ │ ├── gr.png │ │ │ ├── gs.png │ │ │ ├── gt.png │ │ │ ├── gu.png │ │ │ ├── gw.png │ │ │ ├── gy.png │ │ │ ├── hk.png │ │ │ ├── hm.png │ │ │ ├── hn.png │ │ │ ├── hr.png │ │ │ ├── ht.png │ │ │ ├── hu.png │ │ │ ├── id.png │ │ │ ├── ie.png │ │ │ ├── il.png │ │ │ ├── im.png │ │ │ ├── in.png │ │ │ ├── io.png │ │ │ ├── iq.png │ │ │ ├── ir.png │ │ │ ├── is.png │ │ │ ├── it.png │ │ │ ├── je.png │ │ │ ├── jm.png │ │ │ ├── jo.png │ │ │ ├── jp.png │ │ │ ├── ke.png │ │ │ ├── kg.png │ │ │ ├── kh.png │ │ │ ├── ki.png │ │ │ ├── km.png │ │ │ ├── kn.png │ │ │ ├── kp.png │ │ │ ├── kr.png │ │ │ ├── kw.png │ │ │ ├── ky.png │ │ │ ├── kz.png │ │ │ ├── la.png │ │ │ ├── lb.png │ │ │ ├── lc.png │ │ │ ├── li.png │ │ │ ├── lk.png │ │ │ ├── lr.png │ │ │ ├── ls.png │ │ │ ├── lt.png │ │ │ ├── lu.png │ │ │ ├── lv.png │ │ │ ├── ly.png │ │ │ ├── ma.png │ │ │ ├── mc.png │ │ │ ├── md.png │ │ │ ├── me.png │ │ │ ├── mf.png │ │ │ ├── mg.png │ │ │ ├── mh.png │ │ │ ├── mk.png │ │ │ ├── ml.png │ │ │ ├── mm.png │ │ │ ├── mn.png │ │ │ ├── mo.png │ │ │ ├── mp.png │ │ │ ├── mq.png │ │ │ ├── mr.png │ │ │ ├── ms.png │ │ │ ├── mt.png │ │ │ ├── mu.png │ │ │ ├── mv.png │ │ │ ├── mw.png │ │ │ ├── mx.png │ │ │ ├── my.png │ │ │ ├── mz.png │ │ │ ├── na.png │ │ │ ├── nc.png │ │ │ ├── ne.png │ │ │ ├── nf.png │ │ │ ├── ng.png │ │ │ ├── ni.png │ │ │ ├── nl.png │ │ │ ├── no.png │ │ │ ├── np.png │ │ │ ├── nr.png │ │ │ ├── nu.png │ │ │ ├── nz.png │ │ │ ├── om.png │ │ │ ├── pa.png │ │ │ ├── pe.png │ │ │ ├── pf.png │ │ │ ├── pg.png │ │ │ ├── ph.png │ │ │ ├── pk.png │ │ │ ├── pl.png │ │ │ ├── pm.png │ │ │ ├── pn.png │ │ │ ├── pr.png │ │ │ ├── ps.png │ │ │ ├── pt.png │ │ │ ├── pw.png │ │ │ ├── py.png │ │ │ ├── qa.png │ │ │ ├── re.png │ │ │ ├── ro.png │ │ │ ├── rs.png │ │ │ ├── ru.png │ │ │ ├── rw.png │ │ │ ├── sa.png │ │ │ ├── sb.png │ │ │ ├── sc.png │ │ │ ├── sd.png │ │ │ ├── se.png │ │ │ ├── sg.png │ │ │ ├── sh.png │ │ │ ├── si.png │ │ │ ├── sj.png │ │ │ ├── sk.png │ │ │ ├── sl.png │ │ │ ├── sm.png │ │ │ ├── sn.png │ │ │ ├── so.png │ │ │ ├── sr.png │ │ │ ├── ss.png │ │ │ ├── st.png │ │ │ ├── sv.png │ │ │ ├── sx.png │ │ │ ├── sy.png │ │ │ ├── sz.png │ │ │ ├── tc.png │ │ │ ├── td.png │ │ │ ├── tf.png │ │ │ ├── tg.png │ │ │ ├── th.png │ │ │ ├── tj.png │ │ │ ├── tk.png │ │ │ ├── tl.png │ │ │ ├── tm.png │ │ │ ├── tn.png │ │ │ ├── to.png │ │ │ ├── tr.png │ │ │ ├── tt.png │ │ │ ├── tv.png │ │ │ ├── tw.png │ │ │ ├── tz.png │ │ │ ├── ua.png │ │ │ ├── ug.png │ │ │ ├── um.png │ │ │ ├── us.png │ │ │ ├── uy.png │ │ │ ├── uz.png │ │ │ ├── va.png │ │ │ ├── vc.png │ │ │ ├── ve.png │ │ │ ├── vg.png │ │ │ ├── vi.png │ │ │ ├── vn.png │ │ │ ├── vu.png │ │ │ ├── wf.png │ │ │ ├── ws.png │ │ │ ├── xk.png │ │ │ ├── ye.png │ │ │ ├── yt.png │ │ │ ├── za.png │ │ │ ├── zm.png │ │ │ └── zw.png │ │ ├── icon.png │ │ ├── mac-icon │ │ │ └── icon.png │ │ └── osulogo.png │ ├── osu-mods │ │ ├── LICENCE │ │ ├── README │ │ ├── dt.png │ │ ├── dt@2x.png │ │ ├── ez.png │ │ ├── ez@2x.png │ │ ├── fl.png │ │ ├── fl@2x.png │ │ ├── hd.png │ │ ├── hd@2x.png │ │ ├── hr.png │ │ ├── hr@2x.png │ │ ├── ht.png │ │ ├── ht@2x.png │ │ ├── nc.png │ │ ├── nc@2x.png │ │ ├── nf.png │ │ ├── nf@2x.png │ │ ├── nm.png │ │ ├── nm@2x.png │ │ ├── pf.png │ │ ├── pf@2x.png │ │ ├── sd.png │ │ └── sd@2x.png │ ├── stairs.mp3 │ └── tutorial-tournament-template.json ├── bootstrap.scss ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── eslintrc.config.json ├── index.html ├── karma.conf.js ├── main.ts ├── polyfills-test.ts ├── polyfills.ts ├── styles.scss ├── styles │ ├── _theme.scss │ └── _variables.scss ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── typings.d.ts ├── tsconfig.base.json ├── tsconfig.json ├── tsconfig.serve.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = tab 7 | indent_size = 4 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | - OS: [e.g. iOS] 28 | 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. 4 | 5 | Fixes # (issue) 6 | 7 | ## Type of change 8 | 9 | Please delete options that are not relevant. 10 | 11 | - [ ] Bug fix (non-breaking change which fixes an issue) 12 | - [ ] New feature (non-breaking change which adds functionality) 13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 14 | - [ ] This change requires a documentation update 15 | 16 | # Checklist: 17 | 18 | - [ ] I have performed a self-review of my own code 19 | - [ ] I have made corresponding changes to the documentation 20 | - [ ] My changes generate no new warnings 21 | - [ ] I have run lints (yarn run lint) 22 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 30 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /angular.webpack.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Custom angular webpack configuration 3 | */ 4 | 5 | module.exports = (config, options) => { 6 | config.target = 'electron-renderer'; 7 | 8 | 9 | if (options.fileReplacements) { 10 | for (let fileReplacement of options.fileReplacements) { 11 | if (fileReplacement.replace !== 'src/environments/environment.ts') { 12 | continue; 13 | } 14 | 15 | let fileReplacementParts = fileReplacement['with'].split('.'); 16 | if (fileReplacementParts.length > 1 && ['web'].indexOf(fileReplacementParts[1]) >= 0) { 17 | config.target = 'web'; 18 | } 19 | break; 20 | } 21 | } 22 | 23 | return config; 24 | } 25 | -------------------------------------------------------------------------------- /e2e/playwright.config.ts: -------------------------------------------------------------------------------- 1 | /** @type {import('@playwright/test').PlaywrightTestConfig} */ 2 | const config = { 3 | testDir: '.', 4 | timeout: 45000, 5 | outputDir: './screenshots', 6 | use: { 7 | headless: false, 8 | viewport: { width: 1280, height: 720 }, 9 | launchOptions: { 10 | slowMo: 1000, 11 | }, 12 | trace: 'on', 13 | }, 14 | expect: { 15 | toMatchSnapshot: { threshold: 0.2 }, 16 | }, 17 | }; 18 | 19 | module.exports = config; 20 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "types": [ 7 | "node" 8 | ] 9 | }, 10 | "include": [ 11 | "**.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /electron-builder.json: -------------------------------------------------------------------------------- 1 | { 2 | "productName": "wyReferee", 3 | "directories": { 4 | "output": "release/" 5 | }, 6 | "files": [ 7 | "**/*", 8 | "!**/*.ts", 9 | "!package.json", 10 | "!package-lock.json" 11 | ], 12 | "win": { 13 | "icon": "src/assets/images/icon.png", 14 | "target": [ 15 | "nsis" 16 | ] 17 | }, 18 | "linux": { 19 | "icon": "src/assets/images/icon.png", 20 | "target": [ 21 | "AppImage" 22 | ] 23 | }, 24 | "mac": { 25 | "icon": "src/assets/images/mac-icon/icon.png", 26 | "target": [ 27 | "dmg", 28 | "zip" 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /postinstall-web.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | // Change bancho.js setMap > gamemode type so it doesn't throw an error anymore (hacky solution for now) 4 | // ERROR in node_modules/bancho.js/index.d.ts:367:55 - error TS2694: Namespace '"nodesu"' has no exported member 'Mode'. 5 | const banchoJs = 'node_modules/bancho.js/index.d.ts'; 6 | fs.readFile(banchoJs, 'utf8', function (err, data) { 7 | if (err) { 8 | return console.log(err); 9 | } 10 | 11 | const result = data.replace('setMap(map: number|nodesu.Beatmap, gamemode: nodesu.Mode)', 'setMap(map: number|nodesu.Beatmap, gamemode: any)'); 12 | 13 | fs.writeFile(banchoJs, result, 'utf8', function (err) { 14 | if (err) 15 | return console.log(err); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /postinstall.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | // Change bancho.js setMap > gamemode type so it doesn't throw an error anymore (hacky solution for now) 4 | // ERROR in node_modules/bancho.js/index.d.ts:367:55 - error TS2694: Namespace '"nodesu"' has no exported member 'Mode'. 5 | const banchoJs = 'node_modules/bancho.js/index.d.ts'; 6 | fs.readFile(banchoJs, 'utf8', function (err, data) { 7 | if (err) { 8 | return console.log(err); 9 | } 10 | 11 | const result = data.replace('setMap(map: number|nodesu.Beatmap, gamemode: nodesu.Mode)', 'setMap(map: number|nodesu.Beatmap, gamemode: any)'); 12 | 13 | fs.writeFile(banchoJs, result, 'utf8', function (err) { 14 | if (err) 15 | return console.log(err); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/app.component.scss -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | declarations: [AppComponent], 9 | providers: [], 10 | imports: [RouterTestingModule] 11 | }).compileComponents(); 12 | })); 13 | 14 | it('should create the app', async(() => { 15 | const fixture = TestBed.createComponent(AppComponent); 16 | const app = fixture.debugElement.componentInstance; 17 | expect(app).toBeTruthy(); 18 | })); 19 | }); 20 | -------------------------------------------------------------------------------- /src/app/components/dialogs/add-bulk-teams-dialog/add-bulk-teams-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/add-bulk-teams-dialog/add-bulk-teams-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/add-bulk-teams-dialog/add-bulk-teams-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AddBulkTeamsDialogComponent } from './add-bulk-teams-dialog.component'; 4 | 5 | describe('AddBulkTeamsDialogComponent', () => { 6 | let component: AddBulkTeamsDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [AddBulkTeamsDialogComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AddBulkTeamsDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/add-bulk-teams-dialog/add-bulk-teams-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-add-bulk-teams-dialog', 5 | templateUrl: './add-bulk-teams-dialog.component.html', 6 | styleUrls: ['./add-bulk-teams-dialog.component.scss'] 7 | }) 8 | export class AddBulkTeamsDialogComponent implements OnInit { 9 | bulkTeams: string; 10 | 11 | constructor() { 12 | this.bulkTeams = ''; 13 | 14 | // Test data, uncomment to use 15 | // this.bulkTeams = 'Team 1, Player 1, 1234567, Player 2, 7654321\n' + 16 | // 'Team 2, Player 3, 1234567, Player 2, 7654321, Player 3, 1726354\n' + 17 | // 'Team 3, Player 5, 1234567, Player 6, 7654321\n' + 18 | // 'Team 3, Player 4, 1234567\n' + 19 | // 'Team 4\n' + 20 | // 'Team 5, Player 7, , Player 8, '; 21 | } 22 | 23 | ngOnInit(): void { } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/components/dialogs/ban-beatmap/ban-beatmap.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/ban-beatmap/ban-beatmap.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/ban-beatmap/ban-beatmap.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BanBeatmapComponent } from './ban-beatmap.component'; 4 | 5 | describe('BanBeatmapComponent', () => { 6 | let component: BanBeatmapComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [BanBeatmapComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(BanBeatmapComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/ban-beatmap/ban-beatmap.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Inject } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { ElectronService } from 'app/services/electron.service'; 4 | import { MatButtonToggleChange } from '@angular/material/button-toggle'; 5 | import { IBanBeatmapDialogData } from 'app/interfaces/i-ban-beatmap-dialog-data'; 6 | 7 | @Component({ 8 | selector: 'app-ban-beatmap', 9 | templateUrl: './ban-beatmap.component.html', 10 | styleUrls: ['./ban-beatmap.component.scss'] 11 | }) 12 | export class BanBeatmapComponent implements OnInit { 13 | constructor(@Inject(MAT_DIALOG_DATA) public data: IBanBeatmapDialogData, public electronService: ElectronService) { } 14 | ngOnInit(): void { } 15 | 16 | teamChange(event: MatButtonToggleChange) { 17 | this.data.banForTeam = event.value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-lobby/delete-lobby.component.html: -------------------------------------------------------------------------------- 1 |

Remove settings

2 | 3 | 4 | Are you sure you want to delete {{ getLobbyName() }}? 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-lobby/delete-lobby.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/delete-lobby/delete-lobby.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-lobby/delete-lobby.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DeleteLobbyComponent } from './delete-lobby.component'; 4 | 5 | describe('DeleteLobbyComponent', () => { 6 | let component: DeleteLobbyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [DeleteLobbyComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DeleteLobbyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mappool-dialog/delete-mappool-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Delete mappool

2 | 3 | 4 | Are you sure you want to delete the mappool {{ data.mappool.name }}? 5 | 6 | 7 | NOTE: This action is permanent. Once the mappool has been deleted, this can not be retrieved anymore unless it is published. 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mappool-dialog/delete-mappool-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/delete-mappool-dialog/delete-mappool-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mappool-dialog/delete-mappool-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DeleteMappoolDialogComponent } from './delete-mappool-dialog.component'; 4 | 5 | describe('DeleteMappoolDialogComponent', () => { 6 | let component: DeleteMappoolDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [DeleteMappoolDialogComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DeleteMappoolDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mappool-dialog/delete-mappool-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { IMappoolDialogData } from 'app/interfaces/i-mappool-dialog-data'; 4 | 5 | @Component({ 6 | selector: 'app-delete-mappool-dialog', 7 | templateUrl: './delete-mappool-dialog.component.html', 8 | styleUrls: ['./delete-mappool-dialog.component.scss'] 9 | }) 10 | export class DeleteMappoolDialogComponent implements OnInit { 11 | constructor(@Inject(MAT_DIALOG_DATA) public data: IMappoolDialogData) { } 12 | ngOnInit(): void { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mod-bracket-dialog/delete-mod-bracket-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Delete mod bracket

2 | 3 | 4 | Are you sure you want to delete the mod bracket {{ data.modBracket.name }}? 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mod-bracket-dialog/delete-mod-bracket-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/delete-mod-bracket-dialog/delete-mod-bracket-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-mod-bracket-dialog/delete-mod-bracket-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { IDeleteModBracketDialogData } from 'app/interfaces/i-delete-mod-bracket-dialog-data'; 4 | @Component({ 5 | selector: 'app-delete-mod-bracket-dialog', 6 | templateUrl: './delete-mod-bracket-dialog.component.html', 7 | styleUrls: ['./delete-mod-bracket-dialog.component.scss'] 8 | }) 9 | export class DeleteModBracketDialogComponent implements OnInit { 10 | constructor(@Inject(MAT_DIALOG_DATA) public data: IDeleteModBracketDialogData) { } 11 | ngOnInit(): void { } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-team-dialog/delete-team-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Delete team

2 | 3 | 4 | Are you sure you want to delete the team {{ data.team.name }}? 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-team-dialog/delete-team-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/delete-team-dialog/delete-team-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-team-dialog/delete-team-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DeleteTeamDialogComponent } from './delete-team-dialog.component'; 4 | 5 | describe('DeleteTeamDialogComponent', () => { 6 | let component: DeleteTeamDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [DeleteTeamDialogComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DeleteTeamDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-team-dialog/delete-team-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { ITeamDialogData } from 'app/interfaces/i-team-dialog-data'; 4 | 5 | @Component({ 6 | selector: 'app-delete-team-dialog', 7 | templateUrl: './delete-team-dialog.component.html', 8 | styleUrls: ['./delete-team-dialog.component.scss'] 9 | }) 10 | export class DeleteTeamDialogComponent implements OnInit { 11 | constructor(@Inject(MAT_DIALOG_DATA) public data: ITeamDialogData) { } 12 | ngOnInit(): void { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-tournament-dialog/delete-tournament-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Delete tournament

2 | 3 | 4 | Are you sure you want to delete the tournament {{ data.tournament.name }}? 5 | 6 | 7 | NOTE: This action is permanent. Once the tournament has been deleted, this can not be retrieved anymore unless it is published. 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-tournament-dialog/delete-tournament-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/delete-tournament-dialog/delete-tournament-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/delete-tournament-dialog/delete-tournament-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { ITournamentDialogData } from 'app/interfaces/i-tournament-dialog-data'; 4 | 5 | @Component({ 6 | selector: 'app-delete-tournament-dialog', 7 | templateUrl: './delete-tournament-dialog.component.html', 8 | styleUrls: ['./delete-tournament-dialog.component.scss'] 9 | }) 10 | export class DeleteTournamentDialogComponent implements OnInit { 11 | constructor(@Inject(MAT_DIALOG_DATA) public data: ITournamentDialogData) { } 12 | ngOnInit(): void { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-pick-map-same-mod-bracket/irc-pick-map-same-mod-bracket.component.html: -------------------------------------------------------------------------------- 1 |

Pick beatmap

2 | 3 | 4 | 5 | {{ data.lobby.getNextPick() }} previous pick was from {{ data.modBracket.name }}. 6 | 7 | 8 | Are you sure you want them to pick: 9 |

{{ data.beatmap.beatmapName }} from {{ data.modBracket.name }}?

10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-pick-map-same-mod-bracket/irc-pick-map-same-mod-bracket.component.scss: -------------------------------------------------------------------------------- 1 | .hover { 2 | cursor: pointer; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-pick-map-same-mod-bracket/irc-pick-map-same-mod-bracket.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { IBeatmapModBracketDialogData } from 'app/interfaces/i-beatmap-mod-bracket-dialog-data'; 4 | import { ElectronService } from 'app/services/electron.service'; 5 | 6 | @Component({ 7 | selector: 'app-irc-pick-map-same-mod-bracket', 8 | templateUrl: './irc-pick-map-same-mod-bracket.component.html', 9 | styleUrls: ['./irc-pick-map-same-mod-bracket.component.scss'] 10 | }) 11 | export class IrcPickMapSameModBracketComponent implements OnInit { 12 | constructor(public electronService: ElectronService, @Inject(MAT_DIALOG_DATA) public data: IBeatmapModBracketDialogData) { } 13 | ngOnInit(): void { } 14 | } 15 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-shortcut-dialog/irc-shortcut-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { IrcShortcutDialogComponent } from './irc-shortcut-dialog.component'; 4 | 5 | describe('IrcShortcutDialogComponent', () => { 6 | let component: IrcShortcutDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [IrcShortcutDialogComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IrcShortcutDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-shortcut-warning-dialog/irc-shortcut-warning-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Irc shortcut command

2 | 3 | 4 | 5 | Are you sure you want to run the irc command {{ data.ircShortcutCommand.label }}? 6 | 7 | 8 |

This will send the following message in irc:

9 | {{ data.ircShortcutCommand.parseIrcCommand(data.lobby) }} 10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-shortcut-warning-dialog/irc-shortcut-warning-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/irc-shortcut-warning-dialog/irc-shortcut-warning-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/irc-shortcut-warning-dialog/irc-shortcut-warning-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { IIrcShortcutCommandDialogData } from 'app/interfaces/i-irc-shortcut-command-dialog-data'; 4 | 5 | @Component({ 6 | selector: 'app-irc-shortcut-warning-dialog', 7 | templateUrl: './irc-shortcut-warning-dialog.component.html', 8 | styleUrls: ['./irc-shortcut-warning-dialog.component.scss'] 9 | }) 10 | export class IrcShortcutWarningDialogComponent implements OnInit { 11 | constructor(@Inject(MAT_DIALOG_DATA) public data: IIrcShortcutCommandDialogData) { } 12 | ngOnInit(): void { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/dialogs/join-irc-channel/join-irc-channel.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/join-irc-channel/join-irc-channel.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/join-irc-channel/join-irc-channel.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { JoinIrcChannelComponent } from './join-irc-channel.component'; 4 | 5 | describe('JoinIrcChannelComponent', () => { 6 | let component: JoinIrcChannelComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [JoinIrcChannelComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(JoinIrcChannelComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/multiplayer-lobby-move-player/multiplayer-lobby-move-player.component.html: -------------------------------------------------------------------------------- 1 |

Delete tournament

2 | 3 | 4 | Select the slot where you want to move {{ data.movePlayer.username }} to: 5 | 6 |
7 |
8 | Slot {{ player.slot }}: {{ player.username }} 9 |
10 |
11 |
12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/app/components/dialogs/multiplayer-lobby-move-player/multiplayer-lobby-move-player.component.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | 3 | .all-players { 4 | display: flex; 5 | flex-direction: column; 6 | 7 | .player { 8 | display: flex; 9 | background-color: $primary; 10 | 11 | margin: 1px; 12 | padding: 4px; 13 | 14 | &.active { 15 | background-color: darken($primary, 15%); 16 | } 17 | 18 | &:hover { 19 | cursor: pointer; 20 | background-color: darken($primary, 15%); 21 | } 22 | 23 | &.disabled { 24 | background-color: $sidebar-color; 25 | cursor: not-allowed; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/components/dialogs/multiplayer-lobby-settings/multiplayer-lobby-settings.component.scss: -------------------------------------------------------------------------------- 1 | h3 { 2 | margin: 0; 3 | } 4 | 5 | .red { 6 | color: red; 7 | font-style: bold; 8 | } 9 | 10 | .green { 11 | color: #00ff00; 12 | font-style: bold; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/dialogs/protect-beatmap-dialog/protect-beatmap-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/protect-beatmap-dialog/protect-beatmap-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/protect-beatmap-dialog/protect-beatmap-dialog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ProtectBeatmapDialogComponent } from './protect-beatmap-dialog.component'; 4 | 5 | describe('ProtectBeatmapDialogComponent', () => { 6 | let component: ProtectBeatmapDialogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ProtectBeatmapDialogComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ProtectBeatmapDialogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/publish-tournament-dialog/publish-tournament-dialog.component.html: -------------------------------------------------------------------------------- 1 |

Publish tournament

2 | 3 | 4 | Are you sure you want to publish {{ data.tournament.name }}? 5 | 6 | 7 | This will make the tournament available to all 8 | the users that have been given access to view this tournament. 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/app/components/dialogs/publish-tournament-dialog/publish-tournament-dialog.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/publish-tournament-dialog/publish-tournament-dialog.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/publish-tournament-dialog/publish-tournament-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject, OnInit } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | import { ITournamentDialogData } from 'app/interfaces/i-tournament-dialog-data'; 4 | @Component({ 5 | selector: 'app-publish-tournament-dialog', 6 | templateUrl: './publish-tournament-dialog.component.html', 7 | styleUrls: ['./publish-tournament-dialog.component.scss'] 8 | }) 9 | export class PublishTournamentDialogComponent implements OnInit { 10 | constructor(@Inject(MAT_DIALOG_DATA) public data: ITournamentDialogData) { } 11 | ngOnInit(): void { } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/components/dialogs/remove-settings/remove-settings.component.html: -------------------------------------------------------------------------------- 1 |

Remove settings

2 | 3 | 4 | {{ data.message }} 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/app/components/dialogs/remove-settings/remove-settings.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/components/dialogs/remove-settings/remove-settings.component.scss -------------------------------------------------------------------------------- /src/app/components/dialogs/remove-settings/remove-settings.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { RemoveSettingsComponent } from './remove-settings.component'; 4 | 5 | describe('RemoveSettingsComponent', () => { 6 | let component: RemoveSettingsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [RemoveSettingsComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RemoveSettingsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/remove-settings/remove-settings.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Inject } from '@angular/core'; 2 | import { MAT_DIALOG_DATA } from '@angular/material/dialog'; 3 | 4 | @Component({ 5 | selector: 'app-remove-settings', 6 | templateUrl: './remove-settings.component.html', 7 | styleUrls: ['./remove-settings.component.scss'] 8 | }) 9 | export class RemoveSettingsComponent implements OnInit { 10 | constructor(@Inject(MAT_DIALOG_DATA) public data: { message: string }) { } 11 | ngOnInit(): void {} 12 | } 13 | -------------------------------------------------------------------------------- /src/app/components/dialogs/send-beatmap-result/send-beatmap-result.component.scss: -------------------------------------------------------------------------------- 1 | .img { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | 6 | background-position: center; 7 | background-size: cover; 8 | 9 | padding: 16px; 10 | 11 | margin: 8px; 12 | 13 | .teams { 14 | background-color: #0000004d; 15 | padding: 8px; 16 | margin: 8px; 17 | 18 | .red-team { 19 | .team-name { 20 | color: #e94f64; 21 | } 22 | } 23 | 24 | .blue-team { 25 | .team-name { 26 | color: #29b; 27 | } 28 | } 29 | } 30 | 31 | .send-button { 32 | display: flex; 33 | justify-content: flex-end; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/app/components/dialogs/send-beatmap-result/send-beatmap-result.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SendBeatmapResultComponent } from './send-beatmap-result.component'; 4 | 5 | describe('SendBeatmapResultComponent', () => { 6 | let component: SendBeatmapResultComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [SendBeatmapResultComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SendBeatmapResultComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/send-final-result/send-final-result.component.scss: -------------------------------------------------------------------------------- 1 | .loading { 2 | display: flex; 3 | align-items: center; 4 | 5 | .spinner { 6 | margin-right: 8px; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/app/components/dialogs/send-final-result/send-final-result.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SendFinalResultComponent } from './send-final-result.component'; 4 | 5 | describe('SendFinalResultComponent', () => { 6 | let component: SendFinalResultComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [SendFinalResultComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SendFinalResultComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/dialogs/tournament-add-user-dialog/tournament-add-user-dialog.component.scss: -------------------------------------------------------------------------------- 1 | .osu-user { 2 | .header { 3 | display: flex; 4 | 5 | background-position: center; 6 | background-size: cover; 7 | background-repeat: no-repeat; 8 | 9 | .avatar { 10 | display: flex; 11 | 12 | margin: 24px; 13 | 14 | width: 150px; 15 | height: 150px; 16 | 17 | border-radius: 50%; 18 | 19 | background-size: contain; 20 | } 21 | 22 | .information { 23 | margin: 24px; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app/core/directive/clickable-links.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, HostListener } from '@angular/core'; 2 | import { ElectronService } from 'app/services/electron.service'; 3 | 4 | @Directive({ 5 | selector: '[clickableLinks]' 6 | }) 7 | export class ClickableLinksDirective { 8 | constructor(private electronService: ElectronService) { } 9 | 10 | @HostListener('click', ['$event']) 11 | onClick($event: MouseEvent) { 12 | const target = $event.target as any; 13 | 14 | switch ($event.target.constructor) { 15 | case HTMLAnchorElement: 16 | $event.preventDefault(); 17 | this.electronService.openLink((target as HTMLAnchorElement).href); 18 | break; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/core/interceptors/credentials.interceptor.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { 3 | HttpRequest, 4 | HttpHandler, 5 | HttpEvent, 6 | HttpInterceptor 7 | } from '@angular/common/http'; 8 | import { Observable } from 'rxjs'; 9 | import { AppConfig } from 'environments/environment'; 10 | 11 | @Injectable() 12 | export class CredentialsInterceptor implements HttpInterceptor { 13 | constructor() { } 14 | 15 | intercept(request: HttpRequest, next: HttpHandler): Observable> { 16 | if (!request.url.startsWith(AppConfig.apiUrl)) { 17 | return next.handle(request); 18 | } 19 | 20 | request = request.clone({ 21 | withCredentials: true 22 | }); 23 | 24 | return next.handle(request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app/interfaces/i-ban-beatmap-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | import { WyModBracket } from 'app/models/wytournament/mappool/wy-mod-bracket'; 3 | import { WyModBracketMap } from 'app/models/wytournament/mappool/wy-mod-bracket-map'; 4 | 5 | export interface IBanBeatmapDialogData { 6 | beatmap: WyModBracketMap; 7 | modBracket: WyModBracket; 8 | multiplayerLobby: Lobby; 9 | 10 | banForTeam: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/interfaces/i-beatmap-mod-bracket-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | import { WyModBracket } from 'app/models/wytournament/mappool/wy-mod-bracket'; 3 | import { WyModBracketMap } from 'app/models/wytournament/mappool/wy-mod-bracket-map'; 4 | 5 | export interface IBeatmapModBracketDialogData { 6 | beatmap: WyModBracketMap; 7 | modBracket: WyModBracket; 8 | lobby: Lobby; 9 | } 10 | -------------------------------------------------------------------------------- /src/app/interfaces/i-delete-mod-bracket-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { WyModBracket } from 'app/models/wytournament/mappool/wy-mod-bracket'; 2 | 3 | export interface IDeleteModBracketDialogData { 4 | modBracket: WyModBracket; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-irc-shortcut-command-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { IrcShortcutCommand } from 'app/models/irc-shortcut-command'; 2 | import { Lobby } from 'app/models/lobby'; 3 | 4 | export interface IIrcShortcutCommandDialogData { 5 | ircShortcutCommand: IrcShortcutCommand; 6 | lobby: Lobby; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/interfaces/i-mappool-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { WyMappool } from 'app/models/wytournament/mappool/wy-mappool'; 2 | 3 | export interface IMappoolDialogData { 4 | mappool: WyMappool; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-multiplayer-lobby-delete-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | 3 | export interface IMultiplayerLobbyDeleteDialogData { 4 | multiplayerLobby: Lobby; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-multiplayer-lobby-move-player-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { MultiplayerLobbyPlayers } from 'app/models/multiplayer-lobby-players/multiplayer-lobby-players'; 2 | import { MultiplayerLobbyPlayersPlayer } from 'app/models/multiplayer-lobby-players/multiplayer-lobby-players-player'; 3 | 4 | export interface IMultiplayerLobbyMovePlayerDialogData { 5 | allPlayers: MultiplayerLobbyPlayers; 6 | movePlayer: MultiplayerLobbyPlayersPlayer; 7 | moveToSlot: number; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/interfaces/i-multiplayer-lobby-send-final-message-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | 3 | export interface IMultiplayerLobbySendFinalMessageDialogData { 4 | multiplayerLobby: Lobby; 5 | 6 | winByDefault: boolean; 7 | 8 | winningTeam: string; 9 | losingTeam: string; 10 | 11 | extraMessage: string; 12 | 13 | qualifierLobby: boolean; 14 | } 15 | -------------------------------------------------------------------------------- /src/app/interfaces/i-multiplayer-lobby-settings-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | 3 | export interface IMultiplayerLobbySettingsDialogData { 4 | multiplayerLobby: Lobby; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-protect-beatmap-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | import { WyModBracket } from 'app/models/wytournament/mappool/wy-mod-bracket'; 3 | import { WyModBracketMap } from 'app/models/wytournament/mappool/wy-mod-bracket-map'; 4 | 5 | export interface IProtectBeatmapDialogData { 6 | beatmap: WyModBracketMap; 7 | modBracket: WyModBracket; 8 | multiplayerLobby: Lobby; 9 | 10 | protectForTeam: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/interfaces/i-send-beatmap-result-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { Lobby } from 'app/models/lobby'; 2 | 3 | export interface ISendBeatmapResultDialogData { 4 | multiplayerLobby: Lobby; 5 | ircChannel: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/interfaces/i-team-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { WyTeam } from 'app/models/wytournament/wy-team'; 2 | 3 | export interface ITeamDialogData { 4 | team: WyTeam; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-tournament-dialog-data.ts: -------------------------------------------------------------------------------- 1 | import { WyTournament } from 'app/models/wytournament/wy-tournament'; 2 | 3 | export interface ITournamentDialogData { 4 | tournament: WyTournament; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/interfaces/i-tournament-invite-dialog-data.ts: -------------------------------------------------------------------------------- 1 | export interface ITournamentInviteDialogData { 2 | administrator: boolean; 3 | access: boolean; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/layout/error/error.component.html: -------------------------------------------------------------------------------- 1 |

Something went wrong!

2 |

The route {{ route.url }} was not found. Click here to go back to the information page

-------------------------------------------------------------------------------- /src/app/layout/error/error.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/layout/error/error.component.scss -------------------------------------------------------------------------------- /src/app/layout/error/error.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ErrorComponent } from './error.component'; 4 | 5 | describe('ErrorComponent', () => { 6 | let component: ErrorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ErrorComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ErrorComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/error/error.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-error', 6 | templateUrl: './error.component.html', 7 | styleUrls: ['./error.component.scss'] 8 | }) 9 | 10 | export class ErrorComponent implements OnInit { 11 | constructor(public route: Router) { } 12 | ngOnInit() { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/layout/main/main.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 9 | 10 |
11 | 12 |
13 |
14 | -------------------------------------------------------------------------------- /src/app/layout/main/main.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { MainComponent } from './main.component'; 4 | 5 | describe('MainComponent', () => { 6 | let component: MainComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ MainComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(MainComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/main/main.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-main', 6 | templateUrl: './main.component.html', 7 | styleUrls: ['./main.component.scss'] 8 | }) 9 | 10 | export class MainComponent implements OnInit { 11 | constructor(public router: Router) { } 12 | ngOnInit() { } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/layout/sidebar/sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SidebarComponent } from './sidebar.component'; 4 | 5 | describe('SidebarComponent', () => { 6 | let component: SidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SidebarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SidebarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layout/updater/updater.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 20 | -------------------------------------------------------------------------------- /src/app/layout/updater/updater.component.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | 3 | .update { 4 | position: absolute; 5 | 6 | left: 0; 7 | right: 0; 8 | margin-left: auto; 9 | margin-right: auto; 10 | 11 | z-index: 4999; 12 | 13 | min-width: 300px; 14 | width: 25%; 15 | 16 | padding: 8px; 17 | background-color: $info; 18 | 19 | text-align: center; 20 | 21 | .header { 22 | font-weight: bold; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/layout/updater/updater.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UpdaterComponent } from './updater.component'; 4 | 5 | describe('UpdaterComponent', () => { 6 | let component: UpdaterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [UpdaterComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UpdaterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/models/authentication/role.ts: -------------------------------------------------------------------------------- 1 | export class Role { 2 | id: number; 3 | name: string; 4 | description: string; 5 | permanent: boolean; 6 | 7 | constructor(init?: Partial) { 8 | Object.assign(this, init); 9 | } 10 | 11 | /** 12 | * Make a true copy of the given object 13 | * 14 | * @param role the role to make a true copy of 15 | */ 16 | public static makeTrueCopy(role: Role): Role { 17 | return new Role({ 18 | id: role.id, 19 | name: role.name, 20 | description: role.description, 21 | permanent: role.permanent 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/models/cache/cache-beatmap.ts: -------------------------------------------------------------------------------- 1 | export class CacheBeatmap { 2 | name: string; 3 | beatmapId: number; 4 | beatmapSetId: number; 5 | beatmapUrl: string; 6 | 7 | constructor(init?: Partial) { 8 | Object.assign(this, init); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/cache/cache-modifier.ts: -------------------------------------------------------------------------------- 1 | export class CacheModifier { 2 | beatmap_name: string; 3 | beatmap_id: number; 4 | modifier: number; 5 | 6 | constructor(beatmap_name: string, beatmap_id: number, modifier: number) { 7 | this.beatmap_name = beatmap_name; 8 | this.beatmap_id = beatmap_id; 9 | this.modifier = modifier; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/cache/cache-user.ts: -------------------------------------------------------------------------------- 1 | export class CacheUser { 2 | user_id: number; 3 | username: string; 4 | 5 | constructor(init?: Partial) { 6 | Object.assign(this, init); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/app/models/multiplayer-lobby-players/multiplayer-lobby-players-player.ts: -------------------------------------------------------------------------------- 1 | export class MultiplayerLobbyPlayersPlayer { 2 | username: string; 3 | team: string; 4 | slot: number; 5 | status: string; 6 | mods: string[]; 7 | isHost: boolean; 8 | 9 | constructor() { 10 | this.username = 'Open'; 11 | this.team = 'invalid'; 12 | this.status = 'Not ready'; 13 | this.mods = []; 14 | this.isHost = false; 15 | } 16 | 17 | public static makeTrueCopy(player: MultiplayerLobbyPlayersPlayer): MultiplayerLobbyPlayersPlayer { 18 | const newPlayer = new MultiplayerLobbyPlayersPlayer(); 19 | 20 | newPlayer.slot = player.slot; 21 | newPlayer.username = player.username; 22 | newPlayer.team = player.team; 23 | newPlayer.status = player.status; 24 | newPlayer.mods = player.mods; 25 | newPlayer.isHost = player.isHost; 26 | 27 | return newPlayer; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/models/osu-models/multiplayer-game-score.ts: -------------------------------------------------------------------------------- 1 | export class MultiplayerGameScore { 2 | slot: number; 3 | team: number; 4 | user_id: number; 5 | score: number; 6 | maxcombo: number; 7 | rank: number; 8 | count50: number; 9 | count100: number; 10 | count300: number; 11 | countmiss: number; 12 | countgeki: number; 13 | countkatu: number; 14 | perfect: number; 15 | pass: number; 16 | enabled_mods: any; // unsure of data type 17 | 18 | constructor(init?: Partial) { 19 | Object.assign(this, init); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/models/osu-models/multiplayer-game.ts: -------------------------------------------------------------------------------- 1 | import { Gamemodes, Mods } from './osu'; 2 | import { MultiplayerGameScore } from './multiplayer-game-score'; 3 | 4 | export class MultiplayerGame { 5 | game_id: number; 6 | start_time: Date; 7 | end_time: Date; 8 | beatmap_id: number; 9 | play_mode: Gamemodes; 10 | match_type: number; 11 | scoring_type: number; 12 | team_type: number; 13 | mods: Mods; 14 | 15 | scores: MultiplayerGameScore[]; 16 | 17 | constructor(init?: Partial) { 18 | this.scores = []; 19 | 20 | Object.assign(this, init); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/models/osu-models/multiplayer-match.ts: -------------------------------------------------------------------------------- 1 | import { MultiplayerGame } from './multiplayer-game'; 2 | 3 | export class MultiplayerMatch { 4 | match_id: number; 5 | name: string; 6 | start_time: Date; 7 | end_time: Date; 8 | 9 | games: MultiplayerGame[]; 10 | 11 | constructor(init?: Partial) { 12 | this.games = []; 13 | 14 | Object.assign(this, init); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/models/osu-models/osu-user.ts: -------------------------------------------------------------------------------- 1 | export class OsuUser { 2 | user_id: number; 3 | username: string; 4 | join_date: Date; 5 | count300: number; 6 | count100: number; 7 | count50: number; 8 | playcount: number; 9 | ranked_score: number; 10 | total_score: number; 11 | pp_rank: number; 12 | level: number; 13 | pp_raw: number; 14 | accuracy: number; 15 | count_rank_ss: number; 16 | count_rank_ssh: number; 17 | count_rank_s: number; 18 | count_rank_sh: number; 19 | count_rank_a: number; 20 | country: string; 21 | total_seconds_played: number; 22 | pp_country_rank: number; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/models/picked-category.ts: -------------------------------------------------------------------------------- 1 | export class PickedCategory { 2 | modBracketName: string; 3 | categories: string[]; 4 | 5 | constructor(init?: Partial) { 6 | Object.assign(this, init); 7 | } 8 | 9 | public static makeTrueCopy(pickedCategory: PickedCategory): PickedCategory { 10 | return new PickedCategory({ 11 | modBracketName: pickedCategory.modBracketName, 12 | categories: pickedCategory.categories 13 | }); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/models/sidebar-item.ts: -------------------------------------------------------------------------------- 1 | export class SidebarItem { 2 | name: string; 3 | logo: string; 4 | svgIcon: string; 5 | link: string; 6 | subMenuItem: boolean; 7 | onlyShowWhenLoggedIn: boolean; 8 | onlyShowAsTournamentHost: boolean; 9 | onlyShowAsAdministrator: boolean; 10 | htmlElementId: string; 11 | 12 | constructor(init?: Partial) { 13 | Object.assign(this, init); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/models/slash-command.ts: -------------------------------------------------------------------------------- 1 | export class SlashCommand { 2 | name: string; 3 | description: string; 4 | execute: () => void; 5 | 6 | constructor(init?: Partial) { 7 | Object.assign(this, init); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/app/models/toast.ts: -------------------------------------------------------------------------------- 1 | export enum ToastType { 2 | Warning = 'warning', 3 | Information = 'information', 4 | Error = 'danger' 5 | } 6 | 7 | export class Toast { 8 | id: number; 9 | message: string; 10 | toastType: ToastType; 11 | duration: number; 12 | 13 | constructor(id: number, message: string, toastType: ToastType, duration: number) { 14 | this.id = id; 15 | this.message = message; 16 | this.toastType = toastType; 17 | this.duration = duration; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/models/tutorial/tutorial-category.ts: -------------------------------------------------------------------------------- 1 | import { TutorialStep } from './tutorial-step'; 2 | 3 | export class TutorialCategory { 4 | name: string; 5 | description: string; 6 | onCloseAction: () => void; 7 | private steps: TutorialStep[]; 8 | 9 | constructor(init?: Partial) { 10 | this.steps = []; 11 | Object.assign(this, init); 12 | } 13 | 14 | /** 15 | * Add a step to the tutorial 16 | * 17 | * @param step the step to add 18 | */ 19 | addStep(step: TutorialStep): void { 20 | this.steps.push(step); 21 | } 22 | 23 | /** 24 | * Get all steps from this tutorial 25 | */ 26 | getSteps(): TutorialStep[] { 27 | return this.steps; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/models/tutorial/tutorial-step.ts: -------------------------------------------------------------------------------- 1 | export class TutorialStep { 2 | route: string; 3 | targetElementIds: string[]; 4 | content: string; 5 | action: () => void; 6 | 7 | /** 8 | * Currently supported window locations: 9 | * - left 10 | * - bottom-right 11 | * - bottom-left 12 | */ 13 | windowLocation: string; 14 | 15 | constructor(init?: Partial) { 16 | this.targetElementIds = []; 17 | 18 | Object.assign(this, init); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/models/wybintournament/wybin-match.ts: -------------------------------------------------------------------------------- 1 | import { WyBinOpponent } from './wybin-opponent'; 2 | 3 | export class WyBinMatch { 4 | id: number; 5 | qualifierIdentifier: string; 6 | label: string; 7 | opponentOne: WyBinOpponent; 8 | opponentTwo: WyBinOpponent; 9 | 10 | constructor(init?: Partial) { 11 | Object.assign(this, init); 12 | } 13 | 14 | getMatchName() { 15 | if (this.qualifierIdentifier == null) { 16 | return `#${this.label}: ${this.opponentOne.name} vs. ${this.opponentTwo.name}`; 17 | } 18 | else { 19 | return `Qualifier lobby: ${this.qualifierIdentifier}`; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/models/wybintournament/wybin-opponent.ts: -------------------------------------------------------------------------------- 1 | export class WyBinOpponent { 2 | id: number; 3 | name: string; 4 | 5 | constructor(init?: Partial) { 6 | Object.assign(this, init); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/app/models/wytournament/mappool/wy-mod-category.ts: -------------------------------------------------------------------------------- 1 | export class WyModCategory { 2 | id: number; 3 | index: number; 4 | name: string; 5 | 6 | constructor(init?: Partial) { 7 | Object.assign(this, init); 8 | } 9 | 10 | /** 11 | * Create a true copy of the object 12 | * 13 | * @param modCategory the object to copy 14 | */ 15 | public static makeTrueCopy(modCategory: WyModCategory): WyModCategory { 16 | return new WyModCategory({ 17 | id: modCategory.id, 18 | index: modCategory.index, 19 | name: modCategory.name 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/models/wytournament/mappool/wy-mod.ts: -------------------------------------------------------------------------------- 1 | export class WyMod { 2 | id: number; 3 | name: string; 4 | value: string | number; 5 | index: number; 6 | 7 | constructor(init?: Partial) { 8 | Object.assign(this, init); 9 | } 10 | 11 | /** 12 | * Create a true copy of the object 13 | * 14 | * @param mod the object to copy 15 | */ 16 | public static makeTrueCopy(mod: WyMod): WyMod { 17 | return new WyMod({ 18 | id: mod.id, 19 | name: mod.name, 20 | value: mod.value 21 | }); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/models/wytournament/mappool/wy-mystery-mappool-helper.ts: -------------------------------------------------------------------------------- 1 | export class WyMysteryMappoolHelper { 2 | tournamentId: number; 3 | mappoolId: number; 4 | modBracketId: number; 5 | multiplayerLobbyName: string; 6 | refereeName: string; 7 | pickedCategories: { modBracketName: string; categories: string[] }[]; 8 | 9 | constructor(init?: Partial) { 10 | this.pickedCategories = []; 11 | Object.assign(this, init); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/models/wytournament/wy-stage.ts: -------------------------------------------------------------------------------- 1 | export class WyStage { 2 | id: string; 3 | wyBinStageId: number; 4 | name: string; 5 | index: number; 6 | hitpoints: number; 7 | bestOf: number; 8 | bans: number; 9 | 10 | constructor(init?: Partial) { 11 | Object.assign(this, init); 12 | } 13 | 14 | public static makeTrueCopy(stage: WyStage): WyStage { 15 | return new WyStage({ 16 | id: stage.id, 17 | wyBinStageId: stage.wyBinStageId, 18 | name: stage.name, 19 | hitpoints: stage.hitpoints, 20 | bestOf: stage.bestOf, 21 | bans: stage.bans 22 | }); 23 | } 24 | 25 | public static parseFromWyBin(stage: any): WyStage { 26 | return new WyStage({ 27 | wyBinStageId: stage.id, 28 | name: stage.name, 29 | bestOf: stage.bestOf, 30 | bans: stage.bans 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/models/wytournament/wy-team-player.ts: -------------------------------------------------------------------------------- 1 | export class WyTeamPlayer { 2 | id: number; 3 | name: string; 4 | userId: number; 5 | 6 | constructor(init?: Partial) { 7 | Object.assign(this, init); 8 | } 9 | 10 | /** 11 | * Create a true copy of the object 12 | * 13 | * @param teamPlayer the object to copy 14 | */ 15 | public static makeTrueCopy(teamPlayer: WyTeamPlayer): WyTeamPlayer { 16 | return new WyTeamPlayer({ 17 | id: teamPlayer.id, 18 | name: teamPlayer.name, 19 | userId: teamPlayer.userId 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/modules/authentication/authentication-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { AuthenticationComponent } from './components/authentication/authentication.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: AuthenticationComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | 14 | export class AuthenticationRoutingModule { } 15 | -------------------------------------------------------------------------------- /src/app/modules/authentication/authentication.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { AuthenticationRoutingModule } from './authentication-routing.module'; 5 | import { AuthenticationComponent } from './components/authentication/authentication.component'; 6 | import { SharedModule } from 'app/shared/shared.module'; 7 | 8 | 9 | @NgModule({ 10 | declarations: [ 11 | AuthenticationComponent 12 | ], 13 | imports: [ 14 | CommonModule, 15 | SharedModule, 16 | AuthenticationRoutingModule 17 | ] 18 | }) 19 | export class AuthenticationModule { } 20 | -------------------------------------------------------------------------------- /src/app/modules/authentication/components/authentication/authentication.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AuthenticationComponent } from './authentication.component'; 4 | 5 | describe('AuthenticationComponent', () => { 6 | let component: AuthenticationComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [AuthenticationComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AuthenticationComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-calculator/axs-calculator.component.scss: -------------------------------------------------------------------------------- 1 | .teams { 2 | display: flex; 3 | justify-content: space-between; 4 | 5 | .team { 6 | margin: 8px; 7 | 8 | .players { 9 | display: flex; 10 | flex-direction: column; 11 | 12 | .score-players { 13 | display: flex; 14 | flex-direction: row; 15 | } 16 | } 17 | } 18 | } 19 | 20 | .modifier, 21 | .score-area { 22 | margin: 8px; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-calculator/axs-calculator.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AxsCalculatorComponent } from './axs-calculator.component'; 4 | 5 | describe('AxsCalculatorComponent', () => { 6 | let component: AxsCalculatorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [AxsCalculatorComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AxsCalculatorComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-formula/axs-formula.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | width: 100%; 3 | } 4 | 5 | .no-margin { 6 | margin: 0; 7 | } 8 | 9 | .game { 10 | border: 1px solid darken(#3c4452, 15%); 11 | 12 | -webkit-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 13 | -moz-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 14 | box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 15 | 16 | padding: 8px; 17 | margin-bottom: 8px; 18 | } 19 | 20 | .table { 21 | border: 1px solid darken(#3c4452, 15%); 22 | 23 | -webkit-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 24 | -moz-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 25 | box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 26 | padding: 8px; 27 | 28 | width: 100%; 29 | 30 | thead { 31 | th { 32 | text-align: left; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-formula/axs-formula.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AxsFormulaComponent } from './axs-formula.component'; 4 | 5 | describe('AxsFormulaComponent', () => { 6 | let component: AxsFormulaComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [AxsFormulaComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AxsFormulaComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-information/axs-information.component.html: -------------------------------------------------------------------------------- 1 |

AxS - Accuracy x Score

2 |

AxS is a tournament hosted by Wesley, 3 | Sartan and Snowleopard that uses a custom score 5 | calculation. This area provides a few tools that are aimed towards development purposes for AxS, so most of it can 6 | be ignored for the normal user. 7 |

8 | 9 |

Manual calculation

10 |

As the title already suggests, on the Manual calculation tab you will be able to calculate scores using the AxS 11 | scoring algorithm.

12 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-information/axs-information.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/modules/axs/components/axs-information/axs-information.component.scss -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-information/axs-information.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AxsInformationComponent } from './axs-information.component'; 4 | 5 | describe('AxsInformationComponent', () => { 6 | let component: AxsInformationComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [AxsInformationComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AxsInformationComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-information/axs-information.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ElectronService } from 'app/services/electron.service'; 3 | 4 | @Component({ 5 | selector: 'app-axs-information', 6 | templateUrl: './axs-information.component.html', 7 | styleUrls: ['./axs-information.component.scss'] 8 | }) 9 | export class AxsInformationComponent implements OnInit { 10 | constructor(public electronService: ElectronService) { } 11 | ngOnInit(): void { } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/modules/axs/components/axs-router/axs-router.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AxsRouterComponent } from './axs-router.component'; 4 | 5 | describe('AxsRouterComponent', () => { 6 | let component: AxsRouterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [AxsRouterComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AxsRouterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/changelog/changelog-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { ChangelogComponent } from './components/changelog/changelog.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: ChangelogComponent }, 7 | { path: '**', component: ChangelogComponent } 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [RouterModule.forChild(routes)], 12 | exports: [RouterModule] 13 | }) 14 | export class ChangelogRoutingModule { } 15 | -------------------------------------------------------------------------------- /src/app/modules/changelog/changelog.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { ChangelogRoutingModule } from './changelog-routing.module'; 5 | import { ChangelogComponent } from './components/changelog/changelog.component'; 6 | import { SharedModule } from 'app/shared/shared.module'; 7 | import { MarkdownModule } from 'ngx-markdown'; 8 | 9 | 10 | @NgModule({ 11 | declarations: [ 12 | ChangelogComponent 13 | ], 14 | imports: [ 15 | CommonModule, 16 | ChangelogRoutingModule, 17 | MarkdownModule.forChild(), 18 | SharedModule 19 | ] 20 | }) 21 | export class ChangelogModule { } 22 | -------------------------------------------------------------------------------- /src/app/modules/changelog/components/changelog/changelog.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | CHANGELOG 4 |
5 | 6 |
7 | Our latest changelog for new features and updates for wyReferee. 8 |
9 | 10 |
11 |
12 |

{{ release.version }}

13 | 14 |
15 | 16 |
17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /src/app/modules/changelog/components/changelog/changelog.component.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | 3 | .changelog { 4 | display: flex; 5 | flex-direction: column; 6 | 7 | padding: 16px; 8 | 9 | height: 100%; 10 | 11 | .header { 12 | font-size: 28px; 13 | font-weight: bold; 14 | 15 | margin-bottom: 8px; 16 | 17 | color: $primary; 18 | } 19 | 20 | .description { 21 | margin-bottom: 8px; 22 | } 23 | 24 | .changelog-releases { 25 | overflow-x: auto; 26 | 27 | height: calc(100% - 40px); 28 | 29 | .release { 30 | margin-bottom: 32px; 31 | 32 | h2 { 33 | width: 100%; 34 | text-align: center; 35 | border-bottom: 1px solid $primary; 36 | line-height: 0.1em; 37 | margin: 8px 0 8px; 38 | 39 | span { 40 | padding: 0 10px; 41 | background-color: $background-color; 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/app/modules/changelog/components/changelog/changelog.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ChangelogComponent } from './changelog.component'; 4 | 5 | describe('ChangelogComponent', () => { 6 | let component: ChangelogComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ChangelogComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ChangelogComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/information/components/information/information.component.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | 3 | .hover { 4 | &:hover { 5 | cursor: pointer; 6 | } 7 | } 8 | 9 | .scroll { 10 | height: 100%; 11 | overflow-y: auto; 12 | } 13 | 14 | .row { 15 | display: grid; 16 | grid-template-columns: 1fr 1fr; 17 | 18 | gap: 8px; 19 | padding: 8px; 20 | 21 | border-bottom: 1px solid $primary; 22 | 23 | &.single-row { 24 | grid-template-columns: 1fr; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app/modules/information/components/information/information.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InformationComponent } from './information.component'; 4 | 5 | describe('InformationComponent', () => { 6 | let component: InformationComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [InformationComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InformationComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/information/components/information/information.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ElectronService } from 'app/services/electron.service'; 3 | import { AppConfig } from 'environments/environment'; 4 | 5 | @Component({ 6 | selector: 'app-information', 7 | templateUrl: './information.component.html', 8 | styleUrls: ['./information.component.scss'] 9 | }) 10 | export class InformationComponent implements OnInit { 11 | githubIssuesLink = AppConfig.links.githubIssues; 12 | discordServerLink = AppConfig.links.discordServer; 13 | 14 | constructor(public electronService: ElectronService) { } 15 | ngOnInit() { } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modules/information/information-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { InformationComponent } from './components/information/information.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: InformationComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class InformationRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/modules/information/information.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { InformationRoutingModule } from './information-routing.module'; 5 | import { SharedModule } from 'app/shared/shared.module'; 6 | import { InformationComponent } from './components/information/information.component'; 7 | 8 | 9 | @NgModule({ 10 | declarations: [ 11 | InformationComponent 12 | ], 13 | imports: [ 14 | CommonModule, 15 | SharedModule, 16 | InformationRoutingModule 17 | ] 18 | }) 19 | export class InformationModule { } 20 | -------------------------------------------------------------------------------- /src/app/modules/irc/components/irc-player-management/irc-player-management.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { IrcPlayerManagementComponent } from './irc-player-management.component'; 4 | 5 | describe('IrcPlayerManagementComponent', () => { 6 | let component: IrcPlayerManagementComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [IrcPlayerManagementComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IrcPlayerManagementComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/irc/components/irc-shortcut-commands/irc-shortcut-commands.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ ircShortcutCommand.label }} 5 |
6 |
7 | 8 |
9 | 10 |
11 |
12 | -------------------------------------------------------------------------------- /src/app/modules/irc/components/irc-shortcut-commands/irc-shortcut-commands.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { IrcShortcutCommandsComponent } from './irc-shortcut-commands.component'; 4 | 5 | describe('IrcShortcutCommandsComponent', () => { 6 | let component: IrcShortcutCommandsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [IrcShortcutCommandsComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IrcShortcutCommandsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/irc/components/irc/irc.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { IrcComponent } from './irc.component'; 4 | 5 | describe('IrcComponent', () => { 6 | let component: IrcComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [IrcComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IrcComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/irc/irc-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { IrcComponent } from 'app/modules/irc/components/irc/irc.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: IrcComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class IrcRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/modules/irc/irc.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { IrcRoutingModule } from './irc-routing.module'; 5 | import { IrcComponent } from 'app/modules/irc/components/irc/irc.component'; 6 | import { SharedModule } from 'app/shared/shared.module'; 7 | import { IrcShortcutCommandsComponent } from './components/irc-shortcut-commands/irc-shortcut-commands.component'; 8 | import { IrcPlayerManagementComponent } from './components/irc-player-management/irc-player-management.component'; 9 | 10 | 11 | @NgModule({ 12 | declarations: [ 13 | IrcComponent, 14 | IrcShortcutCommandsComponent, 15 | IrcPlayerManagementComponent 16 | ], 17 | imports: [ 18 | CommonModule, 19 | SharedModule, 20 | IrcRoutingModule 21 | ] 22 | }) 23 | export class IrcModule { } 24 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/all-lobbies/all-lobbies.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AllLobbiesComponent } from './all-lobbies.component'; 4 | 5 | describe('AllLobbiesComponent', () => { 6 | let component: AllLobbiesComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AllLobbiesComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AllLobbiesComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/create-lobby/create-lobby.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Create a new multiplayer lobby

3 |
4 | 5 | 6 | 7 | 12 |
13 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/create-lobby/create-lobby.component.scss: -------------------------------------------------------------------------------- 1 | .scroll { 2 | height: 100%; 3 | width: 100%; 4 | overflow-y: auto; 5 | 6 | padding-right: 8px; 7 | } 8 | 9 | .loading { 10 | display: flex; 11 | align-items: center; 12 | 13 | .spinner { 14 | margin-right: 4px; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/create-lobby/create-lobby.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CreateLobbyComponent } from './create-lobby.component'; 4 | 5 | describe('CreateLobbyComponent', () => { 6 | let component: CreateLobbyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CreateLobbyComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CreateLobbyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/join-lobby/join-lobby.component.scss: -------------------------------------------------------------------------------- 1 | .scroll { 2 | height: 100%; 3 | width: 100%; 4 | overflow-y: auto; 5 | 6 | padding-right: 8px; 7 | } 8 | 9 | .loading { 10 | display: flex; 11 | align-items: center; 12 | 13 | .spinner { 14 | margin-right: 4px; 15 | } 16 | } 17 | 18 | .extra-spacing { 19 | padding: 8px; 20 | } 21 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/join-lobby/join-lobby.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { JoinLobbyComponent } from './join-lobby.component'; 4 | 5 | describe('JoinLobbyComponent', () => { 6 | let component: JoinLobbyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [JoinLobbyComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(JoinLobbyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/lobby-form/lobby-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LobbyFormComponent } from './lobby-form.component'; 4 | 5 | describe('LobbyFormComponent', () => { 6 | let component: LobbyFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [LobbyFormComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LobbyFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/lobby/components/lobby-view/lobby-view.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LobbyViewComponent } from './lobby-view.component'; 4 | 5 | describe('LobbyViewComponent', () => { 6 | let component: LobbyViewComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [LobbyViewComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LobbyViewComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/settings/components/settings/settings.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SettingsComponent } from './settings.component'; 4 | 5 | describe('SettingsComponent', () => { 6 | let component: SettingsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [SettingsComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SettingsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/settings/models/options-menu.ts: -------------------------------------------------------------------------------- 1 | export class OptionsMenu { 2 | icon: string; 3 | message: string; 4 | buttonText: string; 5 | action: () => void; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/modules/settings/settings-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { SettingsComponent } from 'app/modules/settings/components/settings/settings.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: SettingsComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class SettingsRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/modules/settings/settings.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { SettingsRoutingModule } from './settings-routing.module'; 5 | import { SettingsComponent } from './components/settings/settings.component'; 6 | import { SharedModule } from 'app/shared/shared.module'; 7 | 8 | 9 | @NgModule({ 10 | declarations: [SettingsComponent], 11 | imports: [ 12 | CommonModule, 13 | SharedModule, 14 | SettingsRoutingModule 15 | ] 16 | }) 17 | export class SettingsModule { } 18 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament-card/tournament-card.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TournamentCardComponent } from './tournament-card.component'; 4 | 5 | describe('TournamentCardComponent', () => { 6 | let component: TournamentCardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [TournamentCardComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TournamentCardComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-access/tournament-access.component.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | 3 | .all-users { 4 | display: flex; 5 | flex-direction: column; 6 | 7 | margin-top: 8px; 8 | 9 | max-height: 250px; 10 | 11 | overflow-y: auto; 12 | 13 | .user { 14 | display: flex; 15 | flex: 1; 16 | justify-content: space-between; 17 | align-items: center; 18 | 19 | padding: 4px; 20 | 21 | background-color: $background-color; 22 | 23 | .link { 24 | &:hover { 25 | cursor: pointer; 26 | } 27 | } 28 | 29 | &:nth-child(odd) { 30 | background-color: lighten($background-color, 5%); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-general/tournament-general.component.scss: -------------------------------------------------------------------------------- 1 | .red { 2 | color: red; 3 | font-style: bold; 4 | } 5 | 6 | .green { 7 | color: #00ff00; 8 | font-style: bold; 9 | } 10 | 11 | .row { 12 | display: grid; 13 | grid-auto-flow: column; 14 | 15 | column-gap: 8px; 16 | 17 | &.r-2 { 18 | grid-template-columns: 1fr 1fr; 19 | } 20 | 21 | &.r-3 { 22 | grid-template-columns: 1fr 1fr 1fr; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-mappool/mappool/mappool.component.scss: -------------------------------------------------------------------------------- 1 | .categories { 2 | display: flex; 3 | flex-direction: row; 4 | flex-flow: row wrap; 5 | 6 | margin-top: 8px; 7 | padding: 16px; 8 | 9 | max-height: 350px; 10 | overflow-y: auto; 11 | 12 | -webkit-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 13 | -moz-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 14 | box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.75); 15 | 16 | .category { 17 | display: flex; 18 | flex-direction: row; 19 | flex: 1 1 21%; 20 | 21 | margin: 8px; 22 | } 23 | } 24 | 25 | .buttons { 26 | button { 27 | margin-right: 8px; 28 | 29 | &:last-child { 30 | margin-right: 0; 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-mappool/mappool/mappool.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { MappoolComponent } from './mappool.component'; 4 | 5 | describe('MappoolComponent', () => { 6 | let component: MappoolComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [MappoolComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(MappoolComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-mappool/mod-bracket/mod-bracket.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ModBracketComponent } from './mod-bracket.component'; 4 | 5 | describe('ModBracketComponent', () => { 6 | let component: ModBracketComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ModBracketComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ModBracketComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-stages/tournament-stages.component.scss: -------------------------------------------------------------------------------- 1 | .all-stages { 2 | display: flex; 3 | flex-direction: column; 4 | 5 | padding-top: 8px; 6 | padding-bottom: 8px; 7 | 8 | .stage { 9 | display: grid; 10 | grid-auto-flow: column; 11 | gap: 8px; 12 | 13 | .actions { 14 | display: flex; 15 | align-items: center; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-wybin/tournament-wybin.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/app/modules/tournament-management/components-utility/tournament/tournament-wybin/tournament-wybin.component.scss -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament-wybin/tournament-wybin.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TournamentWybinComponent } from './tournament-wybin.component'; 4 | 5 | describe('TournamentWybinComponent', () => { 6 | let component: TournamentWybinComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [TournamentWybinComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TournamentWybinComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament/tournament.component.scss: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament/tournament.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TournamentComponent } from './tournament.component'; 4 | 5 | describe('TournamentComponent', () => { 6 | let component: TournamentComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [TournamentComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TournamentComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components-utility/tournament/tournament/tournament.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit } from '@angular/core'; 2 | import { FormGroup } from '@angular/forms'; 3 | import { WyTournament } from 'app/models/wytournament/wy-tournament'; 4 | 5 | @Component({ 6 | selector: 'app-tournament', 7 | templateUrl: './tournament.component.html', 8 | styleUrls: ['./tournament.component.scss'] 9 | }) 10 | export class TournamentComponent implements OnInit { 11 | @Input() tournament: WyTournament; 12 | @Input() validationForm: FormGroup; 13 | 14 | constructor() { } 15 | ngOnInit(): void { } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components/management-router/management-router.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ManagementRouterComponent } from './management-router.component'; 4 | 5 | describe('ManagementRouterComponent', () => { 6 | let component: ManagementRouterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ManagementRouterComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ManagementRouterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components/tournament-manage/tournament-create/tournament-create.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Creating a new tournament

3 | 4 | 5 | One or more fields have not been filled in correctly. 6 | 7 |
    8 |
  • {{ error }}
  • 9 |
10 |
11 | 12 | 13 | 14 | 15 |
16 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components/tournament-manage/tournament-create/tournament-create.component.scss: -------------------------------------------------------------------------------- 1 | .extra-padding { 2 | margin-bottom: 15px; 3 | } 4 | 5 | .scroll { 6 | padding-right: 8px; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components/tournament-manage/tournament-edit/tournament-edit.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TournamentEditComponent } from './tournament-edit.component'; 4 | 5 | describe('TournamentEditComponent', () => { 6 | let component: TournamentEditComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [TournamentEditComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TournamentEditComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tournament-management/components/tournament-view/tournament-my-published/tournament-my-published.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | width: 100%; 3 | } 4 | 5 | .filters { 6 | display: flex; 7 | height: 60px; 8 | 9 | .filter { 10 | display: flex; 11 | flex: 1; 12 | 13 | margin-right: 8px; 14 | 15 | &:last-child { 16 | margin-right: 0; 17 | } 18 | } 19 | } 20 | 21 | .all-tournaments { 22 | height: calc(100% - 60px); 23 | overflow-y: auto; 24 | } 25 | -------------------------------------------------------------------------------- /src/app/modules/tutorial/components/tutorial-overview/tutorial-overview.component.html: -------------------------------------------------------------------------------- 1 |

Tutorials

2 |

Welcome to wyReferee's tutorials section, designed to provide you with an in-depth understanding of how wyReferee works and how to make the most out of its features.

3 |

If you would like to see a different tutorial that is not yet listed here, feel free to reach out and create an issue (click me).

4 | 5 |
6 |
7 |
8 |

{{ tutorial.name }}

9 |
10 | 11 |
12 | {{ tutorial.description }} 13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /src/app/modules/tutorial/components/tutorial-overview/tutorial-overview.component.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | 3 | .all-tutorials { 4 | display: grid; 5 | grid-template-columns: 1fr 1fr 1fr; 6 | 7 | gap: 8px; 8 | 9 | .tutorial { 10 | padding: 20px; 11 | border: 1px solid $primary; 12 | border-radius: 10px; 13 | box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.1); 14 | text-align: center; 15 | 16 | .tutorial-name { 17 | font-size: 24px; 18 | margin-bottom: 10px; 19 | } 20 | 21 | .tutorial-description { 22 | font-size: 16px; 23 | line-height: 1.5; 24 | } 25 | 26 | &:hover { 27 | cursor: pointer; 28 | border: 1px solid darken($primary, 15%); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/modules/tutorial/components/tutorial-overview/tutorial-overview.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TutorialOverviewComponent } from './tutorial-overview.component'; 4 | 5 | describe('TutorialOverviewComponent', () => { 6 | let component: TutorialOverviewComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [TutorialOverviewComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TutorialOverviewComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/tutorial/tutorial-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { TutorialOverviewComponent } from './components/tutorial-overview/tutorial-overview.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: TutorialOverviewComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class TutorialRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/modules/tutorial/tutorial.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { TutorialRoutingModule } from './tutorial-routing.module'; 5 | import { TutorialOverviewComponent } from './components/tutorial-overview/tutorial-overview.component'; 6 | 7 | @NgModule({ 8 | declarations: [ 9 | TutorialOverviewComponent 10 | ], 11 | imports: [ 12 | CommonModule, 13 | TutorialRoutingModule 14 | ] 15 | }) 16 | export class TutorialModule { } 17 | -------------------------------------------------------------------------------- /src/app/modules/webhook/components/webhook/webhook.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { WebhookComponent } from './webhook.component'; 4 | 5 | describe('WebhookComponent', () => { 6 | let component: WebhookComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [WebhookComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(WebhookComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/modules/webhook/webhook-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { WebhookComponent } from './components/webhook/webhook.component'; 4 | 5 | const routes: Routes = [ 6 | { path: '', component: WebhookComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class WebhookRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/modules/webhook/webhook.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { WebhookRoutingModule } from './webhook-routing.module'; 5 | import { SharedModule } from 'app/shared/shared.module'; 6 | import { WebhookComponent } from './components/webhook/webhook.component'; 7 | import { MarkdownModule } from 'ngx-markdown'; 8 | 9 | 10 | @NgModule({ 11 | declarations: [ 12 | WebhookComponent 13 | ], 14 | imports: [ 15 | CommonModule, 16 | SharedModule, 17 | WebhookRoutingModule, 18 | MarkdownModule.forChild() 19 | ] 20 | }) 21 | export class WebhookModule { } 22 | -------------------------------------------------------------------------------- /src/app/services/osu-api/api-key-validation.service.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs'; 2 | import { OsuUser } from '../../models/osu-models/osu-user'; 3 | import { HttpClient } from '@angular/common/http'; 4 | import { Injectable } from '@angular/core'; 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | 10 | export class ApiKeyValidation { 11 | // The best player in osu! 12 | userId = 2407265; 13 | 14 | constructor(private httpClient: HttpClient) { } 15 | 16 | /** 17 | * Validate an api key by making a call to the osu! api 18 | * 19 | * @param apiKey the api key to validate 20 | */ 21 | validate(apiKey: string): Observable { 22 | return this.httpClient.get(`https://osu.ppy.sh/api/get_user?k=${apiKey}&u=${this.userId}&type=id`); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/shared/components/alert/alert.component.html: -------------------------------------------------------------------------------- 1 |
9 |
10 | error_outline 11 | done 12 | warning_amber 13 | error_outline 14 |
15 | 16 |
17 | 18 |
19 |
20 | -------------------------------------------------------------------------------- /src/app/shared/components/alert/alert.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AlertComponent } from './alert.component'; 4 | 5 | describe('AlertComponent', () => { 6 | let component: AlertComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [AlertComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AlertComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/shared/components/alert/alert.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-alert', 5 | templateUrl: './alert.component.html', 6 | styleUrls: ['./alert.component.scss'] 7 | }) 8 | export class AlertComponent implements OnInit { 9 | @Input() alertType: string; 10 | @Input() noMarginTop: boolean; 11 | @Input() noMarginBottom: boolean; 12 | @Input() noMargin: boolean; 13 | 14 | constructor() { } 15 | ngOnInit(): void { } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/shared/components/debug/debug.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DebugComponent } from './debug.component'; 4 | 5 | describe('DebugComponent', () => { 6 | let component: DebugComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [DebugComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DebugComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/shared/components/toast/toast.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ToastComponent } from './toast.component'; 4 | 5 | describe('ToastComponent', () => { 6 | let component: ToastComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ToastComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ToastComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/shared/components/tutorial/tutorial.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TutorialComponent } from './tutorial.component'; 4 | 5 | describe('TutorialComponent', () => { 6 | let component: TutorialComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [TutorialComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TutorialComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/shared/directives/ng-var.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; 2 | 3 | @Directive({ 4 | selector: '[ngVar]' 5 | }) 6 | export class NgVarDirective { 7 | private context: { $implicit: unknown; ngVar: unknown } = { 8 | $implicit: null, 9 | ngVar: null, 10 | }; 11 | 12 | private hasView = false; 13 | 14 | constructor(private templateRef: TemplateRef, private vcRef: ViewContainerRef) { } 15 | 16 | @Input() 17 | set ngVar(context: unknown) { 18 | this.context.$implicit = this.context.ngVar = context; 19 | 20 | if (!this.hasView) { 21 | this.vcRef.createEmbeddedView(this.templateRef, this.context); 22 | this.hasView = true; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/shared/misc.ts: -------------------------------------------------------------------------------- 1 | export class Misc { 2 | /** 3 | * Split the string 4 | * 5 | * @param nStr the string to split 6 | * @param splitter the character to split the string with 7 | */ 8 | public static addDot(nStr: string | number, splitter: string) { 9 | nStr = nStr.toString(); 10 | const x = nStr.split('.'); 11 | let x1: string = x[0]; 12 | const x2 = x.length > 1 ? `.${x[1]}` : ''; 13 | const rgx = /(\d+)(\d{3})/; 14 | 15 | while (rgx.test(x1)) { 16 | x1 = x1.replace(rgx, `$1${splitter}$2`); 17 | } 18 | 19 | return x1 + x2; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/shared/pipes/filter-team.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import { WyTeam } from 'app/models/wytournament/wy-team'; 3 | 4 | @Pipe({ 5 | name: 'filterTeam' 6 | }) 7 | export class FilterTeamPipe implements PipeTransform { 8 | transform(teams: WyTeam[], searchValue: string) { 9 | let returnTeams: WyTeam[] = []; 10 | 11 | if (searchValue == null || searchValue == undefined || searchValue == '') { 12 | return teams; 13 | } 14 | 15 | returnTeams = teams; 16 | 17 | if (searchValue != null) { 18 | returnTeams = returnTeams.filter(team => team.name.toLowerCase().includes(searchValue.toLowerCase())); 19 | } 20 | 21 | return returnTeams; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/shared/pipes/reverse.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | 3 | @Pipe({ 4 | name: 'reverse' 5 | }) 6 | export class ReversePipe implements PipeTransform { 7 | transform(value: any) { 8 | return value.slice().reverse(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/pipes/search.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import { User } from 'app/models/authentication/user'; 3 | 4 | @Pipe({ 5 | name: 'search' 6 | }) 7 | 8 | export class SearchPipe implements PipeTransform { 9 | transform(allUsers: User[], username: string): any { 10 | if (username == '' || username == undefined) { 11 | return allUsers; 12 | } 13 | 14 | let returnUsers: User[] = []; 15 | 16 | returnUsers = allUsers.filter(user => user.username.toLowerCase().indexOf(username.toLowerCase()) > -1); 17 | 18 | return returnUsers; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/icons/exclamation-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/exclamation-triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/hammer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/info-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/trophy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/flags/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ad.png -------------------------------------------------------------------------------- /src/assets/images/flags/ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ae.png -------------------------------------------------------------------------------- /src/assets/images/flags/af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/af.png -------------------------------------------------------------------------------- /src/assets/images/flags/ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ag.png -------------------------------------------------------------------------------- /src/assets/images/flags/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ai.png -------------------------------------------------------------------------------- /src/assets/images/flags/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/al.png -------------------------------------------------------------------------------- /src/assets/images/flags/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/am.png -------------------------------------------------------------------------------- /src/assets/images/flags/ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ao.png -------------------------------------------------------------------------------- /src/assets/images/flags/aq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/aq.png -------------------------------------------------------------------------------- /src/assets/images/flags/ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ar.png -------------------------------------------------------------------------------- /src/assets/images/flags/as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/as.png -------------------------------------------------------------------------------- /src/assets/images/flags/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/at.png -------------------------------------------------------------------------------- /src/assets/images/flags/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/au.png -------------------------------------------------------------------------------- /src/assets/images/flags/aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/aw.png -------------------------------------------------------------------------------- /src/assets/images/flags/ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ax.png -------------------------------------------------------------------------------- /src/assets/images/flags/az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/az.png -------------------------------------------------------------------------------- /src/assets/images/flags/ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ba.png -------------------------------------------------------------------------------- /src/assets/images/flags/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bb.png -------------------------------------------------------------------------------- /src/assets/images/flags/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bd.png -------------------------------------------------------------------------------- /src/assets/images/flags/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/be.png -------------------------------------------------------------------------------- /src/assets/images/flags/bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bf.png -------------------------------------------------------------------------------- /src/assets/images/flags/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bg.png -------------------------------------------------------------------------------- /src/assets/images/flags/bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bh.png -------------------------------------------------------------------------------- /src/assets/images/flags/bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bi.png -------------------------------------------------------------------------------- /src/assets/images/flags/bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bj.png -------------------------------------------------------------------------------- /src/assets/images/flags/bl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bl.png -------------------------------------------------------------------------------- /src/assets/images/flags/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bm.png -------------------------------------------------------------------------------- /src/assets/images/flags/bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bn.png -------------------------------------------------------------------------------- /src/assets/images/flags/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bo.png -------------------------------------------------------------------------------- /src/assets/images/flags/bq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bq.png -------------------------------------------------------------------------------- /src/assets/images/flags/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/br.png -------------------------------------------------------------------------------- /src/assets/images/flags/bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bs.png -------------------------------------------------------------------------------- /src/assets/images/flags/bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bt.png -------------------------------------------------------------------------------- /src/assets/images/flags/bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bv.png -------------------------------------------------------------------------------- /src/assets/images/flags/bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bw.png -------------------------------------------------------------------------------- /src/assets/images/flags/by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/by.png -------------------------------------------------------------------------------- /src/assets/images/flags/bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/bz.png -------------------------------------------------------------------------------- /src/assets/images/flags/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ca.png -------------------------------------------------------------------------------- /src/assets/images/flags/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cc.png -------------------------------------------------------------------------------- /src/assets/images/flags/cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cd.png -------------------------------------------------------------------------------- /src/assets/images/flags/cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cf.png -------------------------------------------------------------------------------- /src/assets/images/flags/cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cg.png -------------------------------------------------------------------------------- /src/assets/images/flags/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ch.png -------------------------------------------------------------------------------- /src/assets/images/flags/ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ci.png -------------------------------------------------------------------------------- /src/assets/images/flags/ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ck.png -------------------------------------------------------------------------------- /src/assets/images/flags/cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cl.png -------------------------------------------------------------------------------- /src/assets/images/flags/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cm.png -------------------------------------------------------------------------------- /src/assets/images/flags/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cn.png -------------------------------------------------------------------------------- /src/assets/images/flags/co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/co.png -------------------------------------------------------------------------------- /src/assets/images/flags/cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cr.png -------------------------------------------------------------------------------- /src/assets/images/flags/cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cu.png -------------------------------------------------------------------------------- /src/assets/images/flags/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cv.png -------------------------------------------------------------------------------- /src/assets/images/flags/cw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cw.png -------------------------------------------------------------------------------- /src/assets/images/flags/cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cx.png -------------------------------------------------------------------------------- /src/assets/images/flags/cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cy.png -------------------------------------------------------------------------------- /src/assets/images/flags/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/cz.png -------------------------------------------------------------------------------- /src/assets/images/flags/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/de.png -------------------------------------------------------------------------------- /src/assets/images/flags/dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/dj.png -------------------------------------------------------------------------------- /src/assets/images/flags/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/dk.png -------------------------------------------------------------------------------- /src/assets/images/flags/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/dm.png -------------------------------------------------------------------------------- /src/assets/images/flags/do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/do.png -------------------------------------------------------------------------------- /src/assets/images/flags/dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/dz.png -------------------------------------------------------------------------------- /src/assets/images/flags/ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ec.png -------------------------------------------------------------------------------- /src/assets/images/flags/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ee.png -------------------------------------------------------------------------------- /src/assets/images/flags/eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/eg.png -------------------------------------------------------------------------------- /src/assets/images/flags/eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/eh.png -------------------------------------------------------------------------------- /src/assets/images/flags/er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/er.png -------------------------------------------------------------------------------- /src/assets/images/flags/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/es.png -------------------------------------------------------------------------------- /src/assets/images/flags/et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/et.png -------------------------------------------------------------------------------- /src/assets/images/flags/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fi.png -------------------------------------------------------------------------------- /src/assets/images/flags/fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fj.png -------------------------------------------------------------------------------- /src/assets/images/flags/fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fk.png -------------------------------------------------------------------------------- /src/assets/images/flags/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fm.png -------------------------------------------------------------------------------- /src/assets/images/flags/fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fo.png -------------------------------------------------------------------------------- /src/assets/images/flags/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/fr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ga.png -------------------------------------------------------------------------------- /src/assets/images/flags/gb-eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gb-eng.png -------------------------------------------------------------------------------- /src/assets/images/flags/gb-nir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gb-nir.png -------------------------------------------------------------------------------- /src/assets/images/flags/gb-sct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gb-sct.png -------------------------------------------------------------------------------- /src/assets/images/flags/gb-wls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gb-wls.png -------------------------------------------------------------------------------- /src/assets/images/flags/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gb.png -------------------------------------------------------------------------------- /src/assets/images/flags/gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gd.png -------------------------------------------------------------------------------- /src/assets/images/flags/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ge.png -------------------------------------------------------------------------------- /src/assets/images/flags/gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gf.png -------------------------------------------------------------------------------- /src/assets/images/flags/gg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gg.png -------------------------------------------------------------------------------- /src/assets/images/flags/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gh.png -------------------------------------------------------------------------------- /src/assets/images/flags/gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gi.png -------------------------------------------------------------------------------- /src/assets/images/flags/gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gl.png -------------------------------------------------------------------------------- /src/assets/images/flags/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gm.png -------------------------------------------------------------------------------- /src/assets/images/flags/gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gn.png -------------------------------------------------------------------------------- /src/assets/images/flags/gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gp.png -------------------------------------------------------------------------------- /src/assets/images/flags/gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gq.png -------------------------------------------------------------------------------- /src/assets/images/flags/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gr.png -------------------------------------------------------------------------------- /src/assets/images/flags/gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gs.png -------------------------------------------------------------------------------- /src/assets/images/flags/gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gt.png -------------------------------------------------------------------------------- /src/assets/images/flags/gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gu.png -------------------------------------------------------------------------------- /src/assets/images/flags/gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gw.png -------------------------------------------------------------------------------- /src/assets/images/flags/gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/gy.png -------------------------------------------------------------------------------- /src/assets/images/flags/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/hk.png -------------------------------------------------------------------------------- /src/assets/images/flags/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/hm.png -------------------------------------------------------------------------------- /src/assets/images/flags/hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/hn.png -------------------------------------------------------------------------------- /src/assets/images/flags/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/hr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ht.png -------------------------------------------------------------------------------- /src/assets/images/flags/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/hu.png -------------------------------------------------------------------------------- /src/assets/images/flags/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/id.png -------------------------------------------------------------------------------- /src/assets/images/flags/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ie.png -------------------------------------------------------------------------------- /src/assets/images/flags/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/il.png -------------------------------------------------------------------------------- /src/assets/images/flags/im.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/im.png -------------------------------------------------------------------------------- /src/assets/images/flags/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/in.png -------------------------------------------------------------------------------- /src/assets/images/flags/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/io.png -------------------------------------------------------------------------------- /src/assets/images/flags/iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/iq.png -------------------------------------------------------------------------------- /src/assets/images/flags/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ir.png -------------------------------------------------------------------------------- /src/assets/images/flags/is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/is.png -------------------------------------------------------------------------------- /src/assets/images/flags/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/it.png -------------------------------------------------------------------------------- /src/assets/images/flags/je.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/je.png -------------------------------------------------------------------------------- /src/assets/images/flags/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/jm.png -------------------------------------------------------------------------------- /src/assets/images/flags/jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/jo.png -------------------------------------------------------------------------------- /src/assets/images/flags/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/jp.png -------------------------------------------------------------------------------- /src/assets/images/flags/ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ke.png -------------------------------------------------------------------------------- /src/assets/images/flags/kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kg.png -------------------------------------------------------------------------------- /src/assets/images/flags/kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kh.png -------------------------------------------------------------------------------- /src/assets/images/flags/ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ki.png -------------------------------------------------------------------------------- /src/assets/images/flags/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/km.png -------------------------------------------------------------------------------- /src/assets/images/flags/kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kn.png -------------------------------------------------------------------------------- /src/assets/images/flags/kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kp.png -------------------------------------------------------------------------------- /src/assets/images/flags/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kr.png -------------------------------------------------------------------------------- /src/assets/images/flags/kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kw.png -------------------------------------------------------------------------------- /src/assets/images/flags/ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ky.png -------------------------------------------------------------------------------- /src/assets/images/flags/kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/kz.png -------------------------------------------------------------------------------- /src/assets/images/flags/la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/la.png -------------------------------------------------------------------------------- /src/assets/images/flags/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lb.png -------------------------------------------------------------------------------- /src/assets/images/flags/lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lc.png -------------------------------------------------------------------------------- /src/assets/images/flags/li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/li.png -------------------------------------------------------------------------------- /src/assets/images/flags/lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lk.png -------------------------------------------------------------------------------- /src/assets/images/flags/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ls.png -------------------------------------------------------------------------------- /src/assets/images/flags/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lt.png -------------------------------------------------------------------------------- /src/assets/images/flags/lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lu.png -------------------------------------------------------------------------------- /src/assets/images/flags/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/lv.png -------------------------------------------------------------------------------- /src/assets/images/flags/ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ly.png -------------------------------------------------------------------------------- /src/assets/images/flags/ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ma.png -------------------------------------------------------------------------------- /src/assets/images/flags/mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mc.png -------------------------------------------------------------------------------- /src/assets/images/flags/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/md.png -------------------------------------------------------------------------------- /src/assets/images/flags/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/me.png -------------------------------------------------------------------------------- /src/assets/images/flags/mf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mf.png -------------------------------------------------------------------------------- /src/assets/images/flags/mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mg.png -------------------------------------------------------------------------------- /src/assets/images/flags/mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mh.png -------------------------------------------------------------------------------- /src/assets/images/flags/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mk.png -------------------------------------------------------------------------------- /src/assets/images/flags/ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ml.png -------------------------------------------------------------------------------- /src/assets/images/flags/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mm.png -------------------------------------------------------------------------------- /src/assets/images/flags/mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mn.png -------------------------------------------------------------------------------- /src/assets/images/flags/mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mo.png -------------------------------------------------------------------------------- /src/assets/images/flags/mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mp.png -------------------------------------------------------------------------------- /src/assets/images/flags/mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mq.png -------------------------------------------------------------------------------- /src/assets/images/flags/mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ms.png -------------------------------------------------------------------------------- /src/assets/images/flags/mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mt.png -------------------------------------------------------------------------------- /src/assets/images/flags/mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mu.png -------------------------------------------------------------------------------- /src/assets/images/flags/mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mv.png -------------------------------------------------------------------------------- /src/assets/images/flags/mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mw.png -------------------------------------------------------------------------------- /src/assets/images/flags/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mx.png -------------------------------------------------------------------------------- /src/assets/images/flags/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/my.png -------------------------------------------------------------------------------- /src/assets/images/flags/mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/mz.png -------------------------------------------------------------------------------- /src/assets/images/flags/na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/na.png -------------------------------------------------------------------------------- /src/assets/images/flags/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nc.png -------------------------------------------------------------------------------- /src/assets/images/flags/ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ne.png -------------------------------------------------------------------------------- /src/assets/images/flags/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nf.png -------------------------------------------------------------------------------- /src/assets/images/flags/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ng.png -------------------------------------------------------------------------------- /src/assets/images/flags/ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ni.png -------------------------------------------------------------------------------- /src/assets/images/flags/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nl.png -------------------------------------------------------------------------------- /src/assets/images/flags/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/no.png -------------------------------------------------------------------------------- /src/assets/images/flags/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/np.png -------------------------------------------------------------------------------- /src/assets/images/flags/nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nr.png -------------------------------------------------------------------------------- /src/assets/images/flags/nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nu.png -------------------------------------------------------------------------------- /src/assets/images/flags/nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/nz.png -------------------------------------------------------------------------------- /src/assets/images/flags/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/om.png -------------------------------------------------------------------------------- /src/assets/images/flags/pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pa.png -------------------------------------------------------------------------------- /src/assets/images/flags/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pe.png -------------------------------------------------------------------------------- /src/assets/images/flags/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pf.png -------------------------------------------------------------------------------- /src/assets/images/flags/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pg.png -------------------------------------------------------------------------------- /src/assets/images/flags/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ph.png -------------------------------------------------------------------------------- /src/assets/images/flags/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pk.png -------------------------------------------------------------------------------- /src/assets/images/flags/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pl.png -------------------------------------------------------------------------------- /src/assets/images/flags/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pm.png -------------------------------------------------------------------------------- /src/assets/images/flags/pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pn.png -------------------------------------------------------------------------------- /src/assets/images/flags/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ps.png -------------------------------------------------------------------------------- /src/assets/images/flags/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pt.png -------------------------------------------------------------------------------- /src/assets/images/flags/pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/pw.png -------------------------------------------------------------------------------- /src/assets/images/flags/py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/py.png -------------------------------------------------------------------------------- /src/assets/images/flags/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/qa.png -------------------------------------------------------------------------------- /src/assets/images/flags/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/re.png -------------------------------------------------------------------------------- /src/assets/images/flags/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ro.png -------------------------------------------------------------------------------- /src/assets/images/flags/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/rs.png -------------------------------------------------------------------------------- /src/assets/images/flags/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ru.png -------------------------------------------------------------------------------- /src/assets/images/flags/rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/rw.png -------------------------------------------------------------------------------- /src/assets/images/flags/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sa.png -------------------------------------------------------------------------------- /src/assets/images/flags/sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sb.png -------------------------------------------------------------------------------- /src/assets/images/flags/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sc.png -------------------------------------------------------------------------------- /src/assets/images/flags/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sd.png -------------------------------------------------------------------------------- /src/assets/images/flags/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/se.png -------------------------------------------------------------------------------- /src/assets/images/flags/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sg.png -------------------------------------------------------------------------------- /src/assets/images/flags/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sh.png -------------------------------------------------------------------------------- /src/assets/images/flags/si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/si.png -------------------------------------------------------------------------------- /src/assets/images/flags/sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sj.png -------------------------------------------------------------------------------- /src/assets/images/flags/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sk.png -------------------------------------------------------------------------------- /src/assets/images/flags/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sl.png -------------------------------------------------------------------------------- /src/assets/images/flags/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sm.png -------------------------------------------------------------------------------- /src/assets/images/flags/sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sn.png -------------------------------------------------------------------------------- /src/assets/images/flags/so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/so.png -------------------------------------------------------------------------------- /src/assets/images/flags/sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sr.png -------------------------------------------------------------------------------- /src/assets/images/flags/ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ss.png -------------------------------------------------------------------------------- /src/assets/images/flags/st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/st.png -------------------------------------------------------------------------------- /src/assets/images/flags/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sv.png -------------------------------------------------------------------------------- /src/assets/images/flags/sx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sx.png -------------------------------------------------------------------------------- /src/assets/images/flags/sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sy.png -------------------------------------------------------------------------------- /src/assets/images/flags/sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/sz.png -------------------------------------------------------------------------------- /src/assets/images/flags/tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tc.png -------------------------------------------------------------------------------- /src/assets/images/flags/td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/td.png -------------------------------------------------------------------------------- /src/assets/images/flags/tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tf.png -------------------------------------------------------------------------------- /src/assets/images/flags/tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tg.png -------------------------------------------------------------------------------- /src/assets/images/flags/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/th.png -------------------------------------------------------------------------------- /src/assets/images/flags/tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tj.png -------------------------------------------------------------------------------- /src/assets/images/flags/tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tk.png -------------------------------------------------------------------------------- /src/assets/images/flags/tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tl.png -------------------------------------------------------------------------------- /src/assets/images/flags/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tm.png -------------------------------------------------------------------------------- /src/assets/images/flags/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tn.png -------------------------------------------------------------------------------- /src/assets/images/flags/to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/to.png -------------------------------------------------------------------------------- /src/assets/images/flags/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tr.png -------------------------------------------------------------------------------- /src/assets/images/flags/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tt.png -------------------------------------------------------------------------------- /src/assets/images/flags/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tv.png -------------------------------------------------------------------------------- /src/assets/images/flags/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tw.png -------------------------------------------------------------------------------- /src/assets/images/flags/tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/tz.png -------------------------------------------------------------------------------- /src/assets/images/flags/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ua.png -------------------------------------------------------------------------------- /src/assets/images/flags/ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ug.png -------------------------------------------------------------------------------- /src/assets/images/flags/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/um.png -------------------------------------------------------------------------------- /src/assets/images/flags/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/us.png -------------------------------------------------------------------------------- /src/assets/images/flags/uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/uy.png -------------------------------------------------------------------------------- /src/assets/images/flags/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/uz.png -------------------------------------------------------------------------------- /src/assets/images/flags/va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/va.png -------------------------------------------------------------------------------- /src/assets/images/flags/vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/vc.png -------------------------------------------------------------------------------- /src/assets/images/flags/ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ve.png -------------------------------------------------------------------------------- /src/assets/images/flags/vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/vg.png -------------------------------------------------------------------------------- /src/assets/images/flags/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/vi.png -------------------------------------------------------------------------------- /src/assets/images/flags/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/vn.png -------------------------------------------------------------------------------- /src/assets/images/flags/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/vu.png -------------------------------------------------------------------------------- /src/assets/images/flags/wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/wf.png -------------------------------------------------------------------------------- /src/assets/images/flags/ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ws.png -------------------------------------------------------------------------------- /src/assets/images/flags/xk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/xk.png -------------------------------------------------------------------------------- /src/assets/images/flags/ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/ye.png -------------------------------------------------------------------------------- /src/assets/images/flags/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/yt.png -------------------------------------------------------------------------------- /src/assets/images/flags/za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/za.png -------------------------------------------------------------------------------- /src/assets/images/flags/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/zm.png -------------------------------------------------------------------------------- /src/assets/images/flags/zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/flags/zw.png -------------------------------------------------------------------------------- /src/assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/icon.png -------------------------------------------------------------------------------- /src/assets/images/mac-icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/mac-icon/icon.png -------------------------------------------------------------------------------- /src/assets/images/osulogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/images/osulogo.png -------------------------------------------------------------------------------- /src/assets/osu-mods/README: -------------------------------------------------------------------------------- 1 | Taken from https://github.com/ppy/osu-web/tree/master/public/images/badges 2 | I do not own these images. If you wish for me to take these images down shoot me a message so I can find alternatives. 3 | -------------------------------------------------------------------------------- /src/assets/osu-mods/dt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/dt.png -------------------------------------------------------------------------------- /src/assets/osu-mods/dt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/dt@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/ez.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/ez.png -------------------------------------------------------------------------------- /src/assets/osu-mods/ez@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/ez@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/fl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/fl.png -------------------------------------------------------------------------------- /src/assets/osu-mods/fl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/fl@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/hd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/hd.png -------------------------------------------------------------------------------- /src/assets/osu-mods/hd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/hd@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/hr.png -------------------------------------------------------------------------------- /src/assets/osu-mods/hr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/hr@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/ht.png -------------------------------------------------------------------------------- /src/assets/osu-mods/ht@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/ht@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nc.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nc@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nf.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nf@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nf@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nm.png -------------------------------------------------------------------------------- /src/assets/osu-mods/nm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/nm@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/pf.png -------------------------------------------------------------------------------- /src/assets/osu-mods/pf@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/pf@2x.png -------------------------------------------------------------------------------- /src/assets/osu-mods/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/sd.png -------------------------------------------------------------------------------- /src/assets/osu-mods/sd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/osu-mods/sd@2x.png -------------------------------------------------------------------------------- /src/assets/stairs.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wesley-221/wyReferee/10bdd2adc26bfd81ddb3722ab6eeb4c791066f18/src/assets/stairs.mp3 -------------------------------------------------------------------------------- /src/bootstrap.scss: -------------------------------------------------------------------------------- 1 | .container, 2 | .container-fluid { 3 | width: 100%; 4 | margin-right: auto; 5 | margin-left: auto; 6 | } 7 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const AppConfig = { 2 | production: true, 3 | environment: 'PROD', 4 | apiUrl: 'https://api.wybin.xyz/', 5 | osu: { 6 | client_id: 8144, 7 | redirect_uri: 'http://localhost:3000/osu-oauth-callback' 8 | }, 9 | links: { 10 | githubIssues: 'https://github.com/wesley-221/wyReferee/issues', 11 | discordServer: 'https://discord.gg/wEaXFJ58kE' 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | export const AppConfig = { 2 | production: false, 3 | environment: 'LOCAL', 4 | apiUrl: 'http://localhost:8080/', 5 | osu: { 6 | client_id: 8144, 7 | redirect_uri: 'http://localhost:3000/osu-oauth-callback' 8 | }, 9 | links: { 10 | githubIssues: 'https://github.com/wesley-221/wyReferee/issues', 11 | discordServer: 'https://discord.gg/wEaXFJ58kE' 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/eslintrc.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../eslintrc.json", 3 | "parserOptions": { 4 | "project": [ 5 | "src/tsconfig.app.json", 6 | "src/tsconfig.spec.json" 7 | ] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | wyReferee 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { AppConfig } from './environments/environment'; 6 | 7 | if (AppConfig.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic() 12 | .bootstrapModule(AppModule, { 13 | preserveWhitespaces: false 14 | }) 15 | .catch(err => console.error(err)); 16 | -------------------------------------------------------------------------------- /src/polyfills-test.ts: -------------------------------------------------------------------------------- 1 | import 'core-js/es/reflect'; 2 | import 'zone.js'; 3 | -------------------------------------------------------------------------------- /src/styles/_theme.scss: -------------------------------------------------------------------------------- 1 | @import '~@angular/material/theming'; 2 | @import 'variables'; 3 | 4 | /* Change the font for the angular components */ 5 | $typography: mat-typography-config( 6 | $font-family 7 | ); 8 | 9 | @include angular-material-typography($typography); 10 | $final-theme: mat-dark-theme($theme-primary, $theme-success, $theme-danger); 11 | 12 | @include mat-core($typography); 13 | @include angular-material-theme($final-theme); 14 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), { 16 | teardown: { destroyAfterEach: false } 17 | } 18 | ); 19 | // Then we find all the tests. 20 | const context = require.context('./', true, /\.spec\.ts$/); 21 | // And load the modules. 22 | context.keys().map(context); 23 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "esnext", 6 | "baseUrl": "", 7 | "types": [], 8 | "typeRoots": [ 9 | "./typings.d.ts" 10 | ] 11 | }, 12 | "exclude": [ 13 | "**/*.spec.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "module": "commonjs", 6 | "types": [ 7 | "jasmine", 8 | "node" 9 | ], 10 | "typeRoots": [ 11 | "typings.d.ts" 12 | ] 13 | }, 14 | "files": [ 15 | "test.ts", 16 | "polyfills-test.ts" 17 | ], 18 | "include": [ 19 | "**/*.spec.ts", 20 | "**/*.d.ts" 21 | ], 22 | "exclude": [ 23 | "dist", 24 | "release", 25 | "node_modules" 26 | ], 27 | "angularCompilerOptions": { 28 | "fullTemplateTypeCheck": true, 29 | "strictInjectionParameters": true, 30 | "strictTemplates": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare const nodeModule: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | interface Window { 7 | process: any; 8 | require: any; 9 | } 10 | 11 | declare class ElectronDownloadProgression { 12 | transferred: number; 13 | total: number; 14 | percent: number; 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* 2 | This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. 3 | It is not intended to be used to perform a compilation. 4 | 5 | To learn more about this file see: https://angular.io/config/solution-tsconfig. 6 | */ 7 | { 8 | "files": [], 9 | "references": [ 10 | { 11 | "path": "./src/tsconfig.app.json" 12 | }, 13 | { 14 | "path": "./src/tsconfig.spec.json" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.serve.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "sourceMap": true, 4 | "declaration": false, 5 | "moduleResolution": "node", 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "resolveJsonModule": true, 9 | "allowSyntheticDefaultImports": true, 10 | "target": "es5", 11 | "types": [ 12 | "node" 13 | ], 14 | "lib": [ 15 | "es2017", 16 | "es2016", 17 | "es2015", 18 | "dom" 19 | ] 20 | }, 21 | "include": [ 22 | "main.ts" 23 | ], 24 | "exclude": [ 25 | "node_modules", 26 | "**/*.spec.ts" 27 | ] 28 | } 29 | --------------------------------------------------------------------------------