summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Wittens <steven@10.no-reply.drupal.org>2006-04-27 18:12:25 +0000
committerSteven Wittens <steven@10.no-reply.drupal.org>2006-04-27 18:12:25 +0000
commit23bd2c005a7c50c740109ed6b732159a67f62e3f (patch)
tree727bf0e2fc87dc0e07ce80f67b65fa189758359b
parent00f8037e45b1dcb4f7ebde44793c1241b0ae314c (diff)
downloadbrdo-23bd2c005a7c50c740109ed6b732159a67f62e3f.tar.gz
brdo-23bd2c005a7c50c740109ed6b732159a67f62e3f.tar.bz2
#60532: multiple file upload broken in some browsers
-rw-r--r--misc/drupal.js12
-rw-r--r--modules/upload.module31
-rw-r--r--modules/upload/upload.module31
3 files changed, 40 insertions, 34 deletions
diff --git a/misc/drupal.js b/misc/drupal.js
index cf4510a28..e697fc855 100644
--- a/misc/drupal.js
+++ b/misc/drupal.js
@@ -113,7 +113,7 @@ function HTTPPost(uri, callbackFunction, callbackParameter, object) {
* window.parent.iframeHandler() after submission.
*/
function redirectFormButton(uri, button, handler) {
- // Make sure we have an iframe to target
+ // (Re)create an iframe to target.
createIframe();
// Trap the button
@@ -140,8 +140,8 @@ function redirectFormButton(uri, button, handler) {
// Get response from iframe body
try {
response = (iframe.contentWindow || iframe.contentDocument || iframe).document.body.innerHTML;
- // Firefox 1.0.x hack: Replace control characters
- response = response.replace(/[\f\n\r\t\v]/g, ' ');
+ // Firefox 1.0.x hack: Remove (corrupted) control characters
+ response = response.replace(/[\f\n\r\t]/g, ' ');
if (window.opera) {
// Opera-hack: it returns innerHTML sanitized.
response = response.replace(/&quot;/g, '"');
@@ -151,8 +151,8 @@ function redirectFormButton(uri, button, handler) {
response = null;
}
- // Recreate the iframe: re-using an old iframe can sometimes cause browser bugs.
- createIframe();
+ $('redirect-target').onload = null;
+ $('redirect-target').src = 'about:blank';
response = parseJson(response);
// Check response code
@@ -353,7 +353,7 @@ function createIframe() {
*/
function deleteIframe() {
var holder = $('redirect-holder');
- if (typeof holder != 'undefined') {
+ if (holder != null) {
removeNode(holder);
}
}
diff --git a/modules/upload.module b/modules/upload.module
index 9163586fa..96481d2f2 100644
--- a/modules/upload.module
+++ b/modules/upload.module
@@ -235,6 +235,7 @@ function upload_form_alter($form_id, &$form) {
drupal_add_js('misc/progress.js');
drupal_add_js('misc/upload.js');
+ // Attachments fieldset
$form['attachments'] = array(
'#type' => 'fieldset',
'#title' => t('File attachments'),
@@ -245,7 +246,13 @@ function upload_form_alter($form_id, &$form) {
'#suffix' => '</div>',
'#weight' => 30,
);
- $form['attachments'] += _upload_form($node);
+
+ // Wrapper for fieldset contents (used by upload JS).
+ $form['attachments']['wrapper'] = array(
+ '#prefix' => '<div id="attach-wrapper">',
+ '#suffix' => '</div>',
+ );
+ $form['attachments']['wrapper'] += _upload_form($node);
$form['#attributes']['enctype'] = 'multipart/form-data';
}
}
@@ -268,7 +275,7 @@ function _upload_validate(&$node) {
// Bypass validation for uid = 1.
if ($user->uid != 1) {
- //Update filesize accumulator.
+ // Update filesize accumulator.
$filesize += $file->filesize;
// Validate file against all users roles.
@@ -545,6 +552,7 @@ function upload_delete_revision($node) {
function _upload_form($node) {
$form['#theme'] = 'upload_form_new';
+
if (is_array($node->files) && count($node->files)) {
$form['files']['#theme'] = 'upload_form_current';
$form['files']['#tree'] = TRUE;
@@ -568,10 +576,15 @@ function _upload_form($node) {
}
if (user_access('upload files')) {
+ // This div is hidden when the user uploads through JS.
+ $form['new'] = array(
+ '#prefix' => '<div id="attach-hide">',
+ '#suffix' => '</div>',
+ );
$form['new']['upload'] = array('#type' => 'file', '#title' => t('Attach new file'), '#size' => 40);
- $form['new']['fileop'] = array('#type' => 'button', '#value' => t('Attach'), '#name'=> 'fileop', '#attributes' => array('id' => 'fileop'));
+ $form['new']['attach'] = array('#type' => 'button', '#value' => t('Attach'), '#name'=> 'attach', '#attributes' => array('id' => 'attach'));
// The class triggers the js upload behaviour.
- $form['fileop'] = array('#type' => 'hidden', '#value' => url('upload/js', NULL, NULL, TRUE), '#attributes' => array('class' => 'upload'));
+ $form['attach'] = array('#type' => 'hidden', '#value' => url('upload/js', NULL, NULL, TRUE), '#attributes' => array('class' => 'upload'));
}
// Needed for JS
@@ -579,15 +592,6 @@ function _upload_form($node) {
return $form;
}
-function theme_upload_form_new($form) {
- $output .= '<div id="fileop-wrapper">' . "\n";
- $output .= '<div id="fileop-hide">' . "\n";
- $output .= form_render($form) . "\n";
- $output .= "</div>\n";
- $output .= "</div>\n";
- return $output;
-}
-
function theme_upload_form_current(&$form) {
$header = array(t('Delete'), t('List'), t('Description'), t('Size'));
@@ -659,7 +663,6 @@ function upload_js() {
}
$form = form_builder('upload_js', $form);
$output = theme('status_messages') . form_render($form);
-
// We send the updated file attachments form.
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;
diff --git a/modules/upload/upload.module b/modules/upload/upload.module
index 9163586fa..96481d2f2 100644
--- a/modules/upload/upload.module
+++ b/modules/upload/upload.module
@@ -235,6 +235,7 @@ function upload_form_alter($form_id, &$form) {
drupal_add_js('misc/progress.js');
drupal_add_js('misc/upload.js');
+ // Attachments fieldset
$form['attachments'] = array(
'#type' => 'fieldset',
'#title' => t('File attachments'),
@@ -245,7 +246,13 @@ function upload_form_alter($form_id, &$form) {
'#suffix' => '</div>',
'#weight' => 30,
);
- $form['attachments'] += _upload_form($node);
+
+ // Wrapper for fieldset contents (used by upload JS).
+ $form['attachments']['wrapper'] = array(
+ '#prefix' => '<div id="attach-wrapper">',
+ '#suffix' => '</div>',
+ );
+ $form['attachments']['wrapper'] += _upload_form($node);
$form['#attributes']['enctype'] = 'multipart/form-data';
}
}
@@ -268,7 +275,7 @@ function _upload_validate(&$node) {
// Bypass validation for uid = 1.
if ($user->uid != 1) {
- //Update filesize accumulator.
+ // Update filesize accumulator.
$filesize += $file->filesize;
// Validate file against all users roles.
@@ -545,6 +552,7 @@ function upload_delete_revision($node) {
function _upload_form($node) {
$form['#theme'] = 'upload_form_new';
+
if (is_array($node->files) && count($node->files)) {
$form['files']['#theme'] = 'upload_form_current';
$form['files']['#tree'] = TRUE;
@@ -568,10 +576,15 @@ function _upload_form($node) {
}
if (user_access('upload files')) {
+ // This div is hidden when the user uploads through JS.
+ $form['new'] = array(
+ '#prefix' => '<div id="attach-hide">',
+ '#suffix' => '</div>',
+ );
$form['new']['upload'] = array('#type' => 'file', '#title' => t('Attach new file'), '#size' => 40);
- $form['new']['fileop'] = array('#type' => 'button', '#value' => t('Attach'), '#name'=> 'fileop', '#attributes' => array('id' => 'fileop'));
+ $form['new']['attach'] = array('#type' => 'button', '#value' => t('Attach'), '#name'=> 'attach', '#attributes' => array('id' => 'attach'));
// The class triggers the js upload behaviour.
- $form['fileop'] = array('#type' => 'hidden', '#value' => url('upload/js', NULL, NULL, TRUE), '#attributes' => array('class' => 'upload'));
+ $form['attach'] = array('#type' => 'hidden', '#value' => url('upload/js', NULL, NULL, TRUE), '#attributes' => array('class' => 'upload'));
}
// Needed for JS
@@ -579,15 +592,6 @@ function _upload_form($node) {
return $form;
}
-function theme_upload_form_new($form) {
- $output .= '<div id="fileop-wrapper">' . "\n";
- $output .= '<div id="fileop-hide">' . "\n";
- $output .= form_render($form) . "\n";
- $output .= "</div>\n";
- $output .= "</div>\n";
- return $output;
-}
-
function theme_upload_form_current(&$form) {
$header = array(t('Delete'), t('List'), t('Description'), t('Size'));
@@ -659,7 +663,6 @@ function upload_js() {
}
$form = form_builder('upload_js', $form);
$output = theme('status_messages') . form_render($form);
-
// We send the updated file attachments form.
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;