diff --git a/package.json b/package.json index b801d8a9..8d306635 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "betterseqtaplus", - "version": "3.4.4", + "version": "3.4.5", "type": "module", "description": "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development add add heaps more features!", "browserslist": "> 0.5%, last 2 versions, not dead", diff --git a/src/SEQTA.ts b/src/SEQTA.ts index 7c7c11b9..a1ccd98d 100644 --- a/src/SEQTA.ts +++ b/src/SEQTA.ts @@ -163,7 +163,9 @@ export function OpenWhatsNewPopup() { let text = stringToHTML( /* html */ `
- +

3.4.5 - Everything Subject averages related

+
  • Fixed subject averages not showing up with non-percent grades
  • +
  • Added Toggle for Letter/Percent Grades
  • 3.4.4 - Bug Fixes and Improvements

  • Added vertical zoom to the timetable
  • Fixed theme importing failing when images were included
  • @@ -2919,7 +2921,13 @@ async function handleAssessments(node: Element): Promise { function parseGrade(gradeText: string): number { // Remove any whitespace const trimmedGrade = gradeText.trim().toUpperCase(); - + // Check if it is a non-percent grade + if (trimmedGrade.includes('/')) { + const grade = trimmedGrade.split("/"); + var a = grade[1] as unknown as number + var b = grade[0] as unknown as number + return ((b/a) * 100); + } // Check if it's a percentage if (trimmedGrade.includes('%')) { return parseFloat(trimmedGrade.replace('%', '')) || 0; @@ -2927,7 +2935,7 @@ async function handleAssessments(node: Element): Promise { // Check if it's a letter grade if (letterGradeMap.hasOwnProperty(trimmedGrade)) { - return letterGradeMap[trimmedGrade]; + return letterGradeMap[trimmedGrade]; } return 0; @@ -2953,15 +2961,50 @@ async function handleAssessments(node: Element): Promise { // Function to add the average assessment item function addAverageAssessment() { - const average = calculateAverageGrade(); - if (average === 0) return; + const numaverage = calculateAverageGrade(); + if (numaverage === 0) return; // Remove existing average section if it exists const existingAverage = document.querySelector('.AssessmentItem__AssessmentItem___2EZ95:first-child'); if (existingAverage?.querySelector('.AssessmentItem__title___2bELn')?.textContent === 'Subject Average') { existingAverage.remove(); } - + const preaverage = numaverage.toFixed(0) as unknown as number + const prepaverage = Math.ceil(preaverage / 5) * 5; + console.info(prepaverage) + const NumberGradeMap: Record = { + 100: "A+", + 95: "A", + 90: "A-", + 85: "B+", + 80: "B", + 75: "B-", + 70: "C+", + 65: "C", + 60: "C-", + 55: "D+", + 50: "D", + 45: "D-", + 40: "E+", + 35: "E", + 30: "E-", + 0: "F" + }; + var letteraverage = "N/A" + const check = Object.prototype.hasOwnProperty.call(NumberGradeMap, prepaverage); + if (check) { + console.debug("[BetterSEQTA+ Debugger] Match found") + letteraverage = NumberGradeMap[prepaverage]; + } else { + console.debug("[BetterSEQTA+ Debugger] No match found") + letteraverage = "N/A" + } + var average = "N/A" + if (settingsState.lettergrade) { + average = letteraverage + } else { + average = `${numaverage.toFixed(2)}%` + } const averageElement = stringToHTML(/* html */`
    @@ -2972,8 +3015,8 @@ async function handleAssessments(node: Element): Promise {
    -
    -
    ${average.toFixed(2)}%
    +
    +
    ${average}
    @@ -2988,4 +3031,4 @@ async function handleAssessments(node: Element): Promise { // Add the average assessment item addAverageAssessment(); -} \ No newline at end of file +} diff --git a/src/interface/pages/settings/general.svelte b/src/interface/pages/settings/general.svelte index 0e046078..32c5ead7 100644 --- a/src/interface/pages/settings/general.svelte +++ b/src/interface/pages/settings/general.svelte @@ -28,6 +28,7 @@
    {#each [ + { title: "Transparency Effects", description: "Enables transparency effects on certain elements such as blur. (May impact battery life)", @@ -107,6 +108,16 @@ onChange: (isOn: boolean) => settingsState.assessmentsAverage = isOn } }, + { + title: "Letter Grade Averages", + description: "Shows the letter grade instead of the percentage in subject averages.", + id: 8, + Component: Switch, + props: { + state: $settingsState.lettergrade, + onChange: (isOn: boolean) => settingsState.lettergrade = isOn + } + }, { title: "Lesson Alerts", description: "Sends a native browser notification ~5 minutes prior to lessons.", @@ -183,4 +194,4 @@
    {/if} - \ No newline at end of file +