Skip to content

Commit

Permalink
v3.11.0 (#138)
Browse files Browse the repository at this point in the history
v3.11.0

* Un-un-fix bootstrap

* Upgrade rxjs to 7.8

* Add Elf state management

* Iteration on report revamp

* Template for challenges report

* Add chartjs demo

* update node and remove commit.txt

* v3.9.0 (#116)

* Dynamically load team challenge data when it's requested.

* Dynamically load team challenge data when it's requested.

* Refactor feedback form to reduce dependency on observable inputs. Resolves Gameboard bug 112.

* Foundation of UI for managing manual points

* Add management of bonus points to admin

* update oidc and silent-renew

* Finish MVP of manual challenge bonuses

* Add required field stubs to oidc config in the prod environment.

* Wire up player session events on player admin for game.

* Resolve bug that incorrectly classified sessions as resettable or not.

* return 'view' button. Add copy actions to context menu.

* Usability improvements to player admin

* Refactor gameboard page clock into its own component. Resolve timer issue for the player-session component.

* enable practice challenges

* Remove logging code.

* Fix audit warnings

* Fix issue that prevented feedback form from rendering

* Consolidate cumulative challenge clock into component

* Update countdown clock on session extend in prac.

* Only allow bonuses for started challenges

* Enable testers to admin enroll outside the registration window. Fix bug incorrectly computing whether a player can be unnenrolled vs. reset from admin.
Resolves #154.

* Restore the ability of admins/registrars to unenroll/reset players from admin.

* Clarify player status tooltips.

* Fix URL timestamping for cubespace

* Standardize size of enroll buttons. Allow admin enroll when registration is closed.

* Allow admin enroll/unenroll after registration is over.

---------

Co-authored-by: Jeff Mattson <jmattson@sei.cmu.edu>

* add csp to nginx conf

* Start adding frontend for sync start games.

* Frontend stuff for sync start - new hub service which manages game-level events (on the same signalR hub as the one previously used).

* federate game hub events to game hub service.

* MVP UI for sync start

* Fix enum bug preventing sync start ready update

* Light formatting, finish mvp of sync start

* Trying to reuse the performance summary component

* Reuse performance summary component.

* Add progress bar for players ready in sync start

* Add ready/not ready tags for player list view. Add progress bar to show overall progress toward readiness.

* Additional refinements to sync start - intermediate loading screen

* Styling/refining sync start, remove logs.

* Add sync start guard to gameboard pages.

* Visual cleanup of sync start, remove logging.

* Start players report, remove logging

* Checkpoint for reports revamp.

* More reports revamp frontend

* finish challengespecs parameter control

* More reports plumbing

* Add report share

* Figuring out complex parameter bindings.

* Add support report

* More work on support report

* Polishing support report

* Add new parameter types, add report selector

* Add labels filter to support report

* Convert usages of bypassSecurityTrustHtml to sanitize and reworked some template control flows.

* More work on reports

* cleanup

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Fix parameter name for challenges report

* Various bug fixes and add UI for date range in challenges report.

* Add registration date range to challenges report

* Remove logging

* Audit fix vulnerability.

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Troubleshooting report binding issue:

* Allow root-relative imports in gameboard-ui

* Fix bugs with date range control

* v3.9.3

- For missing toc.json/settings.json (#123)
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* Client-side defense for illegal file uploads

* Improved error handling for illegal mime types. Support area formatting updates.

* Allow escaped html to render in support tickets.

* Added a component that allows inline rendering of links while preserving user-entered text. Resolves #204.

* Revise error message on bad file upload.

* Added handling for multiline strings in ticket comments.

* Start on Enrollment report

* Additional styling for multiselect

* Continued refinement to the enrollment report.

* Refinements to multiselect and general report styling, updates to enrollment report.

* Add paging to enrollment report (and select-pager component

* More work on enrollment report, refactor to remove dynamic component

* Remove logging

* Fix line chart for enrollment report

* Refactor to support parameter management better

* Cleanup, styling, and ignore paging parameters for enrollment csv export

* Add practice mode route guard and change path to /practice. Resolves GB#208.

* Finished query params binding for prac page search bar.

* Add logging of login events to the client. Display last login on the admin/users page. Minor style cleanup.

* code cleanup

* Progress on practice report and adding new sorts to user admin for last login and created on

* More work on practice mode report

* More work on pract

* fix typing issue, update gitignore to exclude local config settings

* Code cleanup

* More work on practice report

* More work on practice mode and modal components.

* Enhancements to the 'by challenges' grouping of practice mode report

* Wrapping up a draft of practice mode

* Add paging controls to some of the practice mode subreports

* improvements to the support report's filter bindings. added a known issue

* Improvements to support report filters

* improvements to support report filters

* Guard against players with no sponsor in enrollment report

* Correct models and debug rendering issue

* remove debugging for enrollment report rendering

* Improve paging experience on enrollment report

* Squash a few filter bugs and update known issues

* Remove logging

* Fix paging bug on enrollment report

* Clean up pager behavior

* Set default paging to 20

* Code cleanup and ensure trend data isn't paged for enrollment report

* Update known issues

* Improving paging behavior

* Cosmetic improvements to reports and added a game filter to the enrollment report.

* Update known issues

* Update known issues

* Correctly resolve image links on practice page

* Standardize game card image rendering and resolve missing images on prac page

* Fix multiselect parameters for practice mode report. Still solving the grouping parameter problem.

* Remove default parameters architecture since it's no longer needed. Only show tickets in "other" status
in the support report doughnut chart if there are any.

* Hide internal testing message for now

* Improve support report styling

* Styling for support report

* Practice mode report formatting

* code cleanup

* Resolve issue where End Session in practice mode failed to update the UI correctly.

* Working on improving relationship between query param directive and the querystring

* Remove redundant base component

* Improve filter/querystring interface

* Fix minor formatting and update known issues

* Refine directory structure. Add stat summary for enrollment report.

* Add game count to enrollment report. Hide practice games on home screen.

* Improve visual clarity of player mode summary tab's modal dialog. Update known issues.

* Visual pass on practice mode report.

* Runaway percentile precision

* Fix filters on user mode performance tab

* Guard against no sponsors in enrollment report.

* Pin gh actions for vs code extension. Add tap and log tool. Update ngx-bootstrap.

* Resolve issue that prevented practice mode from searching when a search term was entered and then deleted.

* Add summary collapser on reports. Fix detection of availability of practice mode with a little low-budget caching.

* Add practice admin

* Remove unused property of game model

* Add game engine mode enum

* Refactoring structure and improving practice mode experience

* Iteration on practice mode and play component.

* Work on autodeploy of practice challenges.

* More work on autostart and new play component.

* Work on autolaunch/play component.

* Finished new play component and autolaunch

* attempt to fix countdown time on practice mode challenges

* Fix to autoplay challenges

* Fixes to practice mode autoplay

* Trying to fix an issue with extend session

* Fix a few rendering issues with practice mode

* Code cleanup

* Update admin to use new font awesome variable

* Fix issue affecting date range parameters in reports and move a couple pipes to core

* Add practice admin

* Improvements to practice admin

* Finished up practice certificates

* Hide practice certificates tab if prac isn't enabled or there's no cert template.

* Standardize look and feel of certificate tables. Don't autoprint certs on open.

* Make game and practice challenge clickable in certificates page.

* Automatically trust admin-created html for competitive certs.

* code clean up and light styling of the active practice challenge widget

* Refactor certificates into their own module and deal with serverside rendered PNG certificates.

* Finish server side generation/management of certificates for prac and comp.

* Bug fixes for various challenge end scenarios in prac.

* Bug fixes to practice mode and certificates

* Addresses GBAPI #236.

* Fixing a few more bugs in practice mode.

* Temporarily hide list of practice challenges in admin and rename 'competitive' tab to 'games'. The practice challenge list will come in a future update.

* Fix minor practice mode bugs with autoprint.

* Fix multiple confirms bug

* Add error display to practice session component.

* Fix for certificate link from modal where basehref is not slash.

* Remove back button from broader admin nav.

* REmove known issues link from reports page

* Remove autoprint from practice certificates for now.

* Add print button to certificate printer page in case people are worried about just CTRL+P'ing for print optimization.

* Code cleanup

* Fix for challenge doc text in practice mode.

* Start work on requiring sponsors on authentication.

* Resolve display bug with Practice Area pager. Move that component into core module.

* Fix broken links which modify seasons parameter in practice report.

* Adjust from "Practice Mode" to "Practice Area"

* change practice-mode urls

* Fixed a rounding issue on the challenge sponsor performance modal of the practice area report

* Fix routing for practice-area urls

* Fixed placeholder values for the timespan picker in reports

* Remove Admin user back button

* Remove back button from Admin interface menus

* Adjust player back buttons

* Fix game filter link in the challenge/game field component.

* Fix a count issue on the 'by challenge' grouping of the practice area report.

* Correct field names on the practice area report

* Fixes for reset filters in reports

* Default navbar background to black if unspecified.

* Hide milliseconds in enrollment report

* Only show Reports tab to admins, registrars, and support.

* Hide the [beta] tag for reporting along with the nav item if the user doesn't have access.

* Hide 'cancel' button on 'About report filters' dialog.

* Always display the pager on the list of practice challenges to allow the user to see how many challenges met their search criteria.

* Format nullish dates more clearly in 'ago' pipe

* Resolved an issue that caused the reports nav item not to show until refresh after logging in.

* More work on sponsor require

* More frontend for require sponsor.

* - Fixed a bug that caused 'game over' to appear before a player session started.
- Added logic to support admin enroll/start for tester, admin, and registrar.
- Improved UI logic in the Player Enroll component.

* simplify display logic for enrollment panel.

* v3.10.2 (#135)

* Convert usages of bypassSecurityTrustHtml to sanitize and reworked some template control flows.

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* Client-side defense for illegal file uploads

* Improved error handling for illegal mime types. Support area formatting updates.

* Allow escaped html to render in support tickets.

* Added a component that allows inline rendering of links while preserving user-entered text. Resolves #204.

* Revise error message on bad file upload.

* Added handling for multiline strings in ticket comments.

* Pin gh actions for vs code extension. Add tap and log tool. Update ngx-bootstrap.

* Remove unused property of game model

* Add game engine mode enum

* Addresses GBAPI #236.

* - Fixed a bug that caused 'game over' to appear before a player session started.
- Added logic to support admin enroll/start for tester, admin, and registrar.
- Improved UI logic in the Player Enroll component.

* simplify display logic for enrollment panel.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* v3.10.3 (#136)

* Convert usages of bypassSecurityTrustHtml to sanitize and reworked some template control flows.

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* Client-side defense for illegal file uploads

* Improved error handling for illegal mime types. Support area formatting updates.

* Allow escaped html to render in support tickets.

* Added a component that allows inline rendering of links while preserving user-entered text. Resolves #204.

* Revise error message on bad file upload.

* Added handling for multiline strings in ticket comments.

* Pin gh actions for vs code extension. Add tap and log tool. Update ngx-bootstrap.

* Remove unused property of game model

* Add game engine mode enum

* Addresses GBAPI #236.

* - Fixed a bug that caused 'game over' to appear before a player session started.
- Added logic to support admin enroll/start for tester, admin, and registrar.
- Improved UI logic in the Player Enroll component.

* simplify display logic for enrollment panel.

* Improve error rendering in practice area.

* Resolved an issue that caused competitive-mode challenges to fail to render gamespace limit errors. Partially addresses #258.

* Code cleanup

* Corrected a bug that prevented correct resolution of practice challenges.

* Accommodate production config of error message rendering.

* Improve rendering of launch error for gamespace limit.

* Show game title on game/gameboard pages.

* Add warning to game mapper if a spec has 0 points

* Reposition spec points alert

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* v3.10.3.1 (#137)

* Convert usages of bypassSecurityTrustHtml to sanitize and reworked some template control flows.

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Bump socket.io-parser from 4.2.2 to 4.2.3

Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](socketio/socket.io-parser@4.2.2...4.2.3)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* - For missing toc.json/settings.json
- Resolved an issue that could cause the player presence widget to fail to display for non-sync-start games.
- Gameboard now only looks for settings.json in production environments (or any env that has the settingsJson property of the environment object defined)

* Add eslint, configure rules, and fix critical issues.

* Allow root-relative imports in gameboard-ui

* Add custom input component to allow for custom components with ngmodel

* Update angular to 15.2.5

* Client-side defense for illegal file uploads

* Improved error handling for illegal mime types. Support area formatting updates.

* Allow escaped html to render in support tickets.

* Added a component that allows inline rendering of links while preserving user-entered text. Resolves #204.

* Revise error message on bad file upload.

* Added handling for multiline strings in ticket comments.

* Pin gh actions for vs code extension. Add tap and log tool. Update ngx-bootstrap.

* Remove unused property of game model

* Add game engine mode enum

* Addresses GBAPI #236.

* - Fixed a bug that caused 'game over' to appear before a player session started.
- Added logic to support admin enroll/start for tester, admin, and registrar.
- Improved UI logic in the Player Enroll component.

* simplify display logic for enrollment panel.

* Improve error rendering in practice area.

* Resolved an issue that caused competitive-mode challenges to fail to render gamespace limit errors. Partially addresses #258.

* Code cleanup

* Corrected a bug that prevented correct resolution of practice challenges.

* Accommodate production config of error message rendering.

* Improve rendering of launch error for gamespace limit.

* Show game title on game/gameboard pages.

* Add warning to game mapper if a spec has 0 points

* Reposition spec points alert

* Pass only required info to challenge start/stop endpoints in competitive mode.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* More require sponsor on the frontend

* More frontend for require sponsor.

* Remove unused call in sponsor service.

* Show toast on sponsor browser when sponsor added.

* More refactoring of sponsor - pull extra model properties, adjust to new API shape.

* Refactoring of sponsor UI, updates to sponsor select to show grouped sponsors.

* Management of parent sponsors, improvements to UI layout for profile.

* Remove old sponsors report parameter control to make way for a new one.

* Reshape sponsor endpoint to allow listing with children

* Add custom report filter for new sponsor hierarchy

* Merge from next

* Correct merge for player-enroll

* Add solution guide field to challenge specs for practice mode

* Corrected a bug that prevented the table view from working in the Games tab of admin. Resolves #145

* Add suggested searches to practice area. Partially resolves GBAPI#233.

* Don't persist the 'confirming' state on the gameboard page if the user switches challenges before confirming. Addresses GBAPI#178

* Always show admin enroll if it's available to the current user based on roll (ignore whether we're in the registration window or not

* Code cleanup

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Jeff Mattson <jmattson@sei.cmu.edu>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jarrett Booz <89405171+sei-jbooz@users.noreply.github.com>
  • Loading branch information
4 people authored Oct 5, 2023
1 parent e6778f8 commit 64649d5
Show file tree
Hide file tree
Showing 139 changed files with 1,665 additions and 847 deletions.
6 changes: 2 additions & 4 deletions projects/gameboard-mks/src/app/console/console.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
<!-- <div class="audience-item">t1-player3</div> -->
</div>

<div *ngIf="state==='stopped'||state==='disconnected'" class="align-mm"
[class.hidden]="isConnected">
<div *ngIf="state==='stopped'||state==='disconnected'" class="align-mm" [class.hidden]="isConnected">
<h1>{{shadowstate}}</h1>
<button class="btn btn-lg" (click)="stateButtonClicked()">{{stateIcon}}</button>
</div>
Expand Down Expand Up @@ -89,7 +88,7 @@ <h1 class="text-danger">{{stateIcon}}</h1>
</button>
</div>

<!-- <div class="flex-h">
<!-- <div class="flex-h">
<span>[Clipboard] </span>
<button class="btn" (click)="showClipboard=!showClipboard">
<i class="fa fa-clipboard fa-2x"></i> Show
Expand Down Expand Up @@ -136,6 +135,5 @@ <h3>Clipboard</h3>
<textarea *ngIf="showClipboard" class="form-control" placeholder="Clipboard" rows="20"
[(ngModel)]="cliptext"></textarea>
</div>

</div>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ <h1 class="admin-header mb-0">Administration</h1>

<div class="container mb-4 pb-4">
<nav class="my-2">
<a class="btn btn-link" [routerLink]="['dashboard']">Games</a>
<a class="btn btn-link" [routerLink]="['practice']">Practice Area</a>
<a class="btn btn-link" [routerLink]="['registrar', 'users']">Users</a>
<a class="btn btn-link" [routerLink]="['registrar', 'players']">Players</a>
<a class="btn btn-link" [routerLink]="['registrar', 'sponsors']">Sponsors</a>
<a class="btn btn-link" [routerLink]="['support']">Challenges</a>
<a class="btn btn-link" [routerLink]="['report']">Reports</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['dashboard']">Games</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['practice']">Practice Area</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['registrar', 'users']">Users</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['registrar', 'players']">Players</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['registrar', 'sponsors']">Sponsors</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['support']">Challenges</a>
<a class="btn btn-link" routerLinkActive="active" [routerLink]="['report']">Reports</a>
</nav>
<main>
<router-outlet></router-outlet>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ a {
nav a:first-of-type {
padding-left: 0;
}

.active {
text-decoration: underline;
}
10 changes: 5 additions & 5 deletions projects/gameboard-ui/src/app/admin/admin.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import { PlayerNamesComponent } from './player-names/player-names.component';
import { PlayerRegistrarComponent } from './player-registrar/player-registrar.component';
import { PlayerSessionComponent } from './player-session/player-session.component';
import { PlayerSponsorReportComponent } from './player-sponsor-report/player-sponsor-report.component';
import { PracticeChallengesComponent } from './practice/practice-challenges/practice-challenges.component';
import { PracticeSettingsComponent } from './practice/practice-settings/practice-settings.component';
import { PracticeComponent } from './practice/practice.component';
import { PrereqsComponent } from './prereqs/prereqs.component';
Expand All @@ -44,6 +43,8 @@ import { TeamObserverComponent } from './team-observer/team-observer.component';
import { UserApiKeysComponent } from './user-api-keys/user-api-keys.component';
import { UserRegistrarComponent } from './user-registrar/user-registrar.component';
import { UserReportComponent } from './user-report/user-report.component';
import { SponsorsModule } from '@/sponsors/sponsors.module';
import { ChallengeSpecEditorComponent } from './components/challenge-spec-editor/challenge-spec-editor.component';

@NgModule({
declarations: [
Expand All @@ -65,7 +66,6 @@ import { UserReportComponent } from './user-report/user-report.component';
PlayerSessionComponent,
PlayerSponsorReportComponent,
PracticeComponent,
PracticeChallengesComponent,
PracticeSettingsComponent,
PrereqsComponent,
ReportPageComponent,
Expand All @@ -77,6 +77,7 @@ import { UserReportComponent } from './user-report/user-report.component';
UserApiKeysComponent,
UserRegistrarComponent,
UserReportComponent,
ChallengeSpecEditorComponent,
],
imports: [
CommonModule,
Expand All @@ -90,11 +91,10 @@ import { UserReportComponent } from './user-report/user-report.component';
{
path: "practice", component: PracticeComponent, children: [
{ path: "", pathMatch: "full", redirectTo: "settings" },
{ path: "challenges", component: PracticeChallengesComponent },
{ path: "settings", component: PracticeSettingsComponent },
]
},
{ path: 'registrar/sponsors', component: SponsorBrowserComponent },
{ path: 'registrar/sponsors', component: SponsorBrowserComponent, title: "Admin | Sponsors" },
{ path: 'registrar/users', component: UserRegistrarComponent, title: "Admin | Users" },
{ path: 'registrar/players', component: PlayerNamesComponent },
{ path: 'registrar/:id', component: PlayerRegistrarComponent },
Expand All @@ -119,7 +119,7 @@ import { UserReportComponent } from './user-report/user-report.component';
ModalModule,
TooltipModule,
FontAwesomeModule,
// PracModule,
SponsorsModule,
]
})
export class AdminModule { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<div class="challenge-spec-editor-component" *ngIf="spec">
<h2 class="m-0 p-0 fs-11">{{ spec.name }}</h2>
<hr class="my-2" />
<div class="spec-controls-container d-flex flex-wrap align-items-center">
<div class="form-group">
<label for="slug-input-{{spec.id}}">Support Key</label>
<input type="text" class="form-control" id="slug-input-{{spec.id}}" name="slug" [(ngModel)]="spec.tag"
[placeholder]="'Enter a support key (e.g. ' + slug(spec.name) + ')'"
(ngModelChange)="handleSpecUpdated(spec)">
</div>

<div class="form-group">
<label for="points-input-{{spec.id}}">Points</label>
<input type="number" class="form-control" id="points-input-{{spec.id}}" name="points"
placeholder="Enter a point value for this challenge" [(ngModel)]="spec.points"
(ngModelChange)="handleSpecUpdated(spec)">
</div>

<div class="form-check">
<input type="checkbox" class="form-check-input" id="disabled-input-{{spec.id}}" name="disabled"
[(ngModel)]="spec.disabled" (ngModelChange)="handleSpecUpdated(spec)">
<label for="disabled-input-{{spec.id}}">Disabled</label>
</div>

<div *ngIf="showSolutionGuide" class="form-group flex-grow-1">
<label for="guide-input-{{spec.id}}">Solution Guide URL</label>
<input type="text" class="form-control" id="guide-input-{{spec.id}}" name="guide"
placeholder="Enter the solution guide's URL" [(ngModel)]="spec.solutionGuideUrl"
(input)="handleSpecUpdated(spec)">
</div>
</div>
<hr class="my-2">
<div class="d-flex align-items-center justify-content-end">
<app-confirm-button btnClass="btn btn-sm btn-danger">Delete</app-confirm-button>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
@import "../../../../scss/variables";

.challenge-spec-editor-component {
background-color: $secondary;
border: solid 1px $foreground;
border-radius: 6px;
padding: 0.5rem;

hr {
border: dashed 1px $foreground;
}
}

label {
margin: 0;
}

.form-group {
margin: 8px 0 0 0;
padding: 0;
flex: 1 1 48%;

input[type=checkbox] {
margin-left: 4px;
}

input[type=text] {
margin: 0 12px 0 0;
}
}

.form-check {
flex: 1 1 48%;
margin-top: 1rem;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Spec } from '@/api/spec-models';
import { SpecService } from '@/api/spec.service';
import { fa } from '@/services/font-awesome.service';
import { UnsubscriberService } from '@/services/unsubscriber.service';
import { slug } from '@/tools/functions';
import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';
import { Subject, debounceTime, filter, firstValueFrom, switchMap, tap } from 'rxjs';

@Component({
selector: 'app-challenge-spec-editor',
templateUrl: './challenge-spec-editor.component.html',
styleUrls: ['./challenge-spec-editor.component.scss']
})
export class ChallengeSpecEditorComponent implements OnChanges {
@Input() spec?: Spec;
@Input() showSolutionGuide = false;
@Output() specUpdate = new EventEmitter<Spec>();

protected fa = fa;
protected slug = slug;
protected requestUpdateSpec$ = new Subject<Spec>();

constructor(
private specService: SpecService,
private unsub: UnsubscriberService) {
this.unsub.add(
this.requestUpdateSpec$.pipe(
debounceTime(500),
filter(s => s.points >= 0),
switchMap(s => this.specService.update(s)),
tap(s => this.specUpdate.emit(s)),
).subscribe()
);
}

ngOnChanges(changes: SimpleChanges): void {
if (!this.spec) {
throw new Error("The ChallengeSpecEditor requires a challenge spec.");
}
}

async handleSpecUpdated(spec: Spec) {
this.requestUpdateSpec$.next(spec);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,18 @@

<!-- Card view mode -->
<ng-container *ngIf="!tableView">
<div class="dropzone col-3 card bg-transparent">
<app-dropzone class="h-100 my-3" (dropped)="dropped($event)">
<pre class="overflow-hidden">Drag in a yaml game array or</pre>
<button class="btn btn-secondary btn-sm" (click)="create()">
<fa-icon [icon]="faPlus"></fa-icon>
<span>New Game</span>
</button>
<div class="new-game-controls card col-3 my-3 bg-transparent d-flex flex-column align-items-center">
<button class=" btn btn-info flex-grow-1 w-100" (click)="create()">
<fa-icon [icon]="faPlus"></fa-icon>
<span>New Game</span>
</button>

<p class="mt-2">OR</p>

<app-dropzone class="d-flex flex-grow-1 w-100" (dropped)="dropped($event)">
<div class="dropzone-target h-100">
<pre class="overflow-hidden">Drag in a yaml game array</pre>
</div>
</app-dropzone>
</div>

Expand Down Expand Up @@ -136,12 +141,9 @@
container="body" [adaptivePosition]="true" placement="top">
<fa-icon [icon]="game.allowTeam ? faTeam : faUser"></fa-icon>
</div>
<div
[tooltip]="!!game.feedbackTemplate.challenge.length || !!game.feedbackTemplate.game.length ? 'Accepts Feedback' : 'No Feedback'"
containerClass="light-tooltip" container="body" [adaptivePosition]="true" placement="top">
<fa-icon
[icon]="!!game.feedbackTemplate.challenge.length || !!game.feedbackTemplate.game.length ? faChartBar : faCommentSlash"></fa-icon>
</div>
<ng-container
*ngTemplateOutlet="game.feedbackTemplate && (!!game.feedbackTemplate.challenge.length || !!game.feedbackTemplate.game.length) ? gameAcceptsFeedback : gameDoesntAcceptFeedback">
</ng-container>
</td>
<td class="thin-col sticky-options sticky-cell">
<div dropdown class="btn-group" container="body" #dropdown="bs-dropdown" [autoClose]="true"
Expand Down Expand Up @@ -218,3 +220,16 @@ <h4>Announcement</h4>
<app-spinner></app-spinner>
</div>
</ng-template>

<ng-template #gameAcceptsFeedback>
<div tooltip="Accepts Feedback" containerClass="light-tooltip" container="body" [adaptivePosition]="true"
placement="top">
<fa-icon [icon]="faChartBar"></fa-icon>
</div>
</ng-template>

<ng-template #gameDoesntAcceptFeedback>
<div tooltip="No Feedback" containerClass="light-tooltip" container="body" [adaptivePosition]="true" placement="top">
<fa-icon [icon]="faCommentSlash"></fa-icon>
</div>
</ng-template>
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
@import '../../../scss/variables';

.wrapper {
// position: relative;
.new-game-controls {
height: 340px;
padding: .25rem;
}

::ng-deep app-dropzone .dropzone {
flex-grow: 1 !important;
}

.dropzone-target {
border: .25rem dashed lightgray;
border-radius: .25rem;
height: 100%;
padding: .25rem;
}

.overlay {
position: absolute;
top: 0rem;
Expand All @@ -13,10 +26,6 @@
background-color: rgba(black, .8);
z-index: 10;
}
.dropzone {
border-radius: 0;
border: 0;
}

.table-wrapper {
overflow-x: auto;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,16 @@ <h1 class="mb-0">
Select an image for the game card shown in the public-facing portion of the app. For best results, use an
image with an aspect ratio of <strong>1:1.44</strong> (e.g. 750x1080).
</p>
<app-dropzone inputId="logo-input" btnClass="btn btn-sm btn-primary" (dropped)="upload($event, 'card')">
<button class="btn btn-sm btn-outline-warning mx-2" (click)="clearImage()">
<app-dropzone inputId="logo-input" btnClass="btn btn-sm btn-primary" (dropped)="upload($event, 'card')"
[clickToLaunchFilePicker]="false">
<button class="btn btn-sm btn-warning mx-2" (click)="clearImage()">
<fa-icon [icon]="faTrash"></fa-icon>
<span>Reset</span>
</button>
<app-game-card [game]="game"></app-game-card>

<div class="dropzone-target">
<app-game-card [game]="game"></app-game-card>
</div>
</app-dropzone>
</div>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@import "../../../scss/variables";

label {
margin-bottom: 0;
}
Expand All @@ -7,6 +9,10 @@ label {
width: 240px;
}

.dropzone-target {
border: dashed 1px $foreground;
}

.section-header {
font-weight: 300;
cursor: pointer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export class GameEditorComponent implements AfterViewInit {
}

if (this.needsPracticeModeEnabledRefresh) {
this.practiceService.gamePlayerModeChanged({ gameId: game.id, isPractice: game.isPracticeMode })
this.practiceService.gamePlayerModeChanged({ gameId: game.id, isPractice: game.isPracticeMode });
this.needsPracticeModeEnabledRefresh = false;
}
}))
Expand Down
Loading

0 comments on commit 64649d5

Please sign in to comment.