[drupal-devel] [feature] JS-based file upload
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: 4.6.0 Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven Status: patch (code needs review) Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress Steven
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: 4.6.0 Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven Status: patch (code needs review) Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: 4.6.0 Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: m3avrck Status: patch (code needs review) This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. m3avrck Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory.
Great addition. The only suggestion - perhaps some css class or "new" label next to a freshly added file. When adding another file to a already long list, the latest addition might get unnotified. A Drupal Fade Technique? ;) http://www.axentric.com/posts/default/7
hm, quite an interesting UI concept to mix classic "progressing" bar and "endless loop" bar. I'd still keep those separate. Also, the progress % is hard to read on animated background
Great addition. The only suggestion - perhaps some css class or "new" label next to a freshly added file. When adding another file to a already long list, the latest addition might get unnotified. A Drupal Fade Technique? ;) http://www.axentric.com/posts/default/7
Yeah I wasn't sure if we wanted something like that here: the new file entry shows up where the file form and progressbar was. The visual link is quite clear. Implementing a generic Yellow-Fade-Technique in Drupal is also tricky because you need to deal with the page cache.
hm, quite an interesting UI concept to mix classic "progressing" bar and "endless loop" bar. I'd still keep those separate. Also, the progress % is hard to read on animated background
The percentage should be above the bar, not in it... you're probably seeing some clearing issue with my theme. Because it will be monitoring the progress through Ajax, it will not update very smoothly, so a constant animation is not a bad idea. Thanks for the review, Steven Wittens
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: 4.6.0 Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: drumm Status: patch (code needs review) +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). drumm Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven Status: patch (code needs review) Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css).
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Gabriel Radic Status: patch (code needs review) I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. Gabriel Radic Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: stefan nagtegaal Status: patch (code needs review) Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan stefan nagtegaal Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven Status: patch (code needs review) Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Crell Status: patch (code needs review) I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) Crell Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work?
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: stefan nagtegaal Status: patch (code needs review) Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? stefan nagtegaal Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.)
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Thox -Status: patch (code needs review) +Status: patch (code needs work) After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. Thox Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it?
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: m3avrck Status: patch (code needs work) Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. m3avrck Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: tostinni Status: patch (code needs work) Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [1]. [1] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html tostinni Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [2]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [3] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [2] http://www.acko.net/dumpx/jsupload.png [3] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven -Status: patch (code needs work) +Status: patch (code needs review) Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Dries -Status: patch (code needs review) +Status: patch (code needs work) Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) Dries Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Thox Status: patch (code needs work) When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. Thox Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?)
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven -Status: patch (code needs work) +Status: patch (code needs review) Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version. Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Bèr Kessels Status: patch (code needs review) Steven: I will test this on KHTML, but might need some help, for I am very limited in time (read: reallyy have no time for testing). HOwever: in contrary to what Stefan says, the current ajax/js works well on konq. AND on safari (and beleive me I have a hell of a testing environment :) [1]) [1] http://bler.webschuur.com/big_bash Bèr Kessels Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [2]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [3] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [2] http://www.acko.net/dumpx/jsupload.png [3] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [4]. [4] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. ------------------------------------------------------------------------ Fri, 19 Aug 2005 13:07:56 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version.
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: m3avrck Status: patch (code needs review) What's the status of this? Can we get this into core before the freeze, seems to be working great for me! m3avrck Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. ------------------------------------------------------------------------ Fri, 19 Aug 2005 13:07:56 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version. ------------------------------------------------------------------------ Fri, 19 Aug 2005 21:12:13 +0000 : Bèr Kessels Steven: I will test this on KHTML, but might need some help, for I am very limited in time (read: reallyy have no time for testing). HOwever: in contrary to what Stefan says, the current ajax/js works well on konq. AND on safari (and beleive me I have a hell of a testing environment :) [4]) [4] http://bler.webschuur.com/big_bash
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: stefan nagtegaal Status: patch (code needs review) I retested this patch and I can verify that it works the way it would work on Safari.. Please apply.. BTW Ber: Macs just works! Only microsoft screws it! stefan nagtegaal Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. ------------------------------------------------------------------------ Fri, 19 Aug 2005 13:07:56 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version. ------------------------------------------------------------------------ Fri, 19 Aug 2005 21:12:13 +0000 : Bèr Kessels Steven: I will test this on KHTML, but might need some help, for I am very limited in time (read: reallyy have no time for testing). HOwever: in contrary to what Stefan says, the current ajax/js works well on konq. AND on safari (and beleive me I have a hell of a testing environment :) [4]) [4] http://bler.webschuur.com/big_bash ------------------------------------------------------------------------ Mon, 29 Aug 2005 19:17:20 +0000 : m3avrck What's the status of this? Can we get this into core before the freeze, seems to be working great for me!
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Steven -Status: patch (code needs review) +Status: patch (ready to be committed) Attachment: http://drupal.org/files/issues/jsupload_2.patch (14.63 KB) Keeping up to date, setting to commit-ready given that there were no bugs reported that are caused by this patch. Steven Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. ------------------------------------------------------------------------ Fri, 19 Aug 2005 13:07:56 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version. ------------------------------------------------------------------------ Fri, 19 Aug 2005 21:12:13 +0000 : Bèr Kessels Steven: I will test this on KHTML, but might need some help, for I am very limited in time (read: reallyy have no time for testing). HOwever: in contrary to what Stefan says, the current ajax/js works well on konq. AND on safari (and beleive me I have a hell of a testing environment :) [4]) [4] http://bler.webschuur.com/big_bash ------------------------------------------------------------------------ Mon, 29 Aug 2005 19:17:20 +0000 : m3avrck What's the status of this? Can we get this into core before the freeze, seems to be working great for me! ------------------------------------------------------------------------ Wed, 31 Aug 2005 08:18:07 +0000 : stefan nagtegaal I retested this patch and I can verify that it works the way it would work on Safari.. Please apply.. BTW Ber: Macs just works! Only microsoft screws it!
Issue status update for http://drupal.org/node/28483 Post a follow up: http://drupal.org/project/comments/add/28483 Project: Drupal Version: cvs Component: upload.module Category: feature requests Priority: normal Assigned to: Steven Reported by: Steven Updated by: Bèr Kessels Status: patch (ready to be committed) I don't want to be a nitpick, but IMO the progressbar should animate from left to right. That just feels better. Bèr Kessels Previous comments: ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:13:03 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload.patch (14.71 KB) This patch adds JavaScript-based inline uploading (screenshot [1]). It does this by redirecting the submission of the form to a hidden <iframe> when you click "Attach" (we cannot submit data through Ajax directly because you cannot read file contents from JS for security reasons). Once the file is submitted, the upload-section of the form is updated. Things to note: * The feature degrades back to the current behaviour without JS. * If there are errors with the uploaded file (disallowed type, too big, ...), they are displayed at the top of the file attachments fieldset. * Though the hidden-iframe method sounds dirty, it's quite compact and is 100% implemented in .js files. The drupal.js api makes it a snap to use. * I included some minor improvements to the Drupal JS API and code. * I added an API drupal_call_js() to bridge the PHP/JS gap: it takes a function name and arguments, and outputs a <script> tag. The kicker is that it preserves the structure and type of arguments, so e.g. PHP associative arrays end up as objects in JS. * I also included a progressbar widget [2] that I wrote for drumm's ongoing update.php work. It includes Ajax status updating/monitoring, but it is only used as a pure throbber in this patch. But as the code was already written and is going to be used in the near future, I left that part in. It's pretty small ;). If PHP supports ad-hoc upload info in the future like Ruby on Rails, we can implement that in 5 minutes. [1] http://www.acko.net/dumpx/jsupload.png [2] http://www.acko.net/yay-progress ------------------------------------------------------------------------ Tue, 09 Aug 2005 01:39:42 +0000 : Steven Attachment: http://drupal.org/files/issues/progress.gif (1.22 KB) This image belongs in the misc directory. ------------------------------------------------------------------------ Tue, 09 Aug 2005 15:38:19 +0000 : m3avrck This sounds like a great and much needed feature! I'm curious as to how extendable this feature is because I would like to very soon create a window that can be opened from a link (maybe even through TinyMCE) to basically include links to documents on a Drupal website within the content itself, instead of merely "attaching" them to the end of the document. Taking this upload feature, along with better a file manager could create quite an awesome webbased FTP like program that I know many would find useful. I'll have to take a look at this patch much more closely very soon. ------------------------------------------------------------------------ Wed, 10 Aug 2005 21:44:18 +0000 : drumm +1 Works as expected and it degrades well (at first I didn't do a hard refresh and my browser wasn't seeing the new js or css). ------------------------------------------------------------------------ Wed, 17 Aug 2005 00:41:14 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_0.patch (14.6 KB) Keeping up to date. Still needs confirmed testing on KHTML browsers like Konqueror and Safari, please. ------------------------------------------------------------------------ Wed, 17 Aug 2005 15:58:07 +0000 : Gabriel Radic I'd be happy to test on Safari (1.2 and 2/1.3) and other WebKit browsers and report the results here, but I can't apply the patch on any of my installs (too risky) and don't have the time to set up a new Drupal installation. Steven, any chance for you to share a web page for me to test? Thanks. ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:09:43 +0000 : stefan nagtegaal Maybe it is me, but Steven why do you bother about the fact that this will work on Safari? All other JS/AJAX we currently have in core doesn't work with Safari... Is it something special, or is t just curiocity? Stefan ------------------------------------------------------------------------ Wed, 17 Aug 2005 16:35:43 +0000 : Steven Mostly because I can't test it, and Javascript is a fidgety business. But I have to admit I was surprised when I found out (recently!) that Drupal JS doesn't work in Safari. The features we check for are all basic W3C DOM stuff, I assumed Safari would support them. Do we know why Safari doesn't work? ------------------------------------------------------------------------ Wed, 17 Aug 2005 19:44:23 +0000 : Crell I'm not sure about Drupal in particular, but Safari is missing a LOT Of W3C DOM "stuff". Many functions are there, but stubbed out and do nothing. Others are badly implemented. It's closer to the standard than IE is, but with the missing functionality I'm not sure which is really easier to code for. I don't know if Konqueror is crippled in the same way, but I would suspect it is. (I've not gotten any decent Ajax to work in Konqueror myself, although I freely admit to not being an expert on the subject.) ------------------------------------------------------------------------ Wed, 17 Aug 2005 21:31:50 +0000 : stefan nagtegaal Okay, I found out how to debug with Safari.. When I goto: '?q=node/add/$type', I get these errors: - SyntaxError - Parse error (line 37) drupal.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 3) collapse.js - TypeError - Object (result of expression isJsEnabled) does not allow calls (line 4) autocomplete.js Maybe you know what's wrong or what todo about it? ------------------------------------------------------------------------ Thu, 18 Aug 2005 08:49:00 +0000 : Thox After successfully attaching a file, the user can navigate away from the page without pressing submit. The attachment shows up in the table, but in this case the attachment isn't linked to the node. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:17:01 +0000 : m3avrck Now I haven't had time to play with this patch yet, but that last comment gave me an idea. Is there a JS check to see if the user is trying to navigate away from the page? For example, they are uploading a file and click a link in another app, all of a sudden that upload page they are on is replaced by some other page. A simple JS check for this saying "Do you want to leave this page and cancel the upload?" would certainly be a great usability boost and prevent this from happening. ------------------------------------------------------------------------ Thu, 18 Aug 2005 14:53:58 +0000 : tostinni Retaking this idea of controlling if user is living a page or not, I recently saw the new IPB permission panel demo, it makes an intense use of AJAX and provide a way to keep track if the user is living the page. See the demo here [3]. [3] http://blog.mattmecham.com/archives/2005/07/ipb_21_acp_perm.html ------------------------------------------------------------------------ Thu, 18 Aug 2005 15:29:27 +0000 : Steven Thox: this is by design, and no different from submitting a file by doing a preview, and then navigating away from the edit page. "Changes made to the attachments list will not be permanent until you save this post." The patch simply streamlines the workflow. ------------------------------------------------------------------------ Thu, 18 Aug 2005 22:02:17 +0000 : Dries Patch doesn't apply. (BTW, is it me or is the progress bar somewhat toy-ish and somewhat flashy?) ------------------------------------------------------------------------ Fri, 19 Aug 2005 08:39:58 +0000 : Thox When attaching two or more files with the same without pressing submit, the original file is overwritten and the table shows two files with the same name. After pressing submit, the table shows one file. ------------------------------------------------------------------------ Fri, 19 Aug 2005 13:07:56 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_1.patch (14.63 KB) Thox: this is also an existing behaviour/bug in upload.module. This patch does not affect any of the underlying file saving or storage mechanisms. It simply introduces an asynchronous form submission and result display, but otherwise uses exactly the same code as the non-JS version. Attached is an up-to-date, but otherwise unchanged version. ------------------------------------------------------------------------ Fri, 19 Aug 2005 21:12:13 +0000 : Bèr Kessels Steven: I will test this on KHTML, but might need some help, for I am very limited in time (read: reallyy have no time for testing). HOwever: in contrary to what Stefan says, the current ajax/js works well on konq. AND on safari (and beleive me I have a hell of a testing environment :) [4]) [4] http://bler.webschuur.com/big_bash ------------------------------------------------------------------------ Mon, 29 Aug 2005 19:17:20 +0000 : m3avrck What's the status of this? Can we get this into core before the freeze, seems to be working great for me! ------------------------------------------------------------------------ Wed, 31 Aug 2005 08:18:07 +0000 : stefan nagtegaal I retested this patch and I can verify that it works the way it would work on Safari.. Please apply.. BTW Ber: Macs just works! Only microsoft screws it! ------------------------------------------------------------------------ Wed, 31 Aug 2005 15:47:34 +0000 : Steven Attachment: http://drupal.org/files/issues/jsupload_2.patch (14.63 KB) Keeping up to date, setting to commit-ready given that there were no bugs reported that are caused by this patch.
participants (12)
-
Bèr Kessels -
Crell -
Dries -
drumm -
Gabriel Radic -
Kristjan Jansen -
m3avrck -
stefan nagtegaal -
Steven -
Steven Wittens -
Thox -
tostinni