Use modern DOM methods a bit more (PR 15031 follow-up)
Apparently the ESLint rule added in PR 15031 wasn't able to catch all cases that can be converted, which is probably not all that surprising given how some of these call-sites look. - Use `Element.prepend()` to insert nodes before all other ones in the element, rather than using `firstChild` with `insertBefore`-calls; see https://developer.mozilla.org/en-US/docs/Web/API/Element/prepend - Fix one *incorrect* `insertBefore` call, in the AnnotationLayer-code. Initially the patch simply changed that to an `Element.before()`-call, however that broke one of the integration-tests. It turns out that the `index` may try to access a non-existent select-child, which triggers undefined behaviour; note the warning in https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore#parameters
This commit is contained in:
parent
1a6ae5f034
commit
4902ad8923
3
external/webL10n/l10n.js
vendored
3
external/webL10n/l10n.js
vendored
@ -27,6 +27,7 @@
|
|||||||
- Removes window._ assignment.
|
- Removes window._ assignment.
|
||||||
- Remove compatibility code for OldIE.
|
- Remove compatibility code for OldIE.
|
||||||
- Replaces `String.prototype.substr()` with `String.prototype.substring()`.
|
- Replaces `String.prototype.substr()` with `String.prototype.substring()`.
|
||||||
|
- Replaces one `Node.insertBefore()` with `Element.prepend()`.
|
||||||
- Removes `fireL10nReadyEvent` since the "localized" event it dispatches
|
- Removes `fireL10nReadyEvent` since the "localized" event it dispatches
|
||||||
is unused and may clash with an identically named event in the viewer.
|
is unused and may clash with an identically named event in the viewer.
|
||||||
*/
|
*/
|
||||||
@ -921,7 +922,7 @@ document.webL10n = (function(window, document, undefined) {
|
|||||||
// first element child.
|
// first element child.
|
||||||
if (!found) {
|
if (!found) {
|
||||||
var textNode = document.createTextNode(data[gTextProp]);
|
var textNode = document.createTextNode(data[gTextProp]);
|
||||||
element.insertBefore(textNode, element.firstChild);
|
element.prepend(textNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete data[gTextProp];
|
delete data[gTextProp];
|
||||||
|
@ -1499,7 +1499,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
|
|||||||
noneOptionElement.value = " ";
|
noneOptionElement.value = " ";
|
||||||
noneOptionElement.setAttribute("hidden", true);
|
noneOptionElement.setAttribute("hidden", true);
|
||||||
noneOptionElement.setAttribute("selected", true);
|
noneOptionElement.setAttribute("selected", true);
|
||||||
selectElement.insertBefore(noneOptionElement, selectElement.firstChild);
|
selectElement.prepend(noneOptionElement);
|
||||||
|
|
||||||
removeEmptyEntry = () => {
|
removeEmptyEntry = () => {
|
||||||
noneOptionElement.remove();
|
noneOptionElement.remove();
|
||||||
@ -1573,13 +1573,16 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
|
|||||||
},
|
},
|
||||||
insert(event) {
|
insert(event) {
|
||||||
const { index, displayValue, exportValue } = event.detail.insert;
|
const { index, displayValue, exportValue } = event.detail.insert;
|
||||||
|
const selectChild = selectElement.children[index];
|
||||||
const optionElement = document.createElement("option");
|
const optionElement = document.createElement("option");
|
||||||
optionElement.textContent = displayValue;
|
optionElement.textContent = displayValue;
|
||||||
optionElement.value = exportValue;
|
optionElement.value = exportValue;
|
||||||
selectElement.insertBefore(
|
|
||||||
optionElement,
|
if (selectChild) {
|
||||||
selectElement.children[index]
|
selectChild.before(optionElement);
|
||||||
);
|
} else {
|
||||||
|
selectElement.append(optionElement);
|
||||||
|
}
|
||||||
storage.setValue(id, {
|
storage.setValue(id, {
|
||||||
value: getValue(event, /* isExport */ true),
|
value: getValue(event, /* isExport */ true),
|
||||||
items: getItems(event),
|
items: getItems(event),
|
||||||
|
@ -87,7 +87,7 @@ class BaseTreeViewer {
|
|||||||
this._toggleTreeItem(div, shouldShowAll);
|
this._toggleTreeItem(div, shouldShowAll);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
div.insertBefore(toggler, div.firstChild);
|
div.prepend(toggler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,7 +51,7 @@ class OverlayManager {
|
|||||||
const style = document.createElement("style");
|
const style = document.createElement("style");
|
||||||
style.textContent = PDFJSDev.eval("DIALOG_POLYFILL_CSS");
|
style.textContent = PDFJSDev.eval("DIALOG_POLYFILL_CSS");
|
||||||
|
|
||||||
document.head.insertBefore(style, document.head.firstElementChild);
|
document.head.prepend(style);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ class TextHighlighter {
|
|||||||
let div = textDivs[divIdx];
|
let div = textDivs[divIdx];
|
||||||
if (div.nodeType === Node.TEXT_NODE) {
|
if (div.nodeType === Node.TEXT_NODE) {
|
||||||
const span = document.createElement("span");
|
const span = document.createElement("span");
|
||||||
div.parentNode.insertBefore(span, div);
|
div.before(span);
|
||||||
span.append(div);
|
span.append(div);
|
||||||
textDivs[divIdx] = span;
|
textDivs[divIdx] = span;
|
||||||
div = span;
|
div = span;
|
||||||
|
Loading…
Reference in New Issue
Block a user