Commit Graph

1244 Commits

Author SHA1 Message Date
Sebastian Markbåge cb50a8698b Remove unrelated comment
This is no longer unwrapping a legacy factory (which are gone).
2014-10-31 12:39:38 -07:00
Sebastian Markbåge 881c9b5be8 Merge pull request #2435 from sebmarkbage/fixretest
Use dump cache and remove factory from ReactElement-test
2014-10-30 12:06:21 -07:00
Paul O’Shannessy 295c1e3652 Cleanup a couple unused variables 2014-10-30 11:38:53 -07:00
Sebastian Markbage 7f7b7f386a Use dump cache and remove factory from ReactElement-test
We need to use dump cache because we don't enable it by default internally.

While I'm at it, I might as well kill the ComponentFactory variable which
is now just an alias.
2014-10-30 02:50:28 -07:00
Juraj Dudak c563e19739 Extending period in which click events are ignored 2014-10-29 14:06:37 -07:00
Paul O’Shannessy ce1b394529 Followup fix for React.PropTypes.node
This should have gone in as a part of #2343
2014-10-28 22:49:25 -07:00
Sebastian Markbage 9b36b04d75 Drop internal uses of .type on the class 2014-10-28 15:08:52 -07:00
Sebastian Markbage 199a7d6903 Drop Legacy Factories Around Classes
Classes are now pure classes without a legacy factory around them.

Since classes will become just any function that returns a valid instance,
let's drop isValidClass.

There's some hacks in here for auto-mocking frameworks (jest) that mock the
prototype of these classes. These hacks allow these classes to be mounted.
2014-10-28 15:08:52 -07:00
Sebastian Markbage 531c2bc4c9 Drop ReactDOM from internal DOM extensions
These used to be exposed as strings on the legacy factories but are now
gone.
2014-10-28 15:08:52 -07:00
Tienchai Wirojsaksaree ff12423d63 Fixing touch/mouse issues with TapEventPlugin
On ios device, browser simulates mouse events, but does that with
a delay, because of double tap gesture. The problem is that
TapEventPlugins listens to both types of events, so it fires twice

Everytime there is a touch event, we should ignore mouse events that
follow it.  This way, we still respond to both mouse and touch events,
just ignore the device generated ones.
2014-10-27 17:02:03 -07:00
Paul O’Shannessy 1c241b3ebc Ensure PropTypes test works when warning module is replaced
For example, warning might be replaced with a module that throws errors,
as is the case internally when running tests. Previously we were
whitelisting this test to provide time to update callsites. Now we
aren't and it fails.
2014-10-27 16:58:54 -07:00
Paul O’Shannessy d63aa0f113 Move Object.assign file to align with internal 2014-10-26 17:14:00 -07:00
Nick Raienko eb3337b018 Remove obsolete jshint options 2014-10-26 12:18:24 +02:00
Sebastian Markbåge ae8771fe2e Merge pull request #2084 from kimagure/unmount-comp-error
Error when unmountComponentAtNode receives non-node
2014-10-23 12:53:40 -07:00
Sebastian Markbåge 29bcda463e Merge pull request #2387 from fabiomcosta/avoid_double_scrollread
avoid reading the scroll position twice
2014-10-23 12:51:23 -07:00
Sebastian Markbåge b7cd3e7d1d Merge pull request #2396 from sebmarkbage/classmodule
Move Class Creation Concerns into a ReactClass Module
2014-10-23 12:50:17 -07:00
Sebastian Markbage 7ce8c844bd Hide ReactElement constructor
This prevents feature tests like:

var ReactElement = React.createElement(...).constructor;

if (element.constructor === ReactElement)

This is intentional so that we have the option to make these plain objects.
E.g. for direct inlining or replacing them with value types.
2014-10-23 12:08:14 -07:00
Sebastian Markbage d9fe40e147 Move Class Creation Concerns to ReactClass
This moves logic responsible for class creation and mixins into
the ReactClass module. This currently creates a class that extends
the ReactCompositeBase but in the future, this will be decoupled as
ReactCompositeComponent will compose these classes.

