Skip to content

WeBWorK 2.21 Release Candidate#2940

Open
drgrice1 wants to merge 513 commits into
mainfrom
WeBWorK-2.21
Open

WeBWorK 2.21 Release Candidate#2940
drgrice1 wants to merge 513 commits into
mainfrom
WeBWorK-2.21

Conversation

@drgrice1

Copy link
Copy Markdown
Member

This is the release candidate for WeBWorK 2.21. Please re-target any pull requests that you want to get into the release for this branch.

drgrice1 and others added 30 commits March 16, 2026 18:06
Node 18 is deprecated, and our dependencies now require node 20 or
newer.
This is the result of executing the
`bin/dev_scripts/update-localization-files` script.
Make `check_modules.pl` check for node version 20 or newer.
…-version

Change the version of the `bs-color-scheme.js` MathJax extension.
Clarify messages in extension achievement items when reduced scoring is enabled
The PG messages are now dealt with completely separately from the
webwork2 general warning handling. Furthermore PG warnings and debug
messages are separately dealt with.

The PG `internal_debug_messages` are no longer dealt with at all.  They
are unnecessary and inappropriately named, and will be removed from PG.

Also, handling of the warnings is now much more consistent in all of
the different places that problems are rendered. In fact, they all use
the new `templates/ContentGenerator/Base/problem_warning_and_debug_output.html.ep`
template for this.

All of this output is no longer wrapped in a `code` tag.  That is the
wrong thing for this. None of it is code. It also causes problems with
openwebwork/pg#1384.
Yes, this is the same one the dependabot pointed out for the main
branch.
Fix an npm dependency security vulnerability.
The `switchToBSStyle` method should be called on the `commonStyles` key
of the `CHTML` object rather than the object itself (which is actually a
function).
Fix an issue with MathJax CHTML mode.
Rework PG error/warning/debug message handling.
Add a point input field to set the problem score in the ProblemGrader.
This is the same as what is being used in the SingleProblemGrader,
and honors the same setting to show it or not. The input uses
JavaScript to update the actual score which is what is submitted
when the grader is saved. If the percent score is not shown, a hidden
field is used instead.

This also adds a step of 1 to the percent score and validation on
both the percent score and point score values.
Add point input to ProblemGrader.
First, remove the `div` with the `mb-3` class that I added to the `Email
Instructor` button in #2935.  I added it so that warnings or debug
messages are appropriately spaced after the button on the problem page.
However, the `feedback_macro_email.html.ep` template is used in other
places for which that margin causes issues (for example on the problem
set page).  Instead the `div` is added on the problem page, if the
button is to be shown.

Note that `problemFooter` div has been removed, since that isn't even
doing anything.

Also, the database access in the `output_past_answer_button` is skipped
if the button is not to be shown. I just saw this while working on the
area and realized that is bad.

