Browse Source

Merge pull request #959 from transloadit/chore-docs-readme

Readme edits and docs improvements
Artur Paikin 6 years ago
parent
commit
65409a11ba

+ 59 - 31
README.md

@@ -60,7 +60,7 @@ const uppy = Uppy({ autoProceed: false })
 ## Installation
 
 ``` bash
-$ npm install uppy --save
+$ npm install @uppy/core @uppy/dashboard @uppy/tus
 ```
 
 We recommend installing from npm and then using a module bundler such as [Webpack](http://webpack.github.io/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/).
@@ -71,20 +71,14 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
 
 > ⚠️ The bundle currently consists of most Uppy plugins, so this method is not recommended for production, as your users will have to download all plugins when you are likely using just a few.
 
-1\. Add a script to the bottom of `<body>`:
-
-``` html
-<script src="https://transloadit.edgly.net/releases/uppy/v0.26.0/dist/uppy.min.js"></script>
-```
-
-2\. Add CSS to `<head>`:
-``` html
+```html
+<!-- 1. Add CSS to `<head>` -->
 <link href="https://transloadit.edgly.net/releases/uppy/v0.26.0/dist/uppy.min.css" rel="stylesheet">
-```
 
-3\. Initialize:
+<!-- 2. Add JS before the closing `</body>` -->
+<script src="https://transloadit.edgly.net/releases/uppy/v0.26.0/dist/uppy.min.js"></script>
 
-``` html
+<!-- 3. Initialize -->
 <div class="UppyDragDrop"></div>
 <script>
   var uppy = Uppy.Core()
@@ -97,28 +91,47 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
 
 - [Uppy](https://uppy.io/docs/uppy/) — full list of options, methods, and events.
 - [Plugins](https://uppy.io/docs/plugins/) — list of Uppy plugins and their options.
-- [Server](https://uppy.io/docs/server/) — setting up and running an Uppy Server instance, which adds support for Instagram, Dropbox, Google Drive and other remote sources.
+- [Server](https://uppy.io/docs/server/) — setting up and running an Uppy Server instance, which adds support for Instagram, Dropbox, Google Drive and remote urls.
 - [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins with React apps.
-- [Architecture & Making a Plugin](https://uppy.io/docs/writing-plugins/) — how to write a plugin for Uppy [documentation in progress].
+- [Architecture & Writing a Plugin](https://uppy.io/docs/writing-plugins/) — how to write a plugin for Uppy.
 
 ## Plugins
 
-- `Tus` — resumable uploads via the open [tus](http://tus.io) standard
-- `XHRUpload` — regular uploads for any backend out there (like Apache, Nginx)
-- `Transloadit` — support for [Transloadit](http://transloadit.com)’s robust file uploading and encoding backend
-- `AwsS3` — upload to AWS S3 (also works for Google Cloud)
-- `Dashboard` — universal UI with previews, progress bars, metadata editor and all the cool stuff
-- `DragDrop` — plain and simple drag and drop area
-- `FileInput` — even plainer “select files” button
-- `ProgressBar` — minimal progress bar that fills itself when upload progresses
-- `StatusBar` — more detailed progress, pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included by default with `Dashboard`)
-- `Informer` — send notifications like “smile” before taking a selfie or “upload failed” when all is lost (also included by default with `Dashboard`)
-- `GoldenRetriever` — restores files after a browser crash, like it’s nothing
-- `ThumbnailGenerator` — generates image previews (included by default with `Dashboard`)
-- `Form` — collects metadata from `<form>` right before an Uppy upload, then optionally appends results back to the form
-- `ReduxDevTools` — for your emerging [time traveling](https://github.com/gaearon/redux-devtools) needs
-- `GoogleDrive`, `Dropbox`, `Instagram`, `Url` — select files from [Google Drive](https://www.google.com/drive/), [Dropbox](https://www.dropbox.com/), [Instagram](https://www.instagram.com/) and direct urls from anywhere on the web. Note that[`uppy-server`](https://github.com/transloadit/uppy-server) is needed for these.
-- `Webcam` — snap and record those selfies 📷
+[List of plugins and their common options](https://uppy.io/docs/plugins/).
+
+### Local Sources
+
+- [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews, progress bars, metadata editor and all the cool stuff
+- [`Drag & Drop`](https://uppy.io/docs/drag-drop/) — plain and simple drag and drop area
+- [`File Input`](https://uppy.io/docs/file-input/) — even plainer “select files” button
+- [`Webcam`](https://uppy.io/docs/webcam/) — snap and record those selfies 📷
+
+### Remote Providers
+
+- [`Google Drive`](https://uppy.io/docs/google-drive/), [`Dropbox`](https://uppy.io/docs/dropbox/), [`Instagram`](https://uppy.io/docs/instagram/), [`Import From URL`](https://uppy.io/docs/url/) — support picking files from remote providers or direct URLs from anywhere on the web. Note that[`uppy-server`](https://github.com/transloadit/uppy-server) is needed for these.
+
+### Uploaders 
+
+- [`Tus`](https://uppy.io/docs/tus/) — resumable uploads via the open [tus](http://tus.io) standard
+- [`XHR Upload`](https://uppy.io/docs/xhr-upload/) — regular uploads for any backend out there (like Apache, Nginx)
+- [`AWS S3`](https://uppy.io/docs/aws-s3/) and [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — upload to AWS S3.
+
+### UI Elements
+
+- [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar that fills itself when upload progresses
+- [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress, pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included by default with `Dashboard`)
+- [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile” before taking a selfie or “upload failed” when all is lost (also included by default with `Dashboard`)
+
+### File Processing
+
+- [`Transloadit`](https://uppy.io/docs/transloadit/) — support for [Transloadit](http://transloadit.com)’s robust file uploading and encoding backend
+
+### Miscellaneous
+
+- [`Golden Retriever`](https://uppy.io/docs/golden-retriever/) — restores files after a browser crash, like it’s nothing
+- `Thumbnail Generator` — generates image previews (included by default with `Dashboard`)
+- [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right before an Uppy upload, then optionally appends results back to the form
+- [`Redux`](https://uppy.io/docs/redux/) — for your emerging [time traveling](https://github.com/gaearon/redux-devtools) needs
 
 ## Browser Support
 
@@ -128,6 +141,21 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
 
 We aim to support IE10+ and recent versions of Safari, Edge, Chrome, Firefox, and Opera.
 
+### Polyfills
+
+Uppy heavily uses Promises. If your target environment [does not support Promises](https://caniuse.com/#feat=promises), use a polyfill like `es6-promise` before initialising Uppy.
+
+When using remote providers like Google Drive or Dropbox, the Fetch API is used. If your target environment does not support the [Fetch API](https://caniuse.com/#feat=fetch), use a polyfill like `whatwg-fetch` before initialising Uppy. The Fetch API polyfill must be loaded _after_ the Promises polyfill, because Fetch uses Promises.
+
+```shell
+npm install es6-promise whatwg-fetch
+```
+```js
+require('es6-promise/auto')
+require('whatwg-fetch')
+const Uppy = require('@uppy/core')
+```
+
 ## FAQ
 
 ### Why not just use `<input type="file">`?
@@ -162,7 +190,7 @@ Yes, there is an S3 plugin, please check out the [docs](https://uppy.io/docs/aws
 
 ### Do I need to install special service/server for Uppy? Can I use it with Rails/Node/Go/PHP?
 
-Yes, whatever you want on the backend will work with `XHRUpload` plugin, since it just does a `POST` or `PUT` request. Here’s a [PHP backend example](https://uppy.io/docs/xhrupload/#Uploading-to-a-PHP-Server).
+Yes, whatever you want on the backend will work with `@uppy/xhr-upload` plugin, since it just does a `POST` or `PUT` request. Here’s a [PHP backend example](https://uppy.io/docs/xhr-upload/#Uploading-to-a-PHP-Server).
 
 If you want resumability with the Tus plugin, use [one of the tus server implementations](https://tus.io/implementations.html) 👌🏼
 

+ 0 - 842
website/src/docs/api.md

@@ -1,842 +0,0 @@
-\----
-type: docs
-order: 99
-
-## title: "Generated API"
-
-# Uppy Core & Plugins
-
-## Uppy
-
-[src/core/Core.js:16-795](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L16-L795 "Source code on GitHub")
-
-Main Uppy core
-
-**Parameters**
-
--   `opts` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** general options, like locales, to show modal or not to show
-
-### updateAll
-
-[src/core/Core.js:116-122](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L116-L122 "Source code on GitHub")
-
-Iterate on all plugins and run `update` on them. Called each time state changes
-
-**Parameters**
-
--   `state`  
-
-### setState
-
-[src/core/Core.js:129-135](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L129-L135 "Source code on GitHub")
-
-Updates state
-
-**Parameters**
-
--   `object` **newState** 
--   `stateUpdate`  
-
-### getState
-
-[src/core/Core.js:141-145](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L141-L145 "Source code on GitHub")
-
-Returns current state
-
-### getFile
-
-[src/core/Core.js:331-333](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L331-L333 "Source code on GitHub")
-
-Get a file object.
-
-**Parameters**
-
--   `fileID` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** The ID of the file object to return.
-
-### actions
-
-[src/core/Core.js:397-535](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L397-L535 "Source code on GitHub")
-
-Registers listeners for all global actions, like:
-`file-add`, `file-remove`, `upload-progress`, `reset`
-
-### use
-
-[src/core/Core.js:560-589](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L560-L589 "Source code on GitHub")
-
-Registers a plugin with Core
-
-**Parameters**
-
--   `Plugin` **Class** object
--   `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** object that will be passed to Plugin later
--   `opts`  
-
-Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** self for chaining
-
-### getPlugin
-
-[src/core/Core.js:596-606](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L596-L606 "Source code on GitHub")
-
-Find one Plugin by name
-
-**Parameters**
-
--   `string`  name description
--   `name`  
-
-### iteratePlugins
-
-[src/core/Core.js:613-617](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L613-L617 "Source code on GitHub")
-
-Iterate through all `use`d plugins
-
-**Parameters**
-
--   `function`  method description
--   `method`  
-
-### removePlugin
-
-[src/core/Core.js:624-635](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L624-L635 "Source code on GitHub")
-
-Uninstall and remove a plugin.
-
-**Parameters**
-
--   `instance` **[Plugin](#plugin)** The plugin instance to remove.
-
-### close
-
-[src/core/Core.js:640-650](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L640-L650 "Source code on GitHub")
-
-Uninstall all plugins and close down this Uppy instance.
-
-### info
-
-[src/core/Core.js:659-686](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L659-L686 "Source code on GitHub")
-
-Set info message in `state.info`, so that UI plugins like `Informer`
-can display the message
-
-**Parameters**
-
--   `msg` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Message to be displayed by the informer
--   `type`  
--   `duration`  
-
-### log
-
-[src/core/Core.js:703-720](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L703-L720 "Source code on GitHub")
-
-Logs stuff to console, only if `debug` is set to true. Silent in production.
-
-**Parameters**
-
--   `msg`  
--   `type`  
-
-Returns **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object))** to log
-
-### run
-
-[src/core/Core.js:734-748](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Core.js#L734-L748 "Source code on GitHub")
-
-Initializes actions, installs all plugins (by iterating on them and calling `install`), sets options
-
-## Plugin
-
-[src/plugins/Plugin.js:15-105](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Plugin.js#L15-L105 "Source code on GitHub")
-
-Boilerplate that all Plugins share - and should not be used
-directly. It also shows which methods final plugins should implement/override,
-this deciding on structure.
-
-**Parameters**
-
--   `main` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Uppy core object
--   `object` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** with plugin options
-
-Returns **([array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** files or success/fail message
-
-### mount
-
-[src/plugins/Plugin.js:49-90](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Plugin.js#L49-L90 "Source code on GitHub")
-
-Check if supplied `target` is a DOM element or an `object`.
-If it’s an object — target is a plugin, and we search `plugins`
-for a plugin with same name and return its target.
-
-**Parameters**
-
--   `target` **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object))** 
--   `plugin`  
-
-## Utils
-
-[src/plugins/Dashboard/index.js:14-431](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Dashboard/index.js#L14-L431 "Source code on GitHub")
-
-**Extends Plugin**
-
-Modal Dialog & Dashboard
-
-### constructor
-
-[src/generic-provider-views/index.js:43-74](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L43-L74 "Source code on GitHub")
-
-**Parameters**
-
--   `instance` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** of the plugin
--   `plugin`  
--   `opts`  
-
-### updateState
-
-[src/generic-provider-views/index.js:79-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L79-L84 "Source code on GitHub")
-
-Little shorthand to update the state with the plugin's state
-
-**Parameters**
-
--   `newState`  
-
-### updateState
-
-[src/plugins/Webcam/index.js:107-112](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Webcam/index.js#L107-L112 "Source code on GitHub")
-
-Little shorthand to update the state with my new state
-
-**Parameters**
-
--   `newState`  
-
-### getFolder
-
-[src/generic-provider-views/index.js:116-137](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L116-L137 "Source code on GitHub")
-
-Based on folder ID, fetch a new folder and update it to state
-
-**Parameters**
-
--   `id` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder id
--   `name`  
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Folders/files in folder
-
-### getNextFolder
-
-[src/generic-provider-views/index.js:144-147](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L144-L147 "Source code on GitHub")
-
-Fetches new folder
-
-**Parameters**
-
--   `Folder` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
--   `title` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder title
--   `folder`  
-
-### logout
-
-[src/generic-provider-views/index.js:180-194](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L180-L194 "Source code on GitHub")
-
-Removes session token on client side.
-
-## Utils
-
-[src/core/Utils.js:17-19](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L17-L19 "Source code on GitHub")
-
-A collection of small utility functions that help with dom manipulation, adding listeners,
-promises and other good things.
-
-**Parameters**
-
--   `arr`  
-
-### constructor
-
-[src/generic-provider-views/index.js:43-74](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L43-L74 "Source code on GitHub")
-
-**Parameters**
-
--   `instance` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** of the plugin
--   `plugin`  
--   `opts`  
-
-### updateState
-
-[src/generic-provider-views/index.js:79-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L79-L84 "Source code on GitHub")
-
-Little shorthand to update the state with the plugin's state
-
-**Parameters**
-
--   `newState`  
-
-### updateState
-
-[src/plugins/Webcam/index.js:107-112](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Webcam/index.js#L107-L112 "Source code on GitHub")
-
-Little shorthand to update the state with my new state
-
-**Parameters**
-
--   `newState`  
-
-### getFolder
-
-[src/generic-provider-views/index.js:116-137](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L116-L137 "Source code on GitHub")
-
-Based on folder ID, fetch a new folder and update it to state
-
-**Parameters**
-
--   `id` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder id
--   `name`  
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Folders/files in folder
-
-### getNextFolder
-
-[src/generic-provider-views/index.js:144-147](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L144-L147 "Source code on GitHub")
-
-Fetches new folder
-
-**Parameters**
-
--   `Folder` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
--   `title` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder title
--   `folder`  
-
-### logout
-
-[src/generic-provider-views/index.js:180-194](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L180-L194 "Source code on GitHub")
-
-Removes session token on client side.
-
-## Utils
-
-[src/generic-provider-views/index.js:39-419](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L39-L419 "Source code on GitHub")
-
-Class to easily generate generic views for plugins
-
-This class expects the plugin using to have the following attributes
-
-stateId {String} object key of which the plugin state is stored
-
-This class also expects the plugin instance using it to have the following
-accessor methods.
-Each method takes the item whose property is to be accessed
-as a param
-
-isFolder
-
-Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** for if the item is a folder or not
-getItemData
-
-Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** that is format ready for uppy upload/download
-getItemIcon
-
-Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** html instance of the item's icon
-getItemSubList
-
-Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** sub-items in the item. e.g a folder may contain sub-items
-getItemName
-
-Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** display friendly name of the item
-getMimeType
-
-Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** mime type of the item
-getItemId
-
-Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** unique id of the item
-getItemRequestPath
-
-Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** unique request path of the item when making calls to uppy server
-getItemModifiedDate
-
-Returns **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** or {String} date of when last the item was modified
-getItemThumbnailUrl
-
-Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-
-### constructor
-
-[src/generic-provider-views/index.js:43-74](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L43-L74 "Source code on GitHub")
-
-**Parameters**
-
--   `instance` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** of the plugin
--   `plugin`  
--   `opts`  
-
-### updateState
-
-[src/generic-provider-views/index.js:79-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L79-L84 "Source code on GitHub")
-
-Little shorthand to update the state with the plugin's state
-
-**Parameters**
-
--   `newState`  
-
-### updateState
-
-[src/plugins/Webcam/index.js:107-112](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Webcam/index.js#L107-L112 "Source code on GitHub")
-
-Little shorthand to update the state with my new state
-
-**Parameters**
-
--   `newState`  
-
-### getFolder
-
-[src/generic-provider-views/index.js:116-137](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L116-L137 "Source code on GitHub")
-
-Based on folder ID, fetch a new folder and update it to state
-
-**Parameters**
-
--   `id` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder id
--   `name`  
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Folders/files in folder
-
-### getNextFolder
-
-[src/generic-provider-views/index.js:144-147](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L144-L147 "Source code on GitHub")
-
-Fetches new folder
-
-**Parameters**
-
--   `Folder` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
--   `title` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder title
--   `folder`  
-
-### logout
-
-[src/generic-provider-views/index.js:180-194](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L180-L194 "Source code on GitHub")
-
-Removes session token on client side.
-
-## Utils
-
-[src/plugins/Webcam/index.js:14-311](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Webcam/index.js#L14-L311 "Source code on GitHub")
-
-**Extends Plugin**
-
-Webcam
-
-### constructor
-
-[src/generic-provider-views/index.js:43-74](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L43-L74 "Source code on GitHub")
-
-**Parameters**
-
--   `instance` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** of the plugin
--   `plugin`  
--   `opts`  
-
-### updateState
-
-[src/generic-provider-views/index.js:79-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L79-L84 "Source code on GitHub")
-
-Little shorthand to update the state with the plugin's state
-
-**Parameters**
-
--   `newState`  
-
-### updateState
-
-[src/plugins/Webcam/index.js:107-112](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Webcam/index.js#L107-L112 "Source code on GitHub")
-
-Little shorthand to update the state with my new state
-
-**Parameters**
-
--   `newState`  
-
-### getFolder
-
-[src/generic-provider-views/index.js:116-137](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L116-L137 "Source code on GitHub")
-
-Based on folder ID, fetch a new folder and update it to state
-
-**Parameters**
-
--   `id` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder id
--   `name`  
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** Folders/files in folder
-
-### getNextFolder
-
-[src/generic-provider-views/index.js:144-147](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L144-L147 "Source code on GitHub")
-
-Fetches new folder
-
-**Parameters**
-
--   `Folder` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
--   `title` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Folder title
--   `folder`  
-
-### logout
-
-[src/generic-provider-views/index.js:180-194](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/generic-provider-views/index.js#L180-L194 "Source code on GitHub")
-
-Removes session token on client side.
-
-## index
-
-[src/plugins/StatusBar/index.js:11-141](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/StatusBar/index.js#L11-L141 "Source code on GitHub")
-
-**Extends Plugin**
-
-A status bar.
-
-### checkDragDropSupport
-
-[src/plugins/DragDrop/index.js:68-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/DragDrop/index.js#L68-L84 "Source code on GitHub")
-
-Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).
-
-Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true if supported, false otherwise
-
-## index
-
-[src/plugins/DragDrop/index.js:11-162](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/DragDrop/index.js#L11-L162 "Source code on GitHub")
-
-**Extends Plugin**
-
-Drag & Drop plugin
-
-### checkDragDropSupport
-
-[src/plugins/DragDrop/index.js:68-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/DragDrop/index.js#L68-L84 "Source code on GitHub")
-
-Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).
-
-Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true if supported, false otherwise
-
-## index
-
-[src/plugins/Transloadit/index.js:8-374](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Transloadit/index.js#L8-L374 "Source code on GitHub")
-
-**Extends Plugin**
-
-Upload files to Transloadit using Tus.
-
-### checkDragDropSupport
-
-[src/plugins/DragDrop/index.js:68-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/DragDrop/index.js#L68-L84 "Source code on GitHub")
-
-Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).
-
-Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** true if supported, false otherwise
-
-## Dummy
-
-[src/plugins/Dummy.js:9-67](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Dummy.js#L9-L67 "Source code on GitHub")
-
-**Extends Plugin**
-
-Dummy
-A test plugin, does nothing useful
-
-## flatten
-
-[src/core/Utils.js:17-19](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L17-L19 "Source code on GitHub")
-
-Shallow flatten nested arrays.
-
-**Parameters**
-
--   `arr`  
-
-## groupBy
-
-[src/core/Utils.js:76-84](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L76-L84 "Source code on GitHub")
-
-Partition array by a grouping function.
-
-**Parameters**
-
--   `array` **\[type]** Input array
--   `groupingFn` **\[type]** Grouping function
-
-Returns **\[type]** Array of arrays
-
-## every
-
-[src/core/Utils.js:92-100](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L92-L100 "Source code on GitHub")
-
-Tests if every array element passes predicate
-
-**Parameters**
-
--   `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** Input array
--   `predicateFn` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Predicate
-
-Returns **bool** Every element pass
-
-## toArray
-
-[src/core/Utils.js:105-107](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L105-L107 "Source code on GitHub")
-
-Converts list into array
-
-**Parameters**
-
--   `list`  
-
-## generateFileID
-
-[src/core/Utils.js:116-121](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L116-L121 "Source code on GitHub")
-
-Takes a fileName and turns it into fileID, by converting to lowercase,
-removing extra characters and adding unix timestamp
-
-**Parameters**
-
--   `fileName` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-
-## runPromiseSequence
-
-[src/core/Utils.js:130-136](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L130-L136 "Source code on GitHub")
-
-Runs an array of promise-returning functions in sequence.
-
-**Parameters**
-
--   `functions`  
--   `args` **...Any** 
-
-## isPreviewSupported
-
-[src/core/Utils.js:152-158](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L152-L158 "Source code on GitHub")
-
-Takes function or class, returns its name.
-Because IE doesn’t support `constructor.name`.
-<https://gist.github.com/dfkaye/6384439>, <http://stackoverflow.com/a/15714445>
-
-**Parameters**
-
--   `fn` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** — function
--   `fileTypeSpecific`  
-
-## copyToClipboard
-
-[src/core/Utils.js:300-340](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L300-L340 "Source code on GitHub")
-
-Copies text to clipboard by creating an almost invisible textarea,
-adding text there, then running execCommand('copy').
-Falls back to prompt() when the easy way fails (hello, Safari!)
-From <http://stackoverflow.com/a/30810322>
-
-**Parameters**
-
--   `textToCopy` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
--   `fallbackString` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** 
-
-## isDOMElement
-
-[src/core/Utils.js:384-386](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L384-L386 "Source code on GitHub")
-
-Check if an object is a DOM element. Duck-typing based on `nodeType`.
-
-**Parameters**
-
--   `obj` **Any** 
-
-## findDOMElement
-
-[src/core/Utils.js:394-402](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Utils.js#L394-L402 "Source code on GitHub")
-
-Find a DOM element.
-
-**Parameters**
-
--   `element` **([Node](https://developer.mozilla.org/en-US/docs/Web/API/Node/nextSibling) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** 
-
-Returns **([Node](https://developer.mozilla.org/en-US/docs/Web/API/Node/nextSibling) | null)** 
-
-## Translator
-
-[src/core/Translator.js:14-86](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Translator.js#L14-L86 "Source code on GitHub")
-
-Translates strings with interpolation & pluralization support.
-Extensible with custom dictionaries and pluralization functions.
-
-Borrows heavily from and inspired by Polyglot <https://github.com/airbnb/polyglot.js>,
-basically a stripped-down version of it. Differences: pluralization functions are not hardcoded
-and can be easily added among with dictionaries, nested objects are used for pluralization
-as opposed to `||||` delimeter
-
-Usage example: `translator.translate('files_chosen', {smart_count: 3})`
-
-**Parameters**
-
--   `opts` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
-
-### interpolate
-
-[src/core/Translator.js:48-69](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Translator.js#L48-L69 "Source code on GitHub")
-
-Takes a string with placeholder variables like `%{smart_count} file selected`
-and replaces it with values from options `{smart_count: 5}`
-
-**Parameters**
-
--   `phrase` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** that needs interpolation, with placeholders
--   `options` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** with values that will be used to replace placeholders
-
-Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** interpolated
-
-**Meta**
-
--   **license**: https&#x3A;//github.com/airbnb/polyglot.js/blob/master/LICENSE
-    taken from https&#x3A;//github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299
-
-### translate
-
-[src/core/Translator.js:78-85](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/core/Translator.js#L78-L85 "Source code on GitHub")
-
-Public translate method
-
-**Parameters**
-
--   `key` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
--   `options` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** with values that will be used later to replace placeholders in string
-
-Returns **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** translated (and interpolated)
-
-## Webcam
-
-[src/uppy-base/src/plugins/Webcam.js:8-336](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/uppy-base/src/plugins/Webcam.js#L8-L336 "Source code on GitHub")
-
-Webcam Plugin
-
-### init
-
-[src/uppy-base/src/plugins/Webcam.js:61-78](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/uppy-base/src/plugins/Webcam.js#L61-L78 "Source code on GitHub")
-
-Checks for getUserMedia support
-
-### detectFlash
-
-[src/uppy-base/src/plugins/Webcam.js:138-162](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/uppy-base/src/plugins/Webcam.js#L138-L162 "Source code on GitHub")
-
-Detects if browser supports flash
-Code snippet borrowed from: <https://github.com/swfobject/swfobject>
-
-Returns **bool** flash supported
-
-### stop
-
-[src/uppy-base/src/plugins/Webcam.js:247-264](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/uppy-base/src/plugins/Webcam.js#L247-L264 "Source code on GitHub")
-
-Stops the webcam capture and video playback.
-
-### getImage
-
-[src/uppy-base/src/plugins/Webcam.js:300-317](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/uppy-base/src/plugins/Webcam.js#L300-L317 "Source code on GitHub")
-
-Takes a snapshot and displays it in a canvas.
-
-**Parameters**
-
--   `video`  
--   `opts`  
-
-## ProgressBar
-
-[src/plugins/ProgressBar.js:8-45](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/ProgressBar.js#L8-L45 "Source code on GitHub")
-
-**Extends Plugin**
-
-Progress bar
-
-## Informer
-
-[src/plugins/Informer.js:11-64](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Informer.js#L11-L64 "Source code on GitHub")
-
-**Extends Plugin**
-
-Informer
-Shows rad message bubbles
-used like this: `core.emit('informer', 'hello world', 'info', 5000)`
-or for errors: `core.emit('informer', 'Error uploading img.jpg', 'error', 5000)`
-
-## MetaData
-
-[src/plugins/MetaData.js:8-51](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/MetaData.js#L8-L51 "Source code on GitHub")
-
-**Extends Plugin**
-
-Meta Data
-Adds metadata fields to Uppy
-
-## Tus10
-
-[src/plugins/Tus10.js:29-363](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Tus10.js#L29-L363 "Source code on GitHub")
-
-**Extends Plugin**
-
-Tus resumable file uploader
-
-### upload
-
-[src/plugins/Tus10.js:115-189](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Tus10.js#L115-L189 "Source code on GitHub")
-
-Create a new Tus upload
-
-**Parameters**
-
--   `file` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** for use with upload
--   `current` **integer** file in a queue
--   `total` **integer** number of files in a queue
-
-Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** 
-
-## Client
-
-[src/plugins/Transloadit/Client.js:4-59](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Transloadit/Client.js#L4-L59 "Source code on GitHub")
-
-A Barebones HTTP API client for Transloadit.
-
-### createAssembly
-
-[src/plugins/Transloadit/Client.js:15-48](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Transloadit/Client.js#L15-L48 "Source code on GitHub")
-
-Create a new assembly.
-
-**Parameters**
-
--   `options` **[object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
--   `$0` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
-    -   `$0.templateId`  
-    -   `$0.params`  
-    -   `$0.fields`  
-    -   `$0.signature`  
-    -   `$0.expectedFiles`  
-
-### getAssemblyStatus
-
-[src/plugins/Transloadit/Client.js:55-58](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Transloadit/Client.js#L55-L58 "Source code on GitHub")
-
-Get the current status for an assembly.
-
-**Parameters**
-
--   `url` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** The status endpoint of the assembly.
-
-## Socket
-
-[src/plugins/Transloadit/Socket.js:8-60](https://github.com/transloadit/uppy/blob/e489dc95a3d4e09a5f267dabf4a468f9fa17f105/src/plugins/Transloadit/Socket.js#L8-L60 "Source code on GitHub")
-
-WebSocket status API client for Transloadit.

+ 1 - 1
website/src/docs/dashboard.md

@@ -23,7 +23,7 @@ uppy.use(Dashboard, {
 })
 ```
 
-[Try it live](/examples/dashboard/)
+<a class="TryButton" href="/examples/dashboard/">Try it live</a>
 
 ## Installation
 

+ 1 - 1
website/src/docs/dragdrop.md

@@ -17,7 +17,7 @@ uppy.use(DragDrop, {
 })
 ```
 
-[Try it live](/examples/dragdrop/)
+<a class="TryButton" href="/examples/dragdrop/">Try it live</a>
 
 ## Installation
 

+ 3 - 1
website/src/docs/fileinput.md

@@ -18,7 +18,9 @@ uppy.use(FileInput, {
 })
 ```
 
-[Try it live](/examples/xhrupload) - The `@uppy/xhr-upload` example uses `@uppy/file-input` with the [`pretty`](#pretty-true) option enabled.
+<a class="TryButton" href="/examples/xhrupload/">Try it live</a>
+
+The `@uppy/xhr-upload` example uses `@uppy/file-input` with the [`pretty`](#pretty-true) option enabled.
 
 ## Installation
 

+ 1 - 1
website/src/docs/index.md

@@ -31,7 +31,7 @@ uppy.on('complete', (result) => {
 })
 ```
 
-[Try it live!](/examples/dashboard/)
+<a class="TryButton" href="/examples/dashboard/">Try it live</a>
 
 Drag and drop, webcam, basic file manipulation (adding metadata), uploading via tus-resumable uploads or XHR/Multipart is all possible using just the Uppy client module.
 

+ 3 - 1
website/src/docs/informer.md

@@ -16,7 +16,9 @@ uppy.use(Informer, {
 })
 ```
 
-[Try it live](/examples/dashboard/) - The Informer plugin is included in the Dashboard by default.
+<a class="TryButton" href="/examples/dashboard/">Try it live</a>
+
+The Informer plugin is included in the Dashboard by default.
 
 ## Installation
 

+ 3 - 1
website/src/docs/progressbar.md

@@ -17,7 +17,9 @@ uppy.use(ProgressBar, {
 })
 ```
 
-[Try it live](/examples/dragdrop/) - The `@uppy/drag-drop` example uses a Progress Bar to show progress.
+<a class="TryButton" href="/examples/dragdrop/">Try it live</a>
+
+The `@uppy/drag-drop` example uses a Progress Bar to show progress.
 
 ## Installation
 

+ 2 - 2
website/src/docs/redux.md

@@ -1,7 +1,7 @@
 ---
 title: "Redux"
 type: docs
-permalink: docs/redux
+permalink: docs/redux/
 order: 87
 ---
 
@@ -22,7 +22,7 @@ const reducer = combineReducers({
 
 const uppy = Uppy({
   store: ReduxStore({
-    store: createStore(reducer) // That's a lot of stores!
+    store: createStore(reducer) // Thats a lot of stores!
   })
 })
 ```

+ 9 - 1
website/src/docs/statusbar.md

@@ -18,7 +18,7 @@ uppy.use(StatusBar, {
 })
 ```
 
-[Try it live](/examples/statusbar/)
+<a class="TryButton" href="/examples/statusbar/">Try it live</a>
 
 ## Installation
 
@@ -77,6 +77,14 @@ By default, progress in the Status Bar is shown as simple percentage. If you wou
 `showProgressDetails: false`: Uploading: 45%
 `showProgressDetails: true`: Uploading: 45%・43 MB of 101 MB・8s left
 
+### `hideRetryButton: false`
+
+Hide the retry button. Use this if you are providing a custom retry button somewhere, and using the `uppy.retryAll()` or `uppy.retryUpload(fileID)` API.
+
+### `hidePauseResumeCancelButtons: false`
+
+Hide the cancel or pause/resume buttons (for resumable uploads, via [tus](http://tus.io), for example). Use this if you are providing custom cancel or pause/resume buttons somewhere, and using the `uppy.pauseResume(fileID)`, `uppy.cancelAll()` or `uppy.removeFile(fileID)` API.
+
 ### `locale: {}`
 
 Localize text that is shown to the user.

+ 1 - 1
website/src/docs/transloadit.md

@@ -8,7 +8,7 @@ permalink: docs/transloadit/
 
 The `@uppy/transloadit` plugin can be used to upload files to [Transloadit](https://transloadit.com/) for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, [and more](https://transloadit.com/services/).
 
-[Try it live](/examples/transloadit/)
+<a class="TryButton" href="/examples/transloadit/">Try it live</a>
 
 ```js
 const Transloadit = require('@uppy/transloadit')

+ 1 - 1
website/src/docs/xhrupload.md

@@ -17,7 +17,7 @@ uppy.use(XHRUpload, {
 })
 ```
 
-[Try it live](/examples/xhrupload/)
+<a class="TryButton" href="/examples/xhrupload/">Try it live</a>
 
 ## Installation
 

+ 1 - 1
website/themes/uppy/source/css/_common.scss

@@ -333,7 +333,7 @@ a.button {
   color: $color-light;
   padding-bottom: 3px;
   font-size: .85em;
-  margin: 0 .5em;
+  margin: 0;
   cursor: pointer;
 
   &:first-child { margin-left: 0; }

+ 1 - 1
website/themes/uppy/source/css/_examples.scss

@@ -17,7 +17,7 @@
   @include reset-button;
   padding: 10px 15px;
   border: 1px solid $color-primary;
-  background-transition: all .3s;
+  transition: all .2s;
   font-size: 13px;
   color: $color-primary;
   cursor: pointer;

+ 18 - 0
website/themes/uppy/source/css/_page.scss

@@ -359,3 +359,21 @@
   border-top: 1px solid #e5e5e5;
   font-size: .9em;
 }
+
+.TryButton,
+a.TryButton {
+  @include reset-button;
+  font-size: 0.8em;
+  padding: 7px 16px;
+  border: 1px solid $color-primary;
+  transition: all .2s;
+  color: $color-primary;
+  cursor: pointer;
+  border-radius: 15px;
+  margin-bottom: 1.5em;
+
+  &:hover {
+    background-color: $color-primary;
+    color: $color-white;
+  }
+}