Reviewed by Ken.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 May 2004 22:18:06 +0000 (22:18 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 May 2004 22:18:06 +0000 (22:18 +0000)
<rdar://problem/3656719>: Implement outerHTML and setOuterHTML DOM extensions

They were already implemented (by Chris), all that was required
was exporting them to JavaScript.

        * khtml/dom/html_element.cpp:
        (HTMLElement::outerHTML): Call impl.
        (HTMLElement::setOuterHTML): Ditto.
        * khtml/dom/html_element.h: Prototype new methods.
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::getValueProperty): Add OuterHTML.
        (KJS::HTMLElement::putValue): Add OuterHTML.
        * khtml/ecma/kjs_html.h: Add new enum values.
        * khtml/ecma/kjs_html.lut.h: Regenerated.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@6625 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/dom/html_element.cpp
WebCore/khtml/dom/html_element.h
WebCore/khtml/ecma/kjs_html.cpp
WebCore/khtml/ecma/kjs_html.h
WebCore/khtml/ecma/kjs_html.lut.h

index 50ac39a4932bb73fc3546aeb387430b1444608b4..6b3f8d87810b506aecffa758004af7e4f5bfb2f0 100644 (file)
@@ -1,3 +1,22 @@
+2004-05-17  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Ken.
+
+       <rdar://problem/3656719>: Implement outerHTML and setOuterHTML DOM extensions
+
+       They were already implemented (by Chris), all that was required
+       was exporting them to JavaScript.
+
+        * khtml/dom/html_element.cpp:
+        (HTMLElement::outerHTML): Call impl.
+        (HTMLElement::setOuterHTML): Ditto.
+        * khtml/dom/html_element.h: Prototype new methods.
+        * khtml/ecma/kjs_html.cpp:
+        (KJS::HTMLElement::getValueProperty): Add OuterHTML.
+        (KJS::HTMLElement::putValue): Add OuterHTML.
+        * khtml/ecma/kjs_html.h: Add new enum values.
+        * khtml/ecma/kjs_html.lut.h: Regenerated.
+
 2004-05-18  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Hyatt
index 73a397a2b960d63acbaacd5b70cdc5d3d05c7c3d..0a457261e91debe6470c2956c7f8e14c32d4733e 100644 (file)
@@ -146,6 +146,21 @@ void HTMLElement::setInnerText( const DOMString &text )
        throw DOMException(DOMException::NO_MODIFICATION_ALLOWED_ERR);
 }
 
