Drag’n’drop in Roundcube

This is a nice feature on desktop, so it is in desktop-like web applications. Average user likes this feature and uses it. That said, we have in Roundcube some drag’n’drop capabilities, it is:

  1. Dragging messages to folders (in messages list view) – copy/move action.
  2. Dragging folders to folders (in Preferences > Folders) – move action.
  3. Dragging contacts to groups/sources (in Addressbook) – copy/move/assign to group action.
  4. Dropping files from desktop to compose attachments.
  5. As of yesterday it is also possible to drag’n’drop attachments from mail preview to compose window.
  6. If you use Kolab, you can actually also drop files from desktop into Calendar, Tasks and Files.
  7. You can also re-arange messages list columns using drag’n’drop technique.

These should work in most of web browsers (their recent versions). The question is: can we have more of this? E.g. wouldn’t be nice to drag attachments or messages from browser to desktop? Or messages to compose attachments? Well, it would, but it’s not so simple…

I recently investigated what recent web standards and browsers provide in this regard. This does not look good. Standard way of drag’n’drop is DataTransfer and some events defined events, plus HTML attribute ‘draggable’. Unfortunately there’s no standard way of dropping a file to the desktop. So, what options do we have:

  1. Chrome browser supports its own DownloadURL parameter of DataTransfer, but even Chromium does not use it.
  2. In Firefox you can drag a link which on Windows will create a file link, so not what we want, but under Linux (KDE) it actually can download a real file. Unfortunately, this does work only with public files. It does not work with session-based apps (as Roundcube). We’d need to implement something like one-time-public URIs to attachments.
  3. I didn’t find any information about other browsers.

So, as you see not much we can do today. There’s another issue, this will anyway do not work with Roundcube widgets implementing its own “internal” drag’n’drop, e.g. messages list. Also, there’s no standard to drag many resources at a time so we cannot replace our “internal” implementation.