Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v3.11.0 #138

Merged
merged 247 commits into from
Oct 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
247 commits
Select commit Hold shift + click to select a range
75b5f30
Un-un-fix bootstrap
sei-bstein Apr 12, 2023
e2a2a40
Upgrade rxjs to 7.8
sei-bstein Apr 12, 2023
84d2230
Add Elf state management
sei-bstein Apr 12, 2023
a2e0040
Iteration on report revamp
sei-bstein Apr 14, 2023
120266b
Template for challenges report
sei-bstein Apr 16, 2023
22d65cb
Add chartjs demo
sei-bstein Apr 16, 2023
9849a05
update node and remove commit.txt
sei-jmattson Mar 31, 2023
e6c5fff
v3.9.0 (#116)
sei-bstein Apr 3, 2023
1493912
add csp to nginx conf
sei-jmattson Apr 14, 2023
f5154cd
Start adding frontend for sync start games.
sei-bstein Mar 24, 2023
c41a909
Frontend stuff for sync start - new hub service which manages game-le…
sei-bstein Mar 27, 2023
69cda3d
federate game hub events to game hub service.
sei-bstein Mar 28, 2023
c2c5d45
MVP UI for sync start
sei-bstein Mar 31, 2023
da8f197
Fix enum bug preventing sync start ready update
sei-bstein Mar 31, 2023
43d3269
Light formatting, finish mvp of sync start
sei-bstein Mar 31, 2023
8843110
Trying to reuse the performance summary component
sei-bstein Apr 3, 2023
f44c554
Reuse performance summary component.
sei-bstein Apr 3, 2023
e99747b
Add progress bar for players ready in sync start
sei-bstein Apr 4, 2023
cc35af5
Add ready/not ready tags for player list view. Add progress bar to sh…
sei-bstein Apr 4, 2023
966a81d
Additional refinements to sync start - intermediate loading screen
sei-bstein Apr 6, 2023
5973ac7
Styling/refining sync start, remove logs.
sei-bstein Apr 7, 2023
ab8ffde
Add sync start guard to gameboard pages.
sei-bstein Apr 7, 2023
c1a85d2
Visual cleanup of sync start, remove logging.
sei-bstein Apr 17, 2023
88662a6
Start players report, remove logging
sei-bstein Apr 17, 2023
095f162
Checkpoint for reports revamp.
sei-bstein Apr 26, 2023
0132998
More reports revamp frontend
sei-bstein Apr 27, 2023
608c2d9
finish challengespecs parameter control
sei-bstein Apr 28, 2023
3b0ee37
More reports plumbing
sei-bstein Apr 28, 2023
27f3aaa
merge from main
sei-bstein May 1, 2023
9721105
Add report share
sei-bstein May 1, 2023
42476fd
Figuring out complex parameter bindings.
sei-bstein May 1, 2023
2d42cf2
Add support report
sei-bstein May 2, 2023
c1cb217
More work on support report
sei-bstein May 4, 2023
edc173b
Polishing support report
sei-bstein May 8, 2023
9711472
Add new parameter types, add report selector
sei-bstein May 10, 2023
4b5b2f8
Add labels filter to support report
sei-bstein May 11, 2023
ae46323
Convert usages of bypassSecurityTrustHtml to sanitize and reworked so…
sei-bstein May 12, 2023
6bc1d90
More work on reports
sei-bstein May 15, 2023
36e5151
cleanup
sei-bstein May 18, 2023
36259dd
- For missing toc.json/settings.json
sei-bstein May 17, 2023
7f51bde
Fix parameter name for challenges report
sei-bstein May 23, 2023
52ff931
Various bug fixes and add UI for date range in challenges report.
sei-bstein May 23, 2023
9951ca6
Add registration date range to challenges report
sei-bstein May 23, 2023
6f75a19
Remove logging
sei-bstein May 23, 2023
23db3a6
Audit fix vulnerability.
sei-bstein May 23, 2023
b659314
Bump socket.io-parser from 4.2.2 to 4.2.3
dependabot[bot] May 26, 2023
bcf9277
Merge pull request #124 from cmu-sei/dependabot/npm_and_yarn/socket.i…
sei-bstein May 26, 2023
d8f2d75
- For missing toc.json/settings.json
sei-bstein May 17, 2023
eeb51f7
Add eslint, configure rules, and fix critical issues.
sei-bstein May 18, 2023
919b82b
Troubleshooting report binding issue:
sei-bstein May 30, 2023
a9c66df
Allow root-relative imports in gameboard-ui
sei-bstein May 30, 2023
e7832f2
Fix bugs with date range control
sei-bstein Jun 1, 2023
a721d36
v3.9.3
sei-bstein May 18, 2023
455eb04
Add custom input component to allow for custom components with ngmodel
sei-bstein Jun 1, 2023
d1129eb
Update angular to 15.2.5
sei-bstein Jun 12, 2023
e239f0e
- For missing toc.json/settings.json
sei-bstein May 17, 2023
76c6232
Bump socket.io-parser from 4.2.2 to 4.2.3
dependabot[bot] May 26, 2023
d1fea03
- For missing toc.json/settings.json
sei-bstein May 17, 2023
4856aa9
Add eslint, configure rules, and fix critical issues.
sei-bstein May 18, 2023
ad0f859
Allow root-relative imports in gameboard-ui
sei-bstein May 30, 2023
326eb0f
Add custom input component to allow for custom components with ngmodel
sei-bstein Jun 1, 2023
030ed2e
Update angular to 15.2.5
sei-bstein Jun 12, 2023
fb44c73
Client-side defense for illegal file uploads
sei-bstein Jun 13, 2023
da67afe
Improved error handling for illegal mime types. Support area formatti…
sei-bstein Jun 13, 2023
b976e8e
Merge branch 'next' into new/ticket-security-enhancements
sei-bstein Jun 13, 2023
0b28af1
Merge pull request #125 from cmu-sei/new/ticket-security-enhancements
sei-bstein Jun 13, 2023
3656244
Allow escaped html to render in support tickets.
sei-bstein Jun 14, 2023
ea4adea
Added a component that allows inline rendering of links while preserv…
sei-bstein Jun 14, 2023
25ccf0c
Merge pull request #127 from cmu-sei/new/render-links-in-tickets
sei-bstein Jun 14, 2023
e7a51dc
Revise error message on bad file upload.
sei-bstein Jun 14, 2023
5edb2ba
Merge branch 'main' into next
sei-bstein Jun 14, 2023
453b054
Added handling for multiline strings in ticket comments.
sei-bstein Jun 15, 2023
139425c
Merge branch 'main' into new/reports-revamp
sei-bstein Jun 16, 2023
b372e2a
Start on Enrollment report
sei-bstein Jun 16, 2023
a72a797
Merge branch 'main' into new/reports-revamp
sei-bstein Jun 20, 2023
1a28b52
Additional styling for multiselect
sei-bstein Jun 21, 2023
057d883
Continued refinement to the enrollment report.
sei-bstein Jun 22, 2023
8ab8ea5
Refinements to multiselect and general report styling, updates to enr…
sei-bstein Jun 22, 2023
c7d20f9
Add paging to enrollment report (and select-pager component
sei-bstein Jun 23, 2023
8e82360
More work on enrollment report, refactor to remove dynamic component
sei-bstein Jun 26, 2023
dfa23aa
Remove logging
sei-bstein Jun 26, 2023
6590c88
Fix line chart for enrollment report
sei-bstein Jun 27, 2023
238fbf1
Refactor to support parameter management better
sei-bstein Jun 27, 2023
8c84f13
Cleanup, styling, and ignore paging parameters for enrollment csv export
sei-bstein Jun 28, 2023
95705a3
Add practice mode route guard and change path to /practice. Resolves …
sei-bstein Jun 28, 2023
193e503
Finished query params binding for prac page search bar.
sei-bstein Jun 29, 2023
1fceadf
Add logging of login events to the client. Display last login on the …
sei-bstein Jun 30, 2023
e437c08
Merge branch 'main' into next
sei-bstein Jun 30, 2023
ff05298
Merge from main
sei-bstein Jul 6, 2023
ad822b5
code cleanup
sei-bstein Jul 6, 2023
d3b6c9a
Progress on practice report and adding new sorts to user admin for la…
sei-bstein Jul 10, 2023
5ceb7dc
More work on practice mode report
sei-bstein Jul 12, 2023
0505009
More work on pract
sei-bstein Jul 12, 2023
89c547e
fix typing issue, update gitignore to exclude local config settings
sei-bstein Jul 13, 2023
6a3e33d
Code cleanup
sei-bstein Jul 13, 2023
ad1447b
More work on practice report
sei-bstein Jul 14, 2023
9f9672d
More work on practice mode and modal components.
sei-bstein Jul 14, 2023
56fd81c
Enhancements to the 'by challenges' grouping of practice mode report
sei-bstein Jul 14, 2023
36354c0
Wrapping up a draft of practice mode
sei-bstein Jul 19, 2023
6d4ef53
Add paging controls to some of the practice mode subreports
sei-bstein Jul 20, 2023
db0d7d1
improvements to the support report's filter bindings. added a known i…
sei-bstein Jul 20, 2023
920d63d
Improvements to support report filters
sei-bstein Jul 20, 2023
1653140
improvements to support report filters
sei-bstein Jul 20, 2023
57280ed
Guard against players with no sponsor in enrollment report
sei-bstein Jul 20, 2023
6bbc457
Correct models and debug rendering issue
sei-bstein Jul 20, 2023
1c6e716
remove debugging for enrollment report rendering
sei-bstein Jul 20, 2023
2aa39a6
Improve paging experience on enrollment report
sei-bstein Jul 20, 2023
fdc44b5
Squash a few filter bugs and update known issues
sei-bstein Jul 20, 2023
41b3f47
Remove logging
sei-bstein Jul 20, 2023
9da506c
Fix paging bug on enrollment report
sei-bstein Jul 20, 2023
cdf9ff6
Clean up pager behavior
sei-bstein Jul 21, 2023
344163b
Set default paging to 20
sei-bstein Jul 21, 2023
c15cb16
Code cleanup and ensure trend data isn't paged for enrollment report
sei-bstein Jul 21, 2023
9c2ab3f
Update known issues
sei-bstein Jul 21, 2023
b254a2f
Improving paging behavior
sei-bstein Jul 21, 2023
9daf2a2
Cosmetic improvements to reports and added a game filter to the enrol…
sei-bstein Jul 21, 2023
5bd026e
Update known issues
sei-bstein Jul 21, 2023
49f960c
Update known issues
sei-bstein Jul 21, 2023
787edbd
Correctly resolve image links on practice page
sei-bstein Jul 21, 2023
b1db202
Standardize game card image rendering and resolve missing images on p…
sei-bstein Jul 21, 2023
4f7e07e
Fix multiselect parameters for practice mode report. Still solving th…
sei-bstein Jul 24, 2023
be6c686
Remove default parameters architecture since it's no longer needed. O…
sei-bstein Jul 24, 2023
7830d67
Hide internal testing message for now
sei-bstein Jul 24, 2023
434b3ae
Improve support report styling
sei-bstein Jul 24, 2023
bf0c681
Styling for support report
sei-bstein Jul 24, 2023
be4a5d6
Practice mode report formatting
sei-bstein Jul 24, 2023
919a578
code cleanup
sei-bstein Jul 24, 2023
6349fa4
Resolve issue where End Session in practice mode failed to update the…
sei-bstein Jul 24, 2023
3c0322f
Working on improving relationship between query param directive and t…
sei-bstein Jul 25, 2023
11d9d67
Remove redundant base component
sei-bstein Jul 25, 2023
e49bf11
Improve filter/querystring interface
sei-bstein Jul 25, 2023
2d9a410
Fix minor formatting and update known issues
sei-bstein Jul 26, 2023
ae7ba3e
Refine directory structure. Add stat summary for enrollment report.
sei-bstein Jul 26, 2023
d60bf7f
Add game count to enrollment report. Hide practice games on home screen.
sei-bstein Jul 27, 2023
63c5b2c
Improve visual clarity of player mode summary tab's modal dialog. Upd…
sei-bstein Jul 27, 2023
2c1da7e
Visual pass on practice mode report.
sei-bstein Jul 27, 2023
3695b32
Runaway percentile precision
sei-bstein Jul 27, 2023
d8c737f
Fix filters on user mode performance tab
sei-bstein Jul 27, 2023
b41ec39
Guard against no sponsors in enrollment report.
sei-bstein Jul 27, 2023
4abaf48
Pin gh actions for vs code extension. Add tap and log tool. Update ng…
sei-bstein Jul 27, 2023
8aa1644
Merge from next
sei-bstein Jul 27, 2023
f5c5774
Resolve issue that prevented practice mode from searching when a sear…
sei-bstein Jul 27, 2023
7551369
Add summary collapser on reports. Fix detection of availability of pr…
sei-bstein Jul 28, 2023
8a25ce3
Add practice admin
sei-bstein Jul 28, 2023
f6adbe4
Remove unused property of game model
sei-bstein Jul 28, 2023
d0f29af
Add game engine mode enum
sei-bstein Jul 28, 2023
4ceaf6f
Refactoring structure and improving practice mode experience
sei-bstein Jul 31, 2023
24ac2a3
Iteration on practice mode and play component.
sei-bstein Aug 2, 2023
5d66738
Work on autodeploy of practice challenges.
sei-bstein Aug 3, 2023
0e404cb
More work on autostart and new play component.
sei-bstein Aug 3, 2023
eda2e17
Work on autolaunch/play component.
sei-bstein Aug 4, 2023
0276284
Finished new play component and autolaunch
sei-bstein Aug 4, 2023
5e7ee58
attempt to fix countdown time on practice mode challenges
sei-bstein Aug 4, 2023
61e44c1
Fix to autoplay challenges
sei-bstein Aug 4, 2023
75b7afd
Fixes to practice mode autoplay
sei-bstein Aug 4, 2023
d68c069
Trying to fix an issue with extend session
sei-bstein Aug 4, 2023
790b3bf
Fix a few rendering issues with practice mode
sei-bstein Aug 8, 2023
419cc97
Merge branch 'next' into feature/practice-mode
sei-bstein Aug 14, 2023
03f097c
Code cleanup
sei-bstein Aug 14, 2023
e53e882
Merge branch 'next' into local/admin-practice
sei-bstein Aug 14, 2023
a90dd58
Merge branch 'feature/practice-mode' into local/admin-practice
sei-bstein Aug 14, 2023
d87a72b
Update admin to use new font awesome variable
sei-bstein Aug 14, 2023
f0eed3e
Fix issue affecting date range parameters in reports and move a coupl…
sei-bstein Aug 14, 2023
72a2996
Merge branch 'feature/practice-mode' into local/admin-practice
sei-bstein Aug 14, 2023
0516e84
Add practice admin
sei-bstein Aug 15, 2023
862ea41
Improvements to practice admin
sei-bstein Aug 15, 2023
3058004
Finished up practice certificates
sei-bstein Aug 16, 2023
b5c3737
Hide practice certificates tab if prac isn't enabled or there's no ce…
sei-bstein Aug 17, 2023
b68e383
Standardize look and feel of certificate tables. Don't autoprint cert…
sei-bstein Aug 17, 2023
1307e3c
Make game and practice challenge clickable in certificates page.
sei-bstein Aug 17, 2023
cc3330b
Automatically trust admin-created html for competitive certs.
sei-bstein Aug 18, 2023
67b5dc1
code clean up and light styling of the active practice challenge widget
sei-bstein Aug 21, 2023
29f4c81
Refactor certificates into their own module and deal with serverside …
sei-bstein Aug 22, 2023
1fb9bbd
Finish server side generation/management of certificates for prac and…
sei-bstein Aug 23, 2023
dbfcd1f
Bug fixes for various challenge end scenarios in prac.
sei-bstein Aug 24, 2023
fa703a7
Bug fixes to practice mode and certificates
sei-bstein Aug 25, 2023
3b40004
Addresses GBAPI #236.
sei-bstein Aug 25, 2023
8eade37
Fixing a few more bugs in practice mode.
sei-bstein Aug 28, 2023
f0969bd
Temporarily hide list of practice challenges in admin and rename 'com…
sei-bstein Aug 28, 2023
11e170a
Fix minor practice mode bugs with autoprint.
sei-bstein Aug 28, 2023
152d5cc
Fix multiple confirms bug
sei-bstein Aug 29, 2023
22aad5c
Add error display to practice session component.
sei-bstein Aug 29, 2023
321118d
Fix for certificate link from modal where basehref is not slash.
sei-bstein Aug 29, 2023
938ab0b
Remove back button from broader admin nav.
sei-bstein Aug 29, 2023
27b7b58
REmove known issues link from reports page
sei-bstein Aug 29, 2023
69997bd
Remove autoprint from practice certificates for now.
sei-bstein Aug 29, 2023
a776ca6
Add print button to certificate printer page in case people are worri…
sei-bstein Aug 30, 2023
daa2fa9
Code cleanup
sei-bstein Aug 30, 2023
0373cfc
Fix for challenge doc text in practice mode.
sei-bstein Aug 30, 2023
aa60e13
Start work on requiring sponsors on authentication.
sei-bstein Aug 31, 2023
ac00a65
Resolve display bug with Practice Area pager. Move that component int…
sei-bstein Aug 31, 2023
165652e
Fix broken links which modify seasons parameter in practice report.
sei-bstein Aug 31, 2023
d235a68
Adjust from "Practice Mode" to "Practice Area"
sei-jbooz Aug 31, 2023
0e12d89
change practice-mode urls
sei-bstein Aug 31, 2023
782211d
Fixed a rounding issue on the challenge sponsor performance modal of …
sei-bstein Aug 31, 2023
80307e7
Fix routing for practice-area urls
sei-bstein Aug 31, 2023
d9791be
Fixed placeholder values for the timespan picker in reports
sei-bstein Aug 31, 2023
be3810d
Remove Admin user back button
sei-jbooz Aug 31, 2023
591e1a0
Remove back button from Admin interface menus
sei-jbooz Aug 31, 2023
4954659
Adjust player back buttons
sei-jbooz Aug 31, 2023
7d855e0
Fix game filter link in the challenge/game field component.
sei-bstein Sep 1, 2023
ad4d195
Fix a count issue on the 'by challenge' grouping of the practice area…
sei-bstein Sep 1, 2023
7d855ea
Correct field names on the practice area report
sei-bstein Sep 1, 2023
89d54e6
Fixes for reset filters in reports
sei-bstein Sep 1, 2023
8dd546f
Merge in from main
sei-bstein Sep 1, 2023
be3a956
Default navbar background to black if unspecified.
sei-bstein Sep 1, 2023
eac9035
Hide milliseconds in enrollment report
sei-bstein Sep 1, 2023
617a28a
Merge from main
sei-bstein Sep 1, 2023
9f4f98f
Only show Reports tab to admins, registrars, and support.
sei-bstein Sep 1, 2023
8faeb5b
Hide the [beta] tag for reporting along with the nav item if the user…
sei-bstein Sep 7, 2023
e403e22
Hide 'cancel' button on 'About report filters' dialog.
sei-bstein Sep 7, 2023
1379d71
Always display the pager on the list of practice challenges to allow …
sei-bstein Sep 7, 2023
13da65d
Format nullish dates more clearly in 'ago' pipe
sei-bstein Sep 7, 2023
a716857
Merge branch 'main' into next
sei-bstein Sep 7, 2023
18ca855
Merge branch 'next' into feature/require-sponsor
sei-bstein Sep 7, 2023
ba0c307
Merge branch 'main' into next
sei-bstein Sep 7, 2023
19aeae9
Resolved an issue that caused the reports nav item not to show until …
sei-bstein Sep 8, 2023
a15c47b
Merge branch 'main' into next
sei-bstein Sep 8, 2023
5a3bed4
Merge branch 'next' into feature/require-sponsor
sei-bstein Sep 8, 2023
9536cc8
More work on sponsor require
sei-bstein Sep 8, 2023
3857271
More frontend for require sponsor.
sei-bstein Sep 11, 2023
58a5293
Merge from issue/236
sei-bstein Sep 12, 2023
590a5a5
- Fixed a bug that caused 'game over' to appear before a player sessi…
sei-bstein Sep 12, 2023
b0c7d0f
simplify display logic for enrollment panel.
sei-bstein Sep 12, 2023
ea14ab3
Merge from next
sei-bstein Sep 13, 2023
9bc5186
v3.10.2 (#135)
sei-bstein Sep 12, 2023
98e2423
v3.10.3 (#136)
sei-bstein Sep 15, 2023
1c28ffa
v3.10.3.1 (#137)
sei-bstein Sep 15, 2023
aa6fa2c
More require sponsor on the frontend
sei-bstein Sep 19, 2023
0429994
More frontend for require sponsor.
sei-bstein Sep 20, 2023
35d2a6c
Remove unused call in sponsor service.
sei-bstein Sep 20, 2023
467718b
Show toast on sponsor browser when sponsor added.
sei-bstein Sep 20, 2023
b2573a9
More refactoring of sponsor - pull extra model properties, adjust to …
sei-bstein Sep 21, 2023
adbd739
Refactoring of sponsor UI, updates to sponsor select to show grouped …
sei-bstein Sep 22, 2023
b10e864
Management of parent sponsors, improvements to UI layout for profile.
sei-bstein Sep 25, 2023
3ddc053
Remove old sponsors report parameter control to make way for a new one.
sei-bstein Sep 25, 2023
ae199c0
Reshape sponsor endpoint to allow listing with children
sei-bstein Sep 26, 2023
2adb653
Add custom report filter for new sponsor hierarchy
sei-bstein Sep 26, 2023
6076f12
Merge branch 'next' into feature/require-sponsor
sei-bstein Sep 26, 2023
474fd6e
Merge from next
sei-bstein Sep 26, 2023
ea686e7
Correct merge for player-enroll
sei-bstein Sep 26, 2023
ed33cd2
Add solution guide field to challenge specs for practice mode
sei-bstein Sep 28, 2023
f25edeb
Corrected a bug that prevented the table view from working in the Gam…
sei-bstein Sep 28, 2023
f361fe4
Add suggested searches to practice area. Partially resolves GBAPI#233.
sei-bstein Sep 29, 2023
bd22332
Don't persist the 'confirming' state on the gameboard page if the use…
sei-bstein Sep 29, 2023
fe1576b
Always show admin enroll if it's available to the current user based …
sei-bstein Sep 29, 2023
e8961fa
Code cleanup
sei-bstein Oct 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading