mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 11:44:40 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 30bf345b86 | |||
| 0e98f52058 | |||
| f89508deb2 | |||
| c7b69ad97b | |||
| 2ef8bb215a | |||
| 16273cf012 | |||
| 13d3ccd8e4 | |||
| 7ebc4db9db | |||
| ed9d662ba4 | |||
| 8647e0b272 | |||
| d93abec615 | |||
| 339b409937 | |||
| 860916a5b8 |
@@ -64,7 +64,7 @@ Don't worry- if you get stuck feel free to ask around in the [discord](https://d
|
||||
- **🐛 Found a bug?** Open an [issue](https://github.com/BetterSEQTA/BetterSEQTA-plus/issues) or fix it yourself!
|
||||
- **💬 Need help?** Join our [Discord community](https://discord.gg/YzmbnCDkat)
|
||||
|
||||
We have lots of [`good first issue`](https://github.com/BetterSEQTA/BetterSEQTA-plus/labels/good%20first%20issue) labels perfect for beginners!
|
||||
We have lots of https://github.com/BetterSEQTA/BetterSEQTA-Plus/labels/good%20first%20issue labels perfect for beginners!
|
||||
|
||||
## Quick Development Setup
|
||||
|
||||
@@ -85,6 +85,8 @@ npm run dev
|
||||
2. Enable "Developer mode"
|
||||
3. Click "Load unpacked" → Select `dist` folder
|
||||
4. Visit a SEQTA page to see it work! 🎉
|
||||
> [!WARNING]
|
||||
> Whenever you update the extension while not in dev mode, you will need to use the reload button on the extension page.
|
||||
|
||||
📚 **Need more details?** Check our [detailed setup guide](./docs/GETTING_STARTED_CONTRIBUTING.md#your-first-30-minutes)
|
||||
|
||||
|
||||
@@ -230,6 +230,6 @@ Ready to contribute? Here's what to do next:
|
||||
Still confused about something? That's totally normal! Here are your options:
|
||||
- 💬 Ask in our [Discord server](https://discord.gg/YzmbnCDkat)
|
||||
- 🐛 Open an issue on GitHub
|
||||
- 📧 Email us at betterseqta@betterseqta.com
|
||||
- 📧 Email us at betterseqta.plus@gmail.com
|
||||
|
||||
Remember: **Every expert was once a beginner!** We're here to help you learn and contribute. 🚀
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "betterseqtaplus",
|
||||
"version": "3.4.9",
|
||||
"version": "3.4.10",
|
||||
"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",
|
||||
@@ -36,7 +36,7 @@
|
||||
"@babel/plugin-transform-runtime": "^7.26.9",
|
||||
"@babel/runtime": "^7.26.9",
|
||||
"@bedframe/cli": "^0.0.91",
|
||||
"@crxjs/vite-plugin": "2.0.0-beta.32",
|
||||
"@crxjs/vite-plugin": "2.1.0",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/react": "^19.0.10",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
|
||||
@@ -1991,13 +1991,17 @@ div.liveEntry {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
div.dailycalMarker {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.uiFileHandler .uiButton {
|
||||
border-radius: 32px !important;
|
||||
color: var(--text-primary) !important;
|
||||
margin-top: 4px !important;
|
||||
}
|
||||
|
||||
a.uiFile {
|
||||
a.uiFile:not(.rows) {
|
||||
display: flex !important;
|
||||
height: auto !important;
|
||||
width: 200px !important;
|
||||
@@ -2021,6 +2025,7 @@ a.uiFile {
|
||||
svg {
|
||||
color: white;
|
||||
position: unset !important;
|
||||
display: unset !important;
|
||||
width: auto !important;
|
||||
height: 42px !important;
|
||||
z-index: 1 !important;
|
||||
|
||||
@@ -5,6 +5,8 @@ import {
|
||||
defineSettings,
|
||||
hotkeySetting,
|
||||
} from "../../core/settingsHelpers";
|
||||
import styles from "./src/core/styles.css?inline";
|
||||
|
||||
// Platform-aware default hotkey
|
||||
const getDefaultHotkey = () => {
|
||||
const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
|
||||
@@ -82,6 +84,7 @@ export default defineLazyPlugin({
|
||||
disableToggle: true,
|
||||
defaultEnabled: false,
|
||||
beta: true,
|
||||
styles: styles,
|
||||
|
||||
// Lazy loader - only imports the heavy plugin when actually needed
|
||||
loader: () => import("./src/core/index")
|
||||
|
||||
+2
-2
@@ -16,9 +16,9 @@ export async function main() {
|
||||
if (settingsState.onoff) {
|
||||
injectPageState();
|
||||
|
||||
// TEMP FIX for bug! -> this is a hack to get the injected.css file to have HMR in development mode as this import system is currently broken with crxjs
|
||||
// Rather permanent FIX for bug! -> this is a hack to get the injected.css file to have HMR in development mode as this import system is currently broken with crxjs
|
||||
if (import.meta.env.MODE === "development") {
|
||||
import("../css/injected.scss");
|
||||
import("@/css/injected.scss");
|
||||
} else {
|
||||
const injectedStyle = document.createElement("style");
|
||||
injectedStyle.textContent = injectedCSS;
|
||||
|
||||
@@ -41,7 +41,11 @@ export function renderSettingsIfNeeded() {
|
||||
|
||||
try {
|
||||
const shadow = extensionPopup.attachShadow({ mode: "open" });
|
||||
requestIdleCallback(() => renderSvelte(Settings, shadow));
|
||||
if ('requestIdleCallback' in window) {
|
||||
requestIdleCallback(() => renderSvelte(Settings, shadow));
|
||||
} else {
|
||||
renderSvelte(Settings, shadow);
|
||||
}
|
||||
isSettingsRendered = true;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
|
||||
@@ -66,6 +66,15 @@ export function OpenWhatsNewPopup() {
|
||||
|
||||
let text = stringToHTML(/* html */ `
|
||||
<div class="whatsnewTextContainer" style="height: 50%;overflow-y: scroll;">
|
||||
|
||||
<h1>3.4.10 - Minor bug fixes</h1>
|
||||
<li>Fixed UI file styling incorrectly applying to documents</li>
|
||||
<li>Fixed missing styles in global search</li>
|
||||
<li>Added icons for image files in file viewer</li>
|
||||
<li>Added rounded corners when dragging calendar events</li>
|
||||
<li>Improved performance of element scanning</li>
|
||||
<li>Other minor improvements</li>
|
||||
|
||||
<h1>3.4.9 - Bug Fixes and Performance Improvements</h1>
|
||||
<li>Fixed performance issues with large notices on the homepage</li>
|
||||
<li>Improved performance when global search is disabled</li>
|
||||
|
||||
@@ -57,13 +57,37 @@ class EventManager {
|
||||
return { unregister };
|
||||
}
|
||||
|
||||
private buildSelector(options: EventListenerOptions): string | null {
|
||||
if (options.textContent || options.customCheck) return null;
|
||||
|
||||
let selector = options.elementType || "";
|
||||
if (options.id) {
|
||||
selector += `#${CSS.escape(options.id)}`;
|
||||
}
|
||||
if (options.className) {
|
||||
selector += `.${CSS.escape(options.className)}`;
|
||||
}
|
||||
|
||||
return selector.trim() || null;
|
||||
}
|
||||
|
||||
private async scanExistingElements(
|
||||
options: EventListenerOptions,
|
||||
callback: (element: Element) => void,
|
||||
): Promise<void> {
|
||||
const root = options.parentElement || document.documentElement;
|
||||
const elements = Array.from(root.getElementsByTagName("*"));
|
||||
elements.unshift(root);
|
||||
const selector = this.buildSelector(options);
|
||||
let elements: Element[] = [];
|
||||
|
||||
if (selector) {
|
||||
elements = Array.from(root.querySelectorAll(selector));
|
||||
if (selector && root.matches && root.matches(selector)) {
|
||||
elements.unshift(root);
|
||||
}
|
||||
} else {
|
||||
elements = Array.from(root.getElementsByTagName("*"));
|
||||
elements.unshift(root);
|
||||
}
|
||||
|
||||
for (let i = 0; i < elements.length; i += this.chunkSize) {
|
||||
const chunk = elements.slice(i, i + this.chunkSize);
|
||||
|
||||
Reference in New Issue
Block a user