10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is free software; you can redistribute it and/or 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch modify it under the terms of the GNU Library General Public 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch License as published by the Free Software Foundation; either 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch version 2 of the License, or (at your option) any later version. 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This library is distributed in the hope that it will be useful, 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch but WITHOUT ANY WARRANTY; without even the implied warranty of 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Library General Public License for more details. 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch You should have received a copy of the GNU Library General Public License 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch along with this library; see the file COPYING.LIB. If not, write to 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Boston, MA 02110-1301, USA. 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h" 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebelement.h" 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSComputedStyleDeclaration.h" 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSMutableStyleDeclaration.h" 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSParser.h" 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSRule.h" 27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "CSSRuleList.h" 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSStyleRule.h" 29e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "CSSStyleSelector.h" 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Document.h" 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "DocumentFragment.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FrameView.h" 33cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "GraphicsContext.h" 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLElement.h" 3568513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC) 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSGlobalObject.h" 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSHTMLElement.h" 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSObject.h" 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "PropertyNameArray.h" 4068513a70bcd92384395513322f1b801e7bf9c729Steve Block#include <parser/SourceCode.h> 4168513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "qt_runtime.h" 4268513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8) 4368513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8DOMWindow.h" 4468513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8Binding.h" 4568513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "NotImplemented.h" 4668513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 4768513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "NodeList.h" 48cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "RenderImage.h" 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "StaticNodeList.h" 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebframe.h" 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebframe_p.h" 5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(JSC) 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "runtime_root.h" 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/Vector.h> 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h> 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 58cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include <QPainter> 59cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 6068513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(V8) 6168513a70bcd92384395513322f1b801e7bf9c729Steve Blockusing namespace V8::Bindings; 6268513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 6368513a70bcd92384395513322f1b801e7bf9c729Steve Block 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochusing namespace WebCore; 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass QWebElementPrivate { 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic: 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}; 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \class QWebElement 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \since 4.6 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \brief The QWebElement class provides convenient access to DOM elements in 74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block a QWebFrame. 75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \inmodule QtWebKit 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block A QWebElement object allows easy access to the document model, represented 78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block by a tree-like structure of DOM elements. The root of the tree is called 79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the document element and can be accessed using 80231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block QWebFrame::documentElement(). 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 82231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Specific elements can be accessed using findAll() and findFirst(). These 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block elements are identified using CSS selectors. The code snippet below 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block demonstrates the use of findAll(). 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \snippet webkitsnippets/webelement/main.cpp FindAll 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block The first list contains all \c span elements in the document. The second 89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block list contains \c span elements that are children of \c p, classified with 90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \c intro. 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Using findFirst() is more efficient than calling findAll(), and extracting 93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the first element only in the list returned. 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Alternatively you can traverse the document manually using firstChild() and 96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block nextSibling(): 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \snippet webkitsnippets/webelement/main.cpp Traversing with QWebElement 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Individual elements can be inspected or changed using methods such as attribute() 1016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen or setAttribute(). For examle, to capture the user's input in a text field for later 1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen use (auto-completion), a browser could do something like this: 1036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen \snippet webkitsnippets/webelement/main.cpp autocomplete1 1056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen When the same page is later revisited, the browser can fill in the text field automatically 1076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen by modifying the value attribute of the input element: 1086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen \snippet webkitsnippets/webelement/main.cpp autocomplete2 1106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Another use case is to emulate a click event on an element. The following 1126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen code snippet demonstrates how to call the JavaScript DOM method click() of 1136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen a submit button: 1146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 1156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen \snippet webkitsnippets/webelement/main.cpp Calling a DOM element method 1166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block The underlying content of QWebElement is explicitly shared. Creating a copy 118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block of a QWebElement does not create a copy of the content. Instead, both 119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block instances point to the same element. 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block The contents of child elements can be converted to plain text with 122231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block toPlainText(); to XHTML using toInnerXml(). To include the element's tag in 123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the output, use toOuterXml(). 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block It is possible to replace the contents of child elements using 126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block setPlainText() and setInnerXml(). To replace the element itself and its 127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block contents, use setOuterXml(). 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \section1 Examples 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The \l{DOM Traversal Example} shows one way to traverse documents in a running 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block example. 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The \l{Simple Selector Example} can be used to experiment with the searching 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block features of this class and provides sample code you can start working with. 1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Constructs a null web element. 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement::QWebElement() 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : d(0) 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_element(0) 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \internal 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement::QWebElement(WebCore::Element* domElement) 1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : d(0) 1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_element(domElement) 1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element) 1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->ref(); 1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \internal 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement::QWebElement(WebCore::Node* node) 1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : d(0) 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_element(0) 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (node && node->isHTMLElement()) { 1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element = static_cast<HTMLElement*>(node); 1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->ref(); 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Constructs a copy of \a other. 1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement::QWebElement(const QWebElement &other) 1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : d(0) 1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_element(other.m_element) 1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element) 1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->ref(); 1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Assigns \a other to this element and returns a reference to this element. 1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement &QWebElement::operator=(const QWebElement &other) 1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // ### handle "d" assignment 1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this != &other) { 1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Element *otherElement = other.m_element; 1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (otherElement) 1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch otherElement->ref(); 1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element) 1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->deref(); 1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element = otherElement; 1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return *this; 1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Destroys the element. However, the underlying DOM element is not destroyed. 2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement::~QWebElement() 2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete d; 2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element) 2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->deref(); 2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::operator==(const QWebElement& o) const 2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element == o.m_element; 2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::operator!=(const QWebElement& o) const 2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element != o.m_element; 2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 220231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if the element is a null element; otherwise returns false. 2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::isNull() const 2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return !m_element; 2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns a new list of child elements matching the given CSS selector 229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a selectorQuery. If there are no matching elements, an empty list is 230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block returned. 2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \l{Standard CSS2 selector} syntax is used for the query. 2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \note This search is performed recursively. 235231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 236231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa findFirst() 2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 238cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection QWebElement::findAll(const QString &selectorQuery) const 2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 240cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return QWebElementCollection(*this, selectorQuery); 2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 244231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the first child element that matches the given CSS selector 245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a selectorQuery. 2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \l{Standard CSS2 selector} syntax is used for the query. 2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \note This search is performed recursively. 250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa findAll() 2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::findFirst(const QString &selectorQuery) const 2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; // ### 2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(m_element->querySelector(selectorQuery, exception).get()); 2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Replaces the existing content of this element with \a text. 2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This is equivalent to setting the HTML innerText property. 265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa toPlainText() 2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::setPlainText(const QString &text) 2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<HTMLElement*>(m_element)->setInnerText(text, exception); 2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns the text between the start and the end tag of this 2780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch element. 2790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This is equivalent to reading the HTML innerText property. 281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setPlainText() 2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::toPlainText() const 2850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<HTMLElement*>(m_element)->innerText(); 2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 292231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Replaces the contents of this element as well as its own tag with 293231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a markup. The string may contain HTML or XML tags, which is parsed and 294231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block formatted before insertion into the document. 2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \note This is currently only implemented for (X)HTML elements. 297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 298231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa toOuterXml(), toInnerXml(), setInnerXml() 2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::setOuterXml(const QString &markup) 3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<HTMLElement*>(m_element)->setOuterHTML(markup, exception); 3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns this element converted to XML, including the start and the end 312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block tags as well as its attributes. 3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 314231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \note This is currently implemented for (X)HTML elements only. 315231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 31628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu \note The format of the markup returned will obey the namespace of the 31728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu document containing the element. This means the return value will obey XML 31828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu formatting rules, such as self-closing tags, only if the document is 31928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 'text/xhtml+xml'. 32028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 321231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setOuterXml(), setInnerXml(), toInnerXml() 3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::toOuterXml() const 3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<HTMLElement*>(m_element)->outerHTML(); 3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 332231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Replaces the contents of this element with \a markup. The string may 333231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block contain HTML or XML tags, which is parsed and formatted before insertion 334231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block into the document. 3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 336231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \note This is currently implemented for (X)HTML elements only. 337231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 338231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa toInnerXml(), toOuterXml(), setOuterXml() 3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::setInnerXml(const QString &markup) 3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static_cast<HTMLElement*>(m_element)->setInnerHTML(markup, exception); 3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 351231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the XML content between the element's start and end tags. 3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 353231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \note This is currently implemented for (X)HTML elements only. 354231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 35528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu \note The format of the markup returned will obey the namespace of the 35628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu document containing the element. This means the return value will obey XML 35728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu formatting rules, such as self-closing tags, only if the document is 35828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 'text/xhtml+xml'. 35928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 360231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setInnerXml(), setOuterXml(), toOuterXml() 3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::toInnerXml() const 3630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isHTMLElement()) 3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<HTMLElement*>(m_element)->innerHTML(); 3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Adds an attribute with the given \a name and \a value. If an attribute with 372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the same name exists, its value is replaced by \a value. 373231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attribute(), attributeNS(), setAttributeNS() 3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::setAttribute(const QString &name, const QString &value) 3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->setAttribute(name, value, exception); 3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 385231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Adds an attribute with the given \a name in \a namespaceUri with \a value. 386231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If an attribute with the same name exists, its value is replaced by 387231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a value. 388231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 389231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attributeNS(), attribute(), setAttribute() 3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::setAttributeNS(const QString &namespaceUri, const QString &name, const QString &value) 3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCore::ExceptionCode exception = 0; 3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->setAttributeNS(namespaceUri, name, value, exception); 3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 400231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the attribute with the given \a name. If the attribute does not 401231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block exist, \a defaultValue is returned. 402231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 403231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setAttribute(), setAttributeNS(), attributeNS() 4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::attribute(const QString &name, const QString &defaultValue) const 4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasAttribute(name)) 4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->getAttribute(name); 4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return defaultValue; 4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 416231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the attribute with the given \a name in \a namespaceUri. If the 417231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block attribute does not exist, \a defaultValue is returned. 418231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 419231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setAttributeNS(), setAttribute(), attribute() 4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::attributeNS(const QString &namespaceUri, const QString &name, const QString &defaultValue) const 4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasAttributeNS(namespaceUri, name)) 4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->getAttributeNS(namespaceUri, name); 4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return defaultValue; 4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 432231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if this element has an attribute with the given \a name; 433231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block otherwise returns false. 434231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 435231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attribute(), setAttribute() 4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::hasAttribute(const QString &name) const 4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->hasAttribute(name); 4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 445231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if this element has an attribute with the given \a name, in 446231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a namespaceUri; otherwise returns false. 447231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 448231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attributeNS(), setAttributeNS() 4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::hasAttributeNS(const QString &namespaceUri, const QString &name) const 4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->hasAttributeNS(namespaceUri, name); 4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 458231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Removes the attribute with the given \a name from this element. 459231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 460231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attribute(), setAttribute(), hasAttribute() 4610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::removeAttribute(const QString &name) 4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->removeAttribute(name, exception); 4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 471231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Removes the attribute with the given \a name, in \a namespaceUri, from this 472231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block element. 473231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 474231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attributeNS(), setAttributeNS(), hasAttributeNS() 4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::removeAttributeNS(const QString &namespaceUri, const QString &name) 4770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCore::ExceptionCode exception = 0; 4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->removeAttributeNS(namespaceUri, name, exception); 4820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 485231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if the element has any attributes defined; otherwise returns 486231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block false; 487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 488231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa attribute(), setAttribute() 4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::hasAttributes() const 4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 4940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->hasAttributes(); 4950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 498643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Return the list of attributes for the namespace given as \a namespaceUri. 499643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 500643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa attribute(), setAttribute() 501643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 502643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockQStringList QWebElement::attributeNames(const QString& namespaceUri) const 503643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 504643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_element) 505643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return QStringList(); 506643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 507643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QStringList attributeNameList; 508643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const NamedNodeMap* const attrs = m_element->attributes(/* read only = */ true); 509643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (attrs) { 510643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const String namespaceUriString(namespaceUri); // convert QString -> String once 511643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const unsigned attrsCount = attrs->length(); 512643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (unsigned i = 0; i < attrsCount; ++i) { 513643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const Attribute* const attribute = attrs->attributeItem(i); 514643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (namespaceUriString == attribute->namespaceURI()) 515643ca7872b450ea4efacab6188849e5aac2ba161Steve Block attributeNameList.append(attribute->localName()); 516643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 517643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 518643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return attributeNameList; 519643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 520643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 521643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 522231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if the element has keyboard input focus; otherwise, returns false 523231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 524231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setFocus() 525231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block*/ 526231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockbool QWebElement::hasFocus() const 527231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 528231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!m_element) 529231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 530231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_element->document()) 531231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return m_element == m_element->document()->focusedNode(); 532231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 533231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 534231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 535231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*! 536231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Gives keyboard input focus to this element 537231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 538231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa hasFocus() 539231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block*/ 540231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid QWebElement::setFocus() 541231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 542231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!m_element) 543231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 544231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_element->document() && m_element->isFocusable()) 545231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_element->document()->setFocusedNode(m_element); 546231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 547231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 548231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*! 5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns the geometry of this element, relative to its containing frame. 550231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 551231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa tagName() 5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQRect QWebElement::geometry() const 5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QRect(); 5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->getRect(); 5580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 5610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns the tag name of this element. 562231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 563231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa geometry() 5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::tagName() const 5660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 5680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 5690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->tagName(); 5700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 573231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the namespace prefix of the element. If the element has no\ 574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block namespace prefix, empty string is returned. 5750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 5760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::prefix() const 5770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 5790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 5800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->prefix(); 5810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 584231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the local name of the element. If the element does not use 585231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block namespaces, an empty string is returned. 5860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 5870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::localName() const 5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 5900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->localName(); 5920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 595231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the namespace URI of this element. If the element has no namespace 596231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block URI, an empty string is returned. 5970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQString QWebElement::namespaceUri() const 5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_element->namespaceURI(); 6030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 606231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the parent element of this elemen. If this element is the root 607231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block document element, a null element is returned. 6080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::parent() const 6100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element) 6120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(m_element->parentElement()); 6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 617231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the element's first child. 6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 619231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa lastChild(), previousSibling(), nextSibling() 6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::firstChild() const 6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Node* child = m_element->firstChild(); child; child = child->nextSibling()) { 6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!child->isElementNode()) 6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 6280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Element* e = static_cast<Element*>(child); 6290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(e); 6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 6310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 635231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the element's last child. 6360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 637231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa firstChild(), previousSibling(), nextSibling() 6380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::lastChild() const 6400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Node* child = m_element->lastChild(); child; child = child->previousSibling()) { 6440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!child->isElementNode()) 6450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 6460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Element* e = static_cast<Element*>(child); 6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(e); 6480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 653231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the element's next sibling. 6540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 655231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa firstChild(), previousSibling(), lastChild() 6560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::nextSibling() const 6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Node* sib = m_element->nextSibling(); sib; sib = sib->nextSibling()) { 6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!sib->isElementNode()) 6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Element* e = static_cast<Element*>(sib); 6650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(e); 6660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 6670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 671231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the element's previous sibling. 6720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 673231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa firstChild(), nextSibling(), lastChild() 6740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::previousSibling() const 6760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Node* sib = m_element->previousSibling(); sib; sib = sib->previousSibling()) { 6800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!sib->isElementNode()) 6810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 6820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Element* e = static_cast<Element*>(sib); 6830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(e); 6840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 6850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 689231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the document which this element belongs to. 6900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::document() const 6920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 6940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Document* document = m_element->document(); 6960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!document) 6970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 6980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(document->documentElement()); 6990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 7000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 702231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the web frame which this element is a part of. If the element is a 703231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block null element, null is returned. 7040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 7050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebFrame *QWebElement::webFrame() const 7060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 7070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 7080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 7090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Document* document = m_element->document(); 7110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!document) 7120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 7130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = document->frame(); 7150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!frame) 7160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 7170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebFramePrivate::kit(frame); 7180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 7190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 72068513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC) 7210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic bool setupScriptContext(WebCore::Element* element, JSC::JSValue& thisValue, ScriptState*& state, ScriptController*& scriptController) 7220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 7230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!element) 7240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Document* document = element->document(); 7270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!document) 7280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = document->frame(); 7310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!frame) 7320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch scriptController = frame->script(); 7350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!scriptController) 7360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 738cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block state = scriptController->globalObject(mainThreadNormalWorld())->globalExec(); 7390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!state) 7400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch thisValue = toJS(state, element); 7430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!thisValue) 7440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 7450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 74868513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8) 74968513a70bcd92384395513322f1b801e7bf9c729Steve Blockstatic bool setupScriptContext(WebCore::Element* element, v8::Handle<v8::Value>& thisValue, ScriptState*& state, ScriptController*& scriptController) 75068513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 75168513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!element) 75268513a70bcd92384395513322f1b801e7bf9c729Steve Block return false; 75368513a70bcd92384395513322f1b801e7bf9c729Steve Block 75468513a70bcd92384395513322f1b801e7bf9c729Steve Block Document* document = element->document(); 75568513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!document) 75668513a70bcd92384395513322f1b801e7bf9c729Steve Block return false; 75768513a70bcd92384395513322f1b801e7bf9c729Steve Block 75868513a70bcd92384395513322f1b801e7bf9c729Steve Block Frame* frame = document->frame(); 75968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!frame) 76068513a70bcd92384395513322f1b801e7bf9c729Steve Block return false; 76168513a70bcd92384395513322f1b801e7bf9c729Steve Block 76268513a70bcd92384395513322f1b801e7bf9c729Steve Block state = mainWorldScriptState(frame); 76368513a70bcd92384395513322f1b801e7bf9c729Steve Block // Get V8 wrapper for DOM element 76468513a70bcd92384395513322f1b801e7bf9c729Steve Block thisValue = toV8(frame->domWindow()); 76568513a70bcd92384395513322f1b801e7bf9c729Steve Block return true; 76668513a70bcd92384395513322f1b801e7bf9c729Steve Block} 76768513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 7680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 771231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Executes \a scriptSource with this element as \c this object. 7720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 773231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockQVariant QWebElement::evaluateJavaScript(const QString& scriptSource) 7740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 7750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (scriptSource.isEmpty()) 7760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QVariant(); 7770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ScriptState* state = 0; 77968513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC) 7800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue thisValue; 78168513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8) 78268513a70bcd92384395513322f1b801e7bf9c729Steve Block v8::Handle<v8::Value> thisValue; 78368513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 7840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ScriptController* scriptController = 0; 7850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!setupScriptContext(m_element, thisValue, state, scriptController)) 7870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QVariant(); 78868513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC) 78981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch JSC::ScopeChainNode* scopeChain = state->dynamicGlobalObject()->globalScopeChain(); 790e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block JSC::UString script(reinterpret_cast_ptr<const UChar*>(scriptSource.data()), scriptSource.length()); 7910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::Completion completion = JSC::evaluate(state, scopeChain, JSC::makeSource(script), thisValue); 7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ((completion.complType() != JSC::ReturnValue) && (completion.complType() != JSC::Normal)) 7930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QVariant(); 7940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSC::JSValue result = completion.value(); 7960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!result) 7970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QVariant(); 7980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int distance = 0; 8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return JSC::Bindings::convertValueToQVariant(state, result, QMetaType::Void, &distance); 80168513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8) 80268513a70bcd92384395513322f1b801e7bf9c729Steve Block notImplemented(); 80368513a70bcd92384395513322f1b801e7bf9c729Steve Block return QVariant(); 80468513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 808231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \enum QWebElement::StyleResolveStrategy 8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch This enum describes how QWebElement's styleProperty resolves the given 8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch property name. 8120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 813231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \value InlineStyle Return the property value as it is defined in 814231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the element, without respecting style inheritance and other CSS 815231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block rules. 816231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \value CascadedStyle The property's value is determined using the 817231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inheritance and importance rules defined in the document's 818231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block stylesheet. 819231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \value ComputedStyle The property's value is the absolute value 820231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block of the style property resolved from the environment. 8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 824231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns the value of the style with the given \a name using the specified 825231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a strategy. If a style with \a name does not exist, an empty string is 826231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block returned. 8270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 828231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block In CSS, the cascading part depends on which CSS rule has priority and is 829231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block thus applied. Generally, the last defined rule has priority. Thus, an 830231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inline style rule has priority over an embedded block style rule, which 831231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block in return has priority over an external style rule. 8320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 833231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If the "!important" declaration is set on one of those, the declaration 834231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block receives highest priority, unless other declarations also use the 835231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block "!important" declaration. Then, the last "!important" declaration takes 836231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block predecence. 8370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 838231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \sa setStyleProperty() 8390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 840231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 841231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockQString QWebElement::styleProperty(const QString &name, StyleResolveStrategy strategy) const 8420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 8430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isStyledElement()) 8440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 8450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int propID = cssPropertyID(name); 8470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!propID) 8490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 8500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CSSStyleDeclaration* style = static_cast<StyledElement*>(m_element)->style(); 8520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 853231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (strategy == InlineStyle) 8540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return style->getPropertyValue(propID); 8550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 856231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (strategy == CascadedStyle) { 8570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (style->getPropertyPriority(propID)) 8580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return style->getPropertyValue(propID); 8590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // We are going to resolve the style property by walking through the 8610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // list of non-inline matched CSS rules for the element, looking for 8620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // the highest priority definition. 8630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Get an array of matched CSS rules for the given element sorted 8650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // by importance and inheritance order. This include external CSS 8660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // declarations, as well as embedded and inline style declarations. 8670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 868e14391e94c850b8bd03680c23b38978db68687a8John Reck Document* doc = m_element->document(); 869e14391e94c850b8bd03680c23b38978db68687a8John Reck if (RefPtr<CSSRuleList> rules = doc->styleSelector()->styleRulesForElement(m_element, /*authorOnly*/ true)) { 8700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (int i = rules->length(); i > 0; --i) { 8710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CSSStyleRule* rule = static_cast<CSSStyleRule*>(rules->item(i - 1)); 8720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (rule->style()->getPropertyPriority(propID)) 8740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return rule->style()->getPropertyValue(propID); 8750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (style->getPropertyValue(propID).isEmpty()) 8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch style = rule->style(); 8780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return style->getPropertyValue(propID); 8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 884231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (strategy == ComputedStyle) { 885231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!m_element || !m_element->isStyledElement()) 886231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return QString(); 887231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 888231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block int propID = cssPropertyID(name); 889231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 89021939df44de1705786c545cd1bf519d47250322dBen Murdoch RefPtr<CSSComputedStyleDeclaration> style = computedStyle(m_element, true); 891231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!propID || !style) 892231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return QString(); 893231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 894231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return style->getPropertyValue(propID); 895231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 896231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 8970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QString(); 8980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 901231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Sets the value of the inline style with the given \a name to \a value. 9020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 903231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Setting a value, does not necessarily mean that it will become the applied 9040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch value, due to the fact that the style property's value might have been set 905231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block earlier with a higher priority in external or embedded style declarations. 9060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 907231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block In order to ensure that the value will be applied, you may have to append 9080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch "!important" to the value. 9090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 910231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid QWebElement::setStyleProperty(const QString &name, const QString &value) 9110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || !m_element->isStyledElement()) 9130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int propID = cssPropertyID(name); 9160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CSSStyleDeclaration* style = static_cast<StyledElement*>(m_element)->style(); 9170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!propID || !style) 9180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 921231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block style->setProperty(name, value, exception); 9220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 9250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns the list of classes of this element. 9260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 9270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQStringList QWebElement::classes() const 9280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hasAttribute(QLatin1String("class"))) 9300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QStringList(); 9310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList classes = attribute(QLatin1String("class")).simplified().split(QLatin1Char(' '), QString::SkipEmptyParts); 9330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch classes.removeDuplicates(); 9340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return classes; 9350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 938231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if this element has a class with the given \a name; otherwise 939231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block returns false. 9400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebElement::hasClass(const QString &name) const 9420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList list = classes(); 9440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return list.contains(name); 9450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 948231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Adds the specified class with the given \a name to the element. 9490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 9500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::addClass(const QString &name) 9510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList list = classes(); 9530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!list.contains(name)) { 9540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch list.append(name); 9550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString value = list.join(QLatin1String(" ")); 9560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setAttribute(QLatin1String("class"), value); 9570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 961231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Removes the specified class with the given \a name from the element. 9620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 9630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::removeClass(const QString &name) 9640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList list = classes(); 9660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (list.contains(name)) { 9670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch list.removeAll(name); 9680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString value = list.join(QLatin1String(" ")); 9690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setAttribute(QLatin1String("class"), value); 9700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 9710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 974231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Adds the specified class with the given \a name if it is not present. If 975231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the class is already present, it will be removed. 9760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 9770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::toggleClass(const QString &name) 9780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStringList list = classes(); 9800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (list.contains(name)) 9810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch list.removeAll(name); 9820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 9830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch list.append(name); 9840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QString value = list.join(QLatin1String(" ")); 9860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setAttribute(QLatin1String("class"), value); 9870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 990231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Appends the given \a element as the element's last child. 9910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 992231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If \a element is the child of another element, it is re-parented to this 993231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block element. If \a element is a child of this element, then its position in 994231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the list of children is changed. 9950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 9970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa prependInside(), prependOutside(), appendOutside() 9990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 10000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::appendInside(const QWebElement &element) 10010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 10030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 10060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(element.m_element, exception); 10070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 10100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Appends the result of parsing \a markup as the element's last child. 10110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 10130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa prependInside(), prependOutside(), appendOutside() 10150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 10160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::appendInside(const QString &markup) 10170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 10190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 10220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 10254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang RefPtr<DocumentFragment> fragment = htmlElement->Element::deprecatedCreateContextualFragment(markup); 10260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 10280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(fragment, exception); 10290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 10320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Prepends \a element as the element's first child. 10330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1034231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If \a element is the child of another element, it is re-parented to this 1035231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block element. If \a element is a child of this element, then its position in 1036231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the list of children is changed. 10370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 10390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependOutside(), appendOutside() 10410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 10420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::prependInside(const QWebElement &element) 10430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 10450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 10480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasChildNodes()) 10500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->insertBefore(element.m_element, m_element->firstChild(), exception); 10510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 10520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(element.m_element, exception); 10530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 10560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Prepends the result of parsing \a markup as the element's first child. 10570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 10590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependOutside(), appendOutside() 10610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 10620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::prependInside(const QString &markup) 10630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 10650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 10680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 1071f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); 10720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 10740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasChildNodes()) 10760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->insertBefore(fragment, m_element->firstChild(), exception); 10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(fragment, exception); 10790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1083231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Inserts the given \a element before this element. 10840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1085231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If \a element is the child of another element, it is re-parented to the 1086231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block parent of this element. 10870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 10890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependInside(), appendOutside() 10910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 10920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::prependOutside(const QWebElement &element) 10930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 10950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 10980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 10990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 11016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->insertBefore(element.m_element, m_element, exception); 11020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 11050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Inserts the result of parsing \a markup before this element. 11060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 11080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependInside(), appendOutside() 11100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 11110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::prependOutside(const QString &markup) 11120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 11170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 1123f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); 11240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 11266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->insertBefore(fragment, m_element, exception); 11270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Inserts the given \a element after this element. 11310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1132231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block If \a element is the child of another element, it is re-parented to the 1133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block parent of this element. 11340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 11360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependInside(), prependOutside() 11380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 11390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::appendOutside(const QWebElement &element) 11400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 11420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 11450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 11480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->nextSibling()) 11496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->appendChild(element.m_element, exception); 11500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 11516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->insertBefore(element.m_element, m_element->nextSibling(), exception); 11520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Inserts the result of parsing \a markup after this element. 11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Calling this function on a null element does nothing. 11580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependInside(), prependOutside() 11600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 11610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::appendOutside(const QString &markup) 11620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 11640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 11670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 11700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 11710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 1173f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); 11740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 11760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->nextSibling()) 11776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->appendChild(fragment, exception); 11780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 11796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_element->parentNode()->insertBefore(fragment, m_element->nextSibling(), exception); 11800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 11830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Returns a clone of this element. 11840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch The clone may be inserted at any point in the document. 11860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa appendInside(), prependInside(), prependOutside(), appendOutside() 11880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 11890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebElement::clone() const 11900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 11920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(); 11930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QWebElement(m_element->cloneElementWithChildren().get()); 11950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Removes this element from the document and returns a reference to it. 11990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block The element is still valid after removal, and can be inserted into other 1201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block parts of the document. 12020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1203cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa removeAllChildren(), removeFromDocument() 12040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 12050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement &QWebElement::takeFromDocument() 12060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 12080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return *this; 12090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 12110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->remove(exception); 12120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return *this; 12140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1217231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Removes this element from the document and makes it a null element. 12180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1219cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa removeAllChildren(), takeFromDocument() 12200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 12210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::removeFromDocument() 12220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 12240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 12270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->remove(exception); 12280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->deref(); 12290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element = 0; 12300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 12330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Removes all children from this element. 12340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa removeFromDocument(), takeFromDocument() 12360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1237cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid QWebElement::removeAllChildren() 12380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 12400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->removeAllChildren(); 12430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1245e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// FIXME: This code, and all callers are wrong, and have no place in a 1246e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// WebKit implementation. These should be replaced with WebCore implementations. 12470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic RefPtr<Node> findInsertionPoint(PassRefPtr<Node> root) 12480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> node = root; 12500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Go as far down the tree as possible. 12520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch while (node->hasChildNodes() && node->firstChild()->isElementNode()) 12530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch node = node->firstChild(); 12540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // TODO: Implement SVG support 12560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (node->isHTMLElement()) { 12570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* element = static_cast<HTMLElement*>(node.get()); 12580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // The insert point could be a non-enclosable tag and it can thus 12600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // never have children, so go one up. Get the parent element, and not 12610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // note as a root note will always exist. 1262e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (element->ieForbidsInsertHTML()) 12630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch node = node->parentElement(); 12640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return node; 12670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Encloses the contents of this element with \a element. This element becomes 1271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the child of the deepest descendant within \a element. 1272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ### illustration 12740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa encloseWith() 12760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 12770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::encloseContentsWith(const QWebElement &element) 12780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 12800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> insertionPoint = findInsertionPoint(element.m_element); 12830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!insertionPoint) 12850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 12880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // reparent children 12900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (RefPtr<Node> child = m_element->firstChild(); child;) { 12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> next = child->nextSibling(); 12920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch insertionPoint->appendChild(child, exception); 12930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch child = next; 12940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasChildNodes()) 12970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->insertBefore(element.m_element, m_element->firstChild(), exception); 12980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 12990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(element.m_element, exception); 13000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 13010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1303231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Encloses the contents of this element with the result of parsing \a markup. 1304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block This element becomes the child of the deepest descendant within \a markup. 13050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa encloseWith() 13070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 13080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::encloseContentsWith(const QString &markup) 13090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 13100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 13110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 13140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 13170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 1320f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); 13210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!fragment || !fragment->firstChild()) 13230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> insertionPoint = findInsertionPoint(fragment->firstChild()); 13260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!insertionPoint) 13280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 13310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // reparent children 13330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (RefPtr<Node> child = m_element->firstChild(); child;) { 13340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> next = child->nextSibling(); 13350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch insertionPoint->appendChild(child, exception); 13360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch child = next; 13370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 13380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_element->hasChildNodes()) 13400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->insertBefore(fragment, m_element->firstChild(), exception); 13410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 13420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_element->appendChild(fragment, exception); 13430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 13440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1346231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Encloses this element with \a element. This element becomes the child of 1347231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block the deepest descendant within \a element. 13480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa replace() 13500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 13510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::encloseWith(const QWebElement &element) 13520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 13530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 13540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> insertionPoint = findInsertionPoint(element.m_element); 13570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!insertionPoint) 13590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Keep reference to these two nodes before pulling out this element and 13620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // wrapping it in the fragment. The reason for doing it in this order is 13630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // that once the fragment has been added to the document it is empty, so 13640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // we no longer have access to the nodes it contained. 13656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Node* parent = m_element->parentNode(); 13660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* siblingNode = m_element->nextSibling(); 13670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 13690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch insertionPoint->appendChild(m_element, exception); 13700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!siblingNode) 13726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner parent->appendChild(element.m_element, exception); 13730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 13746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner parent->insertBefore(element.m_element, siblingNode, exception); 13750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 13760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1378231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Encloses this element with the result of parsing \a markup. This element 1379231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block becomes the child of the deepest descendant within \a markup. 13800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa replace() 13820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 13830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::encloseWith(const QString &markup) 13840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 13850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 13860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_element->parentNode()) 13890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element->isHTMLElement()) 13920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); 1395f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); 13960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 13970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!fragment || !fragment->firstChild()) 13980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 13990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<Node> insertionPoint = findInsertionPoint(fragment->firstChild()); 14010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!insertionPoint) 14030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 14040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Keep reference to these two nodes before pulling out this element and 14060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // wrapping it in the fragment. The reason for doing it in this order is 14070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // that once the fragment has been added to the document it is empty, so 14080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // we no longer have access to the nodes it contained. 14096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Node* parent = m_element->parentNode(); 14100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* siblingNode = m_element->nextSibling(); 14110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode exception = 0; 14130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch insertionPoint->appendChild(m_element, exception); 14140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!siblingNode) 14166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner parent->appendChild(fragment, exception); 14170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 14186b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner parent->insertBefore(fragment, siblingNode, exception); 14190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 14220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Replaces this element with \a element. 14230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1424231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block This method will not replace the <html>, <head> or <body> elements. 14250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa encloseWith() 14270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 14280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::replace(const QWebElement &element) 14290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 14300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element || element.isNull()) 14310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 14320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch appendOutside(element); 14340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch takeFromDocument(); 14350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 14380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Replaces this element with the result of parsing \a markup. 14390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1440231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block This method will not replace the <html>, <head> or <body> elements. 14410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \sa encloseWith() 14430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 14440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebElement::replace(const QString &markup) 14450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 14460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_element) 14470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 14480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch appendOutside(markup); 14500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch takeFromDocument(); 14510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 1454231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \internal 1455231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Walk \a node's parents until a valid QWebElement is found. 1456231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block For example, a WebCore::Text node is not a valid Html QWebElement, but its 1457231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block enclosing p tag is. 1458231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block*/ 1459231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockQWebElement QWebElement::enclosingElement(WebCore::Node* node) 1460231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1461231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block QWebElement element(node); 1462231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1463231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block while (element.isNull() && node) { 1464231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block node = node->parentNode(); 1465231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block element = QWebElement(node); 1466231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1467231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return element; 1468231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1469231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1470231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*! 14710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \fn inline bool QWebElement::operator==(const QWebElement& o) const; 14720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1473231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if this element points to the same underlying DOM object as 1474231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block \a o; otherwise returns false. 14750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 14760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*! 14780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \fn inline bool QWebElement::operator!=(const QWebElement& o) const; 14790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1480231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Returns true if this element points to a different underlying DOM object 1481231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block than \a o; otherwise returns false. 14820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 1483cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1484cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1485cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1486cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Render the element into \a painter . 1487cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1488cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid QWebElement::render(QPainter* painter) 1489cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 149081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch render(painter, QRect()); 149181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 149281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 149381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/*! 149481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Render the element into \a painter clipping to \a clip. 149581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch*/ 149681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid QWebElement::render(QPainter* painter, const QRect& clip) 149781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 1498cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block WebCore::Element* e = m_element; 1499cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Document* doc = e ? e->document() : 0; 1500cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!doc) 1501cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1502cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1503cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Frame* frame = doc->frame(); 1504cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!frame || !frame->view() || !frame->contentRenderer()) 1505cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1506cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1507cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block FrameView* view = frame->view(); 1508cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 15095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen view->updateLayoutAndStyleIfNeededRecursive(); 1510cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1511cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block IntRect rect = e->getRect(); 1512cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1513cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (rect.size().isEmpty()) 1514cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1515cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 151681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QRect finalClipRect = rect; 151781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!clip.isEmpty()) 151881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch rect.intersect(clip.translated(rect.location())); 151981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 1520cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block GraphicsContext context(painter); 1521cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1522cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block context.save(); 1523cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block context.translate(-rect.x(), -rect.y()); 152481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch painter->setClipRect(finalClipRect, Qt::IntersectClip); 1525cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view->setNodeToDraw(e); 152681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch view->paintContents(&context, finalClipRect); 1527cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block view->setNodeToDraw(0); 1528cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block context.restore(); 1529cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1530cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1531cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QWebElementCollectionPrivate : public QSharedData 1532cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1533cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockpublic: 1534cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block static QWebElementCollectionPrivate* create(const PassRefPtr<Node> &context, const QString &query); 1535cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1536cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block RefPtr<NodeList> m_result; 1537cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1538cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockprivate: 1539cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inline QWebElementCollectionPrivate() {} 1540cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}; 1541cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1542cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollectionPrivate* QWebElementCollectionPrivate::create(const PassRefPtr<Node> &context, const QString &query) 1543cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1544cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!context) 1545cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1546cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1547cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // Let WebKit do the hard work hehehe 1548cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ExceptionCode exception = 0; // ### 1549cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block RefPtr<NodeList> nodes = context->querySelectorAll(query, exception); 1550cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!nodes) 1551cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1552cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1553cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollectionPrivate* priv = new QWebElementCollectionPrivate; 1554cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block priv->m_result = nodes; 1555cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return priv; 1556cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1557cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1558cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1559cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \class QWebElementCollection 1560cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \since 4.6 1561cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \brief The QWebElementCollection class represents a collection of web elements. 1562cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \preliminary 1563cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1564cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Elements in a document can be selected using QWebElement::findAll() or using the 1565cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElement constructor. The collection is composed by choosing all elements in the 1566cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block document that match a specified CSS selector expression. 1567cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1568cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The number of selected elements is provided through the count() property. Individual 1569cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block elements can be retrieved by index using at(). 1570cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1571cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block It is also possible to iterate through all elements in the collection using Qt's foreach 1572cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block macro: 1573cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1574cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \code 1575cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection collection = document.findAll("p"); 1576cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block foreach (QWebElement paraElement, collection) { 1577cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ... 1578cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 1579cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \endcode 1580cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1581cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1582cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1583cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Constructs an empty collection. 1584cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1585cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection::QWebElementCollection() 1586cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1587cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1588cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1589cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1590cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Constructs a copy of \a other. 1591cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1592cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection::QWebElementCollection(const QWebElementCollection &other) 1593cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block : d(other.d) 1594cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1595cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1596cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1597cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1598cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Constructs a collection of elements from the list of child elements of \a contextElement that 1599cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block match the specified CSS selector \a query. 1600cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1601cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection::QWebElementCollection(const QWebElement &contextElement, const QString &query) 1602cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1603cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block d = QExplicitlySharedDataPointer<QWebElementCollectionPrivate>(QWebElementCollectionPrivate::create(contextElement.m_element, query)); 1604cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1605cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1606cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1607cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Assigns \a other to this collection and returns a reference to this collection. 1608cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1609cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection &QWebElementCollection::operator=(const QWebElementCollection &other) 1610cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1611cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block d = other.d; 1612cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return *this; 1613cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1614cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1615cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1616cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Destroys the collection. 1617cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1618cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection::~QWebElementCollection() 1619cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1620cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1621cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1622cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! \fn QWebElementCollection &QWebElementCollection::operator+=(const QWebElementCollection &other) 1623cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1624cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Appends the items of the \a other list to this list and returns a 1625cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block reference to this list. 1626cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1627cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator+(), append() 1628cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1629cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1630cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1631cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns a collection that contains all the elements of this collection followed 1632cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block by all the elements in the \a other collection. Duplicates may occur in the result. 1633cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1634cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator+=() 1635cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1636cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection QWebElementCollection::operator+(const QWebElementCollection &other) const 1637cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1638cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection n = *this; n.d.detach(); n += other; return n; 1639cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1640cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1641cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1642cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Extends the collection by appending all items of \a other. 1643cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1644cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The resulting collection may include duplicate elements. 1645cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1646cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator+=() 1647cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1648cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid QWebElementCollection::append(const QWebElementCollection &other) 1649cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1650cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!d) { 1651cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block *this = other; 1652cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1653cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 1654cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!other.d) 1655cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1656cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Vector<RefPtr<Node> > nodes; 1657cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block RefPtr<NodeList> results[] = { d->m_result, other.d->m_result }; 1658cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block nodes.reserveInitialCapacity(results[0]->length() + results[1]->length()); 1659cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1660cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block for (int i = 0; i < 2; ++i) { 1661cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block int j = 0; 1662cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Node* n = results[i]->item(j); 1663cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block while (n) { 1664cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block nodes.append(n); 1665cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block n = results[i]->item(++j); 1666cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 1667cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 1668cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1669cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block d->m_result = StaticNodeList::adopt(nodes); 1670cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1671cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1672cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1673cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the number of elements in the collection. 1674cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1675cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockint QWebElementCollection::count() const 1676cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1677cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!d) 1678cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1679cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return d->m_result->length(); 1680cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1681cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1682cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1683cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the element at index position \a i in the collection. 1684cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1685cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElement QWebElementCollection::at(int i) const 1686cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1687cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!d) 1688cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return QWebElement(); 1689cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Node* n = d->m_result->item(i); 1690cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return QWebElement(static_cast<Element*>(n)); 1691cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1692cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1693cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1694cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn const QWebElement QWebElementCollection::operator[](int position) const 1695cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1696cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the element at the specified \a position in the collection. 1697cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1698cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1699cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! \fn QWebElement QWebElementCollection::first() const 1700cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1701cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the first element in the collection. 1702cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1703cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa last(), operator[](), at(), count() 1704cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1705cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1706cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! \fn QWebElement QWebElementCollection::last() const 1707cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1708cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the last element in the collection. 1709cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1710cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa first(), operator[](), at(), count() 1711cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1712cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1713cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1714cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns a QList object with the elements contained in this collection. 1715cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1716cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQList<QWebElement> QWebElementCollection::toList() const 1717cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1718cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!d) 1719cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return QList<QWebElement>(); 1720cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QList<QWebElement> elements; 1721cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block int i = 0; 1722cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Node* n = d->m_result->item(i); 1723cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block while (n) { 1724cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (n->isElementNode()) 1725cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block elements.append(QWebElement(static_cast<Element*>(n))); 1726cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block n = d->m_result->item(++i); 1727cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 1728cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return elements; 1729cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1730cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1731cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1732cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::begin() const 1733cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1734cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns an STL-style iterator pointing to the first element in the collection. 1735cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1736cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa end() 1737cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1738cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1739cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1740cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::end() const 1741cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1742cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns an STL-style iterator pointing to the imaginary element after the 1743cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block last element in the list. 1744cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1745cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa begin() 1746cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1747cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1748cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1749cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \class QWebElementCollection::const_iterator 1750cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \since 4.6 1751cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \brief The QWebElementCollection::const_iterator class provides an STL-style const iterator for QWebElementCollection. 1752cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1753cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection provides STL style const iterators for fast low-level access to the elements. 1754cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1755cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QWebElementCollection::const_iterator allows you to iterate over a QWebElementCollection. 1756cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1757cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1758cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1759cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator::const_iterator(const const_iterator &other) 1760cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1761cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Constructs a copy of \a other. 1762cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1763cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1764cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1765cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator::const_iterator(const QWebElementCollection *collection, int index) 1766cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \internal 1767cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1768cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1769cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1770cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn const QWebElement QWebElementCollection::const_iterator::operator*() const 1771cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1772cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the current element. 1773cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1774cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1775cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1776cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator==(const const_iterator &other) const 1777cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1778cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if \a other points to the same item as this iterator; 1779cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block otherwise returns false. 1780cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1781cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator!=() 1782cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1783cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1784cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1785cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator!=(const const_iterator &other) const 1786cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1787cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if \a other points to a different element than this; 1788cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block iterator; otherwise returns false. 1789cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1790cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator==() 1791cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1792cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1793cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1794cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator++() 1795cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1796cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The prefix ++ operator (\c{++it}) advances the iterator to the next element in the collection 1797cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block and returns an iterator to the new current element. 1798cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1799cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Calling this function on QWebElementCollection::end() leads to undefined results. 1800cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1801cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator--() 1802cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1803cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1804cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1805cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator++(int) 1806cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1807cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \overload 1808cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1809cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The postfix ++ operator (\c{it++}) advances the iterator to the next element in the collection 1810cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block and returns an iterator to the previously current element. 1811cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1812cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Calling this function on QWebElementCollection::end() leads to undefined results. 1813cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1814cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1815cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1816cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator--() 1817cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1818cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The prefix -- operator (\c{--it}) makes the preceding element current and returns an 1819cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block iterator to the new current element. 1820cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1821cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Calling this function on QWebElementCollection::begin() leads to undefined results. 1822cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1823cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator++() 1824cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1825cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1826cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1827cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator--(int) 1828cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1829cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \overload 1830cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1831cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block The postfix -- operator (\c{it--}) makes the preceding element current and returns 1832cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block an iterator to the previously current element. 1833cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1834cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1835cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1836cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator+=(int j) 1837cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1838cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Advances the iterator by \a j elements. If \a j is negative, the iterator goes backward. 1839cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1840cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator-=(), operator+() 1841cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1842cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1843cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1844cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator-=(int j) 1845cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1846cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Makes the iterator go back by \a j elements. If \a j is negative, the iterator goes forward. 1847cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1848cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator+=(), operator-() 1849cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1850cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1851cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1852cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator+(int j) const 1853cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1854cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns an iterator to the element at \a j positions forward from this iterator. If \a j 1855cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block is negative, the iterator goes backward. 1856cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1857cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator-(), operator+=() 1858cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1859cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1860cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1861cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator-(int j) const 1862cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1863cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns an iterator to the element at \a j positiosn backward from this iterator. 1864cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block If \a j is negative, the iterator goes forward. 1865cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1866cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \sa operator+(), operator-=() 1867cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1868cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1869cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1870cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn int QWebElementCollection::const_iterator::operator-(const_iterator other) const 1871cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1872cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns the number of elements between the item point to by \a other 1873cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block and the element pointed to by this iterator. 1874cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1875cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1876cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1877cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator<(const const_iterator &other) const 1878cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1879cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if the element pointed to by this iterator is less than the element pointed to 1880cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block by the \a other iterator. 1881cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1882cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1883cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1884cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator<=(const const_iterator &other) const 1885cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1886cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if the element pointed to by this iterator is less than or equal to the 1887cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block element pointed to by the \a other iterator. 1888cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1889cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1890cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1891cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator>(const const_iterator &other) const 1892cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1893cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if the element pointed to by this iterator is greater than the element pointed to 1894cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block by the \a other iterator. 1895cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1896cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1897cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block/*! 1898cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block \fn bool QWebElementCollection::const_iterator::operator>=(const const_iterator &other) const 1899cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1900cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Returns true if the element pointed to by this iterator is greater than or equal to the 1901cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block element pointed to by the \a other iterator. 1902cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block*/ 1903643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1904643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1905643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::begin() 1906643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1907643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an STL-style iterator pointing to the first element in the collection. 1908643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1909643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa end() 1910643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1911643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1912643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1913643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::end() 1914643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1915643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an STL-style iterator pointing to the imaginary element after the 1916643ca7872b450ea4efacab6188849e5aac2ba161Steve Block last element in the list. 1917643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1918643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa begin() 1919643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1920643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1921643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1922643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::const_iterator QWebElementCollection::constBegin() const 1923643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1924643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an STL-style iterator pointing to the first element in the collection. 1925643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1926643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa end() 1927643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1928643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1929643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1930643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::const_iterator QWebElementCollection::constEnd() const 1931643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1932643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an STL-style iterator pointing to the imaginary element after the 1933643ca7872b450ea4efacab6188849e5aac2ba161Steve Block last element in the list. 1934643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1935643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa begin() 1936643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1937643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1938643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1939643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \class QWebElementCollection::iterator 1940643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \since 4.6 1941643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \brief The QWebElementCollection::iterator class provides an STL-style iterator for QWebElementCollection. 1942643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1943643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QWebElementCollection provides STL style iterators for fast low-level access to the elements. 1944643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1945643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QWebElementCollection::iterator allows you to iterate over a QWebElementCollection. 1946643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1947643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1948643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1949643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator::iterator(const iterator &other) 1950643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1951643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Constructs a copy of \a other. 1952643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1953643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1954643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1955643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator::iterator(const QWebElementCollection *collection, int index) 1956643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \internal 1957643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1958643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1959643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1960643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn const QWebElement QWebElementCollection::iterator::operator*() const 1961643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1962643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns the current element. 1963643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1964643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1965643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1966643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator==(const iterator &other) const 1967643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1968643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if \a other points to the same item as this iterator; 1969643ca7872b450ea4efacab6188849e5aac2ba161Steve Block otherwise returns false. 1970643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1971643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator!=() 1972643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1973643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1974643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1975643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator!=(const iterator &other) const 1976643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1977643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if \a other points to a different element than this; 1978643ca7872b450ea4efacab6188849e5aac2ba161Steve Block iterator; otherwise returns false. 1979643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1980643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator==() 1981643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1982643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1983643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1984643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator++() 1985643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1986643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The prefix ++ operator (\c{++it}) advances the iterator to the next element in the collection 1987643ca7872b450ea4efacab6188849e5aac2ba161Steve Block and returns an iterator to the new current element. 1988643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1989643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Calling this function on QWebElementCollection::end() leads to undefined results. 1990643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1991643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator--() 1992643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 1993643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1994643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 1995643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator++(int) 1996643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1997643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \overload 1998643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1999643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The postfix ++ operator (\c{it++}) advances the iterator to the next element in the collection 2000643ca7872b450ea4efacab6188849e5aac2ba161Steve Block and returns an iterator to the previously current element. 2001643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2002643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Calling this function on QWebElementCollection::end() leads to undefined results. 2003643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2004643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2005643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2006643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator--() 2007643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2008643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The prefix -- operator (\c{--it}) makes the preceding element current and returns an 2009643ca7872b450ea4efacab6188849e5aac2ba161Steve Block iterator to the new current element. 2010643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2011643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Calling this function on QWebElementCollection::begin() leads to undefined results. 2012643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2013643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator++() 2014643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2015643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2016643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2017643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator--(int) 2018643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2019643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \overload 2020643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2021643ca7872b450ea4efacab6188849e5aac2ba161Steve Block The postfix -- operator (\c{it--}) makes the preceding element current and returns 2022643ca7872b450ea4efacab6188849e5aac2ba161Steve Block an iterator to the previously current element. 2023643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2024643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2025643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2026643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator+=(int j) 2027643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2028643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Advances the iterator by \a j elements. If \a j is negative, the iterator goes backward. 2029643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2030643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator-=(), operator+() 2031643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2032643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2033643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2034643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator-=(int j) 2035643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2036643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Makes the iterator go back by \a j elements. If \a j is negative, the iterator goes forward. 2037643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2038643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator+=(), operator-() 2039643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2040643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2041643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2042643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator+(int j) const 2043643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2044643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an iterator to the element at \a j positions forward from this iterator. If \a j 2045643ca7872b450ea4efacab6188849e5aac2ba161Steve Block is negative, the iterator goes backward. 2046643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2047643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator-(), operator+=() 2048643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2049643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2050643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2051643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator-(int j) const 2052643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2053643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns an iterator to the element at \a j positiosn backward from this iterator. 2054643ca7872b450ea4efacab6188849e5aac2ba161Steve Block If \a j is negative, the iterator goes forward. 2055643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2056643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \sa operator+(), operator-=() 2057643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2058643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2059643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2060643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn int QWebElementCollection::iterator::operator-(iterator other) const 2061643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2062643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns the number of elements between the item point to by \a other 2063643ca7872b450ea4efacab6188849e5aac2ba161Steve Block and the element pointed to by this iterator. 2064643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2065643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2066643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2067643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator<(const iterator &other) const 2068643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2069643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if the element pointed to by this iterator is less than the element pointed to 2070643ca7872b450ea4efacab6188849e5aac2ba161Steve Block by the \a other iterator. 2071643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2072643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2073643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2074643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator<=(const iterator &other) const 2075643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2076643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if the element pointed to by this iterator is less than or equal to the 2077643ca7872b450ea4efacab6188849e5aac2ba161Steve Block element pointed to by the \a other iterator. 2078643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2079643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2080643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2081643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator>(const iterator &other) const 2082643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2083643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if the element pointed to by this iterator is greater than the element pointed to 2084643ca7872b450ea4efacab6188849e5aac2ba161Steve Block by the \a other iterator. 2085643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2086643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2087643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*! 2088643ca7872b450ea4efacab6188849e5aac2ba161Steve Block \fn bool QWebElementCollection::iterator::operator>=(const iterator &other) const 2089643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2090643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Returns true if the element pointed to by this iterator is greater than or equal to the 2091643ca7872b450ea4efacab6188849e5aac2ba161Steve Block element pointed to by the \a other iterator. 2092643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/ 2093