Sha256: 6a37178895f0cb6e772144be3482f9b2c82535847b5be9c320ccda9a5313c825
Contents?: true
Size: 1.66 KB
Versions: 3
Compression:
Stored size: 1.66 KB
Contents
"use strict"; const HTMLElementImpl = require("./HTMLElement-impl").implementation; const MouseEvent = require("../generated/MouseEvent"); const closest = require("../helpers/traversal").closest; const domSymbolTree = require("../helpers/internal-constants").domSymbolTree; function isLabelable(node) { // labelable logic defined at: https://html.spec.whatwg.org/multipage/forms.html#category-label if (node.nodeType !== 1) { return false; } switch (node.tagName) { case "BUTTON": case "KEYGEN": case "METER": case "OUTPUT": case "PROGRESS": case "SELECT": case "TEXTAREA": return true; case "INPUT": return node.type !== "hidden"; } return false; } function sendClickToAssociatedNode(node) { node.dispatchEvent( MouseEvent.createImpl(["click", { bubbles: true, cancelable: true, view: node.ownerDocument ? node.ownerDocument.defaultView : null, screenX: 0, screenY: 0, clientX: 0, clientY: 0, button: 0, detail: 1, relatedTarget: null }]) ); } class HTMLLabelElementImpl extends HTMLElementImpl { _activationBehavior() { if (this.hasAttribute("for")) { const node = this.ownerDocument.getElementById(this.getAttribute("for")); if (node && isLabelable(node)) { sendClickToAssociatedNode(node); } } else { for (const descendant of domSymbolTree.treeIterator(this)) { if (isLabelable(descendant)) { sendClickToAssociatedNode(descendant); break; } } } } get form() { return closest(this, "form"); } } module.exports = { implementation: HTMLLabelElementImpl };
Version data entries
3 entries across 3 versions & 3 rubygems