Bläddra i källkod

Merge remote-tracking branch 'upstream/master' into design-facelift

Alexander Zaytsev 6 år sedan
förälder
incheckning
ecf18c4d9f

+ 6 - 4
CHANGELOG.md

@@ -19,11 +19,9 @@ last Friday of every new month.
 Ideas that will be planned and find their way into a release at one point.
 PRs are welcome! Please do open an issue to discuss first if it's a big feature, priorities may have changed after something was added here.
 
-- [ ] core: Decouple rendering from the Plugin base class?
 - [ ] core: Make sure Uppy works well in VR
 - [ ] test: Human should check http://www.webpagetest.org and https://developers.google.com/web/tools/lighthouse/, use it sometimes to test website and Uppy. Will show response/loading times and other issues
 - [ ] test: Human should test with real screen reader to identify accessibility problems
-- [ ] test: setup an HTML page with all sorts of crazy styles, resets & bootstrap to see what brakes Uppy (@arturi)
 - [ ] dependencies: es6-promise --> lie https://github.com/calvinmetcalf/lie ?
 - [ ] core: accessibility research: https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb, http://khan.github.io/tota11y/
 - [ ] core: consider adding presets, see https://github.com/cssinjs/jss-preset-default/blob/master/src/index.js (@arturi)
@@ -89,6 +87,11 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature,
 - [ ] dragdrop: allow customizing arrow icon https://github.com/transloadit/uppy/pull/374#issuecomment-334116208 (@arturi)
 - [ ] show thumbnails when connecting with Google Drive #1162 (@ifedapoolarewaju)
 
