Skip to content

Release v7.1: Internal Refactoring

Compare
Choose a tag to compare
@hanzhi713 hanzhi713 released this 14 Sep 02:37
· 434 commits to master since this release

New Features

  • Waitlist number is available on section/course modal.
  • Events will be highlighted on mouse hover.
  • Add a button for copying an existing event to a new event.
  • The width of the schedule grid can be changed.
  • The weight of each sort option in combined mode can be customized.

Changes

  • Events with overlapping time can now co-exist
  • The reference schedule used by sort by similarity can exist.

Optimizations

  • Algorithm bootstrapping time is reduced by 60%, resulting from the optimization of string-similarity.
  • Blocks sorting (in ScheduleEvaluator) is 25% faster with the use of a compact Int32Array for storing the time arrays for each section.
  • Schedule render engine is optimized to better deal with some extreme cases. It is also significantly faster now.

Note

  • The URLs created (for sharing profiles) prior to this version are incompatible to this version. The compatibility of URLs will also not be ensured in the future versions. If you want backward compatibility, please use the Export to JSON function instead.

Internal changes

  • IndexedDB is used in place of LocalStorage for catalog data. With its larger capacity, multiple semesters' data can be stored at the same time.
  • The All property of Schedule instances now stores sections ids rather than section indices.
  • Course and Section instances are created through Object.create. Courses are only reconstructed for storing a subset of its sections. Sections do not have constructors anymore and are unique in memory. They are never copied. Meetings do not have a prototype anymore.
  • Vuetify is removed to reduce code bundle size and style conflicts. Components are replaced with their Bootstrap counterparts or hand-crafted Vue components.
  • Documentation update.
  • String-similarity is no-longer listed as a package. Its source code is optimized and directly integrated.
  • TSLint is not used anymore. TypeScript code linting is achieved with ESLint.