Implement HTML5 multiple file upload

This commit is contained in:
Matthew Horan 2012-11-18 02:48:24 -05:00
parent 0efbbe0fbc
commit ea2f785ba8
4 changed files with 8 additions and 9 deletions

View File

@ -33,7 +33,7 @@ module Capybara::Webkit
end
def set(value)
invoke "set", value
invoke "set", *[value].flatten
end
def select_option

View File

@ -221,13 +221,12 @@ QString WebPage::chooseFile(QWebFrame *parentFrame, const QString &suggestedFile
Q_UNUSED(parentFrame);
Q_UNUSED(suggestedFile);
return getLastAttachedFileName();
return getAttachedFileNames().first();
}
bool WebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) {
if (extension == ChooseMultipleFilesExtension) {
QStringList names = QStringList() << getLastAttachedFileName();
static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = names;
static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = getAttachedFileNames();
return true;
}
else if (extension == QWebPage::ErrorPageExtension) {
@ -239,8 +238,8 @@ bool WebPage::extension(Extension extension, const ExtensionOption *option, Exte
return false;
}
QString WebPage::getLastAttachedFileName() {
return currentFrame()->evaluateJavaScript(QString("Capybara.lastAttachedFile")).toString();
QStringList WebPage::getAttachedFileNames() {
return currentFrame()->evaluateJavaScript(QString("Capybara.attachedFiles")).toStringList();
}
void WebPage::handleSslErrorsForReply(QNetworkReply *reply, const QList<QSslError> &errors) {

View File

@ -66,7 +66,7 @@ class WebPage : public QWebPage {
QString m_userAgent;
bool m_loading;
bool m_failed;
QString getLastAttachedFileName();
QStringList getAttachedFileNames();
void loadJavascript();
void setUserStylesheet();
bool m_confirm;

View File

@ -1,7 +1,7 @@
Capybara = {
nextIndex: 0,
nodes: {},
lastAttachedFile: "",
attachedFiles: [],
invoke: function () {
return this[CapybaraInvocation.functionName].apply(this, CapybaraInvocation.arguments);
@ -260,7 +260,7 @@ Capybara = {
}
} else if (type === "file") {
this.lastAttachedFile = value;
this.attachedFiles = Array.prototype.slice.call(arguments, 1);
this.click(index);
} else {