From 9b1d5b3ed9d44417c8b83e50808e0e5881f014e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Tue, 8 Apr 2014 13:18:27 +0200 Subject: Improve handling of SELECT elements --- browser/browserview.cpp | 17 ++++++++++++++++- browser/browserview.h | 42 ++++++++++++++++++++++++++---------------- browser/userinput.cpp | 2 +- 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/browser/browserview.cpp b/browser/browserview.cpp index 1e2263d..697361a 100644 --- a/browser/browserview.cpp +++ b/browser/browserview.cpp @@ -124,6 +124,15 @@ void BrowserView::loadFinished(bool ok) "document.addEventListener('focusout', function(e){" " pocCurrentElement = e.relatedTarget;" "}, true);" + "var elems = document.querySelectorAll('select:not([multiple])');" + "for (var i = 0; i < elems.length; i++) {" + " elem = elems[i];" + " elem.addEventListener('mousedown', function(e) {" + " e.target.setAttribute('value', e.target.value);" + " window.inputHandler.setCurrentFocus(e.target);" + " pocCurrentElement = e.target;" + " }, true);" + "}" "})()" ); @@ -309,8 +318,14 @@ void BrowserView::activate() { } void BrowserView::onSelectIndexes(QList indexes) { + m_webview.page()->mainFrame()->evaluateJavaScript( + "for (var i = 0; i < document.activeElement.options.length; i++){" + " document.activeElement.options[i].selected = false;" + "}" + ); for (int i = 0; i < indexes.size(); i++) { - QString cmd = QString("document.activeElement.options[%1].selected = true").arg( + QString cmd = QString( + "document.activeElement.options[%1].selected = true;").arg( QString::number(indexes.at(i))); m_webview.page()->mainFrame()->evaluateJavaScript(cmd); } diff --git a/browser/browserview.h b/browser/browserview.h index b142798..0ec7765 100644 --- a/browser/browserview.h +++ b/browser/browserview.h @@ -52,27 +52,37 @@ public slots: elem.attribute("max", "0").toInt(), elem.attribute("min","0").toInt(), elem.attribute("step","0").toInt()); + } else if (elem.tagName().compare("OPTION", Qt::CaseInsensitive) == 0){ + handleSelectElement(elem.parent()); } else if (elem.tagName().compare("SELECT", Qt::CaseInsensitive) == 0){ - conn::brw::SelectableOptionList options; - QList elems; - QWebElement first = elem.firstChild(); - QWebElement last = elem.lastChild(); + if (elem.hasAttribute("multiple")) { + return; + } + handleSelectElement(elem); + } + m_elem = elem; + } + + void handleSelectElement(const QWebElement &elem) { + conn::brw::SelectableOptionList options; + QList elems; + QWebElement first = elem.firstChild(); + QWebElement last = elem.lastChild(); + conn::brw::SelectableOption o; + o.strValue = first.toPlainText(); + options.append(o); + elems.append(first); + while (elems.last() != last) { conn::brw::SelectableOption o; - o.strValue = first.toPlainText(); + o.strValue = elems.last().toPlainText(); + elems.append(elems.last().nextSibling()); options.append(o); - elems.append(first); - while (elems.last() != last) { - conn::brw::SelectableOption o; - o.strValue = elems.last().toPlainText(); - elems.append(elems.last().nextSibling()); - options.append(o); - } - - qDebug() << "Options:" << options.size(); - emit onSelect(elem.attribute("name", ""), options, true); } - m_elem = elem; + + qDebug() << "Options:" << options.size(); + emit onSelect(elem.attribute("name", ""), options, true); + } const QWebElement currentFocus () { return m_elem; } diff --git a/browser/userinput.cpp b/browser/userinput.cpp index 3c419c7..2e0548e 100644 --- a/browser/userinput.cpp +++ b/browser/userinput.cpp @@ -106,7 +106,7 @@ conn::brw::ERROR_IDS userinput::getPrevEnteredValues (const QString &a_strInputN qDebug() << s.value; if (s.type == a_i32InputType && s.name.compare(a_strInputName) == 0 && - s.value.contains(a_strInputValue, + s.value.contains(a_strInputValue, Qt::CaseInsensitive)) { a_oInputVariants.append(s.value); -- cgit v1.2.1