Skip to content

Commit 035580c

Browse files
Merge pull request #104 from FSU-ACM/release
ui updates + deployment tweaks
2 parents 8878306 + 617eba0 commit 035580c

File tree

25 files changed

+294
-257
lines changed

25 files changed

+294
-257
lines changed

.github/workflows/docker-image.yml

+10-10
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ jobs:
3535
context: .
3636
push: true
3737
tags: ${{ steps.meta.outputs.tags }}
38-
redeploy:
39-
name: Redeploy webhook call
40-
runs-on: ubuntu-latest
41-
needs: [push_to_registry]
42-
steps:
43-
- name: Invoke deployment hook
44-
uses: distributhor/workflow-webhook@v2
45-
env:
46-
webhook_url: ${{ secrets.AGON_WEBHOOK_URL }}
47-
webhook_secret: ${{ secrets.AGON_WEBHOOK_SECRET }}
38+
# redeploy:
39+
# name: Redeploy webhook call
40+
# runs-on: ubuntu-latest
41+
# needs: [push_to_registry]
42+
# steps:
43+
# - name: Invoke deployment hook
44+
# uses: distributhor/workflow-webhook@v2
45+
# env:
46+
# webhook_url: ${{ secrets.AGON_WEBHOOK_URL }}
47+
# webhook_secret: ${{ secrets.AGON_WEBHOOK_SECRET }}

Pipfile.lock

+115-115
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/prod/contestsuite/config/nginx.conf

+2
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ server {
3030
proxy_set_header Upgrade $http_upgrade;
3131
proxy_set_header Connection "upgrade";
3232
proxy_redirect off;
33+
add_header X-Robots-Tag "noindex" always;
3334
}
3435

3536
location /flower/static {
3637
aio on;
3738
autoindex off;
3839
alias /usr/share/nginx/html/static/flower;
3940
sendfile on;
41+
add_header X-Robots-Tag "noindex" always;
4042
}
4143
}

deploy/prod/contestsuite/scripts/start.sh

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ if [ "$PROCESS_TYPE" = "server" ]; then
2121
--threads 4 \
2222
--worker-class gthread \
2323
--worker-tmp-dir /dev/shm \
24-
--log-level INFO \
2524
--access-logfile "-" \
2625
--error-logfile "-" \
2726
contestsuite.wsgi:application

requirements-dev.txt

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
-i https://pypi.python.org/simple
2-
astroid==2.13.2 ; python_full_version >= '3.7.2'
2+
astroid==2.14.1 ; python_full_version >= '3.7.2'
33
autopep8==2.0.1
44
dill==0.3.6 ; python_version < '3.11'
5-
isort==5.11.4 ; python_full_version >= '3.7.0'
5+
isort==5.12.0 ; python_full_version >= '3.8.0'
66
lazy-object-proxy==1.9.0 ; python_version >= '3.7'
77
mccabe==0.7.0 ; python_version >= '3.6'
88
platformdirs==2.6.2 ; python_version >= '3.7'
99
pycodestyle==2.10.0 ; python_version >= '3.6'
10-
pylint==2.15.10
10+
pylint==2.16.1
1111
tomli==2.0.1 ; python_version < '3.11'
1212
tomlkit==0.11.6 ; python_version >= '3.6'
1313
typing-extensions==4.4.0 ; python_version >= '3.7'
@@ -31,7 +31,7 @@ defusedxml==0.7.1 ; python_version >= '2.7' and python_version not in '3.0, 3.1,
3131
deprecated==1.2.13 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
3232
diff-match-patch==20200713 ; python_version >= '2.7'
3333
discord.py==1.7.3
34-
django==4.1.5
34+
django==4.1.6
3535
django-celery-beat==2.4.0
3636
django-hashid-field==3.3.7
3737
django-import-export==3.0.2
@@ -40,25 +40,25 @@ et-xmlfile==1.1.0 ; python_version >= '3.6'
4040
flower==1.2.0
4141
gunicorn==20.1.0
4242
hashids==1.3.1 ; python_version >= '2.7'
43-
hiredis==2.1.1
44-
humanize==4.4.0 ; python_version >= '3.7'
43+
hiredis==2.2.1
44+
humanize==4.6.0 ; python_version >= '3.7'
4545
idna==3.4 ; python_version >= '3.5'
4646
kombu==5.2.4 ; python_version >= '3.7'
4747
markuppy==1.14
4848
multidict==6.0.4 ; python_version >= '3.7'
4949
mysqlclient==2.1.1
5050
odfpy==1.4.1
51-
openpyxl==3.0.10
51+
openpyxl==3.1.0
5252
packaging==23.0 ; python_version >= '3.7'
53-
prometheus-client==0.15.0 ; python_version >= '3.6'
53+
prometheus-client==0.16.0 ; python_version >= '3.6'
5454
prompt-toolkit==3.0.36 ; python_full_version >= '3.6.2'
5555
python-crontab==2.7.1
5656
python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
5757
pytz==2022.7.1
5858
pyyaml==6.0
5959
redis==4.1.4
6060
requests==2.28.2
61-
setuptools==66.1.0 ; python_version >= '3.7'
61+
setuptools==67.1.0 ; python_version >= '3.7'
6262
six==1.16.0
6363
sqlparse==0.4.3 ; python_version >= '3.5'
6464
tablib[html,ods,xls,xlsx,yaml]==3.3.0 ; python_version >= '3.7'

