Cover the regression hinted at in review: an already /pl/-prefixed link
must not be prefixed a second time now that pl is part of the language
pattern.
Polish (pl) was missing from the hand-maintained language regexes, so
getLanguageFromUrl() returned en for /pl/... pages and the UI fell back
to English after the initial server-rendered Polish content.
Derive the pattern from supportedLanguages so new locales cannot be
missed again, and cover Polish in getLanguageFromUrl(), changeLanguage()
and rewriteLinks() with regression tests.
Refs #972
Reset, FAQ and Close in PDF Multi Tool and the PDF Workflow toolbar lose
their text on small screens, leaving only an icon. Give them a title so
the action can still be identified on hover.
Multi Tool reuses existing translation keys. PDF Workflow is English
only, so its titles are plain text like its labels.
Fixes#879
Treat an MD5 or SHA-1 messageImprint as an insecure digest and show the
imprint algorithm in Technical Details.
Ignore Reason, Location, ContactInfo and Name on document timestamps, as
ISO 32000-2 Table 255 requires for ETSI.RFC3161.
The insecure digest status could not be reached because such results are
never valid, so these cards read "Invalid Signature". Show it in the
invalid branch instead.
PDFs whose only signature is an RFC 3161 document timestamp
(/Type /DocTimeStamp, /SubFilter /ETSI.RFC3161) were reported as having
no signatures, because timestamp dictionaries were skipped on purpose.
node-forge also cannot parse a timestamp token directly, since it only
accepts SignedData that wraps plain data.
Timestamps are now extracted and flagged as such. The TSTInfo is read
from the token, and verification checks that its messageImprint matches
the signed byte range and that the TSA signature covers the TSTInfo.
The timestamp's genTime is shown as the date, and the result card uses
timestamp wording.
Fixes#952
Tools that combine several files into a single PDF used the upload
order as the page order, with no way to change it short of clearing
and re-adding files. Each file row now has a drag handle, and the
new order is used when the PDF is built.
Applies to the JPG, PNG, WebP, BMP, HEIC, SVG, TIFF, Image and TXT
to PDF tools. The shared logic lives in utils/sortable-file-list.ts
(built on the existing sortablejs dependency) instead of being
duplicated per page.