Skip to content

PG 2.21 Release Candidate#1393

Open
drgrice1 wants to merge 246 commits into
mainfrom
PG-2.21
Open

PG 2.21 Release Candidate#1393
drgrice1 wants to merge 246 commits into
mainfrom
PG-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 July 11, 2025 06:36
`maketext` is not defined in the Translator package, and so it cannot be
called directly in the default graders defined in the translator.
Instead an eval is needed to access the `maketext` in the safe
compartment.

This fixes issue #1261.
Also fixes spelling of SYNOPSIS
…oblems.

This extends @sfiedle1's work in #1258, and implements the structural
rework that I suggested in the conversation for that pull request
(albeit slightly modified).

There are two new options for the `draggableSubsets.pl` macro.  They are
`ShowUniversalSet` and `UniversalSetLabel`.

If `ShowUniversalSet` is 1, then the set of all elements that are passed
as the first argument for the `DraggableSubsets` method will be shown as
a separate drag and drop bucket.  This bucket is always above the other
usual drag and drop buckets (both in HTML and TeX).  The elements of the
universal set can be dragged multiple times to the other buckets.
Really this is a copy of the element, so all elements always remain in
the universal set.

The `UniversalSetLabel` option is a string that will be shown as the
label of the universal set bucket.

Note that this approach doesn't require any special handling for grading
the answer regardless of if `$showPartialCorrectAnswers` is true or not,
because the universal set bucket is not part of the answer in any case.
It is not listed in any of the answer previews, and is not part of the
grading in any way. It is purely a source of elements.

I also added some validation of the answers and default subsets that are
passed to the DraggableSubsets method.  Previously invalid inputs would
have caused rather unexpected things.  Now they will be errors
(specifically `Value::Error`s).

In my original comment to #1258 I suggested a `ShowUniversalSet` option
and a related `AllowReusableElements` option.  The latter option was
dropped because I realized it doesn't really make sense in the context
of a universal set. I initially implemented it, but basically it made
the "universal set" bucket really just a regular bucket just like all of
the others, and it really wasn't a "universal set" anymore since it
didn't always have all elements. I thought of a way that it could make
sense in which it always has all elements, but only one copy was allowed
to be dragged to the other buckets.  So only one duplicate, no reuse
after that.  That would take some effort to implement (mostly in the
javascript code), but could be done. I don't know that this would really
be that useful though, so I didn't implement it for now.

A MWE for testing this is as follows:

```perl
DOCUMENT();

loadMacros(qw{PGstandard.pl PGML.pl draggableSubsets.pl PGcourse.pl});

$draggable = DraggableSubsets(
    [ 'orange', 'blue', 'apple' ],
    [ [ 0, 1 ], [ 0, 2 ] ],
    DefaultSubsets => [
        { label => 'Color', indices => [] },
        { label => 'Fruit', indices => [] },
    ],
    ShowUniversalSet  => 1,
    UniversalSetLabel =>
        'Classify each item below as a color, fruit, or both.',
    AllowNewBuckets => 0
);

BEGIN_PGML
[_]{$draggable}
END_PGML

ENDDOCUMENT();
```

To test this you should also test modifications of the above problem
with other options.  For example, change to `AllowNewBuckets => 1`, and
test addition and removal of buckets particularly removal after elements
have been added to the bucket.  Add indices to the `DefaultSubsets` so
elements are initially shown in those and behavior when elements are
dragged in an out.
`draggableSubsets.pl` macro consistent with what is documented.

Add `options.sort = false` for the universal set so that it can not be
rearranged from what it is set to.  This is for transparency since this
doesn't matter anyway.
There are some new strings that have not been added to the pot file.
66% of minimum 1% translated source file: 'pg.pot'
on 'el'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format
84% of minimum 1% translated source file: 'pg.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
41% of minimum 1% translated source file: 'pg.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
11% of minimum 1% translated source file: 'pg.pot'
on 'es'.

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

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format
4% of minimum 1% translated source file: 'pg.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
22% of minimum 1% translated source file: 'pg.pot'
on 'de'.

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

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format
4% of minimum 1% translated source file: 'pg.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
9% of minimum 1% translated source file: 'pg.pot'
on 'hu'.

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: 'pg.pot'
on 'tr'.

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: 'pg.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
don't let a negative score be reported
Rewrite the PG uniq function to return the array in a consistent order
This fixes two issues with a check in BeginList; first, it accessed a parameter without checking it if existed first, resulting in undefined value warnings; and second it tested the validity of the uppercase version of the parameter but then used the literal parameter in the assignment.
somiaj and others added 30 commits May 19, 2026 16:33
Add keyboard controls for drag and drop problems.
fix a typo and clarify some POD
Add method to load texPackages and tikzLibraries to Plots
Co-authored-by: Glenn Rice <47527406+drgrice1@users.noreply.github.com>
Add an html attributes option to essay boxes
flash feedback message badges
All are updated to the latest versions except for iframe-resizer.  There
are no changes to the code needed for our usage of these libraries.

Note that this includes the update to `@openwebwork/mathquill` in #1416,
so that pull request is not needed with this.
Update npm dependencies to latest versions.
Update MathQuill to version 0.11.2 with the MathFunction copy/paste fix.
Fix elementary Matrix construction bug
add cancel package to pg.sty
empty node following booktabs rules
Lockfile version 3 has been supported since node version 18 (and npm
version 7).  So there is no need to stay with lockfile version 2
anymore. The only real change it seems is that the `dependencies`
section is removed. This means that the file is about 1100 lines
shorter!
Switch `package-lock.json` to lockfile version 3.
These are changes needed to use the new internal toolbar implemented in
openwebwork/mathquill#46.  To test this you need
to use that branch. Clone that branch somewhere on the webwork2 server,
and then in the directory of that clone execute

```bash
npm ci
npm run build
npm link
```

Then in the `pg/htdocs` directory run `npm link @openwebwork/mathquill`.
After doing so if you look at `pg/htdocs/node_modules/@openwebwork/mathquill`
you will see that it is now a link to the MathQuill clone above.

Execute `npm ci` again to reset that back to the currently published
MathQuill version.

Once openwebwork/mathquill#46 is merged, I will
publish it and add it to this pull request.  So don't merge this pull
request until then.
Update the mqeditor to use MathQuill's new internal toolbar.
method to set a particular entry in a matrix to a value
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.

10 participants