Selector:Manipulation: Fix DOM manip within template contents
commit3299236c898136dc1aa57dc5148811203e931895
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 14 Nov 2022 17:36:53 +0000 (14 18:36 +0100)
committerMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 14 Nov 2022 22:17:23 +0000 (14 23:17 +0100)
tree1a9b0c2629362272653a6c5d59f1cd8d5a27ace9
parent0208224b5b76d54a39986f78aac97dbf1cccbe38
Selector:Manipulation: Fix DOM manip within template contents

The `<template/>` element `contents` property is a document fragment that may
have a `null` `documentElement`. In Safari 16 this happens in more cases due
to recent spec changes - in particular, even if that document fragment is
explicitly adopted into an outer document. We're testing both of those cases
now.

The crash used to happen in `jQuery.contains`. As it turns out, we don't need
to query the supposed container `documentElement` if it has the
`Node.DOCUMENT_NODE` (9) `nodeType`; we can call `.contains()` directly on
the `document`. That avoids the crash.

Fixes gh-5147
Closes gh-5158
src/selector/contains.js
test/unit/manipulation.js
test/unit/selector.js