+DOMString HTMLElement::outerHTML() const
+{
+    if ( !impl ) return DOMString();
+    return ((HTMLElementImpl *)impl)->outerHTML();
+}
+
+void HTMLElement::setOuterHTML( const DOMString &html )
+{
+    bool ok = false;
+    if( impl )
+       ok = ((HTMLElementImpl *)impl)->setOuterHTML( html );
+    if ( !ok )
+       throw DOMException(DOMException::NO_MODIFICATION_ALLOWED_ERR);
+}
+
 HTMLCollection HTMLElement::children() const
 {
     if(!impl) return HTMLCollection();
index cd35125b8c021032605fda4dab2e5b730d9e09b7..8fc53dddba57ef00aa1a080234d527c75101cd0f 100644 (file)
@@ -175,6 +175,18 @@ public:
      */
     DOMString innerText() const;
 
+    /**
+     * The HTML code of this element, including the element itself.
+     * This function is not part of the DOM specifications as defined by the w3c.
+     */
+    DOMString outerHTML() const;
+
+    /**
+     * Replace the HTML code of this element, including the element itself.
+     * This function is not part of the DOM specifications as defined by the w3c.
+     */
+    void setOuterHTML( const DOMString &html );
+
     /**
      * Set the text content of this node.
      *
index 727df6e0fa3e693e8f914edc9c7b59a2f69e57a2..12fc40b438af0f1397fa60b1aa0ec243bb9b62b9 100644 (file)
@@ -618,7 +618,7 @@ const ClassInfo* KJS::HTMLElement::classInfo() const
   }
 }
 /*
-@begin HTMLElementTable 11
+@begin HTMLElementTable 13
   id           KJS::HTMLElement::ElementId     DontDelete
   title                KJS::HTMLElement::ElementTitle  DontDelete
   lang         KJS::HTMLElement::ElementLang   DontDelete
@@ -627,6 +627,7 @@ const ClassInfo* KJS::HTMLElement::classInfo() const
   className    KJS::HTMLElement::ElementClassName DontDelete
   innerHTML    KJS::HTMLElement::ElementInnerHTML DontDelete
   innerText    KJS::HTMLElement::ElementInnerText DontDelete
+  outerHTML    KJS::HTMLElement::ElementOuterHTML DontDelete
   document     KJS::HTMLElement::ElementDocument  DontDelete|ReadOnly
 # IE extension
   children     KJS::HTMLElement::ElementChildren  DontDelete|ReadOnly
@@ -1819,6 +1820,8 @@ Value KJS::HTMLElement::getValueProperty(ExecState *exec, int token) const
     return String(element.innerHTML());
   case ElementInnerText:
     return String(element.innerText());
+  case ElementOuterHTML:
+    return String(element.outerHTML());
   case ElementDocument:
     return getDOMNode(exec,element.ownerDocument());
   case ElementChildren:
@@ -2856,6 +2859,9 @@ void KJS::HTMLElement::putValue(ExecState *exec, int token, const Value& value,
   case ElementInnerText:
     element.setInnerText(str);
     return;
+  case ElementOuterHTML:
+    element.setOuterHTML(str);
+    return;
   case ElementContentEditable:
     element.setContentEditable(str);
     return;
index ca10aa7aa1e931c93fa0616ebf509444c0f32b70..e1bfce89790ba21bc66403bd4d94626613f8e3e4 100644 (file)
@@ -148,7 +148,7 @@ namespace KJS {
            MarqueeStart, MarqueeStop,
            ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
            ElementClassName, ElementInnerText, ElementDocument, ElementChildren, ElementContentEditable,
-           ElementIsContentEditable};
+           ElementIsContentEditable, ElementOuterHTML};
 
     DOM::HTMLElement toElement() const { return static_cast<DOM::HTMLElement>(node); }
   };
index 2945565762173c66ee4271eb330107c60ab4c8de..6bac8e73b25f875be9b09b25d0a4395ee5c712f9 100644 (file)
@@ -51,25 +51,25 @@ const struct HashTable HTMLDocumentTable = { 2, 39, HTMLDocumentTableEntries, 30
 namespace KJS {
 
 const struct HashEntry HTMLElementTableEntries[] = {
-   { "lang", KJS::HTMLElement::ElementLang, DontDelete, 0, &HTMLElementTableEntries[12] },
+   { "title", KJS::HTMLElement::ElementTitle, DontDelete, 0, 0 },
    { 0, 0, 0, 0, 0 },
+   { "lang", KJS::HTMLElement::ElementLang, DontDelete, 0, 0 },
+   { "isContentEditable", KJS::HTMLElement::ElementIsContentEditable, DontDelete|ReadOnly, 0, 0 },
    { "innerHTML", KJS::HTMLElement::ElementInnerHTML, DontDelete, 0, 0 },
+   { "document", KJS::HTMLElement::ElementDocument, DontDelete|ReadOnly, 0, 0 },
    { 0, 0, 0, 0, 0 },
-   { "innerText", KJS::HTMLElement::ElementInnerText, DontDelete, 0, 0 },
-   { "document", KJS::HTMLElement::ElementDocument, DontDelete|ReadOnly, 0, &HTMLElementTableEntries[13] },
-   { "className", KJS::HTMLElement::ElementClassName, DontDelete, 0, &HTMLElementTableEntries[14] },
-   { "id", KJS::HTMLElement::ElementId, DontDelete, 0, &HTMLElementTableEntries[11] },
-   { 0, 0, 0, 0, 0 },
+   { "dir", KJS::HTMLElement::ElementDir, DontDelete, 0, 0 },
    { 0, 0, 0, 0, 0 },
+   { "className", KJS::HTMLElement::ElementClassName, DontDelete, 0, &HTMLElementTableEntries[14] },
+   { "id", KJS::HTMLElement::ElementId, DontDelete, 0, &HTMLElementTableEntries[13] },
    { 0, 0, 0, 0, 0 },
-   { "title", KJS::HTMLElement::ElementTitle, DontDelete, 0, &HTMLElementTableEntries[15] },
-   { "dir", KJS::HTMLElement::ElementDir, DontDelete, 0, 0 },
+   { "innerText", KJS::HTMLElement::ElementInnerText, DontDelete, 0, 0 },
+   { "outerHTML", KJS::HTMLElement::ElementOuterHTML, DontDelete, 0, &HTMLElementTableEntries[15] },
    { "children", KJS::HTMLElement::ElementChildren, DontDelete|ReadOnly, 0, 0 },
-   { "contentEditable", KJS::HTMLElement::ElementContentEditable, DontDelete, 0, 0 },
-   { "isContentEditable", KJS::HTMLElement::ElementIsContentEditable, DontDelete|ReadOnly, 0, 0 }
+   { "contentEditable", KJS::HTMLElement::ElementContentEditable, DontDelete, 0, 0 }
 };
 
-const struct HashTable HTMLElementTable = { 2, 16, HTMLElementTableEntries, 11 };
+const struct HashTable HTMLElementTable = { 2, 16, HTMLElementTableEntries, 13 };
 
 } // namespace