Replace element id
s with custom attributes in the xfaLayer
We want to avoid adding regular `id`s to xfaLayer-elements, since that means that they become "linkable" through the URL hash in a way that's not supported/intended. This could end up clashing with "named destinations", and that could easily lead to bugs; see issue 11499 and PR 11503 for some context. Rather than using `id`s, we'll instead use a *custom* `data-element-id` attribute such that it's still possible to access the DOM-elements directly if needed. *Please note:* This is basically the xfaLayer-equivalent of PR 15057.
This commit is contained in:
parent
fb1340f74b
commit
4b7bf74da2
@ -107,28 +107,34 @@ class XfaLayer {
|
||||
attributes.name = `${attributes.name}-${intent}`;
|
||||
}
|
||||
for (const [key, value] of Object.entries(attributes)) {
|
||||
// We don't need to add dataId in the html object but it can
|
||||
// be useful to know its value when writing printing tests:
|
||||
// in this case, don't skip dataId to have its value.
|
||||
if (value === null || value === undefined || key === "dataId") {
|
||||
if (value === null || value === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key !== "style") {
|
||||
if (key === "textContent") {
|
||||
html.textContent = value;
|
||||
} else if (key === "class") {
|
||||
switch (key) {
|
||||
case "class":
|
||||
if (value.length) {
|
||||
html.setAttribute(key, value.join(" "));
|
||||
}
|
||||
} else {
|
||||
if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) {
|
||||
continue; // Handled below.
|
||||
break;
|
||||
case "dataId":
|
||||
// We don't need to add dataId in the html object but it can
|
||||
// be useful to know its value when writing printing tests:
|
||||
// in this case, don't skip dataId to have its value.
|
||||
break;
|
||||
case "id":
|
||||
html.setAttribute("data-element-id", value);
|
||||
break;
|
||||
case "style":
|
||||
Object.assign(html.style, value);
|
||||
break;
|
||||
case "textContent":
|
||||
html.textContent = value;
|
||||
break;
|
||||
default:
|
||||
if (!isHTMLAnchorElement || (key !== "href" && key !== "newWindow")) {
|
||||
html.setAttribute(key, value);
|
||||
}
|
||||
html.setAttribute(key, value);
|
||||
}
|
||||
} else {
|
||||
Object.assign(html.style, value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,8 +146,7 @@ class XfaLayer {
|
||||
);
|
||||
}
|
||||
|
||||
// Set the value after the others to be sure overwrite
|
||||
// any other values.
|
||||
// Set the value after the others to be sure to overwrite any other values.
|
||||
if (storage && attributes.dataId) {
|
||||
this.setupStorage(html, attributes.dataId, element, storage);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user