void WebHitTestResultTest::shouldCopyWebHitTestResult() { QPoint pos(5, 5); QUrl pageUrl(QStringLiteral("http://www.kde.org")); QVariantMap map; QString alternateText = QStringLiteral("FOO"); map.insert(QStringLiteral("alternateText"), alternateText); bool contentEditable = true; map.insert(QStringLiteral("contentEditable"), contentEditable); bool contentSelected = true; map.insert(QStringLiteral("contentSelected"), contentSelected); QString linkTitle = QStringLiteral("GGGG"); map.insert(QStringLiteral("linkTitle"), linkTitle); QUrl imageUrl(QStringLiteral("https://www.foo.net")); map.insert(QStringLiteral("imageUrl"), imageUrl); QUrl linkUrl(QStringLiteral("https://www.linux.org")); map.insert(QStringLiteral("linkUrl"), linkUrl); QUrl mediaUrl(QStringLiteral("https://www.media.org")); map.insert(QStringLiteral("mediaUrl"), mediaUrl); bool mediaPaused = true; map.insert(QStringLiteral("mediaPaused"), mediaPaused); bool mediaMuted = true; map.insert(QStringLiteral("mediaMuted"), mediaMuted); QString tagName = QStringLiteral("HHHHHH"); map.insert(QStringLiteral("tagName"), tagName); QRect boundingRect(5, 7, 9, 11); QVariantList lstRect; lstRect << boundingRect.left() << boundingRect.top() << boundingRect.width() << boundingRect.height(); map.insert(QStringLiteral("boundingRect"), lstRect); const WebEngineViewer::WebHitTestResult result1(pos, pageUrl, map); WebEngineViewer::WebHitTestResult result = result1; QCOMPARE(result.alternateText(), alternateText); QCOMPARE(result.boundingRect(), boundingRect); QCOMPARE(result.imageUrl(), imageUrl); QCOMPARE(result.isContentEditable(), contentEditable); QCOMPARE(result.isContentSelected(), contentSelected); QCOMPARE(result.isNull(), false); QCOMPARE(result.linkTitle(), linkTitle); QCOMPARE(result.linkUrl(), linkUrl); QCOMPARE(result.mediaUrl(), mediaUrl); QCOMPARE(result.mediaPaused(), mediaPaused); QCOMPARE(result.mediaMuted(), mediaMuted); QCOMPARE(result.pos(), pos); QCOMPARE(result.tagName(), tagName); QCOMPARE(result.pageUrl(), pageUrl); }
QList<ZealSearchResult> ZealDocsetsRegistry::getRelatedLinks(QString name, QString path) { QList<ZealSearchResult> results; // Get the url without the #anchor. QUrl mainUrl(path); mainUrl.setFragment(NULL); QString pageUrl(mainUrl.toString()); docsetEntry entry = docs[name]; // Prepare the query to look up all pages with the same url. QString query; if (entry.type == DASH) { query = QString("SELECT name, type, path FROM searchIndex WHERE path LIKE \"%1%%\"").arg(pageUrl); } else if (entry.type == ZDASH) { query = QString("SELECT ztoken.ztokenname, ztokentype.ztypename, zfilepath.zpath, ztokenmetainformation.zanchor " "FROM ztoken " "JOIN ztokenmetainformation ON ztoken.zmetainformation = ztokenmetainformation.z_pk " "JOIN zfilepath ON ztokenmetainformation.zfile = zfilepath.z_pk " "JOIN ztokentype ON ztoken.ztokentype = ztokentype.z_pk " "WHERE zfilepath.zpath = \"%1\"").arg(pageUrl); } else if (entry.type == ZEAL) { query = QString("SELECT name type, path FROM things WHERE path LIKE \"%1%%\"").arg(pageUrl); } QSqlQuery result = entry.db.exec(query); while (result.next()) { QString sectionName = result.value(0).toString(); QString sectionPath = result.value(2).toString(); QString parentName; if (entry.type == ZDASH) { sectionPath.append("#"); sectionPath.append(result.value(3).toString()); } normalizeName(sectionName, parentName, ""); results.append(ZealSearchResult(sectionName, "", sectionPath, name, QString())); } return results; }
QList<HtmlForm> HtmlForm::listFromHtml(QString html, QString url) { QRegExp formRgx("<form ([^>]*)>(.*)</form>"); QRegExp inputRgx("<input ([^>]*)>|<textarea([^>]*)>([^<]*)</textarea>"); inputRgx.setMinimal(true); inputRgx.setCaseSensitivity(Qt::CaseInsensitive); QRegExp parameterRgx("([a-z]+)=(\\w+)|([a-z]+)=\"(.*)\"|([a-z]+)='(.*)'"); parameterRgx.setMinimal(true); parameterRgx.setCaseSensitivity(Qt::CaseInsensitive); formRgx.setMinimal(true); formRgx.setCaseSensitivity(Qt::CaseInsensitive); int pos = 0; QList<HtmlForm> formList; while ((pos = formRgx.indexIn(html, pos)) != -1) { // Capture each form HtmlForm form; int pos0 = 0; while((pos0 = parameterRgx.indexIn(formRgx.cap(1), pos0)) != -1) { QPair<QString, QString> pair = pairFromList(parameterRgx.capturedTexts()); if(!pair.first.compare("method", Qt::CaseInsensitive)) form.method = pair.second; if(!pair.first.compare("action", Qt::CaseInsensitive)) { QUrl pageUrl(url); QUrl tgtUrl(pair.second); if(tgtUrl.isRelative()) { if(!pair.second.startsWith('/')) tgtUrl.setPath(pageUrl.path().replace(QRegExp("[^/]+$"), "") + tgtUrl.path()); // For href="mycrappyfile.php" tgtUrl.setScheme(pageUrl.scheme()); tgtUrl.setHost(pageUrl.host()); } form.targetUrl=tgtUrl.toString(); } pos0 +=parameterRgx.matchedLength(); } pos0 = 0; while((pos0 = inputRgx.indexIn(formRgx.cap(2), pos0)) != -1) { int pos1 = 0; QString f00d = inputRgx.cap(1).isEmpty() ? inputRgx.cap(2) : inputRgx.cap(1); QHash<QString, QString> inpHash; while((pos1 = parameterRgx.indexIn(f00d, pos1)) != -1) { QPair<QString, QString> pair = pairFromList(parameterRgx.capturedTexts()); inpHash[pair.first.toLower()] = pair.second; pos1 += parameterRgx.matchedLength(); } form.fields[inpHash["name"]] = formRgx.cap(1).isEmpty() ? inputRgx.cap(3) : inpHash["value"]; pos0 +=inputRgx.matchedLength(); } /* qDebug("FORM BEGIN"); qDebug() << form.method; qDebug() << form.targetUrl; qDebug() << form.fields; qDebug("FORM END"); */ formList << form; pos += formRgx.matchedLength(); } return formList; }