⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dom_element.cpp

📁 khtml在gtk上的移植版本
💻 CPP
字号:
/** * This file is part of the DOM implementation for KDE. * * (C) 1999 Lars Knoll (knoll@kde.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */#include "dom/dom_exception.h"#include "xml/dom_docimpl.h"#include "xml/dom_elementimpl.h"// FIXME: Remove when .style gets moved to html_element.cpp.#include "html/html_elementimpl.h"using namespace DOM;Attr::Attr() : Node(){}Attr::Attr(const Attr &other) : Node(other){}Attr::Attr( AttrImpl *_impl ){    impl= _impl;    if (impl) impl->ref();}Attr &Attr::operator = (const Node &other){    NodeImpl* ohandle = other.handle();    if ( impl != ohandle ) {    if (!ohandle || !ohandle->isAttributeNode()) {	impl = 0;	} else {    Node::operator =(other);	}    }    return *this;}Attr &Attr::operator = (const Attr &other){    Node::operator =(other);    return *this;}Attr::~Attr(){}DOMString Attr::name() const{#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return DOMString(); }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        return impl->getDocument()->attrName(        static_cast<AttrImpl*>(impl)->attrImpl()->id());}bool Attr::specified() const{  if (impl) return ((AttrImpl *)impl)->specified();  return 0;}Element Attr::ownerElement() const{  if (!impl) return 0;  return static_cast<AttrImpl*>(impl)->ownerElement();}DOMString Attr::value() const{#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return DOMString(); }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        return impl->nodeValue();}void Attr::setValue( const DOMString &newValue ){  if (!impl)    return;  int exceptioncode = 0;  ((AttrImpl *)impl)->setValue(newValue,exceptioncode);  if (exceptioncode)#if KHTML_NO_EXCEPTIONS        { _exceptioncode = exceptioncode; return; }#else    throw DOMException(exceptioncode);#endif    }// ---------------------------------------------------------------------------Element::Element() : Node(){}Element::Element(const Element &other) : Node(other){}Element::Element(ElementImpl *impl) : Node(impl){}Element &Element::operator = (const Node &other){    NodeImpl* ohandle = other.handle();    if ( impl != ohandle ) {    if (!ohandle || !ohandle->isElementNode()) {	impl = 0;	} else {    Node::operator =(other);	}    }    return *this;}Element &Element::operator = (const Element &other){    Node::operator =(other);    return *this;}Element::~Element(){}DOMString Element::tagName() const{#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return DOMString(); }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        return static_cast<ElementImpl*>(impl)->tagName();}DOMString Element::getAttribute( const DOMString &name ){    return getAttributeNS(DOMString(), name);}void Element::setAttribute( const DOMString &name, const DOMString &value ){    setAttributeNS(DOMString(), name, value);}void Element::removeAttribute( const DOMString &name ){    removeAttributeNS(DOMString(), name);}Attr Element::getAttributeNode( const DOMString &name ){    return getAttributeNodeNS(DOMString(), name);}Attr Element::setAttributeNode( const Attr &newAttr ){    return setAttributeNodeNS(newAttr);}Attr Element::removeAttributeNode( const Attr &oldAttr ){#if KHTML_NO_EXCEPTIONS        if (!impl || oldAttr.isNull() || oldAttr.ownerElement() != *this)        { _exceptioncode = DOMException::NOT_FOUND_ERR; return 0; }    if (impl->getDocument() != oldAttr.handle()->getDocument())        { _exceptioncode = DOMException::WRONG_DOCUMENT_ERR; return 0; }#else    if (!impl || oldAttr.isNull() || oldAttr.ownerElement() != *this)        throw DOMException(DOMException::NOT_FOUND_ERR);    if (impl->getDocument() != oldAttr.handle()->getDocument())        throw DOMException(DOMException::WRONG_DOCUMENT_ERR);#endif        NodeImpl::Id attrName = static_cast<AttrImpl*>(oldAttr.handle())->attrImpl()->id();    int exceptioncode = 0;    Attr r = static_cast<ElementImpl*>(impl)->attributes(true)->removeNamedItem(attrName, exceptioncode);    if ( exceptioncode )#if KHTML_NO_EXCEPTIONS            { _exceptioncode = exceptioncode; return 0; }#else        throw DOMException( exceptioncode );#endif        return r;}NodeList Element::getElementsByTagName( const DOMString &name ){    if (!impl) return 0;    return static_cast<ElementImpl*>(impl)->        getElementsByTagNameNS(0, name.implementation());}NodeList Element::getElementsByTagNameNS( const DOMString &namespaceURI,                                          const DOMString &localName ){    if (!impl) return 0;    return static_cast<ElementImpl*>(impl)->        getElementsByTagNameNS(namespaceURI.implementation(), localName.implementation());}DOMString Element::getAttributeNS( const DOMString &namespaceURI,                                   const DOMString &localName){#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return DOMString(); }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        return static_cast<ElementImpl*>(impl)->getAttributeNS(namespaceURI, localName).domString();}void Element::setAttributeNS( const DOMString &namespaceURI,                              const DOMString &qualifiedName,                              const DOMString &value){#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return; }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        int colonpos = qualifiedName.find(':');    DOMString localName = qualifiedName;    if (colonpos >= 0) {        localName.remove(0, colonpos+1);        // ### extract and set new prefix    }#if KHTML_NO_EXCEPTIONS        if (!DocumentImpl::isValidName(localName)) { _exceptioncode = DOMException::INVALID_CHARACTER_ERR; return ; }#else    if (!DocumentImpl::isValidName(localName)) throw DOMException(DOMException::INVALID_CHARACTER_ERR);#endif        NodeImpl::Id id = impl->getDocument()->attrId(namespaceURI.implementation(),                                                    localName.implementation(), false /* allocate */);    int exceptioncode = 0;    static_cast<ElementImpl*>(impl)->setAttribute(id, value.implementation(), exceptioncode);    if (exceptioncode)#if KHTML_NO_EXCEPTIONS            { _exceptioncode = exceptioncode; return; }#else        throw DOMException(exceptioncode);#endif    }void Element::removeAttributeNS( const DOMString &namespaceURI,                                 const DOMString &localName ){#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return; }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        NodeImpl::Id id = impl->getDocument()->attrId(namespaceURI.implementation(),                                                    localName.implementation(), true);    if (!id) return;    int exceptioncode = 0;    ((ElementImpl *)impl)->removeAttribute(id, exceptioncode);    if ( exceptioncode )#if KHTML_NO_EXCEPTIONS            { _exceptioncode = exceptioncode; return; }#else        throw DOMException( exceptioncode );#endif    }Attr Element::getAttributeNodeNS( const DOMString &namespaceURI,                                  const DOMString &localName ){#if KHTML_NO_EXCEPTIONS        if (!impl) { _exceptioncode = DOMException::NOT_FOUND_ERR; return 0; }#else    if (!impl) throw DOMException(DOMException::NOT_FOUND_ERR);#endif        NodeImpl::Id id = impl->getDocument()->attrId(namespaceURI.implementation(),                                                    localName.implementation(), true);    if (!id) return 0;    ElementImpl* e = static_cast<ElementImpl*>(impl);    if (!e->attributes()) return 0; // exception ?    return e->attributes()->getNamedItem(id);}Attr Element::setAttributeNodeNS( const Attr &newAttr ){    if (!impl)#if KHTML_NO_EXCEPTIONS            { _exceptioncode = DOMException::NOT_FOUND_ERR; return 0; }#else        throw DOMException(DOMException::NOT_FOUND_ERR);#endif        int exceptioncode = 0;    Attr r = static_cast<ElementImpl*>(impl)->attributes(false)->setNamedItem(newAttr.handle(), exceptioncode);    if ( exceptioncode )#if KHTML_NO_EXCEPTIONS            { _exceptioncode = exceptioncode; return 0; }#else        throw DOMException( exceptioncode );#endif        return r;}bool Element::hasAttribute( const DOMString& name ){    return hasAttributeNS(DOMString(), name);}bool Element::hasAttributeNS( const DOMString &namespaceURI,                              const DOMString &localName ){    if (!impl || !static_cast<ElementImpl*>(impl)->attributes()) return false; // ### throw ?    NodeImpl::Id id = impl->getDocument()->attrId(namespaceURI.implementation(),                                                    localName.implementation(), true);    if (!id) return false;    if (!static_cast<ElementImpl*>(impl)->attributes(true /*readonly*/)) return false;    return static_cast<ElementImpl*>(impl)->attributes(true)->getAttributeItem(id) != 0;}bool Element::isHTMLElement() const{    if(!impl) return false;    return ((ElementImpl *)impl)->isHTMLElement();}// FIXME: This should move down to HTMLElement.CSSStyleDeclaration Element::style(){    if (isHTMLElement())        return ((HTMLElementImpl *)impl)->getInlineStyleDecl();    return 0;}bool Element::khtmlValidAttrName(const DOMString &/*name*/){    // ###    return true;}bool Element::khtmlValidPrefix(const DOMString &/*name*/){    // ###    return true;}bool Element::khtmlValidQualifiedName(const DOMString &/*name*/){    // ###    return true;}bool Element::khtmlMalformedQualifiedName(const DOMString &/*name*/){    // ###    return false;}bool Element::khtmlMalformedPrefix(const DOMString &/*name*/){    // ###    return false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -