Changeset 13726 in webkit


Ignore:
Timestamp:
Apr 7, 2006 1:31:17 AM (18 years ago)
Author:
mjs
Message:

LayoutTests:

Reviewed by Anders.

Added test case for incidental fix from this change:


  • fast/dom/Element/dimension-properties-unrendered-expected.txt: Added.
  • fast/dom/Element/dimension-properties-unrendered.html: Added.
  • fast/dom/Element/resources/dimension-properties-unrendered.js: Added.

WebCore:

Reviewed by Anders.

  • dom/Element.idl: Declare full interface in IDL.
  • dom/Element.h: (WebCore::Element::tagQName): Renamed from tagName, so the real DOM method can be called tagName. (WebCore::Element::tagName): inline alias for nodeName.
  • dom/Element.cpp: (WebCore::Element::scrollByUnits): Moved logic from JS bindings to core DOM. (WebCore::Element::scrollByLines): ditto (WebCore::Element::scrollByPages): ditto (WebCore::Element::offsetLeft): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::offsetTop): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::offsetWidth): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::offsetHeight): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::offsetParent): ditto (WebCore::Element::clientWidth): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::clientHeight): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::scrollLeft): ditto (WebCore::Element::scrollTop): ditto (WebCore::Element::setScrollLeft): ditto (WebCore::Element::setScrollTop): ditto (WebCore::Element::scrollWidth): ditto, plus make unrendered elements return 0 not undefined (WebCore::Element::scrollHeight): ditto, plus make unrendered elements return 0 not undefined
  • bindings/scripts/CodeGeneratorJS.pm: Added support for ConvertUndefinedToTrue, for benefit of scroll methods where omitted arguments should be treated as true. However, maybe explicit overloading in the IDL would be a better long-term approach for optional arguments.
  • khtml/ecma/kjs_binding.cpp: (KJS::valueToStringWithNullCheck): fixed formatting (KJS::valueToBooleanTreatUndefinedAsTrue): added for binding of scrollIntoView (isn't this lame?)
  • khtml/ecma/kjs_binding.h: (KJS::toJS): fixed formatting, added new stuff
  • khtml/ecma/kjs_dom.cpp: (KJS::DOMElement::getValueProperty): removed most of contents (KJS::DOMElement::putValueProperty): ditto (KJS::DOMElementProtoFunc::callAsFunction): ditto
  • css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::canShareStyleWithElement): updated for rename of tagName to tagQName (WebCore::CSSStyleSelector::checkOneSelector): ditto
  • dom/Document.cpp: (WebCore::Document::importNode): ditto
  • editing/ApplyStyleCommand.cpp: (WebCore::ApplyStyleCommand::removeInlineStyle): ditto (WebCore::areIdenticalElements): ditto
  • html/HTMLElement.cpp: (WebCore::HTMLElement::inEitherTagList): ditto (WebCore::HTMLElement::inInlineTagList): ditto (WebCore::HTMLElement::inBlockTagList): ditto
