{"action":"created","issue":{"url":"https://api.github.com/repos/transloadit/uppy/issues/18","labels_url":"https://api.github.com/repos/transloadit/uppy/issues/18/labels{/name}","comments_url":"https://api.github.com/repos/transloadit/uppy/issues/18/comments","events_url":"https://api.github.com/repos/transloadit/uppy/issues/18/events","html_url":"https://github.com/transloadit/uppy/issues/18","id":117546366,"number":18,"title":"design: Progressbar/spinner/etc","user":{"login":"kvz","id":26752,"avatar_url":"https://avatars.githubusercontent.com/u/26752?v=3","gravatar_id":"","url":"https://api.github.com/users/kvz","html_url":"https://github.com/kvz","followers_url":"https://api.github.com/users/kvz/followers","following_url":"https://api.github.com/users/kvz/following{/other_user}","gists_url":"https://api.github.com/users/kvz/gists{/gist_id}","starred_url":"https://api.github.com/users/kvz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kvz/subscriptions","organizations_url":"https://api.github.com/users/kvz/orgs","repos_url":"https://api.github.com/users/kvz/repos","events_url":"https://api.github.com/users/kvz/events{/privacy}","received_events_url":"https://api.github.com/users/kvz/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/transloadit/uppy/milestones/1","html_url":"https://github.com/transloadit/uppy/milestones/Minimum%20Valuable%20Product","labels_url":"https://api.github.com/repos/transloadit/uppy/milestones/1/labels","id":1414016,"number":1,"title":"Minimum Valuable Product","description":"","creator":{"login":"kvz","id":26752,"avatar_url":"https://avatars.githubusercontent.com/u/26752?v=3","gravatar_id":"","url":"https://api.github.com/users/kvz","html_url":"https://github.com/kvz","followers_url":"https://api.github.com/users/kvz/followers","following_url":"https://api.github.com/users/kvz/following{/other_user}","gists_url":"https://api.github.com/users/kvz/gists{/gist_id}","starred_url":"https://api.github.com/users/kvz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kvz/subscriptions","organizations_url":"https://api.github.com/users/kvz/orgs","repos_url":"https://api.github.com/users/kvz/repos","events_url":"https://api.github.com/users/kvz/events{/privacy}","received_events_url":"https://api.github.com/users/kvz/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":14,"state":"open","created_at":"2015-11-16T16:03:42Z","updated_at":"2016-01-05T15:58:37Z","due_on":null,"closed_at":null},"comments":13,"created_at":"2015-11-18T09:28:56Z","updated_at":"2016-02-02T08:29:41Z","closed_at":null,"body":"Many operations will take time. Sometimes we can't estimate accurately how much. We need to have a UI component that all plugins can use, that signals to the user we're happily processing their data.\r\n\r\nI think this could be one of the 'utilities' exposed by 'core'?"},"comment":{"url":"https://api.github.com/repos/transloadit/uppy/issues/comments/178442169","html_url":"https://github.com/transloadit/uppy/issues/18#issuecomment-178442169","issue_url":"https://api.github.com/repos/transloadit/uppy/issues/18","id":178442169,"user":{"login":"kvz","id":26752,"avatar_url":"https://avatars.githubusercontent.com/u/26752?v=3","gravatar_id":"","url":"https://api.github.com/users/kvz","html_url":"https://github.com/kvz","followers_url":"https://api.github.com/users/kvz/followers","following_url":"https://api.github.com/users/kvz/following{/other_user}","gists_url":"https://api.github.com/users/kvz/gists{/gist_id}","starred_url":"https://api.github.com/users/kvz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kvz/subscriptions","organizations_url":"https://api.github.com/users/kvz/orgs","repos_url":"https://api.github.com/users/kvz/repos","events_url":"https://api.github.com/users/kvz/events{/privacy}","received_events_url":"https://api.github.com/users/kvz/received_events","type":"User","site_admin":false},"created_at":"2016-02-02T08:29:41Z","updated_at":"2016-02-02T08:29:41Z","body":"> Where is the progress shown, on what element ?\r\n\r\nI would say `Progress` is just another Plugin. As such, it will take a `targets: []` parameter, that you can feed `#progress-container` as well as `Modal`, causing it to look up a `holder` (? needs a better name) parameter of the `Modal` plugin, and writing to that CSS selector.\r\n\r\nThis way the Modal could use arbitrary templates, using for instance `<div id=\"writable-area\" />` and setting its `holder` property to `#writable-area`, so that any plugin could expose a writable area to any other plugin?\r\n\r\n> Would be nice to hear your opinion here too\r\n\r\nI'm cool with eventemitters for progress events :+1:\r\n\r\n> use namespaces for events, like .on('googledrive:files', ...)\r\n\r\nThat would require intimate knowledge of which plugins are used though, i'd rather standardize on something generic events that all plugins listen to without knowing what Plugins someone uses, like indeed `files`, and tagging each `file` with the Plugin source (like `googledrive`). In this case knowledge isn't lost, and special meaning _can_ be given in odd scenarios, but it is not a requirement."}}