This is just a cut/paste.
2014-10-22 21:25:20 -07:00
Sebastian Markbage c7bb936566 Introduce React Class as an alias for Composite Component
This is in preparation for the separation of Composite Component internals
from the Class abstraction.
2014-10-22 18:35:10 -07:00
Lee Byron d545238fd9 Merge pull request #2376 from leebyron/iterable
Allow iterables in traverseAllChildren
2014-10-22 18:18:08 -07:00
Ben Alpert de1dacdb28 Refactor composite component update flow
Fixes #1392.

Previously, ReactComponent.updateComponent set the new props and owner and updated the component's refs. Because it did the actual props assignment, it had to be called by ReactCompositeComponent between componentWillMount and componentDidMount, meaning that it was skipped if shouldComponentUpdate returned false. Now, updateComponent takes the old and new descriptors and only updates refs, allowing a subclass to call updateComponent at a convenient time (specifically, it can be before `this._descriptor` is updated if the subclass also overrides performUpdateIfNecessary).

The new update cycle for composites is:

- receiveComponent is called which stores `this._pendingDescriptor` and calls performUpdateIfNecessary directly or a state update is enqueued, in which case ReactUpdates will call performUpdateIfNecessary
- performUpdateIfNecessary ensures that an update is still pending (which might no longer be the case if an update is queued for a subcomponent that was updated through a parent's reconciliation) and calls updateComponent with the old and new descriptors
- updateComponent calls super to update refs, then calls componentWillReceiveProps (if applicable) and shouldComponentUpdate -- if shouldComponentUpdate returns false, `this._descriptor`, `this.props`, and `this.state` are updated and the update is skipped; else, _performComponentUpdate is called
- _performComponentUpdate calls componentWillUpdate and _updateRenderedComponent, and enqueues the componentDidUpdate call (in that order)
- _updateRenderedComponent calls render and updates the rendered component appropriately

For DOM components (essentially unchanged):

- receiveComponent is called which does a short-circuit check for descriptor equality and delegates to super (which stores `this._pendingDescriptor` and calls performUpdateIfNecessary)
- performUpdateIfNecessary (not overridden) sets new values for `this.props`, etc. and calls updateComponent
- updateComponent does the DOM property and children updates (some synchronously, some queued for the transaction close)

For text and ART components (unchanged):

- receiveComponent updates the DOM or ART directly based on the new props
- updateComponent is never called

Notable changes:

- When shouldComponentUpdate returns false, refs are still updated
- ReactDefaultPerf now includes lifecycle methods in component timings
- updateComponent's signature changed (technically this is part of the public API, though we've never documented it)

Test Plan: jest
2014-10-22 17:59:58 -07:00
Ben Alpert 9c2125599c Add \n after <textarea> to fix missing linebreaks
Same for <pre> and <listing>. Browsers are crazy.

Test Plan: jest, verify in Chrome that starting textareas with a value starting with two newlines renders both newlines instead of one newline, as it did before.
2014-10-22 17:24:24 -07:00
Paul O’Shannessy b78fe39b60 Bump version to 0.13.0-alpha 2014-10-22 14:19:54 -07:00
Lee Byron c07ea0ba34 Allow iterables in traverseAllChildren
This lets you use any kind of iterable as a container of react child elements. It also preserves keys when possible if the iterable is keyed.

 * Use an ES6 Map or Set to hold children.
 * Use an Immutable-js collection to hold children.
 * Use a function* which yields children.

Concretely, this removes the necessary conversion to JS objects if you're mapping over Immutable-js collections to get children, i.e.:

```
<div>
  {myImmutable.map(val => <span>{val}</span>).toJS()
</div>
```

Now we can remove the `toJS()` and the intermediate allocation along with it.

This also cleans up the traverseAllChildrenImpl method.
2014-10-21 15:18:53 -07:00
Ben Alpert 631b6a097c Merge pull request #2388 from spicyj/null-key
Support but warn on key={null}
2014-10-21 14:20:16 -07:00
Ben Alpert dd92786fb0 Support but warn on key={null}
Fixes #2386.

