deposit: js uploader component

Integrates and supersedes #2322
should it be outside or inside `define` function?