{"action":"created","issue":{"url":"https://api.github.com/repos/insin/newforms/issues/64","labels_url":"https://api.github.com/repos/insin/newforms/issues/64/labels{/name}","comments_url":"https://api.github.com/repos/insin/newforms/issues/64/comments","events_url":"https://api.github.com/repos/insin/newforms/issues/64/events","html_url":"https://github.com/insin/newforms/issues/64","id":60008330,"number":64,"title":"0.11","user":{"login":"insin","id":226692,"avatar_url":"https://avatars.githubusercontent.com/u/226692?v=3","gravatar_id":"","url":"https://api.github.com/users/insin","html_url":"https://github.com/insin","followers_url":"https://api.github.com/users/insin/followers","following_url":"https://api.github.com/users/insin/following{/other_user}","gists_url":"https://api.github.com/users/insin/gists{/gist_id}","starred_url":"https://api.github.com/users/insin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insin/subscriptions","organizations_url":"https://api.github.com/users/insin/orgs","repos_url":"https://api.github.com/users/insin/repos","events_url":"https://api.github.com/users/insin/events{/privacy}","received_events_url":"https://api.github.com/users/insin/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-03-05T20:08:55Z","updated_at":"2015-03-06T00:25:37Z","closed_at":null,"body":"- [x] Remove `render()`, `asDiv()`, `asTable()` and `asUl()`.\r\n- [x] Deprecate `formsetFactory()`\r\n  - [x] Rename `BaseFormSet` to `FormSet`\r\n  - [x] `FormSet` constructor can be used directly or `.extend()`ed to set defaults which used to be passed to `formsetFactory()`.\r\n- [x] Modularise - break everything into individual modules\r\n  - [x] Default `require('newforms')` will still give you a grab-bag of everything\r\n  - [x] Publish to npm as flattened modules -p eople who want to save on dependency file size when bundling can directly import only what they need - in particular, you should never need to bundle FormSets if you're not using them.\r\n- [ ] Populate `form.files` and `cleanedDat`a with `File` objects on the client (#61)\r\n  - How does this translate to isomorphic usage?\r\n- [x] Add a new core `Field` property: `field.widgetAttrs` (#62, #63)\r\n  - [x] Rename `Field.prototype.widgetAttrs` to `getWidgetAttrs`\r\n  - [x] Return `field.widgetAttrs` by default\r\n  - [x] Make sure overrides of `getWidgetAttrs` are calling super() properly\r\n  - Let user `widgetAttrs` trump those `getWidgetAttrs` wants to add?\r\n\r\n---\r\n\r\nNext release:\r\n\r\n- [ ] Revisit when error messages get cleared - playing with some of the custom validation on the [newforms-bootstrap grid example](http://insin.github.io/newforms-bootstrap/grid.html), cross-field, async and both validation is a mess of things appearing and disappering.\r\n  - This behaviour was implemented before prevention of duplicate validation errors was in place - might have been a contributing factor.\r\n- [ ] widgetAttrs for form instances?\r\n  - Applied to named fields after cloning\r\n  - Check for event handlers when handling field events and call any user-supplied event handlers after updating form data/validating\r\n    - Indicator or callback for async validation?\r\n- [ ] Get isomorphic-lab payload branch running again and implement a file upload use case."},"comment":{"url":"https://api.github.com/repos/insin/newforms/issues/comments/77482629","html_url":"https://github.com/insin/newforms/issues/64#issuecomment-77482629","issue_url":"https://api.github.com/repos/insin/newforms/issues/64","id":77482629,"user":{"login":"insin","id":226692,"avatar_url":"https://avatars.githubusercontent.com/u/226692?v=3","gravatar_id":"","url":"https://api.github.com/users/insin","html_url":"https://github.com/insin","followers_url":"https://api.github.com/users/insin/followers","following_url":"https://api.github.com/users/insin/following{/other_user}","gists_url":"https://api.github.com/users/insin/gists{/gist_id}","starred_url":"https://api.github.com/users/insin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/insin/subscriptions","organizations_url":"https://api.github.com/users/insin/orgs","repos_url":"https://api.github.com/users/insin/repos","events_url":"https://api.github.com/users/insin/events{/privacy}","received_events_url":"https://api.github.com/users/insin/received_events","type":"User","site_admin":false},"created_at":"2015-03-06T00:25:37Z","updated_at":"2015-03-06T00:25:37Z","body":"0.11 is almost ready. just want to play with the client-side `File` object change a bit first.\r\n\r\n`widgetAttrs` is at the bottom of the stack in terms of precedence (`widget.attrs` < `render()`-generated attrs < attrs passed to `render()` via `BoundField`) so it won't let you override `type`.\r\n\r\n`TextInput` treats the `type` attr specially to allow you to override the rendered type when creating an instance ( `TextInput({attrs: {type: 'tel'}})` ), or you could extend it to create your own widget constructor ( `var TelInput = TextInput.extend({inputType: 'tel'})` )\r\n"}}