Finally, the `h4` for the header of the achievement rewards dialog is
changed to an `h1`.  The css `h4` class is used to give the header the
same size and style.  Note that structurally a "modal dialog represents
its own separate document/context, so the .modal-title should ideally be
an `<h1>`." That is quoted from bootstraps [modal dialog
documentation](https://getbootstrap.com/docs/5.3/components/modal/).
show desired course ID in messages for when course does not exist
Fix some layout and validation issues.
With the current code if you are in a month that does not have a day
(such as April that does not have the 31st), one of those days is
selected in another month that does have that day, and you click the
"Today" button, then it doesn't go to today.  Instead it goes to the
date of today in the next month.  This is because the code sets the
year, month, and day for today on the selected date object and in that
order, and uses the modified selected date to set the flatpickr date.
So for example, if today is April 7, 2026, and the selected date is July
31, 2026, then the selected date's year is set to 2026, then the month
set to April.  So at that point the selected date is April 31, 2026,
which really becomes May 1, 2026.  Then the day is set, and so you get
May 7, 2026.

This fixes the issue by starting with todays date at 12:00 am, and then
setting the time of todays date to the time of the selected date, and
then using that to set the flatpickr date.
… page.

Currently that style is defined in the `system.scss` and is not scoped.
As a result it applies to most content generator pages of webwork2.  In
particular it applies to problem pages, and thus it affects draggable
proof problems which use the same sortablejs library with that same css
class.

Note that a related pull request to PG will change the styles for drag
and drop problems and this conflicts with that.  This is probably
already a problem because the opacity of 0.5 does make the drag and drop
elements in problems lack sufficient contrast. Although it only occurs
during a mouse drag and in that situation perhaps that contrast is not
necessary. Still I think there is a better way to do this for problems.

On a related note to the PG pull request, perhaps at some point keyboard
support should be added for reorganizing problems on the problem set
detail page.
When saving a problem in a new location in the PGProblemEditor,
add an option to copy auxiliary files or not. Since it is not
possible to determine what files are needed, all auxiliary files
were copied in all cases. This allows the user to uncheck the
"Copy auxiliary files" option to not copy any auxiliary files.

The default option is to copy auxiliary files which has not
changed. This only allows the user to disable that if they are
sure no auxiliary files are needed.

This also adds a check so the message about auxiliary files
being copied only shows if at least one file was copied.
Updated packages have been published, and this just updates the
package.json file to point to the latest version.

The dependencies of the `pg-codemirror-editor` and `codemirror-lang-pg`
packages were updated (largely to deal with security vulnerabilities in
the dependencies).

There is also a bug fixed with builtin operator names occuring as the
key of a hash. For example, the keys of the following hash are builtin
operators, but should not be interpreted as such in this context.

```perl
%hash = (
    step    => 1,
    defined => 1,
    split   => 1
);
```

Since they were the hask key value pair was not parsing, and so all
syntax highlighting after it is messed up.

The first key `step` is a PG operator, the second `defined` is a Perl
named unary operator, the third `split` is a Perl list operator.  Of
course any of the other PG operators, Perl named unary operators, or
Perl list operators had the same problem since they are all handled in
the code by the same external tokenizer.
This adds some spacing between the set link and the info icon to
make it accessible on small touch screens to give enough space to
touch the icon without hitting the link instead.
There is no longer a `pgwarning` key set on the controller object for
the `lib/WeBWorK/ContentGenerator/Problem.pm` module and never was a
`pgwarning` key for the returned pg object in the
`lib/ContentGenerator/GatewayQuiz.pm` module.  So use the correct key on
the returned pg object in both cases.  That is the `warning_messages`
key.

The warning messages were still being shown at the bottom, but not the
message at the top of the page notifying of the existence of those
warnings.  Since the warnings at the bottom might not be visible, the
warnings may be missed.
Alex-Jordan and others added 30 commits July 14, 2026 15:23
Build the library browser alert toast with DOM methods to avoid DOM XSS
There have been some string changes, and so it would be good to do this
again before the release.  Once this merged and synchronized to develop,
then Transifex will pull the changes.  Then I will pull all of the
language `.po` files back to the release candidate.
5% of minimum 1% translated source file: 'webwork2.pot'
on 'ru_RU'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
6% of minimum 1% translated source file: 'webwork2.pot'
on 'tr'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…2f0efb

Updates for file lib/WeBWorK/Localize/webwork2.pot in ru_RU [Manual Sync]
Translate webwork2.pot in tr [Manual Sync]
11% of minimum 1% translated source file: 'webwork2.pot'
on 'fr'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
9% of minimum 1% translated source file: 'webwork2.pot'
on 'es'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…c29bdb

Updates for file lib/WeBWorK/Localize/webwork2.pot in fr [Manual Sync]
10% of minimum 1% translated source file: 'webwork2.pot'
on 'ko'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…225881

Updates for file lib/WeBWorK/Localize/webwork2.pot in es [Manual Sync]
38% of minimum 1% translated source file: 'webwork2.pot'
on 'el'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…e80e68

Updates for file lib/WeBWorK/Localize/webwork2.pot in ko [Manual Sync]
6% of minimum 1% translated source file: 'webwork2.pot'
on 'zh_CN'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…41b207

Updates for file lib/WeBWorK/Localize/webwork2.pot in el [Manual Sync]
31% of minimum 1% translated source file: 'webwork2.pot'
on 'fr_CA'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…86f39c

Updates for file lib/WeBWorK/Localize/webwork2.pot in zh_CN [Manual Sync]
…ca662b

Updates for file lib/WeBWorK/Localize/webwork2.pot in fr_CA [Manual Sync]
5% of minimum 1% translated source file: 'webwork2.pot'
on 'cs_CZ'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
5% of minimum 1% translated source file: 'webwork2.pot'
on 'zh_HK'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…09b01c

Updates for file lib/WeBWorK/Localize/webwork2.pot in cs_CZ [Manual Sync]
11% of minimum 1% translated source file: 'webwork2.pot'
on 'hu'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…881df7

Updates for file lib/WeBWorK/Localize/webwork2.pot in hu [Manual Sync]
…9ae7d9

Updates for file lib/WeBWorK/Localize/webwork2.pot in zh_HK [Manual Sync]
21% of minimum 1% translated source file: 'webwork2.pot'
on 'de'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…a555ba

Updates for file lib/WeBWorK/Localize/webwork2.pot in de [Manual Sync]
47% of minimum 1% translated source file: 'webwork2.pot'
on 'he_IL'.

Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
…fe77ba

Updates for file lib/WeBWorK/Localize/webwork2.pot in he_IL [Manual Sync]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants