HTMLTextFormControlElement* enclosingTextFormControl(Node* container) { if (!container) return 0; Element* ancestor = container->shadowHost(); return ancestor && isHTMLTextFormControlElement(*ancestor) && container->containingShadowRoot()->type() == ShadowRoot::UserAgentShadowRoot ? toHTMLTextFormControlElement(ancestor) : 0; }
HTMLTextFormControlElement* enclosingTextFormControl(const Position& position) { ASSERT(position.isNull() || position.anchorType() == Position::PositionIsOffsetInAnchor || position.containerNode() || !position.anchorNode()->shadowHost() || (position.anchorNode()->parentNode() && position.anchorNode()->parentNode()->isShadowRoot())); Node* container = position.containerNode(); if (!container) return 0; Element* ancestor = container->shadowHost(); return ancestor && isHTMLTextFormControlElement(ancestor) ? toHTMLTextFormControlElement(ancestor) : 0; }
TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) const { if (isHTMLTextFormControlElement(this)) { HTMLTextFormControlElement* textElement = toHTMLTextFormControlElement(const_cast<HTMLElement*>(this)); bool hasStrongDirectionality; Unicode::Direction textDirection = textElement->value().defaultWritingDirection(&hasStrongDirectionality); if (strongDirectionalityTextNode) *strongDirectionalityTextNode = hasStrongDirectionality ? textElement : 0; return (textDirection == Unicode::LeftToRight) ? LTR : RTL; } Node* node = firstChild(); while (node) { // Skip bdi, script, style and text form controls. if (equalIgnoringCase(node->nodeName(), "bdi") || node->hasTagName(scriptTag) || node->hasTagName(styleTag) || (node->isElementNode() && toElement(node)->isTextFormControl())) { node = NodeTraversal::nextSkippingChildren(node, this); continue; } // Skip elements with valid dir attribute if (node->isElementNode()) { AtomicString dirAttributeValue = toElement(node)->fastGetAttribute(dirAttr); if (equalIgnoringCase(dirAttributeValue, "rtl") || equalIgnoringCase(dirAttributeValue, "ltr") || equalIgnoringCase(dirAttributeValue, "auto")) { node = NodeTraversal::nextSkippingChildren(node, this); continue; } } if (node->isTextNode()) { bool hasStrongDirectionality; WTF::Unicode::Direction textDirection = node->textContent(true).defaultWritingDirection(&hasStrongDirectionality); if (hasStrongDirectionality) { if (strongDirectionalityTextNode) *strongDirectionalityTextNode = node; return (textDirection == WTF::Unicode::LeftToRight) ? LTR : RTL; } } node = NodeTraversal::next(node, this); } if (strongDirectionalityTextNode) *strongDirectionalityTextNode = 0; return LTR; }
RenderTextControl::RenderTextControl(Element* element) : RenderBlock(element) { ASSERT(isHTMLTextFormControlElement(element)); }