requirements.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ defusedxml==0.7.1 ; python_version >= '2.7' and python_version not in '3.0, 3.1,
1818
deprecated==1.2.13 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
1919
diff-match-patch==20200713 ; python_version >= '2.7'
2020
discord.py==1.7.3
21-
django==4.1.5
21+
django==4.1.6
2222
django-celery-beat==2.4.0
2323
django-hashid-field==3.3.7
2424
django-import-export==3.0.2
@@ -27,25 +27,25 @@ et-xmlfile==1.1.0 ; python_version >= '3.6'
2727
flower==1.2.0
2828
gunicorn==20.1.0
2929
hashids==1.3.1 ; python_version >= '2.7'
30-
hiredis==2.1.1
31-
humanize==4.4.0 ; python_version >= '3.7'
30+
hiredis==2.2.1
31+
humanize==4.6.0 ; python_version >= '3.7'
3232
idna==3.4 ; python_version >= '3.5'
3333
kombu==5.2.4 ; python_version >= '3.7'
3434
markuppy==1.14
3535
multidict==6.0.4 ; python_version >= '3.7'
3636
mysqlclient==2.1.1
3737
odfpy==1.4.1
38-
openpyxl==3.0.10
38+
openpyxl==3.1.0
3939
packaging==23.0 ; python_version >= '3.7'
40-
prometheus-client==0.15.0 ; python_version >= '3.6'
40+
prometheus-client==0.16.0 ; python_version >= '3.6'
4141
prompt-toolkit==3.0.36 ; python_full_version >= '3.6.2'
4242
python-crontab==2.7.1
4343
python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
4444
pytz==2022.7.1
4545
pyyaml==6.0
4646
redis==4.1.4
4747
requests==2.28.2
48-
setuptools==66.0.0 ; python_version >= '3.7'
48+
setuptools==67.1.0 ; python_version >= '3.7'
4949
six==1.16.0
5050
sqlparse==0.4.3 ; python_version >= '3.5'
5151
tablib[html,ods,xls,xlsx,yaml]==3.3.0 ; python_version >= '3.7'

src/contestsuite/flowerconfig.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
import os
2+
from contestsuite.settings import get_secret
23

34

4-
def get_secret(key, default=None):
5-
value = os.getenv(key, default)
6-
if value and os.path.isfile(value):
7-
with open(value) as f:
8-
return f.read().strip()
9-
return value
10-
115

126
# Celery Flower configuration
137
# https://flower.readthedocs.io/en/latest/config.html

src/contestsuite/settings.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,11 @@ def get_secret(key, default=None):
9797
'APP_DIRS': True,
9898
'OPTIONS': {
9999
'context_processors': [
100-
'django.template.context_processors.debug',
100+
#'django.template.context_processors.debug',
101101
'django.template.context_processors.request',
102102
'django.contrib.auth.context_processors.auth',
103103
'django.contrib.messages.context_processors.messages',
104+
'core.context_processors.debug',
104105
],
105106
},
106107
},

src/core/context_processors.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from contestsuite import settings
2+
3+
4+
def debug(request):
5+
# Multiple k-v pairs supported
6+
return {'DEBUG': settings.DEBUG}

src/core/static/core/img/favicon.ico

100755100644
0 Bytes
Binary file not shown.

src/core/templates/core/base.html

+26-27
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@
1919
content="ACM ICPC, ACM Programming Contest, FSU ICPC, FSU ACM ICPC, FSU Programming Contest, FSU ACM Programming Contest, FSU CS Programming Contest, Florida State ICPC, Florida State Programming Contest, Florida State CS Programming Contest, Florida State ACM Programming Contest, Florida State University Programming Contest, Florida State University ACM Programming Contest, Florida State University ICPC, Florida State University CS Programming Contest">
2020
<!-------------------------------------------------------------->
2121

