Skip to content

CourseForge 5.0.0

Choose a tag to compare

@ZcarecroW ZcarecroW released this 02 Sep 19:06
· 9 commits to main since this release
v5.0.0
a010f50

A release about the interface: what it looks like, how it is organised, and whether it can be used without a mouse. No pipeline changes and no schema change — but a profile can now decide what every course written with it starts from, which is the one new thing under the surface.

An interface that can be read before it is read

Every screen, every card, every setting and every tab now carries a glyph from the Nucleo icon set, drawn to one grid and one stroke, so a list is skimmed by its pictures before a single label is read. A hundred icons, each named in assets/js/components/AppIcon.js by the Nucleo id it came from, inlined as SVG that takes the text colour around it — no font, no CDN, no flash of missing glyphs.

The sidebar is divided into Workspace and Administration, each destination has a hint, and the account entry at the foot shows who is signed in — avatar, name, role. The theme control has three positions — light, dark and Auto, which follows the system — instead of a toggle. Every screen opens with a line saying what it is for.

Settings gained an index down its side that follows the scroll, marks the group on screen, and counts what this installation has changed in each. Every setting has a glyph that says what kind of thing it is, and every switch is a switch.

Courses cards carry a tile that says where each course stands — being written, written but not published, published, a run open, a page failed — and an empty course list explains the whole application in five steps.

Course defaults look like the Details tab, because they are the same list

The fourteen elements and eight values a course can decide were drawn on the Settings screen as a plain list of settings rows that looked nothing like the Details tab the same elements are switched on a course with. They are now drawn as that tab draws them: the same rows, tiles, order and words. What differs is the control, and for a reason: every other level has three answers — on, off, or follow the level above — and this level has nothing above it, so its switch has two.

A profile decides what every course on it starts from

Until now the only way to give twenty courses the same house style was twenty Details tabs. A profile has a fourth tab, Content defaults, with the same editor as a course, one level up:

installation  →  profile  →  course  →  chapter  →  page

Only deviations are stored at every level, so a course that never disagreed with its profile follows it when it changes, and a course whose profile is deleted goes back to the installation. A course's Details tab says which of the two its "inherit" position points at, and one button opens the profile on the right tab.

Over MCP the same thing is set_profile_details (features as 1, -1 or 0; values as numbers or text; reset_all), with the crossed-lengths refusal every other door to that pair has. get_profile reports the decisions, and get_details on a course names profile as where an inherited answer comes from.

Usable without a mouse, and readable without sight

Every icon-only button has a name. Every tab bar is a tab list, every segmented control a radio group, every switch a switch, and the current navigation entry says so. Progress bars carry their numbers. A skip link takes the keyboard past the navigation. Error strips are announced. A decorative icon is hidden from assistive technology; one that stands for something on its own is named.

Upgrading

Nothing to do, and no schema change. A profile gains its content-defaults layer the first time it is saved, and an empty layer means exactly what no layer meant: whatever the installation says.


383 tests pass, 4 of them new in tests/profile-defaults.test.php. Every Vue template was compiled with the shipped Vue before release, and every screen was driven in a browser against a scratch installation — dark and light, desktop and phone width.