Commit Graph
287 Commits
Author SHA1 Message Date
CommitSyncScriptandPaul O’Shannessy 76ec746341 Require Statement Nits 2013-06-24 16:16:38 -07:00
CommitSyncScriptandPaul O’Shannessy 14102e8a48 Fix isMounted() for composite components
This behavior seemed incorrect for composite components.

- isComponentMounted() represents ReactComponent's lifecycle of mounting
- isMounted() represents ReactCompositeComponent's lifecycle of isMounted()

Therefore, ReactComponents no longer have isMounted(). I think this is fine since it was not supposed to be public anyway.
2013-06-24 16:15:49 -07:00
CommitSyncScriptandPaul O’Shannessy 4f2d8dfe72 Dynamic Input Component
Summary:
This is a proposal based loosely on the discussions I've had with @paulshen and @jwalke. It implements a shim for `React.DOM.input` (used as `<input>`) that supports two different use cases depending on whether `value` is provided or not.

If a `value` is //not// provided, the input will be initialized with the empty string (or `defaultValue`) and anytime the user changes the input, the `onChange` (or `onTextChange`) handler will be fired and the DOM will reflect the new changes.

  React.renderComponent(
    <input type="text" defaultValue="Untitled" onTextChange={handleChange} />,
    container
  );

If a `value` is provided, the input will be initialized to that value. Anytime the user changes the input, the `onChange` (or `onTextChange`) handler will be fired. However, the DOM will //not// reflect the new changes. If a `value` is provided, it is the responsibility of the owner to update the `value` prop passed in.

  var value = "Untitled";
  var input = React.renderComponent(
    <input type="text" value={value} onTextChange={handleChange} />,
    container
  );
  function handleChange(event) {
    // Do something cool like strip out non-numbers.
    var value = event.target.value.replace(/\D/g, '');
    input.setProps({value: value});
  }

This is just a start and we should build similar components for `textarea` and `select`. Also, this does not inject the new components because the changes are not backward compatible. Once we change all `<input>` uses to use `ReactDOMInput`, then we can inject.
2013-06-24 16:13:14 -07:00
CommitSyncScriptandPaul O’Shannessy 7c60bb3e54 Add unit test to prevent regression
The original autobinding diff made some assumptions about how methods were called on components that had to be reverted. This diff
enforces those assumptions in a test
2013-06-24 16:12:06 -07:00
CommitSyncScriptandPaul O’Shannessy a62686622b Clean up naming
Fix a small style nit
2013-06-24 16:11:55 -07:00
CommitSyncScriptandPaul O’Shannessy a61f4df0b9 Fix a bunch of problems with implicit autobinding 2013-06-24 16:11:24 -07:00
CommitSyncScriptandPaul O’Shannessy 3266818b42 fix bad caching in ReactID.getID 2013-06-24 16:11:00 -07:00
CommitSyncScriptandPaul O’Shannessy c9ecbaccb3 Use React.autoBind by default.
Per our discussion - this is the general approach we'd like to take for
the public facing API.

    var MyComponent = React.createClass({
      render: function() {
        return <div onClick={this.myCallback} />;
      },
      myCallback: function() {
      }
    });
2013-06-24 16:10:33 -07:00
Ben Newman 336a0facc1 Merge pull request #99 from petehunt/invariants
Remove second argument to invariant()
2013-06-24 15:38:22 -07:00
petehunt 7053f59ad1 Remove second argument to invariant() 2013-06-23 21:58:59 -07:00
CommitSyncScriptandPaul O’Shannessy 3373572e15 Use ReactID.{get,set}ID instead of manipulating .id property directly.
Another step in the plan to centralize control of React-specific identifers.
2013-06-21 16:08:07 -07:00
CommitSyncScriptandPaul O’Shannessy 1839bcf109 Replace uses of ReactDOMNodeCache and getDOMNodeID with ReactID.
Also removed some unnecessary calls to `document.getElementById`, which
will eventually cease to work for React-specific IDs.

This clears the way for the deprecation of `ReactDOMNodeCache` and
`getDOMNodeID`.
2013-06-21 16:07:51 -07:00
CommitSyncScriptandPaul O’Shannessy 191c0dec32 Consolidate ReactDOMNodeCache and getDOMNodeID into ReactID.
When we move away from using the "id" attribute to identify
React-generated elements, we will need the cache (formerly
ReactDOMNodeCache) to be tied much more closely to the code that looks
elements up by ID (getDOMNodeID) and sets element IDs, since the magic of
document.getElementById will no longer be available.