22-
<!-- Bootstrap 4.5.0 -->
23-
<link rel="stylesheet"
24-
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
25-
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"/>
22+
<!-- Bootstrap 4.5.3 -->
23+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
24+
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
2625
<!-------------------------------------------------------------->
2726

2827
<!-- Font Awesome 6.2.0 -->
@@ -49,16 +48,15 @@
4948
{% block head %}{% endblock %}
5049
<!-------------------------------------------------------------->
5150

52-
{# Strict order: jQuery first, then Popper.js, then Bootstrap JS #}
53-
<!-- Bootstrap 4.5.0 JS -->
51+
{# Strict order: jQuery first, then Popper.js, then Bootstrap JS. NOTE: bootstrap.bundle includes Popper #}
52+
<!-- Bootstrap 4.5.3 JS -->
5453
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
55-
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
56-
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
57-
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
58-
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
59-
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
54+
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
55+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js"
56+
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
6057
<!-------------------------------------------------------------->
6158

59+
{% if not DEBUG %}
6260
<!-- Global site tag (gtag.js) - Google Analytics -->
6361
<script async src="https://www.googletagmanager.com/gtag/js?id=G-R68Q4E2KTL"></script>
6462
<script>
@@ -69,6 +67,7 @@
6967
gtag('config', 'G-R68Q4E2KTL');
7068
</script>
7169
<!-------------------------------------------------------------->
70+
{% endif %}
7271

7372
{% block title %}
7473
<title>{% block section %}{% endblock %} | ACM at FSU Programming Contest</title>
@@ -103,12 +102,12 @@
103102
Resources
104103
</a>
105104
<div class="dropdown-menu">
106-
<a class="dropdown-item" href="https://domjudge.cs.fsu.edu" target="_blank" rel="external"><i class="fa-solid fa-server"></i> Contest Server</a>
105+
<a class="dropdown-item" href="https://domjudge.cs.fsu.edu" target="_blank" rel="external noopener"><i class="fa-solid fa-server"></i> Contest Server</a>
107106
<a class="dropdown-item" href="https://drive.google.com/drive/folders/1pjZk22HGTOjvedz932kHox6-rTz5JqoE?usp=sharing"
108-
target="_blank" rel="external"><i class="fa-solid fa-file-circle-question"></i> Example Questions</a>
107+
target="_blank" rel="external noopener"><i class="fa-solid fa-file-circle-question"></i> Example Questions</a>
109108
<a class="dropdown-item" href="https://drive.google.com/drive/folders/1uCylEYyFdXdxD_BxplYZIioW6_ragXTq?usp=sharing"
110-
target="_blank" rel="external"><i class="fa-solid fa-book"></i> Registration Guide</a>
111-
<a class="dropdown-item" href="https://bit.ly/JoinProgClub" target="_blank" rel="external"><i class="fa-solid fa-people-group"></i> Programming Club</a>
109+
target="_blank" rel="external noopener"><i class="fa-solid fa-book"></i> Registration Guide</a>
110+
<a class="dropdown-item" href="https://bit.ly/JoinProgClub" target="_blank" rel="external noopener"><i class="fa-solid fa-people-group"></i> Programming Club</a>
112111
</div>
113112
</li>
114113
<li class="nav-item">
@@ -123,7 +122,7 @@
123122
<a class="nav-link dropdown-toggle active d-block d-md-none" href="#" id="navbardrop" data-toggle="dropdown"><i class="fa-regular fa-circle-user"></i> {{ user.first_name }}</a>
124123
<div class="dropdown-menu dropdown-menu-right">
125124
{% if user.is_staff %}
126-
<a class="dropdown-item" href="{% url 'admin:index' %}" target="_blank"><i class="fa-solid fa-users-gear"></i> Django Admin</a>
125+
<a class="dropdown-item" href="{% url 'admin:index' %}"><i class="fa-solid fa-users-gear"></i> Django Admin</a>
127126
{% endif %}
128127
{% if user.profile.is_volunteer %}
129128
{% if user.profile.role == 5 %}
@@ -172,45 +171,45 @@
172171
<div class="col-md-4 text-center text-md-left ">
173172

174173
<div class="py-0">
175-
<h3 class="my-4 text-white"><a class="mx-2 font-italic text-primary" href="https://fsu.acm.org" target="_blank" rel="external">ACM at FSU</a></h3>
174+
<h3 class="my-4 text-white"><a class="mx-2 font-italic text-primary" href="https://fsu.acm.org" title="ACM at FSU Homepage" target="_blank" rel="external noopener">ACM at FSU</a></h3>
176175
<p class="footer-links">
177-
<a href="mailto:contest@fsu.acm.org" class="text-warning" rel="external"><i class="fa fa-envelope text-white mx-2"></i>contest@fsu.acm.org</a>
176+
<a href="mailto:contest@fsu.acm.org" title="ACM at FSU Email" class="text-warning"><i class="fa fa-envelope text-white mx-2"></i>contest@fsu.acm.org</a>
178177
</p>
179178
<div class="mx-auto pt-2">
180-
<a href="https://www.facebook.com/ACMatFSU/" target="_blank" rel="external"><i class="fab fa-facebook fa-lg text-white mr-3"></i></a>
181-
<a href="https://discord.gg/4z3hNMA" target="_blank" rel="external"><i class="fab fa-discord fa-lg text-white mx-3"></i></a>
182-
<a href="https://www.linkedin.com/groups/12238485/" target="_blank" rel="external"><i class="fab fa-linkedin fa-lg text-white mx-3"></i></a>
183-
<a href="{% url 'announcements_feed' %}"><i class="fa fa-rss fa-lg text-white mx-3"></i></a>
179+
<a href="https://www.facebook.com/ACMatFSU/" title="ACM at FSU Facebook" target="_blank" rel="external noopener"><i class="fab fa-facebook fa-lg text-white mr-3"></i></a>
180+
<a href="https://discord.gg/4z3hNMA" title="ACM at FSU Discord" target="_blank" rel="external noopener"><i class="fab fa-discord fa-lg text-white mx-3"></i></a>
181+
<a href="https://www.instagram.com/fsuacm/" title="ACM at FSU Instagram" target="_blank" rel="external noopener"><i
182+
class="fab fa-instagram fa-lg text-white mx-3"></i></a>
183+
<a href="https://www.linkedin.com/groups/12238485/" title="ACM at FSU LinkedIn" target="_blank" rel="external noopener"><i class="fab fa-linkedin fa-lg text-white mx-3"></i></a>
184184
</div>
185185
</div>
186186
</div>
187187

188188
<div class="col-md-4 text-white text-center text-md-left ">
189189
<div class="pt-2 mt-4">
190190
<div>
191-
<a href="https://goo.gl/maps/AQz5K65kyfjjjQJb7" class="text-white" target="_blank" rel="nofollow"><i class="fa-solid fa-map-location-dot"></i>
191+
<a href="https://goo.gl/maps/AQz5K65kyfjjjQJb7" title="Google Maps - Love Building" class="text-white" target="_blank" rel="external noopener"><i class="fa-solid fa-map-location-dot"></i>
192192
James J. Love Building,
193193
1017 Academic Way,
194194
Tallahassee, FL 32304</a>
195195
</div>
196196
<div class="my-2">
197-
<a class="text-white" href="https://cs.fsu.edu" target="_blank" rel="external"><i class="fa-solid fa-up-right-from-square"></i> FSU Dept of Computer Science</a>
197+
<a class="text-white" href="https://www.cs.fsu.edu" title="FSU CS Department Homepage" target="_blank" rel="external noopener"><i class="fa-solid fa-up-right-from-square"></i> FSU Dept of Computer Science</a>
198198
</div>
199199
<div class="mt-2 pt-1">
200-
<a class="text-white" href="https://icpc.global/" target="_blank" rel="external"><i class="fa-solid fa-up-right-from-square"></i> ICPC Global</a>
200+
<a class="text-white" href="https://icpc.global/" title="ICPC Global Homepage" target="_blank" rel="external noopener"><i class="fa-solid fa-up-right-from-square"></i> ICPC Global</a>
201201
</div>
202202
</div>
203203
</div>
204204

205205
<div class="col-md-4 text-white my-4 text-center text-md-left ">
206206
<span class=" font-weight-bold">About the Contest</span>
207207
<p class="text-info my-2">The ACM at FSU Programming Contest is a coding competition that emphasizes problem solving executed in code.</p>
208-
<a class="text-white" href="https://www.mmcinnestaylor.com" target="_blank" rel="external">Built with &hearts; by Marlan Mc-T</a>
208+
<a class="text-white" href="https://www.mmcinnestaylor.com" title="Marlan's Homepage" target="_blank" rel="external noopener">Built with &hearts; by Marlan Mc-T</a>
209209
</div>
210210
</div>
211211
</div>
212212
</footer>
213213
<!-- end of footer -->
214214
</body>
215-
<!-- Hello Lillian -->
216215
</html>

src/core/templates/core/contact.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ <h2>Discord</h2>
3030
<p class="card-text">Join our Discord server to interact with chapter members and officers.</p>
3131
</div>
3232
<div class="card-footer">
33-
<a href="https://discord.gg/4z3hNMA" class="btn btn-primary" target="_blank" role="button" rel="external"><i class="fa-solid fa-person-booth"></i> Join</a>
33+
<a href="https://discord.gg/4z3hNMA" class="btn btn-primary" target="_blank" role="button" rel="external noopener"><i class="fa-solid fa-person-booth"></i> Join</a>
3434
</div>
3535
</div>
3636
<div class="card shadow border-secondary">
@@ -42,7 +42,7 @@ <h2>Chapter Website</h2>
4242
<p class="card-text">Check out our chapter website for additional information regarding our organization and activities.</p>
4343
</div>
4444
<div class="card-footer">
45-
<a class="btn btn-primary" href="https://fsu.acm.org" target="_blank" role="button" rel="external"><i class="fa-solid fa-up-right-from-square"></i> Visit</a>
45+
<a class="btn btn-primary" href="https://fsu.acm.org" target="_blank" role="button" rel="external noopener"><i class="fa-solid fa-up-right-from-square"></i> Visit</a>
4646
</div>
4747
</div>
4848
</div>

src/core/templates/core/faq.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ <h5 class="mb-0">Where is the contest held?</h5>
139139
<div id="collapseSixContest" class="collapse" aria-labelledby="headingSixContest" data-parent="#accordionContest">
140140
<div class="card-body">
141141
In person contests are held in the <a href="https://www.facilities.fsu.edu/space/buildings/profile.php?bldg=0116"
142-
target="_blank" rel="external">Love Building (LOV)</a> at FSU. The building's address can be found in this site's
142+
target="_blank" rel="external noopener">Love Building (LOV)</a> at FSU. The building's address can be found in this site's
143143
footer.
144144
</div>
145145
</div>

src/core/templates/core/index.html

+3-2
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ <h4 class="text-center mt-3">Sponsors</h4>
109109
</div>
110110
</div>
111111

112-
<p class="lead text-center mb-1">An <a href="https://icpc.global" target="_blank" rel="external">ICPC</a> style contest hosted semesterly by the Florida State University Association for Computing Machinery Student Chapter.</p>
112+
<p class="lead text-center mb-1">An <a href="https://icpc.global" target="_blank" rel="external noopener">ICPC</a> style contest hosted semesterly by the Florida State University Association for Computing Machinery Student Chapter.</p>
113113

114114
<hr>
115115

@@ -119,6 +119,7 @@ <h4 class="text-center mt-3">Sponsors</h4>
119119
<div class="card mt-3 border-secondary">
120120
<div class="card-header font-weight-bold bg-secondary text-white">
121121
<i class="fa-solid fa-bullhorn"></i> <span class="d-inline d-sm-none">Recent Announcement</span><span class="d-none d-md-inline">Recent Announcements</span>
122+
<a href="{% url 'announcements_feed' %}" class="float-right"><i class="fa fa-rss fa-sm" style="color: #f3a871;"></i></a>
122123
</div>
123124
<!-- Mobile Announcements -->
124125
<div class="card-body d-block d-sm-none">
@@ -200,7 +201,7 @@ <h5 class="card-title mb-0">{{ announcement.title }}</h5>
200201
</div>
201202
<div class="card-footer">
202203
{% if domjudge_status == 200 %}
203-
<a href="https://domjudge.cs.fsu.edu" class="btn btn-sm btn-primary" target="_blank" rel="external"><i class="fa-solid fa-arrow-up-right-from-square"></i> Connect</a>
204+
<a href="https://domjudge.cs.fsu.edu" class="btn btn-sm btn-primary" target="_blank" rel="external noopener"><i class="fa-solid fa-arrow-up-right-from-square"></i> Connect</a>
204205
{% else %}
205206
<a href="" class="btn btn-sm btn-primary disabled" target="_blank" rel="external"><i class="fa-solid fa-up-right-from-square"></i> Connect</a>
206207
{% endif %}

0 commit comments

Comments
 (0)