static QString extractAddress(DOM::Node node) { QString rc = ";;"; QMap<QString,QString> entry; DOM::NodeList nodes = node.childNodes(); unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } QString a = map.item(j).nodeValue().string(); if (a == "street-address") { entry["street-address"] = textForNode(node); } else if (a == "locality") { entry["locality"] = textForNode(node); } else if (a == "region") { entry["region"] = textForNode(node); } else if (a == "postal-code") { entry["postal-code"] = textForNode(node); } } } rc += entry["street-address"] + ";" + entry["locality"] + ";" + entry["region"] + ";" + entry["postal-code"] + ";" + entry["country"]; return rc.stripWhiteSpace(); }
virtual void execute(const DOM::Node<string_type, string_adaptor>& node, ExecutionContext<string_type, string_adaptor>& context) const { ParamPasser<string_type, string_adaptor> passer(*this, node, context); if(!SortableT::has_sort() && select_ == 0) { if(node.hasChildNodes()) context.stylesheet().applyTemplates(node.getChildNodes(), context, mode_); return; } Arabica::XPath::NodeSet<string_type, string_adaptor> nodes; if(select_ == 0) for(DOM::Node<string_type, string_adaptor> n = node.getFirstChild(); n != 0; n = n.getNextSibling()) nodes.push_back(n); else { Arabica::XPath::XPathValue<string_type, string_adaptor> value = select_->evaluate(node, context.xpathContext()); if(value.type() != Arabica::XPath::NODE_SET) throw std::runtime_error("apply-templates select expression is not a node-set"); nodes = value.asNodeSet(); } this->sort(node, nodes, context); context.stylesheet().applyTemplates(nodes, context, mode_); } // execute
bool KonqMFIcon::hasMicroFormat(DOM::NodeList nodes) { bool ok = false; unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } if (map.item(j).nodeValue().string() == "vevent") { ok = true; extractEvent(node); break; } if (map.item(j).nodeValue().string() == "vcard") { ok = true; extractCard(node); break; } } if (hasMicroFormat(node.childNodes())) { ok = true; } } return ok; }
void DOMTreeView::slotMovedItems(QPtrList<QListViewItem> &items, QPtrList<QListViewItem> &/*afterFirst*/, QPtrList<QListViewItem> &afterNow) { MultiCommand *cmd = new MultiCommand(i18n("Move Nodes")); _refreshed = false; QPtrList<QListViewItem>::Iterator it = items.begin(); QPtrList<QListViewItem>::Iterator anit = afterNow.begin(); for (; it != items.end(); ++it, ++anit) { DOMListViewItem *item = static_cast<DOMListViewItem *>(*it); DOMListViewItem *anitem = static_cast<DOMListViewItem *>(*anit); DOM::Node parent = static_cast<DOMListViewItem *>(item->parent())->node(); Q_ASSERT(!parent.isNull()); // kdDebug(90180) << " afternow " << anitem << " node " << (anitem ? anitem->node().nodeName().string() : QString()) << "=" << (anitem ? anitem->node().nodeValue().string() : QString()) << endl; cmd->addCommand(new MoveNodeCommand(item->node(), parent, anitem ? anitem->node().nextSibling() : parent.firstChild()) ); } mainWindow()->executeAndAddCommand(cmd); // refresh *anyways*, otherwise consistency is disturbed if (!_refreshed) refresh(); slotShowNode(current_node); }
void KHTMLReader::parseNode(DOM::Node node) { // check if this is a text node. DOM::Text t = node; if (!t.isNull()) { _writer->addText(state()->paragraph, t.data().string(), 1, state()->in_pre_mode); return; // no children anymore... } // is this really needed ? it can't do harm anyway. state()->format = _writer->currentFormat(state()->paragraph, true); state()->layout = _writer->currentLayout(state()->paragraph); pushNewState(); DOM::Element e = node; bool go_recursive = true; if (!e.isNull()) { // get the CSS information parseStyle(e); // get the tag information go_recursive = parseTag(e); } if (go_recursive) { for (DOM::Node q = node.firstChild(); !q.isNull(); q = q.nextSibling()) { parseNode(q); } } popState(); }
bool KHTMLReader::parse_ul(DOM::Element e) { _list_depth++; bool popstateneeded = false; for (DOM::Node items = e.firstChild();!items.isNull();items = items.nextSibling()) { if (items.nodeName().string().toLower() == "li") { if (popstateneeded) { popState(); //popstateneeded = false; } pushNewState(); startNewLayout(); popstateneeded = true; _writer->layoutAttribute(state()->paragraph, "COUNTER", "numberingtype", "1"); _writer->layoutAttribute(state()->paragraph, "COUNTER", "righttext", "."); if (e.tagName().string().toLower() == "ol") { _writer->layoutAttribute(state()->paragraph, "COUNTER", "type", "1"); _writer->layoutAttribute(state()->paragraph, "COUNTER", "numberingtype", "1"); _writer->layoutAttribute(state()->paragraph, "COUNTER", "righttext", "."); } else { _writer->layoutAttribute(state()->paragraph, "COUNTER", "type", "10"); _writer->layoutAttribute(state()->paragraph, "COUNTER", "numberingtype", ""); _writer->layoutAttribute(state()->paragraph, "COUNTER", "righttext", ""); } _writer->layoutAttribute(state()->paragraph, "COUNTER", "depth", QString("%1").arg(_list_depth - 1)); } parseNode(items); } if (popstateneeded) popState(); _list_depth--; return false; }
void DOMTreeView::slotAddTextDlg() { DOMListViewItem *item = static_cast<DOMListViewItem *>(m_listView->currentItem()); if (!item) return; QString text; SignalReceiver addBefore; { TextEditDialog dlg(this, "TextEditDialog", true); connect(dlg.insBeforeBtn, SIGNAL(clicked()), &addBefore, SLOT(slot())); if (dlg.exec() != QDialog::Accepted) return; text = dlg.textPane->text(); } DOM::Node curNode = item->node(); try { DOM::Node parent = addBefore() ? curNode.parentNode() : curNode; DOM::Node after = addBefore() ? curNode : 0; DOM::Node newNode = curNode.ownerDocument().createTextNode(text); ManipulationCommand *cmd = new InsertNodeCommand(newNode, parent, after); mainWindow()->executeAndAddCommand(cmd); if (cmd->isValid()) activateNode(newNode); } catch (DOM::DOMException &ex) { mainWindow()->addMessage(ex.code, domErrorMessage(ex.code)); } }
void KHTMLReader::completed() { kDebug(30503) << "KHTMLReader::completed"; qApp->exit_loop(); DOM::Document doc = _html->document(); // FIXME parse <HEAD> too DOM::NodeList list = doc.getElementsByTagName("body"); DOM::Node docbody = list.item(0); if (docbody.isNull()) { kWarning(30503) << "no <BODY>, giving up"; _it_worked = false; return; } parseNode(docbody); list = doc.getElementsByTagName("head"); DOM::Node dochead = list.item(0); if (!dochead.isNull()) parse_head(dochead); else kWarning(30503) << "WARNING: no html <HEAD> section"; _writer->cleanUpParagraph(state()->paragraph); _it_worked = _writer->writeDoc(); }
void DOMTreeView::recursive(const DOM::Node &pNode, const DOM::Node &node) { QListViewItem *cur_item; if(pNode.ownerDocument() != document) { QString val = node.nodeValue().string(); if ( val.length() > 20 ) val.truncate( 20 ); cur_item = new QListViewItem(static_cast<QListView *>(this), node.nodeName().string(), val ); document = pNode.ownerDocument(); } else { QString val = node.nodeValue().string(); if ( val.length() > 20 ) val.truncate( 20 ); cur_item = new QListViewItem(m_itemdict[pNode.handle()], node.nodeName().string(), val); } if(node.handle()) { m_itemdict.insert(node.handle(), cur_item); m_nodedict.insert(cur_item, new DOM::Node(node)); } DOM::Node cur_child = node.lastChild(); while(!cur_child.isNull()) { recursive(node, cur_child); cur_child = cur_child.previousSibling(); } }
void DOMTreeView::initializeOptionsFromNode(const DOM::Node &node) { infoNode = node; nodeName->clear(); nodeType->clear(); nodeNamespace->clear(); nodeValue->clear(); if (node.isNull()) { nodeInfoStack->raiseWidget(EmptyPanel); return; } nodeName->setText(node.nodeName().string()); nodeType->setText(QString::number(node.nodeType())); nodeNamespace->setText(node.namespaceURI().string()); // nodeValue->setText(node.value().string()); DOM::Element element = node; if (!element.isNull()) { initializeOptionsFromElement(element); return; } DOM::CharacterData cdata = node; if (!cdata.isNull()) { initializeOptionsFromCData(cdata); return; } // Fallback nodeInfoStack->raiseWidget(EmptyPanel); }
virtual bool operator()(const DOM::Node<string_type, string_adaptor>& node) const { int type = node.getNodeType(); return (type == DOM::Node_base::ELEMENT_NODE || type == NAMESPACE_NODE_TYPE) && (name_ == node.getNodeName()) && (string_adaptor::empty(node.getNamespaceURI())); } // test
void do_characters(const std::string& ch) { DOM::Node<std::string> lc = current().getLastChild(); if(lc == 0 || lc.getNodeType() != DOM::Node_base::TEXT_NODE) current().appendChild(document().createTextNode(ch)); else lc.setNodeValue(lc.getNodeValue() + ch); } // do_characters
static void clear_node(DOM::Node n) { if(!n.isNull()) while(1) { DOM::Node f = n.firstChild(); if(f.isNull()) break; n.removeChild(f); } }
void DOMTreeView::slotItemClicked(QListViewItem *cur_item) { DOMListViewItem *cur = static_cast<DOMListViewItem *>(cur_item); if (!cur) return; DOM::Node handle = cur->node(); if (!handle.isNull()) { part->setActiveNode(handle); } }
virtual bool operator()(const DOM::Node<string_type, string_adaptor>& node) const { if(node.getNodeType() != DOM::Node_base::PROCESSING_INSTRUCTION_NODE) return false; if(string_adaptor::empty(target_)) return true; return node.getNodeName() == target_; } // test
void DOMTreeView::showRecursive(const DOM::Node &pNode, const DOM::Node &node, uint depth) { DOMListViewItem *cur_item; DOMListViewItem *parent_item = m_itemdict.value(pNode.handle(), 0); if (depth > m_maxDepth) { m_maxDepth = depth; } if (depth == 0) { cur_item = new DOMListViewItem(node, m_listView); m_document = pNode.ownerDocument(); } else { cur_item = new DOMListViewItem(node, parent_item); } //kDebug(90180) << node.nodeName().string() << " [" << depth << "]"; cur_item = addElement (node, cur_item, false); m_listView->setItemExpanded(cur_item, depth < m_expansionDepth); if(node.handle()) { m_itemdict.insert(node.handle(), cur_item); } DOM::Node child = node.firstChild(); if (child.isNull()) { DOM::HTMLFrameElement frame = node; if (!frame.isNull()) { child = frame.contentDocument().documentElement(); } else { DOM::HTMLIFrameElement iframe = node; if (!iframe.isNull()) child = iframe.contentDocument().documentElement(); } } while(!child.isNull()) { showRecursive(node, child, depth + 1); child = child.nextSibling(); } const DOM::Element element = node; if (!m_bPure) { if (!element.isNull() && !element.firstChild().isNull()) { if(depth == 0) { cur_item = new DOMListViewItem(node, m_listView, cur_item); m_document = pNode.ownerDocument(); } else { cur_item = new DOMListViewItem(node, parent_item, cur_item); } //kDebug(90180) << "</" << node.nodeName().string() << ">"; cur_item = addElement(element, cur_item, true); // m_listView->setItemExpanded(cur_item, depth < m_expansionDepth); } } }
void KGet_plug_in::slotShowLinks() { if ( !parent() || !parent()->inherits( "KHTMLPart" ) ) return; KHTMLPart *htmlPart = static_cast<KHTMLPart*>( parent() ); KParts::Part *activePart = 0L; if ( htmlPart->partManager() ) { activePart = htmlPart->partManager()->activePart(); if ( activePart && activePart->inherits( "KHTMLPart" ) ) htmlPart = static_cast<KHTMLPart*>( activePart ); } DOM::HTMLDocument doc = htmlPart->htmlDocument(); if ( doc.isNull() ) return; DOM::HTMLCollection links = doc.links(); QPtrList<LinkItem> linkList; std::set<QString> dupeCheck; for ( uint i = 0; i < links.length(); i++ ) { DOM::Node link = links.item( i ); if ( link.isNull() || link.nodeType() != DOM::Node::ELEMENT_NODE ) continue; LinkItem *item = new LinkItem( (DOM::Element) link ); if ( item->isValid() && dupeCheck.find( item->url.url() ) == dupeCheck.end() ) { linkList.append( item ); dupeCheck.insert( item->url.url() ); } else delete item; } if ( linkList.isEmpty() ) { KMessageBox::sorry( htmlPart->widget(), i18n("There are no links in the active frame of the current HTML page."), i18n("No Links") ); return; } KGetLinkView *view = new KGetLinkView(); QString url = doc.URL().string(); view->setPageURL( url ); view->setLinks( linkList ); view->show(); }
khtml::MouseEvent::MouseEvent(const char *name, QMouseEvent *qmouseEvent, int x, int y, const DOM::DOMString &url, const DOM::DOMString &target, const DOM::Node &innerNode) : KParts::Event(name), m_qmouseEvent(qmouseEvent), m_x(x), m_y(y), m_url(url), m_target(target), m_innerNode(innerNode) { d = 0; if (innerNode.handle() && innerNode.handle()->renderer()) { innerNode.handle()->renderer()->absolutePosition(m_nodeAbsX, m_nodeAbsY); } }
virtual void process_content(const DOM::Node<std::string>& node, ExecutionContext& context) const { if(node.hasAttributes()) { const DOM::NamedNodeMap<std::string>& attrs = node.getAttributes(); for(unsigned int a = 0; a < attrs.getLength(); ++a) copy(attrs.item(a), context); } // if ... for(DOM::Node<std::string> n = node.getFirstChild(); n != 0; n = n.getNextSibling()) copy(n, context); } // process_content
void Range::checkNodeBA( DOM::Node n ) const { checkNode( n ); if( n.nodeType() == Node::DOCUMENT_NODE || n.nodeType() == Node::DOCUMENT_FRAGMENT_NODE || n.nodeType() == Node::ATTRIBUTE_NODE || n.nodeType() == Node::ENTITY_NODE || n.nodeType() == Node::NOTATION_NODE ) throw RangeException( RangeException::INVALID_NODE_TYPE_ERR ); }
static QString textForNode(DOM::Node node) { QString rc; DOM::NodeList nl = node.childNodes(); for (unsigned int i = 0; i < nl.length(); ++i) { DOM::Node n = nl.item(i); if (n.nodeType() == DOM::Node::TEXT_NODE) { rc += n.nodeValue().string(); } } // FIXME: entries need to be escaped for vcard/vevent return rc.stripWhiteSpace(); }
long khtml::MouseEvent::offset() const { Position pos; if (innerNode().handle()) { // FIXME: Shouldn't be necessary to skip text nodes. DOM::Node inner = innerNode(); if (inner.nodeType() == Node::TEXT_NODE) { inner = inner.parentNode(); } pos = inner.handle()->positionForCoordinates(m_x, m_y).position(); } return pos.offset(); }
void DOMTreeView::saveTreeAsHTML(const DOM::Node &pNode) { assert(m_textStream); // Add a doctype (*m_textStream) <<"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" << endl; if(pNode.ownerDocument().isNull()) { saveRecursive(pNode, 0); } else { saveRecursive(pNode.ownerDocument(), 0); } }
void DOMTreeView::moveToParent() { // This is a hypersmart algorithm. // If infoNode is defined, go to the parent of infoNode, otherwise, go // to the parent of the tree view's current item. // Hope this isn't too smart. DOM::Node cur = infoNode; if (cur.isNull()) cur = static_cast<DOMListViewItem *>(m_listView->currentItem())->node(); if (cur.isNull()) return; cur = cur.parentNode(); activateNode(cur); }
QVariant KJSProxyImpl::evaluate(QString filename, int baseLine, const QString&str, const DOM::Node &n, Completion *completion) { // evaluate code. Returns the JS return value or an invalid QVariant // if there was none, an error occured or the type couldn't be converted. initScript(); // inlineCode is true for <a href="javascript:doSomething()"> // and false for <script>doSomething()</script>. Check if it has the // expected value in all cases. // See smart window.open policy for where this is used. bool inlineCode = filename.isNull(); //kdDebug(6070) << "KJSProxyImpl::evaluate inlineCode=" << inlineCode << endl; #ifdef KJS_DEBUGGER if (inlineCode) filename = "(unknown file)"; if (KJSDebugWin::instance()) { KJSDebugWin::instance()->attach(m_script); KJSDebugWin::instance()->setNextSourceInfo(filename,baseLine); // KJSDebugWin::instance()->setMode(KJSDebugWin::Step); } #else Q_UNUSED(baseLine); #endif m_script->setInlineCode(inlineCode); Window* window = Window::retrieveWindow( m_part ); KJS::Value thisNode = n.isNull() ? Window::retrieve( m_part ) : getDOMNode(m_script->globalExec(),n); UString code( str ); KJSCPUGuard guard; guard.start(); Completion comp = m_script->evaluate(code, thisNode); guard.stop(); bool success = ( comp.complType() == Normal ) || ( comp.complType() == ReturnValue ); if (completion) *completion = comp; #ifdef KJS_DEBUGGER // KJSDebugWin::instance()->setCode(QString::null); #endif window->afterScriptExecution(); // let's try to convert the return value if (success && !comp.value().isNull()) return ValueToVariant( m_script->globalExec(), comp.value()); else { if ( comp.complType() == Throw ) { UString msg = comp.value().toString(m_script->globalExec()); kdWarning(6070) << "Script threw exception: " << msg.qstring() << endl; } return QVariant(); } }
void DOMTreeView::slotRefreshNode(const DOM::Node &pNode) { DOMListViewItem *cur = static_cast<DOMListViewItem *>(m_itemdict[pNode.handle()]); if (!cur) return; addElement(pNode, cur, false); }
virtual bool operator()(const DOM::Node<string_type, string_adaptor>& node) const { int type = node.getNodeType(); return (type == DOM::Node_base::DOCUMENT_NODE) || (type == DOM::Node_base::DOCUMENT_FRAGMENT_NODE); } // operator()
virtual bool operator()(const DOM::Node<string_type, string_adaptor>& node) const { int type = node.getNodeType(); if((type == DOM::Node_base::DOCUMENT_NODE) || (type == DOM::Node_base::DOCUMENT_FRAGMENT_NODE)) return false; return true; } // matches
void DOMTreeView::slotShowNode(const DOM::Node &pNode) { if (QListViewItem *item = m_itemdict[pNode.handle()]) { m_listView->setCurrentItem(item); m_listView->ensureItemVisible(item); } }
void ManipulateNodeCommand::remove() { DOM::DocumentFragment frag = _node; if (frag.isNull()) { // do a normal remove _node = _parent.removeChild(_node); } else { // remove fragment nodes and recreate fragment DOM::DocumentFragment newfrag = _parent.ownerDocument().createDocumentFragment(); for (DOM::Node i = frag.firstChild(); !i.isNull(); i = i.nextSibling()) { newfrag.appendChild(_parent.removeChild(i)); } _node = newfrag; } }