The priming functions are going to come in handy when we create new DOM
fragments in mountComponent.

For backwards compatibility, the ReactDOMNodeCache and getDOMNodeID
modules still exist, but they are implemented entirely in terms of
functions exported from ReactID.
2013-06-21 16:07:22 -07:00
CommitSyncScriptandPaul O’Shannessy 2bc2b52eaa Allow accessing siblings by ref
This makes it possible to write a wider range of components without
depending on internal implementations.
2013-06-21 16:02:57 -07:00
CommitSyncScriptandPaul O’Shannessy 36a724feca Add reactComponentExpect#toBeComponentOfType
This adds a `toBeComponentOfType` method to `reactComponentExpect`. Now that we are injecting composite native components, `toBeDOMComponentWithTag` will not suffice and should be deprecated.
2013-06-21 16:02:55 -07:00
Paul O’Shannessy 18352090e7 Blogpost & changelog for v0.3.3 2013-06-21 10:57:41 -07:00
Paul O’Shannessy 4c97ffee34 Bring in Facebook's requestAnimationFrame module 2013-06-20 16:51:21 -07:00
Ben Newman 91b10bd37c Merge pull request #109 from zpao/esprima-dep-as-tarball
Use github tarball link for esprima dependency
2013-06-19 15:59:56 -07:00
petehunt 79a2734068 Merge pull request #113 from vjeux/community_2
Community Roundup #2
2013-06-19 12:19:40 -07:00
Vjeux 32030687ba Community Roundup #2 2013-06-19 21:18:28 +02:00
Paul O’Shannessy cb01363260 Cleanup lint warnings 2013-06-19 11:06:04 -07:00
petehunt a2bc7387e4 Merge pull request #110 from vjeux/patch-1
Fix dangerouslySetInnerHTML
2013-06-18 23:13:58 -07:00
Christopher Chedeau ea5e13893e Fix dangerouslySetInnerHTML 2013-06-19 00:09:02 -06:00
Paul O’Shannessy bd044fc919 Use github tarball link for esprima dependency
It turns out that (at least for local development) npm has a long
standing bug where it doesn't recognize changing dependencies stored as
git urls (see https://github.com/isaacs/npm/issues/1727). Luckily npm
understand tarballs and GitHub provides tarballs for every commit, so
the workaround is easy, though unfortunate.
2013-06-18 15:29:37 -07:00
Paul O’Shannessy 870a29d9b0 Use absolute URLs for FB comments box 2013-06-18 10:20:34 -07:00
CommitSyncScriptandPaul O’Shannessy 0e91febb9c Better warnings for missing keys on arrays
We have less dynamic arrays in the code base now so let's start warning for all
the cases where we pass dynamic arrays without keys.

I use the displayName to point out which component's render method was
responsible. I only warn once per component. If the child was created in a
different component (and passed as a property) I also show the owner of the
child. Maybe it should've attached the key at a higher level.

This does give false positives for arrays that are truly static. Those should
probably be refactored to use the XML syntax if possible.
2013-06-18 09:36:24 -07:00
CommitSyncScriptandPaul O’Shannessy 37ddfa0521 Don't transfer children in transferPropsTo
06cff60bc1 made it so that `this.props.children` was no longer set when
none were provided.

  var x = <div />;

This caused an issue if the code was relying on the following not
transferring children.

  return this.transferPropsTo(<div />);
  // this now transfer children
2013-06-18 09:32:23 -07:00
Paul O’Shannessy 5bd449c157 Ignore .module-cache directories 2013-06-17 17:14:14 -07:00
Paul O’Shannessy b69d7f0d2a Merge pull request #107 from remixz/package-json-fix
Fix package.json's reference to vendor/constants.js
2013-06-17 16:31:24 -07:00
Zach Bruggeman a0475b3c29 Fix package.json's reference to vendor/constants.js 2013-06-17 16:27:07 -07:00
CommitSyncScriptandPaul O’Shannessy 3156458041 Fix most lint warnings/errors 2013-06-17 16:26:56 -07:00
CommitSyncScriptandPaul O’Shannessy 48333acba6 Remove reactKeys
It wasn't being used and it wasn't conforming to the @providesModule === file name rule.
2013-06-17 16:26:45 -07:00
CommitSyncScriptandPaul O’Shannessy 4a0456fb8e Fix lint warning about mismatched file & module name
@providesModule should match the file name. In this case we'll be consistent and suffix mixins with Mixin.
2013-06-17 16:26:07 -07:00
petehunt 405be0f966 Merge pull request #106 from benjamn/rename-woodchipper
Rename Woodchipper to ConstantVisitor, and simplify the vendor/constants.js interface
2013-06-17 15:55:25 -07:00
Ben Newman 000928f9dc Use recast.parse and .print for require("vendor/constants").propagate.
This removes the need to pass a callback, which is a nice improvement.
2013-06-17 16:30:32 -04:00
Ben Newman 0f87e8ee87 Rename Woodchipper-related stuff.
No functional changes introduced by this commit.

Renamed:

    woodchipper.js -> constants.js
    Woodchipper -> ConstantVisitor
    debranch -> propagate
2013-06-17 16:21:51 -04:00
Paul O’Shannessy 2195a479a8 Merge pull request #105 from benjamn/fix-options.writeback-bug
Upgrade Recast to 0.4.8 to fix options.writeback bug
2013-06-17 13:07:43 -07:00
Ben Newman 2383fd8813 Upgrade Recast to 0.4.8 to fix options.writeback bug.
Bug introduced by: https://github.com/benjamn/recast/commit/e913b22f8f
Bug fixed by: https://github.com/benjamn/recast/commit/170e18091e
2013-06-17 15:57:33 -04:00
CommitSyncScriptandPaul O’Shannessy d8b6d260c9 Add missing license header 2013-06-17 12:50:55 -07:00
CommitSyncScriptandPaul O’Shannessy 6a41ede2d4 Fixing known keying problems
This fixes the last known parts of the flattening experiment. This has grown to
be somewhat complex and potentially fragile because of it. We may end up
reverting flattening in the future or address it slightly differently.

The purpose of this diff is to test if we've finally understood the real world
edge cases that flattening can lead to and how we have to key components to
cover those cases.

With this commit we never rekey the internal _key property. The semantics is
that once a component passes through a composite component, it's identity is
frozen.

props.key should accept numeric values and booleans which includes 0 and false.
This fixes the truthiness check.

We should never warn about missing key properties if a component is passed as a
static child. The _key acts as a flag to determine whether this component
was checked already.
2013-06-17 12:50:29 -07:00
CommitSyncScriptandPaul O’Shannessy c04081bc56 Add missing license header. 2013-06-17 12:50:15 -07:00
CommitSyncScriptandPaul O’Shannessy 0b1ecd8872 Add Back DOMCharacterDataModified
Accidentally lost `DOMCharacterDataModified`.
2013-06-17 12:49:58 -07:00
CommitSyncScriptandPaul O’Shannessy 88e90d5601 Use Synthetic Events
Swaps out usage of `AbstractEvent` with `SyntheticEvent` (and subclasses).
2013-06-17 12:49:45 -07:00
CommitSyncScriptandPaul O’Shannessy 03464dc148 Fix EventPluginRegistry Unit Tests in GitHub
Dumping the mock cache isn't dirying the modules in the open source version, so we have to unit test a different way. If we can fix the unit test framework, we should revert this.

Also, I added strict mode to `EventPluginRegistry.js`.

See: https://github.com/facebook/react/pull/91
2013-06-17 12:49:22 -07:00
CommitSyncScriptandPaul O’Shannessy 1112f1a003 React onlyChild utility.
Small utility that extracts and validates that there is only a single
child passed to a React composite component. The benefit here is that we
abstract away *how* the children are actually stored while we iterate on
different approaches. This way we won't break callsites as we try different
ideas. When we settle on a final approach, all of these callsites will still
work.
2013-06-17 12:48:47 -07:00
Paul O’Shannessy c1576fcf97 Remove trailing whitespace 2013-06-17 12:48:43 -07:00
CommitSyncScriptandPaul O’Shannessy 8592eacbf9 Use Node Cache in ReactComponent
There are currently two places where we lookup and cache nodes: `ReactDOMNodeCache` and `ReactComponent`. Instead, we should just consolidate caches and make `ReactComponent` use `ReactDOMNodeCache`.
2013-06-17 12:48:26 -07:00
petehunt 888cb824d7 Merge pull request #103 from benjamn/fix-maxBuffer-exceeded
Use grunt.util.spawn for jsx:* tasks instead of exec
2013-06-17 11:10:07 -07:00
petehunt 061527df6c Merge pull request #102 from zpao/fix-transformer
Improve JSXTransformer
2013-06-17 11:08:35 -07:00
Ben Newman 96b0a0253f Use grunt.util.spawn for jsx:* tasks instead of exec.
This should prevent "Warning: stdout maxBuffer exceeded" errors.

Also piping child process stdout and stderr to the parent process, so
you can see more of what's happening during the build process.
2013-06-17 13:56:58 -04:00