+## 1.1
+
+- [ ] dashboard: optional alert `onbeforeunload` while upload is in progress, safeguarding from accidentaly navigating away from a page with an ongoing upload
+- [ ] dashboard: Bring back "Drop Here" screen for dragged URLs without introducing flickering (tricky! see PR #1400)
+
 ## 1.0 Goals
 
 What we need to do to release Uppy 1.0
@@ -106,8 +109,7 @@ What we need to do to release Uppy 1.0
 - [ ] website: design polish
 - [ ] companion: rename `serverUrl` and `serverPattern` to `companionUrl` and `companionAllowedHosts` (@ifedapoolarewaju)
 - [ ] transloadit: add error reporting, see https://github.com/transloadit/jquery-sdk/blob/891e99b08dd8142d8d8adc0553e6511967635ad7/js/lib/Modal.js#L122-L136 (@goto-bus-stop, @arturi)
-- [ ] transloadit: should adhere cancel event and abort assembly (@arturi, @goto-bus-stop)
-- [ ] dashboard: optional alert `onbeforeunload` while upload is in progress, safeguarding from accidentaly navigating away from a page with an ongoing upload
+- [ ] transloadit: should adhere cancel event and abort assembly (@goto-bus-stop)
 - [x] chore: remove the not-working npm scripts (@kvz, @arturi)
 - [x] build: (BREAKING) `npm run dev` no longer starts Companion by default, use `npm run dev:with-companion` for that (@arturi)
 - [x] core: uppy should not crash or be slow for many files. Specifically: be able to drop 5 files (or 7mb) without the upload button to take 2 seconds to appear

+ 1 - 1
packages/@uppy/companion/package-lock.json

@@ -1,6 +1,6 @@
 {
 	"name": "@uppy/companion",
-	"version": "0.17.3",
+	"version": "0.17.4",
 	"lockfileVersion": 1,
 	"requires": true,
 	"dependencies": {

+ 1 - 1
packages/@uppy/companion/package.json

@@ -55,7 +55,7 @@
     "redis": "2.8.0",
     "request": "2.85.0",
     "serialize-error": "^2.1.0",
-    "tus-js-client": "github:ifedapoolarewaju/tus-js-client#888bcf73b66698a165f086f7bbe61951597f5c1b",
+    "tus-js-client": "github:ifedapoolarewaju/tus-js-client#849dee9b5eb01b895b39b5643df2e3e205b15e03",
     "uuid": "2.0.2",
     "validator": "^9.0.0",
     "ws": "1.1.5"

+ 1 - 0
packages/@uppy/core/src/index.js

@@ -454,6 +454,7 @@ class Uppy {
     try {
       this._checkRestrictions(newFile)
     } catch (err) {
+      this.emit('restriction-failed', newFile, err)
       onError(err)
     }
 

+ 24 - 0
packages/@uppy/core/src/index.test.js

@@ -1,5 +1,6 @@
 const fs = require('fs')
 const path = require('path')
+const prettyBytes = require('prettier-bytes')
 const Core = require('./index')
 const Plugin = require('./Plugin')
 const AcquirerPlugin1 = require('../../../../test/mocks/acquirerPlugin1')
@@ -1270,6 +1271,29 @@ describe('src/Core', () => {
         expect(core.getState().info.message).toEqual('This file exceeds maximum allowed size of 1.2 KB')
       }
     })
+
+    it('should emit `restriction-failed` event when some rule is violated', () => {
+      const maxFileSize = 100
+      const core = new Core({
+        restrictions: {
+          maxFileSize
+        }
+      })
+      const restrictionsViolatedEventMock = jest.fn()
+      const file = {
+        name: 'test.jpg',
+        data: new Blob([Buffer.alloc(2 * maxFileSize)])
+      }
+      const errorMessage = `${core.i18n('exceedsSize')} ${prettyBytes(maxFileSize)}`
+      try {
+        core.on('restriction-failed', restrictionsViolatedEventMock)
+        core.addFile(file)
+      } catch (err) {}
+
+      expect(restrictionsViolatedEventMock.mock.calls.length).toEqual(1)
+      expect(restrictionsViolatedEventMock.mock.calls[0][0].name).toEqual(file.name)
+      expect(restrictionsViolatedEventMock.mock.calls[0][1].message).toEqual(errorMessage)
+    })
   })
 
   describe('actions', () => {

+ 4 - 4
packages/@uppy/dashboard/src/components/icons.js

@@ -54,19 +54,19 @@ function checkIcon () {
 
 function iconAudio () {
   return <svg aria-hidden="true" class="UppyIcon" width="55" height="55" viewBox="0 0 55 55">
-    <path d="M52.66.25c-.216-.19-.5-.276-.79-.242l-31 4.01a1 1 0 0 0-.87.992V40.622C18.174 38.428 15.273 37 12 37c-5.514 0-10 4.037-10 9s4.486 9 10 9 10-4.037 10-9c0-.232-.02-.46-.04-.687.014-.065.04-.124.04-.192V16.12l29-3.753v18.257C49.174 28.428 46.273 27 43 27c-5.514 0-10 4.037-10 9s4.486 9 10 9c5.464 0 9.913-3.966 9.993-8.867 0-.013.007-.024.007-.037V1a.998.998 0 0 0-.34-.75zM12 53c-4.41 0-8-3.14-8-7s3.59-7 8-7 8 3.14 8 7-3.59 7-8 7zm31-10c-4.41 0-8-3.14-8-7s3.59-7 8-7 8 3.14 8 7-3.59 7-8 7zM22 14.1V5.89l29-3.753v8.21l-29 3.754z" />
+    <path fill="#1abc9c" d="M52.66.25c-.216-.19-.5-.276-.79-.242l-31 4.01a1 1 0 0 0-.87.992V40.622C18.174 38.428 15.273 37 12 37c-5.514 0-10 4.037-10 9s4.486 9 10 9 10-4.037 10-9c0-.232-.02-.46-.04-.687.014-.065.04-.124.04-.192V16.12l29-3.753v18.257C49.174 28.428 46.273 27 43 27c-5.514 0-10 4.037-10 9s4.486 9 10 9c5.464 0 9.913-3.966 9.993-8.867 0-.013.007-.024.007-.037V1a.998.998 0 0 0-.34-.75zM12 53c-4.41 0-8-3.14-8-7s3.59-7 8-7 8 3.14 8 7-3.59 7-8 7zm31-10c-4.41 0-8-3.14-8-7s3.59-7 8-7 8 3.14 8 7-3.59 7-8 7zM22 14.1V5.89l29-3.753v8.21l-29 3.754z" />
   </svg>
 }
 
 function iconVideo () {
   return <svg aria-hidden="true" class="UppyIcon" viewBox="0 0 58 58">
-    <path d="M36.537 28.156l-11-7a1.005 1.005 0 0 0-1.02-.033C24.2 21.3 24 21.635 24 22v14a1 1 0 0 0 1.537.844l11-7a1.002 1.002 0 0 0 0-1.688zM26 34.18V23.82L34.137 29 26 34.18z" /><path d="M57 6H1a1 1 0 0 0-1 1v44a1 1 0 0 0 1 1h56a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM10 28H2v-9h8v9zm-8 2h8v9H2v-9zm10 10V8h34v42H12V40zm44-12h-8v-9h8v9zm-8 2h8v9h-8v-9zm8-22v9h-8V8h8zM2 8h8v9H2V8zm0 42v-9h8v9H2zm54 0h-8v-9h8v9z" />
+    <path fill="#2980b9" d="M36.537 28.156l-11-7a1.005 1.005 0 0 0-1.02-.033C24.2 21.3 24 21.635 24 22v14a1 1 0 0 0 1.537.844l11-7a1.002 1.002 0 0 0 0-1.688zM26 34.18V23.82L34.137 29 26 34.18z" /><path d="M57 6H1a1 1 0 0 0-1 1v44a1 1 0 0 0 1 1h56a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM10 28H2v-9h8v9zm-8 2h8v9H2v-9zm10 10V8h34v42H12V40zm44-12h-8v-9h8v9zm-8 2h8v9h-8v-9zm8-22v9h-8V8h8zM2 8h8v9H2V8zm0 42v-9h8v9H2zm54 0h-8v-9h8v9z" />
   </svg>
 }
 
 function iconPDF () {
   return <svg aria-hidden="true" class="UppyIcon" viewBox="0 0 342 335">
-    <path d="M329.337 227.84c-2.1 1.3-8.1 2.1-11.9 2.1-12.4 0-27.6-5.7-49.1-14.9 8.3-.6 15.8-.9 22.6-.9 12.4 0 16 0 28.2 3.1 12.1 3 12.2 9.3 10.2 10.6zm-215.1 1.9c4.8-8.4 9.7-17.3 14.7-26.8 12.2-23.1 20-41.3 25.7-56.2 11.5 20.9 25.8 38.6 42.5 52.8 2.1 1.8 4.3 3.5 6.7 5.3-34.1 6.8-63.6 15-89.6 24.9zm39.8-218.9c6.8 0 10.7 17.06 11 33.16.3 16-3.4 27.2-8.1 35.6-3.9-12.4-5.7-31.8-5.7-44.5 0 0-.3-24.26 2.8-24.26zm-133.4 307.2c3.9-10.5 19.1-31.3 41.6-49.8 1.4-1.1 4.9-4.4 8.1-7.4-23.5 37.6-39.3 52.5-49.7 57.2zm315.2-112.3c-6.8-6.7-22-10.2-45-10.5-15.6-.2-34.3 1.2-54.1 3.9-8.8-5.1-17.9-10.6-25.1-17.3-19.2-18-35.2-42.9-45.2-70.3.6-2.6 1.2-4.8 1.7-7.1 0 0 10.8-61.5 7.9-82.3-.4-2.9-.6-3.7-1.4-5.9l-.9-2.5c-2.9-6.76-8.7-13.96-17.8-13.57l-5.3-.17h-.1c-10.1 0-18.4 5.17-20.5 12.84-6.6 24.3.2 60.5 12.5 107.4l-3.2 7.7c-8.8 21.4-19.8 43-29.5 62l-1.3 2.5c-10.2 20-19.5 37-27.9 51.4l-8.7 4.6c-.6.4-15.5 8.2-19 10.3-29.6 17.7-49.28 37.8-52.54 53.8-1.04 5-.26 11.5 5.01 14.6l8.4 4.2c3.63 1.8 7.53 2.7 11.43 2.7 21.1 0 45.6-26.2 79.3-85.1 39-12.7 83.4-23.3 122.3-29.1 29.6 16.7 66 28.3 89 28.3 4.1 0 7.6-.4 10.5-1.2 4.4-1.1 8.1-3.6 10.4-7.1 4.4-6.7 5.4-15.9 4.1-25.4-.3-2.8-2.6-6.3-5-8.7z" />
+    <path fill="#e74c3c" d="M329.337 227.84c-2.1 1.3-8.1 2.1-11.9 2.1-12.4 0-27.6-5.7-49.1-14.9 8.3-.6 15.8-.9 22.6-.9 12.4 0 16 0 28.2 3.1 12.1 3 12.2 9.3 10.2 10.6zm-215.1 1.9c4.8-8.4 9.7-17.3 14.7-26.8 12.2-23.1 20-41.3 25.7-56.2 11.5 20.9 25.8 38.6 42.5 52.8 2.1 1.8 4.3 3.5 6.7 5.3-34.1 6.8-63.6 15-89.6 24.9zm39.8-218.9c6.8 0 10.7 17.06 11 33.16.3 16-3.4 27.2-8.1 35.6-3.9-12.4-5.7-31.8-5.7-44.5 0 0-.3-24.26 2.8-24.26zm-133.4 307.2c3.9-10.5 19.1-31.3 41.6-49.8 1.4-1.1 4.9-4.4 8.1-7.4-23.5 37.6-39.3 52.5-49.7 57.2zm315.2-112.3c-6.8-6.7-22-10.2-45-10.5-15.6-.2-34.3 1.2-54.1 3.9-8.8-5.1-17.9-10.6-25.1-17.3-19.2-18-35.2-42.9-45.2-70.3.6-2.6 1.2-4.8 1.7-7.1 0 0 10.8-61.5 7.9-82.3-.4-2.9-.6-3.7-1.4-5.9l-.9-2.5c-2.9-6.76-8.7-13.96-17.8-13.57l-5.3-.17h-.1c-10.1 0-18.4 5.17-20.5 12.84-6.6 24.3.2 60.5 12.5 107.4l-3.2 7.7c-8.8 21.4-19.8 43-29.5 62l-1.3 2.5c-10.2 20-19.5 37-27.9 51.4l-8.7 4.6c-.6.4-15.5 8.2-19 10.3-29.6 17.7-49.28 37.8-52.54 53.8-1.04 5-.26 11.5 5.01 14.6l8.4 4.2c3.63 1.8 7.53 2.7 11.43 2.7 21.1 0 45.6-26.2 79.3-85.1 39-12.7 83.4-23.3 122.3-29.1 29.6 16.7 66 28.3 89 28.3 4.1 0 7.6-.4 10.5-1.2 4.4-1.1 8.1-3.6 10.4-7.1 4.4-6.7 5.4-15.9 4.1-25.4-.3-2.8-2.6-6.3-5-8.7z" />
   </svg>
 }
 
@@ -78,7 +78,7 @@ function iconFile () {
 
 function iconText () {
   return <svg aria-hidden="true" class="UppyIcon" width="62" height="62" viewBox="0 0 62 62">
-    <path d="M4.309 4.309h24.912v53.382h-6.525v3.559h16.608v-3.559h-6.525V4.309h24.912v10.676h3.559V.75H.75v14.235h3.559z" fill-rule="nonzero" fill="#000" />
+    <path d="M4.309 4.309h24.912v53.382h-6.525v3.559h16.608v-3.559h-6.525V4.309h24.912v10.676h3.559V.75H.75v14.235h3.559z" fill-rule="nonzero" fill="#cbcbcb" />
   </svg>
 }
 

+ 1 - 1
packages/@uppy/tus/package.json

@@ -24,7 +24,7 @@
   "dependencies": {
     "@uppy/companion-client": "0.28.4",
     "@uppy/utils": "0.30.4",
-    "tus-js-client": "1.6.0"
+    "tus-js-client": "github:ifedapoolarewaju/tus-js-client#849dee9b5eb01b895b39b5643df2e3e205b15e03"
   },
   "devDependencies": {
     "@uppy/core": "0.30.4"

BIN
rockdog.png


+ 1 - 1
website/src/_posts/2019-04-liftoff-10.md

@@ -37,4 +37,4 @@ While not strictly related to our Uppy 1.0 release, we have managed to reach ove
 
 <center><img src="/images/blog/30daystoliftoff/2019-04-04.png"><br /></center>
  
-On that note, Day 10 of our thirty-day challenge comes to an end. Friday looks like it will be another exciting day, so don't hesitate to keep checking up on us via [Twitter](https://twitter.com/uppy_io) or [RSS]((https://uppy.io/atom.xml)!
+On that note, Day 10 of our thirty-day challenge comes to an end. Friday looks like it will be another exciting day, so don't hesitate to keep checking up on us via [Twitter](https://twitter.com/uppy_io) or [RSS](https://uppy.io/atom.xml)!

+ 1 - 1
website/src/_posts/2019-04-liftoff-11.md

@@ -44,5 +44,5 @@ And another week bites the dust! With the weekend right around the corner, we're
 - [Kevin](https://github.com/kvz) finished up his work on the [new documentation menu structure](https://github.com/transloadit/uppy/pull/1405) that we talked about [yesterday](/blog/2019/04/liftoff-10/). 
 
 
-That’s it. All the updates I have for you today. Have a great weekend everyone! And if you don’t want to miss a post, keep tabs on our [Twitter](https://twitter.com/uppy_io) or [RSS]((https://uppy.io/atom.xml) feed.
+That’s it. All the updates I have for you today. Have a great [weekend](/blog/2019/04/liftoff-12/) everyone! And if you don’t want to miss a post, keep tabs on our [Twitter](https://twitter.com/uppy_io) or [RSS](https://uppy.io/atom.xml) feed.
 

+ 1 - 1
website/src/_posts/2019-04-liftoff-12.md

@@ -13,4 +13,4 @@ Hey guys! How is your Saturday treating you so far? We are focusing today on mee
 
 <center><img width="400" src="https://media.giphy.com/media/k2Da0Uzaxo9xe/giphy.gif"><br/><br/></center>
 
-We won't have much in terms of real news to share over the weekend, but we'll be back in full force on Monday! In the meantime, we hope you have a great day! And see you tomorrow for another weekend update in our 30 Days to Liftoff!
+We won't have much in terms of real news to share over the weekend, but we'll be back in full force on [Monday](/blog/2019/04/liftoff-14/)! In the meantime, we hope you have a great day! And see you tomorrow for another weekend update in our 30 Days to Liftoff!

+ 1 - 1
website/src/_posts/2019-04-liftoff-13.md

@@ -13,5 +13,5 @@ Shh, it's Sunday, Uppy is sleeping in today :sleeping: We'll be taking the day o
 
 <center><img width="400"  src="https://media.giphy.com/media/26n6UOQke3xCpsbWo/giphy.gif"><br/><br/></center>
 
-We hope this drowsy puppy inspires you to have a great and relaxing remainder of your weekend. We'll have a lot more to share with you tomorrow, so see you on Day 14 of our 30 Days to Liftoff!
+We hope this drowsy puppy inspires you to have a great and relaxing remainder of your weekend. We'll have a lot more to share with you tomorrow, so see you on [Day 14](/blog/2019/04/liftoff-14/) of our 30 Days to Liftoff!
 

+ 42 - 0
website/src/_posts/2019-04-liftoff-14.md

@@ -0,0 +1,42 @@
+---
+title: "Day 14"
+date: 2019-04-08
+author: kvz
+image: "https://uppy.io/images/blog/30daystoliftoff/day14.jpg"
+series: 30 Days to Liftoff
+seriesSuffix: 'of 30'
+---
+
+Today marks the fourteenth day in our '30 Days to Liftoff' blog post challenge, working our way towards **launching Uppy 1.0 on April 25**. It's the beginning of a new week and there is much to be done. The Uppy team is already firing on all cylinders and we also have some developments to share from before the weekend.
+
+<!--more-->
+
+Let's jump right in!
+
+<center><br /><img width="400" src="/images/blog/30daystoliftoff/day14.jpg"><br /></center>
+
+## Done
+
+- [Renée](https://github.com/goto-bus-stop) finished work on [canceling Transloadit Assemblies](https://github.com/transloadit/uppy/pull/1431) when you abort uploads.
+
+- [Artur](https://github.com/arturi) published the [CHANGELOG for 0.30.4](https://github.com/transloadit/uppy/commit/845369f0e56b49ab51d4d01909dfdac6f60b1748), which was a bit more work to figure out now that the whole Transloadit team is piling commits onto `master` :scream: We also completed a few smaller tasks, such as fixing an issue with our build scripts and updating the Companion docs.
+
+## Done for React Native
+
+This is a pretty big one! [Ife](https://github.com/ifedapoolarewaju) and Artur delivered on the bare essentials for React Native. In our local tests, this means we can now successfully pick different files, have their uploads resume where they left off, select a remote file via Companion (for now, only picking from URL is supported) and see the progress reported by it. 
+
+There is a basic UI, most of which is encapsulated in the example that we'll publish on our website. We're refraining from building too much UI in our React Native module, as we assume that developers will want to have full control and style everything close to their app. We figured they would care most about seeing a good example and having access to core functionality, such as making mobile uploads more reliable and less draining on batteries and data plans. 
+
+While there are still things to be implemented, such as picking files from Instagram, we now know that we have all the Lego bricks required and that they are doing what they're supposed to. Now, it's just a matter of fleshing out those integrations, but we'll have to see whether we can get to that before 1.0. We're already happy about having a fixed idea about the API and a basic working example as our deliverables!
+
+## In Progress
+
+- [Alex](https://github.com/nqst) is working on improving the Uppy design (in the code) in his [`design-facelift` branch](https://github.com/transloadit/uppy/compare/master...nqst:design-facelift).
+
+- [Evgenia](https://github.com/lakesare) is working on improving accessibility together with Alex, who found many issues that we still need to fix in this area.
+
+- Now that the bare essentials of React Native work, Ife is making sure our local work finds a proper place in the tus-js-client (such as React-Native-compatible fingerprinting) while Artur hopes to find the time to tick off a few design goals to make for a better experience testdriving our example. Things like icons for files that are not images and a _Close_ button for the select file screen.
+
+- The whole team will again do a call this afternoon to reassess our roadmap and see where all we stand. Some new tasks were added on [Friday](/blog/2019/04/liftoff-11/), so we'll also have to see about getting those into gear.
+
+That's it for Day 14. Tomorrow, it will be Samuel's turn again to update you on our board and progress. Subscribe via [Twitter](https://twitter.com/uppy_io) or [RSS](https://uppy.io/atom.xml) and don't miss out on [Day 15](/blog/2019/04/liftoff-15/)! :dog:

+ 45 - 0
website/src/_posts/2019-04-liftoff-15.md

@@ -0,0 +1,45 @@
+---
+title: "Day 15"
+date: 2019-04-09
+author: samuel
+image: "https://uppy.io/images/blog/30daystoliftoff/rockdog.jpg"
+series: 30 Days to Liftoff
+seriesSuffix: 'of 30'
+---
+
+:musical_note: Woah, we're halfway there! Take our paw, we'll make it we swear! :notes: That's fifteen down and fifteen more to go. Great to have you along for the ride as we move ever closer towards **launching Uppy 1.0 on April 25**. 
+
+Let's see what is Uppy today!
+
+<center><br /><img width="400" src="/images/blog/30daystoliftoff/rockdog.jpg"><br /></center>
+
+<!--more-->
+
+## Weekly project board update
+
+We had our weekly call yesterday, during which we re-evaluated the Uppy 1.0 project board. We were able to move a few tasks to the _Done_ lane and got some new tasks _In Progress_. One of the features we're ready to start working on - which I am particularly interested in - is language pack support. Uppy 1.0 might be coming out in your local language! While we only have the capacity within our team to take care of a select few languages (English, French, Russian, Ukrainian, German, and Dutch) we will support as many as possible and hope that the community will add many more. 
+
+Here is a view of what our Asana board looks like this week:
+
+<center><br /><img src="/images/blog/30daystoliftoff/2019-04-09-asana-board.png"><br /></center>
+
+
+## Done
+
+- [Evgenia](https://github.com/lakesare) investigated an [issue](https://github.com/transloadit/uppy/pull/1400#issuecomment-481039845) concerning a bug in Webkit browsers that resulted in the window blinking frequently.
+
+- [Samuel](https://github.com/samuelayo) added another [example](https://github.com/transloadit/uppy/pull/1389) for using Uppy with XHR uploads to a PHP backend.
+
+
+## In Progress
+
+- [Renée](https://github.com/goto-bus-stop) is working on the Robodog Dashboard, so that it can also be depicted right inside the webpage, instead of showing as a modal popup window.
+
+- Evgenia is focused on improving accessibility together with [Alex](https://github.com/nqst), who found many issues that we still need to fix in this area.
+
+- [Artur](https://github.com/arturi) is currently working on a React Native example UI. We will update you once it is ready! 
+
+- Alex is also still actively working on making design improvements for Uppy. You can follow his progress [here](https://github.com/nqst/uppy/commits/design-facelift).
+
+
+And that's Day 15! Tyler will be here again [tomorrow](/blog/2019/04/liftoff-16/) to give you more updates on our launch preparations. Subscribe via [Twitter](https://twitter.com/uppy_io) or [RSS](https://uppy.io/atom.xml), so you'll never miss out!

+ 39 - 0
website/src/_posts/2019-04-liftoff-16.md

@@ -0,0 +1,39 @@
+---
+title: "Day 16"
+date: 2019-04-10
+author: tyler
+image: "https://uppy.io/images/blog/30daystoliftoff/day16.gif"
+series: 30 Days to Liftoff
+seriesSuffix: 'of 30'
+---
+
+Two weeks left in our '30 Days to Liftoff'! We're starting to home in on **Uppy 1.0's release on April 25**. Being in the middle of the week gives us a great opportunity to see how hard the team is working. Let's take a look at the new features, bug fixes and milestones that have been completed! :dog:
+
+<center><br /><img width="400" src="/images/blog/30daystoliftoff/day16.gif"><br /><br /></center>
+
+Reminder: you can keep up with our [CHANGELOG](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md) to see everything else we intend to complete for the official Uppy 1.0 release.
+
+<!--more-->
+
+## Done
+
+- [Evgenia](https://github.com/lakesare) continues working on the [peculiar flickering issue](https://github.com/transloadit/uppy/pull/1400#issuecomment-481039845) in our Dashboard example. While it was tricky at first, a (temporary) hotfix has now been applied. A more in-depth update is coming after 1.0 :smile:
+
+- The [first contribution](https://github.com/transloadit/uppy/pull/1436) in our sprint coming from outside the Uppy team was added by [Zeqiu](https://github.com/allenfantasy). It concerns events being fired when an uploaded file fails a restriction check. With this feature, it will be a lot easier to know which file has been restricted from upload and why. 
+
+- And the [second outside contribution](https://github.com/transloadit/uppy/pull/1429) comes from [Andreas](https://github.com/ap--), who fixed an issue involving the use of both tus and the limit parameter to set a maximum number of parallel uploads. 
+
+Big shout out to both!
+
+## In Progress
+
+- The React Native team has their pairing session at 14:00 today, during which they will work on [React Native support](https://github.com/transloadit/uppy/pull/988) for Uppy, [tus-js-client](https://github.com/tus/tus-js-client) and [Companion](https://github.com/transloadit/uppy/tree/master/packages/@uppy/companion).
+    - [Artur](https://github.com/arturi) will be working on tweaking the React Native UI and dealing with file preview icons for non-image files. He has also been working on refactoring some of the code to make things much tidier.
+    - [Ife](https://github.com/ifedapoolarewaju) will be integrating fingerprinting and hash code support [into tus-js-client](https://github.com/tus/tus-js-client/pull/73).
+    - If the team has the time, they will also look into large file support, upload and download reporting for Companion XHR uploads, and an issue concerning XHR uploads with the [Transloadit API](https://transloadit.com/docs/api/).
+
+- [Alex](https://github.com/nqst) continues [improving Uppy's UI](https://github.com/transloadit/uppy/compare/master...nqst:design-facelift) and has recently been refactoring CSS code, while Evgenia keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open.
+
+In addition to getting Uppy 1.0 out of the dog house, I mentioned that the team is already talking about features and fixes to tackle after 1.0. If you look at our [CHANGELOG](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md), you'll notice some 1.1 todos in there. There's always room for improvement, so now you have something to look forward to after Uppy 1.0 hits the web! :wink:
+
+That's all from me today. Stay in the loop with us on [Twitter](https://twitter.com/uppy_io) or [RSS](https://uppy.io/atom.xml) for more Uppy updates. Day 17 is coming up next!

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
website/src/disc.html


+ 10 - 0
website/src/docs/uppy.md

@@ -642,3 +642,13 @@ Fired when “info” message should be hidden in the UI. See [`info-visible`](#
 ### `cancel-all`
 
 Fired when [`uppy.cancelAll()`]() is called, all uploads are canceled, files removed and progress is reset.
+
+### `restriction-failed`
+
+Fired when a file violates certain restrictions when added. This event is just providing another choice for those who want to customize the behavior of file upload restrictions.
+
+```javascript
+uppy.on('restriction-failed', (file, error) => {
+  // do some customized logic like showing system notice to users
+})
+```

+ 2 - 0
website/src/examples/markdown-snippets/app.es6

@@ -111,6 +111,7 @@ class MarkdownTextarea {
         template_id: TRANSLOADIT_EXAMPLE_TEMPLATE
       }
     }).then((result) => {
+      if (result === null) return
       this.insertAttachments(
         this.matchFilesAndThumbs(result.results)
       )
@@ -135,6 +136,7 @@ class MarkdownTextarea {
         'dropbox'
       ]
     }).then((result) => {
+      if (result === null) return
       this.insertAttachments(
         this.matchFilesAndThumbs(result.results)
       )

BIN
website/src/images/blog/30daystoliftoff/2019-04-09-asana-board.png


+ 0 - 0
website/src/images/blog/30daystoliftoff/33.jpg → website/src/images/blog/30daystoliftoff/day14.jpg


+ 0 - 0
website/src/images/blog/30daystoliftoff/07.jpg → website/src/images/blog/30daystoliftoff/day15.jpg


+ 0 - 0
website/src/images/blog/30daystoliftoff/32.gif → website/src/images/blog/30daystoliftoff/day16.gif


BIN
website/src/images/blog/30daystoliftoff/rockdog.jpg


+ 1 - 1
website/themes/uppy/layout/partials/frontpage-code-sample.html

@@ -15,7 +15,7 @@
     serverUrl<span class="token punctuation">:</span> <span class="token string">&apos;https://companion.uppy.io&apos;</span>
   <span class="token punctuation">}</span><span class="token punctuation">)</span>
   <span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>Tus<span class="token punctuation">,</span> <span class="token punctuation">{</span> endpoint<span class="token punctuation">:</span> <span class="token string">&apos;https://master.tus.io/files/&apos;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span>
-  <span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&apos;complete&apos;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
+  <span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">&apos;complete&apos;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">result</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
     console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">&apos;Upload result:&apos;</span><span class="token punctuation">,</span> result<span class="token punctuation">)</span>
   <span class="token punctuation">}</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure>
 <script>

Vissa filer visades inte eftersom för många filer har ändrats