30 | );
31 | }
32 | });
33 |
34 | App.components.ContactList = ContactList;
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/examples/src/components/contact.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @jsx React.DOM
3 | */
4 | var App = require('../app');
5 | var React = App.libs.React;
6 |
7 | var Contact = React.createClass({
8 | handleDelete: function () {
9 | confirm('delete button');
10 | },
11 | handleEdit: function () {
12 | alert('edit button');
13 | },
14 | render: function () {
15 | return (
16 |
31 | );
32 | }
33 | });
34 |
35 | App.components.Contact = Contact;
--------------------------------------------------------------------------------
/examples/backend.php:
--------------------------------------------------------------------------------
1 | new MyConfig,
33 | );
34 |
35 | $data = array (
36 | 'data' => array (
37 | 'contacts' => array (
38 | ['nome' => 'Geremias', 'email' => 'geremias@hotmail', 'title' => 'Cabra Macho!'],
39 | ['nome' => 'George', 'email' => 'george@hotmail', 'title' => 'Cabrito!'],
40 | ),
41 | ),
42 | );
43 | $rjs = new Sigep\LaravelReactJS\ReactJS($app);
44 | $rjs->setErrorHandler(function ($message, $code) {
45 | echo '';
49 | });
50 |
51 |
52 | $rjs->component('ContactList');
53 | $rjs->data($data);
--------------------------------------------------------------------------------
/licenses/license-react-php-v8js.txt:
--------------------------------------------------------------------------------
1 | BSD License for React-PHP-V8Js
2 |
3 | Copyright (c) 2014, Facebook, Inc. All rights reserved.
4 |
5 | Redistribution and use in source and binary forms, with or without modification,
6 | are permitted provided that the following conditions are met:
7 |
8 | * Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 |
11 | * Redistributions in binary form must reproduce the above copyright notice,
12 | this list of conditions and the following disclaimer in the documentation
13 | and/or other materials provided with the distribution.
14 |
15 | * Neither the name Facebook nor the names of its contributors may be used to
16 | endorse or promote products derived from this software without specific
17 | prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
--------------------------------------------------------------------------------
/tests/ReactJSTest.php:
--------------------------------------------------------------------------------
1 | '\Sigep\LaravelReactJS\ReactJSFacade',
18 | ];
19 | }
20 |
21 | public function setUp()
22 | {
23 | parent::setUp();
24 |
25 | // reset configs
26 | Facade::clearResolvedInstance('reactjs');
27 | $this->app['config']->set('basepath', '');
28 | $this->app['config']->set('react_src', '');
29 | $this->app['config']->set('src_files', []);
30 | $this->app['config']->set('react_prefix', '');
31 | $this->app['config']->set('components_prefix', '');
32 | }
33 |
34 | protected function getEnvironmentSetUp($app)
35 | {
36 | $app['path.base'] = dirname(__DIR__) . '/src';
37 | }
38 |
39 | protected function setupErrorHandling()
40 | {
41 | ReactJS::setErrorHandler(function ($message, $code) {
42 | throw new Exception($message);
43 | });
44 | }
45 |
46 | public function testShouldPassWithSeparatedSourceFiles()
47 | {
48 | $this->app['config']->set('reactjs::basepath', dirname(__FILE__));
49 | $this->app['config']->set('reactjs::react_src', '/js/react.min.js');
50 | $this->app['config']->set('reactjs::src_files', [
51 | '/js/app.js',
52 | ]);
53 | $this->setupErrorHandling();
54 |
55 | $data = ['nome' => 'Luis Henrique', 'email' => 'luish.faria@gmail.com'];
56 | ReactJS::component('Person');
57 | ReactJS::data($data);
58 |
59 | $doc = new DOMDocument();
60 | $doc->loadHTML(ReactJS::markup());
61 |
62 | $this->assertEquals(
63 | $data['nome'],
64 | $doc->getElementsByTagName('p')->item(0)->getElementsByTagName('span')->item(0)->textContent
65 | );
66 |
67 | $this->assertEquals(
68 | $data['email'],
69 | $doc->getElementsByTagName('p')->item(1)->getElementsByTagName('span')->item(0)->textContent
70 | );
71 | }
72 |
73 | /**
74 | * @expectedException \Exception
75 | */
76 | public function testShouldThrowExceptionWhenReactNotFound()
77 | {
78 | $this->app['config']->set('reactjs::react_src', '/xpto.js');
79 | $this->setupErrorHandling();
80 |
81 | ReactJSTest::component('Xpto');
82 | }
83 |
84 | /**
85 | * @expectedException \Exception
86 | */
87 | public function testShouldThrowExceptionWhenSourcesNotFound()
88 | {
89 | $this->app['config']->set('reactjs::basepath', dirname(__FILE__));
90 | $this->app['config']->set('reactjs::react_src', '/js/react.min.js');
91 | $this->app['config']->set('reactjs::src_files', [
92 | '/js/appp.js',
93 | ]);
94 | $this->setupErrorHandling();
95 |
96 | ReactJSTest::component('Xpto');
97 | }
98 |
99 | public function testShouldReturnEmptyStringWhenComponentDoesntExists()
100 | {
101 | $this->app['config']->set('reactjs::basepath', dirname(__FILE__));
102 | $this->app['config']->set('reactjs::react_src', '/js/react.min.js');
103 | $this->app['config']->set('reactjs::src_files', [
104 | '/js/app.js',
105 | ]);
106 |
107 | $data = ['nome' => 'Luis Henrique', 'email' => 'luish.faria@gmail.com'];
108 | ReactJS::component('Xpto');
109 | ReactJS::data($data);
110 |
111 | $this->assertEquals('', ReactJS::markup());
112 | }
113 |
114 | /**
115 | * @expectedException \Exception
116 | */
117 | public function testShouldCallErrorHandlerWhenComponentDoesntExists()
118 | {
119 | $this->app['config']->set('reactjs::basepath', dirname(__FILE__));
120 | $this->app['config']->set('reactjs::react_src', '/js/react.min.js');
121 | $this->app['config']->set('reactjs::src_files', [
122 | '/js/app.js',
123 | ]);
124 | $this->setupErrorHandling();
125 |
126 | $data = ['nome' => 'Luis Henrique', 'email' => 'luish.faria@gmail.com'];
127 | ReactJS::component('Xpto');
128 | ReactJS::data($data);
129 | ReactJS::markup();
130 | }
131 |
132 | public function testShouldPassWithBrowserify()
133 | {
134 | $this->app['config']->set('reactjs::basepath', dirname(__FILE__));
135 | $this->app['config']->set('reactjs::react_src', '');
136 | $this->app['config']->set('reactjs::src_files', ['/js/bundle.js']);
137 | $this->app['config']->set('reactjs::react_prefix', 'Application.libs');
138 | $this->app['config']->set('reactjs::components_prefix', 'Application.components');
139 | $this->setupErrorHandling();
140 |
141 | $data = ['nome' => 'Luis Henrique', 'email' => 'luish.faria@gmail.com'];
142 | ReactJS::component('Person');
143 | ReactJS::data($data);
144 |
145 | $doc = new DOMDocument();
146 | $doc->loadHTML(ReactJS::markup());
147 |
148 | $this->assertEquals(
149 | $data['nome'],
150 | $doc->getElementsByTagName('p')->item(0)->getElementsByTagName('span')->item(0)->textContent
151 | );
152 |
153 | $this->assertEquals(
154 | $data['email'],
155 | $doc->getElementsByTagName('p')->item(1)->getElementsByTagName('span')->item(0)->textContent
156 | );
157 |
158 | $selector = '.xpto';
159 | $jsMarkup = ReactJS::js($selector);
160 | $this->assertTrue((bool) strpos($jsMarkup, 'Application.libs.React.render'));
161 | $this->assertTrue((bool) strpos($jsMarkup, json_encode($data)));
162 | $this->assertTrue((bool) strpos($jsMarkup, 'document.querySelector("'.$selector.'")'));
163 | }
164 | }
165 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Laravel ReactJS
2 | This is a package that we wrote to use on our [Laravel](http://www.laravel.com/) applications that use [React](http://facebook.github.io/react/) from [Facebook](http://facebook.com/). Our goal is deal with the SEO problem that JavaScript based applications have and make easier to send data from back-end to JavaScript without making more requests.
3 |
4 | The project that motivated this package wasn't a SPA and React wasn't used on all pages. It help us to keep the code of our views clean.
5 |
6 | > **Attention:** this package is on development state, so... be careful ;)
7 |
8 | We based our code on [this package](https://github.com/reactjs/react-php-v8js) from Facebook.
9 |
10 | ## Requirements
11 | - PHP 5.4+;
12 | - Laravel 4.1+;
13 | - [v8js extension](http://php.net/manual/pt_BR/book.v8js.php);
14 |
15 | ## Installing
16 | Add the dependency on your `composer.json`:
17 | ```json
18 | {
19 | [...]
20 | "require": {
21 | "sigep/laravel-reactjs": "*",
22 | },
23 | "repositories": [
24 | {
25 | "type": "vcs",
26 | "url": "https://github.com/cohros/laravel-reactjs"
27 | }
28 | ],
29 | }
30 | ```
31 |
32 | Configure the service provider and alias on your application config (`/app/config/app.php`)
33 | ```php
34 | array (
38 | [...],
39 | 'Sigep\LaravelReactJS\ReactJSServiceProvider',
40 | ),
41 | 'alias' => array (
42 | [...],
43 | 'ReactJS' => 'Sigep\LaravelReactJS\ReactJSFacade',
44 | )
45 | );
46 | ```
47 |
48 | ## Usage
49 | You have two options here.
50 | Use the first **(A)** when you want to provide your source files without any kind of dependency management system.
51 | The second **(B)** was tested with [Browserify](http://browserify.org/), tool that we use, but we want to test with others too.
52 |
53 | #### Separated files **(A)**
54 | You have to configure just two things on this approach.
55 | `react_src`: path to react source file;
56 | `src_files`: array with all your source files. Keep in mind that all files will be included in the order that you declare it.
57 |
58 | #### Using with browserify **(B)**
59 | You probably will use three configs:
60 | `src_files`: path to your bundle;
61 | `react_prefix`: probably you will use the standalone option of browserify and exports a variable (named Application, for example). You need to pass that variable name in `react_prefix` config. Look on `examples` directory to see how we do this;
62 | `components_prefix`: like the above rule, that is a prefix to your components. Can be the same as the react_prefix, but we keep it separated like:
63 | ```javascript
64 | module.exports = {
65 | libs: {
66 | React: require('react')
67 | },
68 | components: {
69 | MyComponent: require('mycomponent')
70 | }
71 | }
72 | ```
73 |
74 | ### Getting the markup
75 | With ReactJS you can get the html code that React generates when you ask it to render some component.
76 | What will happens here is: ReactJS will use the v8 engine to run your code and get the html markup of your component. You will put the result on your page and the client (let's say google) will get the content without have to run any JavaScript code.
77 |
78 | First you have to define the component that will be used:
79 | ```php
80 | ReactJS::component('ComponentName');
81 | ```
82 |
83 | If you need to pass props to your component, use the `data` method:
84 | ```php
85 | ReactJS::data(['prop_a' => 'value a', 'prop_b' => 'value_b']);
86 | ```
87 |
88 | Now you just have to call the `markup` method to get the html code:
89 | ```php
90 | ReactJS::markup();
91 | ```
92 |
93 | **Tip**: If you need to render several times the same component, the `component` method doesn't need to be called multiple times:
94 | ```php
95 | ReactJS::component('Foo');
96 |
97 | ReactJS::data(['xpto' => '100']);
98 | echo ReactJS::markup();
99 |
100 | ReactJS::data(['xpto' => '200']);
101 | echo ReactJS::markup();
102 | [...]
103 | ```
104 |
105 | ### Getting the JavaScript code
106 | You need to tell React to render you component to the events and data-bidings work properly on the client browser.
107 | The `js` method will generate the necessary code to do that:
108 |
109 | ```php
110 |
111 | ReactJS::component('Foo');
112 | ReactJS::data(['xpto' => '100']);
113 |
114 | echo ReactJS::js('#target-element');
115 | ```
116 |
117 | > Note that if the server-rendering fails, the code on front-end will create the elements normaly, so if something goes wrong on the server, the page will have the components.
118 |
119 | API
120 |
121 | Method | Parameters | Description
122 | ---|---|---
123 | ReactJS::setErrorHandler() | `callable $errorHandler` | Setup the function to call when error occurs
124 | ReactJS::component() | `string $name = null` | Set the component name if provided or returns the current value
125 | ReactJS::data() | `array $data = null` | Set the component props if provided or returns the current value
126 | ReactJS::markup() | | Get the markup generated by react after render the component
127 | ReactJS::js() | `string $element` (selector of the container for the component) `$return_val = null` (if you provide a name, a variable will be created with the component) | Get js markup to call `React.renderComponent()`
128 |
129 | ## Configs
130 | Config | Type | Description
131 | --- | --- | ---
132 | basepath | string | (optional) basepath to your source files
133 | react_src | string | (optional) path to react_js source file. If you use Browserify, leave this empty
134 | src_files | array | list of source files necessary to run your code. If you use Browserify, pass only the bundle.
135 | react_prefix | string | (optional) If exists a path to access React object, pass the prefix in here (ex: `App.libs`).
136 | components_prefix | string | (optional) If exists a path to access your components, pass the prefix in here (ex: `App.components`).
137 |
138 | ## Change Log
139 | **[1.0.2] - 2015-03-23**
140 | - Support for react 0.13 API changes
141 |
142 |
143 | > Written with [StackEdit](https://stackedit.io/).
--------------------------------------------------------------------------------
/src/Sigep/LaravelReactJS/ReactJS.php:
--------------------------------------------------------------------------------
1 | v8 = new \V8Js();
77 |
78 | $this->app = $app;
79 | $this->basepath = $this->app['config']->get('reactjs::basepath');
80 | $this->react_src = $this->app['config']->get('reactjs::react_src');
81 | $this->src_files = $this->app['config']->get('reactjs::src_files');
82 | $this->react_prefix = $this->app['config']->get('reactjs::react_prefix');
83 | $this->components_prefix = $this->app['config']->get('reactjs::components_prefix');
84 |
85 | $this->checkFiles();
86 | $this->prepare();
87 | }
88 |
89 | /**
90 | * Checks if all source files exists
91 | * @throws \Exception
92 | */
93 | private function checkFiles()
94 | {
95 | if ($this->react_src && !file_exists($this->basepath . $this->react_src)) {
96 | throw new \Exception('React source file not found (' . $this->basepath . $this->react_src . ')');
97 | }
98 |
99 | foreach ($this->src_files as $file) {
100 | if (!file_exists($this->basepath . $file)) {
101 | throw new \Exception('Source file not found (' . $this->basepath . $file . ')');
102 | }
103 | }
104 | }
105 |
106 | /**
107 | * Concatenate source files and create a environment to run user code
108 | */
109 | private function prepare()
110 | {
111 | $this->src = [];
112 | $this->src[] = 'var console = {warn: function(){}, error: print, log: print}';
113 | $this->src[] = 'var window = {}';
114 |
115 | if ($this->react_src) {
116 | $this->src[] = file_get_contents($this->basepath . $this->react_src);
117 | $this->src[] = 'var React = window.React';
118 | }
119 |
120 | foreach ($this->src_files as $path) {
121 | $this->src[] = file_get_contents($this->basepath . $path);
122 | }
123 |
124 | $this->src = implode(";\n", $this->src);
125 |
126 | if ($this->react_prefix) {
127 | $this->react_prefix = "window.{$this->react_prefix}.";
128 | }
129 |
130 | if ($this->components_prefix) {
131 | $this->components_prefix = "window.{$this->components_prefix}.";
132 | }
133 | }
134 |
135 | /**
136 | * Setup error handler
137 | * This function will be executed when errors occurs
138 | * @param callable $errorHandler
139 | */
140 | public function setErrorHandler(callable $errorHandler)
141 | {
142 | $this->errorHandler = $errorHandler;
143 | }
144 |
145 | /**
146 | * Get and/or set component name
147 | * @param string $componentName
148 | * @return string
149 | */
150 | public function component($componentName = null)
151 | {
152 | if ($componentName && is_string($componentName)) {
153 | $this->component = $this->components_prefix . $componentName;
154 | }
155 |
156 | return $this->component;
157 | }
158 |
159 | /**
160 | * Get and/or set component data
161 | * @param array $data
162 | * @return mixed
163 | */
164 | public function data($data = null)
165 | {
166 | if (is_array($data)) {
167 | $this->data = $data;
168 | }
169 |
170 | return $this->data;
171 | }
172 |
173 | /**
174 | * Get markup string
175 | * If an error occurs, the error handler will be executed if exists, won't do anything otherwise
176 | * @return string
177 | */
178 | public function markup()
179 | {
180 | $react = $this->react_prefix . 'React';
181 | $component = $this->component;
182 |
183 | $code = $this->src;
184 | $code .= "var componentFactory = $react.createFactory($component);";
185 |
186 | $code .= sprintf(
187 | "$react.renderToString(componentFactory(%s));",
188 | json_encode($this->data)
189 | );
190 |
191 | try {
192 | return $this->v8->executeString($code);
193 | } catch (\Exception $e) {
194 | if (is_callable($this->errorHandler)) {
195 | call_user_func($this->errorHandler, $e->getMessage(), $code);
196 | }
197 |
198 | return '';
199 | }
200 | }
201 |
202 | /**
203 | * Get js markup to call renderComponent
204 | * @param string $element selector to wrapper element (will be used with document.querySelector())
205 | * @param string $return_var if a name is provided. assigns the component to a JavaScript variable with that name
206 | * @return string
207 | */
208 | public function js($element, $return_var = null)
209 | {
210 | $react = $this->react_prefix . 'React';
211 | $component = $this->component;
212 | $element = 'document.querySelector("' . $element . '")';
213 |
214 | $js = "var componentFactory = $react.createFactory($component);";
215 | $js .= ($return_var ? "var $return_var = " : '');
216 | $js .= sprintf(
217 | "$react.render(componentFactory(%s), %s);",
218 | json_encode($this->data),
219 | $element
220 | );
221 |
222 | return $js;
223 | }
224 | }
225 |
--------------------------------------------------------------------------------
/tests/js/react.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * React v0.13.1
3 | *
4 | * Copyright 2013-2015, Facebook, Inc.
5 | * All rights reserved.
6 | *
7 | * This source code is licensed under the BSD-style license found in the
8 | * LICENSE file in the root directory of this source tree. An additional grant
9 | * of patent rights can be found in the PATENTS file in the same directory.
10 | *
11 | */
12 | !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return function e(t,n,r){function o(a,u){if(!n[a]){if(!t[a]){var s="function"==typeof require&&require;if(!u&&s)return s(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a8&&11>=_),M=32,N=String.fromCharCode(M),I=d.topLevelTypes,T={beforeInput:{phasedRegistrationNames:{bubbled:y({onBeforeInput:null}),captured:y({onBeforeInputCapture:null})},dependencies:[I.topCompositionEnd,I.topKeyPress,I.topTextInput,I.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:y({onCompositionEnd:null}),captured:y({onCompositionEndCapture:null})},dependencies:[I.topBlur,I.topCompositionEnd,I.topKeyDown,I.topKeyPress,I.topKeyUp,I.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:y({onCompositionStart:null}),captured:y({onCompositionStartCapture:null})},dependencies:[I.topBlur,I.topCompositionStart,I.topKeyDown,I.topKeyPress,I.topKeyUp,I.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:y({onCompositionUpdate:null}),captured:y({onCompositionUpdateCapture:null})},dependencies:[I.topBlur,I.topCompositionUpdate,I.topKeyDown,I.topKeyPress,I.topKeyUp,I.topMouseDown]}},R=!1,P=null,w={eventTypes:T,extractEvents:function(e,t,n,r){return[s(e,t,n,r),p(e,t,n,r)]}};t.exports=w},{139:139,15:15,20:20,21:21,22:22,91:91,95:95}],4:[function(e,t){"use strict";function n(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var r={boxFlex:!0,boxFlexGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,strokeOpacity:!0},o=["Webkit","ms","Moz","O"];Object.keys(r).forEach(function(e){o.forEach(function(t){r[n(t,e)]=r[e]})});var i={background:{backgroundImage:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundColor:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0}},a={isUnitlessNumber:r,shorthandPropertyExpansions:i};t.exports=a},{}],5:[function(e,t){"use strict";var n=e(4),r=e(21),o=(e(106),e(111)),i=e(131),a=e(141),u=(e(150),a(function(e){return i(e)})),s="cssFloat";r.canUseDOM&&void 0===document.documentElement.style.cssFloat&&(s="styleFloat");var l={createMarkupForStyles:function(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];null!=r&&(t+=u(n)+":",t+=o(n,r)+";")}return t||null},setValueForStyles:function(e,t){var r=e.style;for(var i in t)if(t.hasOwnProperty(i)){var a=o(i,t[i]);if("float"===i&&(i=s),a)r[i]=a;else{var u=n.shorthandPropertyExpansions[i];if(u)for(var l in u)r[l]="";else r[i]=""}}}};t.exports=l},{106:106,111:111,131:131,141:141,150:150,21:21,4:4}],6:[function(e,t){"use strict";function n(){this._callbacks=null,this._contexts=null}var r=e(28),o=e(27),i=e(133);o(n.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){i(e.length===t.length),this._callbacks=null,this._contexts=null;for(var n=0,r=e.length;r>n;n++)e[n].call(t[n]);e.length=0,t.length=0}},reset:function(){this._callbacks=null,this._contexts=null},destructor:function(){this.reset()}}),r.addPoolingTo(n),t.exports=n},{133:133,27:27,28:28}],7:[function(e,t){"use strict";function n(e){return"SELECT"===e.nodeName||"INPUT"===e.nodeName&&"file"===e.type}function r(e){var t=_.getPooled(I.change,R,e);C.accumulateTwoPhaseDispatches(t),b.batchedUpdates(o,t)}function o(e){y.enqueueEvents(e),y.processEventQueue()}function i(e,t){T=e,R=t,T.attachEvent("onchange",r)}function a(){T&&(T.detachEvent("onchange",r),T=null,R=null)}function u(e,t,n){return e===N.topChange?n:void 0}function s(e,t,n){e===N.topFocus?(a(),i(t,n)):e===N.topBlur&&a()}function l(e,t){T=e,R=t,P=e.value,w=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(T,"value",A),T.attachEvent("onpropertychange",p)}function c(){T&&(delete T.value,T.detachEvent("onpropertychange",p),T=null,R=null,P=null,w=null)}function p(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==P&&(P=t,r(e))}}function d(e,t,n){return e===N.topInput?n:void 0}function f(e,t,n){e===N.topFocus?(c(),l(t,n)):e===N.topBlur&&c()}function h(e){return e!==N.topSelectionChange&&e!==N.topKeyUp&&e!==N.topKeyDown||!T||T.value===P?void 0:(P=T.value,R)}function m(e){return"INPUT"===e.nodeName&&("checkbox"===e.type||"radio"===e.type)}function v(e,t,n){return e===N.topClick?n:void 0}var g=e(15),y=e(17),C=e(20),E=e(21),b=e(85),_=e(93),x=e(134),D=e(136),M=e(139),N=g.topLevelTypes,I={change:{phasedRegistrationNames:{bubbled:M({onChange:null}),captured:M({onChangeCapture:null})},dependencies:[N.topBlur,N.topChange,N.topClick,N.topFocus,N.topInput,N.topKeyDown,N.topKeyUp,N.topSelectionChange]}},T=null,R=null,P=null,w=null,O=!1;E.canUseDOM&&(O=x("change")&&(!("documentMode"in document)||document.documentMode>8));var S=!1;E.canUseDOM&&(S=x("input")&&(!("documentMode"in document)||document.documentMode>9));var A={get:function(){return w.get.call(this)},set:function(e){P=""+e,w.set.call(this,e)}},k={eventTypes:I,extractEvents:function(e,t,r,o){var i,a;if(n(t)?O?i=u:a=s:D(t)?S?i=d:(i=h,a=f):m(t)&&(i=v),i){var l=i(e,t,r);if(l){var c=_.getPooled(I.change,l,o);return C.accumulateTwoPhaseDispatches(c),c}}a&&a(e,t,r)}};t.exports=k},{134:134,136:136,139:139,15:15,17:17,20:20,21:21,85:85,93:93}],8:[function(e,t){"use strict";var n=0,r={createReactRootIndex:function(){return n++}};t.exports=r},{}],9:[function(e,t){"use strict";function n(e,t,n){e.insertBefore(t,e.childNodes[n]||null)}var r=e(12),o=e(70),i=e(145),a=e(133),u={dangerouslyReplaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup,updateTextContent:i,processUpdates:function(e,t){for(var u,s=null,l=null,c=0;ct||r.hasOverloadedBooleanValue[e]&&t===!1}var r=e(10),o=e(143),i=(e(150),{createMarkupForID:function(e){return r.ID_ATTRIBUTE_NAME+"="+o(e)},createMarkupForProperty:function(e,t){if(r.isStandardName.hasOwnProperty(e)&&r.isStandardName[e]){if(n(e,t))return"";var i=r.getAttributeName[e];return r.hasBooleanValue[e]||r.hasOverloadedBooleanValue[e]&&t===!0?i:i+"="+o(t)}return r.isCustomAttribute(e)?null==t?"":e+"="+o(t):null},setValueForProperty:function(e,t,o){if(r.isStandardName.hasOwnProperty(t)&&r.isStandardName[t]){var i=r.getMutationMethod[t];if(i)i(e,o);else if(n(t,o))this.deleteValueForProperty(e,t);else if(r.mustUseAttribute[t])e.setAttribute(r.getAttributeName[t],""+o);else{var a=r.getPropertyName[t];r.hasSideEffects[t]&&""+e[a]==""+o||(e[a]=o)}}else r.isCustomAttribute(t)&&(null==o?e.removeAttribute(t):e.setAttribute(t,""+o))},deleteValueForProperty:function(e,t){if(r.isStandardName.hasOwnProperty(t)&&r.isStandardName[t]){var n=r.getMutationMethod[t];if(n)n(e,void 0);else if(r.mustUseAttribute[t])e.removeAttribute(r.getAttributeName[t]);else{var o=r.getPropertyName[t],i=r.getDefaultValueForProperty(e.nodeName,o);r.hasSideEffects[t]&&""+e[o]===i||(e[o]=i)}}else r.isCustomAttribute(t)&&e.removeAttribute(t)}});t.exports=i},{10:10,143:143,150:150}],12:[function(e,t){"use strict";function n(e){return e.substring(1,e.indexOf(" "))}var r=e(21),o=e(110),i=e(112),a=e(125),u=e(133),s=/^(<[^ \/>]+)/,l="data-danger-index",c={dangerouslyRenderMarkup:function(e){u(r.canUseDOM);for(var t,c={},p=0;ps;s++){var c=u[s];if(c){var p=c.extractEvents(e,t,r,i);p&&(a=o(a,p))}}return a},enqueueEvents:function(e){e&&(s=o(s,e))},processEventQueue:function(){var e=s;s=null,i(e,l),a(!s)},__purge:function(){u={}},__getListenerBank:function(){return u}};t.exports=p},{103:103,118:118,133:133,18:18,19:19}],18:[function(e,t){"use strict";function n(){if(a)for(var e in u){var t=u[e],n=a.indexOf(e);if(i(n>-1),!s.plugins[n]){i(t.extractEvents),s.plugins[n]=t;var o=t.eventTypes;for(var l in o)i(r(o[l],t,l))}}}function r(e,t,n){i(!s.eventNameDispatchConfigs.hasOwnProperty(n)),s.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var a in r)if(r.hasOwnProperty(a)){var u=r[a];o(u,t,n)}return!0}return e.registrationName?(o(e.registrationName,t,n),!0):!1}function o(e,t,n){i(!s.registrationNameModules[e]),s.registrationNameModules[e]=t,s.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var i=e(133),a=null,u={},s={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},injectEventPluginOrder:function(e){i(!a),a=Array.prototype.slice.call(e),n()},injectEventPluginsByName:function(e){var t=!1;for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];u.hasOwnProperty(r)&&u[r]===o||(i(!u[r]),u[r]=o,t=!0)}t&&n()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return s.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=s.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){a=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];s.plugins.length=0;var t=s.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=s.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=s},{133:133}],19:[function(e,t){"use strict";function n(e){return e===m.topMouseUp||e===m.topTouchEnd||e===m.topTouchCancel}function r(e){return e===m.topMouseMove||e===m.topTouchMove}function o(e){return e===m.topMouseDown||e===m.topTouchStart}function i(e,t){var n=e._dispatchListeners,r=e._dispatchIDs;if(Array.isArray(n))for(var o=0;oe&&n[e]===o[e];e++);var a=r-e;for(t=1;a>=t&&n[r-t]===o[i-t];t++);var u=t>1?1-t:void 0;return this._fallbackText=o.slice(e,u),this._fallbackText}}),r.addPoolingTo(n),t.exports=n},{128:128,27:27,28:28}],23:[function(e,t){"use strict";var n,r=e(10),o=e(21),i=r.injection.MUST_USE_ATTRIBUTE,a=r.injection.MUST_USE_PROPERTY,u=r.injection.HAS_BOOLEAN_VALUE,s=r.injection.HAS_SIDE_EFFECTS,l=r.injection.HAS_NUMERIC_VALUE,c=r.injection.HAS_POSITIVE_NUMERIC_VALUE,p=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE;if(o.canUseDOM){var d=document.implementation;n=d&&d.hasFeature&&d.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}var f={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:i|u,allowTransparency:i,alt:null,async:u,autoComplete:null,autoPlay:u,cellPadding:null,cellSpacing:null,charSet:i,checked:a|u,classID:i,className:n?i:a,cols:i|c,colSpan:null,content:null,contentEditable:null,contextMenu:i,controls:a|u,coords:null,crossOrigin:null,data:null,dateTime:i,defer:u,dir:null,disabled:i|u,download:p,draggable:null,encType:null,form:i,formAction:i,formEncType:i,formMethod:i,formNoValidate:u,formTarget:i,frameBorder:i,headers:null,height:i,hidden:i|u,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:a,label:null,lang:null,list:i,loop:a|u,manifest:i,marginHeight:null,marginWidth:null,max:null,maxLength:i,media:i,mediaGroup:null,method:null,min:null,multiple:a|u,muted:a|u,name:null,noValidate:u,open:u,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:a|u,rel:null,required:u,role:i,rows:i|c,rowSpan:null,sandbox:null,scope:null,scrolling:null,seamless:i|u,selected:a|u,shape:null,size:i|c,sizes:i,span:c,spellCheck:null,src:null,srcDoc:a,srcSet:i,start:l,step:null,style:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:a|s,width:i,wmode:i,autoCapitalize:null,autoCorrect:null,itemProp:i,itemScope:i|u,itemType:i,itemID:i,itemRef:i,property:null},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{autoCapitalize:"autocapitalize",autoComplete:"autocomplete",autoCorrect:"autocorrect",autoFocus:"autofocus",autoPlay:"autoplay",encType:"encoding",hrefLang:"hreflang",radioGroup:"radiogroup",spellCheck:"spellcheck",srcDoc:"srcdoc",srcSet:"srcset"}};t.exports=f},{10:10,21:21}],24:[function(e,t){"use strict";function n(e){s(null==e.props.checkedLink||null==e.props.valueLink)}function r(e){n(e),s(null==e.props.value&&null==e.props.onChange)}function o(e){n(e),s(null==e.props.checked&&null==e.props.onChange)}function i(e){this.props.valueLink.requestChange(e.target.value)}function a(e){this.props.checkedLink.requestChange(e.target.checked)}var u=e(76),s=e(133),l={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},c={Mixin:{propTypes:{value:function(e,t){return!e[t]||l[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:u.func}},getValue:function(e){return e.props.valueLink?(r(e),e.props.valueLink.value):e.props.value},getChecked:function(e){return e.props.checkedLink?(o(e),e.props.checkedLink.value):e.props.checked},getOnChange:function(e){return e.props.valueLink?(r(e),i):e.props.checkedLink?(o(e),a):e.props.onChange}};t.exports=c},{133:133,76:76}],25:[function(e,t){"use strict";function n(e){e.remove()}var r=e(30),o=e(103),i=e(118),a=e(133),u={trapBubbledEvent:function(e,t){a(this.isMounted());var n=this.getDOMNode();a(n);var i=r.trapBubbledEvent(e,t,n);this._localEventListeners=o(this._localEventListeners,i)},componentWillUnmount:function(){this._localEventListeners&&i(this._localEventListeners,n)}};t.exports=u},{103:103,118:118,133:133,30:30}],26:[function(e,t){"use strict";var n=e(15),r=e(112),o=n.topLevelTypes,i={eventTypes:null,extractEvents:function(e,t,n,i){if(e===o.topTouchStart){var a=i.target;a&&!a.onclick&&(a.onclick=r)}}};t.exports=i},{112:112,15:15}],27:[function(e,t){"use strict";function n(e){if(null==e)throw new TypeError("Object.assign target cannot be null or undefined");for(var t=Object(e),n=Object.prototype.hasOwnProperty,r=1;rc;c++){var d=u[c];a.hasOwnProperty(d)&&a[d]||(d===s.topWheel?l("wheel")?m.ReactEventListener.trapBubbledEvent(s.topWheel,"wheel",o):l("mousewheel")?m.ReactEventListener.trapBubbledEvent(s.topWheel,"mousewheel",o):m.ReactEventListener.trapBubbledEvent(s.topWheel,"DOMMouseScroll",o):d===s.topScroll?l("scroll",!0)?m.ReactEventListener.trapCapturedEvent(s.topScroll,"scroll",o):m.ReactEventListener.trapBubbledEvent(s.topScroll,"scroll",m.ReactEventListener.WINDOW_HANDLE):d===s.topFocus||d===s.topBlur?(l("focus",!0)?(m.ReactEventListener.trapCapturedEvent(s.topFocus,"focus",o),m.ReactEventListener.trapCapturedEvent(s.topBlur,"blur",o)):l("focusin")&&(m.ReactEventListener.trapBubbledEvent(s.topFocus,"focusin",o),m.ReactEventListener.trapBubbledEvent(s.topBlur,"focusout",o)),a[s.topBlur]=!0,a[s.topFocus]=!0):f.hasOwnProperty(d)&&m.ReactEventListener.trapBubbledEvent(d,f[d],o),a[d]=!0)}},trapBubbledEvent:function(e,t,n){return m.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return m.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(!p){var e=u.refreshScrollValues;
13 | m.ReactEventListener.monitorScrollValue(e),p=!0}},eventNameDispatchConfigs:o.eventNameDispatchConfigs,registrationNameModules:o.registrationNameModules,putListener:o.putListener,getListener:o.getListener,deleteListener:o.deleteListener,deleteAllListeners:o.deleteAllListeners});t.exports=m},{102:102,134:134,15:15,17:17,18:18,27:27,59:59}],31:[function(e,t){"use strict";var n=e(79),r=e(116),o=e(132),i=e(147),a={instantiateChildren:function(e){var t=r(e);for(var n in t)if(t.hasOwnProperty(n)){var i=t[n],a=o(i,null);t[n]=a}return t},updateChildren:function(e,t,a,u){var s=r(t);if(!s&&!e)return null;var l;for(l in s)if(s.hasOwnProperty(l)){var c=e&&e[l],p=c&&c._currentElement,d=s[l];if(i(p,d))n.receiveComponent(c,d,a,u),s[l]=c;else{c&&n.unmountComponent(c,l);var f=o(d,null);s[l]=f}}for(l in e)!e.hasOwnProperty(l)||s&&s.hasOwnProperty(l)||n.unmountComponent(e[l]);return s},unmountChildren:function(e){for(var t in e){var r=e[t];n.unmountComponent(r)}}};t.exports=a},{116:116,132:132,147:147,79:79}],32:[function(e,t){"use strict";function n(e,t){this.forEachFunction=e,this.forEachContext=t}function r(e,t,n,r){var o=e;o.forEachFunction.call(o.forEachContext,t,r)}function o(e,t,o){if(null==e)return e;var i=n.getPooled(t,o);d(e,r,i),n.release(i)}function i(e,t,n){this.mapResult=e,this.mapFunction=t,this.mapContext=n}function a(e,t,n,r){var o=e,i=o.mapResult,a=!i.hasOwnProperty(n);if(a){var u=o.mapFunction.call(o.mapContext,t,r);i[n]=u}}function u(e,t,n){if(null==e)return e;var r={},o=i.getPooled(r,t,n);return d(e,a,o),i.release(o),p.create(r)}function s(){return null}function l(e){return d(e,s,null)}var c=e(28),p=e(61),d=e(149),f=(e(150),c.twoArgumentPooler),h=c.threeArgumentPooler;c.addPoolingTo(n,f),c.addPoolingTo(i,h);var m={forEach:o,map:u,count:l};t.exports=m},{149:149,150:150,28:28,61:61}],33:[function(e,t){"use strict";function n(e,t){var n=x.hasOwnProperty(t)?x[t]:null;M.hasOwnProperty(t)&&g(n===b.OVERRIDE_BASE),e.hasOwnProperty(t)&&g(n===b.DEFINE_MANY||n===b.DEFINE_MANY_MERGED)}function r(e,t){if(t){g("function"!=typeof t),g(!p.isValidElement(t));var r=e.prototype;t.hasOwnProperty(E)&&D.mixins(e,t.mixins);for(var o in t)if(t.hasOwnProperty(o)&&o!==E){var i=t[o];if(n(r,o),D.hasOwnProperty(o))D[o](e,i);else{var s=x.hasOwnProperty(o),l=r.hasOwnProperty(o),c=i&&i.__reactDontBind,d="function"==typeof i,f=d&&!s&&!l&&!c;if(f)r.__reactAutoBindMap||(r.__reactAutoBindMap={}),r.__reactAutoBindMap[o]=i,r[o]=i;else if(l){var h=x[o];g(s&&(h===b.DEFINE_MANY_MERGED||h===b.DEFINE_MANY)),h===b.DEFINE_MANY_MERGED?r[o]=a(r[o],i):h===b.DEFINE_MANY&&(r[o]=u(r[o],i))}else r[o]=i}}}}function o(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in D;g(!o);var i=n in e;g(!i),e[n]=r}}}function i(e,t){g(e&&t&&"object"==typeof e&&"object"==typeof t);for(var n in t)t.hasOwnProperty(n)&&(g(void 0===e[n]),e[n]=t[n]);return e}function a(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return i(o,n),i(o,r),o}}function u(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function s(e,t){var n=t.bind(e);return n}function l(e){for(var t in e.__reactAutoBindMap)if(e.__reactAutoBindMap.hasOwnProperty(t)){var n=e.__reactAutoBindMap[t];e[t]=s(e,d.guard(n,e.constructor.displayName+"."+t))}}var c=e(34),p=(e(39),e(55)),d=e(58),f=e(65),h=e(66),m=(e(75),e(74),e(84)),v=e(27),g=e(133),y=e(138),C=e(139),E=(e(150),C({mixins:null})),b=y({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null}),_=[],x={mixins:b.DEFINE_MANY,statics:b.DEFINE_MANY,propTypes:b.DEFINE_MANY,contextTypes:b.DEFINE_MANY,childContextTypes:b.DEFINE_MANY,getDefaultProps:b.DEFINE_MANY_MERGED,getInitialState:b.DEFINE_MANY_MERGED,getChildContext:b.DEFINE_MANY_MERGED,render:b.DEFINE_ONCE,componentWillMount:b.DEFINE_MANY,componentDidMount:b.DEFINE_MANY,componentWillReceiveProps:b.DEFINE_MANY,shouldComponentUpdate:b.DEFINE_ONCE,componentWillUpdate:b.DEFINE_MANY,componentDidUpdate:b.DEFINE_MANY,componentWillUnmount:b.DEFINE_MANY,updateComponent:b.OVERRIDE_BASE},D={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n";return this._createOpenTagMarkupAndPutListeners(t)+this._createContentMarkup(t,r)+o},_createOpenTagMarkupAndPutListeners:function(e){var t=this._currentElement.props,n="<"+this._tag;for(var o in t)if(t.hasOwnProperty(o)){var i=t[o];if(null!=i)if(E.hasOwnProperty(o))r(this._rootNodeID,o,i,e);else{o===_&&(i&&(i=this._previousStyleCopy=h({},t.style)),i=a.createMarkupForStyles(i));var u=s.createMarkupForProperty(o,i);u&&(n+=" "+u)}}if(e.renderToStaticMarkup)return n+">";var l=s.createMarkupForID(this._rootNodeID);return n+" "+l+">"},_createContentMarkup:function(e,t){var n="";("listing"===this._tag||"pre"===this._tag||"textarea"===this._tag)&&(n="\n");var r=this._currentElement.props,o=r.dangerouslySetInnerHTML;if(null!=o){if(null!=o.__html)return n+o.__html}else{var i=b[typeof r.children]?r.children:null,a=null!=i?null:r.children;if(null!=i)return n+m(i);if(null!=a){var u=this.mountChildren(a,e,t);return n+u.join("")}}return n},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,r,o){n(this._currentElement.props),this._updateDOMProperties(t.props,e),this._updateDOMChildren(t.props,e,o)},_updateDOMProperties:function(e,t){var n,o,i,a=this._currentElement.props;for(n in e)if(!a.hasOwnProperty(n)&&e.hasOwnProperty(n))if(n===_){var s=this._previousStyleCopy;for(o in s)s.hasOwnProperty(o)&&(i=i||{},i[o]="");this._previousStyleCopy=null}else E.hasOwnProperty(n)?y(this._rootNodeID,n):(u.isStandardName[n]||u.isCustomAttribute(n))&&D.deletePropertyByID(this._rootNodeID,n);for(n in a){var l=a[n],c=n===_?this._previousStyleCopy:e[n];if(a.hasOwnProperty(n)&&l!==c)if(n===_)if(l&&(l=this._previousStyleCopy=h({},l)),c){for(o in c)!c.hasOwnProperty(o)||l&&l.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in l)l.hasOwnProperty(o)&&c[o]!==l[o]&&(i=i||{},i[o]=l[o])}else i=l;else E.hasOwnProperty(n)?r(this._rootNodeID,n,l,t):(u.isStandardName[n]||u.isCustomAttribute(n))&&D.updatePropertyByID(this._rootNodeID,n,l)}i&&D.updateStylesByID(this._rootNodeID,i)},_updateDOMChildren:function(e,t,n){var r=this._currentElement.props,o=b[typeof e.children]?e.children:null,i=b[typeof r.children]?r.children:null,a=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,u=r.dangerouslySetInnerHTML&&r.dangerouslySetInnerHTML.__html,s=null!=o?null:e.children,l=null!=i?null:r.children,c=null!=o||null!=a,p=null!=i||null!=u;null!=s&&null==l?this.updateChildren(null,t,n):c&&!p&&this.updateTextContent(""),null!=i?o!==i&&this.updateTextContent(""+i):null!=u?a!==u&&D.updateInnerHTMLByID(this._rootNodeID,u):null!=l&&this.updateChildren(l,t,n)},unmountComponent:function(){this.unmountChildren(),l.deleteAllListeners(this._rootNodeID),c.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null}},f.measureMethods(i,"ReactDOMComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent"}),h(i.prototype,i.Mixin,d.Mixin),i.injection={injectIDOperations:function(e){i.BackendIDOperations=D=e}},t.exports=i},{10:10,11:11,114:114,133:133,134:134,139:139,150:150,27:27,30:30,35:35,5:5,68:68,69:69,73:73}],43:[function(e,t){"use strict";var n=e(15),r=e(25),o=e(29),i=e(33),a=e(55),u=a.createFactory("form"),s=i.createClass({displayName:"ReactDOMForm",tagName:"FORM",mixins:[o,r],render:function(){return u(this.props)},componentDidMount:function(){this.trapBubbledEvent(n.topLevelTypes.topReset,"reset"),this.trapBubbledEvent(n.topLevelTypes.topSubmit,"submit")}});t.exports=s},{15:15,25:25,29:29,33:33,55:55}],44:[function(e,t){"use strict";var n=e(5),r=e(9),o=e(11),i=e(68),a=e(73),u=e(133),s=e(144),l={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},c={updatePropertyByID:function(e,t,n){var r=i.getNode(e);u(!l.hasOwnProperty(t)),null!=n?o.setValueForProperty(r,t,n):o.deleteValueForProperty(r,t)},deletePropertyByID:function(e,t,n){var r=i.getNode(e);u(!l.hasOwnProperty(t)),o.deleteValueForProperty(r,t,n)},updateStylesByID:function(e,t){var r=i.getNode(e);n.setValueForStyles(r,t)},updateInnerHTMLByID:function(e,t){var n=i.getNode(e);s(n,t)},updateTextContentByID:function(e,t){var n=i.getNode(e);r.updateTextContent(n,t)},dangerouslyReplaceNodeWithMarkupByID:function(e,t){var n=i.getNode(e);r.dangerouslyReplaceNodeWithMarkup(n,t)},dangerouslyProcessChildrenUpdates:function(e,t){for(var n=0;np;p++){var m=s[p];if(m!==a&&m.form===a.form){var v=l.getID(m);d(v);var g=h[v];d(g),c.asap(n,g)}}}return t}});t.exports=m},{11:11,133:133,2:2,24:24,27:27,29:29,33:33,55:55,68:68,85:85}],48:[function(e,t){"use strict";var n=e(29),r=e(33),o=e(55),i=(e(150),o.createFactory("option")),a=r.createClass({displayName:"ReactDOMOption",tagName:"OPTION",mixins:[n],componentWillMount:function(){},render:function(){return i(this.props,this.props.children)}});t.exports=a},{150:150,29:29,33:33,55:55}],49:[function(e,t){"use strict";function n(){if(this._pendingUpdate){this._pendingUpdate=!1;var e=a.getValue(this);null!=e&&this.isMounted()&&o(this,e)}}function r(e,t){if(null==e[t])return null;if(e.multiple){if(!Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to