Location:
trunk
Files:
3 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r13723 r13726  
     12006-04-07  Maciej Stachowiak  <mjs@apple.com>
     2
     3        Reviewed by Anders.
     4
     5        Added test case for incidental fix from this change:
     6       
     7        - Convert Element JS bindings to be almost completely autogenerated
     8        http://bugzilla.opendarwin.org/show_bug.cgi?id=8227
     9
     10        * fast/dom/Element/dimension-properties-unrendered-expected.txt: Added.
     11        * fast/dom/Element/dimension-properties-unrendered.html: Added.
     12        * fast/dom/Element/resources/dimension-properties-unrendered.js: Added.
     13
    1142006-04-06  Beth Dakin  <bdakin@apple.com>
    215
  • trunk/WebCore/ChangeLog

    r13723 r13726  
     12006-04-06  Maciej Stachowiak  <mjs@apple.com>
     2
     3        Reviewed by Anders.
     4
     5        - Convert Element JS bindings to be almost completely autogenerated
     6        http://bugzilla.opendarwin.org/show_bug.cgi?id=8227
     7
     8        * dom/Element.idl: Declare full interface in IDL.
     9        * dom/Element.h:
     10        (WebCore::Element::tagQName): Renamed from tagName, so the real DOM
     11        method can be called tagName.
     12        (WebCore::Element::tagName): inline alias for nodeName.
     13        * dom/Element.cpp:
     14        (WebCore::Element::scrollByUnits): Moved logic from JS bindings to
     15        core DOM.
     16        (WebCore::Element::scrollByLines): ditto
     17        (WebCore::Element::scrollByPages): ditto
     18        (WebCore::Element::offsetLeft): ditto, plus make unrendered elements return 0 not undefined
     19        (WebCore::Element::offsetTop): ditto, plus make unrendered elements return 0 not undefined
     20        (WebCore::Element::offsetWidth): ditto, plus make unrendered elements return 0 not undefined
     21        (WebCore::Element::offsetHeight): ditto, plus make unrendered elements return 0 not undefined
     22        (WebCore::Element::offsetParent): ditto
     23        (WebCore::Element::clientWidth): ditto, plus make unrendered elements return 0 not undefined
     24        (WebCore::Element::clientHeight): ditto, plus make unrendered elements return 0 not undefined
     25        (WebCore::Element::scrollLeft): ditto
     26        (WebCore::Element::scrollTop): ditto
     27        (WebCore::Element::setScrollLeft): ditto
     28        (WebCore::Element::setScrollTop): ditto
     29        (WebCore::Element::scrollWidth): ditto, plus make unrendered elements return 0 not undefined
     30        (WebCore::Element::scrollHeight): ditto, plus make unrendered elements return 0 not undefined
     31
     32        * bindings/scripts/CodeGeneratorJS.pm: Added support for
     33        ConvertUndefinedToTrue, for benefit of scroll methods where
     34        omitted arguments should be treated as true.  However, maybe
     35        explicit overloading in the IDL would be a better long-term
     36        approach for optional arguments.
     37
     38        * khtml/ecma/kjs_binding.cpp:
     39        (KJS::valueToStringWithNullCheck): fixed formatting
     40        (KJS::valueToBooleanTreatUndefinedAsTrue): added for binding of scrollIntoView
     41        (isn't this lame?)
     42        * khtml/ecma/kjs_binding.h:
     43        (KJS::toJS): fixed formatting, added new stuff
     44        * khtml/ecma/kjs_dom.cpp:
     45        (KJS::DOMElement::getValueProperty): removed most of contents
     46        (KJS::DOMElement::putValueProperty): ditto
     47        (KJS::DOMElementProtoFunc::callAsFunction): ditto
     48
     49        * css/cssstyleselector.cpp:
     50        (WebCore::CSSStyleSelector::canShareStyleWithElement): updated for rename
     51        of tagName to tagQName
     52        (WebCore::CSSStyleSelector::checkOneSelector): ditto
     53        * dom/Document.cpp:
     54        (WebCore::Document::importNode): ditto
     55        * editing/ApplyStyleCommand.cpp:
     56        (WebCore::ApplyStyleCommand::removeInlineStyle): ditto
     57        (WebCore::areIdenticalElements): ditto
     58        * html/HTMLElement.cpp:
     59        (WebCore::HTMLElement::inEitherTagList): ditto
     60        (WebCore::HTMLElement::inInlineTagList): ditto
     61        (WebCore::HTMLElement::inBlockTagList): ditto
     62
    1632006-04-06  Beth Dakin  <bdakin@apple.com>
    264
  • trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r13706 r13726  
    800800
    801801  if ($type eq "boolean") {
    802     return "$value->toBoolean(exec)";
     802    my $conv = $signature->extendedAttributes->{"ConvertUndefinedToTrue"};
     803    if (defined $conv) {
     804        return "valueToBooleanTreatUndefinedAsTrue(exec, $value)";
     805    } else {
     806        return "$value->toBoolean(exec)";
     807    }
    803808  } elsif ($type eq "unsigned long" or $type eq "long") {
    804809    return "$value->toInt32(exec)";
  • trunk/WebCore/css/cssstyleselector.cpp

    r13687 r13726  
    620620    if (n->isStyledElement()) {
    621621        StyledElement* s = static_cast<StyledElement*>(n);
    622         if (s->renderer() && (s->tagName() == element->tagName()) && !s->hasID() &&
     622        if (s->renderer() && (s->tagQName() == element->tagQName()) && !s->hasID() &&
    623623            (s->hasClass() == element->hasClass()) && !s->inlineStyleDecl() &&
    624624            (s->hasMappedAttributes() == styledElement->hasMappedAttributes()) &&
     
    13011301                // first-of-type matches the first element of its type!
    13021302                if (e->parentNode() && e->parentNode()->isElementNode()) {
    1303                     const QualifiedName& type = e->tagName();
     1303                    const QualifiedName& type = e->tagQName();
    13041304                    Node *n = e->previousSibling();
    13051305                    while (n) {
     
    13271327                // last-of-type matches the last element of its type!
    13281328                if (e->parentNode() && e->parentNode()->isElementNode()) {
    1329                     const QualifiedName& type = e->tagName();
     1329                    const QualifiedName& type = e->tagQName();
    13301330                    Node *n = e->nextSibling();
    13311331                    while (n) {
     
    13581358                // If both first-of-type and last-of-type apply, then only-of-type applies.
    13591359                if (e->parentNode() && e->parentNode()->isElementNode()) {
    1360                     const QualifiedName& type = e->tagName();
     1360                    const QualifiedName& type = e->tagQName();
    13611361                    Node *n = e->previousSibling();
    13621362                    while (n && !static_cast<Element*>(n)->hasTagName(type))
  • trunk/WebCore/dom/Document.cpp

    r13715 r13726  
    476476        case ELEMENT_NODE: {
    477477            Element *oldElement = static_cast<Element *>(importedNode);
    478             RefPtr<Element> newElement = createElementNS(oldElement->namespaceURI(), oldElement->tagName().toString(), ec);
     478            RefPtr<Element> newElement = createElementNS(oldElement->namespaceURI(), oldElement->tagQName().toString(), ec);
    479479                       
    480480            if (ec != 0)
  • trunk/WebCore/dom/Element.cpp

    r13630 r13726  
    152152}
    153153
     154void Element::scrollByUnits(int units, KWQScrollGranularity granularity)
     155{
     156    document()->updateLayoutIgnorePendingStylesheets();
     157    if (RenderObject *rend = renderer()) {
     158        if (rend->hasOverflowClip()) {
     159            KWQScrollDirection direction = KWQScrollDown;
     160            if (units < 0) {
     161                direction = KWQScrollUp;
     162                units = -units;
     163            }
     164            rend->layer()->scroll(direction, granularity, units);
     165        }
     166    }
     167}
     168
     169void Element::scrollByLines(int lines)
     170{
     171    scrollByUnits(lines, KWQScrollLine);
     172}
     173
     174void Element::scrollByPages(int pages)
     175{
     176    scrollByUnits(pages, KWQScrollPage);
     177}
     178
     179int Element::offsetLeft()
     180{
     181    document()->updateLayoutIgnorePendingStylesheets();
     182    if (RenderObject* rend = renderer())
     183        return rend->offsetLeft();
     184    return 0;
     185}
     186
     187int Element::offsetTop()
     188{
     189    document()->updateLayoutIgnorePendingStylesheets();
     190    if (RenderObject* rend = renderer())
     191        return rend->offsetTop();
     192    return 0;
     193}
     194
     195int Element::offsetWidth()
     196{
     197    document()->updateLayoutIgnorePendingStylesheets();
     198    if (RenderObject* rend = renderer())
     199        return rend->offsetWidth();
     200    return 0;
     201}
     202
     203int Element::offsetHeight()
     204{
     205    document()->updateLayoutIgnorePendingStylesheets();
     206    if (RenderObject* rend = renderer())
     207        return rend->offsetHeight();
     208    return 0;
     209}
     210
     211Element* Element::offsetParent()
     212{
     213    document()->updateLayoutIgnorePendingStylesheets();
     214    if (RenderObject* rend = renderer())
     215        return static_cast<Element*>(rend->offsetParent()->element());
     216    return 0;
     217}
     218
     219int Element::clientWidth()
     220{
     221    document()->updateLayoutIgnorePendingStylesheets();
     222    if (RenderObject* rend = renderer())
     223        return rend->clientWidth();
     224    return 0;
     225}
     226
     227int Element::clientHeight()
     228{
     229    document()->updateLayoutIgnorePendingStylesheets();
     230    if (RenderObject* rend = renderer())
     231        return rend->clientHeight();
     232    return 0;
     233}
     234
     235int Element::scrollLeft()
     236{
     237    document()->updateLayoutIgnorePendingStylesheets();
     238    RenderObject* rend = renderer();
     239    if (rend && rend->layer())
     240        return rend->layer()->scrollXOffset();
     241    return 0;
     242}
     243
     244int Element::scrollTop()
     245{
     246    document()->updateLayoutIgnorePendingStylesheets();
     247    RenderObject* rend = renderer();
     248    if (rend && rend->layer())
     249        return rend->layer()->scrollYOffset();
     250    return 0;
     251}
     252
     253void Element::setScrollLeft(int newLeft)
     254{
     255    RenderObject *rend = renderer();
     256    if (rend && rend->hasOverflowClip())
     257        rend->layer()->scrollToXOffset(newLeft);
     258}
     259
     260void Element::setScrollTop(int newTop)
     261{
     262    RenderObject *rend = renderer();
     263    if (rend && rend->hasOverflowClip())
     264        rend->layer()->scrollToYOffset(newTop);
     265}
     266
     267int Element::scrollWidth()
     268{
     269    document()->updateLayoutIgnorePendingStylesheets();
     270    if (RenderObject* rend = renderer())
     271        return rend->scrollWidth();
     272    return 0;
     273}
     274
     275int Element::scrollHeight()
     276{
     277    document()->updateLayoutIgnorePendingStylesheets();
     278    if (RenderObject* rend = renderer())
     279        return rend->scrollHeight();
     280    return 0;
     281}
     282
    154283static inline bool inHTMLDocument(const Element* e)
    155284{
  • trunk/WebCore/dom/Element.h

    r13555 r13726  
    3131#include "Attr.h"
    3232#include "QualifiedName.h"
     33#include "KWQScrollBar.h"
    3334
    3435namespace WebCore {
     
    6970    void scrollIntoViewIfNeeded(bool centerIfNeeded);
    7071
     72    void scrollByUnits(int units, KWQScrollGranularity granularity);
     73    void scrollByLines(int lines);
     74    void scrollByPages(int pages);
     75
     76    int offsetLeft();
     77    int offsetTop();
     78    int offsetWidth();
     79    int offsetHeight();
     80    Element* offsetParent();
     81    int clientWidth();
     82    int clientHeight();
     83    int scrollLeft();
     84    int scrollTop();
     85    void setScrollLeft(int);
     86    void setScrollTop(int);
     87    int scrollWidth();
     88    int scrollHeight();
     89
    7190    void removeAttribute(const String &name, ExceptionCode& ec);
    7291    void removeAttributeNS(const String &namespaceURI, const String& localName, ExceptionCode&);
     
    8099    virtual CSSStyleDeclaration *style();
    81100
    82     virtual const QualifiedName& tagName() const { return m_tagName; }
     101    const QualifiedName& tagQName() const { return m_tagName; }
     102    String tagName() const { return nodeName(); }
    83103    virtual bool hasTagName(const QualifiedName& tagName) const { return m_tagName.matches(tagName); }
    84104   
  • trunk/WebCore/dom/Element.idl

    r13611 r13726  
    2222    interface [LegacyParent=KJS::DOMElement] Element : EventTargetNode {
    2323
    24         // DOM Level 1
     24        // DOM Level 1 Core
    2525
    26         NodeList getElementsByTagName(in DOMString name);
     26        readonly attribute [ConvertNullStringTo=Null] DOMString tagName;
    2727
    28         // ConvertNullStringTo=Null is used here since if the attribute isn't present at all
    29         // the function should return null and not "".
    3028        [ConvertNullStringTo=Null] DOMString getAttribute(in DOMString name);
    3129
     
    4543            raises(DOMException);
    4644
    47         // DOM Level 2
     45        NodeList getElementsByTagName(in DOMString name);
    4846
    49         NodeList getElementsByTagNameNS(in [ConvertNullToNullString] DOMString namespaceURI,
    50                                         in DOMString localName);
    51 
    52         boolean hasAttribute(in DOMString name);
    53 
    54         boolean hasAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
    55                                in DOMString localName);
     47        // DOM Level 2 Core
    5648
    5749        DOMString getAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
     
    6759            raises(DOMException);
    6860
     61        NodeList getElementsByTagNameNS(in [ConvertNullToNullString] DOMString namespaceURI,
     62                                        in DOMString localName);
     63
    6964        Attr getAttributeNodeNS(in [ConvertNullToNullString] DOMString namespaceURI,
    7065                                in DOMString localName);
     
    7368            raises(DOMException);
    7469
    75         // extensions
     70        boolean hasAttribute(in DOMString name);
    7671
    77         void focus();
    78         void blur();
     72        boolean hasAttributeNS(in [ConvertNullToNullString] DOMString namespaceURI,
     73                               in DOMString localName);
    7974
    8075        readonly attribute CSSStyleDeclaration style;
    8176
    82         // IE-only extensions
     77        // Common extensions
     78
     79        readonly attribute long offsetLeft;
     80
     81        readonly attribute long offsetTop;
     82
     83        readonly attribute long offsetWidth;
     84
     85        readonly attribute long offsetHeight;
     86
     87        readonly attribute Element offsetParent;
     88       
     89        readonly attribute long clientWidth;
     90
     91        readonly attribute long clientHeight;
     92
     93        attribute long scrollLeft;
     94
     95        attribute long scrollTop;
     96
     97        readonly attribute long scrollWidth;
     98
     99        readonly attribute long scrollHeight;
     100
     101        void focus();
     102
     103        void blur();
     104
     105        void scrollIntoView(in [ConvertUndefinedToTrue] boolean alignWithTop);
     106
     107        // IE extensions
    83108
    84109        Node insertAdjacentElement(in DOMString position,
     
    88113        boolean contains(in Element element);
    89114
     115        // WebKit extensions
     116
     117        void scrollIntoViewIfNeeded(in [ConvertUndefinedToTrue] boolean alignWithTop);
     118
     119        void scrollByLines(in long lines);
     120
     121        void scrollByPages(in long pages);
     122
    90123    };
    91124
  • trunk/WebCore/editing/ApplyStyleCommand.cpp

    r13532 r13726  
    900900            Node *prev = elem->traversePreviousNodePostOrder();
    901901            Node *next = elem->traverseNextNode();
    902             if (m_styledInlineElement && elem->hasTagName(m_styledInlineElement->tagName()))
     902            if (m_styledInlineElement && elem->hasTagName(m_styledInlineElement->tagQName()))
    903903                removeNodePreservingChildren(elem);
    904904            if (isHTMLStyleNode(style.get(), elem))
     
    10271027    Element *secondElement = static_cast<Element *>(second);
    10281028   
    1029     if (!firstElement->tagName().matches(secondElement->tagName()))
     1029    if (!firstElement->tagQName().matches(secondElement->tagQName()))
    10301030        return false;
    10311031
  • trunk/WebCore/html/HTMLElement.cpp

    r13581 r13726  
    751751    if (newChild->isHTMLElement()) {
    752752        const HTMLElement* child = static_cast<const HTMLElement*>(newChild);
    753         if (inlineTagList()->contains(child->tagName().localName().impl()))
     753        if (inlineTagList()->contains(child->tagQName().localName().impl()))
    754754            return true;
    755         if (blockTagList()->contains(child->tagName().localName().impl()))
     755        if (blockTagList()->contains(child->tagQName().localName().impl()))
    756756            return true;
    757         return !isRecognizedTagName(child->tagName()); // Accept custom html tags
     757        return !isRecognizedTagName(child->tagQName()); // Accept custom html tags
    758758    }
    759759
     
    768768    if (newChild->isHTMLElement()) {
    769769        const HTMLElement* child = static_cast<const HTMLElement*>(newChild);
    770         if (inlineTagList()->contains(child->tagName().localName().impl()))
     770        if (inlineTagList()->contains(child->tagQName().localName().impl()))
    771771            return true;
    772         return !isRecognizedTagName(child->tagName()); // Accept custom html tags
     772        return !isRecognizedTagName(child->tagQName()); // Accept custom html tags
    773773    }
    774774
     
    783783    if (newChild->isHTMLElement()) {
    784784        const HTMLElement* child = static_cast<const HTMLElement*>(newChild);
    785         return (blockTagList()->contains(child->tagName().localName().impl()));
     785        return (blockTagList()->contains(child->tagQName().localName().impl()));
    786786    }
    787787
  • trunk/WebCore/khtml/ecma/kjs_binding.cpp

    r13706 r13726  
    256256}
    257257
    258 String valueToStringWithNullCheck(ExecState *exec, JSValue *val)
     258String valueToStringWithNullCheck(ExecState* exec, JSValue* val)
    259259{
    260260    if (val->isNull())
    261261        return String();
    262262    return val->toString(exec);
     263}
     264
     265bool valueToBooleanTreatUndefinedAsTrue(ExecState* exec, JSValue* val)
     266{
     267    if (val->isUndefined())
     268        return true;
     269    return val->toBoolean(exec);
    263270}
    264271
  • trunk/WebCore/khtml/ecma/kjs_binding.h

    r13706 r13726  
    157157   *  Get a String object or a null String if the value is null
    158158   */
    159   WebCore::String valueToStringWithNullCheck(ExecState* exec, JSValue *val);
     159  WebCore::String valueToStringWithNullCheck(ExecState* exec, JSValue* val);
    160160
    161     template <typename T> inline JSValue* toJS(ExecState* exec, PassRefPtr<T> ptr) { return toJS(exec, ptr.get()); }
     161  bool valueToBooleanTreatUndefinedAsTrue(ExecState* exec, JSValue* val);
     162
     163  template <typename T> inline JSValue* toJS(ExecState* exec, PassRefPtr<T> ptr) { return toJS(exec, ptr.get()); }
    162164 
    163165} // namespace
  • trunk/WebCore/khtml/ecma/kjs_dom.cpp

    r13706 r13726  
    805805
    806806/* Source for DOMElementProtoTable. Use "make hashtables" to regenerate.
    807 @begin DOMElementProtoTable 8
    808   scrollIntoView                DOMElement::ScrollIntoView      DontDelete|Function 1
    809   scrollIntoViewIfNeeded        DOMElement::ScrollIntoViewIfNeeded      DontDelete|Function 1
    810 
    811 # extension for Safari RSS
    812   scrollByLines         DOMElement::ScrollByLines       DontDelete|Function 1
    813   scrollByPages         DOMElement::ScrollByPages       DontDelete|Function 1
     807@begin DOMElementProtoTable 1
    814808@end
    815809*/
     
    819813const ClassInfo DOMElement::info = { "Element", &DOMEventTargetNode::info, &DOMElementTable, 0 };
    820814/* Source for DOMElementTable. Use "make hashtables" to regenerate.
    821 @begin DOMElementTable 17
    822     tagName       DOMElement::TagName                         DontDelete|ReadOnly
    823 
    824 # IE extensions
    825     offsetLeft    DOMElement::OffsetLeft             DontDelete|ReadOnly
    826     offsetTop     DOMElement::OffsetTop              DontDelete|ReadOnly
    827     offsetWidth   DOMElement::OffsetWidth            DontDelete|ReadOnly
    828     offsetHeight  DOMElement::OffsetHeight           DontDelete|ReadOnly
    829     offsetParent  DOMElement::OffsetParent           DontDelete|ReadOnly
    830     clientWidth   DOMElement::ClientWidth            DontDelete|ReadOnly
    831     clientHeight  DOMElement::ClientHeight           DontDelete|ReadOnly
    832     scrollLeft    DOMElement::ScrollLeft             DontDelete
    833     scrollTop     DOMElement::ScrollTop              DontDelete
    834     scrollWidth   DOMElement::ScrollWidth            DontDelete|ReadOnly
    835     scrollHeight  DOMElement::ScrollHeight           DontDelete|ReadOnly
     815@begin DOMElementTable 1
    836816@end
    837817*/
     
    849829JSValue *DOMElement::getValueProperty(ExecState *exec, int token) const
    850830{
    851     Element *element = static_cast<Element *>(impl());
    852     switch (token) {
    853     case TagName:
    854         return jsStringOrNull(element->nodeName());
    855 
    856     default:
    857         // no DOM standard -- IE extension
    858        
    859         // Make sure our layout is up to date before we allow a query on these attributes.
    860         element->document()->updateLayoutIgnorePendingStylesheets();
    861        
    862         RenderObject *rend = element->renderer();
    863        
    864         switch (token) {
    865             case OffsetLeft:
    866                 return rend ? jsNumber(rend->offsetLeft()) : static_cast<JSValue *>(jsUndefined());
    867             case OffsetTop:
    868                 return rend ? jsNumber(rend->offsetTop()) : static_cast<JSValue *>(jsUndefined());
    869             case OffsetWidth:
    870                 return rend ? jsNumber(rend->offsetWidth()) : static_cast<JSValue *>(jsUndefined());
    871             case OffsetHeight:
    872                 return rend ? jsNumber(rend->offsetHeight()) : static_cast<JSValue *>(jsUndefined());
    873             case OffsetParent: {
    874                 RenderObject* par = rend ? rend->offsetParent() : 0;
    875                 return toJS(exec, par ? par->element() : 0);
    876             }
    877             case ClientWidth:
    878                 return rend ? jsNumber(rend->clientWidth()) : static_cast<JSValue *>(jsUndefined());
    879             case ClientHeight:
    880                 return rend ? jsNumber(rend->clientHeight()) : static_cast<JSValue *>(jsUndefined());
    881             case ScrollWidth:
    882                 return rend ? jsNumber(rend->scrollWidth()) : static_cast<JSValue *>(jsUndefined());
    883             case ScrollHeight:
    884                 return rend ? jsNumber(rend->scrollHeight()) : static_cast<JSValue *>(jsUndefined());
    885             case ScrollLeft:
    886                 return jsNumber(rend && rend->layer() ? rend->layer()->scrollXOffset() : 0);
    887             case ScrollTop:
    888                 return jsNumber(rend && rend->layer() ? rend->layer()->scrollYOffset() : 0);
    889         }
    890     }
    891 
    892831    return jsUndefined();
    893832}
     
    900839void DOMElement::putValueProperty(ExecState *exec, int token, JSValue *value, int /*attr*/)
    901840{
    902     WebCore::Node& node = *m_impl;
    903     switch (token) {
    904         case ScrollTop: {
    905             RenderObject *rend = node.renderer();
    906             if (rend && rend->hasOverflowClip())
    907                 rend->layer()->scrollToYOffset(value->toInt32(exec));
    908             break;
    909         }
    910         case ScrollLeft: {
    911             RenderObject *rend = node.renderer();
    912             if (rend && rend->hasOverflowClip())
    913                 rend->layer()->scrollToXOffset(value->toInt32(exec));
    914             break;
    915         }
    916     }
    917841}
    918842
     
    956880  if (!thisObj->inherits(&KJS::DOMElement::info))
    957881    return throwError(exec, TypeError);
    958   DOMExceptionTranslator exception(exec);
    959   WebCore::Node& node = *static_cast<DOMNode*>(thisObj)->impl();
    960   Element &element = static_cast<Element &>(node);
    961 
    962   switch(id) {
    963       case DOMElement::ScrollIntoView:
    964         element.scrollIntoView(args[0]->isUndefinedOrNull() || args[0]->toBoolean(exec));
    965         return jsUndefined();
    966       case DOMElement::ScrollIntoViewIfNeeded:
    967         element.scrollIntoViewIfNeeded(args[0]->isUndefinedOrNull() || args[0]->toBoolean(exec));
    968         return jsUndefined();
    969       case DOMElement::ScrollByLines:
    970       case DOMElement::ScrollByPages:
    971         element.document()->updateLayoutIgnorePendingStylesheets();
    972         if (RenderObject *rend = element.renderer())
    973           if (rend->hasOverflowClip()) {
    974             KWQScrollDirection direction = KWQScrollDown;
    975             int multiplier = args[0]->toInt32(exec);
    976             if (multiplier < 0) {
    977                 direction = KWQScrollUp;
    978                 multiplier = -multiplier;
    979             }
    980             KWQScrollGranularity granularity = id == DOMElement::ScrollByLines ? KWQScrollLine : KWQScrollPage;
    981             rend->layer()->scroll(direction, granularity, multiplier);
    982           }
    983         return jsUndefined();
    984     }
    985882
    986883    return jsUndefined();
Note: See TracChangeset for help on using the changeset viewer.