PassRefPtr<DocumentFragment> TextTrackCue::getCueAsHTML() { createWebVTTNodeTree(); RefPtr<DocumentFragment> clonedFragment = DocumentFragment::create(ownerDocument()); copyWebVTTNodeToDOMTree(m_webVTTNodeTree.get(), clonedFragment.get()); return clonedFragment.release(); }
PassRefPtr<DocumentFragment> TextTrackCue::getCueAsHTML() { createWebVTTNodeTree(); Document* document = static_cast<Document*>(m_scriptExecutionContext); RefPtr<DocumentFragment> clonedFragment = DocumentFragment::create(document); copyWebVTTNodeToDOMTree(m_webVTTNodeTree.get(), clonedFragment.get()); return clonedFragment.release(); }
void TextTrackCue::copyWebVTTNodeToDOMTree(ContainerNode* webVTTNode, ContainerNode* parent) { for (Node* node = webVTTNode->firstChild(); node; node = node->nextSibling()) { RefPtr<Node> clonedNode; if (node->isWebVTTElement()) clonedNode = toWebVTTElement(node)->createEquivalentHTMLElement(ownerDocument()); else clonedNode = node->cloneNode(false); parent->appendChild(clonedNode, ASSERT_NO_EXCEPTION); if (node->isContainerNode()) copyWebVTTNodeToDOMTree(toContainerNode(node), toContainerNode(clonedNode.get())); } }
void VTTCue::copyWebVTTNodeToDOMTree(ContainerNode* webVTTNode, ContainerNode* parent) { for (Node* node = webVTTNode->firstChild(); node; node = node->nextSibling()) { RefPtr<Node> clonedNode; if (is<WebVTTElement>(*node)) clonedNode = downcast<WebVTTElement>(*node).createEquivalentHTMLElement(ownerDocument()); else clonedNode = node->cloneNode(false); parent->appendChild(*clonedNode, ASSERT_NO_EXCEPTION); if (is<ContainerNode>(*node)) copyWebVTTNodeToDOMTree(downcast<ContainerNode>(node), downcast<ContainerNode>(clonedNode.get())); } }
void TextTrackCue::copyWebVTTNodeToDOMTree(ContainerNode* webVTTNode, ContainerNode* parent) { for (Node* node = webVTTNode->firstChild(); node; node = node->nextSibling()) { RefPtr<Node> clonedNode; // Specs require voice and class WebVTT elements to be spans for DOM trees. if (node->hasTagName(voiceElementTagName()) || node->hasTagName(classElementTagName())) { clonedNode = HTMLSpanElement::create(spanTag, static_cast<Document*>(m_scriptExecutionContext)); toElement(clonedNode.get())->setAttribute(classAttr, toElement(node)->getAttribute(classAttr)); toElement(clonedNode.get())->setAttribute(titleAttr, toElement(node)->getAttribute(voiceAttributeName())); } else clonedNode = node->cloneNode(false); parent->appendChild(clonedNode, ASSERT_NO_EXCEPTION); if (node->isContainerNode()) copyWebVTTNodeToDOMTree(toContainerNode(node), toContainerNode(clonedNode.get())); } }