From 337f85c3cc4b26aaf8b3ae860d1a8897e76fdae1 Mon Sep 17 00:00:00 2001 From: Aden Linday Date: Tue, 2 Jun 2026 08:42:24 +0930 Subject: [PATCH] feat: prep fopr v3.7.0 as well as minor tweaks --- docs/CLOUD_SETTINGS_SYNC_SERVER.md | 1 + package.json | 2 +- src/css/injected.scss | 26 ++++++++ .../gradeAnalytics/GradeAnalyticsPage.svelte | 26 +++++--- .../built-in/gradeAnalytics/core/index.ts | 9 ++- .../openAnalyticsPrivacyPopup.ts | 61 ++++++++++++++++++ .../built-in/gradeAnalytics/styles.css | 14 ++++ src/resources/updateimage1.webp | Bin 0 -> 49438 bytes src/seqta/content/MenuItemSVGKey.json | 3 +- .../utils/Openers/OpenPrivacyStatement.ts | 3 +- src/seqta/utils/Openers/OpenWhatsNewPopup.ts | 47 +++++++++----- src/seqta/utils/Openers/PopupManager.ts | 8 +++ src/seqta/utils/cloudSettingsSync.ts | 7 +- 13 files changed, 176 insertions(+), 31 deletions(-) create mode 100644 src/plugins/built-in/gradeAnalytics/openAnalyticsPrivacyPopup.ts create mode 100644 src/resources/updateimage1.webp diff --git a/docs/CLOUD_SETTINGS_SYNC_SERVER.md b/docs/CLOUD_SETTINGS_SYNC_SERVER.md index d9b502e8..2a57d8cd 100644 --- a/docs/CLOUD_SETTINGS_SYNC_SERVER.md +++ b/docs/CLOUD_SETTINGS_SYNC_SERVER.md @@ -120,6 +120,7 @@ The backup is a flat JSON map of **`chrome.storage.local`** keys. It does **not* - **OAuth / session keys** — `bsplus_token`, `bsplus_refresh_token`, `bsplus_client_id`, `bsplus_user`, plus legacy `cloudAccessToken` / `cloudUsername`. - **Assessment Averages caches** — `plugin.assessments-average.storage.assessments`, `plugin.assessments-average.storage.weightings` (school assessment data). - **Keys under** `plugin.global-search.storage.*` — reserved so any future plugin storage cache there is not synced. +- **Grade Analytics** — keys under `bsplus.analytics.*` (synced assessment cache and per-school chart preferences). - **`bsplus_cloud_settings_known_remote_updated_at`** — client-only watermark for auto-sync (not part of the cloud backup blob). On restore, those keys are **not** taken from the server; the device keeps its current local values. diff --git a/package.json b/package.json index 8f0615e0..1c53c20b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "betterseqtaplus", - "version": "3.6.6", + "version": "3.7.0", "type": "module", "description": "Enhance SEQTA Learn's usability and aesthetics! A fork of BetterSEQTA to continue development and add heaps more features!", "browserslist": "> 0.5%, last 2 versions, not dead", diff --git a/src/css/injected.scss b/src/css/injected.scss index a1580330..978cd32b 100644 --- a/src/css/injected.scss +++ b/src/css/injected.scss @@ -3558,6 +3558,32 @@ div.day-empty { color: var(--text-primary); transform-origin: center center; } + +/* Text-only popups (privacy notices): body fills remaining height, scrolls inside */ +.whatsnewContainer.whatsnewContainer--scrollBody { + .whatsnewHeader { + flex-shrink: 0; + height: auto; + min-height: 3em; + } + + > .whatsnewTextContainer { + flex: 1 1 auto; + min-height: 0; + overflow-x: hidden; + overflow-y: auto; + max-height: none; + width: 90%; + margin: 0 auto 0.75rem; + padding-bottom: 0.5rem; + box-sizing: border-box; + } + + > .whatsnewTextContainer.privacyStatement { + font-size: 1.1rem; + line-height: 1.6; + } +} .whatsnewTextContainer.privacyStatement p { margin-bottom: 1.5ex; diff --git a/src/plugins/built-in/gradeAnalytics/GradeAnalyticsPage.svelte b/src/plugins/built-in/gradeAnalytics/GradeAnalyticsPage.svelte index 43eab2d3..e2afc141 100644 --- a/src/plugins/built-in/gradeAnalytics/GradeAnalyticsPage.svelte +++ b/src/plugins/built-in/gradeAnalytics/GradeAnalyticsPage.svelte @@ -16,6 +16,7 @@ TIME_RANGE_OPTIONS, type TimeRange, } from "./timeRange"; + import { openAnalyticsPrivacyPopup } from "./openAnalyticsPrivacyPopup"; let analyticsData: Assessment[] | null = $state(null); let loading = $state(true); @@ -208,14 +209,23 @@

