{"ScriptPreparationCode":"var appTarget = document.getElementById(\u0027app-target\u0027);\r\nvar clickTarget = document.getElementById(\u0027click-target\u0027);\r\n\r\n/**\r\n * @param {Element} element\r\n * @returns {Element | null}\r\n */\r\nfunction parent_element(element) {\r\n\tlet parent = element.assignedSlot ?? element.parentNode;\r\n\r\n\t// @ts-expect-error handle shadow roots\r\n\tif (parent?.nodeType === 11) parent = parent.host;\r\n\r\n\treturn /** @type {Element} */ (parent);\r\n}\r\n\r\n/**\r\n * @param {Element} element\r\n * @param {Element} target\r\n */\r\nfunction find_anchor(element, target) {\r\n\twhile (element !== target) {\r\n\t\tif (element.nodeName.toUpperCase() === \u0027A\u0027) {\r\n\t\t\treturn /** @type {HTMLAnchorElement | SVGAElement} */ (element);\r\n\t\t}\r\n\r\n\t\telement = /** @type {Element} */ (parent_element(element));\r\n\t}\r\n}","TestCases":[{"Name":"while","Code":"const a = find_anchor(clickTarget, appTarget);\r\nif (!a) { /* return */ }","IsDeferred":false},{"Name":"closest","Code":"const a = clickTarget.closest(\u0027a\u0027);\r\nif (!a || !appTarget.contains(a)) { /* return */ }","IsDeferred":false}]}