diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1f589db6..c8a9dfa9e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -101,6 +101,43 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature,
- [ ] core: add maxTotalFileSize restriction #514 (@arturi)
- [ ] providers: Provider Browser don't handle uppy restrictions, can we hide things that don't match the restrictions in Google Drive and Instagram? #1827 (@arturi)
+## 1.19.1
+
+Released: 2020-07-29
+
+This is a bugfix release. The breaking change mentioned in 1.19.0 was much more severe than anticipated, because it affected the primary user-facing translation string. 1.19.1 hopes to restore backwards compatibility with all previous 1.x versions. Thanks to [@yaegor](https://github.com/yaegor) for pointing this out and to [@jonathanarbely](https://github.com/jonathanarbely) and [@fingul](https://github.com/fingul) for submitting translations for the new strings for German and Korean!
+
+| Package | Version | Package | Version |
+|-|-|-|-|
+| @uppy/aws-s3-multipart | 1.8.1 | @uppy/provider-views | 1.7.1 |
+| @uppy/aws-s3 | 1.6.8 | @uppy/react | 1.10.1 |
+| @uppy/companion-client | 1.5.2 | @uppy/redux-dev-tools | 1.3.3 |
+| @uppy/core | 1.12.1 | @uppy/robodog | 1.9.1 |
+| @uppy/dashboard | 1.12.1 | @uppy/screen-capture | 1.0.5 |
+| @uppy/drag-drop | 1.4.17 | @uppy/status-bar | 1.7.2 |
+| @uppy/dropbox | 1.4.10 | @uppy/store-default | 1.2.2 |
+| @uppy/facebook | 1.1.10 | @uppy/store-redux | 1.2.2 |
+| @uppy/file-input | 1.4.15 | @uppy/thumbnail-generator | 1.6.4 |
+| @uppy/form | 1.3.18 | @uppy/transloadit | 1.6.4 |
+| @uppy/golden-retriever | 1.3.17 | @uppy/tus | 1.7.2 |
+| @uppy/google-drive | 1.5.10 | @uppy/url | 1.5.9 |
+| @uppy/informer | 1.5.9 | @uppy/utils | 3.2.1 |
+| @uppy/instagram | 1.4.10 | @uppy/webcam | 1.6.9 |
+| @uppy/locales | 1.16.2 | @uppy/xhr-upload | 1.6.2 |
+| @uppy/onedrive | 1.1.10 | uppy | 1.19.1 |
+| @uppy/progress-bar | 1.3.17 | - | - |
+
+- @uppy/aws-s3: tighten type checks in default `getUploadParameters()` implementation (#2388 / @johnnyperkins)
+- @uppy/dashboard: restore backwards compatibility for the locales (#2397 / @goto-bus-stop)
+- @uppy/dashboard: revert Preact X version conflict fix, which was causing new bugs (#2405 / @goto-bus-stop)
+- @uppy/locales: add stub value for `browseFiles` for all remaining translations (#2397 / @goto-bus-stop)
+- @uppy/locales: add stub value for `browseFiles` for the German translation (#2396 / @jonathanarbely)
+- @uppy/locales: tweak Korean wording and add the new `dropPaste*` strings (#2395 / @fingul)
+- docs: document shape of file objects (#2371 / @goto-bus-stop)
+- docs: document transloadit `waitForXYZ` options better (#2371 / @goto-bus-stop)
+- docs: prefer constructor syntax `new Uppy()` over plain call syntax `Uppy()` (#2371 / @goto-bus-stop)
+- website: fix a couple of cases where user-provided values were output to HTML unescaped. Thanks [Shivprsad Sammbhare](https://linkedin.com/in/shivprasadsambhare) for the report!
+
## 1.19.0
Released: 2020-07-21
diff --git a/README.md b/README.md
index 7a29382e7..ca1bfaa32 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ $ npm install @uppy/core @uppy/dashboard @uppy/tus
We recommend installing from npm and then using a module bundler such as [Webpack](https://webpack.js.org/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/).
-Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v1.19.0/uppy.min.css), either to your HTML page's `
` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
+Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v1.19.1/uppy.min.css), either to your HTML page's `` or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object.
@@ -73,10 +73,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
```html
-
+
-
+
@@ -174,7 +174,7 @@ const Uppy = require('@uppy/core')
If you're using Uppy from CDN, `es6-promise` and `whatwg-fetch` are already included in the bundle, so no need to include anything additionally:
```html
-
+
```
## FAQ
@@ -259,117 +259,121 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
:---: |:---: |:---: |:---: |:---: |:---: |
[sunil-shrestha](https://github.com/sunil-shrestha) |[yonahforst](https://github.com/yonahforst) |[stephentuso](https://github.com/stephentuso) |[mskelton](https://github.com/mskelton) |[btrice](https://github.com/btrice) |[behnammodi](https://github.com/behnammodi) |
-[
](https://github.com/Burkes) |[
](https://github.com/craigjennings11) |[
](https://github.com/davekiss) |[
](https://github.com/frobinsonj) |[
](https://github.com/geertclerx) |[
](https://github.com/jasonbosco) |
+[
](https://github.com/Burkes) |[
](https://github.com/craigjennings11) |[
](https://github.com/davekiss) |[
](https://github.com/elenalape) |[
](https://github.com/frobinsonj) |[
](https://github.com/geertclerx) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[jasonbosco](https://github.com/jasonbosco) |
+[Burkes](https://github.com/Burkes) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) |[elenalape](https://github.com/elenalape) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |
-[
](https://github.com/jedwood) |[
](https://github.com/Mactaivsh) |[
](https://github.com/maferland) |[
](https://github.com/Martin005) |[
](https://github.com/martiuslim) |[
](https://github.com/MatthiasKunnen) |
+[
](https://github.com/jasonbosco) |[
](https://github.com/jedwood) |[
](https://github.com/Mactaivsh) |[
](https://github.com/maferland) |[
](https://github.com/Martin005) |[
](https://github.com/martiuslim) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[jedwood](https://github.com/jedwood) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |
+[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[Mactaivsh](https://github.com/Mactaivsh) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |
-[
](https://github.com/msand) |[
](https://github.com/richartkeil) |[
](https://github.com/richmeij) |[
](https://github.com/rosenfeld) |[
](https://github.com/jrschumacher) |[
](https://github.com/ThomasG77) |
+[
](https://github.com/MatthiasKunnen) |[
](https://github.com/msand) |[
](https://github.com/richartkeil) |[
](https://github.com/richmeij) |[
](https://github.com/rosenfeld) |[
](https://github.com/jrschumacher) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[msand](https://github.com/msand) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[ThomasG77](https://github.com/ThomasG77) |
+[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |
-[
](https://github.com/zhuangya) |[
](https://github.com/allenfantasy) |[
](https://github.com/Zyclotrop-j) |[
](https://github.com/fortrieb) |[
](https://github.com/jarey) |[
](https://github.com/muhammadInam) |
+[
](https://github.com/ThomasG77) |[
](https://github.com/zhuangya) |[
](https://github.com/allenfantasy) |[
](https://github.com/Zyclotrop-j) |[
](https://github.com/fortrieb) |[
](https://github.com/jarey) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[zhuangya](https://github.com/zhuangya) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |
+[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |
-[
](https://github.com/rettgerst) |[
](https://github.com/jukakoski) |[
](https://github.com/ajschmidt8) |[
](https://github.com/superhawk610) |[
](https://github.com/adamelmore) |[
](https://github.com/adamvigneault) |
+[
](https://github.com/muhammadInam) |[
](https://github.com/rettgerst) |[
](https://github.com/jukakoski) |[
](https://github.com/ajschmidt8) |[
](https://github.com/superhawk610) |[
](https://github.com/adamelmore) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[rettgerst](https://github.com/rettgerst) |[jukakoski](https://github.com/jukakoski) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[adamelmore](https://github.com/adamelmore) |[adamvigneault](https://github.com/adamvigneault) |
+[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[jukakoski](https://github.com/jukakoski) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[adamelmore](https://github.com/adamelmore) |
-[
](https://github.com/asmt3) |[
](https://github.com/alexnj) |[
](https://github.com/amitport) |[
](https://github.com/functino) |[
](https://github.com/Botz) |[
](https://github.com/radarhere) |
+[
](https://github.com/adamvigneault) |[
](https://github.com/asmt3) |[
](https://github.com/alexnj) |[
](https://github.com/amitport) |[
](https://github.com/functino) |[
](https://github.com/Botz) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[Botz](https://github.com/Botz) |[radarhere](https://github.com/radarhere) |
+[adamvigneault](https://github.com/adamvigneault) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[Botz](https://github.com/Botz) |
-[
](https://github.com/superandrew213) |[
](https://github.com/andychongyz) |[
](https://github.com/arthurdenner) |[
](https://github.com/apuyou) |[
](https://github.com/bochkarev-artem) |[
](https://github.com/atsawin) |
+[
](https://github.com/radarhere) |[
](https://github.com/superandrew213) |[
](https://github.com/andychongyz) |[
](https://github.com/arthurdenner) |[
](https://github.com/apuyou) |[
](https://github.com/bochkarev-artem) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) |[bochkarev-artem](https://github.com/bochkarev-artem) |[atsawin](https://github.com/atsawin) |
+[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) |[bochkarev-artem](https://github.com/bochkarev-artem) |
-[
](https://github.com/ayhankesicioglu) |[
](https://github.com/azeemba) |[
](https://github.com/bducharme) |[
](https://github.com/Quorafind) |[
](https://github.com/cellvinchung) |[
](https://github.com/chao) |
+[
](https://github.com/atsawin) |[
](https://github.com/ayhankesicioglu) |[
](https://github.com/azeemba) |[
](https://github.com/bducharme) |[
](https://github.com/Quorafind) |[
](https://github.com/cellvinchung) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |
+[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[cellvinchung](https://github.com/cellvinchung) |
-[
](https://github.com/csprance) |[
](https://github.com/Aarbel) |[
](https://github.com/cbush06) |[
](https://github.com/czj) |[
](https://github.com/ardeois) |[
](https://github.com/sercraig) |
+[
](https://github.com/chao) |[
](https://github.com/csprance) |[
](https://github.com/Aarbel) |[
](https://github.com/cbush06) |[
](https://github.com/czj) |[
](https://github.com/ardeois) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |
+[chao](https://github.com/chao) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[ardeois](https://github.com/ardeois) |
-[
](https://github.com/danmichaelo) |[
](https://github.com/mrboomer) |[
](https://github.com/akizor) |[
](https://github.com/davilima6) |[
](https://github.com/DennisKofflard) |[
](https://github.com/dominiceden) |
+[
](https://github.com/sercraig) |[
](https://github.com/danmichaelo) |[
](https://github.com/mrboomer) |[
](https://github.com/akizor) |[
](https://github.com/davilima6) |[
](https://github.com/DennisKofflard) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) |[dominiceden](https://github.com/dominiceden) |
+[sercraig](https://github.com/sercraig) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) |
-[
](https://github.com/efbautista) |[
](https://github.com/yoldar) |[
](https://github.com/elenalape) |[
](https://github.com/eliOcs) |[
](https://github.com/lowsprofile) |[
](https://github.com/fgallinari) |
+[
](https://github.com/jeetiss) |[
](https://github.com/dominiceden) |[
](https://github.com/efbautista) |[
](https://github.com/yoldar) |[
](https://github.com/eliOcs) |[
](https://github.com/lowsprofile) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) |[elenalape](https://github.com/elenalape) |[eliOcs](https://github.com/eliOcs) |[lowsprofile](https://github.com/lowsprofile) |[fgallinari](https://github.com/fgallinari) |
+[jeetiss](https://github.com/jeetiss) |[dominiceden](https://github.com/dominiceden) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) |[lowsprofile](https://github.com/lowsprofile) |
-[
](https://github.com/dtrucs) |[
](https://github.com/geoffappleford) |[
](https://github.com/gjungb) |[
](https://github.com/roenschg) |[
](https://github.com/HughbertD) |[
](https://github.com/HussainAlkhalifah) |
+[
](https://github.com/fgallinari) |[
](https://github.com/dtrucs) |[
](https://github.com/geoffappleford) |[
](https://github.com/gjungb) |[
](https://github.com/roenschg) |[
](https://github.com/HughbertD) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[dtrucs](https://github.com/dtrucs) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |
+[fgallinari](https://github.com/fgallinari) |[dtrucs](https://github.com/dtrucs) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |
-[
](https://github.com/huydod) |[
](https://github.com/ishendyweb) |[
](https://github.com/NaxYo) |[
](https://github.com/intenzive) |[
](https://github.com/JacobMGEvans) |[
](https://github.com/jdssem) |
+[
](https://github.com/HussainAlkhalifah) |[
](https://github.com/huydod) |[
](https://github.com/ishendyweb) |[
](https://github.com/NaxYo) |[
](https://github.com/intenzive) |[
](https://github.com/JacobMGEvans) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[huydod](https://github.com/huydod) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[intenzive](https://github.com/intenzive) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) |
+[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[intenzive](https://github.com/intenzive) |[JacobMGEvans](https://github.com/JacobMGEvans) |
-[
](https://github.com/jcjmcclean) |[
](https://github.com/janklimo) |[
](https://github.com/vith) |[
](https://github.com/jessica-coursera) |[
](https://github.com/theJoeBiz) |[
](https://github.com/jderrough) |
+[
](https://github.com/jdssem) |[
](https://github.com/jcjmcclean) |[
](https://github.com/janklimo) |[
](https://github.com/vith) |[
](https://github.com/jessica-coursera) |[
](https://github.com/theJoeBiz) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[theJoeBiz](https://github.com/theJoeBiz) |[jderrough](https://github.com/jderrough) |
+[jdssem](https://github.com/jdssem) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[theJoeBiz](https://github.com/theJoeBiz) |
-[
](https://github.com/jonathanly) |[
](https://github.com/jorgeepc) |[
](https://github.com/julianocomg) |[
](https://github.com/dogrocker) |[
](https://github.com/firesharkstudios) |[
](https://github.com/kyleparisi) |
+[
](https://github.com/johnnyperkins) |[
](https://github.com/jonathanarbely) |[
](https://github.com/jderrough) |[
](https://github.com/jonathanly) |[
](https://github.com/jorgeepc) |[
](https://github.com/julianocomg) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[julianocomg](https://github.com/julianocomg) |[dogrocker](https://github.com/dogrocker) |[firesharkstudios](https://github.com/firesharkstudios) |[kyleparisi](https://github.com/kyleparisi) |
+[johnnyperkins](https://github.com/johnnyperkins) |[jonathanarbely](https://github.com/jonathanarbely) |[jderrough](https://github.com/jderrough) |[jonathanly](https://github.com/jonathanly) |[jorgeepc](https://github.com/jorgeepc) |[julianocomg](https://github.com/julianocomg) |
-[
](https://github.com/lafe) |[
](https://github.com/larowlan) |[
](https://github.com/dviry) |[
](https://github.com/galli-leo) |[
](https://github.com/leods92) |[
](https://github.com/louim) |
+[
](https://github.com/dogrocker) |[
](https://github.com/firesharkstudios) |[
](https://github.com/kyleparisi) |[
](https://github.com/lafe) |[
](https://github.com/larowlan) |[
](https://github.com/dviry) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[lafe](https://github.com/lafe) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |
+[dogrocker](https://github.com/dogrocker) |[firesharkstudios](https://github.com/firesharkstudios) |[kyleparisi](https://github.com/kyleparisi) |[lafe](https://github.com/lafe) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |
-[
](https://github.com/lucaperret) |[
](https://github.com/mperrando) |[
](https://github.com/marcusforsberg) |[
](https://github.com/Acconut) |[
](https://github.com/mattfik) |[
](https://github.com/matthewhartstonge) |
+[
](https://github.com/galli-leo) |[
](https://github.com/leods92) |[
](https://github.com/louim) |[
](https://github.com/lucaperret) |[
](https://github.com/mperrando) |[
](https://github.com/marcusforsberg) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |
+[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[marcusforsberg](https://github.com/marcusforsberg) |
-[
](https://github.com/hrsh) |[
](https://github.com/mhulet) |[
](https://github.com/mkabatek) |[
](https://github.com/achmiral) |[
](https://github.com/mnafees) |[
](https://github.com/shahimclt) |
+[
](https://github.com/Acconut) |[
](https://github.com/mattfik) |[
](https://github.com/matthewhartstonge) |[
](https://github.com/hrsh) |[
](https://github.com/mhulet) |[
](https://github.com/mkabatek) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkabatek](https://github.com/mkabatek) |[achmiral](https://github.com/achmiral) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |
+[Acconut](https://github.com/Acconut) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkabatek](https://github.com/mkabatek) |
-[
](https://github.com/naveed-ahmad) |[
](https://github.com/nicojones) |[
](https://github.com/olemoign) |[
](https://github.com/leftdevel) |[
](https://github.com/cryptic022) |[
](https://github.com/pedrofs) |
+[
](https://github.com/achmiral) |[
](https://github.com/mnafees) |[
](https://github.com/shahimclt) |[
](https://github.com/naveed-ahmad) |[
](https://github.com/nicojones) |[
](https://github.com/olemoign) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[olemoign](https://github.com/olemoign) |[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[pedrofs](https://github.com/pedrofs) |
+[achmiral](https://github.com/achmiral) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[olemoign](https://github.com/olemoign) |
-[
](https://github.com/phillipalexander) |[
](https://github.com/Pzoco) |[
](https://github.com/eman8519) |[
](https://github.com/luarmr) |[
](https://github.com/phobos101) |[
](https://github.com/romain-preston) |
+[
](https://github.com/leftdevel) |[
](https://github.com/cryptic022) |[
](https://github.com/pedrofs) |[
](https://github.com/phillipalexander) |[
](https://github.com/Pzoco) |[
](https://github.com/eman8519) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[phillipalexander](https://github.com/phillipalexander) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) |[romain-preston](https://github.com/romain-preston) |
+[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[pedrofs](https://github.com/pedrofs) |[phillipalexander](https://github.com/phillipalexander) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |
-[
](https://github.com/scherroman) |[
](https://github.com/fortunto2) |[
](https://github.com/samuelcolburn) |[
](https://github.com/sergei-zelinsky) |[
](https://github.com/SpazzMarticus) |[
](https://github.com/suchoproduction) |
+[
](https://github.com/luarmr) |[
](https://github.com/phobos101) |[
](https://github.com/romain-preston) |[
](https://github.com/scherroman) |[
](https://github.com/fortunto2) |[
](https://github.com/samuelcolburn) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[scherroman](https://github.com/scherroman) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[SpazzMarticus](https://github.com/SpazzMarticus) |[suchoproduction](https://github.com/suchoproduction) |
+[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |
-[
](https://github.com/waptik) |[
](https://github.com/steverob) |[
](https://github.com/tajchumber) |[
](https://github.com/Tashows) |[
](https://github.com/twarlop) |[
](https://github.com/tmaier) |
+[
](https://github.com/sergei-zelinsky) |[
](https://github.com/SpazzMarticus) |[
](https://github.com/suchoproduction) |[
](https://github.com/waptik) |[
](https://github.com/steverob) |[
](https://github.com/tajchumber) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[waptik](https://github.com/waptik) |[steverob](https://github.com/steverob) |[tajchumber](https://github.com/tajchumber) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |
+[sergei-zelinsky](https://github.com/sergei-zelinsky) |[SpazzMarticus](https://github.com/SpazzMarticus) |[suchoproduction](https://github.com/suchoproduction) |[waptik](https://github.com/waptik) |[steverob](https://github.com/steverob) |[tajchumber](https://github.com/tajchumber) |
-[
](https://github.com/tomsaleeba) |[
](https://github.com/tvaliasek) |[
](https://github.com/sparanoid) |[
](https://github.com/vially) |[
](https://github.com/nagyv) |[
](https://github.com/willycamargo) |
+[
](https://github.com/Tashows) |[
](https://github.com/twarlop) |[
](https://github.com/tmaier) |[
](https://github.com/tomsaleeba) |[
](https://github.com/tvaliasek) |[
](https://github.com/sparanoid) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[sparanoid](https://github.com/sparanoid) |[vially](https://github.com/vially) |[nagyv](https://github.com/nagyv) |[willycamargo](https://github.com/willycamargo) |
+[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[sparanoid](https://github.com/sparanoid) |
-[
](https://github.com/xhocquet) |[
](https://github.com/yaegor) |[
](https://github.com/YehudaKremer) |[
](https://github.com/zachconner) |[
](https://github.com/zacharylawson) |[
](https://github.com/agreene-coursera) |
+[
](https://github.com/vially) |[
](https://github.com/nagyv) |[
](https://github.com/willycamargo) |[
](https://github.com/xhocquet) |[
](https://github.com/yaegor) |[
](https://github.com/YehudaKremer) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[xhocquet](https://github.com/xhocquet) |[yaegor](https://github.com/yaegor) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[agreene-coursera](https://github.com/agreene-coursera) |
+[vially](https://github.com/vially) |[nagyv](https://github.com/nagyv) |[willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) |[yaegor](https://github.com/yaegor) |[YehudaKremer](https://github.com/YehudaKremer) |
-[
](https://github.com/alfatv) |[
](https://github.com/arggh) |[
](https://github.com/avalla) |[
](https://github.com/bdirito) |[
](https://github.com/c0b41) |[
](https://github.com/canvasbh) |
+[
](https://github.com/zachconner) |[
](https://github.com/zacharylawson) |[
](https://github.com/agreene-coursera) |[
](https://github.com/alfatv) |[
](https://github.com/arggh) |[
](https://github.com/avalla) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |
+[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[agreene-coursera](https://github.com/agreene-coursera) |[alfatv](https://github.com/alfatv) |[arggh](https://github.com/arggh) |[avalla](https://github.com/avalla) |
-[
](https://github.com/craigcbrunner) |[
](https://github.com/darthf1) |[
](https://github.com/dkisic) |[
](https://github.com/franckl) |[
](https://github.com/green-mike) |[
](https://github.com/johnmanjiro13) |
+[
](https://github.com/bdirito) |[
](https://github.com/c0b41) |[
](https://github.com/canvasbh) |[
](https://github.com/craigcbrunner) |[
](https://github.com/darthf1) |[
](https://github.com/dkisic) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |[franckl](https://github.com/franckl) |[green-mike](https://github.com/green-mike) |[johnmanjiro13](https://github.com/johnmanjiro13) |
+[bdirito](https://github.com/bdirito) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[craigcbrunner](https://github.com/craigcbrunner) |[darthf1](https://github.com/darthf1) |[dkisic](https://github.com/dkisic) |
-[
](https://github.com/magumbo) |[
](https://github.com/ninesalt) |[
](https://github.com/luntta) |[
](https://github.com/rhymes) |[
](https://github.com/rlebosse) |[
](https://github.com/rtaieb) |
+[
](https://github.com/fingul) |[
](https://github.com/franckl) |[
](https://github.com/green-mike) |[
](https://github.com/johnmanjiro13) |[
](https://github.com/magumbo) |[
](https://github.com/ninesalt) |
:---: |:---: |:---: |:---: |:---: |:---: |
-[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |
+[fingul](https://github.com/fingul) |[franckl](https://github.com/franckl) |[green-mike](https://github.com/green-mike) |[johnmanjiro13](https://github.com/johnmanjiro13) |[magumbo](https://github.com/magumbo) |[ninesalt](https://github.com/ninesalt) |
-[
](https://github.com/thanhthot) |[
](https://github.com/tinny77) |[
](https://github.com/yoann-hellopret) |[
](https://github.com/olitomas) |
-:---: |:---: |:---: |:---: |
-[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |
+[
](https://github.com/luntta) |[
](https://github.com/rhymes) |[
](https://github.com/rlebosse) |[
](https://github.com/rtaieb) |[
](https://github.com/thanhthot) |[
](https://github.com/tinny77) |
+:---: |:---: |:---: |:---: |:---: |:---: |
+[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[rlebosse](https://github.com/rlebosse) |[rtaieb](https://github.com/rtaieb) |[thanhthot](https://github.com/thanhthot) |[tinny77](https://github.com/tinny77) |
+
+[
](https://github.com/yoann-hellopret) |[
](https://github.com/olitomas) |
+:---: |:---: |
+[yoann-hellopret](https://github.com/yoann-hellopret) |[olitomas](https://github.com/olitomas) |
diff --git a/env.example.sh b/env.example.sh
index fd7f4959c..a1ff9a4a2 100644
--- a/env.example.sh
+++ b/env.example.sh
@@ -13,6 +13,8 @@ export COMPANION_FACEBOOK_SECRET="***"
export EDGLY_KEY="***"
export EDGLY_SECRET="***"
export GITHUB_TOKEN="***"
+export COMPANION_ZOOM_KEY="***"
+export COMPANION_ZOOM_SECRET="***"
# Let's not set this by default, because that will make acceptance tests Always run on Saucelabs
## export SAUCE_ACCESS_KEY="***"
diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html
index 1bd61deaf..6e34a9bd5 100644
--- a/examples/cdn-example/index.html
+++ b/examples/cdn-example/index.html
@@ -4,11 +4,11 @@
-
+
-
+
+
+
+
```
Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog).
diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json
index e38840dab..28784b50b 100644
--- a/packages/@uppy/robodog/package.json
+++ b/packages/@uppy/robodog/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/robodog",
"description": "Transloadit SDK for browsers based on Uppy",
- "version": "1.9.0",
+ "version": "1.9.1",
"license": "MIT",
"main": "lib/index.js",
"jsnext:main": "src/index.js",
diff --git a/packages/@uppy/screen-capture/package.json b/packages/@uppy/screen-capture/package.json
index 2f15d7542..d873e9099 100644
--- a/packages/@uppy/screen-capture/package.json
+++ b/packages/@uppy/screen-capture/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/screen-capture",
"description": "Uppy plugin that captures video from display or application.",
- "version": "1.0.4",
+ "version": "1.0.5",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
diff --git a/packages/@uppy/status-bar/package.json b/packages/@uppy/status-bar/package.json
index 50dbf4451..a6718ad0b 100644
--- a/packages/@uppy/status-bar/package.json
+++ b/packages/@uppy/status-bar/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/status-bar",
"description": "A progress bar for Uppy, with many bells and whistles.",
- "version": "1.7.1",
+ "version": "1.7.2",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
diff --git a/packages/@uppy/store-default/package.json b/packages/@uppy/store-default/package.json
index bac12ffde..d12c1ced3 100644
--- a/packages/@uppy/store-default/package.json
+++ b/packages/@uppy/store-default/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/store-default",
"description": "The default simple object-based store for Uppy.",
- "version": "1.2.1",
+ "version": "1.2.2",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/store-redux/package.json b/packages/@uppy/store-redux/package.json
index 57b94433e..b5af2b95f 100644
--- a/packages/@uppy/store-redux/package.json
+++ b/packages/@uppy/store-redux/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/store-redux",
"description": "Make Uppy use your existing Redux store.",
- "version": "1.2.1",
+ "version": "1.2.2",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/thumbnail-generator/package.json b/packages/@uppy/thumbnail-generator/package.json
index ab1c95e45..562c2b70c 100644
--- a/packages/@uppy/thumbnail-generator/package.json
+++ b/packages/@uppy/thumbnail-generator/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/thumbnail-generator",
"description": "Uppy plugin that generates small previews of images to show on your upload UI.",
- "version": "1.6.3",
+ "version": "1.6.4",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json
index 932f38973..2f2d14dc0 100644
--- a/packages/@uppy/transloadit/package.json
+++ b/packages/@uppy/transloadit/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/transloadit",
"description": "The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, and more",
- "version": "1.6.3",
+ "version": "1.6.4",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/transloadit/src/index.js b/packages/@uppy/transloadit/src/index.js
index e9a7cf5e6..2da76e737 100644
--- a/packages/@uppy/transloadit/src/index.js
+++ b/packages/@uppy/transloadit/src/index.js
@@ -128,6 +128,7 @@ module.exports = class Transloadit extends Plugin {
addPluginVersion('GoogleDrive', 'uppy-google-drive')
addPluginVersion('Instagram', 'uppy-instagram')
addPluginVersion('OneDrive', 'uppy-onedrive')
+ addPluginVersion('Zoom', 'uppy-zoom')
addPluginVersion('Url', 'uppy-url')
return list.join(',')
diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json
index 1341091ac..2533c4f05 100644
--- a/packages/@uppy/tus/package.json
+++ b/packages/@uppy/tus/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/tus",
"description": "Resumable uploads for Uppy using Tus.io",
- "version": "1.7.1",
+ "version": "1.7.2",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/url/package.json b/packages/@uppy/url/package.json
index aabcf2aa6..5488627a9 100644
--- a/packages/@uppy/url/package.json
+++ b/packages/@uppy/url/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/url",
"description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!",
- "version": "1.5.8",
+ "version": "1.5.9",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
diff --git a/packages/@uppy/utils/package.json b/packages/@uppy/utils/package.json
index b64e7cba1..f3db26a64 100644
--- a/packages/@uppy/utils/package.json
+++ b/packages/@uppy/utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/utils",
"description": "Shared utility functions for Uppy Core and plugins maintained by the Uppy team.",
- "version": "3.2.0",
+ "version": "3.2.1",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/utils/src/Translator.js b/packages/@uppy/utils/src/Translator.js
index 467a83e88..3930a1463 100644
--- a/packages/@uppy/utils/src/Translator.js
+++ b/packages/@uppy/utils/src/Translator.js
@@ -125,6 +125,10 @@ module.exports = class Translator {
* @returns {Array} The translated and interpolated parts, in order.
*/
translateArray (key, options) {
+ if (!has(this.locale.strings, key)) {
+ throw new Error(`missing string: ${key}`)
+ }
+
const string = this.locale.strings[key]
const hasPluralForms = typeof string === 'object'
diff --git a/packages/@uppy/webcam/package.json b/packages/@uppy/webcam/package.json
index 4da863dd8..73da8d35c 100644
--- a/packages/@uppy/webcam/package.json
+++ b/packages/@uppy/webcam/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/webcam",
"description": "Uppy plugin that takes photos or records videos using the device's camera.",
- "version": "1.6.8",
+ "version": "1.6.9",
"license": "MIT",
"main": "lib/index.js",
"style": "dist/style.min.css",
diff --git a/packages/@uppy/xhr-upload/package.json b/packages/@uppy/xhr-upload/package.json
index e10a31f16..37cae8c19 100644
--- a/packages/@uppy/xhr-upload/package.json
+++ b/packages/@uppy/xhr-upload/package.json
@@ -1,7 +1,7 @@
{
"name": "@uppy/xhr-upload",
"description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.",
- "version": "1.6.1",
+ "version": "1.6.2",
"license": "MIT",
"main": "lib/index.js",
"types": "types/index.d.ts",
diff --git a/packages/@uppy/zoom/LICENSE b/packages/@uppy/zoom/LICENSE
new file mode 100644
index 000000000..d074cabcb
--- /dev/null
+++ b/packages/@uppy/zoom/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2020 Transloadit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/@uppy/zoom/README.md b/packages/@uppy/zoom/README.md
new file mode 100644
index 000000000..38e58ac8b
--- /dev/null
+++ b/packages/@uppy/zoom/README.md
@@ -0,0 +1,40 @@
+# @uppy/zoom
+
+
+
+
+
+
+A description of this plugin or module goes here.
+
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+
+## Example
+
+```js
+const Uppy = require('@uppy/core')
+const Zoom = require('@uppy/zoom')
+
+const uppy = Uppy()
+uppy.use(Zoom, {
+ // Options
+})
+```
+
+## Installation
+
+```bash
+$ npm install @uppy/zoom --save
+```
+
+We recommend installing from npm and then using a module bundler such as [Webpack](https://webpack.js.org/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/).
+
+Alternatively, you can also use this plugin in a pre-built bundle from Transloadit's CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+
+## Documentation
+
+Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/zoom).
+
+## License
+
+[The MIT License](./LICENSE).
diff --git a/packages/@uppy/zoom/package.json b/packages/@uppy/zoom/package.json
new file mode 100644
index 000000000..76752ac2f
--- /dev/null
+++ b/packages/@uppy/zoom/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "@uppy/zoom",
+ "description": "Import files from zoom, into Uppy.",
+ "version": "0.0.1",
+ "license": "MIT",
+ "main": "lib/index.js",
+ "types": "types/index.d.ts",
+ "keywords": [
+ "file uploader",
+ "uppy",
+ "uppy-plugin",
+ "zoom"
+ ],
+ "homepage": "https://uppy.io",
+ "bugs": {
+ "url": "https://github.com/transloadit/uppy/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/transloadit/uppy.git"
+ },
+ "dependencies": {
+ "@uppy/companion-client": "file:../companion-client",
+ "@uppy/provider-views": "file:../provider-views",
+ "@uppy/utils": "file:../utils",
+ "preact": "8.2.9"
+ },
+ "peerDependencies": {
+ "@uppy/core": "^1.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/@uppy/zoom/src/index.js b/packages/@uppy/zoom/src/index.js
new file mode 100644
index 000000000..b3e1a7c32
--- /dev/null
+++ b/packages/@uppy/zoom/src/index.js
@@ -0,0 +1,58 @@
+const { Plugin } = require('@uppy/core')
+const { Provider } = require('@uppy/companion-client')
+const ProviderViews = require('@uppy/provider-views')
+const { h } = require('preact')
+
+module.exports = class Zoom extends Plugin {
+ static VERSION = require('../package.json').version
+
+ constructor (uppy, opts) {
+ super(uppy, opts)
+ this.id = this.opts.id || 'Zoom'
+ Provider.initPlugin(this, opts)
+ this.title = this.opts.title || 'Zoom'
+ this.icon = () => (
+
+ )
+
+ this.provider = new Provider(uppy, {
+ companionUrl: this.opts.companionUrl,
+ companionHeaders: this.opts.companionHeaders || this.opts.serverHeaders,
+ provider: 'zoom',
+ pluginId: this.id
+ })
+
+ this.onFirstRender = this.onFirstRender.bind(this)
+ this.render = this.render.bind(this)
+ }
+
+ install () {
+ this.view = new ProviderViews(this, {
+ provider: this.provider
+ })
+
+ const target = this.opts.target
+ if (target) {
+ this.mount(target, this)
+ }
+ }
+
+ uninstall () {
+ this.view.tearDown()
+ this.unmount()
+ }
+
+ onFirstRender () {
+ return this.view.getFolder()
+ }
+
+ render (state) {
+ return this.view.render(state)
+ }
+}
diff --git a/packages/@uppy/zoom/types/index.d.ts b/packages/@uppy/zoom/types/index.d.ts
new file mode 100644
index 000000000..cd500060f
--- /dev/null
+++ b/packages/@uppy/zoom/types/index.d.ts
@@ -0,0 +1,17 @@
+import Uppy = require('@uppy/core')
+import CompanionClient = require('@uppy/companion-client')
+
+declare module Zoom {
+ interface ZoomOptions
+ extends Uppy.PluginOptions,
+ CompanionClient.PublicProviderOptions {
+ replaceTargetContent?: boolean
+ target?: Uppy.PluginTarget
+ title?: string
+ storage?: CompanionClient.TokenStorage
+ }
+}
+
+declare class Zoom extends Uppy.Plugin {}
+
+export = Zoom
diff --git a/packages/@uppy/zoom/types/index.test-d.ts b/packages/@uppy/zoom/types/index.test-d.ts
new file mode 100644
index 000000000..009d20d96
--- /dev/null
+++ b/packages/@uppy/zoom/types/index.test-d.ts
@@ -0,0 +1,2 @@
+import Zoom = require('../')
+// TODO implement
diff --git a/packages/uppy/package.json b/packages/uppy/package.json
index 14ef1064a..fadca972f 100644
--- a/packages/uppy/package.json
+++ b/packages/uppy/package.json
@@ -1,7 +1,7 @@
{
"name": "uppy",
"description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:",
- "version": "1.19.0",
+ "version": "1.19.1",
"license": "MIT",
"main": "index.js",
"module": "index.mjs",
diff --git a/packages/uppy/types/index.test-d.ts b/packages/uppy/types/index.test-d.ts
index f814115e0..48bf0606e 100644
--- a/packages/uppy/types/index.test-d.ts
+++ b/packages/uppy/types/index.test-d.ts
@@ -21,6 +21,7 @@ import * as Uppy from '../';
.use(Uppy.Instagram, { target: Uppy.Dashboard, companionUrl: 'https://companion.uppy.io' })
.use(Uppy.Webcam, { target: Uppy.Dashboard })
.use(Uppy.ScreenCapture, { target: Uppy.Dashboard })
+ .use(Uppy.Zoom, { target: Uppy.Dashboard })
.use(Uppy.Tus, { endpoint: 'https://master.tus.io/files/' })
.on('complete', (result) => {
console.log('Upload result:', result);
diff --git a/test/endtoend/providers/provider.zoom.test.js b/test/endtoend/providers/provider.zoom.test.js
new file mode 100644
index 000000000..831315ba7
--- /dev/null
+++ b/test/endtoend/providers/provider.zoom.test.js
@@ -0,0 +1,69 @@
+/* global browser */
+
+/*
+ WARNING! PLEASE READ THIS BEFORE ENABLING THIS TEST ON TRAVIS.
+
+ Before enabling this test on travis, please keep in mind that with this "no_ssl_bump_domains" option set
+ here https://github.com/transloadit/uppy/blob/998c7b1805acb8d305a562dd9726ebae98575e07/.travis.yml#L33
+ SSL encryption may not be enabled between the running companion and the testing browser client.
+
+ Hence, provider tokens (Google, Instagram, Zoom) may be at risk of getting hijacked.
+*/
+const { finishUploadTest, startUploadTest, uploadWithRetry } = require('./helper')
+const testURL = 'http://localhost:4567/providers'
+
+describe('File upload with Zoom Provider', () => {
+ beforeEach(async () => {
+ await browser.url(testURL)
+ })
+
+ // not using arrow functions as cb so to keep mocha in the 'this' context
+ it('should upload a file completely with Zoom', async function () {
+ if (!process.env.UPPY_GOOGLE_EMAIL) {
+ console.log('skipping Zoom integration test')
+ return this.skip()
+ }
+
+ // ensure session is cleared
+ await startUploadTest(browser, 'Zoom', /zoom/)
+ await signIntoGoogle(browser)
+ await finishUploadTest(browser)
+ })
+
+ // not using arrow functions as cb so to keep mocha in the 'this' context
+ it('should resume uploads when retry is triggered with Zoom', async function () {
+ if (!process.env.UPPY_GOOGLE_EMAIL) {
+ console.log('skipping Zoom integration test')
+ return this.skip()
+ }
+
+ await uploadWithRetry(browser, 'Zoom', testURL)
+ })
+})
+
+const signIntoGoogle = async (browser) => {
+ const emailInput = await browser.$('#identifierId')
+ await emailInput.waitForExist(30000)
+ await emailInput.setValue(process.env.UPPY_GOOGLE_EMAIL)
+ let nextButton = await browser.$('#identifierNext')
+ await nextButton.click()
+
+ const passwordInput = await browser.$('input[name=password]')
+ await passwordInput.waitForDisplayed(30000)
+ await passwordInput.setValue(process.env.UPPY_GOOGLE_PASSWORD)
+ nextButton = await browser.$('#passwordNext')
+ await nextButton.click()
+ await browser.pause(3000)
+
+ const emailListItem = await browser.$(`li div[data-identifier="${process.env.UPPY_GOOGLE_EMAIL}"]`)
+ if (await emailListItem.isExisting()) {
+ // if user is already signed in, just select user
+ await emailListItem.click()
+ }
+
+ const allowZoomButton = await browser.$('#submit_approve_access')
+ if (await allowZoomButton.isExisting()) {
+ // if Zoom has never been allowed, allow it
+ await allowZoomButton.click()
+ }
+}
diff --git a/website/src/docs/companion.md b/website/src/docs/companion.md
index ac12ba8a8..c3a7328b5 100644
--- a/website/src/docs/companion.md
+++ b/website/src/docs/companion.md
@@ -190,6 +190,12 @@ export COMPANION_ONEDRIVE_SECRET="YOUR ONEDRIVE SECRET"
# specifying a secret file will override a directly set secret
export COMPANION_ONEDRIVE_SECRET_FILE="PATH/TO/ONEDRIVE/SECRET/FILE"
+# to enable Zoom
+export COMPANION_ZOOM_KEY="YOUR ZOOM KEY"
+export COMPANION_ZOOM_SECRET="YOUR ZOOM SECRET"
+# specifying a secret file will override a directly set secret
+export COMPANION_ZOOM_SECRET_FILE="PATH/TO/ZOOM/SECRET/FILE"
+
# to enable S3
export COMPANION_AWS_KEY="YOUR AWS KEY"
export COMPANION_AWS_SECRET="YOUR AWS SECRET"
diff --git a/website/src/docs/index.md b/website/src/docs/index.md
index d8997c2bc..4babaf11a 100644
--- a/website/src/docs/index.md
+++ b/website/src/docs/index.md
@@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w
Uppy
-
+
-
+
+
```
2\. Add CSS to ``:
``` html
-
+
```
3\. Initialize at the bottom of the closing `` tag:
@@ -169,5 +169,5 @@ const Uppy = require('@uppy/core')
If you're using Uppy from CDN, `es6-promise` and `whatwg-fetch` are already included in the bundle, no need to include anything additionally:
```html
-
+
```
diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md
index 8bd7236a6..f176bb0f5 100644
--- a/website/src/docs/locales.md
+++ b/website/src/docs/locales.md
@@ -33,8 +33,8 @@ const uppy = new Uppy({
Add a `
-
+
+
+
+
+
+
```
diff --git a/website/src/examples/dashboard/app.es6 b/website/src/examples/dashboard/app.es6
index e2ed49518..9395fe676 100644
--- a/website/src/examples/dashboard/app.es6
+++ b/website/src/examples/dashboard/app.es6
@@ -172,7 +172,7 @@ function loadLocaleFromCDN (localeName) {
var head = document.getElementsByTagName('head')[0]
var js = document.createElement('script')
js.type = 'text/javascript'
- js.src = `https://transloadit.edgly.net/releases/uppy/locales/v1.16.1/${localeName}.min.js`
+ js.src = `https://transloadit.edgly.net/releases/uppy/locales/v1.16.2/${localeName}.min.js`
head.appendChild(js)
}
diff --git a/website/src/examples/dragdrop/app.es6 b/website/src/examples/dragdrop/app.es6
index 1890158ec..dd57754fb 100644
--- a/website/src/examples/dragdrop/app.es6
+++ b/website/src/examples/dragdrop/app.es6
@@ -11,8 +11,14 @@ const onUploadSuccess = (elForUploadedFiles) =>
const url = response.uploadURL
const fileName = file.name
- document.querySelector(elForUploadedFiles).innerHTML +=
- `${fileName}`
+ const li = document.createElement('li')
+ const a = document.createElement('a')
+ a.href = url
+ a.target = '_blank'
+ a.appendChild(document.createTextNode(fileName))
+ li.appendChild(a)
+
+ document.querySelector(elForUploadedFiles).appendChild(li)
}
const uppyOne = new Uppy({ debug: true, autoProceed: true })
diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html
index 767d151b8..516f3967e 100644
--- a/website/src/examples/i18n/app.html
+++ b/website/src/examples/i18n/app.html
@@ -1,7 +1,7 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
+//
const robodog = require('@uppy/robodog')
const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0'
diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html
index 93b97caac..aa5a95263 100644
--- a/website/src/examples/markdown-snippets/app.html
+++ b/website/src/examples/markdown-snippets/app.html
@@ -1,6 +1,6 @@
+ -->