Last updated: {formattedTimestamp()}

{/if} - +
+ + +
{#if error} diff --git a/src/plugins/built-in/gradeAnalytics/core/index.ts b/src/plugins/built-in/gradeAnalytics/core/index.ts index 9c9555cf..16d36394 100644 --- a/src/plugins/built-in/gradeAnalytics/core/index.ts +++ b/src/plugins/built-in/gradeAnalytics/core/index.ts @@ -1,9 +1,13 @@ import type { Plugin } from "@/plugins/core/types"; +import MenuitemSVGKey from "@/seqta/content/MenuItemSVGKey.json"; import { waitForElm } from "@/seqta/utils/waitForElm"; import { isSeqtaEngageExperience } from "@/seqta/utils/isSeqtaEngage"; +import { processMenuItemNode } from "@/seqta/utils/sidebarMenuIcons"; import { loadAnalyticsPage } from "../loadAnalyticsPage"; import styles from "../styles.css?inline"; +const ANALYTICS_MENU_ICON = MenuitemSVGKey.analytics; + const ANALYTICS_MENU_CLASS = "betterseqta-grade-analytics-item"; const gradeAnalyticsPlugin: Plugin<{}> = { @@ -30,7 +34,7 @@ const gradeAnalyticsPlugin: Plugin<{}> = { analyticsItem.dataset.key = "analytics"; analyticsItem.dataset.path = "/analytics"; analyticsItem.dataset.betterseqta = "true"; - analyticsItem.innerHTML = ``; + analyticsItem.innerHTML = ``; const homeButton = document.getElementById("homebutton"); if (homeButton?.parentElement === menuList) { @@ -39,6 +43,8 @@ const gradeAnalyticsPlugin: Plugin<{}> = { menuList.insertBefore(analyticsItem, menuList.firstChild); } + processMenuItemNode(analyticsItem); + const menuObserver = new MutationObserver(() => { if (!menuList.contains(analyticsItem)) { if (homeButton?.parentElement === menuList) { @@ -46,6 +52,7 @@ const gradeAnalyticsPlugin: Plugin<{}> = { } else { menuList.insertBefore(analyticsItem, menuList.firstChild); } + processMenuItemNode(analyticsItem); } }); menuObserver.observe(menuList, { childList: true }); diff --git a/src/plugins/built-in/gradeAnalytics/openAnalyticsPrivacyPopup.ts b/src/plugins/built-in/gradeAnalytics/openAnalyticsPrivacyPopup.ts new file mode 100644 index 00000000..4f14f4ca --- /dev/null +++ b/src/plugins/built-in/gradeAnalytics/openAnalyticsPrivacyPopup.ts @@ -0,0 +1,61 @@ +import stringToHTML from "@/seqta/utils/stringToHTML"; +import { openPopup } from "@/seqta/utils/Openers/PopupManager"; + +/** Grade Analytics privacy — uses the shared BetterSEQTA+ whatsnew popup shell. */ +export function openAnalyticsPrivacyPopup() { + const header = stringToHTML( + /* html */ + `
+

Privacy notice

+

Grade Analytics on this device

+
`, + ).firstChild as HTMLElement; + + const text = stringToHTML(/* html */ ` +
+

+ Your grade history and charts stay on this device. + BetterSEQTA+ does not collect or store your analytics on our servers. +

+ +

What we store locally

+ + +

What we never do

+ + +

How refresh works

+

+ Refresh data loads released marks directly from SEQTA while you are logged in. + That traffic is between your browser and your school’s SEQTA site — not to us. +

+ +

Clearing your data

+

+ You can remove cached analytics any time by clearing this extension’s storage in + your browser settings. +

+ +

+ General plugin settings (such as cache duration in the Grade Analytics plugin + panel) may still sync if you use BetterSEQTA Cloud — but never your assessment + results or charts. +

+
+ `).firstChild as HTMLElement; + + openPopup({ + header, + content: [text], + animateSelector: ".whatsnewTextContainer *", + containerClass: "whatsnewContainer--scrollBody", + }); +} diff --git a/src/plugins/built-in/gradeAnalytics/styles.css b/src/plugins/built-in/gradeAnalytics/styles.css index c7dc3581..1c1f1343 100644 --- a/src/plugins/built-in/gradeAnalytics/styles.css +++ b/src/plugins/built-in/gradeAnalytics/styles.css @@ -103,6 +103,20 @@ gap: 1.25rem; } +.bsplus-analytics-header-actions { + display: flex; + flex-direction: column; + align-items: stretch; + gap: 0.5rem; + flex-shrink: 0; +} + +@media (min-width: 480px) { + .bsplus-analytics-header-actions { + min-width: 10.5rem; + } +} + .bsplus-analytics-header-text h1 { margin: 0 0 0.35rem; font-size: 1.875rem; diff --git a/src/resources/updateimage1.webp b/src/resources/updateimage1.webp new file mode 100644 index 0000000000000000000000000000000000000000..8ebc6f534f9dff26db3125a70b02cdefbea4136c GIT binary patch literal 49438 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

Vn6JE`N7337{ae;M1Cx?aG-*d< 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 z%0Ds&&$~oj_Tf<*?sXMP_p05&`SCpn4_+g9t1F*4ig;>Zb+gk9V!JYD!Q+Dg3Ur!g1^9Vsu zCLGh&i^eiJ`8c$$(%POWLIkP_3IQO&eOmWMzXT{Lj8xp@>;n|xOB9Ju6(|HiF#A$=6 zfzZNOKBkUcZN|3hkubtDI8%mVbcH1Youf`HV!MQ11-vV3ip0ng#`#pdxEarM6~2zT z3g2-wX-TD=2qcIIk=uX?Z{#J`B(}B!R*USkTAa!bDJ%ex_eG!!$=#K zK1+HW3rawi&n#C5(Cpl*HSw03Lp^B7N36w{$bEU)3cYC$tJo7DRH8}OZl?l-US?r* z4@eF=f$|r!)_SLACnNxzM}}y*Wyx{pE-2wc-+T>paac~j4I^tWCi0>DmulL^HqZYT z^a&ec3A4sNrd-XaW67p)9i4p?l$LdV#!IP$!Q*+Mw#I|Lm> z2SS+5i7t0vKBJ}$Li9q(9O8M!!H6O92RNO3fE}a;gMvly_C1TaCzewC0G3&4pB<+( zLQ(@&jE;)zSa)k@RB9aZ?{rd?*~PLpC4Fg?gq=U>Hh=RT@c(X$vDpHEEK>m0EFOda zTptzQl5&PUt>~V<(r*Rw2C{zIce|7Gpp-SVvtJ!gz%IPaIJ`-`QE6kaXR!lX%gMZ# zCW0n!pzBh2ZQPdhxOl(+AsN zBB+O;JH1;tuQqPgvkv$@s+CO96_C3sa%xSncg`S<-d8c5y#b6NV#sdc1E6(d$eRCo zEo>v2!d&HbD?S`e#XYJygy-x!g#Rg;sN$+%720%DE*N_|Qz-K3N*8=;8|>*oUe;|w z+S{8(2|@DVjb48hoY-B}A%t)?VI+Z_?TWJl2`z`K#9#$R#&YX|xz$UtZLP\n \n", "reports": "\n \n", "settings": "\n \n", - "timetable": "\n \n" + "timetable": "\n \n", + "analytics": "\n \n \n" } diff --git a/src/seqta/utils/Openers/OpenPrivacyStatement.ts b/src/seqta/utils/Openers/OpenPrivacyStatement.ts index 4fc52682..579b2059 100644 --- a/src/seqta/utils/Openers/OpenPrivacyStatement.ts +++ b/src/seqta/utils/Openers/OpenPrivacyStatement.ts @@ -11,7 +11,7 @@ export function OpenPrivacyStatement() { ).firstChild as HTMLElement; const text = stringToHTML(/* html */ ` -

+

Privacy Policy

At BetterSEQTA+, we take your privacy seriously. We want to be completely transparent about how we handle your data.

@@ -43,6 +43,7 @@ export function OpenPrivacyStatement() { openPopup({ header, content: [text], + containerClass: "whatsnewContainer--scrollBody", }); } diff --git a/src/seqta/utils/Openers/OpenWhatsNewPopup.ts b/src/seqta/utils/Openers/OpenWhatsNewPopup.ts index 8b068f05..b9e4bb3d 100644 --- a/src/seqta/utils/Openers/OpenWhatsNewPopup.ts +++ b/src/seqta/utils/Openers/OpenWhatsNewPopup.ts @@ -19,27 +19,40 @@ export function OpenWhatsNewPopup(onDismissed?: () => void) { const video = document.createElement("video"); const source = document.createElement("source"); - source.setAttribute( - "src", - "https://raw.githubusercontent.com/BetterSEQTA/BetterSEQTA-Plus/main/src/resources/update-video.webm", - ); - video.autoplay = true; - video.muted = true; - video.loop = true; - video.appendChild(source); - video.classList.add("whatsnewImg"); - imageContainer.appendChild(video); - attachPopupMediaFullscreen(video); + //source.setAttribute( + // "src", + // "https://raw.githubusercontent.com/BetterSEQTA/BetterSEQTA-Plus/main/src/resources/update-video.webm", + //); + //video.autoplay = true; + //video.muted = true; + //video.loop = true; + //video.appendChild(source); + //video.classList.add("whatsnewImg"); + //imageContainer.appendChild(video); + //attachPopupMediaFullscreen(video); + + const heroImage = document.createElement("img"); + heroImage.src = + "https://raw.githubusercontent.com/BetterSEQTA/BetterSEQTA-Plus/main/src/resources/updateimage1.webp"; + heroImage.alt = "BetterSEQTA+ update preview"; + heroImage.classList.add("whatsnewImg"); + imageContainer.appendChild(heroImage); + attachPopupMediaFullscreen(heroImage); const text = stringToHTML(/* html */ `
-

3.6.6 – Global Search improvements!

-
  • Tuned hybrid search and indexing reliability.
  • -
  • Clearer progress UI and green “Done!” when a pass finishes.
  • -
  • Merged duplicate course hits that opened the same page.
  • -
  • Reset Index reminds you to reload the tab to rebuild.
  • -
  • Index now captures all content accross the site, not just assessments and courses.
  • +

    3.7.0 – Grade Analytics, Global Search & SEQTA Engage Improvements

    +
  • Added Grade Analytics, new sidebar page with grade trend charts synced from SEQTA.
  • +
  • Added Grade distribution auto-detects your school’s letter scale from released marks for analytics page.
  • +
  • Added documents, notices, portals, folios, goals, and more to Global Search.
  • +
  • Added shortcuts to SEQTA Engage home page.
  • +
  • Added assessments overview and assessment weighting overrides for SEQTA Engage.
  • +
  • Added BetterSEQTA sidebar icons to SEQTA Engage.
  • +
  • Added runtime handlers for upcoming interactive theme.
  • +
  • Fixed BetterSEQTA sidebar injection issues on some pages.
  • +
  • Tweak Theme of the Month popup making it more clear about dismissals and respecting “Don’t show again”.
  • +
  • Fixed duplicate-result fixes.
  • 3.6.5 - Theme of the Month, custom message folders & assessment weighting overrides

  • Added Theme of the Month — a monthly featured theme popup with a link to view it in the theme store.
  • diff --git a/src/seqta/utils/Openers/PopupManager.ts b/src/seqta/utils/Openers/PopupManager.ts index ca44c68d..2f233235 100644 --- a/src/seqta/utils/Openers/PopupManager.ts +++ b/src/seqta/utils/Openers/PopupManager.ts @@ -53,6 +53,8 @@ interface OpenPopupOptions { afterClose?: () => void; /** When true, clears the post-update flag when this popup opens (What's New only). */ clearJustUpdated?: boolean; + /** Extra classes on `.whatsnewContainer` (e.g. `whatsnewContainer--scrollBody`). */ + containerClass?: string; } export function openPopup({ @@ -61,6 +63,7 @@ export function openPopup({ animateSelector = ".whatsnewTextContainer *", afterClose, clearJustUpdated = false, + containerClass, }: OpenPopupOptions = {}) { pendingAfterClose = afterClose; @@ -70,6 +73,11 @@ export function openPopup({ const container = document.createElement("div"); container.classList.add("whatsnewContainer"); + if (containerClass) { + for (const name of containerClass.split(/\s+/)) { + if (name) container.classList.add(name); + } + } if (header) container.append(header); for (const node of content) if (node) container.append(node); diff --git a/src/seqta/utils/cloudSettingsSync.ts b/src/seqta/utils/cloudSettingsSync.ts index d474fc76..a36c4e85 100644 --- a/src/seqta/utils/cloudSettingsSync.ts +++ b/src/seqta/utils/cloudSettingsSync.ts @@ -40,8 +40,11 @@ export const SENSITIVE_DEVICE_STORAGE_KEYS_EXACT = [ "plugin.assessments-average.storage.weightings", ] as const; -/** e.g. any future `plugin.global-search.storage.*` keys in chrome.storage */ -export const SENSITIVE_DEVICE_STORAGE_KEY_PREFIXES = ["plugin.global-search.storage."] as const; +/** School-specific caches; never sync across devices. */ +export const SENSITIVE_DEVICE_STORAGE_KEY_PREFIXES = [ + "plugin.global-search.storage.", + "bsplus.analytics.", +] as const; const CLIENT_ONLY_CLOUD_KEYS_EXACT = [ BSPLUS_CLOUD_KNOWN_REMOTE_UPDATED_AT_KEY,