{"id":2065,"date":"2023-11-10T10:08:19","date_gmt":"2023-11-10T10:08:19","guid":{"rendered":"https:\/\/www.numbas.org.uk\/?p=2065"},"modified":"2023-11-28T15:38:23","modified_gmt":"2023-11-28T15:38:23","slug":"development-update-november-2023","status":"publish","type":"post","link":"https:\/\/www.numbas.org.uk\/theme-testing\/blog\/2023\/11\/development-update-november-2023\/","title":{"rendered":"Development update: November 2023"},"content":{"rendered":"\n<p>Here&#8217;s a development update, covering everything that&#8217;s changed since July.<\/p>\n\n\n\n<p>I spent a lot of time on the Summer working on our other project, <a href=\"https:\/\/www.chirun.org.uk\/\">Chirun<\/a>. I wrote a new LTI 1.3-compliant tool, to make it easier to embed Chirun material in our virtual learning environment. That&#8217;s now in use at Newcastle, and I&#8217;m looking for other institutions to test it with virtual learning environments other than Canvas or Moodle. Our intention is to make our server available to everyone, since it won&#8217;t handle any personally identifying information.<\/p>\n\n\n\n<p>So it&#8217;s been a while since I had time to do a Numbas development update. There have been quite a few bug fixes and an encouraging number of contributions from other people. The main news is that the Numbas runtime is now WCAG 2.1 AAA compliant.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Accessibility improvements and VPAT<\/h2>\n\n\n\n<p>Over the Summer a few people asked us for a formal statement that Numbas is compliant with the Web Content Accessibility Guidelines (WCAG). <\/p>\n\n\n\n<p>I spent a week or two working through all the WCAG 2.1 criteria. Happily, most of them were already satisfied, but I identified a few that needed some work.<\/p>\n\n\n\n<p>We&#8217;ve put together <a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/accessibility\/exam-vpat.html\">a VPAT\u00ae report<\/a>, a standard declaration of conformance with the guidelines. The Numbas exam interface supports all of the criteria that apply to it, at level AAA. That&#8217;s great!<\/p>\n\n\n\n<p>In the report we&#8217;ve put &#8220;partially supports&#8221; for a couple of criteria to do with reading level and terminology: they&#8217;re written with informational content in mind, and the assessment context necessarily means that it isn&#8217;t always safe to explain what a word means &#8211; it might be being assessed!<\/p>\n\n\n\n<p>Anyway, I&#8217;m very proud that we&#8217;ve reached this level of accessibility. There&#8217;s always more work to do, so if you&#8217;ve got any thoughts around the accessibility of Numbas exams I&#8217;d be happy to hear them: email <a href=\"https:\/\/www.itic.org\/policy\/accessibility\/vpat\">numbas@ncl.ac.uk<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Numbas runtime<\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/Numbas\/releases\/tag\/v7.2\">v7.2 of the Numbas runtime on GitHub<\/a>.<\/p>\n\n\n\n<ul>\n<li>Laura wrote some unit tests for custom part types, so it should be harder for me to break them now! (<a href=\"https:\/\/github.com\/numbas\/Numbas\/pull\/1022\">pull request<\/a>)<\/li>\n\n\n\n<li>The printed worksheet theme doesn&#8217;t show the marks for a part when it&#8217;s the only part in the question, since the question total is also displayed. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1019\">issue<\/a>)<\/li>\n\n\n\n<li>When serialising variable values for SCORM, integer and rational values aren&#8217;t wrapped in <code>with_precision<\/code>, so they&#8217;re restored as the same type. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1025\">issue<\/a>)<\/li>\n\n\n\n<li>The student&#8217;s name is shown on the exam front page, if it&#8217;s known. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1026\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed two bugs where <code>decimal<\/code> values substituted into the expected answer for a mathematical expression part would have scientific notation evaluated incorrectly. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1027\">issue 1<\/a>, <a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1053\">issue 2<\/a>)<\/li>\n\n\n\n<li><code>Numbas.jme.display.simplify<\/code> returns an empty string if the input expression is undefined, instead of throwing an error. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/785\">issue<\/a>)<\/li>\n\n\n\n<li>There&#8217;s a link to the student-facing accessibility statement in the &#8220;display options&#8221; modal. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1015\">issue<\/a>)<\/li>\n\n\n\n<li>If the answer to a mathematical expression part is a formula, equals signs are replaced with the <code>isclos<\/code>e function, to allow some room for floating-point error. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1014\">issue<\/a>)<\/li>\n\n\n\n<li>&#8220;Invalid input&#8221; warnings for custom part types aren&#8217;t removed when you submit the answer. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1033\">issue<\/a>)<\/li>\n\n\n\n<li>Each input element now has a unique ID, which allows them to be referred to by other elements, to help accessibility. The mathematical expression part&#8217;s preview rendering is contained in an <code>&lt;output&gt;<\/code> tag, so it&#8217;s more semantically linked. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/997\">issue<\/a>)<\/li>\n\n\n\n<li>Ioulia Lallou made it so that pressing the <kbd>Esc<\/kbd> key hides warnings associated with the active answer input field. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/pull\/1035\">pull request<\/a>)<\/li>\n\n\n\n<li>The default theme uses <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/Using_CSS_custom_properties\">CSS custom properties<\/a> <code>--line-height<\/code> and <code>--spacing<\/code> to control the line-height of text and general spacing, so they can be more easily changed. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/10546610873a35e63f69d659c51d3119a88553f7\">code<\/a>)<\/li>\n\n\n\n<li>The page now uses <code>grid<\/code> layout, fixing a few problems that arose on very small screens and improving scrolling. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1030\">issue<\/a>)<\/li>\n\n\n\n<li>The default theme automatically replaces <code>&lt;img&gt;<\/code> tags loading SVG files with an <code>&lt;object&gt;<\/code> tag, so that the structure of the SVG figure can be navigated by assistive technology. If the <code>&lt;img&gt;<\/code> tag has alt text, it&#8217;s used as the accessible label for the <code>&lt;object&gt;<\/code> tag, so it&#8217;s not lost. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1034\">issue<\/a>)<\/li>\n\n\n\n<li>The browser&#8217;s <code>prefer-reduced-motion<\/code> preference is respected, so animations don&#8217;t happen when preferred. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/b7ca6b0439f34394d97e06fbbfaa67a5e0a966b3\">code<\/a>)<\/li>\n\n\n\n<li>In the default theme, the text of info pages such as the &#8220;pause&#8221; screen is centred in the viewport. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/21befcb6a98a6138351815a4526b4ac4ab0a4ca5\">code<\/a>)<\/li>\n\n\n\n<li>The question list and breadcrumbs for explore mode questions mark the active item for assistive technology. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/a32c1c91f549db6957e65aae5379c48679657f00\">code<\/a>)<\/li>\n\n\n\n<li>An error is thrown if an explore mode question has no parts defined. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/e33d64c234f7fdbc418e02408c83f0055253b40a\">code<\/a>)<\/li>\n\n\n\n<li>There&#8217;s some more space between items in an explore mode question&#8217;s part breadcrumbs, so they&#8217;re more obviously separate and easier to click on. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/8f7349c3155005d7cd93801ba48b552b3b9606ca\">code<\/a>)<\/li>\n\n\n\n<li>Times displayed in the default theme are also given in machine-readable form, which assistive technology can use. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/873158b43cdce8dd297bff07ed9365e2ef3c0092\">code<\/a>)<\/li>\n\n\n\n<li>Kalanithi J P added definitions of the <code>min<\/code> and <code>max<\/code> functions for ranges. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/pull\/1038\">pull request<\/a>)<\/li>\n\n\n\n<li>The box of controls at the bottom of the question content has a label that will be read by assistive technology. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/83a2e9d61f763c9ab75d1e5932f41c13f9a2710b\">code<\/a>)<\/li>\n\n\n\n<li>The whole part feedback box isn&#8217;t read out automatically when you submit a part any more. This led to an unintelligible stream of screen reader announcements when revealing the answers to a question. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/830\">issue<\/a>)<\/li>\n\n\n\n<li>Custom functions written in JavaScript don&#8217;t look for variable references inside their definitions any more, only in their arguments. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/781\">issue<\/a>)<\/li>\n\n\n\n<li>Laura made a small fix to the Makefile used during development so it works on a standard Windows installation. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/8612079821438d3d6cc9ef7f1cfd3ed49a9107a8\">code<\/a>)<\/li>\n\n\n\n<li>Christian Arteaga contributed some more Spanish translations. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/pull\/1040\">pull request<\/a>)<\/li>\n\n\n\n<li>Fixed a bug where the &#8220;number&#8221; answer input type for custom part types would appear changed when it shouldn&#8217;t. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/c83e143ef488f1b34e4690c80c2338d23b5934bf\">code<\/a>)<\/li>\n\n\n\n<li>The default theme shows a progress bar above the list of questions, showing the number of answered questions. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1043\">issue<\/a>)<\/li>\n\n\n\n<li>The check for whether an expression is deterministic always returns true for safe strings, without looking at any variable substitutions inside. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/3c4c7bb774ae6882c4f965f3c2f079afb8c644b3\">issue<\/a>)<\/li>\n\n\n\n<li>The default theme uses <code>autocomplete=\"off\"<\/code> on text answer inputs, to ensure the browser doesn&#8217;t suggest any answers. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1045\">issue<\/a>)<\/li>\n\n\n\n<li>The Numbas LTI provider can now disable the time limit entirely for an individual attempt. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/288\">issue<\/a>)<\/li>\n\n\n\n<li>The number of times to check the variable testing condition is always at least 1. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1049\">issue<\/a>)<\/li>\n\n\n\n<li>The default theme&#8217;s sidebar layout has been rejigged. It now always fills the available height, and doesn&#8217;t scroll with the question content. The list of questions scrolls independently. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1051\">issue<\/a>)<\/li>\n\n\n\n<li>The JME functions <code>ln<\/code>, <code>exp<\/code> and <code>arg<\/code> have definitions for <code>decimal<\/code> values, and the logarithm of a negative number always produces a complex value. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1059\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug in the default theme where not all parts in an explore mode question were visible in review mode. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/9917c73fcd2329963e292b0c6fb29d909216225f\">code<\/a>)<\/li>\n\n\n\n<li>Stu Murray added an option to require the student to write something before they can end the exam, so they don&#8217;t mistakenly end an attempt. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/515\">issue<\/a>, <a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/exam\/reference.html#term-Require-written-confirmation-before-leaving-the-exam\">documentation<\/a>)<\/li>\n\n\n\n<li>The <a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/accessibility\/exam.html#compatibility-with-browsers\">exam accessibility statement<\/a> now links to an up-to-date table of browser compatibility, based on the features used by the runtime and default theme.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Numbas editor<\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/editor\/releases\/tag\/v7.2\">v7.2 of the Numbas editor on GitHub<\/a>.<\/p>\n\n\n\n<ul>\n<li>George Li improved the JME value preview for nested lists. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/556\">issue<\/a>)<\/li>\n\n\n\n<li>I improved the preview text for <code>range<\/code> values. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/786\">issue<\/a>)<\/li>\n\n\n\n<li>Our student intern Janet Cheung removed the placeholder text from new choices in multiple choice parts, so you can start typing in them straight away. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/777\">issue<\/a>)<\/li>\n\n\n\n<li>Adaptive marking part references refer to parts by a unique ID, so that they don&#8217;t break when you add, remove or move parts. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/787\">issue<\/a>)<\/li>\n\n\n\n<li>The variable testing condition stops as soon as there&#8217;s an error generating a variable value, so you can see exactly where the error occurred. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/790\">issue<\/a>)<\/li>\n\n\n\n<li>MathJax doesn&#8217;t process the &#8220;generated value&#8221; box in the variable editor, so you can see raw LaTeX code in strings. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/782\">issue<\/a>)<\/li>\n\n\n\n<li>When you have focused a non-editable content area with the keyboard, pressing <kbd>Enter<\/kbd> makes it editable. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/789\">issue<\/a>)<\/li>\n\n\n\n<li>When defining several variables by destructuring a list, the &#8220;generated value&#8221; box shows each variable separately. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/768\">issue<\/a>)<\/li>\n\n\n\n<li>The &#8220;reveal answers to all questions&#8221; feedback setting is always visible, regardless of the exam&#8217;s navigation mode. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/766\">issue<\/a>)<\/li>\n\n\n\n<li>MathJax typesets LaTeX in the part feedback produced in the testing tab. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/9f715af7ce509c244099b086c354dbd9972345cf\">code<\/a>)<\/li>\n\n\n\n<li>In the part testing tab, the final score and feedback for gap-fill parts are shown. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/753\">issue<\/a>)<\/li>\n\n\n\n<li>When you change the location of an extension, its source files are moved to the new location. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/718\">issue<\/a>)<\/li>\n\n\n\n<li>Stu Murray fixed a small typo in the documentation. A valuable contribution! (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/fe5641eebf97a9ce50a4dd23e5e46ba3a5b9fbf2\">code<\/a>)<\/li>\n\n\n\n<li>Focused elements always get the browser&#8217;s default outline style. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/794\">issue<\/a>)<\/li>\n\n\n\n<li>When deleting a file from a theme or extension, the sidebar with the file tree is shown, to give you some context. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/244969678e85de4fe53db3f81734e6044fea6412\">code<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Extensions<\/h3>\n\n\n\n<ul>\n<li>Updated JSXGraph to 1.6.2. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-jsxgraph\/commit\/8a36b34\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug in the programming extension&#8217;s code editor where pressing <kbd>Enter<\/kbd> would submit the answer instead of starting a new line. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/issues\/29\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug in the code editor where the cursor would sometimes move back to the start of the text. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/issues\/19\">issue<\/a>)<\/li>\n\n\n\n<li>Janet Cheung added some functions for binning data to the stats extension. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1020\">issue<\/a>, <a href=\"https:\/\/github.com\/numbas\/numbas-extension-stats#data-binning\">documentation<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"lti-provider\">Numbas LTI provider<\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/releases\/tag\/v3.4\">v3.4 of the Numbas LTI provider on GitHub<\/a>.<\/p>\n\n\n\n<ul>\n<li>Fixed an error in the documentation for Safe Exam Browser: the config key is in the &#8220;Exam&#8221; tab, not &#8220;Browser&#8221;. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/dae4f9723ee15248d1f076135c694c83cc78242d\">code<\/a>)<\/li>\n\n\n\n<li>Restored the code to automatically launch the lockdown app. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/276\">issue<\/a>)<\/li>\n\n\n\n<li>Removed &#8220;executable&#8221; permission from some source files that shouldn&#8217;t have it. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/279\">issue<\/a>)<\/li>\n\n\n\n<li>Avoided a bug in SEB on mac which led to it not recognising the quit URL when it has a query parameter added. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/281\">issue<\/a>)<\/li>\n\n\n\n<li>In an access change, you can choose to disable the time limit entirely. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/288\">issue<\/a>)<\/li>\n\n\n\n<li>The times associated with attempt data are sent back to the server with time zone information attached. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/296\">issue<\/a>)<\/li>\n\n\n\n<li>Attempt launch records are correctly created when the user is anonymous. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/bfb66dbebe48f8809d7fc12981f0105d3ec9a66d\">code<\/a>)<\/li>\n\n\n\n<li>Attempt data is loaded through a separate request from the browser, instead of being embedded in the page. This fixes several timing errors. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/266\">issue<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Moodle Numbas SCORM report<\/h2>\n\n\n\n<p>I fixed a typo in the Moodle Numbas SCORM report which affected parts with steps. (<a href=\"https:\/\/github.com\/numbas\/moodle-scormreport_numbas\/commit\/d4a7d8b\">code<\/a>)<\/p>\n\n\n\n<p>Note that Moodle broke their links to custom SCORM reports in version 4.0, so you can&#8217;t access the Numbas SCORM report at the moment. There&#8217;s <a href=\"https:\/\/tracker.moodle.org\/browse\/MDL-75821\">an open item in their bug tracker about this<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s a development update, covering everything that&#8217;s changed since July. I spent a lot of time on the Summer working on our other project, Chirun. I wrote a new LTI 1.3-compliant tool, to make it easier to embed Chirun material in our virtual learning environment. That&#8217;s now in use at Newcastle, and I&#8217;m looking for [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2065"}],"collection":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/comments?post=2065"}],"version-history":[{"count":8,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2065\/revisions"}],"predecessor-version":[{"id":2076,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2065\/revisions\/2076"}],"wp:attachment":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/media?parent=2065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/categories?post=2065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/tags?post=2065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}