diff --git a/client/components/steps/existing-store.jsx b/client/components/steps/existing-store.jsx
new file mode 100644
index 0000000..d089bb8
--- /dev/null
+++ b/client/components/steps/existing-store.jsx
@@ -0,0 +1,85 @@
+var React = require( 'react' ),
+ SiteStore = require( 'stores/site-store' ),
+ SetupProgressActions = require( 'actions/setup-progress-actions' ),
+ WelcomeSection = require( '../page/container' ),
+ Paths = require( 'constants/jetpack-onboarding-paths' ),
+ Button = require( '@automattic/dops-components/client/components/button' );
+
+var SelectDropdown = require( '@automattic/dops-components/client/components/select-dropdown' ),
+ DropdownItem = require( '@automattic/dops-components/client/components/select-dropdown/item' );
+
+function getJetpackState() {
+ const { is_shop } = JPS.bloginfo;
+ return {
+ site_title: SiteStore.getTitle(),
+ wooCommerceStatus: SiteStore.getWooCommerceStatus(),
+ wooCommerceSetupUrl: SiteStore.getWooCommerceSetupUrl(),
+ is_shop
+ };
+}
+
+const platforms = [
+ 'Shopify',
+ 'BigCommerce',
+ 'Magento',
+ 'WooCommerce',
+ 'osCommerce',
+ 'Wix',
+ 'Other'
+];
+
+module.exports = React.createClass( {
+
+ componentDidMount: function() {
+ SiteStore.addChangeListener( this._onChange );
+ },
+
+ componentWillUnmount: function() {
+ SiteStore.removeChangeListener( this._onChange );
+ },
+
+ _onChange: function() {
+ this.setState( getJetpackState() );
+ },
+
+ getInitialState: function() {
+ return getJetpackState();
+ },
+
+ submitStorePlatform: function( platform ) {
+ SetupProgressActions.completeStep( Paths.EXISTING_STORE_STEP_SLUG, { platform } );
+ this.goToJpoReview();
+ },
+
+ goToJpoReview: function() {
+ SetupProgressActions.setCurrentStep( Paths.REVIEW_STEP_SLUG );
+ },
+
+ render: function() {
+ if ( ! this.state.wooCommerceStatus ) {
+ this.goToJpoReview();
+ }
+
+ const platformSelections = platforms.map( ( platform, i ) => {
+ return (
+ {
+ this.submitStorePlatform( platform );
+ } }>{ platform }
+ );
+ } );
+
+ return (
+
+ Let's launch { this.state.site_title }
+ { 'Do you already have an existing e-commerce store?' }
+
+
+ { platformSelections }
+
+
+
+
+
+ );
+ }
+} );
diff --git a/client/components/steps/woocommerce.jsx b/client/components/steps/woocommerce.jsx
index dade965..6292e29 100644
--- a/client/components/steps/woocommerce.jsx
+++ b/client/components/steps/woocommerce.jsx
@@ -51,6 +51,10 @@ module.exports = React.createClass( {
SetupProgressActions.setCurrentStep( Paths.REVIEW_STEP_SLUG );
},
+ goToMigrateStep: function() {
+ SetupProgressActions.setCurrentStep( Paths.EXISTING_STORE_STEP_SLUG );
+ },
+
handleSubmit: function( event ) {
event.preventDefault();
SiteActions.installWooCommerce();
@@ -64,7 +68,7 @@ module.exports = React.createClass( {
-
+
@@ -77,7 +81,7 @@ module.exports = React.createClass( {
WooCommerce is ready to go
-
+
);
diff --git a/client/constants/jetpack-onboarding-paths.js b/client/constants/jetpack-onboarding-paths.js
index d0f7cf8..e67b82d 100644
--- a/client/constants/jetpack-onboarding-paths.js
+++ b/client/constants/jetpack-onboarding-paths.js
@@ -11,5 +11,6 @@ module.exports = {
JETPACK_MODULES_STEP_SLUG: 'jetpack',
CONTACT_PAGE_STEP_SLUG: 'contact-page',
BUSINESS_ADDRESS_SLUG: 'business-address',
- WOOCOMMERCE_SLUG: 'woocommerce'
+ WOOCOMMERCE_SLUG: 'woocommerce',
+ EXISTING_STORE_STEP_SLUG: 'existing-store'
};
diff --git a/client/welcome-panel.jsx b/client/welcome-panel.jsx
index 95632aa..a6be717 100644
--- a/client/welcome-panel.jsx
+++ b/client/welcome-panel.jsx
@@ -5,8 +5,7 @@ var React = require( 'react' ),
SetupProgressStore = require( 'stores/setup-progress-store' );
module.exports = function() {
- jQuery( document ).ready( function () {
-
+ jQuery( document ).ready( function() {
SetupProgressStore.init( [
// NOTE: You can have "static: true" to include un-clickable
// prefilled steps that act as though they've already been completed
@@ -18,43 +17,48 @@ module.exports = function() {
{
name: 'Site title',
slug: Paths.SITE_TITLE_STEP_SLUG,
- welcomeView: require('./components/steps/site-title')
+ welcomeView: require( './components/steps/site-title' ),
},
{
name: 'Is this a blog?',
slug: Paths.IS_BLOG_STEP_SLUG,
- welcomeView: require('./components/steps/layout')
+ welcomeView: require( './components/steps/layout' ),
},
{
name: 'Set your homepage',
slug: Paths.HOMEPAGE_STEP_SLUG,
- welcomeView: require('./components/steps/homepage')
+ welcomeView: require( './components/steps/homepage' ),
},
{
- name: "Contact Info",
+ name: 'Contact Info',
slug: Paths.CONTACT_PAGE_STEP_SLUG,
- welcomeView: require('./components/steps/contact')
+ welcomeView: require( './components/steps/contact' ),
},
{
name: 'Enable Jetpack',
slug: Paths.JETPACK_MODULES_STEP_SLUG,
neverSkip: true, // don't skip this even if it's been completed
- welcomeView: require('./components/steps/jetpack-jumpstart'),
+ welcomeView: require( './components/steps/jetpack-jumpstart' ),
},
{
name: 'Business Address',
slug: Paths.BUSINESS_ADDRESS_SLUG,
- welcomeView: require('./components/steps/business-address'),
+ welcomeView: require( './components/steps/business-address' ),
},
{
name: 'WooCommerce',
slug: Paths.WOOCOMMERCE_SLUG,
- welcomeView: require('./components/steps/woocommerce'),
+ welcomeView: require( './components/steps/woocommerce' ),
+ },
+ {
+ name: 'Existing Store',
+ slug: Paths.EXISTING_STORE_STEP_SLUG,
+ welcomeView: require( './components/steps/existing-store' ),
},
{
- name: "Review settings",
+ name: 'Review settings',
slug: Paths.REVIEW_STEP_SLUG,
- welcomeView: require('./components/steps/review'),
+ welcomeView: require( './components/steps/review' ),
includeInProgress: false,
neverSkip: true
}
diff --git a/css/scss/_existing-store.scss b/css/scss/_existing-store.scss
new file mode 100644
index 0000000..8c96ae7
--- /dev/null
+++ b/css/scss/_existing-store.scss
@@ -0,0 +1,20 @@
+.welcome__existing-store--dropdown {
+ .dops-select-dropdown__header {
+ height: auto;
+ }
+}
+
+.welcome__existing-store--button-container {
+ display: flex;
+ margin: auto;
+ max-width: 400px;
+ justify-content: space-between;
+
+ & > * {
+ flex: 0 auto;
+ }
+
+ button + button {
+ margin-left: 0;
+ }
+}
diff --git a/css/scss/welcome-panel.scss b/css/scss/welcome-panel.scss
index e54f14e..585431d 100644
--- a/css/scss/welcome-panel.scss
+++ b/css/scss/welcome-panel.scss
@@ -21,3 +21,4 @@ $very-light-gray: #f5f5f5;
@import 'jetpack-jumpstart';
@import 'business-address';
@import 'woocommerce';
+@import 'existing-store';
diff --git a/css/welcome-panel.css b/css/welcome-panel.css
index a96b7bf..a8b0fcb 100644
--- a/css/welcome-panel.css
+++ b/css/welcome-panel.css
@@ -582,3 +582,25 @@ img.welcome__get-started-image {
.welcome__container .welcome__woocommerce--install-container .welcome__woocommerce--checkbox {
float: none;
margin: 1px 8px 0 0; }
+
+.welcome__container .dops-select-dropdown__header {
+ height: auto; }
+
+.welcome__existing-store--dropdown .dops-select-dropdown__header {
+ height: auto; }
+
+.welcome__existing-store--button-container {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: auto;
+ max-width: 400px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .welcome__existing-store--button-container > * {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 auto;
+ flex: 0 auto; }
+ .welcome__existing-store--button-container button + button {
+ margin-left: 0; }
diff --git a/dist/jetpack-onboarding.css b/dist/jetpack-onboarding.css
index 33348d7..0c4b70c 100644
--- a/dist/jetpack-onboarding.css
+++ b/dist/jetpack-onboarding.css
@@ -132,3 +132,193 @@
width: 18px;
height: 18px;
top: 5px; }
+.dops-count {
+ display: inline-block;
+ padding: 0.0625rem 0.375rem;
+ border: solid 1px #87a6bc;
+ border-radius: 0.75rem;
+ font-size: 0.6875rem;
+ font-weight: 600;
+ line-height: 0.875rem;
+ color: #87a6bc;
+ text-align: center; }
+/**
+ * Select Dropdown
+ */
+.dops-select-dropdown {
+ height: 43px; }
+ .dops-select-dropdown.is-compact {
+ height: 28px; }
+
+.dops-select-dropdown__container {
+ position: relative;
+ overflow: hidden;
+ display: inline-block;
+ width: auto;
+ max-width: 100%; }
+ .dops-select-dropdown.is-open .dops-select-dropdown__container {
+ z-index: 170; }
+ .dops-accessible-focus .dops-select-dropdown__container:focus,
+ .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container {
+ z-index: 170;
+ box-shadow: 0 0 0 2px #78dcfa; }
+ .dops-accessible-focus .dops-select-dropdown__container:focus .select-dropdown__header,
+ .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container .select-dropdown__header {
+ border-color: #0087be; }
+ .dops-accessible-focus .dops-select-dropdown__container:focus {
+ border-color: #00aadc;
+ box-shadow: 0 0 0 2px #78dcfa;
+ outline: 0;
+ border-radius: 4px; }
+
+.dops-select-dropdown__header {
+ padding: 11px 44px 11px 16px;
+ border-style: solid;
+ border-color: #c8d7e1;
+ border-width: 1px 1px 2px;
+ border-radius: 4px;
+ background-color: white;
+ font-size: 14px;
+ font-weight: 600;
+ line-height: 18px;
+ height: 18px;
+ color: #2e4453;
+ -webkit-transition: background-color 0.2s ease;
+ transition: background-color 0.2s ease;
+ cursor: pointer; }
+ .dops-select-dropdown__header::after {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ vertical-align: middle;
+ font: normal 16px/1 'Dashicons';
+ content: '\F347';
+ position: absolute;
+ right: 13px;
+ top: 12px;
+ display: block;
+ line-height: 18px;
+ color: rgba(135, 166, 188, 0.5); }
+ .is-compact .dops-select-dropdown__header::after {
+ right: 4px;
+ top: 4px; }
+ .is-compact .dops-select-dropdown__header {
+ padding: 7px;
+ color: #668eaa;
+ font-size: 11px;
+ line-height: 1;
+ text-transform: uppercase; }
+ .is-compact .dops-select-dropdown__header .dops-count {
+ border-width: 0;
+ margin-left: 0;
+ line-height: 1; }
+ .dops-select-dropdown.is-open .dops-select-dropdown__header {
+ border-radius: 4px 4px 0 0;
+ box-shadow: none;
+ background-color: #f3f6f8; }
+ .dops-select-dropdown.is-open .dops-select-dropdown__header::after {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ vertical-align: middle;
+ font: normal 16px/1 'Dashicons';
+ content: '\F343'; }
+ .dops-select-dropdown__header .dops-count {
+ margin-left: 8px; }
+
+.dops-select-dropdown__header-text {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden; }
+
+.dops-select-dropdown__options {
+ visibility: hidden;
+ height: 0;
+ box-sizing: border-box;
+ padding: 0;
+ list-style: none;
+ margin: -2px 0 0 0;
+ background-color: white;
+ border: 1px solid #c8d7e1;
+ border-radius: 0 0 4px 4px; }
+ .dops-accessible-focus .dops-select-dropdown__options {
+ border: solid 1px #0087be;
+ border-top-color: #c8d7e1; }
+ .dops-select-dropdown.is-open .dops-select-dropdown__options {
+ visibility: visible;
+ height: auto; }
+
+.dops-select-dropdown__option:last-child .dops-select-dropdown__item {
+ border-radius: 0 0 4px 4px; }
+
+.dops-select-dropdown__item,
+.dops-select-dropdown__item-text {
+ padding: 11px 44px 11px 16px; }
+
+.dops-select-dropdown__item {
+ display: block;
+ position: relative;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 18px;
+ color: #2e4453;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: pointer; }
+ .dops-select-dropdown__item::before {
+ content: attr(data-bold-text);
+ font-weight: 700;
+ opacity: 0; }
+ .dops-select-dropdown__item:visited {
+ color: #2e4453; }
+ .dops-select-dropdown__item.is-selected {
+ background-color: #00aadc;
+ color: white; }
+ .dops-select-dropdown__item.is-disabled {
+ background-color: white;
+ color: #87a6bc;
+ cursor: default;
+ opacity: .5; }
+ .notouch .dops-select-dropdown__item:hover {
+ color: #00aadc; }
+ .notouch .dops-select-dropdown__item.is-selected:hover {
+ color: white; }
+
+.dops-select-dropdown__item-text {
+ padding-right: 16px;
+ box-sizing: border-box;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ color: inherit;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .dops-select-dropdown__item-text .dops-count {
+ color: inherit;
+ border-color: inherit; }
+
+.dops-select-dropdown__separator {
+ border-top: 1px solid #c8d7e1;
+ display: block;
+ margin: 8px 0; }
+
+.dops-select-dropdown__label {
+ display: block;
+ color: #a8bece;
+ margin-top: 5px;
+ line-height: 20px; }
+ .dops-select-dropdown__label label {
+ font-size: 12px;
+ text-transform: uppercase;
+ padding: 0px 16px 0px 16px; }
diff --git a/dist/jetpack-onboarding.js b/dist/jetpack-onboarding.js
index 1af84ca..b4deabb 100644
--- a/dist/jetpack-onboarding.js
+++ b/dist/jetpack-onboarding.js
@@ -24,7 +24,6 @@ webpackJsonp([1],[
module.exports = function () {
jQuery(document).ready(function () {
-
SetupProgressStore.init([
// NOTE: You can have "static: true" to include un-clickable
// prefilled steps that act as though they've already been completed
@@ -46,7 +45,7 @@ webpackJsonp([1],[
slug: Paths.HOMEPAGE_STEP_SLUG,
welcomeView: __webpack_require__(263)
}, {
- name: "Contact Info",
+ name: 'Contact Info',
slug: Paths.CONTACT_PAGE_STEP_SLUG,
welcomeView: __webpack_require__(264)
}, {
@@ -63,9 +62,13 @@ webpackJsonp([1],[
slug: Paths.WOOCOMMERCE_SLUG,
welcomeView: __webpack_require__(269)
}, {
- name: "Review settings",
+ name: 'Existing Store',
+ slug: Paths.EXISTING_STORE_STEP_SLUG,
+ welcomeView: __webpack_require__(270)
+ }, {
+ name: 'Review settings',
slug: Paths.REVIEW_STEP_SLUG,
- welcomeView: __webpack_require__(270),
+ welcomeView: __webpack_require__(366),
includeInProgress: false,
neverSkip: true
}]);
@@ -1570,7 +1573,8 @@ webpackJsonp([1],[
JETPACK_MODULES_STEP_SLUG: 'jetpack',
CONTACT_PAGE_STEP_SLUG: 'contact-page',
BUSINESS_ADDRESS_SLUG: 'business-address',
- WOOCOMMERCE_SLUG: 'woocommerce'
+ WOOCOMMERCE_SLUG: 'woocommerce',
+ EXISTING_STORE_STEP_SLUG: 'existing-store'
};
/***/ },
@@ -5441,6 +5445,10 @@ webpackJsonp([1],[
SetupProgressActions.setCurrentStep(Paths.REVIEW_STEP_SLUG);
},
+ goToMigrateStep: function goToMigrateStep() {
+ SetupProgressActions.setCurrentStep(Paths.EXISTING_STORE_STEP_SLUG);
+ },
+
handleSubmit: function handleSubmit(event) {
event.preventDefault();
SiteActions.installWooCommerce();
@@ -5466,7 +5474,7 @@ webpackJsonp([1],[
{ className: 'welcome-submit', primary: true, type: 'submit' },
'Install WooCommerce'
),
- React.createElement(SkipButton, null)
+ React.createElement(SkipButton, { handleSkip: this.goToJpoReview })
)
)
);
@@ -5491,7 +5499,7 @@ webpackJsonp([1],[
),
React.createElement(
Button,
- { onClick: this.goToJpoReview },
+ { onClick: this.goToMigrateStep },
'Not right now'
)
)
@@ -5524,34 +5532,31 @@ webpackJsonp([1],[
'use strict';
var React = __webpack_require__(4),
- Button = __webpack_require__(224),
SiteStore = __webpack_require__(215),
- Paths = __webpack_require__(175),
- Dashicon = __webpack_require__(271),
SetupProgressActions = __webpack_require__(174),
- WelcomeSection = __webpack_require__(259);
+ WelcomeSection = __webpack_require__(259),
+ Paths = __webpack_require__(175),
+ Button = __webpack_require__(224);
+
+ var SelectDropdown = __webpack_require__(271),
+ DropdownItem = __webpack_require__(357);
+
+ function getJetpackState() {
+ var is_shop = JPS.bloginfo.is_shop;
- function getSiteState() {
return {
site_title: SiteStore.getTitle(),
- contactUrl: SiteStore.getContactPageEditURL(),
- welcomeUrl: SiteStore.getWelcomePageEditURL(),
- newsUrl: SiteStore.getNewsPageEditURL(),
- isJPConnected: SiteStore.getJetpackConfigured(),
- layout: SiteStore.getLayout(),
wooCommerceStatus: SiteStore.getWooCommerceStatus(),
wooCommerceSetupUrl: SiteStore.getWooCommerceSetupUrl(),
- pluginsUrl: SiteStore.getPluginsUrl()
+ is_shop: is_shop
};
}
- var AdvancedSettingsStep = React.createClass({
- displayName: 'AdvancedSettingsStep',
+ var platforms = ['Shopify', 'BigCommerce', 'Magento', 'WooCommerce', 'osCommerce', 'Wix', 'Other'];
+ module.exports = React.createClass({
+ displayName: 'exports',
- getInitialState: function getInitialState() {
- return getSiteState();
- },
componentDidMount: function componentDidMount() {
SiteStore.addChangeListener(this._onChange);
@@ -5562,92 +5567,42 @@ webpackJsonp([1],[
},
_onChange: function _onChange() {
- this.setState(getSiteState());
+ this.setState(getJetpackState());
},
- handleSkipTo: function handleSkipTo(slug, event) {
- event.preventDefault();
- SetupProgressActions.setCurrentStep(slug);
+ getInitialState: function getInitialState() {
+ return getJetpackState();
},
- handleDismiss: function handleDismiss(event) {
- event.preventDefault();
- SetupProgressActions.closeJPO();
+ submitStorePlatform: function submitStorePlatform(platform) {
+ SetupProgressActions.completeStep(Paths.EXISTING_STORE_STEP_SLUG, { platform: platform });
+ this.goToJpoReview();
},
- renderWooCommerceStatus: function renderWooCommerceStatus() {
- var _JPS$bloginfo = JPS.bloginfo,
- is_shop = _JPS$bloginfo.is_shop,
- type = _JPS$bloginfo.type;
+ goToJpoReview: function goToJpoReview() {
+ SetupProgressActions.setCurrentStep(Paths.REVIEW_STEP_SLUG);
+ },
- if (type !== 'business') {
- return null;
+ render: function render() {
+ var _this = this;
+
+ if (!this.state.wooCommerceStatus) {
+ this.goToJpoReview();
}
- if (this.state.wooCommerceStatus) {
- return React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'yes' }),
- ' WooCommerce Installed! ',
- React.createElement(
- 'a',
- { href: this.state.wooCommerceSetupUrl },
- 'Set up shop'
- )
- );
- } else if (!is_shop) {
- return React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'no' }),
- ' WooCommerce not installed. ',
- React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.WOOCOMMERCE_SLUG) },
- 'Install WooCommerce?'
- )
- );
- } else {
+ var platformSelections = platforms.map(function (platform, i) {
return React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'no' }),
- ' Error installing WooCommerce ',
- React.createElement(
- 'a',
- { href: this.state.pluginsUrl },
- 'Try manual installation'
- )
+ DropdownItem,
+ { key: i, onClick: function onClick() {
+ _this.submitStorePlatform(platform);
+ } },
+ platform
);
- }
- },
+ });
- render: function render() {
- var contactProps = {};
- if (this.state.contactUrl) {
- contactProps.href = this.state.contactUrl;
- } else {
- contactProps.href = '#';
- contactProps.onClick = this.handleSkipTo.bind(this, Paths.CONTACT_PAGE_STEP_SLUG);
- }
return React.createElement(
WelcomeSection,
- { id: 'welcome__review' },
- React.createElement(
- 'div',
- { className: 'welcome__dismiss' },
- React.createElement(
- 'a',
- { href: '#', onClick: this.handleDismiss },
- React.createElement(Dashicon, { name: 'dismiss' }),
- React.createElement(
- 'span',
- { className: 'screen-reader-text' },
- 'Dismiss'
- )
- )
- ),
+ { id: 'welcome__jetpack' },
React.createElement(
'h1',
null,
@@ -5660,151 +5615,3982 @@ webpackJsonp([1],[
),
React.createElement(
'p',
- { className: 'welcome__callout welcome__review--callout' },
- 'Great Work!'
+ { className: 'welcome__callout welcome__jetpack--callout' },
+ 'Do you already have an existing e-commerce store?'
),
React.createElement(
'div',
- { className: 'welcome__review-cols' },
+ { className: 'welcome__existing-store--button-container welcome__button-container' },
React.createElement(
- 'div',
- { className: 'welcome__review-col' },
- React.createElement(
- 'ul',
- { className: 'welcome__review-list' },
- React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'yes' }),
- ' Title and description ',
- React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.SITE_TITLE_STEP_SLUG) },
- '(edit)'
- )
- ),
- React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'yes' }),
- ' Homepage layout ',
- React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.IS_BLOG_STEP_SLUG) },
- '(edit)'
- ),
- this.state.layout !== 'blog' ? React.createElement(
- 'ul',
- null,
- React.createElement(
- 'li',
- null,
- React.createElement(
- 'a',
- { href: this.state.welcomeUrl },
- 'Edit your Welcome page'
- )
- ),
- this.state.layout !== 'website' ? React.createElement(
- 'li',
- null,
- React.createElement(
- 'a',
- { href: this.state.newsUrl },
- 'Edit your News and Updates page'
- )
- ) : null
- ) : null
- ),
- React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'yes' }),
- ' ',
- React.createElement(
- 'em',
- null,
- 'Contact Us'
- ),
- ' page ',
- React.createElement(
- 'a',
- contactProps,
- '(edit)'
- ),
- !this.state.isJPConnected ? React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
- ' Requires a Jetpack Connection '
- ) : null
- ),
- React.createElement(
- 'li',
- null,
- React.createElement(Dashicon, { name: 'yes' }),
- this.state.isJPConnected ? React.createElement(
- 'a',
- { href: JPS.steps.advanced_settings.jetpack_dash },
- 'Jetpack: '
- ) : React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
- 'Connect Jetpack: '
- ),
- 'increase visitors and improve security'
- ),
- JPS.bloginfo.type === 'business' ? React.createElement(
- 'li',
- null,
- JPS.steps.business_address ? React.createElement(Dashicon, { name: 'yes' }) : React.createElement(Dashicon, { name: 'no' }),
- ' ',
- React.createElement(
- 'em',
- null,
- 'Business Address'
- ),
- ' page ',
- React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.BUSINESS_ADDRESS_SLUG) },
- '(edit)'
- ),
- !this.state.isJPConnected ? React.createElement(
- 'a',
- { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
- ' Requires a Jetpack Connection '
- ) : null
- ) : null,
- this.renderWooCommerceStatus()
- )
+ SelectDropdown,
+ { selectedText: 'Yes, it\'s powered by\u2026', className: 'welcome__existing-store--dropdown' },
+ platformSelections
),
React.createElement(
- 'div',
- { className: 'welcome__review-col welcome__review-themes' },
- React.createElement('img', { src: JPS.base_url + '/img/jpo-themes.png' }),
- React.createElement(
- 'p',
- null,
- React.createElement(
- Button,
- { href: JPS.steps.advanced_settings.customize_url },
- 'Customize your site'
- )
- )
+ Button,
+ { primary: true, onClick: this.goToJpoReview },
+ 'Next'
+ ),
+ React.createElement(
+ Button,
+ { onClick: this.goToJpoReview },
+ 'Nope'
)
)
);
}
});
- module.exports = AdvancedSettingsStep;
-
/***/ },
/* 271 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+ var _reactDom = __webpack_require__(33);
+
+ var _reactDom2 = _interopRequireDefault(_reactDom);
+
+ var _react = __webpack_require__(4);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _find = __webpack_require__(272);
+
+ var _find2 = _interopRequireDefault(_find);
+
+ var _filter = __webpack_require__(350);
+
+ var _filter2 = _interopRequireDefault(_filter);
+
+ var _findIndex = __webpack_require__(353);
+
+ var _findIndex2 = _interopRequireDefault(_findIndex);
+
+ var _map = __webpack_require__(354);
+
+ var _map2 = _interopRequireDefault(_map);
+
+ var _result = __webpack_require__(356);
+
+ var _result2 = _interopRequireDefault(_result);
+
+ var _classnames = __webpack_require__(254);
+
+ var _classnames2 = _interopRequireDefault(_classnames);
+
+ var _item = __webpack_require__(357);
+
+ var _item2 = _interopRequireDefault(_item);
+
+ var _separator = __webpack_require__(363);
+
+ var _separator2 = _interopRequireDefault(_separator);
+
+ var _label = __webpack_require__(364);
+
+ var _label2 = _interopRequireDefault(_label);
+
+ var _count = __webpack_require__(358);
+
+ var _count2 = _interopRequireDefault(_count);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** @ssr-ready **/
+
+ /**
+ * External Dependencies
+ */
+
+
+ /**
+ * Internal dependencies
+ */
+
+
+ __webpack_require__(365);
+
+ /**
+ * Module variables
+ */
+ var Component = _react2.default.Component,
+ PropTypes = _react2.default.PropTypes;
+
+ var noop = function noop() {};
+
+ /**
+ * SelectDropdown
+ */
+
+ var SelectDropdown = function (_Component) {
+ _inherits(SelectDropdown, _Component);
+
+ function SelectDropdown(props) {
+ _classCallCheck(this, SelectDropdown);
+
+ // bounds
+ var _this = _possibleConstructorReturn(this, (SelectDropdown.__proto__ || Object.getPrototypeOf(SelectDropdown)).call(this, props));
+
+ _this.navigateItem = _this.navigateItem.bind(_this);
+ _this.toggleDropdown = _this.toggleDropdown.bind(_this);
+ _this.handleOutsideClick = _this.handleOutsideClick.bind(_this);
+
+ // state
+ var initialState = { isOpen: false };
+
+ if (props.options.length) {
+ initialState.selected = _this.getInitialSelectedItem(props);
+ }
+
+ _this.state = initialState;
+ return _this;
+ }
+
+ _createClass(SelectDropdown, [{
+ key: 'componentWillMount',
+ value: function componentWillMount() {
+ this.setState({
+ instanceId: ++SelectDropdown.instances
+ });
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(nextProps) {
+ if (this.state.isOpen) {
+ this.closeDropdown();
+ }
+
+ if (typeof this.state.selected !== 'undefined' && this.props.initialSelected !== nextProps.initialSelected) {
+ this.setState({ selected: nextProps.initialSelected });
+ }
+ }
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ window.removeEventListener('click', this.handleOutsideClick);
+ }
+ }, {
+ key: 'componentDidUpdate',
+ value: function componentDidUpdate(prevProps, prevState) {
+ if (this.state.isOpen) {
+ window.addEventListener('click', this.handleOutsideClick);
+ } else {
+ window.removeEventListener('click', this.handleOutsideClick);
+ }
+
+ if (this.state.isOpen !== prevState.isOpen) {
+ this.props.onToggle({
+ target: this,
+ open: this.state.isOpen
+ });
+ }
+ }
+ }, {
+ key: 'getInitialSelectedItem',
+ value: function getInitialSelectedItem(props) {
+ props = props || this.props;
+
+ if (props.initialSelected) {
+ return props.initialSelected;
+ }
+
+ if (!props.options.length) {
+ return;
+ }
+
+ var selectedItem = (0, _find2.default)(props.options, function (value) {
+ return !value.isLabel;
+ });
+ return selectedItem && selectedItem.value;
+ }
+ }, {
+ key: 'dropdownOptions',
+ value: function dropdownOptions() {
+ var refIndex = 0;
+ var self = this;
+
+ if (this.props.children) {
+ // add keys and refs to children
+ return _react2.default.Children.map(this.props.children, function (child, index) {
+ if (!child) {
+ return null;
+ }
+
+ var newChild = _react2.default.cloneElement(child, {
+ ref: child.type === _item2.default ? 'item-' + refIndex : null,
+ key: 'item-' + index,
+ onClick: function onClick(event) {
+ self.refs.dropdownContainer.focus();
+ if (typeof child.props.onClick === 'function') {
+ child.props.onClick(event);
+ }
+ }
+ });
+
+ if (child.type === _item2.default) {
+ refIndex++;
+ }
+
+ return newChild;
+ }, this);
+ }
+
+ return this.props.options.map(function (item, index) {
+ if (!item) {
+ return _react2.default.createElement(_separator2.default, {
+ key: 'dropdown-separator-' + this.state.instanceId + '-' + index
+ });
+ }
+
+ if (item.isLabel) {
+ return _react2.default.createElement(
+ _label2.default,
+ {
+ key: 'dropdown-label-' + this.state.instanceId + '-' + index
+ },
+ item.label
+ );
+ }
+
+ var dropdownItem = _react2.default.createElement(
+ _item2.default,
+ {
+ key: 'dropdown-item-' + this.state.instanceId + '-' + item.value,
+ ref: 'item-' + refIndex,
+ selected: this.state.selected === item.value,
+ onClick: this.onSelectItem(item),
+ path: item.path
+ },
+ item.label
+ );
+
+ refIndex++;
+
+ return dropdownItem;
+ }, this);
+ }
+ }, {
+ key: 'render',
+ value: function render() {
+ var dropdownClasses = {
+ 'dops-select-dropdown': true,
+ 'is-compact': this.props.compact,
+ 'is-open': this.state.isOpen
+ };
+
+ if (this.props.className) {
+ this.props.className.split(' ').forEach(function (className) {
+ dropdownClasses[className] = true;
+ });
+ }
+
+ var dropdownClassName = (0, _classnames2.default)(dropdownClasses);
+ var selectedText = this.props.selectedText ? this.props.selectedText : (0, _result2.default)((0, _find2.default)(this.props.options, { value: this.state.selected }), 'label');
+
+ return _react2.default.createElement(
+ 'div',
+ { style: this.props.style, className: dropdownClassName },
+ _react2.default.createElement(
+ 'div',
+ {
+ ref: 'dropdownContainer',
+ className: 'dops-select-dropdown__container',
+ valueLink: this.props.valueLink,
+ onKeyDown: this.navigateItem,
+ tabIndex: this.props.tabIndex || 0,
+ 'aria-haspopup': 'true',
+ 'aria-owns': 'select-submenu-' + this.state.instanceId,
+ 'aria-controls': 'select-submenu-' + this.state.instanceId,
+ 'aria-expanded': this.state.isOpen,
+ onClick: this.toggleDropdown
+ },
+ _react2.default.createElement(
+ 'div',
+ {
+ id: 'select-dropdown-' + this.state.instanceId,
+ className: 'dops-select-dropdown__header'
+ },
+ _react2.default.createElement(
+ 'span',
+ { className: 'dops-select-dropdown__header-text' },
+ selectedText,
+ 'number' === typeof this.props.selectedCount && _react2.default.createElement(_count2.default, { count: this.props.selectedCount })
+ )
+ ),
+ _react2.default.createElement(
+ 'ul',
+ {
+ id: 'select-submenu-' + this.state.instanceId,
+ className: 'dops-select-dropdown__options',
+ role: 'menu',
+ 'aria-labelledby': 'select-dropdown-' + this.state.instanceId,
+ 'aria-expanded': this.state.isOpen
+ },
+ this.dropdownOptions()
+ )
+ )
+ );
+ }
+ }, {
+ key: 'toggleDropdown',
+ value: function toggleDropdown() {
+ this.setState({
+ isOpen: !this.state.isOpen
+ });
+ }
+ }, {
+ key: 'openDropdown',
+ value: function openDropdown() {
+ this.setState({
+ isOpen: true
+ });
+ }
+ }, {
+ key: 'closeDropdown',
+ value: function closeDropdown() {
+ if (this.state.isOpen) {
+ delete this.focused;
+ this.setState({
+ isOpen: false
+ });
+ }
+ }
+ }, {
+ key: 'onSelectItem',
+ value: function onSelectItem(option) {
+ return this.selectItem.bind(this, option);
+ }
+ }, {
+ key: 'selectItem',
+ value: function selectItem(option) {
+ if (!option) {
+ return;
+ }
+
+ if (this.props.onSelect) {
+ this.props.onSelect(option);
+ }
+
+ this.setState({
+ selected: option.value
+ });
+
+ this.refs.dropdownContainer.focus();
+ }
+ }, {
+ key: 'navigateItem',
+ value: function navigateItem(event) {
+ switch (event.keyCode) {
+ case 9:
+ //tab
+ this.navigateItemByTabKey(event);
+ break;
+ case 32: // space
+ case 13:
+ // enter
+ event.preventDefault();
+ this.activateItem();
+ break;
+ case 38:
+ // up arrow
+ event.preventDefault();
+ this.focusSibling('previous');
+ this.openDropdown();
+ break;
+ case 40:
+ // down arrow
+ event.preventDefault();
+ this.focusSibling('next');
+ this.openDropdown();
+ break;
+ case 27:
+ // escape
+ event.preventDefault();
+ this.closeDropdown();
+ this.refs.dropdownContainer.focus();
+ break;
+ }
+ }
+ }, {
+ key: 'navigateItemByTabKey',
+ value: function navigateItemByTabKey(event) {
+ var direction;
+ if (!this.state.isOpen) {
+ return;
+ }
+ event.preventDefault();
+ direction = event.shiftKey ? 'previous' : 'next';
+ this.focusSibling(direction);
+ }
+ }, {
+ key: 'activateItem',
+ value: function activateItem() {
+ if (!this.state.isOpen) {
+ return this.openDropdown();
+ }
+ document.activeElement.click();
+ }
+ }, {
+ key: 'focusSibling',
+ value: function focusSibling(direction) {
+ var increment, items, focusedIndex, newIndex;
+
+ // the initial up-arrow/down-arrow should only open the menu
+ if (!this.state.isOpen) {
+ return;
+ }
+
+ if (this.props.options.length) {
+ items = (0, _map2.default)((0, _filter2.default)(this.props.options, function (item) {
+ return item && !item.isLabel;
+ }), 'value');
+
+ focusedIndex = typeof this.focused === 'number' ? this.focused : items.indexOf(this.state.selected);
+ } else {
+ items = (0, _filter2.default)(this.props.children, function (item) {
+ return item.type === _item2.default;
+ });
+
+ focusedIndex = typeof this.focused === 'number' ? this.focused : (0, _findIndex2.default)(items, function (item) {
+ return item.props.selected;
+ });
+ }
+
+ increment = direction === 'previous' ? -1 : 1;
+ newIndex = focusedIndex + increment;
+
+ if (newIndex >= items.length || newIndex < 0) {
+ return;
+ }
+
+ _reactDom2.default.findDOMNode(this.refs['item-' + newIndex].refs.itemLink).focus();
+ this.focused = newIndex;
+ }
+ }, {
+ key: 'handleOutsideClick',
+ value: function handleOutsideClick(event) {
+ if (!_reactDom2.default.findDOMNode(this.refs.dropdownContainer).contains(event.target)) {
+ this.closeDropdown();
+ }
+ }
+ }]);
+
+ return SelectDropdown;
+ }(Component);
+
+ ;
+
+ SelectDropdown.defaultProps = {
+ options: [],
+ onSelect: noop,
+ onToggle: noop,
+ style: {}
+ };
+
+ SelectDropdown.propTypes = {
+ selectedText: PropTypes.string,
+ selectedCount: PropTypes.number,
+ initialSelected: PropTypes.string,
+ className: PropTypes.string,
+ style: PropTypes.object,
+ onSelect: PropTypes.func,
+ onToggle: PropTypes.func,
+ focusSibling: PropTypes.func,
+ tabIndex: PropTypes.number,
+ options: PropTypes.arrayOf(PropTypes.shape({
+ value: PropTypes.string.isRequired,
+ label: PropTypes.string.isRequired,
+ path: PropTypes.string
+ }))
+ };
+
+ // statics
+ SelectDropdown.instances = 0;
+
+ exports.default = SelectDropdown;
+ module.exports = exports['default'];
+
+/***/ },
+/* 272 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseEach = __webpack_require__(273),
+ baseFind = __webpack_require__(278),
+ baseFindIndex = __webpack_require__(279),
+ baseIteratee = __webpack_require__(280),
+ isArray = __webpack_require__(251);
+
+ /**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.find(users, function(o) { return o.age < 40; });
+ * // => object for 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.find(users, { 'age': 1, 'active': true });
+ * // => object for 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.find(users, ['active', false]);
+ * // => object for 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.find(users, 'active');
+ * // => object for 'barney'
+ */
+ function find(collection, predicate) {
+ predicate = baseIteratee(predicate, 3);
+ if (isArray(collection)) {
+ var index = baseFindIndex(collection, predicate);
+ return index > -1 ? collection[index] : undefined;
+ }
+ return baseFind(collection, predicate, baseEach);
+ }
+
+ module.exports = find;
+
+
+/***/ },
+/* 273 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseForOwn = __webpack_require__(274),
+ createBaseEach = __webpack_require__(277);
+
+ /**
+ * The base implementation of `_.forEach` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+ var baseEach = createBaseEach(baseForOwn);
+
+ module.exports = baseEach;
+
+
+/***/ },
+/* 274 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseFor = __webpack_require__(275),
+ keys = __webpack_require__(243);
+
+ /**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+ }
+
+ module.exports = baseForOwn;
+
+
+/***/ },
+/* 275 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var createBaseFor = __webpack_require__(276);
+
+ /**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseFor = createBaseFor();
+
+ module.exports = baseFor;
+
+
+/***/ },
+/* 276 */
+/***/ function(module, exports) {
+
+ /**
+ * Creates a base function for methods like `_.forIn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+ }
+
+ module.exports = createBaseFor;
+
+
+/***/ },
+/* 277 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArrayLike = __webpack_require__(232);
+
+ /**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee) {
+ if (collection == null) {
+ return collection;
+ }
+ if (!isArrayLike(collection)) {
+ return eachFunc(collection, iteratee);
+ }
+ var length = collection.length,
+ index = fromRight ? length : -1,
+ iterable = Object(collection);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+ }
+
+ module.exports = createBaseEach;
+
+
+/***/ },
+/* 278 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of methods like `_.find` and `_.findKey`, without
+ * support for iteratee shorthands, which iterates over `collection` using
+ * `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */
+ function baseFind(collection, predicate, eachFunc, retKey) {
+ var result;
+ eachFunc(collection, function(value, key, collection) {
+ if (predicate(value, key, collection)) {
+ result = retKey ? key : value;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ module.exports = baseFind;
+
+
+/***/ },
+/* 279 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseFindIndex(array, predicate, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = baseFindIndex;
+
+
+/***/ },
+/* 280 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseMatches = __webpack_require__(281),
+ baseMatchesProperty = __webpack_require__(333),
+ identity = __webpack_require__(347),
+ isArray = __webpack_require__(251),
+ property = __webpack_require__(348);
+
+ /**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+ function baseIteratee(value) {
+ var type = typeof value;
+ if (type == 'function') {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (type == 'object') {
+ return isArray(value)
+ ? baseMatchesProperty(value[0], value[1])
+ : baseMatches(value);
+ }
+ return property(value);
+ }
+
+ module.exports = baseIteratee;
+
+
+/***/ },
+/* 281 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsMatch = __webpack_require__(282),
+ getMatchData = __webpack_require__(328);
+
+ /**
+ * The base implementation of `_.matches` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ var key = matchData[0][0],
+ value = matchData[0][1];
+
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === value &&
+ (value !== undefined || (key in Object(object)));
+ };
+ }
+ return function(object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+ }
+
+ module.exports = baseMatches;
+
+
+/***/ },
+/* 282 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Stack = __webpack_require__(283),
+ baseIsEqual = __webpack_require__(314);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+ /**
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Array} matchData The property names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+ function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = Object(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack,
+ result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined;
+
+ if (!(result === undefined
+ ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ : result
+ )) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ module.exports = baseIsMatch;
+
+
+/***/ },
+/* 283 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var stackClear = __webpack_require__(284),
+ stackDelete = __webpack_require__(285),
+ stackGet = __webpack_require__(288),
+ stackHas = __webpack_require__(290),
+ stackSet = __webpack_require__(292);
+
+ /**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+ function Stack(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ // Add functions to the `Stack` cache.
+ Stack.prototype.clear = stackClear;
+ Stack.prototype['delete'] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+
+ module.exports = Stack;
+
+
+/***/ },
+/* 284 */
+/***/ function(module, exports) {
+
+ /**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+ function stackClear() {
+ this.__data__ = { 'array': [], 'map': null };
+ }
+
+ module.exports = stackClear;
+
+
+/***/ },
+/* 285 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocDelete = __webpack_require__(286);
+
+ /**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function stackDelete(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocDelete(array, key) : data.map['delete'](key);
+ }
+
+ module.exports = stackDelete;
+
+
+/***/ },
+/* 286 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocIndexOf = __webpack_require__(287);
+
+ /** Used for built-in method references. */
+ var arrayProto = Array.prototype;
+
+ /** Built-in value references. */
+ var splice = arrayProto.splice;
+
+ /**
+ * Removes `key` and its value from the associative array.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function assocDelete(array, key) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = array.length - 1;
+ if (index == lastIndex) {
+ array.pop();
+ } else {
+ splice.call(array, index, 1);
+ }
+ return true;
+ }
+
+ module.exports = assocDelete;
+
+
+/***/ },
+/* 287 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var eq = __webpack_require__(229);
+
+ /**
+ * Gets the index at which the first occurrence of `key` is found in `array`
+ * of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+
+ module.exports = assocIndexOf;
+
+
+/***/ },
+/* 288 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocGet = __webpack_require__(289);
+
+ /**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function stackGet(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocGet(array, key) : data.map.get(key);
+ }
+
+ module.exports = stackGet;
+
+
+/***/ },
+/* 289 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocIndexOf = __webpack_require__(287);
+
+ /**
+ * Gets the associative array value for `key`.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function assocGet(array, key) {
+ var index = assocIndexOf(array, key);
+ return index < 0 ? undefined : array[index][1];
+ }
+
+ module.exports = assocGet;
+
+
+/***/ },
+/* 290 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocHas = __webpack_require__(291);
+
+ /**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function stackHas(key) {
+ var data = this.__data__,
+ array = data.array;
+
+ return array ? assocHas(array, key) : data.map.has(key);
+ }
+
+ module.exports = stackHas;
+
+
+/***/ },
+/* 291 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocIndexOf = __webpack_require__(287);
+
+ /**
+ * Checks if an associative array value for `key` exists.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function assocHas(array, key) {
+ return assocIndexOf(array, key) > -1;
+ }
+
+ module.exports = assocHas;
+
+
+/***/ },
+/* 292 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var MapCache = __webpack_require__(293),
+ assocSet = __webpack_require__(312);
+
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache object.
+ */
+ function stackSet(key, value) {
+ var data = this.__data__,
+ array = data.array;
+
+ if (array) {
+ if (array.length < (LARGE_ARRAY_SIZE - 1)) {
+ assocSet(array, key, value);
+ } else {
+ data.array = null;
+ data.map = new MapCache(array);
+ }
+ }
+ var map = data.map;
+ if (map) {
+ map.set(key, value);
+ }
+ return this;
+ }
+
+ module.exports = stackSet;
+
+
+/***/ },
+/* 293 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var mapClear = __webpack_require__(294),
+ mapDelete = __webpack_require__(304),
+ mapGet = __webpack_require__(308),
+ mapHas = __webpack_require__(310),
+ mapSet = __webpack_require__(311);
+
+ /**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+ function MapCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = values[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ // Add functions to the `MapCache`.
+ MapCache.prototype.clear = mapClear;
+ MapCache.prototype['delete'] = mapDelete;
+ MapCache.prototype.get = mapGet;
+ MapCache.prototype.has = mapHas;
+ MapCache.prototype.set = mapSet;
+
+ module.exports = MapCache;
+
+
+/***/ },
+/* 294 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Hash = __webpack_require__(295),
+ Map = __webpack_require__(300);
+
+ /**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+ function mapClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': Map ? new Map : [],
+ 'string': new Hash
+ };
+ }
+
+ module.exports = mapClear;
+
+
+/***/ },
+/* 295 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var nativeCreate = __webpack_require__(296);
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Creates an hash object.
+ *
+ * @private
+ * @constructor
+ * @returns {Object} Returns the new hash object.
+ */
+ function Hash() {}
+
+ // Avoid inheriting from `Object.prototype` when possible.
+ Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
+
+ module.exports = Hash;
+
+
+/***/ },
+/* 296 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(297);
+
+ /* Built-in method references that are verified to be native. */
+ var nativeCreate = getNative(Object, 'create');
+
+ module.exports = nativeCreate;
+
+
+/***/ },
+/* 297 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isNative = __webpack_require__(298);
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+ }
+
+ module.exports = getNative;
+
+
+/***/ },
+/* 298 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isFunction = __webpack_require__(235),
+ isHostObject = __webpack_require__(299),
+ isObjectLike = __webpack_require__(250);
+
+ /** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+ /** Used to detect host constructors (Safari > 5). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = Function.prototype.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+ function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(funcToString.call(value));
+ }
+ return isObjectLike(value) &&
+ (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+ }
+
+ module.exports = isNative;
+
+
+/***/ },
+/* 299 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+ function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+ }
+
+ module.exports = isHostObject;
+
+
+/***/ },
+/* 300 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(297),
+ root = __webpack_require__(301);
+
+ /* Built-in method references that are verified to be native. */
+ var Map = getNative(root, 'Map');
+
+ module.exports = Map;
+
+
+/***/ },
+/* 301 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* WEBPACK VAR INJECTION */(function(module, global) {var checkGlobal = __webpack_require__(303);
+
+ /** Used to determine if values are of the language type `Object`. */
+ var objectTypes = {
+ 'function': true,
+ 'object': true
+ };
+
+ /** Detect free variable `exports`. */
+ var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)
+ ? exports
+ : undefined;
+
+ /** Detect free variable `module`. */
+ var freeModule = (objectTypes[typeof module] && module && !module.nodeType)
+ ? module
+ : undefined;
+
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);
+
+ /** Detect free variable `self`. */
+ var freeSelf = checkGlobal(objectTypes[typeof self] && self);
+
+ /** Detect free variable `window`. */
+ var freeWindow = checkGlobal(objectTypes[typeof window] && window);
+
+ /** Detect `this` as the global object. */
+ var thisGlobal = checkGlobal(objectTypes[typeof this] && this);
+
+ /**
+ * Used as a reference to the global object.
+ *
+ * The `this` value is used if it's the global object to avoid Greasemonkey's
+ * restricted `window` object, otherwise the `window` object is used.
+ */
+ var root = freeGlobal ||
+ ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||
+ freeSelf || thisGlobal || Function('return this')();
+
+ module.exports = root;
+
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(302)(module), (function() { return this; }())))
+
+/***/ },
+/* 302 */
+/***/ function(module, exports) {
+
+ module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ module.children = [];
+ module.webpackPolyfill = 1;
+ }
+ return module;
+ }
+
+
+/***/ },
+/* 303 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is a global object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {null|Object} Returns `value` if it's a global object, else `null`.
+ */
+ function checkGlobal(value) {
+ return (value && value.Object === Object) ? value : null;
+ }
+
+ module.exports = checkGlobal;
+
+
+/***/ },
+/* 304 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Map = __webpack_require__(300),
+ assocDelete = __webpack_require__(286),
+ hashDelete = __webpack_require__(305),
+ isKeyable = __webpack_require__(307);
+
+ /**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function mapDelete(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashDelete(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map['delete'](key) : assocDelete(data.map, key);
+ }
+
+ module.exports = mapDelete;
+
+
+/***/ },
+/* 305 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var hashHas = __webpack_require__(306);
+
+ /**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function hashDelete(hash, key) {
+ return hashHas(hash, key) && delete hash[key];
+ }
+
+ module.exports = hashDelete;
+
+
+/***/ },
+/* 306 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var nativeCreate = __webpack_require__(296);
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function hashHas(hash, key) {
+ return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);
+ }
+
+ module.exports = hashHas;
+
+
+/***/ },
+/* 307 */
+/***/ function(module, exports) {
+
+ /**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+ function isKeyable(value) {
+ var type = typeof value;
+ return type == 'number' || type == 'boolean' ||
+ (type == 'string' && value != '__proto__') || value == null;
+ }
+
+ module.exports = isKeyable;
+
+
+/***/ },
+/* 308 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Map = __webpack_require__(300),
+ assocGet = __webpack_require__(289),
+ hashGet = __webpack_require__(309),
+ isKeyable = __webpack_require__(307);
+
+ /**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function mapGet(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashGet(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.get(key) : assocGet(data.map, key);
+ }
+
+ module.exports = mapGet;
+
+
+/***/ },
+/* 309 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var nativeCreate = __webpack_require__(296);
+
+ /** Used to stand-in for `undefined` hash values. */
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @param {Object} hash The hash to query.
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function hashGet(hash, key) {
+ if (nativeCreate) {
+ var result = hash[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(hash, key) ? hash[key] : undefined;
+ }
+
+ module.exports = hashGet;
+
+
+/***/ },
+/* 310 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Map = __webpack_require__(300),
+ assocHas = __webpack_require__(291),
+ hashHas = __webpack_require__(306),
+ isKeyable = __webpack_require__(307);
+
+ /**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function mapHas(key) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ return hashHas(typeof key == 'string' ? data.string : data.hash, key);
+ }
+ return Map ? data.map.has(key) : assocHas(data.map, key);
+ }
+
+ module.exports = mapHas;
+
+
+/***/ },
+/* 311 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Map = __webpack_require__(300),
+ assocSet = __webpack_require__(312),
+ hashSet = __webpack_require__(313),
+ isKeyable = __webpack_require__(307);
+
+ /**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache object.
+ */
+ function mapSet(key, value) {
+ var data = this.__data__;
+ if (isKeyable(key)) {
+ hashSet(typeof key == 'string' ? data.string : data.hash, key, value);
+ } else if (Map) {
+ data.map.set(key, value);
+ } else {
+ assocSet(data.map, key, value);
+ }
+ return this;
+ }
+
+ module.exports = mapSet;
+
+
+/***/ },
+/* 312 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var assocIndexOf = __webpack_require__(287);
+
+ /**
+ * Sets the associative array `key` to `value`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+ function assocSet(array, key, value) {
+ var index = assocIndexOf(array, key);
+ if (index < 0) {
+ array.push([key, value]);
+ } else {
+ array[index][1] = value;
+ }
+ }
+
+ module.exports = assocSet;
+
+
+/***/ },
+/* 313 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var nativeCreate = __webpack_require__(296);
+
+ /** Used to stand-in for `undefined` hash values. */
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+ /**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ */
+ function hashSet(hash, key, value) {
+ hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ }
+
+ module.exports = hashSet;
+
+
+/***/ },
+/* 314 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsEqualDeep = __webpack_require__(315),
+ isObject = __webpack_require__(236),
+ isObjectLike = __webpack_require__(250);
+
+ /**
+ * The base implementation of `_.isEqual` which supports partial comparisons
+ * and tracks traversed objects.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {boolean} [bitmask] The bitmask of comparison flags.
+ * The bitmask may be composed of the following flags:
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+ function baseIsEqual(value, other, customizer, bitmask, stack) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
+ }
+
+ module.exports = baseIsEqual;
+
+
+/***/ },
+/* 315 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Stack = __webpack_require__(283),
+ equalArrays = __webpack_require__(316),
+ equalByTag = __webpack_require__(318),
+ equalObjects = __webpack_require__(323),
+ getTag = __webpack_require__(324),
+ isArray = __webpack_require__(251),
+ isHostObject = __webpack_require__(299),
+ isTypedArray = __webpack_require__(327);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var PARTIAL_COMPARE_FLAG = 2;
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ objectTag = '[object Object]';
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = arrayTag,
+ othTag = arrayTag;
+
+ if (!objIsArr) {
+ objTag = getTag(object);
+ if (objTag == argsTag) {
+ objTag = objectTag;
+ } else if (objTag != objectTag) {
+ objIsArr = isTypedArray(object);
+ }
+ }
+ if (!othIsArr) {
+ othTag = getTag(other);
+ if (othTag == argsTag) {
+ othTag = objectTag;
+ } else if (othTag != objectTag) {
+ othIsArr = isTypedArray(other);
+ }
+ }
+ var objIsObj = objTag == objectTag && !isHostObject(object),
+ othIsObj = othTag == objectTag && !isHostObject(other),
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && !(objIsArr || objIsObj)) {
+ return equalByTag(object, other, objTag, equalFunc, customizer, bitmask);
+ }
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ if (!isPartial) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ stack || (stack = new Stack);
+ return (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, bitmask, stack);
+ }
+
+ module.exports = baseIsEqualDeep;
+
+
+/***/ },
+/* 316 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arraySome = __webpack_require__(317);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details.
+ * @param {Object} [stack] Tracks traversed `array` and `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
+ var index = -1,
+ isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ isUnordered = bitmask & UNORDERED_COMPARE_FLAG,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(array);
+ if (stacked) {
+ return stacked == other;
+ }
+ var result = true;
+ stack.set(array, other);
+
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, arrValue, index, other, array, stack)
+ : customizer(arrValue, othValue, index, array, other, stack);
+ }
+ if (compared !== undefined) {
+ if (compared) {
+ continue;
+ }
+ result = false;
+ break;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (isUnordered) {
+ if (!arraySome(other, function(othValue) {
+ return arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack);
+ })) {
+ result = false;
+ break;
+ }
+ } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
+ result = false;
+ break;
+ }
+ }
+ stack['delete'](array);
+ return result;
+ }
+
+ module.exports = equalArrays;
+
+
+/***/ },
+/* 317 */
+/***/ function(module, exports) {
+
+ /**
+ * A specialized version of `_.some` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
+ */
+ function arraySome(array, predicate) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ module.exports = arraySome;
+
+
+/***/ },
+/* 318 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Symbol = __webpack_require__(319),
+ Uint8Array = __webpack_require__(320),
+ mapToArray = __webpack_require__(321),
+ setToArray = __webpack_require__(322);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+ /** `Object#toString` result references. */
+ var boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]';
+
+ var arrayBufferTag = '[object ArrayBuffer]';
+
+ /** Used to convert symbols to primitives and strings. */
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = Symbol ? symbolProto.valueOf : undefined;
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalByTag(object, other, tag, equalFunc, customizer, bitmask) {
+ switch (tag) {
+ case arrayBufferTag:
+ if ((object.byteLength != other.byteLength) ||
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+ return false;
+ }
+ return true;
+
+ case boolTag:
+ case dateTag:
+ // Coerce dates and booleans to numbers, dates to milliseconds and booleans
+ // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
+ return +object == +other;
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case numberTag:
+ // Treat `NaN` vs. `NaN` as equal.
+ return (object != +object) ? other != +other : object == +other;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings primitives and string
+ // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
+ return object == (other + '');
+
+ case mapTag:
+ var convert = mapToArray;
+
+ case setTag:
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ convert || (convert = setToArray);
+
+ // Recursively compare objects (susceptible to call stack limits).
+ return (isPartial || object.size == other.size) &&
+ equalFunc(convert(object), convert(other), customizer, bitmask | UNORDERED_COMPARE_FLAG);
+
+ case symbolTag:
+ return !!Symbol && (symbolValueOf.call(object) == symbolValueOf.call(other));
+ }
+ return false;
+ }
+
+ module.exports = equalByTag;
+
+
+/***/ },
+/* 319 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var root = __webpack_require__(301);
+
+ /** Built-in value references. */
+ var Symbol = root.Symbol;
+
+ module.exports = Symbol;
+
+
+/***/ },
+/* 320 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var root = __webpack_require__(301);
+
+ /** Built-in value references. */
+ var Uint8Array = root.Uint8Array;
+
+ module.exports = Uint8Array;
+
+
+/***/ },
+/* 321 */
+/***/ function(module, exports) {
+
+ /**
+ * Converts `map` to an array.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+
+ module.exports = mapToArray;
+
+
+/***/ },
+/* 322 */
+/***/ function(module, exports) {
+
+ /**
+ * Converts `set` to an array.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the converted array.
+ */
+ function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+
+ module.exports = setToArray;
+
+
+/***/ },
+/* 323 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseHas = __webpack_require__(244),
+ keys = __webpack_require__(243);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var PARTIAL_COMPARE_FLAG = 2;
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ objProps = keys(object),
+ objLength = objProps.length,
+ othProps = keys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isPartial) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isPartial ? key in other : baseHas(other, key))) {
+ return false;
+ }
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked) {
+ return stacked == other;
+ }
+ var result = true;
+ stack.set(object, other);
+
+ var skipCtor = isPartial;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, objValue, key, other, object, stack)
+ : customizer(objValue, othValue, key, object, other, stack);
+ }
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(compared === undefined
+ ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
+ : compared
+ )) {
+ result = false;
+ break;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (result && !skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
+
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ result = false;
+ }
+ }
+ stack['delete'](object);
+ return result;
+ }
+
+ module.exports = equalObjects;
+
+
+/***/ },
+/* 324 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Map = __webpack_require__(300),
+ Set = __webpack_require__(325),
+ WeakMap = __webpack_require__(326);
+
+ /** `Object#toString` result references. */
+ var mapTag = '[object Map]',
+ objectTag = '[object Object]',
+ setTag = '[object Set]',
+ weakMapTag = '[object WeakMap]';
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = Function.prototype.toString;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objectToString = objectProto.toString;
+
+ /** Used to detect maps, sets, and weakmaps. */
+ var mapCtorString = Map ? funcToString.call(Map) : '',
+ setCtorString = Set ? funcToString.call(Set) : '',
+ weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : '';
+
+ /**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ function getTag(value) {
+ return objectToString.call(value);
+ }
+
+ // Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps.
+ if ((Map && getTag(new Map) != mapTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : null,
+ ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : '';
+
+ if (ctorString) {
+ switch (ctorString) {
+ case mapCtorString: return mapTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+ }
+
+ module.exports = getTag;
+
+
+/***/ },
+/* 325 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(297),
+ root = __webpack_require__(301);
+
+ /* Built-in method references that are verified to be native. */
+ var Set = getNative(root, 'Set');
+
+ module.exports = Set;
+
+
+/***/ },
+/* 326 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var getNative = __webpack_require__(297),
+ root = __webpack_require__(301);
+
+ /* Built-in method references that are verified to be native. */
+ var WeakMap = getNative(root, 'WeakMap');
+
+ module.exports = WeakMap;
+
+
+/***/ },
+/* 327 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isLength = __webpack_require__(237),
+ isObjectLike = __webpack_require__(250);
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ weakMapTag = '[object WeakMap]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /** Used to identify `toStringTag` values of typed arrays. */
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+ typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+ typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+ typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+ typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+ typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+ typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objectToString = objectProto.toString;
+
+ /**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+ function isTypedArray(value) {
+ return isObjectLike(value) &&
+ isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
+ }
+
+ module.exports = isTypedArray;
+
+
+/***/ },
+/* 328 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isStrictComparable = __webpack_require__(329),
+ toPairs = __webpack_require__(330);
+
+ /**
+ * Gets the property names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+ function getMatchData(object) {
+ var result = toPairs(object),
+ length = result.length;
+
+ while (length--) {
+ result[length][2] = isStrictComparable(result[length][1]);
+ }
+ return result;
+ }
+
+ module.exports = getMatchData;
+
+
+/***/ },
+/* 329 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObject = __webpack_require__(236);
+
+ /**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+
+ module.exports = isStrictComparable;
+
+
+/***/ },
+/* 330 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseToPairs = __webpack_require__(331),
+ keys = __webpack_require__(243);
+
+ /**
+ * Creates an array of own enumerable key-value pairs for `object` which
+ * can be consumed by `_.fromPairs`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the new array of key-value pairs.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.toPairs(new Foo);
+ * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
+ */
+ function toPairs(object) {
+ return baseToPairs(object, keys(object));
+ }
+
+ module.exports = toPairs;
+
+
+/***/ },
+/* 331 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayMap = __webpack_require__(332);
+
+ /**
+ * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
+ * of key-value pairs for `object` corresponding to the property names of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the new array of key-value pairs.
+ */
+ function baseToPairs(object, props) {
+ return arrayMap(props, function(key) {
+ return [key, object[key]];
+ });
+ }
+
+ module.exports = baseToPairs;
+
+
+/***/ },
+/* 332 */
+/***/ function(module, exports) {
+
+ /**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+ }
+
+ module.exports = arrayMap;
+
+
+/***/ },
+/* 333 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseIsEqual = __webpack_require__(314),
+ get = __webpack_require__(334),
+ hasIn = __webpack_require__(341);
+
+ /** Used to compose bitmasks for comparison styles. */
+ var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+ /**
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatchesProperty(path, srcValue) {
+ return function(object) {
+ var objValue = get(object, path);
+ return (objValue === undefined && objValue === srcValue)
+ ? hasIn(object, path)
+ : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
+ };
+ }
+
+ module.exports = baseMatchesProperty;
+
+
+/***/ },
+/* 334 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseGet = __webpack_require__(335);
+
+ /**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined` the `defaultValue` is used in its place.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+ function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
+ }
+
+ module.exports = get;
+
+
+/***/ },
+/* 335 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseCastPath = __webpack_require__(336),
+ isKey = __webpack_require__(340);
+
+ /**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseGet(object, path) {
+ path = isKey(path, object) ? [path + ''] : baseCastPath(path);
+
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[path[index++]];
+ }
+ return (index && index == length) ? object : undefined;
+ }
+
+ module.exports = baseGet;
+
+
+/***/ },
+/* 336 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArray = __webpack_require__(251),
+ stringToPath = __webpack_require__(337);
+
+ /**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast property path array.
+ */
+ function baseCastPath(value) {
+ return isArray(value) ? value : stringToPath(value);
+ }
+
+ module.exports = baseCastPath;
+
+
+/***/ },
+/* 337 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var toString = __webpack_require__(338);
+
+ /** Used to match property names within property paths. */
+ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g;
+
+ /** Used to match backslashes in property paths. */
+ var reEscapeChar = /\\(\\)?/g;
+
+ /**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+ function stringToPath(string) {
+ var result = [];
+ toString(string).replace(rePropName, function(match, number, quote, string) {
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+ }
+
+ module.exports = stringToPath;
+
+
+/***/ },
+/* 338 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var Symbol = __webpack_require__(319),
+ isSymbol = __webpack_require__(339);
+
+ /** Used as references for various `Number` constants. */
+ var INFINITY = 1 / 0;
+
+ /** Used to convert symbols to primitives and strings. */
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolToString = Symbol ? symbolProto.toString : undefined;
+
+ /**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+ function toString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (value == null) {
+ return '';
+ }
+ if (isSymbol(value)) {
+ return Symbol ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+ }
+
+ module.exports = toString;
+
+
+/***/ },
+/* 339 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isObjectLike = __webpack_require__(250);
+
+ /** `Object#toString` result references. */
+ var symbolTag = '[object Symbol]';
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objectToString = objectProto.toString;
+
+ /**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+ function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
+ }
+
+ module.exports = isSymbol;
+
+
+/***/ },
+/* 340 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var isArray = __webpack_require__(251);
+
+ /** Used to match property names within property paths. */
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/;
+
+ /**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+ function isKey(value, object) {
+ if (typeof value == 'number') {
+ return true;
+ }
+ return !isArray(value) &&
+ (reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+ (object != null && value in Object(object)));
+ }
+
+ module.exports = isKey;
+
+
+/***/ },
+/* 341 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseHasIn = __webpack_require__(342),
+ hasPath = __webpack_require__(343);
+
+ /**
+ * Checks if `path` is a direct or inherited property of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = _.create({ 'a': _.create({ 'b': _.create({ 'c': 3 }) }) });
+ *
+ * _.hasIn(object, 'a');
+ * // => true
+ *
+ * _.hasIn(object, 'a.b.c');
+ * // => true
+ *
+ * _.hasIn(object, ['a', 'b', 'c']);
+ * // => true
+ *
+ * _.hasIn(object, 'b');
+ * // => false
+ */
+ function hasIn(object, path) {
+ return hasPath(object, path, baseHasIn);
+ }
+
+ module.exports = hasIn;
+
+
+/***/ },
+/* 342 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.hasIn` without support for deep paths.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+ function baseHasIn(object, key) {
+ return key in Object(object);
+ }
+
+ module.exports = baseHasIn;
+
+
+/***/ },
+/* 343 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseCastPath = __webpack_require__(336),
+ isArguments = __webpack_require__(248),
+ isArray = __webpack_require__(251),
+ isIndex = __webpack_require__(238),
+ isKey = __webpack_require__(340),
+ isLength = __webpack_require__(237),
+ isString = __webpack_require__(252),
+ last = __webpack_require__(344),
+ parent = __webpack_require__(345);
+
+ /**
+ * Checks if `path` exists on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @param {Function} hasFunc The function to check properties.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ */
+ function hasPath(object, path, hasFunc) {
+ if (object == null) {
+ return false;
+ }
+ var result = hasFunc(object, path);
+ if (!result && !isKey(path)) {
+ path = baseCastPath(path);
+ object = parent(object, path);
+ if (object != null) {
+ path = last(path);
+ result = hasFunc(object, path);
+ }
+ }
+ var length = object ? object.length : undefined;
+ return result || (
+ !!length && isLength(length) && isIndex(path, length) &&
+ (isArray(object) || isString(object) || isArguments(object))
+ );
+ }
+
+ module.exports = hasPath;
+
+
+/***/ },
+/* 344 */
+/***/ function(module, exports) {
+
+ /**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+ function last(array) {
+ var length = array ? array.length : 0;
+ return length ? array[length - 1] : undefined;
+ }
+
+ module.exports = last;
+
+
+/***/ },
+/* 345 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseSlice = __webpack_require__(346),
+ get = __webpack_require__(334);
+
+ /**
+ * Gets the parent value at `path` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path to get the parent value of.
+ * @returns {*} Returns the parent value.
+ */
+ function parent(object, path) {
+ return path.length == 1 ? object : get(object, baseSlice(path, 0, -1));
+ }
+
+ module.exports = parent;
+
+
+/***/ },
+/* 346 */
+/***/ function(module, exports) {
+
+ /**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = end > length ? length : end;
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : ((end - start) >>> 0);
+ start >>>= 0;
+
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+ return result;
+ }
+
+ module.exports = baseSlice;
+
+
+/***/ },
+/* 347 */
+/***/ function(module, exports) {
+
+ /**
+ * This method returns the first argument given to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Util
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ module.exports = identity;
+
+
+/***/ },
+/* 348 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseProperty = __webpack_require__(234),
+ basePropertyDeep = __webpack_require__(349),
+ isKey = __webpack_require__(340);
+
+ /**
+ * Creates a function that returns the value at `path` of a given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Util
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': 2 } } },
+ * { 'a': { 'b': { 'c': 1 } } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.map(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */
+ function property(path) {
+ return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
+ }
+
+ module.exports = property;
+
+
+/***/ },
+/* 349 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseGet = __webpack_require__(335);
+
+ /**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function basePropertyDeep(path) {
+ return function(object) {
+ return baseGet(object, path);
+ };
+ }
+
+ module.exports = basePropertyDeep;
+
+
+/***/ },
+/* 350 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayFilter = __webpack_require__(351),
+ baseFilter = __webpack_require__(352),
+ baseIteratee = __webpack_require__(280),
+ isArray = __webpack_require__(251);
+
+ /**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.filter(users, { 'age': 36, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.filter(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.filter(users, 'active');
+ * // => objects for ['barney']
+ */
+ function filter(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, baseIteratee(predicate, 3));
+ }
+
+ module.exports = filter;
+
+
+/***/ },
+/* 351 */
+/***/ function(module, exports) {
+
+ /**
+ * A specialized version of `_.filter` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function arrayFilter(array, predicate) {
+ var index = -1,
+ length = array.length,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result[++resIndex] = value;
+ }
+ }
+ return result;
+ }
+
+ module.exports = arrayFilter;
+
+
+/***/ },
+/* 352 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseEach = __webpack_require__(273);
+
+ /**
+ * The base implementation of `_.filter` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function baseFilter(collection, predicate) {
+ var result = [];
+ baseEach(collection, function(value, index, collection) {
+ if (predicate(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ return result;
+ }
+
+ module.exports = baseFilter;
+
+
+/***/ },
+/* 353 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseFindIndex = __webpack_require__(279),
+ baseIteratee = __webpack_require__(280);
+
+ /**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked per iteration.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
+ * // => 0
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findIndex(users, ['active', false]);
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+ function findIndex(array, predicate) {
+ return (array && array.length)
+ ? baseFindIndex(array, baseIteratee(predicate, 3))
+ : -1;
+ }
+
+ module.exports = findIndex;
+
+
+/***/ },
+/* 354 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var arrayMap = __webpack_require__(332),
+ baseIteratee = __webpack_require__(280),
+ baseMap = __webpack_require__(355),
+ isArray = __webpack_require__(251);
+
+ /**
+ * Creates an array of values by running each element in `collection` through
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, `fill`,
+ * `invert`, `parseInt`, `random`, `range`, `rangeRight`, `slice`, `some`,
+ * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimEnd`, `trimStart`,
+ * and `words`
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * _.map([4, 8], square);
+ * // => [16, 64]
+ *
+ * _.map({ 'a': 4, 'b': 8 }, square);
+ * // => [16, 64] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */
+ function map(collection, iteratee) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ return func(collection, baseIteratee(iteratee, 3));
+ }
+
+ module.exports = map;
+
+
+/***/ },
+/* 355 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseEach = __webpack_require__(273),
+ isArrayLike = __webpack_require__(232);
+
+ /**
+ * The base implementation of `_.map` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function baseMap(collection, iteratee) {
+ var index = -1,
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value, key, collection) {
+ result[++index] = iteratee(value, key, collection);
+ });
+ return result;
+ }
+
+ module.exports = baseMap;
+
+
+/***/ },
+/* 356 */
+/***/ function(module, exports, __webpack_require__) {
+
+ var baseCastPath = __webpack_require__(336),
+ get = __webpack_require__(334),
+ isFunction = __webpack_require__(235),
+ isKey = __webpack_require__(340),
+ parent = __webpack_require__(345);
+
+ /**
+ * This method is like `_.get` except that if the resolved value is a function
+ * it's invoked with the `this` binding of its parent object and its result
+ * is returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to resolve.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+ *
+ * _.result(object, 'a[0].b.c1');
+ * // => 3
+ *
+ * _.result(object, 'a[0].b.c2');
+ * // => 4
+ *
+ * _.result(object, 'a[0].b.c3', 'default');
+ * // => 'default'
+ *
+ * _.result(object, 'a[0].b.c3', _.constant('default'));
+ * // => 'default'
+ */
+ function result(object, path, defaultValue) {
+ if (!isKey(path, object)) {
+ path = baseCastPath(path);
+ var result = get(object, path);
+ object = parent(object, path);
+ } else {
+ result = object == null ? undefined : object[path];
+ }
+ if (result === undefined) {
+ result = defaultValue;
+ }
+ return isFunction(result) ? result.call(object) : result;
+ }
+
+ module.exports = result;
+
+
+/***/ },
+/* 357 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ /** @ssr-ready **/
+
+ /**
+ * External Dependencies
+ */
+ var React = __webpack_require__(4),
+ classNames = __webpack_require__(254);
+
+ /**
+ * Internal dependencies
+ */
+ var Count = __webpack_require__(358);
+
+ var SelectDropdownItem = React.createClass({
+ displayName: 'SelectDropdownItem',
+
+ propTypes: {
+ children: React.PropTypes.string.isRequired,
+ path: React.PropTypes.string,
+ selected: React.PropTypes.bool,
+ onClick: React.PropTypes.func,
+ count: React.PropTypes.number
+ },
+
+ getDefaultProps: function getDefaultProps() {
+ return {
+ selected: false
+ };
+ },
+
+ render: function render() {
+ var optionClassName = classNames(this.props.className, {
+ 'dops-select-dropdown__item': true,
+ 'is-selected': this.props.selected,
+ 'is-disabled': this.props.disabled
+ });
+
+ return React.createElement(
+ 'li',
+ { className: 'dops-select-dropdown__option' },
+ React.createElement(
+ 'a',
+ {
+ ref: 'itemLink',
+ href: this.props.path,
+ className: optionClassName,
+ onClick: this.props.disabled ? null : this.props.onClick,
+ 'data-bold-text': this.props.value || this.props.children,
+ role: 'menuitem',
+ tabIndex: 0,
+ 'aria-selected': this.props.selected },
+ React.createElement(
+ 'span',
+ { className: 'dops-select-dropdown__item-text' },
+ this.props.children,
+ 'number' === typeof this.props.count && React.createElement(Count, { count: this.props.count })
+ )
+ )
+ );
+ }
+ });
+
+ module.exports = SelectDropdownItem;
+
+/***/ },
+/* 358 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+
+ var _react = __webpack_require__(4);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ var _mixin = __webpack_require__(359);
+
+ var _mixin2 = _interopRequireDefault(_mixin);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ /** @ssr-ready **/
+
+ /**
+ * External dependencies
+ */
+ __webpack_require__(362);
+
+ exports.default = _react2.default.createClass({
+
+ displayName: 'Count',
+
+ mixins: [_mixin2.default],
+
+ propTypes: {
+ count: _react2.default.PropTypes.number.isRequired
+ },
+
+ render: function render() {
+ return _react2.default.createElement(
+ 'span',
+ { className: 'dops-count' },
+ this.numberFormat(this.props.count)
+ );
+ }
+ });
+ module.exports = exports['default'];
+
+/***/ },
+/* 359 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _function = __webpack_require__(360);
+
+ var _function2 = _interopRequireDefault(_function);
+
+ exports['default'] = {
+ shouldComponentUpdate: _function2['default']
+ };
+ module.exports = exports['default'];
+
+/***/ },
+/* 360 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports['default'] = shouldPureComponentUpdate;
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+ var _shallowEqual = __webpack_require__(361);
+
+ var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
+
+ function shouldPureComponentUpdate(nextProps, nextState) {
+ return !(0, _shallowEqual2['default'])(this.props, nextProps) || !(0, _shallowEqual2['default'])(this.state, nextState);
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 361 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports['default'] = shallowEqual;
+
+ function shallowEqual(objA, objB) {
+ if (objA === objB) {
+ return true;
+ }
+
+ if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
+ return false;
+ }
+
+ var keysA = Object.keys(objA);
+ var keysB = Object.keys(objB);
+
+ if (keysA.length !== keysB.length) {
+ return false;
+ }
+
+ // Test for A's keys different from B.
+ var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
+ for (var i = 0; i < keysA.length; i++) {
+ if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 362 */
+/***/ function(module, exports) {
+
+ // removed by extract-text-webpack-plugin
+
+/***/ },
+/* 363 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ /** @ssr-ready **/
+
+ /**
+ * External Dependencies
+ */
+ var React = __webpack_require__(4);
+
+ var SelectDropdownSeparator = React.createClass({
+ displayName: "SelectDropdownSeparator",
+
+
+ render: function render() {
+ return React.createElement("li", { className: "dops-select-dropdown__separator" });
+ }
+ });
+
+ module.exports = SelectDropdownSeparator;
+
+/***/ },
+/* 364 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true
+ });
+
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+ var _react = __webpack_require__(4);
+
+ var _react2 = _interopRequireDefault(_react);
+
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** @ssr-ready **/
+
+ /**
+ * External Dependencies
+ */
+
+
+ /**
+ * Module variables
+ */
+ var Component = _react2.default.Component;
+
+ var stopPropagation = function stopPropagation(event) {
+ return event.stopPropagation();
+ };
+
+ var SelectDropdownLabel = function (_Component) {
+ _inherits(SelectDropdownLabel, _Component);
+
+ function SelectDropdownLabel() {
+ _classCallCheck(this, SelectDropdownLabel);
+
+ return _possibleConstructorReturn(this, (SelectDropdownLabel.__proto__ || Object.getPrototypeOf(SelectDropdownLabel)).apply(this, arguments));
+ }
+
+ _createClass(SelectDropdownLabel, [{
+ key: "render",
+ value: function render() {
+ return _react2.default.createElement(
+ "li",
+ {
+ onClick: stopPropagation,
+ className: "dops-select-dropdown__label"
+ },
+ _react2.default.createElement(
+ "label",
+ null,
+ this.props.children
+ )
+ );
+ }
+ }]);
+
+ return SelectDropdownLabel;
+ }(Component);
+
+ exports.default = SelectDropdownLabel;
+ ;
+ module.exports = exports["default"];
+
+/***/ },
+/* 365 */
+/***/ function(module, exports) {
+
+ // removed by extract-text-webpack-plugin
+
+/***/ },
+/* 366 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var React = __webpack_require__(4),
+ Button = __webpack_require__(224),
+ SiteStore = __webpack_require__(215),
+ Paths = __webpack_require__(175),
+ Dashicon = __webpack_require__(367),
+ SetupProgressActions = __webpack_require__(174),
+ WelcomeSection = __webpack_require__(259);
+
+ function getSiteState() {
+ return {
+ site_title: SiteStore.getTitle(),
+ contactUrl: SiteStore.getContactPageEditURL(),
+ welcomeUrl: SiteStore.getWelcomePageEditURL(),
+ newsUrl: SiteStore.getNewsPageEditURL(),
+ isJPConnected: SiteStore.getJetpackConfigured(),
+ layout: SiteStore.getLayout(),
+ wooCommerceStatus: SiteStore.getWooCommerceStatus(),
+ wooCommerceSetupUrl: SiteStore.getWooCommerceSetupUrl(),
+ pluginsUrl: SiteStore.getPluginsUrl()
+ };
+ }
+
+ var AdvancedSettingsStep = React.createClass({
+ displayName: 'AdvancedSettingsStep',
+
+
+ getInitialState: function getInitialState() {
+ return getSiteState();
+ },
+
+ componentDidMount: function componentDidMount() {
+ SiteStore.addChangeListener(this._onChange);
+ },
+
+ componentWillUnmount: function componentWillUnmount() {
+ SiteStore.removeChangeListener(this._onChange);
+ },
+
+ _onChange: function _onChange() {
+ this.setState(getSiteState());
+ },
+
+ handleSkipTo: function handleSkipTo(slug, event) {
+ event.preventDefault();
+ SetupProgressActions.setCurrentStep(slug);
+ },
+
+ handleDismiss: function handleDismiss(event) {
+ event.preventDefault();
+ SetupProgressActions.closeJPO();
+ },
+
+ renderWooCommerceStatus: function renderWooCommerceStatus() {
+ var _JPS$bloginfo = JPS.bloginfo,
+ is_shop = _JPS$bloginfo.is_shop,
+ type = _JPS$bloginfo.type;
+
+ if (type !== 'business') {
+ return null;
+ }
+
+ if (this.state.wooCommerceStatus) {
+ return React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'yes' }),
+ ' WooCommerce Installed! ',
+ React.createElement(
+ 'a',
+ { href: this.state.wooCommerceSetupUrl },
+ 'Set up shop'
+ )
+ );
+ } else if (!is_shop) {
+ return React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'no' }),
+ ' WooCommerce not installed. ',
+ React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.WOOCOMMERCE_SLUG) },
+ 'Install WooCommerce?'
+ )
+ );
+ } else {
+ return React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'no' }),
+ ' Error installing WooCommerce ',
+ React.createElement(
+ 'a',
+ { href: this.state.pluginsUrl },
+ 'Try manual installation'
+ )
+ );
+ }
+ },
+
+ render: function render() {
+ var contactProps = {};
+ if (this.state.contactUrl) {
+ contactProps.href = this.state.contactUrl;
+ } else {
+ contactProps.href = '#';
+ contactProps.onClick = this.handleSkipTo.bind(this, Paths.CONTACT_PAGE_STEP_SLUG);
+ }
+ return React.createElement(
+ WelcomeSection,
+ { id: 'welcome__review' },
+ React.createElement(
+ 'div',
+ { className: 'welcome__dismiss' },
+ React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleDismiss },
+ React.createElement(Dashicon, { name: 'dismiss' }),
+ React.createElement(
+ 'span',
+ { className: 'screen-reader-text' },
+ 'Dismiss'
+ )
+ )
+ ),
+ React.createElement(
+ 'h1',
+ null,
+ 'Let\'s launch ',
+ React.createElement(
+ 'em',
+ null,
+ this.state.site_title
+ )
+ ),
+ React.createElement(
+ 'p',
+ { className: 'welcome__callout welcome__review--callout' },
+ 'Great Work!'
+ ),
+ React.createElement(
+ 'div',
+ { className: 'welcome__review-cols' },
+ React.createElement(
+ 'div',
+ { className: 'welcome__review-col' },
+ React.createElement(
+ 'ul',
+ { className: 'welcome__review-list' },
+ React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'yes' }),
+ ' Title and description ',
+ React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.SITE_TITLE_STEP_SLUG) },
+ '(edit)'
+ )
+ ),
+ React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'yes' }),
+ ' Homepage layout ',
+ React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.IS_BLOG_STEP_SLUG) },
+ '(edit)'
+ ),
+ this.state.layout !== 'blog' ? React.createElement(
+ 'ul',
+ null,
+ React.createElement(
+ 'li',
+ null,
+ React.createElement(
+ 'a',
+ { href: this.state.welcomeUrl },
+ 'Edit your Welcome page'
+ )
+ ),
+ this.state.layout !== 'website' ? React.createElement(
+ 'li',
+ null,
+ React.createElement(
+ 'a',
+ { href: this.state.newsUrl },
+ 'Edit your News and Updates page'
+ )
+ ) : null
+ ) : null
+ ),
+ React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'yes' }),
+ ' ',
+ React.createElement(
+ 'em',
+ null,
+ 'Contact Us'
+ ),
+ ' page ',
+ React.createElement(
+ 'a',
+ contactProps,
+ '(edit)'
+ ),
+ !this.state.isJPConnected ? React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
+ ' Requires a Jetpack Connection '
+ ) : null
+ ),
+ React.createElement(
+ 'li',
+ null,
+ React.createElement(Dashicon, { name: 'yes' }),
+ this.state.isJPConnected ? React.createElement(
+ 'a',
+ { href: JPS.steps.advanced_settings.jetpack_dash },
+ 'Jetpack: '
+ ) : React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
+ 'Connect Jetpack: '
+ ),
+ 'increase visitors and improve security'
+ ),
+ JPS.bloginfo.type === 'business' ? React.createElement(
+ 'li',
+ null,
+ JPS.steps.business_address ? React.createElement(Dashicon, { name: 'yes' }) : React.createElement(Dashicon, { name: 'no' }),
+ ' ',
+ React.createElement(
+ 'em',
+ null,
+ 'Business Address'
+ ),
+ ' page ',
+ React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.BUSINESS_ADDRESS_SLUG) },
+ '(edit)'
+ ),
+ !this.state.isJPConnected ? React.createElement(
+ 'a',
+ { href: '#', onClick: this.handleSkipTo.bind(this, Paths.JETPACK_MODULES_STEP_SLUG) },
+ ' Requires a Jetpack Connection '
+ ) : null
+ ) : null,
+ this.renderWooCommerceStatus()
+ )
+ ),
+ React.createElement(
+ 'div',
+ { className: 'welcome__review-col welcome__review-themes' },
+ React.createElement('img', { src: JPS.base_url + '/img/jpo-themes.png' }),
+ React.createElement(
+ 'p',
+ null,
+ React.createElement(
+ Button,
+ { href: JPS.steps.advanced_settings.customize_url },
+ 'Customize your site'
+ )
+ )
+ )
+ )
+ );
+ }
+ });
+
+ module.exports = AdvancedSettingsStep;
+
+/***/ },
+/* 367 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
var _extends2 = __webpack_require__(260);
var _extends3 = _interopRequireDefault(_extends2);