void WebPageSerializerImpl::openTagToString(const Element* element, SerializeDomParam* param) { // FIXME: use StringBuilder instead of String. bool needSkip; // Do pre action for open tag. String result = preActionBeforeSerializeOpenTag(element, param, &needSkip); if (needSkip) return; // Add open tag result += "<" + element->nodeName().lower(); // Go through all attributes and serialize them. const NamedNodeMap *attrMap = element->attributes(true); if (attrMap) { unsigned numAttrs = attrMap->length(); for (unsigned i = 0; i < numAttrs; i++) { result += " "; // Add attribute pair const Attribute *attribute = attrMap->attributeItem(i); result += attribute->name().toString(); result += "=\""; if (!attribute->value().isEmpty()) { const String& attrValue = attribute->value(); // Check whether we need to replace some resource links // with local resource paths. const QualifiedName& attrName = attribute->name(); if (elementHasLegalLinkAttribute(element, attrName)) { // For links start with "javascript:", we do not change it. if (attrValue.startsWith("javascript:", false)) result += attrValue; else { // Get the absolute link String completeURL = param->document->completeURL(attrValue); // Check whether we have local files for those link. if (m_localLinks.contains(completeURL)) { if (!m_localDirectoryName.isEmpty()) result += "./" + m_localDirectoryName + "/"; result += m_localLinks.get(completeURL); } else result += completeURL; } } else { if (param->isHTMLDocument) result += m_htmlEntities.convertEntitiesInString(attrValue); else result += m_xmlEntities.convertEntitiesInString(attrValue); } } result += "\""; } } // Do post action for open tag. String addedContents = postActionAfterSerializeOpenTag(element, param); // Complete the open tag for element when it has child/children. if (element->hasChildNodes() || param->haveAddedContentsBeforeEnd) result += ">"; // Append the added contents generate in post action of open tag. result += addedContents; // Save the result to data buffer. saveHTMLContentToBuffer(result, param); }
void WebPageSerializerImpl::openTagToString(Element* element, SerializeDomParam* param) { bool needSkip; StringBuilder result; // Do pre action for open tag. result.append(preActionBeforeSerializeOpenTag(element, param, &needSkip)); if (needSkip) return; // Add open tag result.append('<'); result.append(element->nodeName().lower()); // Go through all attributes and serialize them. if (element->hasAttributes()) { unsigned numAttrs = element->attributeCount(); for (unsigned i = 0; i < numAttrs; i++) { result.append(' '); // Add attribute pair const Attribute *attribute = element->attributeItem(i); result.append(attribute->name().toString()); result.appendLiteral("=\""); if (!attribute->value().isEmpty()) { const String& attrValue = attribute->value(); // Check whether we need to replace some resource links // with local resource paths. const QualifiedName& attrName = attribute->name(); if (elementHasLegalLinkAttribute(element, attrName)) { // For links start with "javascript:", we do not change it. if (attrValue.startsWith("javascript:", false)) result.append(attrValue); else { // Get the absolute link WebFrameImpl* subFrame = WebFrameImpl::fromFrameOwnerElement(element); String completeURL = subFrame ? subFrame->frame()->document()->url() : param->document->completeURL(attrValue); // Check whether we have local files for those link. if (m_localLinks.contains(completeURL)) { if (!param->directoryName.isEmpty()) { result.appendLiteral("./"); result.append(param->directoryName); result.append('/'); } result.append(m_localLinks.get(completeURL)); } else result.append(completeURL); } } else { if (param->isHTMLDocument) result.append(m_htmlEntities.convertEntitiesInString(attrValue)); else result.append(m_xmlEntities.convertEntitiesInString(attrValue)); } } result.append('\"'); } } // Do post action for open tag. String addedContents = postActionAfterSerializeOpenTag(element, param); // Complete the open tag for element when it has child/children. if (element->hasChildNodes() || param->haveAddedContentsBeforeEnd) result.append('>'); // Append the added contents generate in post action of open tag. result.append(addedContents); // Save the result to data buffer. saveHTMLContentToBuffer(result.toString(), param); }