···
13
+
is_enrolled?: boolean;
@customElement("class-registration-modal")
···
197
-
.class-card:hover:not(:disabled) {
198
+
.class-card.enrolled {
200
+
background: var(--background);
204
+
.class-card:hover:not(:disabled):not(.enrolled) {
border-color: var(--accent);
transform: translateX(4px);
···
215
+
display: inline-block;
216
+
padding: 0.25rem 0.5rem;
217
+
background: var(--secondary);
218
+
color: var(--text);
219
+
border-radius: 4px;
220
+
font-size: 0.75rem;
222
+
text-transform: uppercase;
justify-content: space-between;
···
443
+
this.suggestedQuery = "";
446
+
// Auto-remove section numbers (e.g., MATH-1720-01 -> MATH-1720)
447
+
let queryToSearch = this.searchQuery.trim();
448
+
if (queryToSearch.match(/.*-\d{2,}$/)) {
449
+
queryToSearch = queryToSearch.replace(/-\d{2,}$/, "");
450
+
this.searchQuery = queryToSearch;
const response = await fetch(
429
-
`/api/classes/search?q=${encodeURIComponent(this.searchQuery.trim())}`,
455
+
`/api/classes/search?q=${encodeURIComponent(queryToSearch)}`,
···
685
-
@click=${() => this.handleJoin(cls.id)}
686
-
?disabled=${this.isJoining}
710
+
class="class-card ${cls.is_enrolled ? "enrolled" : ""}"
711
+
@click=${() => !cls.is_enrolled && this.handleJoin(cls.id)}
712
+
?disabled=${this.isJoining || cls.is_enrolled}
<div class="class-header">
690
-
<div class="course-code">${cls.course_code}</div>
716
+
<div class="course-code">
718
+
${cls.is_enrolled ? html`<span class="enrolled-badge">Registered</span>` : ""}
<div class="class-name">${cls.name}</div>
<span>👤 ${cls.professor}</span>
<span>📅 ${cls.semester} ${cls.year}</span>
699
-
?disabled=${this.isJoining}
700
-
@click=${(e: Event) => {
701
-
e.stopPropagation();
702
-
this.handleJoin(cls.id);
705
-
${this.isJoining ? "Joining..." : "Join"}
731
+
?disabled=${this.isJoining}
732
+
@click=${(e: Event) => {
733
+
e.stopPropagation();
734
+
this.handleJoin(cls.id);
737
+
${this.isJoining ? "Joining..." : "Join"}