Skip to content

Commit 640d656

Browse files
committed
Add Shepherd.js tour and add hide/show gpa
1 parent 6116904 commit 640d656

File tree

8 files changed

+734
-204
lines changed

8 files changed

+734
-204
lines changed

package-lock.json

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
},
3434
"dependencies": {
3535
"@sveltejs/vite-plugin-svelte": "^2.5.3",
36+
"shepherd.js": "^11.2.0",
3637
"vite": "^4.5.1",
3738
"webextension-polyfill": "^0.10.0"
3839
}

src/app.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@
1616
#score-tools p {
1717
padding: 0;
1818
margin: 0;
19+
}
20+
.current-step {
21+
@apply tw-outline tw-outline-offset-2 tw-outline-yellow-500;
1922
}

src/content_script/guardianHome/GPA.svelte

Lines changed: 87 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -10,85 +10,96 @@
1010
$: sem2GPA = classManager.calculateGPA(2);
1111
1212
let editGrades = false;
13+
let hideGPA = true;
1314
</script>
1415

15-
{#if sem1GPA && sem1GPA !== -1}
16-
<p>First Semester GPA: {classManager.calculateGPA(1).toFixed(2)}</p>
17-
{:else}
18-
<p>First Semester GPA: N/A</p>
19-
{/if}
16+
<label class="tw-flex tw-items-center tw-gap-2 tw-mb-2">
17+
<input type="checkbox" class="!tw-m-0" bind:checked={hideGPA} />
18+
Hide GPA
19+
</label>
2020

21-
{#if sem2GPA && sem2GPA !== -1}
22-
<p>Second Semester GPA: {classManager.calculateGPA(2).toFixed(2)}</p>
23-
{:else}
24-
<p>Second Semester GPA: N/A</p>
25-
{/if}
21+
{#if !hideGPA}
22+
{#if sem1GPA && sem1GPA !== -1}
23+
<p>First Semester GPA: {classManager.calculateGPA(1).toFixed(2)}</p>
24+
{:else}
25+
<p>First Semester GPA: N/A</p>
26+
{/if}
2627

27-
<label class="tw-flex tw-items-center tw-gap-2">
28-
<input type="checkbox" class="!tw-m-0" bind:checked={editGrades} />
29-
Edit grades for GPA calculation
30-
</label>
28+
{#if sem2GPA && sem2GPA !== -1}
29+
<p>Second Semester GPA: {classManager.calculateGPA(2).toFixed(2)}</p>
30+
{:else}
31+
<p>Second Semester GPA: N/A</p>
32+
{/if}
33+
34+
<label class="tw-flex tw-items-center tw-gap-2 tw-mb-2">
35+
<input type="checkbox" class="!tw-m-0" bind:checked={editGrades} />
36+
Edit grades for GPA calculation
37+
</label>
3138

32-
{#if editGrades}
33-
<table class="!tw-w-auto grid zebra tw-mb-4">
34-
<thead>
35-
<th> Class </th>
36-
<th> S1 Grade </th>
37-
<th> S2 Grade </th>
38-
<th> Credits </th>
39-
<th> AP/AT </th>
40-
</thead>
41-
<tbody>
42-
{#each classManager.classes as c, i}
43-
<tr>
44-
<td> {c.name} </td>
45-
<td>
46-
<select
47-
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
48-
bind:value={classManager.classes[i].grade.s1}
49-
>
50-
{#each listOfGrades as grade}
51-
<option value={grade}
52-
>{grade}
53-
{grade !== "INC" ? `(${gradeToPercent[grade]}%)` : ""}
54-
</option>
55-
{/each}
56-
</select>
57-
</td>
58-
<td>
59-
<select
60-
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
61-
bind:value={classManager.classes[i].grade.s2}
62-
>
63-
{#each listOfGrades as grade}
64-
<option value={grade}
65-
>{grade}
66-
{grade !== "INC" ? `(${gradeToPercent[grade]}%)` : ""}
67-
</option>
68-
{/each}
69-
<option value={null}>No grade</option>
70-
</select>
71-
</td>
72-
<td>
73-
<select
74-
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
75-
bind:value={classManager.classes[i].credits}
76-
>
77-
<option value={0}>0</option>
78-
<option value={0.5}>0.5</option>
79-
<option value={1}>1</option>
80-
<option value={2}>2</option>
81-
</select>
82-
</td>
83-
<td class="tw-align-middle tw-text-center">
84-
<input
85-
type="checkbox"
86-
class="!tw-m-0"
87-
bind:checked={classManager.classes[i].isBoosted}
88-
/>
89-
</td>
90-
</tr>
91-
{/each}
92-
</tbody>
93-
</table>
39+
{#if editGrades}
40+
<p class="tw-mb-2">
41+
Note: Semester classes count as 1 credit for GPA calculation.
42+
</p>
43+
<table class="!tw-w-auto grid zebra tw-mb-4">
44+
<thead>
45+
<th> Class </th>
46+
<th> S1 Grade </th>
47+
<th> S2 Grade </th>
48+
<th> Credits </th>
49+
<th> AP/AT </th>
50+
</thead>
51+
<tbody>
52+
{#each classManager.classes as c, i}
53+
<tr>
54+
<td> {c.name} </td>
55+
<td>
56+
<select
57+
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
58+
bind:value={classManager.classes[i].grade.s1}
59+
>
60+
{#each listOfGrades as grade}
61+
<option value={grade}
62+
>{grade}
63+
{grade !== "INC" ? `(${gradeToPercent[grade]}%)` : ""}
64+
</option>
65+
{/each}
66+
</select>
67+
</td>
68+
<td>
69+
<select
70+
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
71+
bind:value={classManager.classes[i].grade.s2}
72+
>
73+
{#each listOfGrades as grade}
74+
<option value={grade}
75+
>{grade}
76+
{grade !== "INC" ? `(${gradeToPercent[grade]}%)` : ""}
77+
</option>
78+
{/each}
79+
<option value={null}>No grade</option>
80+
</select>
81+
</td>
82+
<td>
83+
<select
84+
class="tw-rounded-md tw-h-full tw-border-[#CCCCCC] tw-border-solid tw-border tw-p-1"
85+
bind:value={classManager.classes[i].credits}
86+
>
87+
<option value={0}>0</option>
88+
<option value={0.5}>0.5</option>
89+
<option value={1}>1</option>
90+
<option value={2}>2</option>
91+
</select>
92+
</td>
93+
<td class="tw-align-middle tw-text-center">
94+
<input
95+
type="checkbox"
96+
class="!tw-m-0"
97+
bind:checked={classManager.classes[i].isBoosted}
98+
/>
99+
</td>
100+
</tr>
101+
{/each}
102+
</tbody>
103+
</table>
104+
{/if}
94105
{/if}

src/content_script/scores/index.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ export enum Tools {
3030
CATEGORY_WEIGHTING = "CATEGORY_WEIGHTING",
3131
}
3232

33+
function waitForElm(selector: string): Promise<Element | null> {
34+
return new Promise(resolve => {
35+
if (document.querySelector(selector)) {
36+
return resolve(document.querySelector(selector));
37+
}
38+
39+
const observer = new MutationObserver(mutations => {
40+
if (document.querySelector(selector)) {
41+
observer.disconnect();
42+
resolve(document.querySelector(selector));
43+
}
44+
});
45+
46+
observer.observe(document.body, {
47+
childList: true,
48+
subtree: true
49+
});
50+
});
51+
}
52+
3353
async function getFinalPercent(): Promise<number | null> {
3454
let finalGrade: number | null = null;
3555
const url = new URL(window.location.href);
@@ -58,7 +78,8 @@ async function getFinalPercent(): Promise<number | null> {
5878

5979
let gradeManagerO = new GradeManager([], [], 100);
6080

61-
setTimeout(async () => {
81+
const doScoreTools = async () => {
82+
await waitForElm("#scoreTable");
6283
const gradeManager = new GradeManager([], [], 100);
6384
const rowEles = document.querySelectorAll("tr.ng-scope");
6485

@@ -100,14 +121,6 @@ setTimeout(async () => {
100121
}
101122
}
102123

103-
// for (let category of gradeManager.categories) {
104-
// let assignments = gradeManager.getAssignmentsByCategory(category);
105-
106-
// const sumOfWeights = assignments.reduce((total, assignment) => total + assignment.weight, 0);
107-
// for (let i = 0; i < assignments.length; i++) {
108-
// assignments[i].weight = (assignments[i].weight / sumOfWeights) * 100;
109-
// }
110-
// }
111124
const key = "" + new URL(location.href).searchParams.get(
112125
"frn",
113126
) + new URL(location.href).searchParams.get(
@@ -136,10 +149,11 @@ setTimeout(async () => {
136149
target: target as Element,
137150
props: { finalPercent, gradeManager: gradeManagerO }
138151
})
139-
}, 750);
152+
}
153+
154+
doScoreTools();
140155

141156

142-
console.log("rendering");
143157
let target = document.createElement("div");
144158
document
145159
.querySelector(".box-round")!

0 commit comments

Comments
 (0)