HTMLTemplateElement.cpp [plain text]
#include "config.h"
#if ENABLE(TEMPLATE_ELEMENT)
#include "HTMLTemplateElement.h"
#include "DOMImplementation.h"
#include "DocumentFragment.h"
#include "HTMLDocument.h"
#include "TemplateContentDocumentFragment.h"
#include "markup.h"
namespace WebCore {
using namespace HTMLNames;
inline HTMLTemplateElement::HTMLTemplateElement(const QualifiedName& tagName, Document* document)
: HTMLElement(tagName, document)
{
}
HTMLTemplateElement::~HTMLTemplateElement()
{
}
PassRefPtr<HTMLTemplateElement> HTMLTemplateElement::create(const QualifiedName& tagName, Document* document)
{
return adoptRef(new HTMLTemplateElement(tagName, document));
}
DocumentFragment* HTMLTemplateElement::content() const
{
if (!m_content)
m_content = TemplateContentDocumentFragment::create(document()->ensureTemplateDocument(), this);
return m_content.get();
}
PassRefPtr<Node> HTMLTemplateElement::cloneNode(bool deep)
{
if (!deep)
return cloneElementWithoutChildren();
RefPtr<Node> clone = cloneElementWithChildren();
if (m_content)
content()->cloneChildNodes(toHTMLTemplateElement(clone.get())->content());
return clone.release();
}
void HTMLTemplateElement::didMoveToNewDocument(Document* oldDocument)
{
HTMLElement::didMoveToNewDocument(oldDocument);
if (!m_content)
return;
document()->ensureTemplateDocument()->adoptIfNeeded(m_content.get());
}
#ifndef NDEBUG
const HTMLTemplateElement* toHTMLTemplateElement(const Node* node)
{
ASSERT_WITH_SECURITY_IMPLICATION(!node || (node->isHTMLElement() && node->hasTagName(templateTag)));
return static_cast<const HTMLTemplateElement*>(node);
}
#endif
}
#endif // ENABLE(TEMPLATE_ELEMENT)