XFA - Add <a> element in button when an url is detected (bug 1716758)

- it aims to fix https://bugzilla.mozilla.org/show_bug.cgi?id=1716758;
  - some buttons have a JS action with the pattern `app.launchURL(...)` (or similar) so extract when it's possible the url and generate a <a> element with the href equals to the found url;
  - pdf.js already had some code to handle that so this patch slightly refactor that.
This commit is contained in:
Calixte Denizet 2021-09-25 14:46:40 +02:00
parent 3b1d547738
commit 558e58f354
8 changed files with 173 additions and 44 deletions

View file

@ -26,10 +26,14 @@ import {
$toStyle,
XFAObject,
} from "./xfa_object.js";
import {
addDefaultProtocolToUrl,
tryConvertUrlEncoding,
} from "../core_utils.js";
import { createValidAbsoluteUrl, warn } from "../../shared/util.js";
import { getMeasurement, stripQuotes } from "./utils.js";
import { selectFont } from "./fonts.js";
import { TextMeasure } from "./text.js";
import { warn } from "../../shared/util.js";
function measureToString(m) {
if (typeof m === "string") {
@ -633,11 +637,24 @@ function setFontFamily(xfaFont, node, fontFinder, style) {
}
}
function fixURL(str) {
if (typeof str === "string") {
let url = addDefaultProtocolToUrl(str);
url = tryConvertUrlEncoding(url);
const absoluteUrl = createValidAbsoluteUrl(url);
if (absoluteUrl) {
return absoluteUrl.href;
}
}
return null;
}
export {
computeBbox,
createWrapper,
fixDimensions,
fixTextIndent,
fixURL,
isPrintOnly,
layoutClass,
layoutNode,