OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 String HTMLElement::innerHTML() const | 259 String HTMLElement::innerHTML() const |
260 { | 260 { |
261 return createMarkup(this, ChildrenOnly); | 261 return createMarkup(this, ChildrenOnly); |
262 } | 262 } |
263 | 263 |
264 String HTMLElement::outerHTML() const | 264 String HTMLElement::outerHTML() const |
265 { | 265 { |
266 return createMarkup(this); | 266 return createMarkup(this); |
267 } | 267 } |
268 | 268 |
269 static bool useLegacyTreeBuilder(Document*) | |
270 { | |
271 return false; | |
272 } | |
273 | |
274 // FIXME: This logic should move into Range::createContextualFragment | 269 // FIXME: This logic should move into Range::createContextualFragment |
275 PassRefPtr<DocumentFragment> HTMLElement::deprecatedCreateContextualFragment(con
st String& markup, FragmentScriptingPermission scriptingPermission) | 270 PassRefPtr<DocumentFragment> HTMLElement::deprecatedCreateContextualFragment(con
st String& markup, FragmentScriptingPermission scriptingPermission) |
276 { | 271 { |
277 // The following is in accordance with the definition as used by IE. | 272 // The following is in accordance with the definition as used by IE. |
278 if (ieForbidsInsertHTML()) | 273 if (ieForbidsInsertHTML()) |
279 return 0; | 274 return 0; |
280 | 275 |
281 if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(frames
etTag) | 276 if (hasLocalName(colTag) || hasLocalName(colgroupTag) || hasLocalName(frames
etTag) |
282 || hasLocalName(headTag) || hasLocalName(styleTag) || hasLocalName(title
Tag)) | 277 || hasLocalName(headTag) || hasLocalName(styleTag) || hasLocalName(title
Tag)) |
283 return 0; | 278 return 0; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 element->removeChildren(); | 329 element->removeChildren(); |
335 element->appendChild(textNode.release(), ec); | 330 element->appendChild(textNode.release(), ec); |
336 } | 331 } |
337 | 332 |
338 // We may want to move a version of this function into DocumentFragment.h/cpp | 333 // We may want to move a version of this function into DocumentFragment.h/cpp |
339 static PassRefPtr<DocumentFragment> createFragmentFromSource(const String& marku
p, Element* contextElement, ExceptionCode& ec) | 334 static PassRefPtr<DocumentFragment> createFragmentFromSource(const String& marku
p, Element* contextElement, ExceptionCode& ec) |
340 { | 335 { |
341 Document* document = contextElement->document(); | 336 Document* document = contextElement->document(); |
342 RefPtr<DocumentFragment> fragment; | 337 RefPtr<DocumentFragment> fragment; |
343 | 338 |
344 if (useLegacyTreeBuilder(document)) { | |
345 fragment = contextElement->deprecatedCreateContextualFragment(markup); | |
346 if (!fragment) | |
347 ec = NO_MODIFICATION_ALLOWED_ERR; | |
348 return fragment; | |
349 } | |
350 | |
351 fragment = DocumentFragment::create(document); | 339 fragment = DocumentFragment::create(document); |
352 if (document->isHTMLDocument()) { | 340 if (document->isHTMLDocument()) { |
353 fragment->parseHTML(markup, contextElement); | 341 fragment->parseHTML(markup, contextElement); |
354 return fragment; | 342 return fragment; |
355 } | 343 } |
356 | 344 |
357 bool wasValid = fragment->parseXML(markup, contextElement); | 345 bool wasValid = fragment->parseXML(markup, contextElement); |
358 if (!wasValid) { | 346 if (!wasValid) { |
359 ec = INVALID_STATE_ERR; | 347 ec = INVALID_STATE_ERR; |
360 return 0; | 348 return 0; |
361 } | 349 } |
362 return fragment; | 350 return fragment; |
363 } | 351 } |
364 | 352 |
365 void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec) | 353 void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec) |
366 { | 354 { |
367 // FIXME: This code can be removed, it's handled by the HTMLDocumentParser c
orrectly. | |
368 if (useLegacyTreeBuilder(document()) && (hasLocalName(scriptTag) || hasLocal
Name(styleTag))) { | |
369 // Script and CSS source shouldn't be parsed as HTML. | |
370 removeChildren(); | |
371 appendChild(document()->createTextNode(html), ec); | |
372 return; | |
373 } | |
374 | |
375 RefPtr<DocumentFragment> fragment = createFragmentFromSource(html, this, ec)
; | 355 RefPtr<DocumentFragment> fragment = createFragmentFromSource(html, this, ec)
; |
376 if (fragment) | 356 if (fragment) |
377 replaceChildrenWithFragment(this, fragment.release(), ec); | 357 replaceChildrenWithFragment(this, fragment.release(), ec); |
378 } | 358 } |
379 | 359 |
380 void HTMLElement::setOuterHTML(const String& html, ExceptionCode& ec) | 360 void HTMLElement::setOuterHTML(const String& html, ExceptionCode& ec) |
381 { | 361 { |
382 Node* p = parent(); | 362 Node* p = parent(); |
383 if (!p || !p->isHTMLElement()) { | 363 if (!p || !p->isHTMLElement()) { |
384 ec = NO_MODIFICATION_ALLOWED_ERR; | 364 ec = NO_MODIFICATION_ALLOWED_ERR; |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 #ifndef NDEBUG | 809 #ifndef NDEBUG |
830 | 810 |
831 // For use in the debugger | 811 // For use in the debugger |
832 void dumpInnerHTML(WebCore::HTMLElement*); | 812 void dumpInnerHTML(WebCore::HTMLElement*); |
833 | 813 |
834 void dumpInnerHTML(WebCore::HTMLElement* element) | 814 void dumpInnerHTML(WebCore::HTMLElement* element) |
835 { | 815 { |
836 printf("%s\n", element->innerHTML().ascii().data()); | 816 printf("%s\n", element->innerHTML().ascii().data()); |
837 } | 817 } |
838 #endif | 818 #endif |
OLD | NEW |