aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-06-12 13:43:46 +0100
committerGravatar Gareth Coles <[email protected]>2018-06-12 13:43:46 +0100
commitb5b339cdfde254367eccd49d296178314a159ba7 (patch)
treed9b4d463bb3738bd5b561dd08a4313d40fb76308
parentMerge branch 'log-dir' into 'master' (diff)
[Jams] Approvals interface
-rw-r--r--.scss-lint.yml2
-rw-r--r--pysite/tables.py2
-rw-r--r--pysite/views/staff/jams/actions.py69
-rw-r--r--pysite/views/staff/jams/participants.py52
-rw-r--r--scss/pysite/_uikit_shim.scss24
-rw-r--r--scss/pysite/_variables.scss8
-rw-r--r--scss/pysite/pages/staff/_common.scss79
-rw-r--r--scss/pysite/style.scss12
-rw-r--r--static/css/style.css2
-rw-r--r--static/css/style.css.map3
-rw-r--r--static/js/jams.js24
-rw-r--r--templates/main/jams/index.html2
-rw-r--r--templates/staff/jams/index.html2
-rw-r--r--templates/staff/jams/participants.html160
14 files changed, 428 insertions, 13 deletions
diff --git a/.scss-lint.yml b/.scss-lint.yml
index dc53c5d4..b6bcde49 100644
--- a/.scss-lint.yml
+++ b/.scss-lint.yml
@@ -11,6 +11,8 @@ linters:
enabled: false
NameFormat:
convention: "snake_case"
+ NestingDepth:
+ max_depth: 4
SelectorDepth:
max_depth: 4
StringQuotes:
diff --git a/pysite/tables.py b/pysite/tables.py
index e7e47215..ad864fee 100644
--- a/pysite/tables.py
+++ b/pysite/tables.py
@@ -44,7 +44,7 @@ TABLES = {
"info_rst", # str
"info_html", # str
"number", # int
- "participants", # list[int]
+ "participants", # list[str]
"repo", # str
"state", # str
"task_html", # str
diff --git a/pysite/views/staff/jams/actions.py b/pysite/views/staff/jams/actions.py
index 059f8969..ba5a66e9 100644
--- a/pysite/views/staff/jams/actions.py
+++ b/pysite/views/staff/jams/actions.py
@@ -6,7 +6,10 @@ from pysite.decorators import csrf, require_roles
from pysite.mixins import DBMixin
GET_ACTIONS = ["questions"]
-POST_ACTIONS = ["associate_question", "disassociate_question", "infraction", "questions", "state"]
+POST_ACTIONS = [
+ "associate_question", "disassociate_question", "infraction", "questions", "state", "approve_application",
+ "unapprove_application"
+]
DELETE_ACTIONS = ["infraction", "question"]
KEYS = ["action"]
@@ -21,6 +24,7 @@ class ActionView(APIView, DBMixin):
forms_table = "code_jam_forms"
infractions_table = "code_jam_infractions"
questions_table = "code_jam_questions"
+ responses_table = "code_jam_responses"
@csrf
@require_roles(*ALL_STAFF_ROLES)
@@ -188,6 +192,69 @@ class ActionView(APIView, DBMixin):
return jsonify({"id": result["generated_keys"][0]})
+ if action == "approve_application":
+ app = request.args.get("id")
+
+ if not app:
+ return self.error(
+ ErrorCodes.incorrect_parameters, "Application ID required"
+ )
+
+ app_obj = self.db.get(self.responses_table, app)
+
+ if not app_obj:
+ return self.error(
+ ErrorCodes.incorrect_parameters, "Unknown application ID"
+ )
+
+ app_obj["approved"] = True
+
+ self.db.insert(self.responses_table, app_obj, conflict="replace")
+
+ jam_obj = self.db.get(self.table_name, app_obj["jam"])
+
+ snowflake = app_obj["snowflake"]
+ participants = jam_obj.get("participants", [])
+
+ if snowflake not in participants:
+ participants.append(snowflake)
+ jam_obj["participants"] = participants
+ self.db.insert(self.table_name, jam_obj, conflict="replace")
+
+ return jsonify({"result": "success"})
+
+ if action == "unapprove_application":
+ app = request.args.get("id")
+
+ if not app:
+ return self.error(
+ ErrorCodes.incorrect_parameters, "Application ID required"
+ )
+
+ app_obj = self.db.get(self.responses_table, app)
+
+ if not app_obj:
+ return self.error(
+ ErrorCodes.incorrect_parameters, "Unknown application ID"
+ )
+
+ app_obj["approved"] = False
+
+ self.db.insert(self.responses_table, app_obj, conflict="replace")
+
+ jam_obj = self.db.get(self.table_name, app_obj["jam"])
+
+ snowflake = app_obj["snowflake"]
+ participants = jam_obj.get("participants", [])
+
+ if snowflake in participants:
+ participants.remove(snowflake)
+ jam_obj["participants"] = participants
+
+ self.db.insert(self.table_name, jam_obj, conflict="replace")
+
+ return jsonify({"result": "success"})
+
@csrf
@require_roles(*ALL_STAFF_ROLES)
def delete(self):
diff --git a/pysite/views/staff/jams/participants.py b/pysite/views/staff/jams/participants.py
new file mode 100644
index 00000000..6b95db76
--- /dev/null
+++ b/pysite/views/staff/jams/participants.py
@@ -0,0 +1,52 @@
+from rethinkdb import ReqlNonExistenceError
+from werkzeug.exceptions import NotFound
+
+from pysite.base_route import RouteView
+from pysite.constants import ALL_STAFF_ROLES
+from pysite.decorators import require_roles
+from pysite.mixins import DBMixin
+
+REQUIRED_KEYS = ["title", "date_start", "date_end"]
+
+
+class StaffView(RouteView, DBMixin):
+ path = "/jams/participants/<int:jam>"
+ name = "jams.participants"
+
+ forms_table = "code_jam_forms"
+ participants_table = "code_jam_participants"
+ questions_table = "code_jam_questions"
+ responses_table = "code_jam_responses"
+ table_name = "code_jams"
+ users_table = "users"
+
+ @require_roles(*ALL_STAFF_ROLES)
+ def get(self, jam: int):
+ try:
+ query = self.db.query(self.table_name).get(jam).merge(
+ lambda jam_obj: {
+ "participants":
+ self.db.query(self.responses_table)
+ .filter({"jam": jam_obj["number"]})
+ .eq_join("snowflake", self.db.query(self.users_table))
+ .without({"left": "snowflake"})
+ .zip()
+ .coerce_to("array")
+ }
+ )
+
+ jam_data = self.db.run(query)
+ except ReqlNonExistenceError:
+ raise NotFound()
+
+ form_obj = self.db.get(self.forms_table, jam)
+ questions = {}
+
+ if form_obj:
+ for question in form_obj["questions"]:
+ questions[question] = self.db.get(self.questions_table, question)
+
+ return self.render(
+ "staff/jams/participants.html",
+ jam=jam_data, form=form_obj, questions=questions
+ )
diff --git a/scss/pysite/_uikit_shim.scss b/scss/pysite/_uikit_shim.scss
index 74104288..312d717a 100644
--- a/scss/pysite/_uikit_shim.scss
+++ b/scss/pysite/_uikit_shim.scss
@@ -112,3 +112,27 @@ footer {
padding-left: 40px;
padding-right: 40px;
}
+
+// Custom success button
+
+.uk-button-success {
+ background-color: $success_colour;
+ border: 1px solid transparent;
+ color: $white;
+}
+
+.uk-button-success:hover,
+.uk-button-success:focus {
+ background-color: darken($success_colour, 5%);
+}
+
+.uk-button-success:active,
+.uk-button-success.uk-active {
+ background-color: darken($success_colour, 10%);
+}
+
+.uk-button-success:disabled {
+ background-color: $white !important;
+ border: 1px solid $global_border;
+ color: $muted_colour !important;
+}
diff --git a/scss/pysite/_variables.scss b/scss/pysite/_variables.scss
index 4b249387..411444fc 100644
--- a/scss/pysite/_variables.scss
+++ b/scss/pysite/_variables.scss
@@ -4,5 +4,13 @@
$white: #FFFFFF;
$black: #000000;
$red: #FF0000;
+$green: #00FF00;
+
+$success_colour: #32D296;
+$danger_colour: #F0506E;
+$muted_colour: #999999;
$primary_background: #7289DA;
+$muted_background: #F8F8F8;
+
+$global_border: #E5E5E5;
diff --git a/scss/pysite/pages/staff/_common.scss b/scss/pysite/pages/staff/_common.scss
new file mode 100644
index 00000000..725f4197
--- /dev/null
+++ b/scss/pysite/pages/staff/_common.scss
@@ -0,0 +1,79 @@
+@import "variables";
+
+$quote_colour: #99AAB5;
+$sidebar_button_border_colour: rgba(0, 0, 0, .11);
+
+$page_classes: (
+ blueprint-staff, // All wiki pages
+);
+
+@each $class in $page_classes {
+ .#{$class} {
+ .approval-card {
+ border: 1px solid $global_border;
+ padding: 0;
+
+ h2 {
+ margin-bottom: 0;
+ vertical-align: central;
+ }
+
+ .expand-icon {
+ display: none;
+ }
+
+ .contract-icon {
+ display: inline-block;
+ }
+
+ .uk-button {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+
+ .uk-card-body {
+ border-top: 1px solid $global_border;
+ padding-top: 20px;
+ }
+
+ .status-icon.fa-check {
+ color: $success_colour;
+ }
+
+ .status-icon.fa-times {
+ color: $danger_colour;
+ }
+
+ .approved {
+ .status-icon.fa-times {
+ display: none;
+ }
+ }
+
+ .unapproved {
+ .status-icon.fa-check {
+ display: none;
+ }
+ }
+
+ &.collapsed {
+ .expand-icon {
+ display: inline-block;
+ }
+
+ .contract-icon {
+ display: none;
+ }
+
+ .uk-card-header {
+ border-bottom: 0;
+ }
+
+ .uk-card-body {
+ display: none;
+ visibility: hidden;
+ }
+ }
+ }
+ }
+}
diff --git a/scss/pysite/style.scss b/scss/pysite/style.scss
index 09396faf..bd0ed3bc 100644
--- a/scss/pysite/style.scss
+++ b/scss/pysite/style.scss
@@ -52,6 +52,8 @@
@import "pages/main/jams/join";
// Sectional: Staff Blueprint
+@import "pages/staff/common";
+
@import "pages/staff/jams/edit_ending";
@import "pages/staff/jams/edit_info";
@@ -73,8 +75,6 @@
put it in the UIKit shim file instead.
*/
-$table_border_colour: rgb(229, 229, 229);
-
html {
height: 100%;
@@ -145,21 +145,21 @@ div.danger-input * {
// Tables
table.table-bordered {
- border: 1px solid $table_border_colour !important;
+ border: 1px solid $global_border !important;
}
tr.thick-bottom-border {
- border-bottom: 3px solid $table_border_colour !important;
+ border-bottom: 3px solid $global_border !important;
}
td.left-border,
th.left-border {
- border-left: 1px solid $table_border_colour !important;
+ border-left: 1px solid $global_border !important;
}
td.right-border,
th.right-border {
- border-right: 1px solid $table_border_colour !important;
+ border-right: 1px solid $global_border !important;
}
// Flash of Unstyled Content fixes
diff --git a/static/css/style.css b/static/css/style.css
index 35db1895..ae4b4950 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -1,3 +1,3 @@
-@font-face{font-family:"Fira Code";src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot");src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot?#iefix") format("embedded-opentype"),url("https://unpkg.com/firacode/distr/woff2/FiraCode-Regular.woff2") format("woff2"),url("https://unpkg.com/firacode/distr/woff/FiraCode-Regular.woff") format("woff"),url("https://unpkg.com/firacode/distr/ttf/FiraCode-Regular.ttf") format("truetype")}.fira-code{font-family:'Fira Code', "monospace", Fallback}textarea.fira-code{line-height:1.3 !important}th p{margin:0}.uk-offcanvas-content{flex:1 0 auto}.uk-background-secondary .uk-navbar-dropdown-nav .uk-active a{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header{color:#666;font-size:120%;font-weight:bold;padding:0;text-transform:none}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header.uk-active{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-navbar-dropbar{background:#222}.uk-navbar-container,.uk-sticky-placeholder,.uk-navbar-nav>li>a,.uk-navbar-left>a{height:70px}.uk-navbar-dropdown{overflow-y:auto;top:45px !important}.uk-article-title{margin-bottom:0 !important}.uk-article-meta{margin-left:2px;margin-top:0 !important}.uk-section{padding-bottom:30px;padding-top:20px}.uk-heading-divider .uk-article-meta{margin-bottom:0}footer{flex-shrink:0}footer div.uk-section{padding:0}footer div.uk-section div.uk-text-center{margin-top:20px}.uk-button-dark{background:rgba(0,0,0,0.95);border:1px solid rgba(34,34,34,0.93);color:#fff}.uk-button-dark :hover{background:rgba(0,0,0,0.7)}.uk-button-darkish{background:rgba(0,0,0,0.11);border:1px solid rgba(34,34,34,0.09)}.uk-button-darkish :hover{background:rgba(0,0,0,0.22)}.uk-navbar-container{padding-left:40px;padding-right:40px}.uses-rst .document li p{margin-bottom:0}.uses-rst .document img{margin-bottom:20px}.uses-rst #editor{min-height:50vh;resize:vertical}.blueprint-error .window{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);-moz-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);border:1px solid #C1C2C2;height:500px;margin:20px auto auto;width:100%}.blueprint-error .inside{background:#000;height:100%;padding-right:20px}.blueprint-error .block{background:#000;width:100%}.blueprint-error .top,.blueprint-error .panel{float:left}.blueprint-error .top{background:#F1F1F1;background:-webkit-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-moz-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-ms-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-o-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-webkit-gradient(linear, top, bottom, color-stop(3%, #E9E9E9), color-stop(100%, #D8D8D8));background:linear-gradient(to bottom, #E9E9E9 3%, #D8D8D8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F1F1F1', endColorstr='#D8D8D8', GradientType=0);-webkit-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);-moz-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);border-bottom:2px solid #BDBCC1;overflow:hidden;padding:7px 0;position:relative;width:100%}.blueprint-error .panel{padding-left:9px;padding-top:2px}.blueprint-error #terminal-close,.blueprint-error #second-button,.blueprint-error #third-button{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;cursor:pointer;display:inline-block;float:left;height:12px;margin-right:7px;width:12px}.blueprint-error #terminal-close{background:#FF5F4F}.blueprint-error #second-button{background:#F9C206}.blueprint-error #third-button{background:#19CC32}.blueprint-error #terminal{background-color:#000;color:#fff;height:100%;width:100%}.blueprint-error #terminal code{white-space:pre-wrap}.blueprint-error pre{border:0;border-radius:3px}.blueprint-error .uk-background-muted,.blueprint-error .error-header{background-color:#E8E8E8 !important}.blueprint-error .error-header{color:#E84149;font-family:monospace}.blueprint-error code,.blueprint-error pre{overflow-wrap:break-word;width:100%;word-wrap:break-word}.page-main-index #invite-button{padding:0}.page-main-about-partners #partner-cards .uk-card-default{margin-top:2em;text-align:center}.page-main-about-privacy td,.page-main-about-privacy th{max-width:30rem}.page-main-info-resources .payment-icon{margin-right:1em}.page-main-info-resources .payment-icon img{height:2em}.page-main-info-resources .payment-description{height:3.7rem;margin-right:.5rem;vertical-align:text-bottom}.page-main-info-resources .resource-title{margin-bottom:-1rem}.page-main-info-resources .resource-title div{padding-bottom:0}.page-main-jams-index .date-separator{vertical-align:middle}.page-main-jams-join .question-label{margin-top:0}.page-main-jams-join .checkbox-label{padding-left:.7rem}.page-main-jams-join .radio-label{padding-left:.7rem;padding-right:1rem}.page-main-jams-join .range-label{padding-left:.3rem}.page-main-jams-join .textarea{min-height:15rem;resize:vertical}.page-main-jams-join .slider-label{margin-right:1rem}.page-staff-jams-edit-ending #editor{min-height:50vh;resize:vertical}.page-staff-jams-edit-info .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-preamble-edit .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-questions .delete-question-button,.page-staff-jams-forms-questions .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-forms-view .delete-question-button,.page-staff-jams-forms-view .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-infractions .delete-infraction-button{padding-left:5px;padding-right:5px}.page-staff-tables-edit #editor{min-height:50vh;resize:vertical}.page-staff-tables-table .delete-infraction-button{padding-left:5px;padding-right:5px}.blueprint-wiki .quote{border-left:3px solid #7289DA;color:#99AAB5;margin-bottom:1rem;padding-left:20px}.blueprint-wiki #wiki-nav .uk-nav-divider{min-width:8rem}.blueprint-wiki #wiki-sidebar{transition:width ease 1s}.blueprint-wiki #wiki-page{overflow-x:hidden}.blueprint-wiki #wiki-sidebar-button{align-items:center;border:1px solid rgba(0,0,0,0.11);color:#fff;height:3rem;justify-content:center;min-height:3rem;min-width:3rem;width:3rem}.blueprint-wiki #doc-view{width:calc(100% - 6rem)}@media (max-width: 639px){.blueprint-wiki #doc-view{width:calc(100% - 1rem)}}.blueprint-wiki .sidebar-search-input{border-left:0;border-right:0;margin-top:5px;padding-right:0}.blueprint-wiki .search-button{border:0;width:100%}.blueprint-wiki .content{flex-grow:1;margin:0 1rem 1rem}.blueprint-wiki .location-input{margin-left:15px}.blueprint-wiki .preview-title{padding:1rem 1rem .1rem}html{height:100%}html body{display:flex;flex-direction:column;height:100%}.navbar-logo{height:60%;margin-left:-10px;margin-top:2px;max-width:110%;padding-left:3px}.hover-title a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:0;visibility:hidden}.hover-title:hover a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:1;visibility:visible}.debug-mode-item{color:#7289DA !important}.sponsor-logo{max-width:15rem}.cursor-default{cursor:default !important}.full-width{width:100%}select{-webkit-appearance:unset !important;left:auto !important;opacity:1 !important;position:relative !important;top:auto !important}div.danger-input *{border-color:red !important;color:red;transition:color .5s ease, border-color .5s ease}table.table-bordered{border:1px solid #e5e5e5 !important}tr.thick-bottom-border{border-bottom:3px solid #e5e5e5 !important}td.left-border,th.left-border{border-left:1px solid #e5e5e5 !important}td.right-border,th.right-border{border-right:1px solid #e5e5e5 !important}.prevent-fouc{display:none}
+@font-face{font-family:"Fira Code";src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot");src:url("https://unpkg.com/firacode/distr/eot/FiraCode-Regular.eot?#iefix") format("embedded-opentype"),url("https://unpkg.com/firacode/distr/woff2/FiraCode-Regular.woff2") format("woff2"),url("https://unpkg.com/firacode/distr/woff/FiraCode-Regular.woff") format("woff"),url("https://unpkg.com/firacode/distr/ttf/FiraCode-Regular.ttf") format("truetype")}.fira-code{font-family:'Fira Code', "monospace", Fallback}textarea.fira-code{line-height:1.3 !important}th p{margin:0}.uk-offcanvas-content{flex:1 0 auto}.uk-background-secondary .uk-navbar-dropdown-nav .uk-active a{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header{color:#666;font-size:120%;font-weight:bold;padding:0;text-transform:none}.uk-background-secondary .uk-navbar-dropdown-nav .uk-nav-header.uk-active{color:#fff}.uk-background-secondary .uk-navbar-dropdown-nav .uk-navbar-dropbar{background:#222}.uk-navbar-container,.uk-sticky-placeholder,.uk-navbar-nav>li>a,.uk-navbar-left>a{height:70px}.uk-navbar-dropdown{overflow-y:auto;top:45px !important}.uk-article-title{margin-bottom:0 !important}.uk-article-meta{margin-left:2px;margin-top:0 !important}.uk-section{padding-bottom:30px;padding-top:20px}.uk-heading-divider .uk-article-meta{margin-bottom:0}footer{flex-shrink:0}footer div.uk-section{padding:0}footer div.uk-section div.uk-text-center{margin-top:20px}.uk-button-dark{background:rgba(0,0,0,0.95);border:1px solid rgba(34,34,34,0.93);color:#fff}.uk-button-dark :hover{background:rgba(0,0,0,0.7)}.uk-button-darkish{background:rgba(0,0,0,0.11);border:1px solid rgba(34,34,34,0.09)}.uk-button-darkish :hover{background:rgba(0,0,0,0.22)}.uk-navbar-container{padding-left:40px;padding-right:40px}.uk-button-success{background-color:#32D296;border:1px solid transparent;color:#fff}.uk-button-success:hover,.uk-button-success:focus{background-color:#2ac088}.uk-button-success:active,.uk-button-success.uk-active{background-color:#26ab79}.uk-button-success:disabled{background-color:#fff !important;border:1px solid #E5E5E5;color:#999 !important}.uses-rst .document li p{margin-bottom:0}.uses-rst .document img{margin-bottom:20px}.uses-rst #editor{min-height:50vh;resize:vertical}.blueprint-error .window{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);-moz-box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);box-shadow:0 4px 12px 0 rgba(0,0,0,0.5);border:1px solid #C1C2C2;height:500px;margin:20px auto auto;width:100%}.blueprint-error .inside{background:#000;height:100%;padding-right:20px}.blueprint-error .block{background:#000;width:100%}.blueprint-error .top,.blueprint-error .panel{float:left}.blueprint-error .top{background:#F1F1F1;background:-webkit-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-moz-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-ms-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-o-linear-gradient(top, #E9E9E9 3%, #D8D8D8 100%);background:-webkit-gradient(linear, top, bottom, color-stop(3%, #E9E9E9), color-stop(100%, #D8D8D8));background:linear-gradient(to bottom, #E9E9E9 3%, #D8D8D8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F1F1F1', endColorstr='#D8D8D8', GradientType=0);-webkit-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);-moz-box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);box-shadow:inset 0 1px 1px 0 rgba(255,255,255,0.76);border-bottom:2px solid #BDBCC1;overflow:hidden;padding:7px 0;position:relative;width:100%}.blueprint-error .panel{padding-left:9px;padding-top:2px}.blueprint-error #terminal-close,.blueprint-error #second-button,.blueprint-error #third-button{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;cursor:pointer;display:inline-block;float:left;height:12px;margin-right:7px;width:12px}.blueprint-error #terminal-close{background:#FF5F4F}.blueprint-error #second-button{background:#F9C206}.blueprint-error #third-button{background:#19CC32}.blueprint-error #terminal{background-color:#000;color:#fff;height:100%;width:100%}.blueprint-error #terminal code{white-space:pre-wrap}.blueprint-error pre{border:0;border-radius:3px}.blueprint-error .uk-background-muted,.blueprint-error .error-header{background-color:#E8E8E8 !important}.blueprint-error .error-header{color:#E84149;font-family:monospace}.blueprint-error code,.blueprint-error pre{overflow-wrap:break-word;width:100%;word-wrap:break-word}.page-main-index #invite-button{padding:0}.page-main-about-partners #partner-cards .uk-card-default{margin-top:2em;text-align:center}.page-main-about-privacy td,.page-main-about-privacy th{max-width:30rem}.page-main-info-resources .payment-icon{margin-right:1em}.page-main-info-resources .payment-icon img{height:2em}.page-main-info-resources .payment-description{height:3.7rem;margin-right:.5rem;vertical-align:text-bottom}.page-main-info-resources .resource-title{margin-bottom:-1rem}.page-main-info-resources .resource-title div{padding-bottom:0}.page-main-jams-index .date-separator{vertical-align:middle}.page-main-jams-join .question-label{margin-top:0}.page-main-jams-join .checkbox-label{padding-left:.7rem}.page-main-jams-join .radio-label{padding-left:.7rem;padding-right:1rem}.page-main-jams-join .range-label{padding-left:.3rem}.page-main-jams-join .textarea{min-height:15rem;resize:vertical}.page-main-jams-join .slider-label{margin-right:1rem}.blueprint-staff .approval-card{border:1px solid #E5E5E5;padding:0}.blueprint-staff .approval-card h2{margin-bottom:0;vertical-align:central}.blueprint-staff .approval-card .expand-icon{display:none}.blueprint-staff .approval-card .contract-icon{display:inline-block}.blueprint-staff .approval-card .uk-button{padding-left:10px;padding-right:10px}.blueprint-staff .approval-card .uk-card-body{border-top:1px solid #E5E5E5;padding-top:20px}.blueprint-staff .approval-card .status-icon.fa-check{color:#32D296}.blueprint-staff .approval-card .status-icon.fa-times{color:#F0506E}.blueprint-staff .approval-card .approved .status-icon.fa-times{display:none}.blueprint-staff .approval-card .unapproved .status-icon.fa-check{display:none}.blueprint-staff .approval-card.collapsed .expand-icon{display:inline-block}.blueprint-staff .approval-card.collapsed .contract-icon{display:none}.blueprint-staff .approval-card.collapsed .uk-card-header{border-bottom:0}.blueprint-staff .approval-card.collapsed .uk-card-body{display:none;visibility:hidden}.page-staff-jams-edit-ending #editor{min-height:50vh;resize:vertical}.page-staff-jams-edit-info .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-preamble-edit .editor{min-height:30vh;resize:vertical}.page-staff-jams-forms-questions .delete-question-button,.page-staff-jams-forms-questions .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-forms-view .delete-question-button,.page-staff-jams-forms-view .edit-question-button{padding-left:5px;padding-right:5px}.page-staff-jams-infractions .delete-infraction-button{padding-left:5px;padding-right:5px}.page-staff-tables-edit #editor{min-height:50vh;resize:vertical}.page-staff-tables-table .delete-infraction-button{padding-left:5px;padding-right:5px}.blueprint-wiki .quote{border-left:3px solid #7289DA;color:#99AAB5;margin-bottom:1rem;padding-left:20px}.blueprint-wiki #wiki-nav .uk-nav-divider{min-width:8rem}.blueprint-wiki #wiki-sidebar{transition:width ease 1s}.blueprint-wiki #wiki-page{overflow-x:hidden}.blueprint-wiki #wiki-sidebar-button{align-items:center;border:1px solid rgba(0,0,0,0.11);color:#fff;height:3rem;justify-content:center;min-height:3rem;min-width:3rem;width:3rem}.blueprint-wiki #doc-view{width:calc(100% - 6rem)}@media (max-width: 639px){.blueprint-wiki #doc-view{width:calc(100% - 1rem)}}.blueprint-wiki .sidebar-search-input{border-left:0;border-right:0;margin-top:5px;padding-right:0}.blueprint-wiki .search-button{border:0;width:100%}.blueprint-wiki .content{flex-grow:1;margin:0 1rem 1rem}.blueprint-wiki .location-input{margin-left:15px}.blueprint-wiki .preview-title{padding:1rem 1rem .1rem}html{height:100%}html body{display:flex;flex-direction:column;height:100%}.navbar-logo{height:60%;margin-left:-10px;margin-top:2px;max-width:110%;padding-left:3px}.hover-title a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:0;visibility:hidden}.hover-title:hover a{transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-webkit-transition:opacity 200ms ease-in-out;opacity:1;visibility:visible}.debug-mode-item{color:#7289DA !important}.sponsor-logo{max-width:15rem}.cursor-default{cursor:default !important}.full-width{width:100%}select{-webkit-appearance:unset !important;left:auto !important;opacity:1 !important;position:relative !important;top:auto !important}div.danger-input *{border-color:red !important;color:red;transition:color .5s ease, border-color .5s ease}table.table-bordered{border:1px solid #E5E5E5 !important}tr.thick-bottom-border{border-bottom:3px solid #E5E5E5 !important}td.left-border,th.left-border{border-left:1px solid #E5E5E5 !important}td.right-border,th.right-border{border-right:1px solid #E5E5E5 !important}.prevent-fouc{display:none}
/*# sourceMappingURL=style.css.map */ \ No newline at end of file
diff --git a/static/css/style.css.map b/static/css/style.css.map
index 833c0872..211c46ea 100644
--- a/static/css/style.css.map
+++ b/static/css/style.css.map
@@ -15,6 +15,7 @@
"../../scss/pysite/pages/main/info/_resources.scss",
"../../scss/pysite/pages/main/jams/_index.scss",
"../../scss/pysite/pages/main/jams/_join.scss",
+ "../../scss/pysite/pages/staff/_common.scss",
"../../scss/pysite/pages/staff/jams/_edit_ending.scss",
"../../scss/pysite/pages/staff/jams/_edit_info.scss",
"../../scss/pysite/pages/staff/jams/forms/_preamble_edit.scss",
@@ -26,5 +27,5 @@
"../../scss/pysite/pages/wiki/_common.scss"
],
"names": [],
- "mappings": "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"
+ "mappings": "ACGA,UAAU,CACR,WAAW,CAAE,WAAW,CAExB,GAAG,CAAE,gEAAgE,CACrE,GAAG,CAAE,uEAAuE,CAAC,2BAA2B,CACnG,oEAAoE,CAAC,eAAe,CACpF,kEAAkE,CAAC,cAAc,CACjF,gEAAgE,CAAE,kBAAkB,CAG3F,AAAA,UAAU,AAAC,CACT,WAAW,CAAE,kCAAkC,CAChD,AAED,AAAA,QAAQ,AAAA,UAAU,AAAC,CACjB,WAAW,CAAE,cAAc,CAC5B,AEDD,AAAA,EAAE,CAAC,CAAC,AAAC,CACH,MAAM,CAAE,CAAC,CACV,AAED,AAAA,qBAAqB,AAAC,CACpB,IAAI,CAAE,QAAQ,CACf,AAED,AACE,wBADsB,CAAC,uBAAuB,CAC9C,UAAU,CAAC,CAAC,AAAC,CACX,KAAK,CCzBD,IAAO,CD0BZ,AAHH,AAKE,wBALsB,CAAC,uBAAuB,CAK9C,cAAc,AAAC,CACb,KAAK,CAhBW,IAAO,CAiBvB,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CACjB,OAAO,CAAE,CAAC,CACV,cAAc,CAAE,IAAI,CAKrB,AAfH,AAYI,wBAZoB,CAAC,uBAAuB,CAK9C,cAAc,AAOX,UAAU,AAAC,CACV,KAAK,CCpCH,IAAO,CDqCV,AAdL,AAiBE,wBAjBsB,CAAC,uBAAuB,CAiB9C,kBAAkB,AAAC,CACjB,UAAU,CA7Bc,IAAO,CA8BhC,AAGH,AAAA,oBAAoB,CACpB,sBAAsB,CACtB,cAAc,CAAG,EAAE,CAAG,CAAC,CACvB,eAAe,CAAG,CAAC,AAAC,CAClB,MAAM,CAAE,IAAI,CACb,AAED,AAAA,mBAAmB,AAAC,CAClB,UAAU,CAAE,IAAI,CAChB,GAAG,CAAE,eAAe,CACrB,AAED,AAAA,iBAAiB,AAAC,CAChB,aAAa,CAAE,YAAY,CAC5B,AAED,AAAA,gBAAgB,AAAC,CACf,WAAW,CAAE,GAAG,CAChB,UAAU,CAAE,YAAY,CACzB,AAED,AAAA,WAAW,AAAC,CACV,cAAc,CAAE,IAAI,CACpB,WAAW,CAAE,IAAI,CAClB,AAED,AAAA,mBAAmB,CAAC,gBAAgB,AAAC,CACnC,aAAa,CAAE,CAAC,CACjB,AAED,AAAA,MAAM,AAAC,CAEL,WAAW,CAAE,CAAC,CASf,AAXD,AAIE,MAJI,CAIJ,GAAG,AAAA,WAAW,AAAC,CACb,OAAO,CAAE,CAAC,CAKX,AAVH,AAOI,MAPE,CAIJ,GAAG,AAAA,WAAW,CAGZ,GAAG,AAAA,eAAe,AAAC,CACjB,UAAU,CAAE,IAAI,CACjB,AAIL,AAAA,eAAe,AAAC,CACd,UAAU,CArFoB,gBAAkB,CAsFhD,MAAM,CAAE,GAAG,CAAC,KAAK,CArFS,mBAAqB,CAsF/C,KAAK,CC3FC,IAAO,CDgGd,AARD,AAKE,eALa,CAKb,MAAM,AAAC,CACL,UAAU,CAxFwB,eAAkB,CAyFrD,AAGH,AAAA,kBAAkB,AAAC,CACjB,UAAU,CA3FuB,gBAAkB,CA4FnD,MAAM,CAAE,GAAG,CAAC,KAAK,CA3FY,mBAAqB,CAgGnD,AAPD,AAIE,kBAJgB,CAIhB,MAAM,AAAC,CACL,UAAU,CA7F2B,gBAAkB,CA8FxD,AAGH,AAAA,oBAAoB,AAAC,CACnB,YAAY,CAAE,IAAI,CAClB,aAAa,CAAE,IAAI,CACpB,AAID,AAAA,kBAAkB,AAAC,CACjB,gBAAgB,CC9GD,OAAO,CD+GtB,MAAM,CAAE,qBAAqB,CAC7B,KAAK,CCrHC,IAAO,CDsHd,AAED,AAAA,kBAAkB,AAAA,MAAM,CACxB,kBAAkB,AAAA,MAAM,AAAC,CACvB,gBAAgB,CAAE,OAA2B,CAC9C,AAED,AAAA,kBAAkB,AAAA,OAAO,CACzB,kBAAkB,AAAA,UAAU,AAAC,CAC3B,gBAAgB,CAAE,OAA4B,CAC/C,AAED,AAAA,kBAAkB,AAAA,SAAS,AAAC,CAC1B,gBAAgB,CCnIV,IAAO,CDmIY,UAAU,CACnC,MAAM,CAAE,GAAG,CAAC,KAAK,CCxHH,OAAO,CDyHrB,KAAK,CC9HQ,IAAO,CD8HC,UAAU,CAChC,AEhIC,AACE,SADO,CACP,SAAS,CAAC,EAAE,CAAC,CAAC,AAAC,CACb,aAAa,CAAE,CAAC,CACjB,AAHH,AAKE,SALO,CAKP,SAAS,CAAC,GAAG,AAAC,CACZ,aAAa,CAAE,IAAI,CACpB,AAPH,AASE,SATO,CASP,OAAO,AAAC,CACN,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,QAAQ,CACjB,ACMH,AACE,gBADc,CACd,OAAO,AAAC,CJKV,qBAAqB,CIJM,GAAG,CJK9B,kBAAkB,CILS,GAAG,CJM9B,aAAa,CINc,GAAG,CJT9B,kBAAkB,CIUM,CAAC,CAAE,GAAG,CAAuB,IAAI,CJZuB,CAAC,CIX9D,eAAiB,CJcpC,eAAe,CISS,CAAC,CAAE,GAAG,CAAuB,IAAI,CJZuB,CAAC,CIX9D,eAAiB,CJepC,UAAU,CIQc,CAAC,CAAE,GAAG,CAAuB,IAAI,CJZuB,CAAC,CIX9D,eAAiB,CAyBhC,MAAM,CAAE,GAAG,CAAC,KAAK,CAZP,OAAO,CAajB,MAAM,CAAE,KAAK,CACb,MAAM,CAAE,cAAc,CACtB,KAAK,CAAE,IAAI,CACZ,AATH,AAWE,gBAXc,CAWd,OAAO,AAAC,CACN,UAAU,CFnCR,IAAO,CEoCT,MAAM,CAAE,IAAI,CACZ,aAAa,CAAE,IAAI,CACpB,AAfH,AAiBE,gBAjBc,CAiBd,MAAM,AAAC,CACL,UAAU,CFzCR,IAAO,CE0CT,KAAK,CAAE,IAAI,CACZ,AApBH,AAsBE,gBAtBc,CAsBd,IAAI,CAtBN,gBAAgB,CAuBd,MAAM,AAAC,CACL,KAAK,CAAE,IAAI,CACZ,AAzBH,AA2BE,gBA3Bc,CA2Bd,IAAI,AAAC,CJhDP,UAAU,CIQoB,OAAO,CJPrC,UAAU,CAAE,sDAAgE,CAC5E,UAAU,CAAE,mDAA6D,CACzE,UAAU,CAAE,kDAA4D,CACxE,UAAU,CAAE,iDAA2D,CACvE,UAAU,CAAE,yFAAmG,CAC/G,UAAU,CAAE,oDAA8D,CAG1E,MAAM,CAAE,0GAAyH,CAYjI,kBAAkB,CAAE,KAAK,CI6BK,CAAC,CAAE,GAAG,CAA0B,GAAG,CAAE,CAAC,CAtC9C,sBAAwB,CJU9C,eAAe,CAAE,KAAK,CI4BQ,CAAC,CAAE,GAAG,CAA0B,GAAG,CAAE,CAAC,CAtC9C,sBAAwB,CJW9C,UAAU,CAAE,KAAK,CI2Ba,CAAC,CAAE,GAAG,CAA0B,GAAG,CAAE,CAAC,CAtC9C,sBAAwB,CAwC1C,aAAa,CAAE,GAAG,CAAC,KAAK,CAzCN,OAAO,CA0CzB,QAAQ,CAAE,MAAM,CAChB,OAAO,CAAE,KAAK,CACd,QAAQ,CAAE,QAAQ,CAClB,KAAK,CAAE,IAAI,CACZ,AApCH,AAsCE,gBAtCc,CAsCd,MAAM,AAAC,CACL,YAAY,CAAE,GAAG,CACjB,WAAW,CAAE,GAAG,CACjB,AAzCH,AA6CE,gBA7Cc,CA6Cd,eAAe,CA7CjB,gBAAgB,CA8Cd,cAAc,CA9ChB,gBAAgB,CA+Cd,aAAa,AAAC,CJzChB,qBAAqB,CI0CM,GAAG,CJzC9B,kBAAkB,CIyCS,GAAG,CJxC9B,aAAa,CIwCc,GAAG,CAE1B,MAAM,CAAE,OAAO,CACf,OAAO,CAAE,YAAY,CACrB,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,YAAY,CAAE,GAAG,CACjB,KAAK,CAAE,IAAI,CACZ,AAxDH,AA0DE,gBA1Dc,CA0Dd,eAAe,AAAC,CACd,UAAU,CAnFU,OAAO,CAoF5B,AA5DH,AA8DE,gBA9Dc,CA8Dd,cAAc,AAAC,CACb,UAAU,CAhFa,OAAO,CAiF/B,AAhEH,AAkEE,gBAlEc,CAkEd,aAAa,AAAC,CACZ,UAAU,CArFa,OAAO,CAsF/B,AApEH,AAsEE,gBAtEc,CAsEd,SAAS,AAAC,CACR,gBAAgB,CF9Fd,IAAO,CE+FT,KAAK,CFhGH,IAAO,CEiGT,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CAKZ,AA/EH,AA4EI,gBA5EY,CAsEd,SAAS,CAMP,IAAI,AAAC,CACH,WAAW,CAAE,QAAQ,CACtB,AA9EL,AAiFE,gBAjFc,CAiFd,GAAG,AAAC,CACF,MAAM,CAAE,CAAC,CACT,aAAa,CAAE,GAAG,CACnB,AApFH,AAsFE,gBAtFc,CAsFd,oBAAoB,CAtFtB,gBAAgB,CAuFd,aAAa,AAAC,CACZ,gBAAgB,CAvGH,OAAO,CAuGgB,UAAU,CAC/C,AAzFH,AA2FE,gBA3Fc,CA2Fd,aAAa,AAAC,CACZ,KAAK,CAlHU,OAAO,CAmHtB,WAAW,CAAE,SAAS,CACvB,AA9FH,AAgGE,gBAhGc,CAgGd,IAAI,CAhGN,gBAAgB,CAiGd,GAAG,AAAC,CACF,aAAa,CAAE,UAAU,CACzB,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,UAAU,CACtB,AC3HH,AACE,gBADc,CACd,cAAc,AAAC,CACb,OAAO,CAAE,CAAC,CACX,ACHH,AACE,yBADuB,CACvB,cAAc,CAAC,gBAAgB,AAAC,CAC9B,UAAU,CAAE,GAAG,CACf,UAAU,CAAE,MAAM,CACnB,ACJH,AACE,wBADsB,CACtB,EAAE,CADJ,wBAAwB,CAEtB,EAAE,AAAC,CACD,SAAS,CAAE,KAAK,CACjB,ACJH,AACE,yBADuB,CACvB,aAAa,AAAC,CACZ,YAAY,CAAE,GAAG,CAKlB,AAPH,AAII,yBAJqB,CACvB,aAAa,CAGX,GAAG,AAAC,CACF,MAAM,CAAE,GAAG,CACZ,AANL,AASE,yBATuB,CASvB,oBAAoB,AAAC,CACnB,MAAM,CAAE,MAAM,CACd,YAAY,CAAE,KAAK,CACnB,cAAc,CAAE,WAAW,CAC5B,AAbH,AAeE,yBAfuB,CAevB,eAAe,AAAC,CACd,aAAa,CAAE,KAAK,CAKrB,AArBH,AAkBI,yBAlBqB,CAevB,eAAe,CAGb,GAAG,AAAC,CACF,cAAc,CAAE,CAAC,CAClB,ACpBL,AACE,qBADmB,CACnB,eAAe,AAAC,CACd,cAAc,CAAE,MAAM,CACvB,ACHH,AACE,oBADkB,CAClB,eAAe,AAAC,CACd,UAAU,CAAE,CAAC,CACd,AAHH,AAKE,oBALkB,CAKlB,eAAe,AAAC,CACd,YAAY,CAAE,KAAK,CACpB,AAPH,AASE,oBATkB,CASlB,YAAY,AAAC,CACX,YAAY,CAAE,KAAK,CACnB,aAAa,CAAE,IAAI,CACpB,AAZH,AAcE,oBAdkB,CAclB,YAAY,AAAC,CACX,YAAY,CAAE,KAAK,CACpB,AAhBH,AAkBE,oBAlBkB,CAkBlB,SAAS,AAAC,CACR,UAAU,CAAE,KAAK,CACjB,MAAM,CAAE,QAAQ,CACjB,AArBH,AAuBE,oBAvBkB,CAuBlB,aAAa,AAAC,CACZ,YAAY,CAAE,IAAI,CACnB,ACpBH,AACE,gBADc,CACd,cAAc,AAAC,CACb,MAAM,CAAE,GAAG,CAAC,KAAK,CTGP,OAAO,CSFjB,OAAO,CAAE,CAAC,CA+DX,AAlEH,AAKI,gBALY,CACd,cAAc,CAIZ,EAAE,AAAC,CACD,aAAa,CAAE,CAAC,CAChB,cAAc,CAAE,OAAO,CACxB,AARL,AAUI,gBAVY,CACd,cAAc,CASZ,YAAY,AAAC,CACX,OAAO,CAAE,IAAI,CACd,AAZL,AAcI,gBAdY,CACd,cAAc,CAaZ,cAAc,AAAC,CACb,OAAO,CAAE,YAAY,CACtB,AAhBL,AAkBI,gBAlBY,CACd,cAAc,CAiBZ,UAAU,AAAC,CACT,YAAY,CAAE,IAAI,CAClB,aAAa,CAAE,IAAI,CACpB,AArBL,AAuBI,gBAvBY,CACd,cAAc,CAsBZ,aAAa,AAAC,CACZ,UAAU,CAAE,GAAG,CAAC,KAAK,CTnBb,OAAO,CSoBf,WAAW,CAAE,IAAI,CAClB,AA1BL,AA4BI,gBA5BY,CACd,cAAc,CA2BZ,YAAY,AAAA,SAAS,AAAC,CACpB,KAAK,CT/BI,OAAO,CSgCjB,AA9BL,AAgCI,gBAhCY,CACd,cAAc,CA+BZ,YAAY,AAAA,SAAS,AAAC,CACpB,KAAK,CTlCG,OAAO,CSmChB,AAlCL,AAqCM,gBArCU,CACd,cAAc,CAmCZ,SAAS,CACP,YAAY,AAAA,SAAS,AAAC,CACpB,OAAO,CAAE,IAAI,CACd,AAvCP,AA2CM,gBA3CU,CACd,cAAc,CAyCZ,WAAW,CACT,YAAY,AAAA,SAAS,AAAC,CACpB,OAAO,CAAE,IAAI,CACd,AA7CP,AAiDM,gBAjDU,CACd,cAAc,AA+CX,UAAU,CACT,YAAY,AAAC,CACX,OAAO,CAAE,YAAY,CACtB,AAnDP,AAqDM,gBArDU,CACd,cAAc,AA+CX,UAAU,CAKT,cAAc,AAAC,CACb,OAAO,CAAE,IAAI,CACd,AAvDP,AAyDM,gBAzDU,CACd,cAAc,AA+CX,UAAU,CAST,eAAe,AAAC,CACd,aAAa,CAAE,CAAC,CACjB,AA3DP,AA6DM,gBA7DU,CACd,cAAc,AA+CX,UAAU,CAaT,aAAa,AAAC,CACZ,OAAO,CAAE,IAAI,CACb,UAAU,CAAE,MAAM,CACnB,ACrEP,AACE,4BAD0B,CAC1B,OAAO,AAAC,CACN,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,QAAQ,CACjB,ACJH,AACE,0BADwB,CACxB,OAAO,AAAC,CACN,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,QAAQ,CACjB,ACJH,AACE,oCADkC,CAClC,OAAO,AAAC,CACN,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,QAAQ,CACjB,ACJH,AACE,gCAD8B,CAC9B,uBAAuB,CADzB,gCAAgC,CAE9B,qBAAqB,AAAC,CACpB,YAAY,CAAE,GAAG,CACjB,aAAa,CAAE,GAAG,CACnB,ACLH,AACE,2BADyB,CACzB,uBAAuB,CADzB,2BAA2B,CAEzB,qBAAqB,AAAC,CACpB,YAAY,CAAE,GAAG,CACjB,aAAa,CAAE,GAAG,CACnB,ACLH,AACE,4BAD0B,CAC1B,yBAAyB,AAAC,CACxB,YAAY,CAAE,GAAG,CACjB,aAAa,CAAE,GAAG,CACnB,ACJH,AACE,uBADqB,CACrB,OAAO,AAAC,CACN,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,QAAQ,CACjB,ACJH,AACE,wBADsB,CACtB,yBAAyB,AAAC,CACxB,YAAY,CAAE,GAAG,CACjB,aAAa,CAAE,GAAG,CACnB,ACCH,AACE,eADa,CACb,MAAM,AAAC,CACL,WAAW,CAAE,GAAG,CAAC,KAAK,ClBAP,OAAO,CkBCtB,KAAK,CAXI,OAAO,CAYhB,aAAa,CAAE,IAAI,CACnB,YAAY,CAAE,IAAI,CACnB,AANH,AAQE,eARa,CAQb,SAAS,CAAC,eAAe,AAAC,CACxB,SAAS,CAAE,IAAI,CAChB,AAVH,AAYE,eAZa,CAYb,aAAa,AAAC,CACZ,UAAU,CAAE,aAAa,CAC1B,AAdH,AAgBE,eAhBa,CAgBb,UAAU,AAAC,CACT,UAAU,CAAE,MAAM,CACnB,AAlBH,AAoBE,eApBa,CAoBb,oBAAoB,AAAC,CACnB,WAAW,CAAE,MAAM,CACnB,MAAM,CAAE,GAAG,CAAC,KAAK,CA7BQ,gBAAkB,CA8B3C,KAAK,ClB9BH,IAAO,CkB+BT,MAAM,CAAE,IAAI,CACZ,eAAe,CAAE,MAAM,CACvB,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,IAAI,CACf,KAAK,CAAE,IAAI,CACZ,AA7BH,AA+BE,eA/Ba,CA+Bb,SAAS,AAAC,CACR,KAAK,CAAE,iBAAiB,CACzB,AAED,MAAM,EAAE,SAAS,EAAE,KAAK,EAnC1B,AAoCI,eApCW,CAoCX,SAAS,AAAC,CACR,KAAK,CAAE,iBAAiB,CACzB,CAtCL,AAyCE,eAzCa,CAyCb,qBAAqB,AAAC,CACpB,WAAW,CAAE,CAAC,CACd,YAAY,CAAE,CAAC,CACf,UAAU,CAAE,GAAG,CACf,aAAa,CAAE,CAAC,CACjB,AA9CH,AAgDE,eAhDa,CAgDb,cAAc,AAAC,CACb,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,IAAI,CACZ,AAnDH,AAqDE,eArDa,CAqDb,QAAQ,AAAC,CACP,SAAS,CAAE,CAAC,CACZ,MAAM,CAAE,WAAW,CACpB,AAxDH,AA0DE,eA1Da,CA0Db,eAAe,AAAC,CACd,WAAW,CAAE,IAAI,CAClB,AA5DH,AA8DE,eA9Da,CA8Db,cAAc,AAAC,CACb,OAAO,CAAE,eAAe,CACzB,AtBGL,AAAA,IAAI,AAAC,CACH,MAAM,CAAE,IAAI,CAOb,AARD,AAGE,IAHE,CAGF,IAAI,AAAC,CACH,OAAO,CAAE,IAAI,CACb,cAAc,CAAE,MAAM,CACtB,MAAM,CAAE,IAAI,CACb,AAGH,AAAA,YAAY,AAAC,CACX,MAAM,CAAE,GAAG,CACX,WAAW,CAAE,KAAK,CAClB,UAAU,CAAE,GAAG,CACf,SAAS,CAAE,IAAI,CACf,YAAY,CAAE,GAAG,CAClB,AAED,AAAA,YAAY,CAAC,CAAC,AAAC,CExDb,UAAU,CFyDU,OAAO,CAAE,KAAK,CAAE,WAAW,CExD/C,eAAe,CFwDK,OAAO,CAAE,KAAK,CAAE,WAAW,CEvD/C,kBAAkB,CFuDE,OAAO,CAAE,KAAK,CAAE,WAAW,CAE/C,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,MAAM,CACnB,AAED,AAAA,YAAY,AAAA,MAAM,CAAC,CAAC,AAAC,CE/DnB,UAAU,CFgEU,OAAO,CAAE,KAAK,CAAE,WAAW,CE/D/C,eAAe,CF+DK,OAAO,CAAE,KAAK,CAAE,WAAW,CE9D/C,kBAAkB,CF8DE,OAAO,CAAE,KAAK,CAAE,WAAW,CAE/C,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,OAAO,CACpB,AAED,AAAA,gBAAgB,AAAC,CACf,KAAK,CIlGc,OAAO,CJkGC,UAAU,CACtC,AAED,AAAA,aAAa,AAAC,CACZ,SAAS,CAAE,KAAK,CACjB,AAED,AAAA,eAAe,AAAC,CACd,MAAM,CAAE,kBAAkB,CAC3B,AAED,AAAA,WAAW,AAAC,CACV,KAAK,CAAE,IAAI,CACZ,AAID,AAAA,MAAM,AAAC,CACL,kBAAkB,CAAE,gBAAgB,CAEpC,IAAI,CAAE,eAAe,CACrB,OAAO,CAAE,YAAY,CACrB,QAAQ,CAAE,mBAAmB,CAC7B,GAAG,CAAE,eAAe,CACrB,AAED,AAAA,GAAG,AAAA,aAAa,CAAC,CAAC,AAAC,CACjB,YAAY,CIpIR,GAAO,CJoIQ,UAAU,CAC7B,KAAK,CIrID,GAAO,CJuIX,UAAU,CAAE,qCACqB,CAClC,AAID,AAAA,KAAK,AAAA,eAAe,AAAC,CACnB,MAAM,CAAE,GAAG,CAAC,KAAK,CIpIH,OAAO,CJoIY,UAAU,CAC5C,AAED,AAAA,EAAE,AAAA,oBAAoB,AAAC,CACrB,aAAa,CAAE,GAAG,CAAC,KAAK,CIxIV,OAAO,CJwImB,UAAU,CACnD,AAED,AAAA,EAAE,AAAA,YAAY,CACd,EAAE,AAAA,YAAY,AAAC,CACb,WAAW,CAAE,GAAG,CAAC,KAAK,CI7IR,OAAO,CJ6IiB,UAAU,CACjD,AAED,AAAA,EAAE,AAAA,aAAa,CACf,EAAE,AAAA,aAAa,AAAC,CACd,YAAY,CAAE,GAAG,CAAC,KAAK,CIlJT,OAAO,CJkJkB,UAAU,CAClD,AAID,AAAA,aAAa,AAAC,CACZ,OAAO,CAAE,IAAI,CACd"
} \ No newline at end of file
diff --git a/static/js/jams.js b/static/js/jams.js
index 2ee547fa..b0966550 100644
--- a/static/js/jams.js
+++ b/static/js/jams.js
@@ -197,4 +197,26 @@ class Actions {
callback
)
}
-} \ No newline at end of file
+
+ approve_application(id, callback) {
+ this.send(
+ "approve_application",
+ "POST",
+ {
+ "id": id,
+ },
+ callback
+ )
+ }
+
+ unapprove_application(id, callback) {
+ this.send(
+ "unapprove_application",
+ "POST",
+ {
+ "id": id,
+ },
+ callback
+ )
+ }
+}
diff --git a/templates/main/jams/index.html b/templates/main/jams/index.html
index 804a89f3..0ef5fd9e 100644
--- a/templates/main/jams/index.html
+++ b/templates/main/jams/index.html
@@ -79,7 +79,7 @@
<p>
{% if jam.participants %}
<span class="uk-label uk-label">
- {{ jam.participants | length }} participants
+ Participants: {{ jam.participants | length }}
</span>
{% endif %}
<span class="uk-label uk-label-success">
diff --git a/templates/staff/jams/index.html b/templates/staff/jams/index.html
index c38883c2..1d7beeb8 100644
--- a/templates/staff/jams/index.html
+++ b/templates/staff/jams/index.html
@@ -106,7 +106,7 @@
<a class="uk-button uk-button-danger uk-width-expand" href="{{ url_for("staff.jams.forms.view", jam=jam.number) }}">
<i class="uk-icon fa-fw far fa-list"></i> &nbsp;Form
</a>
- <a class="uk-button uk-button-secondary uk-width-expand" href="# TODO">
+ <a class="uk-button uk-button-secondary uk-width-expand" href="{{ url_for("staff.jams.participants", jam=jam.number) }}">
<i class="uk-icon fa-fw far fa-user"></i> &nbsp;Participants
</a>
<a class="uk-button uk-button-primary uk-width-expand" href="# TODO">
diff --git a/templates/staff/jams/participants.html b/templates/staff/jams/participants.html
new file mode 100644
index 00000000..ff2b4a7d
--- /dev/null
+++ b/templates/staff/jams/participants.html
@@ -0,0 +1,160 @@
+{% extends "main/base.html" %}
+{% block title %}Staff | Jams | Participants{% endblock %}
+{% block og_title %}Staff | Jams | Participants{% endblock %}
+{% block og_description %}Listing of participant applications and their status{% endblock %}
+{% block extra_head %}
+ <script src="{{ static_file('js/jams.js') }}"></script>
+{% endblock %}
+{% block content %}
+ {% macro card_header(app) %}
+ <h2 class="uk-float-left">
+ <i class="uk-icon fa-fw far fa-check status-icon" title="Approved"></i>
+ <i class="uk-icon fa-fw far fa-times status-icon" title="Not Approved"></i>
+ {{ app.username }}#{{ app.discriminator }}
+ </h2>
+ <span class="uk-float-right">
+ {% if jam.state in ["announced", "preparing"] %}
+ {% if app.approved %}
+ <button class="uk-button uk-button-success approve-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="approve-button-{{ app.id }}" disabled>
+ <i class="uk-icon fa-fw far fa-check"></i>
+ </button>
+ <button class="uk-button uk-button-danger unapprove-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="unapprove-button-{{ app.id }}">
+ <i class="uk-icon fa-fw far fa-times"></i>
+ </button>
+ {% else %}
+ <button class="uk-button uk-button-success approve-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="approve-button-{{ app.id }}">
+ <i class="uk-icon fa-fw far fa-check"></i>
+ </button>
+ <button class="uk-button uk-button-danger unapprove-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}" id="unapprove-button-{{ app.id }}" disabled>
+ <i class="uk-icon fa-fw far fa-times"></i>
+ </button>
+ {% endif %}
+ {% endif %}
+
+ <a class="uk-button uk-button-primary expand-button" data-app="{{ app.id }}" data-app-user="{{ app.username }}#{{ app.discriminator }}">
+ <i class="uk-icon far fa-fw fa-plus expand-icon"></i>
+ <i class="uk-icon far fa-fw fa-minus contract-icon"></i>
+ </a>
+ </span>
+ {% endmacro %}
+
+ <div class="uk-container uk-container-small uk-section">
+ <h1 class="uk-text-center">Code Jam {{ jam.number }}: Participants</h1>
+ <a class="uk-button uk-button-default" href="{{ url_for("staff.jams.index") }}"><i class="uk-icon fa-fw far fa-arrow-left"></i> &nbsp;Back</a>
+
+ <br />
+ <br />
+
+ {% for app in jam.participants %}
+ <div class="uk-card approval-card collapsed" id="{{ app.id }}">
+ {% if app.approved %}
+ <div class="uk-card-header approved" id="header-{{ app.id }}">
+ {{ card_header(app) }}
+ </div>
+ {% else %}
+ <div class="uk-card-header unapproved" id="header-{{ app.id }}">
+ {{ card_header(app) }}
+ </div>
+ {% endif %}
+ <div class="uk-card-body">
+ {% for response in app.answers %}
+ <div>
+ <strong>{{ questions[response.question].title }}</strong>
+ <br />
+ <pre class="fira-code">{{ response.value }}</pre>
+ </div>
+ {% endfor %}
+ </div>
+ </div>
+ <br />
+ {% endfor %}
+ </div>
+
+ <script>
+ const actions = new Actions("{{ url_for("staff.jams.action") }}", "{{ csrf_token() }}");
+
+ for (let elem of document.getElementsByClassName("expand-button")) {
+ elem.onclick = function(result, data) {
+ let app = this.getAttribute("data-app");
+ let card = document.getElementById(app);
+
+ if (card.classList.contains("collapsed")) {
+ card.classList.remove("collapsed");
+ } else {
+ card.classList.add("collapsed");
+ }
+ }
+ }
+
+
+ {% if jam.state in ["announced", "preparing"] %}
+ for (let elem of document.getElementsByClassName("approve-button")) {
+ elem.onclick = function() {
+ let app = this.getAttribute("data-app");
+ let header = document.getElementById("header-" + app);
+ let unapprove_button = document.getElementById("unapprove-button-" + app);
+ let user = this.getAttribute("data-app-user");
+
+ actions.approve_application(app, function(result, data) {
+ if (!result) {
+ console.log(data);
+ return UIkit.notification({
+ "message": "Approval failed",
+ "status": "danger",
+ "pos": "bottom-center",
+ "timeout": 5000
+ });
+ }
+
+ header.classList.add("approved");
+ header.classList.remove("unapproved");
+
+ elem.disabled = true;
+ unapprove_button.disabled = false;
+
+ UIkit.notification({
+ "message": "Approved: " + user,
+ "status": "success",
+ "pos": "bottom-center",
+ "timeout": 5000
+ });
+ });
+ }
+ }
+
+ for (let elem of document.getElementsByClassName("unapprove-button")) {
+ elem.onclick = function() {
+ let app = this.getAttribute("data-app");
+ let approve_button = document.getElementById("approve-button-" + app);
+ let header = document.getElementById("header-" + app);
+ let user = this.getAttribute("data-app-user");
+
+ actions.unapprove_application(app, function(result, data) {
+ if (!result) {
+ console.log(data);
+ return UIkit.notification({
+ "message": "Unapproval failed",
+ "status": "danger",
+ "pos": "bottom-center",
+ "timeout": 5000
+ });
+ }
+
+ header.classList.add("unapproved");
+ header.classList.remove("approved");
+
+ elem.disabled = true;
+ approve_button.disabled = false;
+
+ UIkit.notification({
+ "message": "Unapproved: " + user,
+ "status": "success",
+ "pos": "bottom-center",
+ "timeout": 5000
+ });
+ });
+ }
+ }
+ {% endif %}
+ </script>
+{% endblock %}