Test Plan: jest
2014-10-20 17:19:48 -07:00
Sebastian Markbåge 2bdad81955 Merge pull request #2384 from sebmarkbage/deprecateisvalidclass
Deprecate isValidClass
2014-10-20 17:17:56 -07:00
Fabio M. Costa dafaf1a42e avoid reading the scroll position twice 2014-10-20 13:30:02 -07:00
Sebastian Markbage ef971014bc Deprecate isValidClass
Fixes #2374
2014-10-19 23:55:57 -07:00
Shripad K 621bb09cd7 Fix JSDoc tag in ReactElement.js 2014-10-19 21:01:45 +05:30
Ben Alpert 810582d114 Fix warning message for using React.DOM.* as type
Previously, this said 'Use the string "function() { [native code] }" instead.'.
2014-10-16 18:22:37 -07:00
Paul O’Shannessy 2b4e35870b v0.12.0-rc1 2014-10-16 14:56:50 -07:00
Sebastian Markbage 25d63b43ef Use hasOwnProperty checks in Object.assign
Because IE8 polyfills add enumerable properties, this doesn't play nicely.
So for IE8 compatibility we add this check. Slower though. :(
2014-10-16 11:49:50 -07:00
Sebastian Markbage 8210beeef4 Hide Object.assign polyfill behind a module
Because the JS community's polyfilling infrastructure sucks and we'll
have to fix it for them before we require this.

JSX spread uses React.__spread
(which might get special behavior for key/ref, not sure yet)

This never uses the native implementation and throws for prototype chains.
Once the native implementations are faster, we'll start using them.
2014-10-16 09:21:10 -07:00
Paul O’Shannessy 770b579aa2 Update PropTypes for ReactElement & ReactNode 2014-10-14 21:35:48 -07:00
Paul O’Shannessy 27cbd71394 Merge pull request #2317 from zpao/npm-ship-merge
Ship merge, mergeInto, copyProperties to npm
2014-10-14 10:21:51 -07:00
Paul O’Shannessy b227837b0c Ship merge to npm
People may have a bad time if they're depending on these but we can
delay that a little bit. Unless they're using directly and not
polyfilling Object.assign.
2014-10-13 14:07:39 -07:00
Sebastian Markbage ce19af9d30 Inject the runtime to a global instead of exposing internals
See https://github.com/facebook/react-devtools/commit/673de20a4a0654ab849575307b9cf87fde53439e
2014-10-13 11:59:23 -07:00
Paul O’Shannessy dcf415c2b9 BSD + PATENTS 2014-10-10 13:34:07 -07:00
Paul O’Shannessy 3bbed150ab Merge pull request #2139 from syranide/acceptcharset
Add form "acceptCharset" to HTMLDOMPropertyConfig
2014-10-10 12:40:13 -07:00
Sebastian Markbåge eef9995093 Merge pull request #2313 from sebmarkbage/sanitizetags
Sanitize the string tag passed to DOM components
2014-10-10 12:33:45 -07:00
Paul O’Shannessy 0dccf64c67 Sync upstream modules 2014-10-10 10:40:18 -07:00
Paul O’Shannessy 5d127eaa49 Merge pull request #2316 from zpao/devtoolsmarker
Look for devtools global hook
2014-10-09 17:00:06 -07:00
Paul O’Shannessy 1c86f5836a Codemod deprecated API usage away 2014-10-09 16:41:03 -07:00
Paul O’Shannessy 9b1fa914fa React.renderComponent -> React.render
Also rename all the associated render methods and adds deprecation
notices.
2014-10-09 16:41:03 -07:00
Sebastian Markbage a4e923b7fc Sanitize the string tag passed to DOM components
Because we're using innerHTML to generate DOM Elements, we need to make
sure that the tag is sane and doesn't try to do injection.

This wouldn't be an issue if we used document.createElement instead.
2014-10-09 13:55:29 -07:00
Paul O’Shannessy 436c6c2db7 Merge pull request #2310 from tmcw/list-require-attribute
Require list property to be accessed as an attribute
2014-10-09 11:29:59 -07:00
Paul O’Shannessy 6ddf8de5ae Look for devtools global hook
It doesn't exist yet, but it could.

This also ensures we actually do our polyfill checks in *all* browsers,
not just Chrome.
2014-10-09 11:24:48 -07:00
Sebastian Markbåge 36b091bc44 Merge pull request #2308 from sebmarkbage/dropdocblock
Drop the @jsx docblock from unit tests
2014-10-08 15:24:18 -07:00
Tom MacWright 688f64c5c8 Require list property to be accessed as an attribute 2014-10-08 17:49:05 -04:00