void ShadowRoot::setInnerHTML(const String& markup, ExceptionCode& ec) { GuardOrphanShadowRoot(ec = INVALID_ACCESS_ERR); if (RefPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(markup, host(), AllowScriptingContent, ec)) replaceChildrenWithFragment(this, fragment.release(), ec); }
void HTMLElement::setInnerHTML(const String& html, ExceptionState& es) { if (RefPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(html, this, AllowScriptingContent, es)) { ContainerNode* container = this; if (hasLocalName(templateTag)) container = toHTMLTemplateElement(this)->content(); replaceChildrenWithFragment(container, fragment.release(), es); } }
ExceptionOr<void> ShadowRoot::setInnerHTML(const String& markup) { if (isOrphan()) return Exception { INVALID_ACCESS_ERR }; auto fragment = createFragmentForInnerOuterHTML(*host(), markup, AllowScriptingContent); if (fragment.hasException()) return fragment.releaseException(); return replaceChildrenWithFragment(*this, fragment.releaseReturnValue()); }
void ShadowRoot::setInnerHTML(const String& markup, ExceptionState& exceptionState) { if (isOrphan()) { exceptionState.throwDOMException(InvalidAccessError, "The ShadowRoot does not have a host."); return; } if (RefPtrWillBeRawPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(markup, host(), AllowScriptingContent, "innerHTML", exceptionState)) replaceChildrenWithFragment(this, fragment.release(), exceptionState); }
void ShadowRoot::setInnerHTML(const String& markup, ExceptionCode& ec) { if (isOrphan()) { ec = INVALID_ACCESS_ERR; return; } if (RefPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(*host(), markup, AllowScriptingContent, ec)) replaceChildrenWithFragment(*this, fragment.releaseNonNull(), ec); }
void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec) { RefPtr<DocumentFragment> fragment = createContextualFragment(html); if (!fragment) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } replaceChildrenWithFragment(this, fragment.release(), ec); }
void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec) { if (RefPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(html, this, AllowScriptingContent, ec)) { ContainerNode* container = this; #if ENABLE(TEMPLATE_ELEMENT) if (hasLocalName(templateTag)) container = toHTMLTemplateElement(this)->content(); #endif replaceChildrenWithFragment(container, fragment.release(), ec); } }
void HTMLElement::setInnerText(const String& text, ExceptionCode& ec) { if (ieForbidsInsertHTML()) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(framesetTag) || hasLocalName(headTag) || hasLocalName(htmlTag) || hasLocalName(tableTag) || hasLocalName(tbodyTag) || hasLocalName(tfootTag) || hasLocalName(theadTag) || hasLocalName(trTag)) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } // FIXME: This doesn't take whitespace collapsing into account at all. if (!text.contains('\n') && !text.contains('\r')) { if (text.isEmpty()) { removeChildren(); return; } replaceChildrenWithText(this, text, ec); return; } // FIXME: Do we need to be able to detect preserveNewline style even when there's no renderer? // FIXME: Can the renderer be out of date here? Do we need to call updateStyleIfNeeded? // For example, for the contents of textarea elements that are display:none? RenderObject* r = renderer(); if (r && r->style()->preserveNewline()) { if (!text.contains('\r')) { replaceChildrenWithText(this, text, ec); return; } String textWithConsistentLineBreaks = text; textWithConsistentLineBreaks.replace("\r\n", "\n"); textWithConsistentLineBreaks.replace('\r', '\n'); replaceChildrenWithText(this, textWithConsistentLineBreaks, ec); return; } // Add text nodes and <br> elements. ec = 0; RefPtr<DocumentFragment> fragment = textToFragment(text, ec); if (!ec) replaceChildrenWithFragment(this, fragment.release(), ec); }
void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec) { if (hasLocalName(scriptTag) || hasLocalName(styleTag)) { // Script and CSS source shouldn't be parsed as HTML. removeChildren(); appendChild(document()->createTextNode(html), ec); return; } RefPtr<DocumentFragment> fragment = createContextualFragment(html); if (!fragment) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } replaceChildrenWithFragment(this, fragment.release(), ec); }
void HTMLElement::setInnerText(const String& text, ExceptionState& exceptionState) { if (ieForbidsInsertHTML()) { exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion."); return; } if (shouldProhibitSetInnerOuterText(*this)) { exceptionState.throwDOMException(NoModificationAllowedError, "The '" + localName() + "' element does not support text insertion."); return; } // FIXME: This doesn't take whitespace collapsing into account at all. if (!text.contains('\n') && !text.contains('\r')) { if (text.isEmpty()) { removeChildren(); return; } replaceChildrenWithText(this, text, exceptionState); return; } // FIXME: Do we need to be able to detect preserveNewline style even when there's no renderer? // FIXME: Can the renderer be out of date here? Do we need to call updateStyleIfNeeded? // For example, for the contents of textarea elements that are display:none? LayoutObject* r = layoutObject(); if (r && r->style()->preserveNewline()) { if (!text.contains('\r')) { replaceChildrenWithText(this, text, exceptionState); return; } String textWithConsistentLineBreaks = text; textWithConsistentLineBreaks.replace("\r\n", "\n"); textWithConsistentLineBreaks.replace('\r', '\n'); replaceChildrenWithText(this, textWithConsistentLineBreaks, exceptionState); return; } // Add text nodes and <br> elements. RefPtrWillBeRawPtr<DocumentFragment> fragment = textToFragment(text, exceptionState); if (!exceptionState.hadException()) replaceChildrenWithFragment(this, fragment.release(), exceptionState); }
void HTMLElement::setInnerText(const String& text, ExceptionCode& ec) { // follow the IE specs about when this is allowed if (endTagRequirement() == TagStatusForbidden) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(framesetTag) || hasLocalName(headTag) || hasLocalName(htmlTag) || hasLocalName(tableTag) || hasLocalName(tbodyTag) || hasLocalName(tfootTag) || hasLocalName(theadTag) || hasLocalName(trTag)) { ec = NO_MODIFICATION_ALLOWED_ERR; return; } // FIXME: This doesn't take whitespace collapsing into account at all. if (!text.contains('\n') && !text.contains('\r')) { if (text.isEmpty()) { removeChildren(); return; } replaceChildrenWithText(this, text, ec); return; } // FIXME: Do we need to be able to detect preserveNewline style even when there's no renderer? // FIXME: Can the renderer be out of date here? Do we need to call updateRendering? // For example, for the contents of textarea elements that are display:none? RenderObject* r = renderer(); if (r && r->style()->preserveNewline()) { if (!text.contains('\r')) { replaceChildrenWithText(this, text, ec); return; } String textWithConsistentLineBreaks = text; textWithConsistentLineBreaks.replace("\r\n", "\n"); textWithConsistentLineBreaks.replace('\r', '\n'); replaceChildrenWithText(this, textWithConsistentLineBreaks, ec); return; } // Add text nodes and <br> elements. ec = 0; RefPtr<DocumentFragment> fragment = new DocumentFragment(document()); int lineStart = 0; UChar prev = 0; int length = text.length(); for (int i = 0; i < length; ++i) { UChar c = text[i]; if (c == '\n' || c == '\r') { if (i > lineStart) { fragment->appendChild(new Text(document(), text.substring(lineStart, i - lineStart)), ec); if (ec) return; } if (!(c == '\n' && i != 0 && prev == '\r')) { fragment->appendChild(new HTMLBRElement(brTag, document()), ec); if (ec) return; } lineStart = i + 1; } prev = c; } if (length > lineStart) fragment->appendChild(new Text(document(), text.substring(lineStart, length - lineStart)), ec); replaceChildrenWithFragment(this, fragment.release(), ec); }
void ShadowRoot::setInnerHTML(const String& markup, ExceptionCode& ec) { if (RefPtr<DocumentFragment> fragment = createFragmentForInnerOuterHTML(markup, host(), ec)) replaceChildrenWithFragment(this, fragment.release(), ec); }
void ShadowRoot::setInnerHTML(const String& markup, ExceptionState& exceptionState) { if (DocumentFragment* fragment = createFragmentForInnerOuterHTML( markup, &host(), AllowScriptingContent, "innerHTML", exceptionState)) replaceChildrenWithFragment(this, fragment, exceptionState); }