From 559c86d7333ecd25f6428df5bf9004e5ab5c1f48 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Sat, 5 Oct 2024 16:15:07 -0400
Subject: [PATCH 01/19] improve dark mode colors a bit
---
src/components/Audit.vue | 8 +++++---
src/components/Semester.vue | 23 +++++++++++++++--------
src/pages/MainPage.vue | 6 ++++--
3 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/src/components/Audit.vue b/src/components/Audit.vue
index 12301b52..4ff9fea2 100644
--- a/src/components/Audit.vue
+++ b/src/components/Audit.vue
@@ -40,8 +40,10 @@
class="req-container"
:class="{
'elevation-3': hover,
- 'yellow lighten-3': isPetitioned(item),
- 'grey lighten-2': isIgnored(item),
+ 'yellow lighten-3': isPetitioned(item) && !$vuetify.theme.dark,
+ 'yellow darken-3': isPetitioned(item) && $vuetify.theme.dark,
+ 'grey lighten-2': isIgnored(item) && !$vuetify.theme.dark,
+ 'grey darken-2': isIgnored(item) && $vuetify.theme.dark,
}"
:style="leaf && canDrag(item) ? 'cursor: grab' : 'cursor: pointer'"
:data-cy="'auditItem' + item['list-id']"
@@ -489,7 +491,7 @@ export default defineComponent({
: req.percent_fulfilled > 15
? "#efce15"
: "#ef8214";
- return `--percent: ${pfulfilled}%; --bar-color: ${pcolor}; --bg-color: #fff`;
+ return `--percent: ${pfulfilled}%; --bar-color: ${pcolor}; --bg-color: ${this.$vuetify.theme.dark ? "#1e1e1e" : "#fff"}`;
},
deleteReq: function (req) {
const reqName = req["list-id"];
diff --git a/src/components/Semester.vue b/src/components/Semester.vue
index ae1dc47a..71506759 100644
--- a/src/components/Semester.vue
+++ b/src/components/Semester.vue
@@ -140,7 +140,7 @@
{{ subject.subject_id }}
@@ -378,7 +378,8 @@ export default defineComponent({
bgColor: "red",
message: "Loading subjects... give us a minute",
textColor: "DarkRed",
- bgColorHeader: "red lighten-5",
+ bgColorHeader:
+ "red " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else if (this.itemAdding === undefined) {
return {
@@ -386,42 +387,48 @@ export default defineComponent({
message:
'If you see this message, contact courseroad@mit.edu and tell them "710".',
textColor: "DarkRed",
- bgColorHeader: "red lighten-5",
+ bgColorHeader:
+ "red" + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else if (this.index === 0 || this.offeredNow) {
return {
bgColor: "green",
message: "Add class here",
textColor: "DarkGreen",
- bgColorHeader: "green lighten-5",
+ bgColorHeader:
+ "green " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else if (this.itemAddingNoLongerOffered) {
return {
bgColor: "yellow",
message: "Subject no longer offered",
textColor: "DarkGoldenRod",
- bgColorHeader: "yellow lighten-5",
+ bgColorHeader:
+ "yellow " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else if (this.itemAddingNotCurrentlyOffered) {
return {
bgColor: "yellow",
message: "Subject not offered this year",
textColor: "DarkGoldenRod",
- bgColorHeader: "yellow lighten-5",
+ bgColorHeader:
+ "yellow " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else if (this.isSameYear) {
return {
bgColor: "red",
message: "Subject not available this semester",
textColor: "DarkRed",
- bgColorHeader: "red lighten-5",
+ bgColorHeader:
+ "red " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
} else {
return {
bgColor: "yellow",
message: "Subject may not be available this semester",
textColor: "DarkGoldenRod",
- bgColorHeader: "yellow lighten-5",
+ bgColorHeader:
+ "yellow " + (this.$vuetify.theme.dark ? "darken-5" : "lighten-5"),
};
}
}
diff --git a/src/pages/MainPage.vue b/src/pages/MainPage.vue
index 7e07585d..66aaf107 100644
--- a/src/pages/MainPage.vue
+++ b/src/pages/MainPage.vue
@@ -105,8 +105,10 @@
-
- About
+
+
+ mdi-information-variant
+
From 6c0230c9528a2285b33b4efb267c498462cd3810 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Sat, 5 Oct 2024 16:32:12 -0400
Subject: [PATCH 02/19] make about page into dialog (fixes theme not being set
when refreshing about page)
---
src/app.js | 2 -
src/components/About.vue | 180 ++++++++++++++++++++++++++++++++++++
src/pages/About.vue | 195 ---------------------------------------
src/pages/MainPage.vue | 36 +++++++-
4 files changed, 211 insertions(+), 202 deletions(-)
create mode 100644 src/components/About.vue
delete mode 100644 src/pages/About.vue
diff --git a/src/app.js b/src/app.js
index 3778aaab..4fe74cbb 100644
--- a/src/app.js
+++ b/src/app.js
@@ -1,7 +1,6 @@
import Vue from "vue";
import App from "./App.vue";
import MainPage from "./pages/MainPage.vue";
-import About from "./pages/About.vue";
import vuetify from "./plugins/vuetify";
import VueRouter from "vue-router";
import VueCookies from "vue-cookies";
@@ -17,7 +16,6 @@ Vue.use(BrowserSupportPlugin);
/** @type import("vue-router").RouteConfig[] */
const routes = [
{ path: "/", redirect: "/road" },
- { path: "/about", component: About },
{ path: "/road/:road?", component: MainPage },
{ path: "*", redirect: "/road" },
];
diff --git a/src/components/About.vue b/src/components/About.vue
new file mode 100644
index 00000000..1b3594ef
--- /dev/null
+++ b/src/components/About.vue
@@ -0,0 +1,180 @@
+
+
+
About CourseRoad
+
+ CourseRoad is a student-run academic planner for MIT students. It allows
+ students to plan out their degrees, test out paths for different majors,
+ and view class information. CourseRoad is integrated with FireRoad, so you
+ can download the FireRoad app to plan your degree on the go!
+
+
+ This is always a work in progress! If you have feature requests or want to
+ contribute, the source code is open source and located on
+ Github.
+
+
+ We would like to thank the Office of the First Year and the Student
+ Information Processing Board for all their support with this project.
+
+
Known Issues
+
+
+ -
+
Class year
+
+ Yeah, changing your class year is really unintuitive right now,
+ sorry about that. The way to do it now is to click on a year number
+ (e.g. "2021").
+
+
+ -
+
Slow page load
+
+ We haven't done much optimization for loading time yet, but we
+ recognize that it's annoying an are working on it.
+
+
+ -
+
Slow drag and drop
+
+ There's a noticable delay between dragging and dropping a subject
+ and the page updating and letting you do things again.
+
+
+ -
+
Scrolling while dragging
+
+ The semester view does not scroll adaptively when you are dragging
+ classes into it.
+
+
+ -
+
Open search on click
+
+ The search bar sometimes fails to open when clicked on. This seems
+ to be computer/browser-dependent, and we are investigating. It
+ should open when you start typing to search for a class.
+
+
+ -
+
Degree audit
+
+ It's never going to be perfect, because the audit is presented in
+ English, which allows unlimited flexibility and annoying edge cases.
+ However, we should be able to handle most normal use cases so be
+ sure to submit mistakes through the
+
+ requirements editor . We're also working on handling petitions and overrides for the
+ audit, which we know is important for a lot of people.
+
+
+ -
+
Responsiveness on mobile devices
+
+ CourseRoad is intended for non-mobile screen sizes. If you want to
+ use a similar tool on your phone, check out the FireRoad app (see
+ below).
+
+
+ -
+
And probably others...
+
+ See the full, most up to date list of issues on
+ GitHub.
+
+
+
+
+
Old CourseRoad
+
+ The old CourseRoad has been moved to
+ courseroad.mit.edu/old. You can export your roads from the old CourseRoad and import them here
+ to transfer your data.
+
+
FireRoad
+
+ We would like to thank FireRoad for collaborating with us on this project
+ and allowing us to integrate the two services. FireRoad is available on
+ for Android and iOS. To read more about FireRoad or request an update to
+ course requirements, visit the
+ FireRoad website.
+
+
Github Repositories
+
+
+
+ Download the app for
+ iOS
+ or
+ Android.
+
+
+
Maintainers
+
+
+ - Nate Foss (npfoss)
+ - Alice Nguyen (mwnguyen)
+ - Miriam Rittenberg (mrittenb)
+ - Timmy Xiao (mitimmy)
+ - Maximo Machado (maximo)
+ - Georgia Shay (gshay)
+ - Amani Toussaint (amanit)
+
+
+
Past
+
+
+ - Sophie Mori (ksmori)
+ - Danny Ben-David (dannybd)
+
+
+
+ If you have questions or comments, please
+ email us.
+
+
+
+
+
diff --git a/src/pages/About.vue b/src/pages/About.vue
deleted file mode 100644
index 8d8e0b89..00000000
--- a/src/pages/About.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
- mdi-arrow-left
-
-
-
-
About CourseRoad
-
- CourseRoad is a student-run academic planner for MIT students. It allows
- students to plan out their degrees, test out paths for different majors,
- and view class information. CourseRoad is integrated with FireRoad, so
- you can download the FireRoad app to plan your degree on the go!
-
-
- This is always a work in progress! If you have feature requests or want
- to contribute, the source code is open source and located on
- Github.
-
-
- We would like to thank the Office of the First Year and the Student
- Information Processing Board for all their support with this project.
-
-
Known Issues
-
-
- -
-
Class year
-
- Yeah, changing your class year is really unintuitive right now,
- sorry about that. The way to do it now is to click on a year
- number (e.g. "2021").
-
-
- -
-
Slow page load
-
- We haven't done much optimization for loading time yet, but we
- recognize that it's annoying an are working on it.
-
-
- -
-
Slow drag and drop
-
- There's a noticable delay between dragging and dropping a subject
- and the page updating and letting you do things again.
-
-
- -
-
Scrolling while dragging
-
- The semester view does not scroll adaptively when you are dragging
- classes into it.
-
-
- -
-
Open search on click
-
- The search bar sometimes fails to open when clicked on. This seems
- to be computer/browser-dependent, and we are investigating. It
- should open when you start typing to search for a class.
-
-
- -
-
Degree audit
-
- It's never going to be perfect, because the audit is presented in
- English, which allows unlimited flexibility and annoying edge
- cases. However, we should be able to handle most normal use cases
- so be sure to submit mistakes through the
-
- requirements editor . We're also working on handling petitions and overrides for the
- audit, which we know is important for a lot of people.
-
-
- -
-
Responsiveness on mobile devices
-
- CourseRoad is intended for non-mobile screen sizes. If you want to
- use a similar tool on your phone, check out the FireRoad app (see
- below).
-
-
- -
-
And probably others...
-
- See the full, most up to date list of issues on
- GitHub.
-
-
-
-
-
Old CourseRoad
-
- The old CourseRoad has been moved to
- courseroad.mit.edu/old. You can export your roads from the old CourseRoad and import them
- here to transfer your data.
-
-
FireRoad
-
- We would like to thank FireRoad for collaborating with us on this
- project and allowing us to integrate the two services. FireRoad is
- available on for Android and iOS. To read more about FireRoad or request
- an update to course requirements, visit the
- FireRoad website.
-
-
Github Repositories
-
-
-
- Download the app for
- iOS
- or
- Android.
-
-
-
Maintainers
-
-
- - Nate Foss (npfoss)
- - Alice Nguyen (mwnguyen)
- - Miriam Rittenberg (mrittenb)
- - Timmy Xiao (mitimmy)
- - Maximo Machado (maximo)
- - Georgia Shay (gshay)
- - Amani Toussaint (amanit)
-
-
-
Past
-
-
- - Sophie Mori (ksmori)
- - Danny Ben-David (dannybd)
-
-
-
- If you have questions or comments, please
- email us.
-
-
-
-
-
-
diff --git a/src/pages/MainPage.vue b/src/pages/MainPage.vue
index 66aaf107..0cdfc1cf 100644
--- a/src/pages/MainPage.vue
+++ b/src/pages/MainPage.vue
@@ -105,11 +105,34 @@
-
-
- mdi-information-variant
-
-
+
+
+
+ mdi-information-variant
+
+
+
+
+
+ mdi-arrow-left
+
+
+
+
+
Date: Sun, 6 Oct 2024 00:04:30 -0400
Subject: [PATCH 03/19] fix auth, add gitattributes...
---
.gitattributes | 217 ++++++++++++++++++++++++++++++++++++++++
src/components/Auth.vue | 8 +-
2 files changed, 221 insertions(+), 4 deletions(-)
create mode 100644 .gitattributes
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..996deab3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,217 @@
+## GITATTRIBUTES FOR WEB PROJECTS
+#
+# These settings are for any web project.
+#
+# Details per file setting:
+# text These files should be normalized (i.e. convert CRLF to LF).
+# binary These files are binary and should be left untouched.
+#
+# Note that binary is a macro for -text -diff.
+######################################################################
+
+# Auto detect
+## Handle line endings automatically for files detected as
+## text and leave all files detected as binary untouched.
+## This will handle all files NOT defined below.
+* text=auto
+
+# Source code
+*.bash text eol=lf
+*.bat text eol=crlf
+*.cmd text eol=crlf
+*.coffee text
+*.css text diff=css
+*.htm text diff=html
+*.html text diff=html
+*.inc text
+*.ini text
+*.js text
+*.mjs text
+*.cjs text
+*.json text
+*.jsx text
+*.less text
+*.ls text
+*.map text -diff
+*.od text
+*.onlydata text
+*.php text diff=php
+*.pl text
+*.ps1 text eol=crlf
+*.py text diff=python
+*.rb text diff=ruby
+*.sass text
+*.scm text
+*.scss text diff=css
+*.sh text eol=lf
+.husky/* text eol=lf
+*.sql text
+*.styl text
+*.tag text
+*.ts text
+*.tsx text
+*.xml text
+*.xhtml text diff=html
+
+# Docker
+Dockerfile text
+
+# Documentation
+*.ipynb text eol=lf
+*.markdown text diff=markdown
+*.md text diff=markdown
+*.mdwn text diff=markdown
+*.mdown text diff=markdown
+*.mkd text diff=markdown
+*.mkdn text diff=markdown
+*.mdtxt text
+*.mdtext text
+*.txt text
+AUTHORS text
+CHANGELOG text
+CHANGES text
+CONTRIBUTING text
+COPYING text
+copyright text
+*COPYRIGHT* text
+INSTALL text
+license text
+LICENSE text
+NEWS text
+readme text
+*README* text
+TODO text
+
+# Templates
+*.dot text
+*.ejs text
+*.erb text
+*.haml text
+*.handlebars text
+*.hbs text
+*.hbt text
+*.jade text
+*.latte text
+*.mustache text
+*.njk text
+*.phtml text
+*.svelte text
+*.tmpl text
+*.tpl text
+*.twig text
+*.vue text
+
+# Configs
+*.cnf text
+*.conf text
+*.config text
+.editorconfig text
+.env text
+.gitattributes text
+.gitconfig text
+.htaccess text
+*.lock text -diff
+package.json text eol=lf
+package-lock.json text eol=lf -diff
+pnpm-lock.yaml text eol=lf -diff
+.prettierrc text
+yarn.lock text -diff
+*.toml text
+*.yaml text
+*.yml text
+browserslist text
+Makefile text
+makefile text
+# Fixes syntax highlighting on GitHub to allow comments
+tsconfig.json linguist-language=JSON-with-Comments
+
+# Heroku
+Procfile text
+
+# Graphics
+*.ai binary
+*.bmp binary
+*.eps binary
+*.gif binary
+*.gifv binary
+*.ico binary
+*.jng binary
+*.jp2 binary
+*.jpg binary
+*.jpeg binary
+*.jpx binary
+*.jxr binary
+*.pdf binary
+*.png binary
+*.psb binary
+*.psd binary
+# SVG treated as an asset (binary) by default.
+*.svg text
+# If you want to treat it as binary,
+# use the following line instead.
+# *.svg binary
+*.svgz binary
+*.tif binary
+*.tiff binary
+*.wbmp binary
+*.webp binary
+
+# Audio
+*.kar binary
+*.m4a binary
+*.mid binary
+*.midi binary
+*.mp3 binary
+*.ogg binary
+*.ra binary
+
+# Video
+*.3gpp binary
+*.3gp binary
+*.as binary
+*.asf binary
+*.asx binary
+*.avi binary
+*.fla binary
+*.flv binary
+*.m4v binary
+*.mng binary
+*.mov binary
+*.mp4 binary
+*.mpeg binary
+*.mpg binary
+*.ogv binary
+*.swc binary
+*.swf binary
+*.webm binary
+
+# Archives
+*.7z binary
+*.gz binary
+*.jar binary
+*.rar binary
+*.tar binary
+*.zip binary
+
+# Fonts
+*.ttf binary
+*.eot binary
+*.otf binary
+*.woff binary
+*.woff2 binary
+
+# Executables
+*.exe binary
+*.pyc binary
+# Prevents massive diffs caused by vendored, minified files
+**/.yarn/releases/** binary
+**/.yarn/plugins/** binary
+
+# RC files (like .babelrc or .eslintrc)
+*.*rc text
+
+# Ignore files (like .npmignore or .gitignore)
+*.*ignore text
+
+# Prevents massive diffs from built files
+dist/* binary
diff --git a/src/components/Auth.vue b/src/components/Auth.vue
index bd567fae..c1a299d1 100644
--- a/src/components/Auth.vue
+++ b/src/components/Auth.vue
@@ -143,11 +143,11 @@ export default defineComponent({
loggedIn(newLoggedIn) {
this.$store.commit("setLoggedIn", newLoggedIn);
if (newLoggedIn && this.$cookies.get("has_set_year") !== "true") {
- // const email = this.accessInfo.academic_id;
- // const endPoint = email.indexOf("@");
- // const kerb = email.slice(0, endPoint);
+ const email = this.accessInfo.academic_id;
+ const endPoint = email.indexOf("@");
+ const kerb = email.slice(0, endPoint);
axios
- .get(`${import.meta.env.VITE_FIREROAD_URL}/user_info/`)
+ .get(`${import.meta.env.VITE_URL}/cgi-bin/people.py?kerb=${kerb}`)
.then((response) => {
if (response.status !== 200) {
console.log("Failed to find user year");
From f2847165c0e7ffc31d7393001af559e6be0f715b Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Tue, 12 Nov 2024 19:52:50 -0500
Subject: [PATCH 04/19] restore old colors (for now...)
---
src/mixins/colorMixin.js | 118 ++++++++++++++++++++-------------------
1 file changed, 60 insertions(+), 58 deletions(-)
diff --git a/src/mixins/colorMixin.js b/src/mixins/colorMixin.js
index ecd45162..1fb36024 100644
--- a/src/mixins/colorMixin.js
+++ b/src/mixins/colorMixin.js
@@ -66,48 +66,48 @@ export default {
],
colors: {
"course-none": "#999999",
- "course-1": "#d10d23",
- "course-2": "#f16024",
- "course-3": "#305aba",
- "course-4": "#bde788",
- "course-5": "#8abd6d",
- "course-6": "#499eda",
- "course-7": "#4365a2",
- "course-8": "#7a36bf",
- "course-9": "#4bb399",
- "course-10": "#c96b52",
- "course-11": "#81235b",
- "course-12": "#4bcb4a",
- "course-14": "#f5a623",
- "course-15": "#a40052",
- "course-16": "#64d4e3",
- "course-17": "#c80db9",
- "course-18": "#1f3573",
- "course-20": "#64a518",
- "course-21": "#a18cd3",
- "course-21A": "#9162d0",
- "course-21G": "#764e8d",
- "course-21H": "#b560c3",
- "course-21L": "#d574d7",
- "course-21M": "#f1a7e5",
- "course-21T": "#ad4096",
- "course-21W": "#d16ca4",
- "course-22": "#734954",
- "course-24": "#3f1c57",
- "course-CC": "#398486",
- "course-CMS": "#8aafb1",
- "course-CSB": "#f5889c",
- "course-EC": "#8b1d17",
- "course-EM": "#e1d059",
- "course-ES": "#b0b02e",
- "course-HST": "#90cdd0",
- "course-IDS": "#9eabd0",
- "course-MAS": "#64696d",
- "course-SCM": "#152348",
- "course-STS": "#155410",
- "course-WGS": "#44cf9d",
- "course-SP": "#deb821",
- "course-SWE": "#b82165",
+ "course-1": "#de4343",
+ "course-2": "#de7643",
+ "course-3": "#4369de",
+ "course-4": "#57b563",
+ "course-5": "#43deaf",
+ "course-6": "#4390de",
+ "course-7": "#5779b5",
+ "course-8": "#8157b5",
+ "course-9": "#8143de",
+ "course-10": "#b55757",
+ "course-11": "#b55773",
+ "course-12": "#43de4f",
+ "course-14": "#de9043",
+ "course-15": "#b55c57",
+ "course-16": "#43b2de",
+ "course-17": "#de43b7",
+ "course-18": "#575db5",
+ "course-20": "#57b56e",
+ "course-21": "#57b573",
+ "course-21A": "#57b573",
+ "course-21G": "#57b599",
+ "course-21H": "#57b5a5",
+ "course-21L": "#57b5b2",
+ "course-21M": "#57acb5",
+ "course-21T": "#5e9da6",
+ "course-21W": "#57b580",
+ "course-22": "#b55757",
+ "course-24": "#7657b5",
+ "course-CC": "#4fde43",
+ "course-CMS": "#57b58c",
+ "course-CSB": "#579ab5",
+ "course-EC": "#76b557",
+ "course-EM": "#576eb5",
+ "course-ES": "#5a57b5",
+ "course-HST": "#5779b5",
+ "course-IDS": "#57b586",
+ "course-MAS": "#57b55a",
+ "course-SCM": "#57b573",
+ "course-STS": "#8f57b5",
+ "course-WGS": "#579fb5",
+ "course-SP": "#4343de",
+ "course-SWE": "#b56b57",
"course-AS": "#b0b0b0",
"course-MS": "#b0b0b0",
"course-NS": "#b0b0b0",
@@ -167,27 +167,29 @@ export default {
getRawColor: function (courseColor) {
return this.colors[courseColor];
},
- getRawTextColor: function (courseColor) {
- // See https://github.com/Myndex/max-contrast
- // https://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
+ getRawTextColor: function () {
+ return "#ffffff";
+ // getRawTextColor: function (courseColor) {
+ // // See https://github.com/Myndex/max-contrast
+ // // https://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
- const Rs = parseInt(this.colors[courseColor].substring(1, 3), 16);
- const Gs = parseInt(this.colors[courseColor].substring(3, 5), 16);
- const Bs = parseInt(this.colors[courseColor].substring(5, 7), 16);
+ // const Rs = parseInt(this.colors[courseColor].substring(1, 3), 16);
+ // const Gs = parseInt(this.colors[courseColor].substring(3, 5), 16);
+ // const Bs = parseInt(this.colors[courseColor].substring(5, 7), 16);
- const flipYs = 0.342; // based on APCA™ 0.98G middle contrast BG
+ // const flipYs = 0.342; // based on APCA™ 0.98G middle contrast BG
- const trc = 2.4,
- Rco = 0.2126729,
- Gco = 0.7151522,
- Bco = 0.072175;
+ // const trc = 2.4,
+ // Rco = 0.2126729,
+ // Gco = 0.7151522,
+ // Bco = 0.072175;
- let Ys =
- (Rs / 255.0) ** trc * Rco +
- (Gs / 255.0) ** trc * Gco +
- (Bs / 255.0) ** trc * Bco;
+ // let Ys =
+ // (Rs / 255.0) ** trc * Rco +
+ // (Gs / 255.0) ** trc * Gco +
+ // (Bs / 255.0) ** trc * Bco;
- return Ys < flipYs ? "#ffffffee" : "#000000dd";
+ // return Ys < flipYs ? colors.shades.white : colors.shades.black;
},
// courseColor takes in subject
courseColor: function (subject) {
From 73de227e0cfb94a102bbdfa15a3441cd17b71ee8 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Tue, 12 Nov 2024 23:39:47 -0500
Subject: [PATCH 05/19] update eslint and config
---
.eslintrc.cjs | 16 --
eslint.config.mjs | 33 +++
package-lock.json | 591 ++++++++++++++++++++++++----------------------
package.json | 7 +-
vite.config.ts | 12 +-
5 files changed, 353 insertions(+), 306 deletions(-)
delete mode 100644 .eslintrc.cjs
create mode 100644 eslint.config.mjs
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index 6503a113..00000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
- env: {
- node: true,
- es2022: true
- },
- extends: [
- 'eslint:recommended',
- 'plugin:vue/recommended',
- 'plugin:vuetify/base',
- "prettier"
- ],
- rules: {
- // override/add rules settings here, such as:
- // 'vue/no-unused-vars': 'error'
- }
-}
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..2fe2f15a
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,33 @@
+import globals from "globals";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import js from "@eslint/js";
+import { FlatCompat } from "@eslint/eslintrc";
+
+import pluginVue from "eslint-plugin-vue";
+import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+ recommendedConfig: js.configs.recommended,
+ allConfig: js.configs.all,
+});
+
+export default [
+ // js.configs.recommended,
+ ...pluginVue.configs["flat/recommended"],
+ ...pluginVue.configs["flat/vue2-recommended"],
+ ...compat.extends("plugin:vuetify/base"),
+ eslintPluginPrettierRecommended,
+ {
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ },
+ },
+
+ rules: {},
+ },
+];
diff --git a/package-lock.json b/package-lock.json
index f147ab76..c9584433 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,15 +26,18 @@
"vuex": "^3.6.0"
},
"devDependencies": {
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "^9.14.0",
"@mdi/font": "^7.4.47",
"@vue/test-utils": "^1.2.2",
"cypress-file-upload": "^5.0.8",
"deepmerge": "^4.3.1",
- "eslint": "^8.57.0",
+ "eslint": "^9.14.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
- "eslint-plugin-vue": "^9.26.0",
+ "eslint-plugin-vue": "^9.31.0",
"eslint-plugin-vuetify": "^1.1.0",
+ "globals": "^15.12.0",
"prettier": "3.2.5",
"sass": "~1.32",
"vue": "^2.7.0"
@@ -504,24 +507,51 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
+ "node_modules/@eslint/config-array": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+ "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.4",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+ "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -529,7 +559,7 @@
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -541,16 +571,45 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "type-fest": "^0.20.2"
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -568,25 +627,37 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@eslint/eslintrc/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "node_modules/@eslint/js": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
+ "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
+ "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@fontsource/roboto": {
@@ -594,18 +665,42 @@
"resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.0.13.tgz",
"integrity": "sha512-j61DHjsdUCKMXSdNLTOxcG701FWnF0jcqNNQi2iPCDxU8seN/sMxeh62dC++UiagCWq9ghTypX+Pcy7kX+QOeQ=="
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
},
"engines": {
- "node": ">=10.10.0"
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/module-importer": {
@@ -621,11 +716,19 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "dev": true
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
+ "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
@@ -786,41 +889,6 @@
"integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==",
"dev": true
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@one-ini/wasm": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
@@ -1113,12 +1181,6 @@
"@types/node": "*"
}
},
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
"node_modules/@vitejs/plugin-vue2": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz",
@@ -1415,9 +1477,10 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -2527,18 +2590,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/dom-event-types": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.1.0.tgz",
@@ -2770,58 +2821,64 @@
}
},
"node_modules/eslint": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
- "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz",
+ "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.0",
- "@humanwhocodes/config-array": "^0.11.14",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.18.0",
+ "@eslint/core": "^0.7.0",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.14.0",
+ "@eslint/plugin-kit": "^0.2.0",
+ "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
+ "@humanwhocodes/retry": "^0.4.0",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
- "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
+ "file-entry-cache": "^8.0.0",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
"text-table": "^0.2.0"
},
"bin": {
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
}
},
"node_modules/eslint-config-prettier": {
@@ -2867,18 +2924,19 @@
}
},
"node_modules/eslint-plugin-vue": {
- "version": "9.26.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz",
- "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==",
+ "version": "9.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.31.0.tgz",
+ "integrity": "sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"globals": "^13.24.0",
"natural-compare": "^1.4.0",
"nth-check": "^2.1.1",
"postcss-selector-parser": "^6.0.15",
- "semver": "^7.6.0",
- "vue-eslint-parser": "^9.4.2",
+ "semver": "^7.6.3",
+ "vue-eslint-parser": "^9.4.3",
"xml-name-validator": "^4.0.0"
},
"engines": {
@@ -2904,10 +2962,11 @@
}
},
"node_modules/eslint-plugin-vue/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -2932,6 +2991,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-vuetify/-/eslint-plugin-vuetify-1.1.0.tgz",
"integrity": "sha512-I1YRUCGkDqe8F7O0tdf63UZVKtk4734+8fzbZ24YIZKTTyQp/FIR0nSZYG8mPFhTWerzPta7oXNzliBOwP2XeQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-plugin-vue": "^7.0.0",
"requireindex": "^1.2.0"
@@ -2946,6 +3006,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -2958,6 +3019,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
"integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-utils": "^2.1.0",
"natural-compare": "^1.4.0",
@@ -2976,6 +3038,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -2989,6 +3052,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=4"
}
@@ -2998,6 +3062,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
"integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"acorn": "^7.1.1",
"acorn-jsx": "^5.2.0",
@@ -3012,6 +3077,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
@@ -3021,6 +3087,7 @@
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
"integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^4.1.1",
"eslint-scope": "^5.1.1",
@@ -3045,6 +3112,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -3061,6 +3129,7 @@
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^1.1.0"
},
@@ -3076,6 +3145,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=4"
}
@@ -3092,6 +3162,13 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/eslint/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3107,12 +3184,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/eslint/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3159,32 +3230,65 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+ "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=10"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "type-fest": "^0.20.2"
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3199,18 +3303,6 @@
"node": ">=8"
}
},
- "node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/eslint/node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -3268,23 +3360,12 @@
"node": ">=8"
}
},
- "node_modules/eslint/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
@@ -3338,6 +3419,7 @@
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -3457,15 +3539,6 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
"node_modules/fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -3493,15 +3566,16 @@
}
},
"node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flat-cache": "^3.0.4"
+ "flat-cache": "^4.0.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=16.0.0"
}
},
"node_modules/file-loader": {
@@ -3573,24 +3647,25 @@
}
},
"node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
+ "keyv": "^4.5.4"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=16"
}
},
"node_modules/flatted": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
"integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/follow-redirects": {
"version": "1.15.6",
@@ -3684,7 +3759,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "devOptional": true
+ "optional": true,
+ "peer": true
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -3753,7 +3829,8 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "devOptional": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -3803,6 +3880,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globals": {
+ "version": "15.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz",
+ "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -3822,12 +3912,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"peer": true
},
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -4006,7 +4090,8 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "devOptional": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -4016,7 +4101,8 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "devOptional": true
+ "optional": true,
+ "peer": true
},
"node_modules/ini": {
"version": "2.0.0",
@@ -4130,6 +4216,7 @@
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -4338,7 +4425,8 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
@@ -4416,6 +4504,7 @@
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
@@ -4868,6 +4957,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"devOptional": true,
+ "peer": true,
"dependencies": {
"wrappy": "1"
}
@@ -4953,7 +5043,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "devOptional": true,
+ "optional": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -5219,26 +5310,6 @@
"dev": true,
"peer": true
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -5275,6 +5346,7 @@
"resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
"integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.5"
}
@@ -5300,16 +5372,6 @@
"node": ">=8"
}
},
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
"node_modules/rfdc": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
@@ -5317,21 +5379,6 @@
"dev": true,
"peer": true
},
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/rollup": {
"version": "4.22.4",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
@@ -5367,29 +5414,6 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -6313,10 +6337,11 @@
"integrity": "sha512-9zjvACKE4W0kEb8OQtXzpizKhf6zfFOG/Z1TEUjSJn4Z4rintuAHo8y/FpCUhTWHMmPe8E+Fko+/tiXVM+5jOw=="
},
"node_modules/vue-eslint-parser": {
- "version": "9.4.2",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
- "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+ "version": "9.4.3",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+ "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"eslint-scope": "^7.1.1",
@@ -6337,10 +6362,11 @@
}
},
"node_modules/vue-eslint-parser/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -6682,7 +6708,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "devOptional": true
+ "devOptional": true,
+ "peer": true
},
"node_modules/xml-name-validator": {
"version": "4.0.0",
diff --git a/package.json b/package.json
index f82d0bc1..b9bdef86 100644
--- a/package.json
+++ b/package.json
@@ -36,15 +36,18 @@
"vuex": "^3.6.0"
},
"devDependencies": {
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "^9.14.0",
"@mdi/font": "^7.4.47",
"@vue/test-utils": "^1.2.2",
"cypress-file-upload": "^5.0.8",
"deepmerge": "^4.3.1",
- "eslint": "^8.57.0",
+ "eslint": "^9.14.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
- "eslint-plugin-vue": "^9.26.0",
+ "eslint-plugin-vue": "^9.31.0",
"eslint-plugin-vuetify": "^1.1.0",
+ "globals": "^15.12.0",
"prettier": "3.2.5",
"sass": "~1.32",
"vue": "^2.7.0"
diff --git a/vite.config.ts b/vite.config.ts
index f2db5b58..cc168716 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,6 +1,6 @@
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue2";
-import path from "path";
+// import path from "path";
// https://vitejs.dev/config/
export default defineConfig({
@@ -9,11 +9,11 @@ export default defineConfig({
},
plugins: [
vue({
- resolve: {
- alias: {
- "@": path.resolve(__dirname, "./src"),
- },
- },
+ // resolve: {
+ // alias: {
+ // "@": path.resolve(__dirname, "./src"),
+ // },
+ // },
}),
],
});
From 5789fcbd3cf573688dd40f730702168a5eba7477 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Wed, 13 Nov 2024 00:17:47 -0500
Subject: [PATCH 06/19] turn this.$ functions and mixins into hooks/exports
---
src/mixins/classInfo.js | 55 ++--
src/mixins/colorMixin.js | 458 +++++++++++++++++----------------
src/mixins/courseLinks.js | 138 +++++-----
src/mixins/reqFulfillment.js | 365 +++++++++++++-------------
src/mixins/sanitizeSubjects.js | 24 +-
src/mixins/schedule.js | 34 +--
src/plugins/browserSupport.js | 8 +-
src/plugins/composition.js | 16 ++
8 files changed, 567 insertions(+), 531 deletions(-)
create mode 100644 src/plugins/composition.js
diff --git a/src/mixins/classInfo.js b/src/mixins/classInfo.js
index c5e50635..19eff991 100644
--- a/src/mixins/classInfo.js
+++ b/src/mixins/classInfo.js
@@ -1,30 +1,33 @@
+import { useStore } from "../plugins/composition";
+
+export const classInfo = (req) => {
+ const store = useStore();
+ if ("req" in req) {
+ if (req.req in store.state.subjectsIndex) {
+ return store.state.subjectsInfo[store.state.subjectsIndex[req.req]];
+ }
+ let attributeReq = req.req;
+ if (attributeReq.indexOf("GIR:") === 0) {
+ attributeReq = attributeReq.substring(4);
+ }
+ if (attributeReq in store.state.genericIndex) {
+ return store.state.genericCourses[store.state.genericIndex[attributeReq]];
+ }
+ }
+ return undefined;
+};
+
+export const canDrag = (req) => {
+ const store = useStore();
+ return (
+ classInfo(req) !== undefined ||
+ ("req" in req && Object.keys(store.state.subjectsIndex).length === 0)
+ );
+};
+
export default {
methods: {
- classInfo: function (req) {
- if ("req" in req) {
- if (req.req in this.$store.state.subjectsIndex) {
- return this.$store.state.subjectsInfo[
- this.$store.state.subjectsIndex[req.req]
- ];
- }
- let attributeReq = req.req;
- if (attributeReq.indexOf("GIR:") === 0) {
- attributeReq = attributeReq.substring(4);
- }
- if (attributeReq in this.$store.state.genericIndex) {
- return this.$store.state.genericCourses[
- this.$store.state.genericIndex[attributeReq]
- ];
- }
- }
- return undefined;
- },
- canDrag: function (req) {
- return (
- this.classInfo(req) !== undefined ||
- ("req" in req &&
- Object.keys(this.$store.state.subjectsIndex).length === 0)
- );
- },
+ classInfo: classInfo,
+ canDrag: canDrag,
},
};
diff --git a/src/mixins/colorMixin.js b/src/mixins/colorMixin.js
index 1fb36024..99e17f6b 100644
--- a/src/mixins/colorMixin.js
+++ b/src/mixins/colorMixin.js
@@ -1,232 +1,244 @@
-export default {
- data: function () {
- return {
- validCourses: [
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "10",
- "11",
- "12",
- "14",
- "15",
- "16",
- "17",
- "18",
- "20",
- "21",
- "21A",
- "21G",
- "21H",
- "21L",
- "21M",
- "21T",
- "21W",
- "22",
- "24",
- "CC",
- "CMS",
- "CSB",
- "EC",
- "EM",
- "ES",
- "HST",
- "IDS",
- "MAS",
- "SCM",
- "STS",
- "WGS",
- "SP",
- "SWE",
- "AS",
- "MS",
- "NS",
- ],
- validGeneric: [
- "PHY1",
- "PHY2",
- "CHEM",
- "BIOL",
- "CAL1",
- "CAL2",
- "LAB",
- "REST",
- "HASS-A",
- "HASS-H",
- "HASS-S",
- "HASS-E",
- "CI-H",
- "CI-HW",
- ],
- colors: {
- "course-none": "#999999",
- "course-1": "#de4343",
- "course-2": "#de7643",
- "course-3": "#4369de",
- "course-4": "#57b563",
- "course-5": "#43deaf",
- "course-6": "#4390de",
- "course-7": "#5779b5",
- "course-8": "#8157b5",
- "course-9": "#8143de",
- "course-10": "#b55757",
- "course-11": "#b55773",
- "course-12": "#43de4f",
- "course-14": "#de9043",
- "course-15": "#b55c57",
- "course-16": "#43b2de",
- "course-17": "#de43b7",
- "course-18": "#575db5",
- "course-20": "#57b56e",
- "course-21": "#57b573",
- "course-21A": "#57b573",
- "course-21G": "#57b599",
- "course-21H": "#57b5a5",
- "course-21L": "#57b5b2",
- "course-21M": "#57acb5",
- "course-21T": "#5e9da6",
- "course-21W": "#57b580",
- "course-22": "#b55757",
- "course-24": "#7657b5",
- "course-CC": "#4fde43",
- "course-CMS": "#57b58c",
- "course-CSB": "#579ab5",
- "course-EC": "#76b557",
- "course-EM": "#576eb5",
- "course-ES": "#5a57b5",
- "course-HST": "#5779b5",
- "course-IDS": "#57b586",
- "course-MAS": "#57b55a",
- "course-SCM": "#57b573",
- "course-STS": "#8f57b5",
- "course-WGS": "#579fb5",
- "course-SP": "#4343de",
- "course-SWE": "#b56b57",
- "course-AS": "#b0b0b0",
- "course-MS": "#b0b0b0",
- "course-NS": "#b0b0b0",
- "generic-GIR": "#bf6139",
- "generic-HASS-E": "#39bf97",
- "generic-HASS-A": "#3997bf",
- "generic-HASS-H": "#3946bf",
- "generic-HASS-S": "#7c39bf",
- "generic-CI-H": "#bf39b1",
- "generic-CI-HW": "#bf3961",
- "custom_color-0": "#b55757",
- "custom_color-1": "#b58657",
- "custom_color-2": "#b5b557",
- "custom_color-3": "#86b557",
- "custom_color-4": "#57b557",
- "custom_color-5": "#57b586",
- "custom_color-6": "#de4343",
- "custom_color-7": "#de9043",
- "custom_color-8": "#dede43",
- "custom_color-9": "#90de43",
- "custom_color-10": "#43de43",
- "custom_color-11": "#43de90",
- "custom_color-12": "#b51616",
- "custom_color-13": "#b56516",
- "custom_color-14": "#b5b516",
- "custom_color-15": "#65b516",
- "custom_color-16": "#16b516",
- "custom_color-17": "#16b565",
- "custom_color-18": "#57b5b5",
- "custom_color-19": "#5786b5",
- "custom_color-20": "#5757b5",
- "custom_color-21": "#8657b5",
- "custom_color-22": "#b557b5",
- "custom_color-23": "#b55786",
- "custom_color-24": "#43dede",
- "custom_color-25": "#4390de",
- "custom_color-26": "#4343de",
- "custom_color-27": "#9043de",
- "custom_color-28": "#de43de",
- "custom_color-29": "#de4390",
- "custom_color-30": "#16b5b5",
- "custom_color-31": "#1665b5",
- "custom_color-32": "#1616b5",
- "custom_color-33": "#6516b5",
- "custom_color-34": "#b516b5",
- "custom_color-35": "#b51665",
- "custom_color-36": "#000000",
- "custom_color-37": "#262626",
- "custom_color-38": "#4d4d4d",
- "custom_color-39": "#737373",
- "custom_color-40": "#999999",
- "custom_color-41": "#bfbfbf",
- },
- };
- },
- methods: {
- getRawColor: function (courseColor) {
- return this.colors[courseColor];
- },
- getRawTextColor: function () {
- return "#ffffff";
- // getRawTextColor: function (courseColor) {
- // // See https://github.com/Myndex/max-contrast
- // // https://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
+export const validCourses = [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10",
+ "11",
+ "12",
+ "14",
+ "15",
+ "16",
+ "17",
+ "18",
+ "20",
+ "21",
+ "21A",
+ "21G",
+ "21H",
+ "21L",
+ "21M",
+ "21T",
+ "21W",
+ "22",
+ "24",
+ "CC",
+ "CMS",
+ "CSB",
+ "EC",
+ "EM",
+ "ES",
+ "HST",
+ "IDS",
+ "MAS",
+ "SCM",
+ "STS",
+ "WGS",
+ "SP",
+ "SWE",
+ "AS",
+ "MS",
+ "NS",
+];
+export const validGeneric = [
+ "PHY1",
+ "PHY2",
+ "CHEM",
+ "BIOL",
+ "CAL1",
+ "CAL2",
+ "LAB",
+ "REST",
+ "HASS-A",
+ "HASS-H",
+ "HASS-S",
+ "HASS-E",
+ "CI-H",
+ "CI-HW",
+];
+export const colors = {
+ "course-none": "#999999",
+ "course-1": "#de4343",
+ "course-2": "#de7643",
+ "course-3": "#4369de",
+ "course-4": "#57b563",
+ "course-5": "#43deaf",
+ "course-6": "#4390de",
+ "course-7": "#5779b5",
+ "course-8": "#8157b5",
+ "course-9": "#8143de",
+ "course-10": "#b55757",
+ "course-11": "#b55773",
+ "course-12": "#43de4f",
+ "course-14": "#de9043",
+ "course-15": "#b55c57",
+ "course-16": "#43b2de",
+ "course-17": "#de43b7",
+ "course-18": "#575db5",
+ "course-20": "#57b56e",
+ "course-21": "#57b573",
+ "course-21A": "#57b573",
+ "course-21G": "#57b599",
+ "course-21H": "#57b5a5",
+ "course-21L": "#57b5b2",
+ "course-21M": "#57acb5",
+ "course-21T": "#5e9da6",
+ "course-21W": "#57b580",
+ "course-22": "#b55757",
+ "course-24": "#7657b5",
+ "course-CC": "#4fde43",
+ "course-CMS": "#57b58c",
+ "course-CSB": "#579ab5",
+ "course-EC": "#76b557",
+ "course-EM": "#576eb5",
+ "course-ES": "#5a57b5",
+ "course-HST": "#5779b5",
+ "course-IDS": "#57b586",
+ "course-MAS": "#57b55a",
+ "course-SCM": "#57b573",
+ "course-STS": "#8f57b5",
+ "course-WGS": "#579fb5",
+ "course-SP": "#4343de",
+ "course-SWE": "#b56b57",
+ "course-AS": "#b0b0b0",
+ "course-MS": "#b0b0b0",
+ "course-NS": "#b0b0b0",
+ "generic-GIR": "#bf6139",
+ "generic-HASS-E": "#39bf97",
+ "generic-HASS-A": "#3997bf",
+ "generic-HASS-H": "#3946bf",
+ "generic-HASS-S": "#7c39bf",
+ "generic-CI-H": "#bf39b1",
+ "generic-CI-HW": "#bf3961",
+ "custom_color-0": "#b55757",
+ "custom_color-1": "#b58657",
+ "custom_color-2": "#b5b557",
+ "custom_color-3": "#86b557",
+ "custom_color-4": "#57b557",
+ "custom_color-5": "#57b586",
+ "custom_color-6": "#de4343",
+ "custom_color-7": "#de9043",
+ "custom_color-8": "#dede43",
+ "custom_color-9": "#90de43",
+ "custom_color-10": "#43de43",
+ "custom_color-11": "#43de90",
+ "custom_color-12": "#b51616",
+ "custom_color-13": "#b56516",
+ "custom_color-14": "#b5b516",
+ "custom_color-15": "#65b516",
+ "custom_color-16": "#16b516",
+ "custom_color-17": "#16b565",
+ "custom_color-18": "#57b5b5",
+ "custom_color-19": "#5786b5",
+ "custom_color-20": "#5757b5",
+ "custom_color-21": "#8657b5",
+ "custom_color-22": "#b557b5",
+ "custom_color-23": "#b55786",
+ "custom_color-24": "#43dede",
+ "custom_color-25": "#4390de",
+ "custom_color-26": "#4343de",
+ "custom_color-27": "#9043de",
+ "custom_color-28": "#de43de",
+ "custom_color-29": "#de4390",
+ "custom_color-30": "#16b5b5",
+ "custom_color-31": "#1665b5",
+ "custom_color-32": "#1616b5",
+ "custom_color-33": "#6516b5",
+ "custom_color-34": "#b516b5",
+ "custom_color-35": "#b51665",
+ "custom_color-36": "#000000",
+ "custom_color-37": "#262626",
+ "custom_color-38": "#4d4d4d",
+ "custom_color-39": "#737373",
+ "custom_color-40": "#999999",
+ "custom_color-41": "#bfbfbf",
+};
- // const Rs = parseInt(this.colors[courseColor].substring(1, 3), 16);
- // const Gs = parseInt(this.colors[courseColor].substring(3, 5), 16);
- // const Bs = parseInt(this.colors[courseColor].substring(5, 7), 16);
+export const getRawColor = (courseColor) => {
+ return colors[courseColor];
+};
- // const flipYs = 0.342; // based on APCA™ 0.98G middle contrast BG
+export const getRawTextColor = () => {
+ return "#ffffff";
+ // getRawTextColor: function (courseColor) {
+ // // See https://github.com/Myndex/max-contrast
+ // // https://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
- // const trc = 2.4,
- // Rco = 0.2126729,
- // Gco = 0.7151522,
- // Bco = 0.072175;
+ // const Rs = parseInt(colors[courseColor].substring(1, 3), 16);
+ // const Gs = parseInt(colors[courseColor].substring(3, 5), 16);
+ // const Bs = parseInt(colors[courseColor].substring(5, 7), 16);
- // let Ys =
- // (Rs / 255.0) ** trc * Rco +
- // (Gs / 255.0) ** trc * Gco +
- // (Bs / 255.0) ** trc * Bco;
+ // const flipYs = 0.342; // based on APCA™ 0.98G middle contrast BG
- // return Ys < flipYs ? colors.shades.white : colors.shades.black;
- },
- // courseColor takes in subject
- courseColor: function (subject) {
- // Custom course have custom_color component
- if (subject.custom_color) {
- return "custom_color-" + subject.custom_color.slice(1);
- }
- // Otherwise it's normal class which id determines color
- return this.courseColorFromId(subject.id || subject.subject_id);
- },
- // Takes a subject ID directly
- courseColorFromId: function (id) {
- if (id !== undefined) {
- let course = id.split(".")[0];
- if (course.indexOf("GIR:") >= 0) {
- course =
- course.substring(0, course.indexOf("GIR:")) +
- course.substring(course.indexOf("GIR:") + 4);
- }
- const girAttrs = course
- .split(" ")
- .filter((c) => this.validGeneric.indexOf(c) >= 0);
- if (this.validCourses.indexOf(course) !== -1) {
- return "course-" + course;
- } else if (girAttrs.length > 0) {
- if (girAttrs.length === 1) {
- const attr = girAttrs[0];
- if (attr.indexOf("HASS") === 0) {
- return "generic-" + course;
- } else if (attr.indexOf("CI") === 0) {
- return "generic-" + course;
- }
- }
- return "generic-GIR";
+ // const trc = 2.4,
+ // Rco = 0.2126729,
+ // Gco = 0.7151522,
+ // Bco = 0.072175;
+
+ // let Ys =
+ // (Rs / 255.0) ** trc * Rco +
+ // (Gs / 255.0) ** trc * Gco +
+ // (Bs / 255.0) ** trc * Bco;
+
+ // return Ys < flipYs ? colors.shades.white : colors.shades.black;
+};
+
+// courseColor takes in subject
+export const courseColor = (subject) => {
+ // Custom course have custom_color component
+ if (subject.custom_color) {
+ return "custom_color-" + subject.custom_color.slice(1);
+ }
+ // Otherwise it's normal class which id determines color
+ return courseColorFromId(subject.id || subject.subject_id);
+};
+
+// Takes a subject ID directly
+export const courseColorFromId = (id) => {
+ if (id !== undefined) {
+ let course = id.split(".")[0];
+ if (course.indexOf("GIR:") >= 0) {
+ course =
+ course.substring(0, course.indexOf("GIR:")) +
+ course.substring(course.indexOf("GIR:") + 4);
+ }
+ const girAttrs = course
+ .split(" ")
+ .filter((c) => validGeneric.indexOf(c) >= 0);
+ if (validCourses.indexOf(course) !== -1) {
+ return "course-" + course;
+ } else if (girAttrs.length > 0) {
+ if (girAttrs.length === 1) {
+ const attr = girAttrs[0];
+ if (attr.indexOf("HASS") === 0) {
+ return "generic-" + course;
+ } else if (attr.indexOf("CI") === 0) {
+ return "generic-" + course;
}
}
- return "course-none";
- },
+ return "generic-GIR";
+ }
+ }
+ return "course-none";
+};
+
+export default {
+ data: function () {
+ return {
+ validCourses: validCourses,
+ validGeneric: validGeneric,
+ colors: colors,
+ };
+ },
+ methods: {
+ getRawColor: getRawColor,
+ getRawTextColor: getRawTextColor,
+ courseColor: courseColor,
+ courseColorFromId: courseColorFromId,
},
};
diff --git a/src/mixins/courseLinks.js b/src/mixins/courseLinks.js
index c74fcca1..3773eeb0 100644
--- a/src/mixins/courseLinks.js
+++ b/src/mixins/courseLinks.js
@@ -1,75 +1,79 @@
+export const courseLinks = [
+ {
+ courses: [
+ "major6-1",
+ "major6-1-8-flex",
+ "major6-2",
+ "major6-2new",
+ "major6-3",
+ "major6-3new",
+ "major6-4",
+ "major6-7",
+ "major6-14",
+ "major11-6",
+ "minor6",
+ "master6-P",
+ "meng6-14",
+ ],
+ link: "https://eecsis.mit.edu/checklist.cgi",
+ text: "Course 6 Checklist",
+ },
+ {
+ courses: ["major11"],
+ link: "https://duspsis.mit.edu/",
+ text: "Course 11 Student Status",
+ },
+ {
+ courses: [
+ "neetLM-CB",
+ "neetLM-IE",
+ "neetLM-TE",
+ "neetLM-SB",
+ "neetLM-MDE",
+ "neetLM",
+ ],
+ link: "https://neet.mit.edu/threads/lm",
+ text: "NEET Living Machines Website",
+ },
+ {
+ courses: ["neetAM"],
+ link: "https://neet.mit.edu/threads/am",
+ text: "NEET Autonomous Machines Website",
+ },
+ {
+ courses: ["neetAAM"],
+ link: "https://neet.mit.edu/threads/amm",
+ text: "NEET Advanced Materials Machines Website",
+ },
+ {
+ courses: ["neetDC"],
+ link: "https://neet.mit.edu/threads/dc",
+ text: "NEET Digital Cities Website",
+ },
+ {
+ courses: ["neetCES"],
+ link: "https://neet.mit.edu/threads/rem",
+ text: "NEET Renewable Energy Machines",
+ },
+];
+
+export const getCourseLinks = (selectedReqs) => {
+ const links = [];
+ for (const { courses, link, text } of courseLinks) {
+ if (selectedReqs.some((course) => courses.includes(course))) {
+ links.push({ link, text });
+ }
+ }
+ return links;
+};
+
export default {
data: function () {
return {
- courseLinks: [
- {
- courses: [
- "major6-1",
- "major6-1-8-flex",
- "major6-2",
- "major6-2new",
- "major6-3",
- "major6-3new",
- "major6-4",
- "major6-7",
- "major6-14",
- "major11-6",
- "minor6",
- "master6-P",
- "meng6-14",
- ],
- link: "https://eecsis.mit.edu/checklist.cgi",
- text: "Course 6 Checklist",
- },
- {
- courses: ["major11"],
- link: "https://duspsis.mit.edu/",
- text: "Course 11 Student Status",
- },
- {
- courses: [
- "neetLM-CB",
- "neetLM-IE",
- "neetLM-TE",
- "neetLM-SB",
- "neetLM-MDE",
- "neetLM",
- ],
- link: "https://neet.mit.edu/threads/lm",
- text: "NEET Living Machines Website",
- },
- {
- courses: ["neetAM"],
- link: "https://neet.mit.edu/threads/am",
- text: "NEET Autonomous Machines Website",
- },
- {
- courses: ["neetAAM"],
- link: "https://neet.mit.edu/threads/amm",
- text: "NEET Advanced Materials Machines Website",
- },
- {
- courses: ["neetDC"],
- link: "https://neet.mit.edu/threads/dc",
- text: "NEET Digital Cities Website",
- },
- {
- courses: ["neetCES"],
- link: "https://neet.mit.edu/threads/rem",
- text: "NEET Renewable Energy Machines",
- },
- ],
+ courseLinks: courseLinks,
};
},
methods: {
- getCourseLinks: function (selectedReqs) {
- const links = [];
- for (const { courses, link, text } of this.courseLinks) {
- if (selectedReqs.some((course) => courses.includes(course))) {
- links.push({ link, text });
- }
- }
- return links;
- },
+ getCourseLinks: getCourseLinks,
},
};
diff --git a/src/mixins/reqFulfillment.js b/src/mixins/reqFulfillment.js
index 06997a3b..c7eb0711 100644
--- a/src/mixins/reqFulfillment.js
+++ b/src/mixins/reqFulfillment.js
@@ -1,199 +1,194 @@
-export default {
- methods: {
- classSatisfies: function (req, id, allSubjects) {
- if (req === id) {
- return true;
- }
+import { useStore } from "../plugins/composition";
- let subj;
- if (id in this.$store.state.subjectsIndex) {
- subj =
- this.$store.state.subjectsInfo[this.$store.state.subjectsIndex[id]];
- } else if (id in this.$store.state.genericIndex) {
- subj =
- this.$store.state.genericCourses[this.$store.state.genericIndex[id]];
- } else {
- // subj not found in known courses
- return false;
- }
+export const classSatisfies = (req, id, allSubjects) => {
+ const store = useStore();
+ if (req === id) {
+ return true;
+ }
- if (
- subj.equivalent_subjects !== undefined &&
- subj.equivalent_subjects.indexOf(req) >= 0
- ) {
- return true;
- }
+ let subj;
+ if (id in store.state.subjectsIndex) {
+ subj = store.state.subjectsInfo[store.state.subjectsIndex[id]];
+ } else if (id in store.state.genericIndex) {
+ subj = store.state.genericCourses[store.state.genericIndex[id]];
+ } else {
+ // subj not found in known courses
+ return false;
+ }
+
+ if (
+ subj.equivalent_subjects !== undefined &&
+ subj.equivalent_subjects.indexOf(req) >= 0
+ ) {
+ return true;
+ }
+
+ // ex: 6.00 satisfies the 6.0001 requirement
+ if (subj.children !== undefined && subj.children.indexOf(req) >= 0) {
+ return true;
+ }
- // ex: 6.00 satisfies the 6.0001 requirement
- if (subj.children !== undefined && subj.children.indexOf(req) >= 0) {
+ // ex: 6.0001 and 6.0002 together satisfy the 6.00 requirement
+ if (subj.parent !== undefined && req === subj.parent) {
+ const parentCourse =
+ store.state.subjectsInfo[store.state.subjectsIndex[subj.parent]];
+ if (parentCourse !== undefined) {
+ if (parentCourse.children.every((sid) => allSubjects.indexOf(sid) >= 0)) {
return true;
}
+ }
+ }
- // ex: 6.0001 and 6.0002 together satisfy the 6.00 requirement
- if (subj.parent !== undefined && req === subj.parent) {
- const parentCourse =
- this.$store.state.subjectsInfo[
- this.$store.state.subjectsIndex[subj.parent]
- ];
- if (parentCourse !== undefined) {
- if (
- parentCourse.children.every((sid) => allSubjects.indexOf(sid) >= 0)
- ) {
- return true;
- }
- }
- }
+ if (req.indexOf(".") === -1) {
+ if (req.indexOf("GIR:") >= 0) {
+ req = req.substring(4);
+ return subj.gir_attribute === req;
+ } else if (req.indexOf("HASS") >= 0) {
+ return subj.hass_attribute.split(",").indexOf(req) >= 0;
+ } else if (req.indexOf("CI") >= 0) {
+ return subj.communication_requirement === req;
+ }
+ }
+ return false;
+};
- if (req.indexOf(".") === -1) {
- if (req.indexOf("GIR:") >= 0) {
- req = req.substring(4);
- return subj.gir_attribute === req;
- } else if (req.indexOf("HASS") >= 0) {
- return subj.hass_attribute.split(",").indexOf(req) >= 0;
- } else if (req.indexOf("CI") >= 0) {
- return subj.communication_requirement === req;
- }
- }
- return false;
- },
- reqsFulfilled: function (reqString, subjects) {
- const allIDs = subjects.map((s) => s.subject_id);
- reqString = reqString.replace(/''/g, '"').replace(/,[\s]+/g, ",");
- const splitReq = reqString.split(/(,|\(|\)|\/)/);
- const _this = this;
- let skipNumber;
- for (let i = 0; i < splitReq.length; i++) {
- if (splitReq[i].indexOf('"') >= 0 && i !== skipNumber) {
- // if the requirement is a string instead of a class ID:
- // If the string is "One subject in X", check for any subject with X in their ID
- // things that are still not handled correctly:
- // 21M.283 doesn't work correctly because film / music
- // 24.280, 21L.709, 21L.715, 21L.S96, 21L.S97 don't work because we don't keep the count between i's
- // Set other strings (like "permission of instructor") automatically to false
- // If required as an alternative to other prereqs, will not affect fulfillment
- // If the string is a required prereq, it must be manually dismissed
- const req = splitReq[i];
- let idCategory;
- let numRequired;
- const lowercaseReq = req.toLowerCase();
- if (
- lowercaseReq.indexOf("one subject in") >= 0 ||
- lowercaseReq.indexOf("two subjects in") >= 0
- ) {
- if (lowercaseReq.indexOf("one subject in") >= 0) {
- numRequired = 1;
- } else {
- numRequired = 2;
- }
- // because "one subject in CMS / History" should be (one subject in CMS || one subject in History) not (one subject in CMS) || History
- const orcheck =
- splitReq[i + 1] === "/" &&
- (splitReq[i + 2] === '"Comparative Media Studies"' ||
- splitReq[i + 2] === '"History"');
- // because FireRoad treats "Brain and Cognitive Sciences" as (Brain) && (Cognitive Sciences) instead of (Brain and Cognitive Sciences)
- const andcheck =
- splitReq[i + 1] === "," &&
- splitReq[i + 2] === '"Cognitive Sciences"';
- if (splitReq.length > i + 2 && (orcheck || andcheck)) {
- skipNumber = i + 2;
- idCategory = this.convertReqToID(splitReq[i + 2]);
- splitReq[i + 2] = this.checkForNumRequired(
- allIDs,
- idCategory,
- numRequired,
- );
- }
- // sometimes the string is 'two subjects in X' and sometimes it is 'any other two subjects in X'
- const parts = req.split(" ");
- const category = req.split(" ")[parts.indexOf("in") + 1];
- idCategory = this.convertReqToID(category);
- splitReq[i] = this.checkForNumRequired(
- allIDs,
- idCategory,
- numRequired,
- );
- if (idCategory.toString() === "/film/i") {
- const allTitles = subjects.map((s) => s.title);
- splitReq[i] = this.checkForNumRequired(
- allTitles,
- idCategory,
- numRequired,
- );
- }
- } else {
- splitReq[i] = "false";
- }
- } else if ("()/, ".indexOf(splitReq[i]) < 0 && i !== skipNumber) {
- if (allIDs.indexOf(splitReq[i]) >= 0) {
- splitReq[i] = "true";
- } else {
- const anyClassSatisfies = subjects.some((s) =>
- _this.classSatisfies(splitReq[i], s.subject_id, allIDs),
- );
- splitReq[i] = anyClassSatisfies ? "true" : "false";
- }
- }
- }
- const reqExpression = splitReq
- .join("")
- .replace(/\//g, "||")
- .replace(/,/g, "&&");
- // i know this seems scary, but the above code guarantees there will only be ()/, true false in this string
- // eslint-disable-next-line no-eval
- return eval(reqExpression);
- },
- convertReqToID: function (category) {
- // takes in a string like "Comparative Media Studies" or "philosophy" and outputs something that matches
- // a class ID like /CMS/ or /24\.[0-8]/
- if (category.indexOf('"') === 0) {
- category = category.slice(1);
- }
- if (category.indexOf('"') === category.length - 1) {
- category = category.slice(0, -1);
- }
- let idCategory = "";
+export const reqsFulfilled = (reqString, subjects) => {
+ const allIDs = subjects.map((s) => s.subject_id);
+ reqString = reqString.replace(/''/g, '"').replace(/,[\s]+/g, ",");
+ const splitReq = reqString.split(/(,|\(|\)|\/)/);
+ let skipNumber;
+ for (let i = 0; i < splitReq.length; i++) {
+ if (splitReq[i].indexOf('"') >= 0 && i !== skipNumber) {
+ // if the requirement is a string instead of a class ID:
+ // If the string is "One subject in X", check for any subject with X in their ID
+ // things that are still not handled correctly:
+ // 21M.283 doesn't work correctly because film / music
+ // 24.280, 21L.709, 21L.715, 21L.S96, 21L.S97 don't work because we don't keep the count between i's
+ // Set other strings (like "permission of instructor") automatically to false
+ // If required as an alternative to other prereqs, will not affect fulfillment
+ // If the string is a required prereq, it must be manually dismissed
+ const req = splitReq[i];
+ let idCategory;
+ let numRequired;
+ const lowercaseReq = req.toLowerCase();
if (
- category === "Comparative" ||
- category === "CMS" ||
- category === "Comparative Media Studies"
+ lowercaseReq.indexOf("one subject in") >= 0 ||
+ lowercaseReq.indexOf("two subjects in") >= 0
) {
- idCategory = /CMS/;
- } else if (category === "Literature") {
- idCategory = /21L/;
- } else if (/film/i.test(category)) {
- idCategory = /film/i;
- } else if (category === "philosophy") {
- // below 900 is Linguistics
- idCategory = /24\.[0-8]/;
- } else if (category === "Anthropology") {
- idCategory = /21A/;
- } else if (
- category === "Brain" ||
- category === "Cognitive Sciences" ||
- category === "Cognitive"
- ) {
- idCategory = /^9\./;
- } else if (category === "History") {
- idCategory = /21H/;
- } else {
- idCategory = "do not match anything";
- // maybe this should create a message asking us to add it
- }
- return idCategory;
- },
- checkForNumRequired: function (allIDs, idCategory, numRequired) {
- // checks whether there are numRequired matches for idCategory in allIDs
- let satisfied = "false";
- let numMatches = 0;
- for (let i = 0; i < allIDs.length; i++) {
- if (allIDs[i].search(idCategory) >= 0) {
- numMatches += 1;
+ if (lowercaseReq.indexOf("one subject in") >= 0) {
+ numRequired = 1;
+ } else {
+ numRequired = 2;
+ }
+ // because "one subject in CMS / History" should be (one subject in CMS || one subject in History) not (one subject in CMS) || History
+ const orcheck =
+ splitReq[i + 1] === "/" &&
+ (splitReq[i + 2] === '"Comparative Media Studies"' ||
+ splitReq[i + 2] === '"History"');
+ // because FireRoad treats "Brain and Cognitive Sciences" as (Brain) && (Cognitive Sciences) instead of (Brain and Cognitive Sciences)
+ const andcheck =
+ splitReq[i + 1] === "," && splitReq[i + 2] === '"Cognitive Sciences"';
+ if (splitReq.length > i + 2 && (orcheck || andcheck)) {
+ skipNumber = i + 2;
+ idCategory = convertReqToID(splitReq[i + 2]);
+ splitReq[i + 2] = checkForNumRequired(
+ allIDs,
+ idCategory,
+ numRequired,
+ );
}
+ // sometimes the string is 'two subjects in X' and sometimes it is 'any other two subjects in X'
+ const parts = req.split(" ");
+ const category = req.split(" ")[parts.indexOf("in") + 1];
+ idCategory = convertReqToID(category);
+ splitReq[i] = checkForNumRequired(allIDs, idCategory, numRequired);
+ if (idCategory.toString() === "/film/i") {
+ const allTitles = subjects.map((s) => s.title);
+ splitReq[i] = checkForNumRequired(allTitles, idCategory, numRequired);
+ }
+ } else {
+ splitReq[i] = "false";
}
- if (numMatches >= numRequired) {
- satisfied = "true";
+ } else if ("()/, ".indexOf(splitReq[i]) < 0 && i !== skipNumber) {
+ if (allIDs.indexOf(splitReq[i]) >= 0) {
+ splitReq[i] = "true";
+ } else {
+ const anyClassSatisfies = subjects.some((s) =>
+ classSatisfies(splitReq[i], s.subject_id, allIDs),
+ );
+ splitReq[i] = anyClassSatisfies ? "true" : "false";
}
- return satisfied;
- },
+ }
+ }
+ const reqExpression = splitReq
+ .join("")
+ .replace(/\//g, "||")
+ .replace(/,/g, "&&");
+ // i know this seems scary, but the above code guarantees there will only be ()/, true false in this string
+ // eslint-disable-next-line no-eval
+ return eval(reqExpression);
+};
+
+export const convertReqToID = (category) => {
+ // takes in a string like "Comparative Media Studies" or "philosophy" and outputs something that matches
+ // a class ID like /CMS/ or /24\.[0-8]/
+ if (category.indexOf('"') === 0) {
+ category = category.slice(1);
+ }
+ if (category.indexOf('"') === category.length - 1) {
+ category = category.slice(0, -1);
+ }
+ let idCategory = "";
+ if (
+ category === "Comparative" ||
+ category === "CMS" ||
+ category === "Comparative Media Studies"
+ ) {
+ idCategory = /CMS/;
+ } else if (category === "Literature") {
+ idCategory = /21L/;
+ } else if (/film/i.test(category)) {
+ idCategory = /film/i;
+ } else if (category === "philosophy") {
+ // below 900 is Linguistics
+ idCategory = /24\.[0-8]/;
+ } else if (category === "Anthropology") {
+ idCategory = /21A/;
+ } else if (
+ category === "Brain" ||
+ category === "Cognitive Sciences" ||
+ category === "Cognitive"
+ ) {
+ idCategory = /^9\./;
+ } else if (category === "History") {
+ idCategory = /21H/;
+ } else {
+ idCategory = "do not match anything";
+ // maybe this should create a message asking us to add it
+ }
+ return idCategory;
+};
+
+export const checkForNumRequired = (allIDs, idCategory, numRequired) => {
+ // checks whether there are numRequired matches for idCategory in allIDs
+ let satisfied = "false";
+ let numMatches = 0;
+ for (let i = 0; i < allIDs.length; i++) {
+ if (allIDs[i].search(idCategory) >= 0) {
+ numMatches += 1;
+ }
+ }
+ if (numMatches >= numRequired) {
+ satisfied = "true";
+ }
+ return satisfied;
+};
+
+export default {
+ methods: {
+ classSatisfies: classSatisfies,
+ reqsFulfilled: reqsFulfilled,
+ convertReqToID: convertReqToID,
+ checkForNumRequired: checkForNumRequired,
},
};
diff --git a/src/mixins/sanitizeSubjects.js b/src/mixins/sanitizeSubjects.js
index 55388e6c..db633056 100644
--- a/src/mixins/sanitizeSubjects.js
+++ b/src/mixins/sanitizeSubjects.js
@@ -1,15 +1,17 @@
+export const getSimpleSelectedSubjects = (selectedSubjects) => {
+ const simpless = Array.from(Array(16), () => []);
+ for (let i = 0; i < selectedSubjects.length; i++) {
+ const s = selectedSubjects[i];
+ if (s.semester === undefined || s.semester < 0) {
+ s.semester = 0;
+ }
+ simpless[s.semester].push(s);
+ }
+ return simpless;
+};
+
export default {
methods: {
- getSimpleSelectedSubjects(selectedSubjects) {
- const simpless = Array.from(Array(16), () => []);
- for (let i = 0; i < selectedSubjects.length; i++) {
- const s = selectedSubjects[i];
- if (s.semester === undefined || s.semester < 0) {
- s.semester = 0;
- }
- simpless[s.semester].push(s);
- }
- return simpless;
- },
+ getSimpleSelectedSubjects: getSimpleSelectedSubjects,
},
};
diff --git a/src/mixins/schedule.js b/src/mixins/schedule.js
index 2eab8172..1325283e 100644
--- a/src/mixins/schedule.js
+++ b/src/mixins/schedule.js
@@ -1,20 +1,22 @@
+export const lateSchedule = (subj, genericIndex, compareDate = new Date()) => {
+ if (subj.schedule === undefined && !(subj.subject_id in genericIndex)) {
+ const year = compareDate.getFullYear();
+ const month = compareDate.getMonth();
+ const fallCutoff = new Date(year, 4, 15);
+ const springCutoff =
+ month === 11 ? new Date(year, 11, 15) : new Date(year - 1, 11, 15);
+ const scheduleForFall = month >= 4 && month <= 10;
+ const lateForFall =
+ scheduleForFall && subj.offered_fall && compareDate > fallCutoff;
+ const lateForSpring =
+ !scheduleForFall && subj.offered_spring && compareDate > springCutoff;
+ return lateForFall || lateForSpring;
+ }
+ return false;
+};
+
export default {
methods: {
- lateSchedule: function (subj, genericIndex, compareDate = new Date()) {
- if (subj.schedule === undefined && !(subj.subject_id in genericIndex)) {
- const year = compareDate.getFullYear();
- const month = compareDate.getMonth();
- const fallCutoff = new Date(year, 4, 15);
- const springCutoff =
- month === 11 ? new Date(year, 11, 15) : new Date(year - 1, 11, 15);
- const scheduleForFall = month >= 4 && month <= 10;
- const lateForFall =
- scheduleForFall && subj.offered_fall && compareDate > fallCutoff;
- const lateForSpring =
- !scheduleForFall && subj.offered_spring && compareDate > springCutoff;
- return lateForFall || lateForSpring;
- }
- return false;
- },
+ lateSchedule: lateSchedule,
},
};
diff --git a/src/plugins/browserSupport.js b/src/plugins/browserSupport.js
index 0899a17f..76a540ca 100644
--- a/src/plugins/browserSupport.js
+++ b/src/plugins/browserSupport.js
@@ -1,10 +1,12 @@
+export const flatten = (array) => {
+ return [].concat.apply([], array);
+};
+
const BrowserSupportPlugin = {
install(Vue) {
Vue.mixin({
methods: {
- flatten: function (array) {
- return [].concat.apply([], array);
- },
+ flatten: flatten,
},
});
},
diff --git a/src/plugins/composition.js b/src/plugins/composition.js
new file mode 100644
index 00000000..35335d59
--- /dev/null
+++ b/src/plugins/composition.js
@@ -0,0 +1,16 @@
+import { getCurrentInstance } from "vue";
+
+export const useVuetify = () => {
+ const vm = getCurrentInstance();
+ return vm.proxy?.$vuetify || undefined;
+};
+
+export const useStore = () => {
+ const vm = getCurrentInstance();
+ return vm.proxy?.$store || undefined;
+};
+
+export const useCookies = () => {
+ const vm = getCurrentInstance();
+ return vm.proxy?.$cookies || undefined;
+};
From 289d80e7d4081595c348a3b213ef655a1878cb22 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Wed, 13 Nov 2024 00:18:09 -0500
Subject: [PATCH 07/19] start migrating to composition api
---
src/components/FilterSet.vue | 85 ++++---
src/components/ImportExport.vue | 365 +++++++++++++++----------------
src/components/Requirement.vue | 156 +++++++------
src/components/Road.vue | 177 ++++++++-------
src/components/RoadTabs.vue | 176 +++++++--------
src/components/SubjectScroll.vue | 41 ++--
src/components/ThemeToggler.vue | 34 ++-
7 files changed, 501 insertions(+), 533 deletions(-)
diff --git a/src/components/FilterSet.vue b/src/components/FilterSet.vue
index ce06755b..68fb7e52 100644
--- a/src/components/FilterSet.vue
+++ b/src/components/FilterSet.vue
@@ -17,54 +17,49 @@
-
From 05a5f4b269337e3fad8c698e61d7e9eaf635e8a5 Mon Sep 17 00:00:00 2001
From: Diego Temkin <65834932+dtemkin1@users.noreply.github.com>
Date: Sat, 16 Nov 2024 01:09:21 -0500
Subject: [PATCH 12/19] fix eslint, go through all components already done
---
eslint.config.mjs | 46 ++-
package-lock.json | 655 ++++++++++++++++++++++--------
package.json | 4 +-
src/components/ClassSearch.vue | 28 +-
src/components/ConflictDialog.vue | 15 +-
src/components/CustomClass.vue | 6 +-
src/components/FilterSet.vue | 2 +-
src/components/Requirement.vue | 2 +-
src/components/Semester.vue | 11 +-
src/components/SubjectScroll.vue | 8 +-
src/mixins/reqFulfillment.js | 1 -
11 files changed, 538 insertions(+), 240 deletions(-)
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 2fe2f15a..8b18e4c7 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,33 +1,41 @@
import globals from "globals";
-import path from "node:path";
-import { fileURLToPath } from "node:url";
import js from "@eslint/js";
-import { FlatCompat } from "@eslint/eslintrc";
-
-import pluginVue from "eslint-plugin-vue";
+import eslintPluginVue from "eslint-plugin-vue";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-const compat = new FlatCompat({
- baseDirectory: __dirname,
- recommendedConfig: js.configs.recommended,
- allConfig: js.configs.all,
-});
+import ts from "typescript-eslint";
-export default [
- // js.configs.recommended,
- ...pluginVue.configs["flat/recommended"],
- ...pluginVue.configs["flat/vue2-recommended"],
- ...compat.extends("plugin:vuetify/base"),
+export default ts.config(
+ js.configs.recommended,
+ ...ts.configs.recommended,
+ ...eslintPluginVue.configs["flat/vue2-recommended"],
eslintPluginPrettierRecommended,
{
+ files: ["*.vue", "**/*.vue"],
+
languageOptions: {
globals: {
...globals.node,
},
+ parserOptions: {
+ parser: "@typescript-eslint/parser",
+ },
},
- rules: {},
+ rules: {
+ "vue/script-setup-uses-vars": "error",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ args: "all",
+ argsIgnorePattern: "^_",
+ caughtErrors: "all",
+ caughtErrorsIgnorePattern: "^_",
+ destructuredArrayIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ ignoreRestSiblings: true,
+ },
+ ],
+ },
},
-];
+);
diff --git a/package-lock.json b/package-lock.json
index 01844f40..0f9a1942 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,6 +29,7 @@
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.14.0",
"@mdi/font": "^7.4.47",
+ "@types/eslint__js": "^8.42.3",
"@types/jquery": "^3.5.32",
"@vue/test-utils": "^1.2.2",
"cypress-file-upload": "^5.0.8",
@@ -37,10 +38,11 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-vue": "^9.31.0",
- "eslint-plugin-vuetify": "^1.1.0",
"globals": "^15.12.0",
"prettier": "3.2.5",
"sass": "~1.32",
+ "typescript": "^5.6.3",
+ "typescript-eslint": "^8.14.0",
"vue": "^2.7.0"
}
},
@@ -543,9 +545,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
- "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
+ "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -629,9 +631,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.14.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
- "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
+ "version": "9.15.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz",
+ "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -649,9 +651,9 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
- "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
+ "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -890,6 +892,44 @@
"integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==",
"dev": true
},
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/@one-ini/wasm": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
@@ -1131,13 +1171,21 @@
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
"integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
"dev": true,
- "optional": true,
- "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
+ "node_modules/@types/eslint__js": {
+ "version": "8.42.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz",
+ "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/eslint": "*"
+ }
+ },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -1191,6 +1239,235 @@
"@types/node": "*"
}
},
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz",
+ "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.14.0",
+ "@typescript-eslint/type-utils": "8.14.0",
+ "@typescript-eslint/utils": "8.14.0",
+ "@typescript-eslint/visitor-keys": "8.14.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz",
+ "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.14.0",
+ "@typescript-eslint/types": "8.14.0",
+ "@typescript-eslint/typescript-estree": "8.14.0",
+ "@typescript-eslint/visitor-keys": "8.14.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz",
+ "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.14.0",
+ "@typescript-eslint/visitor-keys": "8.14.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz",
+ "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.14.0",
+ "@typescript-eslint/utils": "8.14.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz",
+ "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz",
+ "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "8.14.0",
+ "@typescript-eslint/visitor-keys": "8.14.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz",
+ "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.14.0",
+ "@typescript-eslint/types": "8.14.0",
+ "@typescript-eslint/typescript-estree": "8.14.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz",
+ "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.14.0",
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/@vitejs/plugin-vue2": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz",
@@ -2222,10 +2499,11 @@
"peer": true
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
+ "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -2996,127 +3274,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint-plugin-vuetify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vuetify/-/eslint-plugin-vuetify-1.1.0.tgz",
- "integrity": "sha512-I1YRUCGkDqe8F7O0tdf63UZVKtk4734+8fzbZ24YIZKTTyQp/FIR0nSZYG8mPFhTWerzPta7oXNzliBOwP2XeQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-plugin-vue": "^7.0.0",
- "requireindex": "^1.2.0"
- },
- "peerDependencies": {
- "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0",
- "vuetify": "^2.0.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/eslint-plugin-vue": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
- "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-utils": "^2.1.0",
- "natural-compare": "^1.4.0",
- "semver": "^6.3.0",
- "vue-eslint-parser": "^7.10.0"
- },
- "engines": {
- "node": ">=8.10"
- },
- "peerDependencies": {
- "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/eslint-plugin-vuetify/node_modules/vue-eslint-parser": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
- "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.1.1",
- "eslint-scope": "^5.1.1",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.2.1",
- "esquery": "^1.4.0",
- "lodash": "^4.17.21",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5.0.0"
- }
- },
"node_modules/eslint-scope": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
@@ -3134,32 +3291,6 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eslint-visitor-keys": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -3172,6 +3303,16 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/@eslint/js": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
+ "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/eslint/node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@@ -3538,6 +3679,36 @@
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true
},
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -3549,6 +3720,16 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
"node_modules/fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -3922,6 +4103,13 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"peer": true
},
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@@ -4816,6 +5004,30 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"peer": true
},
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -5320,6 +5532,27 @@
"dev": true,
"peer": true
},
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -5351,16 +5584,6 @@
"throttleit": "^1.0.0"
}
},
- "node_modules/requireindex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
- "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.5"
- }
- },
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -5382,6 +5605,17 @@
"node": ">=8"
}
},
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/rfdc": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
@@ -5424,6 +5658,30 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -5487,7 +5745,8 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "devOptional": true,
+ "optional": true,
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -5935,7 +6194,8 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/throttleit": {
"version": "1.0.1",
@@ -6003,6 +6263,19 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/ts-api-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
+ "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -6055,11 +6328,11 @@
}
},
"node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
- "optional": true,
- "peer": true,
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -6068,6 +6341,30 @@
"node": ">=14.17"
}
},
+ "node_modules/typescript-eslint": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz",
+ "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.14.0",
+ "@typescript-eslint/parser": "8.14.0",
+ "@typescript-eslint/utils": "8.14.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ua-parser-js": {
"version": "1.0.37",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz",
diff --git a/package.json b/package.json
index 8e1442ac..6f20f7e4 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.14.0",
"@mdi/font": "^7.4.47",
+ "@types/eslint__js": "^8.42.3",
"@types/jquery": "^3.5.32",
"@vue/test-utils": "^1.2.2",
"cypress-file-upload": "^5.0.8",
@@ -47,10 +48,11 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-vue": "^9.31.0",
- "eslint-plugin-vuetify": "^1.1.0",
"globals": "^15.12.0",
"prettier": "3.2.5",
"sass": "~1.32",
+ "typescript": "^5.6.3",
+ "typescript-eslint": "^8.14.0",
"vue": "^2.7.0"
},
"bugs": {
diff --git a/src/components/ClassSearch.vue b/src/components/ClassSearch.vue
index 07f92b31..bfc607f4 100644
--- a/src/components/ClassSearch.vue
+++ b/src/components/ClassSearch.vue
@@ -47,27 +47,28 @@
:items-per-page-text="'Results per page:\xa0'"
:hide-default-header="true"
>
-