summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-04-08 13:18:27 +0200
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-04-08 14:32:13 +0200
commit9b1d5b3ed9d44417c8b83e50808e0e5881f014e0 (patch)
tree21fd11ffb2d4bfa7afc1afe34372a1e99dd16870
parent5fa146aa521a20f513217c001e983089823526fd (diff)
downloadbrowser-poc-9b1d5b3ed9d44417c8b83e50808e0e5881f014e0.tar.gz
Improve handling of SELECT elements
-rw-r--r--browser/browserview.cpp17
-rw-r--r--browser/browserview.h42
-rw-r--r--browser/userinput.cpp2
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<int> 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<QWebElement> 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<QWebElement> 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);